diff --git a/Android.bp b/Android.bp
index b8cd7b3..dca9aba 100644
--- a/Android.bp
+++ b/Android.bp
@@ -15,11 +15,30 @@
     ],
 }
 
+cc_library_headers {
+    name: "vmlinux15_6.6",
+    arch: {
+        arm: {
+            export_include_dirs: ["include/vmlinux/android15_6.6/arm64"],
+        },
+        arm64: {
+            export_include_dirs: ["include/vmlinux/android15_6.6/arm64"],
+        },
+        x86: {
+            export_include_dirs: ["include/vmlinux/android15_6.6/x86_64"],
+        },
+        x86_64: {
+            export_include_dirs: ["include/vmlinux/android15_6.6/x86_64"],
+        },
+    },
+}
+
 cc_defaults {
-    name: "bpf_defaults",
+    name: "bpf_cc_defaults",
     cflags: [
         "-Wall",
         "-Werror",
+        "-Wextra",
         "-Wnullable-to-nonnull-conversion",
         "-Wthread-safety",
         "-Wunused-parameter",
diff --git a/include/vmlinux/README b/include/vmlinux/README
new file mode 100644
index 0000000..1021e05
--- /dev/null
+++ b/include/vmlinux/README
@@ -0,0 +1,11 @@
+These vmlinux.h files are manually generated using the following command:
+
+bpftool btf dump file <path/to/vmlinux> format c > vmlinux.h
+
+In the future, it would be good to create the infrastructure to periodically update this to a version with the latest tracking kernel.
+
+These vmlinux.h files are used for bpf programs leveraging CO-RE to access internal kernel data structures. They do not need to track the target kernel perfectly, but if fields are added to an internal kernel data structure, they must be regenerated before these fields are used.
+
+Similarly, the BPF programs which use vmlinux.h should be compiled against a vmlinux.h file which is generated from the vmlinux of the same architecture. On Android, this is not a problem for arm64 or x86_64 architectures, as the 64bit system userspace matches the 64bit kernel.
+
+However, for 32 bit Android userspace, either arm or x86, we currently have no way to determine at build time if the kernel we will be running on will be 32bit or 64bit. For this reason, we default to 32bit userspace running on 64bit kernel, and therefore loading libbpf programs will be disabled at runtime for systems with 32bit kernels.
diff --git a/include/vmlinux/android15_6.6/arm64/vmlinux.h b/include/vmlinux/android15_6.6/arm64/vmlinux.h
new file mode 100644
index 0000000..674f201
--- /dev/null
+++ b/include/vmlinux/android15_6.6/arm64/vmlinux.h
@@ -0,0 +1,145619 @@
+#ifndef __VMLINUX_H__
+#define __VMLINUX_H__
+
+#ifndef BPF_NO_PRESERVE_ACCESS_INDEX
+#pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)
+#endif
+
+typedef struct {
+	int counter;
+} atomic_t;
+
+struct jump_entry;
+
+struct static_key_mod;
+
+struct static_key {
+	atomic_t enabled;
+	union {
+		unsigned long type;
+		struct jump_entry *entries;
+		struct static_key_mod *next;
+	};
+};
+
+struct static_call_key;
+
+struct tracepoint_func;
+
+struct tracepoint {
+	const char *name;
+	struct static_key key;
+	struct static_call_key *static_call_key;
+	void *static_call_tramp;
+	void *iterator;
+	void *probestub;
+	int (*regfunc)();
+	void (*unregfunc)();
+	struct tracepoint_func __attribute__((btf_type_tag("rcu"))) *funcs;
+};
+
+typedef int __s32;
+
+typedef __s32 s32;
+
+struct jump_entry {
+	s32 code;
+	s32 target;
+	long key;
+};
+
+struct static_call_key {
+	void *func;
+};
+
+struct tracepoint_func {
+	void *func;
+	void *data;
+	int prio;
+};
+
+enum trace_reg {
+	TRACE_REG_REGISTER = 0,
+	TRACE_REG_UNREGISTER = 1,
+	TRACE_REG_PERF_REGISTER = 2,
+	TRACE_REG_PERF_UNREGISTER = 3,
+	TRACE_REG_PERF_OPEN = 4,
+	TRACE_REG_PERF_CLOSE = 5,
+	TRACE_REG_PERF_ADD = 6,
+	TRACE_REG_PERF_DEL = 7,
+};
+
+struct list_head {
+	struct list_head *next;
+	struct list_head *prev;
+};
+
+struct trace_event_call;
+
+struct trace_event_fields;
+
+struct trace_event_class {
+	const char *system;
+	void *probe;
+	void *perf_probe;
+	int (*reg)(struct trace_event_call *, enum trace_reg, void *);
+	struct trace_event_fields *fields_array;
+	struct list_head * (*get_fields)(struct trace_event_call *);
+	struct list_head fields;
+	int (*raw_init)(struct trace_event_call *);
+};
+
+struct hlist_node {
+	struct hlist_node *next;
+	struct hlist_node **pprev;
+};
+
+struct trace_event_functions;
+
+struct trace_event {
+	struct hlist_node node;
+	int type;
+	struct trace_event_functions *funcs;
+};
+
+struct event_filter;
+
+struct hlist_head;
+
+struct bpf_prog_array;
+
+struct perf_event;
+
+struct trace_event_call {
+	struct list_head list;
+	struct trace_event_class *class;
+	union {
+		char *name;
+		struct tracepoint *tp;
+	};
+	struct trace_event event;
+	char *print_fmt;
+	struct event_filter *filter;
+	union {
+		void *module;
+		atomic_t refcnt;
+	};
+	void *data;
+	int flags;
+	int perf_refcount;
+	struct hlist_head __attribute__((btf_type_tag("percpu"))) *perf_events;
+	struct bpf_prog_array __attribute__((btf_type_tag("rcu"))) *prog_array;
+	int (*perf_perm)(struct trace_event_call *, struct perf_event *);
+};
+
+enum print_line_t {
+	TRACE_TYPE_PARTIAL_LINE = 0,
+	TRACE_TYPE_HANDLED = 1,
+	TRACE_TYPE_UNHANDLED = 2,
+	TRACE_TYPE_NO_CONSUME = 3,
+};
+
+struct trace_iterator;
+
+typedef enum print_line_t (*trace_print_func)(struct trace_iterator *, int, struct trace_event *);
+
+struct trace_event_functions {
+	trace_print_func trace;
+	trace_print_func raw;
+	trace_print_func hex;
+	trace_print_func binary;
+};
+
+typedef long long __s64;
+
+typedef __s64 s64;
+
+typedef struct {
+	s64 counter;
+} atomic64_t;
+
+typedef atomic64_t atomic_long_t;
+
+typedef unsigned char __u8;
+
+typedef __u8 u8;
+
+typedef unsigned short __u16;
+
+typedef __u16 u16;
+
+struct qspinlock {
+	union {
+		atomic_t val;
+		struct {
+			u8 locked;
+			u8 pending;
+		};
+		struct {
+			u16 locked_pending;
+			u16 tail;
+		};
+	};
+};
+
+typedef struct qspinlock arch_spinlock_t;
+
+struct raw_spinlock {
+	arch_spinlock_t raw_lock;
+};
+
+typedef struct raw_spinlock raw_spinlock_t;
+
+struct optimistic_spin_queue {
+	atomic_t tail;
+};
+
+typedef unsigned long long __u64;
+
+typedef __u64 u64;
+
+struct mutex {
+	atomic_long_t owner;
+	raw_spinlock_t wait_lock;
+	struct optimistic_spin_queue osq;
+	struct list_head wait_list;
+	u64 android_oem_data1[2];
+};
+
+typedef unsigned long __kernel_ulong_t;
+
+typedef __kernel_ulong_t __kernel_size_t;
+
+typedef __kernel_size_t size_t;
+
+typedef long long __kernel_loff_t;
+
+typedef __kernel_loff_t loff_t;
+
+struct seq_buf {
+	char *buffer;
+	size_t size;
+	size_t len;
+	loff_t readpos;
+};
+
+struct trace_seq {
+	char buffer[4096];
+	struct seq_buf seq;
+	int full;
+};
+
+struct cpumask {
+	unsigned long bits[1];
+};
+
+typedef struct cpumask cpumask_var_t[1];
+
+typedef _Bool bool;
+
+struct trace_array;
+
+struct tracer;
+
+struct array_buffer;
+
+struct ring_buffer_iter;
+
+struct trace_entry;
+
+struct trace_iterator {
+	struct trace_array *tr;
+	struct tracer *trace;
+	struct array_buffer *array_buffer;
+	void *private;
+	int cpu_file;
+	struct mutex mutex;
+	struct ring_buffer_iter **buffer_iter;
+	unsigned long iter_flags;
+	void *temp;
+	unsigned int temp_size;
+	char *fmt;
+	unsigned int fmt_size;
+	long wait_index;
+	struct trace_seq tmp_seq;
+	cpumask_var_t started;
+	bool snapshot;
+	struct trace_seq seq;
+	struct trace_entry *ent;
+	unsigned long lost_events;
+	int leftover;
+	int ent_size;
+	int cpu;
+	u64 ts;
+	loff_t pos;
+	long idx;
+};
+
+struct trace_entry {
+	unsigned short type;
+	unsigned char flags;
+	unsigned char preempt_count;
+	int pid;
+};
+
+struct hlist_head {
+	struct hlist_node *first;
+};
+
+struct callback_head {
+	struct callback_head *next;
+	void (*func)(struct callback_head *);
+};
+
+struct bpf_prog;
+
+struct bpf_cgroup_storage;
+
+struct bpf_prog_array_item {
+	struct bpf_prog *prog;
+	union {
+		struct bpf_cgroup_storage *cgroup_storage[2];
+		u64 bpf_cookie;
+	};
+};
+
+struct bpf_prog_array {
+	struct callback_head rcu;
+	struct bpf_prog_array_item items[0];
+};
+
+struct rb_node {
+	unsigned long __rb_parent_color;
+	struct rb_node *rb_right;
+	struct rb_node *rb_left;
+};
+
+enum perf_event_state {
+	PERF_EVENT_STATE_DEAD = -4,
+	PERF_EVENT_STATE_EXIT = -3,
+	PERF_EVENT_STATE_ERROR = -2,
+	PERF_EVENT_STATE_OFF = -1,
+	PERF_EVENT_STATE_INACTIVE = 0,
+	PERF_EVENT_STATE_ACTIVE = 1,
+};
+
+typedef struct {
+	atomic_long_t a;
+} local_t;
+
+typedef struct {
+	local_t a;
+} local64_t;
+
+typedef unsigned int __u32;
+
+struct perf_event_attr {
+	__u32 type;
+	__u32 size;
+	__u64 config;
+	union {
+		__u64 sample_period;
+		__u64 sample_freq;
+	};
+	__u64 sample_type;
+	__u64 read_format;
+	__u64 disabled: 1;
+	__u64 inherit: 1;
+	__u64 pinned: 1;
+	__u64 exclusive: 1;
+	__u64 exclude_user: 1;
+	__u64 exclude_kernel: 1;
+	__u64 exclude_hv: 1;
+	__u64 exclude_idle: 1;
+	__u64 mmap: 1;
+	__u64 comm: 1;
+	__u64 freq: 1;
+	__u64 inherit_stat: 1;
+	__u64 enable_on_exec: 1;
+	__u64 task: 1;
+	__u64 watermark: 1;
+	__u64 precise_ip: 2;
+	__u64 mmap_data: 1;
+	__u64 sample_id_all: 1;
+	__u64 exclude_host: 1;
+	__u64 exclude_guest: 1;
+	__u64 exclude_callchain_kernel: 1;
+	__u64 exclude_callchain_user: 1;
+	__u64 mmap2: 1;
+	__u64 comm_exec: 1;
+	__u64 use_clockid: 1;
+	__u64 context_switch: 1;
+	__u64 write_backward: 1;
+	__u64 namespaces: 1;
+	__u64 ksymbol: 1;
+	__u64 bpf_event: 1;
+	__u64 aux_output: 1;
+	__u64 cgroup: 1;
+	__u64 text_poke: 1;
+	__u64 build_id: 1;
+	__u64 inherit_thread: 1;
+	__u64 remove_on_exec: 1;
+	__u64 sigtrap: 1;
+	__u64 __reserved_1: 26;
+	union {
+		__u32 wakeup_events;
+		__u32 wakeup_watermark;
+	};
+	__u32 bp_type;
+	union {
+		__u64 bp_addr;
+		__u64 kprobe_func;
+		__u64 uprobe_path;
+		__u64 config1;
+	};
+	union {
+		__u64 bp_len;
+		__u64 kprobe_addr;
+		__u64 probe_offset;
+		__u64 config2;
+	};
+	__u64 branch_sample_type;
+	__u64 sample_regs_user;
+	__u32 sample_stack_user;
+	__s32 clockid;
+	__u64 sample_regs_intr;
+	__u32 aux_watermark;
+	__u16 sample_max_stack;
+	__u16 __reserved_2;
+	__u32 aux_sample_size;
+	__u32 __reserved_3;
+	__u64 sig_data;
+	__u64 config3;
+};
+
+struct hw_perf_event_extra {
+	u64 config;
+	unsigned int reg;
+	int alloc;
+	int idx;
+};
+
+typedef s64 ktime_t;
+
+struct timerqueue_node {
+	struct rb_node node;
+	ktime_t expires;
+};
+
+enum hrtimer_restart {
+	HRTIMER_NORESTART = 0,
+	HRTIMER_RESTART = 1,
+};
+
+struct hrtimer_clock_base;
+
+struct hrtimer {
+	struct timerqueue_node node;
+	ktime_t _softexpires;
+	enum hrtimer_restart (*function)(struct hrtimer *);
+	struct hrtimer_clock_base *base;
+	u8 state;
+	u8 is_rel;
+	u8 is_soft;
+	u8 is_hard;
+	u64 android_kabi_reserved1;
+};
+
+typedef __u32 u32;
+
+struct arch_hw_breakpoint_ctrl {
+	u32 __reserved: 19;
+	u32 len: 8;
+	u32 type: 2;
+	u32 privilege: 2;
+	u32 enabled: 1;
+};
+
+struct arch_hw_breakpoint {
+	u64 address;
+	u64 trigger;
+	struct arch_hw_breakpoint_ctrl ctrl;
+};
+
+struct rhash_head {
+	struct rhash_head __attribute__((btf_type_tag("rcu"))) *next;
+};
+
+struct rhlist_head {
+	struct rhash_head rhead;
+	struct rhlist_head __attribute__((btf_type_tag("rcu"))) *next;
+};
+
+struct task_struct;
+
+struct hw_perf_event {
+	union {
+		struct {
+			u64 config;
+			u64 last_tag;
+			unsigned long config_base;
+			unsigned long event_base;
+			int event_base_rdpmc;
+			int idx;
+			int last_cpu;
+			int flags;
+			struct hw_perf_event_extra extra_reg;
+			struct hw_perf_event_extra branch_reg;
+		};
+		struct {
+			struct hrtimer hrtimer;
+		};
+		struct {
+			struct list_head tp_list;
+		};
+		struct {
+			u64 pwr_acc;
+			u64 ptsc;
+		};
+		struct {
+			struct arch_hw_breakpoint info;
+			struct rhlist_head bp_list;
+		};
+		struct {
+			u8 iommu_bank;
+			u8 iommu_cntr;
+			u16 padding;
+			u64 conf;
+			u64 conf1;
+		};
+	};
+	struct task_struct *target;
+	void *addr_filters;
+	unsigned long addr_filters_gen;
+	int state;
+	local64_t prev_count;
+	u64 sample_period;
+	union {
+		struct {
+			u64 last_period;
+			local64_t period_left;
+		};
+		struct {
+			u64 saved_metric;
+			u64 saved_slots;
+		};
+	};
+	u64 interrupts_seq;
+	u64 interrupts;
+	u64 freq_time_stamp;
+	u64 freq_count_stamp;
+};
+
+struct spinlock {
+	union {
+		struct raw_spinlock rlock;
+	};
+};
+
+typedef struct spinlock spinlock_t;
+
+struct wait_queue_head {
+	spinlock_t lock;
+	struct list_head head;
+};
+
+typedef struct wait_queue_head wait_queue_head_t;
+
+struct llist_node {
+	struct llist_node *next;
+};
+
+struct __call_single_node {
+	struct llist_node llist;
+	union {
+		unsigned int u_flags;
+		atomic_t a_flags;
+	};
+	u16 src;
+	u16 dst;
+};
+
+struct rcuwait {
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *task;
+};
+
+struct irq_work {
+	struct __call_single_node node;
+	void (*func)(struct irq_work *);
+	struct rcuwait irqwait;
+};
+
+struct perf_addr_filters_head {
+	struct list_head list;
+	raw_spinlock_t lock;
+	unsigned int nr_file_filters;
+};
+
+struct perf_sample_data;
+
+struct pt_regs;
+
+typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
+
+struct pmu;
+
+struct perf_event_context;
+
+struct perf_event_pmu_context;
+
+struct perf_buffer;
+
+struct fasync_struct;
+
+struct perf_addr_filter_range;
+
+struct pid_namespace;
+
+struct perf_event {
+	struct list_head event_entry;
+	struct list_head sibling_list;
+	struct list_head active_list;
+	struct rb_node group_node;
+	u64 group_index;
+	struct list_head migrate_entry;
+	struct hlist_node hlist_entry;
+	struct list_head active_entry;
+	int nr_siblings;
+	int event_caps;
+	int group_caps;
+	unsigned int group_generation;
+	struct perf_event *group_leader;
+	struct pmu *pmu;
+	void *pmu_private;
+	enum perf_event_state state;
+	unsigned int attach_state;
+	local64_t count;
+	atomic64_t child_count;
+	u64 total_time_enabled;
+	u64 total_time_running;
+	u64 tstamp;
+	struct perf_event_attr attr;
+	u16 header_size;
+	u16 id_header_size;
+	u16 read_size;
+	struct hw_perf_event hw;
+	struct perf_event_context *ctx;
+	struct perf_event_pmu_context *pmu_ctx;
+	atomic_long_t refcount;
+	atomic64_t child_total_time_enabled;
+	atomic64_t child_total_time_running;
+	struct mutex child_mutex;
+	struct list_head child_list;
+	struct perf_event *parent;
+	int oncpu;
+	int cpu;
+	struct list_head owner_entry;
+	struct task_struct *owner;
+	struct mutex mmap_mutex;
+	atomic_t mmap_count;
+	struct perf_buffer *rb;
+	struct list_head rb_entry;
+	unsigned long rcu_batches;
+	int rcu_pending;
+	wait_queue_head_t waitq;
+	struct fasync_struct *fasync;
+	unsigned int pending_wakeup;
+	unsigned int pending_kill;
+	unsigned int pending_disable;
+	unsigned int pending_sigtrap;
+	unsigned long pending_addr;
+	struct irq_work pending_irq;
+	struct callback_head pending_task;
+	unsigned int pending_work;
+	atomic_t event_limit;
+	struct perf_addr_filters_head addr_filters;
+	struct perf_addr_filter_range *addr_filter_ranges;
+	unsigned long addr_filters_gen;
+	struct perf_event *aux_event;
+	void (*destroy)(struct perf_event *);
+	struct callback_head callback_head;
+	struct pid_namespace *ns;
+	u64 id;
+	atomic64_t lost_samples;
+	u64 (*clock)();
+	perf_overflow_handler_t overflow_handler;
+	void *overflow_handler_context;
+	perf_overflow_handler_t orig_overflow_handler;
+	struct bpf_prog *prog;
+	u64 bpf_cookie;
+	struct trace_event_call *tp_event;
+	struct event_filter *filter;
+	void *security;
+	struct list_head sb_list;
+	__u32 orig_type;
+};
+
+struct module;
+
+struct device;
+
+struct attribute_group;
+
+struct perf_cpu_pmu_context;
+
+struct mm_struct;
+
+struct kmem_cache;
+
+struct perf_output_handle;
+
+struct pmu {
+	struct list_head entry;
+	struct module *module;
+	struct device *dev;
+	struct device *parent;
+	const struct attribute_group **attr_groups;
+	const struct attribute_group **attr_update;
+	const char *name;
+	int type;
+	int capabilities;
+	int __attribute__((btf_type_tag("percpu"))) *pmu_disable_count;
+	struct perf_cpu_pmu_context __attribute__((btf_type_tag("percpu"))) *cpu_pmu_context;
+	atomic_t exclusive_cnt;
+	int task_ctx_nr;
+	int hrtimer_interval_ms;
+	unsigned int nr_addr_filters;
+	void (*pmu_enable)(struct pmu *);
+	void (*pmu_disable)(struct pmu *);
+	int (*event_init)(struct perf_event *);
+	void (*event_mapped)(struct perf_event *, struct mm_struct *);
+	void (*event_unmapped)(struct perf_event *, struct mm_struct *);
+	int (*add)(struct perf_event *, int);
+	void (*del)(struct perf_event *, int);
+	void (*start)(struct perf_event *, int);
+	void (*stop)(struct perf_event *, int);
+	void (*read)(struct perf_event *);
+	void (*start_txn)(struct pmu *, unsigned int);
+	int (*commit_txn)(struct pmu *);
+	void (*cancel_txn)(struct pmu *);
+	int (*event_idx)(struct perf_event *);
+	void (*sched_task)(struct perf_event_pmu_context *, bool);
+	struct kmem_cache *task_ctx_cache;
+	void (*swap_task_ctx)(struct perf_event_pmu_context *, struct perf_event_pmu_context *);
+	void * (*setup_aux)(struct perf_event *, void **, int, bool);
+	void (*free_aux)(void *);
+	long (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, unsigned long);
+	int (*addr_filters_validate)(struct list_head *);
+	void (*addr_filters_sync)(struct perf_event *);
+	int (*aux_output_match)(struct perf_event *);
+	bool (*filter)(struct pmu *, int);
+	int (*check_period)(struct perf_event *, u64);
+};
+
+enum module_state {
+	MODULE_STATE_LIVE = 0,
+	MODULE_STATE_COMING = 1,
+	MODULE_STATE_GOING = 2,
+	MODULE_STATE_UNFORMED = 3,
+};
+
+struct refcount_struct {
+	atomic_t refs;
+};
+
+typedef struct refcount_struct refcount_t;
+
+struct kref {
+	refcount_t refcount;
+};
+
+struct kset;
+
+struct kobj_type;
+
+struct kernfs_node;
+
+struct kobject {
+	const char *name;
+	struct list_head entry;
+	struct kobject *parent;
+	struct kset *kset;
+	const struct kobj_type *ktype;
+	struct kernfs_node *sd;
+	struct kref kref;
+	unsigned int state_initialized: 1;
+	unsigned int state_in_sysfs: 1;
+	unsigned int state_add_uevent_sent: 1;
+	unsigned int state_remove_uevent_sent: 1;
+	unsigned int uevent_suppress: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct module_param_attrs;
+
+struct completion;
+
+struct module_kobject {
+	struct kobject kobj;
+	struct module *mod;
+	struct kobject *drivers_dir;
+	struct module_param_attrs *mp;
+	struct completion *kobj_completion;
+};
+
+struct latch_tree_node {
+	struct rb_node node[2];
+};
+
+struct mod_tree_node {
+	struct module *mod;
+	struct latch_tree_node node;
+};
+
+struct module_memory {
+	void *base;
+	unsigned int size;
+	struct mod_tree_node mtn;
+};
+
+struct mod_plt_sec {
+	int plt_shndx;
+	int plt_num_entries;
+	int plt_max_entries;
+};
+
+struct pkvm_module_section {
+	void *start;
+	void *end;
+};
+
+typedef s32 kvm_nvhe_reloc_t;
+
+struct hyp_event;
+
+struct pkvm_module_ops;
+
+struct pkvm_el2_module {
+	struct pkvm_module_section text;
+	struct pkvm_module_section bss;
+	struct pkvm_module_section rodata;
+	struct pkvm_module_section data;
+	struct pkvm_module_section event_ids;
+	struct pkvm_module_section sections;
+	struct hyp_event *hyp_events;
+	unsigned int nr_hyp_events;
+	kvm_nvhe_reloc_t *relocs;
+	struct list_head node;
+	unsigned long token;
+	unsigned int nr_relocs;
+	int (*init)(const struct pkvm_module_ops *);
+};
+
+struct plt_entry;
+
+struct mod_arch_specific {
+	struct mod_plt_sec core;
+	struct mod_plt_sec init;
+	struct plt_entry *ftrace_trampolines;
+	struct pkvm_el2_module hyp;
+};
+
+struct elf64_sym;
+
+typedef struct elf64_sym Elf64_Sym;
+
+struct mod_kallsyms {
+	Elf64_Sym *symtab;
+	unsigned int num_symtab;
+	char *strtab;
+	char *typetab;
+};
+
+typedef const int tracepoint_ptr_t;
+
+struct _ddebug;
+
+struct ddebug_class_map;
+
+struct _ddebug_info {
+	struct _ddebug *descs;
+	struct ddebug_class_map *classes;
+	unsigned int num_descs;
+	unsigned int num_classes;
+};
+
+struct module_attribute;
+
+struct kernel_symbol;
+
+struct kernel_param;
+
+struct exception_table_entry;
+
+struct bug_entry;
+
+struct module_sect_attrs;
+
+struct module_notes_attrs;
+
+struct srcu_struct;
+
+struct bpf_raw_event_map;
+
+struct trace_eval_map;
+
+struct kunit_suite;
+
+struct module {
+	enum module_state state;
+	struct list_head list;
+	char name[56];
+	unsigned char build_id[20];
+	struct module_kobject mkobj;
+	struct module_attribute *modinfo_attrs;
+	const char *version;
+	const char *srcversion;
+	const char *scmversion;
+	struct kobject *holders_dir;
+	const struct kernel_symbol *syms;
+	const s32 *crcs;
+	unsigned int num_syms;
+	struct mutex param_lock;
+	struct kernel_param *kp;
+	unsigned int num_kp;
+	unsigned int num_gpl_syms;
+	const struct kernel_symbol *gpl_syms;
+	const s32 *gpl_crcs;
+	bool using_gplonly_symbols;
+	bool sig_ok;
+	bool async_probe_requested;
+	unsigned int num_exentries;
+	struct exception_table_entry *extable;
+	int (*init)();
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct module_memory mem[7];
+	struct mod_arch_specific arch;
+	unsigned long taints;
+	unsigned int num_bugs;
+	struct list_head bug_list;
+	struct bug_entry *bug_table;
+	struct mod_kallsyms __attribute__((btf_type_tag("rcu"))) *kallsyms;
+	struct mod_kallsyms core_kallsyms;
+	struct module_sect_attrs *sect_attrs;
+	struct module_notes_attrs *notes_attrs;
+	char *args;
+	void __attribute__((btf_type_tag("percpu"))) *percpu;
+	unsigned int percpu_size;
+	void *noinstr_text_start;
+	unsigned int noinstr_text_size;
+	unsigned int num_tracepoints;
+	tracepoint_ptr_t *tracepoints_ptrs;
+	unsigned int num_srcu_structs;
+	struct srcu_struct **srcu_struct_ptrs;
+	unsigned int num_bpf_raw_events;
+	struct bpf_raw_event_map *bpf_raw_events;
+	unsigned int btf_data_size;
+	void *btf_data;
+	struct jump_entry *jump_entries;
+	unsigned int num_jump_entries;
+	unsigned int num_trace_bprintk_fmt;
+	const char **trace_bprintk_fmt_start;
+	struct trace_event_call **trace_events;
+	unsigned int num_trace_events;
+	struct trace_eval_map **trace_evals;
+	unsigned int num_trace_evals;
+	void *kprobes_text_start;
+	unsigned int kprobes_text_size;
+	unsigned long *kprobe_blacklist;
+	unsigned int num_kprobe_blacklist;
+	int num_kunit_suites;
+	struct kunit_suite **kunit_suites;
+	struct list_head source_list;
+	struct list_head target_list;
+	void (*exit)();
+	atomic_t refcnt;
+	struct _ddebug_info dyndbg_info;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct kset_uevent_ops;
+
+struct kset {
+	struct list_head list;
+	spinlock_t list_lock;
+	struct kobject kobj;
+	const struct kset_uevent_ops *uevent_ops;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct kobj_uevent_env;
+
+struct kset_uevent_ops {
+	int (* const filter)(const struct kobject *);
+	const char * (* const name)(const struct kobject *);
+	int (* const uevent)(const struct kobject *, struct kobj_uevent_env *);
+};
+
+struct kobj_uevent_env {
+	char *argv[3];
+	char *envp[64];
+	int envp_idx;
+	char buf[2048];
+	int buflen;
+};
+
+typedef unsigned int __kernel_uid32_t;
+
+typedef __kernel_uid32_t uid_t;
+
+typedef struct {
+	uid_t val;
+} kuid_t;
+
+typedef unsigned int __kernel_gid32_t;
+
+typedef __kernel_gid32_t gid_t;
+
+typedef struct {
+	gid_t val;
+} kgid_t;
+
+struct sysfs_ops;
+
+struct kobj_ns_type_operations;
+
+struct kobj_type {
+	void (*release)(struct kobject *);
+	const struct sysfs_ops *sysfs_ops;
+	const struct attribute_group **default_groups;
+	const struct kobj_ns_type_operations * (*child_ns_type)(const struct kobject *);
+	const void * (*namespace)(const struct kobject *);
+	void (*get_ownership)(const struct kobject *, kuid_t *, kgid_t *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef long __kernel_long_t;
+
+typedef __kernel_long_t __kernel_ssize_t;
+
+typedef __kernel_ssize_t ssize_t;
+
+struct attribute;
+
+struct sysfs_ops {
+	ssize_t (*show)(struct kobject *, struct attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
+};
+
+typedef unsigned short umode_t;
+
+struct attribute {
+	const char *name;
+	umode_t mode;
+};
+
+struct bin_attribute;
+
+struct attribute_group {
+	const char *name;
+	umode_t (*is_visible)(struct kobject *, struct attribute *, int);
+	umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);
+	struct attribute **attrs;
+	struct bin_attribute **bin_attrs;
+};
+
+struct address_space;
+
+struct file;
+
+struct vm_area_struct;
+
+struct bin_attribute {
+	struct attribute attr;
+	size_t size;
+	void *private;
+	struct address_space * (*f_mapping)();
+	ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
+	ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
+	int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
+};
+
+typedef unsigned int gfp_t;
+
+struct xarray {
+	spinlock_t xa_lock;
+	gfp_t xa_flags;
+	void __attribute__((btf_type_tag("rcu"))) *xa_head;
+};
+
+struct rw_semaphore {
+	atomic_long_t count;
+	atomic_long_t owner;
+	struct optimistic_spin_queue osq;
+	raw_spinlock_t wait_lock;
+	struct list_head wait_list;
+	u64 android_vendor_data1;
+	u64 android_oem_data1[2];
+};
+
+struct rb_root {
+	struct rb_node *rb_node;
+};
+
+struct rb_root_cached {
+	struct rb_root rb_root;
+	struct rb_node *rb_leftmost;
+};
+
+typedef u32 errseq_t;
+
+struct inode;
+
+struct address_space_operations;
+
+struct address_space {
+	struct inode *host;
+	struct xarray i_pages;
+	struct rw_semaphore invalidate_lock;
+	gfp_t gfp_mask;
+	atomic_t i_mmap_writable;
+	struct rb_root_cached i_mmap;
+	unsigned long nrpages;
+	unsigned long writeback_index;
+	const struct address_space_operations *a_ops;
+	unsigned long flags;
+	struct rw_semaphore i_mmap_rwsem;
+	errseq_t wb_err;
+	spinlock_t private_lock;
+	struct list_head private_list;
+	void *private_data;
+};
+
+typedef u32 __kernel_dev_t;
+
+typedef __kernel_dev_t dev_t;
+
+typedef __s64 time64_t;
+
+struct timespec64 {
+	time64_t tv_sec;
+	long tv_nsec;
+};
+
+enum rw_hint {
+	WRITE_LIFE_NOT_SET = 0,
+	WRITE_LIFE_NONE = 1,
+	WRITE_LIFE_SHORT = 2,
+	WRITE_LIFE_MEDIUM = 3,
+	WRITE_LIFE_LONG = 4,
+	WRITE_LIFE_EXTREME = 5,
+} __attribute__((mode(byte)));
+
+typedef u64 blkcnt_t;
+
+struct posix_acl;
+
+struct inode_operations;
+
+struct super_block;
+
+struct bdi_writeback;
+
+struct file_operations;
+
+struct file_lock_context;
+
+struct pipe_inode_info;
+
+struct cdev;
+
+struct fsnotify_mark_connector;
+
+struct fscrypt_inode_info;
+
+struct fsverity_info;
+
+struct inode {
+	umode_t i_mode;
+	unsigned short i_opflags;
+	kuid_t i_uid;
+	kgid_t i_gid;
+	unsigned int i_flags;
+	struct posix_acl *i_acl;
+	struct posix_acl *i_default_acl;
+	const struct inode_operations *i_op;
+	struct super_block *i_sb;
+	struct address_space *i_mapping;
+	void *i_security;
+	unsigned long i_ino;
+	union {
+		const unsigned int i_nlink;
+		unsigned int __i_nlink;
+	};
+	dev_t i_rdev;
+	loff_t i_size;
+	struct timespec64 i_atime;
+	struct timespec64 i_mtime;
+	struct timespec64 __i_ctime;
+	spinlock_t i_lock;
+	unsigned short i_bytes;
+	u8 i_blkbits;
+	enum rw_hint i_write_hint;
+	blkcnt_t i_blocks;
+	unsigned long i_state;
+	struct rw_semaphore i_rwsem;
+	unsigned long dirtied_when;
+	unsigned long dirtied_time_when;
+	struct hlist_node i_hash;
+	struct list_head i_io_list;
+	struct bdi_writeback *i_wb;
+	int i_wb_frn_winner;
+	u16 i_wb_frn_avg_time;
+	u16 i_wb_frn_history;
+	struct list_head i_lru;
+	struct list_head i_sb_list;
+	struct list_head i_wb_list;
+	union {
+		struct hlist_head i_dentry;
+		struct callback_head i_rcu;
+	};
+	atomic64_t i_version;
+	atomic64_t i_sequence;
+	atomic_t i_count;
+	atomic_t i_dio_count;
+	atomic_t i_writecount;
+	atomic_t i_readcount;
+	union {
+		const struct file_operations *i_fop;
+		void (*free_inode)(struct inode *);
+	};
+	struct file_lock_context *i_flctx;
+	struct address_space i_data;
+	struct list_head i_devices;
+	union {
+		struct pipe_inode_info *i_pipe;
+		struct cdev *i_cdev;
+		char *i_link;
+		unsigned int i_dir_seq;
+	};
+	__u32 i_generation;
+	__u32 i_fsnotify_mask;
+	struct fsnotify_mark_connector __attribute__((btf_type_tag("rcu"))) *i_fsnotify_marks;
+	struct fscrypt_inode_info *i_crypt_info;
+	struct fsverity_info *i_verity_info;
+	void *i_private;
+};
+
+struct dentry;
+
+struct delayed_call;
+
+struct mnt_idmap;
+
+struct iattr;
+
+struct path;
+
+struct kstat;
+
+struct fiemap_extent_info;
+
+struct fileattr;
+
+struct offset_ctx;
+
+struct inode_operations {
+	struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);
+	const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);
+	int (*permission)(struct mnt_idmap *, struct inode *, int);
+	struct posix_acl * (*get_inode_acl)(struct inode *, int, bool);
+	int (*readlink)(struct dentry *, char __attribute__((btf_type_tag("user"))) *, int);
+	int (*create)(struct mnt_idmap *, struct inode *, struct dentry *, umode_t, bool);
+	int (*link)(struct dentry *, struct inode *, struct dentry *);
+	int (*unlink)(struct inode *, struct dentry *);
+	int (*symlink)(struct mnt_idmap *, struct inode *, struct dentry *, const char *);
+	int (*mkdir)(struct mnt_idmap *, struct inode *, struct dentry *, umode_t);
+	int (*rmdir)(struct inode *, struct dentry *);
+	int (*mknod)(struct mnt_idmap *, struct inode *, struct dentry *, umode_t, dev_t);
+	int (*rename)(struct mnt_idmap *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
+	int (*setattr)(struct mnt_idmap *, struct dentry *, struct iattr *);
+	int (*getattr)(struct mnt_idmap *, const struct path *, struct kstat *, u32, unsigned int);
+	ssize_t (*listxattr)(struct dentry *, char *, size_t);
+	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64, u64);
+	int (*update_time)(struct inode *, int);
+	int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t);
+	int (*tmpfile)(struct mnt_idmap *, struct inode *, struct file *, umode_t);
+	struct posix_acl * (*get_acl)(struct mnt_idmap *, struct dentry *, int);
+	int (*set_acl)(struct mnt_idmap *, struct dentry *, struct posix_acl *, int);
+	int (*fileattr_set)(struct mnt_idmap *, struct dentry *, struct fileattr *);
+	int (*fileattr_get)(struct dentry *, struct fileattr *);
+	struct offset_ctx * (*get_offset_ctx)(struct inode *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct hlist_bl_node {
+	struct hlist_bl_node *next;
+	struct hlist_bl_node **pprev;
+};
+
+struct seqcount {
+	unsigned int sequence;
+};
+
+typedef struct seqcount seqcount_t;
+
+struct seqcount_spinlock {
+	seqcount_t seqcount;
+};
+
+typedef struct seqcount_spinlock seqcount_spinlock_t;
+
+struct qstr {
+	union {
+		struct {
+			u32 hash;
+			u32 len;
+		};
+		u64 hash_len;
+	};
+	const unsigned char *name;
+};
+
+struct lockref {
+	union {
+		__u64 lock_count;
+		struct {
+			spinlock_t lock;
+			int count;
+		};
+	};
+};
+
+struct dentry_operations;
+
+struct dentry {
+	unsigned int d_flags;
+	seqcount_spinlock_t d_seq;
+	struct hlist_bl_node d_hash;
+	struct dentry *d_parent;
+	struct qstr d_name;
+	struct inode *d_inode;
+	unsigned char d_iname[32];
+	struct lockref d_lockref;
+	const struct dentry_operations *d_op;
+	struct super_block *d_sb;
+	unsigned long d_time;
+	void *d_fsdata;
+	union {
+		struct list_head d_lru;
+		wait_queue_head_t *d_wait;
+	};
+	struct list_head d_child;
+	struct list_head d_subdirs;
+	union {
+		struct hlist_node d_alias;
+		struct hlist_bl_node d_in_lookup_hash;
+		struct callback_head d_rcu;
+	} d_u;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct vfsmount;
+
+struct dentry_operations {
+	int (*d_revalidate)(struct dentry *, unsigned int);
+	int (*d_weak_revalidate)(struct dentry *, unsigned int);
+	int (*d_hash)(const struct dentry *, struct qstr *);
+	int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *);
+	int (*d_delete)(const struct dentry *);
+	int (*d_init)(struct dentry *);
+	void (*d_release)(struct dentry *);
+	void (*d_prune)(struct dentry *);
+	void (*d_iput)(struct dentry *, struct inode *);
+	char * (*d_dname)(struct dentry *, char *, int);
+	struct vfsmount * (*d_automount)(struct path *);
+	int (*d_manage)(const struct path *, bool);
+	struct dentry * (*d_real)(struct dentry *, const struct inode *);
+	int (*d_canonical_path)(const struct path *, struct path *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct vfsmount {
+	struct dentry *mnt_root;
+	struct super_block *mnt_sb;
+	int mnt_flags;
+	struct mnt_idmap *mnt_idmap;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct hlist_bl_head {
+	struct hlist_bl_node *first;
+};
+
+struct mtd_info;
+
+typedef long long qsize_t;
+
+struct quota_format_type;
+
+struct mem_dqinfo {
+	struct quota_format_type *dqi_format;
+	int dqi_fmt_id;
+	struct list_head dqi_dirty_list;
+	unsigned long dqi_flags;
+	unsigned int dqi_bgrace;
+	unsigned int dqi_igrace;
+	qsize_t dqi_max_spc_limit;
+	qsize_t dqi_max_ino_limit;
+	void *dqi_priv;
+};
+
+struct quota_format_ops;
+
+struct quota_info {
+	unsigned int flags;
+	struct rw_semaphore dqio_sem;
+	struct inode *files[3];
+	struct mem_dqinfo info[3];
+	const struct quota_format_ops *ops[3];
+};
+
+struct rcu_sync {
+	int gp_state;
+	int gp_count;
+	wait_queue_head_t gp_wait;
+	struct callback_head cb_head;
+};
+
+struct percpu_rw_semaphore {
+	struct rcu_sync rss;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *read_count;
+	struct rcuwait writer;
+	wait_queue_head_t waiters;
+	atomic_t block;
+	u64 android_oem_data1;
+};
+
+struct sb_writers {
+	unsigned short frozen;
+	unsigned short freeze_holders;
+	struct percpu_rw_semaphore rw_sem[3];
+};
+
+typedef struct {
+	__u8 b[16];
+} uuid_t;
+
+struct shrink_control;
+
+struct shrinker {
+	unsigned long (*count_objects)(struct shrinker *, struct shrink_control *);
+	unsigned long (*scan_objects)(struct shrinker *, struct shrink_control *);
+	long batch;
+	int seeks;
+	unsigned int flags;
+	struct list_head list;
+	int id;
+	atomic_long_t *nr_deferred;
+};
+
+struct list_lru_node;
+
+struct list_lru {
+	struct list_lru_node *node;
+	struct list_head list;
+	int shrinker_id;
+	bool memcg_aware;
+	struct xarray xa;
+};
+
+struct work_struct;
+
+typedef void (*work_func_t)(struct work_struct *);
+
+struct work_struct {
+	atomic_long_t data;
+	struct list_head entry;
+	work_func_t func;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct file_system_type;
+
+struct super_operations;
+
+struct dquot_operations;
+
+struct quotactl_ops;
+
+struct export_operations;
+
+struct xattr_handler;
+
+struct fscrypt_operations;
+
+struct fscrypt_keyring;
+
+struct fsverity_operations;
+
+struct unicode_map;
+
+struct block_device;
+
+struct backing_dev_info;
+
+struct workqueue_struct;
+
+struct user_namespace;
+
+struct super_block {
+	struct list_head s_list;
+	dev_t s_dev;
+	unsigned char s_blocksize_bits;
+	unsigned long s_blocksize;
+	loff_t s_maxbytes;
+	struct file_system_type *s_type;
+	const struct super_operations *s_op;
+	const struct dquot_operations *dq_op;
+	const struct quotactl_ops *s_qcop;
+	const struct export_operations *s_export_op;
+	unsigned long s_flags;
+	unsigned long s_iflags;
+	unsigned long s_magic;
+	struct dentry *s_root;
+	struct rw_semaphore s_umount;
+	int s_count;
+	atomic_t s_active;
+	void *s_security;
+	const struct xattr_handler **s_xattr;
+	const struct fscrypt_operations *s_cop;
+	struct fscrypt_keyring *s_master_keys;
+	const struct fsverity_operations *s_vop;
+	struct unicode_map *s_encoding;
+	__u16 s_encoding_flags;
+	struct hlist_bl_head s_roots;
+	struct list_head s_mounts;
+	struct block_device *s_bdev;
+	struct backing_dev_info *s_bdi;
+	struct mtd_info *s_mtd;
+	struct hlist_node s_instances;
+	unsigned int s_quota_types;
+	struct quota_info s_dquot;
+	struct sb_writers s_writers;
+	void *s_fs_info;
+	u32 s_time_gran;
+	time64_t s_time_min;
+	time64_t s_time_max;
+	__u32 s_fsnotify_mask;
+	struct fsnotify_mark_connector __attribute__((btf_type_tag("rcu"))) *s_fsnotify_marks;
+	char s_id[32];
+	uuid_t s_uuid;
+	unsigned int s_max_links;
+	struct mutex s_vfs_rename_mutex;
+	const char *s_subtype;
+	const struct dentry_operations *s_d_op;
+	int cleancache_poolid;
+	struct shrinker s_shrink;
+	atomic_long_t s_remove_count;
+	atomic_long_t s_fsnotify_connectors;
+	int s_readonly_remount;
+	errseq_t s_wb_err;
+	struct workqueue_struct *s_dio_done_wq;
+	struct hlist_head s_pins;
+	struct user_namespace *s_user_ns;
+	struct list_lru s_dentry_lru;
+	struct list_lru s_inode_lru;
+	struct callback_head rcu;
+	struct work_struct destroy_work;
+	struct mutex s_sync_lock;
+	int s_stack_depth;
+	long: 0;
+	spinlock_t s_inode_list_lock;
+	struct list_head s_inodes;
+	spinlock_t s_inode_wblist_lock;
+	struct list_head s_inodes_wb;
+	long: 64;
+	long: 64;
+};
+
+struct lock_class_key {};
+
+struct fs_context;
+
+struct fs_parameter_spec;
+
+struct file_system_type {
+	const char *name;
+	int fs_flags;
+	int (*init_fs_context)(struct fs_context *);
+	const struct fs_parameter_spec *parameters;
+	struct dentry * (*mount)(struct file_system_type *, int, const char *, void *);
+	void (*kill_sb)(struct super_block *);
+	struct module *owner;
+	struct file_system_type *next;
+	struct hlist_head fs_supers;
+	struct lock_class_key s_lock_key;
+	struct lock_class_key s_umount_key;
+	struct lock_class_key s_vfs_rename_key;
+	struct lock_class_key s_writers_key[3];
+	struct lock_class_key i_lock_key;
+	struct lock_class_key i_mutex_key;
+	struct lock_class_key invalidate_lock_key;
+	struct lock_class_key i_mutex_dir_key;
+};
+
+struct fc_log;
+
+struct p_log {
+	const char *prefix;
+	struct fc_log *log;
+};
+
+enum fs_context_purpose {
+	FS_CONTEXT_FOR_MOUNT = 0,
+	FS_CONTEXT_FOR_SUBMOUNT = 1,
+	FS_CONTEXT_FOR_RECONFIGURE = 2,
+};
+
+enum fs_context_phase {
+	FS_CONTEXT_CREATE_PARAMS = 0,
+	FS_CONTEXT_CREATING = 1,
+	FS_CONTEXT_AWAITING_MOUNT = 2,
+	FS_CONTEXT_AWAITING_RECONF = 3,
+	FS_CONTEXT_RECONF_PARAMS = 4,
+	FS_CONTEXT_RECONFIGURING = 5,
+	FS_CONTEXT_FAILED = 6,
+};
+
+struct fs_context_operations;
+
+struct net;
+
+struct cred;
+
+struct fs_context {
+	const struct fs_context_operations *ops;
+	struct mutex uapi_mutex;
+	struct file_system_type *fs_type;
+	void *fs_private;
+	void *sget_key;
+	struct dentry *root;
+	struct user_namespace *user_ns;
+	struct net *net_ns;
+	const struct cred *cred;
+	struct p_log log;
+	const char *source;
+	void *security;
+	void *s_fs_info;
+	unsigned int sb_flags;
+	unsigned int sb_flags_mask;
+	unsigned int s_iflags;
+	enum fs_context_purpose purpose: 8;
+	enum fs_context_phase phase: 8;
+	bool need_free: 1;
+	bool global: 1;
+	bool oldapi: 1;
+	bool exclusive: 1;
+};
+
+struct fs_parameter;
+
+struct fs_context_operations {
+	void (*free)(struct fs_context *);
+	int (*dup)(struct fs_context *, struct fs_context *);
+	int (*parse_param)(struct fs_context *, struct fs_parameter *);
+	int (*parse_monolithic)(struct fs_context *, void *);
+	int (*get_tree)(struct fs_context *);
+	int (*reconfigure)(struct fs_context *);
+};
+
+enum fs_value_type {
+	fs_value_is_undefined = 0,
+	fs_value_is_flag = 1,
+	fs_value_is_string = 2,
+	fs_value_is_blob = 3,
+	fs_value_is_filename = 4,
+	fs_value_is_file = 5,
+};
+
+struct filename;
+
+struct fs_parameter {
+	const char *key;
+	enum fs_value_type type: 8;
+	union {
+		char *string;
+		void *blob;
+		struct filename *name;
+		struct file *file;
+	};
+	size_t size;
+	int dirfd;
+};
+
+struct audit_names;
+
+struct filename {
+	const char *name;
+	const char __attribute__((btf_type_tag("user"))) *uptr;
+	atomic_t refcnt;
+	struct audit_names *aname;
+	const char iname[0];
+};
+
+typedef unsigned int fmode_t;
+
+struct qrwlock {
+	union {
+		atomic_t cnts;
+		struct {
+			u8 wlocked;
+			u8 __lstate[3];
+		};
+	};
+	arch_spinlock_t wait_lock;
+};
+
+typedef struct qrwlock arch_rwlock_t;
+
+typedef struct {
+	arch_rwlock_t raw_lock;
+} rwlock_t;
+
+enum pid_type {
+	PIDTYPE_PID = 0,
+	PIDTYPE_TGID = 1,
+	PIDTYPE_PGID = 2,
+	PIDTYPE_SID = 3,
+	PIDTYPE_MAX = 4,
+};
+
+struct pid;
+
+struct fown_struct {
+	rwlock_t lock;
+	struct pid *pid;
+	enum pid_type pid_type;
+	kuid_t uid;
+	kuid_t euid;
+	int signum;
+};
+
+struct file_ra_state {
+	unsigned long start;
+	unsigned int size;
+	unsigned int async_size;
+	unsigned int ra_pages;
+	unsigned int mmap_miss;
+	loff_t prev_pos;
+};
+
+struct path {
+	struct vfsmount *mnt;
+	struct dentry *dentry;
+};
+
+struct file {
+	union {
+		struct llist_node f_llist;
+		struct callback_head f_rcuhead;
+		unsigned int f_iocb_flags;
+	};
+	spinlock_t f_lock;
+	fmode_t f_mode;
+	atomic_long_t f_count;
+	struct mutex f_pos_lock;
+	loff_t f_pos;
+	unsigned int f_flags;
+	struct fown_struct f_owner;
+	const struct cred *f_cred;
+	struct file_ra_state f_ra;
+	struct path f_path;
+	struct inode *f_inode;
+	const struct file_operations *f_op;
+	u64 f_version;
+	void *f_security;
+	void *private_data;
+	struct hlist_head *f_ep;
+	struct address_space *f_mapping;
+	errseq_t f_wb_err;
+	errseq_t f_sb_err;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct upid {
+	int nr;
+	struct pid_namespace *ns;
+};
+
+struct pid {
+	refcount_t count;
+	unsigned int level;
+	spinlock_t lock;
+	struct hlist_head tasks[4];
+	struct hlist_head inodes;
+	wait_queue_head_t wait_pidfd;
+	struct callback_head rcu;
+	struct upid numbers[0];
+};
+
+struct idr {
+	struct xarray idr_rt;
+	unsigned int idr_base;
+	unsigned int idr_next;
+};
+
+struct proc_ns_operations;
+
+struct ns_common {
+	atomic_long_t stashed;
+	const struct proc_ns_operations *ops;
+	unsigned int inum;
+	refcount_t count;
+};
+
+struct ucounts;
+
+struct pid_namespace {
+	struct idr idr;
+	struct callback_head rcu;
+	unsigned int pid_allocated;
+	struct task_struct *child_reaper;
+	struct kmem_cache *pid_cachep;
+	unsigned int level;
+	struct pid_namespace *parent;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	int reboot;
+	struct ns_common ns;
+	int memfd_noexec_scope;
+};
+
+struct thread_info {
+	unsigned long flags;
+	u64 ttbr0;
+	union {
+		u64 preempt_count;
+		struct {
+			u32 count;
+			u32 need_resched;
+		} preempt;
+	};
+	void *scs_base;
+	void *scs_sp;
+	u32 cpu;
+};
+
+struct load_weight {
+	unsigned long weight;
+	u32 inv_weight;
+};
+
+struct sched_avg {
+	u64 last_update_time;
+	u64 load_sum;
+	u64 runnable_sum;
+	u32 util_sum;
+	u32 period_contrib;
+	unsigned long load_avg;
+	unsigned long runnable_avg;
+	unsigned long util_avg;
+	unsigned int util_est;
+	u32 reserved;
+};
+
+struct cfs_rq;
+
+struct sched_entity {
+	struct load_weight load;
+	struct rb_node run_node;
+	u64 deadline;
+	u64 min_vruntime;
+	struct list_head group_node;
+	unsigned int on_rq;
+	u64 exec_start;
+	u64 sum_exec_runtime;
+	u64 prev_sum_exec_runtime;
+	u64 vruntime;
+	s64 vlag;
+	u64 slice;
+	u64 nr_migrations;
+	int depth;
+	struct sched_entity *parent;
+	struct cfs_rq *cfs_rq;
+	struct cfs_rq *my_q;
+	unsigned long runnable_weight;
+	long: 64;
+	long: 64;
+	struct sched_avg avg;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sched_rt_entity {
+	struct list_head run_list;
+	unsigned long timeout;
+	unsigned long watchdog_stamp;
+	unsigned int time_slice;
+	unsigned short on_rq;
+	unsigned short on_list;
+	struct sched_rt_entity *back;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct sched_dl_entity {
+	struct rb_node rb_node;
+	u64 dl_runtime;
+	u64 dl_deadline;
+	u64 dl_period;
+	u64 dl_bw;
+	u64 dl_density;
+	s64 runtime;
+	u64 deadline;
+	unsigned int flags;
+	unsigned int dl_throttled: 1;
+	unsigned int dl_yielded: 1;
+	unsigned int dl_non_contending: 1;
+	unsigned int dl_overrun: 1;
+	struct hrtimer dl_timer;
+	struct hrtimer inactive_timer;
+	struct sched_dl_entity *pi_se;
+};
+
+struct uclamp_se {
+	unsigned int value: 11;
+	unsigned int bucket_id: 5;
+	unsigned int active: 1;
+	unsigned int user_defined: 1;
+};
+
+struct sched_statistics {
+	u64 wait_start;
+	u64 wait_max;
+	u64 wait_count;
+	u64 wait_sum;
+	u64 iowait_count;
+	u64 iowait_sum;
+	u64 sleep_start;
+	u64 sleep_max;
+	s64 sum_sleep_runtime;
+	u64 block_start;
+	u64 block_max;
+	s64 sum_block_runtime;
+	u64 exec_max;
+	u64 slice_max;
+	u64 nr_migrations_cold;
+	u64 nr_failed_migrations_affine;
+	u64 nr_failed_migrations_running;
+	u64 nr_failed_migrations_hot;
+	u64 nr_forced_migrations;
+	u64 nr_wakeups;
+	u64 nr_wakeups_sync;
+	u64 nr_wakeups_migrate;
+	u64 nr_wakeups_local;
+	u64 nr_wakeups_remote;
+	u64 nr_wakeups_affine;
+	u64 nr_wakeups_affine_attempts;
+	u64 nr_wakeups_passive;
+	u64 nr_wakeups_idle;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct cpumask cpumask_t;
+
+union rcu_special {
+	struct {
+		u8 blocked;
+		u8 need_qs;
+		u8 exp_hint;
+		u8 need_mb;
+	} b;
+	u32 s;
+};
+
+struct sched_info {
+	unsigned long pcount;
+	unsigned long long run_delay;
+	unsigned long long last_arrival;
+	unsigned long long last_queued;
+};
+
+struct plist_node {
+	int prio;
+	struct list_head prio_list;
+	struct list_head node_list;
+};
+
+typedef int __kernel_clockid_t;
+
+typedef __kernel_clockid_t clockid_t;
+
+enum timespec_type {
+	TT_NONE = 0,
+	TT_NATIVE = 1,
+	TT_COMPAT = 2,
+};
+
+struct __kernel_timespec;
+
+struct old_timespec32;
+
+struct pollfd;
+
+struct restart_block {
+	unsigned long arch_data;
+	long (*fn)(struct restart_block *);
+	union {
+		struct {
+			u32 __attribute__((btf_type_tag("user"))) *uaddr;
+			u32 val;
+			u32 flags;
+			u32 bitset;
+			u64 time;
+			u32 __attribute__((btf_type_tag("user"))) *uaddr2;
+		} futex;
+		struct {
+			clockid_t clockid;
+			enum timespec_type type;
+			union {
+				struct __kernel_timespec __attribute__((btf_type_tag("user"))) *rmtp;
+				struct old_timespec32 __attribute__((btf_type_tag("user"))) *compat_rmtp;
+			};
+			u64 expires;
+		} nanosleep;
+		struct {
+			struct pollfd __attribute__((btf_type_tag("user"))) *ufds;
+			int nfds;
+			int has_timeout;
+			unsigned long tv_sec;
+			unsigned long tv_nsec;
+		} poll;
+	};
+};
+
+typedef int __kernel_pid_t;
+
+typedef __kernel_pid_t pid_t;
+
+struct prev_cputime {
+	u64 utime;
+	u64 stime;
+	raw_spinlock_t lock;
+};
+
+struct timerqueue_head {
+	struct rb_root_cached rb_root;
+};
+
+struct posix_cputimer_base {
+	u64 nextevt;
+	struct timerqueue_head tqhead;
+};
+
+struct posix_cputimers {
+	struct posix_cputimer_base bases[3];
+	unsigned int timers_active;
+	unsigned int expiry_active;
+};
+
+struct posix_cputimers_work {
+	struct callback_head work;
+	struct mutex mutex;
+	unsigned int scheduled;
+};
+
+typedef struct {
+	unsigned long sig[1];
+} sigset_t;
+
+struct sigpending {
+	struct list_head list;
+	sigset_t signal;
+};
+
+struct seccomp_filter;
+
+struct seccomp {
+	int mode;
+	atomic_t filter_count;
+	struct seccomp_filter *filter;
+};
+
+struct syscall_user_dispatch {};
+
+struct wake_q_node {
+	struct wake_q_node *next;
+};
+
+struct task_io_accounting {
+	u64 rchar;
+	u64 wchar;
+	u64 syscr;
+	u64 syscw;
+	u64 syscfs;
+	u64 read_bytes;
+	u64 write_bytes;
+	u64 cancelled_write_bytes;
+};
+
+typedef struct {
+	unsigned long bits[1];
+} nodemask_t;
+
+struct arch_tlbflush_unmap_batch {};
+
+struct tlbflush_unmap_batch {
+	struct arch_tlbflush_unmap_batch arch;
+	bool flush_required;
+	bool writable;
+};
+
+struct page;
+
+struct page_frag {
+	struct page *page;
+	__u32 offset;
+	__u32 size;
+};
+
+struct kmap_ctrl {};
+
+struct timer_list {
+	struct hlist_node entry;
+	unsigned long expires;
+	void (*function)(struct timer_list *);
+	u32 flags;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct llist_head {
+	struct llist_node *first;
+};
+
+struct cpu_context {
+	unsigned long x19;
+	unsigned long x20;
+	unsigned long x21;
+	unsigned long x22;
+	unsigned long x23;
+	unsigned long x24;
+	unsigned long x25;
+	unsigned long x26;
+	unsigned long x27;
+	unsigned long x28;
+	unsigned long fp;
+	unsigned long sp;
+	unsigned long pc;
+};
+
+typedef unsigned __int128 __uint128_t;
+
+struct user_fpsimd_state {
+	__uint128_t vregs[32];
+	__u32 fpsr;
+	__u32 fpcr;
+	__u32 __reserved[2];
+};
+
+enum fp_type {
+	FP_STATE_CURRENT = 0,
+	FP_STATE_FPSIMD = 1,
+	FP_STATE_SVE = 2,
+};
+
+struct debug_info {
+	int suspended_step;
+	int bps_disabled;
+	int wps_disabled;
+	struct perf_event *hbp_break[16];
+	struct perf_event *hbp_watch[16];
+};
+
+struct ptrauth_key {
+	unsigned long lo;
+	unsigned long hi;
+};
+
+struct ptrauth_keys_user {
+	struct ptrauth_key apia;
+	struct ptrauth_key apib;
+	struct ptrauth_key apda;
+	struct ptrauth_key apdb;
+	struct ptrauth_key apga;
+};
+
+struct ptrauth_keys_kernel {
+	struct ptrauth_key apia;
+};
+
+struct thread_struct {
+	struct cpu_context cpu_context;
+	long: 64;
+	struct {
+		unsigned long tp_value;
+		unsigned long tp2_value;
+		struct user_fpsimd_state fpsimd_state;
+	} uw;
+	enum fp_type fp_type;
+	unsigned int fpsimd_cpu;
+	void *sve_state;
+	void *sme_state;
+	unsigned int vl[2];
+	unsigned int vl_onexec[2];
+	unsigned long fault_address;
+	unsigned long fault_code;
+	struct debug_info debug;
+	struct ptrauth_keys_user keys_user;
+	struct ptrauth_keys_kernel keys_kernel;
+	u64 mte_ctrl;
+	u64 sctlr_user;
+	u64 svcr;
+	u64 tpidr2_el0;
+	u64 android_vendor_data1;
+};
+
+struct sched_class;
+
+struct task_group;
+
+struct rcu_node;
+
+struct key;
+
+struct nameidata;
+
+struct fs_struct;
+
+struct files_struct;
+
+struct io_uring_task;
+
+struct nsproxy;
+
+struct signal_struct;
+
+struct sighand_struct;
+
+struct audit_context;
+
+struct rt_mutex_waiter;
+
+struct bio_list;
+
+struct blk_plug;
+
+struct reclaim_state;
+
+struct io_context;
+
+struct capture_control;
+
+struct kernel_siginfo;
+
+typedef struct kernel_siginfo kernel_siginfo_t;
+
+struct css_set;
+
+struct robust_list_head;
+
+struct compat_robust_list_head;
+
+struct futex_pi_state;
+
+struct task_delay_info;
+
+struct kunit;
+
+struct mem_cgroup;
+
+struct gendisk;
+
+struct uprobe_task;
+
+struct vm_struct;
+
+struct bpf_local_storage;
+
+struct bpf_run_ctx;
+
+struct task_struct {
+	struct thread_info thread_info;
+	unsigned int __state;
+	unsigned int saved_state;
+	void *stack;
+	refcount_t usage;
+	unsigned int flags;
+	unsigned int ptrace;
+	int on_cpu;
+	struct __call_single_node wake_entry;
+	unsigned int wakee_flips;
+	unsigned long wakee_flip_decay_ts;
+	struct task_struct *last_wakee;
+	int recent_used_cpu;
+	int wake_cpu;
+	int on_rq;
+	int prio;
+	int static_prio;
+	int normal_prio;
+	unsigned int rt_priority;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_entity se;
+	struct sched_rt_entity rt;
+	struct sched_dl_entity dl;
+	const struct sched_class *sched_class;
+	struct task_group *sched_task_group;
+	struct uclamp_se uclamp_req[2];
+	struct uclamp_se uclamp[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_statistics stats;
+	struct hlist_head preempt_notifiers;
+	unsigned int policy;
+	int nr_cpus_allowed;
+	const cpumask_t *cpus_ptr;
+	cpumask_t *user_cpus_ptr;
+	cpumask_t cpus_mask;
+	void *migration_pending;
+	unsigned short migration_disabled;
+	unsigned short migration_flags;
+	int rcu_read_lock_nesting;
+	union rcu_special rcu_read_unlock_special;
+	struct list_head rcu_node_entry;
+	struct rcu_node *rcu_blocked_node;
+	unsigned long rcu_tasks_nvcsw;
+	u8 rcu_tasks_holdout;
+	u8 rcu_tasks_idx;
+	int rcu_tasks_idle_cpu;
+	struct list_head rcu_tasks_holdout_list;
+	int trc_reader_nesting;
+	int trc_ipi_to_cpu;
+	union rcu_special trc_reader_special;
+	struct list_head trc_holdout_list;
+	struct list_head trc_blkd_node;
+	int trc_blkd_cpu;
+	struct sched_info sched_info;
+	struct list_head tasks;
+	struct plist_node pushable_tasks;
+	struct rb_node pushable_dl_tasks;
+	struct mm_struct *mm;
+	struct mm_struct *active_mm;
+	int exit_state;
+	int exit_code;
+	int exit_signal;
+	int pdeath_signal;
+	unsigned long jobctl;
+	unsigned int personality;
+	unsigned int sched_reset_on_fork: 1;
+	unsigned int sched_contributes_to_load: 1;
+	unsigned int sched_migrated: 1;
+	long: 29;
+	unsigned int sched_remote_wakeup: 1;
+	unsigned int in_execve: 1;
+	unsigned int in_iowait: 1;
+	unsigned int in_user_fault: 1;
+	unsigned int in_lru_fault: 1;
+	unsigned int no_cgroup_migration: 1;
+	unsigned int frozen: 1;
+	unsigned int use_memdelay: 1;
+	unsigned int in_memstall: 1;
+	unsigned int in_page_owner: 1;
+	unsigned int in_eventfd: 1;
+	unsigned int in_thrashing: 1;
+	unsigned long atomic_flags;
+	struct restart_block restart_block;
+	pid_t pid;
+	pid_t tgid;
+	unsigned long stack_canary;
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *real_parent;
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *parent;
+	struct list_head children;
+	struct list_head sibling;
+	struct task_struct *group_leader;
+	struct list_head ptraced;
+	struct list_head ptrace_entry;
+	struct pid *thread_pid;
+	struct hlist_node pid_links[4];
+	struct list_head thread_group;
+	struct list_head thread_node;
+	struct completion *vfork_done;
+	int __attribute__((btf_type_tag("user"))) *set_child_tid;
+	int __attribute__((btf_type_tag("user"))) *clear_child_tid;
+	void *worker_private;
+	u64 utime;
+	u64 stime;
+	u64 gtime;
+	u64 *time_in_state;
+	unsigned int max_state;
+	struct prev_cputime prev_cputime;
+	unsigned long nvcsw;
+	unsigned long nivcsw;
+	u64 start_time;
+	u64 start_boottime;
+	unsigned long min_flt;
+	unsigned long maj_flt;
+	struct posix_cputimers posix_cputimers;
+	struct posix_cputimers_work posix_cputimers_work;
+	const struct cred __attribute__((btf_type_tag("rcu"))) *ptracer_cred;
+	const struct cred __attribute__((btf_type_tag("rcu"))) *real_cred;
+	const struct cred __attribute__((btf_type_tag("rcu"))) *cred;
+	struct key *cached_requested_key;
+	char comm[16];
+	struct nameidata *nameidata;
+	unsigned long last_switch_count;
+	unsigned long last_switch_time;
+	struct fs_struct *fs;
+	struct files_struct *files;
+	struct io_uring_task *io_uring;
+	struct nsproxy *nsproxy;
+	struct signal_struct *signal;
+	struct sighand_struct __attribute__((btf_type_tag("rcu"))) *sighand;
+	sigset_t blocked;
+	sigset_t real_blocked;
+	sigset_t saved_sigmask;
+	struct sigpending pending;
+	unsigned long sas_ss_sp;
+	size_t sas_ss_size;
+	unsigned int sas_ss_flags;
+	struct callback_head *task_works;
+	struct audit_context *audit_context;
+	kuid_t loginuid;
+	unsigned int sessionid;
+	struct seccomp seccomp;
+	struct syscall_user_dispatch syscall_dispatch;
+	u64 parent_exec_id;
+	u64 self_exec_id;
+	spinlock_t alloc_lock;
+	raw_spinlock_t pi_lock;
+	struct wake_q_node wake_q;
+	int wake_q_count;
+	struct rb_root_cached pi_waiters;
+	struct task_struct *pi_top_task;
+	struct rt_mutex_waiter *pi_blocked_on;
+	void *journal_info;
+	struct bio_list *bio_list;
+	struct blk_plug *plug;
+	struct reclaim_state *reclaim_state;
+	struct io_context *io_context;
+	struct capture_control *capture_control;
+	unsigned long ptrace_message;
+	kernel_siginfo_t *last_siginfo;
+	struct task_io_accounting ioac;
+	unsigned int psi_flags;
+	u64 acct_rss_mem1;
+	u64 acct_vm_mem1;
+	u64 acct_timexpd;
+	nodemask_t mems_allowed;
+	seqcount_spinlock_t mems_allowed_seq;
+	int cpuset_mem_spread_rotor;
+	int cpuset_slab_spread_rotor;
+	struct css_set __attribute__((btf_type_tag("rcu"))) *cgroups;
+	struct list_head cg_list;
+	struct robust_list_head __attribute__((btf_type_tag("user"))) *robust_list;
+	struct compat_robust_list_head __attribute__((btf_type_tag("user"))) *compat_robust_list;
+	struct list_head pi_state_list;
+	struct futex_pi_state *pi_state_cache;
+	struct mutex futex_exit_mutex;
+	unsigned int futex_state;
+	struct perf_event_context *perf_event_ctxp;
+	struct mutex perf_event_mutex;
+	struct list_head perf_event_list;
+	struct tlbflush_unmap_batch tlb_ubc;
+	struct pipe_inode_info *splice_pipe;
+	struct page_frag task_frag;
+	struct task_delay_info *delays;
+	int nr_dirtied;
+	int nr_dirtied_pause;
+	unsigned long dirty_paused_when;
+	u64 timer_slack_ns;
+	u64 default_timer_slack_ns;
+	struct kunit *kunit_test;
+	unsigned long trace_recursion;
+	struct mem_cgroup *memcg_in_oom;
+	gfp_t memcg_oom_gfp_mask;
+	int memcg_oom_order;
+	unsigned int memcg_nr_pages_over_high;
+	struct mem_cgroup *active_memcg;
+	struct gendisk *throttle_disk;
+	struct uprobe_task *utask;
+	struct kmap_ctrl kmap_ctrl;
+	struct callback_head rcu;
+	refcount_t rcu_users;
+	int pagefault_disabled;
+	struct task_struct *oom_reaper_list;
+	struct timer_list oom_reaper_timer;
+	struct vm_struct *stack_vm_area;
+	refcount_t stack_refcount;
+	void *security;
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) *bpf_storage;
+	struct bpf_run_ctx *bpf_ctx;
+	u64 android_vendor_data1[64];
+	u64 android_oem_data1[6];
+	struct llist_head kretprobe_instances;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+	long: 64;
+	struct thread_struct thread;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct seqcount_raw_spinlock {
+	seqcount_t seqcount;
+};
+
+typedef struct seqcount_raw_spinlock seqcount_raw_spinlock_t;
+
+struct hrtimer_cpu_base;
+
+struct hrtimer_clock_base {
+	struct hrtimer_cpu_base *cpu_base;
+	unsigned int index;
+	clockid_t clockid;
+	seqcount_raw_spinlock_t seq;
+	struct hrtimer *running;
+	struct timerqueue_head active;
+	ktime_t (*get_time)();
+	ktime_t offset;
+};
+
+struct hrtimer_cpu_base {
+	raw_spinlock_t lock;
+	unsigned int cpu;
+	unsigned int active_bases;
+	unsigned int clock_was_set_seq;
+	unsigned int hres_active: 1;
+	unsigned int in_hrtirq: 1;
+	unsigned int hang_detected: 1;
+	unsigned int softirq_activated: 1;
+	unsigned int online: 1;
+	unsigned int nr_events;
+	unsigned short nr_retries;
+	unsigned short nr_hangs;
+	unsigned int max_hang_time;
+	ktime_t expires_next;
+	struct hrtimer *next_timer;
+	ktime_t softirq_expires_next;
+	struct hrtimer *softirq_next_timer;
+	struct hrtimer_clock_base clock_base[8];
+};
+
+struct rq;
+
+struct rq_flags;
+
+struct affinity_context;
+
+struct sched_class {
+	int uclamp_enabled;
+	void (*enqueue_task)(struct rq *, struct task_struct *, int);
+	void (*dequeue_task)(struct rq *, struct task_struct *, int);
+	void (*yield_task)(struct rq *);
+	bool (*yield_to_task)(struct rq *, struct task_struct *);
+	void (*check_preempt_curr)(struct rq *, struct task_struct *, int);
+	struct task_struct * (*pick_next_task)(struct rq *);
+	void (*put_prev_task)(struct rq *, struct task_struct *);
+	void (*set_next_task)(struct rq *, struct task_struct *, bool);
+	int (*balance)(struct rq *, struct task_struct *, struct rq_flags *);
+	int (*select_task_rq)(struct task_struct *, int, int);
+	struct task_struct * (*pick_task)(struct rq *);
+	void (*migrate_task_rq)(struct task_struct *, int);
+	void (*task_woken)(struct rq *, struct task_struct *);
+	void (*set_cpus_allowed)(struct task_struct *, struct affinity_context *);
+	void (*rq_online)(struct rq *);
+	void (*rq_offline)(struct rq *);
+	struct rq * (*find_lock_rq)(struct task_struct *, struct rq *);
+	void (*task_tick)(struct rq *, struct task_struct *, int);
+	void (*task_fork)(struct task_struct *);
+	void (*task_dead)(struct task_struct *);
+	void (*switched_from)(struct rq *, struct task_struct *);
+	void (*switched_to)(struct rq *, struct task_struct *);
+	void (*prio_changed)(struct rq *, struct task_struct *, int);
+	unsigned int (*get_rr_interval)(struct rq *, struct task_struct *);
+	void (*update_curr)(struct rq *);
+	void (*task_change_group)(struct task_struct *);
+};
+
+typedef struct {} lockdep_map_p;
+
+struct maple_tree {
+	union {
+		spinlock_t ma_lock;
+		lockdep_map_p ma_external_lock;
+	};
+	unsigned int ma_flags;
+	void __attribute__((btf_type_tag("rcu"))) *ma_root;
+};
+
+typedef u64 pgdval_t;
+
+typedef struct {
+	pgdval_t pgd;
+} pgd_t;
+
+struct percpu_counter {
+	raw_spinlock_t lock;
+	s64 count;
+	struct list_head list;
+	s32 __attribute__((btf_type_tag("percpu"))) *counters;
+};
+
+typedef struct {
+	atomic64_t id;
+	void *sigpage;
+	refcount_t pinned;
+	void *vdso;
+	unsigned long flags;
+} mm_context_t;
+
+struct xol_area;
+
+struct uprobes_state {
+	struct xol_area *xol_area;
+};
+
+struct linux_binfmt;
+
+struct kioctx_table;
+
+struct mmu_notifier_subscriptions;
+
+struct mm_struct {
+	struct {
+		struct {
+			atomic_t mm_count;
+			long: 64;
+			long: 64;
+			long: 64;
+			long: 64;
+			long: 64;
+			long: 64;
+			long: 64;
+		};
+		struct maple_tree mm_mt;
+		unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+		unsigned long mmap_base;
+		unsigned long mmap_legacy_base;
+		unsigned long task_size;
+		pgd_t *pgd;
+		atomic_t membarrier_state;
+		atomic_t mm_users;
+		atomic_long_t pgtables_bytes;
+		int map_count;
+		spinlock_t page_table_lock;
+		struct rw_semaphore mmap_lock;
+		struct list_head mmlist;
+		int mm_lock_seq;
+		unsigned long hiwater_rss;
+		unsigned long hiwater_vm;
+		unsigned long total_vm;
+		unsigned long locked_vm;
+		atomic64_t pinned_vm;
+		unsigned long data_vm;
+		unsigned long exec_vm;
+		unsigned long stack_vm;
+		unsigned long def_flags;
+		seqcount_t write_protect_seq;
+		spinlock_t arg_lock;
+		unsigned long start_code;
+		unsigned long end_code;
+		unsigned long start_data;
+		unsigned long end_data;
+		unsigned long start_brk;
+		unsigned long brk;
+		unsigned long start_stack;
+		unsigned long arg_start;
+		unsigned long arg_end;
+		unsigned long env_start;
+		unsigned long env_end;
+		unsigned long saved_auxv[50];
+		struct percpu_counter rss_stat[4];
+		struct linux_binfmt *binfmt;
+		mm_context_t context;
+		unsigned long flags;
+		spinlock_t ioctx_lock;
+		struct kioctx_table __attribute__((btf_type_tag("rcu"))) *ioctx_table;
+		struct task_struct __attribute__((btf_type_tag("rcu"))) *owner;
+		struct user_namespace *user_ns;
+		struct file __attribute__((btf_type_tag("rcu"))) *exe_file;
+		struct mmu_notifier_subscriptions *notifier_subscriptions;
+		atomic_t tlb_flush_pending;
+		atomic_t tlb_flush_batched;
+		struct uprobes_state uprobes_state;
+		struct work_struct async_put_work;
+		struct {
+			struct list_head list;
+			unsigned long bitmap;
+			struct mem_cgroup *memcg;
+		} lru_gen;
+		u64 android_kabi_reserved1;
+		u64 android_backport_reserved1;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	unsigned long cpu_bitmap[0];
+};
+
+struct linux_binprm;
+
+struct coredump_params;
+
+struct linux_binfmt {
+	struct list_head lh;
+	struct module *module;
+	int (*load_binary)(struct linux_binprm *);
+	int (*load_shlib)(struct file *);
+	int (*core_dump)(struct coredump_params *);
+	unsigned long min_coredump;
+};
+
+struct rlimit {
+	__kernel_ulong_t rlim_cur;
+	__kernel_ulong_t rlim_max;
+};
+
+struct linux_binprm {
+	struct vm_area_struct *vma;
+	unsigned long vma_pages;
+	struct mm_struct *mm;
+	unsigned long p;
+	unsigned long argmin;
+	unsigned int have_execfd: 1;
+	unsigned int execfd_creds: 1;
+	unsigned int secureexec: 1;
+	unsigned int point_of_no_return: 1;
+	struct file *executable;
+	struct file *interpreter;
+	struct file *file;
+	struct cred *cred;
+	int unsafe;
+	unsigned int per_clear;
+	int argc;
+	int envc;
+	const char *filename;
+	const char *interp;
+	const char *fdpath;
+	unsigned int interp_flags;
+	int execfd;
+	unsigned long loader;
+	unsigned long exec;
+	struct rlimit rlim_stack;
+	char buf[256];
+};
+
+typedef unsigned long vm_flags_t;
+
+typedef u64 pteval_t;
+
+typedef struct {
+	pteval_t pgprot;
+} pgprot_t;
+
+struct userfaultfd_ctx;
+
+struct vm_userfaultfd_ctx {
+	struct userfaultfd_ctx *ctx;
+};
+
+struct vma_lock;
+
+struct anon_vma;
+
+struct vm_operations_struct;
+
+struct anon_vma_name;
+
+struct vm_area_struct {
+	union {
+		struct {
+			unsigned long vm_start;
+			unsigned long vm_end;
+		};
+		struct callback_head vm_rcu;
+	};
+	struct mm_struct *vm_mm;
+	pgprot_t vm_page_prot;
+	union {
+		const vm_flags_t vm_flags;
+		vm_flags_t __vm_flags;
+	};
+	bool detached;
+	int vm_lock_seq;
+	struct vma_lock *vm_lock;
+	struct {
+		struct rb_node rb;
+		unsigned long rb_subtree_last;
+	} shared;
+	struct list_head anon_vma_chain;
+	struct anon_vma *anon_vma;
+	const struct vm_operations_struct *vm_ops;
+	unsigned long vm_pgoff;
+	struct file *vm_file;
+	void *vm_private_data;
+	struct anon_vma_name *anon_name;
+	atomic_long_t swap_readahead_info;
+	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct vma_lock {
+	struct rw_semaphore lock;
+};
+
+struct anon_vma {
+	struct anon_vma *root;
+	struct rw_semaphore rwsem;
+	atomic_t refcount;
+	unsigned long num_children;
+	unsigned long num_active_vmas;
+	struct anon_vma *parent;
+	struct rb_root_cached rb_root;
+};
+
+typedef unsigned int vm_fault_t;
+
+struct vm_fault;
+
+struct vm_operations_struct {
+	void (*open)(struct vm_area_struct *);
+	void (*close)(struct vm_area_struct *);
+	int (*may_split)(struct vm_area_struct *, unsigned long);
+	int (*mremap)(struct vm_area_struct *);
+	int (*mprotect)(struct vm_area_struct *, unsigned long, unsigned long, unsigned long);
+	vm_fault_t (*fault)(struct vm_fault *);
+	vm_fault_t (*huge_fault)(struct vm_fault *, unsigned int);
+	vm_fault_t (*map_pages)(struct vm_fault *, unsigned long, unsigned long);
+	unsigned long (*pagesize)(struct vm_area_struct *);
+	vm_fault_t (*page_mkwrite)(struct vm_fault *);
+	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
+	int (*access)(struct vm_area_struct *, unsigned long, void *, int, int);
+	const char * (*name)(struct vm_area_struct *);
+	struct page * (*find_special_page)(struct vm_area_struct *, unsigned long);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef struct {
+	pteval_t pte;
+} pte_t;
+
+typedef u64 pmdval_t;
+
+typedef struct {
+	pmdval_t pmd;
+} pmd_t;
+
+enum fault_flag {
+	FAULT_FLAG_WRITE = 1,
+	FAULT_FLAG_MKWRITE = 2,
+	FAULT_FLAG_ALLOW_RETRY = 4,
+	FAULT_FLAG_RETRY_NOWAIT = 8,
+	FAULT_FLAG_KILLABLE = 16,
+	FAULT_FLAG_TRIED = 32,
+	FAULT_FLAG_USER = 64,
+	FAULT_FLAG_REMOTE = 128,
+	FAULT_FLAG_INSTRUCTION = 256,
+	FAULT_FLAG_INTERRUPTIBLE = 512,
+	FAULT_FLAG_UNSHARE = 1024,
+	FAULT_FLAG_ORIG_PTE_VALID = 2048,
+	FAULT_FLAG_VMA_LOCK = 4096,
+};
+
+typedef struct {
+	pgd_t pgd;
+} p4d_t;
+
+typedef struct {
+	p4d_t p4d;
+} pud_t;
+
+typedef struct page *pgtable_t;
+
+struct vm_fault {
+	struct {
+		struct vm_area_struct *vma;
+		gfp_t gfp_mask;
+		unsigned long pgoff;
+		unsigned long address;
+		unsigned long real_address;
+	};
+	enum fault_flag flags;
+	pmd_t *pmd;
+	pud_t *pud;
+	union {
+		pte_t orig_pte;
+		pmd_t orig_pmd;
+	};
+	struct page *cow_page;
+	struct page *page;
+	pte_t *pte;
+	spinlock_t *ptl;
+	pgtable_t prealloc_pte;
+};
+
+struct page_pool;
+
+struct dev_pagemap;
+
+struct page {
+	unsigned long flags;
+	union {
+		struct {
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+				struct list_head buddy_list;
+				struct list_head pcp_list;
+			};
+			struct address_space *mapping;
+			union {
+				unsigned long index;
+				unsigned long share;
+			};
+			unsigned long private;
+		};
+		struct {
+			unsigned long pp_magic;
+			struct page_pool *pp;
+			unsigned long _pp_mapping_pad;
+			unsigned long dma_addr;
+			union {
+				unsigned long dma_addr_upper;
+				atomic_long_t pp_frag_count;
+			};
+		};
+		struct {
+			unsigned long compound_head;
+		};
+		struct {
+			struct dev_pagemap *pgmap;
+			void *zone_device_data;
+		};
+		struct callback_head callback_head;
+	};
+	union {
+		atomic_t _mapcount;
+		unsigned int page_type;
+	};
+	atomic_t _refcount;
+	unsigned long memcg_data;
+};
+
+struct range {
+	u64 start;
+	u64 end;
+};
+
+struct vmem_altmap {
+	unsigned long base_pfn;
+	const unsigned long end_pfn;
+	const unsigned long reserve;
+	unsigned long free;
+	unsigned long align;
+	unsigned long alloc;
+};
+
+struct percpu_ref_data;
+
+struct percpu_ref {
+	unsigned long percpu_count_ptr;
+	struct percpu_ref_data *data;
+};
+
+struct swait_queue_head {
+	raw_spinlock_t lock;
+	struct list_head task_list;
+};
+
+struct completion {
+	unsigned int done;
+	struct swait_queue_head wait;
+};
+
+enum memory_type {
+	MEMORY_DEVICE_PRIVATE = 1,
+	MEMORY_DEVICE_COHERENT = 2,
+	MEMORY_DEVICE_FS_DAX = 3,
+	MEMORY_DEVICE_GENERIC = 4,
+	MEMORY_DEVICE_PCI_P2PDMA = 5,
+};
+
+struct dev_pagemap_ops;
+
+struct dev_pagemap {
+	struct vmem_altmap altmap;
+	struct percpu_ref ref;
+	struct completion done;
+	enum memory_type type;
+	unsigned int flags;
+	unsigned long vmemmap_shift;
+	const struct dev_pagemap_ops *ops;
+	void *owner;
+	int nr_range;
+	union {
+		struct range range;
+		struct {
+			struct {} __empty_ranges;
+			struct range ranges[0];
+		};
+	};
+};
+
+typedef void percpu_ref_func_t(struct percpu_ref *);
+
+struct percpu_ref_data {
+	atomic_long_t count;
+	percpu_ref_func_t *release;
+	percpu_ref_func_t *confirm_switch;
+	bool force_atomic: 1;
+	bool allow_reinit: 1;
+	struct callback_head rcu;
+	struct percpu_ref *ref;
+};
+
+struct dev_pagemap_ops {
+	void (*page_free)(struct page *);
+	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
+	int (*memory_failure)(struct dev_pagemap *, unsigned long, unsigned long, int);
+};
+
+struct anon_vma_name {
+	struct kref kref;
+	char name[0];
+};
+
+struct userfaultfd_ctx {
+	wait_queue_head_t fault_pending_wqh;
+	wait_queue_head_t fault_wqh;
+	wait_queue_head_t fd_wqh;
+	wait_queue_head_t event_wqh;
+	seqcount_spinlock_t refile_seq;
+	refcount_t refcount;
+	unsigned int flags;
+	unsigned int features;
+	bool released;
+	struct rw_semaphore map_changing_lock;
+	atomic_t mmap_changing;
+	struct mm_struct *mm;
+};
+
+typedef struct {
+	u64 val;
+} kernel_cap_t;
+
+struct user_struct;
+
+struct group_info;
+
+struct cred {
+	atomic_long_t usage;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t suid;
+	kgid_t sgid;
+	kuid_t euid;
+	kgid_t egid;
+	kuid_t fsuid;
+	kgid_t fsgid;
+	unsigned int securebits;
+	kernel_cap_t cap_inheritable;
+	kernel_cap_t cap_permitted;
+	kernel_cap_t cap_effective;
+	kernel_cap_t cap_bset;
+	kernel_cap_t cap_ambient;
+	unsigned char jit_keyring;
+	struct key *session_keyring;
+	struct key *process_keyring;
+	struct key *thread_keyring;
+	struct key *request_key_auth;
+	void *security;
+	struct user_struct *user;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct group_info *group_info;
+	union {
+		int non_rcu;
+		struct callback_head rcu;
+	};
+};
+
+struct key_type;
+
+struct key_tag;
+
+struct keyring_index_key {
+	unsigned long hash;
+	union {
+		struct {
+			u16 desc_len;
+			char desc[6];
+		};
+		unsigned long x;
+	};
+	struct key_type *type;
+	struct key_tag *domain_tag;
+	const char *description;
+};
+
+struct assoc_array_ptr;
+
+struct assoc_array {
+	struct assoc_array_ptr *root;
+	unsigned long nr_leaves_on_tree;
+};
+
+union key_payload {
+	void __attribute__((btf_type_tag("rcu"))) *rcu_data0;
+	void *data[4];
+};
+
+typedef s32 int32_t;
+
+typedef int32_t key_serial_t;
+
+typedef u32 uint32_t;
+
+typedef uint32_t key_perm_t;
+
+struct key_user;
+
+struct key_restriction;
+
+struct key {
+	refcount_t usage;
+	key_serial_t serial;
+	union {
+		struct list_head graveyard_link;
+		struct rb_node serial_node;
+	};
+	struct rw_semaphore sem;
+	struct key_user *user;
+	void *security;
+	union {
+		time64_t expiry;
+		time64_t revoked_at;
+	};
+	time64_t last_used_at;
+	kuid_t uid;
+	kgid_t gid;
+	key_perm_t perm;
+	unsigned short quotalen;
+	unsigned short datalen;
+	short state;
+	unsigned long flags;
+	union {
+		struct keyring_index_key index_key;
+		struct {
+			unsigned long hash;
+			unsigned long len_desc;
+			struct key_type *type;
+			struct key_tag *domain_tag;
+			char *description;
+		};
+	};
+	union {
+		union key_payload payload;
+		struct {
+			struct list_head name_link;
+			struct assoc_array keys;
+		};
+	};
+	struct key_restriction *restrict_link;
+};
+
+struct key_tag {
+	struct callback_head rcu;
+	refcount_t usage;
+	bool removed;
+};
+
+typedef int (*key_restrict_link_func_t)(struct key *, const struct key_type *, const union key_payload *, struct key *);
+
+struct key_restriction {
+	key_restrict_link_func_t check;
+	struct key *key;
+	struct key_type *keytype;
+};
+
+typedef int (*request_key_actor_t)(struct key *, void *);
+
+struct key_preparsed_payload;
+
+struct key_match_data;
+
+struct seq_file;
+
+struct kernel_pkey_params;
+
+struct kernel_pkey_query;
+
+struct key_type {
+	const char *name;
+	size_t def_datalen;
+	unsigned int flags;
+	int (*vet_description)(const char *);
+	int (*preparse)(struct key_preparsed_payload *);
+	void (*free_preparse)(struct key_preparsed_payload *);
+	int (*instantiate)(struct key *, struct key_preparsed_payload *);
+	int (*update)(struct key *, struct key_preparsed_payload *);
+	int (*match_preparse)(struct key_match_data *);
+	void (*match_free)(struct key_match_data *);
+	void (*revoke)(struct key *);
+	void (*destroy)(struct key *);
+	void (*describe)(const struct key *, struct seq_file *);
+	long (*read)(const struct key *, char *, size_t);
+	request_key_actor_t request_key;
+	struct key_restriction * (*lookup_restriction)(const char *);
+	int (*asym_query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
+	int (*asym_eds_op)(struct kernel_pkey_params *, const void *, void *);
+	int (*asym_verify_signature)(struct kernel_pkey_params *, const void *, const void *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	struct list_head link;
+	struct lock_class_key lock_class;
+};
+
+struct ratelimit_state {
+	raw_spinlock_t lock;
+	int interval;
+	int burst;
+	int printed;
+	int missed;
+	unsigned long begin;
+	unsigned long flags;
+};
+
+struct user_struct {
+	refcount_t __count;
+	struct percpu_counter epoll_watches;
+	unsigned long unix_inflight;
+	atomic_long_t pipe_bufs;
+	struct hlist_node uidhash_node;
+	kuid_t uid;
+	atomic_long_t locked_vm;
+	struct ratelimit_state ratelimit;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_oem_data1[2];
+};
+
+struct uid_gid_extent {
+	u32 first;
+	u32 lower_first;
+	u32 count;
+};
+
+struct uid_gid_map {
+	u32 nr_extents;
+	union {
+		struct uid_gid_extent extent[5];
+		struct {
+			struct uid_gid_extent *forward;
+			struct uid_gid_extent *reverse;
+		};
+	};
+};
+
+struct ctl_table;
+
+struct ctl_table_root;
+
+struct ctl_table_set;
+
+struct ctl_dir;
+
+struct ctl_node;
+
+struct ctl_table_header {
+	union {
+		struct {
+			struct ctl_table *ctl_table;
+			int ctl_table_size;
+			int used;
+			int count;
+			int nreg;
+		};
+		struct callback_head rcu;
+	};
+	struct completion *unregistering;
+	struct ctl_table *ctl_table_arg;
+	struct ctl_table_root *root;
+	struct ctl_table_set *set;
+	struct ctl_dir *parent;
+	struct ctl_node *node;
+	struct hlist_head inodes;
+};
+
+struct ctl_dir {
+	struct ctl_table_header header;
+	struct rb_root root;
+};
+
+struct ctl_table_set {
+	int (*is_seen)(struct ctl_table_set *);
+	struct ctl_dir dir;
+};
+
+struct user_namespace {
+	struct uid_gid_map uid_map;
+	struct uid_gid_map gid_map;
+	struct uid_gid_map projid_map;
+	struct user_namespace *parent;
+	int level;
+	kuid_t owner;
+	kgid_t group;
+	struct ns_common ns;
+	unsigned long flags;
+	bool parent_could_setfcap;
+	struct list_head keyring_name_list;
+	struct key *user_keyring_register;
+	struct rw_semaphore keyring_sem;
+	struct work_struct work;
+	struct ctl_table_set set;
+	struct ctl_table_header *sysctls;
+	struct ucounts *ucounts;
+	long ucount_max[10];
+	long rlimit_max[4];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct nsset;
+
+struct proc_ns_operations {
+	const char *name;
+	const char *real_ns_name;
+	int type;
+	struct ns_common * (*get)(struct task_struct *);
+	void (*put)(struct ns_common *);
+	int (*install)(struct nsset *, struct ns_common *);
+	struct user_namespace * (*owner)(struct ns_common *);
+	struct ns_common * (*get_parent)(struct ns_common *);
+};
+
+struct nsset {
+	unsigned int flags;
+	struct nsproxy *nsproxy;
+	struct fs_struct *fs;
+	const struct cred *cred;
+};
+
+struct uts_namespace;
+
+struct ipc_namespace;
+
+struct mnt_namespace;
+
+struct time_namespace;
+
+struct cgroup_namespace;
+
+struct nsproxy {
+	refcount_t count;
+	struct uts_namespace *uts_ns;
+	struct ipc_namespace *ipc_ns;
+	struct mnt_namespace *mnt_ns;
+	struct pid_namespace *pid_ns_for_children;
+	struct net *net_ns;
+	struct time_namespace *time_ns;
+	struct time_namespace *time_ns_for_children;
+	struct cgroup_namespace *cgroup_ns;
+};
+
+struct new_utsname {
+	char sysname[65];
+	char nodename[65];
+	char release[65];
+	char version[65];
+	char machine[65];
+	char domainname[65];
+};
+
+struct uts_namespace {
+	struct new_utsname name;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+};
+
+struct ucounts {
+	struct hlist_node node;
+	struct user_namespace *ns;
+	kuid_t uid;
+	atomic_t count;
+	atomic_long_t ucount[10];
+	atomic_long_t rlimit[4];
+};
+
+struct ref_tracker_dir {};
+
+struct notifier_block;
+
+struct raw_notifier_head {
+	struct notifier_block __attribute__((btf_type_tag("rcu"))) *head;
+};
+
+struct prot_inuse;
+
+struct netns_core {
+	struct ctl_table_header *sysctl_hdr;
+	int sysctl_somaxconn;
+	u8 sysctl_txrehash;
+	struct prot_inuse __attribute__((btf_type_tag("percpu"))) *prot_inuse;
+	struct cpumask *rps_default_mask;
+};
+
+struct ipstats_mib;
+
+struct tcp_mib;
+
+struct linux_mib;
+
+struct udp_mib;
+
+struct linux_xfrm_mib;
+
+struct icmp_mib;
+
+struct icmpmsg_mib;
+
+struct icmpv6_mib;
+
+struct icmpv6msg_mib;
+
+struct proc_dir_entry;
+
+struct netns_mib {
+	struct ipstats_mib __attribute__((btf_type_tag("percpu"))) *ip_statistics;
+	struct ipstats_mib __attribute__((btf_type_tag("percpu"))) *ipv6_statistics;
+	struct tcp_mib __attribute__((btf_type_tag("percpu"))) *tcp_statistics;
+	struct linux_mib __attribute__((btf_type_tag("percpu"))) *net_statistics;
+	struct udp_mib __attribute__((btf_type_tag("percpu"))) *udp_statistics;
+	struct udp_mib __attribute__((btf_type_tag("percpu"))) *udp_stats_in6;
+	struct linux_xfrm_mib __attribute__((btf_type_tag("percpu"))) *xfrm_statistics;
+	struct udp_mib __attribute__((btf_type_tag("percpu"))) *udplite_statistics;
+	struct udp_mib __attribute__((btf_type_tag("percpu"))) *udplite_stats_in6;
+	struct icmp_mib __attribute__((btf_type_tag("percpu"))) *icmp_statistics;
+	struct icmpmsg_mib *icmpmsg_statistics;
+	struct icmpv6_mib __attribute__((btf_type_tag("percpu"))) *icmpv6_statistics;
+	struct icmpv6msg_mib *icmpv6msg_statistics;
+	struct proc_dir_entry *proc_net_devsnmp6;
+};
+
+struct netns_packet {
+	struct mutex sklist_lock;
+	struct hlist_head sklist;
+};
+
+struct unix_table {
+	spinlock_t *locks;
+	struct hlist_head *buckets;
+};
+
+struct netns_unix {
+	struct unix_table table;
+	int sysctl_max_dgram_qlen;
+	struct ctl_table_header *ctl;
+};
+
+struct blocking_notifier_head {
+	struct rw_semaphore rwsem;
+	struct notifier_block __attribute__((btf_type_tag("rcu"))) *head;
+};
+
+struct netns_nexthop {
+	struct rb_root rb_root;
+	struct hlist_head *devhash;
+	unsigned int seq;
+	u32 last_id_allocated;
+	struct blocking_notifier_head notifier_chain;
+};
+
+struct inet_hashinfo;
+
+struct inet_timewait_death_row {
+	refcount_t tw_refcount;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct inet_hashinfo *hashinfo;
+	int sysctl_max_tw_buckets;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct {
+	seqcount_spinlock_t seqcount;
+	spinlock_t lock;
+} seqlock_t;
+
+struct local_ports {
+	seqlock_t lock;
+	int range[2];
+	bool warned;
+};
+
+struct ping_group_range {
+	seqlock_t lock;
+	kgid_t range[2];
+};
+
+typedef struct {
+	u64 key[2];
+} siphash_key_t;
+
+struct udp_table;
+
+struct ipv4_devconf;
+
+struct ip_ra_chain;
+
+struct fib_rules_ops;
+
+struct fib_table;
+
+struct sock;
+
+struct inet_peer_base;
+
+struct fqdir;
+
+struct tcp_congestion_ops;
+
+struct tcp_fastopen_context;
+
+struct fib_notifier_ops;
+
+struct netns_ipv4 {
+	struct inet_timewait_death_row tcp_death_row;
+	struct udp_table *udp_table;
+	struct ctl_table_header *forw_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *ipv4_hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *xfrm4_hdr;
+	struct ipv4_devconf *devconf_all;
+	struct ipv4_devconf *devconf_dflt;
+	struct ip_ra_chain __attribute__((btf_type_tag("rcu"))) *ra_chain;
+	struct mutex ra_mutex;
+	struct fib_rules_ops *rules_ops;
+	struct fib_table __attribute__((btf_type_tag("rcu"))) *fib_main;
+	struct fib_table __attribute__((btf_type_tag("rcu"))) *fib_default;
+	unsigned int fib_rules_require_fldissect;
+	bool fib_has_custom_rules;
+	bool fib_has_custom_local_routes;
+	bool fib_offload_disabled;
+	u8 sysctl_tcp_shrink_window;
+	struct hlist_head *fib_table_hash;
+	struct sock *fibnl;
+	struct sock *mc_autojoin_sk;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	u8 sysctl_icmp_echo_ignore_all;
+	u8 sysctl_icmp_echo_enable_probe;
+	u8 sysctl_icmp_echo_ignore_broadcasts;
+	u8 sysctl_icmp_ignore_bogus_error_responses;
+	u8 sysctl_icmp_errors_use_inbound_ifaddr;
+	int sysctl_icmp_ratelimit;
+	int sysctl_icmp_ratemask;
+	u32 ip_rt_min_pmtu;
+	int ip_rt_mtu_expires;
+	int ip_rt_min_advmss;
+	struct local_ports ip_local_ports;
+	u8 sysctl_tcp_ecn;
+	u8 sysctl_tcp_ecn_fallback;
+	u8 sysctl_ip_default_ttl;
+	u8 sysctl_ip_no_pmtu_disc;
+	u8 sysctl_ip_fwd_use_pmtu;
+	u8 sysctl_ip_fwd_update_priority;
+	u8 sysctl_ip_nonlocal_bind;
+	u8 sysctl_ip_autobind_reuse;
+	u8 sysctl_ip_dynaddr;
+	u8 sysctl_ip_early_demux;
+	u8 sysctl_tcp_early_demux;
+	u8 sysctl_udp_early_demux;
+	u8 sysctl_nexthop_compat_mode;
+	u8 sysctl_fwmark_reflect;
+	u8 sysctl_tcp_fwmark_accept;
+	u8 sysctl_tcp_mtu_probing;
+	int sysctl_tcp_mtu_probe_floor;
+	int sysctl_tcp_base_mss;
+	int sysctl_tcp_min_snd_mss;
+	int sysctl_tcp_probe_threshold;
+	u32 sysctl_tcp_probe_interval;
+	int sysctl_tcp_keepalive_time;
+	int sysctl_tcp_keepalive_intvl;
+	u8 sysctl_tcp_keepalive_probes;
+	u8 sysctl_tcp_syn_retries;
+	u8 sysctl_tcp_synack_retries;
+	u8 sysctl_tcp_syncookies;
+	u8 sysctl_tcp_migrate_req;
+	u8 sysctl_tcp_comp_sack_nr;
+	int sysctl_tcp_reordering;
+	u8 sysctl_tcp_retries1;
+	u8 sysctl_tcp_retries2;
+	u8 sysctl_tcp_orphan_retries;
+	u8 sysctl_tcp_tw_reuse;
+	int sysctl_tcp_fin_timeout;
+	unsigned int sysctl_tcp_notsent_lowat;
+	u8 sysctl_tcp_sack;
+	u8 sysctl_tcp_window_scaling;
+	u8 sysctl_tcp_timestamps;
+	u8 sysctl_tcp_early_retrans;
+	u8 sysctl_tcp_recovery;
+	u8 sysctl_tcp_thin_linear_timeouts;
+	u8 sysctl_tcp_slow_start_after_idle;
+	u8 sysctl_tcp_retrans_collapse;
+	u8 sysctl_tcp_stdurg;
+	u8 sysctl_tcp_rfc1337;
+	u8 sysctl_tcp_abort_on_overflow;
+	u8 sysctl_tcp_fack;
+	int sysctl_tcp_max_reordering;
+	int sysctl_tcp_adv_win_scale;
+	u8 sysctl_tcp_dsack;
+	u8 sysctl_tcp_app_win;
+	u8 sysctl_tcp_frto;
+	u8 sysctl_tcp_nometrics_save;
+	u8 sysctl_tcp_no_ssthresh_metrics_save;
+	u8 sysctl_tcp_moderate_rcvbuf;
+	u8 sysctl_tcp_tso_win_divisor;
+	u8 sysctl_tcp_workaround_signed_windows;
+	int sysctl_tcp_limit_output_bytes;
+	int sysctl_tcp_challenge_ack_limit;
+	int sysctl_tcp_min_rtt_wlen;
+	u8 sysctl_tcp_min_tso_segs;
+	u8 sysctl_tcp_tso_rtt_log;
+	u8 sysctl_tcp_autocorking;
+	u8 sysctl_tcp_reflect_tos;
+	int sysctl_tcp_invalid_ratelimit;
+	int sysctl_tcp_pacing_ss_ratio;
+	int sysctl_tcp_pacing_ca_ratio;
+	int sysctl_tcp_wmem[3];
+	int sysctl_tcp_rmem[3];
+	unsigned int sysctl_tcp_child_ehash_entries;
+	unsigned long sysctl_tcp_comp_sack_delay_ns;
+	unsigned long sysctl_tcp_comp_sack_slack_ns;
+	int sysctl_max_syn_backlog;
+	int sysctl_tcp_fastopen;
+	const struct tcp_congestion_ops __attribute__((btf_type_tag("rcu"))) *tcp_congestion_control;
+	struct tcp_fastopen_context __attribute__((btf_type_tag("rcu"))) *tcp_fastopen_ctx;
+	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
+	atomic_t tfo_active_disable_times;
+	unsigned long tfo_active_disable_stamp;
+	u32 tcp_challenge_timestamp;
+	u32 tcp_challenge_count;
+	u8 sysctl_tcp_plb_enabled;
+	u8 sysctl_tcp_plb_idle_rehash_rounds;
+	u8 sysctl_tcp_plb_rehash_rounds;
+	u8 sysctl_tcp_plb_suspend_rto_sec;
+	int sysctl_tcp_plb_cong_thresh;
+	int sysctl_udp_wmem_min;
+	int sysctl_udp_rmem_min;
+	u8 sysctl_fib_notify_on_flag_change;
+	u8 sysctl_tcp_syn_linear_timeouts;
+	u8 sysctl_igmp_llm_reports;
+	int sysctl_igmp_max_memberships;
+	int sysctl_igmp_max_msf;
+	int sysctl_igmp_qrv;
+	struct ping_group_range ping_group_range;
+	atomic_t dev_addr_genid;
+	unsigned int sysctl_udp_child_hash_entries;
+	unsigned long *sysctl_local_reserved_ports;
+	int sysctl_ip_prot_sock;
+	struct fib_notifier_ops *notifier_ops;
+	unsigned int fib_seq;
+	struct fib_notifier_ops *ipmr_notifier_ops;
+	unsigned int ipmr_seq;
+	atomic_t rt_genid;
+	siphash_key_t ip_id_key;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct dst_entry;
+
+struct net_device;
+
+struct sk_buff;
+
+struct neighbour;
+
+struct dst_ops {
+	unsigned short family;
+	unsigned int gc_thresh;
+	void (*gc)(struct dst_ops *);
+	struct dst_entry * (*check)(struct dst_entry *, __u32);
+	unsigned int (*default_advmss)(const struct dst_entry *);
+	unsigned int (*mtu)(const struct dst_entry *);
+	u32 * (*cow_metrics)(struct dst_entry *, unsigned long);
+	void (*destroy)(struct dst_entry *);
+	void (*ifdown)(struct dst_entry *, struct net_device *);
+	struct dst_entry * (*negative_advice)(struct dst_entry *);
+	void (*link_failure)(struct sk_buff *);
+	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
+	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
+	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
+	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
+	void (*confirm_neigh)(const struct dst_entry *, const void *);
+	struct kmem_cache *kmem_cachep;
+	struct percpu_counter pcpuc_entries;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_ipv6 {
+	struct ctl_table_header *hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *icmp_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *xfrm6_hdr;
+	int flush_delay;
+	int ip6_rt_max_size;
+	int ip6_rt_gc_min_interval;
+	int ip6_rt_gc_timeout;
+	int ip6_rt_gc_interval;
+	int ip6_rt_gc_elasticity;
+	int ip6_rt_mtu_expires;
+	int ip6_rt_min_advmss;
+	u32 multipath_hash_fields;
+	u8 multipath_hash_policy;
+	u8 bindv6only;
+	u8 flowlabel_consistency;
+	u8 auto_flowlabels;
+	int icmpv6_time;
+	u8 icmpv6_echo_ignore_all;
+	u8 icmpv6_echo_ignore_multicast;
+	u8 icmpv6_echo_ignore_anycast;
+	unsigned long icmpv6_ratemask[4];
+	unsigned long *icmpv6_ratemask_ptr;
+	u8 anycast_src_echo_reply;
+	u8 ip_nonlocal_bind;
+	u8 fwmark_reflect;
+	u8 flowlabel_state_ranges;
+	int idgen_retries;
+	int idgen_delay;
+	int flowlabel_reflect;
+	int max_dst_opts_cnt;
+	int max_hbh_opts_cnt;
+	int max_dst_opts_len;
+	int max_hbh_opts_len;
+	int seg6_flowlabel;
+	u32 ioam6_id;
+	u64 ioam6_id_wide;
+	u8 skip_notify_on_dev_down;
+	u8 fib_notify_on_flag_change;
+	u8 icmpv6_error_anycast_as_unicast;
+	u64 android_kabi_reserved1;
+};
+
+struct delayed_work {
+	struct work_struct work;
+	struct timer_list timer;
+	struct workqueue_struct *wq;
+	int cpu;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct ipv6_devconf;
+
+struct fib6_info;
+
+struct rt6_info;
+
+struct rt6_statistics;
+
+struct fib6_table;
+
+struct seg6_pernet_data;
+
+struct ioam6_pernet_data;
+
+struct netns_ipv6 {
+	struct dst_ops ip6_dst_ops;
+	struct netns_sysctl_ipv6 sysctl;
+	struct ipv6_devconf *devconf_all;
+	struct ipv6_devconf *devconf_dflt;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	struct fib6_info *fib6_null_entry;
+	struct rt6_info *ip6_null_entry;
+	struct rt6_statistics *rt6_stats;
+	struct timer_list ip6_fib_timer;
+	struct hlist_head *fib_table_hash;
+	struct fib6_table *fib6_main_tbl;
+	struct list_head fib6_walkers;
+	rwlock_t fib6_walker_lock;
+	spinlock_t fib6_gc_lock;
+	atomic_t ip6_rt_gc_expire;
+	unsigned long ip6_rt_last_gc;
+	unsigned char flowlabel_has_excl;
+	bool fib6_has_custom_rules;
+	unsigned int fib6_rules_require_fldissect;
+	struct rt6_info *ip6_prohibit_entry;
+	struct rt6_info *ip6_blk_hole_entry;
+	struct fib6_table *fib6_local_tbl;
+	struct fib_rules_ops *fib6_rules_ops;
+	struct sock *ndisc_sk;
+	struct sock *tcp_sk;
+	struct sock *igmp_sk;
+	struct sock *mc_autojoin_sk;
+	struct hlist_head *inet6_addr_lst;
+	spinlock_t addrconf_hash_lock;
+	struct delayed_work addr_chk_work;
+	struct list_head mr6_tables;
+	struct fib_rules_ops *mr6_rules_ops;
+	atomic_t dev_addr_genid;
+	atomic_t fib6_sernum;
+	struct seg6_pernet_data *seg6_data;
+	struct fib_notifier_ops *notifier_ops;
+	struct fib_notifier_ops *ip6mr_notifier_ops;
+	unsigned int ipmr_seq;
+	struct {
+		struct hlist_head head;
+		spinlock_t lock;
+		u32 seq;
+	} ip6addrlbl_table;
+	struct ioam6_pernet_data *ioam6_data;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_lowpan {
+	struct ctl_table_header *frags_hdr;
+};
+
+struct netns_ieee802154_lowpan {
+	struct netns_sysctl_lowpan sysctl;
+	struct fqdir *fqdir;
+};
+
+struct nf_logger;
+
+struct nf_hook_entries;
+
+struct netns_nf {
+	struct proc_dir_entry *proc_netfilter;
+	const struct nf_logger __attribute__((btf_type_tag("rcu"))) *nf_loggers[11];
+	struct ctl_table_header *nf_log_dir_header;
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *hooks_ipv4[5];
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *hooks_ipv6[5];
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *hooks_arp[3];
+	unsigned int defrag_ipv4_users;
+	unsigned int defrag_ipv6_users;
+	u64 android_kabi_reserved1;
+};
+
+struct nf_generic_net {
+	unsigned int timeout;
+};
+
+struct nf_tcp_net {
+	unsigned int timeouts[14];
+	u8 tcp_loose;
+	u8 tcp_be_liberal;
+	u8 tcp_max_retrans;
+	u8 tcp_ignore_invalid_rst;
+};
+
+struct nf_udp_net {
+	unsigned int timeouts[2];
+};
+
+struct nf_icmp_net {
+	unsigned int timeout;
+};
+
+struct nf_dccp_net {
+	u8 dccp_loose;
+	unsigned int dccp_timeout[10];
+};
+
+struct nf_sctp_net {
+	unsigned int timeouts[10];
+};
+
+struct nf_gre_net {
+	struct list_head keymap_list;
+	unsigned int timeouts[2];
+};
+
+struct nf_ip_net {
+	struct nf_generic_net generic;
+	struct nf_tcp_net tcp;
+	struct nf_udp_net udp;
+	struct nf_icmp_net icmp;
+	struct nf_icmp_net icmpv6;
+	struct nf_dccp_net dccp;
+	struct nf_sctp_net sctp;
+	struct nf_gre_net gre;
+};
+
+struct ip_conntrack_stat;
+
+struct nf_ct_event_notifier;
+
+struct netns_ct {
+	bool ecache_dwork_pending;
+	u8 sysctl_log_invalid;
+	u8 sysctl_events;
+	u8 sysctl_acct;
+	u8 sysctl_tstamp;
+	u8 sysctl_checksum;
+	struct ip_conntrack_stat __attribute__((btf_type_tag("percpu"))) *stat;
+	struct nf_ct_event_notifier __attribute__((btf_type_tag("rcu"))) *nf_conntrack_event_cb;
+	struct nf_ip_net nf_ct_proto;
+};
+
+struct sk_buff_list {
+	struct sk_buff *next;
+	struct sk_buff *prev;
+};
+
+struct sk_buff_head {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+		};
+		struct sk_buff_list list;
+	};
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+struct netns_bpf {
+	struct bpf_prog_array __attribute__((btf_type_tag("rcu"))) *run_array[2];
+	struct bpf_prog *progs[2];
+	struct list_head links[2];
+};
+
+struct xfrm_policy_hash {
+	struct hlist_head __attribute__((btf_type_tag("rcu"))) *table;
+	unsigned int hmask;
+	u8 dbits4;
+	u8 sbits4;
+	u8 dbits6;
+	u8 sbits6;
+};
+
+struct xfrm_policy_hthresh {
+	struct work_struct work;
+	seqlock_t lock;
+	u8 lbits4;
+	u8 rbits4;
+	u8 lbits6;
+	u8 rbits6;
+};
+
+struct netns_xfrm {
+	struct list_head state_all;
+	struct hlist_head __attribute__((btf_type_tag("rcu"))) *state_bydst;
+	struct hlist_head __attribute__((btf_type_tag("rcu"))) *state_bysrc;
+	struct hlist_head __attribute__((btf_type_tag("rcu"))) *state_byspi;
+	struct hlist_head __attribute__((btf_type_tag("rcu"))) *state_byseq;
+	unsigned int state_hmask;
+	unsigned int state_num;
+	struct work_struct state_hash_work;
+	struct list_head policy_all;
+	struct hlist_head *policy_byidx;
+	unsigned int policy_idx_hmask;
+	unsigned int idx_generator;
+	struct hlist_head policy_inexact[3];
+	struct xfrm_policy_hash policy_bydst[3];
+	unsigned int policy_count[6];
+	struct work_struct policy_hash_work;
+	struct xfrm_policy_hthresh policy_hthresh;
+	struct list_head inexact_bins;
+	struct sock *nlsk;
+	struct sock *nlsk_stash;
+	u32 sysctl_aevent_etime;
+	u32 sysctl_aevent_rseqth;
+	int sysctl_larval_drop;
+	u32 sysctl_acq_expires;
+	u8 policy_default[3];
+	struct ctl_table_header *sysctl_hdr;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dst_ops xfrm4_dst_ops;
+	struct dst_ops xfrm6_dst_ops;
+	spinlock_t xfrm_state_lock;
+	seqcount_spinlock_t xfrm_state_hash_generation;
+	seqcount_spinlock_t xfrm_policy_hash_generation;
+	spinlock_t xfrm_policy_lock;
+	struct mutex xfrm_cfg_mutex;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct can_dev_rcv_lists;
+
+struct can_pkg_stats;
+
+struct can_rcv_lists_stats;
+
+struct netns_can {
+	struct proc_dir_entry *proc_dir;
+	struct proc_dir_entry *pde_stats;
+	struct proc_dir_entry *pde_reset_stats;
+	struct proc_dir_entry *pde_rcvlist_all;
+	struct proc_dir_entry *pde_rcvlist_fil;
+	struct proc_dir_entry *pde_rcvlist_inv;
+	struct proc_dir_entry *pde_rcvlist_sff;
+	struct proc_dir_entry *pde_rcvlist_eff;
+	struct proc_dir_entry *pde_rcvlist_err;
+	struct proc_dir_entry *bcmproc_dir;
+	struct can_dev_rcv_lists *rx_alldev_list;
+	spinlock_t rcvlists_lock;
+	struct timer_list stattimer;
+	struct can_pkg_stats *pkg_stats;
+	struct can_rcv_lists_stats *rcv_lists_stats;
+	struct hlist_head cgw_list;
+	u64 android_kabi_reserved1;
+};
+
+struct netns_xdp {
+	struct mutex lock;
+	struct hlist_head list;
+};
+
+struct uevent_sock;
+
+struct net_generic;
+
+struct net {
+	refcount_t passive;
+	spinlock_t rules_mod_lock;
+	atomic_t dev_unreg_count;
+	unsigned int dev_base_seq;
+	u32 ifindex;
+	spinlock_t nsid_lock;
+	atomic_t fnhe_genid;
+	struct list_head list;
+	struct list_head exit_list;
+	struct llist_node cleanup_list;
+	struct key_tag *key_domain;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct idr netns_ids;
+	struct ns_common ns;
+	struct ref_tracker_dir refcnt_tracker;
+	struct ref_tracker_dir notrefcnt_tracker;
+	struct list_head dev_base_head;
+	struct proc_dir_entry *proc_net;
+	struct proc_dir_entry *proc_net_stat;
+	struct ctl_table_set sysctls;
+	struct sock *rtnl;
+	struct sock *genl_sock;
+	struct uevent_sock *uevent_sock;
+	struct hlist_head *dev_name_head;
+	struct hlist_head *dev_index_head;
+	struct xarray dev_by_index;
+	struct raw_notifier_head netdev_chain;
+	u32 hash_mix;
+	struct net_device *loopback_dev;
+	struct list_head rules_ops;
+	struct netns_core core;
+	struct netns_mib mib;
+	struct netns_packet packet;
+	struct netns_unix unx;
+	struct netns_nexthop nexthop;
+	long: 64;
+	struct netns_ipv4 ipv4;
+	struct netns_ipv6 ipv6;
+	struct netns_ieee802154_lowpan ieee802154_lowpan;
+	struct netns_nf nf;
+	struct netns_ct ct;
+	struct sk_buff_head wext_nlevents;
+	struct net_generic __attribute__((btf_type_tag("rcu"))) *gen;
+	struct netns_bpf bpf;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netns_xfrm xfrm;
+	u64 net_cookie;
+	struct netns_can can;
+	struct netns_xdp xdp;
+	struct sock *diag_nlsk;
+};
+
+typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
+
+struct ctl_table_poll;
+
+struct ctl_table {
+	const char *procname;
+	void *data;
+	int maxlen;
+	umode_t mode;
+	enum {
+		SYSCTL_TABLE_TYPE_DEFAULT = 0,
+		SYSCTL_TABLE_TYPE_PERMANENTLY_EMPTY = 1,
+	} type;
+	proc_handler *proc_handler;
+	struct ctl_table_poll *poll;
+	void *extra1;
+	void *extra2;
+};
+
+struct ctl_table_poll {
+	atomic_t event;
+	wait_queue_head_t wait;
+};
+
+struct ctl_table_root {
+	struct ctl_table_set default_set;
+	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
+	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
+	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
+};
+
+struct ctl_node {
+	struct rb_node node;
+	struct ctl_table_header *header;
+};
+
+typedef int (*notifier_fn_t)(struct notifier_block *, unsigned long, void *);
+
+struct notifier_block {
+	notifier_fn_t notifier_call;
+	struct notifier_block __attribute__((btf_type_tag("rcu"))) *next;
+	int priority;
+};
+
+struct prot_inuse {
+	int all;
+	int val[64];
+};
+
+struct u64_stats_sync {};
+
+struct ipstats_mib {
+	u64 mibs[38];
+	struct u64_stats_sync syncp;
+};
+
+struct tcp_mib {
+	unsigned long mibs[16];
+};
+
+struct linux_mib {
+	unsigned long mibs[127];
+};
+
+struct udp_mib {
+	unsigned long mibs[10];
+};
+
+struct linux_xfrm_mib {
+	unsigned long mibs[29];
+};
+
+struct icmp_mib {
+	unsigned long mibs[30];
+};
+
+struct icmpmsg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct icmpv6_mib {
+	unsigned long mibs[7];
+};
+
+struct icmpv6msg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct ip_ra_chain {
+	struct ip_ra_chain __attribute__((btf_type_tag("rcu"))) *next;
+	struct sock *sk;
+	union {
+		void (*destructor)(struct sock *);
+		struct sock *saved_sk;
+	};
+	struct callback_head rcu;
+};
+
+struct fib_table {
+	struct hlist_node tb_hlist;
+	u32 tb_id;
+	int tb_num_default;
+	struct callback_head rcu;
+	unsigned long *tb_data;
+	unsigned long __data[0];
+};
+
+typedef u32 (*rht_hashfn_t)(const void *, u32, u32);
+
+typedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32);
+
+struct rhashtable_compare_arg;
+
+typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *, const void *);
+
+struct rhashtable_params {
+	u16 nelem_hint;
+	u16 key_len;
+	u16 key_offset;
+	u16 head_offset;
+	unsigned int max_size;
+	u16 min_size;
+	bool automatic_shrinking;
+	rht_hashfn_t hashfn;
+	rht_obj_hashfn_t obj_hashfn;
+	rht_obj_cmpfn_t obj_cmpfn;
+};
+
+struct bucket_table;
+
+struct rhashtable {
+	struct bucket_table __attribute__((btf_type_tag("rcu"))) *tbl;
+	unsigned int key_len;
+	unsigned int max_elems;
+	struct rhashtable_params p;
+	bool rhlist;
+	struct work_struct run_work;
+	struct mutex mutex;
+	spinlock_t lock;
+	atomic_t nelems;
+};
+
+struct inet_frags;
+
+struct fqdir {
+	long high_thresh;
+	long low_thresh;
+	int timeout;
+	int max_dist;
+	struct inet_frags *f;
+	struct net *net;
+	bool dead;
+	long: 64;
+	long: 64;
+	struct rhashtable rhashtable;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t mem;
+	struct work_struct destroy_work;
+	struct llist_node free_list;
+};
+
+struct inet_frag_queue;
+
+struct inet_frags {
+	unsigned int qsize;
+	void (*constructor)(struct inet_frag_queue *, const void *);
+	void (*destructor)(struct inet_frag_queue *);
+	void (*frag_expire)(struct timer_list *);
+	struct kmem_cache *frags_cachep;
+	const char *frags_cache_name;
+	struct rhashtable_params rhash_params;
+	refcount_t refcnt;
+	struct completion completion;
+};
+
+typedef __u32 __be32;
+
+typedef __u16 __be16;
+
+struct frag_v4_compare_key {
+	__be32 saddr;
+	__be32 daddr;
+	u32 user;
+	u32 vif;
+	__be16 id;
+	u16 protocol;
+};
+
+struct in6_addr {
+	union {
+		__u8 u6_addr8[16];
+		__be16 u6_addr16[8];
+		__be32 u6_addr32[4];
+	} in6_u;
+};
+
+struct frag_v6_compare_key {
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+	u32 user;
+	__be32 id;
+	u32 iif;
+};
+
+struct inet_frag_queue {
+	struct rhash_head node;
+	union {
+		struct frag_v4_compare_key v4;
+		struct frag_v6_compare_key v6;
+	} key;
+	struct timer_list timer;
+	spinlock_t lock;
+	refcount_t refcnt;
+	struct rb_root rb_fragments;
+	struct sk_buff *fragments_tail;
+	struct sk_buff *last_run_head;
+	ktime_t stamp;
+	int len;
+	int meat;
+	u8 mono_delivery_time;
+	__u8 flags;
+	u16 max_size;
+	struct fqdir *fqdir;
+	struct callback_head rcu;
+};
+
+typedef __u32 __wsum;
+
+typedef unsigned int sk_buff_data_t;
+
+struct skb_ext;
+
+struct sk_buff {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+			union {
+				struct net_device *dev;
+				unsigned long dev_scratch;
+			};
+		};
+		struct rb_node rbnode;
+		struct list_head list;
+		struct llist_node ll_node;
+	};
+	struct sock *sk;
+	union {
+		ktime_t tstamp;
+		u64 skb_mstamp_ns;
+	};
+	char cb[48];
+	union {
+		struct {
+			unsigned long _skb_refdst;
+			void (*destructor)(struct sk_buff *);
+		};
+		struct list_head tcp_tsorted_anchor;
+		unsigned long _sk_redir;
+	};
+	unsigned long _nfct;
+	unsigned int len;
+	unsigned int data_len;
+	__u16 mac_len;
+	__u16 hdr_len;
+	__u16 queue_mapping;
+	__u8 __cloned_offset[0];
+	__u8 cloned: 1;
+	__u8 nohdr: 1;
+	__u8 fclone: 2;
+	__u8 peeked: 1;
+	__u8 head_frag: 1;
+	__u8 pfmemalloc: 1;
+	__u8 pp_recycle: 1;
+	__u8 active_extensions;
+	union {
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 dst_pending_confirm: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 __mono_tc_offset[0];
+			__u8 mono_delivery_time: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 remcsum_offload: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 inner_protocol_type: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 nf_trace: 1;
+			__u8 redirected: 1;
+			__u8 from_ingress: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 slow_gro: 1;
+			__u16 tc_index;
+			u16 alloc_cpu;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			union {
+				u32 vlan_all;
+				struct {
+					__be16 vlan_proto;
+					__u16 vlan_tci;
+				};
+			};
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			__u32 secmark;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+			u64 android_kabi_reserved1;
+			u64 android_kabi_reserved2;
+		};
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 dst_pending_confirm: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 __mono_tc_offset[0];
+			__u8 mono_delivery_time: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 remcsum_offload: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 inner_protocol_type: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 nf_trace: 1;
+			__u8 redirected: 1;
+			__u8 from_ingress: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 slow_gro: 1;
+			__u16 tc_index;
+			u16 alloc_cpu;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			union {
+				u32 vlan_all;
+				struct {
+					__be16 vlan_proto;
+					__u16 vlan_tci;
+				};
+			};
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			__u32 secmark;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+			u64 android_kabi_reserved1;
+			u64 android_kabi_reserved2;
+		} headers;
+	};
+	sk_buff_data_t tail;
+	sk_buff_data_t end;
+	unsigned char *head;
+	unsigned char *data;
+	unsigned int truesize;
+	refcount_t users;
+	struct skb_ext *extensions;
+};
+
+struct skb_ext {
+	refcount_t refcnt;
+	u8 offset[1];
+	u8 chunks;
+	long: 0;
+	char data[0];
+};
+
+struct rhashtable_compare_arg {
+	struct rhashtable *ht;
+	const void *key;
+};
+
+struct lockdep_map {};
+
+struct rhash_lock_head;
+
+struct bucket_table {
+	unsigned int size;
+	unsigned int nest;
+	u32 hash_rnd;
+	struct list_head walkers;
+	struct callback_head rcu;
+	struct bucket_table __attribute__((btf_type_tag("rcu"))) *future_tbl;
+	struct lockdep_map dep_map;
+	long: 64;
+	struct rhash_lock_head __attribute__((btf_type_tag("rcu"))) *buckets[0];
+};
+
+enum tcp_ca_event {
+	CA_EVENT_TX_START = 0,
+	CA_EVENT_CWND_RESTART = 1,
+	CA_EVENT_COMPLETE_CWR = 2,
+	CA_EVENT_LOSS = 3,
+	CA_EVENT_ECN_NO_CE = 4,
+	CA_EVENT_ECN_IS_CE = 5,
+};
+
+struct ack_sample;
+
+struct rate_sample;
+
+union tcp_cc_info;
+
+struct tcp_congestion_ops {
+	u32 (*ssthresh)(struct sock *);
+	void (*cong_avoid)(struct sock *, u32, u32);
+	void (*set_state)(struct sock *, u8);
+	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
+	void (*in_ack_event)(struct sock *, u32);
+	void (*pkts_acked)(struct sock *, const struct ack_sample *);
+	u32 (*min_tso_segs)(struct sock *);
+	void (*cong_control)(struct sock *, const struct rate_sample *);
+	u32 (*undo_cwnd)(struct sock *);
+	u32 (*sndbuf_expand)(struct sock *);
+	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
+	char name[16];
+	struct module *owner;
+	struct list_head list;
+	u32 key;
+	u32 flags;
+	void (*init)(struct sock *);
+	void (*release)(struct sock *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tcp_fastopen_context {
+	siphash_key_t key[2];
+	int num;
+	struct callback_head rcu;
+};
+
+typedef struct {
+	atomic_t refcnt;
+} rcuref_t;
+
+typedef struct {} netdevice_tracker;
+
+struct xfrm_state;
+
+struct uncached_list;
+
+struct lwtunnel_state;
+
+struct dst_entry {
+	struct net_device *dev;
+	struct dst_ops *ops;
+	unsigned long _metrics;
+	unsigned long expires;
+	struct xfrm_state *xfrm;
+	int (*input)(struct sk_buff *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	unsigned short flags;
+	short obsolete;
+	unsigned short header_len;
+	unsigned short trailer_len;
+	rcuref_t __rcuref;
+	int __use;
+	unsigned long lastuse;
+	struct callback_head callback_head;
+	short error;
+	short __pad;
+	__u32 tclassid;
+	netdevice_tracker dev_tracker;
+	struct list_head rt_uncached;
+	struct uncached_list *rt_uncached_list;
+	struct lwtunnel_state *lwtstate;
+};
+
+enum nf_log_type {
+	NF_LOG_TYPE_LOG = 0,
+	NF_LOG_TYPE_ULOG = 1,
+	NF_LOG_TYPE_MAX = 2,
+};
+
+typedef u8 u_int8_t;
+
+struct nf_loginfo;
+
+typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
+
+struct nf_logger {
+	char *name;
+	enum nf_log_type type;
+	nf_logfn *logfn;
+	struct module *me;
+};
+
+struct nf_hook_state;
+
+typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
+
+struct nf_hook_entry {
+	nf_hookfn *hook;
+	void *priv;
+};
+
+struct nf_hook_entries {
+	u16 num_hook_entries;
+	struct nf_hook_entry hooks[0];
+};
+
+struct ip_conntrack_stat {
+	unsigned int found;
+	unsigned int invalid;
+	unsigned int insert;
+	unsigned int insert_failed;
+	unsigned int clash_resolve;
+	unsigned int drop;
+	unsigned int early_drop;
+	unsigned int error;
+	unsigned int expect_new;
+	unsigned int expect_create;
+	unsigned int expect_delete;
+	unsigned int search_restart;
+	unsigned int chaintoolong;
+};
+
+struct nf_ct_event;
+
+struct nf_exp_event;
+
+struct nf_ct_event_notifier {
+	int (*ct_event)(unsigned int, const struct nf_ct_event *);
+	int (*exp_event)(unsigned int, const struct nf_exp_event *);
+};
+
+struct net_generic {
+	union {
+		struct {
+			unsigned int len;
+			struct callback_head rcu;
+		} s;
+		struct {
+			struct {} __empty_ptr;
+			void *ptr[0];
+		};
+	};
+};
+
+struct cgroup_namespace {
+	struct ns_common ns;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct css_set *root_cset;
+};
+
+struct cgroup_subsys_state;
+
+struct cgroup;
+
+struct css_set {
+	struct cgroup_subsys_state *subsys[7];
+	refcount_t refcount;
+	struct css_set *dom_cset;
+	struct cgroup *dfl_cgrp;
+	int nr_tasks;
+	struct list_head tasks;
+	struct list_head mg_tasks;
+	struct list_head dying_tasks;
+	struct list_head task_iters;
+	struct list_head e_cset_node[7];
+	struct list_head threaded_csets;
+	struct list_head threaded_csets_node;
+	struct hlist_node hlist;
+	struct list_head cgrp_links;
+	struct list_head mg_src_preload_node;
+	struct list_head mg_dst_preload_node;
+	struct list_head mg_node;
+	struct cgroup *mg_src_cgrp;
+	struct cgroup *mg_dst_cgrp;
+	struct css_set *mg_dst_cset;
+	bool dead;
+	struct callback_head callback_head;
+};
+
+struct rcu_work {
+	struct work_struct work;
+	struct callback_head rcu;
+	struct workqueue_struct *wq;
+};
+
+struct cgroup_subsys;
+
+struct cgroup_subsys_state {
+	struct cgroup *cgroup;
+	struct cgroup_subsys *ss;
+	struct percpu_ref refcnt;
+	struct list_head sibling;
+	struct list_head children;
+	struct list_head rstat_css_node;
+	int id;
+	unsigned int flags;
+	u64 serial_nr;
+	atomic_t online_cnt;
+	struct work_struct destroy_work;
+	struct rcu_work destroy_rwork;
+	struct cgroup_subsys_state *parent;
+};
+
+struct cgroup_file {
+	struct kernfs_node *kn;
+	unsigned long notified_at;
+	struct timer_list notify_timer;
+};
+
+struct cacheline_padding {
+	char x[0];
+};
+
+struct task_cputime {
+	u64 stime;
+	u64 utime;
+	unsigned long long sum_exec_runtime;
+};
+
+struct cgroup_base_stat {
+	struct task_cputime cputime;
+};
+
+struct cgroup_bpf {
+	struct bpf_prog_array __attribute__((btf_type_tag("rcu"))) *effective[33];
+	struct hlist_head progs[33];
+	u8 flags[33];
+	struct list_head storages;
+	struct bpf_prog_array *inactive;
+	struct percpu_ref refcnt;
+	struct work_struct release_work;
+};
+
+struct cgroup_freezer_state {
+	bool freeze;
+	int e_freeze;
+	int nr_frozen_descendants;
+	int nr_frozen_tasks;
+};
+
+struct cgroup_root;
+
+struct cgroup_rstat_cpu;
+
+struct psi_group;
+
+struct cgroup {
+	struct cgroup_subsys_state self;
+	unsigned long flags;
+	int level;
+	int max_depth;
+	int nr_descendants;
+	int nr_dying_descendants;
+	int max_descendants;
+	int nr_populated_csets;
+	int nr_populated_domain_children;
+	int nr_populated_threaded_children;
+	int nr_threaded_children;
+	struct kernfs_node *kn;
+	struct cgroup_file procs_file;
+	struct cgroup_file events_file;
+	struct cgroup_file psi_files[4];
+	u16 subtree_control;
+	u16 subtree_ss_mask;
+	u16 old_subtree_control;
+	u16 old_subtree_ss_mask;
+	struct cgroup_subsys_state __attribute__((btf_type_tag("rcu"))) *subsys[7];
+	struct cgroup_root *root;
+	struct list_head cset_links;
+	struct list_head e_csets[7];
+	struct cgroup *dom_cgrp;
+	struct cgroup *old_dom_cgrp;
+	struct cgroup_rstat_cpu __attribute__((btf_type_tag("percpu"))) *rstat_cpu;
+	struct list_head rstat_css_list;
+	struct cacheline_padding _pad_;
+	struct cgroup *rstat_flush_next;
+	struct cgroup_base_stat last_bstat;
+	struct cgroup_base_stat bstat;
+	struct prev_cputime prev_cputime;
+	struct list_head pidlists;
+	struct mutex pidlist_mutex;
+	wait_queue_head_t offline_waitq;
+	struct work_struct release_agent_work;
+	struct psi_group *psi;
+	struct cgroup_bpf bpf;
+	atomic_t congestion_count;
+	struct cgroup_freezer_state freezer;
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) *bpf_cgrp_storage;
+	u64 android_backport_reserved1;
+	struct cgroup *ancestors[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kernfs_root;
+
+struct kernfs_elem_dir {
+	unsigned long subdirs;
+	struct rb_root children;
+	struct kernfs_root *root;
+	unsigned long rev;
+};
+
+struct kernfs_elem_symlink {
+	struct kernfs_node *target_kn;
+};
+
+struct kernfs_ops;
+
+struct kernfs_open_node;
+
+struct kernfs_elem_attr {
+	const struct kernfs_ops *ops;
+	struct kernfs_open_node __attribute__((btf_type_tag("rcu"))) *open;
+	loff_t size;
+	struct kernfs_node *notify_next;
+};
+
+struct kernfs_iattrs;
+
+struct kernfs_node {
+	atomic_t count;
+	atomic_t active;
+	struct kernfs_node *parent;
+	const char *name;
+	struct rb_node rb;
+	const void *ns;
+	unsigned int hash;
+	union {
+		struct kernfs_elem_dir dir;
+		struct kernfs_elem_symlink symlink;
+		struct kernfs_elem_attr attr;
+	};
+	void *priv;
+	u64 id;
+	unsigned short flags;
+	umode_t mode;
+	struct kernfs_iattrs *iattr;
+	struct callback_head rcu;
+	u64 android_kabi_reserved1;
+};
+
+typedef unsigned int __poll_t;
+
+struct kernfs_open_file;
+
+struct poll_table_struct;
+
+struct kernfs_ops {
+	int (*open)(struct kernfs_open_file *);
+	void (*release)(struct kernfs_open_file *);
+	int (*seq_show)(struct seq_file *, void *);
+	void * (*seq_start)(struct seq_file *, loff_t *);
+	void * (*seq_next)(struct seq_file *, void *, loff_t *);
+	void (*seq_stop)(struct seq_file *, void *);
+	ssize_t (*read)(struct kernfs_open_file *, char *, size_t, loff_t);
+	size_t atomic_write_len;
+	bool prealloc;
+	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
+	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
+	int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct kernfs_open_file {
+	struct kernfs_node *kn;
+	struct file *file;
+	struct seq_file *seq_file;
+	void *priv;
+	struct mutex mutex;
+	struct mutex prealloc_mutex;
+	int event;
+	struct list_head list;
+	char *prealloc_buf;
+	size_t atomic_write_len;
+	bool mmapped: 1;
+	bool released: 1;
+	const struct vm_operations_struct *vm_ops;
+	u64 android_kabi_reserved1;
+};
+
+struct seq_operations;
+
+struct seq_file {
+	char *buf;
+	size_t size;
+	size_t from;
+	size_t count;
+	size_t pad_until;
+	loff_t index;
+	loff_t read_pos;
+	struct mutex lock;
+	const struct seq_operations *op;
+	int poll_event;
+	const struct file *file;
+	void *private;
+};
+
+struct seq_operations {
+	void * (*start)(struct seq_file *, loff_t *);
+	void (*stop)(struct seq_file *, void *);
+	void * (*next)(struct seq_file *, void *, loff_t *);
+	int (*show)(struct seq_file *, void *);
+};
+
+typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
+
+struct poll_table_struct {
+	poll_queue_proc _qproc;
+	__poll_t _key;
+};
+
+struct kernfs_open_node {
+	struct callback_head callback_head;
+	atomic_t event;
+	wait_queue_head_t poll;
+	struct list_head files;
+	unsigned int nr_mmapped;
+	unsigned int nr_to_release;
+};
+
+struct cgroup_root {
+	struct kernfs_root *kf_root;
+	unsigned int subsys_mask;
+	int hierarchy_id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cgroup cgrp;
+	struct cgroup *cgrp_ancestor_storage;
+	atomic_t nr_cgrps;
+	struct list_head root_list;
+	unsigned int flags;
+	char release_agent_path[4096];
+	char name[64];
+	long: 0;
+	u8 android_backport_reserved1[28];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct cgroup_rstat_cpu {
+	struct u64_stats_sync bsync;
+	struct cgroup_base_stat bstat;
+	struct cgroup_base_stat last_bstat;
+	struct cgroup_base_stat subtree_bstat;
+	struct cgroup_base_stat last_subtree_bstat;
+	struct cgroup *updated_children;
+	struct cgroup *updated_next;
+};
+
+struct psi_group_cpu;
+
+struct psi_group {
+	struct psi_group *parent;
+	bool enabled;
+	struct mutex avgs_lock;
+	struct psi_group_cpu __attribute__((btf_type_tag("percpu"))) *pcpu;
+	u64 avg_total[7];
+	u64 avg_last_update;
+	u64 avg_next_update;
+	struct delayed_work avgs_work;
+	struct list_head avg_triggers;
+	u32 avg_nr_triggers[7];
+	u64 total[14];
+	unsigned long avg[21];
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *rtpoll_task;
+	struct timer_list rtpoll_timer;
+	wait_queue_head_t rtpoll_wait;
+	atomic_t rtpoll_wakeup;
+	atomic_t rtpoll_scheduled;
+	struct mutex rtpoll_trigger_lock;
+	struct list_head rtpoll_triggers;
+	u32 rtpoll_nr_triggers[7];
+	u32 rtpoll_states;
+	u64 rtpoll_min_period;
+	u64 rtpoll_total[7];
+	u64 rtpoll_next_update;
+	u64 rtpoll_until;
+};
+
+struct psi_group_cpu {
+	seqcount_t seq;
+	unsigned int tasks[4];
+	u32 state_mask;
+	u32 times[8];
+	u64 state_start;
+	u32 times_prev[16];
+};
+
+struct bpf_local_storage_data;
+
+struct bpf_local_storage_map;
+
+struct bpf_local_storage {
+	struct bpf_local_storage_data __attribute__((btf_type_tag("rcu"))) *cache[16];
+	struct bpf_local_storage_map __attribute__((btf_type_tag("rcu"))) *smap;
+	struct hlist_head list;
+	void *owner;
+	struct callback_head rcu;
+	raw_spinlock_t lock;
+};
+
+struct cgroup_taskset;
+
+struct cftype;
+
+struct cgroup_subsys {
+	struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *);
+	int (*css_online)(struct cgroup_subsys_state *);
+	void (*css_offline)(struct cgroup_subsys_state *);
+	void (*css_released)(struct cgroup_subsys_state *);
+	void (*css_free)(struct cgroup_subsys_state *);
+	void (*css_reset)(struct cgroup_subsys_state *);
+	void (*css_rstat_flush)(struct cgroup_subsys_state *, int);
+	int (*css_extra_stat_show)(struct seq_file *, struct cgroup_subsys_state *);
+	int (*css_local_stat_show)(struct seq_file *, struct cgroup_subsys_state *);
+	int (*can_attach)(struct cgroup_taskset *);
+	void (*cancel_attach)(struct cgroup_taskset *);
+	void (*attach)(struct cgroup_taskset *);
+	void (*post_attach)();
+	int (*can_fork)(struct task_struct *, struct css_set *);
+	void (*cancel_fork)(struct task_struct *, struct css_set *);
+	void (*fork)(struct task_struct *);
+	void (*exit)(struct task_struct *);
+	void (*release)(struct task_struct *);
+	void (*bind)(struct cgroup_subsys_state *);
+	bool early_init: 1;
+	bool implicit_on_dfl: 1;
+	bool threaded: 1;
+	int id;
+	const char *name;
+	const char *legacy_name;
+	struct cgroup_root *root;
+	struct idr css_idr;
+	struct list_head cfts;
+	struct cftype *dfl_cftypes;
+	struct cftype *legacy_cftypes;
+	unsigned int depends_on;
+};
+
+struct cftype {
+	char name[64];
+	unsigned long private;
+	size_t max_write_len;
+	unsigned int flags;
+	unsigned int file_offset;
+	struct cgroup_subsys *ss;
+	struct list_head node;
+	struct kernfs_ops *kf_ops;
+	int (*open)(struct kernfs_open_file *);
+	void (*release)(struct kernfs_open_file *);
+	u64 (*read_u64)(struct cgroup_subsys_state *, struct cftype *);
+	s64 (*read_s64)(struct cgroup_subsys_state *, struct cftype *);
+	int (*seq_show)(struct seq_file *, void *);
+	void * (*seq_start)(struct seq_file *, loff_t *);
+	void * (*seq_next)(struct seq_file *, void *, loff_t *);
+	void (*seq_stop)(struct seq_file *, void *);
+	int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64);
+	int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64);
+	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
+	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
+};
+
+struct group_info {
+	atomic_t usage;
+	int ngroups;
+	kgid_t gid[0];
+};
+
+struct kioctx;
+
+struct kioctx_table {
+	struct callback_head rcu;
+	unsigned int nr;
+	struct kioctx __attribute__((btf_type_tag("rcu"))) *table[0];
+};
+
+struct page_counter {
+	atomic_long_t usage;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	unsigned long emin;
+	atomic_long_t min_usage;
+	atomic_long_t children_min_usage;
+	unsigned long elow;
+	atomic_long_t low_usage;
+	atomic_long_t children_low_usage;
+	unsigned long watermark;
+	unsigned long failcnt;
+	struct cacheline_padding _pad2_;
+	unsigned long min;
+	unsigned long low;
+	unsigned long high;
+	unsigned long max;
+	struct page_counter *parent;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct mem_cgroup_id {
+	int id;
+	refcount_t ref;
+};
+
+struct vmpressure {
+	unsigned long scanned;
+	unsigned long reclaimed;
+	unsigned long tree_scanned;
+	unsigned long tree_reclaimed;
+	spinlock_t sr_lock;
+	struct list_head events;
+	struct mutex events_lock;
+	struct work_struct work;
+};
+
+struct mem_cgroup_threshold_ary;
+
+struct mem_cgroup_thresholds {
+	struct mem_cgroup_threshold_ary *primary;
+	struct mem_cgroup_threshold_ary *spare;
+};
+
+struct fprop_global {
+	struct percpu_counter events;
+	unsigned int period;
+	seqcount_t sequence;
+};
+
+struct wb_domain {
+	spinlock_t lock;
+	struct fprop_global completions;
+	struct timer_list period_timer;
+	unsigned long period_time;
+	unsigned long dirty_limit_tstamp;
+	unsigned long dirty_limit;
+};
+
+struct wb_completion {
+	atomic_t cnt;
+	wait_queue_head_t *waitq;
+};
+
+struct memcg_cgwb_frn {
+	u64 bdi_id;
+	int memcg_id;
+	u64 at;
+	struct wb_completion done;
+};
+
+struct deferred_split {
+	spinlock_t split_queue_lock;
+	struct list_head split_queue;
+	unsigned long split_queue_len;
+};
+
+struct lru_gen_mm_list {
+	struct list_head fifo;
+	spinlock_t lock;
+};
+
+struct memcg_vmstats;
+
+struct obj_cgroup;
+
+struct memcg_vmstats_percpu;
+
+struct mem_cgroup_per_node;
+
+struct mem_cgroup {
+	struct cgroup_subsys_state css;
+	struct mem_cgroup_id id;
+	long: 64;
+	long: 64;
+	struct page_counter memory;
+	union {
+		struct page_counter swap;
+		struct page_counter memsw;
+	};
+	struct page_counter kmem;
+	struct page_counter tcpmem;
+	struct work_struct high_work;
+	unsigned long soft_limit;
+	struct vmpressure vmpressure;
+	bool oom_group;
+	bool oom_lock;
+	int under_oom;
+	int swappiness;
+	int oom_kill_disable;
+	struct cgroup_file events_file;
+	struct cgroup_file events_local_file;
+	struct cgroup_file swap_events_file;
+	struct mutex thresholds_lock;
+	struct mem_cgroup_thresholds thresholds;
+	struct mem_cgroup_thresholds memsw_thresholds;
+	struct list_head oom_notify;
+	unsigned long move_charge_at_immigrate;
+	spinlock_t move_lock;
+	unsigned long move_lock_flags;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct memcg_vmstats *vmstats;
+	atomic_long_t memory_events[9];
+	atomic_long_t memory_events_local[9];
+	unsigned long socket_pressure;
+	bool tcpmem_active;
+	int tcpmem_pressure;
+	int kmemcg_id;
+	struct obj_cgroup __attribute__((btf_type_tag("rcu"))) *objcg;
+	struct list_head objcg_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	atomic_t moving_account;
+	struct task_struct *move_lock_task;
+	struct memcg_vmstats_percpu __attribute__((btf_type_tag("percpu"))) *vmstats_percpu;
+	struct list_head cgwb_list;
+	struct wb_domain cgwb_domain;
+	struct memcg_cgwb_frn cgwb_frn[4];
+	struct list_head event_list;
+	spinlock_t event_list_lock;
+	struct deferred_split deferred_split_queue;
+	struct lru_gen_mm_list mm_list;
+	u64 android_backport_reserved1;
+	u64 android_backport_reserved2;
+	u64 android_oem_data1[2];
+	struct mem_cgroup_per_node *nodeinfo[0];
+};
+
+struct eventfd_ctx;
+
+struct mem_cgroup_threshold {
+	struct eventfd_ctx *eventfd;
+	unsigned long threshold;
+};
+
+struct mem_cgroup_threshold_ary {
+	int current_threshold;
+	unsigned int size;
+	struct mem_cgroup_threshold entries[0];
+};
+
+struct obj_cgroup {
+	struct percpu_ref refcnt;
+	struct mem_cgroup *memcg;
+	atomic_t nr_charged_bytes;
+	union {
+		struct list_head list;
+		struct callback_head rcu;
+	};
+};
+
+struct memcg_vmstats_percpu {
+	unsigned int stats_updates;
+	struct memcg_vmstats_percpu *parent;
+	struct memcg_vmstats *vmstats;
+	long state[49];
+	unsigned long events[17];
+	long state_prev[49];
+	unsigned long events_prev[17];
+	unsigned long nr_page_events;
+	unsigned long targets[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct hlist_nulls_node {
+	struct hlist_nulls_node *next;
+	struct hlist_nulls_node **pprev;
+};
+
+struct lru_gen_folio {
+	unsigned long max_seq;
+	unsigned long min_seq[2];
+	unsigned long timestamps[4];
+	struct list_head folios[40];
+	long nr_pages[40];
+	unsigned long avg_refaulted[8];
+	unsigned long avg_total[8];
+	unsigned long protected[6];
+	atomic_long_t evicted[8];
+	atomic_long_t refaulted[8];
+	bool enabled;
+	u8 gen;
+	u8 seg;
+	struct hlist_nulls_node list;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct lru_gen_mm_state {
+	unsigned long seq;
+	struct list_head *head;
+	struct list_head *tail;
+	unsigned long *filters[2];
+	unsigned long stats[6];
+	u64 android_kabi_reserved1;
+};
+
+struct pglist_data;
+
+struct lruvec {
+	struct list_head lists[5];
+	spinlock_t lru_lock;
+	unsigned long anon_cost;
+	unsigned long file_cost;
+	atomic_long_t nonresident_age;
+	unsigned long refaults[2];
+	unsigned long flags;
+	struct lru_gen_folio lrugen;
+	struct lru_gen_mm_state mm_state;
+	struct pglist_data *pgdat;
+};
+
+struct lruvec_stats {
+	long state[42];
+	long state_local[42];
+	long state_pending[42];
+};
+
+struct mem_cgroup_reclaim_iter {
+	struct mem_cgroup *position;
+	unsigned int generation;
+};
+
+struct lruvec_stats_percpu;
+
+struct shrinker_info;
+
+struct mem_cgroup_per_node {
+	struct lruvec lruvec;
+	struct lruvec_stats_percpu __attribute__((btf_type_tag("percpu"))) *lruvec_stats_percpu;
+	struct lruvec_stats lruvec_stats;
+	unsigned long lru_zone_size[25];
+	struct mem_cgroup_reclaim_iter iter;
+	struct shrinker_info __attribute__((btf_type_tag("rcu"))) *shrinker_info;
+	struct rb_node tree_node;
+	unsigned long usage_in_excess;
+	bool on_tree;
+	struct mem_cgroup *memcg;
+	u64 android_backport_reserved1;
+};
+
+struct free_area {
+	struct list_head free_list[6];
+	unsigned long nr_free;
+};
+
+struct per_cpu_pages;
+
+struct per_cpu_zonestat;
+
+struct zone {
+	unsigned long _watermark[4];
+	unsigned long watermark_boost;
+	unsigned long nr_reserved_highatomic;
+	long lowmem_reserve[5];
+	struct pglist_data *zone_pgdat;
+	struct per_cpu_pages __attribute__((btf_type_tag("percpu"))) *per_cpu_pageset;
+	struct per_cpu_zonestat __attribute__((btf_type_tag("percpu"))) *per_cpu_zonestats;
+	int pageset_high;
+	int pageset_batch;
+	unsigned long zone_start_pfn;
+	atomic_long_t managed_pages;
+	unsigned long spanned_pages;
+	unsigned long present_pages;
+	unsigned long present_early_pages;
+	unsigned long cma_pages;
+	const char *name;
+	unsigned long nr_isolate_pageblock;
+	seqlock_t span_seqlock;
+	int order;
+	int initialized;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct free_area free_area[11];
+	unsigned long flags;
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	unsigned long percpu_drift_mark;
+	unsigned long compact_cached_free_pfn;
+	unsigned long compact_cached_migrate_pfn[2];
+	unsigned long compact_init_migrate_pfn;
+	unsigned long compact_init_free_pfn;
+	unsigned int compact_considered;
+	unsigned int compact_defer_shift;
+	int compact_order_failed;
+	bool compact_blockskip_flush;
+	bool contiguous;
+	long: 0;
+	struct cacheline_padding _pad3_;
+	atomic_long_t vm_stat[11];
+	atomic_long_t vm_numa_event[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct zoneref {
+	struct zone *zone;
+	int zone_idx;
+};
+
+struct zonelist {
+	struct zoneref _zonerefs[6];
+};
+
+enum zone_type {
+	ZONE_DMA32 = 0,
+	ZONE_NORMAL = 1,
+	ZONE_MOVABLE = 2,
+	ZONE_NOSPLIT = 3,
+	ZONE_NOMERGE = 4,
+	__MAX_NR_ZONES = 5,
+	LAST_PHYS_ZONE = 1,
+	LAST_VIRT_ZONE = 4,
+};
+
+struct lru_gen_mm_walk {
+	struct lruvec *lruvec;
+	unsigned long max_seq;
+	unsigned long next_addr;
+	int nr_pages[40];
+	int mm_stats[6];
+	int batched;
+	bool can_swap;
+	bool force_scan;
+	u64 android_kabi_reserved1;
+};
+
+struct hlist_nulls_head {
+	struct hlist_nulls_node *first;
+};
+
+struct lru_gen_memcg {
+	unsigned long seq;
+	unsigned long nr_memcgs[3];
+	struct hlist_nulls_head fifo[24];
+	spinlock_t lock;
+};
+
+struct per_cpu_nodestat;
+
+struct pglist_data {
+	struct zone node_zones[5];
+	struct zonelist node_zonelists[1];
+	int nr_zones;
+	spinlock_t node_size_lock;
+	unsigned long node_start_pfn;
+	unsigned long node_present_pages;
+	unsigned long node_spanned_pages;
+	int node_id;
+	wait_queue_head_t kswapd_wait;
+	wait_queue_head_t pfmemalloc_wait;
+	wait_queue_head_t reclaim_wait[4];
+	atomic_t nr_writeback_throttled;
+	unsigned long nr_reclaim_start;
+	struct mutex kswapd_lock;
+	struct task_struct *kswapd;
+	int kswapd_order;
+	enum zone_type kswapd_highest_zoneidx;
+	int kswapd_failures;
+	u64 android_oem_data1;
+	int kcompactd_max_order;
+	enum zone_type kcompactd_highest_zoneidx;
+	wait_queue_head_t kcompactd_wait;
+	struct task_struct *kcompactd;
+	bool proactive_compact_trigger;
+	unsigned long totalreserve_pages;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct deferred_split deferred_split_queue;
+	struct lruvec __lruvec;
+	unsigned long flags;
+	struct lru_gen_mm_walk mm_walk;
+	struct lru_gen_memcg memcg_lru;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	struct per_cpu_nodestat __attribute__((btf_type_tag("percpu"))) *per_cpu_nodestats;
+	atomic_long_t vm_stat[42];
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_pages {
+	spinlock_t lock;
+	int count;
+	int high;
+	int batch;
+	short free_factor;
+	struct list_head lists[17];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef signed char __s8;
+
+typedef __s8 s8;
+
+struct per_cpu_zonestat {
+	s8 vm_stat_diff[11];
+	s8 stat_threshold;
+};
+
+struct per_cpu_nodestat {
+	s8 stat_threshold;
+	s8 vm_node_stat_diff[42];
+};
+
+struct lruvec_stats_percpu {
+	long state[42];
+	long state_prev[42];
+};
+
+struct shrinker_info {
+	struct callback_head rcu;
+	atomic_long_t *nr_deferred;
+	unsigned long *map;
+	int map_nr_max;
+};
+
+typedef long long __kernel_time64_t;
+
+struct __kernel_timespec {
+	__kernel_time64_t tv_sec;
+	long long tv_nsec;
+};
+
+typedef s32 old_time32_t;
+
+struct old_timespec32 {
+	old_time32_t tv_sec;
+	s32 tv_nsec;
+};
+
+struct pollfd {
+	int fd;
+	short events;
+	short revents;
+};
+
+struct cpu_itimer {
+	u64 expires;
+	u64 incr;
+};
+
+struct task_cputime_atomic {
+	atomic64_t utime;
+	atomic64_t stime;
+	atomic64_t sum_exec_runtime;
+};
+
+struct thread_group_cputimer {
+	struct task_cputime_atomic cputime_atomic;
+};
+
+struct core_state;
+
+struct tty_struct;
+
+struct taskstats;
+
+struct tty_audit_buf;
+
+struct signal_struct {
+	refcount_t sigcnt;
+	atomic_t live;
+	int nr_threads;
+	int quick_threads;
+	struct list_head thread_head;
+	wait_queue_head_t wait_chldexit;
+	struct task_struct *curr_target;
+	struct sigpending shared_pending;
+	struct hlist_head multiprocess;
+	int group_exit_code;
+	int notify_count;
+	struct task_struct *group_exec_task;
+	int group_stop_count;
+	unsigned int flags;
+	struct core_state *core_state;
+	unsigned int is_child_subreaper: 1;
+	unsigned int has_child_subreaper: 1;
+	unsigned int next_posix_timer_id;
+	struct list_head posix_timers;
+	struct hrtimer real_timer;
+	ktime_t it_real_incr;
+	struct cpu_itimer it[2];
+	struct thread_group_cputimer cputimer;
+	struct posix_cputimers posix_cputimers;
+	struct pid *pids[4];
+	struct pid *tty_old_pgrp;
+	int leader;
+	struct tty_struct *tty;
+	seqlock_t stats_lock;
+	u64 utime;
+	u64 stime;
+	u64 cutime;
+	u64 cstime;
+	u64 gtime;
+	u64 cgtime;
+	struct prev_cputime prev_cputime;
+	unsigned long nvcsw;
+	unsigned long nivcsw;
+	unsigned long cnvcsw;
+	unsigned long cnivcsw;
+	unsigned long min_flt;
+	unsigned long maj_flt;
+	unsigned long cmin_flt;
+	unsigned long cmaj_flt;
+	unsigned long inblock;
+	unsigned long oublock;
+	unsigned long cinblock;
+	unsigned long coublock;
+	unsigned long maxrss;
+	unsigned long cmaxrss;
+	struct task_io_accounting ioac;
+	unsigned long long sum_sched_runtime;
+	struct rlimit rlim[16];
+	struct taskstats *stats;
+	unsigned int audit_tty;
+	struct tty_audit_buf *tty_audit_buf;
+	bool oom_flag_origin;
+	short oom_score_adj;
+	short oom_score_adj_min;
+	struct mm_struct *oom_mm;
+	struct mutex cred_guard_mutex;
+	struct rw_semaphore exec_update_lock;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_oem_data1;
+};
+
+struct core_thread {
+	struct task_struct *task;
+	struct core_thread *next;
+};
+
+struct core_state {
+	atomic_t nr_threads;
+	struct core_thread dumper;
+	struct completion startup;
+};
+
+struct taskstats {
+	__u16 version;
+	__u32 ac_exitcode;
+	__u8 ac_flag;
+	__u8 ac_nice;
+	__u64 cpu_count;
+	__u64 cpu_delay_total;
+	__u64 blkio_count;
+	__u64 blkio_delay_total;
+	__u64 swapin_count;
+	__u64 swapin_delay_total;
+	__u64 cpu_run_real_total;
+	__u64 cpu_run_virtual_total;
+	char ac_comm[32];
+	__u8 ac_sched;
+	__u8 ac_pad[3];
+	long: 0;
+	__u32 ac_uid;
+	__u32 ac_gid;
+	__u32 ac_pid;
+	__u32 ac_ppid;
+	__u32 ac_btime;
+	__u64 ac_etime;
+	__u64 ac_utime;
+	__u64 ac_stime;
+	__u64 ac_minflt;
+	__u64 ac_majflt;
+	__u64 coremem;
+	__u64 virtmem;
+	__u64 hiwater_rss;
+	__u64 hiwater_vm;
+	__u64 read_char;
+	__u64 write_char;
+	__u64 read_syscalls;
+	__u64 write_syscalls;
+	__u64 read_bytes;
+	__u64 write_bytes;
+	__u64 cancelled_write_bytes;
+	__u64 nvcsw;
+	__u64 nivcsw;
+	__u64 ac_utimescaled;
+	__u64 ac_stimescaled;
+	__u64 cpu_scaled_run_real_total;
+	__u64 freepages_count;
+	__u64 freepages_delay_total;
+	__u64 thrashing_count;
+	__u64 thrashing_delay_total;
+	__u64 ac_btime64;
+	__u64 compact_count;
+	__u64 compact_delay_total;
+	__u32 ac_tgid;
+	__u64 ac_tgetime;
+	__u64 ac_exe_dev;
+	__u64 ac_exe_inode;
+	__u64 wpcopy_count;
+	__u64 wpcopy_delay_total;
+	__u64 irq_count;
+	__u64 irq_delay_total;
+};
+
+typedef void __signalfn_t(int);
+
+typedef __signalfn_t __attribute__((btf_type_tag("user"))) *__sighandler_t;
+
+typedef void __restorefn_t();
+
+typedef __restorefn_t __attribute__((btf_type_tag("user"))) *__sigrestore_t;
+
+struct sigaction {
+	__sighandler_t sa_handler;
+	unsigned long sa_flags;
+	__sigrestore_t sa_restorer;
+	sigset_t sa_mask;
+};
+
+struct k_sigaction {
+	struct sigaction sa;
+};
+
+struct sighand_struct {
+	spinlock_t siglock;
+	refcount_t count;
+	wait_queue_head_t signalfd_wqh;
+	struct k_sigaction action[64];
+};
+
+struct bio;
+
+struct bio_list {
+	struct bio *head;
+	struct bio *tail;
+};
+
+typedef __u32 blk_opf_t;
+
+typedef u8 blk_status_t;
+
+typedef u64 sector_t;
+
+struct bvec_iter {
+	sector_t bi_sector;
+	unsigned int bi_size;
+	unsigned int bi_idx;
+	unsigned int bi_bvec_done;
+} __attribute__((packed));
+
+typedef unsigned int blk_qc_t;
+
+typedef void bio_end_io_t(struct bio *);
+
+struct bio_issue {
+	u64 value;
+};
+
+struct bio_vec {
+	struct page *bv_page;
+	unsigned int bv_len;
+	unsigned int bv_offset;
+};
+
+struct blkcg_gq;
+
+struct bio_crypt_ctx;
+
+struct bio_set;
+
+struct bio {
+	struct bio *bi_next;
+	struct block_device *bi_bdev;
+	blk_opf_t bi_opf;
+	unsigned short bi_flags;
+	unsigned short bi_ioprio;
+	enum rw_hint bi_write_hint;
+	blk_status_t bi_status;
+	atomic_t __bi_remaining;
+	struct bvec_iter bi_iter;
+	blk_qc_t bi_cookie;
+	bio_end_io_t *bi_end_io;
+	void *bi_private;
+	struct blkcg_gq *bi_blkg;
+	struct bio_issue bi_issue;
+	u64 bi_iocost_cost;
+	struct bio_crypt_ctx *bi_crypt_context;
+	bool bi_skip_dm_default_key;
+	union {};
+	unsigned short bi_vcnt;
+	unsigned short bi_max_vecs;
+	atomic_t __bi_cnt;
+	struct bio_vec *bi_io_vec;
+	struct bio_set *bi_pool;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	struct bio_vec bi_inline_vecs[0];
+};
+
+enum dl_dev_state {
+	DL_DEV_NO_DRIVER = 0,
+	DL_DEV_PROBING = 1,
+	DL_DEV_DRIVER_BOUND = 2,
+	DL_DEV_UNBINDING = 3,
+};
+
+struct dev_links_info {
+	struct list_head suppliers;
+	struct list_head consumers;
+	struct list_head defer_sync;
+	enum dl_dev_state status;
+};
+
+struct pm_message {
+	int event;
+};
+
+typedef struct pm_message pm_message_t;
+
+enum rpm_request {
+	RPM_REQ_NONE = 0,
+	RPM_REQ_IDLE = 1,
+	RPM_REQ_SUSPEND = 2,
+	RPM_REQ_AUTOSUSPEND = 3,
+	RPM_REQ_RESUME = 4,
+};
+
+enum rpm_status {
+	RPM_INVALID = -1,
+	RPM_ACTIVE = 0,
+	RPM_RESUMING = 1,
+	RPM_SUSPENDED = 2,
+	RPM_SUSPENDING = 3,
+};
+
+struct wakeup_source;
+
+struct wake_irq;
+
+struct pm_subsys_data;
+
+struct dev_pm_qos;
+
+struct dev_pm_info {
+	pm_message_t power_state;
+	unsigned int can_wakeup: 1;
+	unsigned int async_suspend: 1;
+	bool in_dpm_list: 1;
+	bool is_prepared: 1;
+	bool is_suspended: 1;
+	bool is_noirq_suspended: 1;
+	bool is_late_suspended: 1;
+	bool no_pm: 1;
+	bool early_init: 1;
+	bool direct_complete: 1;
+	u32 driver_flags;
+	spinlock_t lock;
+	struct list_head entry;
+	struct completion completion;
+	struct wakeup_source *wakeup;
+	bool wakeup_path: 1;
+	bool syscore: 1;
+	bool no_pm_callbacks: 1;
+	unsigned int must_resume: 1;
+	unsigned int may_skip_resume: 1;
+	struct hrtimer suspend_timer;
+	u64 timer_expires;
+	struct work_struct work;
+	wait_queue_head_t wait_queue;
+	struct wake_irq *wakeirq;
+	atomic_t usage_count;
+	atomic_t child_count;
+	unsigned int disable_depth: 3;
+	unsigned int idle_notification: 1;
+	unsigned int request_pending: 1;
+	unsigned int deferred_resume: 1;
+	unsigned int needs_force_resume: 1;
+	unsigned int runtime_auto: 1;
+	bool ignore_children: 1;
+	unsigned int no_callbacks: 1;
+	unsigned int irq_safe: 1;
+	unsigned int use_autosuspend: 1;
+	unsigned int timer_autosuspends: 1;
+	unsigned int memalloc_noio: 1;
+	unsigned int links_count;
+	enum rpm_request request;
+	enum rpm_status runtime_status;
+	enum rpm_status last_status;
+	int runtime_error;
+	int autosuspend_delay;
+	u64 last_busy;
+	u64 active_time;
+	u64 suspended_time;
+	u64 accounting_timestamp;
+	struct pm_subsys_data *subsys_data;
+	void (*set_latency_tolerance)(struct device *, s32);
+	struct dev_pm_qos *qos;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct irq_domain;
+
+struct msi_device_data;
+
+struct dev_msi_info {
+	struct irq_domain *domain;
+	struct msi_device_data *data;
+};
+
+struct dev_archdata {};
+
+enum device_removable {
+	DEVICE_REMOVABLE_NOT_SUPPORTED = 0,
+	DEVICE_REMOVABLE_UNKNOWN = 1,
+	DEVICE_FIXED = 2,
+	DEVICE_REMOVABLE = 3,
+};
+
+struct device_private;
+
+struct device_type;
+
+struct bus_type;
+
+struct device_driver;
+
+struct dev_pm_domain;
+
+struct em_perf_domain;
+
+struct dev_pin_info;
+
+struct dma_map_ops;
+
+struct bus_dma_region;
+
+struct device_dma_parameters;
+
+struct dma_coherent_mem;
+
+struct cma;
+
+struct io_tlb_mem;
+
+struct device_node;
+
+struct fwnode_handle;
+
+struct class;
+
+struct iommu_group;
+
+struct dev_iommu;
+
+struct device_physical_location;
+
+struct device {
+	struct kobject kobj;
+	struct device *parent;
+	struct device_private *p;
+	const char *init_name;
+	const struct device_type *type;
+	const struct bus_type *bus;
+	struct device_driver *driver;
+	void *platform_data;
+	void *driver_data;
+	struct mutex mutex;
+	struct dev_links_info links;
+	struct dev_pm_info power;
+	struct dev_pm_domain *pm_domain;
+	struct em_perf_domain *em_pd;
+	struct dev_pin_info *pins;
+	struct dev_msi_info msi;
+	const struct dma_map_ops *dma_ops;
+	u64 *dma_mask;
+	u64 coherent_dma_mask;
+	u64 bus_dma_limit;
+	const struct bus_dma_region *dma_range_map;
+	struct device_dma_parameters *dma_parms;
+	struct list_head dma_pools;
+	struct dma_coherent_mem *dma_mem;
+	struct cma *cma_area;
+	struct io_tlb_mem *dma_io_tlb_mem;
+	struct list_head dma_io_tlb_pools;
+	spinlock_t dma_io_tlb_lock;
+	bool dma_uses_io_tlb;
+	struct dev_archdata archdata;
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	dev_t devt;
+	u32 id;
+	spinlock_t devres_lock;
+	struct list_head devres_head;
+	const struct class *class;
+	const struct attribute_group **groups;
+	void (*release)(struct device *);
+	struct iommu_group *iommu_group;
+	struct dev_iommu *iommu;
+	struct device_physical_location *physical_location;
+	enum device_removable removable;
+	bool offline_disabled: 1;
+	bool offline: 1;
+	bool of_node_reused: 1;
+	bool state_synced: 1;
+	bool can_match: 1;
+	bool dma_coherent: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+};
+
+struct request_queue;
+
+struct disk_stats;
+
+struct blk_holder_ops;
+
+struct partition_meta_info;
+
+struct block_device {
+	sector_t bd_start_sect;
+	sector_t bd_nr_sectors;
+	struct gendisk *bd_disk;
+	struct request_queue *bd_queue;
+	struct disk_stats __attribute__((btf_type_tag("percpu"))) *bd_stats;
+	unsigned long bd_stamp;
+	bool bd_read_only;
+	u8 bd_partno;
+	bool bd_write_holder;
+	bool bd_has_submit_bio;
+	dev_t bd_dev;
+	atomic_t bd_openers;
+	spinlock_t bd_size_lock;
+	struct inode *bd_inode;
+	void *bd_claiming;
+	void *bd_holder;
+	const struct blk_holder_ops *bd_holder_ops;
+	struct mutex bd_holder_lock;
+	int bd_fsfreeze_count;
+	int bd_holders;
+	struct kobject *bd_holder_dir;
+	struct mutex bd_fsfreeze_mutex;
+	struct super_block *bd_fsfreeze_sb;
+	struct partition_meta_info *bd_meta_info;
+	bool bd_ro_warned;
+	struct device bd_device;
+};
+
+typedef void *mempool_alloc_t(gfp_t, void *);
+
+typedef void mempool_free_t(void *, void *);
+
+struct mempool_s {
+	spinlock_t lock;
+	int min_nr;
+	int curr_nr;
+	void **elements;
+	void *pool_data;
+	mempool_alloc_t *alloc;
+	mempool_free_t *free;
+	wait_queue_head_t wait;
+};
+
+typedef struct mempool_s mempool_t;
+
+struct bio_alloc_cache;
+
+struct bio_set {
+	struct kmem_cache *bio_slab;
+	unsigned int front_pad;
+	struct bio_alloc_cache __attribute__((btf_type_tag("percpu"))) *cache;
+	mempool_t bio_pool;
+	mempool_t bvec_pool;
+	unsigned int back_pad;
+	spinlock_t rescue_lock;
+	struct bio_list rescue_list;
+	struct work_struct rescue_work;
+	struct workqueue_struct *rescue_workqueue;
+	struct hlist_node cpuhp_dead;
+};
+
+typedef unsigned int blk_mode_t;
+
+struct block_device_operations;
+
+struct timer_rand_state;
+
+struct disk_events;
+
+struct badblocks;
+
+struct blk_independent_access_ranges;
+
+struct gendisk {
+	int major;
+	int first_minor;
+	int minors;
+	char disk_name[32];
+	unsigned short events;
+	unsigned short event_flags;
+	struct xarray part_tbl;
+	struct block_device *part0;
+	const struct block_device_operations *fops;
+	struct request_queue *queue;
+	void *private_data;
+	struct bio_set bio_split;
+	int flags;
+	unsigned long state;
+	struct mutex open_mutex;
+	unsigned int open_partitions;
+	struct backing_dev_info *bdi;
+	struct kobject queue_kobj;
+	struct kobject *slave_dir;
+	struct list_head slave_bdevs;
+	struct timer_rand_state *random;
+	atomic_t sync_io;
+	struct disk_events *ev;
+	unsigned int nr_zones;
+	unsigned int max_open_zones;
+	unsigned int max_active_zones;
+	unsigned long *conv_zones_bitmap;
+	unsigned long *seq_zones_wlock;
+	int node_id;
+	struct badblocks *bb;
+	struct lockdep_map lockdep_map;
+	u64 diskseq;
+	blk_mode_t open_mode;
+	struct blk_independent_access_ranges *ia_ranges;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct blk_zone;
+
+typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
+
+enum blk_unique_id {
+	BLK_UID_T10 = 1,
+	BLK_UID_EUI64 = 2,
+	BLK_UID_NAA = 3,
+};
+
+struct io_comp_batch;
+
+struct hd_geometry;
+
+struct pr_ops;
+
+struct block_device_operations {
+	void (*submit_bio)(struct bio *);
+	int (*poll_bio)(struct bio *, struct io_comp_batch *, unsigned int);
+	int (*open)(struct gendisk *, blk_mode_t);
+	void (*release)(struct gendisk *);
+	int (*ioctl)(struct block_device *, blk_mode_t, unsigned int, unsigned long);
+	int (*compat_ioctl)(struct block_device *, blk_mode_t, unsigned int, unsigned long);
+	unsigned int (*check_events)(struct gendisk *, unsigned int);
+	void (*unlock_native_capacity)(struct gendisk *);
+	int (*getgeo)(struct block_device *, struct hd_geometry *);
+	int (*set_read_only)(struct block_device *, bool);
+	void (*free_disk)(struct gendisk *);
+	void (*swap_slot_free_notify)(struct block_device *, unsigned long);
+	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
+	char * (*devnode)(struct gendisk *, umode_t *);
+	int (*get_unique_id)(struct gendisk *, u8 *, enum blk_unique_id);
+	struct module *owner;
+	const struct pr_ops *pr_ops;
+	int (*alternative_gpt_sector)(struct gendisk *, sector_t *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct request;
+
+struct io_comp_batch {
+	struct request *req_list;
+	bool need_ts;
+	void (*complete)(struct io_comp_batch *);
+};
+
+struct blk_zone {
+	__u64 start;
+	__u64 len;
+	__u64 wp;
+	__u8 type;
+	__u8 cond;
+	__u8 non_seq;
+	__u8 reset;
+	__u8 resv[4];
+	__u64 capacity;
+	__u8 reserved[24];
+};
+
+enum pr_type {
+	PR_WRITE_EXCLUSIVE = 1,
+	PR_EXCLUSIVE_ACCESS = 2,
+	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
+	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
+	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
+	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
+};
+
+struct pr_keys;
+
+struct pr_held_reservation;
+
+struct pr_ops {
+	int (*pr_register)(struct block_device *, u64, u64, u32);
+	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
+	int (*pr_release)(struct block_device *, u64, enum pr_type);
+	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
+	int (*pr_clear)(struct block_device *, u64);
+	int (*pr_read_keys)(struct block_device *, struct pr_keys *);
+	int (*pr_read_reservation)(struct block_device *, struct pr_held_reservation *);
+};
+
+enum blk_bounce {
+	BLK_BOUNCE_NONE = 0,
+	BLK_BOUNCE_HIGH = 1,
+};
+
+enum blk_zoned_model {
+	BLK_ZONED_NONE = 0,
+	BLK_ZONED_HA = 1,
+	BLK_ZONED_HM = 2,
+};
+
+struct queue_limits {
+	enum blk_bounce bounce;
+	unsigned long seg_boundary_mask;
+	unsigned long virt_boundary_mask;
+	unsigned int max_hw_sectors;
+	unsigned int max_dev_sectors;
+	unsigned int chunk_sectors;
+	unsigned int max_sectors;
+	unsigned int max_user_sectors;
+	unsigned int max_segment_size;
+	unsigned int physical_block_size;
+	unsigned int logical_block_size;
+	unsigned int alignment_offset;
+	unsigned int io_min;
+	unsigned int io_opt;
+	unsigned int max_discard_sectors;
+	unsigned int max_hw_discard_sectors;
+	unsigned int max_secure_erase_sectors;
+	unsigned int max_write_zeroes_sectors;
+	unsigned int max_zone_append_sectors;
+	unsigned int discard_granularity;
+	unsigned int discard_alignment;
+	unsigned int zone_write_granularity;
+	unsigned short max_segments;
+	unsigned short max_integrity_segments;
+	unsigned short max_discard_segments;
+	unsigned char misaligned;
+	unsigned char discard_misaligned;
+	unsigned char raid_partial_stripes_expensive;
+	bool sub_page_limits;
+	enum blk_zoned_model zoned;
+	unsigned int dma_alignment;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+};
+
+struct elevator_queue;
+
+struct blk_queue_stats;
+
+struct rq_qos;
+
+struct blk_mq_ops;
+
+struct blk_mq_ctx;
+
+struct blk_crypto_profile;
+
+struct blk_mq_tags;
+
+struct blk_flush_queue;
+
+struct throtl_data;
+
+struct blk_mq_tag_set;
+
+struct request_queue {
+	struct request *last_merge;
+	struct elevator_queue *elevator;
+	struct percpu_ref q_usage_counter;
+	struct blk_queue_stats *stats;
+	struct rq_qos *rq_qos;
+	struct mutex rq_qos_mutex;
+	const struct blk_mq_ops *mq_ops;
+	struct blk_mq_ctx __attribute__((btf_type_tag("percpu"))) *queue_ctx;
+	unsigned int queue_depth;
+	struct xarray hctx_table;
+	unsigned int nr_hw_queues;
+	void *queuedata;
+	unsigned long queue_flags;
+	atomic_t pm_only;
+	int id;
+	spinlock_t queue_lock;
+	struct gendisk *disk;
+	refcount_t refs;
+	struct kobject *mq_kobj;
+	struct device *dev;
+	enum rpm_status rpm_status;
+	unsigned long nr_requests;
+	unsigned int dma_pad_mask;
+	struct blk_crypto_profile *crypto_profile;
+	struct kobject *crypto_kobject;
+	unsigned int rq_timeout;
+	struct timer_list timeout;
+	struct work_struct timeout_work;
+	atomic_t nr_active_requests_shared_tags;
+	struct blk_mq_tags *sched_shared_tags;
+	struct list_head icq_list;
+	unsigned long blkcg_pols[1];
+	struct blkcg_gq *root_blkg;
+	struct list_head blkg_list;
+	struct mutex blkcg_mutex;
+	struct queue_limits limits;
+	unsigned int required_elevator_features;
+	int node;
+	struct blk_flush_queue *fq;
+	struct list_head flush_list;
+	struct list_head requeue_list;
+	spinlock_t requeue_lock;
+	struct delayed_work requeue_work;
+	struct mutex sysfs_lock;
+	struct mutex sysfs_dir_lock;
+	struct list_head unused_hctx_list;
+	spinlock_t unused_hctx_lock;
+	int mq_freeze_depth;
+	struct throtl_data *td;
+	struct callback_head callback_head;
+	wait_queue_head_t mq_freeze_wq;
+	struct mutex mq_freeze_lock;
+	int quiesce_depth;
+	struct blk_mq_tag_set *tag_set;
+	struct list_head tag_set_list;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct dentry *rqos_debugfs_dir;
+	struct mutex debugfs_mutex;
+	bool mq_sysfs_init_done;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum blk_eh_timer_return {
+	BLK_EH_DONE = 0,
+	BLK_EH_RESET_TIMER = 1,
+};
+
+struct blk_mq_hw_ctx;
+
+struct blk_mq_queue_data;
+
+struct blk_mq_ops {
+	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
+	void (*commit_rqs)(struct blk_mq_hw_ctx *);
+	void (*queue_rqs)(struct request **);
+	int (*get_budget)(struct request_queue *);
+	void (*put_budget)(struct request_queue *, int);
+	void (*set_rq_budget_token)(struct request *, int);
+	int (*get_rq_budget_token)(struct request *);
+	enum blk_eh_timer_return (*timeout)(struct request *);
+	int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
+	void (*complete)(struct request *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
+	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
+	void (*cleanup_rq)(struct request *);
+	bool (*busy)(struct request_queue *);
+	void (*map_queues)(struct blk_mq_tag_set *);
+	void (*show_rq)(struct seq_file *, struct request *);
+	u64 android_kabi_reserved1;
+};
+
+struct blk_mq_ctxs;
+
+struct blk_mq_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head rq_lists[3];
+		long: 64;
+	};
+	unsigned int cpu;
+	unsigned short index_hw[3];
+	struct blk_mq_hw_ctx *hctxs[3];
+	struct request_queue *queue;
+	struct blk_mq_ctxs *ctxs;
+	struct kobject kobj;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct dev_pm_ops;
+
+struct device_type {
+	const char *name;
+	const struct attribute_group **groups;
+	int (*uevent)(const struct device *, struct kobj_uevent_env *);
+	char * (*devnode)(const struct device *, umode_t *, kuid_t *, kgid_t *);
+	void (*release)(struct device *);
+	const struct dev_pm_ops *pm;
+};
+
+struct dev_pm_ops {
+	int (*prepare)(struct device *);
+	void (*complete)(struct device *);
+	int (*suspend)(struct device *);
+	int (*resume)(struct device *);
+	int (*freeze)(struct device *);
+	int (*thaw)(struct device *);
+	int (*poweroff)(struct device *);
+	int (*restore)(struct device *);
+	int (*suspend_late)(struct device *);
+	int (*resume_early)(struct device *);
+	int (*freeze_late)(struct device *);
+	int (*thaw_early)(struct device *);
+	int (*poweroff_late)(struct device *);
+	int (*restore_early)(struct device *);
+	int (*suspend_noirq)(struct device *);
+	int (*resume_noirq)(struct device *);
+	int (*freeze_noirq)(struct device *);
+	int (*thaw_noirq)(struct device *);
+	int (*poweroff_noirq)(struct device *);
+	int (*restore_noirq)(struct device *);
+	int (*runtime_suspend)(struct device *);
+	int (*runtime_resume)(struct device *);
+	int (*runtime_idle)(struct device *);
+	u64 android_kabi_reserved1;
+};
+
+struct iommu_ops;
+
+struct bus_type {
+	const char *name;
+	const char *dev_name;
+	const struct attribute_group **bus_groups;
+	const struct attribute_group **dev_groups;
+	const struct attribute_group **drv_groups;
+	int (*match)(struct device *, struct device_driver *);
+	int (*uevent)(const struct device *, struct kobj_uevent_env *);
+	int (*probe)(struct device *);
+	void (*sync_state)(struct device *);
+	void (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+	int (*online)(struct device *);
+	int (*offline)(struct device *);
+	int (*suspend)(struct device *, pm_message_t);
+	int (*resume)(struct device *);
+	int (*num_vf)(struct device *);
+	int (*dma_configure)(struct device *);
+	void (*dma_cleanup)(struct device *);
+	const struct dev_pm_ops *pm;
+	const struct iommu_ops *iommu_ops;
+	bool need_parent_lock;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum probe_type {
+	PROBE_DEFAULT_STRATEGY = 0,
+	PROBE_PREFER_ASYNCHRONOUS = 1,
+	PROBE_FORCE_SYNCHRONOUS = 2,
+};
+
+struct of_device_id;
+
+struct acpi_device_id;
+
+struct driver_private;
+
+struct device_driver {
+	const char *name;
+	const struct bus_type *bus;
+	struct module *owner;
+	const char *mod_name;
+	bool suppress_bind_attrs;
+	enum probe_type probe_type;
+	const struct of_device_id *of_match_table;
+	const struct acpi_device_id *acpi_match_table;
+	int (*probe)(struct device *);
+	void (*sync_state)(struct device *);
+	int (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+	int (*suspend)(struct device *, pm_message_t);
+	int (*resume)(struct device *);
+	const struct attribute_group **groups;
+	const struct attribute_group **dev_groups;
+	const struct dev_pm_ops *pm;
+	void (*coredump)(struct device *);
+	struct driver_private *p;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct of_device_id {
+	char name[32];
+	char type[32];
+	char compatible[128];
+	const void *data;
+};
+
+typedef unsigned long kernel_ulong_t;
+
+struct acpi_device_id {
+	__u8 id[16];
+	kernel_ulong_t driver_data;
+	__u32 cls;
+	__u32 cls_msk;
+};
+
+enum iommu_cap {
+	IOMMU_CAP_CACHE_COHERENCY = 0,
+	IOMMU_CAP_NOEXEC = 1,
+	IOMMU_CAP_PRE_BOOT_PROTECTION = 2,
+	IOMMU_CAP_ENFORCE_CACHE_COHERENCY = 3,
+	IOMMU_CAP_DEFERRED_FLUSH = 4,
+};
+
+enum iommu_dev_features {
+	IOMMU_DEV_FEAT_SVA = 0,
+	IOMMU_DEV_FEAT_IOPF = 1,
+};
+
+typedef unsigned int ioasid_t;
+
+struct iommu_domain;
+
+struct iommu_device;
+
+struct of_phandle_args;
+
+struct iommu_fault_event;
+
+struct iommu_page_response;
+
+struct iommu_domain_ops;
+
+struct iommu_ops {
+	bool (*capable)(struct device *, enum iommu_cap);
+	void * (*hw_info)(struct device *, u32 *, u32 *);
+	struct iommu_domain * (*domain_alloc)(unsigned int);
+	struct iommu_device * (*probe_device)(struct device *);
+	void (*release_device)(struct device *);
+	void (*probe_finalize)(struct device *);
+	void (*set_platform_dma_ops)(struct device *);
+	struct iommu_group * (*device_group)(struct device *);
+	void (*get_resv_regions)(struct device *, struct list_head *);
+	int (*of_xlate)(struct device *, struct of_phandle_args *);
+	bool (*is_attach_deferred)(struct device *);
+	int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
+	int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
+	int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
+	int (*def_domain_type)(struct device *);
+	void (*remove_dev_pasid)(struct device *, ioasid_t);
+	const struct iommu_domain_ops *default_domain_ops;
+	unsigned long pgsize_bitmap;
+	struct module *owner;
+};
+
+struct wakeup_source {
+	const char *name;
+	int id;
+	struct list_head entry;
+	spinlock_t lock;
+	struct wake_irq *wakeirq;
+	struct timer_list timer;
+	unsigned long timer_expires;
+	ktime_t total_time;
+	ktime_t max_time;
+	ktime_t last_time;
+	ktime_t start_prevent_time;
+	ktime_t prevent_sleep_time;
+	unsigned long event_count;
+	unsigned long active_count;
+	unsigned long relax_count;
+	unsigned long expire_count;
+	unsigned long wakeup_count;
+	struct device *dev;
+	bool active: 1;
+	bool autosleep_enabled: 1;
+};
+
+struct pm_domain_data;
+
+struct pm_subsys_data {
+	spinlock_t lock;
+	unsigned int refcount;
+	unsigned int clock_op_might_sleep;
+	struct mutex clock_mutex;
+	struct list_head clock_list;
+	struct pm_domain_data *domain_data;
+};
+
+struct dev_pm_domain {
+	struct dev_pm_ops ops;
+	int (*start)(struct device *);
+	void (*detach)(struct device *, bool);
+	int (*activate)(struct device *);
+	void (*sync)(struct device *);
+	void (*dismiss)(struct device *);
+	int (*set_performance_state)(struct device *, unsigned int);
+	u64 android_kabi_reserved1;
+};
+
+struct em_perf_table;
+
+struct em_perf_domain {
+	struct em_perf_table __attribute__((btf_type_tag("rcu"))) *em_table;
+	int nr_perf_states;
+	int min_ps;
+	int max_ps;
+	unsigned long flags;
+	unsigned long cpus[0];
+};
+
+struct em_perf_state {
+	unsigned long performance;
+	unsigned long frequency;
+	unsigned long power;
+	unsigned long cost;
+	unsigned long flags;
+};
+
+struct em_perf_table {
+	struct callback_head rcu;
+	struct kref kref;
+	struct em_perf_state state[0];
+};
+
+typedef u64 dma_addr_t;
+
+enum dma_data_direction {
+	DMA_BIDIRECTIONAL = 0,
+	DMA_TO_DEVICE = 1,
+	DMA_FROM_DEVICE = 2,
+	DMA_NONE = 3,
+};
+
+typedef u64 phys_addr_t;
+
+struct sg_table;
+
+struct scatterlist;
+
+struct dma_map_ops {
+	unsigned int flags;
+	void * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, unsigned long);
+	void (*free)(struct device *, size_t, void *, dma_addr_t, unsigned long);
+	struct page * (*alloc_pages)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
+	void (*free_pages)(struct device *, size_t, struct page *, dma_addr_t, enum dma_data_direction);
+	struct sg_table * (*alloc_noncontiguous)(struct device *, size_t, enum dma_data_direction, gfp_t, unsigned long);
+	void (*free_noncontiguous)(struct device *, size_t, struct sg_table *, enum dma_data_direction);
+	int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, unsigned long);
+	int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, unsigned long);
+	dma_addr_t (*map_page)(struct device *, struct page *, unsigned long, size_t, enum dma_data_direction, unsigned long);
+	void (*unmap_page)(struct device *, dma_addr_t, size_t, enum dma_data_direction, unsigned long);
+	int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, unsigned long);
+	void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, unsigned long);
+	dma_addr_t (*map_resource)(struct device *, phys_addr_t, size_t, enum dma_data_direction, unsigned long);
+	void (*unmap_resource)(struct device *, dma_addr_t, size_t, enum dma_data_direction, unsigned long);
+	void (*sync_single_for_cpu)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
+	void (*sync_single_for_device)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
+	void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction);
+	void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction);
+	void (*cache_sync)(struct device *, void *, size_t, enum dma_data_direction);
+	int (*dma_supported)(struct device *, u64);
+	u64 (*get_required_mask)(struct device *);
+	size_t (*max_mapping_size)(struct device *);
+	size_t (*opt_mapping_size)();
+	unsigned long (*get_merge_boundary)(struct device *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct bus_dma_region {
+	phys_addr_t cpu_start;
+	dma_addr_t dma_start;
+	u64 size;
+	u64 offset;
+};
+
+struct device_dma_parameters {
+	unsigned int max_segment_size;
+	unsigned int min_align_mask;
+	unsigned long segment_boundary_mask;
+};
+
+typedef u32 phandle;
+
+struct fwnode_operations;
+
+struct fwnode_handle {
+	struct fwnode_handle *secondary;
+	const struct fwnode_operations *ops;
+	struct device *dev;
+	struct list_head suppliers;
+	struct list_head consumers;
+	u8 flags;
+	u64 android_kabi_reserved1;
+};
+
+struct property;
+
+struct device_node {
+	const char *name;
+	phandle phandle;
+	const char *full_name;
+	struct fwnode_handle fwnode;
+	struct property *properties;
+	struct property *deadprops;
+	struct device_node *parent;
+	struct device_node *child;
+	struct device_node *sibling;
+	struct kobject kobj;
+	unsigned long _flags;
+	void *data;
+};
+
+enum dev_dma_attr {
+	DEV_DMA_NOT_SUPPORTED = 0,
+	DEV_DMA_NON_COHERENT = 1,
+	DEV_DMA_COHERENT = 2,
+};
+
+struct fwnode_reference_args;
+
+struct fwnode_endpoint;
+
+struct fwnode_operations {
+	struct fwnode_handle * (*get)(struct fwnode_handle *);
+	void (*put)(struct fwnode_handle *);
+	bool (*device_is_available)(const struct fwnode_handle *);
+	const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);
+	bool (*device_dma_supported)(const struct fwnode_handle *);
+	enum dev_dma_attr (*device_get_dma_attr)(const struct fwnode_handle *);
+	bool (*property_present)(const struct fwnode_handle *, const char *);
+	int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);
+	int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);
+	const char * (*get_name)(const struct fwnode_handle *);
+	const char * (*get_name_prefix)(const struct fwnode_handle *);
+	struct fwnode_handle * (*get_parent)(const struct fwnode_handle *);
+	struct fwnode_handle * (*get_next_child_node)(const struct fwnode_handle *, struct fwnode_handle *);
+	struct fwnode_handle * (*get_named_child_node)(const struct fwnode_handle *, const char *);
+	int (*get_reference_args)(const struct fwnode_handle *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args *);
+	struct fwnode_handle * (*graph_get_next_endpoint)(const struct fwnode_handle *, struct fwnode_handle *);
+	struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);
+	struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);
+	int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);
+	void * (*iomap)(struct fwnode_handle *, int);
+	int (*irq_get)(const struct fwnode_handle *, unsigned int);
+	int (*add_links)(struct fwnode_handle *);
+};
+
+struct fwnode_reference_args {
+	struct fwnode_handle *fwnode;
+	unsigned int nargs;
+	u64 args[8];
+};
+
+struct fwnode_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct fwnode_handle *local_fwnode;
+};
+
+struct property {
+	char *name;
+	int length;
+	void *value;
+	struct property *next;
+	struct bin_attribute attr;
+};
+
+struct class {
+	const char *name;
+	const struct attribute_group **class_groups;
+	const struct attribute_group **dev_groups;
+	int (*dev_uevent)(const struct device *, struct kobj_uevent_env *);
+	char * (*devnode)(const struct device *, umode_t *);
+	void (*class_release)(const struct class *);
+	void (*dev_release)(struct device *);
+	int (*shutdown_pre)(struct device *);
+	const struct kobj_ns_type_operations *ns_type;
+	const void * (*namespace)(const struct device *);
+	void (*get_ownership)(const struct device *, kuid_t *, kgid_t *);
+	const struct dev_pm_ops *pm;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum kobj_ns_type {
+	KOBJ_NS_TYPE_NONE = 0,
+	KOBJ_NS_TYPE_NET = 1,
+	KOBJ_NS_TYPES = 2,
+};
+
+struct kobj_ns_type_operations {
+	enum kobj_ns_type type;
+	bool (*current_may_mount)();
+	void * (*grab_current_ns)();
+	const void * (*netlink_ns)(struct sock *);
+	const void * (*initial_ns)();
+	void (*drop_ns)(void *);
+};
+
+enum device_physical_location_panel {
+	DEVICE_PANEL_TOP = 0,
+	DEVICE_PANEL_BOTTOM = 1,
+	DEVICE_PANEL_LEFT = 2,
+	DEVICE_PANEL_RIGHT = 3,
+	DEVICE_PANEL_FRONT = 4,
+	DEVICE_PANEL_BACK = 5,
+	DEVICE_PANEL_UNKNOWN = 6,
+};
+
+enum device_physical_location_vertical_position {
+	DEVICE_VERT_POS_UPPER = 0,
+	DEVICE_VERT_POS_CENTER = 1,
+	DEVICE_VERT_POS_LOWER = 2,
+};
+
+enum device_physical_location_horizontal_position {
+	DEVICE_HORI_POS_LEFT = 0,
+	DEVICE_HORI_POS_CENTER = 1,
+	DEVICE_HORI_POS_RIGHT = 2,
+};
+
+struct device_physical_location {
+	enum device_physical_location_panel panel;
+	enum device_physical_location_vertical_position vertical_position;
+	enum device_physical_location_horizontal_position horizontal_position;
+	bool dock;
+	bool lid;
+};
+
+struct bio_alloc_cache {
+	struct bio *free_list;
+	struct bio *free_list_irq;
+	unsigned int nr;
+	unsigned int nr_irq;
+};
+
+struct fprop_local_percpu {
+	struct percpu_counter events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+enum wb_reason {
+	WB_REASON_BACKGROUND = 0,
+	WB_REASON_VMSCAN = 1,
+	WB_REASON_SYNC = 2,
+	WB_REASON_PERIODIC = 3,
+	WB_REASON_LAPTOP_TIMER = 4,
+	WB_REASON_FS_FREE_SPACE = 5,
+	WB_REASON_FORKER_THREAD = 6,
+	WB_REASON_FOREIGN_FLUSH = 7,
+	WB_REASON_MAX = 8,
+};
+
+struct bdi_writeback {
+	struct backing_dev_info *bdi;
+	unsigned long state;
+	unsigned long last_old_flush;
+	struct list_head b_dirty;
+	struct list_head b_io;
+	struct list_head b_more_io;
+	struct list_head b_dirty_time;
+	spinlock_t list_lock;
+	atomic_t writeback_inodes;
+	struct percpu_counter stat[4];
+	unsigned long bw_time_stamp;
+	unsigned long dirtied_stamp;
+	unsigned long written_stamp;
+	unsigned long write_bandwidth;
+	unsigned long avg_write_bandwidth;
+	unsigned long dirty_ratelimit;
+	unsigned long balanced_dirty_ratelimit;
+	struct fprop_local_percpu completions;
+	int dirty_exceeded;
+	enum wb_reason start_all_reason;
+	spinlock_t work_lock;
+	struct list_head work_list;
+	struct delayed_work dwork;
+	struct delayed_work bw_dwork;
+	struct list_head bdi_node;
+	struct percpu_ref refcnt;
+	struct fprop_local_percpu memcg_completions;
+	struct cgroup_subsys_state *memcg_css;
+	struct cgroup_subsys_state *blkcg_css;
+	struct list_head memcg_node;
+	struct list_head blkcg_node;
+	struct list_head b_attached;
+	struct list_head offline_node;
+	union {
+		struct work_struct release_work;
+		struct callback_head rcu;
+	};
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_oem_data1[2];
+};
+
+struct backing_dev_info {
+	u64 id;
+	struct rb_node rb_node;
+	struct list_head bdi_list;
+	unsigned long ra_pages;
+	unsigned long io_pages;
+	struct kref refcnt;
+	unsigned int capabilities;
+	unsigned int min_ratio;
+	unsigned int max_ratio;
+	unsigned int max_prop_frac;
+	atomic_long_t tot_write_bandwidth;
+	unsigned long last_bdp_sleep;
+	struct bdi_writeback wb;
+	struct list_head wb_list;
+	struct xarray cgwb_tree;
+	struct mutex cgwb_release_mutex;
+	struct rw_semaphore wb_switch_rwsem;
+	wait_queue_head_t wb_waitq;
+	struct device *dev;
+	char dev_name[64];
+	struct device *owner;
+	struct timer_list laptop_mode_wb_timer;
+	struct dentry *debug_dir;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct blk_independent_access_range {
+	struct kobject kobj;
+	sector_t sector;
+	sector_t nr_sectors;
+};
+
+struct blk_independent_access_ranges {
+	struct kobject kobj;
+	bool sysfs_registered;
+	unsigned int nr_ia_ranges;
+	struct blk_independent_access_range ia_range[0];
+};
+
+struct disk_stats {
+	u64 nsecs[4];
+	unsigned long sectors[4];
+	unsigned long ios[4];
+	unsigned long merges[4];
+	unsigned long io_ticks;
+	local_t in_flight[2];
+};
+
+struct blk_holder_ops {
+	void (*mark_dead)(struct block_device *, bool);
+	void (*sync)(struct block_device *);
+};
+
+struct partition_meta_info {
+	char uuid[37];
+	u8 volname[64];
+};
+
+struct blk_plug {
+	struct request *mq_list;
+	struct request *cached_rq;
+	unsigned short nr_ios;
+	unsigned short rq_count;
+	bool multiple_queues;
+	bool has_elevator;
+	struct list_head cb_list;
+};
+
+struct reclaim_state {
+	unsigned long reclaimed;
+	struct lru_gen_mm_walk *mm_walk;
+};
+
+struct io_cq;
+
+struct io_context {
+	atomic_long_t refcount;
+	atomic_t active_ref;
+	unsigned short ioprio;
+	spinlock_t lock;
+	struct xarray icq_tree;
+	struct io_cq __attribute__((btf_type_tag("rcu"))) *icq_hint;
+	struct hlist_head icq_list;
+	struct work_struct release_work;
+};
+
+struct io_cq {
+	struct request_queue *q;
+	struct io_context *ioc;
+	union {
+		struct list_head q_node;
+		struct kmem_cache *__rcu_icq_cache;
+	};
+	union {
+		struct hlist_node ioc_node;
+		struct callback_head __rcu_head;
+	};
+	unsigned int flags;
+};
+
+typedef int __kernel_timer_t;
+
+union sigval {
+	int sival_int;
+	void __attribute__((btf_type_tag("user"))) *sival_ptr;
+};
+
+typedef union sigval sigval_t;
+
+typedef __kernel_long_t __kernel_clock_t;
+
+union __sifields {
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+	} _kill;
+	struct {
+		__kernel_timer_t _tid;
+		int _overrun;
+		sigval_t _sigval;
+		int _sys_private;
+	} _timer;
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+		sigval_t _sigval;
+	} _rt;
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+		int _status;
+		__kernel_clock_t _utime;
+		__kernel_clock_t _stime;
+	} _sigchld;
+	struct {
+		void __attribute__((btf_type_tag("user"))) *_addr;
+		union {
+			int _trapno;
+			short _addr_lsb;
+			struct {
+				char _dummy_bnd[8];
+				void __attribute__((btf_type_tag("user"))) *_lower;
+				void __attribute__((btf_type_tag("user"))) *_upper;
+			} _addr_bnd;
+			struct {
+				char _dummy_pkey[8];
+				__u32 _pkey;
+			} _addr_pkey;
+			struct {
+				unsigned long _data;
+				__u32 _type;
+				__u32 _flags;
+			} _perf;
+		};
+	} _sigfault;
+	struct {
+		long _band;
+		int _fd;
+	} _sigpoll;
+	struct {
+		void __attribute__((btf_type_tag("user"))) *_call_addr;
+		int _syscall;
+		unsigned int _arch;
+	} _sigsys;
+};
+
+struct kernel_siginfo {
+	struct {
+		int si_signo;
+		int si_errno;
+		int si_code;
+		union __sifields _sifields;
+	};
+};
+
+struct robust_list {
+	struct robust_list __attribute__((btf_type_tag("user"))) *next;
+};
+
+struct robust_list_head {
+	struct robust_list list;
+	long futex_offset;
+	struct robust_list __attribute__((btf_type_tag("user"))) *list_op_pending;
+};
+
+typedef u32 compat_uptr_t;
+
+struct compat_robust_list {
+	compat_uptr_t next;
+};
+
+typedef s32 compat_long_t;
+
+struct compat_robust_list_head {
+	struct compat_robust_list list;
+	compat_long_t futex_offset;
+	compat_uptr_t list_op_pending;
+};
+
+struct perf_event_groups {
+	struct rb_root tree;
+	u64 index;
+};
+
+struct perf_event_context {
+	raw_spinlock_t lock;
+	struct mutex mutex;
+	struct list_head pmu_ctx_list;
+	struct perf_event_groups pinned_groups;
+	struct perf_event_groups flexible_groups;
+	struct list_head event_list;
+	int nr_events;
+	int nr_user;
+	int is_active;
+	int nr_task_data;
+	int nr_stat;
+	int nr_freq;
+	int rotate_disable;
+	refcount_t refcount;
+	struct task_struct *task;
+	u64 time;
+	u64 timestamp;
+	u64 timeoffset;
+	struct perf_event_context *parent_ctx;
+	u64 parent_gen;
+	u64 generation;
+	int pin_count;
+	struct callback_head callback_head;
+	local_t nr_pending;
+};
+
+struct task_delay_info {
+	raw_spinlock_t lock;
+	u64 blkio_start;
+	u64 blkio_delay;
+	u64 swapin_start;
+	u64 swapin_delay;
+	u32 blkio_count;
+	u32 swapin_count;
+	u64 freepages_start;
+	u64 freepages_delay;
+	u64 thrashing_start;
+	u64 thrashing_delay;
+	u64 compact_start;
+	u64 compact_delay;
+	u64 wpcopy_start;
+	u64 wpcopy_delay;
+	u64 irq_delay;
+	u32 freepages_count;
+	u32 thrashing_count;
+	u32 compact_count;
+	u32 wpcopy_count;
+	u32 irq_count;
+};
+
+typedef void (*kunit_try_catch_func_t)(void *);
+
+struct kunit_try_catch {
+	struct kunit *test;
+	struct completion *try_completion;
+	int try_result;
+	kunit_try_catch_func_t try;
+	kunit_try_catch_func_t catch;
+	void *context;
+};
+
+enum kunit_status {
+	KUNIT_SUCCESS = 0,
+	KUNIT_FAILURE = 1,
+	KUNIT_SKIPPED = 2,
+};
+
+struct kunit {
+	void *priv;
+	const char *name;
+	char *log;
+	struct kunit_try_catch try_catch;
+	const void *param_value;
+	int param_index;
+	spinlock_t lock;
+	enum kunit_status status;
+	struct list_head resources;
+	char status_comment[256];
+};
+
+struct arch_uprobe_task {};
+
+enum uprobe_task_state {
+	UTASK_RUNNING = 0,
+	UTASK_SSTEP = 1,
+	UTASK_SSTEP_ACK = 2,
+	UTASK_SSTEP_TRAPPED = 3,
+};
+
+struct uprobe;
+
+struct return_instance;
+
+struct uprobe_task {
+	enum uprobe_task_state state;
+	union {
+		struct {
+			struct arch_uprobe_task autask;
+			unsigned long vaddr;
+		};
+		struct {
+			struct callback_head dup_xol_work;
+			unsigned long dup_xol_addr;
+		};
+	};
+	struct uprobe *active_uprobe;
+	unsigned long xol_vaddr;
+	struct return_instance *return_instances;
+	unsigned int depth;
+};
+
+struct return_instance {
+	struct uprobe *uprobe;
+	unsigned long func;
+	unsigned long stack;
+	unsigned long orig_ret_vaddr;
+	bool chained;
+	struct return_instance *next;
+};
+
+struct vm_struct {
+	struct vm_struct *next;
+	void *addr;
+	unsigned long size;
+	unsigned long flags;
+	struct page **pages;
+	unsigned int page_order;
+	unsigned int nr_pages;
+	phys_addr_t phys_addr;
+	const void *caller;
+	u64 android_oem_data1;
+};
+
+typedef void *fl_owner_t;
+
+struct kiocb;
+
+struct iov_iter;
+
+struct dir_context;
+
+struct file_lock;
+
+struct io_uring_cmd;
+
+struct file_operations {
+	struct module *owner;
+	loff_t (*llseek)(struct file *, loff_t, int);
+	ssize_t (*read)(struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*write)(struct file *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*write_iter)(struct kiocb *, struct iov_iter *);
+	int (*iopoll)(struct kiocb *, struct io_comp_batch *, unsigned int);
+	int (*iterate_shared)(struct file *, struct dir_context *);
+	__poll_t (*poll)(struct file *, struct poll_table_struct *);
+	long (*unlocked_ioctl)(struct file *, unsigned int, unsigned long);
+	long (*compat_ioctl)(struct file *, unsigned int, unsigned long);
+	int (*mmap)(struct file *, struct vm_area_struct *);
+	unsigned long mmap_supported_flags;
+	int (*open)(struct inode *, struct file *);
+	int (*flush)(struct file *, fl_owner_t);
+	int (*release)(struct inode *, struct file *);
+	int (*fsync)(struct file *, loff_t, loff_t, int);
+	int (*fasync)(int, struct file *, int);
+	int (*lock)(struct file *, int, struct file_lock *);
+	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+	int (*check_flags)(int);
+	int (*flock)(struct file *, int, struct file_lock *);
+	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
+	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	void (*splice_eof)(struct file *);
+	int (*setlease)(struct file *, int, struct file_lock **, void **);
+	long (*fallocate)(struct file *, int, loff_t, loff_t);
+	void (*show_fdinfo)(struct seq_file *, struct file *);
+	ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int);
+	loff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int);
+	int (*fadvise)(struct file *, loff_t, loff_t, int);
+	int (*uring_cmd)(struct io_uring_cmd *, unsigned int);
+	int (*uring_cmd_iopoll)(struct io_uring_cmd *, struct io_comp_batch *, unsigned int);
+};
+
+struct wait_page_queue;
+
+struct kiocb {
+	struct file *ki_filp;
+	loff_t ki_pos;
+	void (*ki_complete)(struct kiocb *, long);
+	void *private;
+	int ki_flags;
+	u16 ki_ioprio;
+	union {
+		struct wait_page_queue *ki_waitq;
+		ssize_t (*dio_complete)(void *);
+	};
+};
+
+struct wait_queue_entry;
+
+typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
+
+struct wait_queue_entry {
+	unsigned int flags;
+	void *private;
+	wait_queue_func_t func;
+	struct list_head entry;
+};
+
+typedef struct wait_queue_entry wait_queue_entry_t;
+
+struct folio;
+
+struct wait_page_queue {
+	struct folio *folio;
+	int bit_nr;
+	wait_queue_entry_t wait;
+};
+
+typedef struct {
+	unsigned long val;
+} swp_entry_t;
+
+struct folio {
+	union {
+		struct {
+			unsigned long flags;
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+			};
+			struct address_space *mapping;
+			unsigned long index;
+			union {
+				void *private;
+				swp_entry_t swap;
+			};
+			atomic_t _mapcount;
+			atomic_t _refcount;
+			unsigned long memcg_data;
+		};
+		struct page page;
+	};
+	union {
+		struct {
+			unsigned long _flags_1;
+			unsigned long _head_1;
+			atomic_t _entire_mapcount;
+			atomic_t _nr_pages_mapped;
+			atomic_t _pincount;
+			unsigned int __padding;
+			unsigned int _folio_nr_pages;
+			union {
+				unsigned long _private_1;
+				unsigned long *_dst_ul;
+				struct page **_dst_pp;
+			};
+		};
+		struct page __page_1;
+	};
+	union {
+		struct {
+			unsigned long _flags_2;
+			unsigned long _head_2;
+			void *_hugetlb_subpool;
+			void *_hugetlb_cgroup;
+			void *_hugetlb_cgroup_rsvd;
+			void *_hugetlb_hwpoison;
+		};
+		struct {
+			unsigned long _flags_2a;
+			unsigned long _head_2a;
+			struct list_head _deferred_list;
+		};
+		struct page __page_2;
+	};
+};
+
+struct iovec {
+	void __attribute__((btf_type_tag("user"))) *iov_base;
+	__kernel_size_t iov_len;
+};
+
+struct kvec;
+
+struct iov_iter {
+	u8 iter_type;
+	bool copy_mc;
+	bool nofault;
+	bool data_source;
+	bool user_backed;
+	union {
+		size_t iov_offset;
+		int last_offset;
+	};
+	union {
+		struct iovec __ubuf_iovec;
+		struct {
+			union {
+				const struct iovec *__iov;
+				const struct kvec *kvec;
+				const struct bio_vec *bvec;
+				struct xarray *xarray;
+				void __attribute__((btf_type_tag("user"))) *ubuf;
+			};
+			size_t count;
+		};
+	};
+	union {
+		unsigned long nr_segs;
+		loff_t xarray_start;
+	};
+};
+
+struct kvec {
+	void *iov_base;
+	size_t iov_len;
+};
+
+typedef bool (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, unsigned int);
+
+struct dir_context {
+	filldir_t actor;
+	loff_t pos;
+};
+
+struct fc_log {
+	refcount_t usage;
+	u8 head;
+	u8 tail;
+	u8 need_free;
+	struct module *owner;
+	char *buffer[8];
+};
+
+struct fs_parse_result;
+
+typedef int fs_param_type(struct p_log *, const struct fs_parameter_spec *, struct fs_parameter *, struct fs_parse_result *);
+
+struct fs_parameter_spec {
+	const char *name;
+	fs_param_type *type;
+	u8 opt;
+	unsigned short flags;
+	const void *data;
+};
+
+struct fs_parse_result {
+	bool negated;
+	union {
+		bool boolean;
+		int int_32;
+		unsigned int uint_32;
+		u64 uint_64;
+	};
+};
+
+enum freeze_holder {
+	FREEZE_HOLDER_KERNEL = 1,
+	FREEZE_HOLDER_USERSPACE = 2,
+};
+
+struct writeback_control;
+
+struct kstatfs;
+
+struct dquot;
+
+struct super_operations {
+	struct inode * (*alloc_inode)(struct super_block *);
+	void (*destroy_inode)(struct inode *);
+	void (*free_inode)(struct inode *);
+	void (*dirty_inode)(struct inode *, int);
+	int (*write_inode)(struct inode *, struct writeback_control *);
+	int (*drop_inode)(struct inode *);
+	void (*evict_inode)(struct inode *);
+	void (*put_super)(struct super_block *);
+	int (*sync_fs)(struct super_block *, int);
+	int (*freeze_super)(struct super_block *, enum freeze_holder);
+	int (*freeze_fs)(struct super_block *);
+	int (*thaw_super)(struct super_block *, enum freeze_holder);
+	int (*unfreeze_fs)(struct super_block *);
+	int (*statfs)(struct dentry *, struct kstatfs *);
+	int (*remount_fs)(struct super_block *, int *, char *);
+	void (*umount_begin)(struct super_block *);
+	int (*show_options)(struct seq_file *, struct dentry *);
+	int (*show_devname)(struct seq_file *, struct dentry *);
+	int (*show_path)(struct seq_file *, struct dentry *);
+	int (*show_stats)(struct seq_file *, struct dentry *);
+	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
+	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
+	struct dquot __attribute__((btf_type_tag("rcu"))) ** (*get_dquots)(struct inode *);
+	long (*nr_cached_objects)(struct super_block *, struct shrink_control *);
+	long (*free_cached_objects)(struct super_block *, struct shrink_control *);
+	void (*shutdown)(struct super_block *);
+};
+
+enum writeback_sync_modes {
+	WB_SYNC_NONE = 0,
+	WB_SYNC_ALL = 1,
+};
+
+struct swap_iocb;
+
+struct writeback_control {
+	long nr_to_write;
+	long pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	enum writeback_sync_modes sync_mode;
+	unsigned int for_kupdate: 1;
+	unsigned int for_background: 1;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_reclaim: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_sync: 1;
+	unsigned int unpinned_fscache_wb: 1;
+	unsigned int no_cgroup_owner: 1;
+	struct swap_iocb **swap_plug;
+	struct bdi_writeback *wb;
+	struct inode *inode;
+	int wb_id;
+	int wb_lcand_id;
+	int wb_tcand_id;
+	size_t wb_bytes;
+	size_t wb_lcand_bytes;
+	size_t wb_tcand_bytes;
+};
+
+typedef __kernel_uid32_t projid_t;
+
+typedef struct {
+	projid_t val;
+} kprojid_t;
+
+enum quota_type {
+	USRQUOTA = 0,
+	GRPQUOTA = 1,
+	PRJQUOTA = 2,
+};
+
+struct kqid {
+	union {
+		kuid_t uid;
+		kgid_t gid;
+		kprojid_t projid;
+	};
+	enum quota_type type;
+};
+
+struct mem_dqblk {
+	qsize_t dqb_bhardlimit;
+	qsize_t dqb_bsoftlimit;
+	qsize_t dqb_curspace;
+	qsize_t dqb_rsvspace;
+	qsize_t dqb_ihardlimit;
+	qsize_t dqb_isoftlimit;
+	qsize_t dqb_curinodes;
+	time64_t dqb_btime;
+	time64_t dqb_itime;
+};
+
+struct dquot {
+	struct hlist_node dq_hash;
+	struct list_head dq_inuse;
+	struct list_head dq_free;
+	struct list_head dq_dirty;
+	struct mutex dq_lock;
+	spinlock_t dq_dqb_lock;
+	atomic_t dq_count;
+	struct super_block *dq_sb;
+	struct kqid dq_id;
+	loff_t dq_off;
+	unsigned long dq_flags;
+	struct mem_dqblk dq_dqb;
+};
+
+struct shrink_control {
+	gfp_t gfp_mask;
+	int nid;
+	unsigned long nr_to_scan;
+	unsigned long nr_scanned;
+	struct mem_cgroup *memcg;
+};
+
+struct dquot_operations {
+	int (*write_dquot)(struct dquot *);
+	struct dquot * (*alloc_dquot)(struct super_block *, int);
+	void (*destroy_dquot)(struct dquot *);
+	int (*acquire_dquot)(struct dquot *);
+	int (*release_dquot)(struct dquot *);
+	int (*mark_dirty)(struct dquot *);
+	int (*write_info)(struct super_block *, int);
+	qsize_t * (*get_reserved_space)(struct inode *);
+	int (*get_projid)(struct inode *, kprojid_t *);
+	int (*get_inode_usage)(struct inode *, qsize_t *);
+	int (*get_next_id)(struct super_block *, struct kqid *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct qc_info;
+
+struct qc_dqblk;
+
+struct qc_state;
+
+struct quotactl_ops {
+	int (*quota_on)(struct super_block *, int, int, const struct path *);
+	int (*quota_off)(struct super_block *, int);
+	int (*quota_enable)(struct super_block *, unsigned int);
+	int (*quota_disable)(struct super_block *, unsigned int);
+	int (*quota_sync)(struct super_block *, int);
+	int (*set_info)(struct super_block *, int, struct qc_info *);
+	int (*get_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
+	int (*get_nextdqblk)(struct super_block *, struct kqid *, struct qc_dqblk *);
+	int (*set_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
+	int (*get_state)(struct super_block *, struct qc_state *);
+	int (*rm_xquota)(struct super_block *, unsigned int);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct qc_info {
+	int i_fieldmask;
+	unsigned int i_flags;
+	unsigned int i_spc_timelimit;
+	unsigned int i_ino_timelimit;
+	unsigned int i_rt_spc_timelimit;
+	unsigned int i_spc_warnlimit;
+	unsigned int i_ino_warnlimit;
+	unsigned int i_rt_spc_warnlimit;
+};
+
+struct qc_dqblk {
+	int d_fieldmask;
+	u64 d_spc_hardlimit;
+	u64 d_spc_softlimit;
+	u64 d_ino_hardlimit;
+	u64 d_ino_softlimit;
+	u64 d_space;
+	u64 d_ino_count;
+	s64 d_ino_timer;
+	s64 d_spc_timer;
+	int d_ino_warns;
+	int d_spc_warns;
+	u64 d_rt_spc_hardlimit;
+	u64 d_rt_spc_softlimit;
+	u64 d_rt_space;
+	s64 d_rt_spc_timer;
+	int d_rt_spc_warns;
+};
+
+struct qc_type_state {
+	unsigned int flags;
+	unsigned int spc_timelimit;
+	unsigned int ino_timelimit;
+	unsigned int rt_spc_timelimit;
+	unsigned int spc_warnlimit;
+	unsigned int ino_warnlimit;
+	unsigned int rt_spc_warnlimit;
+	unsigned long long ino;
+	blkcnt_t blocks;
+	blkcnt_t nextents;
+};
+
+struct qc_state {
+	unsigned int s_incoredqs;
+	struct qc_type_state s_state[3];
+};
+
+struct fid;
+
+struct iomap;
+
+struct export_operations {
+	int (*encode_fh)(struct inode *, __u32 *, int *, struct inode *);
+	struct dentry * (*fh_to_dentry)(struct super_block *, struct fid *, int, int);
+	struct dentry * (*fh_to_parent)(struct super_block *, struct fid *, int, int);
+	int (*get_name)(struct dentry *, char *, struct dentry *);
+	struct dentry * (*get_parent)(struct dentry *);
+	int (*commit_metadata)(struct inode *);
+	int (*get_uuid)(struct super_block *, u8 *, u32 *, u64 *);
+	int (*map_blocks)(struct inode *, loff_t, u64, struct iomap *, bool, u32 *);
+	int (*commit_blocks)(struct inode *, struct iomap *, int, struct iattr *);
+	unsigned long flags;
+};
+
+struct xattr_handler {
+	const char *name;
+	const char *prefix;
+	int flags;
+	bool (*list)(struct dentry *);
+	int (*get)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, void *, size_t);
+	int (*set)(const struct xattr_handler *, struct mnt_idmap *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
+};
+
+union fscrypt_policy;
+
+struct fscrypt_operations {
+	unsigned int needs_bounce_pages: 1;
+	unsigned int has_32bit_inodes: 1;
+	unsigned int supports_subblock_data_units: 1;
+	const char *legacy_key_prefix;
+	int (*get_context)(struct inode *, void *, size_t);
+	int (*set_context)(struct inode *, const void *, size_t, void *);
+	const union fscrypt_policy * (*get_dummy_policy)(struct super_block *);
+	bool (*empty_dir)(struct inode *);
+	bool (*has_stable_inodes)(struct super_block *);
+	struct block_device ** (*get_devices)(struct super_block *, unsigned int *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_oem_data1[4];
+};
+
+struct fsverity_operations {
+	int (*begin_enable_verity)(struct file *);
+	int (*end_enable_verity)(struct file *, const void *, size_t, u64);
+	int (*get_verity_descriptor)(struct inode *, void *, size_t);
+	struct page * (*read_merkle_tree_page)(struct inode *, unsigned long, unsigned long);
+	int (*write_merkle_tree_block)(struct inode *, const void *, u64, unsigned int);
+};
+
+struct quota_format_type {
+	int qf_fmt_id;
+	const struct quota_format_ops *qf_ops;
+	struct module *qf_owner;
+	struct quota_format_type *qf_next;
+};
+
+struct quota_format_ops {
+	int (*check_quota_file)(struct super_block *, int);
+	int (*read_file_info)(struct super_block *, int);
+	int (*write_file_info)(struct super_block *, int);
+	int (*free_file_info)(struct super_block *, int);
+	int (*read_dqblk)(struct dquot *);
+	int (*commit_dqblk)(struct dquot *);
+	int (*release_dqblk)(struct dquot *);
+	int (*get_next_id)(struct super_block *, struct kqid *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef struct {
+	int val[2];
+} __kernel_fsid_t;
+
+typedef struct fsnotify_mark_connector __attribute__((btf_type_tag("rcu"))) *fsnotify_connp_t;
+
+struct fsnotify_mark_connector {
+	spinlock_t lock;
+	unsigned short type;
+	unsigned short flags;
+	__kernel_fsid_t fsid;
+	union {
+		fsnotify_connp_t *obj;
+		struct fsnotify_mark_connector *destroy_next;
+	};
+	struct hlist_head list;
+};
+
+struct list_lru_one {
+	struct list_head list;
+	long nr_items;
+};
+
+struct list_lru_node {
+	spinlock_t lock;
+	struct list_lru_one lru;
+	long nr_items;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct delayed_call {
+	void (*fn)(void *);
+	void *arg;
+};
+
+typedef struct {
+	uid_t val;
+} vfsuid_t;
+
+typedef struct {
+	gid_t val;
+} vfsgid_t;
+
+struct iattr {
+	unsigned int ia_valid;
+	umode_t ia_mode;
+	union {
+		kuid_t ia_uid;
+		vfsuid_t ia_vfsuid;
+	};
+	union {
+		kgid_t ia_gid;
+		vfsgid_t ia_vfsgid;
+	};
+	loff_t ia_size;
+	struct timespec64 ia_atime;
+	struct timespec64 ia_mtime;
+	struct timespec64 ia_ctime;
+	struct file *ia_file;
+};
+
+struct kstat {
+	u32 result_mask;
+	umode_t mode;
+	unsigned int nlink;
+	uint32_t blksize;
+	u64 attributes;
+	u64 attributes_mask;
+	u64 ino;
+	dev_t dev;
+	dev_t rdev;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	struct timespec64 btime;
+	u64 blocks;
+	u64 mnt_id;
+	u32 dio_mem_align;
+	u32 dio_offset_align;
+	u64 change_cookie;
+};
+
+struct offset_ctx {
+	struct xarray xa;
+	u32 next_offset;
+};
+
+struct cdev {
+	struct kobject kobj;
+	struct module *owner;
+	const struct file_operations *ops;
+	struct list_head list;
+	dev_t dev;
+	unsigned int count;
+};
+
+enum migrate_mode {
+	MIGRATE_ASYNC = 0,
+	MIGRATE_SYNC_LIGHT = 1,
+	MIGRATE_SYNC = 2,
+	MIGRATE_SYNC_NO_COPY = 3,
+};
+
+struct readahead_control;
+
+struct swap_info_struct;
+
+struct address_space_operations {
+	int (*writepage)(struct page *, struct writeback_control *);
+	int (*read_folio)(struct file *, struct folio *);
+	int (*writepages)(struct address_space *, struct writeback_control *);
+	bool (*dirty_folio)(struct address_space *, struct folio *);
+	void (*readahead)(struct readahead_control *);
+	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, struct page **, void **);
+	int (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page *, void *);
+	sector_t (*bmap)(struct address_space *, sector_t);
+	void (*invalidate_folio)(struct folio *, size_t, size_t);
+	bool (*release_folio)(struct folio *, gfp_t);
+	void (*free_folio)(struct folio *);
+	ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *);
+	int (*migrate_folio)(struct address_space *, struct folio *, struct folio *, enum migrate_mode);
+	int (*launder_folio)(struct folio *);
+	bool (*is_partially_uptodate)(struct folio *, size_t, size_t);
+	void (*is_dirty_writeback)(struct folio *, bool *, bool *);
+	int (*error_remove_page)(struct address_space *, struct page *);
+	int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);
+	void (*swap_deactivate)(struct file *);
+	int (*swap_rw)(struct kiocb *, struct iov_iter *);
+};
+
+struct readahead_control {
+	struct file *file;
+	struct address_space *mapping;
+	struct file_ra_state *ra;
+	unsigned long _index;
+	unsigned int _nr_pages;
+	unsigned int _batch_count;
+	bool _workingset;
+	unsigned long _pflags;
+	u64 android_oem_data1;
+};
+
+struct swap_cluster_info;
+
+struct percpu_cluster;
+
+struct swap_info_struct {
+	struct percpu_ref users;
+	unsigned long flags;
+	short prio;
+	struct plist_node list;
+	signed char type;
+	unsigned int max;
+	unsigned char *swap_map;
+	struct swap_cluster_info *cluster_info;
+	struct list_head free_clusters;
+	struct list_head nonfull_clusters[10];
+	unsigned int lowest_bit;
+	unsigned int highest_bit;
+	unsigned int pages;
+	unsigned int inuse_pages;
+	unsigned int cluster_next;
+	unsigned int cluster_nr;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *cluster_next_cpu;
+	struct percpu_cluster __attribute__((btf_type_tag("percpu"))) *percpu_cluster;
+	struct rb_root swap_extent_root;
+	struct block_device *bdev;
+	struct file *swap_file;
+	unsigned int old_block_size;
+	struct completion comp;
+	spinlock_t lock;
+	spinlock_t cont_lock;
+	struct work_struct discard_work;
+	struct list_head discard_clusters;
+	struct plist_node avail_lists[0];
+};
+
+struct swap_cluster_info {
+	spinlock_t lock;
+	unsigned int count: 12;
+	unsigned int state: 3;
+	unsigned int order: 4;
+	unsigned int reserved: 1;
+	unsigned int flags: 4;
+	struct list_head list;
+};
+
+struct percpu_cluster {
+	unsigned int next[10];
+};
+
+struct module_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *);
+	ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t);
+	void (*setup)(struct module *, const char *);
+	int (*test)(struct module *);
+	void (*free)(struct module *);
+};
+
+struct kernel_symbol {
+	int value_offset;
+	int name_offset;
+	int namespace_offset;
+};
+
+struct kernel_param_ops;
+
+struct kparam_string;
+
+struct kparam_array;
+
+struct kernel_param {
+	const char *name;
+	struct module *mod;
+	const struct kernel_param_ops *ops;
+	const u16 perm;
+	s8 level;
+	u8 flags;
+	union {
+		void *arg;
+		const struct kparam_string *str;
+		const struct kparam_array *arr;
+	};
+};
+
+struct kernel_param_ops {
+	unsigned int flags;
+	int (*set)(const char *, const struct kernel_param *);
+	int (*get)(char *, const struct kernel_param *);
+	void (*free)(void *);
+};
+
+struct kparam_string {
+	unsigned int maxlen;
+	char *string;
+};
+
+struct kparam_array {
+	unsigned int max;
+	unsigned int elemsize;
+	unsigned int *num;
+	const struct kernel_param_ops *ops;
+	void *elem;
+};
+
+struct exception_table_entry {
+	int insn;
+	int fixup;
+	short type;
+	short data;
+};
+
+typedef __u32 __le32;
+
+struct plt_entry {
+	__le32 adrp;
+	__le32 add;
+	__le32 br;
+};
+
+enum kvm_pgtable_prot {
+	KVM_PGTABLE_PROT_X = 1ULL,
+	KVM_PGTABLE_PROT_W = 2ULL,
+	KVM_PGTABLE_PROT_R = 4ULL,
+	KVM_PGTABLE_PROT_DEVICE = 8ULL,
+	KVM_PGTABLE_PROT_NC = 16ULL,
+	KVM_PGTABLE_PROT_PXN = 32ULL,
+	KVM_PGTABLE_PROT_UXN = 64ULL,
+	KVM_PGTABLE_PROT_SW0 = 36028797018963968ULL,
+	KVM_PGTABLE_PROT_SW1 = 72057594037927936ULL,
+	KVM_PGTABLE_PROT_SW2 = 144115188075855872ULL,
+	KVM_PGTABLE_PROT_SW3 = 288230376151711744ULL,
+};
+
+typedef u64 kvm_pte_t;
+
+enum pkvm_psci_notification {
+	PKVM_PSCI_CPU_SUSPEND = 0,
+	PKVM_PSCI_SYSTEM_SUSPEND = 1,
+	PKVM_PSCI_CPU_ENTRY = 2,
+};
+
+struct user_pt_regs;
+
+struct kvm_hyp_req;
+
+struct kvm_hyp_iommu;
+
+struct kvm_hyp_iommu_domain;
+
+struct iommu_iotlb_gather;
+
+struct kvm_iommu_paddr_cache;
+
+struct pkvm_module_ops {
+	int (*create_private_mapping)(phys_addr_t, size_t, enum kvm_pgtable_prot, unsigned long *);
+	void * (*alloc_module_va)(u64);
+	int (*map_module_page)(u64, void *, enum kvm_pgtable_prot, bool);
+	int (*register_serial_driver)(void (*)(char));
+	void (*putc)(char);
+	void (*puts)(const char *);
+	void (*putx64)(u64);
+	void * (*fixmap_map)(phys_addr_t);
+	void (*fixmap_unmap)();
+	void * (*linear_map_early)(phys_addr_t, size_t, enum kvm_pgtable_prot);
+	void (*linear_unmap_early)(void *, size_t);
+	void (*flush_dcache_to_poc)(void *, size_t);
+	void (*update_hcr_el2)(unsigned long, unsigned long);
+	void (*update_hfgwtr_el2)(unsigned long, unsigned long);
+	int (*register_host_perm_fault_handler)(int (*)(struct user_pt_regs *, u64, u64));
+	int (*host_stage2_mod_prot)(u64, enum kvm_pgtable_prot, u64, bool);
+	int (*host_stage2_get_leaf)(phys_addr_t, kvm_pte_t *, u32 *);
+	int (*register_host_smc_handler)(bool (*)(struct user_pt_regs *));
+	int (*register_default_trap_handler)(bool (*)(struct user_pt_regs *));
+	int (*register_illegal_abt_notifier)(void (*)(struct user_pt_regs *));
+	int (*register_psci_notifier)(void (*)(enum pkvm_psci_notification, struct user_pt_regs *));
+	int (*register_hyp_panic_notifier)(void (*)(struct user_pt_regs *));
+	int (*register_unmask_serror)(bool (*)(), void (*)());
+	int (*host_donate_hyp)(u64, u64, bool);
+	int (*host_donate_hyp_prot)(u64, u64, bool, enum kvm_pgtable_prot);
+	int (*hyp_donate_host)(u64, u64);
+	int (*host_share_hyp)(u64);
+	int (*host_unshare_hyp)(u64);
+	int (*pin_shared_mem)(void *, void *);
+	void (*unpin_shared_mem)(void *, void *);
+	void * (*memcpy)(void *, const void *, size_t);
+	void * (*memset)(void *, int, size_t);
+	phys_addr_t (*hyp_pa)(void *);
+	void * (*hyp_va)(phys_addr_t);
+	unsigned long (*kern_hyp_va)(unsigned long);
+	void * (*hyp_alloc)(size_t);
+	int (*hyp_alloc_errno)();
+	void (*hyp_free)(void *);
+	void * (*iommu_donate_pages)(u8, bool);
+	void (*iommu_reclaim_pages)(void *, u8);
+	int (*iommu_request)(struct kvm_hyp_req *);
+	int (*iommu_init_device)(struct kvm_hyp_iommu *);
+	void (*udelay)(unsigned long);
+	u8 (*hyp_alloc_missing_donations)();
+	bool (*list_add_valid_or_report)(struct list_head *, struct list_head *, struct list_head *);
+	bool (*list_del_entry_valid_or_report)(struct list_head *);
+	void (*iommu_iotlb_gather_add_page)(struct kvm_hyp_iommu_domain *, struct iommu_iotlb_gather *, unsigned long, size_t);
+	int (*register_hyp_event_ids)(unsigned long, unsigned long);
+	void * (*tracing_reserve_entry)(unsigned long);
+	void (*tracing_commit_entry)();
+	void * (*iommu_donate_pages_atomic)(u8);
+	void (*iommu_reclaim_pages_atomic)(void *, u8);
+	int (*iommu_snapshot_host_stage2)(struct kvm_hyp_iommu_domain *);
+	int (*hyp_smp_processor_id)();
+	union {
+		void (*iommu_flush_unmap_cache)(struct kvm_iommu_paddr_cache *);
+		struct {
+			u64 android_kabi_reserved1;
+		};
+		union {};
+	};
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+	u64 android_kabi_reserved9;
+	u64 android_kabi_reserved10;
+	u64 android_kabi_reserved11;
+	u64 android_kabi_reserved12;
+	u64 android_kabi_reserved13;
+	u64 android_kabi_reserved14;
+	u64 android_kabi_reserved15;
+	u64 android_kabi_reserved16;
+	u64 android_kabi_reserved17;
+	u64 android_kabi_reserved18;
+	u64 android_kabi_reserved19;
+	u64 android_kabi_reserved20;
+	u64 android_kabi_reserved21;
+	u64 android_kabi_reserved22;
+	u64 android_kabi_reserved23;
+	u64 android_kabi_reserved24;
+	u64 android_kabi_reserved25;
+	u64 android_kabi_reserved26;
+	u64 android_kabi_reserved27;
+	u64 android_kabi_reserved28;
+	u64 android_kabi_reserved29;
+	u64 android_kabi_reserved30;
+	u64 android_kabi_reserved31;
+	u64 android_kabi_reserved32;
+};
+
+struct bug_entry {
+	int bug_addr_disp;
+	int file_disp;
+	unsigned short line;
+	unsigned short flags;
+};
+
+typedef __u32 Elf64_Word;
+
+typedef __u16 Elf64_Half;
+
+typedef __u64 Elf64_Addr;
+
+typedef __u64 Elf64_Xword;
+
+struct elf64_sym {
+	Elf64_Word st_name;
+	unsigned char st_info;
+	unsigned char st_other;
+	Elf64_Half st_shndx;
+	Elf64_Addr st_value;
+	Elf64_Xword st_size;
+};
+
+struct srcu_data;
+
+struct srcu_usage;
+
+struct srcu_struct {
+	unsigned int srcu_idx;
+	struct srcu_data __attribute__((btf_type_tag("percpu"))) *sda;
+	struct lockdep_map dep_map;
+	struct srcu_usage *srcu_sup;
+};
+
+struct rcu_segcblist {
+	struct callback_head *head;
+	struct callback_head **tails[4];
+	unsigned long gp_seq[4];
+	atomic_long_t len;
+	long seglen[4];
+	u8 flags;
+};
+
+struct srcu_node;
+
+struct srcu_data {
+	atomic_long_t srcu_lock_count[2];
+	atomic_long_t srcu_unlock_count[2];
+	int srcu_nmi_safety;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t lock;
+	struct rcu_segcblist srcu_cblist;
+	unsigned long srcu_gp_seq_needed;
+	unsigned long srcu_gp_seq_needed_exp;
+	bool srcu_cblist_invoking;
+	struct timer_list delay_work;
+	struct work_struct work;
+	struct callback_head srcu_barrier_head;
+	struct srcu_node *mynode;
+	unsigned long grpmask;
+	int cpu;
+	struct srcu_struct *ssp;
+	long: 64;
+	long: 64;
+};
+
+struct srcu_node {
+	spinlock_t lock;
+	unsigned long srcu_have_cbs[4];
+	unsigned long srcu_data_have_cbs[4];
+	unsigned long srcu_gp_seq_needed_exp;
+	struct srcu_node *srcu_parent;
+	int grplo;
+	int grphi;
+};
+
+struct srcu_usage {
+	struct srcu_node *node;
+	struct srcu_node *level[3];
+	int srcu_size_state;
+	struct mutex srcu_cb_mutex;
+	spinlock_t lock;
+	struct mutex srcu_gp_mutex;
+	unsigned long srcu_gp_seq;
+	unsigned long srcu_gp_seq_needed;
+	unsigned long srcu_gp_seq_needed_exp;
+	unsigned long srcu_gp_start;
+	unsigned long srcu_last_gp_end;
+	unsigned long srcu_size_jiffies;
+	unsigned long srcu_n_lock_retries;
+	unsigned long srcu_n_exp_nodelay;
+	bool sda_is_static;
+	unsigned long srcu_barrier_seq;
+	struct mutex srcu_barrier_mutex;
+	struct completion srcu_barrier_completion;
+	atomic_t srcu_barrier_cpu_cnt;
+	unsigned long reschedule_jiffies;
+	unsigned long reschedule_count;
+	struct delayed_work work;
+	struct srcu_struct *srcu_ssp;
+};
+
+struct bpf_raw_event_map {
+	struct tracepoint *tp;
+	void *bpf_func;
+	u32 num_args;
+	u32 writable_size;
+	long: 64;
+};
+
+struct trace_eval_map {
+	const char *system;
+	const char *eval_string;
+	unsigned long eval_value;
+};
+
+enum kunit_speed {
+	KUNIT_SPEED_UNSET = 0,
+	KUNIT_SPEED_VERY_SLOW = 1,
+	KUNIT_SPEED_SLOW = 2,
+	KUNIT_SPEED_NORMAL = 3,
+	KUNIT_SPEED_MAX = 3,
+};
+
+struct kunit_attributes {
+	enum kunit_speed speed;
+};
+
+struct kunit_case;
+
+struct kunit_suite {
+	const char name[256];
+	int (*suite_init)(struct kunit_suite *);
+	void (*suite_exit)(struct kunit_suite *);
+	int (*init)(struct kunit *);
+	void (*exit)(struct kunit *);
+	struct kunit_case *test_cases;
+	struct kunit_attributes attr;
+	char status_comment[256];
+	struct dentry *debugfs;
+	char *log;
+	int suite_init_err;
+};
+
+struct kunit_case {
+	void (*run_case)(struct kunit *);
+	const char *name;
+	const void * (*generate_params)(const void *, char *);
+	struct kunit_attributes attr;
+	enum kunit_status status;
+	char *module_name;
+	char *log;
+};
+
+struct static_key_true {
+	struct static_key key;
+};
+
+struct static_key_false {
+	struct static_key key;
+};
+
+struct _ddebug {
+	const char *modname;
+	const char *function;
+	const char *filename;
+	const char *format;
+	unsigned int lineno: 18;
+	unsigned int class_id: 6;
+	unsigned int flags: 8;
+	union {
+		struct static_key_true dd_key_true;
+		struct static_key_false dd_key_false;
+	} key;
+};
+
+enum class_map_type {
+	DD_CLASS_TYPE_DISJOINT_BITS = 0,
+	DD_CLASS_TYPE_LEVEL_NUM = 1,
+	DD_CLASS_TYPE_DISJOINT_NAMES = 2,
+	DD_CLASS_TYPE_LEVEL_NAMES = 3,
+};
+
+struct ddebug_class_map {
+	struct list_head link;
+	struct module *mod;
+	const char *mod_name;
+	const char **class_names;
+	const int length;
+	const int base;
+	enum class_map_type map_type;
+};
+
+struct perf_event_pmu_context {
+	struct pmu *pmu;
+	struct perf_event_context *ctx;
+	struct list_head pmu_ctx_entry;
+	struct list_head pinned_active;
+	struct list_head flexible_active;
+	unsigned int embedded: 1;
+	unsigned int nr_events;
+	unsigned int nr_cgroups;
+	atomic_t refcount;
+	struct callback_head callback_head;
+	void *task_ctx_data;
+	int rotate_necessary;
+};
+
+struct perf_cpu_pmu_context {
+	struct perf_event_pmu_context epc;
+	struct perf_event_pmu_context *task_epc;
+	struct list_head sched_cb_entry;
+	int sched_cb_usage;
+	int active_oncpu;
+	int exclusive;
+	raw_spinlock_t hrtimer_lock;
+	struct hrtimer hrtimer;
+	ktime_t hrtimer_interval;
+	unsigned int hrtimer_active;
+};
+
+struct perf_output_handle {
+	struct perf_event *event;
+	struct perf_buffer *rb;
+	unsigned long wakeup;
+	unsigned long size;
+	u64 aux_flags;
+	union {
+		void *addr;
+		unsigned long head;
+	};
+	int page;
+};
+
+struct fasync_struct {
+	rwlock_t fa_lock;
+	int magic;
+	int fa_fd;
+	struct fasync_struct *fa_next;
+	struct file *fa_file;
+	struct callback_head fa_rcu;
+};
+
+struct perf_addr_filter_range {
+	unsigned long start;
+	unsigned long size;
+};
+
+union perf_sample_weight {
+	__u64 full;
+	struct {
+		__u32 var1_dw;
+		__u16 var2_w;
+		__u16 var3_w;
+	};
+};
+
+union perf_mem_data_src {
+	__u64 val;
+	struct {
+		__u64 mem_op: 5;
+		__u64 mem_lvl: 14;
+		__u64 mem_snoop: 5;
+		__u64 mem_lock: 2;
+		__u64 mem_dtlb: 7;
+		__u64 mem_lvl_num: 4;
+		__u64 mem_remote: 1;
+		__u64 mem_snoopx: 2;
+		__u64 mem_blk: 3;
+		__u64 mem_hops: 3;
+		__u64 mem_rsvd: 18;
+	};
+};
+
+struct perf_regs {
+	__u64 abi;
+	struct pt_regs *regs;
+};
+
+struct perf_callchain_entry;
+
+struct perf_raw_record;
+
+struct perf_branch_stack;
+
+struct perf_sample_data {
+	u64 sample_flags;
+	u64 period;
+	u64 dyn_size;
+	u64 type;
+	struct {
+		u32 pid;
+		u32 tid;
+	} tid_entry;
+	u64 time;
+	u64 id;
+	struct {
+		u32 cpu;
+		u32 reserved;
+	} cpu_entry;
+	u64 ip;
+	struct perf_callchain_entry *callchain;
+	struct perf_raw_record *raw;
+	struct perf_branch_stack *br_stack;
+	union perf_sample_weight weight;
+	union perf_mem_data_src data_src;
+	u64 txn;
+	struct perf_regs regs_user;
+	struct perf_regs regs_intr;
+	u64 stack_user_size;
+	u64 stream_id;
+	u64 cgroup;
+	u64 addr;
+	u64 phys_addr;
+	u64 data_page_size;
+	u64 code_page_size;
+	u64 aux_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct perf_callchain_entry {
+	__u64 nr;
+	__u64 ip[0];
+};
+
+typedef unsigned long (*perf_copy_f)(void *, const void *, unsigned long, unsigned long);
+
+struct perf_raw_frag {
+	union {
+		struct perf_raw_frag *next;
+		unsigned long pad;
+	};
+	perf_copy_f copy;
+	void *data;
+	u32 size;
+} __attribute__((packed));
+
+struct perf_raw_record {
+	struct perf_raw_frag frag;
+	u32 size;
+};
+
+struct perf_branch_entry {
+	__u64 from;
+	__u64 to;
+	__u64 mispred: 1;
+	__u64 predicted: 1;
+	__u64 in_tx: 1;
+	__u64 abort: 1;
+	__u64 cycles: 16;
+	__u64 type: 4;
+	__u64 spec: 2;
+	__u64 new_type: 4;
+	__u64 priv: 3;
+	__u64 reserved: 31;
+};
+
+struct perf_branch_stack {
+	__u64 nr;
+	__u64 hw_idx;
+	struct perf_branch_entry entries[0];
+};
+
+struct user_pt_regs {
+	__u64 regs[31];
+	__u64 sp;
+	__u64 pc;
+	__u64 pstate;
+};
+
+struct pt_regs {
+	union {
+		struct user_pt_regs user_regs;
+		struct {
+			u64 regs[31];
+			u64 sp;
+			u64 pc;
+			u64 pstate;
+		};
+	};
+	u64 orig_x0;
+	s32 syscallno;
+	u32 unused2;
+	u64 sdei_ttbr1;
+	u64 pmr_save;
+	u64 stackframe[2];
+	u64 lockdep_hardirqs;
+	u64 exit_rcu;
+};
+
+struct trace_event_fields {
+	const char *type;
+	union {
+		struct {
+			const char *name;
+			const int size;
+			const int align;
+			const int is_signed;
+			const int filter_type;
+			const int len;
+		};
+		int (*define_fields)(struct trace_event_call *);
+	};
+};
+
+typedef void (*btf_trace_initcall_level)(void *, const char *);
+
+typedef int (*initcall_t)();
+
+typedef void (*btf_trace_initcall_start)(void *, initcall_t);
+
+typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);
+
+struct obs_kernel_param {
+	const char *str;
+	int (*setup_func)(char *);
+	int early;
+};
+
+enum system_states {
+	SYSTEM_BOOTING = 0,
+	SYSTEM_SCHEDULING = 1,
+	SYSTEM_FREEING_INITMEM = 2,
+	SYSTEM_RUNNING = 3,
+	SYSTEM_HALT = 4,
+	SYSTEM_POWER_OFF = 5,
+	SYSTEM_RESTART = 6,
+	SYSTEM_SUSPEND = 7,
+};
+
+typedef int initcall_entry_t;
+
+enum cpuhp_state {
+	CPUHP_INVALID = -1,
+	CPUHP_OFFLINE = 0,
+	CPUHP_CREATE_THREADS = 1,
+	CPUHP_PERF_PREPARE = 2,
+	CPUHP_PERF_X86_PREPARE = 3,
+	CPUHP_PERF_X86_AMD_UNCORE_PREP = 4,
+	CPUHP_PERF_POWER = 5,
+	CPUHP_PERF_SUPERH = 6,
+	CPUHP_X86_HPET_DEAD = 7,
+	CPUHP_X86_APB_DEAD = 8,
+	CPUHP_X86_MCE_DEAD = 9,
+	CPUHP_VIRT_NET_DEAD = 10,
+	CPUHP_IBMVNIC_DEAD = 11,
+	CPUHP_SLUB_DEAD = 12,
+	CPUHP_DEBUG_OBJ_DEAD = 13,
+	CPUHP_MM_WRITEBACK_DEAD = 14,
+	CPUHP_MM_DEMOTION_DEAD = 15,
+	CPUHP_MM_VMSTAT_DEAD = 16,
+	CPUHP_SOFTIRQ_DEAD = 17,
+	CPUHP_NET_MVNETA_DEAD = 18,
+	CPUHP_CPUIDLE_DEAD = 19,
+	CPUHP_ARM64_FPSIMD_DEAD = 20,
+	CPUHP_ARM_OMAP_WAKE_DEAD = 21,
+	CPUHP_IRQ_POLL_DEAD = 22,
+	CPUHP_BLOCK_SOFTIRQ_DEAD = 23,
+	CPUHP_BIO_DEAD = 24,
+	CPUHP_ACPI_CPUDRV_DEAD = 25,
+	CPUHP_S390_PFAULT_DEAD = 26,
+	CPUHP_BLK_MQ_DEAD = 27,
+	CPUHP_FS_BUFF_DEAD = 28,
+	CPUHP_PRINTK_DEAD = 29,
+	CPUHP_MM_MEMCQ_DEAD = 30,
+	CPUHP_PERCPU_CNT_DEAD = 31,
+	CPUHP_RADIX_DEAD = 32,
+	CPUHP_PAGE_ALLOC = 33,
+	CPUHP_NET_DEV_DEAD = 34,
+	CPUHP_PCI_XGENE_DEAD = 35,
+	CPUHP_IOMMU_IOVA_DEAD = 36,
+	CPUHP_LUSTRE_CFS_DEAD = 37,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 38,
+	CPUHP_PADATA_DEAD = 39,
+	CPUHP_AP_DTPM_CPU_DEAD = 40,
+	CPUHP_RANDOM_PREPARE = 41,
+	CPUHP_WORKQUEUE_PREP = 42,
+	CPUHP_POWER_NUMA_PREPARE = 43,
+	CPUHP_HRTIMERS_PREPARE = 44,
+	CPUHP_PROFILE_PREPARE = 45,
+	CPUHP_X2APIC_PREPARE = 46,
+	CPUHP_SMPCFD_PREPARE = 47,
+	CPUHP_RELAY_PREPARE = 48,
+	CPUHP_SLAB_PREPARE = 49,
+	CPUHP_MD_RAID5_PREPARE = 50,
+	CPUHP_RCUTREE_PREP = 51,
+	CPUHP_CPUIDLE_COUPLED_PREPARE = 52,
+	CPUHP_POWERPC_PMAC_PREPARE = 53,
+	CPUHP_POWERPC_MMU_CTX_PREPARE = 54,
+	CPUHP_XEN_PREPARE = 55,
+	CPUHP_XEN_EVTCHN_PREPARE = 56,
+	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 57,
+	CPUHP_SH_SH3X_PREPARE = 58,
+	CPUHP_NET_FLOW_PREPARE = 59,
+	CPUHP_TOPOLOGY_PREPARE = 60,
+	CPUHP_NET_IUCV_PREPARE = 61,
+	CPUHP_ARM_BL_PREPARE = 62,
+	CPUHP_TRACE_RB_PREPARE = 63,
+	CPUHP_MM_ZS_PREPARE = 64,
+	CPUHP_MM_ZSWP_MEM_PREPARE = 65,
+	CPUHP_MM_ZSWP_POOL_PREPARE = 66,
+	CPUHP_KVM_PPC_BOOK3S_PREPARE = 67,
+	CPUHP_ZCOMP_PREPARE = 68,
+	CPUHP_TIMERS_PREPARE = 69,
+	CPUHP_MIPS_SOC_PREPARE = 70,
+	CPUHP_BP_PREPARE_DYN = 71,
+	CPUHP_BP_PREPARE_DYN_END = 91,
+	CPUHP_BP_KICK_AP = 92,
+	CPUHP_BRINGUP_CPU = 93,
+	CPUHP_AP_IDLE_DEAD = 94,
+	CPUHP_AP_OFFLINE = 95,
+	CPUHP_AP_CACHECTRL_STARTING = 96,
+	CPUHP_AP_SCHED_STARTING = 97,
+	CPUHP_AP_RCUTREE_DYING = 98,
+	CPUHP_AP_CPU_PM_STARTING = 99,
+	CPUHP_AP_IRQ_GIC_STARTING = 100,
+	CPUHP_AP_IRQ_HIP04_STARTING = 101,
+	CPUHP_AP_IRQ_APPLE_AIC_STARTING = 102,
+	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 103,
+	CPUHP_AP_IRQ_BCM2836_STARTING = 104,
+	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 105,
+	CPUHP_AP_IRQ_RISCV_STARTING = 106,
+	CPUHP_AP_IRQ_LOONGARCH_STARTING = 107,
+	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 108,
+	CPUHP_AP_ARM_MVEBU_COHERENCY = 109,
+	CPUHP_AP_MICROCODE_LOADER = 110,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 111,
+	CPUHP_AP_PERF_X86_STARTING = 112,
+	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 113,
+	CPUHP_AP_PERF_X86_CQM_STARTING = 114,
+	CPUHP_AP_PERF_X86_CSTATE_STARTING = 115,
+	CPUHP_AP_PERF_XTENSA_STARTING = 116,
+	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 117,
+	CPUHP_AP_ARM_VFP_STARTING = 118,
+	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 119,
+	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 120,
+	CPUHP_AP_PERF_ARM_ACPI_STARTING = 121,
+	CPUHP_AP_PERF_ARM_STARTING = 122,
+	CPUHP_AP_PERF_RISCV_STARTING = 123,
+	CPUHP_AP_ARM_L2X0_STARTING = 124,
+	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 125,
+	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 126,
+	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 127,
+	CPUHP_AP_JCORE_TIMER_STARTING = 128,
+	CPUHP_AP_ARM_TWD_STARTING = 129,
+	CPUHP_AP_QCOM_TIMER_STARTING = 130,
+	CPUHP_AP_TEGRA_TIMER_STARTING = 131,
+	CPUHP_AP_ARMADA_TIMER_STARTING = 132,
+	CPUHP_AP_MARCO_TIMER_STARTING = 133,
+	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 134,
+	CPUHP_AP_ARC_TIMER_STARTING = 135,
+	CPUHP_AP_RISCV_TIMER_STARTING = 136,
+	CPUHP_AP_CLINT_TIMER_STARTING = 137,
+	CPUHP_AP_CSKY_TIMER_STARTING = 138,
+	CPUHP_AP_TI_GP_TIMER_STARTING = 139,
+	CPUHP_AP_HYPERV_TIMER_STARTING = 140,
+	CPUHP_AP_DUMMY_TIMER_STARTING = 141,
+	CPUHP_AP_ARM_XEN_STARTING = 142,
+	CPUHP_AP_ARM_XEN_RUNSTATE_STARTING = 143,
+	CPUHP_AP_ARM_CORESIGHT_STARTING = 144,
+	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 145,
+	CPUHP_AP_ARM64_ISNDEP_STARTING = 146,
+	CPUHP_AP_SMPCFD_DYING = 147,
+	CPUHP_AP_HRTIMERS_DYING = 148,
+	CPUHP_AP_X86_TBOOT_DYING = 149,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 150,
+	CPUHP_AP_ONLINE = 151,
+	CPUHP_TEARDOWN_CPU = 152,
+	CPUHP_AP_ONLINE_IDLE = 153,
+	CPUHP_AP_HYPERV_ONLINE = 154,
+	CPUHP_AP_KVM_ONLINE = 155,
+	CPUHP_AP_SCHED_WAIT_EMPTY = 156,
+	CPUHP_AP_SMPBOOT_THREADS = 157,
+	CPUHP_AP_X86_VDSO_VMA_ONLINE = 158,
+	CPUHP_AP_IRQ_AFFINITY_ONLINE = 159,
+	CPUHP_AP_BLK_MQ_ONLINE = 160,
+	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 161,
+	CPUHP_AP_X86_INTEL_EPB_ONLINE = 162,
+	CPUHP_AP_PERF_ONLINE = 163,
+	CPUHP_AP_PERF_X86_ONLINE = 164,
+	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 165,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 166,
+	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 167,
+	CPUHP_AP_PERF_X86_RAPL_ONLINE = 168,
+	CPUHP_AP_PERF_X86_CQM_ONLINE = 169,
+	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 170,
+	CPUHP_AP_PERF_X86_IDXD_ONLINE = 171,
+	CPUHP_AP_PERF_S390_CF_ONLINE = 172,
+	CPUHP_AP_PERF_S390_SF_ONLINE = 173,
+	CPUHP_AP_PERF_ARM_CCI_ONLINE = 174,
+	CPUHP_AP_PERF_ARM_CCN_ONLINE = 175,
+	CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE = 176,
+	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 177,
+	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 178,
+	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 179,
+	CPUHP_AP_PERF_ARM_HISI_PA_ONLINE = 180,
+	CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE = 181,
+	CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE = 182,
+	CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE = 183,
+	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 184,
+	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 185,
+	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 186,
+	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 187,
+	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 188,
+	CPUHP_AP_PERF_ARM_MARVELL_CN10K_DDR_ONLINE = 189,
+	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 190,
+	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 191,
+	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 192,
+	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 193,
+	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 194,
+	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 195,
+	CPUHP_AP_PERF_CSKY_ONLINE = 196,
+	CPUHP_AP_WATCHDOG_ONLINE = 197,
+	CPUHP_AP_WORKQUEUE_ONLINE = 198,
+	CPUHP_AP_RANDOM_ONLINE = 199,
+	CPUHP_AP_RCUTREE_ONLINE = 200,
+	CPUHP_AP_BASE_CACHEINFO_ONLINE = 201,
+	CPUHP_AP_ONLINE_DYN = 202,
+	CPUHP_AP_ONLINE_DYN_END = 232,
+	CPUHP_AP_MM_DEMOTION_ONLINE = 233,
+	CPUHP_AP_X86_HPET_ONLINE = 234,
+	CPUHP_AP_X86_KVM_CLK_ONLINE = 235,
+	CPUHP_AP_ACTIVE = 236,
+	CPUHP_ONLINE = 237,
+};
+
+enum {
+	false = 0,
+	true = 1,
+};
+
+enum {
+	EVENT_FILE_FL_ENABLED = 1,
+	EVENT_FILE_FL_RECORDED_CMD = 2,
+	EVENT_FILE_FL_RECORDED_TGID = 4,
+	EVENT_FILE_FL_FILTERED = 8,
+	EVENT_FILE_FL_NO_SET_FILTER = 16,
+	EVENT_FILE_FL_SOFT_MODE = 32,
+	EVENT_FILE_FL_SOFT_DISABLED = 64,
+	EVENT_FILE_FL_TRIGGER_MODE = 128,
+	EVENT_FILE_FL_TRIGGER_COND = 256,
+	EVENT_FILE_FL_PID_FILTER = 512,
+	EVENT_FILE_FL_WAS_ENABLED = 1024,
+	EVENT_FILE_FL_FREED = 2048,
+};
+
+enum node_states {
+	N_POSSIBLE = 0,
+	N_ONLINE = 1,
+	N_NORMAL_MEMORY = 2,
+	N_HIGH_MEMORY = 2,
+	N_MEMORY = 3,
+	N_CPU = 4,
+	N_GENERIC_INITIATOR = 5,
+	NR_NODE_STATES = 6,
+};
+
+enum refcount_saturation_type {
+	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
+	REFCOUNT_ADD_OVF = 1,
+	REFCOUNT_ADD_UAF = 2,
+	REFCOUNT_SUB_UAF = 3,
+	REFCOUNT_DEC_LEAK = 4,
+};
+
+enum kmalloc_cache_type {
+	KMALLOC_NORMAL = 0,
+	KMALLOC_DMA = 0,
+	KMALLOC_RANDOM_START = 0,
+	KMALLOC_RANDOM_END = 0,
+	KMALLOC_RECLAIM = 1,
+	KMALLOC_CGROUP = 2,
+	NR_KMALLOC_TYPES = 3,
+};
+
+struct trace_event_raw_initcall_level {
+	struct trace_entry ent;
+	u32 __data_loc_level;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_start {
+	struct trace_entry ent;
+	initcall_t func;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_finish {
+	struct trace_entry ent;
+	initcall_t func;
+	int ret;
+	char __data[0];
+};
+
+struct blacklist_entry {
+	struct list_head next;
+	char *buf;
+};
+
+struct eventfs_inode;
+
+struct trace_subsystem_dir;
+
+struct trace_event_file {
+	struct list_head list;
+	struct trace_event_call *event_call;
+	struct event_filter __attribute__((btf_type_tag("rcu"))) *filter;
+	struct eventfs_inode *ei;
+	struct trace_array *tr;
+	struct trace_subsystem_dir *system;
+	struct list_head triggers;
+	unsigned long flags;
+	atomic_t ref;
+	atomic_t sm_ref;
+	atomic_t tm_ref;
+};
+
+struct prog_entry;
+
+struct event_filter {
+	struct prog_entry __attribute__((btf_type_tag("rcu"))) *prog;
+	char *filter_string;
+};
+
+struct trace_event_data_offsets_initcall_level {
+	u32 level;
+};
+
+struct trace_buffer;
+
+struct ring_buffer_event;
+
+struct trace_event_buffer {
+	struct trace_buffer *buffer;
+	struct ring_buffer_event *event;
+	struct trace_event_file *trace_file;
+	void *entry;
+	unsigned int trace_ctx;
+	struct pt_regs *regs;
+};
+
+struct ring_buffer_event {
+	u32 type_len: 5;
+	u32 time_delta: 27;
+	u32 array[0];
+};
+
+typedef short __s16;
+
+typedef __s16 s16;
+
+typedef u16 uint16_t;
+
+struct xbc_node {
+	uint16_t next;
+	uint16_t child;
+	uint16_t parent;
+	uint16_t data;
+};
+
+struct trace_event_data_offsets_initcall_start {};
+
+struct trace_event_data_offsets_initcall_finish {};
+
+typedef __u32 Elf32_Word;
+
+struct elf32_note {
+	Elf32_Word n_namesz;
+	Elf32_Word n_descsz;
+	Elf32_Word n_type;
+};
+
+struct posix_acl_entry {
+	short e_tag;
+	unsigned short e_perm;
+	union {
+		kuid_t e_uid;
+		kgid_t e_gid;
+	};
+};
+
+struct posix_acl {
+	refcount_t a_refcount;
+	struct callback_head a_rcu;
+	unsigned int a_count;
+	struct posix_acl_entry a_entries[0];
+};
+
+typedef __u64 __addrpair;
+
+typedef __u32 __portpair;
+
+typedef struct {
+	struct net *net;
+} possible_net_t;
+
+struct proto;
+
+struct sock_common {
+	union {
+		__addrpair skc_addrpair;
+		struct {
+			__be32 skc_daddr;
+			__be32 skc_rcv_saddr;
+		};
+	};
+	union {
+		unsigned int skc_hash;
+		__u16 skc_u16hashes[2];
+	};
+	union {
+		__portpair skc_portpair;
+		struct {
+			__be16 skc_dport;
+			__u16 skc_num;
+		};
+	};
+	unsigned short skc_family;
+	volatile unsigned char skc_state;
+	unsigned char skc_reuse: 4;
+	unsigned char skc_reuseport: 1;
+	unsigned char skc_ipv6only: 1;
+	unsigned char skc_net_refcnt: 1;
+	int skc_bound_dev_if;
+	union {
+		struct hlist_node skc_bind_node;
+		struct hlist_node skc_portaddr_node;
+	};
+	struct proto *skc_prot;
+	possible_net_t skc_net;
+	struct in6_addr skc_v6_daddr;
+	struct in6_addr skc_v6_rcv_saddr;
+	atomic64_t skc_cookie;
+	union {
+		unsigned long skc_flags;
+		struct sock *skc_listener;
+		struct inet_timewait_death_row *skc_tw_dr;
+	};
+	int skc_dontcopy_begin[0];
+	union {
+		struct hlist_node skc_node;
+		struct hlist_nulls_node skc_nulls_node;
+	};
+	unsigned short skc_tx_queue_mapping;
+	unsigned short skc_rx_queue_mapping;
+	union {
+		int skc_incoming_cpu;
+		u32 skc_rcv_wnd;
+		u32 skc_tw_rcv_nxt;
+	};
+	refcount_t skc_refcnt;
+	int skc_dontcopy_end[0];
+	union {
+		u32 skc_rxhash;
+		u32 skc_window_clamp;
+		u32 skc_tw_snd_nxt;
+	};
+};
+
+typedef struct {
+	spinlock_t slock;
+	int owned;
+	wait_queue_head_t wq;
+} socket_lock_t;
+
+typedef u64 netdev_features_t;
+
+struct sock_cgroup_data {
+	struct cgroup *cgroup;
+	u16 prioidx;
+};
+
+typedef struct {} netns_tracker;
+
+struct sk_filter;
+
+struct socket_wq;
+
+struct xfrm_policy;
+
+struct socket;
+
+struct sock_reuseport;
+
+struct sock {
+	struct sock_common __sk_common;
+	struct dst_entry __attribute__((btf_type_tag("rcu"))) *sk_rx_dst;
+	int sk_rx_dst_ifindex;
+	u32 sk_rx_dst_cookie;
+	socket_lock_t sk_lock;
+	atomic_t sk_drops;
+	int sk_rcvlowat;
+	struct sk_buff_head sk_error_queue;
+	struct sk_buff_head sk_receive_queue;
+	struct {
+		atomic_t rmem_alloc;
+		int len;
+		struct sk_buff *head;
+		struct sk_buff *tail;
+	} sk_backlog;
+	int sk_forward_alloc;
+	u32 sk_reserved_mem;
+	unsigned int sk_ll_usec;
+	unsigned int sk_napi_id;
+	int sk_rcvbuf;
+	int sk_disconnects;
+	struct sk_filter __attribute__((btf_type_tag("rcu"))) *sk_filter;
+	union {
+		struct socket_wq __attribute__((btf_type_tag("rcu"))) *sk_wq;
+		struct socket_wq *sk_wq_raw;
+	};
+	struct xfrm_policy __attribute__((btf_type_tag("rcu"))) *sk_policy[2];
+	struct dst_entry __attribute__((btf_type_tag("rcu"))) *sk_dst_cache;
+	atomic_t sk_omem_alloc;
+	int sk_sndbuf;
+	int sk_wmem_queued;
+	refcount_t sk_wmem_alloc;
+	unsigned long sk_tsq_flags;
+	union {
+		struct sk_buff *sk_send_head;
+		struct rb_root tcp_rtx_queue;
+	};
+	struct sk_buff_head sk_write_queue;
+	__s32 sk_peek_off;
+	int sk_write_pending;
+	__u32 sk_dst_pending_confirm;
+	u32 sk_pacing_status;
+	long sk_sndtimeo;
+	struct timer_list sk_timer;
+	__u32 sk_priority;
+	__u32 sk_mark;
+	unsigned long sk_pacing_rate;
+	unsigned long sk_max_pacing_rate;
+	struct page_frag sk_frag;
+	netdev_features_t sk_route_caps;
+	int sk_gso_type;
+	unsigned int sk_gso_max_size;
+	gfp_t sk_allocation;
+	__u32 sk_txhash;
+	u8 sk_gso_disabled: 1;
+	u8 sk_kern_sock: 1;
+	u8 sk_no_check_tx: 1;
+	u8 sk_no_check_rx: 1;
+	u8 sk_userlocks: 4;
+	u8 sk_pacing_shift;
+	u16 sk_type;
+	u16 sk_protocol;
+	u16 sk_gso_max_segs;
+	unsigned long sk_lingertime;
+	struct proto *sk_prot_creator;
+	rwlock_t sk_callback_lock;
+	int sk_err;
+	int sk_err_soft;
+	u32 sk_ack_backlog;
+	u32 sk_max_ack_backlog;
+	kuid_t sk_uid;
+	u8 sk_txrehash;
+	u8 sk_prefer_busy_poll;
+	u16 sk_busy_poll_budget;
+	spinlock_t sk_peer_lock;
+	int sk_bind_phc;
+	struct pid *sk_peer_pid;
+	const struct cred *sk_peer_cred;
+	long sk_rcvtimeo;
+	ktime_t sk_stamp;
+	atomic_t sk_tskey;
+	atomic_t sk_zckey;
+	u32 sk_tsflags;
+	u8 sk_shutdown;
+	u8 sk_clockid;
+	u8 sk_txtime_deadline_mode: 1;
+	u8 sk_txtime_report_errors: 1;
+	u8 sk_txtime_unused: 6;
+	bool sk_use_task_frag;
+	struct socket *sk_socket;
+	void *sk_user_data;
+	void *sk_security;
+	struct sock_cgroup_data sk_cgrp_data;
+	struct mem_cgroup *sk_memcg;
+	void (*sk_state_change)(struct sock *);
+	void (*sk_data_ready)(struct sock *);
+	void (*sk_write_space)(struct sock *);
+	void (*sk_error_report)(struct sock *);
+	int (*sk_backlog_rcv)(struct sock *, struct sk_buff *);
+	void (*sk_destruct)(struct sock *);
+	struct sock_reuseport __attribute__((btf_type_tag("rcu"))) *sk_reuseport_cb;
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) *sk_bpf_storage;
+	struct callback_head sk_rcu;
+	netns_tracker ns_tracker;
+	struct hlist_node sk_bind2_node;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+	u64 android_oem_data1;
+};
+
+struct smc_hashinfo;
+
+typedef struct {
+	union {
+		void *kernel;
+		void __attribute__((btf_type_tag("user"))) *user;
+	};
+	bool is_kernel: 1;
+} sockptr_t;
+
+typedef unsigned int slab_flags_t;
+
+struct sockaddr;
+
+struct msghdr;
+
+struct sk_psock;
+
+struct request_sock_ops;
+
+struct timewait_sock_ops;
+
+struct raw_hashinfo;
+
+struct proto {
+	void (*close)(struct sock *, long);
+	int (*pre_connect)(struct sock *, struct sockaddr *, int);
+	int (*connect)(struct sock *, struct sockaddr *, int);
+	int (*disconnect)(struct sock *, int);
+	struct sock * (*accept)(struct sock *, int, int *, bool);
+	int (*ioctl)(struct sock *, int, int *);
+	int (*init)(struct sock *);
+	void (*destroy)(struct sock *);
+	void (*shutdown)(struct sock *, int);
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char __attribute__((btf_type_tag("user"))) *, int __attribute__((btf_type_tag("user"))) *);
+	void (*keepalive)(struct sock *, int);
+	int (*compat_ioctl)(struct sock *, unsigned int, unsigned long);
+	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
+	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int *);
+	void (*splice_eof)(struct socket *);
+	int (*bind)(struct sock *, struct sockaddr *, int);
+	int (*bind_add)(struct sock *, struct sockaddr *, int);
+	int (*backlog_rcv)(struct sock *, struct sk_buff *);
+	bool (*bpf_bypass_getsockopt)(int, int);
+	void (*release_cb)(struct sock *);
+	int (*hash)(struct sock *);
+	void (*unhash)(struct sock *);
+	void (*rehash)(struct sock *);
+	int (*get_port)(struct sock *, unsigned short);
+	void (*put_port)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	unsigned int inuse_idx;
+	bool (*stream_memory_free)(const struct sock *, int);
+	bool (*sock_is_readable)(struct sock *);
+	void (*enter_memory_pressure)(struct sock *);
+	void (*leave_memory_pressure)(struct sock *);
+	atomic_long_t *memory_allocated;
+	int __attribute__((btf_type_tag("percpu"))) *per_cpu_fw_alloc;
+	struct percpu_counter *sockets_allocated;
+	unsigned long *memory_pressure;
+	long *sysctl_mem;
+	int *sysctl_wmem;
+	int *sysctl_rmem;
+	u32 sysctl_wmem_offset;
+	u32 sysctl_rmem_offset;
+	int max_header;
+	bool no_autobind;
+	struct kmem_cache *slab;
+	unsigned int obj_size;
+	unsigned int ipv6_pinfo_offset;
+	slab_flags_t slab_flags;
+	unsigned int useroffset;
+	unsigned int usersize;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *orphan_count;
+	struct request_sock_ops *rsk_prot;
+	struct timewait_sock_ops *twsk_prot;
+	union {
+		struct inet_hashinfo *hashinfo;
+		struct udp_table *udp_table;
+		struct raw_hashinfo *raw_hash;
+		struct smc_hashinfo *smc_hash;
+	} h;
+	struct module *owner;
+	char name[32];
+	struct list_head node;
+	int (*diag_destroy)(struct sock *, int);
+};
+
+typedef unsigned short __kernel_sa_family_t;
+
+typedef __kernel_sa_family_t sa_family_t;
+
+struct sockaddr {
+	sa_family_t sa_family;
+	union {
+		char sa_data_min[14];
+		struct {
+			struct {} __empty_sa_data;
+			char sa_data[0];
+		};
+	};
+};
+
+struct ubuf_info;
+
+struct msghdr {
+	void *msg_name;
+	int msg_namelen;
+	int msg_inq;
+	struct iov_iter msg_iter;
+	union {
+		void *msg_control;
+		void __attribute__((btf_type_tag("user"))) *msg_control_user;
+	};
+	bool msg_control_is_user: 1;
+	bool msg_get_inq: 1;
+	unsigned int msg_flags;
+	__kernel_size_t msg_controllen;
+	struct kiocb *msg_iocb;
+	struct ubuf_info *msg_ubuf;
+	int (*sg_from_iter)(struct sock *, struct sk_buff *, struct iov_iter *, size_t);
+};
+
+struct ubuf_info {
+	void (*callback)(struct sk_buff *, struct ubuf_info *, bool);
+	refcount_t refcnt;
+	u8 flags;
+};
+
+typedef u32 xdp_features_t;
+
+struct net_device_stats {
+	union {
+		unsigned long rx_packets;
+		atomic_long_t __rx_packets;
+	};
+	union {
+		unsigned long tx_packets;
+		atomic_long_t __tx_packets;
+	};
+	union {
+		unsigned long rx_bytes;
+		atomic_long_t __rx_bytes;
+	};
+	union {
+		unsigned long tx_bytes;
+		atomic_long_t __tx_bytes;
+	};
+	union {
+		unsigned long rx_errors;
+		atomic_long_t __rx_errors;
+	};
+	union {
+		unsigned long tx_errors;
+		atomic_long_t __tx_errors;
+	};
+	union {
+		unsigned long rx_dropped;
+		atomic_long_t __rx_dropped;
+	};
+	union {
+		unsigned long tx_dropped;
+		atomic_long_t __tx_dropped;
+	};
+	union {
+		unsigned long multicast;
+		atomic_long_t __multicast;
+	};
+	union {
+		unsigned long collisions;
+		atomic_long_t __collisions;
+	};
+	union {
+		unsigned long rx_length_errors;
+		atomic_long_t __rx_length_errors;
+	};
+	union {
+		unsigned long rx_over_errors;
+		atomic_long_t __rx_over_errors;
+	};
+	union {
+		unsigned long rx_crc_errors;
+		atomic_long_t __rx_crc_errors;
+	};
+	union {
+		unsigned long rx_frame_errors;
+		atomic_long_t __rx_frame_errors;
+	};
+	union {
+		unsigned long rx_fifo_errors;
+		atomic_long_t __rx_fifo_errors;
+	};
+	union {
+		unsigned long rx_missed_errors;
+		atomic_long_t __rx_missed_errors;
+	};
+	union {
+		unsigned long tx_aborted_errors;
+		atomic_long_t __tx_aborted_errors;
+	};
+	union {
+		unsigned long tx_carrier_errors;
+		atomic_long_t __tx_carrier_errors;
+	};
+	union {
+		unsigned long tx_fifo_errors;
+		atomic_long_t __tx_fifo_errors;
+	};
+	union {
+		unsigned long tx_heartbeat_errors;
+		atomic_long_t __tx_heartbeat_errors;
+	};
+	union {
+		unsigned long tx_window_errors;
+		atomic_long_t __tx_window_errors;
+	};
+	union {
+		unsigned long rx_compressed;
+		atomic_long_t __rx_compressed;
+	};
+	union {
+		unsigned long tx_compressed;
+		atomic_long_t __tx_compressed;
+	};
+};
+
+struct netdev_hw_addr_list {
+	struct list_head list;
+	int count;
+	struct rb_root tree;
+};
+
+struct tipc_bearer;
+
+enum rx_handler_result {
+	RX_HANDLER_CONSUMED = 0,
+	RX_HANDLER_ANOTHER = 1,
+	RX_HANDLER_EXACT = 2,
+	RX_HANDLER_PASS = 3,
+};
+
+typedef enum rx_handler_result rx_handler_result_t;
+
+typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
+
+enum netdev_ml_priv_type {
+	ML_PRIV_NONE = 0,
+	ML_PRIV_CAN = 1,
+};
+
+enum netdev_stat_type {
+	NETDEV_PCPU_STAT_NONE = 0,
+	NETDEV_PCPU_STAT_LSTATS = 1,
+	NETDEV_PCPU_STAT_TSTATS = 2,
+	NETDEV_PCPU_STAT_DSTATS = 3,
+};
+
+struct netdev_tc_txq {
+	u16 count;
+	u16 offset;
+};
+
+struct sfp_bus;
+
+struct bpf_xdp_link;
+
+struct bpf_xdp_entity {
+	struct bpf_prog *prog;
+	struct bpf_xdp_link *link;
+};
+
+struct netdev_name_node;
+
+struct dev_ifalias;
+
+struct net_device_ops;
+
+struct xdp_metadata_ops;
+
+struct net_device_core_stats;
+
+struct iw_handler_def;
+
+struct iw_public_data;
+
+struct ethtool_ops;
+
+struct ndisc_ops;
+
+struct header_ops;
+
+struct in_device;
+
+struct inet6_dev;
+
+struct vlan_info;
+
+struct wireless_dev;
+
+struct wpan_dev;
+
+struct netdev_rx_queue;
+
+struct bpf_mprog_entry;
+
+struct netdev_queue;
+
+struct cpu_rmap;
+
+struct Qdisc;
+
+struct xdp_dev_bulk_queue;
+
+struct xps_dev_maps;
+
+struct pcpu_lstats;
+
+struct pcpu_sw_netstats;
+
+struct pcpu_dstats;
+
+struct rtnl_link_ops;
+
+struct netprio_map;
+
+struct phy_device;
+
+struct macsec_ops;
+
+struct udp_tunnel_nic_info;
+
+struct udp_tunnel_nic;
+
+struct rtnl_hw_stats64;
+
+struct devlink_port;
+
+struct net_device {
+	char name[16];
+	struct netdev_name_node *name_node;
+	struct dev_ifalias __attribute__((btf_type_tag("rcu"))) *ifalias;
+	unsigned long mem_end;
+	unsigned long mem_start;
+	unsigned long base_addr;
+	unsigned long state;
+	struct list_head dev_list;
+	struct list_head napi_list;
+	struct list_head unreg_list;
+	struct list_head close_list;
+	struct list_head ptype_all;
+	struct list_head ptype_specific;
+	struct {
+		struct list_head upper;
+		struct list_head lower;
+	} adj_list;
+	unsigned int flags;
+	xdp_features_t xdp_features;
+	unsigned long long priv_flags;
+	const struct net_device_ops *netdev_ops;
+	const struct xdp_metadata_ops *xdp_metadata_ops;
+	int ifindex;
+	unsigned short gflags;
+	unsigned short hard_header_len;
+	unsigned int mtu;
+	unsigned short needed_headroom;
+	unsigned short needed_tailroom;
+	netdev_features_t features;
+	netdev_features_t hw_features;
+	netdev_features_t wanted_features;
+	netdev_features_t vlan_features;
+	netdev_features_t hw_enc_features;
+	netdev_features_t mpls_features;
+	netdev_features_t gso_partial_features;
+	unsigned int min_mtu;
+	unsigned int max_mtu;
+	unsigned short type;
+	unsigned char min_header_len;
+	unsigned char name_assign_type;
+	int group;
+	struct net_device_stats stats;
+	struct net_device_core_stats __attribute__((btf_type_tag("percpu"))) *core_stats;
+	atomic_t carrier_up_count;
+	atomic_t carrier_down_count;
+	const struct iw_handler_def *wireless_handlers;
+	struct iw_public_data *wireless_data;
+	const struct ethtool_ops *ethtool_ops;
+	const struct ndisc_ops *ndisc_ops;
+	const struct header_ops *header_ops;
+	unsigned char operstate;
+	unsigned char link_mode;
+	unsigned char if_port;
+	unsigned char dma;
+	unsigned char perm_addr[32];
+	unsigned char addr_assign_type;
+	unsigned char addr_len;
+	unsigned char upper_level;
+	unsigned char lower_level;
+	unsigned short neigh_priv_len;
+	unsigned short dev_id;
+	unsigned short dev_port;
+	unsigned short padded;
+	spinlock_t addr_list_lock;
+	int irq;
+	struct netdev_hw_addr_list uc;
+	struct netdev_hw_addr_list mc;
+	struct netdev_hw_addr_list dev_addrs;
+	struct kset *queues_kset;
+	unsigned int promiscuity;
+	unsigned int allmulti;
+	bool uc_promisc;
+	struct in_device __attribute__((btf_type_tag("rcu"))) *ip_ptr;
+	struct inet6_dev __attribute__((btf_type_tag("rcu"))) *ip6_ptr;
+	struct vlan_info __attribute__((btf_type_tag("rcu"))) *vlan_info;
+	struct tipc_bearer __attribute__((btf_type_tag("rcu"))) *tipc_ptr;
+	struct wireless_dev *ieee80211_ptr;
+	struct wpan_dev *ieee802154_ptr;
+	const unsigned char *dev_addr;
+	struct netdev_rx_queue *_rx;
+	unsigned int num_rx_queues;
+	unsigned int real_num_rx_queues;
+	struct bpf_prog __attribute__((btf_type_tag("rcu"))) *xdp_prog;
+	unsigned long gro_flush_timeout;
+	int napi_defer_hard_irqs;
+	unsigned int gro_max_size;
+	unsigned int gro_ipv4_max_size;
+	unsigned int xdp_zc_max_segs;
+	rx_handler_func_t __attribute__((btf_type_tag("rcu"))) *rx_handler;
+	void __attribute__((btf_type_tag("rcu"))) *rx_handler_data;
+	struct bpf_mprog_entry __attribute__((btf_type_tag("rcu"))) *tcx_ingress;
+	struct netdev_queue __attribute__((btf_type_tag("rcu"))) *ingress_queue;
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *nf_hooks_ingress;
+	unsigned char broadcast[32];
+	struct cpu_rmap *rx_cpu_rmap;
+	struct hlist_node index_hlist;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netdev_queue *_tx;
+	unsigned int num_tx_queues;
+	unsigned int real_num_tx_queues;
+	struct Qdisc __attribute__((btf_type_tag("rcu"))) *qdisc;
+	unsigned int tx_queue_len;
+	spinlock_t tx_global_lock;
+	struct xdp_dev_bulk_queue __attribute__((btf_type_tag("percpu"))) *xdp_bulkq;
+	struct xps_dev_maps __attribute__((btf_type_tag("rcu"))) *xps_maps[2];
+	struct bpf_mprog_entry __attribute__((btf_type_tag("rcu"))) *tcx_egress;
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *nf_hooks_egress;
+	struct hlist_head qdisc_hash[16];
+	struct timer_list watchdog_timer;
+	int watchdog_timeo;
+	u32 proto_down_reason;
+	struct list_head todo_list;
+	int __attribute__((btf_type_tag("percpu"))) *pcpu_refcnt;
+	struct ref_tracker_dir refcnt_tracker;
+	struct list_head link_watch_list;
+	enum {
+		NETREG_UNINITIALIZED = 0,
+		NETREG_REGISTERED = 1,
+		NETREG_UNREGISTERING = 2,
+		NETREG_UNREGISTERED = 3,
+		NETREG_RELEASED = 4,
+		NETREG_DUMMY = 5,
+	} reg_state: 8;
+	bool dismantle;
+	enum {
+		RTNL_LINK_INITIALIZED = 0,
+		RTNL_LINK_INITIALIZING = 1,
+	} rtnl_link_state: 16;
+	bool needs_free_netdev;
+	void (*priv_destructor)(struct net_device *);
+	possible_net_t nd_net;
+	void *ml_priv;
+	enum netdev_ml_priv_type ml_priv_type;
+	enum netdev_stat_type pcpu_stat_type: 8;
+	union {
+		struct pcpu_lstats __attribute__((btf_type_tag("percpu"))) *lstats;
+		struct pcpu_sw_netstats __attribute__((btf_type_tag("percpu"))) *tstats;
+		struct pcpu_dstats __attribute__((btf_type_tag("percpu"))) *dstats;
+	};
+	struct device dev;
+	const struct attribute_group *sysfs_groups[4];
+	const struct attribute_group *sysfs_rx_queue_group;
+	const struct rtnl_link_ops *rtnl_link_ops;
+	unsigned int gso_max_size;
+	unsigned int tso_max_size;
+	u16 gso_max_segs;
+	u16 tso_max_segs;
+	unsigned int gso_ipv4_max_size;
+	s16 num_tc;
+	struct netdev_tc_txq tc_to_txq[16];
+	u8 prio_tc_map[16];
+	struct netprio_map __attribute__((btf_type_tag("rcu"))) *priomap;
+	struct phy_device *phydev;
+	struct sfp_bus *sfp_bus;
+	struct lock_class_key *qdisc_tx_busylock;
+	bool proto_down;
+	unsigned int wol_enabled: 1;
+	unsigned int threaded: 1;
+	struct list_head net_notifier_list;
+	const struct macsec_ops *macsec_ops;
+	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
+	struct udp_tunnel_nic *udp_tunnel_nic;
+	struct bpf_xdp_entity xdp_state[3];
+	u8 dev_addr_shadow[32];
+	netdevice_tracker linkwatch_dev_tracker;
+	netdevice_tracker watchdog_dev_tracker;
+	netdevice_tracker dev_registered_tracker;
+	struct rtnl_hw_stats64 *offload_xstats_l3;
+	struct devlink_port *devlink_port;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct dev_ifalias {
+	struct callback_head rcuhead;
+	char ifalias[0];
+};
+
+enum netdev_tx {
+	__NETDEV_TX_MIN = -2147483648,
+	NETDEV_TX_OK = 0,
+	NETDEV_TX_BUSY = 16,
+};
+
+typedef enum netdev_tx netdev_tx_t;
+
+enum tc_setup_type {
+	TC_QUERY_CAPS = 0,
+	TC_SETUP_QDISC_MQPRIO = 1,
+	TC_SETUP_CLSU32 = 2,
+	TC_SETUP_CLSFLOWER = 3,
+	TC_SETUP_CLSMATCHALL = 4,
+	TC_SETUP_CLSBPF = 5,
+	TC_SETUP_BLOCK = 6,
+	TC_SETUP_QDISC_CBS = 7,
+	TC_SETUP_QDISC_RED = 8,
+	TC_SETUP_QDISC_PRIO = 9,
+	TC_SETUP_QDISC_MQ = 10,
+	TC_SETUP_QDISC_ETF = 11,
+	TC_SETUP_ROOT_QDISC = 12,
+	TC_SETUP_QDISC_GRED = 13,
+	TC_SETUP_QDISC_TAPRIO = 14,
+	TC_SETUP_FT = 15,
+	TC_SETUP_QDISC_ETS = 16,
+	TC_SETUP_QDISC_TBF = 17,
+	TC_SETUP_QDISC_FIFO = 18,
+	TC_SETUP_QDISC_HTB = 19,
+	TC_SETUP_ACT = 20,
+};
+
+struct ifreq;
+
+struct if_settings;
+
+struct ifmap;
+
+struct neigh_parms;
+
+struct rtnl_link_stats64;
+
+struct ifla_vf_info;
+
+struct ifla_vf_stats;
+
+struct nlattr;
+
+struct ifla_vf_guid;
+
+struct netlink_ext_ack;
+
+struct ndmsg;
+
+struct netlink_callback;
+
+struct nlmsghdr;
+
+struct netdev_phys_item_id;
+
+struct netdev_bpf;
+
+struct xdp_frame;
+
+struct xdp_buff;
+
+struct ip_tunnel_parm;
+
+struct net_device_path_ctx;
+
+struct net_device_path;
+
+struct skb_shared_hwtstamps;
+
+struct kernel_hwtstamp_config;
+
+struct net_device_ops {
+	int (*ndo_init)(struct net_device *);
+	void (*ndo_uninit)(struct net_device *);
+	int (*ndo_open)(struct net_device *);
+	int (*ndo_stop)(struct net_device *);
+	netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);
+	netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);
+	u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);
+	void (*ndo_change_rx_flags)(struct net_device *, int);
+	void (*ndo_set_rx_mode)(struct net_device *);
+	int (*ndo_set_mac_address)(struct net_device *, void *);
+	int (*ndo_validate_addr)(struct net_device *);
+	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocbond)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocwandev)(struct net_device *, struct if_settings *);
+	int (*ndo_siocdevprivate)(struct net_device *, struct ifreq *, void __attribute__((btf_type_tag("user"))) *, int);
+	int (*ndo_set_config)(struct net_device *, struct ifmap *);
+	int (*ndo_change_mtu)(struct net_device *, int);
+	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
+	void (*ndo_tx_timeout)(struct net_device *, unsigned int);
+	void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);
+	bool (*ndo_has_offload_stats)(const struct net_device *, int);
+	int (*ndo_get_offload_stats)(int, const struct net_device *, void *);
+	struct net_device_stats * (*ndo_get_stats)(struct net_device *);
+	int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);
+	int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);
+	int (*ndo_set_vf_mac)(struct net_device *, int, u8 *);
+	int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);
+	int (*ndo_set_vf_rate)(struct net_device *, int, int, int);
+	int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);
+	int (*ndo_set_vf_trust)(struct net_device *, int, bool);
+	int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);
+	int (*ndo_set_vf_link_state)(struct net_device *, int, int);
+	int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);
+	int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);
+	int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);
+	int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*ndo_set_vf_guid)(struct net_device *, int, u64, int);
+	int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);
+	int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);
+	int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);
+	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
+	int (*ndo_del_slave)(struct net_device *, struct net_device *);
+	struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);
+	struct net_device * (*ndo_sk_get_lower_dev)(struct net_device *, struct sock *);
+	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
+	int (*ndo_set_features)(struct net_device *, netdev_features_t);
+	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
+	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
+	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del_bulk)(struct ndmsg *, struct nlattr **, struct net_device *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
+	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
+	int (*ndo_mdb_add)(struct net_device *, struct nlattr **, u16, struct netlink_ext_ack *);
+	int (*ndo_mdb_del)(struct net_device *, struct nlattr **, struct netlink_ext_ack *);
+	int (*ndo_mdb_dump)(struct net_device *, struct sk_buff *, struct netlink_callback *);
+	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
+	int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);
+	int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);
+	int (*ndo_change_carrier)(struct net_device *, bool);
+	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
+	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
+	void (*ndo_dfwd_del_station)(struct net_device *, void *);
+	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
+	int (*ndo_get_iflink)(const struct net_device *);
+	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
+	void (*ndo_set_rx_headroom)(struct net_device *, int);
+	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
+	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
+	struct net_device * (*ndo_xdp_get_xmit_slave)(struct net_device *, struct xdp_buff *);
+	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
+	int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);
+	struct net_device * (*ndo_get_peer_dev)(struct net_device *);
+	int (*ndo_fill_forward_path)(struct net_device_path_ctx *, struct net_device_path *);
+	ktime_t (*ndo_get_tstamp)(struct net_device *, const struct skb_shared_hwtstamps *, bool);
+	int (*ndo_hwtstamp_get)(struct net_device *, struct kernel_hwtstamp_config *);
+	int (*ndo_hwtstamp_set)(struct net_device *, struct kernel_hwtstamp_config *, struct netlink_ext_ack *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+};
+
+struct ifmap {
+	unsigned long mem_start;
+	unsigned long mem_end;
+	unsigned short base_addr;
+	unsigned char irq;
+	unsigned char dma;
+	unsigned char port;
+};
+
+typedef struct {
+	unsigned short encoding;
+	unsigned short parity;
+} raw_hdlc_proto;
+
+typedef struct {
+	unsigned int interval;
+	unsigned int timeout;
+} cisco_proto;
+
+typedef struct {
+	unsigned int t391;
+	unsigned int t392;
+	unsigned int n391;
+	unsigned int n392;
+	unsigned int n393;
+	unsigned short lmi;
+	unsigned short dce;
+} fr_proto;
+
+typedef struct {
+	unsigned int dlci;
+} fr_proto_pvc;
+
+typedef struct {
+	unsigned int dlci;
+	char master[16];
+} fr_proto_pvc_info;
+
+typedef struct {
+	unsigned short dce;
+	unsigned int modulo;
+	unsigned int window;
+	unsigned int t1;
+	unsigned int t2;
+	unsigned int n2;
+} x25_hdlc_proto;
+
+typedef struct {
+	unsigned int clock_rate;
+	unsigned int clock_type;
+	unsigned short loopback;
+} sync_serial_settings;
+
+typedef struct {
+	unsigned int clock_rate;
+	unsigned int clock_type;
+	unsigned short loopback;
+	unsigned int slot_map;
+} te1_settings;
+
+struct if_settings {
+	unsigned int type;
+	unsigned int size;
+	union {
+		raw_hdlc_proto __attribute__((btf_type_tag("user"))) *raw_hdlc;
+		cisco_proto __attribute__((btf_type_tag("user"))) *cisco;
+		fr_proto __attribute__((btf_type_tag("user"))) *fr;
+		fr_proto_pvc __attribute__((btf_type_tag("user"))) *fr_pvc;
+		fr_proto_pvc_info __attribute__((btf_type_tag("user"))) *fr_pvc_info;
+		x25_hdlc_proto __attribute__((btf_type_tag("user"))) *x25;
+		sync_serial_settings __attribute__((btf_type_tag("user"))) *sync;
+		te1_settings __attribute__((btf_type_tag("user"))) *te1;
+	} ifs_ifsu;
+};
+
+struct ifreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union {
+		struct sockaddr ifru_addr;
+		struct sockaddr ifru_dstaddr;
+		struct sockaddr ifru_broadaddr;
+		struct sockaddr ifru_netmask;
+		struct sockaddr ifru_hwaddr;
+		short ifru_flags;
+		int ifru_ivalue;
+		int ifru_mtu;
+		struct ifmap ifru_map;
+		char ifru_slave[16];
+		char ifru_newname[16];
+		void __attribute__((btf_type_tag("user"))) *ifru_data;
+		struct if_settings ifru_settings;
+	} ifr_ifru;
+};
+
+struct neigh_table;
+
+struct neigh_parms {
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	int (*neigh_setup)(struct neighbour *);
+	struct neigh_table *tbl;
+	void *sysctl_table;
+	int dead;
+	refcount_t refcnt;
+	struct callback_head callback_head;
+	int reachable_time;
+	u32 qlen;
+	int data[14];
+	unsigned long data_state[1];
+	u64 android_kabi_reserved1;
+};
+
+struct fib_rule;
+
+struct flowi;
+
+struct fib_lookup_arg;
+
+struct fib_rule_hdr;
+
+struct fib_rules_ops {
+	int family;
+	struct list_head list;
+	int rule_size;
+	int addr_size;
+	int unresolved_rules;
+	int nr_goto_rules;
+	unsigned int fib_rules_seq;
+	int (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);
+	bool (*suppress)(struct fib_rule *, int, struct fib_lookup_arg *);
+	int (*match)(struct fib_rule *, struct flowi *, int);
+	int (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);
+	int (*delete)(struct fib_rule *);
+	int (*compare)(struct fib_rule *, struct fib_rule_hdr *, struct nlattr **);
+	int (*fill)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *);
+	size_t (*nlmsg_payload)(struct fib_rule *);
+	void (*flush_cache)(struct fib_rules_ops *);
+	int nlgroup;
+	struct list_head rules_list;
+	struct module *owner;
+	struct net *fro_net;
+	struct callback_head rcu;
+};
+
+typedef __u64 __be64;
+
+struct fib_kuid_range {
+	kuid_t start;
+	kuid_t end;
+};
+
+struct fib_rule_port_range {
+	__u16 start;
+	__u16 end;
+};
+
+struct fib_rule {
+	struct list_head list;
+	int iifindex;
+	int oifindex;
+	u32 mark;
+	u32 mark_mask;
+	u32 flags;
+	u32 table;
+	u8 action;
+	u8 l3mdev;
+	u8 proto;
+	u8 ip_proto;
+	u32 target;
+	__be64 tun_id;
+	struct fib_rule __attribute__((btf_type_tag("rcu"))) *ctarget;
+	struct net *fr_net;
+	refcount_t refcnt;
+	u32 pref;
+	int suppress_ifgroup;
+	int suppress_prefixlen;
+	char iifname[16];
+	char oifname[16];
+	struct fib_kuid_range uid_range;
+	struct fib_rule_port_range sport_range;
+	struct fib_rule_port_range dport_range;
+	struct callback_head rcu;
+};
+
+struct flowi_tunnel {
+	__be64 tun_id;
+};
+
+struct flowi_common {
+	int flowic_oif;
+	int flowic_iif;
+	int flowic_l3mdev;
+	__u32 flowic_mark;
+	__u8 flowic_tos;
+	__u8 flowic_scope;
+	__u8 flowic_proto;
+	__u8 flowic_flags;
+	__u32 flowic_secid;
+	kuid_t flowic_uid;
+	__u32 flowic_multipath_hash;
+	struct flowi_tunnel flowic_tun_key;
+};
+
+union flowi_uli {
+	struct {
+		__be16 dport;
+		__be16 sport;
+	} ports;
+	struct {
+		__u8 type;
+		__u8 code;
+	} icmpt;
+	__be32 gre_key;
+	struct {
+		__u8 type;
+	} mht;
+};
+
+struct flowi4 {
+	struct flowi_common __fl_common;
+	__be32 saddr;
+	__be32 daddr;
+	union flowi_uli uli;
+};
+
+struct flowi6 {
+	struct flowi_common __fl_common;
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	__be32 flowlabel;
+	union flowi_uli uli;
+	__u32 mp_hash;
+};
+
+struct flowi {
+	union {
+		struct flowi_common __fl_common;
+		struct flowi4 ip4;
+		struct flowi6 ip6;
+	} u;
+};
+
+struct fib_lookup_arg {
+	void *lookup_ptr;
+	const void *lookup_data;
+	void *result;
+	struct fib_rule *rule;
+	u32 table;
+	int flags;
+};
+
+struct fib_rule_hdr {
+	__u8 family;
+	__u8 dst_len;
+	__u8 src_len;
+	__u8 tos;
+	__u8 table;
+	__u8 res1;
+	__u8 res2;
+	__u8 action;
+	__u32 flags;
+};
+
+struct nlattr {
+	__u16 nla_len;
+	__u16 nla_type;
+};
+
+struct nla_policy;
+
+struct netlink_ext_ack {
+	const char *_msg;
+	const struct nlattr *bad_attr;
+	const struct nla_policy *policy;
+	const struct nlattr *miss_nest;
+	u16 miss_type;
+	u8 cookie[20];
+	u8 cookie_len;
+	char _msg_buf[80];
+};
+
+struct netlink_range_validation;
+
+struct netlink_range_validation_signed;
+
+struct nla_policy {
+	u8 type;
+	u8 validation_type;
+	u16 len;
+	union {
+		u16 strict_start_type;
+		const u32 bitfield32_valid;
+		const u32 mask;
+		const char *reject_message;
+		const struct nla_policy *nested_policy;
+		struct netlink_range_validation *range;
+		struct netlink_range_validation_signed *range_signed;
+		struct {
+			s16 min;
+			s16 max;
+		};
+		int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
+	};
+};
+
+struct netlink_range_validation {
+	u64 min;
+	u64 max;
+};
+
+struct netlink_range_validation_signed {
+	s64 min;
+	s64 max;
+};
+
+struct fib_notifier_ops {
+	int family;
+	struct list_head list;
+	unsigned int (*fib_seq_read)(struct net *);
+	int (*fib_dump)(struct net *, struct notifier_block *, struct netlink_ext_ack *);
+	struct module *owner;
+	struct callback_head rcu;
+};
+
+struct hh_cache {
+	unsigned int hh_len;
+	seqlock_t hh_lock;
+	unsigned long hh_data[12];
+};
+
+struct neigh_ops;
+
+struct neighbour {
+	struct neighbour __attribute__((btf_type_tag("rcu"))) *next;
+	struct neigh_table *tbl;
+	struct neigh_parms *parms;
+	unsigned long confirmed;
+	unsigned long updated;
+	rwlock_t lock;
+	refcount_t refcnt;
+	unsigned int arp_queue_len_bytes;
+	struct sk_buff_head arp_queue;
+	struct timer_list timer;
+	unsigned long used;
+	atomic_t probes;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	u8 protocol;
+	u32 flags;
+	seqlock_t ha_lock;
+	long: 0;
+	unsigned char ha[32];
+	struct hh_cache hh;
+	int (*output)(struct neighbour *, struct sk_buff *);
+	const struct neigh_ops *ops;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	struct callback_head rcu;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u64 android_kabi_reserved1;
+	u8 primary_key[0];
+};
+
+struct pneigh_entry;
+
+struct neigh_statistics;
+
+struct neigh_hash_table;
+
+struct neigh_table {
+	int family;
+	unsigned int entry_size;
+	unsigned int key_len;
+	__be16 protocol;
+	__u32 (*hash)(const void *, const struct net_device *, __u32 *);
+	bool (*key_eq)(const struct neighbour *, const void *);
+	int (*constructor)(struct neighbour *);
+	int (*pconstructor)(struct pneigh_entry *);
+	void (*pdestructor)(struct pneigh_entry *);
+	void (*proxy_redo)(struct sk_buff *);
+	int (*is_multicast)(const void *);
+	bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);
+	char *id;
+	struct neigh_parms parms;
+	struct list_head parms_list;
+	int gc_interval;
+	int gc_thresh1;
+	int gc_thresh2;
+	int gc_thresh3;
+	unsigned long last_flush;
+	struct delayed_work gc_work;
+	struct delayed_work managed_work;
+	struct timer_list proxy_timer;
+	struct sk_buff_head proxy_queue;
+	atomic_t entries;
+	atomic_t gc_entries;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	rwlock_t lock;
+	unsigned long last_rand;
+	struct neigh_statistics __attribute__((btf_type_tag("percpu"))) *stats;
+	struct neigh_hash_table __attribute__((btf_type_tag("rcu"))) *nht;
+	struct pneigh_entry **phash_buckets;
+	u64 android_kabi_reserved1;
+};
+
+struct pneigh_entry {
+	struct pneigh_entry *next;
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+	u8 protocol;
+	u32 key[0];
+};
+
+struct neigh_statistics {
+	unsigned long allocs;
+	unsigned long destroys;
+	unsigned long hash_grows;
+	unsigned long res_failed;
+	unsigned long lookups;
+	unsigned long hits;
+	unsigned long rcv_probes_mcast;
+	unsigned long rcv_probes_ucast;
+	unsigned long periodic_gc_runs;
+	unsigned long forced_gc_runs;
+	unsigned long unres_discards;
+	unsigned long table_fulls;
+};
+
+struct neigh_hash_table {
+	struct neighbour __attribute__((btf_type_tag("rcu"))) **hash_buckets;
+	unsigned int hash_shift;
+	__u32 hash_rnd[4];
+	struct callback_head rcu;
+};
+
+struct neigh_ops {
+	int family;
+	void (*solicit)(struct neighbour *, struct sk_buff *);
+	void (*error_report)(struct neighbour *, struct sk_buff *);
+	int (*output)(struct neighbour *, struct sk_buff *);
+	int (*connected_output)(struct neighbour *, struct sk_buff *);
+};
+
+struct ipv6_stable_secret {
+	bool initialized;
+	struct in6_addr secret;
+};
+
+struct ipv6_devconf {
+	__s32 forwarding;
+	__s32 hop_limit;
+	__s32 mtu6;
+	__s32 accept_ra;
+	__s32 accept_redirects;
+	__s32 autoconf;
+	__s32 dad_transmits;
+	__s32 rtr_solicits;
+	__s32 rtr_solicit_interval;
+	__s32 rtr_solicit_max_interval;
+	__s32 rtr_solicit_delay;
+	__s32 force_mld_version;
+	__s32 mldv1_unsolicited_report_interval;
+	__s32 mldv2_unsolicited_report_interval;
+	__s32 use_tempaddr;
+	__s32 temp_valid_lft;
+	__s32 temp_prefered_lft;
+	__s32 regen_max_retry;
+	__s32 max_desync_factor;
+	__s32 max_addresses;
+	__s32 accept_ra_defrtr;
+	__u32 ra_defrtr_metric;
+	__s32 accept_ra_min_hop_limit;
+	__s32 accept_ra_min_lft;
+	__s32 accept_ra_pinfo;
+	__s32 ignore_routes_with_linkdown;
+	__s32 accept_ra_rtr_pref;
+	__s32 rtr_probe_interval;
+	__s32 accept_ra_rt_info_min_plen;
+	__s32 accept_ra_rt_info_max_plen;
+	__s32 accept_ra_rt_table;
+	__s32 proxy_ndp;
+	__s32 accept_source_route;
+	__s32 accept_ra_from_local;
+	__s32 optimistic_dad;
+	__s32 use_optimistic;
+	atomic_t mc_forwarding;
+	__s32 disable_ipv6;
+	__s32 drop_unicast_in_l2_multicast;
+	__s32 accept_dad;
+	__s32 force_tllao;
+	__s32 ndisc_notify;
+	__s32 suppress_frag_ndisc;
+	__s32 accept_ra_mtu;
+	__s32 drop_unsolicited_na;
+	__s32 accept_untracked_na;
+	struct ipv6_stable_secret stable_secret;
+	__s32 use_oif_addrs_only;
+	__s32 keep_addr_on_down;
+	__s32 seg6_enabled;
+	__u32 enhanced_dad;
+	__u32 addr_gen_mode;
+	__s32 disable_policy;
+	__s32 ndisc_tclass;
+	__s32 rpl_seg_enabled;
+	__u32 ioam6_id;
+	__u32 ioam6_id_wide;
+	__u8 ioam6_enabled;
+	__u8 ndisc_evict_nocarrier;
+	struct ctl_table_header *sysctl_header;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct rtnl_link_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+	__u64 collisions;
+	__u64 rx_length_errors;
+	__u64 rx_over_errors;
+	__u64 rx_crc_errors;
+	__u64 rx_frame_errors;
+	__u64 rx_fifo_errors;
+	__u64 rx_missed_errors;
+	__u64 tx_aborted_errors;
+	__u64 tx_carrier_errors;
+	__u64 tx_fifo_errors;
+	__u64 tx_heartbeat_errors;
+	__u64 tx_window_errors;
+	__u64 rx_compressed;
+	__u64 tx_compressed;
+	__u64 rx_nohandler;
+	__u64 rx_otherhost_dropped;
+};
+
+struct ifla_vf_info {
+	__u32 vf;
+	__u8 mac[32];
+	__u32 vlan;
+	__u32 qos;
+	__u32 spoofchk;
+	__u32 linkstate;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+	__u32 rss_query_en;
+	__u32 trusted;
+	__be16 vlan_proto;
+};
+
+struct ifla_vf_stats {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 broadcast;
+	__u64 multicast;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+};
+
+struct ifla_vf_guid {
+	__u32 vf;
+	__u64 guid;
+};
+
+struct ndmsg {
+	__u8 ndm_family;
+	__u8 ndm_pad1;
+	__u16 ndm_pad2;
+	__s32 ndm_ifindex;
+	__u16 ndm_state;
+	__u8 ndm_flags;
+	__u8 ndm_type;
+};
+
+struct netlink_callback {
+	struct sk_buff *skb;
+	const struct nlmsghdr *nlh;
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	void *data;
+	struct module *module;
+	struct netlink_ext_ack *extack;
+	u16 family;
+	u16 answer_flags;
+	u32 min_dump_alloc;
+	unsigned int prev_seq;
+	unsigned int seq;
+	bool strict_check;
+	union {
+		u8 ctx[48];
+		long args[6];
+	};
+};
+
+struct nlmsghdr {
+	__u32 nlmsg_len;
+	__u16 nlmsg_type;
+	__u16 nlmsg_flags;
+	__u32 nlmsg_seq;
+	__u32 nlmsg_pid;
+};
+
+struct netdev_phys_item_id {
+	unsigned char id[32];
+	unsigned char id_len;
+};
+
+enum bpf_netdev_command {
+	XDP_SETUP_PROG = 0,
+	XDP_SETUP_PROG_HW = 1,
+	BPF_OFFLOAD_MAP_ALLOC = 2,
+	BPF_OFFLOAD_MAP_FREE = 3,
+	XDP_SETUP_XSK_POOL = 4,
+};
+
+struct bpf_offloaded_map;
+
+struct xsk_buff_pool;
+
+struct netdev_bpf {
+	enum bpf_netdev_command command;
+	union {
+		struct {
+			u32 flags;
+			struct bpf_prog *prog;
+			struct netlink_ext_ack *extack;
+		};
+		struct {
+			struct bpf_offloaded_map *offmap;
+		};
+		struct {
+			struct xsk_buff_pool *pool;
+			u16 queue_id;
+		} xsk;
+	};
+};
+
+struct net_device_path_ctx {
+	const struct net_device *dev;
+	u8 daddr[6];
+	int num_vlans;
+	struct {
+		u16 id;
+		__be16 proto;
+	} vlan[2];
+};
+
+enum net_device_path_type {
+	DEV_PATH_ETHERNET = 0,
+	DEV_PATH_VLAN = 1,
+	DEV_PATH_BRIDGE = 2,
+	DEV_PATH_PPPOE = 3,
+	DEV_PATH_DSA = 4,
+	DEV_PATH_MTK_WDMA = 5,
+};
+
+struct net_device_path {
+	enum net_device_path_type type;
+	const struct net_device *dev;
+	union {
+		struct {
+			u16 id;
+			__be16 proto;
+			u8 h_dest[6];
+		} encap;
+		struct {
+			enum {
+				DEV_PATH_BR_VLAN_KEEP = 0,
+				DEV_PATH_BR_VLAN_TAG = 1,
+				DEV_PATH_BR_VLAN_UNTAG = 2,
+				DEV_PATH_BR_VLAN_UNTAG_HW = 3,
+			} vlan_mode;
+			u16 vlan_id;
+			__be16 vlan_proto;
+		} bridge;
+		struct {
+			int port;
+			u16 proto;
+		} dsa;
+		struct {
+			u8 wdma_idx;
+			u8 queue;
+			u16 wcid;
+			u8 bss;
+		} mtk_wdma;
+	};
+};
+
+struct skb_shared_hwtstamps {
+	union {
+		ktime_t hwtstamp;
+		void *netdev_data;
+	};
+};
+
+enum hwtstamp_source {
+	HWTSTAMP_SOURCE_NETDEV = 0,
+	HWTSTAMP_SOURCE_PHYLIB = 1,
+};
+
+struct kernel_hwtstamp_config {
+	int flags;
+	int tx_type;
+	int rx_filter;
+	struct ifreq *ifr;
+	bool copied_to_user;
+	enum hwtstamp_source source;
+};
+
+enum xdp_rss_hash_type {
+	XDP_RSS_L3_IPV4 = 1,
+	XDP_RSS_L3_IPV6 = 2,
+	XDP_RSS_L3_DYNHDR = 4,
+	XDP_RSS_L4 = 8,
+	XDP_RSS_L4_TCP = 16,
+	XDP_RSS_L4_UDP = 32,
+	XDP_RSS_L4_SCTP = 64,
+	XDP_RSS_L4_IPSEC = 128,
+	XDP_RSS_TYPE_NONE = 0,
+	XDP_RSS_TYPE_L2 = 0,
+	XDP_RSS_TYPE_L3_IPV4 = 1,
+	XDP_RSS_TYPE_L3_IPV6 = 2,
+	XDP_RSS_TYPE_L3_IPV4_OPT = 5,
+	XDP_RSS_TYPE_L3_IPV6_EX = 6,
+	XDP_RSS_TYPE_L4_ANY = 8,
+	XDP_RSS_TYPE_L4_IPV4_TCP = 25,
+	XDP_RSS_TYPE_L4_IPV4_UDP = 41,
+	XDP_RSS_TYPE_L4_IPV4_SCTP = 73,
+	XDP_RSS_TYPE_L4_IPV4_IPSEC = 137,
+	XDP_RSS_TYPE_L4_IPV6_TCP = 26,
+	XDP_RSS_TYPE_L4_IPV6_UDP = 42,
+	XDP_RSS_TYPE_L4_IPV6_SCTP = 74,
+	XDP_RSS_TYPE_L4_IPV6_IPSEC = 138,
+	XDP_RSS_TYPE_L4_IPV6_TCP_EX = 30,
+	XDP_RSS_TYPE_L4_IPV6_UDP_EX = 46,
+	XDP_RSS_TYPE_L4_IPV6_SCTP_EX = 78,
+};
+
+struct xdp_md;
+
+struct xdp_metadata_ops {
+	int (*xmo_rx_timestamp)(const struct xdp_md *, u64 *);
+	int (*xmo_rx_hash)(const struct xdp_md *, u32 *, enum xdp_rss_hash_type *);
+};
+
+struct net_device_core_stats {
+	unsigned long rx_dropped;
+	unsigned long tx_dropped;
+	unsigned long rx_nohandler;
+	unsigned long rx_otherhost_dropped;
+};
+
+struct iw_request_info;
+
+union iwreq_data;
+
+typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *);
+
+struct iw_priv_args;
+
+struct iw_statistics;
+
+struct iw_handler_def {
+	const iw_handler *standard;
+	__u16 num_standard;
+	__u16 num_private;
+	__u16 num_private_args;
+	const iw_handler *private;
+	const struct iw_priv_args *private_args;
+	struct iw_statistics * (*get_wireless_stats)(struct net_device *);
+};
+
+enum ethtool_phys_id_state {
+	ETHTOOL_ID_INACTIVE = 0,
+	ETHTOOL_ID_ACTIVE = 1,
+	ETHTOOL_ID_ON = 2,
+	ETHTOOL_ID_OFF = 3,
+};
+
+struct ethtool_drvinfo;
+
+struct ethtool_regs;
+
+struct ethtool_wolinfo;
+
+struct ethtool_link_ext_state_info;
+
+struct ethtool_link_ext_stats;
+
+struct ethtool_eeprom;
+
+struct ethtool_coalesce;
+
+struct kernel_ethtool_coalesce;
+
+struct ethtool_ringparam;
+
+struct kernel_ethtool_ringparam;
+
+struct ethtool_pause_stats;
+
+struct ethtool_pauseparam;
+
+struct ethtool_test;
+
+struct ethtool_stats;
+
+struct ethtool_rxnfc;
+
+struct ethtool_flash;
+
+struct ethtool_channels;
+
+struct ethtool_dump;
+
+struct ethtool_ts_info;
+
+struct ethtool_modinfo;
+
+struct ethtool_eee;
+
+struct ethtool_tunable;
+
+struct ethtool_link_ksettings;
+
+struct ethtool_fec_stats;
+
+struct ethtool_fecparam;
+
+struct ethtool_module_eeprom;
+
+struct ethtool_eth_phy_stats;
+
+struct ethtool_eth_mac_stats;
+
+struct ethtool_eth_ctrl_stats;
+
+struct ethtool_rmon_stats;
+
+struct ethtool_rmon_hist_range;
+
+struct ethtool_module_power_mode_params;
+
+struct ethtool_mm_state;
+
+struct ethtool_mm_cfg;
+
+struct ethtool_mm_stats;
+
+struct ethtool_ops {
+	u32 cap_link_lanes_supported: 1;
+	u32 supported_coalesce_params;
+	u32 supported_ring_params;
+	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
+	int (*get_regs_len)(struct net_device *);
+	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
+	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
+	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
+	u32 (*get_msglevel)(struct net_device *);
+	void (*set_msglevel)(struct net_device *, u32);
+	int (*nway_reset)(struct net_device *);
+	u32 (*get_link)(struct net_device *);
+	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
+	void (*get_link_ext_stats)(struct net_device *, struct ethtool_link_ext_stats *);
+	int (*get_eeprom_len)(struct net_device *);
+	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
+	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
+	void (*get_strings)(struct net_device *, u32, u8 *);
+	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
+	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*begin)(struct net_device *);
+	void (*complete)(struct net_device *);
+	u32 (*get_priv_flags)(struct net_device *);
+	int (*set_priv_flags)(struct net_device *, u32);
+	int (*get_sset_count)(struct net_device *, int);
+	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
+	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
+	int (*flash_device)(struct net_device *, struct ethtool_flash *);
+	int (*reset)(struct net_device *, u32 *);
+	u32 (*get_rxfh_key_size)(struct net_device *);
+	u32 (*get_rxfh_indir_size)(struct net_device *);
+	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
+	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
+	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
+	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
+	void (*get_channels)(struct net_device *, struct ethtool_channels *);
+	int (*set_channels)(struct net_device *, struct ethtool_channels *);
+	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
+	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
+	int (*set_dump)(struct net_device *, struct ethtool_dump *);
+	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
+	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
+	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_eee)(struct net_device *, struct ethtool_eee *);
+	int (*set_eee)(struct net_device *, struct ethtool_eee *);
+	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
+	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
+	void (*get_fec_stats)(struct net_device *, struct ethtool_fec_stats *);
+	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_module_eeprom_by_page)(struct net_device *, const struct ethtool_module_eeprom *, struct netlink_ext_ack *);
+	void (*get_eth_phy_stats)(struct net_device *, struct ethtool_eth_phy_stats *);
+	void (*get_eth_mac_stats)(struct net_device *, struct ethtool_eth_mac_stats *);
+	void (*get_eth_ctrl_stats)(struct net_device *, struct ethtool_eth_ctrl_stats *);
+	void (*get_rmon_stats)(struct net_device *, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
+	int (*get_module_power_mode)(struct net_device *, struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+	int (*set_module_power_mode)(struct net_device *, const struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+	int (*get_mm)(struct net_device *, struct ethtool_mm_state *);
+	int (*set_mm)(struct net_device *, struct ethtool_mm_cfg *, struct netlink_ext_ack *);
+	void (*get_mm_stats)(struct net_device *, struct ethtool_mm_stats *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct nd_opt_hdr;
+
+struct ndisc_options;
+
+struct prefix_info;
+
+struct ndisc_ops {
+	int (*is_useropt)(u8);
+	int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);
+	void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);
+	int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);
+	void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);
+	void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);
+};
+
+struct header_ops {
+	int (*create)(struct sk_buff *, struct net_device *, unsigned short, const void *, const void *, unsigned int);
+	int (*parse)(const struct sk_buff *, unsigned char *);
+	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
+	void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);
+	bool (*validate)(const char *, unsigned int);
+	__be16 (*parse_protocol)(const struct sk_buff *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct ipv4_devconf {
+	void *sysctl;
+	int data[33];
+	unsigned long state[1];
+};
+
+struct in_ifaddr;
+
+struct ip_mc_list;
+
+struct in_device {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	refcount_t refcnt;
+	int dead;
+	struct in_ifaddr __attribute__((btf_type_tag("rcu"))) *ifa_list;
+	struct ip_mc_list __attribute__((btf_type_tag("rcu"))) *mc_list;
+	struct ip_mc_list __attribute__((btf_type_tag("rcu"))) * __attribute__((btf_type_tag("rcu"))) *mc_hash;
+	int mc_count;
+	spinlock_t mc_tomb_lock;
+	struct ip_mc_list *mc_tomb;
+	unsigned long mr_v1_seen;
+	unsigned long mr_v2_seen;
+	unsigned long mr_maxdelay;
+	unsigned long mr_qi;
+	unsigned long mr_qri;
+	unsigned char mr_qrv;
+	unsigned char mr_gq_running;
+	u32 mr_ifc_count;
+	struct timer_list mr_gq_timer;
+	struct timer_list mr_ifc_timer;
+	struct neigh_parms *arp_parms;
+	struct ipv4_devconf cnf;
+	struct callback_head callback_head;
+};
+
+struct icmpv6_mib_device;
+
+struct icmpv6msg_mib_device;
+
+struct ipv6_devstat {
+	struct proc_dir_entry *proc_dir_entry;
+	struct ipstats_mib __attribute__((btf_type_tag("percpu"))) *ipv6;
+	struct icmpv6_mib_device *icmpv6dev;
+	struct icmpv6msg_mib_device *icmpv6msgdev;
+};
+
+struct ifmcaddr6;
+
+struct ifacaddr6;
+
+struct inet6_dev {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head addr_list;
+	struct ifmcaddr6 __attribute__((btf_type_tag("rcu"))) *mc_list;
+	struct ifmcaddr6 __attribute__((btf_type_tag("rcu"))) *mc_tomb;
+	unsigned char mc_qrv;
+	unsigned char mc_gq_running;
+	unsigned char mc_ifc_count;
+	unsigned char mc_dad_count;
+	unsigned long mc_v1_seen;
+	unsigned long mc_qi;
+	unsigned long mc_qri;
+	unsigned long mc_maxdelay;
+	struct delayed_work mc_gq_work;
+	struct delayed_work mc_ifc_work;
+	struct delayed_work mc_dad_work;
+	struct delayed_work mc_query_work;
+	struct delayed_work mc_report_work;
+	struct sk_buff_head mc_query_queue;
+	struct sk_buff_head mc_report_queue;
+	spinlock_t mc_query_lock;
+	spinlock_t mc_report_lock;
+	struct mutex mc_lock;
+	struct ifacaddr6 *ac_list;
+	rwlock_t lock;
+	refcount_t refcnt;
+	__u32 if_flags;
+	int dead;
+	u32 desync_factor;
+	struct list_head tempaddr_list;
+	struct in6_addr token;
+	struct neigh_parms *nd_parms;
+	struct ipv6_devconf cnf;
+	struct ipv6_devstat stats;
+	struct timer_list rs_timer;
+	__s32 rs_interval;
+	__u8 rs_probes;
+	unsigned long tstamp;
+	struct callback_head rcu;
+	unsigned int ra_mtu;
+};
+
+struct ip6_sf_list;
+
+struct ifmcaddr6 {
+	struct in6_addr mca_addr;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 __attribute__((btf_type_tag("rcu"))) *next;
+	struct ip6_sf_list __attribute__((btf_type_tag("rcu"))) *mca_sources;
+	struct ip6_sf_list __attribute__((btf_type_tag("rcu"))) *mca_tomb;
+	unsigned int mca_sfmode;
+	unsigned char mca_crcount;
+	unsigned long mca_sfcount[2];
+	struct delayed_work mca_work;
+	unsigned int mca_flags;
+	int mca_users;
+	refcount_t mca_refcnt;
+	unsigned long mca_cstamp;
+	unsigned long mca_tstamp;
+	struct callback_head rcu;
+};
+
+struct ip6_sf_list {
+	struct ip6_sf_list __attribute__((btf_type_tag("rcu"))) *sf_next;
+	struct in6_addr sf_addr;
+	unsigned long sf_count[2];
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+	struct callback_head rcu;
+};
+
+struct ifacaddr6 {
+	struct in6_addr aca_addr;
+	struct fib6_info *aca_rt;
+	struct ifacaddr6 *aca_next;
+	struct hlist_node aca_addr_lst;
+	int aca_users;
+	refcount_t aca_refcnt;
+	unsigned long aca_cstamp;
+	unsigned long aca_tstamp;
+	struct callback_head rcu;
+};
+
+struct icmpv6_mib_device {
+	atomic_long_t mibs[7];
+};
+
+struct icmpv6msg_mib_device {
+	atomic_long_t mibs[512];
+};
+
+struct vlan_group {
+	unsigned int nr_vlan_devs;
+	struct hlist_node hlist;
+	struct net_device **vlan_devices_arrays[16];
+};
+
+struct vlan_info {
+	struct net_device *real_dev;
+	struct vlan_group grp;
+	struct list_head vid_list;
+	unsigned int nr_vids;
+	struct callback_head rcu;
+};
+
+enum bpf_prog_type {
+	BPF_PROG_TYPE_UNSPEC = 0,
+	BPF_PROG_TYPE_SOCKET_FILTER = 1,
+	BPF_PROG_TYPE_KPROBE = 2,
+	BPF_PROG_TYPE_SCHED_CLS = 3,
+	BPF_PROG_TYPE_SCHED_ACT = 4,
+	BPF_PROG_TYPE_TRACEPOINT = 5,
+	BPF_PROG_TYPE_XDP = 6,
+	BPF_PROG_TYPE_PERF_EVENT = 7,
+	BPF_PROG_TYPE_CGROUP_SKB = 8,
+	BPF_PROG_TYPE_CGROUP_SOCK = 9,
+	BPF_PROG_TYPE_LWT_IN = 10,
+	BPF_PROG_TYPE_LWT_OUT = 11,
+	BPF_PROG_TYPE_LWT_XMIT = 12,
+	BPF_PROG_TYPE_SOCK_OPS = 13,
+	BPF_PROG_TYPE_SK_SKB = 14,
+	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
+	BPF_PROG_TYPE_SK_MSG = 16,
+	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
+	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
+	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
+	BPF_PROG_TYPE_LIRC_MODE2 = 20,
+	BPF_PROG_TYPE_SK_REUSEPORT = 21,
+	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
+	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
+	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
+	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
+	BPF_PROG_TYPE_TRACING = 26,
+	BPF_PROG_TYPE_STRUCT_OPS = 27,
+	BPF_PROG_TYPE_EXT = 28,
+	BPF_PROG_TYPE_LSM = 29,
+	BPF_PROG_TYPE_SK_LOOKUP = 30,
+	BPF_PROG_TYPE_SYSCALL = 31,
+	BPF_PROG_TYPE_NETFILTER = 32,
+	BPF_PROG_TYPE_FUSE = 33,
+};
+
+enum bpf_attach_type {
+	BPF_CGROUP_INET_INGRESS = 0,
+	BPF_CGROUP_INET_EGRESS = 1,
+	BPF_CGROUP_INET_SOCK_CREATE = 2,
+	BPF_CGROUP_SOCK_OPS = 3,
+	BPF_SK_SKB_STREAM_PARSER = 4,
+	BPF_SK_SKB_STREAM_VERDICT = 5,
+	BPF_CGROUP_DEVICE = 6,
+	BPF_SK_MSG_VERDICT = 7,
+	BPF_CGROUP_INET4_BIND = 8,
+	BPF_CGROUP_INET6_BIND = 9,
+	BPF_CGROUP_INET4_CONNECT = 10,
+	BPF_CGROUP_INET6_CONNECT = 11,
+	BPF_CGROUP_INET4_POST_BIND = 12,
+	BPF_CGROUP_INET6_POST_BIND = 13,
+	BPF_CGROUP_UDP4_SENDMSG = 14,
+	BPF_CGROUP_UDP6_SENDMSG = 15,
+	BPF_LIRC_MODE2 = 16,
+	BPF_FLOW_DISSECTOR = 17,
+	BPF_CGROUP_SYSCTL = 18,
+	BPF_CGROUP_UDP4_RECVMSG = 19,
+	BPF_CGROUP_UDP6_RECVMSG = 20,
+	BPF_CGROUP_GETSOCKOPT = 21,
+	BPF_CGROUP_SETSOCKOPT = 22,
+	BPF_TRACE_RAW_TP = 23,
+	BPF_TRACE_FENTRY = 24,
+	BPF_TRACE_FEXIT = 25,
+	BPF_MODIFY_RETURN = 26,
+	BPF_LSM_MAC = 27,
+	BPF_TRACE_ITER = 28,
+	BPF_CGROUP_INET4_GETPEERNAME = 29,
+	BPF_CGROUP_INET6_GETPEERNAME = 30,
+	BPF_CGROUP_INET4_GETSOCKNAME = 31,
+	BPF_CGROUP_INET6_GETSOCKNAME = 32,
+	BPF_XDP_DEVMAP = 33,
+	BPF_CGROUP_INET_SOCK_RELEASE = 34,
+	BPF_XDP_CPUMAP = 35,
+	BPF_SK_LOOKUP = 36,
+	BPF_XDP = 37,
+	BPF_SK_SKB_VERDICT = 38,
+	BPF_SK_REUSEPORT_SELECT = 39,
+	BPF_SK_REUSEPORT_SELECT_OR_MIGRATE = 40,
+	BPF_PERF_EVENT = 41,
+	BPF_TRACE_KPROBE_MULTI = 42,
+	BPF_LSM_CGROUP = 43,
+	BPF_STRUCT_OPS = 44,
+	BPF_NETFILTER = 45,
+	BPF_TCX_INGRESS = 46,
+	BPF_TCX_EGRESS = 47,
+	BPF_TRACE_UPROBE_MULTI = 48,
+	__MAX_BPF_ATTACH_TYPE = 49,
+};
+
+struct sock_filter {
+	__u16 code;
+	__u8 jt;
+	__u8 jf;
+	__u32 k;
+};
+
+struct bpf_insn {
+	__u8 code;
+	__u8 dst_reg: 4;
+	__u8 src_reg: 4;
+	__s16 off;
+	__s32 imm;
+};
+
+struct bpf_prog_stats;
+
+struct bpf_prog_aux;
+
+struct sock_fprog_kern;
+
+struct bpf_prog {
+	u16 pages;
+	u16 jited: 1;
+	u16 jit_requested: 1;
+	u16 gpl_compatible: 1;
+	u16 cb_access: 1;
+	u16 dst_needed: 1;
+	u16 blinding_requested: 1;
+	u16 blinded: 1;
+	u16 is_func: 1;
+	u16 kprobe_override: 1;
+	u16 has_callchain_buf: 1;
+	u16 enforce_expected_attach_type: 1;
+	u16 call_get_stack: 1;
+	u16 call_get_func_ip: 1;
+	u16 tstamp_type_access: 1;
+	enum bpf_prog_type type;
+	enum bpf_attach_type expected_attach_type;
+	u32 len;
+	u32 jited_len;
+	u8 tag[8];
+	struct bpf_prog_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	int __attribute__((btf_type_tag("percpu"))) *active;
+	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
+	struct bpf_prog_aux *aux;
+	struct sock_fprog_kern *orig_prog;
+	u64 android_kabi_reserved1;
+	union {
+		struct {
+			struct {} __empty_insns;
+			struct sock_filter insns[0];
+		};
+		struct {
+			struct {} __empty_insnsi;
+			struct bpf_insn insnsi[0];
+		};
+	};
+};
+
+struct bpf_mprog_fp {
+	struct bpf_prog *prog;
+};
+
+struct bpf_mprog_bundle;
+
+struct bpf_mprog_entry {
+	struct bpf_mprog_fp fp_items[64];
+	struct bpf_mprog_bundle *parent;
+};
+
+struct dql {
+	unsigned int num_queued;
+	unsigned int adj_limit;
+	unsigned int last_obj_cnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int limit;
+	unsigned int num_completed;
+	unsigned int prev_ovlimit;
+	unsigned int prev_num_queued;
+	unsigned int prev_last_obj_cnt;
+	unsigned int lowest_slack;
+	unsigned long slack_start_time;
+	unsigned int max_limit;
+	unsigned int min_limit;
+	unsigned int slack_hold_time;
+	long: 64;
+	long: 64;
+};
+
+struct netdev_queue {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct Qdisc __attribute__((btf_type_tag("rcu"))) *qdisc;
+	struct Qdisc __attribute__((btf_type_tag("rcu"))) *qdisc_sleeping;
+	struct kobject kobj;
+	unsigned long tx_maxrate;
+	atomic_long_t trans_timeout;
+	struct net_device *sb_dev;
+	struct xsk_buff_pool *pool;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t _xmit_lock;
+	int xmit_lock_owner;
+	unsigned long trans_start;
+	unsigned long state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dql dql;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct qdisc_skb_head {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+typedef struct {
+	local64_t v;
+} u64_stats_t;
+
+struct gnet_stats_basic_sync {
+	u64_stats_t bytes;
+	u64_stats_t packets;
+	struct u64_stats_sync syncp;
+};
+
+struct gnet_stats_queue {
+	__u32 qlen;
+	__u32 backlog;
+	__u32 drops;
+	__u32 requeues;
+	__u32 overlimits;
+};
+
+struct Qdisc_ops;
+
+struct qdisc_size_table;
+
+struct net_rate_estimator;
+
+struct Qdisc {
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	unsigned int flags;
+	u32 limit;
+	const struct Qdisc_ops *ops;
+	struct qdisc_size_table __attribute__((btf_type_tag("rcu"))) *stab;
+	struct hlist_node hash;
+	u32 handle;
+	u32 parent;
+	struct netdev_queue *dev_queue;
+	struct net_rate_estimator __attribute__((btf_type_tag("rcu"))) *rate_est;
+	struct gnet_stats_basic_sync __attribute__((btf_type_tag("percpu"))) *cpu_bstats;
+	struct gnet_stats_queue __attribute__((btf_type_tag("percpu"))) *cpu_qstats;
+	int pad;
+	refcount_t refcnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head gso_skb;
+	struct qdisc_skb_head q;
+	struct gnet_stats_basic_sync bstats;
+	struct gnet_stats_queue qstats;
+	unsigned long state;
+	unsigned long state2;
+	struct Qdisc *next_sched;
+	struct sk_buff_head skb_bad_txq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t busylock;
+	spinlock_t seqlock;
+	struct callback_head rcu;
+	netdevice_tracker dev_tracker;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long privdata[0];
+};
+
+struct xdp_dev_bulk_queue {
+	struct xdp_frame *q[16];
+	struct list_head flush_node;
+	struct net_device *dev;
+	struct net_device *dev_rx;
+	struct bpf_prog *xdp_prog;
+	unsigned int count;
+};
+
+struct xps_map;
+
+struct xps_dev_maps {
+	struct callback_head rcu;
+	unsigned int nr_ids;
+	s16 num_tc;
+	struct xps_map __attribute__((btf_type_tag("rcu"))) *attr_map[0];
+};
+
+struct xps_map {
+	unsigned int len;
+	unsigned int alloc_len;
+	struct callback_head rcu;
+	u16 queues[0];
+};
+
+struct pcpu_lstats {
+	u64_stats_t packets;
+	u64_stats_t bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct pcpu_sw_netstats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct pcpu_dstats {
+	u64 rx_packets;
+	u64 rx_bytes;
+	u64 rx_drops;
+	u64 tx_packets;
+	u64 tx_bytes;
+	u64 tx_drops;
+	struct u64_stats_sync syncp;
+	long: 64;
+	long: 64;
+};
+
+struct rtnl_link_ops {
+	struct list_head list;
+	const char *kind;
+	size_t priv_size;
+	struct net_device * (*alloc)(struct nlattr **, const char *, unsigned char, unsigned int, unsigned int);
+	void (*setup)(struct net_device *);
+	bool netns_refund;
+	unsigned int maxtype;
+	const struct nla_policy *policy;
+	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	void (*dellink)(struct net_device *, struct list_head *);
+	size_t (*get_size)(const struct net_device *);
+	int (*fill_info)(struct sk_buff *, const struct net_device *);
+	size_t (*get_xstats_size)(const struct net_device *);
+	int (*fill_xstats)(struct sk_buff *, const struct net_device *);
+	unsigned int (*get_num_tx_queues)();
+	unsigned int (*get_num_rx_queues)();
+	unsigned int slave_maxtype;
+	const struct nla_policy *slave_policy;
+	int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	size_t (*get_slave_size)(const struct net_device *, const struct net_device *);
+	int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);
+	struct net * (*get_link_net)(const struct net_device *);
+	size_t (*get_linkxstats_size)(const struct net_device *, int);
+	int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);
+};
+
+struct netprio_map {
+	struct callback_head rcu;
+	u32 priomap_len;
+	u32 priomap[0];
+};
+
+struct macsec_context;
+
+struct macsec_ops {
+	int (*mdo_dev_open)(struct macsec_context *);
+	int (*mdo_dev_stop)(struct macsec_context *);
+	int (*mdo_add_secy)(struct macsec_context *);
+	int (*mdo_upd_secy)(struct macsec_context *);
+	int (*mdo_del_secy)(struct macsec_context *);
+	int (*mdo_add_rxsc)(struct macsec_context *);
+	int (*mdo_upd_rxsc)(struct macsec_context *);
+	int (*mdo_del_rxsc)(struct macsec_context *);
+	int (*mdo_add_rxsa)(struct macsec_context *);
+	int (*mdo_upd_rxsa)(struct macsec_context *);
+	int (*mdo_del_rxsa)(struct macsec_context *);
+	int (*mdo_add_txsa)(struct macsec_context *);
+	int (*mdo_upd_txsa)(struct macsec_context *);
+	int (*mdo_del_txsa)(struct macsec_context *);
+	int (*mdo_get_dev_stats)(struct macsec_context *);
+	int (*mdo_get_tx_sc_stats)(struct macsec_context *);
+	int (*mdo_get_tx_sa_stats)(struct macsec_context *);
+	int (*mdo_get_rx_sc_stats)(struct macsec_context *);
+	int (*mdo_get_rx_sa_stats)(struct macsec_context *);
+	bool rx_uses_md_dst;
+};
+
+struct udp_tunnel_nic_table_info {
+	unsigned int n_entries;
+	unsigned int tunnel_types;
+};
+
+struct udp_tunnel_info;
+
+struct udp_tunnel_nic_shared;
+
+struct udp_tunnel_nic_info {
+	int (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*sync_table)(struct net_device *, unsigned int);
+	struct udp_tunnel_nic_shared *shared;
+	unsigned int flags;
+	struct udp_tunnel_nic_table_info tables[4];
+};
+
+struct rtnl_hw_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+};
+
+typedef enum {
+	SS_FREE = 0,
+	SS_UNCONNECTED = 1,
+	SS_CONNECTING = 2,
+	SS_CONNECTED = 3,
+	SS_DISCONNECTING = 4,
+} socket_state;
+
+struct socket_wq {
+	wait_queue_head_t wait;
+	struct fasync_struct *fasync_list;
+	unsigned long flags;
+	struct callback_head rcu;
+	long: 64;
+};
+
+struct proto_ops;
+
+struct socket {
+	socket_state state;
+	short type;
+	unsigned long flags;
+	struct file *file;
+	struct sock *sk;
+	const struct proto_ops *ops;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct socket_wq wq;
+};
+
+typedef struct {
+	size_t written;
+	size_t count;
+	union {
+		char __attribute__((btf_type_tag("user"))) *buf;
+		void *data;
+	} arg;
+	int error;
+} read_descriptor_t;
+
+typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t);
+
+typedef int (*skb_read_actor_t)(struct sock *, struct sk_buff *);
+
+struct proto_ops {
+	int family;
+	struct module *owner;
+	int (*release)(struct socket *);
+	int (*bind)(struct socket *, struct sockaddr *, int);
+	int (*connect)(struct socket *, struct sockaddr *, int, int);
+	int (*socketpair)(struct socket *, struct socket *);
+	int (*accept)(struct socket *, struct socket *, int, bool);
+	int (*getname)(struct socket *, struct sockaddr *, int);
+	__poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *);
+	int (*ioctl)(struct socket *, unsigned int, unsigned long);
+	int (*compat_ioctl)(struct socket *, unsigned int, unsigned long);
+	int (*gettstamp)(struct socket *, void __attribute__((btf_type_tag("user"))) *, bool, bool);
+	int (*listen)(struct socket *, int);
+	int (*shutdown)(struct socket *, int);
+	int (*setsockopt)(struct socket *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct socket *, int, int, char __attribute__((btf_type_tag("user"))) *, int __attribute__((btf_type_tag("user"))) *);
+	void (*show_fdinfo)(struct seq_file *, struct socket *);
+	int (*sendmsg)(struct socket *, struct msghdr *, size_t);
+	int (*recvmsg)(struct socket *, struct msghdr *, size_t, int);
+	int (*mmap)(struct file *, struct socket *, struct vm_area_struct *);
+	ssize_t (*splice_read)(struct socket *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	void (*splice_eof)(struct socket *);
+	int (*set_peek_off)(struct sock *, int);
+	int (*peek_len)(struct socket *);
+	int (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t);
+	int (*read_skb)(struct sock *, skb_read_actor_t);
+	int (*sendmsg_locked)(struct sock *, struct msghdr *, size_t);
+	int (*set_rcvlowat)(struct sock *, int);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct request_sock;
+
+struct request_sock_ops {
+	int family;
+	unsigned int obj_size;
+	struct kmem_cache *slab;
+	char *slab_name;
+	int (*rtx_syn_ack)(const struct sock *, struct request_sock *);
+	void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);
+	void (*send_reset)(const struct sock *, struct sk_buff *);
+	void (*destructor)(struct request_sock *);
+	void (*syn_ack_timeout)(const struct request_sock *);
+};
+
+struct saved_syn;
+
+struct request_sock {
+	struct sock_common __req_common;
+	struct request_sock *dl_next;
+	u16 mss;
+	u8 num_retrans;
+	u8 syncookie: 1;
+	u8 num_timeout: 7;
+	u32 ts_recent;
+	struct timer_list rsk_timer;
+	const struct request_sock_ops *rsk_ops;
+	struct sock *sk;
+	struct saved_syn *saved_syn;
+	u32 secid;
+	u32 peer_secid;
+	u32 timeout;
+};
+
+struct saved_syn {
+	u32 mac_hdrlen;
+	u32 network_hdrlen;
+	u32 tcp_hdrlen;
+	u8 data[0];
+};
+
+struct timewait_sock_ops {
+	struct kmem_cache *twsk_slab;
+	char *twsk_slab_name;
+	unsigned int twsk_obj_size;
+	int (*twsk_unique)(struct sock *, struct sock *, void *);
+	void (*twsk_destructor)(struct sock *);
+};
+
+struct sk_filter {
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct bpf_prog *prog;
+};
+
+struct xfrm_mark {
+	__u32 v;
+	__u32 m;
+};
+
+typedef union {
+	__be32 a4;
+	__be32 a6[4];
+	struct in6_addr in6;
+} xfrm_address_t;
+
+struct xfrm_selector {
+	xfrm_address_t daddr;
+	xfrm_address_t saddr;
+	__be16 dport;
+	__be16 dport_mask;
+	__be16 sport;
+	__be16 sport_mask;
+	__u16 family;
+	__u8 prefixlen_d;
+	__u8 prefixlen_s;
+	__u8 proto;
+	int ifindex;
+	__kernel_uid32_t user;
+};
+
+struct xfrm_lifetime_cfg {
+	__u64 soft_byte_limit;
+	__u64 hard_byte_limit;
+	__u64 soft_packet_limit;
+	__u64 hard_packet_limit;
+	__u64 soft_add_expires_seconds;
+	__u64 hard_add_expires_seconds;
+	__u64 soft_use_expires_seconds;
+	__u64 hard_use_expires_seconds;
+};
+
+struct xfrm_lifetime_cur {
+	__u64 bytes;
+	__u64 packets;
+	__u64 add_time;
+	__u64 use_time;
+};
+
+struct xfrm_policy_walk_entry {
+	struct list_head all;
+	u8 dead;
+};
+
+struct xfrm_policy_queue {
+	struct sk_buff_head hold_queue;
+	struct timer_list hold_timer;
+	unsigned long timeout;
+};
+
+struct xfrm_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u8 proto;
+};
+
+struct xfrm_tmpl {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	unsigned short encap_family;
+	u32 reqid;
+	u8 mode;
+	u8 share;
+	u8 optional;
+	u8 allalgs;
+	u32 aalgos;
+	u32 ealgos;
+	u32 calgos;
+};
+
+struct xfrm_dev_offload {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net_device *real_dev;
+	unsigned long offload_handle;
+	u8 dir: 2;
+	u8 type: 2;
+	u8 flags: 2;
+};
+
+struct xfrm_sec_ctx;
+
+struct xfrm_policy {
+	possible_net_t xp_net;
+	struct hlist_node bydst;
+	struct hlist_node byidx;
+	rwlock_t lock;
+	refcount_t refcnt;
+	u32 pos;
+	struct timer_list timer;
+	atomic_t genid;
+	u32 priority;
+	u32 index;
+	u32 if_id;
+	struct xfrm_mark mark;
+	struct xfrm_selector selector;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_policy_walk_entry walk;
+	struct xfrm_policy_queue polq;
+	bool bydst_reinsert;
+	u8 type;
+	u8 action;
+	u8 flags;
+	u8 xfrm_nr;
+	u16 family;
+	struct xfrm_sec_ctx *security;
+	struct xfrm_tmpl xfrm_vec[6];
+	struct hlist_node bydst_inexact_list;
+	struct callback_head rcu;
+	struct xfrm_dev_offload xdo;
+};
+
+struct sock_reuseport {
+	struct callback_head rcu;
+	u16 max_socks;
+	u16 num_socks;
+	u16 num_closed_socks;
+	u16 incoming_cpu;
+	unsigned int synq_overflow_ts;
+	unsigned int reuseport_id;
+	unsigned int bind_inany: 1;
+	unsigned int has_conns: 1;
+	struct bpf_prog __attribute__((btf_type_tag("rcu"))) *prog;
+	struct sock *socks[0];
+};
+
+struct fs_struct {
+	int users;
+	spinlock_t lock;
+	seqcount_spinlock_t seq;
+	int umask;
+	int in_exec;
+	struct path root;
+	struct path pwd;
+};
+
+struct ld_semaphore {
+	atomic_long_t count;
+	raw_spinlock_t wait_lock;
+	unsigned int wait_readers;
+	struct list_head read_wait;
+	struct list_head write_wait;
+};
+
+typedef unsigned int tcflag_t;
+
+typedef unsigned char cc_t;
+
+typedef unsigned int speed_t;
+
+struct ktermios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct winsize {
+	unsigned short ws_row;
+	unsigned short ws_col;
+	unsigned short ws_xpixel;
+	unsigned short ws_ypixel;
+};
+
+struct tty_driver;
+
+struct tty_port;
+
+struct tty_operations;
+
+struct tty_ldisc;
+
+struct tty_struct {
+	struct kref kref;
+	int index;
+	struct device *dev;
+	struct tty_driver *driver;
+	struct tty_port *port;
+	const struct tty_operations *ops;
+	struct tty_ldisc *ldisc;
+	struct ld_semaphore ldisc_sem;
+	struct mutex atomic_write_lock;
+	struct mutex legacy_mutex;
+	struct mutex throttle_mutex;
+	struct rw_semaphore termios_rwsem;
+	struct mutex winsize_mutex;
+	struct ktermios termios;
+	struct ktermios termios_locked;
+	char name[64];
+	unsigned long flags;
+	int count;
+	unsigned int receive_room;
+	struct winsize winsize;
+	struct {
+		spinlock_t lock;
+		bool stopped;
+		bool tco_stopped;
+		unsigned long unused[0];
+	} flow;
+	struct {
+		struct pid *pgrp;
+		struct pid *session;
+		spinlock_t lock;
+		unsigned char pktstatus;
+		bool packet;
+		unsigned long unused[0];
+	} ctrl;
+	bool hw_stopped;
+	bool closing;
+	int flow_change;
+	struct tty_struct *link;
+	struct fasync_struct *fasync;
+	wait_queue_head_t write_wait;
+	wait_queue_head_t read_wait;
+	struct work_struct hangup_work;
+	void *disc_data;
+	void *driver_data;
+	spinlock_t files_lock;
+	int write_cnt;
+	unsigned char *write_buf;
+	struct list_head tty_files;
+	struct work_struct SAK_work;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct tty_driver {
+	struct kref kref;
+	struct cdev **cdevs;
+	struct module *owner;
+	const char *driver_name;
+	const char *name;
+	int name_base;
+	int major;
+	int minor_start;
+	unsigned int num;
+	short type;
+	short subtype;
+	struct ktermios init_termios;
+	unsigned long flags;
+	struct proc_dir_entry *proc_entry;
+	struct tty_driver *other;
+	struct tty_struct **ttys;
+	struct tty_port **ports;
+	struct ktermios **termios;
+	void *driver_state;
+	const struct tty_operations *ops;
+	struct list_head tty_drivers;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct __kfifo {
+	unsigned int in;
+	unsigned int out;
+	unsigned int mask;
+	unsigned int esize;
+	void *data;
+};
+
+struct tty_buffer {
+	union {
+		struct tty_buffer *next;
+		struct llist_node free;
+	};
+	unsigned int used;
+	unsigned int size;
+	unsigned int commit;
+	unsigned int lookahead;
+	unsigned int read;
+	bool flags;
+	long: 0;
+	u8 data[0];
+};
+
+struct tty_bufhead {
+	struct tty_buffer *head;
+	struct work_struct work;
+	struct mutex lock;
+	atomic_t priority;
+	struct tty_buffer sentinel;
+	struct llist_head free;
+	atomic_t mem_used;
+	int mem_limit;
+	struct tty_buffer *tail;
+};
+
+struct tty_port_operations;
+
+struct tty_port_client_operations;
+
+struct tty_port {
+	struct tty_bufhead buf;
+	struct tty_struct *tty;
+	struct tty_struct *itty;
+	const struct tty_port_operations *ops;
+	const struct tty_port_client_operations *client_ops;
+	spinlock_t lock;
+	int blocked_open;
+	int count;
+	wait_queue_head_t open_wait;
+	wait_queue_head_t delta_msr_wait;
+	unsigned long flags;
+	unsigned long iflags;
+	unsigned char console: 1;
+	struct mutex mutex;
+	struct mutex buf_mutex;
+	unsigned char *xmit_buf;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			unsigned char *type;
+			const unsigned char *const_type;
+			char (*rectype)[0];
+			unsigned char *ptr;
+			const unsigned char *ptr_const;
+		};
+		unsigned char buf[0];
+	} xmit_fifo;
+	unsigned int close_delay;
+	unsigned int closing_wait;
+	int drain_delay;
+	struct kref kref;
+	void *client_data;
+	u64 android_kabi_reserved1;
+};
+
+struct tty_port_operations {
+	bool (*carrier_raised)(struct tty_port *);
+	void (*dtr_rts)(struct tty_port *, bool);
+	void (*shutdown)(struct tty_port *);
+	int (*activate)(struct tty_port *, struct tty_struct *);
+	void (*destruct)(struct tty_port *);
+	u64 android_kabi_reserved1;
+};
+
+struct tty_port_client_operations {
+	size_t (*receive_buf)(struct tty_port *, const u8 *, const u8 *, size_t);
+	void (*lookahead_buf)(struct tty_port *, const u8 *, const u8 *, size_t);
+	void (*write_wakeup)(struct tty_port *);
+};
+
+struct serial_icounter_struct;
+
+struct serial_struct;
+
+struct tty_operations {
+	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
+	int (*install)(struct tty_driver *, struct tty_struct *);
+	void (*remove)(struct tty_driver *, struct tty_struct *);
+	int (*open)(struct tty_struct *, struct file *);
+	void (*close)(struct tty_struct *, struct file *);
+	void (*shutdown)(struct tty_struct *);
+	void (*cleanup)(struct tty_struct *);
+	ssize_t (*write)(struct tty_struct *, const u8 *, size_t);
+	int (*put_char)(struct tty_struct *, u8);
+	void (*flush_chars)(struct tty_struct *);
+	unsigned int (*write_room)(struct tty_struct *);
+	unsigned int (*chars_in_buffer)(struct tty_struct *);
+	int (*ioctl)(struct tty_struct *, unsigned int, unsigned long);
+	long (*compat_ioctl)(struct tty_struct *, unsigned int, unsigned long);
+	void (*set_termios)(struct tty_struct *, const struct ktermios *);
+	void (*throttle)(struct tty_struct *);
+	void (*unthrottle)(struct tty_struct *);
+	void (*stop)(struct tty_struct *);
+	void (*start)(struct tty_struct *);
+	void (*hangup)(struct tty_struct *);
+	int (*break_ctl)(struct tty_struct *, int);
+	void (*flush_buffer)(struct tty_struct *);
+	void (*set_ldisc)(struct tty_struct *);
+	void (*wait_until_sent)(struct tty_struct *, int);
+	void (*send_xchar)(struct tty_struct *, char);
+	int (*tiocmget)(struct tty_struct *);
+	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
+	int (*resize)(struct tty_struct *, struct winsize *);
+	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
+	int (*get_serial)(struct tty_struct *, struct serial_struct *);
+	int (*set_serial)(struct tty_struct *, struct serial_struct *);
+	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
+	int (*proc_show)(struct seq_file *, void *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct tty_ldisc_ops;
+
+struct tty_ldisc {
+	struct tty_ldisc_ops *ops;
+	struct tty_struct *tty;
+};
+
+struct tty_ldisc_ops {
+	char *name;
+	int num;
+	int (*open)(struct tty_struct *);
+	void (*close)(struct tty_struct *);
+	void (*flush_buffer)(struct tty_struct *);
+	ssize_t (*read)(struct tty_struct *, struct file *, u8 *, size_t, void **, unsigned long);
+	ssize_t (*write)(struct tty_struct *, struct file *, const u8 *, size_t);
+	int (*ioctl)(struct tty_struct *, unsigned int, unsigned long);
+	int (*compat_ioctl)(struct tty_struct *, unsigned int, unsigned long);
+	void (*set_termios)(struct tty_struct *, const struct ktermios *);
+	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
+	void (*hangup)(struct tty_struct *);
+	void (*receive_buf)(struct tty_struct *, const u8 *, const u8 *, size_t);
+	void (*write_wakeup)(struct tty_struct *);
+	void (*dcd_change)(struct tty_struct *, bool);
+	size_t (*receive_buf2)(struct tty_struct *, const u8 *, const u8 *, size_t);
+	void (*lookahead_buf)(struct tty_struct *, const u8 *, const u8 *, size_t);
+	struct module *owner;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum {
+	Root_NFS = 255,
+	Root_CIFS = 254,
+	Root_Generic = 253,
+	Root_RAM0 = 1048576,
+};
+
+struct minix_super_block {
+	__u16 s_ninodes;
+	__u16 s_nzones;
+	__u16 s_imap_blocks;
+	__u16 s_zmap_blocks;
+	__u16 s_firstdatazone;
+	__u16 s_log_zone_size;
+	__u32 s_max_size;
+	__u16 s_magic;
+	__u16 s_state;
+	__u32 s_zones;
+};
+
+struct romfs_super_block {
+	__be32 word0;
+	__be32 word1;
+	__be32 size;
+	__be32 checksum;
+	char name[0];
+};
+
+struct cramfs_info {
+	__u32 crc;
+	__u32 edition;
+	__u32 blocks;
+	__u32 files;
+};
+
+struct cramfs_inode {
+	__u32 mode: 16;
+	__u32 uid: 16;
+	__u32 size: 24;
+	__u32 gid: 8;
+	__u32 namelen: 6;
+	__u32 offset: 26;
+};
+
+struct cramfs_super {
+	__u32 magic;
+	__u32 size;
+	__u32 flags;
+	__u32 future;
+	__u8 signature[16];
+	struct cramfs_info fsid;
+	__u8 name[16];
+	struct cramfs_inode root;
+};
+
+typedef __u16 __le16;
+
+typedef __u64 __le64;
+
+struct squashfs_super_block {
+	__le32 s_magic;
+	__le32 inodes;
+	__le32 mkfs_time;
+	__le32 block_size;
+	__le32 fragments;
+	__le16 compression;
+	__le16 block_log;
+	__le16 flags;
+	__le16 no_ids;
+	__le16 s_major;
+	__le16 s_minor;
+	__le64 root_inode;
+	__le64 bytes_used;
+	__le64 id_table_start;
+	__le64 xattr_id_table_start;
+	__le64 inode_table_start;
+	__le64 directory_table_start;
+	__le64 fragment_table_start;
+	__le64 lookup_table_start;
+};
+
+typedef int (*decompress_fn)(unsigned char *, long, long (*)(void *, unsigned long), long (*)(void *, unsigned long), unsigned char *, long *, void (*)(char *));
+
+struct subprocess_info {
+	struct work_struct work;
+	struct completion *complete;
+	const char *path;
+	char **argv;
+	char **envp;
+	int wait;
+	int retval;
+	int (*init)(struct subprocess_info *, struct cred *);
+	void (*cleanup)(struct subprocess_info *);
+	void *data;
+};
+
+typedef u64 async_cookie_t;
+
+struct async_domain {
+	struct list_head pending;
+	unsigned int registered: 1;
+};
+
+enum state {
+	Start = 0,
+	Collect = 1,
+	GotHeader = 2,
+	SkipIt = 3,
+	GotName = 4,
+	CopyFile = 5,
+	GotSymlink = 6,
+	Reset = 7,
+};
+
+struct hash {
+	int ino;
+	int minor;
+	int major;
+	umode_t mode;
+	struct hash *next;
+	char name[4098];
+};
+
+enum umh_disable_depth {
+	UMH_ENABLED = 0,
+	UMH_FREEZING = 1,
+	UMH_DISABLED = 2,
+};
+
+struct dir_entry {
+	struct list_head list;
+	time64_t mtime;
+	char name[0];
+};
+
+typedef void (*async_func_t)(void *, async_cookie_t);
+
+enum dbg_active_el {
+	DBG_ACTIVE_EL0 = 0,
+	DBG_ACTIVE_EL1 = 1,
+};
+
+typedef unsigned long uintptr_t;
+
+struct step_hook {
+	struct list_head node;
+	int (*fn)(struct pt_regs *, unsigned long);
+};
+
+struct break_hook {
+	struct list_head node;
+	int (*fn)(struct pt_regs *, unsigned long);
+	u16 imm;
+	u16 mask;
+};
+
+struct nmi_ctx {
+	u64 hcr;
+	unsigned int cnt;
+};
+
+enum vec_type {
+	ARM64_VEC_SVE = 0,
+	ARM64_VEC_SME = 1,
+	ARM64_VEC_MAX = 2,
+};
+
+struct vl_info {
+	enum vec_type type;
+	const char *name;
+	int min_vl;
+	int max_vl;
+	int max_virtualisable_vl;
+	unsigned long vq_map[8];
+	unsigned long vq_partial_map[8];
+};
+
+struct cpu_fp_state {
+	struct user_fpsimd_state *st;
+	void *sve_state;
+	void *sme_state;
+	u64 *svcr;
+	unsigned int sve_vl;
+	unsigned int sme_vl;
+	enum fp_type *fp_type;
+	enum fp_type to_save;
+};
+
+struct vl_config {
+	int __default_vl;
+};
+
+enum cpu_pm_event {
+	CPU_PM_ENTER = 0,
+	CPU_PM_ENTER_FAILED = 1,
+	CPU_PM_EXIT = 2,
+	CPU_CLUSTER_PM_ENTER = 3,
+	CPU_CLUSTER_PM_ENTER_FAILED = 4,
+	CPU_CLUSTER_PM_EXIT = 5,
+};
+
+struct midr_range {
+	u32 model;
+	u32 rv_min;
+	u32 rv_max;
+};
+
+struct arm64_midr_revidr;
+
+struct arm64_cpu_capabilities {
+	const char *desc;
+	u16 capability;
+	u16 type;
+	bool (*matches)(const struct arm64_cpu_capabilities *, int);
+	void (*cpu_enable)(const struct arm64_cpu_capabilities *);
+	union {
+		struct {
+			struct midr_range midr_range;
+			const struct arm64_midr_revidr * const fixed_revs;
+		};
+		const struct midr_range *midr_range_list;
+		struct {
+			u32 sys_reg;
+			u8 field_pos;
+			u8 field_width;
+			u8 min_field_value;
+			u8 hwcap_type;
+			bool sign;
+			unsigned long hwcap;
+		};
+	};
+	const struct arm64_cpu_capabilities *match_list;
+};
+
+struct arm64_midr_revidr {
+	u32 midr_rv;
+	u32 revidr_mask;
+};
+
+enum arm64_hyp_spectre_vector {
+	HYP_VECTOR_DIRECT = 0,
+	HYP_VECTOR_SPECTRE_DIRECT = 1,
+	HYP_VECTOR_INDIRECT = 2,
+	HYP_VECTOR_SPECTRE_INDIRECT = 3,
+};
+
+typedef void (*bp_hardening_cb_t)();
+
+struct bp_hardening_data {
+	enum arm64_hyp_spectre_vector slot;
+	bp_hardening_cb_t fn;
+};
+
+struct stack_info {
+	unsigned long low;
+	unsigned long high;
+};
+
+struct plist_head {
+	struct list_head node_list;
+};
+
+enum pm_qos_type {
+	PM_QOS_UNITIALIZED = 0,
+	PM_QOS_MAX = 1,
+	PM_QOS_MIN = 2,
+};
+
+struct pm_qos_constraints {
+	struct plist_head list;
+	s32 target_value;
+	s32 default_value;
+	s32 no_constraint_value;
+	enum pm_qos_type type;
+	struct blocking_notifier_head *notifiers;
+};
+
+struct freq_constraints {
+	struct pm_qos_constraints min_freq;
+	struct blocking_notifier_head min_freq_notifiers;
+	struct pm_qos_constraints max_freq;
+	struct blocking_notifier_head max_freq_notifiers;
+};
+
+struct pm_qos_flags {
+	struct list_head list;
+	s32 effective_flags;
+};
+
+struct dev_pm_qos_request;
+
+struct dev_pm_qos {
+	struct pm_qos_constraints resume_latency;
+	struct pm_qos_constraints latency_tolerance;
+	struct freq_constraints freq;
+	struct pm_qos_flags flags;
+	struct dev_pm_qos_request *resume_latency_req;
+	struct dev_pm_qos_request *latency_tolerance_req;
+	struct dev_pm_qos_request *flags_req;
+};
+
+struct pm_qos_flags_request {
+	struct list_head node;
+	s32 flags;
+};
+
+enum freq_qos_req_type {
+	FREQ_QOS_MIN = 1,
+	FREQ_QOS_MAX = 2,
+};
+
+struct freq_qos_request {
+	enum freq_qos_req_type type;
+	struct plist_node pnode;
+	struct freq_constraints *qos;
+	u64 android_oem_data1;
+};
+
+enum dev_pm_qos_req_type {
+	DEV_PM_QOS_RESUME_LATENCY = 1,
+	DEV_PM_QOS_LATENCY_TOLERANCE = 2,
+	DEV_PM_QOS_MIN_FREQUENCY = 3,
+	DEV_PM_QOS_MAX_FREQUENCY = 4,
+	DEV_PM_QOS_FLAGS = 5,
+};
+
+struct dev_pm_qos_request {
+	enum dev_pm_qos_req_type type;
+	union {
+		struct plist_node pnode;
+		struct pm_qos_flags_request flr;
+		struct freq_qos_request freq;
+	} data;
+	struct device *dev;
+};
+
+enum reboot_mode {
+	REBOOT_UNDEFINED = -1,
+	REBOOT_COLD = 0,
+	REBOOT_WARM = 1,
+	REBOOT_HARD = 2,
+	REBOOT_SOFT = 3,
+	REBOOT_GPIO = 4,
+};
+
+enum {
+	UNAME26 = 131072,
+	ADDR_NO_RANDOMIZE = 262144,
+	FDPIC_FUNCPTRS = 524288,
+	MMAP_PAGE_ZERO = 1048576,
+	ADDR_COMPAT_LAYOUT = 2097152,
+	READ_IMPLIES_EXEC = 4194304,
+	ADDR_LIMIT_32BIT = 8388608,
+	SHORT_INODE = 16777216,
+	WHOLE_SECONDS = 33554432,
+	STICKY_TIMEOUTS = 67108864,
+	ADDR_LIMIT_3GB = 134217728,
+};
+
+typedef bool (*stack_trace_consume_fn)(void *, unsigned long);
+
+struct kernel_clone_args {
+	u64 flags;
+	int __attribute__((btf_type_tag("user"))) *pidfd;
+	int __attribute__((btf_type_tag("user"))) *child_tid;
+	int __attribute__((btf_type_tag("user"))) *parent_tid;
+	const char *name;
+	int exit_signal;
+	u32 kthread: 1;
+	u32 io_thread: 1;
+	u32 user_worker: 1;
+	u32 no_files: 1;
+	unsigned long stack;
+	unsigned long stack_size;
+	unsigned long tls;
+	pid_t *set_tid;
+	size_t set_tid_size;
+	int cgroup;
+	int idle;
+	int (*fn)(void *);
+	void *fn_arg;
+	struct cgroup *cgrp;
+	struct css_set *cset;
+};
+
+struct wchan_info {
+	unsigned long pc;
+	int count;
+};
+
+typedef __u16 Elf32_Half;
+
+typedef __u32 Elf32_Addr;
+
+typedef __u32 Elf32_Off;
+
+struct elf32_hdr {
+	unsigned char e_ident[16];
+	Elf32_Half e_type;
+	Elf32_Half e_machine;
+	Elf32_Word e_version;
+	Elf32_Addr e_entry;
+	Elf32_Off e_phoff;
+	Elf32_Off e_shoff;
+	Elf32_Word e_flags;
+	Elf32_Half e_ehsize;
+	Elf32_Half e_phentsize;
+	Elf32_Half e_phnum;
+	Elf32_Half e_shentsize;
+	Elf32_Half e_shnum;
+	Elf32_Half e_shstrndx;
+};
+
+struct arch_elf_state {
+	int flags;
+};
+
+typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long);
+
+typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long);
+
+struct pt_regs_offset {
+	const char *name;
+	int offset;
+};
+
+struct user_regset;
+
+struct user_regset_view {
+	const char *name;
+	const struct user_regset *regsets;
+	unsigned int n;
+	u32 e_flags;
+	u16 e_machine;
+	u8 ei_osabi;
+};
+
+struct membuf;
+
+typedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf);
+
+typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void __attribute__((btf_type_tag("user"))) *);
+
+typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);
+
+typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);
+
+struct user_regset {
+	user_regset_get2_fn *regset_get;
+	user_regset_set_fn *set;
+	user_regset_active_fn *active;
+	user_regset_writeback_fn *writeback;
+	unsigned int n;
+	unsigned int size;
+	unsigned int align;
+	unsigned int bias;
+	unsigned int core_note_type;
+};
+
+struct membuf {
+	void *p;
+	size_t left;
+};
+
+enum compat_regset {
+	REGSET_COMPAT_GPR = 0,
+	REGSET_COMPAT_VFP = 1,
+};
+
+enum ptrace_syscall_dir {
+	PTRACE_SYSCALL_ENTER = 0,
+	PTRACE_SYSCALL_EXIT = 1,
+};
+
+enum {
+	TRACE_EVENT_FL_FILTERED = 1,
+	TRACE_EVENT_FL_CAP_ANY = 2,
+	TRACE_EVENT_FL_NO_SET_FILTER = 4,
+	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
+	TRACE_EVENT_FL_TRACEPOINT = 16,
+	TRACE_EVENT_FL_DYNAMIC = 32,
+	TRACE_EVENT_FL_KPROBE = 64,
+	TRACE_EVENT_FL_UPROBE = 128,
+	TRACE_EVENT_FL_EPROBE = 256,
+	TRACE_EVENT_FL_FPROBE = 512,
+	TRACE_EVENT_FL_CUSTOM = 1024,
+};
+
+enum bp_type_idx {
+	TYPE_INST = 0,
+	TYPE_DATA = 1,
+	TYPE_MAX = 2,
+};
+
+enum {
+	HW_BREAKPOINT_EMPTY = 0,
+	HW_BREAKPOINT_R = 1,
+	HW_BREAKPOINT_W = 2,
+	HW_BREAKPOINT_RW = 3,
+	HW_BREAKPOINT_X = 4,
+	HW_BREAKPOINT_INVALID = 7,
+};
+
+enum {
+	HW_BREAKPOINT_LEN_1 = 1,
+	HW_BREAKPOINT_LEN_2 = 2,
+	HW_BREAKPOINT_LEN_3 = 3,
+	HW_BREAKPOINT_LEN_4 = 4,
+	HW_BREAKPOINT_LEN_5 = 5,
+	HW_BREAKPOINT_LEN_6 = 6,
+	HW_BREAKPOINT_LEN_7 = 7,
+	HW_BREAKPOINT_LEN_8 = 8,
+};
+
+enum perf_type_id {
+	PERF_TYPE_HARDWARE = 0,
+	PERF_TYPE_SOFTWARE = 1,
+	PERF_TYPE_TRACEPOINT = 2,
+	PERF_TYPE_HW_CACHE = 3,
+	PERF_TYPE_RAW = 4,
+	PERF_TYPE_BREAKPOINT = 5,
+	PERF_TYPE_MAX = 6,
+};
+
+typedef u32 compat_ulong_t;
+
+struct trace_event_raw_sys_enter {
+	struct trace_entry ent;
+	long id;
+	unsigned long args[6];
+	char __data[0];
+};
+
+struct trace_event_raw_sys_exit {
+	struct trace_entry ent;
+	long id;
+	long ret;
+	char __data[0];
+};
+
+struct seccomp_data {
+	int nr;
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 args[6];
+};
+
+struct user_sve_header {
+	__u32 size;
+	__u32 max_size;
+	__u16 vl;
+	__u16 max_vl;
+	__u16 flags;
+	__u16 __reserved;
+};
+
+struct trace_event_data_offsets_sys_enter {};
+
+struct trace_event_data_offsets_sys_exit {};
+
+struct user_za_header {
+	__u32 size;
+	__u32 max_size;
+	__u16 vl;
+	__u16 max_vl;
+	__u16 flags;
+	__u16 __reserved;
+};
+
+struct user_pac_mask {
+	__u64 data_mask;
+	__u64 insn_mask;
+};
+
+struct hypervisor_ops {
+	void (*page_relinquish)(struct page *);
+	void (*post_page_relinquish_tlb_inv)();
+};
+
+struct mpidr_hash {
+	u64 mask;
+	u32 shift_aff[4];
+	u32 bits;
+};
+
+typedef phys_addr_t resource_size_t;
+
+struct resource {
+	resource_size_t start;
+	resource_size_t end;
+	const char *name;
+	unsigned long flags;
+	unsigned long desc;
+	struct resource *parent;
+	struct resource *sibling;
+	struct resource *child;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum memblock_flags {
+	MEMBLOCK_NONE = 0,
+	MEMBLOCK_HOTPLUG = 1,
+	MEMBLOCK_MIRROR = 2,
+	MEMBLOCK_NOMAP = 4,
+	MEMBLOCK_DRIVER_MANAGED = 8,
+};
+
+struct cpu {
+	int node_id;
+	int hotpluggable;
+	struct device dev;
+};
+
+struct memblock_region;
+
+struct memblock_type {
+	unsigned long cnt;
+	unsigned long max;
+	phys_addr_t total_size;
+	struct memblock_region *regions;
+	char *name;
+};
+
+struct memblock_region {
+	phys_addr_t base;
+	phys_addr_t size;
+	enum memblock_flags flags;
+};
+
+struct cpu_operations {
+	const char *name;
+	int (*cpu_init)(unsigned int);
+	int (*cpu_prepare)(unsigned int);
+	int (*cpu_boot)(unsigned int);
+	void (*cpu_postboot)();
+	bool (*cpu_can_disable)(unsigned int);
+	int (*cpu_disable)(unsigned int);
+	void (*cpu_die)(unsigned int);
+	int (*cpu_kill)(unsigned int);
+};
+
+struct atomic_notifier_head {
+	spinlock_t lock;
+	struct notifier_block __attribute__((btf_type_tag("rcu"))) *head;
+};
+
+struct siginfo {
+	union {
+		struct {
+			int si_signo;
+			int si_errno;
+			int si_code;
+			union __sifields _sifields;
+		};
+		int _si_pad[32];
+	};
+};
+
+struct sigaltstack {
+	void __attribute__((btf_type_tag("user"))) *ss_sp;
+	int ss_flags;
+	__kernel_size_t ss_size;
+};
+
+typedef struct sigaltstack stack_t;
+
+struct sigcontext {
+	__u64 fault_address;
+	__u64 regs[31];
+	__u64 sp;
+	__u64 pc;
+	__u64 pstate;
+	long: 64;
+	__u8 __reserved[4096];
+};
+
+struct ucontext {
+	unsigned long uc_flags;
+	struct ucontext *uc_link;
+	stack_t uc_stack;
+	sigset_t uc_sigmask;
+	__u8 __unused[120];
+	long: 64;
+	struct sigcontext uc_mcontext;
+};
+
+struct rt_sigframe {
+	struct siginfo info;
+	struct ucontext uc;
+};
+
+struct _aarch64_ctx {
+	__u32 magic;
+	__u32 size;
+};
+
+struct fpsimd_context {
+	struct _aarch64_ctx head;
+	__u32 fpsr;
+	__u32 fpcr;
+	__uint128_t vregs[32];
+};
+
+struct sve_context {
+	struct _aarch64_ctx head;
+	__u16 vl;
+	__u16 flags;
+	__u16 __reserved[2];
+};
+
+struct tpidr2_context {
+	struct _aarch64_ctx head;
+	__u64 tpidr2;
+};
+
+struct za_context {
+	struct _aarch64_ctx head;
+	__u16 vl;
+	__u16 __reserved[3];
+};
+
+struct zt_context {
+	struct _aarch64_ctx head;
+	__u16 nregs;
+	__u16 __reserved[3];
+};
+
+struct extra_context {
+	struct _aarch64_ctx head;
+	__u64 datap;
+	__u32 size;
+	__u32 __reserved[3];
+};
+
+struct frame_record {
+	u64 fp;
+	u64 lr;
+};
+
+struct user_ctxs {
+	struct fpsimd_context __attribute__((btf_type_tag("user"))) *fpsimd;
+	u32 fpsimd_size;
+	struct sve_context __attribute__((btf_type_tag("user"))) *sve;
+	u32 sve_size;
+	struct tpidr2_context __attribute__((btf_type_tag("user"))) *tpidr2;
+	u32 tpidr2_size;
+	struct za_context __attribute__((btf_type_tag("user"))) *za;
+	u32 za_size;
+	struct zt_context __attribute__((btf_type_tag("user"))) *zt;
+	u32 zt_size;
+};
+
+struct ksignal {
+	struct k_sigaction ka;
+	kernel_siginfo_t info;
+	int sig;
+};
+
+struct rt_sigframe_user_layout {
+	struct rt_sigframe __attribute__((btf_type_tag("user"))) *sigframe;
+	struct frame_record __attribute__((btf_type_tag("user"))) *next_frame;
+	unsigned long size;
+	unsigned long limit;
+	unsigned long fpsimd_offset;
+	unsigned long esr_offset;
+	unsigned long sve_offset;
+	unsigned long tpidr2_offset;
+	unsigned long za_offset;
+	unsigned long zt_offset;
+	unsigned long extra_offset;
+	unsigned long end_offset;
+};
+
+typedef struct siginfo siginfo_t;
+
+struct esr_context {
+	struct _aarch64_ctx head;
+	__u64 esr;
+};
+
+typedef long (*syscall_fn_t)(const struct pt_regs *);
+
+enum {
+	PER_LINUX = 0,
+	PER_LINUX_32BIT = 8388608,
+	PER_LINUX_FDPIC = 524288,
+	PER_SVR4 = 68157441,
+	PER_SVR3 = 83886082,
+	PER_SCOSVR3 = 117440515,
+	PER_OSR5 = 100663299,
+	PER_WYSEV386 = 83886084,
+	PER_ISCR4 = 67108869,
+	PER_BSD = 6,
+	PER_SUNOS = 67108870,
+	PER_XENIX = 83886087,
+	PER_LINUX32 = 8,
+	PER_LINUX32_3GB = 134217736,
+	PER_IRIX32 = 67108873,
+	PER_IRIXN32 = 67108874,
+	PER_IRIX64 = 67108875,
+	PER_RISCOS = 12,
+	PER_SOLARIS = 67108877,
+	PER_UW7 = 68157454,
+	PER_OSF4 = 15,
+	PER_HPUX = 16,
+	PER_MASK = 255,
+};
+
+struct frame_tail {
+	struct frame_tail __attribute__((btf_type_tag("user"))) *fp;
+	unsigned long lr;
+};
+
+struct compat_frame_tail {
+	compat_uptr_t fp;
+	u32 sp;
+	u32 lr;
+};
+
+struct unwind_state {
+	unsigned long fp;
+	unsigned long pc;
+	struct llist_node *kr_cur;
+	struct task_struct *task;
+	struct stack_info stack;
+	struct stack_info *stacks;
+	int nr_stacks;
+};
+
+typedef bool pstate_check_t(unsigned long);
+
+struct sys64_hook {
+	unsigned long esr_mask;
+	unsigned long esr_val;
+	void (*handler)(unsigned long, struct pt_regs *);
+};
+
+enum lockdep_ok {
+	LOCKDEP_STILL_OK = 0,
+	LOCKDEP_NOW_UNRELIABLE = 1,
+};
+
+enum siginfo_layout {
+	SIL_KILL = 0,
+	SIL_TIMER = 1,
+	SIL_POLL = 2,
+	SIL_FAULT = 3,
+	SIL_FAULT_TRAPNO = 4,
+	SIL_FAULT_MCEERR = 5,
+	SIL_FAULT_BNDERR = 6,
+	SIL_FAULT_PKUERR = 7,
+	SIL_FAULT_PERF_EVENT = 8,
+	SIL_CHLD = 9,
+	SIL_RT = 10,
+	SIL_SYS = 11,
+};
+
+enum die_val {
+	DIE_UNUSED = 0,
+	DIE_OOPS = 1,
+};
+
+enum ftr_type {
+	FTR_EXACT = 0,
+	FTR_LOWER_SAFE = 1,
+	FTR_HIGHER_SAFE = 2,
+	FTR_HIGHER_OR_ZERO_SAFE = 3,
+};
+
+enum bug_trap_type {
+	BUG_TRAP_TYPE_NONE = 0,
+	BUG_TRAP_TYPE_WARN = 1,
+	BUG_TRAP_TYPE_BUG = 2,
+};
+
+struct arm64_ftr_override;
+
+struct arm64_ftr_bits;
+
+struct arm64_ftr_reg {
+	const char *name;
+	u64 strict_mask;
+	u64 user_mask;
+	u64 sys_val;
+	u64 user_val;
+	struct arm64_ftr_override *override;
+	const struct arm64_ftr_bits *ftr_bits;
+};
+
+struct arm64_ftr_override {
+	u64 val;
+	u64 mask;
+};
+
+struct arm64_ftr_bits {
+	bool sign;
+	bool visible;
+	bool strict;
+	enum ftr_type type;
+	u8 shift;
+	u8 width;
+	s64 safe_val;
+};
+
+struct vdso_timestamp {
+	u64 sec;
+	u64 nsec;
+};
+
+struct timens_offset {
+	s64 sec;
+	u64 nsec;
+};
+
+struct arch_vdso_data {};
+
+struct vdso_data {
+	u32 seq;
+	s32 clock_mode;
+	u64 cycle_last;
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	union {
+		struct vdso_timestamp basetime[12];
+		struct timens_offset offset[12];
+	};
+	s32 tz_minuteswest;
+	s32 tz_dsttime;
+	u32 hrtimer_res;
+	u32 __unused;
+	struct arch_vdso_data arch_data;
+};
+
+struct vm_special_mapping;
+
+struct vdso_abi_info {
+	const char *name;
+	const char *vdso_code_start;
+	const char *vdso_code_end;
+	unsigned long vdso_pages;
+	struct vm_special_mapping *dm;
+	struct vm_special_mapping *cm;
+};
+
+struct vm_special_mapping {
+	const char *name;
+	struct page **pages;
+	vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);
+	int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);
+};
+
+struct timens_offsets {
+	struct timespec64 monotonic;
+	struct timespec64 boottime;
+};
+
+struct time_namespace {
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+	struct timens_offsets offsets;
+	struct page *vvar_page;
+	bool frozen_offsets;
+};
+
+enum vdso_abi {
+	VDSO_ABI_AA64 = 0,
+	VDSO_ABI_AA32 = 1,
+};
+
+enum aarch32_map {
+	AA32_MAP_VECTORS = 0,
+	AA32_MAP_SIGPAGE = 1,
+	AA32_MAP_VVAR = 2,
+	AA32_MAP_VDSO = 3,
+};
+
+enum vvar_pages {
+	VVAR_DATA_PAGE_OFFSET = 0,
+	VVAR_TIMENS_PAGE_OFFSET = 1,
+	VVAR_NR_PAGES = 2,
+};
+
+enum vm_fault_reason {
+	VM_FAULT_OOM = 1,
+	VM_FAULT_SIGBUS = 2,
+	VM_FAULT_MAJOR = 4,
+	VM_FAULT_HWPOISON = 16,
+	VM_FAULT_HWPOISON_LARGE = 32,
+	VM_FAULT_SIGSEGV = 64,
+	VM_FAULT_NOPAGE = 256,
+	VM_FAULT_LOCKED = 512,
+	VM_FAULT_RETRY = 1024,
+	VM_FAULT_FALLBACK = 2048,
+	VM_FAULT_DONE_COW = 4096,
+	VM_FAULT_NEEDDSYNC = 8192,
+	VM_FAULT_COMPLETED = 16384,
+	VM_FAULT_HINDEX_MASK = 983040,
+};
+
+enum aarch64_map {
+	AA64_MAP_VVAR = 0,
+	AA64_MAP_VDSO = 1,
+};
+
+struct maple_enode;
+
+struct maple_alloc;
+
+struct ma_state {
+	struct maple_tree *tree;
+	unsigned long index;
+	unsigned long last;
+	struct maple_enode *node;
+	unsigned long min;
+	unsigned long max;
+	struct maple_alloc *alloc;
+	unsigned char depth;
+	unsigned char offset;
+	unsigned char mas_flags;
+};
+
+struct vma_iterator {
+	struct ma_state mas;
+};
+
+struct maple_alloc {
+	unsigned long total;
+	unsigned char node_count;
+	unsigned int request_count;
+	struct maple_alloc *slot[30];
+};
+
+typedef unsigned int zap_flags_t;
+
+struct zap_details {
+	struct folio *single_folio;
+	bool even_cows;
+	zap_flags_t zap_flags;
+};
+
+struct return_address_data {
+	unsigned int level;
+	void *addr;
+};
+
+struct cpuinfo_32bit {
+	u32 reg_id_dfr0;
+	u32 reg_id_dfr1;
+	u32 reg_id_isar0;
+	u32 reg_id_isar1;
+	u32 reg_id_isar2;
+	u32 reg_id_isar3;
+	u32 reg_id_isar4;
+	u32 reg_id_isar5;
+	u32 reg_id_isar6;
+	u32 reg_id_mmfr0;
+	u32 reg_id_mmfr1;
+	u32 reg_id_mmfr2;
+	u32 reg_id_mmfr3;
+	u32 reg_id_mmfr4;
+	u32 reg_id_mmfr5;
+	u32 reg_id_pfr0;
+	u32 reg_id_pfr1;
+	u32 reg_id_pfr2;
+	u32 reg_mvfr0;
+	u32 reg_mvfr1;
+	u32 reg_mvfr2;
+};
+
+struct cpuinfo_arm64 {
+	struct cpu cpu;
+	struct kobject kobj;
+	u64 reg_ctr;
+	u64 reg_cntfrq;
+	u64 reg_dczid;
+	u64 reg_midr;
+	u64 reg_revidr;
+	u64 reg_gmid;
+	u64 reg_smidr;
+	u64 reg_id_aa64dfr0;
+	u64 reg_id_aa64dfr1;
+	u64 reg_id_aa64isar0;
+	u64 reg_id_aa64isar1;
+	u64 reg_id_aa64isar2;
+	u64 reg_id_aa64mmfr0;
+	u64 reg_id_aa64mmfr1;
+	u64 reg_id_aa64mmfr2;
+	u64 reg_id_aa64mmfr3;
+	u64 reg_id_aa64pfr0;
+	u64 reg_id_aa64pfr1;
+	u64 reg_id_aa64zfr0;
+	u64 reg_id_aa64smfr0;
+	struct cpuinfo_32bit aarch32;
+	u64 reg_zcr;
+	u64 reg_smcr;
+};
+
+struct kobj_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
+};
+
+struct __ftr_reg_entry {
+	u32 sys_id;
+	struct arm64_ftr_reg *reg;
+};
+
+struct device_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device *, struct device_attribute *, char *);
+	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
+};
+
+enum aarch64_insn_imm_type {
+	AARCH64_INSN_IMM_ADR = 0,
+	AARCH64_INSN_IMM_26 = 1,
+	AARCH64_INSN_IMM_19 = 2,
+	AARCH64_INSN_IMM_16 = 3,
+	AARCH64_INSN_IMM_14 = 4,
+	AARCH64_INSN_IMM_12 = 5,
+	AARCH64_INSN_IMM_9 = 6,
+	AARCH64_INSN_IMM_7 = 7,
+	AARCH64_INSN_IMM_6 = 8,
+	AARCH64_INSN_IMM_S = 9,
+	AARCH64_INSN_IMM_R = 10,
+	AARCH64_INSN_IMM_N = 11,
+	AARCH64_INSN_IMM_MAX = 12,
+};
+
+enum aarch64_insn_register_type {
+	AARCH64_INSN_REGTYPE_RT = 0,
+	AARCH64_INSN_REGTYPE_RN = 1,
+	AARCH64_INSN_REGTYPE_RT2 = 2,
+	AARCH64_INSN_REGTYPE_RM = 3,
+	AARCH64_INSN_REGTYPE_RD = 4,
+	AARCH64_INSN_REGTYPE_RA = 5,
+	AARCH64_INSN_REGTYPE_RS = 6,
+};
+
+enum mitigation_state {
+	SPECTRE_UNAFFECTED = 0,
+	SPECTRE_MITIGATED = 1,
+	SPECTRE_VULNERABLE = 2,
+};
+
+enum kvm_mode {
+	KVM_MODE_DEFAULT = 0,
+	KVM_MODE_PROTECTED = 1,
+	KVM_MODE_NV = 2,
+	KVM_MODE_NONE = 3,
+};
+
+enum arm64_bp_harden_el1_vectors {
+	EL1_VECTOR_BHB_LOOP = 0,
+	EL1_VECTOR_BHB_FW = 1,
+	EL1_VECTOR_BHB_CLEAR_INSN = 2,
+	EL1_VECTOR_KPTI = 3,
+};
+
+enum fixed_addresses {
+	FIX_HOLE = 0,
+	FIX_FDT_END = 1,
+	FIX_FDT = 514,
+	FIX_EARLYCON_MEM_BASE = 515,
+	FIX_TEXT_POKE0 = 516,
+	FIX_ENTRY_TRAMP_TEXT4 = 517,
+	FIX_ENTRY_TRAMP_TEXT3 = 518,
+	FIX_ENTRY_TRAMP_TEXT2 = 519,
+	FIX_ENTRY_TRAMP_TEXT1 = 520,
+	__end_of_permanent_fixed_addresses = 521,
+	FIX_BTMAP_END = 521,
+	FIX_BTMAP_BEGIN = 968,
+	FIX_PTE = 969,
+	FIX_PMD = 970,
+	FIX_PUD = 971,
+	FIX_PGD = 972,
+	__end_of_fixed_addresses = 973,
+};
+
+enum pageflags {
+	PG_locked = 0,
+	PG_writeback = 1,
+	PG_referenced = 2,
+	PG_uptodate = 3,
+	PG_dirty = 4,
+	PG_lru = 5,
+	PG_head = 6,
+	PG_waiters = 7,
+	PG_active = 8,
+	PG_workingset = 9,
+	PG_error = 10,
+	PG_slab = 11,
+	PG_owner_priv_1 = 12,
+	PG_arch_1 = 13,
+	PG_reserved = 14,
+	PG_private = 15,
+	PG_private_2 = 16,
+	PG_mappedtodisk = 17,
+	PG_reclaim = 18,
+	PG_swapbacked = 19,
+	PG_unevictable = 20,
+	PG_mlocked = 21,
+	PG_arch_2 = 22,
+	PG_arch_3 = 23,
+	PG_oem_reserved_1 = 24,
+	PG_oem_reserved_2 = 25,
+	PG_oem_reserved_3 = 26,
+	PG_oem_reserved_4 = 27,
+	__NR_PAGEFLAGS = 28,
+	PG_readahead = 18,
+	PG_anon_exclusive = 17,
+	PG_checked = 12,
+	PG_swapcache = 12,
+	PG_fscache = 16,
+	PG_pinned = 12,
+	PG_savepinned = 4,
+	PG_foreign = 12,
+	PG_xen_remapped = 12,
+	PG_isolated = 18,
+	PG_reported = 3,
+	PG_vmemmap_self_hosted = 12,
+	PG_has_hwpoisoned = 10,
+	PG_large_rmappable = 9,
+};
+
+enum {
+	CAP_HWCAP = 1,
+	CAP_COMPAT_HWCAP = 2,
+	CAP_COMPAT_HWCAP2 = 3,
+};
+
+typedef int (*cmp_func_t)(const void *, const void *);
+
+typedef void kpti_remap_fn(int, int, phys_addr_t, unsigned long);
+
+typedef void ttbr_replace_func(phys_addr_t);
+
+typedef int (*cpu_stop_fn_t)(void *);
+
+struct alt_instr;
+
+struct alt_region {
+	struct alt_instr *begin;
+	struct alt_instr *end;
+};
+
+struct alt_instr {
+	s32 orig_offset;
+	s32 alt_offset;
+	u16 cpucap;
+	u8 orig_len;
+	u8 alt_len;
+};
+
+enum aarch64_insn_hint_cr_op {
+	AARCH64_INSN_HINT_NOP = 0,
+	AARCH64_INSN_HINT_YIELD = 32,
+	AARCH64_INSN_HINT_WFE = 64,
+	AARCH64_INSN_HINT_WFI = 96,
+	AARCH64_INSN_HINT_SEV = 128,
+	AARCH64_INSN_HINT_SEVL = 160,
+	AARCH64_INSN_HINT_XPACLRI = 224,
+	AARCH64_INSN_HINT_PACIA_1716 = 256,
+	AARCH64_INSN_HINT_PACIB_1716 = 320,
+	AARCH64_INSN_HINT_AUTIA_1716 = 384,
+	AARCH64_INSN_HINT_AUTIB_1716 = 448,
+	AARCH64_INSN_HINT_PACIAZ = 768,
+	AARCH64_INSN_HINT_PACIASP = 800,
+	AARCH64_INSN_HINT_PACIBZ = 832,
+	AARCH64_INSN_HINT_PACIBSP = 864,
+	AARCH64_INSN_HINT_AUTIAZ = 896,
+	AARCH64_INSN_HINT_AUTIASP = 928,
+	AARCH64_INSN_HINT_AUTIBZ = 960,
+	AARCH64_INSN_HINT_AUTIBSP = 992,
+	AARCH64_INSN_HINT_ESB = 512,
+	AARCH64_INSN_HINT_PSB = 544,
+	AARCH64_INSN_HINT_TSB = 576,
+	AARCH64_INSN_HINT_CSDB = 640,
+	AARCH64_INSN_HINT_CLEARBHB = 704,
+	AARCH64_INSN_HINT_BTI = 1024,
+	AARCH64_INSN_HINT_BTIC = 1088,
+	AARCH64_INSN_HINT_BTIJ = 1152,
+	AARCH64_INSN_HINT_BTIJC = 1216,
+};
+
+typedef __u64 Elf64_Off;
+
+struct elf64_hdr {
+	unsigned char e_ident[16];
+	Elf64_Half e_type;
+	Elf64_Half e_machine;
+	Elf64_Word e_version;
+	Elf64_Addr e_entry;
+	Elf64_Off e_phoff;
+	Elf64_Off e_shoff;
+	Elf64_Word e_flags;
+	Elf64_Half e_ehsize;
+	Elf64_Half e_phentsize;
+	Elf64_Half e_phnum;
+	Elf64_Half e_shentsize;
+	Elf64_Half e_shnum;
+	Elf64_Half e_shstrndx;
+};
+
+struct elf64_shdr {
+	Elf64_Word sh_name;
+	Elf64_Word sh_type;
+	Elf64_Xword sh_flags;
+	Elf64_Addr sh_addr;
+	Elf64_Off sh_offset;
+	Elf64_Xword sh_size;
+	Elf64_Word sh_link;
+	Elf64_Word sh_info;
+	Elf64_Xword sh_addralign;
+	Elf64_Xword sh_entsize;
+};
+
+typedef struct elf64_shdr Elf64_Shdr;
+
+typedef struct elf64_hdr Elf64_Ehdr;
+
+typedef void (*alternative_cb_t)(struct alt_instr *, __le32 *, __le32 *, int);
+
+enum cache_type {
+	CACHE_TYPE_NOCACHE = 0,
+	CACHE_TYPE_INST = 1,
+	CACHE_TYPE_DATA = 2,
+	CACHE_TYPE_SEPARATE = 3,
+	CACHE_TYPE_UNIFIED = 4,
+};
+
+struct cacheinfo;
+
+struct cpu_cacheinfo {
+	struct cacheinfo *info_list;
+	unsigned int num_levels;
+	unsigned int num_leaves;
+	bool cpu_map_populated;
+	bool early_ci_levels;
+};
+
+struct cacheinfo {
+	unsigned int id;
+	enum cache_type type;
+	unsigned int level;
+	unsigned int coherency_line_size;
+	unsigned int number_of_sets;
+	unsigned int ways_of_associativity;
+	unsigned int physical_line_partition;
+	unsigned int size;
+	cpumask_t shared_cpu_map;
+	unsigned int attributes;
+	void *fw_token;
+	bool disable_sysfs;
+	void *priv;
+};
+
+struct secondary_data {
+	struct task_struct *task;
+	long status;
+};
+
+struct kvm_hyp_req {
+	u8 type;
+	union {
+		struct {
+			u8 dest;
+			int nr_pages;
+			int sz_alloc;
+		} mem;
+		struct {
+			unsigned long guest_ipa;
+			size_t size;
+		} map;
+	};
+};
+
+struct msi_dev_domain {
+	struct xarray store;
+	struct irq_domain *domain;
+};
+
+struct platform_msi_priv_data;
+
+struct msi_device_data {
+	unsigned long properties;
+	struct platform_msi_priv_data *platform_data;
+	struct mutex mutex;
+	struct msi_dev_domain __domains[2];
+	unsigned long __iter_idx;
+};
+
+struct msi_desc;
+
+struct irq_common_data {
+	unsigned int state_use_accessors;
+	void *handler_data;
+	struct msi_desc *msi_desc;
+	cpumask_var_t affinity;
+	cpumask_var_t effective_affinity;
+	unsigned int ipi_offset;
+};
+
+struct irq_chip;
+
+struct irq_data {
+	u32 mask;
+	unsigned int irq;
+	unsigned long hwirq;
+	struct irq_common_data *common;
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	struct irq_data *parent_data;
+	void *chip_data;
+};
+
+struct irq_desc;
+
+typedef void (*irq_flow_handler_t)(struct irq_desc *);
+
+struct irqaction;
+
+struct irq_affinity_notify;
+
+struct irq_desc {
+	struct irq_common_data irq_common_data;
+	struct irq_data irq_data;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *kstat_irqs;
+	irq_flow_handler_t handle_irq;
+	struct irqaction *action;
+	unsigned int status_use_accessors;
+	unsigned int core_internal_state__do_not_mess_with_it;
+	unsigned int depth;
+	unsigned int wake_depth;
+	unsigned int tot_count;
+	unsigned int irq_count;
+	unsigned long last_unhandled;
+	unsigned int irqs_unhandled;
+	atomic_t threads_handled;
+	int threads_handled_last;
+	raw_spinlock_t lock;
+	struct cpumask *percpu_enabled;
+	const struct cpumask *percpu_affinity;
+	const struct cpumask *affinity_hint;
+	struct irq_affinity_notify *affinity_notify;
+	unsigned long threads_oneshot;
+	atomic_t threads_active;
+	wait_queue_head_t wait_for_threads;
+	unsigned int nr_actions;
+	unsigned int no_suspend_depth;
+	unsigned int cond_suspend_depth;
+	unsigned int force_resume_depth;
+	struct proc_dir_entry *dir;
+	struct callback_head rcu;
+	struct kobject kobj;
+	struct mutex request_mutex;
+	int parent_irq;
+	struct module *owner;
+	const char *name;
+	struct hlist_node resend_node;
+	u64 android_vendor_data1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct pci_msi_desc {
+	union {
+		u32 msi_mask;
+		u32 msix_ctrl;
+	};
+	struct {
+		u8 is_msix: 1;
+		u8 multiple: 3;
+		u8 multi_cap: 3;
+		u8 can_mask: 1;
+		u8 is_64: 1;
+		u8 is_virtual: 1;
+		unsigned int default_irq;
+	} msi_attrib;
+	union {
+		u8 mask_pos;
+		void *mask_base;
+	};
+};
+
+union msi_domain_cookie {
+	u64 value;
+	void *ptr;
+	void *iobase;
+};
+
+union msi_instance_cookie {
+	u64 value;
+	void *ptr;
+};
+
+struct msi_desc_data {
+	union msi_domain_cookie dcookie;
+	union msi_instance_cookie icookie;
+};
+
+struct arch_msi_msg_addr_lo {
+	u32 address_lo;
+};
+
+typedef struct arch_msi_msg_addr_lo arch_msi_msg_addr_lo_t;
+
+struct arch_msi_msg_addr_hi {
+	u32 address_hi;
+};
+
+typedef struct arch_msi_msg_addr_hi arch_msi_msg_addr_hi_t;
+
+struct arch_msi_msg_data {
+	u32 data;
+};
+
+typedef struct arch_msi_msg_data arch_msi_msg_data_t;
+
+struct msi_msg {
+	union {
+		u32 address_lo;
+		arch_msi_msg_addr_lo_t arch_addr_lo;
+	};
+	union {
+		u32 address_hi;
+		arch_msi_msg_addr_hi_t arch_addr_hi;
+	};
+	union {
+		u32 data;
+		arch_msi_msg_data_t arch_data;
+	};
+};
+
+struct irq_affinity_desc;
+
+struct msi_desc {
+	unsigned int irq;
+	unsigned int nvec_used;
+	struct device *dev;
+	struct msi_msg msg;
+	struct irq_affinity_desc *affinity;
+	const void *iommu_cookie;
+	struct device_attribute *sysfs_attrs;
+	void (*write_msi_msg)(struct msi_desc *, void *);
+	void *write_msi_msg_data;
+	u16 msi_index;
+	union {
+		struct pci_msi_desc pci;
+		struct msi_desc_data data;
+	};
+};
+
+struct irq_affinity_desc {
+	struct cpumask mask;
+	unsigned int is_managed: 1;
+};
+
+enum irqchip_irq_state {
+	IRQCHIP_STATE_PENDING = 0,
+	IRQCHIP_STATE_ACTIVE = 1,
+	IRQCHIP_STATE_MASKED = 2,
+	IRQCHIP_STATE_LINE_LEVEL = 3,
+};
+
+struct irq_chip {
+	const char *name;
+	unsigned int (*irq_startup)(struct irq_data *);
+	void (*irq_shutdown)(struct irq_data *);
+	void (*irq_enable)(struct irq_data *);
+	void (*irq_disable)(struct irq_data *);
+	void (*irq_ack)(struct irq_data *);
+	void (*irq_mask)(struct irq_data *);
+	void (*irq_mask_ack)(struct irq_data *);
+	void (*irq_unmask)(struct irq_data *);
+	void (*irq_eoi)(struct irq_data *);
+	int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);
+	int (*irq_retrigger)(struct irq_data *);
+	int (*irq_set_type)(struct irq_data *, unsigned int);
+	int (*irq_set_wake)(struct irq_data *, unsigned int);
+	void (*irq_bus_lock)(struct irq_data *);
+	void (*irq_bus_sync_unlock)(struct irq_data *);
+	void (*irq_suspend)(struct irq_data *);
+	void (*irq_resume)(struct irq_data *);
+	void (*irq_pm_shutdown)(struct irq_data *);
+	void (*irq_calc_mask)(struct irq_data *);
+	void (*irq_print_chip)(struct irq_data *, struct seq_file *);
+	int (*irq_request_resources)(struct irq_data *);
+	void (*irq_release_resources)(struct irq_data *);
+	void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);
+	void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);
+	int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);
+	int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);
+	int (*irq_set_vcpu_affinity)(struct irq_data *, void *);
+	void (*ipi_send_single)(struct irq_data *, unsigned int);
+	void (*ipi_send_mask)(struct irq_data *, const struct cpumask *);
+	int (*irq_nmi_setup)(struct irq_data *);
+	void (*irq_nmi_teardown)(struct irq_data *);
+	unsigned long flags;
+};
+
+enum irqreturn {
+	IRQ_NONE = 0,
+	IRQ_HANDLED = 1,
+	IRQ_WAKE_THREAD = 2,
+};
+
+typedef enum irqreturn irqreturn_t;
+
+typedef irqreturn_t (*irq_handler_t)(int, void *);
+
+struct irqaction {
+	irq_handler_t handler;
+	void *dev_id;
+	void __attribute__((btf_type_tag("percpu"))) *percpu_dev_id;
+	struct irqaction *next;
+	irq_handler_t thread_fn;
+	struct task_struct *thread;
+	struct irqaction *secondary;
+	unsigned int irq;
+	unsigned int flags;
+	unsigned long thread_flags;
+	unsigned long thread_mask;
+	const char *name;
+	struct proc_dir_entry *dir;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct irq_affinity_notify {
+	unsigned int irq;
+	struct kref kref;
+	struct work_struct work;
+	void (*notify)(struct irq_affinity_notify *, const cpumask_t *);
+	void (*release)(struct kref *);
+};
+
+enum ipi_msg_type {
+	IPI_RESCHEDULE = 0,
+	IPI_CALL_FUNC = 1,
+	IPI_CPU_STOP = 2,
+	IPI_CPU_CRASH_STOP = 3,
+	IPI_TIMER = 4,
+	IPI_IRQ_WORK = 5,
+	IPI_WAKEUP = 6,
+	NR_IPI = 7,
+};
+
+enum {
+	IRQ_TYPE_NONE = 0,
+	IRQ_TYPE_EDGE_RISING = 1,
+	IRQ_TYPE_EDGE_FALLING = 2,
+	IRQ_TYPE_EDGE_BOTH = 3,
+	IRQ_TYPE_LEVEL_HIGH = 4,
+	IRQ_TYPE_LEVEL_LOW = 8,
+	IRQ_TYPE_LEVEL_MASK = 12,
+	IRQ_TYPE_SENSE_MASK = 15,
+	IRQ_TYPE_DEFAULT = 15,
+	IRQ_TYPE_PROBE = 16,
+	IRQ_LEVEL = 256,
+	IRQ_PER_CPU = 512,
+	IRQ_NOPROBE = 1024,
+	IRQ_NOREQUEST = 2048,
+	IRQ_NOAUTOEN = 4096,
+	IRQ_NO_BALANCING = 8192,
+	IRQ_MOVE_PCNTXT = 16384,
+	IRQ_NESTED_THREAD = 32768,
+	IRQ_NOTHREAD = 65536,
+	IRQ_PER_CPU_DEVID = 131072,
+	IRQ_IS_POLLED = 262144,
+	IRQ_DISABLE_UNLAZY = 524288,
+	IRQ_HIDDEN = 1048576,
+	IRQ_NO_DEBUG = 2097152,
+};
+
+enum scale_freq_source {
+	SCALE_FREQ_SOURCE_CPUFREQ = 0,
+	SCALE_FREQ_SOURCE_ARCH = 1,
+	SCALE_FREQ_SOURCE_CPPC = 2,
+	SCALE_FREQ_SOURCE_VIRT = 3,
+};
+
+struct scale_freq_data {
+	enum scale_freq_source source;
+	void (*set_freq_scale)();
+};
+
+enum cpufreq_table_sorting {
+	CPUFREQ_TABLE_UNSORTED = 0,
+	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
+	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
+};
+
+struct cpufreq_cpuinfo {
+	unsigned int max_freq;
+	unsigned int min_freq;
+	unsigned int transition_latency;
+};
+
+struct clk;
+
+struct cpufreq_governor;
+
+struct cpufreq_frequency_table;
+
+struct cpufreq_stats;
+
+struct thermal_cooling_device;
+
+struct cpufreq_policy {
+	cpumask_var_t cpus;
+	cpumask_var_t related_cpus;
+	cpumask_var_t real_cpus;
+	unsigned int shared_type;
+	unsigned int cpu;
+	struct clk *clk;
+	struct cpufreq_cpuinfo cpuinfo;
+	unsigned int min;
+	unsigned int max;
+	unsigned int cur;
+	unsigned int suspend_freq;
+	unsigned int policy;
+	unsigned int last_policy;
+	struct cpufreq_governor *governor;
+	void *governor_data;
+	char last_governor[16];
+	struct work_struct update;
+	struct freq_constraints constraints;
+	struct freq_qos_request *min_freq_req;
+	struct freq_qos_request *max_freq_req;
+	struct cpufreq_frequency_table *freq_table;
+	enum cpufreq_table_sorting freq_table_sorted;
+	struct list_head policy_list;
+	struct kobject kobj;
+	struct completion kobj_unregister;
+	struct rw_semaphore rwsem;
+	bool fast_switch_possible;
+	bool fast_switch_enabled;
+	bool strict_target;
+	bool efficiencies_available;
+	unsigned int transition_delay_us;
+	bool dvfs_possible_from_any_cpu;
+	bool boost_enabled;
+	unsigned int cached_target_freq;
+	unsigned int cached_resolved_idx;
+	bool transition_ongoing;
+	spinlock_t transition_lock;
+	wait_queue_head_t transition_wait;
+	struct task_struct *transition_task;
+	struct cpufreq_stats *stats;
+	void *driver_data;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
+};
+
+struct cpufreq_governor {
+	char name[16];
+	int (*init)(struct cpufreq_policy *);
+	void (*exit)(struct cpufreq_policy *);
+	int (*start)(struct cpufreq_policy *);
+	void (*stop)(struct cpufreq_policy *);
+	void (*limits)(struct cpufreq_policy *);
+	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
+	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
+	struct list_head governor_list;
+	struct module *owner;
+	u8 flags;
+};
+
+struct cpufreq_frequency_table {
+	unsigned int flags;
+	unsigned int driver_data;
+	unsigned int frequency;
+};
+
+enum spectre_v4_policy {
+	SPECTRE_V4_POLICY_MITIGATION_DYNAMIC = 0,
+	SPECTRE_V4_POLICY_MITIGATION_ENABLED = 1,
+	SPECTRE_V4_POLICY_MITIGATION_DISABLED = 2,
+};
+
+struct spectre_v4_param {
+	const char *str;
+	enum spectre_v4_policy policy;
+};
+
+enum bpf_reg_type {
+	NOT_INIT = 0,
+	SCALAR_VALUE = 1,
+	PTR_TO_CTX = 2,
+	CONST_PTR_TO_MAP = 3,
+	PTR_TO_MAP_VALUE = 4,
+	PTR_TO_MAP_KEY = 5,
+	PTR_TO_STACK = 6,
+	PTR_TO_PACKET_META = 7,
+	PTR_TO_PACKET = 8,
+	PTR_TO_PACKET_END = 9,
+	PTR_TO_FLOW_KEYS = 10,
+	PTR_TO_SOCKET = 11,
+	PTR_TO_SOCK_COMMON = 12,
+	PTR_TO_TCP_SOCK = 13,
+	PTR_TO_TP_BUFFER = 14,
+	PTR_TO_XDP_SOCK = 15,
+	PTR_TO_BTF_ID = 16,
+	PTR_TO_MEM = 17,
+	PTR_TO_BUF = 18,
+	PTR_TO_FUNC = 19,
+	CONST_PTR_TO_DYNPTR = 20,
+	__BPF_REG_TYPE_MAX = 21,
+	PTR_TO_MAP_VALUE_OR_NULL = 260,
+	PTR_TO_SOCKET_OR_NULL = 267,
+	PTR_TO_SOCK_COMMON_OR_NULL = 268,
+	PTR_TO_TCP_SOCK_OR_NULL = 269,
+	PTR_TO_BTF_ID_OR_NULL = 272,
+	__BPF_REG_TYPE_LIMIT = 33554431,
+};
+
+enum bpf_cgroup_iter_order {
+	BPF_CGROUP_ITER_ORDER_UNSPEC = 0,
+	BPF_CGROUP_ITER_SELF_ONLY = 1,
+	BPF_CGROUP_ITER_DESCENDANTS_PRE = 2,
+	BPF_CGROUP_ITER_DESCENDANTS_POST = 3,
+	BPF_CGROUP_ITER_ANCESTORS_UP = 4,
+};
+
+enum bpf_iter_task_type {
+	BPF_TASK_ITER_ALL = 0,
+	BPF_TASK_ITER_TID = 1,
+	BPF_TASK_ITER_TGID = 2,
+};
+
+enum bpf_map_type {
+	BPF_MAP_TYPE_UNSPEC = 0,
+	BPF_MAP_TYPE_HASH = 1,
+	BPF_MAP_TYPE_ARRAY = 2,
+	BPF_MAP_TYPE_PROG_ARRAY = 3,
+	BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,
+	BPF_MAP_TYPE_PERCPU_HASH = 5,
+	BPF_MAP_TYPE_PERCPU_ARRAY = 6,
+	BPF_MAP_TYPE_STACK_TRACE = 7,
+	BPF_MAP_TYPE_CGROUP_ARRAY = 8,
+	BPF_MAP_TYPE_LRU_HASH = 9,
+	BPF_MAP_TYPE_LRU_PERCPU_HASH = 10,
+	BPF_MAP_TYPE_LPM_TRIE = 11,
+	BPF_MAP_TYPE_ARRAY_OF_MAPS = 12,
+	BPF_MAP_TYPE_HASH_OF_MAPS = 13,
+	BPF_MAP_TYPE_DEVMAP = 14,
+	BPF_MAP_TYPE_SOCKMAP = 15,
+	BPF_MAP_TYPE_CPUMAP = 16,
+	BPF_MAP_TYPE_XSKMAP = 17,
+	BPF_MAP_TYPE_SOCKHASH = 18,
+	BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED = 19,
+	BPF_MAP_TYPE_CGROUP_STORAGE = 19,
+	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,
+	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,
+	BPF_MAP_TYPE_QUEUE = 22,
+	BPF_MAP_TYPE_STACK = 23,
+	BPF_MAP_TYPE_SK_STORAGE = 24,
+	BPF_MAP_TYPE_DEVMAP_HASH = 25,
+	BPF_MAP_TYPE_STRUCT_OPS = 26,
+	BPF_MAP_TYPE_RINGBUF = 27,
+	BPF_MAP_TYPE_INODE_STORAGE = 28,
+	BPF_MAP_TYPE_TASK_STORAGE = 29,
+	BPF_MAP_TYPE_BLOOM_FILTER = 30,
+	BPF_MAP_TYPE_USER_RINGBUF = 31,
+	BPF_MAP_TYPE_CGRP_STORAGE = 32,
+};
+
+enum btf_field_type {
+	BPF_SPIN_LOCK = 1,
+	BPF_TIMER = 2,
+	BPF_KPTR_UNREF = 4,
+	BPF_KPTR_REF = 8,
+	BPF_KPTR = 12,
+	BPF_LIST_HEAD = 16,
+	BPF_LIST_NODE = 32,
+	BPF_RB_ROOT = 64,
+	BPF_RB_NODE = 128,
+	BPF_GRAPH_NODE_OR_ROOT = 240,
+	BPF_REFCOUNT = 256,
+};
+
+enum arm_smccc_conduit {
+	SMCCC_CONDUIT_NONE = 0,
+	SMCCC_CONDUIT_SMC = 1,
+	SMCCC_CONDUIT_HVC = 2,
+};
+
+enum bhb_mitigation_bits {
+	BHB_LOOP = 0,
+	BHB_FW = 1,
+	BHB_HW = 2,
+	BHB_INSN = 3,
+};
+
+enum aarch64_insn_variant {
+	AARCH64_INSN_VARIANT_32BIT = 0,
+	AARCH64_INSN_VARIANT_64BIT = 1,
+};
+
+enum aarch64_insn_movewide_type {
+	AARCH64_INSN_MOVEWIDE_ZERO = 0,
+	AARCH64_INSN_MOVEWIDE_KEEP = 1,
+	AARCH64_INSN_MOVEWIDE_INVERSE = 2,
+};
+
+enum aarch64_insn_register {
+	AARCH64_INSN_REG_0 = 0,
+	AARCH64_INSN_REG_1 = 1,
+	AARCH64_INSN_REG_2 = 2,
+	AARCH64_INSN_REG_3 = 3,
+	AARCH64_INSN_REG_4 = 4,
+	AARCH64_INSN_REG_5 = 5,
+	AARCH64_INSN_REG_6 = 6,
+	AARCH64_INSN_REG_7 = 7,
+	AARCH64_INSN_REG_8 = 8,
+	AARCH64_INSN_REG_9 = 9,
+	AARCH64_INSN_REG_10 = 10,
+	AARCH64_INSN_REG_11 = 11,
+	AARCH64_INSN_REG_12 = 12,
+	AARCH64_INSN_REG_13 = 13,
+	AARCH64_INSN_REG_14 = 14,
+	AARCH64_INSN_REG_15 = 15,
+	AARCH64_INSN_REG_16 = 16,
+	AARCH64_INSN_REG_17 = 17,
+	AARCH64_INSN_REG_18 = 18,
+	AARCH64_INSN_REG_19 = 19,
+	AARCH64_INSN_REG_20 = 20,
+	AARCH64_INSN_REG_21 = 21,
+	AARCH64_INSN_REG_22 = 22,
+	AARCH64_INSN_REG_23 = 23,
+	AARCH64_INSN_REG_24 = 24,
+	AARCH64_INSN_REG_25 = 25,
+	AARCH64_INSN_REG_26 = 26,
+	AARCH64_INSN_REG_27 = 27,
+	AARCH64_INSN_REG_28 = 28,
+	AARCH64_INSN_REG_29 = 29,
+	AARCH64_INSN_REG_FP = 29,
+	AARCH64_INSN_REG_30 = 30,
+	AARCH64_INSN_REG_LR = 30,
+	AARCH64_INSN_REG_ZR = 31,
+	AARCH64_INSN_REG_SP = 31,
+};
+
+enum aarch64_insn_logic_type {
+	AARCH64_INSN_LOGIC_AND = 0,
+	AARCH64_INSN_LOGIC_BIC = 1,
+	AARCH64_INSN_LOGIC_ORR = 2,
+	AARCH64_INSN_LOGIC_ORN = 3,
+	AARCH64_INSN_LOGIC_EOR = 4,
+	AARCH64_INSN_LOGIC_EON = 5,
+	AARCH64_INSN_LOGIC_AND_SETFLAGS = 6,
+	AARCH64_INSN_LOGIC_BIC_SETFLAGS = 7,
+};
+
+struct bpf_prog_stats {
+	u64_stats_t cnt;
+	u64_stats_t nsecs;
+	u64_stats_t misses;
+	struct u64_stats_sync syncp;
+	long: 64;
+};
+
+struct bpf_ksym {
+	unsigned long start;
+	unsigned long end;
+	char name[512];
+	struct list_head lnode;
+	struct latch_tree_node tnode;
+	bool prog;
+};
+
+struct btf;
+
+struct bpf_ctx_arg_aux;
+
+struct bpf_trampoline;
+
+struct btf_type;
+
+struct bpf_jit_poke_descriptor;
+
+struct bpf_kfunc_desc_tab;
+
+struct bpf_kfunc_btf_tab;
+
+struct bpf_prog_ops;
+
+struct bpf_map;
+
+struct btf_mod_pair;
+
+struct bpf_prog_offload;
+
+struct bpf_func_info;
+
+struct bpf_func_info_aux;
+
+struct bpf_line_info;
+
+struct bpf_prog_aux {
+	atomic64_t refcnt;
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 max_ctx_offset;
+	u32 max_pkt_offset;
+	u32 max_tp_access;
+	u32 stack_depth;
+	u32 id;
+	u32 func_cnt;
+	u32 func_idx;
+	u32 attach_btf_id;
+	u32 ctx_arg_info_size;
+	u32 max_rdonly_access;
+	u32 max_rdwr_access;
+	struct btf *attach_btf;
+	const struct bpf_ctx_arg_aux *ctx_arg_info;
+	struct mutex dst_mutex;
+	struct bpf_prog *dst_prog;
+	struct bpf_trampoline *dst_trampoline;
+	enum bpf_prog_type saved_dst_prog_type;
+	enum bpf_attach_type saved_dst_attach_type;
+	bool verifier_zext;
+	bool dev_bound;
+	bool offload_requested;
+	bool attach_btf_trace;
+	bool func_proto_unreliable;
+	bool sleepable;
+	bool tail_call_reachable;
+	bool xdp_has_frags;
+	const struct btf_type *attach_func_proto;
+	const char *attach_func_name;
+	struct bpf_prog **func;
+	void *jit_data;
+	struct bpf_jit_poke_descriptor *poke_tab;
+	struct bpf_kfunc_desc_tab *kfunc_tab;
+	struct bpf_kfunc_btf_tab *kfunc_btf_tab;
+	u32 size_poke_tab;
+	struct bpf_ksym ksym;
+	const struct bpf_prog_ops *ops;
+	struct bpf_map **used_maps;
+	struct mutex used_maps_mutex;
+	struct btf_mod_pair *used_btfs;
+	struct bpf_prog *prog;
+	struct user_struct *user;
+	u64 load_time;
+	u32 verified_insns;
+	int cgroup_atype;
+	struct bpf_map *cgroup_storage[2];
+	char name[16];
+	void *security;
+	struct bpf_prog_offload *offload;
+	struct btf *btf;
+	struct bpf_func_info *func_info;
+	struct bpf_func_info_aux *func_info_aux;
+	struct bpf_line_info *linfo;
+	void **jited_linfo;
+	u32 func_info_cnt;
+	u32 nr_linfo;
+	u32 linfo_idx;
+	struct module *mod;
+	u32 num_exentries;
+	struct exception_table_entry *extable;
+	union {
+		struct work_struct work;
+		struct callback_head rcu;
+	};
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_ctx_arg_aux {
+	u32 offset;
+	enum bpf_reg_type reg_type;
+	u32 btf_id;
+};
+
+struct btf_func_model {
+	u8 ret_size;
+	u8 ret_flags;
+	u8 nr_args;
+	u8 arg_size[12];
+	u8 arg_flags[12];
+};
+
+struct ftrace_ops;
+
+struct bpf_tramp_image;
+
+struct bpf_trampoline {
+	struct hlist_node hlist;
+	struct ftrace_ops *fops;
+	struct mutex mutex;
+	refcount_t refcnt;
+	u32 flags;
+	u64 key;
+	struct {
+		struct btf_func_model model;
+		void *addr;
+		bool ftrace_managed;
+	} func;
+	struct bpf_prog *extension_prog;
+	struct hlist_head progs_hlist[3];
+	int progs_cnt[3];
+	struct bpf_tramp_image *cur_image;
+	struct module *mod;
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_tramp_image {
+	void *image;
+	struct bpf_ksym ksym;
+	struct percpu_ref pcref;
+	void *ip_after_call;
+	void *ip_epilogue;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct btf_type {
+	__u32 name_off;
+	__u32 info;
+	union {
+		__u32 size;
+		__u32 type;
+	};
+};
+
+struct bpf_jit_poke_descriptor {
+	void *tailcall_target;
+	void *tailcall_bypass;
+	void *bypass_addr;
+	void *aux;
+	union {
+		struct {
+			struct bpf_map *map;
+			u32 key;
+		} tail_call;
+	};
+	bool tailcall_target_stable;
+	u8 adj_off;
+	u16 reason;
+	u32 insn_idx;
+};
+
+struct bpf_map_ops;
+
+struct btf_record;
+
+struct bpf_map {
+	const struct bpf_map_ops *ops;
+	struct bpf_map *inner_map_meta;
+	void *security;
+	enum bpf_map_type map_type;
+	u32 key_size;
+	u32 value_size;
+	u32 max_entries;
+	u64 map_extra;
+	u32 map_flags;
+	u32 id;
+	struct btf_record *record;
+	int numa_node;
+	u32 btf_key_type_id;
+	u32 btf_value_type_id;
+	u32 btf_vmlinux_value_type_id;
+	struct btf *btf;
+	struct obj_cgroup *objcg;
+	char name[16];
+	long: 64;
+	long: 64;
+	atomic64_t refcnt;
+	atomic64_t usercnt;
+	union {
+		struct work_struct work;
+		struct callback_head rcu;
+	};
+	struct mutex freeze_mutex;
+	atomic64_t writecnt;
+	struct {
+		spinlock_t lock;
+		enum bpf_prog_type type;
+		bool jited;
+		bool xdp_has_frags;
+	} owner;
+	bool bypass_spec_v1;
+	bool frozen;
+	bool free_after_mult_rcu_gp;
+	s64 __attribute__((btf_type_tag("percpu"))) *elem_count;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*bpf_callback_t)(u64, u64, u64, u64, u64);
+
+union bpf_attr;
+
+struct bpf_verifier_env;
+
+struct bpf_func_state;
+
+struct bpf_iter_seq_info;
+
+struct bpf_map_ops {
+	int (*map_alloc_check)(union bpf_attr *);
+	struct bpf_map * (*map_alloc)(union bpf_attr *);
+	void (*map_release)(struct bpf_map *, struct file *);
+	void (*map_free)(struct bpf_map *);
+	int (*map_get_next_key)(struct bpf_map *, void *, void *);
+	void (*map_release_uref)(struct bpf_map *);
+	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
+	int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr __attribute__((btf_type_tag("user"))) *);
+	int (*map_lookup_and_delete_elem)(struct bpf_map *, void *, void *, u64);
+	int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr __attribute__((btf_type_tag("user"))) *);
+	int (*map_update_batch)(struct bpf_map *, struct file *, const union bpf_attr *, union bpf_attr __attribute__((btf_type_tag("user"))) *);
+	int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr __attribute__((btf_type_tag("user"))) *);
+	void * (*map_lookup_elem)(struct bpf_map *, void *);
+	long (*map_update_elem)(struct bpf_map *, void *, void *, u64);
+	long (*map_delete_elem)(struct bpf_map *, void *);
+	long (*map_push_elem)(struct bpf_map *, void *, u64);
+	long (*map_pop_elem)(struct bpf_map *, void *);
+	long (*map_peek_elem)(struct bpf_map *, void *);
+	void * (*map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
+	void (*map_fd_put_ptr)(struct bpf_map *, void *, bool);
+	int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
+	u32 (*map_fd_sys_lookup_elem)(void *);
+	void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);
+	int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);
+	int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);
+	int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);
+	int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);
+	int (*map_mmap)(struct bpf_map *, struct vm_area_struct *);
+	__poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *);
+	int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);
+	void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) ** (*map_owner_storage_ptr)(void *);
+	long (*map_redirect)(struct bpf_map *, u64, u64);
+	bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);
+	int (*map_set_for_each_callback_args)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *);
+	long (*map_for_each_callback)(struct bpf_map *, bpf_callback_t, void *, u64);
+	u64 (*map_mem_usage)(const struct bpf_map *);
+	int *map_btf_id;
+	const struct bpf_iter_seq_info *iter_seq_info;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+union bpf_attr {
+	struct {
+		__u32 map_type;
+		__u32 key_size;
+		__u32 value_size;
+		__u32 max_entries;
+		__u32 map_flags;
+		__u32 inner_map_fd;
+		__u32 numa_node;
+		char map_name[16];
+		__u32 map_ifindex;
+		__u32 btf_fd;
+		__u32 btf_key_type_id;
+		__u32 btf_value_type_id;
+		__u32 btf_vmlinux_value_type_id;
+		__u64 map_extra;
+	};
+	struct {
+		__u32 map_fd;
+		__u64 key;
+		union {
+			__u64 value;
+			__u64 next_key;
+		};
+		__u64 flags;
+	};
+	struct {
+		__u64 in_batch;
+		__u64 out_batch;
+		__u64 keys;
+		__u64 values;
+		__u32 count;
+		__u32 map_fd;
+		__u64 elem_flags;
+		__u64 flags;
+	} batch;
+	struct {
+		__u32 prog_type;
+		__u32 insn_cnt;
+		__u64 insns;
+		__u64 license;
+		__u32 log_level;
+		__u32 log_size;
+		__u64 log_buf;
+		__u32 kern_version;
+		__u32 prog_flags;
+		char prog_name[16];
+		__u32 prog_ifindex;
+		__u32 expected_attach_type;
+		__u32 prog_btf_fd;
+		__u32 func_info_rec_size;
+		__u64 func_info;
+		__u32 func_info_cnt;
+		__u32 line_info_rec_size;
+		__u64 line_info;
+		__u32 line_info_cnt;
+		__u32 attach_btf_id;
+		union {
+			__u32 attach_prog_fd;
+			__u32 attach_btf_obj_fd;
+		};
+		__u32 core_relo_cnt;
+		__u64 fd_array;
+		__u64 core_relos;
+		__u32 core_relo_rec_size;
+		__u32 log_true_size;
+	};
+	struct {
+		__u64 pathname;
+		__u32 bpf_fd;
+		__u32 file_flags;
+		__s32 path_fd;
+	};
+	struct {
+		union {
+			__u32 target_fd;
+			__u32 target_ifindex;
+		};
+		__u32 attach_bpf_fd;
+		__u32 attach_type;
+		__u32 attach_flags;
+		__u32 replace_bpf_fd;
+		union {
+			__u32 relative_fd;
+			__u32 relative_id;
+		};
+		__u64 expected_revision;
+	};
+	struct {
+		__u32 prog_fd;
+		__u32 retval;
+		__u32 data_size_in;
+		__u32 data_size_out;
+		__u64 data_in;
+		__u64 data_out;
+		__u32 repeat;
+		__u32 duration;
+		__u32 ctx_size_in;
+		__u32 ctx_size_out;
+		__u64 ctx_in;
+		__u64 ctx_out;
+		__u32 flags;
+		__u32 cpu;
+		__u32 batch_size;
+	} test;
+	struct {
+		union {
+			__u32 start_id;
+			__u32 prog_id;
+			__u32 map_id;
+			__u32 btf_id;
+			__u32 link_id;
+		};
+		__u32 next_id;
+		__u32 open_flags;
+	};
+	struct {
+		__u32 bpf_fd;
+		__u32 info_len;
+		__u64 info;
+	} info;
+	struct {
+		union {
+			__u32 target_fd;
+			__u32 target_ifindex;
+		};
+		__u32 attach_type;
+		__u32 query_flags;
+		__u32 attach_flags;
+		__u64 prog_ids;
+		union {
+			__u32 prog_cnt;
+			__u32 count;
+		};
+		__u64 prog_attach_flags;
+		__u64 link_ids;
+		__u64 link_attach_flags;
+		__u64 revision;
+	} query;
+	struct {
+		__u64 name;
+		__u32 prog_fd;
+	} raw_tracepoint;
+	struct {
+		__u64 btf;
+		__u64 btf_log_buf;
+		__u32 btf_size;
+		__u32 btf_log_size;
+		__u32 btf_log_level;
+		__u32 btf_log_true_size;
+	};
+	struct {
+		__u32 pid;
+		__u32 fd;
+		__u32 flags;
+		__u32 buf_len;
+		__u64 buf;
+		__u32 prog_id;
+		__u32 fd_type;
+		__u64 probe_offset;
+		__u64 probe_addr;
+	} task_fd_query;
+	struct {
+		union {
+			__u32 prog_fd;
+			__u32 map_fd;
+		};
+		union {
+			__u32 target_fd;
+			__u32 target_ifindex;
+		};
+		__u32 attach_type;
+		__u32 flags;
+		union {
+			__u32 target_btf_id;
+			struct {
+				__u64 iter_info;
+				__u32 iter_info_len;
+			};
+			struct {
+				__u64 bpf_cookie;
+			} perf_event;
+			struct {
+				__u32 flags;
+				__u32 cnt;
+				__u64 syms;
+				__u64 addrs;
+				__u64 cookies;
+			} kprobe_multi;
+			struct {
+				__u32 target_btf_id;
+				__u64 cookie;
+			} tracing;
+			struct {
+				__u32 pf;
+				__u32 hooknum;
+				__s32 priority;
+				__u32 flags;
+			} netfilter;
+			struct {
+				union {
+					__u32 relative_fd;
+					__u32 relative_id;
+				};
+				__u64 expected_revision;
+			} tcx;
+			struct {
+				__u64 path;
+				__u64 offsets;
+				__u64 ref_ctr_offsets;
+				__u64 cookies;
+				__u32 cnt;
+				__u32 flags;
+				__u32 pid;
+			} uprobe_multi;
+		};
+	} link_create;
+	struct {
+		__u32 link_fd;
+		union {
+			__u32 new_prog_fd;
+			__u32 new_map_fd;
+		};
+		__u32 flags;
+		union {
+			__u32 old_prog_fd;
+			__u32 old_map_fd;
+		};
+	} link_update;
+	struct {
+		__u32 link_fd;
+	} link_detach;
+	struct {
+		__u32 type;
+	} enable_stats;
+	struct {
+		__u32 link_fd;
+		__u32 flags;
+	} iter_create;
+	struct {
+		__u32 prog_fd;
+		__u32 map_fd;
+		__u32 flags;
+	} prog_bind_map;
+};
+
+struct btf_header {
+	__u16 magic;
+	__u8 version;
+	__u8 flags;
+	__u32 hdr_len;
+	__u32 type_off;
+	__u32 type_len;
+	__u32 str_off;
+	__u32 str_len;
+};
+
+struct btf_kfunc_set_tab;
+
+struct btf_id_dtor_kfunc_tab;
+
+struct btf_struct_metas;
+
+struct btf {
+	void *data;
+	struct btf_type **types;
+	u32 *resolved_ids;
+	u32 *resolved_sizes;
+	const char *strings;
+	void *nohdr_data;
+	struct btf_header hdr;
+	u32 nr_types;
+	u32 types_size;
+	u32 data_size;
+	refcount_t refcnt;
+	u32 id;
+	struct callback_head rcu;
+	struct btf_kfunc_set_tab *kfunc_set_tab;
+	struct btf_id_dtor_kfunc_tab *dtor_kfunc_tab;
+	struct btf_struct_metas *struct_meta_tab;
+	struct btf *base_btf;
+	u32 start_id;
+	u32 start_str_off;
+	char name[56];
+	bool kernel_btf;
+};
+
+struct bpf_iter_aux_info;
+
+typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_fini_seq_priv_t)(void *);
+
+struct bpf_iter_seq_info {
+	const struct seq_operations *seq_ops;
+	bpf_iter_init_seq_priv_t init_seq_private;
+	bpf_iter_fini_seq_priv_t fini_seq_private;
+	u32 seq_priv_size;
+};
+
+struct bpf_iter_aux_info {
+	struct bpf_map *map;
+	struct {
+		struct cgroup *start;
+		enum bpf_cgroup_iter_order order;
+	} cgroup;
+	struct {
+		enum bpf_iter_task_type type;
+		u32 pid;
+	} task;
+};
+
+typedef void (*btf_dtor_kfunc_t)(void *);
+
+struct btf_field_kptr {
+	struct btf *btf;
+	struct module *module;
+	btf_dtor_kfunc_t dtor;
+	u32 btf_id;
+};
+
+struct btf_field_graph_root {
+	struct btf *btf;
+	u32 value_btf_id;
+	u32 node_offset;
+	struct btf_record *value_rec;
+};
+
+struct btf_field {
+	u32 offset;
+	u32 size;
+	enum btf_field_type type;
+	union {
+		struct btf_field_kptr kptr;
+		struct btf_field_graph_root graph_root;
+	};
+};
+
+struct btf_record {
+	u32 cnt;
+	u32 field_mask;
+	int spin_lock_off;
+	int timer_off;
+	int refcount_off;
+	struct btf_field fields[0];
+};
+
+struct bpf_prog_ops {
+	int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr __attribute__((btf_type_tag("user"))) *);
+};
+
+struct btf_mod_pair {
+	struct btf *btf;
+	struct module *module;
+};
+
+struct bpf_offload_dev;
+
+struct bpf_prog_offload {
+	struct bpf_prog *prog;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	void *dev_priv;
+	struct list_head offloads;
+	bool dev_state;
+	bool opt_failed;
+	void *jited_image;
+	u32 jited_len;
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_func_info {
+	__u32 insn_off;
+	__u32 type_id;
+};
+
+struct bpf_func_info_aux {
+	u16 linkage;
+	bool unreliable;
+};
+
+struct bpf_line_info {
+	__u32 insn_off;
+	__u32 file_name_off;
+	__u32 line_off;
+	__u32 line_col;
+};
+
+struct bpf_run_ctx {};
+
+struct arm_smccc_res {
+	unsigned long a0;
+	unsigned long a1;
+	unsigned long a2;
+	unsigned long a3;
+};
+
+struct ftr_set_desc {
+	char name[20];
+	struct arm64_ftr_override *override;
+	struct {
+		char name[10];
+		u8 shift;
+		u8 width;
+		bool (*filter)(u64);
+	} fields[0];
+};
+
+struct arm_cpuidle_irq_context {};
+
+struct aarch64_insn_patch {
+	void **text_addrs;
+	u32 *new_insns;
+	int insn_cnt;
+	atomic_t cpu_count;
+};
+
+typedef u32 compat_size_t;
+
+struct compat_statfs64 {
+	__u32 f_type;
+	__u32 f_bsize;
+	__u64 f_blocks;
+	__u64 f_bfree;
+	__u64 f_bavail;
+	__u64 f_files;
+	__u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	__u32 f_namelen;
+	__u32 f_frsize;
+	__u32 f_flags;
+	__u32 f_spare[4];
+} __attribute__((packed));
+
+struct compat_sigaltstack {
+	compat_uptr_t ss_sp;
+	int ss_flags;
+	compat_size_t ss_size;
+};
+
+typedef struct compat_sigaltstack compat_stack_t;
+
+struct compat_sigcontext {
+	compat_ulong_t trap_no;
+	compat_ulong_t error_code;
+	compat_ulong_t oldmask;
+	compat_ulong_t arm_r0;
+	compat_ulong_t arm_r1;
+	compat_ulong_t arm_r2;
+	compat_ulong_t arm_r3;
+	compat_ulong_t arm_r4;
+	compat_ulong_t arm_r5;
+	compat_ulong_t arm_r6;
+	compat_ulong_t arm_r7;
+	compat_ulong_t arm_r8;
+	compat_ulong_t arm_r9;
+	compat_ulong_t arm_r10;
+	compat_ulong_t arm_fp;
+	compat_ulong_t arm_ip;
+	compat_ulong_t arm_sp;
+	compat_ulong_t arm_lr;
+	compat_ulong_t arm_pc;
+	compat_ulong_t arm_cpsr;
+	compat_ulong_t fault_address;
+};
+
+typedef u32 compat_sigset_word;
+
+typedef struct {
+	compat_sigset_word sig[2];
+} compat_sigset_t;
+
+struct compat_ucontext {
+	compat_ulong_t uc_flags;
+	compat_uptr_t uc_link;
+	compat_stack_t uc_stack;
+	struct compat_sigcontext uc_mcontext;
+	compat_sigset_t uc_sigmask;
+	int __unused[30];
+	compat_ulong_t uc_regspace[128];
+};
+
+struct compat_sigframe {
+	struct compat_ucontext uc;
+	compat_ulong_t retcode[2];
+};
+
+typedef s32 compat_pid_t;
+
+typedef u32 __compat_uid32_t;
+
+typedef s32 compat_timer_t;
+
+typedef s32 compat_int_t;
+
+union compat_sigval {
+	compat_int_t sival_int;
+	compat_uptr_t sival_ptr;
+};
+
+typedef union compat_sigval compat_sigval_t;
+
+typedef s32 compat_clock_t;
+
+struct compat_siginfo {
+	int si_signo;
+	int si_errno;
+	int si_code;
+	union {
+		int _pad[29];
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+		} _kill;
+		struct {
+			compat_timer_t _tid;
+			int _overrun;
+			compat_sigval_t _sigval;
+		} _timer;
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+			compat_sigval_t _sigval;
+		} _rt;
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+			int _status;
+			compat_clock_t _utime;
+			compat_clock_t _stime;
+		} _sigchld;
+		struct {
+			compat_uptr_t _addr;
+			union {
+				int _trapno;
+				short _addr_lsb;
+				struct {
+					char _dummy_bnd[4];
+					compat_uptr_t _lower;
+					compat_uptr_t _upper;
+				} _addr_bnd;
+				struct {
+					char _dummy_pkey[4];
+					u32 _pkey;
+				} _addr_pkey;
+				struct {
+					compat_ulong_t _data;
+					u32 _type;
+					u32 _flags;
+				} _perf;
+			};
+		} _sigfault;
+		struct {
+			compat_long_t _band;
+			int _fd;
+		} _sigpoll;
+		struct {
+			compat_uptr_t _call_addr;
+			int _syscall;
+			unsigned int _arch;
+		} _sigsys;
+	} _sifields;
+};
+
+struct compat_rt_sigframe {
+	struct compat_siginfo info;
+	struct compat_sigframe sig;
+};
+
+typedef u64 compat_u64;
+
+struct compat_user_vfp {
+	compat_u64 fpregs[32];
+	compat_ulong_t fpscr;
+};
+
+struct compat_user_vfp_exc {
+	compat_ulong_t fpexc;
+	compat_ulong_t fpinst;
+	compat_ulong_t fpinst2;
+};
+
+struct compat_vfp_sigframe {
+	compat_ulong_t magic;
+	compat_ulong_t size;
+	struct compat_user_vfp ufp;
+	struct compat_user_vfp_exc ufp_exc;
+};
+
+struct compat_aux_sigframe {
+	struct compat_vfp_sigframe vfp;
+	unsigned long end_magic;
+};
+
+union __fpsimd_vreg {
+	__uint128_t raw;
+	struct {
+		u64 lo;
+		u64 hi;
+	};
+};
+
+enum aarch64_reloc_op {
+	RELOC_OP_NONE = 0,
+	RELOC_OP_ABS = 1,
+	RELOC_OP_PREL = 2,
+	RELOC_OP_PAGE = 3,
+};
+
+enum aarch64_insn_movw_imm_type {
+	AARCH64_INSN_IMM_MOVNZ = 0,
+	AARCH64_INSN_IMM_MOVKZ = 1,
+};
+
+enum aarch64_insn_branch_type {
+	AARCH64_INSN_BRANCH_NOLINK = 0,
+	AARCH64_INSN_BRANCH_LINK = 1,
+	AARCH64_INSN_BRANCH_RETURN = 2,
+	AARCH64_INSN_BRANCH_COMP_ZERO = 3,
+	AARCH64_INSN_BRANCH_COMP_NONZERO = 4,
+};
+
+struct ht_iterator;
+
+struct hyp_event {
+	char name[32];
+	bool *enabled;
+	char *print_fmt;
+	struct trace_event_fields *fields;
+	void (*trace_func)(struct ht_iterator *);
+	int id;
+};
+
+struct hyp_trace_buffer;
+
+struct hyp_entry_hdr;
+
+struct ht_iterator {
+	struct hyp_trace_buffer *hyp_buffer;
+	int cpu;
+	struct hyp_entry_hdr *ent;
+	unsigned long lost_events;
+	int ent_cpu;
+	size_t ent_size;
+	u64 ts;
+	void *spare;
+	size_t copy_leftover;
+	struct trace_seq seq;
+	struct delayed_work poll_work;
+};
+
+struct hyp_entry_hdr {
+	unsigned short id;
+};
+
+typedef __s64 Elf64_Sxword;
+
+struct elf64_rela {
+	Elf64_Addr r_offset;
+	Elf64_Xword r_info;
+	Elf64_Sxword r_addend;
+};
+
+typedef struct elf64_rela Elf64_Rela;
+
+enum aarch64_insn_adr_type {
+	AARCH64_INSN_ADR_TYPE_ADRP = 0,
+	AARCH64_INSN_ADR_TYPE_ADR = 1,
+};
+
+enum aarch64_insn_adsb_type {
+	AARCH64_INSN_ADSB_ADD = 0,
+	AARCH64_INSN_ADSB_SUB = 1,
+	AARCH64_INSN_ADSB_ADD_SETFLAGS = 2,
+	AARCH64_INSN_ADSB_SUB_SETFLAGS = 3,
+};
+
+enum mod_mem_type {
+	MOD_TEXT = 0,
+	MOD_DATA = 1,
+	MOD_RODATA = 2,
+	MOD_RO_AFTER_INIT = 3,
+	MOD_INIT_TEXT = 4,
+	MOD_INIT_DATA = 5,
+	MOD_INIT_RODATA = 6,
+	MOD_MEM_NUM_TYPES = 7,
+	MOD_INVALID = -1,
+};
+
+typedef void (*swap_func_t)(void *, void *, int);
+
+enum perf_event_arm_regs {
+	PERF_REG_ARM64_X0 = 0,
+	PERF_REG_ARM64_X1 = 1,
+	PERF_REG_ARM64_X2 = 2,
+	PERF_REG_ARM64_X3 = 3,
+	PERF_REG_ARM64_X4 = 4,
+	PERF_REG_ARM64_X5 = 5,
+	PERF_REG_ARM64_X6 = 6,
+	PERF_REG_ARM64_X7 = 7,
+	PERF_REG_ARM64_X8 = 8,
+	PERF_REG_ARM64_X9 = 9,
+	PERF_REG_ARM64_X10 = 10,
+	PERF_REG_ARM64_X11 = 11,
+	PERF_REG_ARM64_X12 = 12,
+	PERF_REG_ARM64_X13 = 13,
+	PERF_REG_ARM64_X14 = 14,
+	PERF_REG_ARM64_X15 = 15,
+	PERF_REG_ARM64_X16 = 16,
+	PERF_REG_ARM64_X17 = 17,
+	PERF_REG_ARM64_X18 = 18,
+	PERF_REG_ARM64_X19 = 19,
+	PERF_REG_ARM64_X20 = 20,
+	PERF_REG_ARM64_X21 = 21,
+	PERF_REG_ARM64_X22 = 22,
+	PERF_REG_ARM64_X23 = 23,
+	PERF_REG_ARM64_X24 = 24,
+	PERF_REG_ARM64_X25 = 25,
+	PERF_REG_ARM64_X26 = 26,
+	PERF_REG_ARM64_X27 = 27,
+	PERF_REG_ARM64_X28 = 28,
+	PERF_REG_ARM64_X29 = 29,
+	PERF_REG_ARM64_LR = 30,
+	PERF_REG_ARM64_SP = 31,
+	PERF_REG_ARM64_PC = 32,
+	PERF_REG_ARM64_MAX = 33,
+	PERF_REG_ARM64_VG = 46,
+	PERF_REG_ARM64_EXTENDED_MAX = 47,
+};
+
+enum perf_sample_regs_abi {
+	PERF_SAMPLE_REGS_ABI_NONE = 0,
+	PERF_SAMPLE_REGS_ABI_32 = 1,
+	PERF_SAMPLE_REGS_ABI_64 = 2,
+};
+
+struct perf_guest_info_callbacks {
+	unsigned int (*state)();
+	unsigned long (*get_ip)();
+	unsigned int (*handle_intel_pt_intr)();
+};
+
+struct perf_callchain_entry_ctx {
+	struct perf_callchain_entry *entry;
+	u32 max_stack;
+	u32 nr;
+	short contexts;
+	bool contexts_maxed;
+};
+
+enum hw_breakpoint_ops {
+	HW_BREAKPOINT_INSTALL = 0,
+	HW_BREAKPOINT_UNINSTALL = 1,
+	HW_BREAKPOINT_RESTORE = 2,
+};
+
+struct cpu_suspend_ctx {
+	u64 ctx_regs[13];
+	u64 sp;
+};
+
+struct sleep_stack_data {
+	struct cpu_suspend_ctx system_regs;
+	unsigned long callee_saved_regs[12];
+};
+
+enum jump_label_type {
+	JUMP_LABEL_NOP = 0,
+	JUMP_LABEL_JMP = 1,
+};
+
+struct screen_info {
+	__u8 orig_x;
+	__u8 orig_y;
+	__u16 ext_mem_k;
+	__u16 orig_video_page;
+	__u8 orig_video_mode;
+	__u8 orig_video_cols;
+	__u8 flags;
+	__u8 unused2;
+	__u16 orig_video_ega_bx;
+	__u16 unused3;
+	__u8 orig_video_lines;
+	__u8 orig_video_isVGA;
+	__u16 orig_video_points;
+	__u16 lfb_width;
+	__u16 lfb_height;
+	__u16 lfb_depth;
+	__u32 lfb_base;
+	__u32 lfb_size;
+	__u16 cl_magic;
+	__u16 cl_offset;
+	__u16 lfb_linelength;
+	__u8 red_size;
+	__u8 red_pos;
+	__u8 green_size;
+	__u8 green_pos;
+	__u8 blue_size;
+	__u8 blue_pos;
+	__u8 rsvd_size;
+	__u8 rsvd_pos;
+	__u16 vesapm_seg;
+	__u16 vesapm_off;
+	__u16 pages;
+	__u16 vesa_attributes;
+	__u32 capabilities;
+	__u32 ext_lfb_base;
+	__u8 _reserved[2];
+} __attribute__((packed));
+
+typedef int (*pte_fn_t)(pte_t *, unsigned long, void *);
+
+typedef unsigned long efi_status_t;
+
+typedef struct {
+	u32 type;
+	u32 pad;
+	u64 phys_addr;
+	u64 virt_addr;
+	u64 num_pages;
+	u64 attribute;
+} efi_memory_desc_t;
+
+struct set_perm_data {
+	const efi_memory_desc_t *md;
+	bool has_bti;
+};
+
+typedef unsigned short pci_bus_flags_t;
+
+struct pci_dev;
+
+struct pci_ops;
+
+struct pci_bus {
+	struct list_head node;
+	struct pci_bus *parent;
+	struct list_head children;
+	struct list_head devices;
+	struct pci_dev *self;
+	struct list_head slots;
+	struct resource *resource[4];
+	struct list_head resources;
+	struct resource busn_res;
+	struct pci_ops *ops;
+	void *sysdata;
+	struct proc_dir_entry *procdir;
+	unsigned char number;
+	unsigned char primary;
+	unsigned char max_bus_speed;
+	unsigned char cur_bus_speed;
+	int domain_nr;
+	char name[48];
+	unsigned short bridge_ctl;
+	pci_bus_flags_t bus_flags;
+	struct device *bridge;
+	struct device dev;
+	struct bin_attribute *legacy_io;
+	struct bin_attribute *legacy_mem;
+	unsigned int is_added: 1;
+	unsigned int unsafe_warn: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef int pci_power_t;
+
+typedef unsigned int pci_channel_state_t;
+
+typedef unsigned short pci_dev_flags_t;
+
+struct pci_vpd {
+	struct mutex lock;
+	unsigned int len;
+	u8 cap;
+};
+
+struct pci_slot;
+
+struct aer_stats;
+
+struct rcec_ea;
+
+struct pci_driver;
+
+struct pcie_link_state;
+
+struct pci_sriov;
+
+struct pci_dev {
+	struct list_head bus_list;
+	struct pci_bus *bus;
+	struct pci_bus *subordinate;
+	void *sysdata;
+	struct proc_dir_entry *procent;
+	struct pci_slot *slot;
+	unsigned int devfn;
+	unsigned short vendor;
+	unsigned short device;
+	unsigned short subsystem_vendor;
+	unsigned short subsystem_device;
+	unsigned int class;
+	u8 revision;
+	u8 hdr_type;
+	u16 aer_cap;
+	struct aer_stats *aer_stats;
+	struct rcec_ea *rcec_ea;
+	struct pci_dev *rcec;
+	u32 devcap;
+	u8 pcie_cap;
+	u8 msi_cap;
+	u8 msix_cap;
+	u8 pcie_mpss: 3;
+	u8 rom_base_reg;
+	u8 pin;
+	u16 pcie_flags_reg;
+	unsigned long *dma_alias_mask;
+	struct pci_driver *driver;
+	u64 dma_mask;
+	struct device_dma_parameters dma_parms;
+	pci_power_t current_state;
+	u8 pm_cap;
+	unsigned int imm_ready: 1;
+	unsigned int pme_support: 5;
+	unsigned int pme_poll: 1;
+	unsigned int d1_support: 1;
+	unsigned int d2_support: 1;
+	unsigned int no_d1d2: 1;
+	unsigned int no_d3cold: 1;
+	unsigned int bridge_d3: 1;
+	unsigned int d3cold_allowed: 1;
+	unsigned int mmio_always_on: 1;
+	unsigned int wakeup_prepared: 1;
+	unsigned int skip_bus_pm: 1;
+	unsigned int ignore_hotplug: 1;
+	unsigned int hotplug_user_indicators: 1;
+	unsigned int clear_retrain_link: 1;
+	unsigned int d3hot_delay;
+	unsigned int d3cold_delay;
+	struct pcie_link_state *link_state;
+	u16 l1ss;
+	unsigned int ltr_path: 1;
+	unsigned int pasid_no_tlp: 1;
+	unsigned int eetlp_prefix_path: 1;
+	pci_channel_state_t error_state;
+	struct device dev;
+	int cfg_size;
+	unsigned int irq;
+	struct resource resource[17];
+	struct resource driver_exclusive_resource;
+	bool match_driver;
+	unsigned int transparent: 1;
+	unsigned int io_window: 1;
+	unsigned int pref_window: 1;
+	unsigned int pref_64_window: 1;
+	unsigned int multifunction: 1;
+	unsigned int is_busmaster: 1;
+	unsigned int no_msi: 1;
+	unsigned int no_64bit_msi: 1;
+	unsigned int block_cfg_access: 1;
+	unsigned int broken_parity_status: 1;
+	unsigned int irq_reroute_variant: 2;
+	unsigned int msi_enabled: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int ari_enabled: 1;
+	unsigned int ats_enabled: 1;
+	unsigned int pasid_enabled: 1;
+	unsigned int pri_enabled: 1;
+	unsigned int is_managed: 1;
+	unsigned int is_msi_managed: 1;
+	unsigned int needs_freset: 1;
+	unsigned int state_saved: 1;
+	unsigned int is_physfn: 1;
+	unsigned int is_virtfn: 1;
+	unsigned int is_hotplug_bridge: 1;
+	unsigned int shpc_managed: 1;
+	unsigned int is_thunderbolt: 1;
+	unsigned int untrusted: 1;
+	unsigned int external_facing: 1;
+	unsigned int broken_intx_masking: 1;
+	unsigned int io_window_1k: 1;
+	unsigned int irq_managed: 1;
+	unsigned int non_compliant_bars: 1;
+	unsigned int is_probed: 1;
+	unsigned int link_active_reporting: 1;
+	unsigned int no_vf_scan: 1;
+	unsigned int no_command_memory: 1;
+	unsigned int rom_bar_overlap: 1;
+	unsigned int rom_attr_enabled: 1;
+	pci_dev_flags_t dev_flags;
+	atomic_t enable_cnt;
+	spinlock_t pcie_cap_lock;
+	u32 saved_config_space[16];
+	struct hlist_head saved_cap_space;
+	struct bin_attribute *res_attr[17];
+	struct bin_attribute *res_attr_wc[17];
+	void *msix_base;
+	raw_spinlock_t msi_lock;
+	struct pci_vpd vpd;
+	union {
+		struct pci_sriov *sriov;
+		struct pci_dev *physfn;
+	};
+	u16 ats_cap;
+	u8 ats_stu;
+	u16 acs_cap;
+	phys_addr_t rom;
+	size_t romlen;
+	const char *driver_override;
+	unsigned long priv_flags;
+	u8 reset_methods[7];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct hotplug_slot;
+
+struct pci_slot {
+	struct pci_bus *bus;
+	struct list_head list;
+	struct hotplug_slot *hotplug;
+	unsigned char number;
+	struct kobject kobj;
+};
+
+struct pci_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct pci_device_id;
+
+struct pci_error_handlers;
+
+struct pci_driver {
+	struct list_head node;
+	const char *name;
+	const struct pci_device_id *id_table;
+	int (*probe)(struct pci_dev *, const struct pci_device_id *);
+	void (*remove)(struct pci_dev *);
+	int (*suspend)(struct pci_dev *, pm_message_t);
+	int (*resume)(struct pci_dev *);
+	void (*shutdown)(struct pci_dev *);
+	int (*sriov_configure)(struct pci_dev *, int);
+	int (*sriov_set_msix_vec_count)(struct pci_dev *, int);
+	u32 (*sriov_get_vf_total_msix)(struct pci_dev *);
+	const struct pci_error_handlers *err_handler;
+	const struct attribute_group **groups;
+	const struct attribute_group **dev_groups;
+	struct device_driver driver;
+	struct pci_dynids dynids;
+	bool driver_managed_dma;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct pci_device_id {
+	__u32 vendor;
+	__u32 device;
+	__u32 subvendor;
+	__u32 subdevice;
+	__u32 class;
+	__u32 class_mask;
+	kernel_ulong_t driver_data;
+	__u32 override_only;
+};
+
+typedef unsigned int pci_ers_result_t;
+
+struct pci_error_handlers {
+	pci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t);
+	pci_ers_result_t (*mmio_enabled)(struct pci_dev *);
+	pci_ers_result_t (*slot_reset)(struct pci_dev *);
+	void (*reset_prepare)(struct pci_dev *);
+	void (*reset_done)(struct pci_dev *);
+	void (*resume)(struct pci_dev *);
+	void (*cor_error_detected)(struct pci_dev *);
+	u64 android_kabi_reserved1;
+};
+
+struct pci_ops {
+	int (*add_bus)(struct pci_bus *);
+	void (*remove_bus)(struct pci_bus *);
+	void * (*map_bus)(struct pci_bus *, unsigned int, int);
+	int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);
+	int (*write)(struct pci_bus *, unsigned int, int, int, u32);
+	u64 android_kabi_reserved1;
+};
+
+typedef void (*btf_trace_instruction_emulation)(void *, const char *, u64);
+
+enum legacy_insn_status {
+	INSN_DEPRECATED = 0,
+	INSN_OBSOLETE = 1,
+	INSN_UNAVAILABLE = 2,
+};
+
+struct insn_emulation {
+	const char *name;
+	enum legacy_insn_status status;
+	bool (*try_emulate)(struct pt_regs *, u32);
+	int (*set_hw_mode)(bool);
+	int current_mode;
+	int min;
+	int max;
+	struct ctl_table sysctl[2];
+};
+
+enum insn_emulation_mode {
+	INSN_UNDEF = 0,
+	INSN_EMULATE = 1,
+	INSN_HW = 2,
+};
+
+enum perf_sw_ids {
+	PERF_COUNT_SW_CPU_CLOCK = 0,
+	PERF_COUNT_SW_TASK_CLOCK = 1,
+	PERF_COUNT_SW_PAGE_FAULTS = 2,
+	PERF_COUNT_SW_CONTEXT_SWITCHES = 3,
+	PERF_COUNT_SW_CPU_MIGRATIONS = 4,
+	PERF_COUNT_SW_PAGE_FAULTS_MIN = 5,
+	PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,
+	PERF_COUNT_SW_ALIGNMENT_FAULTS = 7,
+	PERF_COUNT_SW_EMULATION_FAULTS = 8,
+	PERF_COUNT_SW_DUMMY = 9,
+	PERF_COUNT_SW_BPF_OUTPUT = 10,
+	PERF_COUNT_SW_CGROUP_SWITCHES = 11,
+	PERF_COUNT_SW_MAX = 12,
+};
+
+struct trace_event_raw_instruction_emulation {
+	struct trace_entry ent;
+	u32 __data_loc_instr;
+	u64 addr;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_instruction_emulation {
+	u32 instr;
+};
+
+typedef void (*smp_call_func_t)(void *);
+
+typedef bool (*smp_cond_func_t)(int, void *);
+
+struct pvclock_vcpu_stolen_time;
+
+struct pv_time_stolen_time_region {
+	struct pvclock_vcpu_stolen_time __attribute__((btf_type_tag("rcu"))) *kaddr;
+};
+
+struct pvclock_vcpu_stolen_time {
+	__le32 revision;
+	__le32 attributes;
+	__le64 stolen_time;
+	u8 padding[48];
+};
+
+enum {
+	MEMREMAP_WB = 1,
+	MEMREMAP_WT = 2,
+	MEMREMAP_WC = 4,
+	MEMREMAP_ENC = 8,
+	MEMREMAP_DEC = 16,
+};
+
+typedef __be64 fdt64_t;
+
+enum {
+	ASSUME_PERFECT = 255,
+	ASSUME_VALID_DTB = 1,
+	ASSUME_VALID_INPUT = 2,
+	ASSUME_LATEST = 4,
+	ASSUME_NO_ROLLBACK = 8,
+	ASSUME_LIBFDT_ORDER = 16,
+	ASSUME_LIBFDT_FLAWLESS = 32,
+};
+
+typedef __be32 fdt32_t;
+
+struct fdt_header {
+	fdt32_t magic;
+	fdt32_t totalsize;
+	fdt32_t off_dt_struct;
+	fdt32_t off_dt_strings;
+	fdt32_t off_mem_rsvmap;
+	fdt32_t version;
+	fdt32_t last_comp_version;
+	fdt32_t boot_cpuid_phys;
+	fdt32_t size_dt_strings;
+	fdt32_t size_dt_struct;
+};
+
+typedef u8 uint8_t;
+
+struct fdt_reserve_entry {
+	fdt64_t address;
+	fdt64_t size;
+};
+
+typedef u64 uint64_t;
+
+struct fdt_property {
+	fdt32_t tag;
+	fdt32_t len;
+	fdt32_t nameoff;
+	char data[0];
+};
+
+struct fdt_node_header {
+	fdt32_t tag;
+	char name[0];
+};
+
+struct core_vma_metadata {
+	unsigned long start;
+	unsigned long end;
+	unsigned long flags;
+	unsigned long dump_size;
+	unsigned long pgoff;
+	struct file *file;
+};
+
+struct coredump_params {
+	const kernel_siginfo_t *siginfo;
+	struct file *file;
+	unsigned long limit;
+	unsigned long mm_flags;
+	int cpu;
+	loff_t written;
+	loff_t pos;
+	loff_t to_skip;
+	int vma_count;
+	size_t vma_data_size;
+	struct core_vma_metadata *vma_meta;
+};
+
+struct elf64_phdr {
+	Elf64_Word p_type;
+	Elf64_Word p_flags;
+	Elf64_Off p_offset;
+	Elf64_Addr p_vaddr;
+	Elf64_Addr p_paddr;
+	Elf64_Xword p_filesz;
+	Elf64_Xword p_memsz;
+	Elf64_Xword p_align;
+};
+
+enum {
+	FOLL_WRITE = 1,
+	FOLL_GET = 2,
+	FOLL_DUMP = 4,
+	FOLL_FORCE = 8,
+	FOLL_NOWAIT = 16,
+	FOLL_NOFAULT = 32,
+	FOLL_HWPOISON = 64,
+	FOLL_ANON = 128,
+	FOLL_LONGTERM = 256,
+	FOLL_SPLIT_PMD = 512,
+	FOLL_PCI_P2PDMA = 1024,
+	FOLL_INTERRUPTIBLE = 2048,
+	FOLL_HONOR_NUMA_FAULT = 4096,
+};
+
+enum {
+	PACIASP = 3573752639,
+	AUTIASP = 3573752767,
+	SCS_PUSH = 4160783966,
+	SCS_POP = 4167011934,
+};
+
+struct eh_frame {
+	u32 size;
+	u32 cie_id_or_pointer;
+	union {
+		struct {
+			u8 version;
+			u8 augmentation_string[0];
+		};
+		struct {
+			s32 initial_loc;
+			s32 range;
+			u8 opcodes[0];
+		};
+	};
+};
+
+typedef u32 kprobe_opcode_t;
+
+struct kprobe;
+
+typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
+
+typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, unsigned long);
+
+typedef u32 probe_opcode_t;
+
+typedef void probes_handler_t(u32, long, struct pt_regs *);
+
+struct arch_probe_insn {
+	probe_opcode_t *insn;
+	pstate_check_t *pstate_cc;
+	probes_handler_t *handler;
+	unsigned long restore;
+};
+
+struct arch_specific_insn {
+	struct arch_probe_insn api;
+};
+
+struct kprobe {
+	struct hlist_node hlist;
+	struct list_head list;
+	unsigned long nmissed;
+	kprobe_opcode_t *addr;
+	const char *symbol_name;
+	unsigned int offset;
+	kprobe_pre_handler_t pre_handler;
+	kprobe_post_handler_t post_handler;
+	kprobe_opcode_t opcode;
+	struct arch_specific_insn ainsn;
+	u32 flags;
+};
+
+struct prev_kprobe {
+	struct kprobe *kp;
+	unsigned int status;
+};
+
+struct kprobe_ctlblk {
+	unsigned int kprobe_status;
+	unsigned long saved_irqflag;
+	struct prev_kprobe prev_kprobe;
+};
+
+enum probe_insn {
+	INSN_REJECTED = 0,
+	INSN_GOOD_NO_SLOT = 1,
+	INSN_GOOD = 2,
+};
+
+struct kprobe_insn_cache {
+	struct mutex mutex;
+	void * (*alloc)();
+	void (*free)(void *);
+	const char *sym;
+	struct list_head pages;
+	size_t insn_size;
+	int nr_garbage;
+};
+
+struct freelist_node {
+	atomic_t refs;
+	struct freelist_node *next;
+};
+
+struct kretprobe_holder;
+
+struct kretprobe_instance {
+	union {
+		struct freelist_node freelist;
+		struct callback_head rcu;
+	};
+	struct llist_node llist;
+	struct kretprobe_holder *rph;
+	kprobe_opcode_t *ret_addr;
+	void *fp;
+	char data[0];
+};
+
+struct kretprobe;
+
+struct kretprobe_holder {
+	struct kretprobe __attribute__((btf_type_tag("rcu"))) *rp;
+	refcount_t ref;
+};
+
+typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
+
+struct freelist_head {
+	struct freelist_node *head;
+};
+
+struct kretprobe {
+	struct kprobe kp;
+	kretprobe_handler_t handler;
+	kretprobe_handler_t entry_handler;
+	int maxactive;
+	int nmissed;
+	size_t data_size;
+	struct freelist_head freelist;
+	struct kretprobe_holder *rph;
+};
+
+enum aarch64_insn_special_register {
+	AARCH64_INSN_SPCLREG_SPSR_EL1 = 49664,
+	AARCH64_INSN_SPCLREG_ELR_EL1 = 49665,
+	AARCH64_INSN_SPCLREG_SP_EL0 = 49672,
+	AARCH64_INSN_SPCLREG_SPSEL = 49680,
+	AARCH64_INSN_SPCLREG_CURRENTEL = 49682,
+	AARCH64_INSN_SPCLREG_DAIF = 55825,
+	AARCH64_INSN_SPCLREG_NZCV = 55824,
+	AARCH64_INSN_SPCLREG_FPCR = 55840,
+	AARCH64_INSN_SPCLREG_DSPSR_EL0 = 55848,
+	AARCH64_INSN_SPCLREG_DLR_EL0 = 55849,
+	AARCH64_INSN_SPCLREG_SPSR_EL2 = 57856,
+	AARCH64_INSN_SPCLREG_ELR_EL2 = 57857,
+	AARCH64_INSN_SPCLREG_SP_EL1 = 57864,
+	AARCH64_INSN_SPCLREG_SPSR_INQ = 57880,
+	AARCH64_INSN_SPCLREG_SPSR_ABT = 57881,
+	AARCH64_INSN_SPCLREG_SPSR_UND = 57882,
+	AARCH64_INSN_SPCLREG_SPSR_FIQ = 57883,
+	AARCH64_INSN_SPCLREG_SPSR_EL3 = 61952,
+	AARCH64_INSN_SPCLREG_ELR_EL3 = 61953,
+	AARCH64_INSN_SPCLREG_SP_EL2 = 61968,
+};
+
+enum rp_check {
+	RP_CHECK_CALL = 0,
+	RP_CHECK_CHAIN_CALL = 1,
+	RP_CHECK_RET = 2,
+};
+
+struct arch_uprobe {
+	union {
+		u8 insn[4];
+		u8 ixol[4];
+	};
+	struct arch_probe_insn api;
+	bool simulate;
+};
+
+enum iommu_page_response_code {
+	IOMMU_PAGE_RESP_SUCCESS = 0,
+	IOMMU_PAGE_RESP_INVALID = 1,
+	IOMMU_PAGE_RESP_FAILURE = 2,
+};
+
+typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, unsigned long, int, void *);
+
+struct iommu_domain_geometry {
+	dma_addr_t aperture_start;
+	dma_addr_t aperture_end;
+	bool force_aperture;
+};
+
+struct iommu_dma_cookie;
+
+struct iommu_fault;
+
+struct iommu_domain {
+	unsigned int type;
+	const struct iommu_domain_ops *ops;
+	unsigned long pgsize_bitmap;
+	struct iommu_domain_geometry geometry;
+	struct iommu_dma_cookie *iova_cookie;
+	enum iommu_page_response_code (*iopf_handler)(struct iommu_fault *, void *);
+	void *fault_data;
+	union {
+		struct {
+			iommu_fault_handler_t handler;
+			void *handler_token;
+		};
+		struct {
+			struct mm_struct *mm;
+			int users;
+		};
+	};
+};
+
+struct iommu_domain_ops {
+	int (*attach_dev)(struct iommu_domain *, struct device *);
+	int (*set_dev_pasid)(struct iommu_domain *, struct device *, ioasid_t);
+	int (*map)(struct iommu_domain *, unsigned long, phys_addr_t, size_t, int, gfp_t);
+	int (*map_pages)(struct iommu_domain *, unsigned long, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
+	size_t (*unmap)(struct iommu_domain *, unsigned long, size_t, struct iommu_iotlb_gather *);
+	size_t (*unmap_pages)(struct iommu_domain *, unsigned long, size_t, size_t, struct iommu_iotlb_gather *);
+	void (*flush_iotlb_all)(struct iommu_domain *);
+	void (*iotlb_sync_map)(struct iommu_domain *, unsigned long, size_t);
+	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
+	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
+	bool (*enforce_cache_coherency)(struct iommu_domain *);
+	int (*enable_nesting)(struct iommu_domain *);
+	int (*set_pgtable_quirks)(struct iommu_domain *, unsigned long);
+	void (*free)(struct iommu_domain *);
+};
+
+struct iommu_iotlb_gather {
+	unsigned long start;
+	unsigned long end;
+	size_t pgsize;
+	struct list_head freelist;
+	bool queued;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct iommu_fault_unrecoverable {
+	__u32 reason;
+	__u32 flags;
+	__u32 pasid;
+	__u32 perm;
+	__u64 addr;
+	__u64 fetch_addr;
+};
+
+struct iommu_fault_page_request {
+	__u32 flags;
+	__u32 pasid;
+	__u32 grpid;
+	__u32 perm;
+	__u64 addr;
+	__u64 private_data[2];
+};
+
+struct iommu_fault {
+	__u32 type;
+	__u32 padding;
+	union {
+		struct iommu_fault_unrecoverable event;
+		struct iommu_fault_page_request prm;
+		__u8 padding2[56];
+	};
+};
+
+struct iommu_device {
+	struct list_head list;
+	const struct iommu_ops *ops;
+	struct fwnode_handle *fwnode;
+	struct device *dev;
+	u32 max_pasids;
+};
+
+struct of_phandle_args {
+	struct device_node *np;
+	int args_count;
+	uint32_t args[16];
+};
+
+struct iommu_fault_event {
+	struct iommu_fault fault;
+	struct list_head list;
+};
+
+struct iommu_page_response {
+	__u32 argsz;
+	__u32 version;
+	__u32 flags;
+	__u32 pasid;
+	__u32 grpid;
+	__u32 code;
+};
+
+struct sg_table {
+	struct scatterlist *sgl;
+	unsigned int nents;
+	unsigned int orig_nents;
+};
+
+struct scatterlist {
+	unsigned long page_link;
+	unsigned int offset;
+	unsigned int length;
+	dma_addr_t dma_address;
+	unsigned int dma_length;
+	unsigned int dma_flags;
+};
+
+struct io_tlb_area;
+
+struct io_tlb_slot;
+
+struct io_tlb_pool {
+	phys_addr_t start;
+	phys_addr_t end;
+	void *vaddr;
+	unsigned long nslabs;
+	bool late_alloc;
+	unsigned int nareas;
+	unsigned int area_nslabs;
+	struct io_tlb_area *areas;
+	struct io_tlb_slot *slots;
+	struct list_head node;
+	struct callback_head rcu;
+	bool transient;
+};
+
+struct io_tlb_mem {
+	struct io_tlb_pool defpool;
+	unsigned long nslabs;
+	struct dentry *debugfs;
+	bool force_bounce;
+	bool for_alloc;
+	bool can_grow;
+	u64 phys_limit;
+	spinlock_t lock;
+	struct list_head pools;
+	struct work_struct dyn_alloc;
+	atomic_long_t total_used;
+	atomic_long_t used_hiwater;
+};
+
+struct iopf_device_param;
+
+struct iommu_fault_param;
+
+struct iommu_fwspec;
+
+struct dev_iommu {
+	struct mutex lock;
+	struct iommu_fault_param *fault_param;
+	struct iopf_device_param *iopf_param;
+	struct iommu_fwspec *fwspec;
+	struct iommu_device *iommu_dev;
+	void *priv;
+	u32 max_pasids;
+	u32 attach_deferred: 1;
+	u32 pci_32bit_workaround: 1;
+	u32 require_direct: 1;
+};
+
+typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
+
+struct iommu_fault_param {
+	iommu_dev_fault_handler_t handler;
+	void *data;
+	struct list_head faults;
+	struct mutex lock;
+};
+
+struct iommu_fwspec {
+	const struct iommu_ops *ops;
+	struct fwnode_handle *iommu_fwnode;
+	u32 flags;
+	unsigned int num_ids;
+	u32 ids[0];
+};
+
+struct fault_info {
+	int (*fn)(unsigned long, unsigned long, struct pt_regs *);
+	int sig;
+	int code;
+	const char *name;
+};
+
+typedef u64 pudval_t;
+
+enum node_stat_item {
+	NR_LRU_BASE = 0,
+	NR_INACTIVE_ANON = 0,
+	NR_ACTIVE_ANON = 1,
+	NR_INACTIVE_FILE = 2,
+	NR_ACTIVE_FILE = 3,
+	NR_UNEVICTABLE = 4,
+	NR_SLAB_RECLAIMABLE_B = 5,
+	NR_SLAB_UNRECLAIMABLE_B = 6,
+	NR_ISOLATED_ANON = 7,
+	NR_ISOLATED_FILE = 8,
+	WORKINGSET_NODES = 9,
+	WORKINGSET_REFAULT_BASE = 10,
+	WORKINGSET_REFAULT_ANON = 10,
+	WORKINGSET_REFAULT_FILE = 11,
+	WORKINGSET_ACTIVATE_BASE = 12,
+	WORKINGSET_ACTIVATE_ANON = 12,
+	WORKINGSET_ACTIVATE_FILE = 13,
+	WORKINGSET_RESTORE_BASE = 14,
+	WORKINGSET_RESTORE_ANON = 14,
+	WORKINGSET_RESTORE_FILE = 15,
+	WORKINGSET_NODERECLAIM = 16,
+	NR_ANON_MAPPED = 17,
+	NR_FILE_MAPPED = 18,
+	NR_FILE_PAGES = 19,
+	NR_FILE_DIRTY = 20,
+	NR_WRITEBACK = 21,
+	NR_WRITEBACK_TEMP = 22,
+	NR_SHMEM = 23,
+	NR_SHMEM_THPS = 24,
+	NR_SHMEM_PMDMAPPED = 25,
+	NR_FILE_THPS = 26,
+	NR_FILE_PMDMAPPED = 27,
+	NR_ANON_THPS = 28,
+	NR_VMSCAN_WRITE = 29,
+	NR_VMSCAN_IMMEDIATE = 30,
+	NR_DIRTIED = 31,
+	NR_WRITTEN = 32,
+	NR_THROTTLED_WRITTEN = 33,
+	NR_KERNEL_MISC_RECLAIMABLE = 34,
+	NR_FOLL_PIN_ACQUIRED = 35,
+	NR_FOLL_PIN_RELEASED = 36,
+	NR_KERNEL_STACK_KB = 37,
+	NR_KERNEL_SCS_KB = 38,
+	NR_PAGETABLE = 39,
+	NR_SECONDARY_PAGETABLE = 40,
+	NR_SWAPCACHE = 41,
+	NR_VM_NODE_STAT_ITEMS = 42,
+};
+
+enum {
+	SECTION_MARKED_PRESENT_BIT = 0,
+	SECTION_HAS_MEM_MAP_BIT = 1,
+	SECTION_IS_ONLINE_BIT = 2,
+	SECTION_IS_EARLY_BIT = 3,
+	SECTION_MAP_LAST_BIT = 4,
+};
+
+typedef u64 p4dval_t;
+
+struct ptdesc {
+	unsigned long __page_flags;
+	union {
+		struct callback_head pt_rcu_head;
+		struct list_head pt_list;
+		struct {
+			unsigned long _pt_pad_1;
+			pgtable_t pmd_huge_pte;
+		};
+	};
+	unsigned long __page_mapping;
+	union {
+		struct mm_struct *pt_mm;
+		atomic_t pt_frag_refcount;
+	};
+	union {
+		unsigned long _pt_pad_2;
+		spinlock_t ptl;
+	};
+	unsigned int __page_type;
+	atomic_t _refcount;
+	unsigned long pt_memcg_data;
+};
+
+struct mhp_params {
+	struct vmem_altmap *altmap;
+	pgprot_t pgprot;
+	struct dev_pagemap *pgmap;
+};
+
+struct mem_section_usage;
+
+struct page_ext;
+
+struct mem_section {
+	unsigned long section_mem_map;
+	struct mem_section_usage *usage;
+	struct page_ext *page_ext;
+	unsigned long pad;
+};
+
+struct mem_section_usage {
+	struct callback_head rcu;
+	unsigned long subsection_map[1];
+	unsigned long pageblock_flags[0];
+};
+
+struct page_ext {
+	unsigned long flags;
+};
+
+struct memory_notify {
+	unsigned long start_pfn;
+	unsigned long nr_pages;
+	int status_change_nid_normal;
+	int status_change_nid;
+};
+
+struct page_change_data {
+	pgprot_t set_mask;
+	pgprot_t clear_mask;
+};
+
+typedef int cydp_t;
+
+struct prot_bits;
+
+struct pg_level {
+	const struct prot_bits *bits;
+	const char *name;
+	size_t num;
+	u64 mask;
+};
+
+struct prot_bits {
+	u64 mask;
+	u64 val;
+	const char *set;
+	const char *clear;
+};
+
+struct addr_marker {
+	unsigned long start_address;
+	char *name;
+};
+
+struct ptdump_info {
+	struct mm_struct *mm;
+	const struct addr_marker *markers;
+	unsigned long base_addr;
+};
+
+enum address_markers_idx {
+	PAGE_OFFSET_NR = 0,
+	PAGE_END_NR = 1,
+};
+
+struct ptdump_range;
+
+struct ptdump_state {
+	void (*note_page)(struct ptdump_state *, unsigned long, int, u64);
+	void (*effective_prot)(struct ptdump_state *, int, u64);
+	const struct ptdump_range *range;
+};
+
+struct pg_state {
+	struct ptdump_state ptdump;
+	struct pg_level *pg_level;
+	struct seq_file *seq;
+	const struct addr_marker *marker;
+	unsigned long start_address;
+	int level;
+	u64 current_prot;
+	bool check_wx;
+	unsigned long wx_pages;
+	unsigned long uxn_pages;
+};
+
+struct ptdump_range {
+	unsigned long start;
+	unsigned long end;
+};
+
+struct xa_node {
+	unsigned char shift;
+	unsigned char offset;
+	unsigned char count;
+	unsigned char nr_values;
+	struct xa_node __attribute__((btf_type_tag("rcu"))) *parent;
+	struct xarray *array;
+	union {
+		struct list_head private_list;
+		struct callback_head callback_head;
+	};
+	void __attribute__((btf_type_tag("rcu"))) *slots[64];
+	union {
+		unsigned long tags[3];
+		unsigned long marks[3];
+	};
+};
+
+typedef void (*xa_update_node_t)(struct xa_node *);
+
+struct xa_state {
+	struct xarray *xa;
+	unsigned long xa_index;
+	unsigned char xa_shift;
+	unsigned char xa_sibs;
+	unsigned char xa_offset;
+	unsigned char xa_pad;
+	struct xa_node *xa_node;
+	struct xa_node *xa_alloc;
+	xa_update_node_t xa_update;
+	struct list_lru *xa_lru;
+};
+
+struct sock_fprog_kern {
+	u16 len;
+	struct sock_filter *filter;
+};
+
+struct bpf_map_dev_ops;
+
+struct bpf_offloaded_map {
+	struct bpf_map map;
+	struct net_device *netdev;
+	const struct bpf_map_dev_ops *dev_ops;
+	void *dev_priv;
+	struct list_head offloads;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_map_dev_ops {
+	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);
+	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
+	u64 android_kabi_reserved1;
+};
+
+struct Qdisc_class_ops;
+
+struct gnet_dump;
+
+struct Qdisc_ops {
+	struct Qdisc_ops *next;
+	const struct Qdisc_class_ops *cl_ops;
+	char id[16];
+	int priv_size;
+	unsigned int static_flags;
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	struct sk_buff * (*peek)(struct Qdisc *);
+	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*reset)(struct Qdisc *);
+	void (*destroy)(struct Qdisc *);
+	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*attach)(struct Qdisc *);
+	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
+	void (*change_real_num_tx)(struct Qdisc *, unsigned int);
+	int (*dump)(struct Qdisc *, struct sk_buff *);
+	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
+	void (*ingress_block_set)(struct Qdisc *, u32);
+	void (*egress_block_set)(struct Qdisc *, u32);
+	u32 (*ingress_block_get)(struct Qdisc *);
+	u32 (*egress_block_get)(struct Qdisc *);
+	struct module *owner;
+	u64 android_kabi_reserved1;
+};
+
+struct tcmsg;
+
+struct qdisc_walker;
+
+struct tcf_block;
+
+struct Qdisc_class_ops {
+	unsigned int flags;
+	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
+	int (*graft)(struct Qdisc *, unsigned long, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
+	struct Qdisc * (*leaf)(struct Qdisc *, unsigned long);
+	void (*qlen_notify)(struct Qdisc *, unsigned long);
+	unsigned long (*find)(struct Qdisc *, u32);
+	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, unsigned long *, struct netlink_ext_ack *);
+	int (*delete)(struct Qdisc *, unsigned long, struct netlink_ext_ack *);
+	void (*walk)(struct Qdisc *, struct qdisc_walker *);
+	struct tcf_block * (*tcf_block)(struct Qdisc *, unsigned long, struct netlink_ext_ack *);
+	unsigned long (*bind_tcf)(struct Qdisc *, unsigned long, u32);
+	void (*unbind_tcf)(struct Qdisc *, unsigned long);
+	int (*dump)(struct Qdisc *, unsigned long, struct sk_buff *, struct tcmsg *);
+	int (*dump_stats)(struct Qdisc *, unsigned long, struct gnet_dump *);
+	u64 android_kabi_reserved1;
+};
+
+struct tcmsg {
+	unsigned char tcm_family;
+	unsigned char tcm__pad1;
+	unsigned short tcm__pad2;
+	int tcm_ifindex;
+	__u32 tcm_handle;
+	__u32 tcm_parent;
+	__u32 tcm_info;
+};
+
+struct flow_block {
+	struct list_head cb_list;
+};
+
+struct tcf_chain;
+
+struct tcf_block {
+	struct mutex lock;
+	struct list_head chain_list;
+	u32 index;
+	u32 classid;
+	refcount_t refcnt;
+	struct net *net;
+	struct Qdisc *q;
+	struct rw_semaphore cb_lock;
+	struct flow_block flow_block;
+	struct list_head owner_list;
+	bool keep_dst;
+	atomic_t offloadcnt;
+	unsigned int nooffloaddevcnt;
+	unsigned int lockeddevcnt;
+	struct {
+		struct tcf_chain *chain;
+		struct list_head filter_chain_list;
+	} chain0;
+	struct callback_head rcu;
+	struct hlist_head proto_destroy_ht[128];
+	struct mutex proto_destroy_lock;
+};
+
+struct tcf_proto;
+
+struct tcf_proto_ops;
+
+struct tcf_chain {
+	struct mutex filter_chain_lock;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_chain;
+	struct list_head list;
+	struct tcf_block *block;
+	u32 index;
+	unsigned int refcnt;
+	unsigned int action_refcnt;
+	bool explicitly_created;
+	bool flushing;
+	const struct tcf_proto_ops *tmplt_ops;
+	void *tmplt_priv;
+	struct callback_head rcu;
+};
+
+struct tcf_result;
+
+struct tcf_proto {
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *next;
+	void __attribute__((btf_type_tag("rcu"))) *root;
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	__be16 protocol;
+	u32 prio;
+	void *data;
+	const struct tcf_proto_ops *ops;
+	struct tcf_chain *chain;
+	spinlock_t lock;
+	bool deleting;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct hlist_node destroy_ht_node;
+};
+
+struct tcf_result {
+	union {
+		struct {
+			unsigned long class;
+			u32 classid;
+		};
+		const struct tcf_proto *goto_tp;
+	};
+};
+
+typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
+
+struct tcf_walker;
+
+struct tcf_exts;
+
+struct tcf_proto_ops {
+	struct list_head head;
+	char kind[16];
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	int (*init)(struct tcf_proto *);
+	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
+	void * (*get)(struct tcf_proto *, u32);
+	void (*put)(struct tcf_proto *, void *);
+	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, unsigned long, u32, struct nlattr **, void **, u32, struct netlink_ext_ack *);
+	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
+	bool (*delete_empty)(struct tcf_proto *);
+	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
+	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
+	void (*hw_add)(struct tcf_proto *, void *);
+	void (*hw_del)(struct tcf_proto *, void *);
+	void (*bind_class)(void *, u32, unsigned long, void *, unsigned long);
+	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
+	void (*tmplt_destroy)(void *);
+	void (*tmplt_reoffload)(struct tcf_chain *, bool, flow_setup_cb_t *, void *);
+	struct tcf_exts * (*get_exts)(const struct tcf_proto *, u32);
+	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
+	struct module *owner;
+	int flags;
+};
+
+struct tc_stats {
+	__u64 bytes;
+	__u32 packets;
+	__u32 drops;
+	__u32 overlimits;
+	__u32 bps;
+	__u32 pps;
+	__u32 qlen;
+	__u32 backlog;
+};
+
+struct gnet_dump {
+	spinlock_t *lock;
+	struct sk_buff *skb;
+	struct nlattr *tail;
+	int compat_tc_stats;
+	int compat_xstats;
+	int padattr;
+	void *xstats;
+	int xstats_len;
+	struct tc_stats tc_stats;
+};
+
+struct tc_sizespec {
+	unsigned char cell_log;
+	unsigned char size_log;
+	short cell_align;
+	int overhead;
+	unsigned int linklayer;
+	unsigned int mpu;
+	unsigned int mtu;
+	unsigned int tsize;
+};
+
+struct qdisc_size_table {
+	struct callback_head rcu;
+	struct list_head list;
+	struct tc_sizespec szopts;
+	int refcnt;
+	u16 data[0];
+};
+
+struct net_rate_estimator {
+	struct gnet_stats_basic_sync *bstats;
+	spinlock_t *stats_lock;
+	bool running;
+	struct gnet_stats_basic_sync __attribute__((btf_type_tag("percpu"))) *cpu_bstats;
+	u8 ewma_log;
+	u8 intvl_log;
+	seqcount_t seq;
+	u64 last_packets;
+	u64 last_bytes;
+	u64 avpps;
+	u64 avbps;
+	unsigned long next_jiffies;
+	struct timer_list timer;
+	struct callback_head rcu;
+};
+
+enum bpf_link_type {
+	BPF_LINK_TYPE_UNSPEC = 0,
+	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
+	BPF_LINK_TYPE_TRACING = 2,
+	BPF_LINK_TYPE_CGROUP = 3,
+	BPF_LINK_TYPE_ITER = 4,
+	BPF_LINK_TYPE_NETNS = 5,
+	BPF_LINK_TYPE_XDP = 6,
+	BPF_LINK_TYPE_PERF_EVENT = 7,
+	BPF_LINK_TYPE_KPROBE_MULTI = 8,
+	BPF_LINK_TYPE_STRUCT_OPS = 9,
+	BPF_LINK_TYPE_NETFILTER = 10,
+	BPF_LINK_TYPE_TCX = 11,
+	BPF_LINK_TYPE_UPROBE_MULTI = 12,
+	MAX_BPF_LINK_TYPE = 13,
+};
+
+enum bpf_text_poke_type {
+	BPF_MOD_CALL = 0,
+	BPF_MOD_JUMP = 1,
+};
+
+enum {
+	BPF_REG_0 = 0,
+	BPF_REG_1 = 1,
+	BPF_REG_2 = 2,
+	BPF_REG_3 = 3,
+	BPF_REG_4 = 4,
+	BPF_REG_5 = 5,
+	BPF_REG_6 = 6,
+	BPF_REG_7 = 7,
+	BPF_REG_8 = 8,
+	BPF_REG_9 = 9,
+	BPF_REG_10 = 10,
+	__MAX_BPF_REG = 11,
+};
+
+enum aarch64_insn_ldst_type {
+	AARCH64_INSN_LDST_LOAD_REG_OFFSET = 0,
+	AARCH64_INSN_LDST_STORE_REG_OFFSET = 1,
+	AARCH64_INSN_LDST_LOAD_IMM_OFFSET = 2,
+	AARCH64_INSN_LDST_STORE_IMM_OFFSET = 3,
+	AARCH64_INSN_LDST_LOAD_PAIR_PRE_INDEX = 4,
+	AARCH64_INSN_LDST_STORE_PAIR_PRE_INDEX = 5,
+	AARCH64_INSN_LDST_LOAD_PAIR_POST_INDEX = 6,
+	AARCH64_INSN_LDST_STORE_PAIR_POST_INDEX = 7,
+	AARCH64_INSN_LDST_LOAD_EX = 8,
+	AARCH64_INSN_LDST_LOAD_ACQ_EX = 9,
+	AARCH64_INSN_LDST_STORE_EX = 10,
+	AARCH64_INSN_LDST_STORE_REL_EX = 11,
+	AARCH64_INSN_LDST_SIGNED_LOAD_IMM_OFFSET = 12,
+	AARCH64_INSN_LDST_SIGNED_LOAD_REG_OFFSET = 13,
+};
+
+enum aarch64_insn_bitfield_type {
+	AARCH64_INSN_BITFIELD_MOVE = 0,
+	AARCH64_INSN_BITFIELD_MOVE_UNSIGNED = 1,
+	AARCH64_INSN_BITFIELD_MOVE_SIGNED = 2,
+};
+
+enum aarch64_insn_data3_type {
+	AARCH64_INSN_DATA3_MADD = 0,
+	AARCH64_INSN_DATA3_MSUB = 1,
+};
+
+enum aarch64_insn_data2_type {
+	AARCH64_INSN_DATA2_UDIV = 0,
+	AARCH64_INSN_DATA2_SDIV = 1,
+	AARCH64_INSN_DATA2_LSLV = 2,
+	AARCH64_INSN_DATA2_LSRV = 3,
+	AARCH64_INSN_DATA2_ASRV = 4,
+	AARCH64_INSN_DATA2_RORV = 5,
+};
+
+enum aarch64_insn_data1_type {
+	AARCH64_INSN_DATA1_REVERSE_16 = 0,
+	AARCH64_INSN_DATA1_REVERSE_32 = 1,
+	AARCH64_INSN_DATA1_REVERSE_64 = 2,
+};
+
+enum aarch64_insn_condition {
+	AARCH64_INSN_COND_EQ = 0,
+	AARCH64_INSN_COND_NE = 1,
+	AARCH64_INSN_COND_CS = 2,
+	AARCH64_INSN_COND_CC = 3,
+	AARCH64_INSN_COND_MI = 4,
+	AARCH64_INSN_COND_PL = 5,
+	AARCH64_INSN_COND_VS = 6,
+	AARCH64_INSN_COND_VC = 7,
+	AARCH64_INSN_COND_HI = 8,
+	AARCH64_INSN_COND_LS = 9,
+	AARCH64_INSN_COND_GE = 10,
+	AARCH64_INSN_COND_LT = 11,
+	AARCH64_INSN_COND_GT = 12,
+	AARCH64_INSN_COND_LE = 13,
+	AARCH64_INSN_COND_AL = 14,
+};
+
+enum aarch64_insn_size_type {
+	AARCH64_INSN_SIZE_8 = 0,
+	AARCH64_INSN_SIZE_16 = 1,
+	AARCH64_INSN_SIZE_32 = 2,
+	AARCH64_INSN_SIZE_64 = 3,
+};
+
+enum aarch64_insn_mem_atomic_op {
+	AARCH64_INSN_MEM_ATOMIC_ADD = 0,
+	AARCH64_INSN_MEM_ATOMIC_CLR = 1,
+	AARCH64_INSN_MEM_ATOMIC_EOR = 2,
+	AARCH64_INSN_MEM_ATOMIC_SET = 3,
+	AARCH64_INSN_MEM_ATOMIC_SWP = 4,
+};
+
+enum aarch64_insn_mem_order_type {
+	AARCH64_INSN_MEM_ORDER_NONE = 0,
+	AARCH64_INSN_MEM_ORDER_ACQ = 1,
+	AARCH64_INSN_MEM_ORDER_REL = 2,
+	AARCH64_INSN_MEM_ORDER_ACQREL = 3,
+};
+
+enum aarch64_insn_mb_type {
+	AARCH64_INSN_MB_SY = 0,
+	AARCH64_INSN_MB_ST = 1,
+	AARCH64_INSN_MB_LD = 2,
+	AARCH64_INSN_MB_ISH = 3,
+	AARCH64_INSN_MB_ISHST = 4,
+	AARCH64_INSN_MB_ISHLD = 5,
+	AARCH64_INSN_MB_NSH = 6,
+	AARCH64_INSN_MB_NSHST = 7,
+	AARCH64_INSN_MB_NSHLD = 8,
+	AARCH64_INSN_MB_OSH = 9,
+	AARCH64_INSN_MB_OSHST = 10,
+	AARCH64_INSN_MB_OSHLD = 11,
+};
+
+enum {
+	DUMP_PREFIX_NONE = 0,
+	DUMP_PREFIX_ADDRESS = 1,
+	DUMP_PREFIX_OFFSET = 2,
+};
+
+enum bpf_tramp_prog_type {
+	BPF_TRAMP_FENTRY = 0,
+	BPF_TRAMP_FEXIT = 1,
+	BPF_TRAMP_MODIFY_RETURN = 2,
+	BPF_TRAMP_MAX = 3,
+	BPF_TRAMP_REPLACE = 4,
+};
+
+struct bpf_plt {
+	u32 insn_ldr;
+	u32 insn_br;
+	u64 target;
+};
+
+struct jit_ctx {
+	const struct bpf_prog *prog;
+	int idx;
+	int epilogue_offset;
+	int *offset;
+	int exentry_idx;
+	__le32 *image;
+	u32 stack_size;
+	int fpb_offset;
+};
+
+struct bpf_binary_header {
+	u32 size;
+	long: 0;
+	u8 image[0];
+};
+
+typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
+
+typedef __kernel_long_t __kernel_off_t;
+
+typedef __kernel_off_t off_t;
+
+struct bpf_tramp_link;
+
+struct bpf_tramp_links {
+	struct bpf_tramp_link *links[38];
+	int nr_links;
+};
+
+struct bpf_link_ops;
+
+struct bpf_link {
+	atomic64_t refcnt;
+	u32 id;
+	enum bpf_link_type type;
+	const struct bpf_link_ops *ops;
+	struct bpf_prog *prog;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct bpf_tramp_link {
+	struct bpf_link link;
+	struct hlist_node tramp_hlist;
+	u64 cookie;
+};
+
+struct bpf_link_info;
+
+struct bpf_link_ops {
+	void (*release)(struct bpf_link *);
+	void (*dealloc)(struct bpf_link *);
+	void (*dealloc_deferred)(struct bpf_link *);
+	int (*detach)(struct bpf_link *);
+	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
+	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
+	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
+	int (*update_map)(struct bpf_link *, struct bpf_map *, struct bpf_map *);
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_link_info {
+	__u32 type;
+	__u32 id;
+	__u32 prog_id;
+	union {
+		struct {
+			__u64 tp_name;
+			__u32 tp_name_len;
+		} raw_tracepoint;
+		struct {
+			__u32 attach_type;
+			__u32 target_obj_id;
+			__u32 target_btf_id;
+		} tracing;
+		struct {
+			__u64 cgroup_id;
+			__u32 attach_type;
+		} cgroup;
+		struct {
+			__u64 target_name;
+			__u32 target_name_len;
+			union {
+				struct {
+					__u32 map_id;
+				} map;
+			};
+			union {
+				struct {
+					__u64 cgroup_id;
+					__u32 order;
+				} cgroup;
+				struct {
+					__u32 tid;
+					__u32 pid;
+				} task;
+			};
+		} iter;
+		struct {
+			__u32 netns_ino;
+			__u32 attach_type;
+		} netns;
+		struct {
+			__u32 ifindex;
+		} xdp;
+		struct {
+			__u32 map_id;
+		} struct_ops;
+		struct {
+			__u32 pf;
+			__u32 hooknum;
+			__s32 priority;
+			__u32 flags;
+		} netfilter;
+		struct {
+			__u64 addrs;
+			__u32 count;
+			__u32 flags;
+		} kprobe_multi;
+		struct {
+			__u32 type;
+			union {
+				struct {
+					__u64 file_name;
+					__u32 name_len;
+					__u32 offset;
+				} uprobe;
+				struct {
+					__u64 func_name;
+					__u32 name_len;
+					__u32 offset;
+					__u64 addr;
+				} kprobe;
+				struct {
+					__u64 tp_name;
+					__u32 name_len;
+				} tracepoint;
+				struct {
+					__u64 config;
+					__u32 type;
+				} event;
+			};
+		} perf_event;
+		struct {
+			__u32 ifindex;
+			__u32 attach_type;
+		} tcx;
+	};
+};
+
+struct bpf_tramp_run_ctx;
+
+typedef u64 (*bpf_trampoline_enter_t)(struct bpf_prog *, struct bpf_tramp_run_ctx *);
+
+struct bpf_tramp_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+	struct bpf_run_ctx *saved_run_ctx;
+};
+
+typedef void (*bpf_trampoline_exit_t)(struct bpf_prog *, u64, struct bpf_tramp_run_ctx *);
+
+struct arm64_jit_data {
+	struct bpf_binary_header *header;
+	u8 *image;
+	struct jit_ctx ctx;
+};
+
+typedef void (*btf_trace_kvm_userspace_exit)(void *, __u32, int);
+
+typedef void (*btf_trace_kvm_vcpu_wakeup)(void *, __u64, bool, bool);
+
+typedef void (*btf_trace_kvm_set_irq)(void *, unsigned int, int, int);
+
+typedef void (*btf_trace_kvm_ack_irq)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kvm_mmio)(void *, int, int, u64, void *);
+
+typedef void (*btf_trace_kvm_fpu)(void *, int);
+
+typedef void (*btf_trace_kvm_halt_poll_ns)(void *, bool, unsigned int, unsigned int, unsigned int);
+
+struct kvm_dirty_ring;
+
+typedef void (*btf_trace_kvm_dirty_ring_push)(void *, struct kvm_dirty_ring *, u32, u64);
+
+struct kvm_dirty_gfn;
+
+struct kvm_dirty_ring {
+	u32 dirty_index;
+	u32 reset_index;
+	u32 size;
+	u32 soft_limit;
+	struct kvm_dirty_gfn *dirty_gfns;
+	int index;
+};
+
+struct kvm_dirty_gfn {
+	__u32 flags;
+	__u32 slot;
+	__u64 offset;
+};
+
+typedef void (*btf_trace_kvm_dirty_ring_reset)(void *, struct kvm_dirty_ring *);
+
+struct kvm_vcpu;
+
+typedef void (*btf_trace_kvm_dirty_ring_exit)(void *, struct kvm_vcpu *);
+
+struct preempt_ops;
+
+struct preempt_notifier {
+	struct hlist_node link;
+	struct preempt_ops *ops;
+};
+
+typedef u64 gpa_t;
+
+struct kvm_mmio_fragment {
+	gpa_t gpa;
+	void *data;
+	unsigned int len;
+};
+
+struct kvm_cpu_context {
+	struct user_pt_regs regs;
+	u64 spsr_abt;
+	u64 spsr_und;
+	u64 spsr_irq;
+	u64 spsr_fiq;
+	struct user_fpsimd_state fp_regs;
+	u64 sys_regs[167];
+	struct kvm_vcpu *__hyp_running_vcpu;
+};
+
+struct kvm_vcpu_fault_info {
+	u64 esr_el2;
+	u64 far_el2;
+	u64 hpfar_el2;
+	u64 disr_el1;
+};
+
+struct kvm_guest_debug_arch {
+	__u64 dbg_bcr[16];
+	__u64 dbg_bvr[16];
+	__u64 dbg_wcr[16];
+	__u64 dbg_wvr[16];
+};
+
+struct vgic_v2_cpu_if {
+	u32 vgic_hcr;
+	u32 vgic_vmcr;
+	u32 vgic_apr;
+	u32 vgic_lr[64];
+	unsigned int used_lrs;
+};
+
+typedef unsigned long irq_hw_number_t;
+
+struct its_vm;
+
+struct its_vpe {
+	struct page *vpt_page;
+	struct its_vm *its_vm;
+	atomic_t vlpi_count;
+	int irq;
+	irq_hw_number_t vpe_db_lpi;
+	bool resident;
+	bool ready;
+	union {
+		struct {
+			int vpe_proxy_event;
+			bool idai;
+		};
+		struct {
+			struct fwnode_handle *fwnode;
+			struct irq_domain *sgi_domain;
+			struct {
+				u8 priority;
+				bool enabled;
+				bool group;
+			} sgi_config[16];
+			atomic_t vmapp_count;
+		};
+	};
+	raw_spinlock_t vpe_lock;
+	u16 col_idx;
+	u16 vpe_id;
+	bool pending_last;
+};
+
+struct vgic_v3_cpu_if {
+	u32 vgic_hcr;
+	u32 vgic_vmcr;
+	u32 vgic_sre;
+	u32 vgic_ap0r[4];
+	u32 vgic_ap1r[4];
+	u64 vgic_lr[16];
+	struct its_vpe its_vpe;
+	unsigned int used_lrs;
+};
+
+enum vgic_irq_config {
+	VGIC_CONFIG_EDGE = 0,
+	VGIC_CONFIG_LEVEL = 1,
+};
+
+struct irq_ops;
+
+struct vgic_irq {
+	raw_spinlock_t irq_lock;
+	struct list_head lpi_list;
+	struct list_head ap_list;
+	struct kvm_vcpu *vcpu;
+	struct kvm_vcpu *target_vcpu;
+	u32 intid;
+	bool line_level;
+	bool pending_latch;
+	bool active;
+	bool enabled;
+	bool hw;
+	struct kref refcount;
+	u32 hwintid;
+	unsigned int host_irq;
+	union {
+		u8 targets;
+		u32 mpidr;
+	};
+	u8 source;
+	u8 active_source;
+	u8 priority;
+	u8 group;
+	enum vgic_irq_config config;
+	struct irq_ops *ops;
+	void *owner;
+};
+
+enum iodev_type {
+	IODEV_CPUIF = 0,
+	IODEV_DIST = 1,
+	IODEV_REDIST = 2,
+	IODEV_ITS = 3,
+};
+
+struct kvm_io_device_ops;
+
+struct kvm_io_device {
+	const struct kvm_io_device_ops *ops;
+};
+
+struct vgic_its;
+
+struct vgic_register_region;
+
+struct vgic_io_device {
+	gpa_t base_addr;
+	union {
+		struct kvm_vcpu *redist_vcpu;
+		struct vgic_its *its;
+	};
+	const struct vgic_register_region *regions;
+	enum iodev_type iodev_type;
+	int nr_regions;
+	struct kvm_io_device dev;
+};
+
+struct vgic_redist_region;
+
+struct vgic_cpu {
+	union {
+		struct vgic_v2_cpu_if vgic_v2;
+		struct vgic_v3_cpu_if vgic_v3;
+	};
+	struct vgic_irq private_irqs[32];
+	raw_spinlock_t ap_list_lock;
+	struct list_head ap_list_head;
+	struct vgic_io_device rd_iodev;
+	struct vgic_redist_region *rdreg;
+	u32 rdreg_index;
+	atomic_t syncr_busy;
+	u64 pendbaser;
+	atomic_t ctlr;
+	u32 num_pri_bits;
+	u32 num_id_bits;
+};
+
+struct arch_timer_offset {
+	u64 *vm_offset;
+	u64 *vcpu_offset;
+};
+
+struct arch_timer_context {
+	struct kvm_vcpu *vcpu;
+	struct hrtimer hrtimer;
+	u64 ns_frac;
+	struct arch_timer_offset offset;
+	bool loaded;
+	struct {
+		bool level;
+	} irq;
+	u32 host_timer_irq;
+};
+
+struct arch_timer_cpu {
+	struct arch_timer_context timers[4];
+	struct hrtimer bg_timer;
+	bool enabled;
+};
+
+struct kvm_pmu_events {
+	u32 events_host;
+	u32 events_guest;
+};
+
+struct kvm_pmc {
+	u8 idx;
+	struct perf_event *perf_event;
+};
+
+struct kvm_pmu {
+	struct irq_work overflow_work;
+	struct kvm_pmu_events events;
+	struct kvm_pmc pmc[32];
+	int irq_num;
+	bool created;
+	bool irq_level;
+};
+
+struct kvm_mp_state {
+	__u32 mp_state;
+};
+
+struct kvm_mmu_memory_cache {
+	gfp_t gfp_zero;
+	gfp_t gfp_custom;
+	struct kmem_cache *kmem_cache;
+	int capacity;
+	int nobjs;
+	void **objects;
+};
+
+struct kvm_hyp_memcache {
+	phys_addr_t head;
+	unsigned long nr_pages;
+	unsigned long flags;
+};
+
+struct vcpu_reset_state {
+	unsigned long pc;
+	unsigned long r0;
+	bool be;
+	bool reset;
+};
+
+struct kvm_s2_mmu;
+
+struct kvm_vcpu_arch {
+	struct kvm_cpu_context ctxt;
+	void *sve_state;
+	enum fp_type fp_type;
+	unsigned int sve_max_vl;
+	u64 svcr;
+	struct kvm_s2_mmu *hw_mmu;
+	u64 hcr_el2;
+	u64 mdcr_el2;
+	u64 cptr_el2;
+	u64 mdcr_el2_host;
+	struct kvm_vcpu_fault_info fault;
+	enum {
+		FP_STATE_FREE = 0,
+		FP_STATE_HOST_OWNED = 1,
+		FP_STATE_GUEST_OWNED = 2,
+	} fp_state;
+	u8 cflags;
+	u8 iflags;
+	u8 sflags;
+	bool pause;
+	struct kvm_guest_debug_arch *debug_ptr;
+	struct kvm_guest_debug_arch vcpu_debug_state;
+	struct kvm_guest_debug_arch external_debug_state;
+	struct user_fpsimd_state *host_fpsimd_state;
+	struct {
+		struct kvm_guest_debug_arch regs;
+		u64 pmscr_el1;
+		u64 trfcr_el1;
+	} host_debug_state;
+	struct vgic_cpu vgic_cpu;
+	struct arch_timer_cpu timer_cpu;
+	struct kvm_pmu pmu;
+	struct {
+		u32 mdscr_el1;
+		bool pstate_ss;
+	} guest_debug_preserved;
+	struct kvm_mp_state mp_state;
+	spinlock_t mp_state_lock;
+	union {
+		struct kvm_mmu_memory_cache mmu_page_cache;
+		struct kvm_hyp_memcache stage2_mc;
+	};
+	unsigned long features[1];
+	u64 vsesr_el2;
+	struct vcpu_reset_state reset_state;
+	struct {
+		u64 last_steal;
+		gpa_t base;
+	} steal;
+	u32 *ccsidr;
+	struct kvm_hyp_req *hyp_reqs;
+};
+
+struct kvm_vcpu_stat_generic {
+	u64 halt_successful_poll;
+	u64 halt_attempted_poll;
+	u64 halt_poll_invalid;
+	u64 halt_wakeup;
+	u64 halt_poll_success_ns;
+	u64 halt_poll_fail_ns;
+	u64 halt_wait_ns;
+	u64 halt_poll_success_hist[32];
+	u64 halt_poll_fail_hist[32];
+	u64 halt_wait_hist[32];
+	u64 blocking;
+};
+
+struct kvm_vcpu_stat {
+	struct kvm_vcpu_stat_generic generic;
+	u64 hvc_exit_stat;
+	u64 wfe_exit_stat;
+	u64 wfi_exit_stat;
+	u64 mmio_exit_user;
+	u64 mmio_exit_kernel;
+	u64 signal_exits;
+	u64 exits;
+};
+
+struct kvm;
+
+struct kvm_run;
+
+struct kvm_memory_slot;
+
+struct kvm_vcpu {
+	struct kvm *kvm;
+	struct preempt_notifier preempt_notifier;
+	int cpu;
+	int vcpu_id;
+	int vcpu_idx;
+	int ____srcu_idx;
+	int mode;
+	u64 requests;
+	unsigned long guest_debug;
+	struct mutex mutex;
+	struct kvm_run *run;
+	struct rcuwait wait;
+	struct pid __attribute__((btf_type_tag("rcu"))) *pid;
+	int sigset_active;
+	sigset_t sigset;
+	unsigned int halt_poll_ns;
+	bool valid_wakeup;
+	int mmio_needed;
+	int mmio_read_completed;
+	int mmio_is_write;
+	int mmio_cur_fragment;
+	int mmio_nr_fragments;
+	struct kvm_mmio_fragment mmio_fragments[2];
+	struct {
+		bool in_spin_loop;
+		bool dy_eligible;
+	} spin_loop;
+	bool preempted;
+	bool ready;
+	long: 64;
+	struct kvm_vcpu_arch arch;
+	struct kvm_vcpu_stat stat;
+	char stats_id[48];
+	struct kvm_dirty_ring dirty_ring;
+	struct kvm_memory_slot *last_used_slot;
+	u64 last_used_slot_gen;
+	long: 64;
+};
+
+struct kvm_memslots {
+	u64 generation;
+	atomic_long_t last_used_slot;
+	struct rb_root_cached hva_tree;
+	struct rb_root gfn_tree;
+	struct hlist_head id_hash[128];
+	int node_idx;
+};
+
+struct kvm_vm_stat_generic {
+	u64 remote_tlb_flush;
+	u64 remote_tlb_flush_requests;
+};
+
+struct kvm_vm_stat {
+	struct kvm_vm_stat_generic generic;
+	atomic64_t protected_hyp_mem;
+	atomic64_t protected_shared_mem;
+	atomic64_t protected_pgtable_mem;
+};
+
+struct kvm_vmid {
+	atomic64_t id;
+};
+
+struct kvm_pgtable;
+
+struct kvm_arch;
+
+struct kvm_s2_mmu {
+	struct kvm_vmid vmid;
+	phys_addr_t pgd_phys;
+	struct kvm_pgtable *pgt;
+	int __attribute__((btf_type_tag("percpu"))) *last_vcpu_ran;
+	struct kvm_mmu_memory_cache split_page_cache;
+	uint64_t split_page_chunk_size;
+	struct kvm_arch *arch;
+};
+
+struct its_vm {
+	struct fwnode_handle *fwnode;
+	struct irq_domain *domain;
+	struct page *vprop_page;
+	struct its_vpe **vpes;
+	int nr_vpes;
+	irq_hw_number_t db_lpi_base;
+	unsigned long *db_bitmap;
+	int nr_db_lpis;
+	u32 vlpi_count[16];
+};
+
+struct vgic_state_iter;
+
+struct vgic_dist {
+	bool in_kernel;
+	bool ready;
+	bool initialized;
+	u32 vgic_model;
+	u32 implementation_rev;
+	bool v2_groups_user_writable;
+	bool msis_require_devid;
+	int nr_spis;
+	gpa_t vgic_dist_base;
+	union {
+		gpa_t vgic_cpu_base;
+		struct list_head rd_regions;
+	};
+	bool enabled;
+	bool nassgireq;
+	struct vgic_irq *spis;
+	struct vgic_io_device dist_iodev;
+	bool has_its;
+	bool table_write_in_progress;
+	u64 propbaser;
+	raw_spinlock_t lpi_list_lock;
+	struct list_head lpi_list_head;
+	int lpi_list_count;
+	struct list_head lpi_translation_cache;
+	struct vgic_state_iter *iter;
+	struct its_vm its_vm;
+};
+
+struct arch_timer_vm_data {
+	u64 voffset;
+	u64 poffset;
+	u8 ppi[4];
+};
+
+struct kvm_smccc_features {
+	unsigned long std_bmap;
+	unsigned long std_hyp_bmap;
+	unsigned long vendor_hyp_bmap;
+};
+
+typedef unsigned int pkvm_handle_t;
+
+struct kvm_protected_vm {
+	pkvm_handle_t handle;
+	struct kvm_hyp_memcache stage2_teardown_mc;
+	struct maple_tree pinned_pages;
+	gpa_t pvmfw_load_addr;
+	bool enabled;
+};
+
+struct arm_pmu;
+
+struct kvm_arch {
+	struct kvm_s2_mmu mmu;
+	u64 vtcr;
+	struct vgic_dist vgic;
+	struct arch_timer_vm_data timer_data;
+	u32 psci_version;
+	struct mutex config_lock;
+	unsigned long flags;
+	unsigned long vcpu_features[1];
+	unsigned long *pmu_filter;
+	struct arm_pmu *arm_pmu;
+	cpumask_var_t supported_cpus;
+	struct kvm_smccc_features smccc_feat;
+	struct maple_tree smccc_filter;
+	u64 id_regs[56];
+	struct kvm_protected_vm pkvm;
+};
+
+struct mmu_notifier_ops;
+
+struct mmu_notifier {
+	struct hlist_node hlist;
+	const struct mmu_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct callback_head rcu;
+	unsigned int users;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct kvm_io_bus;
+
+struct kvm_coalesced_mmio_ring;
+
+struct kvm_irq_routing_table;
+
+struct kvm_stat_data;
+
+struct kvm {
+	rwlock_t mmu_lock;
+	struct mutex slots_lock;
+	struct mutex slots_arch_lock;
+	struct mm_struct *mm;
+	unsigned long nr_memslot_pages;
+	struct kvm_memslots __memslots[2];
+	struct kvm_memslots __attribute__((btf_type_tag("rcu"))) *memslots[1];
+	struct xarray vcpu_array;
+	atomic_t nr_memslots_dirty_logging;
+	spinlock_t mn_invalidate_lock;
+	unsigned long mn_active_invalidate_count;
+	struct rcuwait mn_memslots_update_rcuwait;
+	spinlock_t gpc_lock;
+	struct list_head gpc_list;
+	atomic_t online_vcpus;
+	int max_vcpus;
+	int created_vcpus;
+	int last_boosted_vcpu;
+	struct list_head vm_list;
+	struct mutex lock;
+	struct kvm_io_bus __attribute__((btf_type_tag("rcu"))) *buses[4];
+	struct {
+		spinlock_t lock;
+		struct list_head items;
+		struct list_head resampler_list;
+		struct mutex resampler_lock;
+	} irqfds;
+	struct list_head ioeventfds;
+	struct kvm_vm_stat stat;
+	struct kvm_arch arch;
+	refcount_t users_count;
+	struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
+	spinlock_t ring_lock;
+	struct list_head coalesced_zones;
+	struct mutex irq_lock;
+	struct kvm_irq_routing_table __attribute__((btf_type_tag("rcu"))) *irq_routing;
+	struct hlist_head irq_ack_notifier_list;
+	struct mmu_notifier mmu_notifier;
+	unsigned long mmu_invalidate_seq;
+	long mmu_invalidate_in_progress;
+	unsigned long mmu_invalidate_range_start;
+	unsigned long mmu_invalidate_range_end;
+	struct list_head devices;
+	u64 manual_dirty_log_protect;
+	struct dentry *debugfs_dentry;
+	struct kvm_stat_data **debugfs_stat_data;
+	struct srcu_struct srcu;
+	struct srcu_struct irq_srcu;
+	pid_t userspace_pid;
+	bool override_halt_poll_ns;
+	unsigned int max_halt_poll_ns;
+	u32 dirty_ring_size;
+	bool dirty_ring_with_bitmap;
+	bool vm_bugged;
+	bool vm_dead;
+	char stats_id[48];
+};
+
+struct kvm_io_range {
+	gpa_t addr;
+	int len;
+	struct kvm_io_device *dev;
+};
+
+struct kvm_io_bus {
+	int dev_count;
+	int ioeventfd_count;
+	struct kvm_io_range range[0];
+};
+
+struct kvm_io_device_ops {
+	int (*read)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, void *);
+	int (*write)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, const void *);
+	void (*destructor)(struct kvm_io_device *);
+};
+
+struct irq_ops {
+	unsigned long flags;
+	bool (*get_input_level)(int);
+};
+
+struct kvm_device;
+
+struct vgic_its {
+	gpa_t vgic_its_base;
+	bool enabled;
+	struct vgic_io_device iodev;
+	struct kvm_device *dev;
+	u64 baser_device_table;
+	u64 baser_coll_table;
+	struct mutex cmd_lock;
+	u64 cbaser;
+	u32 creadr;
+	u32 cwriter;
+	u32 abi_rev;
+	struct mutex its_lock;
+	struct list_head device_list;
+	struct list_head collection_list;
+};
+
+struct kvm_device_ops;
+
+struct kvm_device {
+	const struct kvm_device_ops *ops;
+	struct kvm *kvm;
+	void *private;
+	struct list_head vm_node;
+};
+
+struct kvm_device_attr;
+
+struct kvm_device_ops {
+	const char *name;
+	int (*create)(struct kvm_device *, u32);
+	void (*init)(struct kvm_device *);
+	void (*destroy)(struct kvm_device *);
+	void (*release)(struct kvm_device *);
+	int (*set_attr)(struct kvm_device *, struct kvm_device_attr *);
+	int (*get_attr)(struct kvm_device *, struct kvm_device_attr *);
+	int (*has_attr)(struct kvm_device *, struct kvm_device_attr *);
+	long (*ioctl)(struct kvm_device *, unsigned int, unsigned long);
+	int (*mmap)(struct kvm_device *, struct vm_area_struct *);
+};
+
+struct kvm_device_attr {
+	__u32 flags;
+	__u32 group;
+	__u64 attr;
+	__u64 addr;
+};
+
+struct vgic_register_region {
+	unsigned int reg_offset;
+	unsigned int len;
+	unsigned int bits_per_irq;
+	unsigned int access_flags;
+	union {
+		unsigned long (*read)(struct kvm_vcpu *, gpa_t, unsigned int);
+		unsigned long (*its_read)(struct kvm *, struct vgic_its *, gpa_t, unsigned int);
+	};
+	union {
+		void (*write)(struct kvm_vcpu *, gpa_t, unsigned int, unsigned long);
+		void (*its_write)(struct kvm *, struct vgic_its *, gpa_t, unsigned int, unsigned long);
+	};
+	unsigned long (*uaccess_read)(struct kvm_vcpu *, gpa_t, unsigned int);
+	union {
+		int (*uaccess_write)(struct kvm_vcpu *, gpa_t, unsigned int, unsigned long);
+		int (*uaccess_its_write)(struct kvm *, struct vgic_its *, gpa_t, unsigned int, unsigned long);
+	};
+};
+
+struct kvm_coalesced_mmio {
+	__u64 phys_addr;
+	__u32 len;
+	union {
+		__u32 pad;
+		__u32 pio;
+	};
+	__u8 data[8];
+};
+
+struct kvm_coalesced_mmio_ring {
+	__u32 first;
+	__u32 last;
+	struct kvm_coalesced_mmio coalesced_mmio[0];
+};
+
+struct kvm_irq_routing_table {
+	int chip[988];
+	u32 nr_rt_entries;
+	struct hlist_head map[0];
+};
+
+struct mmu_notifier_range;
+
+struct mmu_notifier_ops {
+	void (*release)(struct mmu_notifier *, struct mm_struct *);
+	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, unsigned long, unsigned long);
+	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, unsigned long, unsigned long);
+	int (*test_young)(struct mmu_notifier *, struct mm_struct *, unsigned long);
+	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, unsigned long, pte_t);
+	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*arch_invalidate_secondary_tlbs)(struct mmu_notifier *, struct mm_struct *, unsigned long, unsigned long);
+	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
+	void (*free_notifier)(struct mmu_notifier *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum mmu_notifier_event {
+	MMU_NOTIFY_UNMAP = 0,
+	MMU_NOTIFY_CLEAR = 1,
+	MMU_NOTIFY_PROTECTION_VMA = 2,
+	MMU_NOTIFY_PROTECTION_PAGE = 3,
+	MMU_NOTIFY_SOFT_DIRTY = 4,
+	MMU_NOTIFY_RELEASE = 5,
+	MMU_NOTIFY_MIGRATE = 6,
+	MMU_NOTIFY_EXCLUSIVE = 7,
+};
+
+struct mmu_notifier_range {
+	struct mm_struct *mm;
+	unsigned long start;
+	unsigned long end;
+	unsigned int flags;
+	enum mmu_notifier_event event;
+	void *owner;
+};
+
+enum kvm_stat_kind {
+	KVM_STAT_VM = 0,
+	KVM_STAT_VCPU = 1,
+};
+
+struct _kvm_stats_desc;
+
+struct kvm_stat_data {
+	struct kvm *kvm;
+	const struct _kvm_stats_desc *desc;
+	enum kvm_stat_kind kind;
+};
+
+struct kvm_stats_desc {
+	__u32 flags;
+	__s16 exponent;
+	__u16 size;
+	__u32 offset;
+	__u32 bucket_size;
+	char name[0];
+};
+
+struct _kvm_stats_desc {
+	struct kvm_stats_desc desc;
+	char name[48];
+};
+
+struct preempt_ops {
+	void (*sched_in)(struct preempt_notifier *, int);
+	void (*sched_out)(struct preempt_notifier *, struct task_struct *);
+};
+
+struct kvm_debug_exit_arch {
+	__u32 hsr;
+	__u32 hsr_high;
+	__u64 far;
+};
+
+struct kvm_hyperv_exit {
+	__u32 type;
+	__u32 pad1;
+	union {
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 evt_page;
+			__u64 msg_page;
+		} synic;
+		struct {
+			__u64 input;
+			__u64 result;
+			__u64 params[2];
+		} hcall;
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 status;
+			__u64 send_page;
+			__u64 recv_page;
+			__u64 pending_page;
+		} syndbg;
+	} u;
+};
+
+struct kvm_xen_exit {
+	__u32 type;
+	union {
+		struct {
+			__u32 longmode;
+			__u32 cpl;
+			__u64 input;
+			__u64 result;
+			__u64 params[6];
+		} hcall;
+	} u;
+};
+
+struct kvm_sync_regs {
+	__u64 device_irq_level;
+};
+
+struct kvm_run {
+	__u8 request_interrupt_window;
+	__u8 immediate_exit;
+	__u8 padding1[6];
+	__u32 exit_reason;
+	__u8 ready_for_interrupt_injection;
+	__u8 if_flag;
+	__u16 flags;
+	__u64 cr8;
+	__u64 apic_base;
+	union {
+		struct {
+			__u64 hardware_exit_reason;
+		} hw;
+		struct {
+			__u64 hardware_entry_failure_reason;
+			__u32 cpu;
+		} fail_entry;
+		struct {
+			__u32 exception;
+			__u32 error_code;
+		} ex;
+		struct {
+			__u8 direction;
+			__u8 size;
+			__u16 port;
+			__u32 count;
+			__u64 data_offset;
+		} io;
+		struct {
+			struct kvm_debug_exit_arch arch;
+		} debug;
+		struct {
+			__u64 phys_addr;
+			__u8 data[8];
+			__u32 len;
+			__u8 is_write;
+		} mmio;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u64 ret;
+			union {
+				__u64 flags;
+			};
+		} hypercall;
+		struct {
+			__u64 rip;
+			__u32 is_write;
+			__u32 pad;
+		} tpr_access;
+		struct {
+			__u8 icptcode;
+			__u16 ipa;
+			__u32 ipb;
+		} s390_sieic;
+		__u64 s390_reset_flags;
+		struct {
+			__u64 trans_exc_code;
+			__u32 pgm_code;
+		} s390_ucontrol;
+		struct {
+			__u32 dcrn;
+			__u32 data;
+			__u8 is_write;
+		} dcr;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 data[16];
+		} internal;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 flags;
+			union {
+				struct {
+					__u8 insn_size;
+					__u8 insn_bytes[15];
+				};
+			};
+		} emulation_failure;
+		struct {
+			__u64 gprs[32];
+		} osi;
+		struct {
+			__u64 nr;
+			__u64 ret;
+			__u64 args[9];
+		} papr_hcall;
+		struct {
+			__u16 subchannel_id;
+			__u16 subchannel_nr;
+			__u32 io_int_parm;
+			__u32 io_int_word;
+			__u32 ipb;
+			__u8 dequeued;
+		} s390_tsch;
+		struct {
+			__u32 epr;
+		} epr;
+		struct {
+			__u32 type;
+			__u32 ndata;
+			union {
+				__u64 data[16];
+			};
+		} system_event;
+		struct {
+			__u64 addr;
+			__u8 ar;
+			__u8 reserved;
+			__u8 fc;
+			__u8 sel1;
+			__u16 sel2;
+		} s390_stsi;
+		struct {
+			__u8 vector;
+		} eoi;
+		struct kvm_hyperv_exit hyperv;
+		struct {
+			__u64 esr_iss;
+			__u64 fault_ipa;
+		} arm_nisv;
+		struct {
+			__u8 error;
+			__u8 pad[7];
+			__u32 reason;
+			__u32 index;
+			__u64 data;
+		} msr;
+		struct kvm_xen_exit xen;
+		struct {
+			unsigned long extension_id;
+			unsigned long function_id;
+			unsigned long args[6];
+			unsigned long ret[2];
+		} riscv_sbi;
+		struct {
+			unsigned long csr_num;
+			unsigned long new_value;
+			unsigned long write_mask;
+			unsigned long ret_value;
+		} riscv_csr;
+		struct {
+			__u32 flags;
+		} notify;
+		char padding[256];
+	};
+	__u64 kvm_valid_regs;
+	__u64 kvm_dirty_regs;
+	union {
+		struct kvm_sync_regs regs;
+		char padding[2048];
+	} s;
+};
+
+struct vgic_redist_region {
+	u32 index;
+	gpa_t base;
+	u32 count;
+	u32 free_index;
+	struct list_head list;
+};
+
+struct interval_tree_node {
+	struct rb_node rb;
+	unsigned long start;
+	unsigned long last;
+	unsigned long __subtree_last;
+};
+
+typedef u64 gfn_t;
+
+struct kvm_arch_memory_slot {};
+
+struct kvm_memory_slot {
+	struct hlist_node id_node[2];
+	struct interval_tree_node hva_node[2];
+	struct rb_node gfn_node[2];
+	gfn_t base_gfn;
+	unsigned long npages;
+	unsigned long *dirty_bitmap;
+	struct kvm_arch_memory_slot arch;
+	unsigned long userspace_addr;
+	u32 flags;
+	short id;
+	u16 as_id;
+};
+
+typedef void (*btf_trace_kvm_unmap_hva_range)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_kvm_set_spte_hva)(void *, unsigned long);
+
+typedef void (*btf_trace_kvm_age_hva)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_kvm_test_age_hva)(void *, unsigned long);
+
+struct trace_print_flags {
+	unsigned long mask;
+	const char *name;
+};
+
+struct syscore_ops {
+	struct list_head node;
+	int (*suspend)();
+	void (*resume)();
+	void (*shutdown)();
+};
+
+union kvm_mmu_notifier_arg {
+	pte_t pte;
+};
+
+struct miscdevice {
+	int minor;
+	const char *name;
+	const struct file_operations *fops;
+	struct list_head list;
+	struct device *parent;
+	struct device *this_device;
+	const struct attribute_group **groups;
+	const char *nodename;
+	umode_t mode;
+};
+
+enum kvm_mr_change {
+	KVM_MR_CREATE = 0,
+	KVM_MR_DELETE = 1,
+	KVM_MR_MOVE = 2,
+	KVM_MR_FLAGS_ONLY = 3,
+};
+
+enum {
+	OUTSIDE_GUEST_MODE = 0,
+	IN_GUEST_MODE = 1,
+	EXITING_GUEST_MODE = 2,
+	READING_SHADOW_PAGE_TABLES = 3,
+};
+
+enum kvm_bus {
+	KVM_MMIO_BUS = 0,
+	KVM_PIO_BUS = 1,
+	KVM_VIRTIO_CCW_NOTIFY_BUS = 2,
+	KVM_FAST_MMIO_BUS = 3,
+	KVM_NR_BUSES = 4,
+};
+
+enum kobject_action {
+	KOBJ_ADD = 0,
+	KOBJ_REMOVE = 1,
+	KOBJ_CHANGE = 2,
+	KOBJ_MOVE = 3,
+	KOBJ_ONLINE = 4,
+	KOBJ_OFFLINE = 5,
+	KOBJ_BIND = 6,
+	KOBJ_UNBIND = 7,
+};
+
+typedef unsigned int xa_mark_t;
+
+struct trace_event_raw_kvm_userspace_exit {
+	struct trace_entry ent;
+	__u32 reason;
+	int errno;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_vcpu_wakeup {
+	struct trace_entry ent;
+	__u64 ns;
+	bool waited;
+	bool valid;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_set_irq {
+	struct trace_entry ent;
+	unsigned int gsi;
+	int level;
+	int irq_source_id;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_ack_irq {
+	struct trace_entry ent;
+	unsigned int irqchip;
+	unsigned int pin;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmio {
+	struct trace_entry ent;
+	u32 type;
+	u32 len;
+	u64 gpa;
+	u64 val;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_fpu {
+	struct trace_entry ent;
+	u32 load;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_halt_poll_ns {
+	struct trace_entry ent;
+	bool grow;
+	unsigned int vcpu_id;
+	unsigned int new;
+	unsigned int old;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_dirty_ring_push {
+	struct trace_entry ent;
+	int index;
+	u32 dirty_index;
+	u32 reset_index;
+	u32 slot;
+	u64 offset;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_dirty_ring_reset {
+	struct trace_entry ent;
+	int index;
+	u32 dirty_index;
+	u32 reset_index;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_dirty_ring_exit {
+	struct trace_entry ent;
+	int vcpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_unmap_hva_range {
+	struct trace_entry ent;
+	unsigned long start;
+	unsigned long end;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_set_spte_hva {
+	struct trace_entry ent;
+	unsigned long hva;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_age_hva {
+	struct trace_entry ent;
+	unsigned long start;
+	unsigned long end;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_test_age_hva {
+	struct trace_entry ent;
+	unsigned long hva;
+	char __data[0];
+};
+
+typedef u64 hpa_t;
+
+struct kvm_userspace_memory_region {
+	__u32 slot;
+	__u32 flags;
+	__u64 guest_phys_addr;
+	__u64 memory_size;
+	__u64 userspace_addr;
+};
+
+struct kvm_memslot_iter {
+	struct kvm_memslots *slots;
+	struct rb_node *node;
+	struct kvm_memory_slot *slot;
+};
+
+typedef u64 hfn_t;
+
+typedef hfn_t kvm_pfn_t;
+
+typedef unsigned long hva_t;
+
+struct kvm_coalesced_mmio_zone {
+	__u64 addr;
+	__u32 size;
+	union {
+		__u32 pad;
+		__u32 pio;
+	};
+};
+
+struct kvm_irqfd {
+	__u32 fd;
+	__u32 gsi;
+	__u32 flags;
+	__u32 resamplefd;
+	__u8 pad[16];
+};
+
+struct kvm_irq_level {
+	union {
+		__u32 irq;
+		__s32 status;
+	};
+	__u32 level;
+};
+
+struct kvm_msi {
+	__u32 address_lo;
+	__u32 address_hi;
+	__u32 data;
+	__u32 flags;
+	__u32 devid;
+	__u8 pad[12];
+};
+
+struct kvm_ioeventfd {
+	__u64 datamatch;
+	__u64 addr;
+	__u32 len;
+	__s32 fd;
+	__u32 flags;
+	__u8 pad[36];
+};
+
+struct kvm_irq_routing_irqchip {
+	__u32 irqchip;
+	__u32 pin;
+};
+
+struct kvm_irq_routing_msi {
+	__u32 address_lo;
+	__u32 address_hi;
+	__u32 data;
+	union {
+		__u32 pad;
+		__u32 devid;
+	};
+};
+
+struct kvm_irq_routing_s390_adapter {
+	__u64 ind_addr;
+	__u64 summary_addr;
+	__u64 ind_offset;
+	__u32 summary_offset;
+	__u32 adapter_id;
+};
+
+struct kvm_irq_routing_hv_sint {
+	__u32 vcpu;
+	__u32 sint;
+};
+
+struct kvm_irq_routing_xen_evtchn {
+	__u32 port;
+	__u32 vcpu;
+	__u32 priority;
+};
+
+struct kvm_irq_routing_entry {
+	__u32 gsi;
+	__u32 type;
+	__u32 flags;
+	__u32 pad;
+	union {
+		struct kvm_irq_routing_irqchip irqchip;
+		struct kvm_irq_routing_msi msi;
+		struct kvm_irq_routing_s390_adapter adapter;
+		struct kvm_irq_routing_hv_sint hv_sint;
+		struct kvm_irq_routing_xen_evtchn xen_evtchn;
+		__u32 pad[8];
+	} u;
+};
+
+struct kvm_dirty_log {
+	__u32 slot;
+	__u32 padding1;
+	union {
+		void __attribute__((btf_type_tag("user"))) *dirty_bitmap;
+		__u64 padding2;
+	};
+};
+
+struct kvm_clear_dirty_log {
+	__u32 slot;
+	__u32 num_pages;
+	__u64 first_page;
+	union {
+		void __attribute__((btf_type_tag("user"))) *dirty_bitmap;
+		__u64 padding2;
+	};
+};
+
+struct kvm_sregs {};
+
+struct kvm_fpu {};
+
+struct kvm_regs {
+	struct user_pt_regs regs;
+	__u64 sp_el1;
+	__u64 elr_el1;
+	__u64 spsr[5];
+	long: 64;
+	struct user_fpsimd_state fp_regs;
+};
+
+struct kvm_translation {
+	__u64 linear_address;
+	__u64 physical_address;
+	__u8 valid;
+	__u8 writeable;
+	__u8 usermode;
+	__u8 pad[5];
+};
+
+struct kvm_guest_debug {
+	__u32 control;
+	__u32 pad;
+	struct kvm_guest_debug_arch arch;
+};
+
+struct kvm_stats_header {
+	__u32 flags;
+	__u32 name_size;
+	__u32 num_desc;
+	__u32 id_offset;
+	__u32 desc_offset;
+	__u32 data_offset;
+};
+
+struct kvm_gfn_range;
+
+typedef bool (*hva_handler_t)(struct kvm *, struct kvm_gfn_range *);
+
+typedef void (*on_lock_fn_t)(struct kvm *, unsigned long, unsigned long);
+
+typedef void (*on_unlock_fn_t)(struct kvm *);
+
+struct kvm_hva_range {
+	unsigned long start;
+	unsigned long end;
+	union kvm_mmu_notifier_arg arg;
+	hva_handler_t handler;
+	on_lock_fn_t on_lock;
+	on_unlock_fn_t on_unlock;
+	bool flush_on_ret;
+	bool may_block;
+};
+
+struct kvm_gfn_range {
+	struct kvm_memory_slot *slot;
+	gfn_t start;
+	gfn_t end;
+	union kvm_mmu_notifier_arg arg;
+	bool may_block;
+};
+
+struct trace_event_data_offsets_kvm_userspace_exit {};
+
+struct trace_event_data_offsets_kvm_vcpu_wakeup {};
+
+struct trace_event_data_offsets_kvm_set_irq {};
+
+struct trace_event_data_offsets_kvm_ack_irq {};
+
+struct trace_event_data_offsets_kvm_mmio {};
+
+struct trace_event_data_offsets_kvm_fpu {};
+
+struct trace_event_data_offsets_kvm_halt_poll_ns {};
+
+struct trace_event_data_offsets_kvm_dirty_ring_push {};
+
+struct trace_event_data_offsets_kvm_dirty_ring_reset {};
+
+struct trace_event_data_offsets_kvm_dirty_ring_exit {};
+
+struct trace_event_data_offsets_kvm_unmap_hva_range {};
+
+struct trace_event_data_offsets_kvm_set_spte_hva {};
+
+struct trace_event_data_offsets_kvm_age_hva {};
+
+struct trace_event_data_offsets_kvm_test_age_hva {};
+
+struct kvm_host_map {
+	struct page *page;
+	void *hva;
+	kvm_pfn_t pfn;
+	kvm_pfn_t gfn;
+};
+
+struct gfn_to_hva_cache {
+	u64 generation;
+	gpa_t gpa;
+	unsigned long hva;
+	unsigned long len;
+	struct kvm_memory_slot *memslot;
+};
+
+struct kvm_enable_cap {
+	__u32 cap;
+	__u32 flags;
+	__u64 args[4];
+	__u8 pad[64];
+};
+
+typedef int (*kvm_vm_thread_fn_t)(struct kvm *, uintptr_t);
+
+struct kvm_vm_worker_thread_context {
+	struct kvm *kvm;
+	struct task_struct *parent;
+	struct completion init_done;
+	kvm_vm_thread_fn_t thread_fn;
+	uintptr_t data;
+	int err;
+};
+
+struct kvm_irq_routing {
+	__u32 nr;
+	__u32 flags;
+	struct kvm_irq_routing_entry entries[0];
+};
+
+struct kvm_create_device {
+	__u32 type;
+	__u32 fd;
+	__u32 flags;
+};
+
+struct kvm_signal_mask {
+	__u32 len;
+	__u8 sigset[0];
+};
+
+enum {
+	kvm_ioeventfd_flag_nr_datamatch = 0,
+	kvm_ioeventfd_flag_nr_pio = 1,
+	kvm_ioeventfd_flag_nr_deassign = 2,
+	kvm_ioeventfd_flag_nr_virtio_ccw_notify = 3,
+	kvm_ioeventfd_flag_nr_fast_mmio = 4,
+	kvm_ioeventfd_flag_nr_max = 5,
+};
+
+enum {
+	WORK_STRUCT_PENDING_BIT = 0,
+	WORK_STRUCT_INACTIVE_BIT = 1,
+	WORK_STRUCT_PWQ_BIT = 2,
+	WORK_STRUCT_LINKED_BIT = 3,
+	WORK_STRUCT_COLOR_SHIFT = 4,
+	WORK_STRUCT_COLOR_BITS = 4,
+	WORK_STRUCT_PENDING = 1,
+	WORK_STRUCT_INACTIVE = 2,
+	WORK_STRUCT_PWQ = 4,
+	WORK_STRUCT_LINKED = 8,
+	WORK_STRUCT_STATIC = 0,
+	WORK_NR_COLORS = 16,
+	WORK_CPU_UNBOUND = 32,
+	WORK_STRUCT_FLAG_BITS = 8,
+	WORK_OFFQ_FLAG_BASE = 4,
+	__WORK_OFFQ_CANCELING = 4,
+	WORK_OFFQ_FLAG_BITS = 1,
+	WORK_OFFQ_POOL_SHIFT = 5,
+	WORK_OFFQ_LEFT = 59,
+	WORK_OFFQ_POOL_BITS = 31,
+	WORK_BUSY_PENDING = 1,
+	WORK_BUSY_RUNNING = 2,
+	WORKER_DESC_LEN = 24,
+};
+
+struct kvm_irq_ack_notifier {
+	struct hlist_node link;
+	unsigned int gsi;
+	void (*irq_acked)(struct kvm_irq_ack_notifier *);
+};
+
+struct kvm_s390_adapter_int {
+	u64 ind_addr;
+	u64 summary_addr;
+	u64 ind_offset;
+	u32 summary_offset;
+	u32 adapter_id;
+};
+
+struct kvm_hv_sint {
+	u32 vcpu;
+	u32 sint;
+};
+
+struct kvm_xen_evtchn {
+	u32 port;
+	u32 vcpu_id;
+	int vcpu_idx;
+	u32 priority;
+};
+
+struct kvm_kernel_irq_routing_entry {
+	u32 gsi;
+	u32 type;
+	int (*set)(struct kvm_kernel_irq_routing_entry *, struct kvm *, int, int, bool);
+	union {
+		struct {
+			unsigned int irqchip;
+			unsigned int pin;
+		} irqchip;
+		struct {
+			u32 address_lo;
+			u32 address_hi;
+			u32 data;
+			u32 flags;
+			u32 devid;
+		} msi;
+		struct kvm_s390_adapter_int adapter;
+		struct kvm_hv_sint hv_sint;
+		struct kvm_xen_evtchn xen_evtchn;
+	};
+	struct hlist_node link;
+};
+
+typedef struct poll_table_struct poll_table;
+
+struct irq_bypass_producer;
+
+struct irq_bypass_consumer {
+	struct list_head node;
+	void *token;
+	int (*add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*stop)(struct irq_bypass_consumer *);
+	void (*start)(struct irq_bypass_consumer *);
+};
+
+struct kvm_kernel_irqfd_resampler;
+
+struct kvm_kernel_irqfd {
+	struct kvm *kvm;
+	wait_queue_entry_t wait;
+	struct kvm_kernel_irq_routing_entry irq_entry;
+	seqcount_spinlock_t irq_entry_sc;
+	int gsi;
+	struct work_struct inject;
+	struct kvm_kernel_irqfd_resampler *resampler;
+	struct eventfd_ctx *resamplefd;
+	struct list_head resampler_link;
+	struct eventfd_ctx *eventfd;
+	struct list_head list;
+	poll_table pt;
+	struct work_struct shutdown;
+	struct irq_bypass_consumer consumer;
+	struct irq_bypass_producer *producer;
+};
+
+struct kvm_kernel_irqfd_resampler {
+	struct kvm *kvm;
+	struct list_head list;
+	struct kvm_irq_ack_notifier notifier;
+	struct list_head link;
+};
+
+struct irq_bypass_producer {
+	struct list_head node;
+	void *token;
+	int irq;
+	int (*add_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*del_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*stop)(struct irq_bypass_producer *);
+	void (*start)(struct irq_bypass_producer *);
+};
+
+struct _ioeventfd {
+	struct list_head list;
+	u64 addr;
+	int length;
+	struct eventfd_ctx *eventfd;
+	u64 datamatch;
+	struct kvm_io_device dev;
+	u8 bus_idx;
+	bool wildcard;
+};
+
+struct fd {
+	struct file *file;
+	unsigned int flags;
+};
+
+enum kvm_device_type {
+	KVM_DEV_TYPE_FSL_MPIC_20 = 1,
+	KVM_DEV_TYPE_FSL_MPIC_42 = 2,
+	KVM_DEV_TYPE_XICS = 3,
+	KVM_DEV_TYPE_VFIO = 4,
+	KVM_DEV_TYPE_ARM_VGIC_V2 = 5,
+	KVM_DEV_TYPE_FLIC = 6,
+	KVM_DEV_TYPE_ARM_VGIC_V3 = 7,
+	KVM_DEV_TYPE_ARM_VGIC_ITS = 8,
+	KVM_DEV_TYPE_XIVE = 9,
+	KVM_DEV_TYPE_ARM_PV_TIME = 10,
+	KVM_DEV_TYPE_RISCV_AIA = 11,
+	KVM_DEV_TYPE_MAX = 12,
+};
+
+struct kvm_vfio_file {
+	struct list_head node;
+	struct file *file;
+};
+
+struct kvm_vfio {
+	struct list_head file_list;
+	struct mutex lock;
+	bool noncoherent;
+};
+
+struct kvm_coalesced_mmio_dev {
+	struct list_head list;
+	struct kvm_io_device dev;
+	struct kvm *kvm;
+	struct kvm_coalesced_mmio_zone zone;
+};
+
+typedef void (*btf_trace_kvm_entry)(void *, unsigned long);
+
+typedef void (*btf_trace_kvm_exit)(void *, int, unsigned int, unsigned long);
+
+typedef void (*btf_trace_kvm_guest_fault)(void *, unsigned long, unsigned long, unsigned long, unsigned long long);
+
+typedef void (*btf_trace_kvm_access_fault)(void *, unsigned long);
+
+typedef void (*btf_trace_kvm_irq_line)(void *, unsigned int, int, int, int);
+
+typedef void (*btf_trace_kvm_mmio_emulate)(void *, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_kvm_set_way_flush)(void *, unsigned long, bool);
+
+typedef void (*btf_trace_kvm_toggle_cache)(void *, unsigned long, bool, bool);
+
+typedef void (*btf_trace_kvm_timer_update_irq)(void *, unsigned long, __u32, int);
+
+struct timer_map;
+
+typedef void (*btf_trace_kvm_get_timer_map)(void *, unsigned long, struct timer_map *);
+
+struct timer_map {
+	struct arch_timer_context *direct_vtimer;
+	struct arch_timer_context *direct_ptimer;
+	struct arch_timer_context *emul_vtimer;
+	struct arch_timer_context *emul_ptimer;
+};
+
+typedef kvm_pte_t __attribute__((btf_type_tag("rcu"))) *kvm_pteref_t;
+
+enum kvm_pgtable_stage2_flags {
+	KVM_PGTABLE_S2_NOFWB = 1,
+	KVM_PGTABLE_S2_IDMAP = 2,
+	KVM_PGTABLE_S2_PREFAULT_BLOCK = 4,
+};
+
+struct kvm_pgtable_mm_ops;
+
+struct kvm_pgtable_pte_ops;
+
+struct kvm_pgtable {
+	u32 ia_bits;
+	u32 start_level;
+	kvm_pteref_t pgd;
+	struct kvm_pgtable_mm_ops *mm_ops;
+	struct kvm_s2_mmu *mmu;
+	enum kvm_pgtable_stage2_flags flags;
+	struct kvm_pgtable_pte_ops *pte_ops;
+};
+
+struct kvm_pgtable_mm_ops {
+	void * (*zalloc_page)(void *);
+	void * (*zalloc_pages_exact)(size_t);
+	void (*free_pages_exact)(void *, size_t);
+	void (*free_unlinked_table)(void *, u32);
+	void (*get_page)(void *);
+	void (*put_page)(void *);
+	int (*page_count)(void *);
+	void * (*phys_to_virt)(phys_addr_t);
+	phys_addr_t (*virt_to_phys)(void *);
+	void (*dcache_clean_inval_poc)(void *, size_t);
+	void (*icache_inval_pou)(void *, size_t);
+};
+
+typedef bool (*kvm_pgtable_force_pte_cb_t)(u64, u64, enum kvm_pgtable_prot);
+
+typedef bool (*kvm_pgtable_pte_is_counted_cb_t)(kvm_pte_t, u32);
+
+struct kvm_pgtable_pte_ops {
+	kvm_pgtable_force_pte_cb_t force_pte_cb;
+	kvm_pgtable_pte_is_counted_cb_t pte_is_counted_cb;
+};
+
+typedef void (*btf_trace_kvm_timer_save_state)(void *, struct arch_timer_context *);
+
+typedef void (*btf_trace_kvm_timer_restore_state)(void *, struct arch_timer_context *);
+
+typedef void (*btf_trace_kvm_timer_hrtimer_expire)(void *, struct arch_timer_context *);
+
+typedef void (*btf_trace_kvm_timer_emulate)(void *, struct arch_timer_context *, bool);
+
+typedef void (*btf_trace_kvm_nested_eret)(void *, struct kvm_vcpu *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_kvm_inject_nested_exception)(void *, struct kvm_vcpu *, u64, int);
+
+typedef void (*btf_trace_kvm_forward_sysreg_trap)(void *, struct kvm_vcpu *, u32, bool);
+
+enum __kvm_host_smccc_func {
+	__KVM_HOST_SMCCC_FUNC___kvm_get_mdcr_el2 = 1,
+	__KVM_HOST_SMCCC_FUNC___pkvm_init = 2,
+	__KVM_HOST_SMCCC_FUNC___pkvm_create_private_mapping = 3,
+	__KVM_HOST_SMCCC_FUNC___pkvm_cpu_set_vector = 4,
+	__KVM_HOST_SMCCC_FUNC___kvm_enable_ssbs = 5,
+	__KVM_HOST_SMCCC_FUNC___vgic_v3_init_lrs = 6,
+	__KVM_HOST_SMCCC_FUNC___vgic_v3_get_gic_config = 7,
+	__KVM_HOST_SMCCC_FUNC___kvm_flush_vm_context = 8,
+	__KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid_ipa = 9,
+	__KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid_ipa_nsh = 10,
+	__KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid = 11,
+	__KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid_range = 12,
+	__KVM_HOST_SMCCC_FUNC___kvm_flush_cpu_context = 13,
+	__KVM_HOST_SMCCC_FUNC___pkvm_alloc_module_va = 14,
+	__KVM_HOST_SMCCC_FUNC___pkvm_map_module_page = 15,
+	__KVM_HOST_SMCCC_FUNC___pkvm_unmap_module_page = 16,
+	__KVM_HOST_SMCCC_FUNC___pkvm_init_module = 17,
+	__KVM_HOST_SMCCC_FUNC___pkvm_register_hcall = 18,
+	__KVM_HOST_SMCCC_FUNC___pkvm_iommu_init = 19,
+	__KVM_HOST_SMCCC_FUNC___pkvm_prot_finalize = 20,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_share_hyp = 21,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_unshare_hyp = 22,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_map_guest = 23,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_unmap_guest = 24,
+	__KVM_HOST_SMCCC_FUNC___pkvm_relax_perms = 25,
+	__KVM_HOST_SMCCC_FUNC___pkvm_wrprotect = 26,
+	__KVM_HOST_SMCCC_FUNC___pkvm_dirty_log = 27,
+	__KVM_HOST_SMCCC_FUNC___pkvm_tlb_flush_vmid = 28,
+	__KVM_HOST_SMCCC_FUNC___kvm_adjust_pc = 29,
+	__KVM_HOST_SMCCC_FUNC___kvm_vcpu_run = 30,
+	__KVM_HOST_SMCCC_FUNC___kvm_timer_set_cntvoff = 31,
+	__KVM_HOST_SMCCC_FUNC___vgic_v3_save_vmcr_aprs = 32,
+	__KVM_HOST_SMCCC_FUNC___vgic_v3_restore_vmcr_aprs = 33,
+	__KVM_HOST_SMCCC_FUNC___pkvm_init_vm = 34,
+	__KVM_HOST_SMCCC_FUNC___pkvm_init_vcpu = 35,
+	__KVM_HOST_SMCCC_FUNC___pkvm_start_teardown_vm = 36,
+	__KVM_HOST_SMCCC_FUNC___pkvm_finalize_teardown_vm = 37,
+	__KVM_HOST_SMCCC_FUNC___pkvm_reclaim_dying_guest_page = 38,
+	__KVM_HOST_SMCCC_FUNC___pkvm_vcpu_load = 39,
+	__KVM_HOST_SMCCC_FUNC___pkvm_vcpu_put = 40,
+	__KVM_HOST_SMCCC_FUNC___pkvm_vcpu_sync_state = 41,
+	__KVM_HOST_SMCCC_FUNC___pkvm_load_tracing = 42,
+	__KVM_HOST_SMCCC_FUNC___pkvm_teardown_tracing = 43,
+	__KVM_HOST_SMCCC_FUNC___pkvm_enable_tracing = 44,
+	__KVM_HOST_SMCCC_FUNC___pkvm_swap_reader_tracing = 45,
+	__KVM_HOST_SMCCC_FUNC___pkvm_enable_event = 46,
+	__KVM_HOST_SMCCC_FUNC___pkvm_hyp_alloc_mgt_refill = 47,
+	__KVM_HOST_SMCCC_FUNC___pkvm_hyp_alloc_mgt_reclaimable = 48,
+	__KVM_HOST_SMCCC_FUNC___pkvm_hyp_alloc_mgt_reclaim = 49,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_iommu_alloc_domain = 50,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_iommu_free_domain = 51,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_iommu_attach_dev = 52,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_iommu_detach_dev = 53,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_iommu_map_pages = 54,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_iommu_unmap_pages = 55,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_iommu_iova_to_phys = 56,
+	__KVM_HOST_SMCCC_FUNC___pkvm_host_hvc_pd = 57,
+	__KVM_HOST_SMCCC_FUNC___pkvm_stage2_snapshot = 58,
+	__KVM_HOST_SMCCC_FUNC___dynamic_hcalls = 128,
+};
+
+enum vcpu_sysreg {
+	__INVALID_SYSREG__ = 0,
+	MPIDR_EL1 = 1,
+	CLIDR_EL1 = 2,
+	CSSELR_EL1 = 3,
+	SCTLR_EL1 = 4,
+	ACTLR_EL1 = 5,
+	CPACR_EL1 = 6,
+	ZCR_EL1 = 7,
+	TTBR0_EL1 = 8,
+	TTBR1_EL1 = 9,
+	TCR_EL1 = 10,
+	TCR2_EL1 = 11,
+	ESR_EL1 = 12,
+	AFSR0_EL1 = 13,
+	AFSR1_EL1 = 14,
+	FAR_EL1 = 15,
+	MAIR_EL1 = 16,
+	VBAR_EL1 = 17,
+	CONTEXTIDR_EL1 = 18,
+	TPIDR_EL0 = 19,
+	TPIDRRO_EL0 = 20,
+	TPIDR_EL1 = 21,
+	AMAIR_EL1 = 22,
+	CNTKCTL_EL1 = 23,
+	PAR_EL1 = 24,
+	MDSCR_EL1 = 25,
+	MDCCINT_EL1 = 26,
+	OSLSR_EL1 = 27,
+	DISR_EL1 = 28,
+	PMCR_EL0 = 29,
+	PMSELR_EL0 = 30,
+	PMEVCNTR0_EL0 = 31,
+	PMEVCNTR30_EL0 = 61,
+	PMCCNTR_EL0 = 62,
+	PMEVTYPER0_EL0 = 63,
+	PMEVTYPER30_EL0 = 93,
+	PMCCFILTR_EL0 = 94,
+	PMCNTENSET_EL0 = 95,
+	PMINTENSET_EL1 = 96,
+	PMOVSSET_EL0 = 97,
+	PMUSERENR_EL0 = 98,
+	APIAKEYLO_EL1 = 99,
+	APIAKEYHI_EL1 = 100,
+	APIBKEYLO_EL1 = 101,
+	APIBKEYHI_EL1 = 102,
+	APDAKEYLO_EL1 = 103,
+	APDAKEYHI_EL1 = 104,
+	APDBKEYLO_EL1 = 105,
+	APDBKEYHI_EL1 = 106,
+	APGAKEYLO_EL1 = 107,
+	APGAKEYHI_EL1 = 108,
+	ELR_EL1 = 109,
+	SP_EL1 = 110,
+	SPSR_EL1 = 111,
+	CNTVOFF_EL2 = 112,
+	CNTV_CVAL_EL0 = 113,
+	CNTV_CTL_EL0 = 114,
+	CNTP_CVAL_EL0 = 115,
+	CNTP_CTL_EL0 = 116,
+	RGSR_EL1 = 117,
+	GCR_EL1 = 118,
+	TFSR_EL1 = 119,
+	TFSRE0_EL1 = 120,
+	PIR_EL1 = 121,
+	PIRE0_EL1 = 122,
+	DACR32_EL2 = 123,
+	IFSR32_EL2 = 124,
+	FPEXC32_EL2 = 125,
+	DBGVCR32_EL2 = 126,
+	VPIDR_EL2 = 127,
+	VMPIDR_EL2 = 128,
+	SCTLR_EL2 = 129,
+	ACTLR_EL2 = 130,
+	HCR_EL2 = 131,
+	MDCR_EL2 = 132,
+	CPTR_EL2 = 133,
+	HSTR_EL2 = 134,
+	HACR_EL2 = 135,
+	HCRX_EL2 = 136,
+	TTBR0_EL2 = 137,
+	TTBR1_EL2 = 138,
+	TCR_EL2 = 139,
+	VTTBR_EL2 = 140,
+	VTCR_EL2 = 141,
+	SPSR_EL2 = 142,
+	ELR_EL2 = 143,
+	AFSR0_EL2 = 144,
+	AFSR1_EL2 = 145,
+	ESR_EL2 = 146,
+	FAR_EL2 = 147,
+	HPFAR_EL2 = 148,
+	MAIR_EL2 = 149,
+	AMAIR_EL2 = 150,
+	VBAR_EL2 = 151,
+	RVBAR_EL2 = 152,
+	CONTEXTIDR_EL2 = 153,
+	TPIDR_EL2 = 154,
+	CNTHCTL_EL2 = 155,
+	SP_EL2 = 156,
+	HFGRTR_EL2 = 157,
+	HFGWTR_EL2 = 158,
+	HFGITR_EL2 = 159,
+	HDFGRTR_EL2 = 160,
+	HDFGWTR_EL2 = 161,
+	HAFGRTR_EL2 = 162,
+	CNTHP_CTL_EL2 = 163,
+	CNTHP_CVAL_EL2 = 164,
+	CNTHV_CTL_EL2 = 165,
+	CNTHV_CVAL_EL2 = 166,
+	NR_SYS_REGS = 167,
+};
+
+struct trace_event_raw_kvm_entry {
+	struct trace_entry ent;
+	unsigned long vcpu_pc;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_exit {
+	struct trace_entry ent;
+	int ret;
+	unsigned int esr_ec;
+	unsigned long vcpu_pc;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_guest_fault {
+	struct trace_entry ent;
+	unsigned long vcpu_pc;
+	unsigned long hsr;
+	unsigned long hxfar;
+	unsigned long long ipa;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_access_fault {
+	struct trace_entry ent;
+	unsigned long ipa;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_irq_line {
+	struct trace_entry ent;
+	unsigned int type;
+	int vcpu_idx;
+	int irq_num;
+	int level;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmio_emulate {
+	struct trace_entry ent;
+	unsigned long vcpu_pc;
+	unsigned long instr;
+	unsigned long cpsr;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_set_way_flush {
+	struct trace_entry ent;
+	unsigned long vcpu_pc;
+	bool cache;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_toggle_cache {
+	struct trace_entry ent;
+	unsigned long vcpu_pc;
+	bool was;
+	bool now;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_timer_update_irq {
+	struct trace_entry ent;
+	unsigned long vcpu_id;
+	__u32 irq;
+	int level;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_get_timer_map {
+	struct trace_entry ent;
+	unsigned long vcpu_id;
+	int direct_vtimer;
+	int direct_ptimer;
+	int emul_vtimer;
+	int emul_ptimer;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_timer_save_state {
+	struct trace_entry ent;
+	unsigned long ctl;
+	unsigned long long cval;
+	int timer_idx;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_timer_restore_state {
+	struct trace_entry ent;
+	unsigned long ctl;
+	unsigned long long cval;
+	int timer_idx;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_timer_hrtimer_expire {
+	struct trace_entry ent;
+	int timer_idx;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_timer_emulate {
+	struct trace_entry ent;
+	int timer_idx;
+	bool should_fire;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_nested_eret {
+	struct trace_entry ent;
+	struct kvm_vcpu *vcpu;
+	unsigned long elr_el2;
+	unsigned long spsr_el2;
+	unsigned long target_mode;
+	unsigned long hcr_el2;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_inject_nested_exception {
+	struct trace_entry ent;
+	struct kvm_vcpu *vcpu;
+	unsigned long esr_el2;
+	int type;
+	unsigned long spsr_el2;
+	unsigned long pc;
+	unsigned long source_mode;
+	unsigned long hcr_el2;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_forward_sysreg_trap {
+	struct trace_entry ent;
+	u64 pc;
+	u32 sysreg;
+	bool is_read;
+	char __data[0];
+};
+
+struct kvm_host_data {
+	struct kvm_cpu_context host_ctxt;
+};
+
+struct kvm_nvhe_init_params {
+	unsigned long mair_el2;
+	unsigned long tcr_el2;
+	unsigned long tpidr_el2;
+	unsigned long stack_hyp_va;
+	unsigned long stack_pa;
+	phys_addr_t pgd_pa;
+	unsigned long hcr_el2;
+	unsigned long hfgwtr_el2;
+	unsigned long vttbr;
+	unsigned long vtcr;
+};
+
+struct kvm_vcpu_init {
+	__u32 target;
+	__u32 features[7];
+};
+
+struct kvm_vcpu_events {
+	struct {
+		__u8 serror_pending;
+		__u8 serror_has_esr;
+		__u8 ext_dabt_pending;
+		__u8 pad[5];
+		__u64 serror_esr;
+	} exception;
+	__u32 reserved[12];
+};
+
+struct kvm_one_reg {
+	__u64 id;
+	__u64 addr;
+};
+
+struct kvm_arm_device_addr {
+	__u64 id;
+	__u64 addr;
+};
+
+struct kvm_arm_counter_offset {
+	__u64 counter_offset;
+	__u64 reserved;
+};
+
+struct kvm_arm_copy_mte_tags {
+	__u64 guest_ipa;
+	__u64 length;
+	void __attribute__((btf_type_tag("user"))) *addr;
+	__u64 flags;
+	__u64 reserved[2];
+};
+
+struct psci_0_1_function_ids {
+	u32 cpu_suspend;
+	u32 cpu_on;
+	u32 cpu_off;
+	u32 migrate;
+};
+
+struct trace_event_data_offsets_kvm_entry {};
+
+struct trace_event_data_offsets_kvm_exit {};
+
+struct trace_event_data_offsets_kvm_guest_fault {};
+
+struct trace_event_data_offsets_kvm_access_fault {};
+
+struct trace_event_data_offsets_kvm_irq_line {};
+
+struct trace_event_data_offsets_kvm_mmio_emulate {};
+
+struct trace_event_data_offsets_kvm_set_way_flush {};
+
+struct trace_event_data_offsets_kvm_toggle_cache {};
+
+struct trace_event_data_offsets_kvm_timer_update_irq {};
+
+struct trace_event_data_offsets_kvm_get_timer_map {};
+
+struct trace_event_data_offsets_kvm_timer_save_state {};
+
+struct trace_event_data_offsets_kvm_timer_restore_state {};
+
+struct trace_event_data_offsets_kvm_timer_hrtimer_expire {};
+
+struct trace_event_data_offsets_kvm_timer_emulate {};
+
+struct trace_event_data_offsets_kvm_nested_eret {};
+
+struct trace_event_data_offsets_kvm_inject_nested_exception {};
+
+struct trace_event_data_offsets_kvm_forward_sysreg_trap {};
+
+struct kvm_reg_list {
+	__u64 n;
+	__u64 reg[0];
+};
+
+enum kvm_pgtable_walk_flags {
+	KVM_PGTABLE_WALK_LEAF = 1,
+	KVM_PGTABLE_WALK_TABLE_PRE = 2,
+	KVM_PGTABLE_WALK_TABLE_POST = 4,
+	KVM_PGTABLE_WALK_SHARED = 8,
+	KVM_PGTABLE_WALK_HANDLE_FAULT = 16,
+	KVM_PGTABLE_WALK_SKIP_BBM_TLBI = 32,
+	KVM_PGTABLE_WALK_SKIP_CMO = 64,
+};
+
+struct hyp_shared_pfn {
+	u64 pfn;
+	int count;
+	struct rb_node node;
+};
+
+struct kvm_pinned_page {
+	struct page *page;
+	u64 ipa;
+	u8 order;
+	u16 pins;
+};
+
+typedef void (*rcu_callback_t)(struct callback_head *);
+
+enum kvm_smccc_filter_action {
+	KVM_SMCCC_FILTER_HANDLE = 0,
+	KVM_SMCCC_FILTER_DENY = 1,
+	KVM_SMCCC_FILTER_FWD_TO_USER = 2,
+	NR_SMCCC_FILTER_ACTIONS = 3,
+};
+
+enum {
+	KVM_REG_ARM_STD_HYP_BIT_PV_TIME = 0,
+	KVM_REG_ARM_STD_HYP_BMAP_BIT_COUNT = 1,
+};
+
+enum {
+	KVM_REG_ARM_STD_BIT_TRNG_V1_0 = 0,
+	KVM_REG_ARM_STD_BMAP_BIT_COUNT = 1,
+};
+
+enum {
+	KVM_REG_ARM_VENDOR_HYP_BIT_FUNC_FEAT = 0,
+	KVM_REG_ARM_VENDOR_HYP_BIT_PTP = 1,
+	KVM_REG_ARM_VENDOR_HYP_BMAP_BIT_COUNT = 2,
+};
+
+enum clocksource_ids {
+	CSID_GENERIC = 0,
+	CSID_ARM_ARCH_COUNTER = 1,
+	CSID_MAX = 2,
+};
+
+struct system_time_snapshot {
+	u64 cycles;
+	ktime_t real;
+	ktime_t boot;
+	ktime_t raw;
+	enum clocksource_ids cs_id;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+	u32 mono_shift;
+	u32 mono_mult;
+};
+
+struct kvm_smccc_filter {
+	__u32 base;
+	__u32 nr_functions;
+	__u8 action;
+	__u8 pad[15];
+};
+
+typedef void (*btf_trace_kvm_wfx_arm64)(void *, unsigned long, bool);
+
+typedef void (*btf_trace_kvm_hvc_arm64)(void *, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_kvm_arm_setup_debug)(void *, struct kvm_vcpu *, __u32);
+
+typedef void (*btf_trace_kvm_arm_clear_debug)(void *, __u32);
+
+typedef void (*btf_trace_kvm_arm_set_dreg32)(void *, const char *, __u64);
+
+typedef void (*btf_trace_kvm_arm_set_regset)(void *, const char *, int, __u64 *, __u64 *);
+
+typedef void (*btf_trace_trap_reg)(void *, const char *, int, bool, u64);
+
+typedef void (*btf_trace_kvm_handle_sys_reg)(void *, unsigned long);
+
+struct sys_reg_params;
+
+struct sys_reg_desc;
+
+typedef void (*btf_trace_kvm_sys_access)(void *, unsigned long, struct sys_reg_params *, const struct sys_reg_desc *);
+
+struct sys_reg_params {
+	u8 Op0;
+	u8 Op1;
+	u8 CRn;
+	u8 CRm;
+	u8 Op2;
+	u64 regval;
+	bool is_write;
+};
+
+struct sys_reg_desc {
+	const char *name;
+	enum {
+		AA32_DIRECT = 0,
+		AA32_LO = 1,
+		AA32_HI = 2,
+	} aarch32_map;
+	u8 Op0;
+	u8 Op1;
+	u8 CRn;
+	u8 CRm;
+	u8 Op2;
+	bool (*access)(struct kvm_vcpu *, struct sys_reg_params *, const struct sys_reg_desc *);
+	u64 (*reset)(struct kvm_vcpu *, const struct sys_reg_desc *);
+	int reg;
+	u64 val;
+	int (*__get_user)(struct kvm_vcpu *, const struct sys_reg_desc *, u64 *);
+	int (*set_user)(struct kvm_vcpu *, const struct sys_reg_desc *, u64);
+	unsigned int (*visibility)(const struct kvm_vcpu *, const struct sys_reg_desc *);
+};
+
+typedef void (*btf_trace_kvm_set_guest_debug)(void *, struct kvm_vcpu *, __u32);
+
+typedef int (*exit_handle_fn)(struct kvm_vcpu *);
+
+struct trace_event_raw_kvm_wfx_arm64 {
+	struct trace_entry ent;
+	unsigned long vcpu_pc;
+	bool is_wfe;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hvc_arm64 {
+	struct trace_entry ent;
+	unsigned long vcpu_pc;
+	unsigned long r0;
+	unsigned long imm;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_arm_setup_debug {
+	struct trace_entry ent;
+	struct kvm_vcpu *vcpu;
+	__u32 guest_debug;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_arm_clear_debug {
+	struct trace_entry ent;
+	__u32 guest_debug;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_arm_set_dreg32 {
+	struct trace_entry ent;
+	const char *name;
+	__u64 value;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_arm_set_regset {
+	struct trace_entry ent;
+	const char *name;
+	int len;
+	u64 ctrls[16];
+	u64 values[16];
+	char __data[0];
+};
+
+struct trace_event_raw_trap_reg {
+	struct trace_entry ent;
+	const char *fn;
+	int reg;
+	bool is_write;
+	u64 write_value;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_handle_sys_reg {
+	struct trace_entry ent;
+	unsigned long hsr;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_sys_access {
+	struct trace_entry ent;
+	unsigned long vcpu_pc;
+	bool is_write;
+	const char *name;
+	u8 Op0;
+	u8 Op1;
+	u8 CRn;
+	u8 CRm;
+	u8 Op2;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_set_guest_debug {
+	struct trace_entry ent;
+	struct kvm_vcpu *vcpu;
+	__u32 guest_debug;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kvm_wfx_arm64 {};
+
+struct trace_event_data_offsets_kvm_hvc_arm64 {};
+
+struct trace_event_data_offsets_kvm_arm_setup_debug {};
+
+struct trace_event_data_offsets_kvm_arm_clear_debug {};
+
+struct trace_event_data_offsets_kvm_arm_set_dreg32 {};
+
+struct trace_event_data_offsets_kvm_arm_set_regset {};
+
+struct trace_event_data_offsets_trap_reg {};
+
+struct trace_event_data_offsets_kvm_handle_sys_reg {};
+
+struct trace_event_data_offsets_kvm_sys_access {};
+
+struct trace_event_data_offsets_kvm_set_guest_debug {};
+
+struct sve_state_reg_region {
+	unsigned int koffset;
+	unsigned int klen;
+	unsigned int upad;
+};
+
+enum kvm_arch_timers {
+	TIMER_PTIMER = 0,
+	TIMER_VTIMER = 1,
+	NR_KVM_EL0_TIMERS = 2,
+	TIMER_HVTIMER = 2,
+	TIMER_HPTIMER = 3,
+	NR_KVM_TIMERS = 4,
+};
+
+enum kvm_arch_timer_regs {
+	TIMER_REG_CNT = 0,
+	TIMER_REG_CVAL = 1,
+	TIMER_REG_TVAL = 2,
+	TIMER_REG_CTL = 3,
+	TIMER_REG_VOFF = 4,
+};
+
+enum vgic_type {
+	VGIC_V2 = 0,
+	VGIC_V3 = 1,
+};
+
+struct __va_list {
+	void *__stack;
+	void *__gr_top;
+	void *__vr_top;
+	int __gr_offs;
+	int __vr_offs;
+};
+
+typedef __builtin_va_list va_list;
+
+struct kvm_nvhe_stacktrace_info {
+	unsigned long stack_base;
+	unsigned long overflow_stack_base;
+	unsigned long fp;
+	unsigned long pc;
+};
+
+struct vgic_vmcr {
+	u32 grpen0;
+	u32 grpen1;
+	u32 ackctl;
+	u32 fiqen;
+	u32 cbpr;
+	u32 eoim;
+	u32 abpr;
+	u32 bpr;
+	u32 pmr;
+};
+
+enum pkvm_moveable_reg_type {
+	PKVM_MREG_MEMORY = 0,
+	PKVM_MREG_PROTECTED_RANGE = 1,
+};
+
+struct pkvm_moveable_reg {
+	phys_addr_t start;
+	u64 size;
+	enum pkvm_moveable_reg_type type;
+};
+
+struct reserved_mem_ops;
+
+struct reserved_mem {
+	const char *name;
+	unsigned long fdt_node;
+	unsigned long phandle;
+	const struct reserved_mem_ops *ops;
+	phys_addr_t base;
+	phys_addr_t size;
+	void *priv;
+};
+
+struct reserved_mem_ops {
+	int (*device_init)(struct reserved_mem *, struct device *);
+	void (*device_release)(struct reserved_mem *, struct device *);
+};
+
+struct pkvm_mod_sec_mapping {
+	struct pkvm_module_section *sec;
+	enum kvm_pgtable_prot prot;
+};
+
+struct hyp_event_id {
+	unsigned short id;
+	void *data;
+};
+
+struct kvm_protected_vm_info {
+	__u64 firmware_size;
+	__u64 __reserved[7];
+};
+
+struct cyclecounter;
+
+struct timecounter {
+	const struct cyclecounter *cc;
+	u64 cycle_last;
+	u64 nsec;
+	u64 mask;
+	u64 frac;
+};
+
+struct cyclecounter {
+	u64 (*read)(const struct cyclecounter *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+};
+
+enum irq_domain_bus_token {
+	DOMAIN_BUS_ANY = 0,
+	DOMAIN_BUS_WIRED = 1,
+	DOMAIN_BUS_GENERIC_MSI = 2,
+	DOMAIN_BUS_PCI_MSI = 3,
+	DOMAIN_BUS_PLATFORM_MSI = 4,
+	DOMAIN_BUS_NEXUS = 5,
+	DOMAIN_BUS_IPI = 6,
+	DOMAIN_BUS_FSL_MC_MSI = 7,
+	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
+	DOMAIN_BUS_WAKEUP = 9,
+	DOMAIN_BUS_VMD_MSI = 10,
+	DOMAIN_BUS_PCI_DEVICE_MSI = 11,
+	DOMAIN_BUS_PCI_DEVICE_MSIX = 12,
+	DOMAIN_BUS_DMAR = 13,
+	DOMAIN_BUS_AMDVI = 14,
+	DOMAIN_BUS_PCI_DEVICE_IMS = 15,
+};
+
+struct irq_fwspec;
+
+struct irq_domain_ops {
+	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
+	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
+	int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);
+	void (*unmap)(struct irq_domain *, unsigned int);
+	int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, unsigned long *, unsigned int *);
+	int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);
+	void (*free)(struct irq_domain *, unsigned int, unsigned int);
+	int (*activate)(struct irq_domain *, struct irq_data *, bool);
+	void (*deactivate)(struct irq_domain *, struct irq_data *);
+	int (*translate)(struct irq_domain *, struct irq_fwspec *, unsigned long *, unsigned int *);
+};
+
+struct irq_domain_chip_generic;
+
+struct msi_parent_ops;
+
+struct irq_domain {
+	struct list_head link;
+	const char *name;
+	const struct irq_domain_ops *ops;
+	void *host_data;
+	unsigned int flags;
+	unsigned int mapcount;
+	struct mutex mutex;
+	struct irq_domain *root;
+	struct fwnode_handle *fwnode;
+	enum irq_domain_bus_token bus_token;
+	struct irq_domain_chip_generic *gc;
+	struct device *dev;
+	struct device *pm_dev;
+	struct irq_domain *parent;
+	const struct msi_parent_ops *msi_parent_ops;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	irq_hw_number_t hwirq_max;
+	unsigned int revmap_size;
+	struct xarray revmap_tree;
+	struct irq_data __attribute__((btf_type_tag("rcu"))) *revmap[0];
+};
+
+enum irq_gc_flags {
+	IRQ_GC_INIT_MASK_CACHE = 1,
+	IRQ_GC_INIT_NESTED_LOCK = 2,
+	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
+	IRQ_GC_NO_MASK = 8,
+	IRQ_GC_BE_IO = 16,
+};
+
+struct irq_chip_generic;
+
+struct irq_domain_chip_generic {
+	unsigned int irqs_per_chip;
+	unsigned int num_chips;
+	unsigned int irq_flags_to_clear;
+	unsigned int irq_flags_to_set;
+	enum irq_gc_flags gc_flags;
+	struct irq_chip_generic *gc[0];
+};
+
+struct irq_chip_regs {
+	unsigned long enable;
+	unsigned long disable;
+	unsigned long mask;
+	unsigned long ack;
+	unsigned long eoi;
+	unsigned long type;
+	unsigned long polarity;
+};
+
+struct irq_chip_type {
+	struct irq_chip chip;
+	struct irq_chip_regs regs;
+	irq_flow_handler_t handler;
+	u32 type;
+	u32 mask_cache_priv;
+	u32 *mask_cache;
+};
+
+struct irq_chip_generic {
+	raw_spinlock_t lock;
+	void *reg_base;
+	u32 (*reg_readl)(void *);
+	void (*reg_writel)(u32, void *);
+	void (*suspend)(struct irq_chip_generic *);
+	void (*resume)(struct irq_chip_generic *);
+	unsigned int irq_base;
+	unsigned int irq_cnt;
+	u32 mask_cache;
+	u32 type_cache;
+	u32 polarity_cache;
+	u32 wake_enabled;
+	u32 wake_active;
+	unsigned int num_ct;
+	void *private;
+	unsigned long installed;
+	unsigned long unused;
+	struct irq_domain *domain;
+	struct list_head list;
+	struct irq_chip_type chip_types[0];
+};
+
+struct msi_domain_info;
+
+struct msi_parent_ops {
+	u32 supported_flags;
+	const char *prefix;
+	bool (*init_dev_msi_info)(struct device *, struct irq_domain *, struct irq_domain *, struct msi_domain_info *);
+};
+
+struct msi_domain_ops;
+
+struct msi_domain_info {
+	u32 flags;
+	enum irq_domain_bus_token bus_token;
+	unsigned int hwsize;
+	struct msi_domain_ops *ops;
+	struct irq_chip *chip;
+	void *chip_data;
+	irq_flow_handler_t handler;
+	void *handler_data;
+	const char *handler_name;
+	void *data;
+};
+
+struct msi_alloc_info;
+
+typedef struct msi_alloc_info msi_alloc_info_t;
+
+struct msi_domain_ops {
+	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
+	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
+	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
+	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
+	void (*prepare_desc)(struct irq_domain *, msi_alloc_info_t *, struct msi_desc *);
+	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
+	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
+	void (*domain_free_irqs)(struct irq_domain *, struct device *);
+	void (*msi_post_free)(struct irq_domain *, struct device *);
+};
+
+struct msi_alloc_info {
+	struct msi_desc *desc;
+	irq_hw_number_t hwirq;
+	unsigned long flags;
+	union {
+		unsigned long ul;
+		void *ptr;
+	} scratchpad[2];
+};
+
+struct irq_fwspec {
+	struct fwnode_handle *fwnode;
+	int param_count;
+	u32 param[16];
+};
+
+enum hrtimer_mode {
+	HRTIMER_MODE_ABS = 0,
+	HRTIMER_MODE_REL = 1,
+	HRTIMER_MODE_PINNED = 2,
+	HRTIMER_MODE_SOFT = 4,
+	HRTIMER_MODE_HARD = 8,
+	HRTIMER_MODE_ABS_PINNED = 2,
+	HRTIMER_MODE_REL_PINNED = 3,
+	HRTIMER_MODE_ABS_SOFT = 4,
+	HRTIMER_MODE_REL_SOFT = 5,
+	HRTIMER_MODE_ABS_PINNED_SOFT = 6,
+	HRTIMER_MODE_REL_PINNED_SOFT = 7,
+	HRTIMER_MODE_ABS_HARD = 8,
+	HRTIMER_MODE_REL_HARD = 9,
+	HRTIMER_MODE_ABS_PINNED_HARD = 10,
+	HRTIMER_MODE_REL_PINNED_HARD = 11,
+};
+
+enum {
+	IRQD_TRIGGER_MASK = 15,
+	IRQD_SETAFFINITY_PENDING = 256,
+	IRQD_ACTIVATED = 512,
+	IRQD_NO_BALANCING = 1024,
+	IRQD_PER_CPU = 2048,
+	IRQD_AFFINITY_SET = 4096,
+	IRQD_LEVEL = 8192,
+	IRQD_WAKEUP_STATE = 16384,
+	IRQD_MOVE_PCNTXT = 32768,
+	IRQD_IRQ_DISABLED = 65536,
+	IRQD_IRQ_MASKED = 131072,
+	IRQD_IRQ_INPROGRESS = 262144,
+	IRQD_WAKEUP_ARMED = 524288,
+	IRQD_FORWARDED_TO_VCPU = 1048576,
+	IRQD_AFFINITY_MANAGED = 2097152,
+	IRQD_IRQ_STARTED = 4194304,
+	IRQD_MANAGED_SHUTDOWN = 8388608,
+	IRQD_SINGLE_TARGET = 16777216,
+	IRQD_DEFAULT_TRIGGER_SET = 33554432,
+	IRQD_CAN_RESERVE = 67108864,
+	IRQD_HANDLE_ENFORCE_IRQCTX = 134217728,
+	IRQD_AFFINITY_ON_ACTIVATE = 268435456,
+	IRQD_IRQ_ENABLED_ON_SUSPEND = 536870912,
+	IRQD_RESEND_WHEN_IN_PROGRESS = 1073741824,
+};
+
+enum {
+	IRQCHIP_FWNODE_REAL = 0,
+	IRQCHIP_FWNODE_NAMED = 1,
+	IRQCHIP_FWNODE_NAMED_ID = 2,
+};
+
+struct arch_timer_kvm_info {
+	struct timecounter timecounter;
+	int virtual_irq;
+	int physical_irq;
+};
+
+union trap_config {
+	u64 val;
+	struct {
+		unsigned long cgt: 10;
+		unsigned long fgt: 4;
+		unsigned long bit: 6;
+		unsigned long pol: 1;
+		unsigned long fgf: 5;
+		unsigned long unused: 37;
+		unsigned long mbz: 1;
+	};
+};
+
+struct encoding_to_trap_config {
+	const u32 encoding;
+	const u32 end;
+	const union trap_config tc;
+	const unsigned int line;
+};
+
+enum cgt_group_id {
+	__RESERVED__ = 0,
+	CGT_HCR_TID1 = 1,
+	CGT_HCR_TID2 = 2,
+	CGT_HCR_TID3 = 3,
+	CGT_HCR_IMO = 4,
+	CGT_HCR_FMO = 5,
+	CGT_HCR_TIDCP = 6,
+	CGT_HCR_TACR = 7,
+	CGT_HCR_TSW = 8,
+	CGT_HCR_TPC = 9,
+	CGT_HCR_TPU = 10,
+	CGT_HCR_TTLB = 11,
+	CGT_HCR_TVM = 12,
+	CGT_HCR_TDZ = 13,
+	CGT_HCR_TRVM = 14,
+	CGT_HCR_TLOR = 15,
+	CGT_HCR_TERR = 16,
+	CGT_HCR_APK = 17,
+	CGT_HCR_NV = 18,
+	CGT_HCR_NV_nNV2 = 19,
+	CGT_HCR_NV1_nNV2 = 20,
+	CGT_HCR_AT = 21,
+	CGT_HCR_nFIEN = 22,
+	CGT_HCR_TID4 = 23,
+	CGT_HCR_TICAB = 24,
+	CGT_HCR_TOCU = 25,
+	CGT_HCR_ENSCXT = 26,
+	CGT_HCR_TTLBIS = 27,
+	CGT_HCR_TTLBOS = 28,
+	CGT_MDCR_TPMCR = 29,
+	CGT_MDCR_TPM = 30,
+	CGT_MDCR_TDE = 31,
+	CGT_MDCR_TDA = 32,
+	CGT_MDCR_TDOSA = 33,
+	CGT_MDCR_TDRA = 34,
+	CGT_MDCR_E2PB = 35,
+	CGT_MDCR_TPMS = 36,
+	CGT_MDCR_TTRF = 37,
+	CGT_MDCR_E2TB = 38,
+	CGT_MDCR_TDCC = 39,
+	__MULTIPLE_CONTROL_BITS__ = 40,
+	CGT_HCR_IMO_FMO = 40,
+	CGT_HCR_TID2_TID4 = 41,
+	CGT_HCR_TTLB_TTLBIS = 42,
+	CGT_HCR_TTLB_TTLBOS = 43,
+	CGT_HCR_TVM_TRVM = 44,
+	CGT_HCR_TPU_TICAB = 45,
+	CGT_HCR_TPU_TOCU = 46,
+	CGT_HCR_NV1_nNV2_ENSCXT = 47,
+	CGT_MDCR_TPM_TPMCR = 48,
+	CGT_MDCR_TDE_TDA = 49,
+	CGT_MDCR_TDE_TDOSA = 50,
+	CGT_MDCR_TDE_TDRA = 51,
+	CGT_MDCR_TDCC_TDE_TDA = 52,
+	__COMPLEX_CONDITIONS__ = 53,
+	CGT_CNTHCTL_EL1PCTEN = 53,
+	CGT_CNTHCTL_EL1PTEN = 54,
+	__NR_CGT_GROUP_IDS__ = 55,
+};
+
+enum trap_behaviour {
+	BEHAVE_HANDLE_LOCALLY = 0,
+	BEHAVE_FORWARD_READ = 1,
+	BEHAVE_FORWARD_WRITE = 2,
+	BEHAVE_FORWARD_ANY = 3,
+};
+
+struct trap_bits {
+	const enum vcpu_sysreg index;
+	const enum trap_behaviour behaviour;
+	const u64 value;
+	const u64 mask;
+};
+
+typedef enum trap_behaviour (*complex_condition_check)(struct kvm_vcpu *);
+
+enum fgt_group_id {
+	__NO_FGT_GROUP__ = 0,
+	HFGxTR_GROUP = 1,
+	HDFGRTR_GROUP = 2,
+	HDFGWTR_GROUP = 3,
+	HFGITR_GROUP = 4,
+	HAFGRTR_GROUP = 5,
+	__NR_FGT_GROUP_IDS__ = 6,
+};
+
+enum fg_filter_id {
+	__NO_FGF__ = 0,
+	HCRX_FGTnXS = 1,
+	__NR_FG_FILTER_IDS__ = 2,
+};
+
+enum exception_type {
+	except_type_sync = 0,
+	except_type_irq = 128,
+	except_type_fiq = 256,
+	except_type_serror = 384,
+};
+
+typedef void (*btf_trace_vgic_update_irq_pending)(void *, unsigned long, __u32, bool);
+
+struct vgic_global {
+	enum vgic_type type;
+	phys_addr_t vcpu_base;
+	void *vcpu_base_va;
+	void *vcpu_hyp_va;
+	void *vctrl_base;
+	void *vctrl_hyp;
+	int nr_lr;
+	unsigned int maint_irq;
+	int max_gic_vcpus;
+	bool can_emulate_gicv2;
+	bool has_gicv4;
+	bool has_gicv4_1;
+	bool no_hw_deactivation;
+	struct static_key_false gicv3_cpuif;
+	u32 ich_vtr_el2;
+};
+
+struct trace_event_raw_vgic_update_irq_pending {
+	struct trace_entry ent;
+	unsigned long vcpu_id;
+	__u32 irq;
+	bool level;
+	char __data[0];
+};
+
+typedef int (*list_cmp_func_t)(void *, const struct list_head *, const struct list_head *);
+
+struct trace_event_data_offsets_vgic_update_irq_pending {};
+
+enum gic_type {
+	GIC_V2 = 0,
+	GIC_V3 = 1,
+};
+
+struct gic_kvm_info {
+	enum gic_type type;
+	struct resource vcpu;
+	unsigned int maint_irq;
+	bool no_maint_irq_mask;
+	struct resource vctrl;
+	bool has_v4;
+	bool has_v4_1;
+	bool no_hw_deactivation;
+};
+
+struct its_vlpi_map {
+	struct its_vm *vm;
+	struct its_vpe *vpe;
+	u32 vintid;
+	u8 properties;
+	bool db_enabled;
+};
+
+struct vgic_reg_attr {
+	struct kvm_vcpu *vcpu;
+	gpa_t addr;
+};
+
+struct vgic_its_abi {
+	int cte_esz;
+	int dte_esz;
+	int ite_esz;
+	int (*save_tables)(struct vgic_its *);
+	int (*restore_tables)(struct vgic_its *);
+	int (*commit)(struct vgic_its *);
+};
+
+struct vgic_translation_cache_entry {
+	struct list_head entry;
+	phys_addr_t db;
+	u32 devid;
+	u32 eventid;
+	struct vgic_irq *irq;
+};
+
+struct its_device {
+	struct list_head dev_list;
+	struct list_head itt_head;
+	u32 num_eventid_bits;
+	gpa_t itt_addr;
+	u32 device_id;
+};
+
+struct its_collection;
+
+struct its_ite {
+	struct list_head ite_list;
+	struct vgic_irq *irq;
+	struct its_collection *collection;
+	u32 event_id;
+};
+
+struct its_collection {
+	struct list_head coll_list;
+	u32 collection_id;
+	u32 target_addr;
+};
+
+typedef int (*entry_fn_t)(struct vgic_its *, u32, void *, void *);
+
+struct vgic_state_iter {
+	int nr_cpus;
+	int nr_spis;
+	int nr_lpis;
+	int dist_id;
+	int vcpu_id;
+	int intid;
+	int lpi_idx;
+	u32 *lpi_array;
+};
+
+struct kvm_iommu_driver {
+	int (*init_driver)();
+	void (*remove_driver)();
+	pkvm_handle_t (*get_iommu_id)(struct device *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+};
+
+enum kvm_power_domain_type {
+	KVM_POWER_DOMAIN_NONE = 0,
+	KVM_POWER_DOMAIN_HOST_HVC = 1,
+};
+
+struct kvm_power_domain {
+	enum kvm_power_domain_type type;
+	union {
+		u64 device_id;
+	};
+};
+
+struct kvm_hyp_iommu {
+	struct kvm_power_domain power_domain;
+	u32 lock;
+	bool power_is_off;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct kvm_hyp_iommu_domain {
+	atomic_t refs;
+	pkvm_handle_t domain_id;
+	void *priv;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct pmu_hw_events;
+
+struct platform_device;
+
+struct arm_pmu {
+	struct pmu pmu;
+	cpumask_t supported_cpus;
+	char *name;
+	int pmuver;
+	irqreturn_t (*handle_irq)(struct arm_pmu *);
+	void (*enable)(struct perf_event *);
+	void (*disable)(struct perf_event *);
+	int (*get_event_idx)(struct pmu_hw_events *, struct perf_event *);
+	void (*clear_event_idx)(struct pmu_hw_events *, struct perf_event *);
+	int (*set_event_filter)(struct hw_perf_event *, struct perf_event_attr *);
+	u64 (*read_counter)(struct perf_event *);
+	void (*write_counter)(struct perf_event *, u64);
+	void (*start)(struct arm_pmu *);
+	void (*stop)(struct arm_pmu *);
+	void (*reset)(void *);
+	int (*map_event)(struct perf_event *);
+	int num_events;
+	bool secure_access;
+	unsigned long pmceid_bitmap[1];
+	unsigned long pmceid_ext_bitmap[1];
+	struct platform_device *plat_device;
+	struct pmu_hw_events __attribute__((btf_type_tag("percpu"))) *hw_events;
+	struct hlist_node node;
+	struct notifier_block cpu_pm_nb;
+	const struct attribute_group *attr_groups[5];
+	u64 reg_pmmir;
+	unsigned long acpi_cpuid;
+};
+
+struct pmu_hw_events {
+	struct perf_event *events[32];
+	unsigned long used_mask[1];
+	raw_spinlock_t pmu_lock;
+	struct arm_pmu *percpu_pmu;
+	int irq;
+};
+
+struct pdev_archdata {};
+
+struct platform_device_id;
+
+struct mfd_cell;
+
+struct platform_device {
+	const char *name;
+	int id;
+	bool id_auto;
+	struct device dev;
+	u64 platform_dma_mask;
+	struct device_dma_parameters dma_parms;
+	u32 num_resources;
+	struct resource *resource;
+	const struct platform_device_id *id_entry;
+	const char *driver_override;
+	struct mfd_cell *mfd_cell;
+	struct pdev_archdata archdata;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct platform_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct kvm_pmu_event_filter {
+	__u16 base_event;
+	__u16 nevents;
+	__u8 action;
+	__u8 pad[3];
+};
+
+struct arm_pmu_entry {
+	struct list_head entry;
+	struct arm_pmu *arm_pmu;
+};
+
+struct kvm_pgtable_snapshot {
+	struct kvm_pgtable pgtable;
+	struct kvm_hyp_memcache mc;
+	void *pgd_hva;
+	size_t pgd_pages;
+	phys_addr_t *used_pages_hva;
+	size_t num_used_pages;
+	size_t used_pages_idx;
+};
+
+struct kvm_pgtable_visit_ctx;
+
+typedef int (*kvm_pgtable_visitor_fn_t)(const struct kvm_pgtable_visit_ctx *, enum kvm_pgtable_walk_flags);
+
+struct kvm_pgtable_walker {
+	const kvm_pgtable_visitor_fn_t cb;
+	void * const arg;
+	const enum kvm_pgtable_walk_flags flags;
+};
+
+struct kvm_pgtable_visit_ctx {
+	kvm_pte_t *ptep;
+	kvm_pte_t old;
+	void *arg;
+	struct kvm_pgtable_mm_ops *mm_ops;
+	u64 start;
+	struct kvm_pgtable_pte_ops *pte_ops;
+	u64 addr;
+	u64 end;
+	u32 level;
+	enum kvm_pgtable_walk_flags flags;
+};
+
+struct kvm_ptdump_guest_state {
+	union {
+		struct kvm *kvm;
+		struct kvm_pgtable_snapshot *snap;
+	};
+	struct pg_state parser_state;
+	struct addr_marker ipa_marker[2];
+	struct pg_level level[4];
+	struct ptdump_range range[2];
+};
+
+struct hyp_event_table;
+
+struct hyp_event_mod_tables {
+	struct hyp_event_table *tables;
+	unsigned long nr_tables;
+};
+
+struct hyp_event_table {
+	struct hyp_event *start;
+	unsigned long nr_events;
+};
+
+struct trace_hyp_format_hyp_enter {
+	struct hyp_entry_hdr hdr;
+};
+
+struct trace_hyp_format_hyp_exit {
+	struct hyp_entry_hdr hdr;
+};
+
+struct trace_hyp_format_host_hcall {
+	struct hyp_entry_hdr hdr;
+	unsigned int id;
+	u8 invalid;
+} __attribute__((packed));
+
+struct trace_hyp_format_host_smc {
+	struct hyp_entry_hdr hdr;
+	u64 id;
+	u8 forwarded;
+} __attribute__((packed));
+
+struct trace_hyp_format_host_mem_abort {
+	struct hyp_entry_hdr hdr;
+	u64 esr;
+	u64 addr;
+} __attribute__((packed));
+
+struct trace_hyp_format___hyp_printk {
+	struct hyp_entry_hdr hdr;
+	u8 fmt_id;
+	u64 a;
+	u64 b;
+	u64 c;
+	u64 d;
+} __attribute__((packed));
+
+struct trace_hyp_format_host_ffa_call {
+	struct hyp_entry_hdr hdr;
+	u64 func_id;
+	u64 res_a1;
+	u64 res_a2;
+	u64 res_a3;
+	u64 res_a4;
+	int handled;
+	int err;
+} __attribute__((packed));
+
+struct trace_hyp_format_psci_mem_protect {
+	struct hyp_entry_hdr hdr;
+	u64 count;
+	u64 was;
+} __attribute__((packed));
+
+struct trace_hyp_format_iommu_idmap {
+	struct hyp_entry_hdr hdr;
+	u64 from;
+	u64 to;
+	int prot;
+} __attribute__((packed));
+
+struct trace_page_desc;
+
+struct ring_buffer_writer {
+	struct trace_page_desc *pdesc;
+	int (*get_reader_page)(int);
+};
+
+struct hyp_trace_desc;
+
+struct hyp_trace_buffer {
+	struct hyp_trace_desc *desc;
+	struct ring_buffer_writer writer;
+	struct trace_buffer *trace_buffer;
+	size_t desc_size;
+	bool tracing_on;
+	int nr_readers;
+	struct mutex lock;
+	struct ht_iterator *printk_iter;
+	bool printk_on;
+};
+
+struct kvm_nvhe_clock_data {
+	u32 mult;
+	u32 shift;
+	u64 epoch_ns;
+	u64 epoch_cyc;
+};
+
+struct trace_page_desc {
+	int nr_cpus;
+	char __data[0];
+};
+
+struct hyp_trace_desc {
+	struct kvm_nvhe_clock_data clock_data;
+	struct trace_page_desc page_desc;
+};
+
+enum ring_buffer_flags {
+	RB_FL_OVERWRITE = 1,
+};
+
+struct rb_page_desc {
+	int cpu;
+	int nr_page_va;
+	unsigned long meta_va;
+	unsigned long page_va[0];
+};
+
+struct kvm_vcpu___2;
+
+struct kvm_cpu_context___2 {
+	struct user_pt_regs regs;
+	u64 spsr_abt;
+	u64 spsr_und;
+	u64 spsr_irq;
+	u64 spsr_fiq;
+	struct user_fpsimd_state fp_regs;
+	u64 sys_regs[167];
+	struct kvm_vcpu___2 *__hyp_running_vcpu;
+};
+
+struct vgic_irq___2 {
+	raw_spinlock_t irq_lock;
+	struct list_head lpi_list;
+	struct list_head ap_list;
+	struct kvm_vcpu___2 *vcpu;
+	struct kvm_vcpu___2 *target_vcpu;
+	u32 intid;
+	bool line_level;
+	bool pending_latch;
+	bool active;
+	bool enabled;
+	bool hw;
+	struct kref refcount;
+	u32 hwintid;
+	unsigned int host_irq;
+	union {
+		u8 targets;
+		u32 mpidr;
+	};
+	u8 source;
+	u8 active_source;
+	u8 priority;
+	u8 group;
+	enum vgic_irq_config config;
+	struct irq_ops *ops;
+	void *owner;
+};
+
+struct kvm_io_device_ops___2;
+
+struct kvm_io_device___2 {
+	const struct kvm_io_device_ops___2 *ops;
+};
+
+struct vgic_its___2;
+
+struct vgic_io_device___2 {
+	gpa_t base_addr;
+	union {
+		struct kvm_vcpu___2 *redist_vcpu;
+		struct vgic_its___2 *its;
+	};
+	const struct vgic_register_region *regions;
+	enum iodev_type iodev_type;
+	int nr_regions;
+	struct kvm_io_device___2 dev;
+};
+
+struct vgic_cpu___2 {
+	union {
+		struct vgic_v2_cpu_if vgic_v2;
+		struct vgic_v3_cpu_if vgic_v3;
+	};
+	struct vgic_irq___2 private_irqs[32];
+	raw_spinlock_t ap_list_lock;
+	struct list_head ap_list_head;
+	struct vgic_io_device___2 rd_iodev;
+	struct vgic_redist_region *rdreg;
+	u32 rdreg_index;
+	atomic_t syncr_busy;
+	u64 pendbaser;
+	atomic_t ctlr;
+	u32 num_pri_bits;
+	u32 num_id_bits;
+};
+
+struct arch_timer_context___2 {
+	struct kvm_vcpu___2 *vcpu;
+	struct hrtimer hrtimer;
+	u64 ns_frac;
+	struct arch_timer_offset offset;
+	bool loaded;
+	struct {
+		bool level;
+	} irq;
+	u32 host_timer_irq;
+};
+
+struct arch_timer_cpu___2 {
+	struct arch_timer_context___2 timers[4];
+	struct hrtimer bg_timer;
+	bool enabled;
+};
+
+struct kvm_s2_mmu___2;
+
+struct kvm_vcpu_arch___2 {
+	struct kvm_cpu_context___2 ctxt;
+	void *sve_state;
+	enum fp_type fp_type;
+	unsigned int sve_max_vl;
+	u64 svcr;
+	struct kvm_s2_mmu___2 *hw_mmu;
+	u64 hcr_el2;
+	u64 mdcr_el2;
+	u64 cptr_el2;
+	u64 mdcr_el2_host;
+	struct kvm_vcpu_fault_info fault;
+	enum {
+		FP_STATE_FREE___2 = 0,
+		FP_STATE_HOST_OWNED___2 = 1,
+		FP_STATE_GUEST_OWNED___2 = 2,
+	} fp_state;
+	u8 cflags;
+	u8 iflags;
+	u8 sflags;
+	bool pause;
+	struct kvm_guest_debug_arch *debug_ptr;
+	struct kvm_guest_debug_arch vcpu_debug_state;
+	struct kvm_guest_debug_arch external_debug_state;
+	struct user_fpsimd_state *host_fpsimd_state;
+	struct {
+		struct kvm_guest_debug_arch regs;
+		u64 pmscr_el1;
+		u64 trfcr_el1;
+	} host_debug_state;
+	struct vgic_cpu___2 vgic_cpu;
+	struct arch_timer_cpu___2 timer_cpu;
+	struct kvm_pmu pmu;
+	struct {
+		u32 mdscr_el1;
+		bool pstate_ss;
+	} guest_debug_preserved;
+	struct kvm_mp_state mp_state;
+	spinlock_t mp_state_lock;
+	union {
+		struct kvm_mmu_memory_cache mmu_page_cache;
+		struct kvm_hyp_memcache stage2_mc;
+	};
+	unsigned long features[1];
+	u64 vsesr_el2;
+	struct vcpu_reset_state reset_state;
+	struct {
+		u64 last_steal;
+		gpa_t base;
+	} steal;
+	u32 *ccsidr;
+	struct kvm_hyp_req *hyp_reqs;
+};
+
+struct kvm___2;
+
+struct kvm_vcpu___2 {
+	struct kvm___2 *kvm;
+	struct preempt_notifier preempt_notifier;
+	int cpu;
+	int vcpu_id;
+	int vcpu_idx;
+	int ____srcu_idx;
+	int mode;
+	u64 requests;
+	unsigned long guest_debug;
+	struct mutex mutex;
+	struct kvm_run *run;
+	struct rcuwait wait;
+	struct pid __attribute__((btf_type_tag("rcu"))) *pid;
+	int sigset_active;
+	sigset_t sigset;
+	unsigned int halt_poll_ns;
+	bool valid_wakeup;
+	int mmio_needed;
+	int mmio_read_completed;
+	int mmio_is_write;
+	int mmio_cur_fragment;
+	int mmio_nr_fragments;
+	struct kvm_mmio_fragment mmio_fragments[2];
+	struct {
+		bool in_spin_loop;
+		bool dy_eligible;
+	} spin_loop;
+	bool preempted;
+	bool ready;
+	long: 64;
+	struct kvm_vcpu_arch___2 arch;
+	struct kvm_vcpu_stat stat;
+	char stats_id[48];
+	struct kvm_dirty_ring dirty_ring;
+	struct kvm_memory_slot *last_used_slot;
+	u64 last_used_slot_gen;
+	long: 64;
+};
+
+struct kvm_pgtable___2;
+
+struct kvm_arch___2;
+
+struct kvm_s2_mmu___2 {
+	struct kvm_vmid vmid;
+	phys_addr_t pgd_phys;
+	struct kvm_pgtable___2 *pgt;
+	int __attribute__((btf_type_tag("percpu"))) *last_vcpu_ran;
+	struct kvm_mmu_memory_cache split_page_cache;
+	uint64_t split_page_chunk_size;
+	struct kvm_arch___2 *arch;
+};
+
+struct vgic_dist___2 {
+	bool in_kernel;
+	bool ready;
+	bool initialized;
+	u32 vgic_model;
+	u32 implementation_rev;
+	bool v2_groups_user_writable;
+	bool msis_require_devid;
+	int nr_spis;
+	gpa_t vgic_dist_base;
+	union {
+		gpa_t vgic_cpu_base;
+		struct list_head rd_regions;
+	};
+	bool enabled;
+	bool nassgireq;
+	struct vgic_irq___2 *spis;
+	struct vgic_io_device___2 dist_iodev;
+	bool has_its;
+	bool table_write_in_progress;
+	u64 propbaser;
+	raw_spinlock_t lpi_list_lock;
+	struct list_head lpi_list_head;
+	int lpi_list_count;
+	struct list_head lpi_translation_cache;
+	struct vgic_state_iter *iter;
+	struct its_vm its_vm;
+};
+
+struct kvm_arch___2 {
+	struct kvm_s2_mmu___2 mmu;
+	u64 vtcr;
+	struct vgic_dist___2 vgic;
+	struct arch_timer_vm_data timer_data;
+	u32 psci_version;
+	struct mutex config_lock;
+	unsigned long flags;
+	unsigned long vcpu_features[1];
+	unsigned long *pmu_filter;
+	struct arm_pmu *arm_pmu;
+	cpumask_var_t supported_cpus;
+	struct kvm_smccc_features smccc_feat;
+	struct maple_tree smccc_filter;
+	u64 id_regs[56];
+	struct kvm_protected_vm pkvm;
+};
+
+struct kvm_io_bus___2;
+
+struct kvm_stat_data___2;
+
+struct kvm___2 {
+	rwlock_t mmu_lock;
+	struct mutex slots_lock;
+	struct mutex slots_arch_lock;
+	struct mm_struct *mm;
+	unsigned long nr_memslot_pages;
+	struct kvm_memslots __memslots[2];
+	struct kvm_memslots __attribute__((btf_type_tag("rcu"))) *memslots[1];
+	struct xarray vcpu_array;
+	atomic_t nr_memslots_dirty_logging;
+	spinlock_t mn_invalidate_lock;
+	unsigned long mn_active_invalidate_count;
+	struct rcuwait mn_memslots_update_rcuwait;
+	spinlock_t gpc_lock;
+	struct list_head gpc_list;
+	atomic_t online_vcpus;
+	int max_vcpus;
+	int created_vcpus;
+	int last_boosted_vcpu;
+	struct list_head vm_list;
+	struct mutex lock;
+	struct kvm_io_bus___2 __attribute__((btf_type_tag("rcu"))) *buses[4];
+	struct {
+		spinlock_t lock;
+		struct list_head items;
+		struct list_head resampler_list;
+		struct mutex resampler_lock;
+	} irqfds;
+	struct list_head ioeventfds;
+	struct kvm_vm_stat stat;
+	struct kvm_arch___2 arch;
+	refcount_t users_count;
+	struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
+	spinlock_t ring_lock;
+	struct list_head coalesced_zones;
+	struct mutex irq_lock;
+	struct kvm_irq_routing_table __attribute__((btf_type_tag("rcu"))) *irq_routing;
+	struct hlist_head irq_ack_notifier_list;
+	struct mmu_notifier mmu_notifier;
+	unsigned long mmu_invalidate_seq;
+	long mmu_invalidate_in_progress;
+	unsigned long mmu_invalidate_range_start;
+	unsigned long mmu_invalidate_range_end;
+	struct list_head devices;
+	u64 manual_dirty_log_protect;
+	struct dentry *debugfs_dentry;
+	struct kvm_stat_data___2 **debugfs_stat_data;
+	struct srcu_struct srcu;
+	struct srcu_struct irq_srcu;
+	pid_t userspace_pid;
+	bool override_halt_poll_ns;
+	unsigned int max_halt_poll_ns;
+	u32 dirty_ring_size;
+	bool dirty_ring_with_bitmap;
+	bool vm_bugged;
+	bool vm_dead;
+	char stats_id[48];
+};
+
+struct kvm_io_range___2 {
+	gpa_t addr;
+	int len;
+	struct kvm_io_device___2 *dev;
+};
+
+struct kvm_io_bus___2 {
+	int dev_count;
+	int ioeventfd_count;
+	struct kvm_io_range___2 range[0];
+};
+
+struct kvm_io_device_ops___2 {
+	int (*read)(struct kvm_vcpu___2 *, struct kvm_io_device___2 *, gpa_t, int, void *);
+	int (*write)(struct kvm_vcpu___2 *, struct kvm_io_device___2 *, gpa_t, int, const void *);
+	void (*destructor)(struct kvm_io_device___2 *);
+};
+
+typedef kvm_pte_t *kvm_pteref_t___2;
+
+struct kvm_pgtable___2 {
+	u32 ia_bits;
+	u32 start_level;
+	kvm_pteref_t___2 pgd;
+	struct kvm_pgtable_mm_ops *mm_ops;
+	struct kvm_s2_mmu___2 *mmu;
+	enum kvm_pgtable_stage2_flags flags;
+	struct kvm_pgtable_pte_ops *pte_ops;
+};
+
+struct kvm_device___2;
+
+struct vgic_its___2 {
+	gpa_t vgic_its_base;
+	bool enabled;
+	struct vgic_io_device___2 iodev;
+	struct kvm_device___2 *dev;
+	u64 baser_device_table;
+	u64 baser_coll_table;
+	struct mutex cmd_lock;
+	u64 cbaser;
+	u32 creadr;
+	u32 cwriter;
+	u32 abi_rev;
+	struct mutex its_lock;
+	struct list_head device_list;
+	struct list_head collection_list;
+};
+
+struct kvm_device_ops___2;
+
+struct kvm_device___2 {
+	const struct kvm_device_ops___2 *ops;
+	struct kvm___2 *kvm;
+	void *private;
+	struct list_head vm_node;
+};
+
+struct kvm_device_ops___2 {
+	const char *name;
+	int (*create)(struct kvm_device___2 *, u32);
+	void (*init)(struct kvm_device___2 *);
+	void (*destroy)(struct kvm_device___2 *);
+	void (*release)(struct kvm_device___2 *);
+	int (*set_attr)(struct kvm_device___2 *, struct kvm_device_attr *);
+	int (*get_attr)(struct kvm_device___2 *, struct kvm_device_attr *);
+	int (*has_attr)(struct kvm_device___2 *, struct kvm_device_attr *);
+	long (*ioctl)(struct kvm_device___2 *, unsigned int, unsigned long);
+	int (*mmap)(struct kvm_device___2 *, struct vm_area_struct *);
+};
+
+struct kvm_stat_data___2 {
+	struct kvm___2 *kvm;
+	const struct _kvm_stats_desc *desc;
+	enum kvm_stat_kind kind;
+};
+
+struct kvm_host_data___2 {
+	struct kvm_cpu_context___2 host_ctxt;
+};
+
+typedef bool (*exit_handler_fn)(struct kvm_vcpu___2 *, u64 *);
+
+struct timer_map___2 {
+	struct arch_timer_context___2 *direct_vtimer;
+	struct arch_timer_context___2 *direct_ptimer;
+	struct arch_timer_context___2 *emul_vtimer;
+	struct arch_timer_context___2 *emul_ptimer;
+};
+
+struct kvm_exception_table_entry {
+	int insn;
+	int fixup;
+};
+
+struct tlb_inv_context {
+	unsigned long flags;
+	u64 tcr;
+	u64 sctlr;
+};
+
+struct kvm_host_sve_state {
+	u64 zcr_el1;
+	u32 fpsr;
+	u32 fpcr;
+	char sve_regs[0];
+};
+
+struct tlb_inv_context___2 {
+	struct kvm_s2_mmu___2 *mmu;
+	u64 tcr;
+	u64 sctlr;
+};
+
+struct kvm_iommu_ops {
+	int (*init)(unsigned long);
+	struct kvm_hyp_iommu * (*get_iommu_by_id)(pkvm_handle_t);
+	int (*alloc_domain)(struct kvm_hyp_iommu_domain *, u32);
+	void (*free_domain)(struct kvm_hyp_iommu_domain *);
+	int (*attach_dev)(struct kvm_hyp_iommu *, struct kvm_hyp_iommu_domain *, u32, u32, u32);
+	int (*detach_dev)(struct kvm_hyp_iommu *, struct kvm_hyp_iommu_domain *, u32, u32);
+	bool (*dabt_handler)(struct kvm_cpu_context___2 *, u64, u64);
+	int (*suspend)(struct kvm_hyp_iommu *);
+	int (*resume)(struct kvm_hyp_iommu *);
+	void (*iotlb_sync)(struct kvm_hyp_iommu_domain *, struct iommu_iotlb_gather *);
+	void (*host_stage2_idmap)(struct kvm_hyp_iommu_domain *, phys_addr_t, phys_addr_t, int);
+	int (*map_pages)(struct kvm_hyp_iommu_domain *, unsigned long, phys_addr_t, size_t, size_t, int, size_t *);
+	size_t (*unmap_pages)(struct kvm_hyp_iommu_domain *, unsigned long, size_t, size_t, struct iommu_iotlb_gather *, struct kvm_iommu_paddr_cache *);
+	phys_addr_t (*iova_to_phys)(struct kvm_hyp_iommu_domain *, unsigned long);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+};
+
+struct kvm_iommu_paddr_cache {
+	unsigned short ptr;
+	u64 paddr[511];
+	size_t pgsize[511];
+};
+
+typedef void (*hcall_t)(struct kvm_cpu_context___2 *);
+
+struct pkvm_hyp_vcpu;
+
+typedef void (*hyp_entry_exit_handler_fn)(struct pkvm_hyp_vcpu *);
+
+struct pkvm_hyp_vcpu {
+	struct kvm_vcpu___2 vcpu;
+	struct kvm_vcpu___2 *host_vcpu;
+	struct pkvm_hyp_vcpu **loaded_hyp_vcpu;
+	u32 exit_code;
+	int power_state;
+	long: 64;
+};
+
+union hyp_spinlock {
+	u32 __val;
+	struct {
+		u16 owner;
+		u16 next;
+	};
+};
+
+typedef union hyp_spinlock hyp_spinlock_t;
+
+struct hyp_pool {
+	hyp_spinlock_t lock;
+	struct list_head free_area[11];
+	phys_addr_t range_start;
+	phys_addr_t range_end;
+	u64 free_pages;
+	u8 max_order;
+};
+
+struct pkvm_hyp_vm {
+	struct kvm___2 kvm;
+	struct kvm___2 *host_kvm;
+	struct kvm_pgtable___2 pgt;
+	struct kvm_pgtable_mm_ops mm_ops;
+	struct hyp_pool pool;
+	hyp_spinlock_t pgtable_lock;
+	struct pkvm_hyp_vcpu *pvmfw_entry_vcpu;
+	unsigned short refcount;
+	unsigned int nr_vcpus;
+	hyp_spinlock_t vcpus_lock;
+	bool is_dying;
+	struct pkvm_hyp_vcpu *vcpus[0];
+};
+
+struct kvm_host_psci_config {
+	u32 version;
+	u32 smccc_version;
+	struct psci_0_1_function_ids function_ids_0_1;
+	bool psci_0_1_cpu_suspend_implemented;
+	bool psci_0_1_cpu_on_implemented;
+	bool psci_0_1_cpu_off_implemented;
+	bool psci_0_1_migrate_implemented;
+};
+
+struct psci_boot_args {
+	atomic_t lock;
+	unsigned long pc;
+	unsigned long r0;
+};
+
+struct hyp_mgt_allocator_ops {
+	int (*refill)(struct kvm_hyp_memcache *);
+	int (*reclaimable)();
+	void (*reclaim)(struct kvm_hyp_memcache *, int);
+};
+
+struct hyp_allocator {
+	struct list_head chunks;
+	unsigned long start;
+	u32 size;
+	hyp_spinlock_t lock;
+};
+
+struct chunk_hdr {
+	u32 alloc_size;
+	u32 mapped_size;
+	struct list_head node;
+	u32 hash;
+	long: 0;
+	char data;
+};
+
+enum pkvm_page_state {
+	PKVM_PAGE_OWNED = 0,
+	PKVM_PAGE_SHARED_OWNED = 1,
+	PKVM_PAGE_SHARED_BORROWED = 2,
+	PKVM_PAGE_MMIO_DMA = 3,
+	PKVM_MODULE_OWNED_PAGE = 4,
+	PKVM_NOPAGE = 8,
+	PKVM_PAGE_RESTRICTED_PROT = 16,
+	PKVM_MMIO = 32,
+};
+
+struct hyp_page {
+	unsigned short refcount;
+	u8 order;
+	enum pkvm_page_state host_state: 8;
+};
+
+enum pkvm_component_id {
+	PKVM_ID_HOST = 0,
+	PKVM_ID_HYP = 1,
+	PKVM_ID_FFA = 2,
+	PKVM_ID_GUEST = 3,
+	PKVM_ID_PROTECTED = 4,
+	PKVM_ID_MAX = 4,
+};
+
+struct hyp_fixmap_slot {
+	u64 addr;
+	kvm_pte_t *ptep;
+};
+
+struct host_mmu {
+	struct kvm_arch___2 arch;
+	struct kvm_pgtable___2 pgt;
+	struct kvm_pgtable_mm_ops mm_ops;
+	hyp_spinlock_t lock;
+};
+
+struct guest_request_walker_data {
+	unsigned long ipa_start;
+	phys_addr_t phys_start;
+	u64 size;
+	enum pkvm_page_state desired_state;
+	enum pkvm_page_state desired_mask;
+	int max_ptes;
+};
+
+struct kvm_mem_range {
+	u64 start;
+	u64 end;
+};
+
+struct pkvm_mem_transition;
+
+struct pkvm_checked_mem_transition {
+	const struct pkvm_mem_transition *tx;
+	u64 completer_addr;
+	u64 nr_pages;
+};
+
+struct pkvm_mem_transition {
+	u64 nr_pages;
+	struct {
+		enum pkvm_component_id id;
+		u64 addr;
+		union {
+			struct {
+				u64 completer_addr;
+			} host;
+			struct {
+				u64 completer_addr;
+			} hyp;
+			struct {
+				struct pkvm_hyp_vm *hyp_vm;
+				struct kvm_hyp_memcache *mc;
+			} guest;
+		};
+	} initiator;
+	struct {
+		enum pkvm_component_id id;
+		union {
+			struct {
+				struct pkvm_hyp_vm *hyp_vm;
+				struct kvm_hyp_memcache *mc;
+				phys_addr_t phys;
+			} guest;
+		};
+		const enum kvm_pgtable_prot prot;
+	} completer;
+};
+
+struct check_walk_data {
+	enum pkvm_page_state desired;
+	enum pkvm_page_state (*get_page_state)(kvm_pte_t, u64);
+};
+
+struct relinquish_data {
+	enum pkvm_page_state expected_state;
+	u64 pa;
+};
+
+struct sys_reg_desc_reset {
+	int reg;
+	void (*reset)(struct kvm_vcpu___2 *, const struct sys_reg_desc_reset *);
+	u64 value;
+};
+
+struct sys_reg_desc___2 {
+	const char *name;
+	enum {
+		AA32_DIRECT___2 = 0,
+		AA32_LO___2 = 1,
+		AA32_HI___2 = 2,
+	} aarch32_map;
+	u8 Op0;
+	u8 Op1;
+	u8 CRn;
+	u8 CRm;
+	u8 Op2;
+	bool (*access)(struct kvm_vcpu___2 *, struct sys_reg_params *, const struct sys_reg_desc___2 *);
+	u64 (*reset)(struct kvm_vcpu___2 *, const struct sys_reg_desc___2 *);
+	int reg;
+	u64 val;
+	int (*__get_user)(struct kvm_vcpu___2 *, const struct sys_reg_desc___2 *, u64 *);
+	int (*set_user)(struct kvm_vcpu___2 *, const struct sys_reg_desc___2 *, u64);
+	unsigned int (*visibility)(const struct kvm_vcpu___2 *, const struct sys_reg_desc___2 *);
+};
+
+typedef struct {
+	u32 __val;
+} hyp_rwlock_t;
+
+struct kvm_ffa_descriptor_buffer {
+	void *buf;
+	size_t len;
+};
+
+struct kvm_ffa_buffers {
+	hyp_spinlock_t lock;
+	void *tx;
+	void *rx;
+};
+
+struct ffa_mem_region {
+	u16 sender_id;
+	u16 attributes;
+	u32 flags;
+	u64 handle;
+	u64 tag;
+	u32 ep_mem_size;
+	u32 ep_count;
+	u32 ep_mem_offset;
+	u32 reserved[3];
+};
+
+struct ffa_mem_region_addr_range {
+	u64 address;
+	u32 pg_cnt;
+	u32 reserved;
+};
+
+struct ffa_composite_mem_region {
+	u32 total_pg_cnt;
+	u32 addr_range_cnt;
+	u64 reserved;
+	struct ffa_mem_region_addr_range constituents[0];
+};
+
+struct ffa_mem_region_attributes {
+	u16 receiver;
+	u8 attrs;
+	u8 flag;
+	u32 composite_off;
+	u64 reserved;
+};
+
+struct kvm_pgtable_walk_data {
+	struct kvm_pgtable_walker *walker;
+	const u64 start;
+	u64 addr;
+	const u64 end;
+};
+
+struct hyp_map_data {
+	const u64 phys;
+	kvm_pte_t attr;
+};
+
+struct stage2_map_data {
+	const u64 phys;
+	kvm_pte_t attr;
+	u64 annotation;
+	kvm_pte_t *anchor;
+	kvm_pte_t *childp;
+	struct kvm_s2_mmu___2 *mmu;
+	void *memcache;
+	bool force_pte;
+};
+
+struct leaf_walk_data {
+	kvm_pte_t pte;
+	u32 level;
+};
+
+struct stage2_attr_data {
+	kvm_pte_t attr_set;
+	kvm_pte_t attr_clr;
+	kvm_pte_t pte;
+	u32 level;
+};
+
+struct stage2_age_data {
+	bool mkold;
+	bool young;
+};
+
+struct kvm_power_domain_ops {
+	int (*power_on)(struct kvm_power_domain *);
+	int (*power_off)(struct kvm_power_domain *);
+};
+
+struct ring_buffer_meta;
+
+struct hyp_buffer_page;
+
+struct hyp_rb_per_cpu {
+	struct ring_buffer_meta *meta;
+	struct hyp_buffer_page *tail_page;
+	struct hyp_buffer_page *reader_page;
+	struct hyp_buffer_page *head_page;
+	struct hyp_buffer_page *bpages;
+	unsigned long nr_pages;
+	unsigned long last_overrun;
+	u64 write_stamp;
+	atomic_t status;
+};
+
+struct reader_page {
+	__u32 id;
+	__u32 read;
+	unsigned long lost_events;
+};
+
+struct ring_buffer_meta {
+	unsigned long entries;
+	unsigned long overrun;
+	unsigned long read;
+	unsigned long pages_touched;
+	unsigned long pages_lost;
+	unsigned long pages_read;
+	__u32 meta_page_size;
+	__u32 nr_data_pages;
+	struct reader_page reader_page;
+};
+
+struct buffer_data_page;
+
+struct hyp_buffer_page {
+	struct list_head list;
+	struct buffer_data_page *page;
+	unsigned long write;
+	unsigned long entries;
+	u32 id;
+};
+
+struct buffer_data_page {
+	u64 time_stamp;
+	local_t commit;
+	unsigned char data[0];
+};
+
+enum ring_buffer_type {
+	RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,
+	RINGBUF_TYPE_PADDING = 29,
+	RINGBUF_TYPE_TIME_EXTEND = 30,
+	RINGBUF_TYPE_TIME_STAMP = 31,
+};
+
+typedef void (*dyn_hcall_t)(struct user_pt_regs *);
+
+struct hvc_power_domain {
+	struct kvm_power_domain *pd;
+	const struct kvm_power_domain_ops *ops;
+};
+
+struct stage2_map_data___2 {
+	const u64 phys;
+	kvm_pte_t attr;
+	u64 annotation;
+	kvm_pte_t *anchor;
+	kvm_pte_t *childp;
+	struct kvm_s2_mmu *mmu;
+	void *memcache;
+	bool force_pte;
+};
+
+enum gunyah_error {
+	GUNYAH_ERROR_OK = 0,
+	GUNYAH_ERROR_UNIMPLEMENTED = -1,
+	GUNYAH_ERROR_RETRY = -2,
+	GUNYAH_ERROR_ARG_INVAL = 1,
+	GUNYAH_ERROR_ARG_SIZE = 2,
+	GUNYAH_ERROR_ARG_ALIGN = 3,
+	GUNYAH_ERROR_NOMEM = 10,
+	GUNYAH_ERROR_ADDR_OVFL = 20,
+	GUNYAH_ERROR_ADDR_UNFL = 21,
+	GUNYAH_ERROR_ADDR_INVAL = 22,
+	GUNYAH_ERROR_DENIED = 30,
+	GUNYAH_ERROR_BUSY = 31,
+	GUNYAH_ERROR_IDLE = 32,
+	GUNYAH_ERROR_IRQ_BOUND = 40,
+	GUNYAH_ERROR_IRQ_UNBOUND = 41,
+	GUNYAH_ERROR_CSPACE_CAP_NULL = 50,
+	GUNYAH_ERROR_CSPACE_CAP_REVOKED = 51,
+	GUNYAH_ERROR_CSPACE_WRONG_OBJ_TYPE = 52,
+	GUNYAH_ERROR_CSPACE_INSUF_RIGHTS = 53,
+	GUNYAH_ERROR_CSPACE_FULL = 54,
+	GUNYAH_ERROR_MSGQUEUE_EMPTY = 60,
+	GUNYAH_ERROR_MSGQUEUE_FULL = 61,
+};
+
+struct gunyah_hypercall_vcpu_run_resp {
+	union {
+		enum {
+			GUNYAH_VCPU_STATE_READY = 0,
+			GUNYAH_VCPU_STATE_EXPECTS_WAKEUP = 1,
+			GUNYAH_VCPU_STATE_POWERED_OFF = 2,
+			GUNYAH_VCPU_STATE_BLOCKED = 3,
+			GUNYAH_VCPU_ADDRSPACE_VMMIO_READ = 4,
+			GUNYAH_VCPU_ADDRSPACE_VMMIO_WRITE = 5,
+			GUNYAH_VCPU_ADDRSPACE_PAGE_FAULT = 7,
+		} state;
+		u64 sized_state;
+	};
+	u64 state_data[3];
+};
+
+struct arm_smccc_1_2_regs {
+	unsigned long a0;
+	unsigned long a1;
+	unsigned long a2;
+	unsigned long a3;
+	unsigned long a4;
+	unsigned long a5;
+	unsigned long a6;
+	unsigned long a7;
+	unsigned long a8;
+	unsigned long a9;
+	unsigned long a10;
+	unsigned long a11;
+	unsigned long a12;
+	unsigned long a13;
+	unsigned long a14;
+	unsigned long a15;
+	unsigned long a16;
+	unsigned long a17;
+};
+
+struct gunyah_hypercall_hyp_identify_resp {
+	u64 api_info;
+	u64 flags[3];
+};
+
+typedef void (*exitcall_t)();
+
+struct crypto_tfm;
+
+struct cipher_alg {
+	unsigned int cia_min_keysize;
+	unsigned int cia_max_keysize;
+	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
+	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
+	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
+};
+
+struct compress_alg {
+	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+};
+
+struct crypto_type;
+
+struct crypto_alg {
+	struct list_head cra_list;
+	struct list_head cra_users;
+	u32 cra_flags;
+	unsigned int cra_blocksize;
+	unsigned int cra_ctxsize;
+	unsigned int cra_alignmask;
+	int cra_priority;
+	refcount_t cra_refcnt;
+	char cra_name[128];
+	char cra_driver_name[128];
+	const struct crypto_type *cra_type;
+	union {
+		struct cipher_alg cipher;
+		struct compress_alg compress;
+	} cra_u;
+	int (*cra_init)(struct crypto_tfm *);
+	void (*cra_exit)(struct crypto_tfm *);
+	void (*cra_destroy)(struct crypto_alg *);
+	struct module *cra_module;
+};
+
+struct hash_alg_common {
+	unsigned int digestsize;
+	unsigned int statesize;
+	struct crypto_alg base;
+};
+
+struct shash_desc;
+
+struct crypto_shash;
+
+struct shash_alg {
+	int (*init)(struct shash_desc *);
+	int (*update)(struct shash_desc *, const u8 *, unsigned int);
+	int (*final)(struct shash_desc *, u8 *);
+	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*export)(struct shash_desc *, void *);
+	int (*import)(struct shash_desc *, const void *);
+	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_shash *);
+	void (*exit_tfm)(struct crypto_shash *);
+	int (*clone_tfm)(struct crypto_shash *, struct crypto_shash *);
+	unsigned int descsize;
+	union {
+		int (*finup_mb)(struct shash_desc *, const u8 * const *, unsigned int, u8 * const *, unsigned int);
+		struct {
+			u64 android_backport_reserved1;
+		};
+		union {};
+	};
+	union {
+		unsigned int mb_max_msgs;
+		struct {
+			u64 android_backport_reserved2;
+		};
+		union {};
+	};
+	union {
+		struct {
+			unsigned int digestsize;
+			unsigned int statesize;
+			struct crypto_alg base;
+		};
+		struct hash_alg_common halg;
+	};
+};
+
+struct shash_desc {
+	struct crypto_shash *tfm;
+	void *__ctx[0];
+};
+
+struct crypto_tfm {
+	refcount_t refcnt;
+	u32 crt_flags;
+	int node;
+	void (*exit)(struct crypto_tfm *);
+	struct crypto_alg *__crt_alg;
+	void *__crt_ctx[0];
+};
+
+struct crypto_shash {
+	unsigned int descsize;
+	struct crypto_tfm base;
+};
+
+struct crypto_instance;
+
+struct crypto_type {
+	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
+	unsigned int (*extsize)(struct crypto_alg *);
+	int (*init_tfm)(struct crypto_tfm *);
+	void (*show)(struct seq_file *, struct crypto_alg *);
+	int (*report)(struct sk_buff *, struct crypto_alg *);
+	void (*free)(struct crypto_instance *);
+	unsigned int type;
+	unsigned int maskclear;
+	unsigned int maskset;
+	unsigned int tfmsize;
+};
+
+struct crypto_template;
+
+struct crypto_spawn;
+
+struct crypto_instance {
+	struct crypto_alg alg;
+	struct crypto_template *tmpl;
+	union {
+		struct hlist_node list;
+		struct crypto_spawn *spawns;
+	};
+	struct work_struct free_work;
+	void *__ctx[0];
+};
+
+struct rtattr;
+
+struct crypto_template {
+	struct list_head list;
+	struct hlist_head instances;
+	struct module *module;
+	int (*create)(struct crypto_template *, struct rtattr **);
+	char name[128];
+};
+
+struct crypto_spawn {
+	struct list_head list;
+	struct crypto_alg *alg;
+	union {
+		struct crypto_instance *inst;
+		struct crypto_spawn *next;
+	};
+	const struct crypto_type *frontend;
+	u32 mask;
+	bool dead;
+	bool registered;
+};
+
+struct sha256_state {
+	u32 state[8];
+	u64 count;
+	u8 buf[64];
+};
+
+struct sha256_ce_state {
+	struct sha256_state sst;
+	u32 finalize;
+};
+
+typedef void sha256_block_fn(struct sha256_state *, const u8 *, int);
+
+struct sha512_state;
+
+typedef void sha512_block_fn(struct sha512_state *, const u8 *, int);
+
+struct sha512_state {
+	u64 state[8];
+	u64 count[2];
+	u8 buf[128];
+};
+
+struct crypto_aead;
+
+struct aead_request;
+
+struct aead_alg {
+	int (*setkey)(struct crypto_aead *, const u8 *, unsigned int);
+	int (*setauthsize)(struct crypto_aead *, unsigned int);
+	int (*encrypt)(struct aead_request *);
+	int (*decrypt)(struct aead_request *);
+	int (*init)(struct crypto_aead *);
+	void (*exit)(struct crypto_aead *);
+	unsigned int ivsize;
+	unsigned int maxauthsize;
+	unsigned int chunksize;
+	struct crypto_alg base;
+};
+
+struct crypto_aead {
+	unsigned int authsize;
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+typedef void (*crypto_completion_t)(void *, int);
+
+struct crypto_async_request {
+	struct list_head list;
+	crypto_completion_t complete;
+	void *data;
+	struct crypto_tfm *tfm;
+	u32 flags;
+};
+
+struct aead_request {
+	struct crypto_async_request base;
+	unsigned int assoclen;
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	void *__ctx[0];
+};
+
+typedef struct {
+	__be64 a;
+	__be64 b;
+} be128;
+
+struct crypto_aes_ctx {
+	u32 key_enc[60];
+	u32 key_dec[60];
+	u32 key_length;
+};
+
+struct scatter_walk {
+	struct scatterlist *sg;
+	unsigned int offset;
+};
+
+struct skcipher_walk {
+	union {
+		struct {
+			struct page *page;
+			unsigned long offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} src;
+	union {
+		struct {
+			struct page *page;
+			unsigned long offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} dst;
+	struct scatter_walk in;
+	unsigned int nbytes;
+	struct scatter_walk out;
+	unsigned int total;
+	struct list_head buffers;
+	u8 *page;
+	u8 *buffer;
+	u8 *oiv;
+	void *iv;
+	unsigned int ivsize;
+	int flags;
+	unsigned int blocksize;
+	unsigned int stride;
+	unsigned int alignmask;
+};
+
+struct ghash_key {
+	be128 k;
+	u64 h[0];
+};
+
+struct gcm_aes_ctx {
+	struct crypto_aes_ctx aes_key;
+	u8 nonce[4];
+	struct ghash_key ghash_key;
+};
+
+struct ghash_desc_ctx {
+	u64 digest[2];
+	u8 buf[16];
+	u32 count;
+};
+
+struct polyval_tfm_ctx {
+	u8 key_powers[128];
+};
+
+struct polyval_desc_ctx {
+	u8 buffer[16];
+	u32 bytes;
+};
+
+struct aes_block {
+	u8 b[16];
+};
+
+struct crypto_skcipher;
+
+struct skcipher_request;
+
+struct skcipher_alg {
+	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
+	int (*encrypt)(struct skcipher_request *);
+	int (*decrypt)(struct skcipher_request *);
+	int (*init)(struct crypto_skcipher *);
+	void (*exit)(struct crypto_skcipher *);
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+	unsigned int ivsize;
+	unsigned int chunksize;
+	unsigned int walksize;
+	struct crypto_alg base;
+};
+
+struct crypto_skcipher {
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct skcipher_request {
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	struct crypto_async_request base;
+	void *__ctx[0];
+};
+
+struct mac_tfm_ctx {
+	struct crypto_aes_ctx key;
+	long: 0;
+	u8 consts[0];
+};
+
+struct crypto_aes_xts_ctx {
+	struct crypto_aes_ctx key1;
+	long: 0;
+	struct crypto_aes_ctx key2;
+	long: 0;
+};
+
+struct crypto_aes_essiv_cbc_ctx {
+	struct crypto_aes_ctx key1;
+	long: 0;
+	struct crypto_aes_ctx key2;
+	struct crypto_shash *hash;
+};
+
+struct mac_desc_ctx {
+	unsigned int len;
+	u8 dg[16];
+};
+
+enum chacha_constants {
+	CHACHA_CONSTANT_EXPA = 1634760805,
+	CHACHA_CONSTANT_ND_3 = 857760878,
+	CHACHA_CONSTANT_2_BY = 2036477234,
+	CHACHA_CONSTANT_TE_K = 1797285236,
+};
+
+struct chacha_ctx {
+	u32 key[8];
+	int nrounds;
+};
+
+struct poly1305_key {
+	union {
+		u32 r[5];
+		u64 r64[3];
+	};
+};
+
+struct poly1305_core_key {
+	struct poly1305_key key;
+	struct poly1305_key precomputed_s;
+};
+
+struct poly1305_state {
+	union {
+		u32 h[5];
+		u64 h64[3];
+	};
+};
+
+struct poly1305_desc_ctx {
+	u8 buf[16];
+	unsigned int buflen;
+	unsigned short rset;
+	bool sset;
+	u32 s[4];
+	struct poly1305_state h;
+	union {
+		struct poly1305_key opaque_r[9];
+		struct poly1305_core_key core_r;
+	};
+};
+
+struct fdtable {
+	unsigned int max_fds;
+	struct file __attribute__((btf_type_tag("rcu"))) **fd;
+	unsigned long *close_on_exec;
+	unsigned long *open_fds;
+	unsigned long *full_fds_bits;
+	struct callback_head rcu;
+};
+
+struct files_struct {
+	atomic_t count;
+	bool resize_in_progress;
+	wait_queue_head_t resize_wait;
+	struct fdtable __attribute__((btf_type_tag("rcu"))) *fdt;
+	struct fdtable fdtab;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t file_lock;
+	unsigned int next_fd;
+	unsigned long close_on_exec_init[1];
+	unsigned long open_fds_init[1];
+	unsigned long full_fds_bits_init[1];
+	struct file __attribute__((btf_type_tag("rcu"))) *fd_array[64];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_uring_sqe;
+
+struct io_uring_cmd {
+	struct file *file;
+	const struct io_uring_sqe *sqe;
+	union {
+		void (*task_work_cb)(struct io_uring_cmd *, unsigned int);
+		void *cookie;
+	};
+	u32 cmd_op;
+	u32 flags;
+	u8 pdu[32];
+};
+
+typedef int __kernel_rwf_t;
+
+struct io_uring_sqe {
+	__u8 opcode;
+	__u8 flags;
+	__u16 ioprio;
+	__s32 fd;
+	union {
+		__u64 off;
+		__u64 addr2;
+		struct {
+			__u32 cmd_op;
+			__u32 __pad1;
+		};
+	};
+	union {
+		__u64 addr;
+		__u64 splice_off_in;
+	};
+	__u32 len;
+	union {
+		__kernel_rwf_t rw_flags;
+		__u32 fsync_flags;
+		__u16 poll_events;
+		__u32 poll32_events;
+		__u32 sync_range_flags;
+		__u32 msg_flags;
+		__u32 timeout_flags;
+		__u32 accept_flags;
+		__u32 cancel_flags;
+		__u32 open_flags;
+		__u32 statx_flags;
+		__u32 fadvise_advice;
+		__u32 splice_flags;
+		__u32 rename_flags;
+		__u32 unlink_flags;
+		__u32 hardlink_flags;
+		__u32 xattr_flags;
+		__u32 msg_ring_flags;
+		__u32 uring_cmd_flags;
+	};
+	__u64 user_data;
+	union {
+		__u16 buf_index;
+		__u16 buf_group;
+	};
+	__u16 personality;
+	union {
+		__s32 splice_fd_in;
+		__u32 file_index;
+		struct {
+			__u16 addr_len;
+			__u16 __pad3[1];
+		};
+	};
+	union {
+		struct {
+			__u64 addr3;
+			__u64 __pad2[1];
+		};
+		__u8 cmd[0];
+	};
+};
+
+typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, unsigned long);
+
+typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
+
+enum {
+	MM_FILEPAGES = 0,
+	MM_ANONPAGES = 1,
+	MM_SWAPENTS = 2,
+	MM_SHMEMPAGES = 3,
+	NR_MM_COUNTERS = 4,
+};
+
+enum ucount_type {
+	UCOUNT_USER_NAMESPACES = 0,
+	UCOUNT_PID_NAMESPACES = 1,
+	UCOUNT_UTS_NAMESPACES = 2,
+	UCOUNT_IPC_NAMESPACES = 3,
+	UCOUNT_NET_NAMESPACES = 4,
+	UCOUNT_MNT_NAMESPACES = 5,
+	UCOUNT_CGROUP_NAMESPACES = 6,
+	UCOUNT_TIME_NAMESPACES = 7,
+	UCOUNT_INOTIFY_INSTANCES = 8,
+	UCOUNT_INOTIFY_WATCHES = 9,
+	UCOUNT_COUNTS = 10,
+};
+
+enum rlimit_type {
+	UCOUNT_RLIMIT_NPROC = 0,
+	UCOUNT_RLIMIT_MSGQUEUE = 1,
+	UCOUNT_RLIMIT_SIGPENDING = 2,
+	UCOUNT_RLIMIT_MEMLOCK = 3,
+	UCOUNT_RLIMIT_COUNTS = 4,
+};
+
+enum {
+	TASK_COMM_LEN = 16,
+};
+
+enum proc_hidepid {
+	HIDEPID_OFF = 0,
+	HIDEPID_NO_ACCESS = 1,
+	HIDEPID_INVISIBLE = 2,
+	HIDEPID_NOT_PTRACEABLE = 4,
+};
+
+enum proc_pidonly {
+	PROC_PIDONLY_OFF = 0,
+	PROC_PIDONLY_ON = 1,
+};
+
+enum {
+	FUTEX_STATE_OK = 0,
+	FUTEX_STATE_EXITING = 1,
+	FUTEX_STATE_DEAD = 2,
+};
+
+enum tk_offsets {
+	TK_OFFS_REAL = 0,
+	TK_OFFS_BOOT = 1,
+	TK_OFFS_TAI = 2,
+	TK_OFFS_MAX = 3,
+};
+
+struct trace_event_raw_task_newtask {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	unsigned long clone_flags;
+	short oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_task_rename {
+	struct trace_entry ent;
+	pid_t pid;
+	char oldcomm[16];
+	char newcomm[16];
+	short oom_score_adj;
+	char __data[0];
+};
+
+struct vm_stack {
+	struct callback_head rcu;
+	struct vm_struct *stack_vm_area;
+};
+
+struct clone_args {
+	__u64 flags;
+	__u64 pidfd;
+	__u64 child_tid;
+	__u64 parent_tid;
+	__u64 exit_signal;
+	__u64 stack;
+	__u64 stack_size;
+	__u64 tls;
+	__u64 set_tid;
+	__u64 set_tid_size;
+	__u64 cgroup;
+};
+
+struct proc_fs_info {
+	struct pid_namespace *pid_ns;
+	struct dentry *proc_self;
+	struct dentry *proc_thread_self;
+	kgid_t pid_gid;
+	enum proc_hidepid hide_pid;
+	enum proc_pidonly pidonly;
+	struct callback_head rcu;
+};
+
+struct trace_event_data_offsets_task_newtask {};
+
+struct trace_event_data_offsets_task_rename {};
+
+struct multiprocess_signals {
+	sigset_t signal;
+	struct hlist_node node;
+};
+
+typedef int (*proc_visitor)(struct task_struct *, void *);
+
+struct taint_flag {
+	char c_true;
+	char c_false;
+	bool module;
+};
+
+enum kmsg_dump_reason {
+	KMSG_DUMP_UNDEF = 0,
+	KMSG_DUMP_PANIC = 1,
+	KMSG_DUMP_OOPS = 2,
+	KMSG_DUMP_EMERG = 3,
+	KMSG_DUMP_SHUTDOWN = 4,
+	KMSG_DUMP_MAX = 5,
+};
+
+enum con_flush_mode {
+	CONSOLE_FLUSH_PENDING = 0,
+	CONSOLE_REPLAY_ALL = 1,
+};
+
+enum error_detector {
+	ERROR_DETECTOR_KFENCE = 0,
+	ERROR_DETECTOR_KASAN = 1,
+	ERROR_DETECTOR_WARN = 2,
+};
+
+enum ftrace_dump_mode {
+	DUMP_NONE = 0,
+	DUMP_ALL = 1,
+	DUMP_ORIG = 2,
+};
+
+enum ctx_state {
+	CONTEXT_DISABLED = -1,
+	CONTEXT_KERNEL = 0,
+	CONTEXT_IDLE = 1,
+	CONTEXT_USER = 2,
+	CONTEXT_GUEST = 3,
+	CONTEXT_MAX = 4,
+};
+
+struct warn_args {
+	const char *fmt;
+	va_list args;
+};
+
+typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));
+
+typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);
+
+typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);
+
+struct smp_hotplug_thread {
+	struct task_struct * __attribute__((btf_type_tag("percpu"))) *store;
+	struct list_head list;
+	int (*thread_should_run)(unsigned int);
+	void (*thread_fn)(unsigned int);
+	void (*create)(unsigned int);
+	void (*setup)(unsigned int);
+	void (*cleanup)(unsigned int, bool);
+	void (*park)(unsigned int);
+	void (*unpark)(unsigned int);
+	bool selfparking;
+	const char *thread_comm;
+};
+
+struct cpuhp_cpu_state {
+	enum cpuhp_state state;
+	enum cpuhp_state target;
+	enum cpuhp_state fail;
+	struct task_struct *thread;
+	bool should_run;
+	bool rollback;
+	bool single;
+	bool bringup;
+	struct hlist_node *node;
+	struct hlist_node *last;
+	enum cpuhp_state cb_state;
+	int result;
+	atomic_t ap_sync_state;
+	struct completion done_up;
+	struct completion done_down;
+};
+
+struct cpuhp_step {
+	const char *name;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} startup;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} teardown;
+	struct hlist_head list;
+	bool cant_stop;
+	bool multi_instance;
+};
+
+enum cpu_mitigations {
+	CPU_MITIGATIONS_OFF = 0,
+	CPU_MITIGATIONS_AUTO = 1,
+	CPU_MITIGATIONS_AUTO_NOSMT = 2,
+};
+
+enum cpuhp_sync_state {
+	SYNC_STATE_DEAD = 0,
+	SYNC_STATE_KICKED = 1,
+	SYNC_STATE_SHOULD_DIE = 2,
+	SYNC_STATE_ALIVE = 3,
+	SYNC_STATE_SHOULD_ONLINE = 4,
+	SYNC_STATE_ONLINE = 5,
+};
+
+enum hk_type {
+	HK_TYPE_TIMER = 0,
+	HK_TYPE_RCU = 1,
+	HK_TYPE_MISC = 2,
+	HK_TYPE_SCHED = 3,
+	HK_TYPE_TICK = 4,
+	HK_TYPE_DOMAIN = 5,
+	HK_TYPE_WQ = 6,
+	HK_TYPE_MANAGED_IRQ = 7,
+	HK_TYPE_KTHREAD = 8,
+	HK_TYPE_MAX = 9,
+};
+
+enum cc_attr {
+	CC_ATTR_MEM_ENCRYPT = 0,
+	CC_ATTR_HOST_MEM_ENCRYPT = 1,
+	CC_ATTR_GUEST_MEM_ENCRYPT = 2,
+	CC_ATTR_GUEST_STATE_ENCRYPT = 3,
+	CC_ATTR_GUEST_UNROLL_STRING_IO = 4,
+	CC_ATTR_GUEST_SEV_SNP = 5,
+	CC_ATTR_HOTPLUG_DISABLED = 6,
+};
+
+enum cpuhp_smt_control {
+	CPU_SMT_ENABLED = 0,
+	CPU_SMT_DISABLED = 1,
+	CPU_SMT_FORCE_DISABLED = 2,
+	CPU_SMT_NOT_SUPPORTED = 3,
+	CPU_SMT_NOT_IMPLEMENTED = 4,
+};
+
+struct trace_event_raw_cpuhp_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
+};
+
+struct trace_event_raw_cpuhp_multi_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
+};
+
+struct trace_event_raw_cpuhp_exit {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int state;
+	int idx;
+	int ret;
+	char __data[0];
+};
+
+struct cpu_down_work {
+	unsigned int cpu;
+	enum cpuhp_state target;
+};
+
+struct trace_event_data_offsets_cpuhp_enter {};
+
+struct trace_event_data_offsets_cpuhp_multi_enter {};
+
+struct trace_event_data_offsets_cpuhp_exit {};
+
+struct pipe_buffer;
+
+struct pipe_inode_info {
+	struct mutex mutex;
+	wait_queue_head_t rd_wait;
+	wait_queue_head_t wr_wait;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int max_usage;
+	unsigned int ring_size;
+	unsigned int nr_accounted;
+	unsigned int readers;
+	unsigned int writers;
+	unsigned int files;
+	unsigned int r_counter;
+	unsigned int w_counter;
+	bool poll_usage;
+	struct page *tmp_page;
+	struct fasync_struct *fasync_readers;
+	struct fasync_struct *fasync_writers;
+	struct pipe_buffer *bufs;
+	struct user_struct *user;
+};
+
+struct pipe_buf_operations;
+
+struct pipe_buffer {
+	struct page *page;
+	unsigned int offset;
+	unsigned int len;
+	const struct pipe_buf_operations *ops;
+	unsigned int flags;
+	unsigned long private;
+};
+
+struct pipe_buf_operations {
+	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
+	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
+};
+
+struct __kernel_old_timeval {
+	__kernel_long_t tv_sec;
+	__kernel_long_t tv_usec;
+};
+
+struct rusage {
+	struct __kernel_old_timeval ru_utime;
+	struct __kernel_old_timeval ru_stime;
+	__kernel_long_t ru_maxrss;
+	__kernel_long_t ru_ixrss;
+	__kernel_long_t ru_idrss;
+	__kernel_long_t ru_isrss;
+	__kernel_long_t ru_minflt;
+	__kernel_long_t ru_majflt;
+	__kernel_long_t ru_nswap;
+	__kernel_long_t ru_inblock;
+	__kernel_long_t ru_oublock;
+	__kernel_long_t ru_msgsnd;
+	__kernel_long_t ru_msgrcv;
+	__kernel_long_t ru_nsignals;
+	__kernel_long_t ru_nvcsw;
+	__kernel_long_t ru_nivcsw;
+};
+
+struct waitid_info;
+
+struct wait_opts {
+	enum pid_type wo_type;
+	int wo_flags;
+	struct pid *wo_pid;
+	struct waitid_info *wo_info;
+	int wo_stat;
+	struct rusage *wo_rusage;
+	wait_queue_entry_t child_wait;
+	int notask_error;
+};
+
+struct waitid_info {
+	pid_t pid;
+	uid_t uid;
+	int status;
+	int cause;
+};
+
+typedef u32 compat_uint_t;
+
+struct old_timeval32 {
+	old_time32_t tv_sec;
+	s32 tv_usec;
+};
+
+struct compat_rusage {
+	struct old_timeval32 ru_utime;
+	struct old_timeval32 ru_stime;
+	compat_long_t ru_maxrss;
+	compat_long_t ru_ixrss;
+	compat_long_t ru_idrss;
+	compat_long_t ru_isrss;
+	compat_long_t ru_minflt;
+	compat_long_t ru_majflt;
+	compat_long_t ru_nswap;
+	compat_long_t ru_inblock;
+	compat_long_t ru_oublock;
+	compat_long_t ru_msgsnd;
+	compat_long_t ru_msgrcv;
+	compat_long_t ru_nsignals;
+	compat_long_t ru_nvcsw;
+	compat_long_t ru_nivcsw;
+};
+
+typedef void (*btf_trace_irq_handler_entry)(void *, int, struct irqaction *);
+
+typedef void (*btf_trace_irq_handler_exit)(void *, int, struct irqaction *, int);
+
+typedef void (*btf_trace_softirq_entry)(void *, unsigned int);
+
+typedef void (*btf_trace_softirq_exit)(void *, unsigned int);
+
+typedef void (*btf_trace_softirq_raise)(void *, unsigned int);
+
+struct tasklet_struct;
+
+typedef void (*btf_trace_tasklet_entry)(void *, struct tasklet_struct *, void *);
+
+struct tasklet_struct {
+	struct tasklet_struct *next;
+	unsigned long state;
+	atomic_t count;
+	bool use_callback;
+	union {
+		void (*func)(unsigned long);
+		void (*callback)(struct tasklet_struct *);
+	};
+	unsigned long data;
+};
+
+typedef void (*btf_trace_tasklet_exit)(void *, struct tasklet_struct *, void *);
+
+typedef struct {
+	unsigned int __softirq_pending;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+} irq_cpustat_t;
+
+struct softirq_action {
+	void (*action)(struct softirq_action *);
+};
+
+struct tasklet_head {
+	struct tasklet_struct *head;
+	struct tasklet_struct **tail;
+};
+
+enum {
+	HI_SOFTIRQ = 0,
+	TIMER_SOFTIRQ = 1,
+	NET_TX_SOFTIRQ = 2,
+	NET_RX_SOFTIRQ = 3,
+	BLOCK_SOFTIRQ = 4,
+	IRQ_POLL_SOFTIRQ = 5,
+	TASKLET_SOFTIRQ = 6,
+	SCHED_SOFTIRQ = 7,
+	HRTIMER_SOFTIRQ = 8,
+	RCU_SOFTIRQ = 9,
+	NR_SOFTIRQS = 10,
+};
+
+enum {
+	TASKLET_STATE_SCHED = 0,
+	TASKLET_STATE_RUN = 1,
+};
+
+struct trace_event_raw_irq_handler_entry {
+	struct trace_entry ent;
+	int irq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_irq_handler_exit {
+	struct trace_entry ent;
+	int irq;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_softirq {
+	struct trace_entry ent;
+	unsigned int vec;
+	char __data[0];
+};
+
+struct trace_event_raw_tasklet {
+	struct trace_entry ent;
+	void *tasklet;
+	void *func;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_irq_handler_entry {
+	u32 name;
+};
+
+struct wait_bit_key {
+	void *flags;
+	int bit_nr;
+	unsigned long timeout;
+};
+
+struct wait_bit_queue_entry {
+	struct wait_bit_key key;
+	struct wait_queue_entry wq_entry;
+};
+
+struct trace_event_data_offsets_irq_handler_exit {};
+
+struct trace_event_data_offsets_softirq {};
+
+struct trace_event_data_offsets_tasklet {};
+
+enum {
+	IORES_DESC_NONE = 0,
+	IORES_DESC_CRASH_KERNEL = 1,
+	IORES_DESC_ACPI_TABLES = 2,
+	IORES_DESC_ACPI_NV_STORAGE = 3,
+	IORES_DESC_PERSISTENT_MEMORY = 4,
+	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
+	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
+	IORES_DESC_RESERVED = 7,
+	IORES_DESC_SOFT_RESERVED = 8,
+	IORES_DESC_CXL = 9,
+};
+
+enum {
+	MAX_IORES_LEVEL = 5,
+};
+
+enum {
+	REGION_INTERSECTS = 0,
+	REGION_DISJOINT = 1,
+	REGION_MIXED = 2,
+};
+
+struct resource_entry {
+	struct list_head node;
+	struct resource *res;
+	resource_size_t offset;
+	struct resource __res;
+};
+
+struct resource_constraint {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
+	void *alignf_data;
+};
+
+typedef void (*dr_release_t)(struct device *, void *);
+
+typedef int (*dr_match_t)(struct device *, void *, void *);
+
+struct pseudo_fs_context {
+	const struct super_operations *ops;
+	const struct xattr_handler **xattr;
+	const struct dentry_operations *dops;
+	unsigned long magic;
+};
+
+struct region_devres {
+	struct resource *parent;
+	resource_size_t start;
+	resource_size_t n;
+};
+
+enum sysctl_writes_mode {
+	SYSCTL_WRITES_LEGACY = -1,
+	SYSCTL_WRITES_WARN = 0,
+	SYSCTL_WRITES_STRICT = 1,
+};
+
+typedef __kernel_clock_t clock_t;
+
+struct do_proc_dointvec_minmax_conv_param {
+	int *min;
+	int *max;
+};
+
+struct do_proc_douintvec_minmax_conv_param {
+	unsigned int *min;
+	unsigned int *max;
+};
+
+struct __user_cap_header_struct;
+
+typedef struct __user_cap_header_struct *cap_user_header_t;
+
+struct __user_cap_header_struct {
+	__u32 version;
+	int pid;
+};
+
+struct __user_cap_data_struct;
+
+typedef struct __user_cap_data_struct __attribute__((btf_type_tag("user"))) *cap_user_data_t;
+
+struct __user_cap_data_struct {
+	__u32 effective;
+	__u32 permitted;
+	__u32 inheritable;
+};
+
+struct compat_iovec {
+	compat_uptr_t iov_base;
+	compat_size_t iov_len;
+};
+
+struct sigqueue {
+	struct list_head list;
+	int flags;
+	kernel_siginfo_t info;
+	struct ucounts *ucounts;
+};
+
+struct ptrace_peeksiginfo_args {
+	__u64 off;
+	__u32 flags;
+	__s32 nr;
+};
+
+typedef struct compat_siginfo compat_siginfo_t;
+
+struct ptrace_syscall_info {
+	__u8 op;
+	__u8 pad[3];
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 stack_pointer;
+	union {
+		struct {
+			__u64 nr;
+			__u64 args[6];
+		} entry;
+		struct {
+			__s64 rval;
+			__u8 is_error;
+		} exit;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u32 ret_data;
+		} seccomp;
+	};
+};
+
+typedef int wait_bit_action_f(struct wait_bit_key *, int);
+
+typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
+
+enum sig_handler {
+	HANDLER_CURRENT = 0,
+	HANDLER_SIG_DFL = 1,
+	HANDLER_EXIT = 2,
+};
+
+enum {
+	TRACE_SIGNAL_DELIVERED = 0,
+	TRACE_SIGNAL_IGNORED = 1,
+	TRACE_SIGNAL_ALREADY_PENDING = 2,
+	TRACE_SIGNAL_OVERFLOW_FAIL = 3,
+	TRACE_SIGNAL_LOSE_INFO = 4,
+};
+
+struct trace_event_raw_signal_generate {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	char comm[16];
+	pid_t pid;
+	int group;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_signal_deliver {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	unsigned long sa_handler;
+	unsigned long sa_flags;
+	char __data[0];
+};
+
+typedef unsigned long old_sigset_t;
+
+typedef u32 compat_old_sigset_t;
+
+struct compat_sigaction {
+	compat_uptr_t sa_handler;
+	compat_ulong_t sa_flags;
+	compat_uptr_t sa_restorer;
+	compat_sigset_t sa_mask;
+};
+
+struct compat_old_sigaction {
+	compat_uptr_t sa_handler;
+	compat_old_sigset_t sa_mask;
+	compat_ulong_t sa_flags;
+	compat_uptr_t sa_restorer;
+};
+
+struct trace_event_data_offsets_signal_generate {};
+
+struct trace_event_data_offsets_signal_deliver {};
+
+enum uts_proc {
+	UTS_PROC_ARCH = 0,
+	UTS_PROC_OSTYPE = 1,
+	UTS_PROC_OSRELEASE = 2,
+	UTS_PROC_VERSION = 3,
+	UTS_PROC_HOSTNAME = 4,
+	UTS_PROC_DOMAINNAME = 5,
+};
+
+struct tms {
+	__kernel_clock_t tms_utime;
+	__kernel_clock_t tms_stime;
+	__kernel_clock_t tms_cutime;
+	__kernel_clock_t tms_cstime;
+};
+
+struct compat_tms {
+	compat_clock_t tms_utime;
+	compat_clock_t tms_stime;
+	compat_clock_t tms_cutime;
+	compat_clock_t tms_cstime;
+};
+
+struct compat_rlimit {
+	compat_ulong_t rlim_cur;
+	compat_ulong_t rlim_max;
+};
+
+struct rlimit64 {
+	__u64 rlim_cur;
+	__u64 rlim_max;
+};
+
+struct getcpu_cache {
+	unsigned long blob[16];
+};
+
+struct sysinfo {
+	__kernel_long_t uptime;
+	__kernel_ulong_t loads[3];
+	__kernel_ulong_t totalram;
+	__kernel_ulong_t freeram;
+	__kernel_ulong_t sharedram;
+	__kernel_ulong_t bufferram;
+	__kernel_ulong_t totalswap;
+	__kernel_ulong_t freeswap;
+	__u16 procs;
+	__u16 pad;
+	__kernel_ulong_t totalhigh;
+	__kernel_ulong_t freehigh;
+	__u32 mem_unit;
+	char _f[0];
+};
+
+struct compat_sysinfo {
+	s32 uptime;
+	u32 loads[3];
+	u32 totalram;
+	u32 freeram;
+	u32 sharedram;
+	u32 bufferram;
+	u32 totalswap;
+	u32 freeswap;
+	u16 procs;
+	u16 pad;
+	u32 totalhigh;
+	u32 freehigh;
+	u32 mem_unit;
+	char _f[8];
+};
+
+struct prctl_mm_map {
+	__u64 start_code;
+	__u64 end_code;
+	__u64 start_data;
+	__u64 end_data;
+	__u64 start_brk;
+	__u64 brk;
+	__u64 start_stack;
+	__u64 arg_start;
+	__u64 arg_end;
+	__u64 env_start;
+	__u64 env_end;
+	__u64 *auxv;
+	__u32 auxv_size;
+	__u32 exe_fd;
+};
+
+struct wq_flusher;
+
+struct worker;
+
+struct workqueue_attrs;
+
+struct pool_workqueue;
+
+struct wq_device;
+
+struct workqueue_struct {
+	struct list_head pwqs;
+	struct list_head list;
+	struct mutex mutex;
+	int work_color;
+	int flush_color;
+	atomic_t nr_pwqs_to_flush;
+	struct wq_flusher *first_flusher;
+	struct list_head flusher_queue;
+	struct list_head flusher_overflow;
+	struct list_head maydays;
+	struct worker *rescuer;
+	int nr_drainers;
+	int saved_max_active;
+	struct workqueue_attrs *unbound_attrs;
+	struct pool_workqueue *dfl_pwq;
+	struct wq_device *wq_dev;
+	char name[24];
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int flags;
+	struct pool_workqueue __attribute__((btf_type_tag("percpu"))) __attribute__((btf_type_tag("rcu"))) **cpu_pwq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct wq_flusher {
+	struct list_head list;
+	int flush_color;
+	struct completion done;
+};
+
+struct worker_pool;
+
+struct worker {
+	union {
+		struct list_head entry;
+		struct hlist_node hentry;
+	};
+	struct work_struct *current_work;
+	work_func_t current_func;
+	struct pool_workqueue *current_pwq;
+	u64 current_at;
+	unsigned int current_color;
+	int sleeping;
+	work_func_t last_func;
+	struct list_head scheduled;
+	struct task_struct *task;
+	struct worker_pool *pool;
+	struct list_head node;
+	unsigned long last_active;
+	unsigned int flags;
+	int id;
+	char desc[24];
+	struct workqueue_struct *rescue_wq;
+};
+
+struct kthread_work;
+
+typedef void (*kthread_work_func_t)(struct kthread_work *);
+
+struct kthread_worker;
+
+struct kthread_work {
+	struct list_head node;
+	kthread_work_func_t func;
+	struct kthread_worker *worker;
+	int canceling;
+};
+
+struct pool_workqueue {
+	struct worker_pool *pool;
+	struct workqueue_struct *wq;
+	int work_color;
+	int flush_color;
+	int refcnt;
+	int nr_in_flight[16];
+	int nr_active;
+	int max_active;
+	struct list_head inactive_works;
+	struct list_head pwqs_node;
+	struct list_head mayday_node;
+	u64 stats[8];
+	struct kthread_work release_work;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ida {
+	struct xarray xa;
+};
+
+struct worker_pool {
+	raw_spinlock_t lock;
+	int cpu;
+	int node;
+	int id;
+	unsigned int flags;
+	unsigned long watchdog_ts;
+	bool cpu_stall;
+	int nr_running;
+	struct list_head worklist;
+	int nr_workers;
+	int nr_idle;
+	struct list_head idle_list;
+	struct timer_list idle_timer;
+	struct work_struct idle_cull_work;
+	struct timer_list mayday_timer;
+	struct hlist_head busy_hash[64];
+	struct worker *manager;
+	struct list_head workers;
+	struct list_head dying_workers;
+	struct completion *detach_completion;
+	struct ida worker_ida;
+	struct workqueue_attrs *attrs;
+	struct hlist_node hash_node;
+	int refcnt;
+	struct callback_head rcu;
+};
+
+enum wq_affn_scope {
+	WQ_AFFN_DFL = 0,
+	WQ_AFFN_CPU = 1,
+	WQ_AFFN_SMT = 2,
+	WQ_AFFN_CACHE = 3,
+	WQ_AFFN_NUMA = 4,
+	WQ_AFFN_SYSTEM = 5,
+	WQ_AFFN_NR_TYPES = 6,
+};
+
+struct workqueue_attrs {
+	int nice;
+	cpumask_var_t cpumask;
+	cpumask_var_t __pod_cpumask;
+	bool affn_strict;
+	enum wq_affn_scope affn_scope;
+	bool ordered;
+};
+
+struct kthread_worker {
+	unsigned int flags;
+	raw_spinlock_t lock;
+	struct list_head work_list;
+	struct list_head delayed_work_list;
+	struct task_struct *task;
+	struct kthread_work *current_work;
+};
+
+struct wq_device {
+	struct workqueue_struct *wq;
+	struct device dev;
+};
+
+typedef void (*btf_trace_workqueue_queue_work)(void *, int, struct pool_workqueue *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t);
+
+struct wq_pod_type {
+	int nr_pods;
+	cpumask_var_t *pod_cpus;
+	int *pod_node;
+	int *cpu_pod;
+};
+
+enum {
+	POOL_MANAGER_ACTIVE = 1,
+	POOL_DISASSOCIATED = 4,
+	WORKER_DIE = 2,
+	WORKER_IDLE = 4,
+	WORKER_PREP = 8,
+	WORKER_CPU_INTENSIVE = 64,
+	WORKER_UNBOUND = 128,
+	WORKER_REBOUND = 256,
+	WORKER_NOT_RUNNING = 456,
+	NR_STD_WORKER_POOLS = 2,
+	UNBOUND_POOL_HASH_ORDER = 6,
+	BUSY_WORKER_HASH_ORDER = 6,
+	MAX_IDLE_WORKERS_RATIO = 4,
+	IDLE_WORKER_TIMEOUT = 75000,
+	MAYDAY_INITIAL_TIMEOUT = 2,
+	MAYDAY_INTERVAL = 25,
+	CREATE_COOLDOWN = 250,
+	RESCUER_NICE_LEVEL = -20,
+	HIGHPRI_NICE_LEVEL = -20,
+	WQ_NAME_LEN = 24,
+};
+
+enum pool_workqueue_stats {
+	PWQ_STAT_STARTED = 0,
+	PWQ_STAT_COMPLETED = 1,
+	PWQ_STAT_CPU_TIME = 2,
+	PWQ_STAT_CPU_INTENSIVE = 3,
+	PWQ_STAT_CM_WAKEUP = 4,
+	PWQ_STAT_REPATRIATED = 5,
+	PWQ_STAT_MAYDAY = 6,
+	PWQ_STAT_RESCUED = 7,
+	PWQ_NR_STATS = 8,
+};
+
+enum {
+	WQ_UNBOUND = 2,
+	WQ_FREEZABLE = 4,
+	WQ_MEM_RECLAIM = 8,
+	WQ_HIGHPRI = 16,
+	WQ_CPU_INTENSIVE = 32,
+	WQ_SYSFS = 64,
+	WQ_POWER_EFFICIENT = 128,
+	__WQ_DESTROYING = 32768,
+	__WQ_DRAINING = 65536,
+	__WQ_ORDERED = 131072,
+	__WQ_LEGACY = 262144,
+	__WQ_ORDERED_EXPLICIT = 524288,
+	WQ_MAX_ACTIVE = 512,
+	WQ_UNBOUND_MAX_ACTIVE = 512,
+	WQ_DFL_ACTIVE = 256,
+};
+
+enum xa_lock_type {
+	XA_LOCK_IRQ = 1,
+	XA_LOCK_BH = 2,
+};
+
+struct trace_event_raw_workqueue_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	u32 __data_loc_workqueue;
+	int req_cpu;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_activate_work {
+	struct trace_entry ent;
+	void *work;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct wq_barrier {
+	struct work_struct work;
+	struct completion done;
+	struct task_struct *task;
+};
+
+struct cwt_wait {
+	wait_queue_entry_t wait;
+	struct work_struct *work;
+};
+
+struct __una_u32 {
+	u32 x;
+};
+
+struct work_for_cpu {
+	struct work_struct work;
+	long (*fn)(void *);
+	void *arg;
+	long ret;
+};
+
+struct apply_wqattrs_ctx {
+	struct workqueue_struct *wq;
+	struct workqueue_attrs *attrs;
+	struct list_head list;
+	struct pool_workqueue *dfl_pwq;
+	struct pool_workqueue *pwq_tbl[0];
+};
+
+struct trace_event_data_offsets_workqueue_queue_work {
+	u32 workqueue;
+};
+
+struct pr_cont_work_struct {
+	bool comma;
+	work_func_t func;
+	long ctr;
+};
+
+struct trace_event_data_offsets_workqueue_activate_work {};
+
+struct trace_event_data_offsets_workqueue_execute_start {};
+
+struct trace_event_data_offsets_workqueue_execute_end {};
+
+struct execute_work {
+	struct work_struct work;
+};
+
+typedef struct {} local_lock_t;
+
+enum task_work_notify_mode {
+	TWA_NONE = 0,
+	TWA_RESUME = 1,
+	TWA_SIGNAL = 2,
+	TWA_SIGNAL_NO_IPI = 3,
+};
+
+typedef void (*task_work_func_t)(struct callback_head *);
+
+struct param_attribute {
+	struct module_attribute mattr;
+	const struct kernel_param *param;
+};
+
+struct module_param_attrs {
+	unsigned int num;
+	struct attribute_group grp;
+	struct param_attribute attrs[0];
+};
+
+enum {
+	KERNEL_PARAM_OPS_FL_NOARG = 1,
+};
+
+enum {
+	KERNEL_PARAM_FL_UNSAFE = 1,
+	KERNEL_PARAM_FL_HWPARAM = 2,
+};
+
+enum lockdown_reason {
+	LOCKDOWN_NONE = 0,
+	LOCKDOWN_MODULE_SIGNATURE = 1,
+	LOCKDOWN_DEV_MEM = 2,
+	LOCKDOWN_EFI_TEST = 3,
+	LOCKDOWN_KEXEC = 4,
+	LOCKDOWN_HIBERNATION = 5,
+	LOCKDOWN_PCI_ACCESS = 6,
+	LOCKDOWN_IOPORT = 7,
+	LOCKDOWN_MSR = 8,
+	LOCKDOWN_ACPI_TABLES = 9,
+	LOCKDOWN_DEVICE_TREE = 10,
+	LOCKDOWN_PCMCIA_CIS = 11,
+	LOCKDOWN_TIOCSSERIAL = 12,
+	LOCKDOWN_MODULE_PARAMETERS = 13,
+	LOCKDOWN_MMIOTRACE = 14,
+	LOCKDOWN_DEBUGFS = 15,
+	LOCKDOWN_XMON_WR = 16,
+	LOCKDOWN_BPF_WRITE_USER = 17,
+	LOCKDOWN_DBG_WRITE_KERNEL = 18,
+	LOCKDOWN_RTAS_ERROR_INJECTION = 19,
+	LOCKDOWN_INTEGRITY_MAX = 20,
+	LOCKDOWN_KCORE = 21,
+	LOCKDOWN_KPROBES = 22,
+	LOCKDOWN_BPF_READ_KERNEL = 23,
+	LOCKDOWN_DBG_READ_KERNEL = 24,
+	LOCKDOWN_PERF = 25,
+	LOCKDOWN_TRACEFS = 26,
+	LOCKDOWN_XMON_RW = 27,
+	LOCKDOWN_XFRM_SECRET = 28,
+	LOCKDOWN_CONFIDENTIALITY_MAX = 29,
+};
+
+struct module_version_attribute {
+	struct module_attribute mattr;
+	const char *module_name;
+	const char *version;
+};
+
+struct kmalloced_param {
+	struct list_head list;
+	char val[0];
+};
+
+struct sched_param {
+	int sched_priority;
+};
+
+enum KTHREAD_BITS {
+	KTHREAD_IS_PER_CPU = 0,
+	KTHREAD_SHOULD_STOP = 1,
+	KTHREAD_SHOULD_PARK = 2,
+};
+
+enum {
+	KTW_FREEZABLE = 1,
+};
+
+enum {
+	CSS_NO_REF = 1,
+	CSS_ONLINE = 2,
+	CSS_RELEASED = 4,
+	CSS_VISIBLE = 8,
+	CSS_DYING = 16,
+};
+
+enum {
+	__PERCPU_REF_ATOMIC = 1,
+	__PERCPU_REF_DEAD = 2,
+	__PERCPU_REF_ATOMIC_DEAD = 3,
+	__PERCPU_REF_FLAG_BITS = 2,
+};
+
+struct kthread_create_info {
+	char *full_name;
+	int (*threadfn)(void *);
+	void *data;
+	int node;
+	struct task_struct *result;
+	struct completion *done;
+	struct list_head list;
+};
+
+struct kthread_delayed_work {
+	struct kthread_work work;
+	struct timer_list timer;
+};
+
+struct kthread_flush_work {
+	struct kthread_work work;
+	struct completion done;
+};
+
+struct kthread {
+	unsigned long flags;
+	unsigned int cpu;
+	int result;
+	int (*threadfn)(void *);
+	void *data;
+	struct completion parked;
+	struct completion exited;
+	struct cgroup_subsys_state *blkcg_css;
+	char *full_name;
+};
+
+struct ipc_ids {
+	int in_use;
+	unsigned short seq;
+	struct rw_semaphore rwsem;
+	struct idr ipcs_idr;
+	int max_idx;
+	int last_idx;
+	struct rhashtable key_ht;
+};
+
+struct ipc_namespace {
+	struct ipc_ids ids[3];
+	int sem_ctls[4];
+	int used_sems;
+	unsigned int msg_ctlmax;
+	unsigned int msg_ctlmnb;
+	unsigned int msg_ctlmni;
+	struct percpu_counter percpu_msg_bytes;
+	struct percpu_counter percpu_msg_hdrs;
+	size_t shm_ctlmax;
+	size_t shm_ctlall;
+	unsigned long shm_tot;
+	int shm_ctlmni;
+	int shm_rmid_forced;
+	struct notifier_block ipcns_nb;
+	struct vfsmount *mq_mnt;
+	unsigned int mq_queues_count;
+	unsigned int mq_queues_max;
+	unsigned int mq_msg_max;
+	unsigned int mq_msgsize_max;
+	unsigned int mq_msg_default;
+	unsigned int mq_msgsize_default;
+	struct ctl_table_set mq_set;
+	struct ctl_table_header *mq_sysctls;
+	struct ctl_table_set ipc_set;
+	struct ctl_table_header *ipc_sysctls;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct llist_node mnt_llist;
+	struct ns_common ns;
+};
+
+typedef void (*btf_trace_notifier_register)(void *, void *);
+
+typedef void (*btf_trace_notifier_unregister)(void *, void *);
+
+typedef void (*btf_trace_notifier_run)(void *, void *);
+
+struct trace_event_raw_notifier_info {
+	struct trace_entry ent;
+	void *cb;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_notifier_info {};
+
+struct srcu_notifier_head {
+	struct mutex mutex;
+	struct srcu_usage srcuu;
+	struct srcu_struct srcu;
+	struct notifier_block __attribute__((btf_type_tag("rcu"))) *head;
+};
+
+struct die_args {
+	struct pt_regs *regs;
+	const char *str;
+	long err;
+	int trapnr;
+	int signr;
+};
+
+enum proc_cn_event {
+	PROC_EVENT_NONE = 0,
+	PROC_EVENT_FORK = 1,
+	PROC_EVENT_EXEC = 2,
+	PROC_EVENT_UID = 4,
+	PROC_EVENT_GID = 64,
+	PROC_EVENT_SID = 128,
+	PROC_EVENT_PTRACE = 256,
+	PROC_EVENT_COMM = 512,
+	PROC_EVENT_NONZERO_EXIT = 536870912,
+	PROC_EVENT_COREDUMP = 1073741824,
+	PROC_EVENT_EXIT = 2147483648,
+};
+
+enum reboot_type {
+	BOOT_TRIPLE = 116,
+	BOOT_KBD = 107,
+	BOOT_BIOS = 98,
+	BOOT_ACPI = 97,
+	BOOT_EFI = 101,
+	BOOT_CF9_FORCE = 112,
+	BOOT_CF9_SAFE = 113,
+};
+
+enum sys_off_mode {
+	SYS_OFF_MODE_POWER_OFF_PREPARE = 0,
+	SYS_OFF_MODE_POWER_OFF = 1,
+	SYS_OFF_MODE_RESTART_PREPARE = 2,
+	SYS_OFF_MODE_RESTART = 3,
+};
+
+struct sys_off_data;
+
+struct sys_off_handler {
+	struct notifier_block nb;
+	int (*sys_off_cb)(struct sys_off_data *);
+	void *cb_data;
+	enum sys_off_mode mode;
+	bool blocking;
+	void *list;
+};
+
+struct sys_off_data {
+	int mode;
+	void *cb_data;
+	const char *cmd;
+};
+
+struct async_entry {
+	struct list_head domain_list;
+	struct list_head global_list;
+	struct work_struct work;
+	async_cookie_t cookie;
+	async_func_t func;
+	void *data;
+	struct async_domain *domain;
+};
+
+enum {
+	HP_THREAD_NONE = 0,
+	HP_THREAD_ACTIVE = 1,
+	HP_THREAD_PARKED = 2,
+};
+
+struct smpboot_thread_data {
+	unsigned int cpu;
+	unsigned int status;
+	struct smp_hotplug_thread *ht;
+};
+
+enum vhost_task_flags {
+	VHOST_TASK_FLAGS_STOP = 0,
+};
+
+struct vhost_task {
+	bool (*fn)(void *);
+	void *data;
+	struct completion exited;
+	unsigned long flags;
+	struct task_struct *task;
+};
+
+struct cfs_rq {
+	struct load_weight load;
+	unsigned int nr_running;
+	unsigned int h_nr_running;
+	unsigned int idle_nr_running;
+	unsigned int idle_h_nr_running;
+	s64 avg_vruntime;
+	u64 avg_load;
+	u64 exec_clock;
+	u64 min_vruntime;
+	struct rb_root_cached tasks_timeline;
+	struct sched_entity *curr;
+	struct sched_entity *next;
+	unsigned int nr_spread_over;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg;
+	struct {
+		raw_spinlock_t lock;
+		int nr;
+		unsigned long load_avg;
+		unsigned long util_avg;
+		unsigned long runnable_avg;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	} removed;
+	unsigned long tg_load_avg_contrib;
+	long propagate;
+	long prop_runnable_sum;
+	unsigned long h_load;
+	u64 last_h_load_update;
+	struct sched_entity *h_load_next;
+	bool decayed;
+	struct rq *rq;
+	int on_list;
+	struct list_head leaf_cfs_rq_list;
+	struct task_group *tg;
+	int idle;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct __call_single_data {
+	struct __call_single_node node;
+	smp_call_func_t func;
+	void *info;
+};
+
+typedef struct __call_single_data call_single_data_t;
+
+struct uclamp_bucket {
+	unsigned long value: 11;
+	unsigned long tasks: 53;
+};
+
+struct uclamp_rq {
+	unsigned int value;
+	struct uclamp_bucket bucket[20];
+};
+
+struct rt_prio_array {
+	unsigned long bitmap[2];
+	struct list_head queue[100];
+};
+
+struct rt_rq {
+	struct rt_prio_array active;
+	unsigned int rt_nr_running;
+	unsigned int rr_nr_running;
+	struct {
+		int curr;
+		int next;
+	} highest_prio;
+	unsigned int rt_nr_migratory;
+	unsigned int rt_nr_total;
+	int overloaded;
+	struct plist_head pushable_tasks;
+	int rt_queued;
+	int rt_throttled;
+	u64 rt_time;
+	u64 rt_runtime;
+	raw_spinlock_t rt_runtime_lock;
+};
+
+struct dl_rq {
+	struct rb_root_cached root;
+	unsigned int dl_nr_running;
+	struct {
+		u64 curr;
+		u64 next;
+	} earliest_dl;
+	unsigned int dl_nr_migratory;
+	int overloaded;
+	struct rb_root_cached pushable_dl_tasks_root;
+	u64 running_bw;
+	u64 this_bw;
+	u64 extra_bw;
+	u64 max_bw;
+	u64 bw_ratio;
+};
+
+struct cpu_stop_done;
+
+struct cpu_stop_work {
+	struct list_head list;
+	cpu_stop_fn_t fn;
+	unsigned long caller;
+	void *arg;
+	struct cpu_stop_done *done;
+};
+
+enum misfit_reason {
+	MISFIT_PERF = 0,
+};
+
+typedef enum misfit_reason misfit_reason_t;
+
+struct root_domain;
+
+struct sched_domain;
+
+struct balance_callback;
+
+struct cpuidle_state;
+
+struct rq {
+	raw_spinlock_t __lock;
+	unsigned int nr_running;
+	unsigned long last_blocked_load_update_tick;
+	unsigned int has_blocked_load;
+	long: 64;
+	call_single_data_t nohz_csd;
+	unsigned int nohz_tick_stopped;
+	atomic_t nohz_flags;
+	unsigned int ttwu_pending;
+	u64 nr_switches;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct uclamp_rq uclamp[2];
+	unsigned int uclamp_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cfs_rq cfs;
+	struct rt_rq rt;
+	struct dl_rq dl;
+	struct list_head leaf_cfs_rq_list;
+	struct list_head *tmp_alone_branch;
+	unsigned int nr_uninterruptible;
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *curr;
+	struct task_struct *idle;
+	struct task_struct *stop;
+	unsigned long next_balance;
+	struct mm_struct *prev_mm;
+	unsigned int clock_update_flags;
+	u64 clock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u64 clock_task;
+	u64 clock_task_mult;
+	u64 clock_pelt;
+	unsigned long lost_idle_time;
+	u64 clock_pelt_idle;
+	u64 clock_idle;
+	atomic_t nr_iowait;
+	u64 last_seen_need_resched_ns;
+	int ticks_without_resched;
+	int membarrier_state;
+	struct root_domain *rd;
+	struct sched_domain __attribute__((btf_type_tag("rcu"))) *sd;
+	unsigned long cpu_capacity;
+	unsigned long cpu_capacity_orig;
+	struct balance_callback *balance_callback;
+	unsigned char nohz_idle_balance;
+	unsigned char idle_balance;
+	unsigned long misfit_task_load;
+	int active_balance;
+	int push_cpu;
+	struct cpu_stop_work active_balance_work;
+	int cpu;
+	int online;
+	struct list_head cfs_tasks;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg_rt;
+	struct sched_avg avg_dl;
+	struct sched_avg avg_irq;
+	struct sched_avg avg_thermal;
+	u64 idle_stamp;
+	u64 avg_idle;
+	unsigned long wake_stamp;
+	u64 wake_avg_idle;
+	u64 max_idle_balance_cost;
+	struct rcuwait hotplug_wait;
+	u64 prev_irq_time;
+	u64 prev_steal_time;
+	u64 prev_steal_time_rq;
+	unsigned long calc_load_update;
+	long calc_load_active;
+	long: 64;
+	call_single_data_t hrtick_csd;
+	struct hrtimer hrtick_timer;
+	ktime_t hrtick_time;
+	struct sched_info rq_sched_info;
+	unsigned long long rq_cpu_time;
+	unsigned int yld_count;
+	unsigned int sched_count;
+	unsigned int sched_goidle;
+	unsigned int ttwu_count;
+	unsigned int ttwu_local;
+	struct cpuidle_state *idle_state;
+	unsigned int nr_pinned;
+	unsigned int push_busy;
+	struct cpu_stop_work push_work;
+	cpumask_var_t scratch_mask;
+	misfit_reason_t misfit_reason;
+	u64 android_oem_data1[16];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct dl_bw {
+	raw_spinlock_t lock;
+	u64 bw;
+	u64 total_bw;
+};
+
+struct cpudl_item;
+
+struct cpudl {
+	raw_spinlock_t lock;
+	int size;
+	cpumask_var_t free_cpus;
+	struct cpudl_item *elements;
+};
+
+struct cpupri_vec {
+	atomic_t count;
+	cpumask_var_t mask;
+};
+
+struct cpupri {
+	struct cpupri_vec pri_to_cpu[101];
+	int *cpu_to_pri;
+};
+
+struct perf_domain;
+
+struct root_domain {
+	atomic_t refcount;
+	atomic_t rto_count;
+	struct callback_head rcu;
+	cpumask_var_t span;
+	cpumask_var_t online;
+	int overload;
+	int overutilized;
+	cpumask_var_t dlo_mask;
+	atomic_t dlo_count;
+	struct dl_bw dl_bw;
+	struct cpudl cpudl;
+	u64 visit_gen;
+	struct irq_work rto_push_work;
+	raw_spinlock_t rto_lock;
+	int rto_loop;
+	int rto_cpu;
+	atomic_t rto_loop_next;
+	atomic_t rto_loop_start;
+	cpumask_var_t rto_mask;
+	struct cpupri cpupri;
+	unsigned long max_cpu_capacity;
+	struct perf_domain __attribute__((btf_type_tag("rcu"))) *pd;
+	u64 android_vendor_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct cpudl_item {
+	u64 dl;
+	int cpu;
+	int idx;
+};
+
+struct perf_domain {
+	struct em_perf_domain *em_pd;
+	struct perf_domain *next;
+	struct callback_head rcu;
+};
+
+struct sched_group;
+
+struct sched_domain_shared;
+
+struct sched_domain {
+	struct sched_domain __attribute__((btf_type_tag("rcu"))) *parent;
+	struct sched_domain __attribute__((btf_type_tag("rcu"))) *child;
+	struct sched_group *groups;
+	unsigned long min_interval;
+	unsigned long max_interval;
+	unsigned int busy_factor;
+	unsigned int imbalance_pct;
+	unsigned int cache_nice_tries;
+	unsigned int imb_numa_nr;
+	int nohz_idle;
+	int flags;
+	int level;
+	unsigned long last_balance;
+	unsigned int balance_interval;
+	unsigned int nr_balance_failed;
+	u64 max_newidle_lb_cost;
+	unsigned long last_decay_max_lb_cost;
+	u64 avg_scan_cost;
+	unsigned int lb_count[3];
+	unsigned int lb_failed[3];
+	unsigned int lb_balanced[3];
+	unsigned int lb_imbalance[3];
+	unsigned int lb_gained[3];
+	unsigned int lb_hot_gained[3];
+	unsigned int lb_nobusyg[3];
+	unsigned int lb_nobusyq[3];
+	unsigned int alb_count;
+	unsigned int alb_failed;
+	unsigned int alb_pushed;
+	unsigned int sbe_count;
+	unsigned int sbe_balanced;
+	unsigned int sbe_pushed;
+	unsigned int sbf_count;
+	unsigned int sbf_balanced;
+	unsigned int sbf_pushed;
+	unsigned int ttwu_wake_remote;
+	unsigned int ttwu_move_affine;
+	unsigned int ttwu_move_balance;
+	char *name;
+	union {
+		void *private;
+		struct callback_head rcu;
+	};
+	struct sched_domain_shared *shared;
+	unsigned int span_weight;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	unsigned long span[0];
+};
+
+struct sched_group_capacity;
+
+struct sched_group {
+	struct sched_group *next;
+	atomic_t ref;
+	unsigned int group_weight;
+	unsigned int cores;
+	struct sched_group_capacity *sgc;
+	int asym_prefer_cpu;
+	int flags;
+	unsigned long cpumask[0];
+};
+
+struct sched_group_capacity {
+	atomic_t ref;
+	unsigned long capacity;
+	unsigned long min_capacity;
+	unsigned long max_capacity;
+	unsigned long next_update;
+	int imbalance;
+	int id;
+	unsigned long cpumask[0];
+};
+
+struct sched_domain_shared {
+	atomic_t ref;
+	atomic_t nr_busy_cpus;
+	int has_idle_cores;
+	int nr_idle_scan;
+};
+
+struct balance_callback {
+	struct balance_callback *next;
+	void (*func)(struct rq *);
+};
+
+struct cfs_bandwidth {};
+
+struct task_group {
+	struct cgroup_subsys_state css;
+	struct sched_entity **se;
+	struct cfs_rq **cfs_rq;
+	unsigned long shares;
+	int idle;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t load_avg;
+	struct callback_head rcu;
+	struct list_head list;
+	struct task_group *parent;
+	struct list_head siblings;
+	struct list_head children;
+	struct cfs_bandwidth cfs_bandwidth;
+	unsigned int uclamp_pct[2];
+	struct uclamp_se uclamp_req[2];
+	struct uclamp_se uclamp[2];
+	unsigned int latency_sensitive;
+	u64 android_vendor_data1[4];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+};
+
+struct pin_cookie {};
+
+struct rq_flags {
+	unsigned long flags;
+	struct pin_cookie cookie;
+	unsigned int clock_update_flags;
+};
+
+struct affinity_context {
+	const struct cpumask *new_mask;
+	struct cpumask *user_mask;
+	unsigned int flags;
+};
+
+struct io_ring_ctx;
+
+struct io_wq;
+
+struct io_uring_task {
+	int cached_refs;
+	const struct io_ring_ctx *last;
+	struct io_wq *io_wq;
+	struct file *registered_rings[16];
+	struct xarray xa;
+	struct wait_queue_head wait;
+	atomic_t in_cancel;
+	atomic_t inflight_tracked;
+	struct percpu_counter inflight;
+	long: 64;
+	long: 64;
+	struct {
+		struct llist_head task_list;
+		struct callback_head task_work;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+};
+
+struct io_fixed_file;
+
+struct io_file_table {
+	struct io_fixed_file *files;
+	unsigned long *bitmap;
+	unsigned int alloc_hint;
+};
+
+struct io_wq_work_node {
+	struct io_wq_work_node *next;
+};
+
+struct io_wq_work_list {
+	struct io_wq_work_node *first;
+	struct io_wq_work_node *last;
+};
+
+struct io_kiocb;
+
+struct io_submit_link {
+	struct io_kiocb *head;
+	struct io_kiocb *last;
+};
+
+struct io_submit_state {
+	struct io_wq_work_node free_list;
+	struct io_wq_work_list compl_reqs;
+	struct io_submit_link link;
+	bool plug_started;
+	bool need_plug;
+	unsigned short submit_nr;
+	unsigned int cqes_count;
+	struct blk_plug plug;
+};
+
+struct io_hash_bucket;
+
+struct io_hash_table {
+	struct io_hash_bucket *hbs;
+	unsigned int hash_bits;
+};
+
+struct io_alloc_cache {
+	struct io_wq_work_node list;
+	unsigned int nr_cached;
+	unsigned int max_cached;
+	size_t elem_size;
+};
+
+struct io_uring_cqe {
+	__u64 user_data;
+	__s32 res;
+	__u32 flags;
+	__u64 big_cqe[0];
+};
+
+struct io_restriction {
+	unsigned long register_op[1];
+	unsigned long sqe_op[1];
+	u8 sqe_flags_allowed;
+	u8 sqe_flags_required;
+	bool registered;
+};
+
+struct io_rings;
+
+struct io_rsrc_node;
+
+struct io_mapped_ubuf;
+
+struct io_ev_fd;
+
+struct io_sq_data;
+
+struct io_rsrc_data;
+
+struct io_wq_hash;
+
+struct io_ring_ctx {
+	struct {
+		unsigned int flags;
+		unsigned int drain_next: 1;
+		unsigned int restricted: 1;
+		unsigned int off_timeout_used: 1;
+		unsigned int drain_active: 1;
+		unsigned int has_evfd: 1;
+		unsigned int task_complete: 1;
+		unsigned int lockless_cq: 1;
+		unsigned int syscall_iopoll: 1;
+		unsigned int poll_activated: 1;
+		unsigned int drain_disabled: 1;
+		unsigned int compat: 1;
+		struct task_struct *submitter_task;
+		struct io_rings *rings;
+		struct percpu_ref refs;
+		enum task_work_notify_mode notify_method;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex uring_lock;
+		u32 *sq_array;
+		struct io_uring_sqe *sq_sqes;
+		unsigned int cached_sq_head;
+		unsigned int sq_entries;
+		struct io_rsrc_node *rsrc_node;
+		atomic_t cancel_seq;
+		struct io_file_table file_table;
+		unsigned int nr_user_files;
+		unsigned int nr_user_bufs;
+		struct io_mapped_ubuf **user_bufs;
+		struct io_submit_state submit_state;
+		struct xarray io_bl_xa;
+		struct io_hash_table cancel_table_locked;
+		struct io_alloc_cache apoll_cache;
+		struct io_alloc_cache netmsg_cache;
+		struct io_wq_work_list iopoll_list;
+		bool poll_multi_queue;
+	};
+	struct {
+		struct io_uring_cqe *cqe_cached;
+		struct io_uring_cqe *cqe_sentinel;
+		unsigned int cached_cq_tail;
+		unsigned int cq_entries;
+		struct io_ev_fd __attribute__((btf_type_tag("rcu"))) *io_ev_fd;
+		unsigned int cq_extra;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct llist_head work_llist;
+		unsigned long check_cq;
+		atomic_t cq_wait_nr;
+		atomic_t cq_timeouts;
+		struct wait_queue_head cq_wait;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		spinlock_t timeout_lock;
+		struct list_head timeout_list;
+		struct list_head ltimeout_list;
+		unsigned int cq_last_tm_flush;
+		long: 64;
+		long: 64;
+	};
+	struct io_uring_cqe completion_cqes[16];
+	spinlock_t completion_lock;
+	struct io_wq_work_list locked_free_list;
+	unsigned int locked_free_nr;
+	struct list_head io_buffers_comp;
+	struct list_head cq_overflow_list;
+	struct io_hash_table cancel_table;
+	const struct cred *sq_creds;
+	struct io_sq_data *sq_data;
+	struct wait_queue_head sqo_sq_wait;
+	struct list_head sqd_list;
+	unsigned int file_alloc_start;
+	unsigned int file_alloc_end;
+	struct xarray personalities;
+	u32 pers_next;
+	struct list_head io_buffers_cache;
+	struct hlist_head io_buf_list;
+	struct wait_queue_head poll_wq;
+	struct io_restriction restrictions;
+	struct io_mapped_ubuf *dummy_ubuf;
+	struct io_rsrc_data *file_data;
+	struct io_rsrc_data *buf_data;
+	struct list_head rsrc_ref_list;
+	struct io_alloc_cache rsrc_node_cache;
+	struct wait_queue_head rsrc_quiesce_wq;
+	unsigned int rsrc_quiesce;
+	struct list_head io_buffers_pages;
+	struct io_wq_hash *hash_map;
+	struct user_struct *user;
+	struct mm_struct *mm_account;
+	struct llist_head fallback_llist;
+	struct delayed_work fallback_work;
+	struct work_struct exit_work;
+	struct list_head tctx_list;
+	struct completion ref_comp;
+	u32 iowq_limits[2];
+	bool iowq_limits_set;
+	struct callback_head poll_wq_task_work;
+	struct list_head defer_list;
+	unsigned int sq_thread_idle;
+	unsigned int evfd_last_cq_tail;
+	unsigned short n_ring_pages;
+	unsigned short n_sqe_pages;
+	struct page **ring_pages;
+	struct page **sqe_pages;
+	long: 64;
+};
+
+struct io_uring {
+	u32 head;
+	u32 tail;
+};
+
+struct io_rings {
+	struct io_uring sq;
+	struct io_uring cq;
+	u32 sq_ring_mask;
+	u32 cq_ring_mask;
+	u32 sq_ring_entries;
+	u32 cq_ring_entries;
+	u32 sq_dropped;
+	atomic_t sq_flags;
+	u32 cq_flags;
+	u32 cq_overflow;
+	long: 64;
+	long: 64;
+	struct io_uring_cqe cqes[0];
+};
+
+struct io_fixed_file {
+	unsigned long file_ptr;
+};
+
+struct io_cmd_data {
+	struct file *file;
+	__u8 data[56];
+};
+
+struct io_cqe {
+	__u64 user_data;
+	__s32 res;
+	union {
+		__u32 flags;
+		int fd;
+	};
+};
+
+struct io_tw_state;
+
+typedef void (*io_req_tw_func_t)(struct io_kiocb *, struct io_tw_state *);
+
+struct io_task_work {
+	struct llist_node node;
+	io_req_tw_func_t func;
+};
+
+struct io_wq_work {
+	struct io_wq_work_node list;
+	unsigned int flags;
+	int cancel_seq;
+};
+
+struct io_buffer;
+
+struct io_buffer_list;
+
+struct async_poll;
+
+struct io_kiocb {
+	union {
+		struct file *file;
+		struct io_cmd_data cmd;
+	};
+	u8 opcode;
+	u8 iopoll_completed;
+	u16 buf_index;
+	unsigned int flags;
+	struct io_cqe cqe;
+	struct io_ring_ctx *ctx;
+	struct task_struct *task;
+	struct io_rsrc_node *rsrc_node;
+	union {
+		struct io_mapped_ubuf *imu;
+		struct io_buffer *kbuf;
+		struct io_buffer_list *buf_list;
+	};
+	union {
+		struct io_wq_work_node comp_list;
+		__poll_t apoll_events;
+	};
+	atomic_t refs;
+	atomic_t poll_refs;
+	struct io_task_work io_task_work;
+	unsigned int nr_tw;
+	struct hlist_node hash_node;
+	struct async_poll *apoll;
+	void *async_data;
+	struct io_kiocb *link;
+	const struct cred *creds;
+	struct io_wq_work work;
+	struct {
+		u64 extra1;
+		u64 extra2;
+	} big_cqe;
+};
+
+struct io_tw_state {
+	bool locked;
+};
+
+struct io_hash_bucket {
+	spinlock_t lock;
+	struct hlist_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_ev_fd {
+	struct eventfd_ctx *cq_ev_fd;
+	unsigned int eventfd_async: 1;
+	struct callback_head rcu;
+	atomic_t refs;
+	atomic_t ops;
+};
+
+struct io_wq_hash {
+	refcount_t refs;
+	unsigned long map;
+	struct wait_queue_head wait;
+};
+
+typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
+
+typedef void (*btf_trace_sched_kthread_work_queue_work)(void *, struct kthread_worker *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_start)(void *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_end)(void *, struct kthread_work *, kthread_work_func_t);
+
+typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *, unsigned int);
+
+typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_wait)(void *, struct pid *);
+
+typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);
+
+typedef void (*btf_trace_sched_stat_wait)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_sleep)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_iowait)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_blocked)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_blocked_reason)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);
+
+typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_hang)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
+
+typedef void (*btf_trace_pelt_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_pelt_rt_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_dl_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_thermal_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_irq_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_cpu_capacity_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_sched_overutilized_tp)(void *, struct root_domain *, bool);
+
+typedef void (*btf_trace_sched_util_est_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_sched_util_est_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_update_nr_running_tp)(void *, struct rq *, int);
+
+typedef void (*btf_trace_ipi_raise)(void *, const struct cpumask *, const char *);
+
+typedef void (*btf_trace_ipi_send_cpu)(void *, const unsigned int, unsigned long, void *);
+
+typedef void (*btf_trace_ipi_send_cpumask)(void *, const struct cpumask *, unsigned long, void *);
+
+typedef void (*btf_trace_ipi_entry)(void *, const char *);
+
+typedef void (*btf_trace_ipi_exit)(void *, const char *);
+
+struct kernel_stat {
+	unsigned long irqs_sum;
+	unsigned int softirqs[10];
+};
+
+struct kernel_cpustat {
+	u64 cpustat[10];
+};
+
+enum {
+	__SCHED_FEAT_PLACE_LAG = 0,
+	__SCHED_FEAT_PLACE_DEADLINE_INITIAL = 1,
+	__SCHED_FEAT_RUN_TO_PARITY = 2,
+	__SCHED_FEAT_NEXT_BUDDY = 3,
+	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
+	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
+	__SCHED_FEAT_HRTICK = 6,
+	__SCHED_FEAT_HRTICK_DL = 7,
+	__SCHED_FEAT_DOUBLE_TICK = 8,
+	__SCHED_FEAT_NONTASK_CAPACITY = 9,
+	__SCHED_FEAT_TTWU_QUEUE = 10,
+	__SCHED_FEAT_SIS_PROP = 11,
+	__SCHED_FEAT_SIS_UTIL = 12,
+	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 13,
+	__SCHED_FEAT_RT_PUSH_IPI = 14,
+	__SCHED_FEAT_RT_RUNTIME_SHARE = 15,
+	__SCHED_FEAT_LB_MIN = 16,
+	__SCHED_FEAT_ATTACH_AGE_LOAD = 17,
+	__SCHED_FEAT_WA_IDLE = 18,
+	__SCHED_FEAT_WA_WEIGHT = 19,
+	__SCHED_FEAT_WA_BIAS = 20,
+	__SCHED_FEAT_UTIL_EST = 21,
+	__SCHED_FEAT_LATENCY_WARN = 22,
+	__SCHED_FEAT_HZ_BW = 23,
+	__SCHED_FEAT_NR = 24,
+};
+
+enum uclamp_id {
+	UCLAMP_MIN = 0,
+	UCLAMP_MAX = 1,
+	UCLAMP_CNT = 2,
+};
+
+enum {
+	cpuset = 0,
+	possible = 1,
+	fail = 2,
+};
+
+enum cgroup_subsys_id {
+	cpuset_cgrp_id = 0,
+	cpu_cgrp_id = 1,
+	cpuacct_cgrp_id = 2,
+	io_cgrp_id = 3,
+	memory_cgrp_id = 4,
+	freezer_cgrp_id = 5,
+	net_prio_cgrp_id = 6,
+	CGROUP_SUBSYS_COUNT = 7,
+};
+
+enum cpu_util_type {
+	FREQUENCY_UTIL = 0,
+	ENERGY_UTIL = 1,
+};
+
+enum psi_task_count {
+	NR_IOWAIT = 0,
+	NR_MEMSTALL = 1,
+	NR_RUNNING = 2,
+	NR_MEMSTALL_RUNNING = 3,
+	NR_PSI_TASK_COUNTS = 4,
+};
+
+enum {
+	CSD_FLAG_LOCK = 1,
+	IRQ_WORK_PENDING = 1,
+	IRQ_WORK_BUSY = 2,
+	IRQ_WORK_LAZY = 4,
+	IRQ_WORK_HARD_IRQ = 8,
+	IRQ_WORK_CLAIMED = 3,
+	CSD_TYPE_ASYNC = 0,
+	CSD_TYPE_SYNC = 16,
+	CSD_TYPE_IRQ_WORK = 32,
+	CSD_TYPE_TTWU = 48,
+	CSD_FLAG_TYPE_MASK = 240,
+};
+
+enum {
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
+};
+
+union cpumask_rcuhead {
+	cpumask_t cpumask;
+	struct callback_head rcu;
+};
+
+struct trace_event_raw_sched_kthread_stop {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_stop_ret {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	void *worker;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wakeup_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int target_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_switch {
+	struct trace_entry ent;
+	char prev_comm[16];
+	pid_t prev_pid;
+	int prev_prio;
+	long prev_state;
+	char next_comm[16];
+	pid_t next_pid;
+	int next_prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_migrate_task {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int orig_cpu;
+	int dest_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_wait {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_fork {
+	struct trace_entry ent;
+	char parent_comm[16];
+	pid_t parent_pid;
+	char child_comm[16];
+	pid_t child_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_exec {
+	struct trace_entry ent;
+	u32 __data_loc_filename;
+	pid_t pid;
+	pid_t old_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_stat_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	u64 delay;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_blocked_reason {
+	struct trace_entry ent;
+	pid_t pid;
+	void *caller;
+	bool io_wait;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_stat_runtime {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	u64 runtime;
+	u64 vruntime;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_pi_setprio {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int oldprio;
+	int newprio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_hang {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_move_numa {
+	struct trace_entry ent;
+	pid_t pid;
+	pid_t tgid;
+	pid_t ngid;
+	int src_cpu;
+	int src_nid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_numa_pair_template {
+	struct trace_entry ent;
+	pid_t src_pid;
+	pid_t src_tgid;
+	pid_t src_ngid;
+	int src_cpu;
+	int src_nid;
+	pid_t dst_pid;
+	pid_t dst_tgid;
+	pid_t dst_ngid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wake_idle_without_ipi {
+	struct trace_entry ent;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_ipi_raise {
+	struct trace_entry ent;
+	u32 __data_loc_target_cpus;
+	const char *reason;
+	char __data[0];
+};
+
+struct trace_event_raw_ipi_send_cpu {
+	struct trace_entry ent;
+	unsigned int cpu;
+	void *callsite;
+	void *callback;
+	char __data[0];
+};
+
+struct trace_event_raw_ipi_send_cpumask {
+	struct trace_entry ent;
+	u32 __data_loc_cpumask;
+	void *callsite;
+	void *callback;
+	char __data[0];
+};
+
+struct trace_event_raw_ipi_handler {
+	struct trace_entry ent;
+	const char *reason;
+	char __data[0];
+};
+
+struct irqtime {
+	u64 total;
+	u64 tick_delta;
+	u64 irq_start_time;
+	struct u64_stats_sync sync;
+};
+
+struct sched_attr {
+	__u32 size;
+	__u32 sched_policy;
+	__u64 sched_flags;
+	__s32 sched_nice;
+	__u32 sched_priority;
+	__u64 sched_runtime;
+	__u64 sched_deadline;
+	__u64 sched_period;
+	__u32 sched_util_min;
+	__u32 sched_util_max;
+};
+
+struct trace_event_data_offsets_sched_process_exec {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_ipi_raise {
+	u32 target_cpus;
+};
+
+struct trace_event_data_offsets_ipi_send_cpumask {
+	u32 cpumask;
+};
+
+struct wake_q_head {
+	struct wake_q_node *first;
+	struct wake_q_node **lastp;
+	int count;
+};
+
+typedef struct {
+	void *lock;
+} class_rcu_t;
+
+typedef struct {
+	raw_spinlock_t *lock;
+	raw_spinlock_t *lock2;
+} class_double_raw_spinlock_t;
+
+typedef struct {
+	struct rq *lock;
+	struct rq *lock2;
+} class_double_rq_lock_t;
+
+typedef struct {
+	struct rq *lock;
+	struct rq_flags rf;
+} class_rq_lock_irqsave_t;
+
+typedef struct {
+	void *lock;
+} class_preempt_t;
+
+typedef struct {
+	raw_spinlock_t *lock;
+	unsigned long flags;
+} class_raw_spinlock_irqsave_t;
+
+struct sched_domain_attr {
+	int relax_domain_level;
+};
+
+struct rt_bandwidth {
+	raw_spinlock_t rt_runtime_lock;
+	ktime_t rt_period;
+	u64 rt_runtime;
+	struct hrtimer rt_period_timer;
+	unsigned int rt_period_active;
+};
+
+struct set_affinity_pending;
+
+struct migration_arg {
+	struct task_struct *task;
+	int dest_cpu;
+	struct set_affinity_pending *pending;
+};
+
+struct set_affinity_pending {
+	refcount_t refs;
+	unsigned int stop_pending;
+	struct completion done;
+	struct cpu_stop_work stop_work;
+	struct migration_arg arg;
+};
+
+struct css_task_iter {
+	struct cgroup_subsys *ss;
+	unsigned int flags;
+	struct list_head *cset_pos;
+	struct list_head *cset_head;
+	struct list_head *tcset_pos;
+	struct list_head *tcset_head;
+	struct list_head *task_pos;
+	struct list_head *cur_tasks_head;
+	struct css_set *cur_cset;
+	struct css_set *cur_dcset;
+	struct task_struct *cur_task;
+	struct list_head iters_node;
+	u64 android_kabi_reserved1;
+};
+
+struct uclamp_request {
+	s64 percent;
+	u64 util;
+	int ret;
+};
+
+struct trace_event_data_offsets_sched_kthread_stop {};
+
+struct trace_event_data_offsets_sched_kthread_stop_ret {};
+
+struct trace_event_data_offsets_sched_kthread_work_queue_work {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_start {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_end {};
+
+struct trace_event_data_offsets_sched_wakeup_template {};
+
+struct trace_event_data_offsets_sched_switch {};
+
+struct trace_event_data_offsets_sched_migrate_task {};
+
+struct trace_event_data_offsets_sched_process_template {};
+
+struct trace_event_data_offsets_sched_process_wait {};
+
+struct trace_event_data_offsets_sched_process_fork {};
+
+struct trace_event_data_offsets_sched_stat_template {};
+
+struct trace_event_data_offsets_sched_blocked_reason {};
+
+struct trace_event_data_offsets_sched_stat_runtime {};
+
+struct trace_event_data_offsets_sched_pi_setprio {};
+
+struct trace_event_data_offsets_sched_process_hang {};
+
+struct trace_event_data_offsets_sched_move_numa {};
+
+struct trace_event_data_offsets_sched_numa_pair_template {};
+
+struct trace_event_data_offsets_sched_wake_idle_without_ipi {};
+
+struct trace_event_data_offsets_ipi_send_cpu {};
+
+struct trace_event_data_offsets_ipi_handler {};
+
+typedef int (*tg_visitor)(struct task_group *, void *);
+
+struct migration_swap_arg {
+	struct task_struct *src_task;
+	struct task_struct *dst_task;
+	int src_cpu;
+	int dst_cpu;
+};
+
+typedef int (*task_call_f)(struct task_struct *, void *);
+
+typedef struct mutex *class_mutex_t;
+
+struct cpuidle_device;
+
+struct cpuidle_driver;
+
+struct cpuidle_state {
+	char name[16];
+	char desc[32];
+	s64 exit_latency_ns;
+	s64 target_residency_ns;
+	unsigned int flags;
+	unsigned int exit_latency;
+	int power_usage;
+	unsigned int target_residency;
+	int (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int);
+	int (*enter_dead)(struct cpuidle_device *, int);
+	int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);
+};
+
+struct cpuidle_state_usage {
+	unsigned long long disable;
+	unsigned long long usage;
+	u64 time_ns;
+	unsigned long long above;
+	unsigned long long below;
+	unsigned long long rejected;
+	unsigned long long s2idle_usage;
+	unsigned long long s2idle_time;
+};
+
+struct cpuidle_state_kobj;
+
+struct cpuidle_driver_kobj;
+
+struct cpuidle_device_kobj;
+
+struct cpuidle_device {
+	unsigned int registered: 1;
+	unsigned int enabled: 1;
+	unsigned int poll_time_limit: 1;
+	unsigned int cpu;
+	ktime_t next_hrtimer;
+	int last_state_idx;
+	u64 last_residency_ns;
+	u64 poll_limit_ns;
+	u64 forced_idle_latency_limit_ns;
+	struct cpuidle_state_usage states_usage[10];
+	struct cpuidle_state_kobj *kobjs[10];
+	struct cpuidle_driver_kobj *kobj_driver;
+	struct cpuidle_device_kobj *kobj_dev;
+	struct list_head device_list;
+	u64 android_kabi_reserved1;
+};
+
+struct cpuidle_driver {
+	const char *name;
+	struct module *owner;
+	unsigned int bctimer: 1;
+	struct cpuidle_state states[10];
+	int state_count;
+	int safe_state_index;
+	struct cpumask *cpumask;
+	const char *governor;
+	u64 android_kabi_reserved1;
+};
+
+struct rb_augment_callbacks {
+	void (*propagate)(struct rb_node *, struct rb_node *);
+	void (*copy)(struct rb_node *, struct rb_node *);
+	void (*rotate)(struct rb_node *, struct rb_node *);
+};
+
+enum {
+	SD_BALANCE_NEWIDLE = 1,
+	SD_BALANCE_EXEC = 2,
+	SD_BALANCE_FORK = 4,
+	SD_BALANCE_WAKE = 8,
+	SD_WAKE_AFFINE = 16,
+	SD_ASYM_CPUCAPACITY = 32,
+	SD_ASYM_CPUCAPACITY_FULL = 64,
+	SD_SHARE_CPUCAPACITY = 128,
+	SD_SHARE_PKG_RESOURCES = 256,
+	SD_SERIALIZE = 512,
+	SD_ASYM_PACKING = 1024,
+	SD_PREFER_SIBLING = 2048,
+	SD_OVERLAP = 4096,
+	SD_NUMA = 8192,
+};
+
+enum sched_tunable_scaling {
+	SCHED_TUNABLESCALING_NONE = 0,
+	SCHED_TUNABLESCALING_LOG = 1,
+	SCHED_TUNABLESCALING_LINEAR = 2,
+	SCHED_TUNABLESCALING_END = 3,
+};
+
+enum cpu_idle_type {
+	CPU_IDLE = 0,
+	CPU_NOT_IDLE = 1,
+	CPU_NEWLY_IDLE = 2,
+	CPU_MAX_IDLE_TYPES = 3,
+};
+
+enum fbq_type {
+	regular = 0,
+	remote = 1,
+	all = 2,
+};
+
+enum migration_type {
+	migrate_load = 0,
+	migrate_util = 1,
+	migrate_task = 2,
+	migrate_misfit = 3,
+};
+
+enum group_type {
+	group_has_spare = 0,
+	group_fully_busy = 1,
+	group_misfit_task = 2,
+	group_smt_balance = 3,
+	group_asym_packing = 4,
+	group_imbalanced = 5,
+	group_overloaded = 6,
+};
+
+struct update_util_data {
+	void (*func)(struct update_util_data *, u64, unsigned int);
+};
+
+struct sched_entity_stats {
+	struct sched_entity se;
+	struct sched_statistics stats;
+};
+
+struct energy_env {
+	unsigned long task_busy_time;
+	unsigned long pd_busy_time;
+	unsigned long cpu_cap;
+	unsigned long pd_cap;
+};
+
+struct lb_env {
+	struct sched_domain *sd;
+	struct rq *src_rq;
+	int src_cpu;
+	int dst_cpu;
+	struct rq *dst_rq;
+	struct cpumask *dst_grpmask;
+	int new_dst_cpu;
+	enum cpu_idle_type idle;
+	long imbalance;
+	struct cpumask *cpus;
+	unsigned int flags;
+	unsigned int loop;
+	unsigned int loop_break;
+	unsigned int loop_max;
+	enum fbq_type fbq_type;
+	enum migration_type migration_type;
+	struct list_head tasks;
+	struct rq_flags *src_rq_rf;
+};
+
+struct sg_lb_stats {
+	unsigned long avg_load;
+	unsigned long group_load;
+	unsigned long group_capacity;
+	unsigned long group_util;
+	unsigned long group_runnable;
+	unsigned int sum_nr_running;
+	unsigned int sum_h_nr_running;
+	unsigned int idle_cpus;
+	unsigned int group_weight;
+	enum group_type group_type;
+	unsigned int group_asym_packing;
+	unsigned int group_smt_balance;
+	unsigned long group_misfit_task_load;
+	misfit_reason_t group_misfit_reason;
+};
+
+struct sd_lb_stats {
+	struct sched_group *busiest;
+	struct sched_group *local;
+	unsigned long total_load;
+	unsigned long total_capacity;
+	unsigned long avg_load;
+	unsigned int prefer_sibling;
+	struct sg_lb_stats busiest_stat;
+	struct sg_lb_stats local_stat;
+};
+
+enum cpu_usage_stat {
+	CPUTIME_USER = 0,
+	CPUTIME_NICE = 1,
+	CPUTIME_SYSTEM = 2,
+	CPUTIME_SOFTIRQ = 3,
+	CPUTIME_IRQ = 4,
+	CPUTIME_IDLE = 5,
+	CPUTIME_IOWAIT = 6,
+	CPUTIME_STEAL = 7,
+	CPUTIME_GUEST = 8,
+	CPUTIME_GUEST_NICE = 9,
+	NR_STATS = 10,
+};
+
+enum dl_bw_request {
+	dl_bw_req_check_overflow = 0,
+	dl_bw_req_alloc = 1,
+	dl_bw_req_free = 2,
+};
+
+enum s2idle_states {
+	S2IDLE_STATE_NONE = 0,
+	S2IDLE_STATE_ENTER = 1,
+	S2IDLE_STATE_WAKE = 2,
+};
+
+struct idle_timer {
+	struct hrtimer timer;
+	int done;
+};
+
+typedef struct rt_rq *rt_rq_iter_t;
+
+struct sd_flag_debug {
+	unsigned int meta_flags;
+	char *name;
+};
+
+typedef const struct cpumask * (*sched_domain_mask_f)(int);
+
+typedef int (*sched_domain_flags_f)();
+
+struct sd_data {
+	struct sched_domain * __attribute__((btf_type_tag("percpu"))) *sd;
+	struct sched_domain_shared * __attribute__((btf_type_tag("percpu"))) *sds;
+	struct sched_group * __attribute__((btf_type_tag("percpu"))) *sg;
+	struct sched_group_capacity * __attribute__((btf_type_tag("percpu"))) *sgc;
+};
+
+struct sched_domain_topology_level {
+	sched_domain_mask_f mask;
+	sched_domain_flags_f sd_flags;
+	int flags;
+	int numa_level;
+	struct sd_data data;
+	char *name;
+};
+
+struct housekeeping {
+	cpumask_var_t cpumasks[9];
+	unsigned long flags;
+};
+
+struct cpuacct {
+	struct cgroup_subsys_state css;
+	u64 __attribute__((btf_type_tag("percpu"))) *cpuusage;
+	struct kernel_cpustat __attribute__((btf_type_tag("percpu"))) *cpustat;
+};
+
+struct gov_attr_set {
+	struct kobject kobj;
+	struct list_head policy_list;
+	struct mutex update_lock;
+	int usage_count;
+};
+
+struct sugov_tunables {
+	struct gov_attr_set attr_set;
+	unsigned int rate_limit_us;
+};
+
+struct governor_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct gov_attr_set *, char *);
+	ssize_t (*store)(struct gov_attr_set *, const char *, size_t);
+};
+
+struct sugov_policy;
+
+struct sugov_cpu {
+	struct update_util_data update_util;
+	struct sugov_policy *sg_policy;
+	unsigned int cpu;
+	bool iowait_boost_pending;
+	unsigned int iowait_boost;
+	u64 last_update;
+	unsigned long util;
+	unsigned long bw_dl;
+	unsigned long saved_idle_calls;
+};
+
+struct sugov_policy {
+	struct cpufreq_policy *policy;
+	struct sugov_tunables *tunables;
+	struct list_head tunables_hook;
+	raw_spinlock_t update_lock;
+	u64 last_freq_update_time;
+	s64 freq_update_delay_ns;
+	unsigned int next_freq;
+	unsigned int cached_raw_freq;
+	struct irq_work irq_work;
+	struct kthread_work work;
+	struct mutex work_lock;
+	struct kthread_worker worker;
+	struct task_struct *thread;
+	bool work_in_progress;
+	bool limits_changed;
+	bool need_freq_update;
+};
+
+struct proc_ops {
+	unsigned int proc_flags;
+	int (*proc_open)(struct inode *, struct file *);
+	ssize_t (*proc_read)(struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*proc_write)(struct file *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	loff_t (*proc_lseek)(struct file *, loff_t, int);
+	int (*proc_release)(struct inode *, struct file *);
+	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
+	long (*proc_ioctl)(struct file *, unsigned int, unsigned long);
+	long (*proc_compat_ioctl)(struct file *, unsigned int, unsigned long);
+	int (*proc_mmap)(struct file *, struct vm_area_struct *);
+	unsigned long (*proc_get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+};
+
+enum psi_states {
+	PSI_IO_SOME = 0,
+	PSI_IO_FULL = 1,
+	PSI_MEM_SOME = 2,
+	PSI_MEM_FULL = 3,
+	PSI_CPU_SOME = 4,
+	PSI_CPU_FULL = 5,
+	PSI_IRQ_FULL = 6,
+	PSI_NONIDLE = 7,
+	NR_PSI_STATES = 8,
+};
+
+enum psi_res {
+	PSI_IO = 0,
+	PSI_MEM = 1,
+	PSI_CPU = 2,
+	PSI_IRQ = 3,
+	NR_PSI_RESOURCES = 4,
+};
+
+enum psi_aggregators {
+	PSI_AVGS = 0,
+	PSI_POLL = 1,
+	NR_PSI_AGGREGATORS = 2,
+};
+
+enum hk_flags {
+	HK_FLAG_TIMER = 1,
+	HK_FLAG_RCU = 2,
+	HK_FLAG_MISC = 4,
+	HK_FLAG_SCHED = 8,
+	HK_FLAG_TICK = 16,
+	HK_FLAG_DOMAIN = 32,
+	HK_FLAG_WQ = 64,
+	HK_FLAG_MANAGED_IRQ = 128,
+	HK_FLAG_KTHREAD = 256,
+};
+
+enum cpuacct_stat_index {
+	CPUACCT_STAT_USER = 0,
+	CPUACCT_STAT_SYSTEM = 1,
+	CPUACCT_STAT_NSTATS = 2,
+};
+
+enum {
+	__SD_BALANCE_NEWIDLE = 0,
+	__SD_BALANCE_EXEC = 1,
+	__SD_BALANCE_FORK = 2,
+	__SD_BALANCE_WAKE = 3,
+	__SD_WAKE_AFFINE = 4,
+	__SD_ASYM_CPUCAPACITY = 5,
+	__SD_ASYM_CPUCAPACITY_FULL = 6,
+	__SD_SHARE_CPUCAPACITY = 7,
+	__SD_SHARE_PKG_RESOURCES = 8,
+	__SD_SERIALIZE = 9,
+	__SD_ASYM_PACKING = 10,
+	__SD_PREFER_SIBLING = 11,
+	__SD_OVERLAP = 12,
+	__SD_NUMA = 13,
+	__SD_FLAG_CNT = 14,
+};
+
+enum s_alloc {
+	sa_rootdomain = 0,
+	sa_sd = 1,
+	sa_sd_storage = 2,
+	sa_none = 3,
+};
+
+enum membarrier_cmd {
+	MEMBARRIER_CMD_QUERY = 0,
+	MEMBARRIER_CMD_GLOBAL = 1,
+	MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,
+	MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256,
+	MEMBARRIER_CMD_GET_REGISTRATIONS = 512,
+	MEMBARRIER_CMD_SHARED = 1,
+};
+
+enum membarrier_cmd_flag {
+	MEMBARRIER_CMD_FLAG_CPU = 1,
+};
+
+enum {
+	MEMBARRIER_FLAG_SYNC_CORE = 1,
+	MEMBARRIER_FLAG_RSEQ = 2,
+};
+
+struct swait_queue {
+	struct task_struct *task;
+	struct list_head task_list;
+};
+
+struct psi_window {
+	u64 size;
+	u64 start_time;
+	u64 start_value;
+	u64 prev_growth;
+};
+
+struct psi_trigger {
+	enum psi_states state;
+	u64 threshold;
+	struct list_head node;
+	struct psi_group *group;
+	wait_queue_head_t event_wait;
+	struct kernfs_open_file *of;
+	int event;
+	struct psi_window win;
+	u64 last_event_time;
+	bool pending_event;
+	enum psi_aggregators aggregator;
+};
+
+struct asym_cap_data {
+	struct list_head link;
+	unsigned long capacity;
+	unsigned long cpus[0];
+};
+
+struct s_data {
+	struct sched_domain * __attribute__((btf_type_tag("percpu"))) *sd;
+	struct root_domain *rd;
+};
+
+typedef __kernel_ulong_t ino_t;
+
+typedef void (*btf_trace_contention_begin)(void *, void *, unsigned int);
+
+typedef void (*btf_trace_contention_end)(void *, void *, int);
+
+struct trace_event_raw_contention_begin {
+	struct trace_entry ent;
+	void *lock_addr;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_contention_end {
+	struct trace_entry ent;
+	void *lock_addr;
+	int ret;
+	char __data[0];
+};
+
+struct ww_acquire_ctx;
+
+struct mutex_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	struct ww_acquire_ctx *ww_ctx;
+};
+
+struct ww_acquire_ctx {
+	struct task_struct *task;
+	unsigned long stamp;
+	unsigned int acquired;
+	unsigned short wounded;
+	unsigned short is_wait_die;
+};
+
+struct ww_mutex {
+	struct mutex base;
+	struct ww_acquire_ctx *ctx;
+};
+
+struct trace_event_data_offsets_contention_begin {};
+
+struct trace_event_data_offsets_contention_end {};
+
+struct semaphore_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	bool up;
+};
+
+struct semaphore {
+	raw_spinlock_t lock;
+	unsigned int count;
+	struct list_head wait_list;
+};
+
+enum rwsem_waiter_type {
+	RWSEM_WAITING_FOR_WRITE = 0,
+	RWSEM_WAITING_FOR_READ = 1,
+};
+
+enum rwsem_wake_type {
+	RWSEM_WAKE_ANY = 0,
+	RWSEM_WAKE_READERS = 1,
+	RWSEM_WAKE_READ_OWNED = 2,
+};
+
+enum owner_state {
+	OWNER_NULL = 1,
+	OWNER_WRITER = 2,
+	OWNER_READER = 4,
+	OWNER_NONSPINNABLE = 8,
+};
+
+struct rwsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	enum rwsem_waiter_type type;
+	unsigned long timeout;
+	bool handoff_set;
+};
+
+struct optimistic_spin_node {
+	struct optimistic_spin_node *next;
+	struct optimistic_spin_node *prev;
+	int locked;
+	int cpu;
+};
+
+struct mcs_spinlock {
+	struct mcs_spinlock *next;
+	int locked;
+	int count;
+};
+
+struct qnode {
+	struct mcs_spinlock mcs;
+};
+
+enum rtmutex_chainwalk {
+	RT_MUTEX_MIN_CHAINWALK = 0,
+	RT_MUTEX_FULL_CHAINWALK = 1,
+};
+
+struct rt_waiter_node {
+	struct rb_node entry;
+	int prio;
+	u64 deadline;
+};
+
+struct rt_mutex_base;
+
+struct rt_mutex_waiter {
+	struct rt_waiter_node tree;
+	struct rt_waiter_node pi_tree;
+	struct task_struct *task;
+	struct rt_mutex_base *lock;
+	unsigned int wake_state;
+	struct ww_acquire_ctx *ww_ctx;
+};
+
+struct rt_mutex_base {
+	raw_spinlock_t wait_lock;
+	struct rb_root_cached waiters;
+	struct task_struct *owner;
+};
+
+struct rt_mutex {
+	struct rt_mutex_base rtmutex;
+};
+
+struct rt_wake_q_head {
+	struct wake_q_head head;
+	struct task_struct *rtlock_task;
+};
+
+struct hrtimer_sleeper {
+	struct hrtimer timer;
+	struct task_struct *task;
+};
+
+enum pm_qos_req_action {
+	PM_QOS_ADD_REQ = 0,
+	PM_QOS_UPDATE_REQ = 1,
+	PM_QOS_REMOVE_REQ = 2,
+};
+
+struct pm_qos_request {
+	struct plist_node node;
+	struct pm_qos_constraints *qos;
+};
+
+enum suspend_stat_step {
+	SUSPEND_FREEZE = 1,
+	SUSPEND_PREPARE = 2,
+	SUSPEND_SUSPEND = 3,
+	SUSPEND_SUSPEND_LATE = 4,
+	SUSPEND_SUSPEND_NOIRQ = 5,
+	SUSPEND_RESUME_NOIRQ = 6,
+	SUSPEND_RESUME_EARLY = 7,
+	SUSPEND_RESUME = 8,
+};
+
+enum {
+	TEST_NONE = 0,
+	TEST_CORE = 1,
+	TEST_CPUS = 2,
+	TEST_PLATFORM = 3,
+	TEST_DEVICES = 4,
+	TEST_FREEZER = 5,
+	__TEST_AFTER_LAST = 6,
+};
+
+typedef int suspend_state_t;
+
+struct platform_suspend_ops {
+	int (*valid)(suspend_state_t);
+	int (*begin)(suspend_state_t);
+	int (*prepare)();
+	int (*prepare_late)();
+	int (*enter)(suspend_state_t);
+	void (*wake)();
+	void (*finish)();
+	bool (*suspend_again)();
+	void (*end)();
+	void (*recover)();
+	u64 android_kabi_reserved1;
+};
+
+struct platform_s2idle_ops {
+	int (*begin)();
+	int (*prepare)();
+	int (*prepare_late)();
+	void (*check)();
+	bool (*wake)();
+	void (*restore_early)();
+	void (*restore)();
+	void (*end)();
+	u64 android_kabi_reserved1;
+};
+
+struct wakelock {
+	char *name;
+	struct rb_node node;
+	struct wakeup_source *ws;
+};
+
+struct sysrq_key_op {
+	void (* const handler)(u8);
+	const char * const help_msg;
+	const char * const action_msg;
+	const int enable_mask;
+};
+
+enum wakeup_reason_flag {
+	RESUME_NONE = 0,
+	RESUME_IRQ = 1,
+	RESUME_ABORT = 2,
+	RESUME_ABNORMAL = 3,
+};
+
+struct wakeup_irq_node {
+	struct list_head siblings;
+	int irq;
+	const char *irq_name;
+};
+
+struct em_data_callback {
+	int (*active_power)(struct device *, unsigned long *, unsigned long *);
+	int (*get_cost)(struct device *, unsigned long, unsigned long *);
+};
+
+struct em_dbg_info {
+	struct em_perf_domain *pd;
+	int ps_id;
+};
+
+typedef void (*btf_trace_console)(void *, const char *, size_t);
+
+struct prb_desc;
+
+struct printk_info;
+
+struct prb_desc_ring {
+	unsigned int count_bits;
+	struct prb_desc *descs;
+	struct printk_info *infos;
+	atomic_long_t head_id;
+	atomic_long_t tail_id;
+	atomic_long_t last_finalized_id;
+};
+
+struct prb_data_ring {
+	unsigned int size_bits;
+	char *data;
+	atomic_long_t head_lpos;
+	atomic_long_t tail_lpos;
+};
+
+struct printk_ringbuffer {
+	struct prb_desc_ring desc_ring;
+	struct prb_data_ring text_data_ring;
+	atomic_long_t fail;
+};
+
+struct prb_data_blk_lpos {
+	unsigned long begin;
+	unsigned long next;
+};
+
+struct prb_desc {
+	atomic_long_t state_var;
+	struct prb_data_blk_lpos text_blk_lpos;
+};
+
+struct dev_printk_info {
+	char subsystem[16];
+	char device[48];
+};
+
+struct printk_info {
+	u64 seq;
+	u64 ts_nsec;
+	u16 text_len;
+	u8 facility;
+	u8 flags: 5;
+	u8 level: 3;
+	u32 caller_id;
+	struct dev_printk_info dev_info;
+};
+
+struct console_cmdline {
+	char name[16];
+	int index;
+	bool user_specified;
+	char *options;
+};
+
+struct printk_buffers {
+	char outbuf[2048];
+	char scratchbuf[1024];
+};
+
+typedef struct {
+	seqcount_t seqcount;
+} seqcount_latch_t;
+
+struct latched_seq {
+	seqcount_latch_t latch;
+	u64 val[2];
+};
+
+enum devkmsg_log_masks {
+	DEVKMSG_LOG_MASK_ON = 1,
+	DEVKMSG_LOG_MASK_OFF = 2,
+	DEVKMSG_LOG_MASK_LOCK = 4,
+};
+
+enum printk_info_flags {
+	LOG_NEWLINE = 2,
+	LOG_CONT = 8,
+};
+
+enum cons_flags {
+	CON_PRINTBUFFER = 1,
+	CON_CONSDEV = 2,
+	CON_ENABLED = 4,
+	CON_BOOT = 8,
+	CON_ANYTIME = 16,
+	CON_BRL = 32,
+	CON_EXTENDED = 64,
+	CON_SUSPENDED = 128,
+};
+
+enum con_msg_format_flags {
+	MSG_FORMAT_DEFAULT = 0,
+	MSG_FORMAT_SYSLOG = 1,
+};
+
+typedef unsigned int uint;
+
+struct console {
+	char name[16];
+	void (*write)(struct console *, const char *, unsigned int);
+	int (*read)(struct console *, char *, unsigned int);
+	struct tty_driver * (*device)(struct console *, int *);
+	void (*unblank)();
+	int (*setup)(struct console *, char *);
+	int (*exit)(struct console *);
+	int (*match)(struct console *, char *, int, char *);
+	short flags;
+	short index;
+	int cflag;
+	uint ispeed;
+	uint ospeed;
+	u64 seq;
+	unsigned long dropped;
+	void *data;
+	struct hlist_node node;
+};
+
+struct kmsg_dumper {
+	struct list_head list;
+	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
+	enum kmsg_dump_reason max_reason;
+	bool registered;
+};
+
+struct trace_event_raw_console {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_console {
+	u32 msg;
+};
+
+struct printk_record {
+	struct printk_info *info;
+	char *text_buf;
+	unsigned int text_buf_size;
+};
+
+struct prb_reserved_entry {
+	struct printk_ringbuffer *rb;
+	unsigned long irqflags;
+	unsigned long id;
+	unsigned int text_space;
+};
+
+struct printk_message {
+	struct printk_buffers *pbufs;
+	unsigned int outbuf_len;
+	u64 seq;
+	unsigned long dropped;
+};
+
+struct devkmsg_user {
+	atomic64_t seq;
+	struct ratelimit_state rs;
+	struct mutex lock;
+	struct printk_buffers pbufs;
+};
+
+struct kmsg_dump_iter {
+	u64 cur_seq;
+	u64 next_seq;
+};
+
+enum desc_state {
+	desc_miss = -1,
+	desc_reserved = 0,
+	desc_committed = 1,
+	desc_finalized = 2,
+	desc_reusable = 3,
+};
+
+struct prb_data_block {
+	unsigned long id;
+	char data[0];
+};
+
+enum {
+	IRQS_AUTODETECT = 1,
+	IRQS_SPURIOUS_DISABLED = 2,
+	IRQS_POLL_INPROGRESS = 8,
+	IRQS_ONESHOT = 32,
+	IRQS_REPLAY = 64,
+	IRQS_WAITING = 128,
+	IRQS_PENDING = 512,
+	IRQS_SUSPENDED = 2048,
+	IRQS_TIMINGS = 4096,
+	IRQS_NMI = 8192,
+	IRQS_SYSFS = 16384,
+};
+
+enum {
+	_IRQ_DEFAULT_INIT_FLAGS = 0,
+	_IRQ_PER_CPU = 512,
+	_IRQ_LEVEL = 256,
+	_IRQ_NOPROBE = 1024,
+	_IRQ_NOREQUEST = 2048,
+	_IRQ_NOTHREAD = 65536,
+	_IRQ_NOAUTOEN = 4096,
+	_IRQ_MOVE_PCNTXT = 16384,
+	_IRQ_NO_BALANCING = 8192,
+	_IRQ_NESTED_THREAD = 32768,
+	_IRQ_PER_CPU_DEVID = 131072,
+	_IRQ_IS_POLLED = 262144,
+	_IRQ_DISABLE_UNLAZY = 524288,
+	_IRQ_HIDDEN = 1048576,
+	_IRQ_NO_DEBUG = 2097152,
+	_IRQF_MODIFY_MASK = 2096911,
+};
+
+enum {
+	IRQTF_RUNTHREAD = 0,
+	IRQTF_WARNED = 1,
+	IRQTF_AFFINITY = 2,
+	IRQTF_FORCED_THREAD = 3,
+	IRQTF_READY = 4,
+};
+
+enum {
+	IRQ_SET_MASK_OK = 0,
+	IRQ_SET_MASK_OK_NOCOPY = 1,
+	IRQ_SET_MASK_OK_DONE = 2,
+};
+
+enum {
+	IRQCHIP_SET_TYPE_MASKED = 1,
+	IRQCHIP_EOI_IF_HANDLED = 2,
+	IRQCHIP_MASK_ON_SUSPEND = 4,
+	IRQCHIP_ONOFFLINE_ENABLED = 8,
+	IRQCHIP_SKIP_SET_WAKE = 16,
+	IRQCHIP_ONESHOT_SAFE = 32,
+	IRQCHIP_EOI_THREADED = 64,
+	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
+	IRQCHIP_SUPPORTS_NMI = 256,
+	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
+	IRQCHIP_AFFINITY_PRE_STARTUP = 1024,
+	IRQCHIP_IMMUTABLE = 2048,
+};
+
+enum {
+	IRQC_IS_HARDIRQ = 0,
+	IRQC_IS_NESTED = 1,
+};
+
+enum {
+	IRQ_STARTUP_NORMAL = 0,
+	IRQ_STARTUP_MANAGED = 1,
+	IRQ_STARTUP_ABORT = 2,
+};
+
+struct irq_devres {
+	unsigned int irq;
+	void *dev_id;
+};
+
+struct irq_desc_devres {
+	unsigned int from;
+	unsigned int cnt;
+};
+
+struct irq_generic_chip_devres {
+	struct irq_chip_generic *gc;
+	u32 msk;
+	unsigned int clr;
+	unsigned int set;
+};
+
+enum {
+	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
+	IRQ_DOMAIN_NAME_ALLOCATED = 2,
+	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
+	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
+	IRQ_DOMAIN_FLAG_MSI = 16,
+	IRQ_DOMAIN_FLAG_ISOLATED_MSI = 32,
+	IRQ_DOMAIN_FLAG_NO_MAP = 64,
+	IRQ_DOMAIN_FLAG_MSI_PARENT = 256,
+	IRQ_DOMAIN_FLAG_MSI_DEVICE = 512,
+	IRQ_DOMAIN_FLAG_NONCORE = 65536,
+};
+
+struct irqchip_fwid {
+	struct fwnode_handle fwnode;
+	unsigned int type;
+	char *name;
+	phys_addr_t *pa;
+};
+
+enum {
+	AFFINITY = 0,
+	AFFINITY_LIST = 1,
+	EFFECTIVE = 2,
+	EFFECTIVE_LIST = 3,
+};
+
+enum msi_domain_ids {
+	MSI_DEFAULT_DOMAIN = 0,
+	MSI_SECONDARY_DOMAIN = 1,
+	MSI_MAX_DEVICE_IRQDOMAINS = 2,
+};
+
+enum msi_desc_filter {
+	MSI_DESC_ALL = 0,
+	MSI_DESC_NOTASSOCIATED = 1,
+	MSI_DESC_ASSOCIATED = 2,
+};
+
+enum {
+	MSI_FLAG_USE_DEF_DOM_OPS = 1,
+	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
+	MSI_FLAG_ACTIVATE_EARLY = 4,
+	MSI_FLAG_MUST_REACTIVATE = 8,
+	MSI_FLAG_DEV_SYSFS = 16,
+	MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS = 32,
+	MSI_FLAG_FREE_MSI_DESCS = 64,
+	MSI_GENERIC_FLAGS_MASK = 65535,
+	MSI_DOMAIN_FLAGS_MASK = 4294901760,
+	MSI_FLAG_MULTI_PCI_MSI = 65536,
+	MSI_FLAG_PCI_MSIX = 131072,
+	MSI_FLAG_LEVEL_CAPABLE = 262144,
+	MSI_FLAG_MSIX_CONTIGUOUS = 524288,
+	MSI_FLAG_PCI_MSIX_ALLOC_DYN = 1048576,
+	MSI_FLAG_PCI_IMS = 2097152,
+};
+
+struct msi_domain_template {
+	char name[48];
+	struct irq_chip chip;
+	struct msi_domain_ops ops;
+	struct msi_domain_info info;
+};
+
+struct xa_limit {
+	u32 max;
+	u32 min;
+};
+
+struct msi_ctrl {
+	unsigned int domid;
+	unsigned int first;
+	unsigned int last;
+	unsigned int nirqs;
+};
+
+struct msi_map {
+	int index;
+	int virq;
+};
+
+struct irq_affinity {
+	unsigned int pre_vectors;
+	unsigned int post_vectors;
+	unsigned int nr_sets;
+	unsigned int set_size[4];
+	void (*calc_sets)(struct irq_affinity *, unsigned int);
+	void *priv;
+};
+
+typedef void (*btf_trace_rcu_utilization)(void *, const char *);
+
+typedef void (*btf_trace_rcu_grace_period)(void *, const char *, unsigned long, const char *);
+
+typedef void (*btf_trace_rcu_future_grace_period)(void *, const char *, unsigned long, unsigned long, u8, int, int, const char *);
+
+typedef void (*btf_trace_rcu_grace_period_init)(void *, const char *, unsigned long, u8, int, int, unsigned long);
+
+typedef void (*btf_trace_rcu_exp_grace_period)(void *, const char *, unsigned long, const char *);
+
+typedef void (*btf_trace_rcu_exp_funnel_lock)(void *, const char *, u8, int, int, const char *);
+
+typedef void (*btf_trace_rcu_nocb_wake)(void *, const char *, int, const char *);
+
+typedef void (*btf_trace_rcu_preempt_task)(void *, const char *, int, unsigned long);
+
+typedef void (*btf_trace_rcu_unlock_preempted_task)(void *, const char *, unsigned long, int);
+
+typedef void (*btf_trace_rcu_quiescent_state_report)(void *, const char *, unsigned long, unsigned long, unsigned long, u8, int, int, int);
+
+typedef void (*btf_trace_rcu_fqs)(void *, const char *, unsigned long, int, const char *);
+
+typedef void (*btf_trace_rcu_stall_warning)(void *, const char *, const char *);
+
+typedef void (*btf_trace_rcu_dyntick)(void *, const char *, long, long, int);
+
+typedef void (*btf_trace_rcu_callback)(void *, const char *, struct callback_head *, long);
+
+typedef void (*btf_trace_rcu_segcb_stats)(void *, struct rcu_segcblist *, const char *);
+
+typedef void (*btf_trace_rcu_kvfree_callback)(void *, const char *, struct callback_head *, unsigned long, long);
+
+typedef void (*btf_trace_rcu_batch_start)(void *, const char *, long, long);
+
+typedef void (*btf_trace_rcu_invoke_callback)(void *, const char *, struct callback_head *);
+
+typedef void (*btf_trace_rcu_invoke_kvfree_callback)(void *, const char *, struct callback_head *, unsigned long);
+
+typedef void (*btf_trace_rcu_invoke_kfree_bulk_callback)(void *, const char *, unsigned long, void **);
+
+typedef void (*btf_trace_rcu_batch_end)(void *, const char *, int, char, char, char, char);
+
+typedef void (*btf_trace_rcu_torture_read)(void *, const char *, struct callback_head *, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_rcu_barrier)(void *, const char *, const char *, int, int, unsigned long);
+
+struct rcu_tasks;
+
+typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);
+
+typedef void (*pregp_func_t)(struct list_head *);
+
+typedef void (*pertask_func_t)(struct task_struct *, struct list_head *);
+
+typedef void (*postscan_func_t)(struct list_head *);
+
+typedef void (*holdouts_func_t)(struct list_head *, bool, bool *);
+
+typedef void (*postgp_func_t)(struct rcu_tasks *);
+
+typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
+
+struct rcu_tasks_percpu;
+
+struct rcu_tasks {
+	struct rcuwait cbs_wait;
+	raw_spinlock_t cbs_gbl_lock;
+	struct mutex tasks_gp_mutex;
+	int gp_state;
+	int gp_sleep;
+	int init_fract;
+	unsigned long gp_jiffies;
+	unsigned long gp_start;
+	unsigned long tasks_gp_seq;
+	unsigned long n_ipis;
+	unsigned long n_ipis_fails;
+	struct task_struct *kthread_ptr;
+	unsigned long lazy_jiffies;
+	rcu_tasks_gp_func_t gp_func;
+	pregp_func_t pregp_func;
+	pertask_func_t pertask_func;
+	postscan_func_t postscan_func;
+	holdouts_func_t holdouts_func;
+	postgp_func_t postgp_func;
+	call_rcu_func_t call_func;
+	struct rcu_tasks_percpu __attribute__((btf_type_tag("percpu"))) *rtpcpu;
+	int percpu_enqueue_shift;
+	int percpu_enqueue_lim;
+	int percpu_dequeue_lim;
+	unsigned long percpu_dequeue_gpseq;
+	struct mutex barrier_q_mutex;
+	atomic_t barrier_q_count;
+	struct completion barrier_q_completion;
+	unsigned long barrier_q_seq;
+	char *name;
+	char *kname;
+};
+
+struct rcu_tasks_percpu {
+	struct rcu_segcblist cblist;
+	raw_spinlock_t lock;
+	unsigned long rtp_jiffies;
+	unsigned long rtp_n_lock_retries;
+	struct timer_list lazy_timer;
+	unsigned int urgent_gp;
+	struct work_struct rtp_work;
+	struct irq_work rtp_irq_work;
+	struct callback_head barrier_q_head;
+	struct list_head rtp_blkd_tasks;
+	int cpu;
+	struct rcu_tasks *rtpp;
+};
+
+struct rcu_synchronize {
+	struct callback_head head;
+	struct completion completion;
+};
+
+struct trace_event_raw_rcu_utilization {
+	struct trace_entry ent;
+	const char *s;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_future_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	long gp_seq_req;
+	u8 level;
+	int grplo;
+	int grphi;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_grace_period_init {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	u8 level;
+	int grplo;
+	int grphi;
+	unsigned long qsmask;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_exp_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gpseq;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_exp_funnel_lock {
+	struct trace_entry ent;
+	const char *rcuname;
+	u8 level;
+	int grplo;
+	int grphi;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_nocb_wake {
+	struct trace_entry ent;
+	const char *rcuname;
+	int cpu;
+	const char *reason;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_preempt_task {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_unlock_preempted_task {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_quiescent_state_report {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	unsigned long mask;
+	unsigned long qsmask;
+	u8 level;
+	int grplo;
+	int grphi;
+	u8 gp_tasks;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_fqs {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	int cpu;
+	const char *qsevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_stall_warning {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *msg;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_dyntick {
+	struct trace_entry ent;
+	const char *polarity;
+	long oldnesting;
+	long newnesting;
+	int dynticks;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	void *func;
+	long qlen;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_segcb_stats {
+	struct trace_entry ent;
+	const char *ctx;
+	unsigned long gp_seq[4];
+	long seglen[4];
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_kvfree_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	unsigned long offset;
+	long qlen;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_batch_start {
+	struct trace_entry ent;
+	const char *rcuname;
+	long qlen;
+	long blimit;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	void *func;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_kvfree_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	unsigned long offset;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_kfree_bulk_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	unsigned long nr_records;
+	void **p;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_batch_end {
+	struct trace_entry ent;
+	const char *rcuname;
+	int callbacks_invoked;
+	char cb;
+	char nr;
+	char iit;
+	char risk;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_torture_read {
+	struct trace_entry ent;
+	char rcutorturename[8];
+	struct callback_head *rhp;
+	unsigned long secs;
+	unsigned long c_old;
+	unsigned long c;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_barrier {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *s;
+	int cpu;
+	int cnt;
+	unsigned long done;
+	char __data[0];
+};
+
+struct rcu_cblist {
+	struct callback_head *head;
+	struct callback_head **tail;
+	long len;
+};
+
+struct trc_stall_chk_rdr {
+	int nesting;
+	int ipi_to_cpu;
+	u8 needqs;
+};
+
+struct trace_event_data_offsets_rcu_utilization {};
+
+struct trace_event_data_offsets_rcu_grace_period {};
+
+struct trace_event_data_offsets_rcu_future_grace_period {};
+
+struct trace_event_data_offsets_rcu_grace_period_init {};
+
+struct trace_event_data_offsets_rcu_exp_grace_period {};
+
+struct trace_event_data_offsets_rcu_exp_funnel_lock {};
+
+struct trace_event_data_offsets_rcu_nocb_wake {};
+
+struct trace_event_data_offsets_rcu_preempt_task {};
+
+struct trace_event_data_offsets_rcu_unlock_preempted_task {};
+
+struct trace_event_data_offsets_rcu_quiescent_state_report {};
+
+struct trace_event_data_offsets_rcu_fqs {};
+
+struct trace_event_data_offsets_rcu_stall_warning {};
+
+struct trace_event_data_offsets_rcu_dyntick {};
+
+struct trace_event_data_offsets_rcu_callback {};
+
+struct trace_event_data_offsets_rcu_segcb_stats {};
+
+struct trace_event_data_offsets_rcu_kvfree_callback {};
+
+struct trace_event_data_offsets_rcu_batch_start {};
+
+struct trace_event_data_offsets_rcu_invoke_callback {};
+
+struct trace_event_data_offsets_rcu_invoke_kvfree_callback {};
+
+struct trace_event_data_offsets_rcu_invoke_kfree_bulk_callback {};
+
+struct trace_event_data_offsets_rcu_batch_end {};
+
+struct trace_event_data_offsets_rcu_torture_read {};
+
+struct trace_event_data_offsets_rcu_barrier {};
+
+enum {
+	GP_IDLE = 0,
+	GP_ENTER = 1,
+	GP_PASSED = 2,
+	GP_EXIT = 3,
+	GP_REPLAY = 4,
+};
+
+typedef unsigned long ulong;
+
+enum rcutorture_type {
+	RCU_FLAVOR = 0,
+	RCU_TASKS_FLAVOR = 1,
+	RCU_TASKS_RUDE_FLAVOR = 2,
+	RCU_TASKS_TRACING_FLAVOR = 3,
+	RCU_TRIVIAL_FLAVOR = 4,
+	SRCU_FLAVOR = 5,
+	INVALID_RCU_FLAVOR = 6,
+};
+
+struct rcu_exp_work {
+	unsigned long rew_s;
+	struct kthread_work rew_work;
+};
+
+struct rcu_node {
+	raw_spinlock_t lock;
+	unsigned long gp_seq;
+	unsigned long gp_seq_needed;
+	unsigned long completedqs;
+	unsigned long qsmask;
+	unsigned long rcu_gp_init_mask;
+	unsigned long qsmaskinit;
+	unsigned long qsmaskinitnext;
+	unsigned long expmask;
+	unsigned long expmaskinit;
+	unsigned long expmaskinitnext;
+	unsigned long cbovldmask;
+	unsigned long ffmask;
+	unsigned long grpmask;
+	int grplo;
+	int grphi;
+	u8 grpnum;
+	u8 level;
+	bool wait_blkd_tasks;
+	struct rcu_node *parent;
+	struct list_head blkd_tasks;
+	struct list_head *gp_tasks;
+	struct list_head *exp_tasks;
+	struct list_head *boost_tasks;
+	struct rt_mutex boost_mtx;
+	unsigned long boost_time;
+	struct mutex boost_kthread_mutex;
+	struct task_struct *boost_kthread_task;
+	unsigned int boost_kthread_status;
+	unsigned long n_boosts;
+	struct swait_queue_head nocb_gp_wq[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	raw_spinlock_t fqslock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t exp_lock;
+	unsigned long exp_seq_rq;
+	wait_queue_head_t exp_wq[4];
+	struct rcu_exp_work rew;
+	bool exp_need_flush;
+	raw_spinlock_t exp_poll_lock;
+	unsigned long exp_seq_poll_rq;
+	struct work_struct exp_poll_wq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+union rcu_noqs {
+	struct {
+		u8 norm;
+		u8 exp;
+	} b;
+	u16 s;
+};
+
+struct rcu_snap_record {
+	unsigned long gp_seq;
+	u64 cputime_irq;
+	u64 cputime_softirq;
+	u64 cputime_system;
+	unsigned long nr_hardirqs;
+	unsigned int nr_softirqs;
+	unsigned long long nr_csw;
+	unsigned long jiffies;
+};
+
+struct rcu_data {
+	unsigned long gp_seq;
+	unsigned long gp_seq_needed;
+	union rcu_noqs cpu_no_qs;
+	bool core_needs_qs;
+	bool beenonline;
+	bool gpwrap;
+	bool cpu_started;
+	struct rcu_node *mynode;
+	unsigned long grpmask;
+	unsigned long ticks_this_gp;
+	struct irq_work defer_qs_iw;
+	bool defer_qs_iw_pending;
+	struct work_struct strict_work;
+	struct rcu_segcblist cblist;
+	long qlen_last_fqs_check;
+	unsigned long n_cbs_invoked;
+	unsigned long n_force_qs_snap;
+	long blimit;
+	int dynticks_snap;
+	bool rcu_need_heavy_qs;
+	bool rcu_urgent_qs;
+	bool rcu_forced_tick;
+	bool rcu_forced_tick_exp;
+	unsigned long barrier_seq_snap;
+	struct callback_head barrier_head;
+	int exp_dynticks_snap;
+	struct swait_queue_head nocb_cb_wq;
+	struct swait_queue_head nocb_state_wq;
+	struct task_struct *nocb_gp_kthread;
+	raw_spinlock_t nocb_lock;
+	atomic_t nocb_lock_contended;
+	int nocb_defer_wakeup;
+	struct timer_list nocb_timer;
+	unsigned long nocb_gp_adv_time;
+	struct mutex nocb_gp_kthread_mutex;
+	raw_spinlock_t nocb_bypass_lock;
+	struct rcu_cblist nocb_bypass;
+	unsigned long nocb_bypass_first;
+	unsigned long nocb_nobypass_last;
+	int nocb_nobypass_count;
+	long: 64;
+	raw_spinlock_t nocb_gp_lock;
+	u8 nocb_gp_sleep;
+	u8 nocb_gp_bypass;
+	u8 nocb_gp_gp;
+	unsigned long nocb_gp_seq;
+	unsigned long nocb_gp_loops;
+	struct swait_queue_head nocb_gp_wq;
+	bool nocb_cb_sleep;
+	struct task_struct *nocb_cb_kthread;
+	struct list_head nocb_head_rdp;
+	struct list_head nocb_entry_rdp;
+	struct rcu_data *nocb_toggling_rdp;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct rcu_data *nocb_gp_rdp;
+	struct task_struct *rcu_cpu_kthread_task;
+	unsigned int rcu_cpu_kthread_status;
+	char rcu_cpu_has_work;
+	unsigned long rcuc_activity;
+	unsigned int softirq_snap;
+	struct irq_work rcu_iw;
+	bool rcu_iw_pending;
+	unsigned long rcu_iw_gp_seq;
+	unsigned long rcu_ofl_gp_seq;
+	short rcu_ofl_gp_flags;
+	unsigned long rcu_onl_gp_seq;
+	short rcu_onl_gp_flags;
+	unsigned long last_fqs_resched;
+	unsigned long last_sched_clock;
+	struct rcu_snap_record snap_record;
+	long lazy_len;
+	int cpu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rcu_state {
+	struct rcu_node node[3];
+	struct rcu_node *level[3];
+	int ncpus;
+	int n_online_cpus;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long gp_seq;
+	unsigned long gp_max;
+	struct task_struct *gp_kthread;
+	struct swait_queue_head gp_wq;
+	short gp_flags;
+	short gp_state;
+	unsigned long gp_wake_time;
+	unsigned long gp_wake_seq;
+	unsigned long gp_seq_polled;
+	unsigned long gp_seq_polled_snap;
+	unsigned long gp_seq_polled_exp_snap;
+	struct mutex barrier_mutex;
+	atomic_t barrier_cpu_count;
+	struct completion barrier_completion;
+	unsigned long barrier_sequence;
+	raw_spinlock_t barrier_lock;
+	struct mutex exp_mutex;
+	struct mutex exp_wake_mutex;
+	unsigned long expedited_sequence;
+	atomic_t expedited_need_qs;
+	struct swait_queue_head expedited_wq;
+	int ncpus_snap;
+	u8 cbovld;
+	u8 cbovldnext;
+	unsigned long jiffies_force_qs;
+	unsigned long jiffies_kick_kthreads;
+	unsigned long n_force_qs;
+	unsigned long gp_start;
+	unsigned long gp_end;
+	unsigned long gp_activity;
+	unsigned long gp_req_activity;
+	unsigned long jiffies_stall;
+	int nr_fqs_jiffies_stall;
+	unsigned long jiffies_resched;
+	unsigned long n_force_qs_gpstart;
+	const char *name;
+	char abbr;
+	long: 0;
+	arch_spinlock_t ofl_lock;
+	int nocb_is_setup;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rcu_gp_oldstate {
+	unsigned long rgos_norm;
+	unsigned long rgos_exp;
+};
+
+struct kfree_rcu_cpu;
+
+struct kfree_rcu_cpu_work {
+	struct rcu_work rcu_work;
+	struct callback_head *head_free;
+	struct rcu_gp_oldstate head_free_gp_snap;
+	struct list_head bulk_head_free[2];
+	struct kfree_rcu_cpu *krcp;
+};
+
+struct kfree_rcu_cpu {
+	struct callback_head *head;
+	unsigned long head_gp_snap;
+	atomic_t head_count;
+	struct list_head bulk_head[2];
+	atomic_t bulk_count[2];
+	struct kfree_rcu_cpu_work krw_arr[2];
+	raw_spinlock_t lock;
+	struct delayed_work monitor_work;
+	bool initialized;
+	struct delayed_work page_cache_work;
+	atomic_t backoff_page_cache_fill;
+	atomic_t work_in_progress;
+	struct hrtimer hrtimer;
+	struct llist_head bkvcache;
+	int nr_bkv_objs;
+};
+
+enum tick_dep_bits {
+	TICK_DEP_BIT_POSIX_TIMER = 0,
+	TICK_DEP_BIT_PERF_EVENTS = 1,
+	TICK_DEP_BIT_SCHED = 2,
+	TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
+	TICK_DEP_BIT_RCU = 4,
+	TICK_DEP_BIT_RCU_EXP = 5,
+};
+
+struct context_tracking {
+	atomic_t state;
+	long dynticks_nesting;
+	long dynticks_nmi_nesting;
+};
+
+struct kvfree_rcu_bulk_data {
+	struct list_head list;
+	struct rcu_gp_oldstate gp_snap;
+	unsigned long nr_records;
+	void *records[0];
+};
+
+struct rcu_stall_chk_rdr {
+	int nesting;
+	union rcu_special rs;
+	bool on_blkd_list;
+};
+
+struct dma_sgt_handle {
+	struct sg_table sgt;
+	struct page **pages;
+};
+
+struct dma_devres {
+	size_t size;
+	void *vaddr;
+	dma_addr_t dma_handle;
+	unsigned long attrs;
+};
+
+enum pci_p2pdma_map_type {
+	PCI_P2PDMA_MAP_UNKNOWN = 0,
+	PCI_P2PDMA_MAP_NOT_SUPPORTED = 1,
+	PCI_P2PDMA_MAP_BUS_ADDR = 2,
+	PCI_P2PDMA_MAP_THRU_HOST_BRIDGE = 3,
+};
+
+typedef struct pglist_data pg_data_t;
+
+struct pci_p2pdma_map_state {
+	struct dev_pagemap *pgmap;
+	int map;
+	u64 bus_off;
+};
+
+struct debugfs_u32_array {
+	u32 *array;
+	u32 n_elements;
+};
+
+struct cma {
+	unsigned long base_pfn;
+	unsigned long count;
+	unsigned long *bitmap;
+	unsigned int order_per_bit;
+	spinlock_t lock;
+	struct hlist_head mem_head;
+	spinlock_t mem_head_lock;
+	struct debugfs_u32_array dfs_bitmap;
+	char name[64];
+	bool reserve_pages_on_error;
+};
+
+struct dma_coherent_mem {
+	void *virt_base;
+	dma_addr_t device_base;
+	unsigned long pfn_base;
+	int size;
+	unsigned long *bitmap;
+	spinlock_t spinlock;
+	bool use_dev_dma_pfn_offset;
+};
+
+struct io_tlb_area {
+	unsigned long used;
+	unsigned int index;
+	spinlock_t lock;
+};
+
+struct io_tlb_slot {
+	phys_addr_t orig_addr;
+	size_t alloc_size;
+	unsigned int list;
+};
+
+typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t);
+
+struct trace_event_raw_swiotlb_bounced {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u64 dma_mask;
+	dma_addr_t dev_addr;
+	size_t size;
+	bool force;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_swiotlb_bounced {
+	u32 dev_name;
+};
+
+struct gen_pool;
+
+typedef unsigned long (*genpool_algo_t)(unsigned long *, unsigned long, unsigned long, unsigned int, void *, struct gen_pool *, unsigned long);
+
+struct gen_pool {
+	spinlock_t lock;
+	struct list_head chunks;
+	int min_alloc_order;
+	genpool_algo_t algo;
+	void *data;
+	const char *name;
+};
+
+typedef void (*btf_trace_module_load)(void *, struct module *);
+
+typedef void (*btf_trace_module_free)(void *, struct module *);
+
+typedef void (*btf_trace_module_get)(void *, struct module *, unsigned long);
+
+typedef void (*btf_trace_module_put)(void *, struct module *, unsigned long);
+
+typedef void (*btf_trace_module_request)(void *, char *, bool, unsigned long);
+
+struct latch_tree_root {
+	seqcount_latch_t seq;
+	struct rb_root tree[2];
+};
+
+struct mod_tree_root {
+	struct latch_tree_root root;
+	unsigned long addr_min;
+	unsigned long addr_max;
+};
+
+enum mod_license {
+	NOT_GPL_ONLY = 0,
+	GPL_ONLY = 1,
+};
+
+struct symsearch {
+	const struct kernel_symbol *start;
+	const struct kernel_symbol *stop;
+	const s32 *crcs;
+	enum mod_license license;
+};
+
+enum kernel_load_data_id {
+	LOADING_UNKNOWN = 0,
+	LOADING_FIRMWARE = 1,
+	LOADING_MODULE = 2,
+	LOADING_KEXEC_IMAGE = 3,
+	LOADING_KEXEC_INITRAMFS = 4,
+	LOADING_POLICY = 5,
+	LOADING_X509_CERTIFICATE = 6,
+	LOADING_MAX_ID = 7,
+};
+
+enum fail_dup_mod_reason {
+	FAIL_DUP_MOD_BECOMING = 0,
+	FAIL_DUP_MOD_LOAD = 1,
+};
+
+enum kernel_read_file_id {
+	READING_UNKNOWN = 0,
+	READING_FIRMWARE = 1,
+	READING_MODULE = 2,
+	READING_KEXEC_IMAGE = 3,
+	READING_KEXEC_INITRAMFS = 4,
+	READING_POLICY = 5,
+	READING_X509_CERTIFICATE = 6,
+	READING_MAX_ID = 7,
+};
+
+struct trace_event_raw_module_load {
+	struct trace_entry ent;
+	unsigned int taints;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_free {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_refcnt {
+	struct trace_entry ent;
+	unsigned long ip;
+	int refcnt;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_request {
+	struct trace_entry ent;
+	unsigned long ip;
+	bool wait;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct module_use {
+	struct list_head source_list;
+	struct list_head target_list;
+	struct module *source;
+	struct module *target;
+};
+
+struct mod_initfree {
+	struct llist_node node;
+	void *init_text;
+	void *init_data;
+	void *init_rodata;
+};
+
+struct idempotent {
+	const void *cookie;
+	struct hlist_node entry;
+	struct completion complete;
+	int ret;
+};
+
+struct trace_event_data_offsets_module_load {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_refcnt {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_request {
+	u32 name;
+};
+
+struct find_symbol_arg {
+	const char *name;
+	bool gplok;
+	bool warn;
+	struct module *owner;
+	const s32 *crc;
+	const struct kernel_symbol *sym;
+	enum mod_license license;
+};
+
+struct load_info {
+	const char *name;
+	struct module *mod;
+	Elf64_Ehdr *hdr;
+	unsigned long len;
+	Elf64_Shdr *sechdrs;
+	char *secstrings;
+	char *strtab;
+	unsigned long symoffs;
+	unsigned long stroffs;
+	unsigned long init_typeoffs;
+	unsigned long core_typeoffs;
+	bool sig_ok;
+	unsigned long mod_kallsyms_init_off;
+	struct {
+		unsigned int sym;
+		unsigned int str;
+		unsigned int mod;
+		unsigned int vers;
+		unsigned int info;
+		unsigned int pcpu;
+	} index;
+};
+
+enum key_being_used_for {
+	VERIFYING_MODULE_SIGNATURE = 0,
+	VERIFYING_FIRMWARE_SIGNATURE = 1,
+	VERIFYING_KEXEC_PE_SIGNATURE = 2,
+	VERIFYING_KEY_SIGNATURE = 3,
+	VERIFYING_KEY_SELF_SIGNATURE = 4,
+	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
+	NR__KEY_BEING_USED_FOR = 6,
+};
+
+struct module_signature {
+	u8 algo;
+	u8 hash;
+	u8 id_type;
+	u8 signer_len;
+	u8 key_id_len;
+	u8 __pad[3];
+	__be32 sig_len;
+};
+
+struct latch_tree_ops {
+	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
+	int (*comp)(void *, struct latch_tree_node *);
+};
+
+struct module_sect_attr {
+	struct bin_attribute battr;
+	unsigned long address;
+};
+
+struct module_sect_attrs {
+	struct attribute_group grp;
+	unsigned int nsections;
+	struct module_sect_attr attrs[0];
+};
+
+struct module_notes_attrs {
+	struct kobject *dir;
+	unsigned int notes;
+	struct bin_attribute attrs[0];
+};
+
+struct modversion_info {
+	unsigned long crc;
+	char name[56];
+};
+
+enum kcmp_type {
+	KCMP_FILE = 0,
+	KCMP_VM = 1,
+	KCMP_FILES = 2,
+	KCMP_FS = 3,
+	KCMP_SIGHAND = 4,
+	KCMP_IO = 5,
+	KCMP_SYSVSEM = 6,
+	KCMP_EPOLL_TFD = 7,
+	KCMP_TYPES = 8,
+};
+
+struct kcmp_epoll_slot {
+	__u32 efd;
+	__u32 tfd;
+	__u32 toff;
+};
+
+struct profile_hit {
+	u32 pc;
+	u32 hits;
+};
+
+enum profile_type {
+	PROFILE_TASK_EXIT = 0,
+	PROFILE_MUNMAP = 1,
+};
+
+struct stacktrace_cookie {
+	unsigned long *store;
+	unsigned int size;
+	unsigned int skip;
+	unsigned int len;
+};
+
+struct timezone {
+	int tz_minuteswest;
+	int tz_dsttime;
+};
+
+typedef __kernel_long_t __kernel_suseconds_t;
+
+typedef __kernel_suseconds_t suseconds_t;
+
+typedef __u64 timeu64_t;
+
+struct __kernel_timex_timeval {
+	__kernel_time64_t tv_sec;
+	long long tv_usec;
+};
+
+struct __kernel_timex {
+	unsigned int modes;
+	long long offset;
+	long long freq;
+	long long maxerror;
+	long long esterror;
+	int status;
+	long long constant;
+	long long precision;
+	long long tolerance;
+	struct __kernel_timex_timeval time;
+	long long tick;
+	long long ppsfreq;
+	long long jitter;
+	int shift;
+	long long stabil;
+	long long jitcnt;
+	long long calcnt;
+	long long errcnt;
+	long long stbcnt;
+	int tai;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct old_timex32 {
+	u32 modes;
+	s32 offset;
+	s32 freq;
+	s32 maxerror;
+	s32 esterror;
+	s32 status;
+	s32 constant;
+	s32 precision;
+	s32 tolerance;
+	struct old_timeval32 time;
+	s32 tick;
+	s32 ppsfreq;
+	s32 jitter;
+	s32 shift;
+	s32 stabil;
+	s32 jitcnt;
+	s32 calcnt;
+	s32 errcnt;
+	s32 stbcnt;
+	s32 tai;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct itimerspec64 {
+	struct timespec64 it_interval;
+	struct timespec64 it_value;
+};
+
+struct __kernel_itimerspec {
+	struct __kernel_timespec it_interval;
+	struct __kernel_timespec it_value;
+};
+
+struct old_itimerspec32 {
+	struct old_timespec32 it_interval;
+	struct old_timespec32 it_value;
+};
+
+typedef void (*btf_trace_timer_init)(void *, struct timer_list *);
+
+typedef void (*btf_trace_timer_start)(void *, struct timer_list *, unsigned long, unsigned int);
+
+typedef void (*btf_trace_timer_expire_entry)(void *, struct timer_list *, unsigned long);
+
+typedef void (*btf_trace_timer_expire_exit)(void *, struct timer_list *);
+
+typedef void (*btf_trace_timer_cancel)(void *, struct timer_list *);
+
+typedef void (*btf_trace_hrtimer_init)(void *, struct hrtimer *, clockid_t, enum hrtimer_mode);
+
+typedef void (*btf_trace_hrtimer_start)(void *, struct hrtimer *, enum hrtimer_mode);
+
+typedef void (*btf_trace_hrtimer_expire_entry)(void *, struct hrtimer *, ktime_t *);
+
+typedef void (*btf_trace_hrtimer_expire_exit)(void *, struct hrtimer *);
+
+typedef void (*btf_trace_hrtimer_cancel)(void *, struct hrtimer *);
+
+typedef void (*btf_trace_itimer_state)(void *, int, const struct itimerspec64 * const, unsigned long long);
+
+typedef void (*btf_trace_itimer_expire)(void *, int, struct pid *, unsigned long long);
+
+typedef void (*btf_trace_tick_stop)(void *, int, int);
+
+struct timer_base {
+	raw_spinlock_t lock;
+	struct timer_list *running_timer;
+	unsigned long clk;
+	unsigned long next_expiry;
+	unsigned int cpu;
+	bool next_expiry_recalc;
+	bool is_idle;
+	bool timers_pending;
+	unsigned long pending_map[9];
+	struct hlist_head vectors[576];
+	long: 64;
+	long: 64;
+};
+
+struct trace_event_raw_timer_class {
+	struct trace_entry ent;
+	void *timer;
+	char __data[0];
+};
+
+struct trace_event_raw_timer_start {
+	struct trace_entry ent;
+	void *timer;
+	void *function;
+	unsigned long expires;
+	unsigned long now;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_timer_expire_entry {
+	struct trace_entry ent;
+	void *timer;
+	unsigned long now;
+	void *function;
+	unsigned long baseclk;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_init {
+	struct trace_entry ent;
+	void *hrtimer;
+	clockid_t clockid;
+	enum hrtimer_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_start {
+	struct trace_entry ent;
+	void *hrtimer;
+	void *function;
+	s64 expires;
+	s64 softexpires;
+	enum hrtimer_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_expire_entry {
+	struct trace_entry ent;
+	void *hrtimer;
+	s64 now;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_class {
+	struct trace_entry ent;
+	void *hrtimer;
+	char __data[0];
+};
+
+struct trace_event_raw_itimer_state {
+	struct trace_entry ent;
+	int which;
+	unsigned long long expires;
+	long value_sec;
+	long value_nsec;
+	long interval_sec;
+	long interval_nsec;
+	char __data[0];
+};
+
+struct trace_event_raw_itimer_expire {
+	struct trace_entry ent;
+	int which;
+	pid_t pid;
+	unsigned long long now;
+	char __data[0];
+};
+
+struct trace_event_raw_tick_stop {
+	struct trace_entry ent;
+	int success;
+	int dependency;
+	char __data[0];
+};
+
+struct process_timer {
+	struct timer_list timer;
+	struct task_struct *task;
+};
+
+struct trace_event_data_offsets_timer_class {};
+
+struct trace_event_data_offsets_timer_start {};
+
+struct trace_event_data_offsets_timer_expire_entry {};
+
+struct trace_event_data_offsets_hrtimer_init {};
+
+struct trace_event_data_offsets_hrtimer_start {};
+
+struct trace_event_data_offsets_hrtimer_expire_entry {};
+
+struct trace_event_data_offsets_hrtimer_class {};
+
+struct trace_event_data_offsets_itimer_state {};
+
+struct trace_event_data_offsets_itimer_expire {};
+
+struct trace_event_data_offsets_tick_stop {};
+
+enum hrtimer_base_type {
+	HRTIMER_BASE_MONOTONIC = 0,
+	HRTIMER_BASE_REALTIME = 1,
+	HRTIMER_BASE_BOOTTIME = 2,
+	HRTIMER_BASE_TAI = 3,
+	HRTIMER_BASE_MONOTONIC_SOFT = 4,
+	HRTIMER_BASE_REALTIME_SOFT = 5,
+	HRTIMER_BASE_BOOTTIME_SOFT = 6,
+	HRTIMER_BASE_TAI_SOFT = 7,
+	HRTIMER_MAX_CLOCK_BASES = 8,
+};
+
+enum clock_event_state {
+	CLOCK_EVT_STATE_DETACHED = 0,
+	CLOCK_EVT_STATE_SHUTDOWN = 1,
+	CLOCK_EVT_STATE_PERIODIC = 2,
+	CLOCK_EVT_STATE_ONESHOT = 3,
+	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
+};
+
+struct clock_event_device {
+	void (*event_handler)(struct clock_event_device *);
+	int (*set_next_event)(unsigned long, struct clock_event_device *);
+	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
+	ktime_t next_event;
+	u64 max_delta_ns;
+	u64 min_delta_ns;
+	u32 mult;
+	u32 shift;
+	enum clock_event_state state_use_accessors;
+	unsigned int features;
+	unsigned long retries;
+	int (*set_state_periodic)(struct clock_event_device *);
+	int (*set_state_oneshot)(struct clock_event_device *);
+	int (*set_state_oneshot_stopped)(struct clock_event_device *);
+	int (*set_state_shutdown)(struct clock_event_device *);
+	int (*tick_resume)(struct clock_event_device *);
+	void (*broadcast)(const struct cpumask *);
+	void (*suspend)(struct clock_event_device *);
+	void (*resume)(struct clock_event_device *);
+	unsigned long min_delta_ticks;
+	unsigned long max_delta_ticks;
+	const char *name;
+	int rating;
+	int irq;
+	int bound_on;
+	const struct cpumask *cpumask;
+	struct list_head list;
+	struct module *owner;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct clocksource;
+
+struct tk_read_base {
+	struct clocksource *clock;
+	u64 mask;
+	u64 cycle_last;
+	u32 mult;
+	u32 shift;
+	u64 xtime_nsec;
+	ktime_t base;
+	u64 base_real;
+};
+
+struct tk_fast {
+	seqcount_latch_t seq;
+	struct tk_read_base base[2];
+};
+
+enum vdso_clock_mode {
+	VDSO_CLOCKMODE_NONE = 0,
+	VDSO_CLOCKMODE_ARCHTIMER = 1,
+	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT = 2,
+	VDSO_CLOCKMODE_MAX = 3,
+	VDSO_CLOCKMODE_TIMENS = 2147483647,
+};
+
+struct clocksource {
+	u64 (*read)(struct clocksource *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	u64 max_idle_ns;
+	u32 maxadj;
+	u32 uncertainty_margin;
+	u64 max_cycles;
+	const char *name;
+	struct list_head list;
+	int rating;
+	enum clocksource_ids id;
+	enum vdso_clock_mode vdso_clock_mode;
+	unsigned long flags;
+	int (*enable)(struct clocksource *);
+	void (*disable)(struct clocksource *);
+	void (*suspend)(struct clocksource *);
+	void (*resume)(struct clocksource *);
+	void (*mark_unstable)(struct clocksource *);
+	void (*tick_stable)(struct clocksource *);
+	struct module *owner;
+};
+
+struct timekeeper {
+	struct tk_read_base tkr_mono;
+	struct tk_read_base tkr_raw;
+	u64 xtime_sec;
+	unsigned long ktime_sec;
+	struct timespec64 wall_to_monotonic;
+	ktime_t offs_real;
+	ktime_t offs_boot;
+	ktime_t offs_tai;
+	s32 tai_offset;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+	ktime_t next_leap_ktime;
+	u64 raw_sec;
+	struct timespec64 monotonic_to_boot;
+	u64 cycle_interval;
+	u64 xtime_interval;
+	s64 xtime_remainder;
+	u64 raw_interval;
+	u64 ntp_tick;
+	s64 ntp_error;
+	u32 ntp_error_shift;
+	u32 ntp_err_mult;
+	u32 skip_second_overflow;
+};
+
+enum timekeeping_adv_mode {
+	TK_ADV_TICK = 0,
+	TK_ADV_FREQ = 1,
+};
+
+struct system_device_crosststamp {
+	ktime_t device;
+	ktime_t sys_realtime;
+	ktime_t sys_monoraw;
+};
+
+struct audit_ntp_val {
+	long long oldval;
+	long long newval;
+};
+
+struct audit_ntp_data {
+	struct audit_ntp_val vals[6];
+};
+
+struct ktime_timestamps {
+	u64 mono;
+	u64 boot;
+	u64 real;
+};
+
+struct system_counterval_t {
+	u64 cycles;
+	struct clocksource *cs;
+};
+
+enum audit_ntp_type {
+	AUDIT_NTP_OFFSET = 0,
+	AUDIT_NTP_FREQ = 1,
+	AUDIT_NTP_STATUS = 2,
+	AUDIT_NTP_TAI = 3,
+	AUDIT_NTP_TICK = 4,
+	AUDIT_NTP_ADJUST = 5,
+	AUDIT_NTP_NVALS = 6,
+};
+
+struct rtc_device;
+
+struct rtc_timer {
+	struct timerqueue_node node;
+	ktime_t period;
+	void (*func)(struct rtc_device *);
+	struct rtc_device *rtc;
+	int enabled;
+};
+
+struct rtc_class_ops;
+
+struct rtc_device {
+	struct device dev;
+	struct module *owner;
+	int id;
+	const struct rtc_class_ops *ops;
+	struct mutex ops_lock;
+	struct cdev char_dev;
+	unsigned long flags;
+	unsigned long irq_data;
+	spinlock_t irq_lock;
+	wait_queue_head_t irq_queue;
+	struct fasync_struct *async_queue;
+	int irq_freq;
+	int max_user_freq;
+	struct timerqueue_head timerqueue;
+	struct rtc_timer aie_timer;
+	struct rtc_timer uie_rtctimer;
+	struct hrtimer pie_timer;
+	int pie_enabled;
+	struct work_struct irqwork;
+	unsigned long set_offset_nsec;
+	unsigned long features[1];
+	time64_t range_min;
+	timeu64_t range_max;
+	timeu64_t alarm_offset_max;
+	time64_t start_secs;
+	time64_t offset_secs;
+	bool set_start_time;
+	u64 android_kabi_reserved1;
+};
+
+struct rtc_time;
+
+struct rtc_wkalrm;
+
+struct rtc_param;
+
+struct rtc_class_ops {
+	int (*ioctl)(struct device *, unsigned int, unsigned long);
+	int (*read_time)(struct device *, struct rtc_time *);
+	int (*set_time)(struct device *, struct rtc_time *);
+	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*proc)(struct device *, struct seq_file *);
+	int (*alarm_irq_enable)(struct device *, unsigned int);
+	int (*read_offset)(struct device *, long *);
+	int (*set_offset)(struct device *, long);
+	int (*param_get)(struct device *, struct rtc_param *);
+	int (*param_set)(struct device *, struct rtc_param *);
+	u64 android_kabi_reserved1;
+};
+
+struct rtc_time {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	int tm_year;
+	int tm_wday;
+	int tm_yday;
+	int tm_isdst;
+};
+
+struct rtc_wkalrm {
+	unsigned char enabled;
+	unsigned char pending;
+	struct rtc_time time;
+};
+
+struct rtc_param {
+	__u64 param;
+	union {
+		__u64 uvalue;
+		__s64 svalue;
+		__u64 ptr;
+	};
+	__u32 index;
+	__u32 __pad;
+};
+
+enum tick_device_mode {
+	TICKDEV_MODE_PERIODIC = 0,
+	TICKDEV_MODE_ONESHOT = 1,
+};
+
+enum tick_nohz_mode {
+	NOHZ_MODE_INACTIVE = 0,
+	NOHZ_MODE_LOWRES = 1,
+	NOHZ_MODE_HIGHRES = 2,
+};
+
+struct tick_device {
+	struct clock_event_device *evtdev;
+	enum tick_device_mode mode;
+};
+
+struct tick_sched {
+	unsigned int inidle: 1;
+	unsigned int tick_stopped: 1;
+	unsigned int idle_active: 1;
+	unsigned int do_timer_last: 1;
+	unsigned int got_idle_tick: 1;
+	unsigned int stalled_jiffies;
+	unsigned long last_tick_jiffies;
+	struct hrtimer sched_timer;
+	ktime_t last_tick;
+	ktime_t next_tick;
+	unsigned long idle_jiffies;
+	ktime_t idle_waketime;
+	seqcount_t idle_sleeptime_seq;
+	ktime_t idle_entrytime;
+	enum tick_nohz_mode nohz_mode;
+	unsigned long last_jiffies;
+	u64 timer_expires_base;
+	u64 timer_expires;
+	u64 next_timer;
+	ktime_t idle_expires;
+	unsigned long idle_calls;
+	unsigned long idle_sleeps;
+	ktime_t idle_exittime;
+	ktime_t idle_sleeptime;
+	ktime_t iowait_sleeptime;
+	atomic_t tick_dep_mask;
+	unsigned long check_clocks;
+};
+
+struct timer_list_iter {
+	int cpu;
+	bool second_pass;
+	u64 now;
+};
+
+struct tm {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	long tm_year;
+	int tm_wday;
+	int tm_yday;
+};
+
+typedef void (*btf_trace_alarmtimer_suspend)(void *, ktime_t, int);
+
+struct alarm;
+
+typedef void (*btf_trace_alarmtimer_fired)(void *, struct alarm *, ktime_t);
+
+enum alarmtimer_restart {
+	ALARMTIMER_NORESTART = 0,
+	ALARMTIMER_RESTART = 1,
+};
+
+enum alarmtimer_type {
+	ALARM_REALTIME = 0,
+	ALARM_BOOTTIME = 1,
+	ALARM_NUMTYPE = 2,
+	ALARM_REALTIME_FREEZER = 3,
+	ALARM_BOOTTIME_FREEZER = 4,
+};
+
+struct alarm {
+	struct timerqueue_node node;
+	struct hrtimer timer;
+	enum alarmtimer_restart (*function)(struct alarm *, ktime_t);
+	enum alarmtimer_type type;
+	int state;
+	void *data;
+};
+
+typedef void (*btf_trace_alarmtimer_start)(void *, struct alarm *, ktime_t);
+
+typedef void (*btf_trace_alarmtimer_cancel)(void *, struct alarm *, ktime_t);
+
+struct k_itimer;
+
+struct k_clock {
+	int (*clock_getres)(const clockid_t, struct timespec64 *);
+	int (*clock_set)(const clockid_t, const struct timespec64 *);
+	int (*clock_get_timespec)(const clockid_t, struct timespec64 *);
+	ktime_t (*clock_get_ktime)(const clockid_t);
+	int (*clock_adj)(const clockid_t, struct __kernel_timex *);
+	int (*timer_create)(struct k_itimer *);
+	int (*nsleep)(const clockid_t, int, const struct timespec64 *);
+	int (*timer_set)(struct k_itimer *, int, struct itimerspec64 *, struct itimerspec64 *);
+	int (*timer_del)(struct k_itimer *);
+	void (*timer_get)(struct k_itimer *, struct itimerspec64 *);
+	void (*timer_rearm)(struct k_itimer *);
+	s64 (*timer_forward)(struct k_itimer *, ktime_t);
+	ktime_t (*timer_remaining)(struct k_itimer *, ktime_t);
+	int (*timer_try_to_cancel)(struct k_itimer *);
+	void (*timer_arm)(struct k_itimer *, ktime_t, bool, bool);
+	void (*timer_wait_running)(struct k_itimer *);
+};
+
+struct cpu_timer {
+	struct timerqueue_node node;
+	struct timerqueue_head *head;
+	struct pid *pid;
+	struct list_head elist;
+	int firing;
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *handling;
+};
+
+typedef __kernel_timer_t timer_t;
+
+struct k_itimer {
+	struct list_head list;
+	struct hlist_node t_hash;
+	spinlock_t it_lock;
+	const struct k_clock *kclock;
+	clockid_t it_clock;
+	timer_t it_id;
+	int it_active;
+	s64 it_overrun;
+	s64 it_overrun_last;
+	int it_requeue_pending;
+	int it_sigev_notify;
+	ktime_t it_interval;
+	struct signal_struct *it_signal;
+	union {
+		struct pid *it_pid;
+		struct task_struct *it_process;
+	};
+	struct sigqueue *sigq;
+	union {
+		struct {
+			struct hrtimer timer;
+		} real;
+		struct cpu_timer cpu;
+		struct {
+			struct alarm alarmtimer;
+		} alarm;
+	} it;
+	struct callback_head rcu;
+};
+
+struct alarm_base {
+	spinlock_t lock;
+	struct timerqueue_head timerqueue;
+	ktime_t (*get_ktime)();
+	void (*get_timespec)(struct timespec64 *);
+	clockid_t base_clockid;
+};
+
+struct class_interface {
+	struct list_head node;
+	const struct class *class;
+	int (*add_dev)(struct device *);
+	void (*remove_dev)(struct device *);
+};
+
+struct platform_driver {
+	int (*probe)(struct platform_device *);
+	int (*remove)(struct platform_device *);
+	void (*remove_new)(struct platform_device *);
+	void (*shutdown)(struct platform_device *);
+	int (*suspend)(struct platform_device *, pm_message_t);
+	int (*resume)(struct platform_device *);
+	struct device_driver driver;
+	const struct platform_device_id *id_table;
+	bool prevent_deferred_probe;
+	bool driver_managed_dma;
+	u64 android_kabi_reserved1;
+};
+
+struct trace_event_raw_alarmtimer_suspend {
+	struct trace_entry ent;
+	s64 expires;
+	unsigned char alarm_type;
+	char __data[0];
+};
+
+struct trace_event_raw_alarm_class {
+	struct trace_entry ent;
+	void *alarm;
+	unsigned char alarm_type;
+	s64 expires;
+	s64 now;
+	char __data[0];
+};
+
+struct property_entry;
+
+struct platform_device_info {
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	bool of_node_reused;
+	const char *name;
+	int id;
+	const struct resource *res;
+	unsigned int num_res;
+	const void *data;
+	size_t size_data;
+	u64 dma_mask;
+	const struct property_entry *properties;
+	u64 android_kabi_reserved1;
+};
+
+enum dev_prop_type {
+	DEV_PROP_U8 = 0,
+	DEV_PROP_U16 = 1,
+	DEV_PROP_U32 = 2,
+	DEV_PROP_U64 = 3,
+	DEV_PROP_STRING = 4,
+	DEV_PROP_REF = 5,
+};
+
+struct property_entry {
+	const char *name;
+	size_t length;
+	bool is_inline;
+	enum dev_prop_type type;
+	union {
+		const void *pointer;
+		union {
+			u8 u8_data[8];
+			u16 u16_data[4];
+			u32 u32_data[2];
+			u64 u64_data[1];
+			const char *str[1];
+		} value;
+	};
+};
+
+struct trace_event_data_offsets_alarmtimer_suspend {};
+
+struct trace_event_data_offsets_alarm_class {};
+
+struct sigevent {
+	sigval_t sigev_value;
+	int sigev_signo;
+	int sigev_notify;
+	union {
+		int _pad[12];
+		int _tid;
+		struct {
+			void (*_function)(sigval_t);
+			void *_attribute;
+		} _sigev_thread;
+	} _sigev_un;
+};
+
+struct compat_sigevent {
+	compat_sigval_t sigev_value;
+	compat_int_t sigev_signo;
+	compat_int_t sigev_notify;
+	union {
+		compat_int_t _pad[13];
+		compat_int_t _tid;
+		struct {
+			compat_uptr_t _function;
+			compat_uptr_t _attribute;
+		} _sigev_thread;
+	} _sigev_un;
+};
+
+typedef struct sigevent sigevent_t;
+
+struct posix_clock;
+
+struct posix_clock_operations {
+	struct module *owner;
+	int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);
+	int (*clock_gettime)(struct posix_clock *, struct timespec64 *);
+	int (*clock_getres)(struct posix_clock *, struct timespec64 *);
+	int (*clock_settime)(struct posix_clock *, const struct timespec64 *);
+	long (*ioctl)(struct posix_clock *, unsigned int, unsigned long);
+	int (*open)(struct posix_clock *, fmode_t);
+	__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);
+	int (*release)(struct posix_clock *);
+	ssize_t (*read)(struct posix_clock *, uint, char __attribute__((btf_type_tag("user"))) *, size_t);
+};
+
+struct posix_clock {
+	struct posix_clock_operations ops;
+	struct cdev cdev;
+	struct device *dev;
+	struct rw_semaphore rwsem;
+	bool zombie;
+};
+
+struct posix_clock_desc {
+	struct file *fp;
+	struct posix_clock *clk;
+};
+
+struct __kernel_old_itimerval {
+	struct __kernel_old_timeval it_interval;
+	struct __kernel_old_timeval it_value;
+};
+
+struct old_itimerval32 {
+	struct old_timeval32 it_interval;
+	struct old_timeval32 it_value;
+};
+
+typedef s64 int64_t;
+
+struct ce_unbind {
+	struct clock_event_device *ce;
+	int res;
+};
+
+enum tick_broadcast_state {
+	TICK_BROADCAST_EXIT = 0,
+	TICK_BROADCAST_ENTER = 1,
+};
+
+enum tick_broadcast_mode {
+	TICK_BROADCAST_OFF = 0,
+	TICK_BROADCAST_ON = 1,
+	TICK_BROADCAST_FORCE = 2,
+};
+
+struct clock_read_data {
+	u64 epoch_ns;
+	u64 epoch_cyc;
+	u64 sched_clock_mask;
+	u64 (*read_sched_clock)();
+	u32 mult;
+	u32 shift;
+};
+
+struct clock_data {
+	seqcount_latch_t seq;
+	struct clock_read_data read_data[2];
+	ktime_t wrap_kt;
+	unsigned long rate;
+	u64 (*actual_read_sched_clock)();
+};
+
+struct proc_timens_offset {
+	int clockid;
+	struct timespec64 val;
+};
+
+struct futex_hash_bucket {
+	atomic_t waiters;
+	spinlock_t lock;
+	struct plist_head chain;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum futex_access {
+	FUTEX_READ = 0,
+	FUTEX_WRITE = 1,
+};
+
+union futex_key {
+	struct {
+		u64 i_seq;
+		unsigned long pgoff;
+		unsigned int offset;
+	} shared;
+	struct {
+		union {
+			struct mm_struct *mm;
+			u64 __tmp;
+		};
+		unsigned long address;
+		unsigned int offset;
+	} private;
+	struct {
+		u64 ptr;
+		unsigned long word;
+		unsigned int offset;
+	} both;
+};
+
+struct futex_pi_state {
+	struct list_head list;
+	struct rt_mutex_base pi_mutex;
+	struct task_struct *owner;
+	refcount_t refcount;
+	union futex_key key;
+};
+
+struct futex_q {
+	struct plist_node list;
+	struct task_struct *task;
+	spinlock_t *lock_ptr;
+	union futex_key key;
+	struct futex_pi_state *pi_state;
+	struct rt_mutex_waiter *rt_waiter;
+	union futex_key *requeue_pi_key;
+	u32 bitset;
+	atomic_t requeue_state;
+};
+
+struct futex_waitv {
+	__u64 val;
+	__u64 uaddr;
+	__u32 flags;
+	__u32 __reserved;
+};
+
+struct futex_vector {
+	struct futex_waitv w;
+	struct futex_q q;
+};
+
+enum {
+	Q_REQUEUE_PI_NONE = 0,
+	Q_REQUEUE_PI_IGNORE = 1,
+	Q_REQUEUE_PI_IN_PROGRESS = 2,
+	Q_REQUEUE_PI_WAIT = 3,
+	Q_REQUEUE_PI_DONE = 4,
+	Q_REQUEUE_PI_LOCKED = 5,
+};
+
+typedef void (*btf_trace_csd_queue_cpu)(void *, const unsigned int, unsigned long, smp_call_func_t, struct __call_single_data *);
+
+typedef void (*btf_trace_csd_function_entry)(void *, smp_call_func_t, struct __call_single_data *);
+
+typedef void (*btf_trace_csd_function_exit)(void *, smp_call_func_t, struct __call_single_data *);
+
+struct call_function_data {
+	call_single_data_t __attribute__((btf_type_tag("percpu"))) *csd;
+	cpumask_var_t cpumask;
+	cpumask_var_t cpumask_ipi;
+};
+
+struct trace_event_raw_csd_queue_cpu {
+	struct trace_entry ent;
+	unsigned int cpu;
+	void *callsite;
+	void *func;
+	void *csd;
+	char __data[0];
+};
+
+struct trace_event_raw_csd_function {
+	struct trace_entry ent;
+	void *func;
+	void *csd;
+	char __data[0];
+};
+
+struct smp_call_on_cpu_struct {
+	struct work_struct work;
+	struct completion done;
+	int (*func)(void *);
+	void *data;
+	int ret;
+	int cpu;
+};
+
+struct trace_event_data_offsets_csd_queue_cpu {};
+
+struct trace_event_data_offsets_csd_function {};
+
+typedef unsigned short __kernel_old_uid_t;
+
+typedef __kernel_old_uid_t old_uid_t;
+
+typedef unsigned short __kernel_old_gid_t;
+
+typedef __kernel_old_gid_t old_gid_t;
+
+enum pkey_id_type {
+	PKEY_ID_PGP = 0,
+	PKEY_ID_X509 = 1,
+	PKEY_ID_PKCS7 = 2,
+};
+
+union bpf_iter_link_info;
+
+typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *);
+
+typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);
+
+enum bpf_func_id {
+	BPF_FUNC_unspec = 0,
+	BPF_FUNC_map_lookup_elem = 1,
+	BPF_FUNC_map_update_elem = 2,
+	BPF_FUNC_map_delete_elem = 3,
+	BPF_FUNC_probe_read = 4,
+	BPF_FUNC_ktime_get_ns = 5,
+	BPF_FUNC_trace_printk = 6,
+	BPF_FUNC_get_prandom_u32 = 7,
+	BPF_FUNC_get_smp_processor_id = 8,
+	BPF_FUNC_skb_store_bytes = 9,
+	BPF_FUNC_l3_csum_replace = 10,
+	BPF_FUNC_l4_csum_replace = 11,
+	BPF_FUNC_tail_call = 12,
+	BPF_FUNC_clone_redirect = 13,
+	BPF_FUNC_get_current_pid_tgid = 14,
+	BPF_FUNC_get_current_uid_gid = 15,
+	BPF_FUNC_get_current_comm = 16,
+	BPF_FUNC_get_cgroup_classid = 17,
+	BPF_FUNC_skb_vlan_push = 18,
+	BPF_FUNC_skb_vlan_pop = 19,
+	BPF_FUNC_skb_get_tunnel_key = 20,
+	BPF_FUNC_skb_set_tunnel_key = 21,
+	BPF_FUNC_perf_event_read = 22,
+	BPF_FUNC_redirect = 23,
+	BPF_FUNC_get_route_realm = 24,
+	BPF_FUNC_perf_event_output = 25,
+	BPF_FUNC_skb_load_bytes = 26,
+	BPF_FUNC_get_stackid = 27,
+	BPF_FUNC_csum_diff = 28,
+	BPF_FUNC_skb_get_tunnel_opt = 29,
+	BPF_FUNC_skb_set_tunnel_opt = 30,
+	BPF_FUNC_skb_change_proto = 31,
+	BPF_FUNC_skb_change_type = 32,
+	BPF_FUNC_skb_under_cgroup = 33,
+	BPF_FUNC_get_hash_recalc = 34,
+	BPF_FUNC_get_current_task = 35,
+	BPF_FUNC_probe_write_user = 36,
+	BPF_FUNC_current_task_under_cgroup = 37,
+	BPF_FUNC_skb_change_tail = 38,
+	BPF_FUNC_skb_pull_data = 39,
+	BPF_FUNC_csum_update = 40,
+	BPF_FUNC_set_hash_invalid = 41,
+	BPF_FUNC_get_numa_node_id = 42,
+	BPF_FUNC_skb_change_head = 43,
+	BPF_FUNC_xdp_adjust_head = 44,
+	BPF_FUNC_probe_read_str = 45,
+	BPF_FUNC_get_socket_cookie = 46,
+	BPF_FUNC_get_socket_uid = 47,
+	BPF_FUNC_set_hash = 48,
+	BPF_FUNC_setsockopt = 49,
+	BPF_FUNC_skb_adjust_room = 50,
+	BPF_FUNC_redirect_map = 51,
+	BPF_FUNC_sk_redirect_map = 52,
+	BPF_FUNC_sock_map_update = 53,
+	BPF_FUNC_xdp_adjust_meta = 54,
+	BPF_FUNC_perf_event_read_value = 55,
+	BPF_FUNC_perf_prog_read_value = 56,
+	BPF_FUNC_getsockopt = 57,
+	BPF_FUNC_override_return = 58,
+	BPF_FUNC_sock_ops_cb_flags_set = 59,
+	BPF_FUNC_msg_redirect_map = 60,
+	BPF_FUNC_msg_apply_bytes = 61,
+	BPF_FUNC_msg_cork_bytes = 62,
+	BPF_FUNC_msg_pull_data = 63,
+	BPF_FUNC_bind = 64,
+	BPF_FUNC_xdp_adjust_tail = 65,
+	BPF_FUNC_skb_get_xfrm_state = 66,
+	BPF_FUNC_get_stack = 67,
+	BPF_FUNC_skb_load_bytes_relative = 68,
+	BPF_FUNC_fib_lookup = 69,
+	BPF_FUNC_sock_hash_update = 70,
+	BPF_FUNC_msg_redirect_hash = 71,
+	BPF_FUNC_sk_redirect_hash = 72,
+	BPF_FUNC_lwt_push_encap = 73,
+	BPF_FUNC_lwt_seg6_store_bytes = 74,
+	BPF_FUNC_lwt_seg6_adjust_srh = 75,
+	BPF_FUNC_lwt_seg6_action = 76,
+	BPF_FUNC_rc_repeat = 77,
+	BPF_FUNC_rc_keydown = 78,
+	BPF_FUNC_skb_cgroup_id = 79,
+	BPF_FUNC_get_current_cgroup_id = 80,
+	BPF_FUNC_get_local_storage = 81,
+	BPF_FUNC_sk_select_reuseport = 82,
+	BPF_FUNC_skb_ancestor_cgroup_id = 83,
+	BPF_FUNC_sk_lookup_tcp = 84,
+	BPF_FUNC_sk_lookup_udp = 85,
+	BPF_FUNC_sk_release = 86,
+	BPF_FUNC_map_push_elem = 87,
+	BPF_FUNC_map_pop_elem = 88,
+	BPF_FUNC_map_peek_elem = 89,
+	BPF_FUNC_msg_push_data = 90,
+	BPF_FUNC_msg_pop_data = 91,
+	BPF_FUNC_rc_pointer_rel = 92,
+	BPF_FUNC_spin_lock = 93,
+	BPF_FUNC_spin_unlock = 94,
+	BPF_FUNC_sk_fullsock = 95,
+	BPF_FUNC_tcp_sock = 96,
+	BPF_FUNC_skb_ecn_set_ce = 97,
+	BPF_FUNC_get_listener_sock = 98,
+	BPF_FUNC_skc_lookup_tcp = 99,
+	BPF_FUNC_tcp_check_syncookie = 100,
+	BPF_FUNC_sysctl_get_name = 101,
+	BPF_FUNC_sysctl_get_current_value = 102,
+	BPF_FUNC_sysctl_get_new_value = 103,
+	BPF_FUNC_sysctl_set_new_value = 104,
+	BPF_FUNC_strtol = 105,
+	BPF_FUNC_strtoul = 106,
+	BPF_FUNC_sk_storage_get = 107,
+	BPF_FUNC_sk_storage_delete = 108,
+	BPF_FUNC_send_signal = 109,
+	BPF_FUNC_tcp_gen_syncookie = 110,
+	BPF_FUNC_skb_output = 111,
+	BPF_FUNC_probe_read_user = 112,
+	BPF_FUNC_probe_read_kernel = 113,
+	BPF_FUNC_probe_read_user_str = 114,
+	BPF_FUNC_probe_read_kernel_str = 115,
+	BPF_FUNC_tcp_send_ack = 116,
+	BPF_FUNC_send_signal_thread = 117,
+	BPF_FUNC_jiffies64 = 118,
+	BPF_FUNC_read_branch_records = 119,
+	BPF_FUNC_get_ns_current_pid_tgid = 120,
+	BPF_FUNC_xdp_output = 121,
+	BPF_FUNC_get_netns_cookie = 122,
+	BPF_FUNC_get_current_ancestor_cgroup_id = 123,
+	BPF_FUNC_sk_assign = 124,
+	BPF_FUNC_ktime_get_boot_ns = 125,
+	BPF_FUNC_seq_printf = 126,
+	BPF_FUNC_seq_write = 127,
+	BPF_FUNC_sk_cgroup_id = 128,
+	BPF_FUNC_sk_ancestor_cgroup_id = 129,
+	BPF_FUNC_ringbuf_output = 130,
+	BPF_FUNC_ringbuf_reserve = 131,
+	BPF_FUNC_ringbuf_submit = 132,
+	BPF_FUNC_ringbuf_discard = 133,
+	BPF_FUNC_ringbuf_query = 134,
+	BPF_FUNC_csum_level = 135,
+	BPF_FUNC_skc_to_tcp6_sock = 136,
+	BPF_FUNC_skc_to_tcp_sock = 137,
+	BPF_FUNC_skc_to_tcp_timewait_sock = 138,
+	BPF_FUNC_skc_to_tcp_request_sock = 139,
+	BPF_FUNC_skc_to_udp6_sock = 140,
+	BPF_FUNC_get_task_stack = 141,
+	BPF_FUNC_load_hdr_opt = 142,
+	BPF_FUNC_store_hdr_opt = 143,
+	BPF_FUNC_reserve_hdr_opt = 144,
+	BPF_FUNC_inode_storage_get = 145,
+	BPF_FUNC_inode_storage_delete = 146,
+	BPF_FUNC_d_path = 147,
+	BPF_FUNC_copy_from_user = 148,
+	BPF_FUNC_snprintf_btf = 149,
+	BPF_FUNC_seq_printf_btf = 150,
+	BPF_FUNC_skb_cgroup_classid = 151,
+	BPF_FUNC_redirect_neigh = 152,
+	BPF_FUNC_per_cpu_ptr = 153,
+	BPF_FUNC_this_cpu_ptr = 154,
+	BPF_FUNC_redirect_peer = 155,
+	BPF_FUNC_task_storage_get = 156,
+	BPF_FUNC_task_storage_delete = 157,
+	BPF_FUNC_get_current_task_btf = 158,
+	BPF_FUNC_bprm_opts_set = 159,
+	BPF_FUNC_ktime_get_coarse_ns = 160,
+	BPF_FUNC_ima_inode_hash = 161,
+	BPF_FUNC_sock_from_file = 162,
+	BPF_FUNC_check_mtu = 163,
+	BPF_FUNC_for_each_map_elem = 164,
+	BPF_FUNC_snprintf = 165,
+	BPF_FUNC_sys_bpf = 166,
+	BPF_FUNC_btf_find_by_name_kind = 167,
+	BPF_FUNC_sys_close = 168,
+	BPF_FUNC_timer_init = 169,
+	BPF_FUNC_timer_set_callback = 170,
+	BPF_FUNC_timer_start = 171,
+	BPF_FUNC_timer_cancel = 172,
+	BPF_FUNC_get_func_ip = 173,
+	BPF_FUNC_get_attach_cookie = 174,
+	BPF_FUNC_task_pt_regs = 175,
+	BPF_FUNC_get_branch_snapshot = 176,
+	BPF_FUNC_trace_vprintk = 177,
+	BPF_FUNC_skc_to_unix_sock = 178,
+	BPF_FUNC_kallsyms_lookup_name = 179,
+	BPF_FUNC_find_vma = 180,
+	BPF_FUNC_loop = 181,
+	BPF_FUNC_strncmp = 182,
+	BPF_FUNC_get_func_arg = 183,
+	BPF_FUNC_get_func_ret = 184,
+	BPF_FUNC_get_func_arg_cnt = 185,
+	BPF_FUNC_get_retval = 186,
+	BPF_FUNC_set_retval = 187,
+	BPF_FUNC_xdp_get_buff_len = 188,
+	BPF_FUNC_xdp_load_bytes = 189,
+	BPF_FUNC_xdp_store_bytes = 190,
+	BPF_FUNC_copy_from_user_task = 191,
+	BPF_FUNC_skb_set_tstamp = 192,
+	BPF_FUNC_ima_file_hash = 193,
+	BPF_FUNC_kptr_xchg = 194,
+	BPF_FUNC_map_lookup_percpu_elem = 195,
+	BPF_FUNC_skc_to_mptcp_sock = 196,
+	BPF_FUNC_dynptr_from_mem = 197,
+	BPF_FUNC_ringbuf_reserve_dynptr = 198,
+	BPF_FUNC_ringbuf_submit_dynptr = 199,
+	BPF_FUNC_ringbuf_discard_dynptr = 200,
+	BPF_FUNC_dynptr_read = 201,
+	BPF_FUNC_dynptr_write = 202,
+	BPF_FUNC_dynptr_data = 203,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv4 = 204,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv6 = 205,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv4 = 206,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv6 = 207,
+	BPF_FUNC_ktime_get_tai_ns = 208,
+	BPF_FUNC_user_ringbuf_drain = 209,
+	BPF_FUNC_cgrp_storage_get = 210,
+	BPF_FUNC_cgrp_storage_delete = 211,
+	__BPF_FUNC_MAX_ID = 212,
+};
+
+struct bpf_func_proto;
+
+typedef const struct bpf_func_proto * (*bpf_iter_get_func_proto_t)(enum bpf_func_id, const struct bpf_prog *);
+
+struct bpf_iter_reg {
+	const char *target;
+	bpf_iter_attach_target_t attach_target;
+	bpf_iter_detach_target_t detach_target;
+	bpf_iter_show_fdinfo_t show_fdinfo;
+	bpf_iter_fill_link_info_t fill_link_info;
+	bpf_iter_get_func_proto_t get_func_proto;
+	u32 ctx_arg_info_size;
+	u32 feature;
+	struct bpf_ctx_arg_aux ctx_arg_info[2];
+	const struct bpf_iter_seq_info *seq_info;
+};
+
+union bpf_iter_link_info {
+	struct {
+		__u32 map_fd;
+	} map;
+	struct {
+		enum bpf_cgroup_iter_order order;
+		__u32 cgroup_fd;
+		__u64 cgroup_id;
+	} cgroup;
+	struct {
+		__u32 tid;
+		__u32 pid;
+		__u32 pid_fd;
+	} task;
+};
+
+enum bpf_return_type {
+	RET_INTEGER = 0,
+	RET_VOID = 1,
+	RET_PTR_TO_MAP_VALUE = 2,
+	RET_PTR_TO_SOCKET = 3,
+	RET_PTR_TO_TCP_SOCK = 4,
+	RET_PTR_TO_SOCK_COMMON = 5,
+	RET_PTR_TO_MEM = 6,
+	RET_PTR_TO_MEM_OR_BTF_ID = 7,
+	RET_PTR_TO_BTF_ID = 8,
+	__BPF_RET_TYPE_MAX = 9,
+	RET_PTR_TO_MAP_VALUE_OR_NULL = 258,
+	RET_PTR_TO_SOCKET_OR_NULL = 259,
+	RET_PTR_TO_TCP_SOCK_OR_NULL = 260,
+	RET_PTR_TO_SOCK_COMMON_OR_NULL = 261,
+	RET_PTR_TO_RINGBUF_MEM_OR_NULL = 1286,
+	RET_PTR_TO_DYNPTR_MEM_OR_NULL = 262,
+	RET_PTR_TO_BTF_ID_OR_NULL = 264,
+	RET_PTR_TO_BTF_ID_TRUSTED = 1048584,
+	__BPF_RET_TYPE_LIMIT = 33554431,
+};
+
+enum bpf_arg_type {
+	ARG_DONTCARE = 0,
+	ARG_CONST_MAP_PTR = 1,
+	ARG_PTR_TO_MAP_KEY = 2,
+	ARG_PTR_TO_MAP_VALUE = 3,
+	ARG_PTR_TO_MEM = 4,
+	ARG_CONST_SIZE = 5,
+	ARG_CONST_SIZE_OR_ZERO = 6,
+	ARG_PTR_TO_CTX = 7,
+	ARG_ANYTHING = 8,
+	ARG_PTR_TO_SPIN_LOCK = 9,
+	ARG_PTR_TO_SOCK_COMMON = 10,
+	ARG_PTR_TO_INT = 11,
+	ARG_PTR_TO_LONG = 12,
+	ARG_PTR_TO_SOCKET = 13,
+	ARG_PTR_TO_BTF_ID = 14,
+	ARG_PTR_TO_RINGBUF_MEM = 15,
+	ARG_CONST_ALLOC_SIZE_OR_ZERO = 16,
+	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 17,
+	ARG_PTR_TO_PERCPU_BTF_ID = 18,
+	ARG_PTR_TO_FUNC = 19,
+	ARG_PTR_TO_STACK = 20,
+	ARG_PTR_TO_CONST_STR = 21,
+	ARG_PTR_TO_TIMER = 22,
+	ARG_PTR_TO_KPTR = 23,
+	ARG_PTR_TO_DYNPTR = 24,
+	__BPF_ARG_TYPE_MAX = 25,
+	ARG_PTR_TO_MAP_VALUE_OR_NULL = 259,
+	ARG_PTR_TO_MEM_OR_NULL = 260,
+	ARG_PTR_TO_CTX_OR_NULL = 263,
+	ARG_PTR_TO_SOCKET_OR_NULL = 269,
+	ARG_PTR_TO_STACK_OR_NULL = 276,
+	ARG_PTR_TO_BTF_ID_OR_NULL = 270,
+	ARG_PTR_TO_UNINIT_MEM = 32772,
+	ARG_PTR_TO_FIXED_SIZE_MEM = 262148,
+	__BPF_ARG_TYPE_LIMIT = 33554431,
+};
+
+struct bpf_func_proto {
+	u64 (*func)(u64, u64, u64, u64, u64);
+	bool gpl_only;
+	bool pkt_access;
+	bool might_sleep;
+	enum bpf_return_type ret_type;
+	union {
+		struct {
+			enum bpf_arg_type arg1_type;
+			enum bpf_arg_type arg2_type;
+			enum bpf_arg_type arg3_type;
+			enum bpf_arg_type arg4_type;
+			enum bpf_arg_type arg5_type;
+		};
+		enum bpf_arg_type arg_type[5];
+	};
+	union {
+		struct {
+			u32 *arg1_btf_id;
+			u32 *arg2_btf_id;
+			u32 *arg3_btf_id;
+			u32 *arg4_btf_id;
+			u32 *arg5_btf_id;
+		};
+		u32 *arg_btf_id[5];
+		struct {
+			size_t arg1_size;
+			size_t arg2_size;
+			size_t arg3_size;
+			size_t arg4_size;
+			size_t arg5_size;
+		};
+		size_t arg_size[5];
+	};
+	int *ret_btf_id;
+	bool (*allowed)(const struct bpf_prog *);
+};
+
+struct kallsym_iter {
+	loff_t pos;
+	loff_t pos_mod_end;
+	loff_t pos_ftrace_mod_end;
+	loff_t pos_bpf_end;
+	unsigned long value;
+	unsigned int nameoff;
+	char type;
+	char name[512];
+	char module_name[56];
+	int exported;
+	int show_value;
+};
+
+struct bpf_iter_meta;
+
+struct bpf_iter__ksym {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct kallsym_iter *ksym;
+	};
+};
+
+struct bpf_iter_meta {
+	union {
+		struct seq_file *seq;
+	};
+	u64 session_id;
+	u64 seq_num;
+};
+
+struct cgroup_taskset {
+	struct list_head src_csets;
+	struct list_head dst_csets;
+	int nr_tasks;
+	int ssid;
+	struct list_head *csets;
+	struct css_set *cur_cset;
+	struct task_struct *cur_task;
+};
+
+struct bpf_cgroup_storage_key {
+	__u64 cgroup_inode_id;
+	__u32 attach_type;
+};
+
+struct bpf_storage_buffer;
+
+struct bpf_cgroup_storage_map;
+
+struct bpf_cgroup_storage {
+	union {
+		struct bpf_storage_buffer *buf;
+		void __attribute__((btf_type_tag("percpu"))) *percpu_buf;
+	};
+	struct bpf_cgroup_storage_map *map;
+	struct bpf_cgroup_storage_key key;
+	struct list_head list_map;
+	struct list_head list_cg;
+	struct rb_node node;
+	struct callback_head rcu;
+};
+
+struct bpf_storage_buffer {
+	struct callback_head rcu;
+	char data[0];
+};
+
+typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);
+
+typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
+
+struct kernfs_fs_context {
+	struct kernfs_root *root;
+	void *ns_tag;
+	unsigned long magic;
+	bool new_sb_created;
+};
+
+struct cgroup_fs_context {
+	struct kernfs_fs_context kfc;
+	struct cgroup_root *root;
+	struct cgroup_namespace *ns;
+	unsigned int flags;
+	bool cpuset_clone_children;
+	bool none;
+	bool all_ss;
+	u16 subsys_mask;
+	char *name;
+	char *release_agent;
+};
+
+struct kernfs_syscall_ops {
+	int (*show_options)(struct seq_file *, struct kernfs_root *);
+	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
+	int (*rmdir)(struct kernfs_node *);
+	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
+	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum {
+	CGRP_ROOT_NOPREFIX = 2,
+	CGRP_ROOT_XATTR = 4,
+	CGRP_ROOT_NS_DELEGATE = 8,
+	CGRP_ROOT_FAVOR_DYNMODS = 16,
+	CGRP_ROOT_CPUSET_V2_MODE = 65536,
+	CGRP_ROOT_MEMORY_LOCAL_EVENTS = 131072,
+	CGRP_ROOT_MEMORY_RECURSIVE_PROT = 262144,
+};
+
+enum kernfs_node_type {
+	KERNFS_DIR = 1,
+	KERNFS_FILE = 2,
+	KERNFS_LINK = 4,
+};
+
+enum {
+	CGRP_NOTIFY_ON_RELEASE = 0,
+	CGRP_CPUSET_CLONE_CHILDREN = 1,
+	CGRP_FREEZE = 2,
+	CGRP_FROZEN = 3,
+	CGRP_KILL = 4,
+};
+
+enum kernfs_root_flag {
+	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
+	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
+	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
+	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
+};
+
+enum cgroup_opt_features {
+	OPT_FEATURE_PRESSURE = 0,
+	OPT_FEATURE_COUNT = 1,
+};
+
+enum {
+	CFTYPE_ONLY_ON_ROOT = 1,
+	CFTYPE_NOT_ON_ROOT = 2,
+	CFTYPE_NS_DELEGATABLE = 4,
+	CFTYPE_NO_PREFIX = 8,
+	CFTYPE_WORLD_WRITABLE = 16,
+	CFTYPE_DEBUG = 32,
+	__CFTYPE_ONLY_ON_DFL = 65536,
+	__CFTYPE_NOT_ON_DFL = 131072,
+	__CFTYPE_ADDED = 262144,
+};
+
+enum cgroup2_param {
+	Opt_nsdelegate = 0,
+	Opt_favordynmods = 1,
+	Opt_memory_localevents = 2,
+	Opt_memory_recursiveprot = 3,
+	nr__cgroup2_params = 4,
+};
+
+struct cgrp_cset_link {
+	struct cgroup *cgrp;
+	struct css_set *cset;
+	struct list_head cset_link;
+	struct list_head cgrp_link;
+};
+
+struct trace_event_raw_cgroup_root {
+	struct trace_entry ent;
+	int root;
+	u16 ss_mask;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_migrate {
+	struct trace_entry ent;
+	int dst_root;
+	int dst_level;
+	u64 dst_id;
+	int pid;
+	u32 __data_loc_dst_path;
+	u32 __data_loc_comm;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_event {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cgroup_root {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cgroup {
+	u32 path;
+};
+
+struct trace_event_data_offsets_cgroup_event {
+	u32 path;
+};
+
+struct cgroup_mgctx {
+	struct list_head preloaded_src_csets;
+	struct list_head preloaded_dst_csets;
+	struct cgroup_taskset tset;
+	u16 ss_mask;
+};
+
+struct cgroup_pidlist;
+
+struct cgroup_file_ctx {
+	struct cgroup_namespace *ns;
+	struct {
+		void *trigger;
+	} psi;
+	struct {
+		bool started;
+		struct css_task_iter iter;
+	} procs;
+	struct {
+		struct cgroup_pidlist *pidlist;
+	} procs1;
+};
+
+struct trace_event_data_offsets_cgroup_migrate {
+	u32 dst_path;
+	u32 comm;
+};
+
+typedef int (*btf_kfunc_filter_t)(const struct bpf_prog *, u32);
+
+struct btf_id_set8;
+
+struct btf_kfunc_id_set {
+	struct module *owner;
+	struct btf_id_set8 *set;
+	btf_kfunc_filter_t filter;
+};
+
+struct btf_id_set8 {
+	u32 cnt;
+	u32 flags;
+	struct {
+		u32 id;
+		u32 flags;
+	} pairs[0];
+};
+
+enum cgroup_filetype {
+	CGROUP_FILE_PROCS = 0,
+	CGROUP_FILE_TASKS = 1,
+};
+
+enum cgroup1_param {
+	Opt_all = 0,
+	Opt_clone_children = 1,
+	Opt_cpuset_v2_mode = 2,
+	Opt_name = 3,
+	Opt_none = 4,
+	Opt_noprefix = 5,
+	Opt_release_agent = 6,
+	Opt_xattr = 7,
+	Opt_favordynmods___2 = 8,
+	Opt_nofavordynmods = 9,
+};
+
+struct cgroup_pidlist {
+	struct {
+		enum cgroup_filetype type;
+		struct pid_namespace *ns;
+	} key;
+	pid_t *list;
+	int length;
+	struct list_head links;
+	struct cgroup *owner;
+	struct delayed_work destroy_dwork;
+};
+
+struct cgroupstats {
+	__u64 nr_sleeping;
+	__u64 nr_running;
+	__u64 nr_stopped;
+	__u64 nr_uninterruptible;
+	__u64 nr_io_wait;
+};
+
+enum freezer_state_flags {
+	CGROUP_FREEZER_ONLINE = 1,
+	CGROUP_FREEZING_SELF = 2,
+	CGROUP_FREEZING_PARENT = 4,
+	CGROUP_FROZEN = 8,
+	CGROUP_FREEZING = 6,
+};
+
+struct freezer {
+	struct cgroup_subsys_state css;
+	unsigned int state;
+};
+
+struct fmeter {
+	int cnt;
+	int val;
+	time64_t time;
+	spinlock_t lock;
+};
+
+enum prs_errcode {
+	PERR_NONE = 0,
+	PERR_INVCPUS = 1,
+	PERR_INVPARENT = 2,
+	PERR_NOTPART = 3,
+	PERR_NOTEXCL = 4,
+	PERR_NOCPUS = 5,
+	PERR_HOTPLUG = 6,
+	PERR_CPUSEMPTY = 7,
+};
+
+struct cpuset {
+	struct cgroup_subsys_state css;
+	unsigned long flags;
+	cpumask_var_t cpus_allowed;
+	cpumask_var_t cpus_requested;
+	nodemask_t mems_allowed;
+	cpumask_var_t effective_cpus;
+	nodemask_t effective_mems;
+	cpumask_var_t subparts_cpus;
+	nodemask_t old_mems_allowed;
+	struct fmeter fmeter;
+	int attach_in_progress;
+	int pn;
+	int relax_domain_level;
+	int nr_subparts_cpus;
+	int partition_root_state;
+	int use_parent_ecpus;
+	int child_ecpus_count;
+	int nr_deadline_tasks;
+	int nr_migrate_dl_tasks;
+	u64 sum_migrate_dl_bw;
+	enum prs_errcode prs_err;
+	struct cgroup_file partition_file;
+};
+
+enum subparts_cmd {
+	partcmd_enable = 0,
+	partcmd_disable = 1,
+	partcmd_update = 2,
+	partcmd_invalidate = 3,
+};
+
+enum {
+	ZONELIST_FALLBACK = 0,
+	MAX_ZONELISTS = 1,
+};
+
+struct cpuset_migrate_mm_work {
+	struct work_struct work;
+	struct mm_struct *mm;
+	nodemask_t from;
+	nodemask_t to;
+};
+
+struct tmpmasks {
+	cpumask_var_t addmask;
+	cpumask_var_t delmask;
+	cpumask_var_t new_cpus;
+};
+
+typedef enum {
+	CS_ONLINE = 0,
+	CS_CPU_EXCLUSIVE = 1,
+	CS_MEM_EXCLUSIVE = 2,
+	CS_MEM_HARDWALL = 3,
+	CS_MEMORY_MIGRATE = 4,
+	CS_SCHED_LOAD_BALANCE = 5,
+	CS_SPREAD_PAGE = 6,
+	CS_SPREAD_SLAB = 7,
+} cpuset_flagbits_t;
+
+typedef enum {
+	FILE_MEMORY_MIGRATE = 0,
+	FILE_CPULIST = 1,
+	FILE_MEMLIST = 2,
+	FILE_EFFECTIVE_CPULIST = 3,
+	FILE_EFFECTIVE_MEMLIST = 4,
+	FILE_SUBPARTS_CPULIST = 5,
+	FILE_CPU_EXCLUSIVE = 6,
+	FILE_MEM_EXCLUSIVE = 7,
+	FILE_MEM_HARDWALL = 8,
+	FILE_SCHED_LOAD_BALANCE = 9,
+	FILE_PARTITION_ROOT = 10,
+	FILE_SCHED_RELAX_DOMAIN_LEVEL = 11,
+	FILE_MEMORY_PRESSURE_ENABLED = 12,
+	FILE_MEMORY_PRESSURE = 13,
+	FILE_SPREAD_PAGE = 14,
+	FILE_SPREAD_SLAB = 15,
+} cpuset_filetype_t;
+
+struct cpu_stopper {
+	struct task_struct *thread;
+	raw_spinlock_t lock;
+	bool enabled;
+	struct list_head works;
+	struct cpu_stop_work stop_work;
+	unsigned long caller;
+	cpu_stop_fn_t fn;
+};
+
+struct cpu_stop_done {
+	atomic_t nr_todo;
+	int ret;
+	struct completion completion;
+};
+
+enum multi_stop_state {
+	MULTI_STOP_NONE = 0,
+	MULTI_STOP_PREPARE = 1,
+	MULTI_STOP_DISABLE_IRQ = 2,
+	MULTI_STOP_RUN = 3,
+	MULTI_STOP_EXIT = 4,
+};
+
+struct multi_stop_data {
+	cpu_stop_fn_t fn;
+	void *data;
+	unsigned int num_threads;
+	const struct cpumask *active_cpus;
+	enum multi_stop_state state;
+	atomic_t thread_ack;
+};
+
+struct auditd_connection {
+	struct pid *pid;
+	u32 portid;
+	struct net *net;
+	struct callback_head rcu;
+};
+
+typedef int __kernel_mqd_t;
+
+typedef __kernel_mqd_t mqd_t;
+
+struct mq_attr {
+	__kernel_long_t mq_flags;
+	__kernel_long_t mq_maxmsg;
+	__kernel_long_t mq_msgsize;
+	__kernel_long_t mq_curmsgs;
+	__kernel_long_t __reserved[4];
+};
+
+struct audit_cap_data {
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+	union {
+		unsigned int fE;
+		kernel_cap_t effective;
+	};
+	kernel_cap_t ambient;
+	kuid_t rootid;
+};
+
+struct open_how {
+	__u64 flags;
+	__u64 mode;
+	__u64 resolve;
+};
+
+enum audit_state {
+	AUDIT_STATE_DISABLED = 0,
+	AUDIT_STATE_BUILD = 1,
+	AUDIT_STATE_RECORD = 2,
+};
+
+struct audit_names {
+	struct list_head list;
+	struct filename *name;
+	int name_len;
+	bool hidden;
+	unsigned long ino;
+	dev_t dev;
+	umode_t mode;
+	kuid_t uid;
+	kgid_t gid;
+	dev_t rdev;
+	u32 osid;
+	struct audit_cap_data fcap;
+	unsigned int fcap_ver;
+	unsigned char type;
+	bool should_free;
+};
+
+struct audit_proctitle {
+	int len;
+	char *value;
+};
+
+struct audit_aux_data;
+
+struct __kernel_sockaddr_storage;
+
+struct audit_tree_refs;
+
+struct audit_context {
+	int dummy;
+	enum {
+		AUDIT_CTX_UNUSED = 0,
+		AUDIT_CTX_SYSCALL = 1,
+		AUDIT_CTX_URING = 2,
+	} context;
+	enum audit_state state;
+	enum audit_state current_state;
+	unsigned int serial;
+	int major;
+	int uring_op;
+	struct timespec64 ctime;
+	unsigned long argv[4];
+	long return_code;
+	u64 prio;
+	int return_valid;
+	struct audit_names preallocated_names[5];
+	int name_count;
+	struct list_head names_list;
+	char *filterkey;
+	struct path pwd;
+	struct audit_aux_data *aux;
+	struct audit_aux_data *aux_pids;
+	struct __kernel_sockaddr_storage *sockaddr;
+	size_t sockaddr_len;
+	pid_t ppid;
+	kuid_t uid;
+	kuid_t euid;
+	kuid_t suid;
+	kuid_t fsuid;
+	kgid_t gid;
+	kgid_t egid;
+	kgid_t sgid;
+	kgid_t fsgid;
+	unsigned long personality;
+	int arch;
+	pid_t target_pid;
+	kuid_t target_auid;
+	kuid_t target_uid;
+	unsigned int target_sessionid;
+	u32 target_sid;
+	char target_comm[16];
+	struct audit_tree_refs *trees;
+	struct audit_tree_refs *first_trees;
+	struct list_head killed_trees;
+	int tree_count;
+	int type;
+	union {
+		struct {
+			int nargs;
+			long args[6];
+		} socketcall;
+		struct {
+			kuid_t uid;
+			kgid_t gid;
+			umode_t mode;
+			u32 osid;
+			int has_perm;
+			uid_t perm_uid;
+			gid_t perm_gid;
+			umode_t perm_mode;
+			unsigned long qbytes;
+		} ipc;
+		struct {
+			mqd_t mqdes;
+			struct mq_attr mqstat;
+		} mq_getsetattr;
+		struct {
+			mqd_t mqdes;
+			int sigev_signo;
+		} mq_notify;
+		struct {
+			mqd_t mqdes;
+			size_t msg_len;
+			unsigned int msg_prio;
+			struct timespec64 abs_timeout;
+		} mq_sendrecv;
+		struct {
+			int oflag;
+			umode_t mode;
+			struct mq_attr attr;
+		} mq_open;
+		struct {
+			pid_t pid;
+			struct audit_cap_data cap;
+		} capset;
+		struct {
+			int fd;
+			int flags;
+		} mmap;
+		struct open_how openat2;
+		struct {
+			int argc;
+		} execve;
+		struct {
+			char *name;
+		} module;
+		struct {
+			struct audit_ntp_data ntp_data;
+			struct timespec64 tk_injoffset;
+		} time;
+	};
+	int fds[2];
+	struct audit_proctitle proctitle;
+};
+
+struct __kernel_sockaddr_storage {
+	union {
+		struct {
+			__kernel_sa_family_t ss_family;
+			char __data[126];
+		};
+		void *__align;
+	};
+};
+
+struct audit_ctl_mutex {
+	struct mutex lock;
+	void *owner;
+};
+
+struct pernet_operations {
+	struct list_head list;
+	int (*init)(struct net *);
+	void (*pre_exit)(struct net *);
+	void (*exit)(struct net *);
+	void (*exit_batch)(struct list_head *);
+	unsigned int *id;
+	size_t size;
+};
+
+struct audit_features {
+	__u32 vers;
+	__u32 mask;
+	__u32 features;
+	__u32 lock;
+};
+
+enum skb_drop_reason {
+	SKB_NOT_DROPPED_YET = 0,
+	SKB_CONSUMED = 1,
+	SKB_DROP_REASON_NOT_SPECIFIED = 2,
+	SKB_DROP_REASON_NO_SOCKET = 3,
+	SKB_DROP_REASON_PKT_TOO_SMALL = 4,
+	SKB_DROP_REASON_TCP_CSUM = 5,
+	SKB_DROP_REASON_SOCKET_FILTER = 6,
+	SKB_DROP_REASON_UDP_CSUM = 7,
+	SKB_DROP_REASON_NETFILTER_DROP = 8,
+	SKB_DROP_REASON_OTHERHOST = 9,
+	SKB_DROP_REASON_IP_CSUM = 10,
+	SKB_DROP_REASON_IP_INHDR = 11,
+	SKB_DROP_REASON_IP_RPFILTER = 12,
+	SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST = 13,
+	SKB_DROP_REASON_XFRM_POLICY = 14,
+	SKB_DROP_REASON_IP_NOPROTO = 15,
+	SKB_DROP_REASON_SOCKET_RCVBUFF = 16,
+	SKB_DROP_REASON_PROTO_MEM = 17,
+	SKB_DROP_REASON_TCP_MD5NOTFOUND = 18,
+	SKB_DROP_REASON_TCP_MD5UNEXPECTED = 19,
+	SKB_DROP_REASON_TCP_MD5FAILURE = 20,
+	SKB_DROP_REASON_SOCKET_BACKLOG = 21,
+	SKB_DROP_REASON_TCP_FLAGS = 22,
+	SKB_DROP_REASON_TCP_ZEROWINDOW = 23,
+	SKB_DROP_REASON_TCP_OLD_DATA = 24,
+	SKB_DROP_REASON_TCP_OVERWINDOW = 25,
+	SKB_DROP_REASON_TCP_OFOMERGE = 26,
+	SKB_DROP_REASON_TCP_RFC7323_PAWS = 27,
+	SKB_DROP_REASON_TCP_OLD_SEQUENCE = 28,
+	SKB_DROP_REASON_TCP_INVALID_SEQUENCE = 29,
+	SKB_DROP_REASON_TCP_RESET = 30,
+	SKB_DROP_REASON_TCP_INVALID_SYN = 31,
+	SKB_DROP_REASON_TCP_CLOSE = 32,
+	SKB_DROP_REASON_TCP_FASTOPEN = 33,
+	SKB_DROP_REASON_TCP_OLD_ACK = 34,
+	SKB_DROP_REASON_TCP_TOO_OLD_ACK = 35,
+	SKB_DROP_REASON_TCP_ACK_UNSENT_DATA = 36,
+	SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE = 37,
+	SKB_DROP_REASON_TCP_OFO_DROP = 38,
+	SKB_DROP_REASON_IP_OUTNOROUTES = 39,
+	SKB_DROP_REASON_BPF_CGROUP_EGRESS = 40,
+	SKB_DROP_REASON_IPV6DISABLED = 41,
+	SKB_DROP_REASON_NEIGH_CREATEFAIL = 42,
+	SKB_DROP_REASON_NEIGH_FAILED = 43,
+	SKB_DROP_REASON_NEIGH_QUEUEFULL = 44,
+	SKB_DROP_REASON_NEIGH_DEAD = 45,
+	SKB_DROP_REASON_TC_EGRESS = 46,
+	SKB_DROP_REASON_QDISC_DROP = 47,
+	SKB_DROP_REASON_CPU_BACKLOG = 48,
+	SKB_DROP_REASON_XDP = 49,
+	SKB_DROP_REASON_TC_INGRESS = 50,
+	SKB_DROP_REASON_UNHANDLED_PROTO = 51,
+	SKB_DROP_REASON_SKB_CSUM = 52,
+	SKB_DROP_REASON_SKB_GSO_SEG = 53,
+	SKB_DROP_REASON_SKB_UCOPY_FAULT = 54,
+	SKB_DROP_REASON_DEV_HDR = 55,
+	SKB_DROP_REASON_DEV_READY = 56,
+	SKB_DROP_REASON_FULL_RING = 57,
+	SKB_DROP_REASON_NOMEM = 58,
+	SKB_DROP_REASON_HDR_TRUNC = 59,
+	SKB_DROP_REASON_TAP_FILTER = 60,
+	SKB_DROP_REASON_TAP_TXFILTER = 61,
+	SKB_DROP_REASON_ICMP_CSUM = 62,
+	SKB_DROP_REASON_INVALID_PROTO = 63,
+	SKB_DROP_REASON_IP_INADDRERRORS = 64,
+	SKB_DROP_REASON_IP_INNOROUTES = 65,
+	SKB_DROP_REASON_PKT_TOO_BIG = 66,
+	SKB_DROP_REASON_DUP_FRAG = 67,
+	SKB_DROP_REASON_FRAG_REASM_TIMEOUT = 68,
+	SKB_DROP_REASON_FRAG_TOO_FAR = 69,
+	SKB_DROP_REASON_TCP_MINTTL = 70,
+	SKB_DROP_REASON_IPV6_BAD_EXTHDR = 71,
+	SKB_DROP_REASON_IPV6_NDISC_FRAG = 72,
+	SKB_DROP_REASON_IPV6_NDISC_HOP_LIMIT = 73,
+	SKB_DROP_REASON_IPV6_NDISC_BAD_CODE = 74,
+	SKB_DROP_REASON_IPV6_NDISC_BAD_OPTIONS = 75,
+	SKB_DROP_REASON_IPV6_NDISC_NS_OTHERHOST = 76,
+	SKB_DROP_REASON_QUEUE_PURGE = 77,
+	SKB_DROP_REASON_MAX = 78,
+	SKB_DROP_REASON_SUBSYS_MASK = 4294901760,
+};
+
+enum audit_nlgrps {
+	AUDIT_NLGRP_NONE = 0,
+	AUDIT_NLGRP_READLOG = 1,
+	__AUDIT_NLGRP_MAX = 2,
+};
+
+struct scm_creds {
+	u32 pid;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct netlink_skb_parms {
+	struct scm_creds creds;
+	__u32 portid;
+	__u32 dst_group;
+	__u32 flags;
+	struct sock *sk;
+	bool nsid_is_set;
+	int nsid;
+};
+
+struct audit_reply {
+	__u32 portid;
+	struct net *net;
+	struct sk_buff *skb;
+};
+
+struct audit_net {
+	struct sock *sk;
+};
+
+struct audit_buffer {
+	struct sk_buff *skb;
+	struct audit_context *ctx;
+	gfp_t gfp_mask;
+};
+
+struct netlink_kernel_cfg {
+	unsigned int groups;
+	unsigned int flags;
+	void (*input)(struct sk_buff *);
+	struct mutex *cb_mutex;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	void (*release)(struct sock *, unsigned long *);
+};
+
+struct audit_sig_info {
+	uid_t uid;
+	pid_t pid;
+	char ctx[0];
+};
+
+struct audit_tty_status {
+	__u32 enabled;
+	__u32 log_passwd;
+};
+
+struct audit_status {
+	__u32 mask;
+	__u32 enabled;
+	__u32 failure;
+	__u32 pid;
+	__u32 rate_limit;
+	__u32 backlog_limit;
+	__u32 lost;
+	__u32 backlog;
+	union {
+		__u32 version;
+		__u32 feature_bitmap;
+	};
+	__u32 backlog_wait_time;
+	__u32 backlog_wait_time_actual;
+};
+
+struct audit_netlink_list {
+	__u32 portid;
+	struct net *net;
+	struct sk_buff_head q;
+};
+
+enum {
+	Audit_equal = 0,
+	Audit_not_equal = 1,
+	Audit_bitmask = 2,
+	Audit_bittest = 3,
+	Audit_lt = 4,
+	Audit_gt = 5,
+	Audit_le = 6,
+	Audit_ge = 7,
+	Audit_bad = 8,
+};
+
+struct audit_field;
+
+struct audit_watch;
+
+struct audit_tree;
+
+struct audit_fsnotify_mark;
+
+struct audit_krule {
+	u32 pflags;
+	u32 flags;
+	u32 listnr;
+	u32 action;
+	u32 mask[64];
+	u32 buflen;
+	u32 field_count;
+	char *filterkey;
+	struct audit_field *fields;
+	struct audit_field *arch_f;
+	struct audit_field *inode_f;
+	struct audit_watch *watch;
+	struct audit_tree *tree;
+	struct audit_fsnotify_mark *exe;
+	struct list_head rlist;
+	struct list_head list;
+	u64 prio;
+};
+
+struct audit_entry {
+	struct list_head list;
+	struct callback_head rcu;
+	struct audit_krule rule;
+};
+
+struct audit_field {
+	u32 type;
+	union {
+		u32 val;
+		kuid_t uid;
+		kgid_t gid;
+		struct {
+			char *lsm_str;
+			void *lsm_rule;
+		};
+	};
+	u32 op;
+};
+
+struct audit_rule_data {
+	__u32 flags;
+	__u32 action;
+	__u32 field_count;
+	__u32 mask[64];
+	__u32 fields[64];
+	__u32 values[64];
+	__u32 fieldflags[64];
+	__u32 buflen;
+	char buf[0];
+};
+
+enum audit_nfcfgop {
+	AUDIT_XT_OP_REGISTER = 0,
+	AUDIT_XT_OP_REPLACE = 1,
+	AUDIT_XT_OP_UNREGISTER = 2,
+	AUDIT_NFT_OP_TABLE_REGISTER = 3,
+	AUDIT_NFT_OP_TABLE_UNREGISTER = 4,
+	AUDIT_NFT_OP_CHAIN_REGISTER = 5,
+	AUDIT_NFT_OP_CHAIN_UNREGISTER = 6,
+	AUDIT_NFT_OP_RULE_REGISTER = 7,
+	AUDIT_NFT_OP_RULE_UNREGISTER = 8,
+	AUDIT_NFT_OP_SET_REGISTER = 9,
+	AUDIT_NFT_OP_SET_UNREGISTER = 10,
+	AUDIT_NFT_OP_SETELEM_REGISTER = 11,
+	AUDIT_NFT_OP_SETELEM_UNREGISTER = 12,
+	AUDIT_NFT_OP_GEN_REGISTER = 13,
+	AUDIT_NFT_OP_OBJ_REGISTER = 14,
+	AUDIT_NFT_OP_OBJ_UNREGISTER = 15,
+	AUDIT_NFT_OP_OBJ_RESET = 16,
+	AUDIT_NFT_OP_FLOWTABLE_REGISTER = 17,
+	AUDIT_NFT_OP_FLOWTABLE_UNREGISTER = 18,
+	AUDIT_NFT_OP_SETELEM_RESET = 19,
+	AUDIT_NFT_OP_RULE_RESET = 20,
+	AUDIT_NFT_OP_INVALID = 21,
+};
+
+struct audit_nfcfgop_tab {
+	enum audit_nfcfgop op;
+	const char *s;
+};
+
+struct audit_aux_data {
+	struct audit_aux_data *next;
+	int type;
+};
+
+struct audit_chunk;
+
+struct audit_tree_refs {
+	struct audit_tree_refs *next;
+	struct audit_chunk *c[31];
+};
+
+enum auditsc_class_t {
+	AUDITSC_NATIVE = 0,
+	AUDITSC_COMPAT = 1,
+	AUDITSC_OPEN = 2,
+	AUDITSC_OPENAT = 3,
+	AUDITSC_SOCKETCALL = 4,
+	AUDITSC_EXECVE = 5,
+	AUDITSC_OPENAT2 = 6,
+	AUDITSC_NVALS = 7,
+};
+
+struct cpu_vfs_cap_data {
+	__u32 magic_etc;
+	kuid_t rootid;
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+};
+
+typedef int __kernel_key_t;
+
+typedef __kernel_key_t key_t;
+
+struct kern_ipc_perm {
+	spinlock_t lock;
+	bool deleted;
+	int id;
+	key_t key;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t cuid;
+	kgid_t cgid;
+	umode_t mode;
+	unsigned long seq;
+	void *security;
+	struct rhash_head khtnode;
+	struct callback_head rcu;
+	refcount_t refcount;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct audit_aux_data_bprm_fcaps {
+	struct audit_aux_data d;
+	struct audit_cap_data fcap;
+	unsigned int fcap_ver;
+	struct audit_cap_data old_pcap;
+	struct audit_cap_data new_pcap;
+};
+
+struct audit_aux_data_pids {
+	struct audit_aux_data d;
+	pid_t target_pid[16];
+	kuid_t target_auid[16];
+	kuid_t target_uid[16];
+	unsigned int target_sessionid[16];
+	u32 target_sid[16];
+	char target_comm[256];
+	int pid_count;
+};
+
+struct fanotify_response_info_header {
+	__u8 type;
+	__u8 pad;
+	__u16 len;
+};
+
+struct fanotify_response_info_audit_rule {
+	struct fanotify_response_info_header hdr;
+	__u32 rule_number;
+	__u32 subj_trust;
+	__u32 obj_trust;
+};
+
+struct inotify_group_private_data {
+	spinlock_t idr_lock;
+	struct idr idr;
+	struct ucounts *ucounts;
+};
+
+struct fsnotify_ops;
+
+struct fsnotify_event;
+
+struct fsnotify_group {
+	const struct fsnotify_ops *ops;
+	refcount_t refcnt;
+	spinlock_t notification_lock;
+	struct list_head notification_list;
+	wait_queue_head_t notification_waitq;
+	unsigned int q_len;
+	unsigned int max_events;
+	unsigned int priority;
+	bool shutdown;
+	int flags;
+	unsigned int owner_flags;
+	struct mutex mark_mutex;
+	atomic_t user_waits;
+	struct list_head marks_list;
+	struct fasync_struct *fsn_fa;
+	struct fsnotify_event *overflow_event;
+	struct mem_cgroup *memcg;
+	union {
+		void *private;
+		struct inotify_group_private_data inotify_data;
+	};
+};
+
+struct fsnotify_iter_info;
+
+struct fsnotify_mark;
+
+struct fsnotify_ops {
+	int (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *);
+	int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);
+	void (*free_group_priv)(struct fsnotify_group *);
+	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
+	void (*free_event)(struct fsnotify_group *, struct fsnotify_event *);
+	void (*free_mark)(struct fsnotify_mark *);
+};
+
+struct fsnotify_iter_info {
+	struct fsnotify_mark *marks[5];
+	struct fsnotify_group *current_group;
+	unsigned int report_mask;
+	int srcu_idx;
+};
+
+struct fsnotify_mark {
+	__u32 mask;
+	refcount_t refcnt;
+	struct fsnotify_group *group;
+	struct list_head g_list;
+	spinlock_t lock;
+	struct hlist_node obj_list;
+	struct fsnotify_mark_connector *connector;
+	__u32 ignore_mask;
+	unsigned int flags;
+};
+
+struct fsnotify_event {
+	struct list_head list;
+};
+
+enum fsnotify_obj_type {
+	FSNOTIFY_OBJ_TYPE_ANY = -1,
+	FSNOTIFY_OBJ_TYPE_INODE = 0,
+	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_OBJ_TYPE_SB = 2,
+	FSNOTIFY_OBJ_TYPE_COUNT = 3,
+	FSNOTIFY_OBJ_TYPE_DETACHED = 3,
+};
+
+struct audit_parent {
+	struct list_head watches;
+	struct fsnotify_mark mark;
+};
+
+struct audit_watch {
+	refcount_t count;
+	dev_t dev;
+	char *path;
+	unsigned long ino;
+	struct audit_parent *parent;
+	struct list_head wlist;
+	struct list_head rules;
+};
+
+struct audit_fsnotify_mark {
+	dev_t dev;
+	unsigned long ino;
+	char *path;
+	struct fsnotify_mark mark;
+	struct audit_krule *rule;
+};
+
+enum {
+	HASH_SIZE = 128,
+};
+
+struct audit_node {
+	struct list_head list;
+	struct audit_tree *owner;
+	unsigned int index;
+};
+
+struct audit_chunk {
+	struct list_head hash;
+	unsigned long key;
+	struct fsnotify_mark *mark;
+	struct list_head trees;
+	int count;
+	atomic_long_t refs;
+	struct callback_head head;
+	struct audit_node owners[0];
+};
+
+struct audit_tree {
+	refcount_t count;
+	int goner;
+	struct audit_chunk *root;
+	struct list_head chunks;
+	struct list_head rules;
+	struct list_head list;
+	struct list_head same_root;
+	struct callback_head head;
+	char pathname[0];
+};
+
+struct audit_tree_mark {
+	struct fsnotify_mark mark;
+	struct audit_chunk *chunk;
+};
+
+enum kprobe_slot_state {
+	SLOT_CLEAN = 0,
+	SLOT_DIRTY = 1,
+	SLOT_USED = 2,
+};
+
+enum perf_record_ksymbol_type {
+	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,
+	PERF_RECORD_KSYMBOL_TYPE_BPF = 1,
+	PERF_RECORD_KSYMBOL_TYPE_OOL = 2,
+	PERF_RECORD_KSYMBOL_TYPE_MAX = 3,
+};
+
+struct kprobe_insn_page {
+	struct list_head list;
+	kprobe_opcode_t *insns;
+	struct kprobe_insn_cache *cache;
+	int nused;
+	int ngarbage;
+	char slot_used[0];
+};
+
+struct kprobe_blacklist_entry {
+	struct list_head list;
+	unsigned long start_addr;
+	unsigned long end_addr;
+};
+
+enum stats_per_group {
+	STATS_SYSTEM = 0,
+	STATS_SOFTIRQ = 1,
+	STATS_HARDIRQ = 2,
+	STATS_IDLE = 3,
+	NUM_STATS_PER_GROUP = 4,
+};
+
+struct action_cache {
+	unsigned long allow_native[8];
+	unsigned long allow_compat[8];
+};
+
+struct notification;
+
+struct seccomp_filter {
+	refcount_t refs;
+	refcount_t users;
+	bool log;
+	bool wait_killable_recv;
+	struct action_cache cache;
+	struct seccomp_filter *prev;
+	struct bpf_prog *prog;
+	struct notification *notif;
+	struct mutex notify_lock;
+	wait_queue_head_t wqh;
+};
+
+struct notification {
+	atomic_t requests;
+	u32 flags;
+	u64 next_id;
+	struct list_head notifications;
+};
+
+struct seccomp_log_name {
+	u32 log;
+	const char *name;
+};
+
+enum notify_state {
+	SECCOMP_NOTIFY_INIT = 0,
+	SECCOMP_NOTIFY_SENT = 1,
+	SECCOMP_NOTIFY_REPLIED = 2,
+};
+
+struct seccomp_kaddfd {
+	struct file *file;
+	int fd;
+	unsigned int flags;
+	__u32 ioctl_flags;
+	union {
+		bool setfd;
+		int ret;
+	};
+	struct completion completion;
+	struct list_head list;
+};
+
+struct seccomp_knotif {
+	struct task_struct *task;
+	u64 id;
+	const struct seccomp_data *data;
+	enum notify_state state;
+	int error;
+	long val;
+	u32 flags;
+	struct completion ready;
+	struct list_head list;
+	struct list_head addfd;
+};
+
+typedef unsigned int (*bpf_dispatcher_fn)(const void *, const struct bpf_insn *, unsigned int (*)(const void *, const struct bpf_insn *));
+
+typedef unsigned int (*bpf_func_t)(const void *, const struct bpf_insn *);
+
+struct seccomp_notif_sizes {
+	__u16 seccomp_notif;
+	__u16 seccomp_notif_resp;
+	__u16 seccomp_data;
+};
+
+struct sock_fprog {
+	unsigned short len;
+	struct sock_filter __attribute__((btf_type_tag("user"))) *filter;
+};
+
+struct compat_sock_fprog {
+	u16 len;
+	compat_uptr_t filter;
+};
+
+typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
+
+struct seccomp_notif {
+	__u64 id;
+	__u32 pid;
+	__u32 flags;
+	struct seccomp_data data;
+};
+
+struct seccomp_notif_resp {
+	__u64 id;
+	__s64 val;
+	__s32 error;
+	__u32 flags;
+};
+
+struct seccomp_notif_addfd {
+	__u64 id;
+	__u32 flags;
+	__u32 srcfd;
+	__u32 newfd;
+	__u32 newfd_flags;
+};
+
+struct listener_list {
+	struct rw_semaphore sem;
+	struct list_head list;
+};
+
+struct genl_split_ops;
+
+struct genl_info;
+
+struct genl_ops;
+
+struct genl_small_ops;
+
+struct genl_multicast_group;
+
+struct genl_family {
+	unsigned int hdrsize;
+	char name[16];
+	unsigned int version;
+	unsigned int maxattr;
+	u8 netnsok: 1;
+	u8 parallel_ops: 1;
+	u8 n_ops;
+	u8 n_small_ops;
+	u8 n_split_ops;
+	u8 n_mcgrps;
+	u8 resv_start_op;
+	const struct nla_policy *policy;
+	int (*pre_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+	void (*post_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+	const struct genl_ops *ops;
+	const struct genl_small_ops *small_ops;
+	const struct genl_split_ops *split_ops;
+	const struct genl_multicast_group *mcgrps;
+	struct module *module;
+	int id;
+	unsigned int mcgrp_offset;
+	u64 android_kabi_reserved1;
+};
+
+struct genl_split_ops {
+	union {
+		struct {
+			int (*pre_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+			int (*doit)(struct sk_buff *, struct genl_info *);
+			void (*post_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+		};
+		struct {
+			int (*start)(struct netlink_callback *);
+			int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+			int (*done)(struct netlink_callback *);
+		};
+	};
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct genlmsghdr;
+
+struct genl_info {
+	u32 snd_seq;
+	u32 snd_portid;
+	const struct genl_family *family;
+	const struct nlmsghdr *nlhdr;
+	struct genlmsghdr *genlhdr;
+	struct nlattr **attrs;
+	possible_net_t _net;
+	void *user_ptr[2];
+	struct netlink_ext_ack *extack;
+};
+
+struct genlmsghdr {
+	__u8 cmd;
+	__u8 version;
+	__u16 reserved;
+};
+
+struct genl_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*start)(struct netlink_callback *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+	u64 android_kabi_reserved1;
+};
+
+struct genl_small_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct genl_multicast_group {
+	char name[16];
+	u8 flags;
+	u8 cap_sys_admin: 1;
+};
+
+enum {
+	TASKSTATS_CMD_UNSPEC = 0,
+	TASKSTATS_CMD_GET = 1,
+	TASKSTATS_CMD_NEW = 2,
+	__TASKSTATS_CMD_MAX = 3,
+};
+
+enum {
+	TASKSTATS_TYPE_UNSPEC = 0,
+	TASKSTATS_TYPE_PID = 1,
+	TASKSTATS_TYPE_TGID = 2,
+	TASKSTATS_TYPE_STATS = 3,
+	TASKSTATS_TYPE_AGGR_PID = 4,
+	TASKSTATS_TYPE_AGGR_TGID = 5,
+	TASKSTATS_TYPE_NULL = 6,
+	__TASKSTATS_TYPE_MAX = 7,
+};
+
+enum {
+	TASKSTATS_CMD_ATTR_UNSPEC = 0,
+	TASKSTATS_CMD_ATTR_PID = 1,
+	TASKSTATS_CMD_ATTR_TGID = 2,
+	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 3,
+	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 4,
+	__TASKSTATS_CMD_ATTR_MAX = 5,
+};
+
+enum actions {
+	REGISTER = 0,
+	DEREGISTER = 1,
+	CPU_DONT_CARE = 2,
+};
+
+enum {
+	CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
+	CGROUPSTATS_CMD_ATTR_FD = 1,
+	__CGROUPSTATS_CMD_ATTR_MAX = 2,
+};
+
+enum {
+	CGROUPSTATS_CMD_UNSPEC = 3,
+	CGROUPSTATS_CMD_GET = 4,
+	CGROUPSTATS_CMD_NEW = 5,
+	__CGROUPSTATS_CMD_MAX = 6,
+};
+
+enum {
+	CGROUPSTATS_TYPE_UNSPEC = 0,
+	CGROUPSTATS_TYPE_CGROUP_STATS = 1,
+	__CGROUPSTATS_TYPE_MAX = 2,
+};
+
+struct listener {
+	struct list_head list;
+	pid_t pid;
+	char valid;
+};
+
+struct tp_transition_snapshot {
+	unsigned long rcu;
+	unsigned long srcu;
+	bool ongoing;
+};
+
+enum tp_func_state {
+	TP_FUNC_0 = 0,
+	TP_FUNC_1 = 1,
+	TP_FUNC_2 = 2,
+	TP_FUNC_N = 3,
+};
+
+enum tp_transition_sync {
+	TP_TRANSITION_SYNC_1_0_1 = 0,
+	TP_TRANSITION_SYNC_N_2_1 = 1,
+	_NR_TP_TRANSITION_SYNC = 2,
+};
+
+struct tp_module {
+	struct list_head list;
+	struct module *mod;
+};
+
+struct tp_probes {
+	struct callback_head rcu;
+	struct tracepoint_func probes[0];
+};
+
+enum {
+	RB_LEN_TIME_EXTEND = 8,
+	RB_LEN_TIME_STAMP = 8,
+};
+
+enum {
+	RB_CTX_TRANSITION = 0,
+	RB_CTX_NMI = 1,
+	RB_CTX_IRQ = 2,
+	RB_CTX_SOFTIRQ = 3,
+	RB_CTX_NORMAL = 4,
+	RB_CTX_MAX = 5,
+};
+
+enum {
+	RB_ADD_STAMP_NONE = 0,
+	RB_ADD_STAMP_EXTEND = 2,
+	RB_ADD_STAMP_ABSOLUTE = 4,
+	RB_ADD_STAMP_FORCE = 8,
+};
+
+struct buffer_page {
+	struct list_head list;
+	local_t write;
+	unsigned int read;
+	local_t entries;
+	unsigned long real_end;
+	struct buffer_data_page *page;
+	u32 id;
+};
+
+struct ring_buffer_per_cpu;
+
+struct ring_buffer_iter {
+	struct ring_buffer_per_cpu *cpu_buffer;
+	unsigned long head;
+	unsigned long next_event;
+	struct buffer_page *head_page;
+	struct buffer_page *cache_reader_page;
+	unsigned long cache_read;
+	unsigned long cache_pages_removed;
+	u64 read_stamp;
+	u64 page_stamp;
+	struct ring_buffer_event *event;
+	int missed_events;
+};
+
+struct rb_time_struct {
+	local64_t time;
+};
+
+typedef struct rb_time_struct rb_time_t;
+
+struct rb_irq_work {
+	struct irq_work work;
+	wait_queue_head_t waiters;
+	wait_queue_head_t full_waiters;
+	bool waiters_pending;
+	bool full_waiters_pending;
+	bool wakeup_full;
+};
+
+struct ring_buffer_per_cpu {
+	int cpu;
+	atomic_t record_disabled;
+	atomic_t resize_disabled;
+	struct trace_buffer *buffer;
+	raw_spinlock_t reader_lock;
+	arch_spinlock_t lock;
+	struct lock_class_key lock_key;
+	struct buffer_data_page *free_page;
+	unsigned long nr_pages;
+	unsigned int current_context;
+	struct list_head *pages;
+	struct buffer_page *head_page;
+	struct buffer_page *tail_page;
+	struct buffer_page *commit_page;
+	struct buffer_page *reader_page;
+	unsigned long lost_events;
+	unsigned long last_overrun;
+	unsigned long nest;
+	local_t entries_bytes;
+	local_t entries;
+	local_t overrun;
+	local_t commit_overrun;
+	local_t dropped_events;
+	local_t committing;
+	local_t commits;
+	local_t pages_touched;
+	local_t pages_lost;
+	local_t pages_read;
+	long last_pages_touch;
+	size_t shortest_full;
+	unsigned long read;
+	unsigned long read_bytes;
+	rb_time_t write_stamp;
+	rb_time_t before_stamp;
+	u64 event_stamp[5];
+	u64 read_stamp;
+	unsigned long pages_removed;
+	int mapped;
+	struct mutex mapping_lock;
+	unsigned long *page_ids;
+	struct ring_buffer_meta *meta_page;
+	struct ring_buffer_writer *writer;
+	long nr_pages_to_update;
+	struct list_head new_pages;
+	struct work_struct update_pages_work;
+	struct completion update_done;
+	struct rb_irq_work irq_work;
+};
+
+struct trace_buffer {
+	unsigned int flags;
+	int cpus;
+	atomic_t record_disabled;
+	atomic_t resizing;
+	cpumask_var_t cpumask;
+	struct lock_class_key *reader_lock_key;
+	struct mutex mutex;
+	struct ring_buffer_per_cpu **buffers;
+	struct ring_buffer_writer *writer;
+	struct hlist_node node;
+	u64 (*clock)();
+	struct rb_irq_work irq_work;
+	bool time_stamp_abs;
+};
+
+struct rb_event_info {
+	u64 ts;
+	u64 delta;
+	u64 before;
+	u64 after;
+	unsigned long length;
+	struct buffer_page *tail_page;
+	int add_timestamp;
+};
+
+typedef bool (*ring_buffer_cond_fn)(void *);
+
+struct trace_array_cpu;
+
+struct array_buffer {
+	struct trace_array *tr;
+	struct trace_buffer *buffer;
+	struct trace_array_cpu __attribute__((btf_type_tag("percpu"))) *data;
+	u64 time_start;
+	int cpu;
+};
+
+struct trace_pid_list;
+
+struct trace_options;
+
+struct trace_func_repeats;
+
+struct trace_array {
+	struct list_head list;
+	char *name;
+	struct array_buffer array_buffer;
+	struct trace_pid_list __attribute__((btf_type_tag("rcu"))) *filtered_pids;
+	struct trace_pid_list __attribute__((btf_type_tag("rcu"))) *filtered_no_pids;
+	arch_spinlock_t max_lock;
+	int buffer_disabled;
+	int stop_count;
+	int clock_id;
+	int nr_topts;
+	bool clear_trace;
+	int buffer_percent;
+	unsigned int n_err_log_entries;
+	struct tracer *current_trace;
+	unsigned int trace_flags;
+	unsigned char trace_flags_index[32];
+	unsigned int flags;
+	raw_spinlock_t start_lock;
+	struct list_head err_log;
+	struct dentry *dir;
+	struct dentry *options;
+	struct dentry *percpu_dir;
+	struct eventfs_inode *event_dir;
+	struct trace_options *topts;
+	struct list_head systems;
+	struct list_head events;
+	struct trace_event_file *trace_marker_file;
+	cpumask_var_t tracing_cpumask;
+	cpumask_var_t pipe_cpumask;
+	int ref;
+	int trace_ref;
+	int no_filter_buffering_ref;
+	struct list_head hist_vars;
+	struct trace_func_repeats __attribute__((btf_type_tag("percpu"))) *last_func_repeats;
+};
+
+struct trace_array_cpu {
+	atomic_t disabled;
+	void *buffer_page;
+	unsigned long entries;
+	unsigned long saved_latency;
+	unsigned long critical_start;
+	unsigned long critical_end;
+	unsigned long critical_sequence;
+	unsigned long nice;
+	unsigned long policy;
+	unsigned long rt_priority;
+	unsigned long skipped_entries;
+	u64 preempt_timestamp;
+	pid_t pid;
+	kuid_t uid;
+	char comm[16];
+	bool ignore_pid;
+};
+
+union upper_chunk;
+
+union lower_chunk;
+
+struct trace_pid_list {
+	raw_spinlock_t lock;
+	struct irq_work refill_irqwork;
+	union upper_chunk *upper[256];
+	union upper_chunk *upper_list;
+	union lower_chunk *lower_list;
+	int free_upper_chunks;
+	int free_lower_chunks;
+};
+
+union upper_chunk {
+	union upper_chunk *next;
+	union lower_chunk *data[256];
+};
+
+union lower_chunk {
+	union lower_chunk *next;
+	unsigned long data[256];
+};
+
+struct tracer_flags;
+
+struct tracer {
+	const char *name;
+	int (*init)(struct trace_array *);
+	void (*reset)(struct trace_array *);
+	void (*start)(struct trace_array *);
+	void (*stop)(struct trace_array *);
+	int (*update_thresh)(struct trace_array *);
+	void (*open)(struct trace_iterator *);
+	void (*pipe_open)(struct trace_iterator *);
+	void (*close)(struct trace_iterator *);
+	void (*pipe_close)(struct trace_iterator *);
+	ssize_t (*read)(struct trace_iterator *, struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	void (*print_header)(struct seq_file *);
+	enum print_line_t (*print_line)(struct trace_iterator *);
+	int (*set_flag)(struct trace_array *, u32, u32, int);
+	int (*flag_changed)(struct trace_array *, u32, int);
+	struct tracer *next;
+	struct tracer_flags *flags;
+	int enabled;
+	bool print_max;
+	bool allow_instances;
+	bool noboot;
+};
+
+struct tracer_opt;
+
+struct tracer_flags {
+	u32 val;
+	struct tracer_opt *opts;
+	struct tracer *trace;
+};
+
+struct tracer_opt {
+	const char *name;
+	u32 bit;
+};
+
+struct trace_option_dentry;
+
+struct trace_options {
+	struct tracer *tracer;
+	struct trace_option_dentry *topts;
+};
+
+struct trace_option_dentry {
+	struct tracer_opt *opt;
+	struct tracer_flags *flags;
+	struct trace_array *tr;
+	struct dentry *entry;
+};
+
+struct filter_pred;
+
+struct prog_entry {
+	int target;
+	int when_to_branch;
+	struct filter_pred *pred;
+};
+
+struct event_subsystem;
+
+struct trace_subsystem_dir {
+	struct list_head list;
+	struct event_subsystem *subsystem;
+	struct trace_array *tr;
+	struct eventfs_inode *ei;
+	int ref_count;
+	int nr_events;
+};
+
+struct event_subsystem {
+	struct list_head list;
+	const char *name;
+	struct event_filter *filter;
+	int ref_count;
+};
+
+struct trace_func_repeats {
+	unsigned long ip;
+	unsigned long parent_ip;
+	unsigned long count;
+	u64 ts_last_call;
+};
+
+struct trace_export {
+	struct trace_export __attribute__((btf_type_tag("rcu"))) *next;
+	void (*write)(struct trace_export *, const void *, unsigned int);
+	int flags;
+};
+
+struct saved_cmdlines_buffer {
+	unsigned int map_pid_to_cmdline[32769];
+	unsigned int *map_cmdline_to_pid;
+	unsigned int cmdline_num;
+	int cmdline_idx;
+	char saved_cmdlines[0];
+};
+
+struct ftrace_stack {
+	unsigned long calls[1024];
+};
+
+struct ftrace_stacks {
+	struct ftrace_stack stacks[4];
+};
+
+struct trace_buffer_struct {
+	int nesting;
+	char buffer[4096];
+};
+
+enum trace_iterator_flags {
+	TRACE_ITER_PRINT_PARENT = 1,
+	TRACE_ITER_SYM_OFFSET = 2,
+	TRACE_ITER_SYM_ADDR = 4,
+	TRACE_ITER_VERBOSE = 8,
+	TRACE_ITER_RAW = 16,
+	TRACE_ITER_HEX = 32,
+	TRACE_ITER_BIN = 64,
+	TRACE_ITER_BLOCK = 128,
+	TRACE_ITER_FIELDS = 256,
+	TRACE_ITER_PRINTK = 512,
+	TRACE_ITER_ANNOTATE = 1024,
+	TRACE_ITER_USERSTACKTRACE = 2048,
+	TRACE_ITER_SYM_USEROBJ = 4096,
+	TRACE_ITER_PRINTK_MSGONLY = 8192,
+	TRACE_ITER_CONTEXT_INFO = 16384,
+	TRACE_ITER_LATENCY_FMT = 32768,
+	TRACE_ITER_RECORD_CMD = 65536,
+	TRACE_ITER_RECORD_TGID = 131072,
+	TRACE_ITER_OVERWRITE = 262144,
+	TRACE_ITER_STOP_ON_FREE = 524288,
+	TRACE_ITER_IRQ_INFO = 1048576,
+	TRACE_ITER_MARKERS = 2097152,
+	TRACE_ITER_EVENT_FORK = 4194304,
+	TRACE_ITER_PAUSE_ON_TRACE = 8388608,
+	TRACE_ITER_HASH_PTR = 16777216,
+	TRACE_ITER_STACKTRACE = 33554432,
+};
+
+enum trace_type {
+	__TRACE_FIRST_TYPE = 0,
+	TRACE_FN = 1,
+	TRACE_CTX = 2,
+	TRACE_WAKE = 3,
+	TRACE_STACK = 4,
+	TRACE_PRINT = 5,
+	TRACE_BPRINT = 6,
+	TRACE_MMIO_RW = 7,
+	TRACE_MMIO_MAP = 8,
+	TRACE_BRANCH = 9,
+	TRACE_GRAPH_RET = 10,
+	TRACE_GRAPH_ENT = 11,
+	TRACE_USER_STACK = 12,
+	TRACE_BLK = 13,
+	TRACE_BPUTS = 14,
+	TRACE_HWLAT = 15,
+	TRACE_OSNOISE = 16,
+	TRACE_TIMERLAT = 17,
+	TRACE_RAW_DATA = 18,
+	TRACE_FUNC_REPEATS = 19,
+	__TRACE_LAST_TYPE = 20,
+};
+
+enum trace_flag_type {
+	TRACE_FLAG_IRQS_OFF = 1,
+	TRACE_FLAG_IRQS_NOSUPPORT = 2,
+	TRACE_FLAG_NEED_RESCHED = 4,
+	TRACE_FLAG_HARDIRQ = 8,
+	TRACE_FLAG_SOFTIRQ = 16,
+	TRACE_FLAG_PREEMPT_RESCHED = 32,
+	TRACE_FLAG_NMI = 64,
+	TRACE_FLAG_BH_OFF = 128,
+};
+
+enum event_trigger_type {
+	ETT_NONE = 0,
+	ETT_TRACE_ONOFF = 1,
+	ETT_SNAPSHOT = 2,
+	ETT_STACKTRACE = 4,
+	ETT_EVENT_ENABLE = 8,
+	ETT_EVENT_HIST = 16,
+	ETT_HIST_ENABLE = 32,
+	ETT_EVENT_EPROBE = 64,
+};
+
+enum trace_iter_flags {
+	TRACE_FILE_LAT_FMT = 1,
+	TRACE_FILE_ANNOTATE = 2,
+	TRACE_FILE_TIME_IN_NS = 4,
+};
+
+enum {
+	EVENT_FILE_FL_ENABLED_BIT = 0,
+	EVENT_FILE_FL_RECORDED_CMD_BIT = 1,
+	EVENT_FILE_FL_RECORDED_TGID_BIT = 2,
+	EVENT_FILE_FL_FILTERED_BIT = 3,
+	EVENT_FILE_FL_NO_SET_FILTER_BIT = 4,
+	EVENT_FILE_FL_SOFT_MODE_BIT = 5,
+	EVENT_FILE_FL_SOFT_DISABLED_BIT = 6,
+	EVENT_FILE_FL_TRIGGER_MODE_BIT = 7,
+	EVENT_FILE_FL_TRIGGER_COND_BIT = 8,
+	EVENT_FILE_FL_PID_FILTER_BIT = 9,
+	EVENT_FILE_FL_WAS_ENABLED_BIT = 10,
+	EVENT_FILE_FL_FREED_BIT = 11,
+};
+
+enum {
+	TRACE_ARRAY_FL_GLOBAL = 1,
+};
+
+struct err_info {
+	const char **errs;
+	u8 type;
+	u16 pos;
+	u64 ts;
+};
+
+struct tracing_log_err {
+	struct list_head list;
+	struct err_info info;
+	char loc[128];
+	char *cmd;
+};
+
+struct buffer_ref {
+	struct trace_buffer *buffer;
+	void *page;
+	int cpu;
+	refcount_t refcount;
+};
+
+struct trace_parser {
+	bool cont;
+	char *buffer;
+	unsigned int idx;
+	unsigned int size;
+};
+
+struct userstack_entry {
+	struct trace_entry ent;
+	unsigned int tgid;
+	unsigned long caller[8];
+};
+
+struct func_repeats_entry {
+	struct trace_entry ent;
+	unsigned long ip;
+	unsigned long parent_ip;
+	u16 count;
+	u16 top_delta_ts;
+	u32 bottom_delta_ts;
+};
+
+typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
+
+struct partial_page;
+
+struct splice_pipe_desc {
+	struct page **pages;
+	struct partial_page *partial;
+	int nr_pages;
+	unsigned int nr_pages_max;
+	const struct pipe_buf_operations *ops;
+	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
+};
+
+struct partial_page {
+	unsigned int offset;
+	unsigned int len;
+	unsigned long private;
+};
+
+struct print_entry {
+	struct trace_entry ent;
+	unsigned long ip;
+	char buf[0];
+};
+
+struct bputs_entry {
+	struct trace_entry ent;
+	unsigned long ip;
+	const char *str;
+};
+
+typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
+
+struct ftrace_entry {
+	struct trace_entry ent;
+	unsigned long ip;
+	unsigned long parent_ip;
+};
+
+struct stack_entry {
+	struct trace_entry ent;
+	int size;
+	unsigned long caller[0];
+};
+
+struct bprint_entry {
+	struct trace_entry ent;
+	unsigned long ip;
+	const char *fmt;
+	u32 buf[0];
+};
+
+struct trace_min_max_param {
+	struct mutex *lock;
+	u64 *val;
+	u64 *min;
+	u64 *max;
+};
+
+struct raw_data_entry {
+	struct trace_entry ent;
+	unsigned int id;
+	char buf[0];
+};
+
+struct ftrace_buffer_info {
+	struct trace_iterator iter;
+	void *spare;
+	unsigned int spare_cpu;
+	unsigned int read;
+};
+
+struct trace_mark {
+	unsigned long long val;
+	char sym;
+};
+
+enum {
+	FILTER_OTHER = 0,
+	FILTER_STATIC_STRING = 1,
+	FILTER_DYN_STRING = 2,
+	FILTER_RDYN_STRING = 3,
+	FILTER_PTR_STRING = 4,
+	FILTER_TRACE_FN = 5,
+	FILTER_CPUMASK = 6,
+	FILTER_COMM = 7,
+	FILTER_CPU = 8,
+	FILTER_STACKTRACE = 9,
+};
+
+struct ftrace_event_field {
+	struct list_head link;
+	const char *name;
+	const char *type;
+	int filter_type;
+	int offset;
+	int size;
+	int is_signed;
+	int len;
+};
+
+struct ctx_switch_entry {
+	struct trace_entry ent;
+	unsigned int prev_pid;
+	unsigned int next_pid;
+	unsigned int next_cpu;
+	unsigned char prev_prio;
+	unsigned char prev_state;
+	unsigned char next_prio;
+	unsigned char next_state;
+};
+
+struct hwlat_entry {
+	struct trace_entry ent;
+	u64 duration;
+	u64 outer_duration;
+	u64 nmi_total_ts;
+	struct timespec64 timestamp;
+	unsigned int nmi_count;
+	unsigned int seqnum;
+	unsigned int count;
+};
+
+struct osnoise_entry {
+	struct trace_entry ent;
+	u64 noise;
+	u64 runtime;
+	u64 max_sample;
+	unsigned int hw_count;
+	unsigned int nmi_count;
+	unsigned int irq_count;
+	unsigned int softirq_count;
+	unsigned int thread_count;
+};
+
+struct timerlat_entry {
+	struct trace_entry ent;
+	unsigned int seqnum;
+	int context;
+	u64 timer_latency;
+};
+
+struct tracer_stat;
+
+struct stat_session {
+	struct list_head session_list;
+	struct tracer_stat *ts;
+	struct rb_root stat_root;
+	struct mutex stat_mutex;
+	struct dentry *file;
+};
+
+struct tracer_stat {
+	const char *name;
+	void * (*stat_start)(struct tracer_stat *);
+	void * (*stat_next)(void *, int);
+	cmp_func_t stat_cmp;
+	int (*stat_show)(struct seq_file *, void *);
+	void (*stat_release)(void *);
+	int (*stat_headers)(struct seq_file *);
+};
+
+struct stat_node {
+	struct rb_node node;
+	void *stat;
+};
+
+struct trace_bprintk_fmt {
+	struct list_head list;
+	const char *fmt;
+};
+
+struct tracing_map;
+
+struct tracing_map_field;
+
+struct tracing_map_elt {
+	struct tracing_map *map;
+	struct tracing_map_field *fields;
+	atomic64_t *vars;
+	bool *var_set;
+	void *key;
+	void *private_data;
+};
+
+typedef int (*tracing_map_cmp_fn_t)(void *, void *);
+
+struct tracing_map_field {
+	tracing_map_cmp_fn_t cmp_fn;
+	union {
+		atomic64_t sum;
+		unsigned int offset;
+	};
+};
+
+struct tracing_map_sort_key {
+	unsigned int field_idx;
+	bool descending;
+};
+
+struct tracing_map_array;
+
+struct tracing_map_ops;
+
+struct tracing_map {
+	unsigned int key_size;
+	unsigned int map_bits;
+	unsigned int map_size;
+	unsigned int max_elts;
+	atomic_t next_elt;
+	struct tracing_map_array *elts;
+	struct tracing_map_array *map;
+	const struct tracing_map_ops *ops;
+	void *private_data;
+	struct tracing_map_field fields[6];
+	unsigned int n_fields;
+	int key_idx[3];
+	unsigned int n_keys;
+	struct tracing_map_sort_key sort_key;
+	unsigned int n_vars;
+	atomic64_t hits;
+	atomic64_t drops;
+};
+
+struct tracing_map_array {
+	unsigned int entries_per_page;
+	unsigned int entry_size_shift;
+	unsigned int entry_shift;
+	unsigned int entry_mask;
+	unsigned int n_pages;
+	void **pages;
+};
+
+struct tracing_map_ops {
+	int (*elt_alloc)(struct tracing_map_elt *);
+	void (*elt_free)(struct tracing_map_elt *);
+	void (*elt_clear)(struct tracing_map_elt *);
+	void (*elt_init)(struct tracing_map_elt *);
+};
+
+struct tracing_map_entry {
+	u32 key;
+	struct tracing_map_elt *val;
+};
+
+struct tracing_map_sort_entry {
+	void *key;
+	struct tracing_map_elt *elt;
+	bool elt_copied;
+	bool dup;
+};
+
+enum {
+	TRACE_NOP_OPT_ACCEPT = 1,
+	TRACE_NOP_OPT_REFUSE = 2,
+};
+
+enum req_flag_bits {
+	__REQ_FAILFAST_DEV = 8,
+	__REQ_FAILFAST_TRANSPORT = 9,
+	__REQ_FAILFAST_DRIVER = 10,
+	__REQ_SYNC = 11,
+	__REQ_META = 12,
+	__REQ_PRIO = 13,
+	__REQ_NOMERGE = 14,
+	__REQ_IDLE = 15,
+	__REQ_INTEGRITY = 16,
+	__REQ_FUA = 17,
+	__REQ_PREFLUSH = 18,
+	__REQ_RAHEAD = 19,
+	__REQ_BACKGROUND = 20,
+	__REQ_NOWAIT = 21,
+	__REQ_POLLED = 22,
+	__REQ_ALLOC_CACHE = 23,
+	__REQ_SWAP = 24,
+	__REQ_DRV = 25,
+	__REQ_FS_PRIVATE = 26,
+	__REQ_NOUNMAP = 27,
+	__REQ_NR_BITS = 28,
+};
+
+enum req_op {
+	REQ_OP_READ = 0,
+	REQ_OP_WRITE = 1,
+	REQ_OP_FLUSH = 2,
+	REQ_OP_DISCARD = 3,
+	REQ_OP_SECURE_ERASE = 5,
+	REQ_OP_WRITE_ZEROES = 9,
+	REQ_OP_ZONE_OPEN = 10,
+	REQ_OP_ZONE_CLOSE = 11,
+	REQ_OP_ZONE_FINISH = 12,
+	REQ_OP_ZONE_APPEND = 13,
+	REQ_OP_ZONE_RESET = 15,
+	REQ_OP_ZONE_RESET_ALL = 17,
+	REQ_OP_DRV_IN = 34,
+	REQ_OP_DRV_OUT = 35,
+	REQ_OP_LAST = 36,
+};
+
+enum blk_crypto_mode_num {
+	BLK_ENCRYPTION_MODE_INVALID = 0,
+	BLK_ENCRYPTION_MODE_AES_256_XTS = 1,
+	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV = 2,
+	BLK_ENCRYPTION_MODE_ADIANTUM = 3,
+	BLK_ENCRYPTION_MODE_SM4_XTS = 4,
+	BLK_ENCRYPTION_MODE_MAX = 5,
+};
+
+enum blk_crypto_key_type {
+	BLK_CRYPTO_KEY_TYPE_STANDARD = 1,
+	BLK_CRYPTO_KEY_TYPE_HW_WRAPPED = 2,
+};
+
+enum mq_rq_state {
+	MQ_RQ_IDLE = 0,
+	MQ_RQ_IN_FLIGHT = 1,
+	MQ_RQ_COMPLETE = 2,
+};
+
+enum rq_end_io_ret {
+	RQ_END_IO_NONE = 0,
+	RQ_END_IO_FREE = 1,
+};
+
+struct blk_crypto_key;
+
+struct bio_crypt_ctx {
+	const struct blk_crypto_key *bc_key;
+	u64 bc_dun[4];
+};
+
+struct blk_crypto_config {
+	enum blk_crypto_mode_num crypto_mode;
+	unsigned int data_unit_size;
+	unsigned int dun_bytes;
+	enum blk_crypto_key_type key_type;
+};
+
+struct blk_crypto_key {
+	struct blk_crypto_config crypto_cfg;
+	unsigned int data_unit_size_bits;
+	unsigned int size;
+	u8 raw[128];
+};
+
+typedef enum rq_end_io_ret rq_end_io_fn(struct request *, blk_status_t);
+
+typedef __u32 req_flags_t;
+
+struct blk_crypto_keyslot;
+
+struct request {
+	struct request_queue *q;
+	struct blk_mq_ctx *mq_ctx;
+	struct blk_mq_hw_ctx *mq_hctx;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	int tag;
+	int internal_tag;
+	unsigned int timeout;
+	unsigned int __data_len;
+	sector_t __sector;
+	struct bio *bio;
+	struct bio *biotail;
+	union {
+		struct list_head queuelist;
+		struct request *rq_next;
+	};
+	struct block_device *part;
+	u64 alloc_time_ns;
+	u64 start_time_ns;
+	u64 io_start_time_ns;
+	unsigned short wbt_flags;
+	unsigned short stats_sectors;
+	unsigned short nr_phys_segments;
+	struct bio_crypt_ctx *crypt_ctx;
+	struct blk_crypto_keyslot *crypt_keyslot;
+	enum rw_hint write_hint;
+	unsigned short ioprio;
+	enum mq_rq_state state;
+	atomic_t ref;
+	unsigned long deadline;
+	union {
+		struct hlist_node hash;
+		struct llist_node ipi_list;
+	};
+	union {
+		struct rb_node rb_node;
+		struct bio_vec special_vec;
+	};
+	struct {
+		struct io_cq *icq;
+		void *priv[2];
+	} elv;
+	struct {
+		unsigned int seq;
+		rq_end_io_fn *saved_end_io;
+	} flush;
+	u64 fifo_time;
+	rq_end_io_fn *end_io;
+	void *end_io_data;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+};
+
+struct sbitmap_word;
+
+struct sbitmap {
+	unsigned int depth;
+	unsigned int shift;
+	unsigned int map_nr;
+	bool round_robin;
+	struct sbitmap_word *map;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *alloc_hint;
+};
+
+struct blk_mq_hw_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head dispatch;
+		unsigned long state;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct delayed_work run_work;
+	cpumask_var_t cpumask;
+	int next_cpu;
+	int next_cpu_batch;
+	unsigned long flags;
+	void *sched_data;
+	struct request_queue *queue;
+	struct blk_flush_queue *fq;
+	void *driver_data;
+	struct sbitmap ctx_map;
+	struct blk_mq_ctx *dispatch_from;
+	unsigned int dispatch_busy;
+	unsigned short type;
+	unsigned short nr_ctx;
+	struct blk_mq_ctx **ctxs;
+	spinlock_t dispatch_wait_lock;
+	wait_queue_entry_t dispatch_wait;
+	atomic_t wait_index;
+	struct blk_mq_tags *tags;
+	struct blk_mq_tags *sched_tags;
+	unsigned long run;
+	unsigned int numa_node;
+	unsigned int queue_num;
+	atomic_t nr_active;
+	struct hlist_node cpuhp_online;
+	struct hlist_node cpuhp_dead;
+	struct kobject kobj;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct list_head hctx_list;
+	u64 android_kabi_reserved1;
+};
+
+struct blk_flush_queue {
+	spinlock_t mq_flush_lock;
+	unsigned int flush_pending_idx: 1;
+	unsigned int flush_running_idx: 1;
+	blk_status_t rq_status;
+	unsigned long flush_pending_since;
+	struct list_head flush_queue[2];
+	unsigned long flush_data_in_flight;
+	struct request *flush_rq;
+};
+
+struct sbitmap_word {
+	unsigned long word;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long cleared;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbq_wait_state;
+
+struct sbitmap_queue {
+	struct sbitmap sb;
+	unsigned int wake_batch;
+	atomic_t wake_index;
+	struct sbq_wait_state *ws;
+	atomic_t ws_active;
+	unsigned int min_shallow_depth;
+	atomic_t completion_cnt;
+	atomic_t wakeup_cnt;
+};
+
+struct blk_mq_tags {
+	unsigned int nr_tags;
+	unsigned int nr_reserved_tags;
+	unsigned int active_queues;
+	struct sbitmap_queue bitmap_tags;
+	struct sbitmap_queue breserved_tags;
+	struct request **rqs;
+	struct request **static_rqs;
+	struct list_head page_list;
+	spinlock_t lock;
+	u64 android_oem_data1;
+};
+
+struct sbq_wait_state {
+	wait_queue_head_t wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct blk_mq_queue_data {
+	struct request *rq;
+	bool last;
+};
+
+struct blk_mq_queue_map {
+	unsigned int *mq_map;
+	unsigned int nr_queues;
+	unsigned int queue_offset;
+};
+
+struct blk_mq_tag_set {
+	const struct blk_mq_ops *ops;
+	struct blk_mq_queue_map map[3];
+	unsigned int nr_maps;
+	unsigned int nr_hw_queues;
+	unsigned int queue_depth;
+	unsigned int reserved_tags;
+	unsigned int cmd_size;
+	int numa_node;
+	unsigned int timeout;
+	unsigned int flags;
+	void *driver_data;
+	struct blk_mq_tags **tags;
+	struct blk_mq_tags *shared_tags;
+	struct mutex tag_list_lock;
+	struct list_head tag_list;
+	struct srcu_struct *srcu;
+	u64 android_kabi_reserved1;
+};
+
+struct boot_triggers {
+	const char *event;
+	char *trigger;
+};
+
+typedef int (*eventfs_callback)(const char *, umode_t *, void **, const struct file_operations **);
+
+struct eventfs_entry {
+	const char *name;
+	eventfs_callback callback;
+};
+
+enum {
+	TRACE_PIDS = 1,
+	TRACE_NO_PIDS = 2,
+};
+
+enum {
+	FORMAT_HEADER = 1,
+	FORMAT_FIELD_SEPERATOR = 2,
+	FORMAT_PRINTFMT = 3,
+};
+
+struct module_string {
+	struct list_head next;
+	struct module *module;
+	char *str;
+};
+
+enum perf_event_sample_format {
+	PERF_SAMPLE_IP = 1,
+	PERF_SAMPLE_TID = 2,
+	PERF_SAMPLE_TIME = 4,
+	PERF_SAMPLE_ADDR = 8,
+	PERF_SAMPLE_READ = 16,
+	PERF_SAMPLE_CALLCHAIN = 32,
+	PERF_SAMPLE_ID = 64,
+	PERF_SAMPLE_CPU = 128,
+	PERF_SAMPLE_PERIOD = 256,
+	PERF_SAMPLE_STREAM_ID = 512,
+	PERF_SAMPLE_RAW = 1024,
+	PERF_SAMPLE_BRANCH_STACK = 2048,
+	PERF_SAMPLE_REGS_USER = 4096,
+	PERF_SAMPLE_STACK_USER = 8192,
+	PERF_SAMPLE_WEIGHT = 16384,
+	PERF_SAMPLE_DATA_SRC = 32768,
+	PERF_SAMPLE_IDENTIFIER = 65536,
+	PERF_SAMPLE_TRANSACTION = 131072,
+	PERF_SAMPLE_REGS_INTR = 262144,
+	PERF_SAMPLE_PHYS_ADDR = 524288,
+	PERF_SAMPLE_AUX = 1048576,
+	PERF_SAMPLE_CGROUP = 2097152,
+	PERF_SAMPLE_DATA_PAGE_SIZE = 4194304,
+	PERF_SAMPLE_CODE_PAGE_SIZE = 8388608,
+	PERF_SAMPLE_WEIGHT_STRUCT = 16777216,
+	PERF_SAMPLE_MAX = 33554432,
+};
+
+typedef unsigned long perf_trace_t[1024];
+
+struct ustring_buffer {
+	char buffer[1024];
+};
+
+enum regex_type {
+	MATCH_FULL = 0,
+	MATCH_FRONT_ONLY = 1,
+	MATCH_MIDDLE_ONLY = 2,
+	MATCH_END_ONLY = 3,
+	MATCH_GLOB = 4,
+	MATCH_INDEX = 5,
+};
+
+enum filter_pred_fn {
+	FILTER_PRED_FN_NOP = 0,
+	FILTER_PRED_FN_64 = 1,
+	FILTER_PRED_FN_64_CPUMASK = 2,
+	FILTER_PRED_FN_S64 = 3,
+	FILTER_PRED_FN_U64 = 4,
+	FILTER_PRED_FN_32 = 5,
+	FILTER_PRED_FN_32_CPUMASK = 6,
+	FILTER_PRED_FN_S32 = 7,
+	FILTER_PRED_FN_U32 = 8,
+	FILTER_PRED_FN_16 = 9,
+	FILTER_PRED_FN_16_CPUMASK = 10,
+	FILTER_PRED_FN_S16 = 11,
+	FILTER_PRED_FN_U16 = 12,
+	FILTER_PRED_FN_8 = 13,
+	FILTER_PRED_FN_8_CPUMASK = 14,
+	FILTER_PRED_FN_S8 = 15,
+	FILTER_PRED_FN_U8 = 16,
+	FILTER_PRED_FN_COMM = 17,
+	FILTER_PRED_FN_STRING = 18,
+	FILTER_PRED_FN_STRLOC = 19,
+	FILTER_PRED_FN_STRRELLOC = 20,
+	FILTER_PRED_FN_PCHAR_USER = 21,
+	FILTER_PRED_FN_PCHAR = 22,
+	FILTER_PRED_FN_CPU = 23,
+	FILTER_PRED_FN_CPU_CPUMASK = 24,
+	FILTER_PRED_FN_CPUMASK = 25,
+	FILTER_PRED_FN_CPUMASK_CPU = 26,
+	FILTER_PRED_FN_FUNCTION = 27,
+	FILTER_PRED_FN_ = 28,
+	FILTER_PRED_TEST_VISITED = 29,
+};
+
+enum filter_op_ids {
+	OP_GLOB = 0,
+	OP_NE = 1,
+	OP_EQ = 2,
+	OP_LE = 3,
+	OP_LT = 4,
+	OP_GE = 5,
+	OP_GT = 6,
+	OP_BAND = 7,
+	OP_MAX = 8,
+};
+
+enum {
+	TOO_MANY_CLOSE = -1,
+	TOO_MANY_OPEN = -2,
+	MISSING_QUOTE = -3,
+};
+
+enum {
+	FILT_ERR_NONE = 0,
+	FILT_ERR_INVALID_OP = 1,
+	FILT_ERR_TOO_MANY_OPEN = 2,
+	FILT_ERR_TOO_MANY_CLOSE = 3,
+	FILT_ERR_MISSING_QUOTE = 4,
+	FILT_ERR_MISSING_BRACE_OPEN = 5,
+	FILT_ERR_MISSING_BRACE_CLOSE = 6,
+	FILT_ERR_OPERAND_TOO_LONG = 7,
+	FILT_ERR_EXPECT_STRING = 8,
+	FILT_ERR_EXPECT_DIGIT = 9,
+	FILT_ERR_ILLEGAL_FIELD_OP = 10,
+	FILT_ERR_FIELD_NOT_FOUND = 11,
+	FILT_ERR_ILLEGAL_INTVAL = 12,
+	FILT_ERR_BAD_SUBSYS_FILTER = 13,
+	FILT_ERR_TOO_MANY_PREDS = 14,
+	FILT_ERR_INVALID_FILTER = 15,
+	FILT_ERR_INVALID_CPULIST = 16,
+	FILT_ERR_IP_FIELD_ONLY = 17,
+	FILT_ERR_INVALID_VALUE = 18,
+	FILT_ERR_NO_FUNCTION = 19,
+	FILT_ERR_ERRNO = 20,
+	FILT_ERR_NO_FILTER = 21,
+};
+
+enum {
+	INVERT = 1,
+	PROCESS_AND = 2,
+	PROCESS_OR = 4,
+};
+
+struct regex;
+
+struct filter_pred {
+	struct regex *regex;
+	struct cpumask *mask;
+	unsigned short *ops;
+	struct ftrace_event_field *field;
+	u64 val;
+	u64 val2;
+	enum filter_pred_fn fn_num;
+	int offset;
+	int not;
+	int op;
+};
+
+typedef int (*regex_match_func)(char *, struct regex *, int);
+
+struct regex {
+	char pattern[256];
+	int len;
+	int field_len;
+	regex_match_func match;
+};
+
+struct filter_list {
+	struct list_head list;
+	struct event_filter *filter;
+};
+
+struct filter_parse_error {
+	int lasterr;
+	int lasterr_pos;
+};
+
+typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);
+
+struct event_trigger_data;
+
+struct event_trigger_ops;
+
+struct event_command {
+	struct list_head list;
+	char *name;
+	enum event_trigger_type trigger_type;
+	int flags;
+	int (*parse)(struct event_command *, struct trace_event_file *, char *, char *, char *);
+	int (*reg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg_all)(struct trace_event_file *);
+	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
+	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
+};
+
+struct event_trigger_data {
+	unsigned long count;
+	int ref;
+	int flags;
+	struct event_trigger_ops *ops;
+	struct event_command *cmd_ops;
+	struct event_filter __attribute__((btf_type_tag("rcu"))) *filter;
+	char *filter_str;
+	void *private_data;
+	bool paused;
+	bool paused_tmp;
+	struct list_head list;
+	char *name;
+	struct list_head named_list;
+	struct event_trigger_data *named_data;
+};
+
+struct event_trigger_ops {
+	void (*trigger)(struct event_trigger_data *, struct trace_buffer *, void *, struct ring_buffer_event *);
+	int (*init)(struct event_trigger_data *);
+	void (*free)(struct event_trigger_data *);
+	int (*print)(struct seq_file *, struct event_trigger_data *);
+};
+
+enum event_command_flags {
+	EVENT_CMD_FL_POST_TRIGGER = 1,
+	EVENT_CMD_FL_NEEDS_REC = 2,
+};
+
+enum {
+	EVENT_TRIGGER_FL_PROBE = 1,
+};
+
+struct enable_trigger_data {
+	struct trace_event_file *file;
+	bool enable;
+	bool hist;
+};
+
+struct dyn_event;
+
+struct dyn_event_operations {
+	struct list_head list;
+	int (*create)(const char *);
+	int (*show)(struct seq_file *, struct dyn_event *);
+	bool (*is_busy)(struct dyn_event *);
+	int (*free)(struct dyn_event *);
+	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
+};
+
+struct dyn_event {
+	struct list_head list;
+	struct dyn_event_operations *ops;
+};
+
+enum fetch_op {
+	FETCH_OP_NOP = 0,
+	FETCH_OP_REG = 1,
+	FETCH_OP_STACK = 2,
+	FETCH_OP_STACKP = 3,
+	FETCH_OP_RETVAL = 4,
+	FETCH_OP_IMM = 5,
+	FETCH_OP_COMM = 6,
+	FETCH_OP_ARG = 7,
+	FETCH_OP_FOFFS = 8,
+	FETCH_OP_DATA = 9,
+	FETCH_OP_DEREF = 10,
+	FETCH_OP_UDEREF = 11,
+	FETCH_OP_ST_RAW = 12,
+	FETCH_OP_ST_MEM = 13,
+	FETCH_OP_ST_UMEM = 14,
+	FETCH_OP_ST_STRING = 15,
+	FETCH_OP_ST_USTRING = 16,
+	FETCH_OP_ST_SYMSTR = 17,
+	FETCH_OP_MOD_BF = 18,
+	FETCH_OP_LP_ARRAY = 19,
+	FETCH_OP_TP_ARG = 20,
+	FETCH_OP_END = 21,
+	FETCH_NOP_SYMBOL = 22,
+};
+
+enum {
+	TP_ERR_FILE_NOT_FOUND = 0,
+	TP_ERR_NO_REGULAR_FILE = 1,
+	TP_ERR_BAD_REFCNT = 2,
+	TP_ERR_REFCNT_OPEN_BRACE = 3,
+	TP_ERR_BAD_REFCNT_SUFFIX = 4,
+	TP_ERR_BAD_UPROBE_OFFS = 5,
+	TP_ERR_BAD_MAXACT_TYPE = 6,
+	TP_ERR_BAD_MAXACT = 7,
+	TP_ERR_MAXACT_TOO_BIG = 8,
+	TP_ERR_BAD_PROBE_ADDR = 9,
+	TP_ERR_NON_UNIQ_SYMBOL = 10,
+	TP_ERR_BAD_RETPROBE = 11,
+	TP_ERR_NO_TRACEPOINT = 12,
+	TP_ERR_BAD_ADDR_SUFFIX = 13,
+	TP_ERR_NO_GROUP_NAME = 14,
+	TP_ERR_GROUP_TOO_LONG = 15,
+	TP_ERR_BAD_GROUP_NAME = 16,
+	TP_ERR_NO_EVENT_NAME = 17,
+	TP_ERR_EVENT_TOO_LONG = 18,
+	TP_ERR_BAD_EVENT_NAME = 19,
+	TP_ERR_EVENT_EXIST = 20,
+	TP_ERR_RETVAL_ON_PROBE = 21,
+	TP_ERR_NO_RETVAL = 22,
+	TP_ERR_BAD_STACK_NUM = 23,
+	TP_ERR_BAD_ARG_NUM = 24,
+	TP_ERR_BAD_VAR = 25,
+	TP_ERR_BAD_REG_NAME = 26,
+	TP_ERR_BAD_MEM_ADDR = 27,
+	TP_ERR_BAD_IMM = 28,
+	TP_ERR_IMMSTR_NO_CLOSE = 29,
+	TP_ERR_FILE_ON_KPROBE = 30,
+	TP_ERR_BAD_FILE_OFFS = 31,
+	TP_ERR_SYM_ON_UPROBE = 32,
+	TP_ERR_TOO_MANY_OPS = 33,
+	TP_ERR_DEREF_NEED_BRACE = 34,
+	TP_ERR_BAD_DEREF_OFFS = 35,
+	TP_ERR_DEREF_OPEN_BRACE = 36,
+	TP_ERR_COMM_CANT_DEREF = 37,
+	TP_ERR_BAD_FETCH_ARG = 38,
+	TP_ERR_ARRAY_NO_CLOSE = 39,
+	TP_ERR_BAD_ARRAY_SUFFIX = 40,
+	TP_ERR_BAD_ARRAY_NUM = 41,
+	TP_ERR_ARRAY_TOO_BIG = 42,
+	TP_ERR_BAD_TYPE = 43,
+	TP_ERR_BAD_STRING = 44,
+	TP_ERR_BAD_SYMSTRING = 45,
+	TP_ERR_BAD_BITFIELD = 46,
+	TP_ERR_ARG_NAME_TOO_LONG = 47,
+	TP_ERR_NO_ARG_NAME = 48,
+	TP_ERR_BAD_ARG_NAME = 49,
+	TP_ERR_USED_ARG_NAME = 50,
+	TP_ERR_ARG_TOO_LONG = 51,
+	TP_ERR_NO_ARG_BODY = 52,
+	TP_ERR_BAD_INSN_BNDRY = 53,
+	TP_ERR_FAIL_REG_PROBE = 54,
+	TP_ERR_DIFF_PROBE_TYPE = 55,
+	TP_ERR_DIFF_ARG_TYPE = 56,
+	TP_ERR_SAME_PROBE = 57,
+	TP_ERR_NO_EVENT_INFO = 58,
+	TP_ERR_BAD_ATTACH_EVENT = 59,
+	TP_ERR_BAD_ATTACH_ARG = 60,
+	TP_ERR_NO_EP_FILTER = 61,
+	TP_ERR_NOSUP_BTFARG = 62,
+	TP_ERR_NO_BTFARG = 63,
+	TP_ERR_NO_BTF_ENTRY = 64,
+	TP_ERR_BAD_VAR_ARGS = 65,
+	TP_ERR_NOFENTRY_ARGS = 66,
+	TP_ERR_DOUBLE_ARGS = 67,
+	TP_ERR_ARGS_2LONG = 68,
+	TP_ERR_ARGIDX_2BIG = 69,
+	TP_ERR_NO_PTR_STRCT = 70,
+	TP_ERR_NOSUP_DAT_ARG = 71,
+	TP_ERR_BAD_HYPHEN = 72,
+	TP_ERR_NO_BTF_FIELD = 73,
+	TP_ERR_BAD_BTF_TID = 74,
+	TP_ERR_BAD_TYPE4STR = 75,
+	TP_ERR_NEED_STRING_TYPE = 76,
+};
+
+enum probe_print_type {
+	PROBE_PRINT_NORMAL = 0,
+	PROBE_PRINT_RETURN = 1,
+	PROBE_PRINT_EVENT = 2,
+};
+
+struct eprobe_trace_entry_head {
+	struct trace_entry ent;
+};
+
+struct fetch_insn;
+
+struct fetch_type;
+
+struct probe_arg {
+	struct fetch_insn *code;
+	bool dynamic;
+	unsigned int offset;
+	unsigned int count;
+	const char *name;
+	const char *comm;
+	char *fmt;
+	const struct fetch_type *type;
+};
+
+struct trace_probe_event;
+
+struct trace_probe {
+	struct list_head list;
+	struct trace_probe_event *event;
+	ssize_t size;
+	unsigned int nr_args;
+	struct probe_arg args[0];
+};
+
+struct trace_eprobe {
+	const char *event_system;
+	const char *event_name;
+	char *filter_str;
+	struct trace_event_call *event;
+	struct dyn_event devent;
+	struct trace_probe tp;
+};
+
+struct trace_uprobe_filter {
+	rwlock_t rwlock;
+	int nr_systemwide;
+	struct list_head perf_events;
+};
+
+struct trace_probe_event {
+	unsigned int flags;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct list_head files;
+	struct list_head probes;
+	struct trace_uprobe_filter filter[0];
+};
+
+struct fetch_insn {
+	enum fetch_op op;
+	union {
+		unsigned int param;
+		struct {
+			unsigned int size;
+			int offset;
+		};
+		struct {
+			unsigned char basesize;
+			unsigned char lshift;
+			unsigned char rshift;
+		};
+		unsigned long immediate;
+		void *data;
+	};
+};
+
+typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
+
+struct fetch_type {
+	const char *name;
+	size_t size;
+	bool is_signed;
+	bool is_string;
+	print_type_func_t print;
+	const char *fmt;
+	const char *fmttype;
+};
+
+struct btf_param;
+
+struct traceprobe_parse_context {
+	struct trace_event_call *event;
+	const char *funcname;
+	const struct btf_type *proto;
+	const struct btf_param *params;
+	s32 nr_params;
+	struct btf *btf;
+	const struct btf_type *last_type;
+	u32 last_bitoffs;
+	u32 last_bitsize;
+	unsigned int flags;
+	int offset;
+};
+
+struct btf_param {
+	__u32 name_off;
+	__u32 type;
+};
+
+struct eprobe_data {
+	struct trace_event_file *file;
+	struct trace_eprobe *ep;
+};
+
+struct event_file_link {
+	struct trace_event_file *file;
+	struct list_head list;
+};
+
+enum dynevent_type {
+	DYNEVENT_TYPE_SYNTH = 1,
+	DYNEVENT_TYPE_KPROBE = 2,
+	DYNEVENT_TYPE_NONE = 3,
+};
+
+enum {
+	SYNTH_ERR_BAD_NAME = 0,
+	SYNTH_ERR_INVALID_CMD = 1,
+	SYNTH_ERR_INVALID_DYN_CMD = 2,
+	SYNTH_ERR_EVENT_EXISTS = 3,
+	SYNTH_ERR_TOO_MANY_FIELDS = 4,
+	SYNTH_ERR_INCOMPLETE_TYPE = 5,
+	SYNTH_ERR_INVALID_TYPE = 6,
+	SYNTH_ERR_INVALID_FIELD = 7,
+	SYNTH_ERR_INVALID_ARRAY_SPEC = 8,
+};
+
+struct trace_dynamic_info {
+	u16 offset;
+	u16 len;
+};
+
+union trace_synth_field {
+	u8 as_u8;
+	u16 as_u16;
+	u32 as_u32;
+	u64 as_u64;
+	struct trace_dynamic_info as_dynamic;
+};
+
+struct synth_trace_event {
+	struct trace_entry ent;
+	union trace_synth_field fields[0];
+};
+
+struct synth_field;
+
+struct synth_event {
+	struct dyn_event devent;
+	int ref;
+	char *name;
+	struct synth_field **fields;
+	unsigned int n_fields;
+	struct synth_field **dynamic_fields;
+	unsigned int n_dynamic_fields;
+	unsigned int n_u64;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct tracepoint *tp;
+	struct module *mod;
+};
+
+struct synth_field {
+	char *type;
+	char *name;
+	size_t size;
+	unsigned int offset;
+	unsigned int field_pos;
+	bool is_signed;
+	bool is_string;
+	bool is_dynamic;
+	bool is_stack;
+};
+
+struct dynevent_arg_pair {
+	const char *lhs;
+	const char *rhs;
+	char operator;
+	char separator;
+};
+
+struct dynevent_cmd;
+
+typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *);
+
+struct dynevent_cmd {
+	struct seq_buf seq;
+	const char *event_name;
+	unsigned int n_fields;
+	enum dynevent_type type;
+	dynevent_create_fn_t run_command;
+	void *private_data;
+};
+
+typedef int (*dynevent_check_arg_fn_t)(void *);
+
+struct dynevent_arg {
+	const char *str;
+	char separator;
+};
+
+struct synth_event_trace_state {
+	struct trace_event_buffer fbuffer;
+	struct synth_trace_event *entry;
+	struct trace_buffer *buffer;
+	struct synth_event *event;
+	unsigned int cur_field;
+	unsigned int n_u64;
+	bool disabled;
+	bool add_next;
+	bool add_name;
+};
+
+struct synth_field_desc {
+	const char *type;
+	const char *name;
+};
+
+enum hist_field_fn {
+	HIST_FIELD_FN_NOP = 0,
+	HIST_FIELD_FN_VAR_REF = 1,
+	HIST_FIELD_FN_COUNTER = 2,
+	HIST_FIELD_FN_CONST = 3,
+	HIST_FIELD_FN_LOG2 = 4,
+	HIST_FIELD_FN_BUCKET = 5,
+	HIST_FIELD_FN_TIMESTAMP = 6,
+	HIST_FIELD_FN_CPU = 7,
+	HIST_FIELD_FN_STRING = 8,
+	HIST_FIELD_FN_DYNSTRING = 9,
+	HIST_FIELD_FN_RELDYNSTRING = 10,
+	HIST_FIELD_FN_PSTRING = 11,
+	HIST_FIELD_FN_S64 = 12,
+	HIST_FIELD_FN_U64 = 13,
+	HIST_FIELD_FN_S32 = 14,
+	HIST_FIELD_FN_U32 = 15,
+	HIST_FIELD_FN_S16 = 16,
+	HIST_FIELD_FN_U16 = 17,
+	HIST_FIELD_FN_S8 = 18,
+	HIST_FIELD_FN_U8 = 19,
+	HIST_FIELD_FN_UMINUS = 20,
+	HIST_FIELD_FN_MINUS = 21,
+	HIST_FIELD_FN_PLUS = 22,
+	HIST_FIELD_FN_DIV = 23,
+	HIST_FIELD_FN_MULT = 24,
+	HIST_FIELD_FN_DIV_POWER2 = 25,
+	HIST_FIELD_FN_DIV_NOT_POWER2 = 26,
+	HIST_FIELD_FN_DIV_MULT_SHIFT = 27,
+	HIST_FIELD_FN_EXECNAME = 28,
+	HIST_FIELD_FN_STACK = 29,
+};
+
+enum field_op_id {
+	FIELD_OP_NONE = 0,
+	FIELD_OP_PLUS = 1,
+	FIELD_OP_MINUS = 2,
+	FIELD_OP_UNARY_MINUS = 3,
+	FIELD_OP_DIV = 4,
+	FIELD_OP_MULT = 5,
+};
+
+enum handler_id {
+	HANDLER_ONMATCH = 1,
+	HANDLER_ONMAX = 2,
+	HANDLER_ONCHANGE = 3,
+};
+
+enum action_id {
+	ACTION_SAVE = 1,
+	ACTION_TRACE = 2,
+	ACTION_SNAPSHOT = 3,
+};
+
+enum hist_field_flags {
+	HIST_FIELD_FL_HITCOUNT = 1,
+	HIST_FIELD_FL_KEY = 2,
+	HIST_FIELD_FL_STRING = 4,
+	HIST_FIELD_FL_HEX = 8,
+	HIST_FIELD_FL_SYM = 16,
+	HIST_FIELD_FL_SYM_OFFSET = 32,
+	HIST_FIELD_FL_EXECNAME = 64,
+	HIST_FIELD_FL_SYSCALL = 128,
+	HIST_FIELD_FL_STACKTRACE = 256,
+	HIST_FIELD_FL_LOG2 = 512,
+	HIST_FIELD_FL_TIMESTAMP = 1024,
+	HIST_FIELD_FL_TIMESTAMP_USECS = 2048,
+	HIST_FIELD_FL_VAR = 4096,
+	HIST_FIELD_FL_EXPR = 8192,
+	HIST_FIELD_FL_VAR_REF = 16384,
+	HIST_FIELD_FL_CPU = 32768,
+	HIST_FIELD_FL_ALIAS = 65536,
+	HIST_FIELD_FL_BUCKET = 131072,
+	HIST_FIELD_FL_CONST = 262144,
+	HIST_FIELD_FL_PERCENT = 524288,
+	HIST_FIELD_FL_GRAPH = 1048576,
+};
+
+enum {
+	HIST_ERR_NONE = 0,
+	HIST_ERR_DUPLICATE_VAR = 1,
+	HIST_ERR_VAR_NOT_UNIQUE = 2,
+	HIST_ERR_TOO_MANY_VARS = 3,
+	HIST_ERR_MALFORMED_ASSIGNMENT = 4,
+	HIST_ERR_NAMED_MISMATCH = 5,
+	HIST_ERR_TRIGGER_EEXIST = 6,
+	HIST_ERR_TRIGGER_ENOENT_CLEAR = 7,
+	HIST_ERR_SET_CLOCK_FAIL = 8,
+	HIST_ERR_BAD_FIELD_MODIFIER = 9,
+	HIST_ERR_TOO_MANY_SUBEXPR = 10,
+	HIST_ERR_TIMESTAMP_MISMATCH = 11,
+	HIST_ERR_TOO_MANY_FIELD_VARS = 12,
+	HIST_ERR_EVENT_FILE_NOT_FOUND = 13,
+	HIST_ERR_HIST_NOT_FOUND = 14,
+	HIST_ERR_HIST_CREATE_FAIL = 15,
+	HIST_ERR_SYNTH_VAR_NOT_FOUND = 16,
+	HIST_ERR_SYNTH_EVENT_NOT_FOUND = 17,
+	HIST_ERR_SYNTH_TYPE_MISMATCH = 18,
+	HIST_ERR_SYNTH_COUNT_MISMATCH = 19,
+	HIST_ERR_FIELD_VAR_PARSE_FAIL = 20,
+	HIST_ERR_VAR_CREATE_FIND_FAIL = 21,
+	HIST_ERR_ONX_NOT_VAR = 22,
+	HIST_ERR_ONX_VAR_NOT_FOUND = 23,
+	HIST_ERR_ONX_VAR_CREATE_FAIL = 24,
+	HIST_ERR_FIELD_VAR_CREATE_FAIL = 25,
+	HIST_ERR_TOO_MANY_PARAMS = 26,
+	HIST_ERR_PARAM_NOT_FOUND = 27,
+	HIST_ERR_INVALID_PARAM = 28,
+	HIST_ERR_ACTION_NOT_FOUND = 29,
+	HIST_ERR_NO_SAVE_PARAMS = 30,
+	HIST_ERR_TOO_MANY_SAVE_ACTIONS = 31,
+	HIST_ERR_ACTION_MISMATCH = 32,
+	HIST_ERR_NO_CLOSING_PAREN = 33,
+	HIST_ERR_SUBSYS_NOT_FOUND = 34,
+	HIST_ERR_INVALID_SUBSYS_EVENT = 35,
+	HIST_ERR_INVALID_REF_KEY = 36,
+	HIST_ERR_VAR_NOT_FOUND = 37,
+	HIST_ERR_FIELD_NOT_FOUND = 38,
+	HIST_ERR_EMPTY_ASSIGNMENT = 39,
+	HIST_ERR_INVALID_SORT_MODIFIER = 40,
+	HIST_ERR_EMPTY_SORT_FIELD = 41,
+	HIST_ERR_TOO_MANY_SORT_FIELDS = 42,
+	HIST_ERR_INVALID_SORT_FIELD = 43,
+	HIST_ERR_INVALID_STR_OPERAND = 44,
+	HIST_ERR_EXPECT_NUMBER = 45,
+	HIST_ERR_UNARY_MINUS_SUBEXPR = 46,
+	HIST_ERR_DIVISION_BY_ZERO = 47,
+	HIST_ERR_NEED_NOHC_VAL = 48,
+};
+
+struct hist_trigger_data;
+
+struct hist_var_data {
+	struct list_head list;
+	struct hist_trigger_data *hist_data;
+};
+
+struct hist_field;
+
+struct hist_trigger_attrs;
+
+struct action_data;
+
+struct field_var;
+
+struct field_var_hist;
+
+struct hist_trigger_data {
+	struct hist_field *fields[22];
+	unsigned int n_vals;
+	unsigned int n_keys;
+	unsigned int n_fields;
+	unsigned int n_vars;
+	unsigned int n_var_str;
+	unsigned int key_size;
+	struct tracing_map_sort_key sort_keys[2];
+	unsigned int n_sort_keys;
+	struct trace_event_file *event_file;
+	struct hist_trigger_attrs *attrs;
+	struct tracing_map *map;
+	bool enable_timestamps;
+	bool remove;
+	struct hist_field *var_refs[16];
+	unsigned int n_var_refs;
+	struct action_data *actions[8];
+	unsigned int n_actions;
+	struct field_var *field_vars[64];
+	unsigned int n_field_vars;
+	unsigned int n_field_var_str;
+	struct field_var_hist *field_var_hists[64];
+	unsigned int n_field_var_hists;
+	struct field_var *save_vars[64];
+	unsigned int n_save_vars;
+	unsigned int n_save_var_str;
+};
+
+struct hist_var {
+	char *name;
+	struct hist_trigger_data *hist_data;
+	unsigned int idx;
+};
+
+struct hist_field {
+	struct ftrace_event_field *field;
+	unsigned long flags;
+	unsigned long buckets;
+	const char *type;
+	struct hist_field *operands[2];
+	struct hist_trigger_data *hist_data;
+	enum hist_field_fn fn_num;
+	unsigned int ref;
+	unsigned int size;
+	unsigned int offset;
+	unsigned int is_signed;
+	struct hist_var var;
+	enum field_op_id operator;
+	char *system;
+	char *event_name;
+	char *name;
+	unsigned int var_ref_idx;
+	bool read_once;
+	unsigned int var_str_idx;
+	u64 constant;
+	u64 div_multiplier;
+};
+
+struct var_defs {
+	unsigned int n_vars;
+	char *name[16];
+	char *expr[16];
+};
+
+struct hist_trigger_attrs {
+	char *keys_str;
+	char *vals_str;
+	char *sort_key_str;
+	char *name;
+	char *clock;
+	bool pause;
+	bool cont;
+	bool clear;
+	bool ts_in_usecs;
+	bool no_hitcount;
+	unsigned int map_bits;
+	char *assignment_str[16];
+	unsigned int n_assignments;
+	char *action_str[8];
+	unsigned int n_actions;
+	struct var_defs var_defs;
+};
+
+typedef bool (*check_track_val_fn_t)(u64, u64);
+
+typedef void (*action_fn_t)(struct hist_trigger_data *, struct tracing_map_elt *, struct trace_buffer *, void *, struct ring_buffer_event *, void *, struct action_data *, u64 *);
+
+struct action_data {
+	enum handler_id handler;
+	enum action_id action;
+	char *action_name;
+	action_fn_t fn;
+	unsigned int n_params;
+	char *params[64];
+	unsigned int var_ref_idx[64];
+	struct synth_event *synth_event;
+	bool use_trace_keyword;
+	char *synth_event_name;
+	union {
+		struct {
+			char *event;
+			char *event_system;
+		} match_data;
+		struct {
+			char *var_str;
+			struct hist_field *var_ref;
+			struct hist_field *track_var;
+			check_track_val_fn_t check_val;
+			action_fn_t save_data;
+		} track_data;
+	};
+};
+
+struct field_var {
+	struct hist_field *var;
+	struct hist_field *val;
+};
+
+struct field_var_hist {
+	struct hist_trigger_data *hist_data;
+	char *cmd;
+};
+
+struct hist_val_stat {
+	u64 max;
+	u64 total;
+};
+
+struct hist_elt_data {
+	char *comm;
+	u64 *var_ref_vals;
+	char **field_var_str;
+	int n_field_var_str;
+};
+
+typedef void (*synth_probe_func_t)(void *, u64 *, unsigned int *);
+
+struct track_data {
+	u64 track_val;
+	bool updated;
+	unsigned int key_len;
+	void *key;
+	struct tracing_map_elt elt;
+	struct action_data *action_data;
+	struct hist_trigger_data *hist_data;
+};
+
+struct bpf_mem_caches;
+
+struct bpf_mem_cache;
+
+struct bpf_mem_alloc {
+	struct bpf_mem_caches __attribute__((btf_type_tag("percpu"))) *caches;
+	struct bpf_mem_cache __attribute__((btf_type_tag("percpu"))) *cache;
+	bool percpu;
+	struct work_struct work;
+};
+
+struct bpf_local_storage_map_bucket;
+
+struct bpf_local_storage_map {
+	struct bpf_map map;
+	struct bpf_local_storage_map_bucket *buckets;
+	u32 bucket_log;
+	u16 elem_size;
+	u16 cache_idx;
+	struct bpf_mem_alloc selem_ma;
+	struct bpf_mem_alloc storage_ma;
+	bool bpf_ma;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_local_storage_map_bucket {
+	struct hlist_head list;
+	raw_spinlock_t lock;
+};
+
+struct bpf_mem_cache {
+	struct llist_head free_llist;
+	local_t active;
+	struct llist_head free_llist_extra;
+	struct irq_work refill_work;
+	struct obj_cgroup *objcg;
+	int unit_size;
+	int free_cnt;
+	int low_watermark;
+	int high_watermark;
+	int batch;
+	int percpu_size;
+	bool draining;
+	struct bpf_mem_cache *tgt;
+	struct llist_head free_by_rcu;
+	struct llist_node *free_by_rcu_tail;
+	struct llist_head waiting_for_gp;
+	struct llist_node *waiting_for_gp_tail;
+	struct callback_head rcu;
+	atomic_t call_rcu_in_progress;
+	struct llist_head free_llist_extra_rcu;
+	struct llist_head free_by_rcu_ttrace;
+	struct llist_head waiting_for_gp_ttrace;
+	struct callback_head rcu_ttrace;
+	atomic_t call_rcu_ttrace_in_progress;
+};
+
+struct bpf_mem_caches {
+	struct bpf_mem_cache cache[11];
+};
+
+struct bpf_local_storage_data {
+	struct bpf_local_storage_map __attribute__((btf_type_tag("rcu"))) *smap;
+	u8 data[0];
+};
+
+struct bpf_id_pair {
+	u32 old;
+	u32 cur;
+};
+
+struct bpf_idmap {
+	u32 tmp_id_gen;
+	struct bpf_id_pair map[600];
+};
+
+struct bpf_idset {
+	u32 count;
+	u32 ids[600];
+};
+
+struct bpf_verifier_log {
+	u64 start_pos;
+	u64 end_pos;
+	char __attribute__((btf_type_tag("user"))) *ubuf;
+	u32 level;
+	u32 len_total;
+	u32 len_max;
+	char kbuf[1024];
+};
+
+struct bpf_subprog_info {
+	u32 start;
+	u32 linfo_idx;
+	u16 stack_depth;
+	bool has_tail_call;
+	bool tail_call_reachable;
+	bool has_ld_abs;
+	bool is_async_cb;
+	u64 android_kabi_reserved1;
+};
+
+struct backtrack_state {
+	struct bpf_verifier_env *env;
+	u32 frame;
+	u32 reg_masks[8];
+	u64 stack_masks[8];
+};
+
+typedef sockptr_t bpfptr_t;
+
+struct bpf_verifier_ops;
+
+struct bpf_verifier_stack_elem;
+
+struct bpf_verifier_state;
+
+struct bpf_verifier_state_list;
+
+struct bpf_insn_aux_data;
+
+struct bpf_verifier_env {
+	u32 insn_idx;
+	u32 prev_insn_idx;
+	struct bpf_prog *prog;
+	const struct bpf_verifier_ops *ops;
+	struct bpf_verifier_stack_elem *head;
+	int stack_size;
+	bool strict_alignment;
+	bool test_state_freq;
+	struct bpf_verifier_state *cur_state;
+	struct bpf_verifier_state_list **explored_states;
+	struct bpf_verifier_state_list *free_list;
+	struct bpf_map *used_maps[64];
+	struct btf_mod_pair used_btfs[64];
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 id_gen;
+	bool explore_alu_limits;
+	bool allow_ptr_leaks;
+	bool allow_uninit_stack;
+	bool bpf_capable;
+	bool bypass_spec_v1;
+	bool bypass_spec_v4;
+	bool seen_direct_write;
+	struct bpf_insn_aux_data *insn_aux_data;
+	const struct bpf_line_info *prev_linfo;
+	struct bpf_verifier_log log;
+	struct bpf_subprog_info subprog_info[257];
+	union {
+		struct bpf_idmap idmap_scratch;
+		struct bpf_idset idset_scratch;
+	};
+	struct {
+		int *insn_state;
+		int *insn_stack;
+		int cur_stack;
+	} cfg;
+	struct backtrack_state bt;
+	u32 pass_cnt;
+	u32 subprog_cnt;
+	u32 prev_insn_processed;
+	u32 insn_processed;
+	u32 prev_jmps_processed;
+	u32 jmps_processed;
+	u64 verification_time;
+	u32 max_states_per_insn;
+	u32 total_states;
+	u32 peak_states;
+	u32 longest_mark_read_walk;
+	bpfptr_t fd_array;
+	u32 scratched_regs;
+	u64 scratched_stack_slots;
+	u64 prev_log_pos;
+	u64 prev_insn_print_pos;
+	char tmp_str_buf[320];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum bpf_access_type {
+	BPF_READ = 1,
+	BPF_WRITE = 2,
+};
+
+struct bpf_insn_access_aux;
+
+struct bpf_reg_state;
+
+struct bpf_verifier_ops {
+	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
+	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
+	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
+	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
+	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+	int (*btf_struct_access)(struct bpf_verifier_log *, const struct bpf_reg_state *, int, int);
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_insn_access_aux {
+	enum bpf_reg_type reg_type;
+	union {
+		int ctx_field_size;
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+	};
+	struct bpf_verifier_log *log;
+};
+
+enum bpf_dynptr_type {
+	BPF_DYNPTR_TYPE_INVALID = 0,
+	BPF_DYNPTR_TYPE_LOCAL = 1,
+	BPF_DYNPTR_TYPE_RINGBUF = 2,
+	BPF_DYNPTR_TYPE_SKB = 3,
+	BPF_DYNPTR_TYPE_XDP = 4,
+};
+
+enum bpf_iter_state {
+	BPF_ITER_STATE_INVALID = 0,
+	BPF_ITER_STATE_ACTIVE = 1,
+	BPF_ITER_STATE_DRAINED = 2,
+};
+
+struct tnum {
+	u64 value;
+	u64 mask;
+};
+
+enum bpf_reg_liveness {
+	REG_LIVE_NONE = 0,
+	REG_LIVE_READ32 = 1,
+	REG_LIVE_READ64 = 2,
+	REG_LIVE_READ = 3,
+	REG_LIVE_WRITTEN = 4,
+	REG_LIVE_DONE = 8,
+};
+
+struct bpf_reg_state {
+	enum bpf_reg_type type;
+	s32 off;
+	union {
+		int range;
+		struct {
+			struct bpf_map *map_ptr;
+			u32 map_uid;
+		};
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+		struct {
+			u32 mem_size;
+			u32 dynptr_id;
+		};
+		struct {
+			enum bpf_dynptr_type type;
+			bool first_slot;
+		} dynptr;
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+			enum bpf_iter_state state: 2;
+			int depth: 30;
+		} iter;
+		struct {
+			unsigned long raw1;
+			unsigned long raw2;
+		} raw;
+		u32 subprogno;
+	};
+	struct tnum var_off;
+	s64 smin_value;
+	s64 smax_value;
+	u64 umin_value;
+	u64 umax_value;
+	s32 s32_min_value;
+	s32 s32_max_value;
+	u32 u32_min_value;
+	u32 u32_max_value;
+	u32 id;
+	u32 ref_obj_id;
+	struct bpf_reg_state *parent;
+	u32 frameno;
+	s32 subreg_def;
+	enum bpf_reg_liveness live;
+	bool precise;
+};
+
+struct bpf_active_lock {
+	void *ptr;
+	u32 id;
+};
+
+struct bpf_idx_pair;
+
+struct bpf_verifier_state {
+	struct bpf_func_state *frame[8];
+	struct bpf_verifier_state *parent;
+	u32 branches;
+	u32 insn_idx;
+	u32 curframe;
+	struct bpf_active_lock active_lock;
+	bool speculative;
+	bool active_rcu_lock;
+	bool used_as_loop_entry;
+	u32 first_insn_idx;
+	u32 last_insn_idx;
+	struct bpf_verifier_state *loop_entry;
+	struct bpf_idx_pair *jmp_history;
+	u32 jmp_history_cnt;
+	u32 dfs_depth;
+	u32 callback_unroll_depth;
+};
+
+struct bpf_reference_state;
+
+struct bpf_stack_state;
+
+struct bpf_func_state {
+	struct bpf_reg_state regs[11];
+	int callsite;
+	u32 frameno;
+	u32 subprogno;
+	u32 async_entry_cnt;
+	bool in_callback_fn;
+	struct tnum callback_ret_range;
+	bool in_async_callback_fn;
+	u32 callback_depth;
+	int acquired_refs;
+	struct bpf_reference_state *refs;
+	int allocated_stack;
+	struct bpf_stack_state *stack;
+};
+
+struct bpf_reference_state {
+	int id;
+	int insn_idx;
+	int callback_ref;
+};
+
+struct bpf_stack_state {
+	struct bpf_reg_state spilled_ptr;
+	u8 slot_type[8];
+};
+
+struct bpf_idx_pair {
+	u32 prev_idx;
+	u32 idx;
+};
+
+struct bpf_verifier_state_list {
+	struct bpf_verifier_state state;
+	struct bpf_verifier_state_list *next;
+	int miss_cnt;
+	int hit_cnt;
+};
+
+struct bpf_loop_inline_state {
+	unsigned int initialized: 1;
+	unsigned int fit_for_inline: 1;
+	u32 callback_subprogno;
+};
+
+struct btf_struct_meta;
+
+struct bpf_insn_aux_data {
+	union {
+		enum bpf_reg_type ptr_type;
+		unsigned long map_ptr_state;
+		s32 call_imm;
+		u32 alu_limit;
+		struct {
+			u32 map_index;
+			u32 map_off;
+		};
+		struct {
+			enum bpf_reg_type reg_type;
+			union {
+				struct {
+					struct btf *btf;
+					u32 btf_id;
+				};
+				u32 mem_size;
+			};
+		} btf_var;
+		struct bpf_loop_inline_state loop_inline_state;
+	};
+	union {
+		u64 obj_new_size;
+		u64 insert_off;
+	};
+	struct btf_struct_meta *kptr_struct_meta;
+	u64 map_key_state;
+	int ctx_field_size;
+	u32 seen;
+	bool sanitize_stack_spill;
+	bool zext_dst;
+	bool storage_get_func_atomic;
+	bool is_iter_next;
+	u8 alu_state;
+	unsigned int orig_idx;
+	bool jmp_point;
+	bool prune_point;
+	bool force_checkpoint;
+	bool calls_callback;
+};
+
+struct btf_struct_meta {
+	u32 btf_id;
+	struct btf_record *record;
+};
+
+typedef void (*btf_trace_bpf_trace_printk)(void *, const char *);
+
+struct bpf_nested_pt_regs {
+	struct pt_regs regs[3];
+};
+
+struct bpf_trace_sample_data {
+	struct perf_sample_data sds[3];
+};
+
+struct send_signal_irq_work {
+	struct irq_work irq_work;
+	struct task_struct *task;
+	u32 sig;
+	enum pid_type type;
+};
+
+struct bpf_raw_tp_regs {
+	struct pt_regs regs[3];
+};
+
+enum key_lookup_flag {
+	KEY_LOOKUP_CREATE = 1,
+	KEY_LOOKUP_PARTIAL = 2,
+	KEY_LOOKUP_ALL = 3,
+};
+
+enum key_need_perm {
+	KEY_NEED_UNSPECIFIED = 0,
+	KEY_NEED_VIEW = 1,
+	KEY_NEED_READ = 2,
+	KEY_NEED_WRITE = 3,
+	KEY_NEED_SEARCH = 4,
+	KEY_NEED_LINK = 5,
+	KEY_NEED_SETATTR = 6,
+	KEY_NEED_UNLINK = 7,
+	KEY_SYSADMIN_OVERRIDE = 8,
+	KEY_AUTHTOKEN_OVERRIDE = 9,
+	KEY_DEFER_PERM_CHECK = 10,
+};
+
+enum bpf_task_fd_type {
+	BPF_FD_TYPE_RAW_TRACEPOINT = 0,
+	BPF_FD_TYPE_TRACEPOINT = 1,
+	BPF_FD_TYPE_KPROBE = 2,
+	BPF_FD_TYPE_KRETPROBE = 3,
+	BPF_FD_TYPE_UPROBE = 4,
+	BPF_FD_TYPE_URETPROBE = 5,
+};
+
+enum uprobe_filter_ctx {
+	UPROBE_FILTER_REGISTER = 0,
+	UPROBE_FILTER_UNREGISTER = 1,
+	UPROBE_FILTER_MMAP = 2,
+};
+
+enum {
+	BPF_F_UPROBE_MULTI_RETURN = 1,
+};
+
+enum {
+	BTF_F_COMPACT = 1,
+	BTF_F_NONAME = 2,
+	BTF_F_PTR_RAW = 4,
+	BTF_F_ZERO = 8,
+};
+
+enum {
+	BPF_F_INDEX_MASK = 4294967295ULL,
+	BPF_F_CURRENT_CPU = 4294967295ULL,
+	BPF_F_CTXLEN_MASK = 4503595332403200ULL,
+};
+
+enum {
+	BPF_F_GET_BRANCH_RECORDS_SIZE = 1,
+};
+
+typedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void __attribute__((btf_type_tag("user"))) *);
+
+typedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void __attribute__((btf_type_tag("user"))) *);
+
+typedef u64 (*btf_bpf_probe_read_kernel)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_kernel_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_compat)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_compat_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_write_user)(void __attribute__((btf_type_tag("user"))) *, const void *, u32);
+
+typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_trace_vprintk)(char *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_write)(struct seq_file *, const void *, u32);
+
+struct btf_ptr;
+
+typedef u64 (*btf_bpf_seq_printf_btf)(struct seq_file *, struct btf_ptr *, u32, u64);
+
+struct btf_ptr {
+	void *ptr;
+	__u32 type_id;
+	__u32 flags;
+};
+
+typedef u64 (*btf_bpf_perf_event_read)(struct bpf_map *, u64);
+
+struct bpf_perf_event_value;
+
+typedef u64 (*btf_bpf_perf_event_read_value)(struct bpf_map *, u64, struct bpf_perf_event_value *, u32);
+
+struct bpf_perf_event_value {
+	__u64 counter;
+	__u64 enabled;
+	__u64 running;
+};
+
+typedef u64 (*btf_bpf_perf_event_output)(struct pt_regs *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_current_task)();
+
+typedef u64 (*btf_bpf_get_current_task_btf)();
+
+typedef u64 (*btf_bpf_task_pt_regs)(struct task_struct *);
+
+typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
+
+typedef u64 (*btf_bpf_send_signal)(u32);
+
+typedef u64 (*btf_bpf_send_signal_thread)(u32);
+
+typedef u64 (*btf_bpf_d_path)(struct path *, char *, u32);
+
+typedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64);
+
+typedef u64 (*btf_bpf_get_func_ip_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_func_ip_uprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_uprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_trace)(void *);
+
+struct bpf_perf_event_data_kern;
+
+typedef u64 (*btf_bpf_get_attach_cookie_pe)(struct bpf_perf_event_data_kern *);
+
+typedef struct user_pt_regs bpf_user_pt_regs_t;
+
+struct bpf_perf_event_data_kern {
+	bpf_user_pt_regs_t *regs;
+	struct perf_sample_data *data;
+	struct perf_event *event;
+};
+
+typedef u64 (*btf_bpf_get_attach_cookie_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_branch_snapshot)(void *, u32, u64);
+
+typedef u64 (*btf_get_func_arg)(void *, u32, u64 *);
+
+typedef u64 (*btf_get_func_ret)(void *, u64 *);
+
+typedef u64 (*btf_get_func_arg_cnt)(void *);
+
+typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack_tp)(void *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_perf_prog_read_value)(struct bpf_perf_event_data_kern *, struct bpf_perf_event_value *, u32);
+
+typedef u64 (*btf_bpf_read_branch_records)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+struct bpf_raw_tracepoint_args;
+
+typedef u64 (*btf_bpf_perf_event_output_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64, void *, u64);
+
+struct bpf_raw_tracepoint_args {
+	__u64 args[0];
+};
+
+typedef u64 (*btf_bpf_get_stackid_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);
+
+struct trace_event_raw_bpf_trace_printk {
+	struct trace_entry ent;
+	u32 __data_loc_bpf_string;
+	char __data[0];
+};
+
+struct bpf_array_aux;
+
+struct bpf_array {
+	struct bpf_map map;
+	u32 elem_size;
+	u32 index_mask;
+	struct bpf_array_aux *aux;
+	union {
+		struct {
+			struct {} __empty_value;
+			char value[0];
+		};
+		struct {
+			struct {} __empty_ptrs;
+			void *ptrs[0];
+		};
+		struct {
+			struct {} __empty_pptrs;
+			void __attribute__((btf_type_tag("percpu"))) *pptrs[0];
+		};
+	};
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_array_aux {
+	struct list_head poke_progs;
+	struct bpf_map *map;
+	struct mutex poke_mutex;
+	struct work_struct work;
+};
+
+struct bpf_trace_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+	bool is_uprobe;
+};
+
+struct trace_uprobe;
+
+struct uprobe_dispatch_data {
+	struct trace_uprobe *tu;
+	unsigned long bp_addr;
+};
+
+struct bpf_uprobe;
+
+struct bpf_uprobe_multi_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	unsigned long entry_ip;
+	struct bpf_uprobe *uprobe;
+};
+
+struct uprobe_consumer {
+	int (*handler)(struct uprobe_consumer *, struct pt_regs *);
+	int (*ret_handler)(struct uprobe_consumer *, unsigned long, struct pt_regs *);
+	bool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
+	struct uprobe_consumer *next;
+};
+
+struct bpf_uprobe_multi_link;
+
+struct bpf_uprobe {
+	struct bpf_uprobe_multi_link *link;
+	loff_t offset;
+	u64 cookie;
+	struct uprobe_consumer consumer;
+};
+
+struct bpf_uprobe_multi_link {
+	struct path path;
+	struct bpf_link link;
+	u32 cnt;
+	struct bpf_uprobe *uprobes;
+	struct task_struct *task;
+};
+
+struct bpf_trace_module {
+	struct module *module;
+	struct list_head list;
+};
+
+struct trace_event_data_offsets_bpf_trace_printk {
+	u32 bpf_string;
+};
+
+typedef u32 (*bpf_prog_run_fn)(const struct bpf_prog *, const void *);
+
+struct bpf_bprintf_data {
+	u32 *bin_args;
+	char *buf;
+	bool get_bin_args;
+	bool get_buf;
+};
+
+struct bpf_event_entry {
+	struct perf_event *event;
+	struct file *perf_file;
+	struct file *map_file;
+	struct callback_head rcu;
+};
+
+struct __key_reference_with_attributes;
+
+typedef struct __key_reference_with_attributes *key_ref_t;
+
+struct bpf_dynptr_kern {
+	void *data;
+	u32 size;
+	u32 offset;
+};
+
+struct bpf_link_primer {
+	struct bpf_link *link;
+	struct file *file;
+	int fd;
+	u32 id;
+};
+
+struct btf_id_set {
+	u32 cnt;
+	u32 ids[0];
+};
+
+struct bpf_key {
+	struct key *key;
+	bool has_ref;
+};
+
+typedef unsigned long (*bpf_ctx_copy_t)(void *, const void *, unsigned long, unsigned long);
+
+struct perf_event_query_bpf {
+	__u32 ids_len;
+	__u32 prog_cnt;
+	__u32 ids[0];
+};
+
+struct trace_kprobe {
+	struct dyn_event devent;
+	struct kretprobe rp;
+	unsigned long __attribute__((btf_type_tag("percpu"))) *nhit;
+	const char *symbol;
+	struct trace_probe tp;
+};
+
+struct kretprobe_trace_entry_head {
+	struct trace_entry ent;
+	unsigned long func;
+	unsigned long ret_ip;
+};
+
+struct kprobe_trace_entry_head {
+	struct trace_entry ent;
+	unsigned long ip;
+};
+
+struct sym_count_ctx {
+	unsigned int count;
+	const char *name;
+};
+
+typedef void (*btf_trace_error_report_end)(void *, enum error_detector, unsigned long);
+
+struct trace_event_raw_error_report_template {
+	struct trace_entry ent;
+	enum error_detector error_detector;
+	unsigned long id;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_error_report_template {};
+
+typedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_cpu_idle_miss)(void *, unsigned int, unsigned int, bool);
+
+typedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int);
+
+typedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32);
+
+typedef void (*btf_trace_cpu_frequency)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_cpu_frequency_limits)(void *, struct cpufreq_policy *);
+
+typedef void (*btf_trace_device_pm_callback_start)(void *, struct device *, const char *, int);
+
+typedef void (*btf_trace_device_pm_callback_end)(void *, struct device *, int);
+
+typedef void (*btf_trace_suspend_resume)(void *, const char *, int, bool);
+
+typedef void (*btf_trace_wakeup_source_activate)(void *, const char *, unsigned int);
+
+typedef void (*btf_trace_wakeup_source_deactivate)(void *, const char *, unsigned int);
+
+typedef void (*btf_trace_clock_enable)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_clock_disable)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_clock_set_rate)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_power_domain_target)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_pm_qos_add_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_update_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_remove_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_update_target)(void *, enum pm_qos_req_action, int, int);
+
+typedef void (*btf_trace_pm_qos_update_flags)(void *, enum pm_qos_req_action, int, int);
+
+typedef void (*btf_trace_dev_pm_qos_add_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_dev_pm_qos_update_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_guest_halt_poll_ns)(void *, bool, unsigned int, unsigned int);
+
+struct trace_event_raw_cpu {
+	struct trace_entry ent;
+	u32 state;
+	u32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_idle_miss {
+	struct trace_entry ent;
+	u32 cpu_id;
+	u32 state;
+	bool below;
+	char __data[0];
+};
+
+struct trace_event_raw_powernv_throttle {
+	struct trace_entry ent;
+	int chip_id;
+	u32 __data_loc_reason;
+	int pmax;
+	char __data[0];
+};
+
+struct trace_event_raw_pstate_sample {
+	struct trace_entry ent;
+	u32 core_busy;
+	u32 scaled_busy;
+	u32 from;
+	u32 to;
+	u64 mperf;
+	u64 aperf;
+	u64 tsc;
+	u32 freq;
+	u32 io_boost;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_frequency_limits {
+	struct trace_entry ent;
+	u32 min_freq;
+	u32 max_freq;
+	u32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_device_pm_callback_start {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	u32 __data_loc_parent;
+	u32 __data_loc_pm_ops;
+	int event;
+	char __data[0];
+};
+
+struct trace_event_raw_device_pm_callback_end {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_suspend_resume {
+	struct trace_entry ent;
+	const char *action;
+	int val;
+	bool start;
+	char __data[0];
+};
+
+struct trace_event_raw_wakeup_source {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	char __data[0];
+};
+
+struct trace_event_raw_clock {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	u64 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_power_domain {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	u64 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_latency_qos_request {
+	struct trace_entry ent;
+	s32 value;
+	char __data[0];
+};
+
+struct trace_event_raw_pm_qos_update {
+	struct trace_entry ent;
+	enum pm_qos_req_action action;
+	int prev_value;
+	int curr_value;
+	char __data[0];
+};
+
+struct trace_event_raw_dev_pm_qos_request {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	enum dev_pm_qos_req_type type;
+	s32 new_value;
+	char __data[0];
+};
+
+struct trace_event_raw_guest_halt_poll_ns {
+	struct trace_entry ent;
+	bool grow;
+	unsigned int new;
+	unsigned int old;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_powernv_throttle {
+	u32 reason;
+};
+
+struct trace_event_data_offsets_wakeup_source {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clock {
+	u32 name;
+};
+
+struct trace_event_data_offsets_power_domain {
+	u32 name;
+};
+
+struct trace_event_data_offsets_dev_pm_qos_request {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cpu {};
+
+struct trace_event_data_offsets_cpu_idle_miss {};
+
+struct trace_event_data_offsets_pstate_sample {};
+
+struct trace_event_data_offsets_cpu_frequency_limits {};
+
+struct trace_event_data_offsets_device_pm_callback_start {
+	u32 device;
+	u32 driver;
+	u32 parent;
+	u32 pm_ops;
+};
+
+struct trace_event_data_offsets_device_pm_callback_end {
+	u32 device;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_suspend_resume {};
+
+struct trace_event_data_offsets_cpu_latency_qos_request {};
+
+struct trace_event_data_offsets_pm_qos_update {};
+
+struct trace_event_data_offsets_guest_halt_poll_ns {};
+
+typedef void (*btf_trace_rpm_suspend)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_resume)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_idle)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_usage)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_return_int)(void *, struct device *, unsigned long, int);
+
+typedef void (*btf_trace_rpm_status)(void *, struct device *, enum rpm_status);
+
+struct trace_event_raw_rpm_internal {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int flags;
+	int usage_count;
+	int disable_depth;
+	int runtime_auto;
+	int request_pending;
+	int irq_safe;
+	int child_count;
+	char __data[0];
+};
+
+struct trace_event_raw_rpm_return_int {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long ip;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_rpm_status {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rpm_internal {
+	u32 name;
+};
+
+struct trace_event_data_offsets_rpm_return_int {
+	u32 name;
+};
+
+struct trace_event_data_offsets_rpm_status {
+	u32 name;
+};
+
+struct trace_probe_log {
+	const char *subsystem;
+	const char **argv;
+	int argc;
+	int index;
+};
+
+enum {
+	BTF_KIND_UNKN = 0,
+	BTF_KIND_INT = 1,
+	BTF_KIND_PTR = 2,
+	BTF_KIND_ARRAY = 3,
+	BTF_KIND_STRUCT = 4,
+	BTF_KIND_UNION = 5,
+	BTF_KIND_ENUM = 6,
+	BTF_KIND_FWD = 7,
+	BTF_KIND_TYPEDEF = 8,
+	BTF_KIND_VOLATILE = 9,
+	BTF_KIND_CONST = 10,
+	BTF_KIND_RESTRICT = 11,
+	BTF_KIND_FUNC = 12,
+	BTF_KIND_FUNC_PROTO = 13,
+	BTF_KIND_VAR = 14,
+	BTF_KIND_DATASEC = 15,
+	BTF_KIND_FLOAT = 16,
+	BTF_KIND_DECL_TAG = 17,
+	BTF_KIND_TYPE_TAG = 18,
+	BTF_KIND_ENUM64 = 19,
+	NR_BTF_KINDS = 20,
+	BTF_KIND_MAX = 19,
+};
+
+struct btf_array {
+	__u32 type;
+	__u32 index_type;
+	__u32 nelems;
+};
+
+struct btf_member {
+	__u32 name_off;
+	__u32 type;
+	__u32 offset;
+};
+
+struct btf_anon_stack {
+	u32 tid;
+	u32 offset;
+};
+
+struct uprobe_cpu_buffer {
+	struct mutex mutex;
+	void *buf;
+};
+
+struct trace_uprobe {
+	struct dyn_event devent;
+	struct uprobe_consumer consumer;
+	struct path path;
+	struct inode *inode;
+	char *filename;
+	unsigned long offset;
+	unsigned long ref_ctr_offset;
+	unsigned long nhit;
+	struct trace_probe tp;
+};
+
+struct uprobe_trace_entry_head {
+	struct trace_entry ent;
+	unsigned long vaddr[0];
+};
+
+typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
+
+struct bpf_empty_prog_array {
+	struct bpf_prog_array hdr;
+	struct bpf_prog *null_prog;
+};
+
+struct xdp_mem_info {
+	u32 type;
+	u32 id;
+};
+
+struct xdp_frame {
+	void *data;
+	u16 len;
+	u16 headroom;
+	u32 metasize;
+	struct xdp_mem_info mem;
+	struct net_device *dev_rx;
+	u32 frame_sz;
+	u32 flags;
+};
+
+struct xdp_rxq_info;
+
+struct xdp_txq_info;
+
+struct xdp_buff {
+	void *data;
+	void *data_end;
+	void *data_meta;
+	void *data_hard_start;
+	struct xdp_rxq_info *rxq;
+	struct xdp_txq_info *txq;
+	u32 frame_sz;
+	u32 flags;
+};
+
+struct xdp_rxq_info {
+	struct net_device *dev;
+	u32 queue_index;
+	u32 reg_state;
+	struct xdp_mem_info mem;
+	unsigned int napi_id;
+	u32 frag_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_txq_info {
+	struct net_device *dev;
+};
+
+struct xdp_md {
+	__u32 data;
+	__u32 data_end;
+	__u32 data_meta;
+	__u32 ingress_ifindex;
+	__u32 rx_queue_index;
+	__u32 egress_ifindex;
+};
+
+struct rhash_lock_head {};
+
+typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);
+
+typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
+
+typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+struct xdp_cpumap_stats;
+
+typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);
+
+struct xdp_cpumap_stats {
+	unsigned int redirect;
+	unsigned int pass;
+	unsigned int drop;
+};
+
+typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int);
+
+struct xdp_mem_allocator;
+
+typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);
+
+struct xdp_mem_allocator {
+	struct xdp_mem_info mem;
+	union {
+		void *allocator;
+		struct page_pool *page_pool;
+	};
+	struct rhash_head node;
+	struct callback_head rcu;
+};
+
+typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);
+
+typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);
+
+typedef void (*btf_trace_bpf_xdp_link_attach_failed)(void *, const char *);
+
+struct rnd_state {
+	__u32 s1;
+	__u32 s2;
+	__u32 s3;
+	__u32 s4;
+};
+
+struct bpf_prog_dummy {
+	struct bpf_prog prog;
+};
+
+enum cgroup_bpf_attach_type {
+	CGROUP_BPF_ATTACH_TYPE_INVALID = -1,
+	CGROUP_INET_INGRESS = 0,
+	CGROUP_INET_EGRESS = 1,
+	CGROUP_INET_SOCK_CREATE = 2,
+	CGROUP_SOCK_OPS = 3,
+	CGROUP_DEVICE = 4,
+	CGROUP_INET4_BIND = 5,
+	CGROUP_INET6_BIND = 6,
+	CGROUP_INET4_CONNECT = 7,
+	CGROUP_INET6_CONNECT = 8,
+	CGROUP_INET4_POST_BIND = 9,
+	CGROUP_INET6_POST_BIND = 10,
+	CGROUP_UDP4_SENDMSG = 11,
+	CGROUP_UDP6_SENDMSG = 12,
+	CGROUP_SYSCTL = 13,
+	CGROUP_UDP4_RECVMSG = 14,
+	CGROUP_UDP6_RECVMSG = 15,
+	CGROUP_GETSOCKOPT = 16,
+	CGROUP_SETSOCKOPT = 17,
+	CGROUP_INET4_GETPEERNAME = 18,
+	CGROUP_INET6_GETPEERNAME = 19,
+	CGROUP_INET4_GETSOCKNAME = 20,
+	CGROUP_INET6_GETSOCKNAME = 21,
+	CGROUP_INET_SOCK_RELEASE = 22,
+	CGROUP_LSM_START = 23,
+	CGROUP_LSM_END = 32,
+	MAX_CGROUP_BPF_ATTACH_TYPE = 33,
+};
+
+enum bpf_jit_poke_reason {
+	BPF_POKE_REASON_TAIL_CALL = 0,
+};
+
+enum xdp_action {
+	XDP_ABORTED = 0,
+	XDP_DROP = 1,
+	XDP_PASS = 2,
+	XDP_TX = 3,
+	XDP_REDIRECT = 4,
+};
+
+struct bpf_prog_pack {
+	struct list_head list;
+	void *ptr;
+	unsigned long bitmap[0];
+};
+
+typedef u64 (*btf_bpf_user_rnd_u32)();
+
+typedef u64 (*btf_bpf_get_raw_cpu_id)();
+
+struct trace_event_raw_xdp_exception {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_bulk_tx {
+	struct trace_entry ent;
+	int ifindex;
+	u32 act;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct _bpf_dtab_netdev {
+	struct net_device *dev;
+};
+
+struct trace_event_raw_xdp_redirect_template {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	int err;
+	int to_ifindex;
+	u32 map_id;
+	int map_index;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_kthread {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int sched;
+	unsigned int xdp_pass;
+	unsigned int xdp_drop;
+	unsigned int xdp_redirect;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_enqueue {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int to_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_devmap_xmit {
+	struct trace_entry ent;
+	int from_ifindex;
+	u32 act;
+	int to_ifindex;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_disconnect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_connect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	const struct xdp_rxq_info *rxq;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_return_failed {
+	struct trace_entry ent;
+	const struct page *page;
+	u32 mem_id;
+	u32 mem_type;
+	char __data[0];
+};
+
+struct trace_event_raw_bpf_xdp_link_attach_failed {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_bpf_xdp_link_attach_failed {
+	u32 msg;
+};
+
+struct trace_event_data_offsets_xdp_exception {};
+
+struct trace_event_data_offsets_xdp_bulk_tx {};
+
+struct trace_event_data_offsets_xdp_redirect_template {};
+
+struct trace_event_data_offsets_xdp_cpumap_kthread {};
+
+struct trace_event_data_offsets_xdp_cpumap_enqueue {};
+
+struct trace_event_data_offsets_xdp_devmap_xmit {};
+
+struct trace_event_data_offsets_mem_disconnect {};
+
+struct trace_event_data_offsets_mem_connect {};
+
+struct trace_event_data_offsets_mem_return_failed {};
+
+struct bpf_mprog_cp {
+	struct bpf_link *link;
+};
+
+struct bpf_mprog_bundle {
+	struct bpf_mprog_entry a;
+	struct bpf_mprog_entry b;
+	struct bpf_mprog_cp cp_items[64];
+	struct bpf_prog *ref;
+	atomic64_t revision;
+	u32 count;
+};
+
+enum {
+	BPF_F_NO_PREALLOC = 1,
+	BPF_F_NO_COMMON_LRU = 2,
+	BPF_F_NUMA_NODE = 4,
+	BPF_F_RDONLY = 8,
+	BPF_F_WRONLY = 16,
+	BPF_F_STACK_BUILD_ID = 32,
+	BPF_F_ZERO_SEED = 64,
+	BPF_F_RDONLY_PROG = 128,
+	BPF_F_WRONLY_PROG = 256,
+	BPF_F_CLONE = 512,
+	BPF_F_MMAPABLE = 1024,
+	BPF_F_PRESERVE_ELEMS = 2048,
+	BPF_F_INNER_MAP = 4096,
+	BPF_F_LINK = 8192,
+	BPF_F_PATH_FD = 16384,
+};
+
+enum {
+	BPF_ANY = 0,
+	BPF_NOEXIST = 1,
+	BPF_EXIST = 2,
+	BPF_F_LOCK = 4,
+};
+
+enum bpf_cmd {
+	BPF_MAP_CREATE = 0,
+	BPF_MAP_LOOKUP_ELEM = 1,
+	BPF_MAP_UPDATE_ELEM = 2,
+	BPF_MAP_DELETE_ELEM = 3,
+	BPF_MAP_GET_NEXT_KEY = 4,
+	BPF_PROG_LOAD = 5,
+	BPF_OBJ_PIN = 6,
+	BPF_OBJ_GET = 7,
+	BPF_PROG_ATTACH = 8,
+	BPF_PROG_DETACH = 9,
+	BPF_PROG_TEST_RUN = 10,
+	BPF_PROG_RUN = 10,
+	BPF_PROG_GET_NEXT_ID = 11,
+	BPF_MAP_GET_NEXT_ID = 12,
+	BPF_PROG_GET_FD_BY_ID = 13,
+	BPF_MAP_GET_FD_BY_ID = 14,
+	BPF_OBJ_GET_INFO_BY_FD = 15,
+	BPF_PROG_QUERY = 16,
+	BPF_RAW_TRACEPOINT_OPEN = 17,
+	BPF_BTF_LOAD = 18,
+	BPF_BTF_GET_FD_BY_ID = 19,
+	BPF_TASK_FD_QUERY = 20,
+	BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,
+	BPF_MAP_FREEZE = 22,
+	BPF_BTF_GET_NEXT_ID = 23,
+	BPF_MAP_LOOKUP_BATCH = 24,
+	BPF_MAP_LOOKUP_AND_DELETE_BATCH = 25,
+	BPF_MAP_UPDATE_BATCH = 26,
+	BPF_MAP_DELETE_BATCH = 27,
+	BPF_LINK_CREATE = 28,
+	BPF_LINK_UPDATE = 29,
+	BPF_LINK_GET_FD_BY_ID = 30,
+	BPF_LINK_GET_NEXT_ID = 31,
+	BPF_ENABLE_STATS = 32,
+	BPF_ITER_CREATE = 33,
+	BPF_LINK_DETACH = 34,
+	BPF_PROG_BIND_MAP = 35,
+};
+
+enum perf_bpf_event_type {
+	PERF_BPF_EVENT_UNKNOWN = 0,
+	PERF_BPF_EVENT_PROG_LOAD = 1,
+	PERF_BPF_EVENT_PROG_UNLOAD = 2,
+	PERF_BPF_EVENT_MAX = 3,
+};
+
+enum bpf_audit {
+	BPF_AUDIT_LOAD = 0,
+	BPF_AUDIT_UNLOAD = 1,
+	BPF_AUDIT_MAX = 2,
+};
+
+enum bpf_perf_event_type {
+	BPF_PERF_EVENT_UNSPEC = 0,
+	BPF_PERF_EVENT_UPROBE = 1,
+	BPF_PERF_EVENT_URETPROBE = 2,
+	BPF_PERF_EVENT_KPROBE = 3,
+	BPF_PERF_EVENT_KRETPROBE = 4,
+	BPF_PERF_EVENT_TRACEPOINT = 5,
+	BPF_PERF_EVENT_EVENT = 6,
+};
+
+enum bpf_stats_type {
+	BPF_STATS_RUN_TIME = 0,
+};
+
+typedef u64 (*btf_bpf_sys_bpf)(int, union bpf_attr *, u32);
+
+typedef u64 (*btf_bpf_sys_close)(u32);
+
+typedef u64 (*btf_bpf_kallsyms_lookup_name)(const char *, int, int, u64 *);
+
+struct bpf_tracing_link {
+	struct bpf_tramp_link link;
+	enum bpf_attach_type attach_type;
+	struct bpf_trampoline *trampoline;
+	struct bpf_prog *tgt_prog;
+};
+
+struct bpf_raw_tp_link {
+	struct bpf_link link;
+	struct bpf_raw_event_map *btp;
+};
+
+struct bpf_perf_link {
+	struct bpf_link link;
+	struct file *perf_file;
+};
+
+struct bpf_spin_lock {
+	__u32 val;
+};
+
+struct bpf_prog_kstats {
+	u64 nsecs;
+	u64 cnt;
+	u64 misses;
+};
+
+struct bpf_prog_info {
+	__u32 type;
+	__u32 id;
+	__u8 tag[8];
+	__u32 jited_prog_len;
+	__u32 xlated_prog_len;
+	__u64 jited_prog_insns;
+	__u64 xlated_prog_insns;
+	__u64 load_time;
+	__u32 created_by_uid;
+	__u32 nr_map_ids;
+	__u64 map_ids;
+	char name[16];
+	__u32 ifindex;
+	__u32 gpl_compatible: 1;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 nr_jited_ksyms;
+	__u32 nr_jited_func_lens;
+	__u64 jited_ksyms;
+	__u64 jited_func_lens;
+	__u32 btf_id;
+	__u32 func_info_rec_size;
+	__u64 func_info;
+	__u32 nr_func_info;
+	__u32 nr_line_info;
+	__u64 line_info;
+	__u64 jited_line_info;
+	__u32 nr_jited_line_info;
+	__u32 line_info_rec_size;
+	__u32 jited_line_info_rec_size;
+	__u32 nr_prog_tags;
+	__u64 prog_tags;
+	__u64 run_time_ns;
+	__u64 run_cnt;
+	__u64 recursion_misses;
+	__u32 verified_insns;
+	__u32 attach_btf_obj_id;
+	__u32 attach_btf_id;
+};
+
+struct bpf_map_info {
+	__u32 type;
+	__u32 id;
+	__u32 key_size;
+	__u32 value_size;
+	__u32 max_entries;
+	__u32 map_flags;
+	char name[16];
+	__u32 ifindex;
+	__u32 btf_vmlinux_value_type_id;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 btf_id;
+	__u32 btf_key_type_id;
+	__u32 btf_value_type_id;
+	__u64 map_extra;
+};
+
+struct bpf_btf_info {
+	__u64 btf;
+	__u32 btf_size;
+	__u32 id;
+	__u64 name;
+	__u32 name_len;
+	__u32 kernel_btf;
+};
+
+struct bpf_attach_target_info {
+	struct btf_func_model fmodel;
+	long tgt_addr;
+	struct module *tgt_mod;
+	const char *tgt_name;
+	const struct btf_type *tgt_type;
+};
+
+struct bpf_verifier_stack_elem {
+	struct bpf_verifier_state st;
+	int insn_idx;
+	int prev_insn_idx;
+	struct bpf_verifier_stack_elem *next;
+	u32 log_pos;
+};
+
+struct bpf_kfunc_desc {
+	struct btf_func_model func_model;
+	u32 func_id;
+	s32 imm;
+	u16 offset;
+	unsigned long addr;
+};
+
+struct bpf_kfunc_desc_tab {
+	struct bpf_kfunc_desc descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_kfunc_btf {
+	struct btf *btf;
+	struct module *module;
+	u16 offset;
+};
+
+struct bpf_kfunc_btf_tab {
+	struct bpf_kfunc_btf descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_reg_types {
+	const enum bpf_reg_type types[10];
+	u32 *btf_id;
+};
+
+enum btf_func_linkage {
+	BTF_FUNC_STATIC = 0,
+	BTF_FUNC_GLOBAL = 1,
+	BTF_FUNC_EXTERN = 2,
+};
+
+enum special_kfunc_type {
+	KF_bpf_obj_new_impl = 0,
+	KF_bpf_obj_drop_impl = 1,
+	KF_bpf_refcount_acquire_impl = 2,
+	KF_bpf_list_push_front_impl = 3,
+	KF_bpf_list_push_back_impl = 4,
+	KF_bpf_list_pop_front = 5,
+	KF_bpf_list_pop_back = 6,
+	KF_bpf_cast_to_kern_ctx = 7,
+	KF_bpf_rdonly_cast = 8,
+	KF_bpf_rcu_read_lock = 9,
+	KF_bpf_rcu_read_unlock = 10,
+	KF_bpf_rbtree_remove = 11,
+	KF_bpf_rbtree_add_impl = 12,
+	KF_bpf_rbtree_first = 13,
+	KF_bpf_dynptr_from_skb = 14,
+	KF_bpf_dynptr_from_xdp = 15,
+	KF_bpf_dynptr_slice = 16,
+	KF_bpf_dynptr_slice_rdwr = 17,
+	KF_bpf_dynptr_clone = 18,
+};
+
+enum bpf_stack_slot_type {
+	STACK_INVALID = 0,
+	STACK_SPILL = 1,
+	STACK_MISC = 2,
+	STACK_ZERO = 3,
+	STACK_DYNPTR = 4,
+	STACK_ITER = 5,
+};
+
+enum bpf_type_flag {
+	PTR_MAYBE_NULL = 256,
+	MEM_RDONLY = 512,
+	MEM_RINGBUF = 1024,
+	MEM_USER = 2048,
+	MEM_PERCPU = 4096,
+	OBJ_RELEASE = 8192,
+	PTR_UNTRUSTED = 16384,
+	MEM_UNINIT = 32768,
+	DYNPTR_TYPE_LOCAL = 65536,
+	DYNPTR_TYPE_RINGBUF = 131072,
+	MEM_FIXED_SIZE = 262144,
+	MEM_ALLOC = 524288,
+	PTR_TRUSTED = 1048576,
+	MEM_RCU = 2097152,
+	NON_OWN_REF = 4194304,
+	DYNPTR_TYPE_SKB = 8388608,
+	DYNPTR_TYPE_XDP = 16777216,
+	__BPF_TYPE_FLAG_MAX = 16777217,
+	__BPF_TYPE_LAST_FLAG = 16777216,
+};
+
+enum bpf_access_src {
+	ACCESS_DIRECT = 1,
+	ACCESS_HELPER = 2,
+};
+
+enum bpf_core_relo_kind {
+	BPF_CORE_FIELD_BYTE_OFFSET = 0,
+	BPF_CORE_FIELD_BYTE_SIZE = 1,
+	BPF_CORE_FIELD_EXISTS = 2,
+	BPF_CORE_FIELD_SIGNED = 3,
+	BPF_CORE_FIELD_LSHIFT_U64 = 4,
+	BPF_CORE_FIELD_RSHIFT_U64 = 5,
+	BPF_CORE_TYPE_ID_LOCAL = 6,
+	BPF_CORE_TYPE_ID_TARGET = 7,
+	BPF_CORE_TYPE_EXISTS = 8,
+	BPF_CORE_TYPE_SIZE = 9,
+	BPF_CORE_ENUMVAL_EXISTS = 10,
+	BPF_CORE_ENUMVAL_VALUE = 11,
+	BPF_CORE_TYPE_MATCHES = 12,
+};
+
+enum {
+	DISCOVERED = 16,
+	EXPLORED = 32,
+	FALLTHROUGH = 1,
+	BRANCH = 2,
+};
+
+enum {
+	DONE_EXPLORING = 0,
+	KEEP_EXPLORING = 1,
+};
+
+enum reg_arg_type {
+	SRC_OP = 0,
+	DST_OP = 1,
+	DST_OP_NO_MARK = 2,
+};
+
+enum {
+	REASON_BOUNDS = -1,
+	REASON_TYPE = -2,
+	REASON_PATHS = -3,
+	REASON_LIMIT = -4,
+	REASON_STACK = -5,
+};
+
+enum kfunc_ptr_arg_type {
+	KF_ARG_PTR_TO_CTX = 0,
+	KF_ARG_PTR_TO_ALLOC_BTF_ID = 1,
+	KF_ARG_PTR_TO_REFCOUNTED_KPTR = 2,
+	KF_ARG_PTR_TO_DYNPTR = 3,
+	KF_ARG_PTR_TO_ITER = 4,
+	KF_ARG_PTR_TO_LIST_HEAD = 5,
+	KF_ARG_PTR_TO_LIST_NODE = 6,
+	KF_ARG_PTR_TO_BTF_ID = 7,
+	KF_ARG_PTR_TO_MEM = 8,
+	KF_ARG_PTR_TO_MEM_SIZE = 9,
+	KF_ARG_PTR_TO_CALLBACK = 10,
+	KF_ARG_PTR_TO_RB_ROOT = 11,
+	KF_ARG_PTR_TO_RB_NODE = 12,
+};
+
+enum {
+	KF_ARG_DYNPTR_ID = 0,
+	KF_ARG_LIST_HEAD_ID = 1,
+	KF_ARG_LIST_NODE_ID = 2,
+	KF_ARG_RB_ROOT_ID = 3,
+	KF_ARG_RB_NODE_ID = 4,
+};
+
+enum {
+	BTF_TRACING_TYPE_TASK = 0,
+	BTF_TRACING_TYPE_FILE = 1,
+	BTF_TRACING_TYPE_VMA = 2,
+	MAX_BTF_TRACING_TYPE = 3,
+};
+
+enum sk_action {
+	SK_DROP = 0,
+	SK_PASS = 1,
+};
+
+enum {
+	AT_PKT_END = -1,
+	BEYOND_PKT_END = -2,
+};
+
+enum {
+	BPF_MAX_LOOPS = 8388608,
+};
+
+struct bpf_iter_meta__safe_trusted {
+	struct seq_file *seq;
+};
+
+struct bpf_iter__task__safe_trusted {
+	struct bpf_iter_meta *meta;
+	struct task_struct *task;
+};
+
+struct linux_binprm__safe_trusted {
+	struct file *file;
+};
+
+struct file__safe_trusted {
+	struct inode *f_inode;
+};
+
+struct dentry__safe_trusted {
+	struct inode *d_inode;
+};
+
+struct socket__safe_trusted {
+	struct sock *sk;
+};
+
+struct task_struct__safe_rcu {
+	const cpumask_t *cpus_ptr;
+	struct css_set __attribute__((btf_type_tag("rcu"))) *cgroups;
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *real_parent;
+	struct task_struct *group_leader;
+};
+
+struct cgroup__safe_rcu {
+	struct kernfs_node *kn;
+};
+
+struct css_set__safe_rcu {
+	struct cgroup *dfl_cgrp;
+};
+
+struct mm_struct__safe_rcu_or_null {
+	struct file __attribute__((btf_type_tag("rcu"))) *exe_file;
+};
+
+struct sk_buff__safe_rcu_or_null {
+	struct sock *sk;
+};
+
+struct request_sock__safe_rcu_or_null {
+	struct sock *sk;
+};
+
+struct btf_var_secinfo {
+	__u32 type;
+	__u32 offset;
+	__u32 size;
+};
+
+struct bpf_iter;
+
+typedef void (*bpf_insn_print_t)(void *, const char *, ...);
+
+typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);
+
+typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);
+
+struct bpf_insn_cbs {
+	bpf_insn_print_t cb_print;
+	bpf_insn_revmap_call_t cb_call;
+	bpf_insn_print_imm_t cb_imm;
+	void *private_data;
+};
+
+typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+
+struct bpf_core_relo {
+	__u32 insn_off;
+	__u32 type_id;
+	__u32 access_str_off;
+	enum bpf_core_relo_kind kind;
+};
+
+struct bpf_core_ctx {
+	struct bpf_verifier_log *log;
+	const struct btf *btf;
+};
+
+struct bpf_struct_ops {
+	const struct bpf_verifier_ops *verifier_ops;
+	int (*init)(struct btf *);
+	int (*check_member)(const struct btf_type *, const struct btf_member *, const struct bpf_prog *);
+	int (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *);
+	int (*reg)(void *);
+	void (*unreg)(void *);
+	int (*update)(void *, void *);
+	int (*validate)(void *);
+	const struct btf_type *type;
+	const struct btf_type *value_type;
+	const char *name;
+	struct btf_func_model func_models[64];
+	u32 type_id;
+	u32 value_id;
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_kfunc_call_arg_meta {
+	struct btf *btf;
+	u32 func_id;
+	u32 kfunc_flags;
+	const struct btf_type *func_proto;
+	const char *func_name;
+	u32 ref_obj_id;
+	u8 release_regno;
+	bool r0_rdonly;
+	u32 ret_btf_id;
+	u64 r0_size;
+	u32 subprogno;
+	struct {
+		u64 value;
+		bool found;
+	} arg_constant;
+	struct btf *arg_btf;
+	u32 arg_btf_id;
+	bool arg_owning_ref;
+	struct {
+		struct btf_field *field;
+	} arg_list_head;
+	struct {
+		struct btf_field *field;
+	} arg_rbtree_root;
+	struct {
+		enum bpf_dynptr_type type;
+		u32 id;
+		u32 ref_obj_id;
+	} initialized_dynptr;
+	struct {
+		u8 spi;
+		u8 frameno;
+	} iter;
+	u64 mem_size;
+};
+
+struct bpf_call_arg_meta {
+	struct bpf_map *map_ptr;
+	bool raw_mode;
+	bool pkt_access;
+	u8 release_regno;
+	int regno;
+	int access_size;
+	int mem_size;
+	u64 msize_max_value;
+	int ref_obj_id;
+	int dynptr_id;
+	int map_uid;
+	int func_id;
+	struct btf *btf;
+	u32 btf_id;
+	struct btf *ret_btf;
+	u32 ret_btf_id;
+	u32 subprogno;
+	struct btf_field *kptr_field;
+};
+
+struct bpf_sanitize_info {
+	struct bpf_insn_aux_data aux;
+	bool mask_to_left;
+};
+
+typedef int (*set_callee_state_fn)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *, int);
+
+struct bpf_preload_info;
+
+struct bpf_preload_ops {
+	int (*preload)(struct bpf_preload_info *);
+	struct module *owner;
+};
+
+struct bpf_preload_info {
+	char link_name[16];
+	struct bpf_link *link;
+};
+
+struct tree_descr {
+	const char *name;
+	const struct file_operations *ops;
+	int mode;
+};
+
+enum bpf_type {
+	BPF_TYPE_UNSPEC = 0,
+	BPF_TYPE_PROG = 1,
+	BPF_TYPE_MAP = 2,
+	BPF_TYPE_LINK = 3,
+};
+
+enum {
+	OPT_MODE = 0,
+};
+
+struct map_iter {
+	void *key;
+	bool done;
+};
+
+struct bpf_mount_opts {
+	umode_t mode;
+};
+
+struct bpf_hrtimer {
+	struct hrtimer timer;
+	struct bpf_map *map;
+	struct bpf_prog *prog;
+	void __attribute__((btf_type_tag("rcu"))) *callback_fn;
+	void *value;
+	struct callback_head rcu;
+};
+
+struct bpf_bprintf_buffers {
+	char bin_args[512];
+	char buf[1024];
+};
+
+enum {
+	BPF_F_TIMER_ABS = 1,
+};
+
+typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_map_delete_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_push_elem)(struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_map_pop_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+
+typedef u64 (*btf_bpf_get_smp_processor_id)();
+
+typedef u64 (*btf_bpf_get_numa_node_id)();
+
+typedef u64 (*btf_bpf_ktime_get_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_boot_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_coarse_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_tai_ns)();
+
+typedef u64 (*btf_bpf_get_current_pid_tgid)();
+
+typedef u64 (*btf_bpf_get_current_uid_gid)();
+
+typedef u64 (*btf_bpf_get_current_comm)(char *, u32);
+
+typedef u64 (*btf_bpf_spin_lock)(struct bpf_spin_lock *);
+
+typedef u64 (*btf_bpf_spin_unlock)(struct bpf_spin_lock *);
+
+typedef u64 (*btf_bpf_jiffies64)();
+
+typedef u64 (*btf_bpf_get_current_cgroup_id)();
+
+typedef u64 (*btf_bpf_get_current_ancestor_cgroup_id)(int);
+
+typedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long *);
+
+typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, unsigned long *);
+
+typedef u64 (*btf_bpf_strncmp)(const char *, u32, const char *);
+
+struct bpf_pidns_info;
+
+typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);
+
+struct bpf_pidns_info {
+	__u32 pid;
+	__u32 tgid;
+};
+
+typedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void __attribute__((btf_type_tag("user"))) *);
+
+typedef u64 (*btf_bpf_copy_from_user_task)(void *, u32, const void __attribute__((btf_type_tag("user"))) *, struct task_struct *, u64);
+
+typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);
+
+typedef u64 (*btf_bpf_this_cpu_ptr)(const void *);
+
+typedef u64 (*btf_bpf_snprintf)(char *, u32, char *, const void *, u32);
+
+struct bpf_timer_kern;
+
+typedef u64 (*btf_bpf_timer_init)(struct bpf_timer_kern *, struct bpf_map *, u64);
+
+struct bpf_timer_kern {
+	struct bpf_hrtimer *timer;
+	struct bpf_spin_lock lock;
+};
+
+typedef u64 (*btf_bpf_timer_set_callback)(struct bpf_timer_kern *, void *, struct bpf_prog_aux *);
+
+typedef u64 (*btf_bpf_timer_start)(struct bpf_timer_kern *, u64, u64);
+
+typedef u64 (*btf_bpf_timer_cancel)(struct bpf_timer_kern *);
+
+typedef u64 (*btf_bpf_kptr_xchg)(void *, void *);
+
+typedef u64 (*btf_bpf_dynptr_from_mem)(void *, u32, u64, struct bpf_dynptr_kern *);
+
+typedef u64 (*btf_bpf_dynptr_read)(void *, u32, const struct bpf_dynptr_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_write)(const struct bpf_dynptr_kern *, u32, void *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_data)(const struct bpf_dynptr_kern *, u32, u32);
+
+struct bpf_refcount {
+	int: 32;
+};
+
+struct bpf_rb_node_kern {
+	struct rb_node rb_node;
+	void *owner;
+};
+
+struct bpf_rb_node {
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_timer {
+	long: 64;
+	long: 64;
+};
+
+struct bpf_dynptr {
+	long: 64;
+	long: 64;
+};
+
+struct bpf_list_node_kern {
+	struct list_head list_head;
+	void *owner;
+};
+
+struct bpf_list_node {
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_list_head {
+	long: 64;
+	long: 64;
+};
+
+struct bpf_rb_root {
+	long: 64;
+	long: 64;
+};
+
+struct btf_id_dtor_kfunc {
+	u32 btf_id;
+	u32 kfunc_btf_id;
+};
+
+enum bpf_iter_feature {
+	BPF_ITER_RESCHED = 1,
+};
+
+struct bpf_iter_target_info {
+	struct list_head list;
+	const struct bpf_iter_reg *reg_info;
+	u32 btf_id;
+};
+
+struct bpf_iter_link {
+	struct bpf_link link;
+	struct bpf_iter_aux_info aux;
+	struct bpf_iter_target_info *tinfo;
+};
+
+struct bpf_iter_priv_data {
+	struct bpf_iter_target_info *tinfo;
+	const struct bpf_iter_seq_info *seq_info;
+	struct bpf_prog *prog;
+	u64 session_id;
+	u64 seq_num;
+	bool done_stop;
+	long: 0;
+	u8 target_private[0];
+};
+
+typedef u64 (*btf_bpf_for_each_map_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_loop)(u32, void *, void *, u64);
+
+struct btf_iter_num;
+
+struct bpf_iter_num {
+	__u64 __opaque[1];
+};
+
+struct bpf_iter_num_kern {
+	int cur;
+	int end;
+};
+
+struct bpf_iter__bpf_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+};
+
+struct bpf_iter_seq_map_info {
+	u32 map_id;
+};
+
+struct mmap_unlock_irq_work {
+	struct irq_work irq_work;
+	struct mm_struct *mm;
+};
+
+enum bpf_task_vma_iter_find_op {
+	task_vma_iter_first_vma = 0,
+	task_vma_iter_next_vma = 1,
+	task_vma_iter_find_vma = 2,
+};
+
+typedef u64 (*btf_bpf_find_vma)(struct task_struct *, u64, bpf_callback_t, void *, u64);
+
+struct bpf_iter__task {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+};
+
+struct bpf_iter_seq_task_common {
+	struct pid_namespace *ns;
+	enum bpf_iter_task_type type;
+	u32 pid;
+	u32 pid_visiting;
+};
+
+struct bpf_iter__task_file {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	u32 fd;
+	union {
+		struct file *file;
+	};
+};
+
+struct bpf_iter_seq_task_file_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	u32 tid;
+	u32 fd;
+};
+
+struct bpf_iter__task_vma {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	union {
+		struct vm_area_struct *vma;
+	};
+};
+
+struct bpf_iter_seq_task_vma_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	struct vm_area_struct *vma;
+	u32 tid;
+	unsigned long prev_vm_start;
+	unsigned long prev_vm_end;
+};
+
+struct bpf_iter_seq_task_info {
+	struct bpf_iter_seq_task_common common;
+	u32 tid;
+};
+
+struct bpf_iter__bpf_prog {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_prog *prog;
+	};
+};
+
+struct bpf_iter_seq_prog_info {
+	u32 prog_id;
+};
+
+struct bpf_iter__bpf_link {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_link *link;
+	};
+};
+
+struct bpf_iter_seq_link_info {
+	u32 link_id;
+};
+
+struct pcpu_freelist_node;
+
+struct pcpu_freelist_head {
+	struct pcpu_freelist_node *first;
+	raw_spinlock_t lock;
+};
+
+struct pcpu_freelist {
+	struct pcpu_freelist_head __attribute__((btf_type_tag("percpu"))) *freelist;
+	struct pcpu_freelist_head extralist;
+};
+
+struct bpf_lru_list {
+	struct list_head lists[3];
+	unsigned int counts[2];
+	struct list_head *next_inactive_rotation;
+	raw_spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_lru_locallist;
+
+struct bpf_common_lru {
+	struct bpf_lru_list lru_list;
+	struct bpf_lru_locallist __attribute__((btf_type_tag("percpu"))) *local_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_lru_node;
+
+typedef bool (*del_from_htab_func)(void *, struct bpf_lru_node *);
+
+struct bpf_lru {
+	union {
+		struct bpf_common_lru common_lru;
+		struct bpf_lru_list __attribute__((btf_type_tag("percpu"))) *percpu_lru;
+	};
+	del_from_htab_func del_from_htab;
+	void *del_arg;
+	unsigned int hash_offset;
+	unsigned int nr_scans;
+	bool percpu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bucket;
+
+struct htab_elem;
+
+struct bpf_htab {
+	struct bpf_map map;
+	struct bpf_mem_alloc ma;
+	struct bpf_mem_alloc pcpu_ma;
+	struct bucket *buckets;
+	void *elems;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct pcpu_freelist freelist;
+		struct bpf_lru lru;
+	};
+	struct htab_elem * __attribute__((btf_type_tag("percpu"))) *extra_elems;
+	struct percpu_counter pcount;
+	atomic_t count;
+	bool use_percpu_counter;
+	u32 n_buckets;
+	u32 elem_size;
+	u32 hashrnd;
+	struct lock_class_key lockdep_key;
+	int __attribute__((btf_type_tag("percpu"))) *map_locked[8];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bucket {
+	struct hlist_nulls_head head;
+	raw_spinlock_t raw_lock;
+};
+
+struct pcpu_freelist_node {
+	struct pcpu_freelist_node *next;
+};
+
+struct bpf_lru_locallist {
+	struct list_head lists[2];
+	u16 next_steal;
+	raw_spinlock_t lock;
+};
+
+struct bpf_lru_node {
+	struct list_head list;
+	u16 cpu;
+	u8 type;
+	u8 ref;
+};
+
+struct htab_elem {
+	union {
+		struct hlist_nulls_node hash_node;
+		struct {
+			void *padding;
+			union {
+				struct pcpu_freelist_node fnode;
+				struct htab_elem *batch_flink;
+			};
+		};
+	};
+	union {
+		void *ptr_to_pptr;
+		struct bpf_lru_node lru_node;
+	};
+	u32 hash;
+	long: 0;
+	char key[0];
+};
+
+struct bpf_iter_seq_hash_map_info {
+	struct bpf_map *map;
+	struct bpf_htab *htab;
+	void *percpu_value_buf;
+	u32 bucket_id;
+	u32 skip_elems;
+};
+
+struct bpf_iter__bpf_map_elem {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		void *value;
+	};
+};
+
+struct prog_poke_elem {
+	struct list_head list;
+	struct bpf_prog_aux *aux;
+};
+
+struct bpf_iter_seq_array_map_info {
+	struct bpf_map *map;
+	void *percpu_value_buf;
+	u32 index;
+};
+
+enum bpf_lru_list_type {
+	BPF_LRU_LIST_T_ACTIVE = 0,
+	BPF_LRU_LIST_T_INACTIVE = 1,
+	BPF_LRU_LIST_T_FREE = 2,
+	BPF_LRU_LOCAL_LIST_T_FREE = 3,
+	BPF_LRU_LOCAL_LIST_T_PENDING = 4,
+};
+
+struct lpm_trie_node;
+
+struct lpm_trie {
+	struct bpf_map map;
+	struct lpm_trie_node __attribute__((btf_type_tag("rcu"))) *root;
+	size_t n_entries;
+	size_t max_prefixlen;
+	size_t data_size;
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct lpm_trie_node {
+	struct callback_head rcu;
+	struct lpm_trie_node __attribute__((btf_type_tag("rcu"))) *child[2];
+	u32 prefixlen;
+	u32 flags;
+	u8 data[0];
+};
+
+struct bpf_lpm_trie_key {
+	__u32 prefixlen;
+	__u8 data[0];
+};
+
+struct bpf_bloom_filter {
+	struct bpf_map map;
+	u32 bitset_mask;
+	u32 hash_seed;
+	u32 nr_hash_funcs;
+	unsigned long bitset[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_cgroup_storage_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	struct rb_root root;
+	struct list_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum bpf_cgroup_storage_type {
+	BPF_CGROUP_STORAGE_SHARED = 0,
+	BPF_CGROUP_STORAGE_PERCPU = 1,
+	__BPF_CGROUP_STORAGE_MAX = 2,
+};
+
+struct bpf_queue_stack {
+	struct bpf_map map;
+	raw_spinlock_t lock;
+	u32 head;
+	u32 tail;
+	u32 size;
+	char elements[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	BPF_RINGBUF_BUSY_BIT = 2147483648,
+	BPF_RINGBUF_DISCARD_BIT = 1073741824,
+	BPF_RINGBUF_HDR_SZ = 8,
+};
+
+enum {
+	BPF_RB_NO_WAKEUP = 1,
+	BPF_RB_FORCE_WAKEUP = 2,
+};
+
+enum {
+	BPF_RB_AVAIL_DATA = 0,
+	BPF_RB_RING_SIZE = 1,
+	BPF_RB_CONS_POS = 2,
+	BPF_RB_PROD_POS = 3,
+};
+
+typedef u64 (*btf_bpf_ringbuf_reserve)(struct bpf_map *, u64, u64);
+
+typedef u64 (*btf_bpf_ringbuf_submit)(void *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_discard)(void *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_output)(struct bpf_map *, void *, u64, u64);
+
+typedef u64 (*btf_bpf_ringbuf_query)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_reserve_dynptr)(struct bpf_map *, u32, u64, struct bpf_dynptr_kern *);
+
+typedef u64 (*btf_bpf_ringbuf_submit_dynptr)(struct bpf_dynptr_kern *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_discard_dynptr)(struct bpf_dynptr_kern *, u64);
+
+typedef u64 (*btf_bpf_user_ringbuf_drain)(struct bpf_map *, void *, void *, u64);
+
+struct bpf_ringbuf {
+	wait_queue_head_t waitq;
+	struct irq_work work;
+	u64 mask;
+	struct page **pages;
+	int nr_pages;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t spinlock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_t busy;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long consumer_pos;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long producer_pos;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	char data[0];
+};
+
+struct bpf_ringbuf_map {
+	struct bpf_map map;
+	struct bpf_ringbuf *rb;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_ringbuf_hdr {
+	u32 len;
+	u32 pg_off;
+};
+
+struct bpf_local_storage_elem {
+	struct hlist_node map_node;
+	struct hlist_node snode;
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) *local_storage;
+	struct callback_head rcu;
+	long: 64;
+	struct bpf_local_storage_data sdata;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_local_storage_cache {
+	spinlock_t idx_lock;
+	u64 idx_usage_counts[16];
+};
+
+enum {
+	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
+	BPF_SK_STORAGE_GET_F_CREATE = 1,
+};
+
+typedef u64 (*btf_bpf_task_storage_get_recur)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_get)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_delete_recur)(struct bpf_map *, struct task_struct *);
+
+typedef u64 (*btf_bpf_task_storage_delete)(struct bpf_map *, struct task_struct *);
+
+typedef u64 (*btf_bpf_inode_storage_get)(struct bpf_map *, struct inode *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_inode_storage_delete)(struct bpf_map *, struct inode *);
+
+struct bpf_storage_blob {
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) *storage;
+};
+
+struct bpf_tuple {
+	struct bpf_prog *prog;
+	struct bpf_link *link;
+};
+
+enum {
+	BPF_MAX_TRAMP_LINKS = 38,
+};
+
+struct bpf_shim_tramp_link {
+	struct bpf_tramp_link link;
+	struct bpf_trampoline *trampoline;
+};
+
+struct btf_kfunc_hook_filter {
+	btf_kfunc_filter_t filters[16];
+	u32 nr_filters;
+};
+
+struct btf_kfunc_set_tab {
+	struct btf_id_set8 *sets[13];
+	struct btf_kfunc_hook_filter hook_filters[13];
+};
+
+struct btf_id_dtor_kfunc_tab {
+	u32 cnt;
+	struct btf_id_dtor_kfunc dtors[0];
+};
+
+struct btf_struct_metas {
+	u32 cnt;
+	struct btf_struct_meta types[0];
+};
+
+struct nd_opt_hdr {
+	__u8 nd_opt_type;
+	__u8 nd_opt_len;
+};
+
+struct ndisc_options {
+	struct nd_opt_hdr *nd_opt_array[15];
+	struct nd_opt_hdr *nd_opts_ri;
+	struct nd_opt_hdr *nd_opts_ri_end;
+	struct nd_opt_hdr *nd_useropts;
+	struct nd_opt_hdr *nd_useropts_end;
+	struct nd_opt_hdr *nd_802154_opt_array[3];
+};
+
+struct prefix_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	union {
+		__u8 flags;
+		struct {
+			__u8 reserved: 6;
+			__u8 autoconf: 1;
+			__u8 onlink: 1;
+		};
+	};
+	__be32 valid;
+	__be32 prefered;
+	__be32 reserved2;
+	struct in6_addr prefix;
+};
+
+struct inet_ehash_bucket;
+
+struct inet_bind_hashbucket;
+
+struct inet_listen_hashbucket;
+
+struct inet_hashinfo {
+	struct inet_ehash_bucket *ehash;
+	spinlock_t *ehash_locks;
+	unsigned int ehash_mask;
+	unsigned int ehash_locks_mask;
+	struct kmem_cache *bind_bucket_cachep;
+	struct inet_bind_hashbucket *bhash;
+	struct kmem_cache *bind2_bucket_cachep;
+	struct inet_bind_hashbucket *bhash2;
+	unsigned int bhash_size;
+	unsigned int lhash2_mask;
+	struct inet_listen_hashbucket *lhash2;
+	bool pernet;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct inet_ehash_bucket {
+	struct hlist_nulls_head chain;
+};
+
+struct inet_bind_hashbucket {
+	spinlock_t lock;
+	struct hlist_head chain;
+};
+
+struct inet_listen_hashbucket {
+	spinlock_t lock;
+	struct hlist_nulls_head nulls_head;
+};
+
+struct inet_peer_base {
+	struct rb_root rb_root;
+	seqlock_t lock;
+	int total;
+};
+
+struct ack_sample {
+	u32 pkts_acked;
+	s32 rtt_us;
+	u32 in_flight;
+};
+
+struct rate_sample {
+	u64 prior_mstamp;
+	u32 prior_delivered;
+	u32 prior_delivered_ce;
+	s32 delivered;
+	s32 delivered_ce;
+	long interval_us;
+	u32 snd_interval_us;
+	u32 rcv_interval_us;
+	long rtt_us;
+	int losses;
+	u32 acked_sacked;
+	u32 prior_in_flight;
+	u32 last_end_seq;
+	bool is_app_limited;
+	bool is_retrans;
+	bool is_ack_delayed;
+};
+
+struct lwtunnel_state {
+	__u16 type;
+	__u16 flags;
+	__u16 headroom;
+	atomic_t refcnt;
+	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
+	int (*orig_input)(struct sk_buff *);
+	struct callback_head rcu;
+	__u8 data[0];
+};
+
+struct sk_psock_progs {
+	struct bpf_prog *msg_parser;
+	struct bpf_prog *stream_parser;
+	struct bpf_prog *stream_verdict;
+	struct bpf_prog *skb_verdict;
+};
+
+struct sk_psock_work_state {
+	u32 len;
+	u32 off;
+};
+
+struct sk_msg;
+
+struct sk_psock {
+	struct sock *sk;
+	struct sock *sk_redir;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 eval;
+	bool redir_ingress;
+	struct sk_msg *cork;
+	struct sk_psock_progs progs;
+	struct sk_buff_head ingress_skb;
+	struct list_head ingress_msg;
+	spinlock_t ingress_lock;
+	unsigned long state;
+	struct list_head link;
+	spinlock_t link_lock;
+	refcount_t refcnt;
+	void (*saved_unhash)(struct sock *);
+	void (*saved_destroy)(struct sock *);
+	void (*saved_close)(struct sock *, long);
+	void (*saved_write_space)(struct sock *);
+	void (*saved_data_ready)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	struct proto *sk_proto;
+	struct mutex work_mutex;
+	struct sk_psock_work_state work_state;
+	struct delayed_work work;
+	struct sock *sk_pair;
+	struct rcu_work rwork;
+};
+
+struct sk_msg_sg {
+	u32 start;
+	u32 curr;
+	u32 end;
+	u32 size;
+	u32 copybreak;
+	unsigned long copy[1];
+	struct scatterlist data[19];
+};
+
+struct sk_msg {
+	struct sk_msg_sg sg;
+	void *data;
+	void *data_end;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 flags;
+	struct sk_buff *skb;
+	struct sock *sk_redir;
+	struct sock *sk;
+	struct list_head list;
+};
+
+struct bpf_flow_keys;
+
+struct bpf_sock;
+
+struct __sk_buff {
+	__u32 len;
+	__u32 pkt_type;
+	__u32 mark;
+	__u32 queue_mapping;
+	__u32 protocol;
+	__u32 vlan_present;
+	__u32 vlan_tci;
+	__u32 vlan_proto;
+	__u32 priority;
+	__u32 ingress_ifindex;
+	__u32 ifindex;
+	__u32 tc_index;
+	__u32 cb[5];
+	__u32 hash;
+	__u32 tc_classid;
+	__u32 data;
+	__u32 data_end;
+	__u32 napi_id;
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 data_meta;
+	union {
+		struct bpf_flow_keys *flow_keys;
+	};
+	__u64 tstamp;
+	__u32 wire_len;
+	__u32 gso_segs;
+	union {
+		struct bpf_sock *sk;
+	};
+	__u32 gso_size;
+	__u8 tstamp_type;
+	__u64 hwtstamp;
+};
+
+struct bpf_sock {
+	__u32 bound_dev_if;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 mark;
+	__u32 priority;
+	__u32 src_ip4;
+	__u32 src_ip6[4];
+	__u32 src_port;
+	__be16 dst_port;
+	__u32 dst_ip4;
+	__u32 dst_ip6[4];
+	__u32 state;
+	__s32 rx_queue_mapping;
+};
+
+struct bpf_sock_addr {
+	__u32 user_family;
+	__u32 user_ip4;
+	__u32 user_ip6[4];
+	__u32 user_port;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 msg_src_ip4;
+	__u32 msg_src_ip6[4];
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct bpf_sock_addr_kern {
+	struct sock *sk;
+	struct sockaddr *uaddr;
+	u64 tmp_reg;
+	void *t_ctx;
+	u32 uaddrlen;
+};
+
+struct bpf_sock_ops {
+	__u32 op;
+	union {
+		__u32 args[4];
+		__u32 reply;
+		__u32 replylong[4];
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 is_fullsock;
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 bpf_sock_ops_cb_flags;
+	__u32 state;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u32 sk_txhash;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *skb_data;
+	};
+	union {
+		void *skb_data_end;
+	};
+	__u32 skb_len;
+	__u32 skb_tcp_flags;
+	__u64 skb_hwtstamp;
+};
+
+struct bpf_sock_ops_kern {
+	struct sock *sk;
+	union {
+		u32 args[4];
+		u32 reply;
+		u32 replylong[4];
+	};
+	struct sk_buff *syn_skb;
+	struct sk_buff *skb;
+	void *skb_data_end;
+	u8 op;
+	u8 is_fullsock;
+	u8 remaining_opt_len;
+	u64 temp;
+};
+
+struct sk_msg_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 size;
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct bpf_flow_dissector {
+	struct bpf_flow_keys *flow_keys;
+	const struct sk_buff *skb;
+	const void *data;
+	const void *data_end;
+};
+
+struct bpf_perf_event_data {
+	bpf_user_pt_regs_t regs;
+	__u64 sample_period;
+	__u64 addr;
+};
+
+struct bpf_cgroup_dev_ctx {
+	__u32 access_type;
+	__u32 major;
+	__u32 minor;
+};
+
+struct bpf_sysctl {
+	__u32 write;
+	__u32 file_pos;
+};
+
+struct bpf_sysctl_kern {
+	struct ctl_table_header *head;
+	struct ctl_table *table;
+	void *cur_val;
+	size_t cur_len;
+	void *new_val;
+	size_t new_len;
+	int new_updated;
+	int write;
+	loff_t *ppos;
+	u64 tmp_reg;
+};
+
+struct bpf_sockopt {
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *optval;
+	};
+	union {
+		void *optval_end;
+	};
+	__s32 level;
+	__s32 optname;
+	__s32 optlen;
+	__s32 retval;
+};
+
+struct bpf_sockopt_kern {
+	struct sock *sk;
+	u8 *optval;
+	u8 *optval_end;
+	s32 level;
+	s32 optname;
+	s32 optlen;
+	struct task_struct *current_task;
+	u64 tmp_reg;
+};
+
+struct sk_reuseport_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 len;
+	__u32 eth_protocol;
+	__u32 ip_protocol;
+	__u32 bind_inany;
+	__u32 hash;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		struct bpf_sock *migrating_sk;
+	};
+};
+
+struct sk_reuseport_kern {
+	struct sk_buff *skb;
+	struct sock *sk;
+	struct sock *selected_sk;
+	struct sock *migrating_sk;
+	void *data_end;
+	u32 hash;
+	u32 reuseport_id;
+	bool bind_inany;
+};
+
+struct bpf_sk_lookup {
+	union {
+		union {
+			struct bpf_sock *sk;
+		};
+		__u64 cookie;
+	};
+	__u32 family;
+	__u32 protocol;
+	__u32 remote_ip4;
+	__u32 remote_ip6[4];
+	__be16 remote_port;
+	__u32 local_ip4;
+	__u32 local_ip6[4];
+	__u32 local_port;
+	__u32 ingress_ifindex;
+};
+
+struct bpf_sk_lookup_kern {
+	u16 family;
+	u16 protocol;
+	__be16 sport;
+	u16 dport;
+	struct {
+		__be32 saddr;
+		__be32 daddr;
+	} v4;
+	struct {
+		const struct in6_addr *saddr;
+		const struct in6_addr *daddr;
+	} v6;
+	struct sock *selected_sk;
+	u32 ingress_ifindex;
+	bool no_reuseport;
+};
+
+struct bpf_nf_ctx {
+	const struct nf_hook_state *state;
+	struct sk_buff *skb;
+};
+
+struct fuse_bpf_in_arg {
+	uint32_t size;
+	uint32_t padding;
+	union {
+		const void *value;
+		uint64_t padding2;
+	};
+	union {
+		const void *end_offset;
+		uint64_t padding3;
+	};
+};
+
+struct fuse_bpf_arg {
+	uint32_t size;
+	uint32_t padding;
+	union {
+		void *value;
+		uint64_t padding2;
+	};
+	union {
+		void *end_offset;
+		uint64_t padding3;
+	};
+};
+
+struct fuse_bpf_args {
+	uint64_t nodeid;
+	uint32_t opcode;
+	uint32_t error_in;
+	uint32_t in_numargs;
+	uint32_t out_numargs;
+	uint32_t flags;
+	uint32_t padding;
+	struct fuse_bpf_in_arg in_args[5];
+	struct fuse_bpf_arg out_args[3];
+};
+
+struct bpf_ctx_convert {
+	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
+	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;
+	struct xdp_md BPF_PROG_TYPE_XDP_prog;
+	struct xdp_buff BPF_PROG_TYPE_XDP_kern;
+	struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;
+	struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;
+	struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;
+	struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;
+	struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_IN_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;
+	struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;
+	struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_SK_SKB_kern;
+	struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;
+	struct sk_msg BPF_PROG_TYPE_SK_MSG_kern;
+	struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;
+	struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;
+	bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;
+	struct pt_regs BPF_PROG_TYPE_KPROBE_kern;
+	__u64 BPF_PROG_TYPE_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_TRACEPOINT_kern;
+	struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;
+	struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;
+	void *BPF_PROG_TYPE_TRACING_prog;
+	void *BPF_PROG_TYPE_TRACING_kern;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;
+	struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;
+	struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;
+	struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;
+	struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;
+	__u32 BPF_PROG_TYPE_LIRC_MODE2_prog;
+	u32 BPF_PROG_TYPE_LIRC_MODE2_kern;
+	struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;
+	struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;
+	struct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog;
+	struct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern;
+	void *BPF_PROG_TYPE_STRUCT_OPS_prog;
+	void *BPF_PROG_TYPE_STRUCT_OPS_kern;
+	void *BPF_PROG_TYPE_EXT_prog;
+	void *BPF_PROG_TYPE_EXT_kern;
+	void *BPF_PROG_TYPE_LSM_prog;
+	void *BPF_PROG_TYPE_LSM_kern;
+	void *BPF_PROG_TYPE_SYSCALL_prog;
+	void *BPF_PROG_TYPE_SYSCALL_kern;
+	struct bpf_nf_ctx BPF_PROG_TYPE_NETFILTER_prog;
+	struct bpf_nf_ctx BPF_PROG_TYPE_NETFILTER_kern;
+	struct fuse_bpf_args BPF_PROG_TYPE_FUSE_prog;
+	struct fuse_bpf_args BPF_PROG_TYPE_FUSE_kern;
+};
+
+struct bpf_flow_keys {
+	__u16 nhoff;
+	__u16 thoff;
+	__u16 addr_proto;
+	__u8 is_frag;
+	__u8 is_first_frag;
+	__u8 is_encap;
+	__u8 ip_proto;
+	__be16 n_proto;
+	__be16 sport;
+	__be16 dport;
+	union {
+		struct {
+			__be32 ipv4_src;
+			__be32 ipv4_dst;
+		};
+		struct {
+			__u32 ipv6_src[4];
+			__u32 ipv6_dst[4];
+		};
+	};
+	__u32 flags;
+	__be32 flow_label;
+};
+
+struct nf_hook_state {
+	u8 hook;
+	u8 pf;
+	struct net_device *in;
+	struct net_device *out;
+	struct sock *sk;
+	struct net *net;
+	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
+};
+
+struct btf_verifier_env;
+
+struct resolve_vertex;
+
+struct btf_show;
+
+struct btf_kind_operations {
+	s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);
+	int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);
+	int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	void (*log_details)(struct btf_verifier_env *, const struct btf_type *);
+	void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);
+};
+
+struct resolve_vertex {
+	const struct btf_type *t;
+	u32 type_id;
+	u16 next_member;
+};
+
+enum verifier_phase {
+	CHECK_META = 0,
+	CHECK_TYPE = 1,
+};
+
+enum resolve_mode {
+	RESOLVE_TBD = 0,
+	RESOLVE_PTR = 1,
+	RESOLVE_STRUCT_OR_ARRAY = 2,
+};
+
+struct btf_verifier_env {
+	struct btf *btf;
+	u8 *visit_states;
+	struct resolve_vertex stack[32];
+	struct bpf_verifier_log log;
+	u32 log_type_id;
+	u32 top_stack;
+	enum verifier_phase phase;
+	enum resolve_mode resolve_mode;
+};
+
+struct btf_show {
+	u64 flags;
+	void *target;
+	void (*showfn)(struct btf_show *, const char *, va_list);
+	const struct btf *btf;
+	struct {
+		u8 depth;
+		u8 depth_to_show;
+		u8 depth_check;
+		u8 array_member: 1;
+		u8 array_terminated: 1;
+		u16 array_encoding;
+		u32 type_id;
+		int status;
+		const struct btf_type *type;
+		const struct btf_member *member;
+		char name[80];
+	} state;
+	struct {
+		u32 size;
+		void *head;
+		void *data;
+		u8 safe[32];
+	} obj;
+};
+
+struct bpf_cand_cache {
+	const char *name;
+	u32 name_len;
+	u16 kind;
+	u16 cnt;
+	struct {
+		const struct btf *btf;
+		u32 id;
+	} cands[0];
+};
+
+enum bpf_struct_walk_result {
+	WALK_SCALAR = 0,
+	WALK_PTR = 1,
+	WALK_STRUCT = 2,
+};
+
+enum {
+	BTF_MODULE_F_LIVE = 1,
+};
+
+enum btf_kfunc_hook {
+	BTF_KFUNC_HOOK_COMMON = 0,
+	BTF_KFUNC_HOOK_XDP = 1,
+	BTF_KFUNC_HOOK_TC = 2,
+	BTF_KFUNC_HOOK_STRUCT_OPS = 3,
+	BTF_KFUNC_HOOK_TRACING = 4,
+	BTF_KFUNC_HOOK_SYSCALL = 5,
+	BTF_KFUNC_HOOK_FMODRET = 6,
+	BTF_KFUNC_HOOK_CGROUP_SKB = 7,
+	BTF_KFUNC_HOOK_SCHED_ACT = 8,
+	BTF_KFUNC_HOOK_SK_SKB = 9,
+	BTF_KFUNC_HOOK_SOCKET_FILTER = 10,
+	BTF_KFUNC_HOOK_LWT = 11,
+	BTF_KFUNC_HOOK_NETFILTER = 12,
+	BTF_KFUNC_HOOK_MAX = 13,
+};
+
+enum {
+	BTF_KFUNC_SET_MAX_CNT = 256,
+	BTF_DTOR_KFUNC_MAX_CNT = 256,
+	BTF_KFUNC_FILTER_MAX_CNT = 16,
+};
+
+enum {
+	BTF_FIELD_IGNORE = 0,
+	BTF_FIELD_FOUND = 1,
+};
+
+enum visit_state {
+	NOT_VISITED = 0,
+	VISITED = 1,
+	RESOLVED = 2,
+};
+
+enum {
+	BTF_VAR_STATIC = 0,
+	BTF_VAR_GLOBAL_ALLOCATED = 1,
+	BTF_VAR_GLOBAL_EXTERN = 2,
+};
+
+struct btf_module {
+	struct list_head list;
+	struct module *module;
+	struct btf *btf;
+	struct bin_attribute *sysfs_attr;
+	int flags;
+};
+
+typedef u64 (*btf_bpf_btf_find_by_name_kind)(char *, int, u32, int);
+
+struct btf_decl_tag {
+	__s32 component_idx;
+};
+
+struct btf_sec_info {
+	u32 off;
+	u32 len;
+};
+
+struct btf_enum {
+	__u32 name_off;
+	__s32 val;
+};
+
+struct btf_var {
+	__u32 linkage;
+};
+
+struct btf_enum64 {
+	__u32 name_off;
+	__u32 val_lo32;
+	__u32 val_hi32;
+};
+
+struct btf_show_snprintf {
+	struct btf_show show;
+	int len_left;
+	int len;
+};
+
+struct btf_field_info {
+	enum btf_field_type type;
+	u32 off;
+	union {
+		struct {
+			u32 type_id;
+		} kptr;
+		struct {
+			const char *node_name;
+			u32 value_btf_id;
+		} graph_root;
+	};
+};
+
+typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
+
+typedef void (*swap_r_func_t)(void *, void *, int, const void *);
+
+struct bpf_core_cand;
+
+struct bpf_core_cand_list {
+	struct bpf_core_cand *cands;
+	int len;
+};
+
+struct bpf_core_cand {
+	const struct btf *btf;
+	__u32 id;
+};
+
+struct bpf_core_accessor {
+	__u32 type_id;
+	__u32 idx;
+	const char *name;
+};
+
+struct bpf_core_spec {
+	const struct btf *btf;
+	struct bpf_core_accessor spec[64];
+	__u32 root_type_id;
+	enum bpf_core_relo_kind relo_kind;
+	int len;
+	int raw_spec[64];
+	int raw_len;
+	__u32 bit_offset;
+};
+
+struct bpf_core_relo_res {
+	__u64 orig_val;
+	__u64 new_val;
+	bool poison;
+	bool validate;
+	bool fail_memsz_adjust;
+	__u32 orig_sz;
+	__u32 orig_type_id;
+	__u32 new_sz;
+	__u32 new_type_id;
+};
+
+struct bpf_dispatcher_prog {
+	struct bpf_prog *prog;
+	refcount_t users;
+};
+
+struct bpf_dispatcher {
+	struct mutex mutex;
+	void *func;
+	struct bpf_dispatcher_prog progs[48];
+	int num_progs;
+	void *image;
+	void *rw_image;
+	u32 image_off;
+	struct bpf_ksym ksym;
+	u64 android_kabi_reserved1;
+};
+
+enum net_device_flags {
+	IFF_UP = 1,
+	IFF_BROADCAST = 2,
+	IFF_DEBUG = 4,
+	IFF_LOOPBACK = 8,
+	IFF_POINTOPOINT = 16,
+	IFF_NOTRAILERS = 32,
+	IFF_RUNNING = 64,
+	IFF_NOARP = 128,
+	IFF_PROMISC = 256,
+	IFF_ALLMULTI = 512,
+	IFF_MASTER = 1024,
+	IFF_SLAVE = 2048,
+	IFF_MULTICAST = 4096,
+	IFF_PORTSEL = 8192,
+	IFF_AUTOMEDIA = 16384,
+	IFF_DYNAMIC = 32768,
+	IFF_LOWER_UP = 65536,
+	IFF_DORMANT = 131072,
+	IFF_ECHO = 262144,
+};
+
+enum netdev_priv_flags {
+	IFF_802_1Q_VLAN = 1ULL,
+	IFF_EBRIDGE = 2ULL,
+	IFF_BONDING = 4ULL,
+	IFF_ISATAP = 8ULL,
+	IFF_WAN_HDLC = 16ULL,
+	IFF_XMIT_DST_RELEASE = 32ULL,
+	IFF_DONT_BRIDGE = 64ULL,
+	IFF_DISABLE_NETPOLL = 128ULL,
+	IFF_MACVLAN_PORT = 256ULL,
+	IFF_BRIDGE_PORT = 512ULL,
+	IFF_OVS_DATAPATH = 1024ULL,
+	IFF_TX_SKB_SHARING = 2048ULL,
+	IFF_UNICAST_FLT = 4096ULL,
+	IFF_TEAM_PORT = 8192ULL,
+	IFF_SUPP_NOFCS = 16384ULL,
+	IFF_LIVE_ADDR_CHANGE = 32768ULL,
+	IFF_MACVLAN = 65536ULL,
+	IFF_XMIT_DST_RELEASE_PERM = 131072ULL,
+	IFF_L3MDEV_MASTER = 262144ULL,
+	IFF_NO_QUEUE = 524288ULL,
+	IFF_OPENVSWITCH = 1048576ULL,
+	IFF_L3MDEV_SLAVE = 2097152ULL,
+	IFF_TEAM = 4194304ULL,
+	IFF_RXFH_CONFIGURED = 8388608ULL,
+	IFF_PHONY_HEADROOM = 16777216ULL,
+	IFF_MACSEC = 33554432ULL,
+	IFF_NO_RX_HANDLER = 67108864ULL,
+	IFF_FAILOVER = 134217728ULL,
+	IFF_FAILOVER_SLAVE = 268435456ULL,
+	IFF_L3MDEV_RX_HANDLER = 536870912ULL,
+	IFF_NO_ADDRCONF = 1073741824ULL,
+	IFF_TX_SKB_NO_LINEAR = 2147483648ULL,
+	IFF_CHANGE_PROTO_DOWN = 4294967296ULL,
+	IFF_SEE_ALL_HWTSTAMP_REQUESTS = 8589934592ULL,
+};
+
+enum netdev_xdp_act {
+	NETDEV_XDP_ACT_BASIC = 1,
+	NETDEV_XDP_ACT_REDIRECT = 2,
+	NETDEV_XDP_ACT_NDO_XMIT = 4,
+	NETDEV_XDP_ACT_XSK_ZEROCOPY = 8,
+	NETDEV_XDP_ACT_HW_OFFLOAD = 16,
+	NETDEV_XDP_ACT_RX_SG = 32,
+	NETDEV_XDP_ACT_NDO_XMIT_SG = 64,
+	NETDEV_XDP_ACT_MASK = 127,
+};
+
+enum xdp_buff_flags {
+	XDP_FLAGS_HAS_FRAGS = 1,
+	XDP_FLAGS_FRAGS_PF_MEMALLOC = 2,
+};
+
+enum {
+	BPF_F_BROADCAST = 8,
+	BPF_F_EXCLUDE_INGRESS = 16,
+};
+
+enum netdev_cmd {
+	NETDEV_UP = 1,
+	NETDEV_DOWN = 2,
+	NETDEV_REBOOT = 3,
+	NETDEV_CHANGE = 4,
+	NETDEV_REGISTER = 5,
+	NETDEV_UNREGISTER = 6,
+	NETDEV_CHANGEMTU = 7,
+	NETDEV_CHANGEADDR = 8,
+	NETDEV_PRE_CHANGEADDR = 9,
+	NETDEV_GOING_DOWN = 10,
+	NETDEV_CHANGENAME = 11,
+	NETDEV_FEAT_CHANGE = 12,
+	NETDEV_BONDING_FAILOVER = 13,
+	NETDEV_PRE_UP = 14,
+	NETDEV_PRE_TYPE_CHANGE = 15,
+	NETDEV_POST_TYPE_CHANGE = 16,
+	NETDEV_POST_INIT = 17,
+	NETDEV_PRE_UNINIT = 18,
+	NETDEV_RELEASE = 19,
+	NETDEV_NOTIFY_PEERS = 20,
+	NETDEV_JOIN = 21,
+	NETDEV_CHANGEUPPER = 22,
+	NETDEV_RESEND_IGMP = 23,
+	NETDEV_PRECHANGEMTU = 24,
+	NETDEV_CHANGEINFODATA = 25,
+	NETDEV_BONDING_INFO = 26,
+	NETDEV_PRECHANGEUPPER = 27,
+	NETDEV_CHANGELOWERSTATE = 28,
+	NETDEV_UDP_TUNNEL_PUSH_INFO = 29,
+	NETDEV_UDP_TUNNEL_DROP_INFO = 30,
+	NETDEV_CHANGE_TX_QUEUE_LEN = 31,
+	NETDEV_CVLAN_FILTER_PUSH_INFO = 32,
+	NETDEV_CVLAN_FILTER_DROP_INFO = 33,
+	NETDEV_SVLAN_FILTER_PUSH_INFO = 34,
+	NETDEV_SVLAN_FILTER_DROP_INFO = 35,
+	NETDEV_OFFLOAD_XSTATS_ENABLE = 36,
+	NETDEV_OFFLOAD_XSTATS_DISABLE = 37,
+	NETDEV_OFFLOAD_XSTATS_REPORT_USED = 38,
+	NETDEV_OFFLOAD_XSTATS_REPORT_DELTA = 39,
+	NETDEV_XDP_FEAT_CHANGE = 40,
+};
+
+struct bpf_dtab_netdev;
+
+struct bpf_dtab {
+	struct bpf_map map;
+	struct bpf_dtab_netdev __attribute__((btf_type_tag("rcu"))) **netdev_map;
+	struct list_head list;
+	struct hlist_head *dev_index_head;
+	spinlock_t index_lock;
+	unsigned int items;
+	u32 n_buckets;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_devmap_val {
+	__u32 ifindex;
+	union {
+		int fd;
+		__u32 id;
+	} bpf_prog;
+};
+
+struct bpf_dtab_netdev {
+	struct net_device *dev;
+	struct hlist_node index_hlist;
+	struct bpf_prog *xdp_prog;
+	struct callback_head rcu;
+	unsigned int idx;
+	struct bpf_devmap_val val;
+};
+
+typedef struct bio_vec skb_frag_t;
+
+struct skb_shared_info {
+	__u8 flags;
+	__u8 meta_len;
+	__u8 nr_frags;
+	__u8 tx_flags;
+	unsigned short gso_size;
+	unsigned short gso_segs;
+	struct sk_buff *frag_list;
+	struct skb_shared_hwtstamps hwtstamps;
+	unsigned int gso_type;
+	u32 tskey;
+	atomic_t dataref;
+	unsigned int xdp_frags_size;
+	void *destructor_arg;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_oem_data1[3];
+	skb_frag_t frags[17];
+};
+
+struct bpf_nh_params {
+	u32 nh_family;
+	union {
+		u32 ipv4_nh;
+		struct in6_addr ipv6_nh;
+	};
+};
+
+struct bpf_redirect_info {
+	u64 tgt_index;
+	void *tgt_value;
+	struct bpf_map *map;
+	u32 flags;
+	u32 kern_flags;
+	u32 map_id;
+	enum bpf_map_type map_type;
+	struct bpf_nh_params nh;
+};
+
+struct netdev_notifier_info {
+	struct net_device *dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct bpf_cpu_map_entry;
+
+struct xdp_bulk_queue {
+	void *q[8];
+	struct list_head flush_node;
+	struct bpf_cpu_map_entry *obj;
+	unsigned int count;
+};
+
+struct bpf_cpumap_val {
+	__u32 qsize;
+	union {
+		int fd;
+		__u32 id;
+	} bpf_prog;
+};
+
+struct ptr_ring;
+
+struct bpf_cpu_map_entry {
+	u32 cpu;
+	int map_id;
+	struct xdp_bulk_queue __attribute__((btf_type_tag("percpu"))) *bulkq;
+	struct ptr_ring *queue;
+	struct task_struct *kthread;
+	struct bpf_cpumap_val value;
+	struct bpf_prog *prog;
+	struct completion kthread_running;
+	struct rcu_work free_work;
+};
+
+struct ptr_ring {
+	int producer;
+	spinlock_t producer_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int consumer_head;
+	int consumer_tail;
+	spinlock_t consumer_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int size;
+	int batch;
+	void **queue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_cpu_map {
+	struct bpf_map map;
+	struct bpf_cpu_map_entry __attribute__((btf_type_tag("rcu"))) **cpu_map;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_prog_offload_ops;
+
+struct bpf_offload_dev {
+	const struct bpf_prog_offload_ops *ops;
+	struct list_head netdevs;
+	void *priv;
+};
+
+struct bpf_prog_offload_ops {
+	int (*insn_hook)(struct bpf_verifier_env *, int, int);
+	int (*finalize)(struct bpf_verifier_env *);
+	int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);
+	int (*remove_insns)(struct bpf_verifier_env *, u32, u32);
+	int (*prepare)(struct bpf_prog *);
+	int (*translate)(struct bpf_prog *);
+	void (*destroy)(struct bpf_prog *);
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	XDP_METADATA_KFUNC_RX_TIMESTAMP = 0,
+	XDP_METADATA_KFUNC_RX_HASH = 1,
+	MAX_XDP_METADATA_KFUNC = 2,
+};
+
+struct bpf_offload_netdev {
+	struct rhash_head l;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	struct list_head progs;
+	struct list_head maps;
+	struct list_head offdev_netdevs;
+};
+
+typedef struct ns_common *ns_get_path_helper_t(void *);
+
+struct ns_get_path_bpf_prog_args {
+	struct bpf_prog *prog;
+	struct bpf_prog_info *info;
+};
+
+struct ns_get_path_bpf_map_args {
+	struct bpf_offloaded_map *offmap;
+	struct bpf_map_info *info;
+};
+
+enum netns_bpf_attach_type {
+	NETNS_BPF_INVALID = -1,
+	NETNS_BPF_FLOW_DISSECTOR = 0,
+	NETNS_BPF_SK_LOOKUP = 1,
+	MAX_NETNS_BPF_ATTACH_TYPE = 2,
+};
+
+struct bpf_netns_link {
+	struct bpf_link link;
+	enum bpf_attach_type type;
+	enum netns_bpf_attach_type netns_type;
+	struct net *net;
+	struct list_head node;
+};
+
+struct mini_Qdisc;
+
+struct tcx_entry {
+	struct mini_Qdisc __attribute__((btf_type_tag("rcu"))) *miniq;
+	struct bpf_mprog_bundle bundle;
+	bool miniq_active;
+	struct callback_head rcu;
+};
+
+struct mini_Qdisc {
+	struct tcf_proto *filter_list;
+	struct tcf_block *block;
+	struct gnet_stats_basic_sync __attribute__((btf_type_tag("percpu"))) *cpu_bstats;
+	struct gnet_stats_queue __attribute__((btf_type_tag("percpu"))) *cpu_qstats;
+	unsigned long rcu_state;
+};
+
+struct tcx_link {
+	struct bpf_link link;
+	struct net_device *dev;
+	u32 location;
+};
+
+enum {
+	BPF_F_SKIP_FIELD_MASK = 255,
+	BPF_F_USER_STACK = 256,
+	BPF_F_FAST_STACK_CMP = 512,
+	BPF_F_REUSE_STACKID = 1024,
+	BPF_F_USER_BUILD_ID = 2048,
+};
+
+enum bpf_stack_build_id_status {
+	BPF_STACK_BUILD_ID_EMPTY = 0,
+	BPF_STACK_BUILD_ID_VALID = 1,
+	BPF_STACK_BUILD_ID_IP = 2,
+};
+
+enum perf_callchain_context {
+	PERF_CONTEXT_HV = 18446744073709551584ULL,
+	PERF_CONTEXT_KERNEL = 18446744073709551488ULL,
+	PERF_CONTEXT_USER = 18446744073709551104ULL,
+	PERF_CONTEXT_GUEST = 18446744073709549568ULL,
+	PERF_CONTEXT_GUEST_KERNEL = 18446744073709549440ULL,
+	PERF_CONTEXT_GUEST_USER = 18446744073709549056ULL,
+	PERF_CONTEXT_MAX = 18446744073709547521ULL,
+};
+
+typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+struct stack_map_bucket;
+
+struct bpf_stack_map {
+	struct bpf_map map;
+	void *elems;
+	struct pcpu_freelist freelist;
+	u32 n_buckets;
+	struct stack_map_bucket *buckets[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct stack_map_bucket {
+	struct pcpu_freelist_node fnode;
+	u32 hash;
+	u32 nr;
+	u64 data[0];
+};
+
+struct bpf_stack_build_id {
+	__s32 status;
+	unsigned char build_id[20];
+	union {
+		__u64 offset;
+		__u64 ip;
+	};
+};
+
+struct cgroup_iter_priv {
+	struct cgroup_subsys_state *start_css;
+	bool visited_all;
+	bool terminate;
+	int order;
+};
+
+struct bpf_iter__cgroup {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct cgroup *cgroup;
+	};
+};
+
+typedef u64 (*btf_bpf_cgrp_storage_get)(struct bpf_map *, struct cgroup *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_cgrp_storage_delete)(struct bpf_map *, struct cgroup *);
+
+struct cgroup_lsm_atype {
+	u32 attach_btf_id;
+	int refcnt;
+};
+
+enum {
+	TCPF_ESTABLISHED = 2,
+	TCPF_SYN_SENT = 4,
+	TCPF_SYN_RECV = 8,
+	TCPF_FIN_WAIT1 = 16,
+	TCPF_FIN_WAIT2 = 32,
+	TCPF_TIME_WAIT = 64,
+	TCPF_CLOSE = 128,
+	TCPF_CLOSE_WAIT = 256,
+	TCPF_LAST_ACK = 512,
+	TCPF_LISTEN = 1024,
+	TCPF_CLOSING = 2048,
+	TCPF_NEW_SYN_RECV = 4096,
+};
+
+enum {
+	BPF_F_SYSCTL_BASE_NAME = 1,
+};
+
+typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_retval)();
+
+typedef u64 (*btf_bpf_set_retval)(int);
+
+typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);
+
+typedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t);
+
+typedef u64 (*btf_bpf_sysctl_get_new_value)(struct bpf_sysctl_kern *, char *, size_t);
+
+typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sockopt)(struct bpf_sockopt_kern *);
+
+struct bpf_cgroup_link;
+
+struct bpf_prog_list {
+	struct hlist_node node;
+	struct bpf_prog *prog;
+	struct bpf_cgroup_link *link;
+	struct bpf_cgroup_storage *storage[2];
+};
+
+struct bpf_cgroup_link {
+	struct bpf_link link;
+	struct cgroup *cgroup;
+	enum bpf_attach_type type;
+};
+
+struct qdisc_skb_cb {
+	struct {
+		unsigned int pkt_len;
+		u16 slave_dev_queue_mapping;
+		u16 tc_classid;
+	};
+	unsigned char data[20];
+};
+
+struct bpf_skb_data_end {
+	struct qdisc_skb_cb qdisc_cb;
+	void *data_meta;
+	void *data_end;
+};
+
+struct bpf_cg_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	const struct bpf_prog_array_item *prog_item;
+	int retval;
+};
+
+struct bpf_sockopt_buf {
+	u8 data[32];
+};
+
+enum {
+	IPPROTO_IP = 0,
+	IPPROTO_ICMP = 1,
+	IPPROTO_IGMP = 2,
+	IPPROTO_IPIP = 4,
+	IPPROTO_TCP = 6,
+	IPPROTO_EGP = 8,
+	IPPROTO_PUP = 12,
+	IPPROTO_UDP = 17,
+	IPPROTO_IDP = 22,
+	IPPROTO_TP = 29,
+	IPPROTO_DCCP = 33,
+	IPPROTO_IPV6 = 41,
+	IPPROTO_RSVP = 46,
+	IPPROTO_GRE = 47,
+	IPPROTO_ESP = 50,
+	IPPROTO_AH = 51,
+	IPPROTO_MTP = 92,
+	IPPROTO_BEETPH = 94,
+	IPPROTO_ENCAP = 98,
+	IPPROTO_PIM = 103,
+	IPPROTO_COMP = 108,
+	IPPROTO_L2TP = 115,
+	IPPROTO_SCTP = 132,
+	IPPROTO_UDPLITE = 136,
+	IPPROTO_MPLS = 137,
+	IPPROTO_ETHERNET = 143,
+	IPPROTO_RAW = 255,
+	IPPROTO_MPTCP = 262,
+	IPPROTO_MAX = 263,
+};
+
+enum sock_type {
+	SOCK_STREAM = 1,
+	SOCK_DGRAM = 2,
+	SOCK_RAW = 3,
+	SOCK_RDM = 4,
+	SOCK_SEQPACKET = 5,
+	SOCK_DCCP = 6,
+	SOCK_PACKET = 10,
+};
+
+enum sock_flags {
+	SOCK_DEAD = 0,
+	SOCK_DONE = 1,
+	SOCK_URGINLINE = 2,
+	SOCK_KEEPOPEN = 3,
+	SOCK_LINGER = 4,
+	SOCK_DESTROY = 5,
+	SOCK_BROADCAST = 6,
+	SOCK_TIMESTAMP = 7,
+	SOCK_ZAPPED = 8,
+	SOCK_USE_WRITE_QUEUE = 9,
+	SOCK_DBG = 10,
+	SOCK_RCVTSTAMP = 11,
+	SOCK_RCVTSTAMPNS = 12,
+	SOCK_LOCALROUTE = 13,
+	SOCK_MEMALLOC = 14,
+	SOCK_TIMESTAMPING_RX_SOFTWARE = 15,
+	SOCK_FASYNC = 16,
+	SOCK_RXQ_OVFL = 17,
+	SOCK_ZEROCOPY = 18,
+	SOCK_WIFI_STATUS = 19,
+	SOCK_NOFCS = 20,
+	SOCK_FILTER_LOCKED = 21,
+	SOCK_SELECT_ERR_QUEUE = 22,
+	SOCK_RCU_FREE = 23,
+	SOCK_TXTIME = 24,
+	SOCK_XDP = 25,
+	SOCK_TSTAMP_NEW = 26,
+	SOCK_RCVMARK = 27,
+};
+
+struct reuseport_array {
+	struct bpf_map map;
+	struct sock __attribute__((btf_type_tag("rcu"))) *ptrs[0];
+};
+
+enum bpf_struct_ops_state {
+	BPF_STRUCT_OPS_STATE_INIT = 0,
+	BPF_STRUCT_OPS_STATE_INUSE = 1,
+	BPF_STRUCT_OPS_STATE_TOBEFREE = 2,
+	BPF_STRUCT_OPS_STATE_READY = 3,
+};
+
+struct bpf_dummy_ops_state;
+
+struct bpf_dummy_ops {
+	int (*test_1)(struct bpf_dummy_ops_state *);
+	int (*test_2)(struct bpf_dummy_ops_state *, int, unsigned short, char, unsigned long);
+	int (*test_sleepable)(struct bpf_dummy_ops_state *);
+};
+
+struct bpf_struct_ops_bpf_dummy_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_dummy_ops data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_dummy_ops_state {
+	int val;
+};
+
+struct bpf_struct_ops_tcp_congestion_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct tcp_congestion_ops data;
+};
+
+struct bpf_struct_ops_value {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	char data[0];
+};
+
+struct bpf_struct_ops_map {
+	struct bpf_map map;
+	struct callback_head rcu;
+	const struct bpf_struct_ops *st_ops;
+	struct mutex lock;
+	struct bpf_link **links;
+	void *image;
+	struct bpf_struct_ops_value *uvalue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_struct_ops_value kvalue;
+};
+
+struct bpf_struct_ops_link {
+	struct bpf_link link;
+	struct bpf_map __attribute__((btf_type_tag("rcu"))) *map;
+};
+
+struct bpf_cpumask {
+	cpumask_t cpumask;
+	refcount_t usage;
+};
+
+enum {
+	BTF_SOCK_TYPE_INET = 0,
+	BTF_SOCK_TYPE_INET_CONN = 1,
+	BTF_SOCK_TYPE_INET_REQ = 2,
+	BTF_SOCK_TYPE_INET_TW = 3,
+	BTF_SOCK_TYPE_REQ = 4,
+	BTF_SOCK_TYPE_SOCK = 5,
+	BTF_SOCK_TYPE_SOCK_COMMON = 6,
+	BTF_SOCK_TYPE_TCP = 7,
+	BTF_SOCK_TYPE_TCP_REQ = 8,
+	BTF_SOCK_TYPE_TCP_TW = 9,
+	BTF_SOCK_TYPE_TCP6 = 10,
+	BTF_SOCK_TYPE_UDP = 11,
+	BTF_SOCK_TYPE_UDP6 = 12,
+	BTF_SOCK_TYPE_UNIX = 13,
+	BTF_SOCK_TYPE_MPTCP = 14,
+	BTF_SOCK_TYPE_SOCKET = 15,
+	MAX_BTF_SOCK_TYPE = 16,
+};
+
+enum {
+	BPF_F_BPRM_SECUREEXEC = 1,
+};
+
+typedef u64 (*btf_bpf_bprm_opts_set)(struct linux_binprm *, u64);
+
+typedef u64 (*btf_bpf_ima_inode_hash)(struct inode *, void *, u32);
+
+typedef u64 (*btf_bpf_ima_file_hash)(struct file *, void *, u32);
+
+typedef u64 (*btf_bpf_get_attach_cookie)(void *);
+
+struct xattr {
+	const char *name;
+	void *value;
+	size_t value_len;
+};
+
+struct sembuf {
+	unsigned short sem_num;
+	short sem_op;
+	short sem_flg;
+};
+
+typedef unsigned int kasan_vmalloc_flags_t;
+
+struct perf_event_mmap_page;
+
+struct perf_buffer {
+	refcount_t refcount;
+	struct callback_head callback_head;
+	int nr_pages;
+	int overwrite;
+	int paused;
+	atomic_t poll;
+	local_t head;
+	unsigned int nest;
+	local_t events;
+	local_t wakeup;
+	local_t lost;
+	long watermark;
+	long aux_watermark;
+	spinlock_t event_lock;
+	struct list_head event_list;
+	atomic_t mmap_count;
+	unsigned long mmap_locked;
+	struct user_struct *mmap_user;
+	long aux_head;
+	unsigned int aux_nest;
+	long aux_wakeup;
+	unsigned long aux_pgoff;
+	int aux_nr_pages;
+	int aux_overwrite;
+	atomic_t aux_mmap_count;
+	unsigned long aux_mmap_locked;
+	void (*free_aux)(void *);
+	refcount_t aux_refcount;
+	int aux_in_sampling;
+	void **aux_pages;
+	void *aux_priv;
+	struct perf_event_mmap_page *user_page;
+	void *data_pages[0];
+};
+
+struct perf_event_mmap_page {
+	__u32 version;
+	__u32 compat_version;
+	__u32 lock;
+	__u32 index;
+	__s64 offset;
+	__u64 time_enabled;
+	__u64 time_running;
+	union {
+		__u64 capabilities;
+		struct {
+			__u64 cap_bit0: 1;
+			__u64 cap_bit0_is_deprecated: 1;
+			__u64 cap_user_rdpmc: 1;
+			__u64 cap_user_time: 1;
+			__u64 cap_user_time_zero: 1;
+			__u64 cap_user_time_short: 1;
+			__u64 cap_____res: 58;
+		};
+	};
+	__u16 pmc_width;
+	__u16 time_shift;
+	__u32 time_mult;
+	__u64 time_offset;
+	__u64 time_zero;
+	__u32 size;
+	__u32 __reserved_1;
+	__u64 time_cycles;
+	__u64 time_mask;
+	__u8 __reserved[928];
+	__u64 data_head;
+	__u64 data_tail;
+	__u64 data_offset;
+	__u64 data_size;
+	__u64 aux_head;
+	__u64 aux_tail;
+	__u64 aux_offset;
+	__u64 aux_size;
+};
+
+struct perf_cpu_context {
+	struct perf_event_context ctx;
+	struct perf_event_context *task_ctx;
+	int online;
+	int heap_size;
+	struct perf_event **heap;
+	struct perf_event *heap_default[2];
+};
+
+struct swevent_hlist;
+
+struct swevent_htable {
+	struct swevent_hlist *swevent_hlist;
+	struct mutex hlist_mutex;
+	int hlist_refcount;
+	int recursion[4];
+};
+
+struct swevent_hlist {
+	struct hlist_head heads[256];
+	struct callback_head callback_head;
+};
+
+struct min_heap_callbacks {
+	int elem_size;
+	bool (*less)(const void *, const void *);
+	void (*swp)(void *, void *);
+};
+
+struct pmu_event_list {
+	raw_spinlock_t lock;
+	struct list_head list;
+};
+
+enum perf_addr_filter_action_t {
+	PERF_ADDR_FILTER_ACTION_STOP = 0,
+	PERF_ADDR_FILTER_ACTION_START = 1,
+	PERF_ADDR_FILTER_ACTION_FILTER = 2,
+};
+
+struct match_token {
+	int token;
+	const char *pattern;
+};
+
+enum event_type_t {
+	EVENT_FLEXIBLE = 1,
+	EVENT_PINNED = 2,
+	EVENT_TIME = 4,
+	EVENT_CPU = 8,
+	EVENT_CGROUP = 16,
+	EVENT_ALL = 3,
+};
+
+enum perf_event_type {
+	PERF_RECORD_MMAP = 1,
+	PERF_RECORD_LOST = 2,
+	PERF_RECORD_COMM = 3,
+	PERF_RECORD_EXIT = 4,
+	PERF_RECORD_THROTTLE = 5,
+	PERF_RECORD_UNTHROTTLE = 6,
+	PERF_RECORD_FORK = 7,
+	PERF_RECORD_READ = 8,
+	PERF_RECORD_SAMPLE = 9,
+	PERF_RECORD_MMAP2 = 10,
+	PERF_RECORD_AUX = 11,
+	PERF_RECORD_ITRACE_START = 12,
+	PERF_RECORD_LOST_SAMPLES = 13,
+	PERF_RECORD_SWITCH = 14,
+	PERF_RECORD_SWITCH_CPU_WIDE = 15,
+	PERF_RECORD_NAMESPACES = 16,
+	PERF_RECORD_KSYMBOL = 17,
+	PERF_RECORD_BPF_EVENT = 18,
+	PERF_RECORD_CGROUP = 19,
+	PERF_RECORD_TEXT_POKE = 20,
+	PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
+	PERF_RECORD_MAX = 22,
+};
+
+enum {
+	NET_NS_INDEX = 0,
+	UTS_NS_INDEX = 1,
+	IPC_NS_INDEX = 2,
+	PID_NS_INDEX = 3,
+	USER_NS_INDEX = 4,
+	MNT_NS_INDEX = 5,
+	CGROUP_NS_INDEX = 6,
+	NR_NAMESPACES = 7,
+};
+
+enum perf_event_task_context {
+	perf_invalid_context = -1,
+	perf_hw_context = 0,
+	perf_sw_context = 1,
+	perf_nr_task_contexts = 2,
+};
+
+enum perf_event_read_format {
+	PERF_FORMAT_TOTAL_TIME_ENABLED = 1,
+	PERF_FORMAT_TOTAL_TIME_RUNNING = 2,
+	PERF_FORMAT_ID = 4,
+	PERF_FORMAT_GROUP = 8,
+	PERF_FORMAT_LOST = 16,
+	PERF_FORMAT_MAX = 32,
+};
+
+enum perf_branch_sample_type {
+	PERF_SAMPLE_BRANCH_USER = 1,
+	PERF_SAMPLE_BRANCH_KERNEL = 2,
+	PERF_SAMPLE_BRANCH_HV = 4,
+	PERF_SAMPLE_BRANCH_ANY = 8,
+	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
+	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
+	PERF_SAMPLE_BRANCH_IND_CALL = 64,
+	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
+	PERF_SAMPLE_BRANCH_IN_TX = 256,
+	PERF_SAMPLE_BRANCH_NO_TX = 512,
+	PERF_SAMPLE_BRANCH_COND = 1024,
+	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
+	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
+	PERF_SAMPLE_BRANCH_CALL = 8192,
+	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
+	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
+	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
+	PERF_SAMPLE_BRANCH_PRIV_SAVE = 262144,
+	PERF_SAMPLE_BRANCH_MAX = 524288,
+};
+
+enum perf_probe_config {
+	PERF_PROBE_CONFIG_IS_RETPROBE = 1,
+	PERF_UPROBE_REF_CTR_OFFSET_BITS = 32,
+	PERF_UPROBE_REF_CTR_OFFSET_SHIFT = 32,
+};
+
+enum perf_event_ioc_flags {
+	PERF_IOC_FLAG_GROUP = 1,
+};
+
+enum {
+	IF_STATE_ACTION = 0,
+	IF_STATE_SOURCE = 1,
+	IF_STATE_END = 2,
+};
+
+enum {
+	IF_ACT_NONE = -1,
+	IF_ACT_FILTER = 0,
+	IF_ACT_START = 1,
+	IF_ACT_STOP = 2,
+	IF_SRC_FILE = 3,
+	IF_SRC_KERNEL = 4,
+	IF_SRC_FILEADDR = 5,
+	IF_SRC_KERNELADDR = 6,
+};
+
+struct perf_pmu_events_attr {
+	struct device_attribute attr;
+	u64 id;
+	const char *event_str;
+};
+
+struct perf_addr_filter {
+	struct list_head entry;
+	struct path path;
+	unsigned long offset;
+	unsigned long size;
+	enum perf_addr_filter_action_t action;
+};
+
+typedef void (*event_f)(struct perf_event *, struct perf_cpu_context *, struct perf_event_context *, void *);
+
+struct perf_event_header {
+	__u32 type;
+	__u16 misc;
+	__u16 size;
+};
+
+struct perf_switch_event {
+	struct task_struct *task;
+	struct task_struct *next_prev;
+	struct {
+		struct perf_event_header header;
+		u32 next_prev_pid;
+		u32 next_prev_tid;
+	} event_id;
+};
+
+typedef void perf_iterate_f(struct perf_event *, void *);
+
+struct stop_event_data {
+	struct perf_event *event;
+	unsigned int restart;
+};
+
+typedef int (*remote_function_f)(void *);
+
+struct remote_function_call {
+	struct task_struct *p;
+	remote_function_f func;
+	void *info;
+	int ret;
+};
+
+struct perf_task_event {
+	struct task_struct *task;
+	struct perf_event_context *task_ctx;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 ppid;
+		u32 tid;
+		u32 ptid;
+		u64 time;
+	} event_id;
+};
+
+struct perf_ns_link_info {
+	__u64 dev;
+	__u64 ino;
+};
+
+struct perf_comm_event {
+	struct task_struct *task;
+	char *comm;
+	int comm_size;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+	} event_id;
+};
+
+struct perf_mmap_event {
+	struct vm_area_struct *vma;
+	const char *file_name;
+	int file_size;
+	int maj;
+	int min;
+	u64 ino;
+	u64 ino_generation;
+	u32 prot;
+	u32 flags;
+	u8 build_id[20];
+	u32 build_id_size;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+		u64 start;
+		u64 len;
+		u64 pgoff;
+	} event_id;
+};
+
+struct perf_aux_event {
+	struct perf_event_header header;
+	u64 offset;
+	u64 size;
+	u64 flags;
+};
+
+struct perf_aux_event___2 {
+	struct perf_event_header header;
+	u64 hw_id;
+};
+
+struct __group_key {
+	int cpu;
+	struct pmu *pmu;
+	struct cgroup *cgroup;
+};
+
+struct min_heap {
+	void *data;
+	int nr;
+	int size;
+};
+
+struct perf_aux_event___3 {
+	struct perf_event_header header;
+	u32 pid;
+	u32 tid;
+};
+
+struct perf_read_event {
+	struct perf_event_header header;
+	u32 pid;
+	u32 tid;
+};
+
+typedef struct {
+	char *from;
+	char *to;
+} substring_t;
+
+struct remote_output {
+	struct perf_buffer *rb;
+	int err;
+};
+
+struct perf_namespaces_event {
+	struct task_struct *task;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+		u64 nr_namespaces;
+		struct perf_ns_link_info link_info[7];
+	} event_id;
+};
+
+struct perf_ksymbol_event {
+	const char *name;
+	int name_len;
+	struct {
+		struct perf_event_header header;
+		u64 addr;
+		u32 len;
+		u16 ksym_type;
+		u16 flags;
+	} event_id;
+};
+
+struct perf_bpf_event {
+	struct bpf_prog *prog;
+	struct {
+		struct perf_event_header header;
+		u16 type;
+		u16 flags;
+		u32 id;
+		u8 tag[8];
+	} event_id;
+};
+
+struct perf_text_poke_event {
+	const void *old_bytes;
+	const void *new_bytes;
+	size_t pad;
+	u16 old_len;
+	u16 new_len;
+	struct {
+		struct perf_event_header header;
+		u64 addr;
+	} event_id;
+};
+
+struct event_function_struct {
+	struct perf_event *event;
+	event_f func;
+	void *data;
+};
+
+struct perf_read_data {
+	struct perf_event *event;
+	bool group;
+	int ret;
+};
+
+struct callchain_cpus_entries {
+	struct callback_head callback_head;
+	struct perf_callchain_entry *cpu_entries[0];
+};
+
+struct bp_slots_histogram {
+	atomic_t *count;
+};
+
+struct rhltable {
+	struct rhashtable ht;
+};
+
+struct bp_cpuinfo {
+	unsigned int cpu_pinned;
+	struct bp_slots_histogram tsk_pinned;
+};
+
+struct xol_area {
+	wait_queue_head_t wq;
+	atomic_t slot_count;
+	unsigned long *bitmap;
+	struct vm_special_mapping xol_mapping;
+	struct page *pages[2];
+	unsigned long vaddr;
+};
+
+struct uprobe {
+	struct rb_node rb_node;
+	refcount_t ref;
+	struct rw_semaphore register_rwsem;
+	struct rw_semaphore consumer_rwsem;
+	struct list_head pending_list;
+	struct uprobe_consumer *consumers;
+	struct inode *inode;
+	loff_t offset;
+	loff_t ref_ctr_offset;
+	unsigned long flags;
+	struct arch_uprobe arch;
+};
+
+typedef __le32 uprobe_opcode_t;
+
+struct delayed_uprobe {
+	struct list_head list;
+	struct uprobe *uprobe;
+	struct mm_struct *mm;
+};
+
+struct page_vma_mapped_walk {
+	unsigned long pfn;
+	unsigned long nr_pages;
+	unsigned long pgoff;
+	struct vm_area_struct *vma;
+	unsigned long address;
+	pmd_t *pmd;
+	pte_t *pte;
+	spinlock_t *ptl;
+	unsigned int flags;
+};
+
+typedef unsigned int fgf_t;
+
+struct __uprobe_key {
+	struct inode *inode;
+	loff_t offset;
+};
+
+struct map_info {
+	struct map_info *next;
+	struct mm_struct *mm;
+	unsigned long vaddr;
+};
+
+typedef int filler_t(struct file *, struct folio *);
+
+struct static_key_deferred {
+	struct static_key key;
+	unsigned long timeout;
+	struct delayed_work work;
+};
+
+struct static_key_mod {
+	struct static_key_mod *next;
+	struct jump_entry *entries;
+	struct module *mod;
+};
+
+struct key_preparsed_payload {
+	const char *orig_description;
+	char *description;
+	union key_payload payload;
+	const void *data;
+	size_t datalen;
+	size_t quotalen;
+	time64_t expiry;
+};
+
+struct key_match_data {
+	bool (*cmp)(const struct key *, const struct key_match_data *);
+	const void *raw_data;
+	void *preparsed;
+	unsigned int lookup_type;
+};
+
+enum kernel_pkey_operation {
+	kernel_pkey_encrypt = 0,
+	kernel_pkey_decrypt = 1,
+	kernel_pkey_sign = 2,
+	kernel_pkey_verify = 3,
+};
+
+struct kernel_pkey_params {
+	struct key *key;
+	const char *encoding;
+	const char *hash_algo;
+	char *info;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	enum kernel_pkey_operation op: 8;
+};
+
+struct kernel_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+};
+
+enum OID {
+	OID_id_dsa_with_sha1 = 0,
+	OID_id_dsa = 1,
+	OID_id_ecPublicKey = 2,
+	OID_id_prime192v1 = 3,
+	OID_id_prime256v1 = 4,
+	OID_id_ecdsa_with_sha1 = 5,
+	OID_id_ecdsa_with_sha224 = 6,
+	OID_id_ecdsa_with_sha256 = 7,
+	OID_id_ecdsa_with_sha384 = 8,
+	OID_id_ecdsa_with_sha512 = 9,
+	OID_rsaEncryption = 10,
+	OID_md2WithRSAEncryption = 11,
+	OID_md3WithRSAEncryption = 12,
+	OID_md4WithRSAEncryption = 13,
+	OID_sha1WithRSAEncryption = 14,
+	OID_sha256WithRSAEncryption = 15,
+	OID_sha384WithRSAEncryption = 16,
+	OID_sha512WithRSAEncryption = 17,
+	OID_sha224WithRSAEncryption = 18,
+	OID_data = 19,
+	OID_signed_data = 20,
+	OID_email_address = 21,
+	OID_contentType = 22,
+	OID_messageDigest = 23,
+	OID_signingTime = 24,
+	OID_smimeCapabilites = 25,
+	OID_smimeAuthenticatedAttrs = 26,
+	OID_md2 = 27,
+	OID_md4 = 28,
+	OID_md5 = 29,
+	OID_mskrb5 = 30,
+	OID_krb5 = 31,
+	OID_krb5u2u = 32,
+	OID_msIndirectData = 33,
+	OID_msStatementType = 34,
+	OID_msSpOpusInfo = 35,
+	OID_msPeImageDataObjId = 36,
+	OID_msIndividualSPKeyPurpose = 37,
+	OID_msOutlookExpress = 38,
+	OID_ntlmssp = 39,
+	OID_negoex = 40,
+	OID_spnego = 41,
+	OID_IAKerb = 42,
+	OID_PKU2U = 43,
+	OID_Scram = 44,
+	OID_certAuthInfoAccess = 45,
+	OID_sha1 = 46,
+	OID_id_ansip384r1 = 47,
+	OID_sha256 = 48,
+	OID_sha384 = 49,
+	OID_sha512 = 50,
+	OID_sha224 = 51,
+	OID_commonName = 52,
+	OID_surname = 53,
+	OID_countryName = 54,
+	OID_locality = 55,
+	OID_stateOrProvinceName = 56,
+	OID_organizationName = 57,
+	OID_organizationUnitName = 58,
+	OID_title = 59,
+	OID_description = 60,
+	OID_name = 61,
+	OID_givenName = 62,
+	OID_initials = 63,
+	OID_generationalQualifier = 64,
+	OID_subjectKeyIdentifier = 65,
+	OID_keyUsage = 66,
+	OID_subjectAltName = 67,
+	OID_issuerAltName = 68,
+	OID_basicConstraints = 69,
+	OID_crlDistributionPoints = 70,
+	OID_certPolicies = 71,
+	OID_authorityKeyIdentifier = 72,
+	OID_extKeyUsage = 73,
+	OID_NetlogonMechanism = 74,
+	OID_appleLocalKdcSupported = 75,
+	OID_gostCPSignA = 76,
+	OID_gostCPSignB = 77,
+	OID_gostCPSignC = 78,
+	OID_gost2012PKey256 = 79,
+	OID_gost2012PKey512 = 80,
+	OID_gost2012Digest256 = 81,
+	OID_gost2012Digest512 = 82,
+	OID_gost2012Signature256 = 83,
+	OID_gost2012Signature512 = 84,
+	OID_gostTC26Sign256A = 85,
+	OID_gostTC26Sign256B = 86,
+	OID_gostTC26Sign256C = 87,
+	OID_gostTC26Sign256D = 88,
+	OID_gostTC26Sign512A = 89,
+	OID_gostTC26Sign512B = 90,
+	OID_gostTC26Sign512C = 91,
+	OID_sm2 = 92,
+	OID_sm3 = 93,
+	OID_SM2_with_SM3 = 94,
+	OID_sm3WithRSAEncryption = 95,
+	OID_TPMLoadableKey = 96,
+	OID_TPMImportableKey = 97,
+	OID_TPMSealedData = 98,
+	OID__NR = 99,
+};
+
+struct x509_certificate;
+
+struct pkcs7_signed_info;
+
+struct pkcs7_message {
+	struct x509_certificate *certs;
+	struct x509_certificate *crl;
+	struct pkcs7_signed_info *signed_infos;
+	u8 version;
+	bool have_authattrs;
+	enum OID data_type;
+	size_t data_len;
+	size_t data_hdrlen;
+	const void *data;
+};
+
+struct compact_control;
+
+struct capture_control {
+	struct compact_control *cc;
+	struct page *page;
+};
+
+struct compact_control {
+	struct list_head freepages;
+	struct list_head migratepages;
+	unsigned int nr_freepages;
+	unsigned int nr_migratepages;
+	unsigned long free_pfn;
+	unsigned long migrate_pfn;
+	unsigned long fast_start_pfn;
+	struct zone *zone;
+	unsigned long total_migrate_scanned;
+	unsigned long total_free_scanned;
+	unsigned short fast_search_fail;
+	short search_order;
+	const gfp_t gfp_mask;
+	int order;
+	int migratetype;
+	const unsigned int alloc_flags;
+	const int highest_zoneidx;
+	enum migrate_mode mode;
+	bool ignore_skip_hint;
+	bool no_set_skip_hint;
+	bool ignore_block_suitable;
+	bool direct_compaction;
+	bool proactive_compaction;
+	bool whole_zone;
+	bool contended;
+	bool finish_pageblock;
+	bool alloc_contig;
+};
+
+struct fid {
+	union {
+		struct {
+			u32 ino;
+			u32 gen;
+			u32 parent_ino;
+			u32 parent_gen;
+		} i32;
+		struct {
+			u32 block;
+			u16 partref;
+			u16 parent_partref;
+			u32 generation;
+			u32 parent_block;
+			u32 parent_generation;
+		} udf;
+		struct {
+			struct {} __empty_raw;
+			__u32 raw[0];
+		};
+	};
+};
+
+typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);
+
+typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t);
+
+enum mapping_flags {
+	AS_EIO = 0,
+	AS_ENOSPC = 1,
+	AS_MM_ALL_LOCKS = 2,
+	AS_UNEVICTABLE = 3,
+	AS_EXITING = 4,
+	AS_NO_WRITEBACK_TAGS = 5,
+	AS_LARGE_FOLIO_SUPPORT = 6,
+	AS_RELEASE_ALWAYS = 7,
+	AS_STABLE_WRITES = 8,
+};
+
+enum behavior {
+	EXCLUSIVE = 0,
+	SHARED = 1,
+	DROP = 2,
+};
+
+enum vm_event_item {
+	PGPGIN = 0,
+	PGPGOUT = 1,
+	PSWPIN = 2,
+	PSWPOUT = 3,
+	PGALLOC_DMA32 = 4,
+	PGALLOC_NORMAL = 5,
+	PGALLOC_MOVABLE = 6,
+	PGALLOC_NOSPLIT = 7,
+	PGALLOC_NOMERGE = 8,
+	ALLOCSTALL_DMA32 = 9,
+	ALLOCSTALL_NORMAL = 10,
+	ALLOCSTALL_MOVABLE = 11,
+	ALLOCSTALL_NOSPLIT = 12,
+	ALLOCSTALL_NOMERGE = 13,
+	PGSCAN_SKIP_DMA32 = 14,
+	PGSCAN_SKIP_NORMAL = 15,
+	PGSCAN_SKIP_MOVABLE = 16,
+	PGSCAN_SKIP_NOSPLIT = 17,
+	PGSCAN_SKIP_NOMERGE = 18,
+	PGFREE = 19,
+	PGACTIVATE = 20,
+	PGDEACTIVATE = 21,
+	PGLAZYFREE = 22,
+	PGFAULT = 23,
+	PGMAJFAULT = 24,
+	PGLAZYFREED = 25,
+	PGREFILL = 26,
+	PGREUSE = 27,
+	PGSTEAL_KSWAPD = 28,
+	PGSTEAL_DIRECT = 29,
+	PGSTEAL_KHUGEPAGED = 30,
+	PGDEMOTE_KSWAPD = 31,
+	PGDEMOTE_DIRECT = 32,
+	PGDEMOTE_KHUGEPAGED = 33,
+	PGSCAN_KSWAPD = 34,
+	PGSCAN_DIRECT = 35,
+	PGSCAN_KHUGEPAGED = 36,
+	PGSCAN_DIRECT_THROTTLE = 37,
+	PGSCAN_ANON = 38,
+	PGSCAN_FILE = 39,
+	PGSTEAL_ANON = 40,
+	PGSTEAL_FILE = 41,
+	PGINODESTEAL = 42,
+	SLABS_SCANNED = 43,
+	KSWAPD_INODESTEAL = 44,
+	KSWAPD_LOW_WMARK_HIT_QUICKLY = 45,
+	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 46,
+	PAGEOUTRUN = 47,
+	PGROTATED = 48,
+	DROP_PAGECACHE = 49,
+	DROP_SLAB = 50,
+	OOM_KILL = 51,
+	PGMIGRATE_SUCCESS = 52,
+	PGMIGRATE_FAIL = 53,
+	THP_MIGRATION_SUCCESS = 54,
+	THP_MIGRATION_FAIL = 55,
+	THP_MIGRATION_SPLIT = 56,
+	COMPACTMIGRATE_SCANNED = 57,
+	COMPACTFREE_SCANNED = 58,
+	COMPACTISOLATED = 59,
+	COMPACTSTALL = 60,
+	COMPACTFAIL = 61,
+	COMPACTSUCCESS = 62,
+	KCOMPACTD_WAKE = 63,
+	KCOMPACTD_MIGRATE_SCANNED = 64,
+	KCOMPACTD_FREE_SCANNED = 65,
+	CMA_ALLOC_SUCCESS = 66,
+	CMA_ALLOC_FAIL = 67,
+	UNEVICTABLE_PGCULLED = 68,
+	UNEVICTABLE_PGSCANNED = 69,
+	UNEVICTABLE_PGRESCUED = 70,
+	UNEVICTABLE_PGMLOCKED = 71,
+	UNEVICTABLE_PGMUNLOCKED = 72,
+	UNEVICTABLE_PGCLEARED = 73,
+	UNEVICTABLE_PGSTRANDED = 74,
+	THP_FAULT_ALLOC = 75,
+	THP_FAULT_FALLBACK = 76,
+	THP_FAULT_FALLBACK_CHARGE = 77,
+	THP_COLLAPSE_ALLOC = 78,
+	THP_COLLAPSE_ALLOC_FAILED = 79,
+	THP_FILE_ALLOC = 80,
+	THP_FILE_FALLBACK = 81,
+	THP_FILE_FALLBACK_CHARGE = 82,
+	THP_FILE_MAPPED = 83,
+	THP_SPLIT_PAGE = 84,
+	THP_SPLIT_PAGE_FAILED = 85,
+	THP_DEFERRED_SPLIT_PAGE = 86,
+	THP_SPLIT_PMD = 87,
+	THP_SHATTER_PAGE = 88,
+	THP_SHATTER_PAGE_FAILED = 89,
+	THP_SHATTER_PAGE_DISCARDED = 90,
+	THP_SCAN_EXCEED_NONE_PTE = 91,
+	THP_SCAN_EXCEED_SWAP_PTE = 92,
+	THP_SCAN_EXCEED_SHARED_PTE = 93,
+	THP_ZERO_PAGE_ALLOC = 94,
+	THP_ZERO_PAGE_ALLOC_FAILED = 95,
+	THP_SWPOUT = 96,
+	THP_SWPOUT_FALLBACK = 97,
+	BALLOON_INFLATE = 98,
+	BALLOON_DEFLATE = 99,
+	BALLOON_MIGRATE = 100,
+	SWAP_RA = 101,
+	SWAP_RA_HIT = 102,
+	NR_VM_EVENT_ITEMS = 103,
+};
+
+enum positive_aop_returns {
+	AOP_WRITEPAGE_ACTIVATE = 524288,
+	AOP_TRUNCATED_PAGE = 524289,
+};
+
+enum {
+	SB_UNFROZEN = 0,
+	SB_FREEZE_WRITE = 1,
+	SB_FREEZE_PAGEFAULT = 2,
+	SB_FREEZE_FS = 3,
+	SB_FREEZE_COMPLETE = 4,
+};
+
+struct trace_event_raw_mm_filemap_op_page_cache {
+	struct trace_entry ent;
+	unsigned long pfn;
+	unsigned long i_ino;
+	unsigned long index;
+	dev_t s_dev;
+	unsigned char order;
+	char __data[0];
+};
+
+struct trace_event_raw_filemap_set_wb_err {
+	struct trace_entry ent;
+	unsigned long i_ino;
+	dev_t s_dev;
+	errseq_t errseq;
+	char __data[0];
+};
+
+struct trace_event_raw_file_check_and_advance_wb_err {
+	struct trace_entry ent;
+	struct file *file;
+	unsigned long i_ino;
+	dev_t s_dev;
+	errseq_t old;
+	errseq_t new;
+	char __data[0];
+};
+
+struct cachestat_range {
+	__u64 off;
+	__u64 len;
+};
+
+struct cachestat {
+	__u64 nr_cache;
+	__u64 nr_dirty;
+	__u64 nr_writeback;
+	__u64 nr_evicted;
+	__u64 nr_recently_evicted;
+};
+
+struct folio_batch {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct folio *folios[15];
+};
+
+struct wait_page_key {
+	struct folio *folio;
+	int bit_nr;
+	int page_match;
+};
+
+struct trace_event_data_offsets_mm_filemap_op_page_cache {};
+
+struct trace_event_data_offsets_filemap_set_wb_err {};
+
+struct trace_event_data_offsets_file_check_and_advance_wb_err {};
+
+struct reciprocal_value {
+	u32 m;
+	u8 sh1;
+	u8 sh2;
+};
+
+struct kmem_cache_order_objects {
+	unsigned int x;
+};
+
+struct kmem_cache_cpu;
+
+struct kmem_cache_node;
+
+struct kmem_cache {
+	struct kmem_cache_cpu __attribute__((btf_type_tag("percpu"))) *cpu_slab;
+	slab_flags_t flags;
+	unsigned long min_partial;
+	unsigned int size;
+	unsigned int object_size;
+	struct reciprocal_value reciprocal_size;
+	unsigned int offset;
+	unsigned int cpu_partial;
+	unsigned int cpu_partial_slabs;
+	struct kmem_cache_order_objects oo;
+	struct kmem_cache_order_objects min;
+	gfp_t allocflags;
+	int refcount;
+	void (*ctor)(void *);
+	unsigned int inuse;
+	unsigned int align;
+	unsigned int red_left_pad;
+	const char *name;
+	struct list_head list;
+	struct kobject kobj;
+	unsigned long random;
+	unsigned int *random_seq;
+	unsigned int useroffset;
+	unsigned int usersize;
+	struct kmem_cache_node *node[1];
+};
+
+typedef unsigned __int128 __u128;
+
+typedef __u128 u128;
+
+typedef u128 freelist_full_t;
+
+typedef union {
+	struct {
+		void *freelist;
+		unsigned long counter;
+	};
+	freelist_full_t full;
+} freelist_aba_t;
+
+struct slab;
+
+struct kmem_cache_cpu {
+	union {
+		struct {
+			void **freelist;
+			unsigned long tid;
+		};
+		freelist_aba_t freelist_tid;
+	};
+	struct slab *slab;
+	struct slab *partial;
+	local_lock_t lock;
+};
+
+struct slab {
+	unsigned long __page_flags;
+	struct kmem_cache *slab_cache;
+	union {
+		struct {
+			union {
+				struct list_head slab_list;
+				struct {
+					struct slab *next;
+					int slabs;
+				};
+			};
+			union {
+				struct {
+					void *freelist;
+					union {
+						unsigned long counters;
+						struct {
+							unsigned int inuse: 16;
+							unsigned int objects: 15;
+							unsigned int frozen: 1;
+						};
+					};
+				};
+				freelist_aba_t freelist_counter;
+			};
+		};
+		struct callback_head callback_head;
+	};
+	unsigned int __unused;
+	atomic_t __page_refcount;
+	unsigned long memcg_data;
+};
+
+struct kmem_cache_node {
+	spinlock_t list_lock;
+	unsigned long nr_partial;
+	struct list_head partial;
+	atomic_long_t nr_slabs;
+	atomic_long_t total_objects;
+	struct list_head full;
+};
+
+typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *);
+
+typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, unsigned long, unsigned long, unsigned long, int, bool);
+
+typedef void (*btf_trace_mark_victim)(void *, struct task_struct *, uid_t);
+
+typedef void (*btf_trace_wake_reaper)(void *, int);
+
+typedef void (*btf_trace_start_task_reaping)(void *, int);
+
+typedef void (*btf_trace_finish_task_reaping)(void *, int);
+
+typedef void (*btf_trace_skip_task_reaping)(void *, int);
+
+enum compact_priority {
+	COMPACT_PRIO_SYNC_FULL = 0,
+	MIN_COMPACT_PRIORITY = 0,
+	COMPACT_PRIO_SYNC_LIGHT = 1,
+	MIN_COMPACT_COSTLY_PRIORITY = 1,
+	DEF_COMPACT_PRIORITY = 1,
+	COMPACT_PRIO_ASYNC = 2,
+	INIT_COMPACT_PRIORITY = 2,
+};
+
+enum compact_result {
+	COMPACT_NOT_SUITABLE_ZONE = 0,
+	COMPACT_SKIPPED = 1,
+	COMPACT_DEFERRED = 2,
+	COMPACT_NO_SUITABLE_PAGE = 3,
+	COMPACT_CONTINUE = 4,
+	COMPACT_COMPLETE = 5,
+	COMPACT_PARTIAL_SKIPPED = 6,
+	COMPACT_CONTENDED = 7,
+	COMPACT_SUCCESS = 8,
+};
+
+typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
+
+enum oom_constraint {
+	CONSTRAINT_NONE = 0,
+	CONSTRAINT_CPUSET = 1,
+	CONSTRAINT_MEMORY_POLICY = 2,
+	CONSTRAINT_MEMCG = 3,
+};
+
+enum memcg_memory_event {
+	MEMCG_LOW = 0,
+	MEMCG_HIGH = 1,
+	MEMCG_MAX = 2,
+	MEMCG_OOM = 3,
+	MEMCG_OOM_KILL = 4,
+	MEMCG_OOM_GROUP_KILL = 5,
+	MEMCG_SWAP_HIGH = 6,
+	MEMCG_SWAP_MAX = 7,
+	MEMCG_SWAP_FAIL = 8,
+	MEMCG_NR_MEMORY_EVENTS = 9,
+};
+
+struct trace_event_raw_oom_score_adj_update {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	short oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_reclaim_retry_zone {
+	struct trace_entry ent;
+	int node;
+	int zone_idx;
+	int order;
+	unsigned long reclaimable;
+	unsigned long available;
+	unsigned long min_wmark;
+	int no_progress_loops;
+	bool wmark_check;
+	char __data[0];
+};
+
+struct trace_event_raw_mark_victim {
+	struct trace_entry ent;
+	int pid;
+	u32 __data_loc_comm;
+	unsigned long total_vm;
+	unsigned long anon_rss;
+	unsigned long file_rss;
+	unsigned long shmem_rss;
+	uid_t uid;
+	unsigned long pgtables;
+	short oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_wake_reaper {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_start_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_finish_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_skip_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_compact_retry {
+	struct trace_entry ent;
+	int order;
+	int priority;
+	int result;
+	int retries;
+	int max_retries;
+	bool ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mark_victim {
+	u32 comm;
+};
+
+struct oom_control {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct mem_cgroup *memcg;
+	const gfp_t gfp_mask;
+	const int order;
+	unsigned long totalpages;
+	struct task_struct *chosen;
+	long chosen_points;
+	enum oom_constraint constraint;
+};
+
+struct encoded_page;
+
+struct mmu_gather_batch {
+	struct mmu_gather_batch *next;
+	unsigned int nr;
+	unsigned int max;
+	struct encoded_page *encoded_pages[0];
+};
+
+struct mmu_table_batch;
+
+struct mmu_gather {
+	struct mm_struct *mm;
+	struct mmu_table_batch *batch;
+	unsigned long start;
+	unsigned long end;
+	unsigned int fullmm: 1;
+	unsigned int need_flush_all: 1;
+	unsigned int freed_tables: 1;
+	unsigned int delayed_rmap: 1;
+	unsigned int cleared_ptes: 1;
+	unsigned int cleared_pmds: 1;
+	unsigned int cleared_puds: 1;
+	unsigned int cleared_p4ds: 1;
+	unsigned int vma_exec: 1;
+	unsigned int vma_huge: 1;
+	unsigned int vma_pfn: 1;
+	unsigned int batch_count;
+	struct mmu_gather_batch *active;
+	struct mmu_gather_batch local;
+	struct page *__pages[8];
+};
+
+struct mmu_table_batch {
+	struct callback_head rcu;
+	unsigned int nr;
+	void *tables[0];
+};
+
+struct trace_event_data_offsets_oom_score_adj_update {};
+
+struct trace_event_data_offsets_reclaim_retry_zone {};
+
+struct trace_event_data_offsets_wake_reaper {};
+
+struct trace_event_data_offsets_start_task_reaping {};
+
+struct trace_event_data_offsets_finish_task_reaping {};
+
+struct trace_event_data_offsets_skip_task_reaping {};
+
+struct trace_event_data_offsets_compact_retry {};
+
+enum wb_stat_item {
+	WB_RECLAIMABLE = 0,
+	WB_WRITEBACK = 1,
+	WB_DIRTIED = 2,
+	WB_WRITTEN = 3,
+	NR_WB_STAT_ITEMS = 4,
+};
+
+enum {
+	XA_CHECK_SCHED = 4096,
+};
+
+enum vmscan_throttle_state {
+	VMSCAN_THROTTLE_WRITEBACK = 0,
+	VMSCAN_THROTTLE_ISOLATED = 1,
+	VMSCAN_THROTTLE_NOPROGRESS = 2,
+	VMSCAN_THROTTLE_CONGESTED = 3,
+	NR_VMSCAN_THROTTLE = 4,
+};
+
+enum zone_stat_item {
+	NR_FREE_PAGES = 0,
+	NR_ZONE_LRU_BASE = 1,
+	NR_ZONE_INACTIVE_ANON = 1,
+	NR_ZONE_ACTIVE_ANON = 2,
+	NR_ZONE_INACTIVE_FILE = 3,
+	NR_ZONE_ACTIVE_FILE = 4,
+	NR_ZONE_UNEVICTABLE = 5,
+	NR_ZONE_WRITE_PENDING = 6,
+	NR_MLOCK = 7,
+	NR_BOUNCE = 8,
+	NR_ZSPAGES = 9,
+	NR_FREE_CMA_PAGES = 10,
+	NR_VM_ZONE_STAT_ITEMS = 11,
+};
+
+enum wb_state {
+	WB_registered = 0,
+	WB_writeback_running = 1,
+	WB_has_dirty_io = 2,
+	WB_start_all = 3,
+};
+
+enum page_memcg_data_flags {
+	MEMCG_DATA_OBJCGS = 1,
+	MEMCG_DATA_KMEM = 2,
+	__NR_MEMCG_DATA_FLAGS = 4,
+};
+
+struct dirty_throttle_control {
+	struct wb_domain *dom;
+	struct dirty_throttle_control *gdtc;
+	struct bdi_writeback *wb;
+	struct fprop_local_percpu *wb_completions;
+	unsigned long avail;
+	unsigned long dirty;
+	unsigned long thresh;
+	unsigned long bg_thresh;
+	unsigned long wb_dirty;
+	unsigned long wb_thresh;
+	unsigned long wb_bg_thresh;
+	unsigned long pos_ratio;
+};
+
+struct wb_lock_cookie {
+	bool locked;
+	unsigned long flags;
+};
+
+typedef int (*writepage_t)(struct folio *, struct writeback_control *, void *);
+
+typedef void (*btf_trace_mm_lru_insertion)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_lru_activate)(void *, struct folio *);
+
+struct lru_rotate {
+	local_lock_t lock;
+	struct folio_batch fbatch;
+};
+
+struct cpu_fbatches {
+	local_lock_t lock;
+	struct folio_batch lru_add;
+	struct folio_batch lru_deactivate_file;
+	struct folio_batch lru_deactivate;
+	struct folio_batch lru_lazyfree;
+	struct folio_batch activate;
+};
+
+enum lru_list {
+	LRU_INACTIVE_ANON = 0,
+	LRU_ACTIVE_ANON = 1,
+	LRU_INACTIVE_FILE = 2,
+	LRU_ACTIVE_FILE = 3,
+	LRU_UNEVICTABLE = 4,
+	NR_LRU_LISTS = 5,
+};
+
+enum {
+	LRU_GEN_ANON = 0,
+	LRU_GEN_FILE = 1,
+};
+
+enum {
+	LRU_GEN_CORE = 0,
+	LRU_GEN_MM_WALK = 1,
+	LRU_GEN_NONLEAF_YOUNG = 2,
+	NR_LRU_GEN_CAPS = 3,
+};
+
+struct trace_event_raw_mm_lru_insertion {
+	struct trace_entry ent;
+	struct folio *folio;
+	unsigned long pfn;
+	enum lru_list lru;
+	unsigned long flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_lru_activate {
+	struct trace_entry ent;
+	struct folio *folio;
+	unsigned long pfn;
+	char __data[0];
+};
+
+typedef void (*move_fn_t)(struct lruvec *, struct folio *);
+
+struct trace_event_data_offsets_mm_lru_insertion {};
+
+struct trace_event_data_offsets_mm_lru_activate {};
+
+typedef union {
+	struct page **pages;
+	struct folio **folios;
+	struct encoded_page **encoded_pages;
+} release_pages_arg;
+
+typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);
+
+typedef void (*btf_trace_mm_vmscan_wakeup_kswapd)(void *, int, int, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_direct_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_memcg_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_direct_reclaim_end)(void *, unsigned long);
+
+typedef void (*btf_trace_mm_vmscan_memcg_reclaim_end)(void *, unsigned long);
+
+typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_end)(void *, unsigned long);
+
+typedef void (*btf_trace_mm_shrink_slab_start)(void *, struct shrinker *, struct shrink_control *, long, unsigned long, unsigned long long, unsigned long, int);
+
+typedef void (*btf_trace_mm_shrink_slab_end)(void *, struct shrinker *, int, int, long, long, long);
+
+typedef unsigned int isolate_mode_t;
+
+typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, unsigned long, unsigned long, unsigned long, unsigned long, isolate_mode_t, int);
+
+typedef void (*btf_trace_mm_vmscan_write_folio)(void *, struct folio *);
+
+struct reclaim_stat;
+
+typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, unsigned long, unsigned long, struct reclaim_stat *, int, int);
+
+struct reclaim_stat {
+	unsigned int nr_dirty;
+	unsigned int nr_unqueued_dirty;
+	unsigned int nr_congested;
+	unsigned int nr_writeback;
+	unsigned int nr_immediate;
+	unsigned int nr_pageout;
+	unsigned int nr_activate[2];
+	unsigned int nr_ref_keep;
+	unsigned int nr_unmap_fail;
+	unsigned int nr_lazyfree_fail;
+};
+
+typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, unsigned long, unsigned long, unsigned long, unsigned long, int, int);
+
+typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, unsigned long);
+
+typedef void (*btf_trace_mm_vmscan_throttled)(void *, int, int, int, int);
+
+enum page_walk_lock {
+	PGWALK_RDLOCK = 0,
+	PGWALK_WRLOCK = 1,
+	PGWALK_WRLOCK_VERIFY = 2,
+};
+
+struct mm_walk;
+
+struct mm_walk_ops {
+	int (*pgd_entry)(pgd_t *, unsigned long, unsigned long, struct mm_walk *);
+	int (*p4d_entry)(p4d_t *, unsigned long, unsigned long, struct mm_walk *);
+	int (*pud_entry)(pud_t *, unsigned long, unsigned long, struct mm_walk *);
+	int (*pmd_entry)(pmd_t *, unsigned long, unsigned long, struct mm_walk *);
+	int (*pte_entry)(pte_t *, unsigned long, unsigned long, struct mm_walk *);
+	int (*pte_hole)(unsigned long, unsigned long, int, struct mm_walk *);
+	int (*hugetlb_entry)(pte_t *, unsigned long, unsigned long, unsigned long, struct mm_walk *);
+	int (*test_walk)(unsigned long, unsigned long, struct mm_walk *);
+	int (*pre_vma)(unsigned long, unsigned long, struct mm_walk *);
+	void (*post_vma)(struct mm_walk *);
+	enum page_walk_lock walk_lock;
+};
+
+enum page_walk_action {
+	ACTION_SUBTREE = 0,
+	ACTION_CONTINUE = 1,
+	ACTION_AGAIN = 2,
+};
+
+struct mm_walk {
+	const struct mm_walk_ops *ops;
+	struct mm_struct *mm;
+	pgd_t *pgd;
+	struct vm_area_struct *vma;
+	enum page_walk_action action;
+	bool no_vma;
+	void *private;
+};
+
+enum {
+	MEMCG_LRU_NOP = 0,
+	MEMCG_LRU_HEAD = 1,
+	MEMCG_LRU_TAIL = 2,
+	MEMCG_LRU_OLD = 3,
+	MEMCG_LRU_YOUNG = 4,
+};
+
+enum folio_references {
+	FOLIOREF_RECLAIM = 0,
+	FOLIOREF_RECLAIM_CLEAN = 1,
+	FOLIOREF_KEEP = 2,
+	FOLIOREF_ACTIVATE = 3,
+};
+
+enum pgdat_flags {
+	PGDAT_DIRTY = 0,
+	PGDAT_WRITEBACK = 1,
+	PGDAT_RECLAIM_LOCKED = 2,
+};
+
+enum mthp_stat_item {
+	MTHP_STAT_ANON_FAULT_ALLOC = 0,
+	MTHP_STAT_ANON_FAULT_FALLBACK = 1,
+	MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE = 2,
+	MTHP_STAT_SWPOUT = 3,
+	MTHP_STAT_SWPOUT_FALLBACK = 4,
+	__MTHP_STAT_COUNT = 5,
+};
+
+enum ttu_flags {
+	TTU_SPLIT_HUGE_PMD = 4,
+	TTU_IGNORE_MLOCK = 8,
+	TTU_SYNC = 16,
+	TTU_HWPOISON = 32,
+	TTU_BATCH_FLUSH = 64,
+	TTU_RMAP_LOCKED = 128,
+};
+
+enum {
+	SWP_USED = 1,
+	SWP_WRITEOK = 2,
+	SWP_DISCARDABLE = 4,
+	SWP_DISCARDING = 8,
+	SWP_SOLIDSTATE = 16,
+	SWP_CONTINUED = 32,
+	SWP_BLKDEV = 64,
+	SWP_ACTIVATED = 128,
+	SWP_FS_OPS = 256,
+	SWP_AREA_DISCARD = 512,
+	SWP_PAGE_DISCARD = 1024,
+	SWP_STABLE_WRITES = 2048,
+	SWP_SYNCHRONOUS_IO = 4096,
+	SWP_SCANNING = 16384,
+};
+
+enum migrate_reason {
+	MR_COMPACTION = 0,
+	MR_MEMORY_FAILURE = 1,
+	MR_MEMORY_HOTPLUG = 2,
+	MR_SYSCALL = 3,
+	MR_MEMPOLICY_MBIND = 4,
+	MR_NUMA_MISPLACED = 5,
+	MR_CONTIG_RANGE = 6,
+	MR_LONGTERM_PIN = 7,
+	MR_DEMOTION = 8,
+	MR_TYPES = 9,
+};
+
+enum {
+	MM_LEAF_TOTAL = 0,
+	MM_LEAF_OLD = 1,
+	MM_LEAF_YOUNG = 2,
+	MM_NONLEAF_TOTAL = 3,
+	MM_NONLEAF_FOUND = 4,
+	MM_NONLEAF_ADDED = 5,
+	NR_MM_STATS = 6,
+};
+
+enum migratetype {
+	MIGRATE_UNMOVABLE = 0,
+	MIGRATE_MOVABLE = 1,
+	MIGRATE_RECLAIMABLE = 2,
+	MIGRATE_FALLBACKS = 3,
+	MIGRATE_CMA = 3,
+	MIGRATE_PCPTYPES = 4,
+	MIGRATE_HIGHATOMIC = 4,
+	MIGRATE_ISOLATE = 5,
+	MIGRATE_TYPES = 6,
+};
+
+enum zone_watermarks {
+	WMARK_MIN = 0,
+	WMARK_LOW = 1,
+	WMARK_HIGH = 2,
+	WMARK_PROMO = 3,
+	NR_WMARK = 4,
+};
+
+enum lruvec_flags {
+	LRUVEC_CGROUP_CONGESTED = 0,
+	LRUVEC_NODE_CONGESTED = 1,
+};
+
+enum scan_balance {
+	SCAN_EQUAL = 0,
+	SCAN_FRACT = 1,
+	SCAN_ANON = 2,
+	SCAN_FILE = 3,
+};
+
+enum zone_flags {
+	ZONE_BOOSTED_WATERMARK = 0,
+	ZONE_RECLAIM_ACTIVE = 1,
+};
+
+struct trace_event_raw_mm_vmscan_kswapd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_kswapd_wake {
+	struct trace_entry ent;
+	int nid;
+	int zid;
+	int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_wakeup_kswapd {
+	struct trace_entry ent;
+	int nid;
+	int zid;
+	int order;
+	unsigned long gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {
+	struct trace_entry ent;
+	int order;
+	unsigned long gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_direct_reclaim_end_template {
+	struct trace_entry ent;
+	unsigned long nr_reclaimed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_shrink_slab_start {
+	struct trace_entry ent;
+	struct shrinker *shr;
+	void *shrink;
+	int nid;
+	long nr_objects_to_shrink;
+	unsigned long gfp_flags;
+	unsigned long cache_items;
+	unsigned long long delta;
+	unsigned long total_scan;
+	int priority;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_shrink_slab_end {
+	struct trace_entry ent;
+	struct shrinker *shr;
+	int nid;
+	void *shrink;
+	long unused_scan;
+	long new_scan;
+	int retval;
+	long total_scan;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_isolate {
+	struct trace_entry ent;
+	int highest_zoneidx;
+	int order;
+	unsigned long nr_requested;
+	unsigned long nr_scanned;
+	unsigned long nr_skipped;
+	unsigned long nr_taken;
+	unsigned int isolate_mode;
+	int lru;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_write_folio {
+	struct trace_entry ent;
+	unsigned long pfn;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_shrink_inactive {
+	struct trace_entry ent;
+	int nid;
+	unsigned long nr_scanned;
+	unsigned long nr_reclaimed;
+	unsigned long nr_dirty;
+	unsigned long nr_writeback;
+	unsigned long nr_congested;
+	unsigned long nr_immediate;
+	unsigned int nr_activate0;
+	unsigned int nr_activate1;
+	unsigned long nr_ref_keep;
+	unsigned long nr_unmap_fail;
+	int priority;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_shrink_active {
+	struct trace_entry ent;
+	int nid;
+	unsigned long nr_taken;
+	unsigned long nr_active;
+	unsigned long nr_deactivated;
+	unsigned long nr_referenced;
+	int priority;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_node_reclaim_begin {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	unsigned long gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_throttled {
+	struct trace_entry ent;
+	int nid;
+	int usec_timeout;
+	int usec_delayed;
+	int reason;
+	char __data[0];
+};
+
+struct migration_target_control {
+	int nid;
+	nodemask_t *nmask;
+	gfp_t gfp_mask;
+};
+
+struct scan_control {
+	unsigned long nr_to_reclaim;
+	nodemask_t *nodemask;
+	struct mem_cgroup *target_mem_cgroup;
+	unsigned long anon_cost;
+	unsigned long file_cost;
+	unsigned int may_deactivate: 2;
+	unsigned int force_deactivate: 1;
+	unsigned int skipped_deactivate: 1;
+	unsigned int may_writepage: 1;
+	unsigned int may_unmap: 1;
+	unsigned int may_swap: 1;
+	unsigned int proactive: 1;
+	unsigned int memcg_low_reclaim: 1;
+	unsigned int memcg_low_skipped: 1;
+	unsigned int hibernation_mode: 1;
+	unsigned int compaction_ready: 1;
+	unsigned int cache_trim_mode: 1;
+	unsigned int file_is_tiny: 1;
+	unsigned int no_demotion: 1;
+	s8 order;
+	s8 priority;
+	s8 reclaim_idx;
+	gfp_t gfp_mask;
+	unsigned long nr_scanned;
+	unsigned long nr_reclaimed;
+	struct {
+		unsigned int dirty;
+		unsigned int unqueued_dirty;
+		unsigned int congested;
+		unsigned int writeback;
+		unsigned int immediate;
+		unsigned int file_taken;
+		unsigned int taken;
+	} nr;
+	struct reclaim_state reclaim_state;
+	u64 android_vendor_data1;
+};
+
+struct mem_cgroup_reclaim_cookie {
+	pg_data_t *pgdat;
+	unsigned int generation;
+};
+
+struct ctrl_pos {
+	unsigned long refaulted;
+	unsigned long total;
+	int gain;
+};
+
+typedef enum {
+	PAGE_KEEP = 0,
+	PAGE_ACTIVATE = 1,
+	PAGE_SUCCESS = 2,
+	PAGE_CLEAN = 3,
+} pageout_t;
+
+struct trace_event_data_offsets_mm_vmscan_kswapd_sleep {};
+
+struct trace_event_data_offsets_mm_vmscan_kswapd_wake {};
+
+struct trace_event_data_offsets_mm_vmscan_wakeup_kswapd {};
+
+struct trace_event_data_offsets_mm_vmscan_direct_reclaim_begin_template {};
+
+struct trace_event_data_offsets_mm_vmscan_direct_reclaim_end_template {};
+
+struct trace_event_data_offsets_mm_shrink_slab_start {};
+
+struct trace_event_data_offsets_mm_shrink_slab_end {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_isolate {};
+
+struct trace_event_data_offsets_mm_vmscan_write_folio {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};
+
+struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};
+
+struct trace_event_data_offsets_mm_vmscan_throttled {};
+
+struct kstatfs {
+	long f_type;
+	long f_bsize;
+	u64 f_blocks;
+	u64 f_bfree;
+	u64 f_bavail;
+	u64 f_files;
+	u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	long f_namelen;
+	long f_frsize;
+	long f_flags;
+	long f_spare[4];
+};
+
+struct fileattr {
+	u32 flags;
+	u32 fsx_xflags;
+	u32 fsx_extsize;
+	u32 fsx_nextents;
+	u32 fsx_projid;
+	u32 fsx_cowextsize;
+	bool flags_valid: 1;
+	bool fsx_valid: 1;
+};
+
+struct constant_table {
+	const char *name;
+	int value;
+};
+
+enum sgp_type {
+	SGP_READ = 0,
+	SGP_NOALLOC = 1,
+	SGP_CACHE = 2,
+	SGP_WRITE = 3,
+	SGP_FALLOC = 4,
+};
+
+enum mfill_atomic_mode {
+	MFILL_ATOMIC_COPY = 0,
+	MFILL_ATOMIC_ZEROPAGE = 1,
+	MFILL_ATOMIC_CONTINUE = 2,
+	MFILL_ATOMIC_POISON = 3,
+	NR_MFILL_ATOMIC_MODES = 4,
+};
+
+enum shmem_param {
+	Opt_gid = 0,
+	Opt_huge = 1,
+	Opt_mode = 2,
+	Opt_mpol = 3,
+	Opt_nr_blocks = 4,
+	Opt_nr_inodes = 5,
+	Opt_size = 6,
+	Opt_uid = 7,
+	Opt_inode32 = 8,
+	Opt_inode64 = 9,
+	Opt_noswap = 10,
+	Opt_quota = 11,
+	Opt_usrquota = 12,
+	Opt_grpquota = 13,
+	Opt_usrquota_block_hardlimit = 14,
+	Opt_usrquota_inode_hardlimit = 15,
+	Opt_grpquota_block_hardlimit = 16,
+	Opt_grpquota_inode_hardlimit = 17,
+};
+
+enum fid_type {
+	FILEID_ROOT = 0,
+	FILEID_INO32_GEN = 1,
+	FILEID_INO32_GEN_PARENT = 2,
+	FILEID_BTRFS_WITHOUT_PARENT = 77,
+	FILEID_BTRFS_WITH_PARENT = 78,
+	FILEID_BTRFS_WITH_PARENT_ROOT = 79,
+	FILEID_UDF_WITHOUT_PARENT = 81,
+	FILEID_UDF_WITH_PARENT = 82,
+	FILEID_NILFS_WITHOUT_PARENT = 97,
+	FILEID_NILFS_WITH_PARENT = 98,
+	FILEID_FAT_WITHOUT_PARENT = 113,
+	FILEID_FAT_WITH_PARENT = 114,
+	FILEID_LUSTRE = 151,
+	FILEID_KERNFS = 254,
+	FILEID_INVALID = 255,
+};
+
+enum {
+	_DQUOT_USAGE_ENABLED = 0,
+	_DQUOT_LIMITS_ENABLED = 1,
+	_DQUOT_SUSPENDED = 2,
+	_DQUOT_STATE_FLAGS = 3,
+};
+
+struct shared_policy {};
+
+struct simple_xattrs {
+	struct rb_root rb_root;
+	rwlock_t lock;
+};
+
+struct shmem_inode_info {
+	spinlock_t lock;
+	unsigned int seals;
+	unsigned long flags;
+	unsigned long alloced;
+	unsigned long swapped;
+	unsigned long fallocend;
+	struct list_head shrinklist;
+	struct list_head swaplist;
+	struct shared_policy policy;
+	struct simple_xattrs xattrs;
+	atomic_t stop_eviction;
+	struct timespec64 i_crtime;
+	unsigned int fsflags;
+	struct offset_ctx dir_offsets;
+	struct inode vfs_inode;
+	u64 android_vendor_data1;
+};
+
+typedef unsigned int uffd_flags_t;
+
+struct shmem_quota_limits {
+	qsize_t usrquota_bhardlimit;
+	qsize_t usrquota_ihardlimit;
+	qsize_t grpquota_bhardlimit;
+	qsize_t grpquota_ihardlimit;
+};
+
+struct mempolicy;
+
+struct shmem_sb_info {
+	unsigned long max_blocks;
+	struct percpu_counter used_blocks;
+	unsigned long max_inodes;
+	unsigned long free_ispace;
+	raw_spinlock_t stat_lock;
+	umode_t mode;
+	unsigned char huge;
+	kuid_t uid;
+	kgid_t gid;
+	bool full_inums;
+	bool noswap;
+	ino_t next_ino;
+	ino_t __attribute__((btf_type_tag("percpu"))) *ino_batch;
+	struct mempolicy *mpol;
+	spinlock_t shrinklist_lock;
+	struct list_head shrinklist;
+	unsigned long shrinklist_len;
+	struct shmem_quota_limits qlimits;
+};
+
+struct mempolicy {};
+
+typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
+
+struct shmem_falloc {
+	wait_queue_head_t *waitq;
+	unsigned long start;
+	unsigned long next;
+	unsigned long nr_falloced;
+	unsigned long nr_unswapped;
+};
+
+struct shmem_options {
+	unsigned long long blocks;
+	unsigned long long inodes;
+	struct mempolicy *mpol;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	bool full_inums;
+	int huge;
+	int seen;
+	bool noswap;
+	unsigned short quota_types;
+	struct shmem_quota_limits qlimits;
+};
+
+struct vm_event_state {
+	unsigned long event[103];
+};
+
+enum writeback_stat_item {
+	NR_DIRTY_THRESHOLD = 0,
+	NR_DIRTY_BG_THRESHOLD = 1,
+	NR_VM_WRITEBACK_STAT_ITEMS = 2,
+};
+
+struct contig_page_info {
+	unsigned long free_pages;
+	unsigned long free_blocks_total;
+	unsigned long free_blocks_suitable;
+};
+
+enum {
+	RADIX_TREE_ITER_TAG_MASK = 15,
+	RADIX_TREE_ITER_TAGGED = 16,
+	RADIX_TREE_ITER_CONTIG = 32,
+};
+
+struct radix_tree_iter {
+	unsigned long index;
+	unsigned long next_index;
+	unsigned long tags;
+	struct xa_node *node;
+};
+
+enum mminit_level {
+	MMINIT_WARNING = 0,
+	MMINIT_VERIFY = 1,
+	MMINIT_TRACE = 2,
+};
+
+enum meminit_context {
+	MEMINIT_EARLY = 0,
+	MEMINIT_HOTPLUG = 1,
+};
+
+typedef void (*btf_trace_percpu_alloc_percpu)(void *, unsigned long, bool, bool, size_t, size_t, void *, int, void __attribute__((btf_type_tag("percpu"))) *, size_t, gfp_t);
+
+typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void __attribute__((btf_type_tag("percpu"))) *);
+
+typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);
+
+typedef void (*btf_trace_percpu_create_chunk)(void *, void *);
+
+typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
+
+enum pcpu_fc {
+	PCPU_FC_AUTO = 0,
+	PCPU_FC_EMBED = 1,
+	PCPU_FC_PAGE = 2,
+	PCPU_FC_NR = 3,
+};
+
+struct pcpu_block_md {
+	int scan_hint;
+	int scan_hint_start;
+	int contig_hint;
+	int contig_hint_start;
+	int left_free;
+	int right_free;
+	int first_free;
+	int nr_bits;
+};
+
+struct pcpu_chunk {
+	struct list_head list;
+	int free_bytes;
+	struct pcpu_block_md chunk_md;
+	unsigned long *bound_map;
+	void *base_addr;
+	unsigned long *alloc_map;
+	struct pcpu_block_md *md_blocks;
+	void *data;
+	bool immutable;
+	bool isolated;
+	int start_offset;
+	int end_offset;
+	struct obj_cgroup **obj_cgroups;
+	int nr_pages;
+	int nr_populated;
+	int nr_empty_pop_pages;
+	unsigned long populated[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum memcg_stat_item {
+	MEMCG_SWAP = 42,
+	MEMCG_SOCK = 43,
+	MEMCG_PERCPU_B = 44,
+	MEMCG_VMALLOC = 45,
+	MEMCG_KMEM = 46,
+	MEMCG_ZSWAP_B = 47,
+	MEMCG_ZSWAPPED = 48,
+	MEMCG_NR_STAT = 49,
+};
+
+struct trace_event_raw_percpu_alloc_percpu {
+	struct trace_entry ent;
+	unsigned long call_site;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	void *base_addr;
+	int off;
+	void __attribute__((btf_type_tag("percpu"))) *ptr;
+	size_t bytes_alloc;
+	unsigned long gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_free_percpu {
+	struct trace_entry ent;
+	void *base_addr;
+	int off;
+	void __attribute__((btf_type_tag("percpu"))) *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_alloc_percpu_fail {
+	struct trace_entry ent;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_create_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_destroy_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+typedef int pcpu_fc_cpu_to_node_fn_t(int);
+
+struct pcpu_group_info {
+	int nr_units;
+	unsigned long base_offset;
+	unsigned int *cpu_map;
+};
+
+struct pcpu_alloc_info {
+	size_t static_size;
+	size_t reserved_size;
+	size_t dyn_size;
+	size_t unit_size;
+	size_t atom_size;
+	size_t alloc_size;
+	size_t __ai_size;
+	int nr_groups;
+	struct pcpu_group_info groups[0];
+};
+
+struct trace_event_data_offsets_percpu_alloc_percpu {};
+
+struct trace_event_data_offsets_percpu_free_percpu {};
+
+struct trace_event_data_offsets_percpu_alloc_percpu_fail {};
+
+struct trace_event_data_offsets_percpu_create_chunk {};
+
+struct trace_event_data_offsets_percpu_destroy_chunk {};
+
+typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
+
+typedef void (*btf_trace_kmem_cache_alloc)(void *, unsigned long, const void *, struct kmem_cache *, gfp_t, int);
+
+typedef void (*btf_trace_kmalloc)(void *, unsigned long, const void *, size_t, size_t, gfp_t, int);
+
+typedef void (*btf_trace_kfree)(void *, unsigned long, const void *);
+
+typedef void (*btf_trace_kmem_cache_free)(void *, unsigned long, const void *, const struct kmem_cache *);
+
+typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);
+
+typedef void (*btf_trace_mm_page_free_batched)(void *, struct page *);
+
+typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);
+
+typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int, int);
+
+typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);
+
+typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int);
+
+typedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int);
+
+struct kmalloc_info_struct {
+	const char *name[3];
+	unsigned int size;
+};
+
+enum slab_state {
+	DOWN = 0,
+	PARTIAL = 1,
+	PARTIAL_NODE = 2,
+	UP = 3,
+	FULL = 4,
+};
+
+struct trace_event_raw_kmem_cache_alloc {
+	struct trace_entry ent;
+	unsigned long call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	unsigned long gfp_flags;
+	int node;
+	bool accounted;
+	char __data[0];
+};
+
+struct trace_event_raw_kmalloc {
+	struct trace_entry ent;
+	unsigned long call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	unsigned long gfp_flags;
+	int node;
+	char __data[0];
+};
+
+struct trace_event_raw_kfree {
+	struct trace_entry ent;
+	unsigned long call_site;
+	const void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_kmem_cache_free {
+	struct trace_entry ent;
+	unsigned long call_site;
+	const void *ptr;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free {
+	struct trace_entry ent;
+	unsigned long pfn;
+	unsigned int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free_batched {
+	struct trace_entry ent;
+	unsigned long pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc {
+	struct trace_entry ent;
+	unsigned long pfn;
+	unsigned int order;
+	unsigned long gfp_flags;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page {
+	struct trace_entry ent;
+	unsigned long pfn;
+	unsigned int order;
+	int migratetype;
+	int percpu_refill;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_pcpu_drain {
+	struct trace_entry ent;
+	unsigned long pfn;
+	unsigned int order;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc_extfrag {
+	struct trace_entry ent;
+	unsigned long pfn;
+	int alloc_order;
+	int fallback_order;
+	int alloc_migratetype;
+	int fallback_migratetype;
+	int change_ownership;
+	char __data[0];
+};
+
+struct trace_event_raw_rss_stat {
+	struct trace_entry ent;
+	unsigned int mm_id;
+	unsigned int curr;
+	int member;
+	long size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kmem_cache_free {
+	u32 name;
+};
+
+struct kmem_obj_info {
+	void *kp_ptr;
+	struct slab *kp_slab;
+	void *kp_objp;
+	unsigned long kp_data_offset;
+	struct kmem_cache *kp_slab_cache;
+	void *kp_ret;
+	void *kp_stack[16];
+	void *kp_free_stack[16];
+};
+
+struct slabinfo {
+	unsigned long active_objs;
+	unsigned long num_objs;
+	unsigned long active_slabs;
+	unsigned long num_slabs;
+	unsigned long shared_avail;
+	unsigned int limit;
+	unsigned int batchcount;
+	unsigned int shared;
+	unsigned int objects_per_slab;
+	unsigned int cache_order;
+};
+
+struct trace_event_data_offsets_kmem_cache_alloc {};
+
+struct trace_event_data_offsets_kmalloc {};
+
+struct trace_event_data_offsets_kfree {};
+
+struct trace_event_data_offsets_mm_page_free {};
+
+struct trace_event_data_offsets_mm_page_free_batched {};
+
+struct trace_event_data_offsets_mm_page_alloc {};
+
+struct trace_event_data_offsets_mm_page {};
+
+struct trace_event_data_offsets_mm_page_pcpu_drain {};
+
+struct trace_event_data_offsets_mm_page_alloc_extfrag {};
+
+struct trace_event_data_offsets_rss_stat {};
+
+typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_mm_compaction_fast_isolate_freepages)(void *, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_mm_compaction_migratepages)(void *, struct compact_control *, unsigned int);
+
+typedef void (*btf_trace_mm_compaction_begin)(void *, struct compact_control *, unsigned long, unsigned long, bool);
+
+typedef void (*btf_trace_mm_compaction_end)(void *, struct compact_control *, unsigned long, unsigned long, bool, int);
+
+typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
+
+typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);
+
+enum pageblock_bits {
+	PB_migrate = 0,
+	PB_migrate_end = 2,
+	PB_migrate_skip = 3,
+	NR_PAGEBLOCK_BITS = 4,
+};
+
+struct trace_event_raw_mm_compaction_isolate_template {
+	struct trace_entry ent;
+	unsigned long start_pfn;
+	unsigned long end_pfn;
+	unsigned long nr_scanned;
+	unsigned long nr_taken;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_migratepages {
+	struct trace_entry ent;
+	unsigned long nr_migrated;
+	unsigned long nr_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_begin {
+	struct trace_entry ent;
+	unsigned long zone_start;
+	unsigned long migrate_pfn;
+	unsigned long free_pfn;
+	unsigned long zone_end;
+	bool sync;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_end {
+	struct trace_entry ent;
+	unsigned long zone_start;
+	unsigned long migrate_pfn;
+	unsigned long free_pfn;
+	unsigned long zone_end;
+	bool sync;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_try_to_compact_pages {
+	struct trace_entry ent;
+	int order;
+	unsigned long gfp_mask;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_suitable_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_defer_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	unsigned int considered;
+	unsigned int defer_shift;
+	int order_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_kcompactd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_kcompactd_wake_template {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	enum zone_type highest_zoneidx;
+	char __data[0];
+};
+
+struct movable_operations {
+	bool (*isolate_page)(struct page *, isolate_mode_t);
+	int (*migrate_page)(struct page *, struct page *, enum migrate_mode);
+	void (*putback_page)(struct page *);
+};
+
+typedef enum {
+	ISOLATE_ABORT = 0,
+	ISOLATE_NONE = 1,
+	ISOLATE_SUCCESS = 2,
+} isolate_migrate_t;
+
+typedef struct folio *new_folio_t(struct folio *, unsigned long);
+
+typedef void free_folio_t(struct folio *, unsigned long);
+
+struct trace_event_data_offsets_mm_compaction_isolate_template {};
+
+struct trace_event_data_offsets_mm_compaction_migratepages {};
+
+struct trace_event_data_offsets_mm_compaction_begin {};
+
+struct trace_event_data_offsets_mm_compaction_end {};
+
+struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};
+
+struct trace_event_data_offsets_mm_compaction_suitable_template {};
+
+struct trace_event_data_offsets_mm_compaction_defer_template {};
+
+struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};
+
+struct trace_event_data_offsets_kcompactd_wake_template {};
+
+struct alloc_context {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct zoneref *preferred_zoneref;
+	int migratetype;
+	enum zone_type highest_zoneidx;
+	bool spread_dirty_pages;
+};
+
+struct anon_vma_chain {
+	struct vm_area_struct *vma;
+	struct anon_vma *anon_vma;
+	struct list_head same_vma;
+	struct rb_node rb;
+	unsigned long rb_subtree_last;
+};
+
+enum lru_status {
+	LRU_REMOVED = 0,
+	LRU_REMOVED_RETRY = 1,
+	LRU_ROTATE = 2,
+	LRU_SKIP = 3,
+	LRU_RETRY = 4,
+};
+
+struct list_lru_memcg {
+	struct callback_head rcu;
+	struct list_lru_one node[0];
+};
+
+typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
+
+struct list_lru_memcg_table {
+	struct list_lru_memcg *mlru;
+	struct mem_cgroup *memcg;
+};
+
+enum {
+	FOLL_TOUCH = 65536,
+	FOLL_TRIED = 131072,
+	FOLL_REMOTE = 262144,
+	FOLL_PIN = 524288,
+	FOLL_FAST_ONLY = 1048576,
+	FOLL_UNLOCKABLE = 2097152,
+	FOLL_MADV_POPULATE = 4194304,
+};
+
+struct follow_page_context {
+	struct dev_pagemap *pgmap;
+	unsigned int page_mask;
+};
+
+typedef void (*btf_trace_mmap_lock_start_locking)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_released)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_acquire_returned)(void *, struct mm_struct *, const char *, bool, bool);
+
+struct memcg_path {
+	local_lock_t lock;
+	char __attribute__((btf_type_tag("rcu"))) *buf;
+	local_t buf_idx;
+};
+
+struct trace_event_raw_mmap_lock {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	char __data[0];
+};
+
+struct trace_event_raw_mmap_lock_acquire_returned {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	bool success;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmap_lock {
+	u32 memcg_path;
+};
+
+struct trace_event_data_offsets_mmap_lock_acquire_returned {
+	u32 memcg_path;
+};
+
+typedef int (*show_pad_smaps_fn)(struct seq_file *, void *);
+
+typedef void (*show_pad_maps_fn)(struct seq_file *, struct vm_area_struct *);
+
+enum rmap_level {
+	RMAP_LEVEL_PTE = 0,
+	RMAP_LEVEL_PMD = 1,
+};
+
+enum transparent_hugepage_flag {
+	TRANSPARENT_HUGEPAGE_UNSUPPORTED = 0,
+	TRANSPARENT_HUGEPAGE_FLAG = 1,
+	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 2,
+	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 3,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 4,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 5,
+	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 6,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 7,
+	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 8,
+};
+
+typedef int rmap_t;
+
+typedef int fpb_t;
+
+typedef unsigned long pte_marker;
+
+typedef struct {
+	u64 val;
+} pfn_t;
+
+typedef unsigned int pgtbl_mod_mask;
+
+struct copy_subpage_arg {
+	struct page *dst;
+	struct page *src;
+	struct vm_area_struct *vma;
+};
+
+struct mlock_fbatch {
+	local_lock_t lock;
+	struct folio_batch fbatch;
+};
+
+struct vm_unmapped_area_info;
+
+typedef void (*btf_trace_vm_unmapped_area)(void *, unsigned long, struct vm_unmapped_area_info *);
+
+struct vm_unmapped_area_info {
+	unsigned long flags;
+	unsigned long length;
+	unsigned long low_limit;
+	unsigned long high_limit;
+	unsigned long align_mask;
+	unsigned long align_offset;
+};
+
+typedef void (*btf_trace_vma_mas_szero)(void *, struct maple_tree *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_vma_store)(void *, struct maple_tree *, struct vm_area_struct *);
+
+typedef void (*btf_trace_exit_mmap)(void *, struct mm_struct *);
+
+enum {
+	HUGETLB_SHMFS_INODE = 1,
+	HUGETLB_ANONHUGE_INODE = 2,
+};
+
+struct trace_event_raw_vm_unmapped_area {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long total_vm;
+	unsigned long flags;
+	unsigned long length;
+	unsigned long low_limit;
+	unsigned long high_limit;
+	unsigned long align_mask;
+	unsigned long align_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_vma_mas_szero {
+	struct trace_entry ent;
+	struct maple_tree *mt;
+	unsigned long start;
+	unsigned long end;
+	char __data[0];
+};
+
+struct trace_event_raw_vma_store {
+	struct trace_entry ent;
+	struct maple_tree *mt;
+	struct vm_area_struct *vma;
+	unsigned long vm_start;
+	unsigned long vm_end;
+	char __data[0];
+};
+
+struct trace_event_raw_exit_mmap {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	struct maple_tree *mt;
+	char __data[0];
+};
+
+struct vma_prepare {
+	struct vm_area_struct *vma;
+	struct vm_area_struct *adj_next;
+	struct file *file;
+	struct address_space *mapping;
+	struct anon_vma *anon_vma;
+	struct vm_area_struct *insert;
+	struct vm_area_struct *remove;
+	struct vm_area_struct *remove2;
+};
+
+struct trace_event_data_offsets_vm_unmapped_area {};
+
+struct trace_event_data_offsets_vma_mas_szero {};
+
+struct trace_event_data_offsets_vma_store {};
+
+struct trace_event_data_offsets_exit_mmap {};
+
+enum pgt_entry {
+	NORMAL_PMD = 0,
+	HPAGE_PMD = 1,
+	NORMAL_PUD = 2,
+	HPAGE_PUD = 3,
+};
+
+struct hstate {};
+
+typedef void (*btf_trace_tlb_flush)(void *, int, unsigned long);
+
+typedef void (*btf_trace_mm_migrate_pages)(void *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, enum migrate_mode, int);
+
+typedef void (*btf_trace_mm_migrate_pages_start)(void *, enum migrate_mode, int);
+
+typedef void (*btf_trace_set_migration_pte)(void *, unsigned long, unsigned long, int);
+
+typedef void (*btf_trace_remove_migration_pte)(void *, unsigned long, unsigned long, int);
+
+struct trace_event_raw_tlb_flush {
+	struct trace_entry ent;
+	int reason;
+	unsigned long pages;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_migrate_pages {
+	struct trace_entry ent;
+	unsigned long succeeded;
+	unsigned long failed;
+	unsigned long thp_succeeded;
+	unsigned long thp_failed;
+	unsigned long thp_split;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_migrate_pages_start {
+	struct trace_entry ent;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pte {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long pte;
+	int order;
+	char __data[0];
+};
+
+struct rmap_walk_control {
+	void *arg;
+	bool try_lock;
+	bool contended;
+	bool (*rmap_one)(struct folio *, struct vm_area_struct *, unsigned long, void *);
+	int (*done)(struct folio *);
+	struct anon_vma * (*anon_lock)(struct folio *, struct rmap_walk_control *);
+	bool (*invalid_vma)(struct vm_area_struct *, void *);
+};
+
+struct trace_event_data_offsets_tlb_flush {};
+
+struct trace_event_data_offsets_mm_migrate_pages {};
+
+struct trace_event_data_offsets_mm_migrate_pages_start {};
+
+struct trace_event_data_offsets_migration_pte {};
+
+struct folio_referenced_arg {
+	int mapcount;
+	int referenced;
+	unsigned long vm_flags;
+	struct mem_cgroup *memcg;
+};
+
+typedef void (*btf_trace_alloc_vmap_area)(void *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, int);
+
+typedef void (*btf_trace_purge_vmap_area_lazy)(void *, unsigned long, unsigned long, unsigned int);
+
+typedef void (*btf_trace_free_vmap_area_noflush)(void *, unsigned long, unsigned long, unsigned long);
+
+struct vfree_deferred {
+	struct llist_head list;
+	struct work_struct wq;
+};
+
+struct vmap_block_queue {
+	spinlock_t lock;
+	struct list_head free;
+	struct xarray vmap_blocks;
+};
+
+struct vmap_area {
+	unsigned long va_start;
+	unsigned long va_end;
+	struct rb_node rb_node;
+	struct list_head list;
+	union {
+		unsigned long subtree_max_size;
+		struct vm_struct *vm;
+	};
+	unsigned long flags;
+};
+
+enum fit_type {
+	NOTHING_FIT = 0,
+	FL_FIT_TYPE = 1,
+	LE_FIT_TYPE = 2,
+	RE_FIT_TYPE = 3,
+	NE_FIT_TYPE = 4,
+};
+
+struct trace_event_raw_alloc_vmap_area {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long size;
+	unsigned long align;
+	unsigned long vstart;
+	unsigned long vend;
+	int failed;
+	char __data[0];
+};
+
+struct trace_event_raw_purge_vmap_area_lazy {
+	struct trace_entry ent;
+	unsigned long start;
+	unsigned long end;
+	unsigned int npurged;
+	char __data[0];
+};
+
+struct trace_event_raw_free_vmap_area_noflush {
+	struct trace_entry ent;
+	unsigned long va_start;
+	unsigned long nr_lazy;
+	unsigned long nr_lazy_max;
+	char __data[0];
+};
+
+struct vmap_block {
+	spinlock_t lock;
+	struct vmap_area *va;
+	unsigned long free;
+	unsigned long dirty;
+	unsigned long used_map[16];
+	unsigned long dirty_min;
+	unsigned long dirty_max;
+	struct list_head free_list;
+	struct callback_head callback_head;
+	struct list_head purge;
+	unsigned int cpu;
+};
+
+struct trace_event_data_offsets_alloc_vmap_area {};
+
+struct trace_event_data_offsets_purge_vmap_area_lazy {};
+
+struct trace_event_data_offsets_free_vmap_area_noflush {};
+
+typedef int fpi_t;
+
+struct va_format {
+	const char *fmt;
+	va_list *va;
+};
+
+struct page_frag_cache {
+	void *va;
+	__u16 offset;
+	__u16 size;
+	unsigned int pagecnt_bias;
+	bool pfmemalloc;
+};
+
+struct memblock {
+	bool bottom_up;
+	phys_addr_t current_limit;
+	struct memblock_type memory;
+	struct memblock_type reserved;
+};
+
+enum memblock_memsize_state {
+	MEMBLOCK_MEMSIZE_NONE = 0,
+	MEMBLOCK_MEMSIZE_DEBUGFS = 1,
+	MEMBLOCK_MEMSIZE_PROCFS = 2,
+};
+
+struct memsize_rgn_struct {
+	phys_addr_t base;
+	long size;
+	bool nomap;
+	bool reusable;
+	char name[100];
+};
+
+typedef void (*online_page_callback_t)(struct page *, unsigned int);
+
+enum {
+	MMOP_OFFLINE = 0,
+	MMOP_ONLINE = 1,
+	MMOP_ONLINE_KERNEL = 2,
+	MMOP_ONLINE_MOVABLE = 3,
+};
+
+enum {
+	ONLINE_POLICY_CONTIG_ZONES = 0,
+	ONLINE_POLICY_AUTO_MOVABLE = 1,
+};
+
+enum {
+	MEMMAP_ON_MEMORY_DISABLE = 0,
+	MEMMAP_ON_MEMORY_ENABLE = 1,
+	MEMMAP_ON_MEMORY_FORCE = 2,
+};
+
+typedef int mhp_t;
+
+struct memory_group;
+
+struct memory_block {
+	unsigned long start_section_nr;
+	unsigned long state;
+	int online_type;
+	int nid;
+	struct zone *zone;
+	struct device dev;
+	struct vmem_altmap *altmap;
+	struct memory_group *group;
+	struct list_head group_next;
+};
+
+struct memory_group {
+	int nid;
+	struct list_head memory_blocks;
+	unsigned long present_kernel_pages;
+	unsigned long present_movable_pages;
+	bool is_dynamic;
+	union {
+		struct {
+			unsigned long max_pages;
+		} s;
+		struct {
+			unsigned long unit_pages;
+		} d;
+	};
+};
+
+struct auto_movable_group_stats {
+	unsigned long movable_pages;
+	unsigned long req_kernel_early_pages;
+};
+
+struct auto_movable_stats {
+	unsigned long kernel_early_pages;
+	unsigned long movable_pages;
+};
+
+typedef int (*walk_memory_groups_func_t)(struct memory_group *, void *);
+
+typedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);
+
+enum iter_type {
+	ITER_IOVEC = 0,
+	ITER_KVEC = 1,
+	ITER_BVEC = 2,
+	ITER_XARRAY = 3,
+	ITER_DISCARD = 4,
+	ITER_UBUF = 5,
+};
+
+struct madvise_walk_private {
+	struct mmu_gather *tlb;
+	bool pageout;
+};
+
+enum {
+	BIO_PAGE_PINNED = 0,
+	BIO_CLONED = 1,
+	BIO_BOUNCED = 2,
+	BIO_QUIET = 3,
+	BIO_CHAIN = 4,
+	BIO_REFFED = 5,
+	BIO_BPS_THROTTLED = 6,
+	BIO_TRACE_COMPLETION = 7,
+	BIO_CGROUP_ACCT = 8,
+	BIO_QOS_THROTTLED = 9,
+	BIO_QOS_MERGED = 10,
+	BIO_REMAPPED = 11,
+	BIO_ZONE_WRITE_LOCKED = 12,
+	BIO_FLAG_LAST = 13,
+};
+
+struct swap_iocb {
+	struct kiocb iocb;
+	struct bio_vec bvec[32];
+	int pages;
+	int len;
+};
+
+struct vma_swap_readahead {
+	unsigned short win;
+	unsigned short offset;
+	unsigned short nr_pte;
+};
+
+enum {
+	PERCPU_REF_INIT_ATOMIC = 1,
+	PERCPU_REF_INIT_DEAD = 2,
+	PERCPU_REF_ALLOW_REINIT = 4,
+};
+
+struct swap_extent {
+	struct rb_node rb_node;
+	unsigned long start_page;
+	unsigned long nr_pages;
+	sector_t start_block;
+};
+
+union swap_header {
+	struct {
+		char reserved[4086];
+		char magic[10];
+	} magic;
+	struct {
+		char bootbits[1024];
+		__u32 version;
+		__u32 last_page;
+		__u32 nr_badpages;
+		unsigned char sws_uuid[16];
+		unsigned char sws_volume[16];
+		__u32 padding[117];
+		__u32 badpages[1];
+	} info;
+};
+
+struct swap_slots_cache {
+	bool lock_initialized;
+	struct mutex alloc_lock;
+	swp_entry_t *slots;
+	int nr;
+	int cur;
+	spinlock_t free_lock;
+	swp_entry_t *slots_ret;
+	int n_ret;
+};
+
+struct dma_page {
+	struct list_head page_list;
+	void *vaddr;
+	dma_addr_t dma;
+};
+
+struct dma_block;
+
+struct dma_pool {
+	struct list_head page_list;
+	spinlock_t lock;
+	struct dma_block *next_block;
+	size_t nr_blocks;
+	size_t nr_active;
+	size_t nr_pages;
+	struct device *dev;
+	unsigned int size;
+	unsigned int allocation;
+	unsigned int boundary;
+	char name[32];
+	struct list_head pools;
+};
+
+struct dma_block {
+	struct dma_block *next_block;
+	dma_addr_t dma;
+};
+
+struct mmu_notifier_subscriptions {
+	struct hlist_head list;
+	bool has_itree;
+	spinlock_t lock;
+	unsigned long invalidate_seq;
+	unsigned long active_invalidate_ranges;
+	struct rb_root_cached itree;
+	wait_queue_head_t wq;
+	struct hlist_head deferred_list;
+};
+
+struct mmu_interval_notifier_ops;
+
+struct mmu_interval_notifier {
+	struct interval_tree_node interval_tree;
+	const struct mmu_interval_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct hlist_node deferred_item;
+	unsigned long invalidate_seq;
+};
+
+struct mmu_interval_notifier_ops {
+	bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, unsigned long);
+};
+
+struct slub_flush_work {
+	struct work_struct work;
+	struct kmem_cache *s;
+	bool skip;
+};
+
+struct slab_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kmem_cache *, char *);
+	ssize_t (*store)(struct kmem_cache *, const char *, size_t);
+};
+
+struct saved_alias {
+	struct kmem_cache *s;
+	const char *name;
+	struct saved_alias *next;
+};
+
+enum track_item {
+	TRACK_ALLOC = 0,
+	TRACK_FREE = 1,
+};
+
+enum stat_item {
+	ALLOC_FASTPATH = 0,
+	ALLOC_SLOWPATH = 1,
+	FREE_FASTPATH = 2,
+	FREE_SLOWPATH = 3,
+	FREE_FROZEN = 4,
+	FREE_ADD_PARTIAL = 5,
+	FREE_REMOVE_PARTIAL = 6,
+	ALLOC_FROM_PARTIAL = 7,
+	ALLOC_SLAB = 8,
+	ALLOC_REFILL = 9,
+	ALLOC_NODE_MISMATCH = 10,
+	FREE_SLAB = 11,
+	CPUSLAB_FLUSH = 12,
+	DEACTIVATE_FULL = 13,
+	DEACTIVATE_EMPTY = 14,
+	DEACTIVATE_TO_HEAD = 15,
+	DEACTIVATE_TO_TAIL = 16,
+	DEACTIVATE_REMOTE_FREES = 17,
+	DEACTIVATE_BYPASS = 18,
+	ORDER_FALLBACK = 19,
+	CMPXCHG_DOUBLE_CPU_FAIL = 20,
+	CMPXCHG_DOUBLE_FAIL = 21,
+	CPU_PARTIAL_ALLOC = 22,
+	CPU_PARTIAL_FREE = 23,
+	CPU_PARTIAL_NODE = 24,
+	CPU_PARTIAL_DRAIN = 25,
+	NR_SLUB_STAT_ITEMS = 26,
+};
+
+enum slab_modes {
+	M_NONE = 0,
+	M_PARTIAL = 1,
+	M_FREE = 2,
+	M_FULL_NOLIST = 3,
+};
+
+enum slab_stat_type {
+	SL_ALL = 0,
+	SL_PARTIAL = 1,
+	SL_CPU = 2,
+	SL_OBJECTS = 3,
+	SL_TOTAL = 4,
+};
+
+typedef struct {
+	unsigned long v;
+} freeptr_t;
+
+struct kunit_resource;
+
+typedef void (*kunit_resource_free_t)(struct kunit_resource *);
+
+struct kunit_resource {
+	void *data;
+	const char *name;
+	kunit_resource_free_t free;
+	struct kref refcount;
+	struct list_head node;
+	bool should_kfree;
+};
+
+typedef u32 depot_stack_handle_t;
+
+struct location {
+	depot_stack_handle_t handle;
+	unsigned long count;
+	unsigned long addr;
+	unsigned long waste;
+	long long sum_time;
+	long min_time;
+	long max_time;
+	long min_pid;
+	long max_pid;
+	unsigned long cpus[1];
+	nodemask_t nodes;
+};
+
+struct track {
+	unsigned long addr;
+	depot_stack_handle_t handle;
+	int cpu;
+	int pid;
+	unsigned long when;
+};
+
+typedef freelist_full_t pcp_op_T__;
+
+union __u128_halves {
+	u128 full;
+	struct {
+		u64 low;
+		u64 high;
+	};
+};
+
+struct detached_freelist {
+	struct slab *slab;
+	void *tail;
+	void *freelist;
+	int cnt;
+	struct kmem_cache *s;
+};
+
+struct partial_context {
+	struct slab **slab;
+	gfp_t flags;
+	unsigned int orig_size;
+};
+
+typedef bool (*kunit_resource_match_t)(struct kunit *, struct kunit_resource *, void *);
+
+struct loc_track {
+	unsigned long max;
+	unsigned long count;
+	struct location *loc;
+	loff_t idx;
+};
+
+enum kasan_report_type {
+	KASAN_REPORT_ACCESS = 0,
+	KASAN_REPORT_INVALID_FREE = 1,
+	KASAN_REPORT_DOUBLE_FREE = 2,
+};
+
+struct kasan_track {
+	u32 pid;
+	depot_stack_handle_t stack;
+};
+
+enum kasan_arg_fault {
+	KASAN_ARG_FAULT_DEFAULT = 0,
+	KASAN_ARG_FAULT_REPORT = 1,
+	KASAN_ARG_FAULT_PANIC = 2,
+	KASAN_ARG_FAULT_PANIC_ON_WRITE = 3,
+};
+
+struct kasan_report_info {
+	enum kasan_report_type type;
+	const void *access_addr;
+	size_t access_size;
+	bool is_write;
+	unsigned long ip;
+	const void *first_bad_addr;
+	struct kmem_cache *cache;
+	void *object;
+	size_t alloc_size;
+	const char *bug_type;
+	struct kasan_track alloc_track;
+	struct kasan_track free_track;
+};
+
+enum kasan_arg {
+	KASAN_ARG_DEFAULT = 0,
+	KASAN_ARG_OFF = 1,
+	KASAN_ARG_ON = 2,
+};
+
+enum kasan_arg_mode {
+	KASAN_ARG_MODE_DEFAULT = 0,
+	KASAN_ARG_MODE_SYNC = 1,
+	KASAN_ARG_MODE_ASYNC = 2,
+	KASAN_ARG_MODE_ASYMM = 3,
+};
+
+enum kasan_arg_vmalloc {
+	KASAN_ARG_VMALLOC_DEFAULT = 0,
+	KASAN_ARG_VMALLOC_OFF = 1,
+	KASAN_ARG_VMALLOC_ON = 2,
+};
+
+enum kasan_mode {
+	KASAN_MODE_SYNC = 0,
+	KASAN_MODE_ASYNC = 1,
+	KASAN_MODE_ASYMM = 2,
+};
+
+struct kasan_stack_ring_entry;
+
+struct kasan_stack_ring {
+	rwlock_t lock;
+	size_t size;
+	atomic64_t pos;
+	struct kasan_stack_ring_entry *entries;
+};
+
+struct kasan_stack_ring_entry {
+	void *ptr;
+	size_t size;
+	u32 pid;
+	depot_stack_handle_t stack;
+	bool is_free;
+};
+
+enum kasan_arg_stacktrace {
+	KASAN_ARG_STACKTRACE_DEFAULT = 0,
+	KASAN_ARG_STACKTRACE_OFF = 1,
+	KASAN_ARG_STACKTRACE_ON = 2,
+};
+
+enum kfence_object_state {
+	KFENCE_OBJECT_UNUSED = 0,
+	KFENCE_OBJECT_ALLOCATED = 1,
+	KFENCE_OBJECT_FREED = 2,
+};
+
+struct kfence_track {
+	pid_t pid;
+	int cpu;
+	u64 ts_nsec;
+	int num_stack_entries;
+	unsigned long stack_entries[64];
+};
+
+struct kfence_metadata {
+	struct list_head list;
+	struct callback_head callback_head;
+	raw_spinlock_t lock;
+	enum kfence_object_state state;
+	unsigned long addr;
+	size_t size;
+	struct kmem_cache *cache;
+	unsigned long unprotected_page;
+	struct kfence_track alloc_track;
+	struct kfence_track free_track;
+	u32 alloc_stack_hash;
+	struct obj_cgroup *objcg;
+};
+
+enum kfence_counter_id {
+	KFENCE_COUNTER_ALLOCATED = 0,
+	KFENCE_COUNTER_ALLOCS = 1,
+	KFENCE_COUNTER_FREES = 2,
+	KFENCE_COUNTER_ZOMBIES = 3,
+	KFENCE_COUNTER_BUGS = 4,
+	KFENCE_COUNTER_SKIP_INCOMPAT = 5,
+	KFENCE_COUNTER_SKIP_CAPACITY = 6,
+	KFENCE_COUNTER_SKIP_COVERED = 7,
+	KFENCE_COUNTER_COUNT = 8,
+};
+
+enum kfence_error_type {
+	KFENCE_ERROR_OOB = 0,
+	KFENCE_ERROR_UAF = 1,
+	KFENCE_ERROR_CORRUPTION = 2,
+	KFENCE_ERROR_INVALID = 3,
+	KFENCE_ERROR_INVALID_FREE = 4,
+};
+
+struct kcsan_scoped_access {};
+
+typedef __kernel_long_t __kernel_ptrdiff_t;
+
+typedef __kernel_ptrdiff_t ptrdiff_t;
+
+enum bh_state_bits {
+	BH_Uptodate = 0,
+	BH_Dirty = 1,
+	BH_Lock = 2,
+	BH_Req = 3,
+	BH_Mapped = 4,
+	BH_New = 5,
+	BH_Async_Read = 6,
+	BH_Async_Write = 7,
+	BH_Delay = 8,
+	BH_Boundary = 9,
+	BH_Write_EIO = 10,
+	BH_Unwritten = 11,
+	BH_Quiet = 12,
+	BH_Meta = 13,
+	BH_Prio = 14,
+	BH_Defer_Completion = 15,
+	BH_PrivateStart = 16,
+};
+
+enum {
+	PAGE_WAS_MAPPED = 1,
+	PAGE_WAS_MLOCKED = 2,
+	PAGE_OLD_STATES = 3,
+};
+
+struct buffer_head;
+
+typedef void bh_end_io_t(struct buffer_head *, int);
+
+struct buffer_head {
+	unsigned long b_state;
+	struct buffer_head *b_this_page;
+	union {
+		struct page *b_page;
+		struct folio *b_folio;
+	};
+	sector_t b_blocknr;
+	size_t b_size;
+	char *b_data;
+	struct block_device *b_bdev;
+	bh_end_io_t *b_end_io;
+	void *b_private;
+	struct list_head b_assoc_buffers;
+	struct address_space *b_assoc_map;
+	atomic_t b_count;
+	spinlock_t b_uptodate_lock;
+};
+
+struct migrate_pages_stats {
+	int nr_succeeded;
+	int nr_failed_pages;
+	int nr_thp_succeeded;
+	int nr_thp_failed;
+	int nr_thp_split;
+};
+
+typedef void (*btf_trace_hugepage_set_pmd)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_hugepage_set_pud)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_hugepage_update_pmd)(void *, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_hugepage_update_pud)(void *, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_set_migration_pmd)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_remove_migration_pmd)(void *, unsigned long, unsigned long);
+
+struct mthp_stat {
+	unsigned long stats[50];
+};
+
+struct trace_event_raw_hugepage_set {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long pte;
+	char __data[0];
+};
+
+struct trace_event_raw_hugepage_update {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long pte;
+	unsigned long clr;
+	unsigned long set;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pmd {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long pmd;
+	char __data[0];
+};
+
+struct thpsize {
+	struct kobject kobj;
+	struct list_head node;
+	int order;
+};
+
+struct trace_event_data_offsets_hugepage_set {};
+
+struct trace_event_data_offsets_hugepage_update {};
+
+struct trace_event_data_offsets_migration_pmd {};
+
+typedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int);
+
+typedef void (*btf_trace_mm_khugepaged_scan_file)(void *, struct mm_struct *, struct page *, struct file *, int, int, int);
+
+typedef void (*btf_trace_mm_khugepaged_collapse_file)(void *, struct mm_struct *, struct page *, unsigned long, bool, unsigned long, struct file *, int, int);
+
+struct collapse_control {
+	bool is_khugepaged;
+	u32 node_load[1];
+	nodemask_t alloc_nmask;
+};
+
+struct khugepaged_mm_slot;
+
+struct khugepaged_scan {
+	struct list_head mm_head;
+	struct khugepaged_mm_slot *mm_slot;
+	unsigned long address;
+};
+
+struct mm_slot {
+	struct hlist_node hash;
+	struct list_head mm_node;
+	struct mm_struct *mm;
+};
+
+struct khugepaged_mm_slot {
+	struct mm_slot slot;
+};
+
+enum scan_result {
+	SCAN_FAIL = 0,
+	SCAN_SUCCEED = 1,
+	SCAN_PMD_NULL = 2,
+	SCAN_PMD_NONE = 3,
+	SCAN_PMD_MAPPED = 4,
+	SCAN_EXCEED_NONE_PTE = 5,
+	SCAN_EXCEED_SWAP_PTE = 6,
+	SCAN_EXCEED_SHARED_PTE = 7,
+	SCAN_PTE_NON_PRESENT = 8,
+	SCAN_PTE_UFFD_WP = 9,
+	SCAN_PTE_MAPPED_HUGEPAGE = 10,
+	SCAN_PAGE_RO = 11,
+	SCAN_LACK_REFERENCED_PAGE = 12,
+	SCAN_PAGE_NULL = 13,
+	SCAN_SCAN_ABORT = 14,
+	SCAN_PAGE_COUNT = 15,
+	SCAN_PAGE_LRU = 16,
+	SCAN_PAGE_LOCK = 17,
+	SCAN_PAGE_ANON = 18,
+	SCAN_PAGE_COMPOUND = 19,
+	SCAN_ANY_PROCESS = 20,
+	SCAN_VMA_NULL = 21,
+	SCAN_VMA_CHECK = 22,
+	SCAN_ADDRESS_RANGE = 23,
+	SCAN_DEL_PAGE_LRU = 24,
+	SCAN_ALLOC_HUGE_PAGE_FAIL = 25,
+	SCAN_CGROUP_CHARGE_FAIL = 26,
+	SCAN_TRUNCATED = 27,
+	SCAN_PAGE_HAS_PRIVATE = 28,
+	SCAN_STORE_FAILED = 29,
+	SCAN_COPY_MC = 30,
+	SCAN_PAGE_FILLED = 31,
+};
+
+struct trace_event_raw_mm_khugepaged_scan_pmd {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	unsigned long pfn;
+	bool writable;
+	int referenced;
+	int none_or_zero;
+	int status;
+	int unmapped;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int isolated;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_isolate {
+	struct trace_entry ent;
+	unsigned long pfn;
+	int none_or_zero;
+	int referenced;
+	bool writable;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_swapin {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int swapped_in;
+	int referenced;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_khugepaged_scan_file {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	unsigned long pfn;
+	u32 __data_loc_filename;
+	int present;
+	int swap;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_khugepaged_collapse_file {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	unsigned long hpfn;
+	unsigned long index;
+	unsigned long addr;
+	bool is_shmem;
+	u32 __data_loc_filename;
+	int nr;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_khugepaged_scan_file {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_mm_khugepaged_collapse_file {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_mm_khugepaged_scan_pmd {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_isolate {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_swapin {};
+
+struct memcg_vmstats {
+	long state[49];
+	unsigned long events[17];
+	long state_local[49];
+	unsigned long events_local[17];
+	long state_pending[49];
+	unsigned long events_pending[17];
+	atomic64_t stats_updates;
+};
+
+struct mem_cgroup_tree_per_node;
+
+struct mem_cgroup_tree {
+	struct mem_cgroup_tree_per_node *rb_tree_per_node[1];
+};
+
+struct mem_cgroup_tree_per_node {
+	struct rb_root rb_root;
+	struct rb_node *rb_rightmost;
+	spinlock_t lock;
+};
+
+struct memory_stat {
+	const char *name;
+	unsigned int idx;
+};
+
+struct move_charge_struct {
+	spinlock_t lock;
+	struct mm_struct *mm;
+	struct mem_cgroup *from;
+	struct mem_cgroup *to;
+	unsigned long flags;
+	unsigned long precharge;
+	unsigned long moved_charge;
+	unsigned long moved_swap;
+	struct task_struct *moving_task;
+	wait_queue_head_t waitq;
+};
+
+struct memcg_stock_pcp {
+	local_lock_t stock_lock;
+	struct mem_cgroup *cached;
+	unsigned int nr_pages;
+	struct obj_cgroup *cached_objcg;
+	struct pglist_data *cached_pgdat;
+	unsigned int nr_bytes;
+	int nr_slab_reclaimable_b;
+	int nr_slab_unreclaimable_b;
+	struct work_struct work;
+	unsigned long flags;
+};
+
+enum mem_cgroup_events_target {
+	MEM_CGROUP_TARGET_THRESH = 0,
+	MEM_CGROUP_TARGET_SOFTLIMIT = 1,
+	MEM_CGROUP_NTARGETS = 2,
+};
+
+enum mc_target_type {
+	MC_TARGET_NONE = 0,
+	MC_TARGET_PAGE = 1,
+	MC_TARGET_SWAP = 2,
+	MC_TARGET_DEVICE = 3,
+};
+
+enum res_type {
+	_MEM = 0,
+	_MEMSWAP = 1,
+	_KMEM = 2,
+	_TCP = 3,
+};
+
+enum {
+	RES_USAGE = 0,
+	RES_LIMIT = 1,
+	RES_MAX_USAGE = 2,
+	RES_FAILCNT = 3,
+	RES_SOFT_LIMIT = 4,
+};
+
+struct oom_wait_info {
+	struct mem_cgroup *memcg;
+	wait_queue_entry_t wait;
+};
+
+struct mem_cgroup_eventfd_list {
+	struct list_head list;
+	struct eventfd_ctx *eventfd;
+};
+
+struct mem_cgroup_event {
+	struct mem_cgroup *memcg;
+	struct eventfd_ctx *eventfd;
+	struct list_head list;
+	int (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *);
+	void (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *);
+	poll_table pt;
+	wait_queue_head_t *wqh;
+	wait_queue_entry_t wait;
+	struct work_struct remove;
+};
+
+struct uncharge_gather {
+	struct mem_cgroup *memcg;
+	unsigned long nr_memory;
+	unsigned long pgpgout;
+	unsigned long nr_kmem;
+	int nid;
+};
+
+union mc_target {
+	struct folio *folio;
+	swp_entry_t ent;
+};
+
+enum vmpressure_levels {
+	VMPRESSURE_LOW = 0,
+	VMPRESSURE_MEDIUM = 1,
+	VMPRESSURE_CRITICAL = 2,
+	VMPRESSURE_NUM_LEVELS = 3,
+};
+
+enum vmpressure_modes {
+	VMPRESSURE_NO_PASSTHROUGH = 0,
+	VMPRESSURE_HIERARCHY = 1,
+	VMPRESSURE_LOCAL = 2,
+	VMPRESSURE_NUM_MODES = 3,
+};
+
+struct vmpressure_event {
+	struct eventfd_ctx *efd;
+	enum vmpressure_levels level;
+	enum vmpressure_modes mode;
+	struct list_head node;
+};
+
+struct swap_cgroup_ctrl {
+	struct page **map;
+	unsigned long length;
+	spinlock_t lock;
+};
+
+struct swap_cgroup {
+	unsigned short id;
+};
+
+struct page_ext_operations {
+	size_t offset;
+	size_t size;
+	bool (*need)();
+	void (*init)();
+	bool need_shared_flags;
+};
+
+enum page_ext_flags {
+	PAGE_EXT_OWNER = 0,
+	PAGE_EXT_OWNER_ALLOCATED = 1,
+	PAGE_EXT_PINNER_MIGRATION_FAILED = 2,
+};
+
+struct page_owner {
+	unsigned short order;
+	short last_migrate_reason;
+	gfp_t gfp_mask;
+	depot_stack_handle_t handle;
+	depot_stack_handle_t free_handle;
+	u64 ts_nsec;
+	u64 free_ts_nsec;
+	char comm[16];
+	pid_t pid;
+	pid_t tgid;
+	pid_t free_pid;
+	pid_t free_tgid;
+};
+
+struct cleancache_filekey;
+
+struct cleancache_ops {
+	int (*init_fs)(size_t);
+	int (*init_shared_fs)(uuid_t *, size_t);
+	int (*get_page)(int, struct cleancache_filekey, unsigned long, struct page *);
+	void (*put_page)(int, struct cleancache_filekey, unsigned long, struct page *);
+	void (*invalidate_page)(int, struct cleancache_filekey, unsigned long);
+	void (*invalidate_inode)(int, struct cleancache_filekey);
+	void (*invalidate_fs)(int);
+};
+
+struct cleancache_filekey {
+	union {
+		ino_t ino;
+		__u32 fh[6];
+		u32 key[6];
+	} u;
+};
+
+struct captured_pinner;
+
+struct page_pinner_buffer {
+	spinlock_t lock;
+	unsigned long index;
+	struct captured_pinner *buffer;
+};
+
+enum pp_state {
+	PP_PUT = 0,
+	PP_FREE = 1,
+	PP_FAIL_DETECTED = 2,
+};
+
+struct captured_pinner {
+	depot_stack_handle_t handle;
+	union {
+		u64 ts_usec;
+		u64 elapsed;
+	};
+	unsigned long pfn;
+	int count;
+	int mapcount;
+	struct address_space *mapping;
+	unsigned long flags;
+	enum pp_state state;
+};
+
+struct page_pinner {
+	depot_stack_handle_t handle;
+	u64 ts_usec;
+	atomic_t count;
+};
+
+typedef void (*btf_trace_test_pages_isolated)(void *, unsigned long, unsigned long, unsigned long);
+
+struct trace_event_raw_test_pages_isolated {
+	struct trace_entry ent;
+	unsigned long start_pfn;
+	unsigned long end_pfn;
+	unsigned long fin_pfn;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_test_pages_isolated {};
+
+typedef void (*btf_trace_cma_release)(void *, const char *, unsigned long, const struct page *, unsigned long);
+
+typedef void (*btf_trace_cma_alloc_start)(void *, const char *, unsigned long, unsigned int);
+
+typedef void (*btf_trace_cma_alloc_finish)(void *, const char *, unsigned long, const struct page *, unsigned long, unsigned int, int);
+
+typedef void (*btf_trace_cma_alloc_busy_retry)(void *, const char *, unsigned long, const struct page *, unsigned long, unsigned int);
+
+struct trace_event_raw_cma_release {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long pfn;
+	const struct page *page;
+	unsigned long count;
+	char __data[0];
+};
+
+struct trace_event_raw_cma_alloc_start {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long count;
+	unsigned int align;
+	char __data[0];
+};
+
+struct trace_event_raw_cma_alloc_finish {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long pfn;
+	const struct page *page;
+	unsigned long count;
+	unsigned int align;
+	int errorno;
+	char __data[0];
+};
+
+struct trace_event_raw_cma_alloc_busy_retry {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long pfn;
+	const struct page *page;
+	unsigned long count;
+	unsigned int align;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cma_release {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cma_alloc_start {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cma_alloc_finish {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cma_alloc_busy_retry {
+	u32 name;
+};
+
+struct balloon_dev_info {
+	unsigned long isolated_pages;
+	spinlock_t pages_lock;
+	struct list_head pages;
+	int (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);
+};
+
+struct cma_mem {
+	struct hlist_node node;
+	struct page *p;
+	unsigned long n;
+};
+
+enum {
+	BAD_STACK = -1,
+	NOT_STACK = 0,
+	GOOD_FRAME = 1,
+	GOOD_STACK = 2,
+};
+
+struct page_reporting_dev_info {
+	int (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);
+	struct delayed_work work;
+	atomic_t state;
+	unsigned int order;
+};
+
+enum {
+	PAGE_REPORTING_IDLE = 0,
+	PAGE_REPORTING_REQUESTED = 1,
+	PAGE_REPORTING_ACTIVE = 2,
+};
+
+struct file_lock_context {
+	spinlock_t flc_lock;
+	struct list_head flc_flock;
+	struct list_head flc_posix;
+	struct list_head flc_lease;
+};
+
+struct nlm_lockowner;
+
+struct nfs_lock_info {
+	u32 state;
+	struct nlm_lockowner *owner;
+	struct list_head list;
+};
+
+struct nfs4_lock_state;
+
+struct nfs4_lock_info {
+	struct nfs4_lock_state *owner;
+};
+
+struct file_lock_operations;
+
+struct lock_manager_operations;
+
+struct file_lock {
+	struct file_lock *fl_blocker;
+	struct list_head fl_list;
+	struct hlist_node fl_link;
+	struct list_head fl_blocked_requests;
+	struct list_head fl_blocked_member;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	unsigned int fl_pid;
+	int fl_link_cpu;
+	wait_queue_head_t fl_wait;
+	struct file *fl_file;
+	loff_t fl_start;
+	loff_t fl_end;
+	struct fasync_struct *fl_fasync;
+	unsigned long fl_break_time;
+	unsigned long fl_downgrade_time;
+	const struct file_lock_operations *fl_ops;
+	const struct lock_manager_operations *fl_lmops;
+	union {
+		struct nfs_lock_info nfs_fl;
+		struct nfs4_lock_info nfs4_fl;
+		struct {
+			struct list_head link;
+			int state;
+			unsigned int debug_id;
+		} afs;
+		struct {
+			struct inode *inode;
+		} ceph;
+	} fl_u;
+};
+
+struct file_lock_operations {
+	void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
+	void (*fl_release_private)(struct file_lock *);
+};
+
+struct lock_manager_operations {
+	void *lm_mod_owner;
+	fl_owner_t (*lm_get_owner)(fl_owner_t);
+	void (*lm_put_owner)(fl_owner_t);
+	void (*lm_notify)(struct file_lock *);
+	int (*lm_grant)(struct file_lock *, int);
+	bool (*lm_break)(struct file_lock *);
+	int (*lm_change)(struct file_lock *, int, struct list_head *);
+	void (*lm_setup)(struct file_lock *, void **);
+	bool (*lm_breaker_owns_lease)(struct file_lock *);
+	bool (*lm_lock_expirable)(struct file_lock *);
+	void (*lm_expire_lock)();
+};
+
+enum fsnotify_data_type {
+	FSNOTIFY_EVENT_NONE = 0,
+	FSNOTIFY_EVENT_PATH = 1,
+	FSNOTIFY_EVENT_INODE = 2,
+	FSNOTIFY_EVENT_DENTRY = 3,
+	FSNOTIFY_EVENT_ERROR = 4,
+};
+
+typedef s32 compat_off_t;
+
+struct open_flags {
+	int open_flag;
+	umode_t mode;
+	int acc_mode;
+	int intent;
+	int lookup_flags;
+};
+
+typedef __kernel_rwf_t rwf_t;
+
+typedef s64 compat_loff_t;
+
+struct files_stat_struct {
+	unsigned long nr_files;
+	unsigned long nr_free_files;
+	unsigned long max_files;
+};
+
+struct backing_file {
+	struct file file;
+	struct path real_path;
+};
+
+struct fscrypt_policy_v1 {
+	__u8 version;
+	__u8 contents_encryption_mode;
+	__u8 filenames_encryption_mode;
+	__u8 flags;
+	__u8 master_key_descriptor[8];
+};
+
+struct fscrypt_policy_v2 {
+	__u8 version;
+	__u8 contents_encryption_mode;
+	__u8 filenames_encryption_mode;
+	__u8 flags;
+	__u8 log2_data_unit_size;
+	__u8 __reserved[3];
+	__u8 master_key_identifier[16];
+};
+
+union fscrypt_policy {
+	u8 version;
+	struct fscrypt_policy_v1 v1;
+	struct fscrypt_policy_v2 v2;
+};
+
+struct char_device_struct {
+	struct char_device_struct *next;
+	unsigned int major;
+	unsigned int baseminor;
+	int minorct;
+	char name[64];
+	struct cdev *cdev;
+};
+
+typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
+
+struct mount;
+
+struct mnt_namespace {
+	struct ns_common ns;
+	struct mount *root;
+	struct list_head list;
+	spinlock_t ns_lock;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	u64 seq;
+	wait_queue_head_t poll;
+	u64 event;
+	unsigned int mounts;
+	unsigned int pending_mounts;
+};
+
+struct mnt_pcp;
+
+struct mountpoint;
+
+struct mount {
+	struct hlist_node mnt_hash;
+	struct mount *mnt_parent;
+	struct dentry *mnt_mountpoint;
+	struct vfsmount mnt;
+	union {
+		struct callback_head mnt_rcu;
+		struct llist_node mnt_llist;
+	};
+	struct mnt_pcp __attribute__((btf_type_tag("percpu"))) *mnt_pcp;
+	struct list_head mnt_mounts;
+	struct list_head mnt_child;
+	struct list_head mnt_instance;
+	const char *mnt_devname;
+	struct list_head mnt_list;
+	struct list_head mnt_expire;
+	struct list_head mnt_share;
+	struct list_head mnt_slave_list;
+	struct list_head mnt_slave;
+	struct mount *mnt_master;
+	struct mnt_namespace *mnt_ns;
+	struct mountpoint *mnt_mp;
+	union {
+		struct hlist_node mnt_mp_list;
+		struct hlist_node mnt_umount;
+	};
+	struct list_head mnt_umounting;
+	struct fsnotify_mark_connector __attribute__((btf_type_tag("rcu"))) *mnt_fsnotify_marks;
+	__u32 mnt_fsnotify_mask;
+	int mnt_id;
+	int mnt_group_id;
+	int mnt_expiry_mark;
+	struct hlist_head mnt_pins;
+	struct hlist_head mnt_stuck_children;
+};
+
+struct mnt_pcp {
+	int mnt_count;
+	int mnt_writers;
+};
+
+struct mountpoint {
+	struct hlist_node m_hash;
+	struct dentry *m_dentry;
+	struct hlist_head m_list;
+	int m_count;
+};
+
+struct stat {
+	unsigned long st_dev;
+	unsigned long st_ino;
+	unsigned int st_mode;
+	unsigned int st_nlink;
+	unsigned int st_uid;
+	unsigned int st_gid;
+	unsigned long st_rdev;
+	unsigned long __pad1;
+	long st_size;
+	int st_blksize;
+	int __pad2;
+	long st_blocks;
+	long st_atime;
+	unsigned long st_atime_nsec;
+	long st_mtime;
+	unsigned long st_mtime_nsec;
+	long st_ctime;
+	unsigned long st_ctime_nsec;
+	unsigned int __unused4;
+	unsigned int __unused5;
+};
+
+typedef s64 compat_s64;
+
+struct stat64 {
+	compat_u64 st_dev;
+	unsigned char __pad0[4];
+	compat_ulong_t __st_ino;
+	compat_uint_t st_mode;
+	compat_uint_t st_nlink;
+	compat_ulong_t st_uid;
+	compat_ulong_t st_gid;
+	compat_u64 st_rdev;
+	unsigned char __pad3[4];
+	compat_s64 st_size;
+	compat_ulong_t st_blksize;
+	compat_u64 st_blocks;
+	compat_ulong_t st_atime;
+	compat_ulong_t st_atime_nsec;
+	compat_ulong_t st_mtime;
+	compat_ulong_t st_mtime_nsec;
+	compat_ulong_t st_ctime;
+	compat_ulong_t st_ctime_nsec;
+	compat_u64 st_ino;
+};
+
+struct statx_timestamp {
+	__s64 tv_sec;
+	__u32 tv_nsec;
+	__s32 __reserved;
+};
+
+struct statx {
+	__u32 stx_mask;
+	__u32 stx_blksize;
+	__u64 stx_attributes;
+	__u32 stx_nlink;
+	__u32 stx_uid;
+	__u32 stx_gid;
+	__u16 stx_mode;
+	__u16 __spare0[1];
+	__u64 stx_ino;
+	__u64 stx_size;
+	__u64 stx_blocks;
+	__u64 stx_attributes_mask;
+	struct statx_timestamp stx_atime;
+	struct statx_timestamp stx_btime;
+	struct statx_timestamp stx_ctime;
+	struct statx_timestamp stx_mtime;
+	__u32 stx_rdev_major;
+	__u32 stx_rdev_minor;
+	__u32 stx_dev_major;
+	__u32 stx_dev_minor;
+	__u64 stx_mnt_id;
+	__u32 stx_dio_mem_align;
+	__u32 stx_dio_offset_align;
+	__u64 __spare3[12];
+};
+
+typedef u32 compat_dev_t;
+
+typedef u32 compat_ino_t;
+
+typedef u16 compat_mode_t;
+
+typedef u16 compat_ushort_t;
+
+typedef u16 __compat_uid16_t;
+
+typedef u16 __compat_gid16_t;
+
+struct compat_stat {
+	compat_dev_t st_dev;
+	compat_ino_t st_ino;
+	compat_mode_t st_mode;
+	compat_ushort_t st_nlink;
+	__compat_uid16_t st_uid;
+	__compat_gid16_t st_gid;
+	compat_dev_t st_rdev;
+	compat_off_t st_size;
+	compat_off_t st_blksize;
+	compat_off_t st_blocks;
+	old_time32_t st_atime;
+	compat_ulong_t st_atime_nsec;
+	old_time32_t st_mtime;
+	compat_ulong_t st_mtime_nsec;
+	old_time32_t st_ctime;
+	compat_ulong_t st_ctime_nsec;
+	compat_ulong_t __unused4[2];
+};
+
+typedef unsigned short ushort;
+
+struct user_arg_ptr {
+	bool is_compat;
+	union {
+		const char __attribute__((btf_type_tag("user"))) * const __attribute__((btf_type_tag("user"))) *native;
+		const compat_uptr_t __attribute__((btf_type_tag("user"))) *compat;
+	} ptr;
+};
+
+enum inode_i_mutex_lock_class {
+	I_MUTEX_NORMAL = 0,
+	I_MUTEX_PARENT = 1,
+	I_MUTEX_CHILD = 2,
+	I_MUTEX_XATTR = 3,
+	I_MUTEX_NONDIR2 = 4,
+	I_MUTEX_PARENT2 = 5,
+};
+
+struct saved {
+	struct path link;
+	struct delayed_call done;
+	const char *name;
+	unsigned int seq;
+};
+
+struct nameidata {
+	struct path path;
+	struct qstr last;
+	struct path root;
+	struct inode *inode;
+	unsigned int flags;
+	unsigned int state;
+	unsigned int seq;
+	unsigned int next_seq;
+	unsigned int m_seq;
+	unsigned int r_seq;
+	int last_type;
+	unsigned int depth;
+	int total_link_count;
+	struct saved *stack;
+	struct saved internal[2];
+	struct filename *name;
+	struct nameidata *saved;
+	unsigned int root_seq;
+	int dfd;
+	vfsuid_t dir_vfsuid;
+	umode_t dir_mode;
+};
+
+enum {
+	LAST_NORM = 0,
+	LAST_ROOT = 1,
+	LAST_DOT = 2,
+	LAST_DOTDOT = 3,
+};
+
+enum {
+	WALK_TRAILING = 1,
+	WALK_MORE = 2,
+	WALK_NOFOLLOW = 4,
+};
+
+struct word_at_a_time {
+	const unsigned long one_bits;
+	const unsigned long high_bits;
+};
+
+struct name_snapshot {
+	struct qstr name;
+	unsigned char inline_name[32];
+};
+
+struct renamedata {
+	struct mnt_idmap *old_mnt_idmap;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct mnt_idmap *new_mnt_idmap;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct inode **delegated_inode;
+	unsigned int flags;
+};
+
+struct f_owner_ex {
+	int type;
+	__kernel_pid_t pid;
+};
+
+struct flock {
+	short l_type;
+	short l_whence;
+	__kernel_off_t l_start;
+	__kernel_off_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+struct compat_flock64 {
+	short l_type;
+	short l_whence;
+	compat_loff_t l_start;
+	compat_loff_t l_len;
+	compat_pid_t l_pid;
+};
+
+struct compat_flock {
+	short l_type;
+	short l_whence;
+	compat_off_t l_start;
+	compat_off_t l_len;
+	compat_pid_t l_pid;
+};
+
+struct fiemap_extent;
+
+struct fiemap_extent_info {
+	unsigned int fi_flags;
+	unsigned int fi_extents_mapped;
+	unsigned int fi_extents_max;
+	struct fiemap_extent __attribute__((btf_type_tag("user"))) *fi_extents_start;
+};
+
+struct fiemap_extent {
+	__u64 fe_logical;
+	__u64 fe_physical;
+	__u64 fe_length;
+	__u64 fe_reserved64[2];
+	__u32 fe_flags;
+	__u32 fe_reserved[3];
+};
+
+struct fsxattr {
+	__u32 fsx_xflags;
+	__u32 fsx_extsize;
+	__u32 fsx_nextents;
+	__u32 fsx_projid;
+	__u32 fsx_cowextsize;
+	unsigned char fsx_pad[8];
+};
+
+struct file_clone_range {
+	__s64 src_fd;
+	__u64 src_offset;
+	__u64 src_length;
+	__u64 dest_offset;
+};
+
+struct fiemap {
+	__u64 fm_start;
+	__u64 fm_length;
+	__u32 fm_flags;
+	__u32 fm_mapped_extents;
+	__u32 fm_extent_count;
+	__u32 fm_reserved;
+	struct fiemap_extent fm_extents[0];
+};
+
+struct file_dedupe_range_info {
+	__s64 dest_fd;
+	__u64 dest_offset;
+	__u64 bytes_deduped;
+	__s32 status;
+	__u32 reserved;
+};
+
+struct file_dedupe_range {
+	__u64 src_offset;
+	__u64 src_length;
+	__u16 dest_count;
+	__u16 reserved1;
+	__u32 reserved2;
+	struct file_dedupe_range_info info[0];
+};
+
+struct space_resv {
+	__s16 l_type;
+	__s16 l_whence;
+	__s64 l_start;
+	__s64 l_len;
+	__s32 l_sysid;
+	__u32 l_pid;
+	__s32 l_pad[4];
+};
+
+struct linux_dirent {
+	unsigned long d_ino;
+	unsigned long d_off;
+	unsigned short d_reclen;
+	char d_name[0];
+};
+
+struct getdents_callback {
+	struct dir_context ctx;
+	struct linux_dirent __attribute__((btf_type_tag("user"))) *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct linux_dirent64 {
+	u64 d_ino;
+	s64 d_off;
+	unsigned short d_reclen;
+	unsigned char d_type;
+	char d_name[0];
+};
+
+struct getdents_callback64 {
+	struct dir_context ctx;
+	struct linux_dirent64 __attribute__((btf_type_tag("user"))) *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct compat_old_linux_dirent {
+	compat_ulong_t d_ino;
+	compat_ulong_t d_offset;
+	unsigned short d_namlen;
+	char d_name[0];
+};
+
+struct compat_readdir_callback {
+	struct dir_context ctx;
+	struct compat_old_linux_dirent __attribute__((btf_type_tag("user"))) *dirent;
+	int result;
+};
+
+struct compat_linux_dirent {
+	compat_ulong_t d_ino;
+	compat_ulong_t d_off;
+	unsigned short d_reclen;
+	char d_name[0];
+};
+
+struct compat_getdents_callback {
+	struct dir_context ctx;
+	struct compat_linux_dirent __attribute__((btf_type_tag("user"))) *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+enum poll_time_type {
+	PT_TIMEVAL = 0,
+	PT_OLD_TIMEVAL = 1,
+	PT_TIMESPEC = 2,
+	PT_OLD_TIMESPEC = 3,
+};
+
+struct poll_table_entry {
+	struct file *filp;
+	__poll_t key;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *wait_address;
+};
+
+struct poll_table_page;
+
+struct poll_wqueues {
+	poll_table pt;
+	struct poll_table_page *table;
+	struct task_struct *polling_task;
+	int triggered;
+	int error;
+	int inline_index;
+	struct poll_table_entry inline_entries[9];
+};
+
+struct poll_table_page {
+	struct poll_table_page *next;
+	struct poll_table_entry *entry;
+	struct poll_table_entry entries[0];
+};
+
+typedef struct {
+	unsigned long fds_bits[16];
+} __kernel_fd_set;
+
+typedef __kernel_fd_set fd_set;
+
+struct poll_list {
+	struct poll_list *next;
+	int len;
+	struct pollfd entries[0];
+};
+
+struct compat_sel_arg_struct {
+	compat_ulong_t n;
+	compat_uptr_t inp;
+	compat_uptr_t outp;
+	compat_uptr_t exp;
+	compat_uptr_t tvp;
+};
+
+typedef struct {
+	unsigned long *in;
+	unsigned long *out;
+	unsigned long *ex;
+	unsigned long *res_in;
+	unsigned long *res_out;
+	unsigned long *res_ex;
+} fd_set_bits;
+
+struct sigset_argpack {
+	sigset_t __attribute__((btf_type_tag("user"))) *p;
+	size_t size;
+};
+
+struct compat_sigset_argpack {
+	compat_uptr_t p;
+	compat_size_t size;
+};
+
+struct dentry_stat_t {
+	long nr_dentry;
+	long nr_unused;
+	long age_limit;
+	long want_pages;
+	long nr_negative;
+	long dummy;
+};
+
+enum dentry_d_lock_class {
+	DENTRY_D_LOCK_NORMAL = 0,
+	DENTRY_D_LOCK_NESTED = 1,
+};
+
+enum d_walk_ret {
+	D_WALK_CONTINUE = 0,
+	D_WALK_QUIT = 1,
+	D_WALK_NORETRY = 2,
+	D_WALK_SKIP = 3,
+};
+
+struct external_name {
+	union {
+		atomic_t count;
+		struct callback_head head;
+	} u;
+	unsigned char name[0];
+};
+
+struct check_mount {
+	struct vfsmount *mnt;
+	unsigned int mounted;
+};
+
+struct select_data {
+	struct dentry *start;
+	union {
+		long found;
+		struct dentry *victim;
+	};
+	struct list_head dispose;
+};
+
+struct inodes_stat_t {
+	long nr_inodes;
+	long nr_unused;
+	long dummy[5];
+};
+
+enum file_time_flags {
+	S_ATIME = 1,
+	S_MTIME = 2,
+	S_CTIME = 4,
+	S_VERSION = 8,
+};
+
+enum umount_tree_flags {
+	UMOUNT_SYNC = 1,
+	UMOUNT_PROPAGATE = 2,
+	UMOUNT_CONNECTED = 4,
+};
+
+enum mnt_tree_flags_t {
+	MNT_TREE_MOVE = 1,
+	MNT_TREE_BENEATH = 2,
+};
+
+struct mount_attr {
+	__u64 attr_set;
+	__u64 attr_clr;
+	__u64 propagation;
+	__u64 userns_fd;
+};
+
+struct mount_kattr {
+	unsigned int attr_set;
+	unsigned int attr_clr;
+	unsigned int propagation;
+	unsigned int lookup_flags;
+	bool recurse;
+	struct user_namespace *mnt_userns;
+	struct mnt_idmap *mnt_idmap;
+};
+
+struct mnt_idmap {
+	struct user_namespace *owner;
+	refcount_t count;
+};
+
+struct proc_mounts {
+	struct mnt_namespace *ns;
+	struct path root;
+	int (*show)(struct seq_file *, struct vfsmount *);
+	struct mount cursor;
+};
+
+struct simple_xattr {
+	struct rb_node rb_node;
+	char *name;
+	size_t size;
+	char value[0];
+};
+
+struct xattr_name;
+
+struct xattr_ctx {
+	union {
+		const void __attribute__((btf_type_tag("user"))) *cvalue;
+		void __attribute__((btf_type_tag("user"))) *value;
+	};
+	void *kvalue;
+	size_t size;
+	struct xattr_name *kname;
+	unsigned int flags;
+};
+
+struct xattr_name {
+	char name[256];
+};
+
+struct utf8data;
+
+struct utf8data_table;
+
+struct unicode_map {
+	unsigned int version;
+	const struct utf8data *ntab[2];
+	const struct utf8data_table *tables;
+};
+
+struct utf8data {
+	unsigned int maxage;
+	unsigned int offset;
+};
+
+struct utf8data_table {
+	const unsigned int *utf8agetab;
+	int utf8agetab_size;
+	const struct utf8data *utf8nfdicfdata;
+	int utf8nfdicfdata_size;
+	const struct utf8data *utf8nfdidata;
+	int utf8nfdidata_size;
+	const unsigned char *utf8data;
+};
+
+struct simple_transaction_argresp {
+	ssize_t size;
+	char data[0];
+};
+
+struct simple_attr {
+	int (*get)(void *, u64 *);
+	int (*set)(void *, u64);
+	char get_buf[24];
+	char set_buf[24];
+	void *data;
+	const char *fmt;
+	struct mutex mutex;
+};
+
+typedef void (*btf_trace_writeback_dirty_folio)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_folio_wait_writeback)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_inode_foreign_history)(void *, struct inode *, struct writeback_control *, unsigned int);
+
+typedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *);
+
+typedef void (*btf_trace_track_foreign_dirty)(void *, struct folio *, struct bdi_writeback *);
+
+typedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *);
+
+struct wb_writeback_work;
+
+typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+struct wb_writeback_work {
+	long nr_pages;
+	struct super_block *sb;
+	enum writeback_sync_modes sync_mode;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_kupdate: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_background: 1;
+	unsigned int for_sync: 1;
+	unsigned int auto_free: 1;
+	enum wb_reason reason;
+	struct list_head list;
+	struct wb_completion *done;
+};
+
+typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_pages_written)(void *, long);
+
+typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);
+
+typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);
+
+typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);
+
+typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, unsigned long, int);
+
+typedef void (*btf_trace_global_dirty_state)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, long, unsigned long);
+
+typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, unsigned long);
+
+typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, unsigned long);
+
+typedef void (*btf_trace_writeback_lazytime)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);
+
+struct trace_event_raw_writeback_folio_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	unsigned long index;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_dirty_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	unsigned long state;
+	unsigned long flags;
+	char __data[0];
+};
+
+struct trace_event_raw_inode_foreign_history {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	ino_t cgroup_ino;
+	unsigned int history;
+	char __data[0];
+};
+
+struct trace_event_raw_inode_switch_wbs {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	ino_t old_cgroup_ino;
+	ino_t new_cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_track_foreign_dirty {
+	struct trace_entry ent;
+	char name[32];
+	u64 bdi_id;
+	ino_t ino;
+	unsigned int memcg_id;
+	ino_t cgroup_ino;
+	ino_t page_cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_flush_foreign {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	unsigned int frn_bdi_id;
+	unsigned int frn_memcg_id;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_write_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	int sync_mode;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_work_class {
+	struct trace_entry ent;
+	char name[32];
+	long nr_pages;
+	dev_t sb_dev;
+	int sync_mode;
+	int for_kupdate;
+	int range_cyclic;
+	int for_background;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_pages_written {
+	struct trace_entry ent;
+	long pages;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_class {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_bdi_register {
+	struct trace_entry ent;
+	char name[32];
+	char __data[0];
+};
+
+struct trace_event_raw_wbc_class {
+	struct trace_entry ent;
+	char name[32];
+	long nr_to_write;
+	long pages_skipped;
+	int sync_mode;
+	int for_kupdate;
+	int for_background;
+	int for_reclaim;
+	int range_cyclic;
+	long range_start;
+	long range_end;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_queue_io {
+	struct trace_entry ent;
+	char name[32];
+	unsigned long older;
+	long age;
+	int moved;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_global_dirty_state {
+	struct trace_entry ent;
+	unsigned long nr_dirty;
+	unsigned long nr_writeback;
+	unsigned long background_thresh;
+	unsigned long dirty_thresh;
+	unsigned long dirty_limit;
+	unsigned long nr_dirtied;
+	unsigned long nr_written;
+	char __data[0];
+};
+
+struct trace_event_raw_bdi_dirty_ratelimit {
+	struct trace_entry ent;
+	char bdi[32];
+	unsigned long write_bw;
+	unsigned long avg_write_bw;
+	unsigned long dirty_rate;
+	unsigned long dirty_ratelimit;
+	unsigned long task_ratelimit;
+	unsigned long balanced_dirty_ratelimit;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_balance_dirty_pages {
+	struct trace_entry ent;
+	char bdi[32];
+	unsigned long limit;
+	unsigned long setpoint;
+	unsigned long dirty;
+	unsigned long bdi_setpoint;
+	unsigned long bdi_dirty;
+	unsigned long dirty_ratelimit;
+	unsigned long task_ratelimit;
+	unsigned int dirtied;
+	unsigned int dirtied_pause;
+	unsigned long paused;
+	long pause;
+	unsigned long period;
+	long think;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_sb_inodes_requeue {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	unsigned long state;
+	unsigned long dirtied_when;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_single_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	unsigned long state;
+	unsigned long dirtied_when;
+	unsigned long writeback_index;
+	long nr_to_write;
+	unsigned long wrote;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_inode_template {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long state;
+	__u16 mode;
+	unsigned long dirtied_when;
+	char __data[0];
+};
+
+struct inode_switch_wbs_context {
+	struct rcu_work work;
+	struct bdi_writeback *new_wb;
+	struct inode *inodes[0];
+};
+
+struct trace_event_data_offsets_writeback_folio_template {};
+
+struct trace_event_data_offsets_writeback_dirty_inode_template {};
+
+struct trace_event_data_offsets_inode_foreign_history {};
+
+struct trace_event_data_offsets_inode_switch_wbs {};
+
+struct trace_event_data_offsets_track_foreign_dirty {};
+
+struct trace_event_data_offsets_flush_foreign {};
+
+struct trace_event_data_offsets_writeback_write_inode_template {};
+
+struct trace_event_data_offsets_writeback_work_class {};
+
+struct trace_event_data_offsets_writeback_pages_written {};
+
+struct trace_event_data_offsets_writeback_class {};
+
+struct trace_event_data_offsets_writeback_bdi_register {};
+
+struct trace_event_data_offsets_wbc_class {};
+
+struct trace_event_data_offsets_writeback_queue_io {};
+
+struct trace_event_data_offsets_global_dirty_state {};
+
+struct trace_event_data_offsets_bdi_dirty_ratelimit {};
+
+struct trace_event_data_offsets_balance_dirty_pages {};
+
+struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
+
+struct trace_event_data_offsets_writeback_single_inode_template {};
+
+struct trace_event_data_offsets_writeback_inode_template {};
+
+struct splice_desc {
+	size_t total_len;
+	unsigned int len;
+	unsigned int flags;
+	union {
+		void __attribute__((btf_type_tag("user"))) *userptr;
+		struct file *file;
+		void *data;
+	} u;
+	void (*splice_eof)(struct splice_desc *);
+	loff_t pos;
+	loff_t *opos;
+	size_t num_spliced;
+	bool need_wakeup;
+};
+
+typedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *);
+
+typedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *);
+
+struct old_utimbuf32 {
+	old_time32_t actime;
+	old_time32_t modtime;
+};
+
+struct prepend_buffer {
+	char *buf;
+	int len;
+};
+
+struct statfs {
+	__kernel_long_t f_type;
+	__kernel_long_t f_bsize;
+	__kernel_long_t f_blocks;
+	__kernel_long_t f_bfree;
+	__kernel_long_t f_bavail;
+	__kernel_long_t f_files;
+	__kernel_long_t f_ffree;
+	__kernel_fsid_t f_fsid;
+	__kernel_long_t f_namelen;
+	__kernel_long_t f_frsize;
+	__kernel_long_t f_flags;
+	__kernel_long_t f_spare[4];
+};
+
+struct statfs64 {
+	__kernel_long_t f_type;
+	__kernel_long_t f_bsize;
+	__u64 f_blocks;
+	__u64 f_bfree;
+	__u64 f_bavail;
+	__u64 f_files;
+	__u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	__kernel_long_t f_namelen;
+	__kernel_long_t f_frsize;
+	__kernel_long_t f_flags;
+	__kernel_long_t f_spare[4];
+};
+
+typedef int __kernel_daddr_t;
+
+struct ustat {
+	__kernel_daddr_t f_tfree;
+	unsigned long f_tinode;
+	char f_fname[6];
+	char f_fpack[6];
+};
+
+typedef __kernel_fsid_t compat_fsid_t;
+
+struct compat_statfs {
+	int f_type;
+	int f_bsize;
+	int f_blocks;
+	int f_bfree;
+	int f_bavail;
+	int f_files;
+	int f_ffree;
+	compat_fsid_t f_fsid;
+	int f_namelen;
+	int f_frsize;
+	int f_flags;
+	int f_spare[4];
+};
+
+typedef s32 compat_daddr_t;
+
+struct compat_ustat {
+	compat_daddr_t f_tfree;
+	compat_ino_t f_tinode;
+	char f_fname[6];
+	char f_fpack[6];
+};
+
+struct fs_pin {
+	wait_queue_head_t wait;
+	int done;
+	struct hlist_node s_list;
+	struct hlist_node m_list;
+	void (*kill)(struct fs_pin *);
+};
+
+struct ns_get_path_task_args {
+	const struct proc_ns_operations *ns_ops;
+	struct task_struct *task;
+};
+
+enum legacy_fs_param {
+	LEGACY_FS_UNSET_PARAMS = 0,
+	LEGACY_FS_MONOLITHIC_PARAMS = 1,
+	LEGACY_FS_INDIVIDUAL_PARAMS = 2,
+};
+
+struct legacy_fs_context {
+	char *legacy_data;
+	size_t data_size;
+	enum legacy_fs_param param_type;
+};
+
+enum fsconfig_command {
+	FSCONFIG_SET_FLAG = 0,
+	FSCONFIG_SET_STRING = 1,
+	FSCONFIG_SET_BINARY = 2,
+	FSCONFIG_SET_PATH = 3,
+	FSCONFIG_SET_PATH_EMPTY = 4,
+	FSCONFIG_SET_FD = 5,
+	FSCONFIG_CMD_CREATE = 6,
+	FSCONFIG_CMD_RECONFIGURE = 7,
+	FSCONFIG_CMD_CREATE_EXCL = 8,
+};
+
+struct iomap_ops {
+	int (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap *, struct iomap *);
+	int (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct bh_lru {
+	struct buffer_head *bhs[16];
+};
+
+struct bh_accounting {
+	int nr;
+	int ratelimit;
+};
+
+struct postprocess_bh_ctx {
+	struct work_struct work;
+	struct buffer_head *bh;
+};
+
+struct dax_device;
+
+struct iomap_folio_ops;
+
+struct iomap {
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	void *inline_data;
+	void *private;
+	const struct iomap_folio_ops *folio_ops;
+	u64 validity_cookie;
+	u64 android_kabi_reserved1;
+};
+
+struct iomap_iter;
+
+struct iomap_folio_ops {
+	struct folio * (*get_folio)(struct iomap_iter *, loff_t, unsigned int);
+	void (*put_folio)(struct inode *, loff_t, unsigned int, struct folio *);
+	bool (*iomap_valid)(struct inode *, const struct iomap *);
+};
+
+struct iomap_iter {
+	struct inode *inode;
+	loff_t pos;
+	u64 len;
+	s64 processed;
+	unsigned int flags;
+	struct iomap iomap;
+	struct iomap srcmap;
+	void *private;
+};
+
+typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
+
+struct folio_iter {
+	struct folio *folio;
+	size_t offset;
+	size_t length;
+	struct folio *_next;
+	size_t _seg_count;
+	int _i;
+};
+
+struct mpage_readpage_args {
+	struct bio *bio;
+	struct folio *folio;
+	unsigned int nr_pages;
+	bool is_readahead;
+	sector_t last_block_in_bio;
+	struct buffer_head map_bh;
+	unsigned long first_logical_block;
+	get_block_t *get_block;
+};
+
+struct mpage_data {
+	struct bio *bio;
+	sector_t last_block_in_bio;
+	get_block_t *get_block;
+};
+
+struct proc_fs_opts {
+	int flag;
+	const char *str;
+};
+
+union proc_op {
+	int (*proc_get_link)(struct dentry *, struct path *);
+	int (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *);
+	const char *lsm;
+};
+
+struct proc_inode {
+	struct pid *pid;
+	unsigned int fd;
+	union proc_op op;
+	struct proc_dir_entry *pde;
+	struct ctl_table_header *sysctl;
+	struct ctl_table *sysctl_entry;
+	struct hlist_node sibling_inodes;
+	const struct proc_ns_operations *ns_ops;
+	struct inode vfs_inode;
+};
+
+typedef int (*proc_write_t)(struct file *, char *, size_t);
+
+typedef u32 nlink_t;
+
+struct proc_dir_entry {
+	atomic_t in_use;
+	refcount_t refcnt;
+	struct list_head pde_openers;
+	spinlock_t pde_unload_lock;
+	struct completion *pde_unload_completion;
+	const struct inode_operations *proc_iops;
+	union {
+		const struct proc_ops *proc_ops;
+		const struct file_operations *proc_dir_ops;
+	};
+	const struct dentry_operations *proc_dops;
+	union {
+		const struct seq_operations *seq_ops;
+		int (*single_show)(struct seq_file *, void *);
+	};
+	proc_write_t write;
+	void *data;
+	unsigned int state_size;
+	unsigned int low_ino;
+	nlink_t nlink;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct proc_dir_entry *parent;
+	struct rb_root subdir;
+	struct rb_node subdir_node;
+	char *name;
+	umode_t mode;
+	u8 flags;
+	u8 namelen;
+	char inline_name[0];
+};
+
+enum {
+	DIO_LOCKING = 1,
+	DIO_SKIP_HOLES = 2,
+};
+
+typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
+
+struct dio {
+	int flags;
+	blk_opf_t opf;
+	struct gendisk *bio_disk;
+	struct inode *inode;
+	loff_t i_size;
+	dio_iodone_t *end_io;
+	bool is_pinned;
+	void *private;
+	spinlock_t bio_lock;
+	int page_errors;
+	int is_async;
+	bool defer_completion;
+	bool should_dirty;
+	int io_error;
+	unsigned long refcount;
+	struct bio *bio_list;
+	struct task_struct *waiter;
+	struct kiocb *iocb;
+	ssize_t result;
+	union {
+		struct page *pages[64];
+		struct work_struct complete_work;
+	};
+	long: 64;
+};
+
+struct dio_submit {
+	struct bio *bio;
+	unsigned int blkbits;
+	unsigned int blkfactor;
+	unsigned int start_zero_done;
+	int pages_in_io;
+	sector_t block_in_file;
+	unsigned int blocks_available;
+	int reap_counter;
+	sector_t final_block_in_request;
+	int boundary;
+	get_block_t *get_block;
+	loff_t logical_offset_in_bio;
+	sector_t final_block_in_bio;
+	sector_t next_block_for_io;
+	struct page *cur_page;
+	unsigned int cur_page_offset;
+	unsigned int cur_page_len;
+	sector_t cur_page_block;
+	loff_t cur_page_fs_offset;
+	struct iov_iter *iter;
+	unsigned int head;
+	unsigned int tail;
+	size_t from;
+	size_t to;
+};
+
+typedef unsigned int iov_iter_extraction_t;
+
+enum fsnotify_iter_type {
+	FSNOTIFY_ITER_TYPE_INODE = 0,
+	FSNOTIFY_ITER_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_ITER_TYPE_SB = 2,
+	FSNOTIFY_ITER_TYPE_PARENT = 3,
+	FSNOTIFY_ITER_TYPE_INODE2 = 4,
+	FSNOTIFY_ITER_TYPE_COUNT = 5,
+};
+
+struct fs_error_report {
+	int error;
+	struct inode *inode;
+	struct super_block *sb;
+};
+
+struct inotify_inode_mark {
+	struct fsnotify_mark fsn_mark;
+	int wd;
+};
+
+struct file_handle {
+	__u32 handle_bytes;
+	int handle_type;
+	unsigned char f_handle[0];
+};
+
+struct inotify_event_info {
+	struct fsnotify_event fse;
+	u32 mask;
+	int wd;
+	u32 sync_cookie;
+	int name_len;
+	char name[0];
+};
+
+struct inotify_event {
+	__s32 wd;
+	__u32 mask;
+	__u32 cookie;
+	__u32 len;
+	char name[0];
+};
+
+struct epitem;
+
+struct eventpoll {
+	struct mutex mtx;
+	wait_queue_head_t wq;
+	wait_queue_head_t poll_wait;
+	struct list_head rdllist;
+	rwlock_t lock;
+	struct rb_root_cached rbr;
+	struct epitem *ovflist;
+	struct wakeup_source *ws;
+	struct user_struct *user;
+	struct file *file;
+	u64 gen;
+	struct hlist_head refs;
+	refcount_t refcount;
+	unsigned int napi_id;
+};
+
+struct epoll_filefd {
+	struct file *file;
+	int fd;
+} __attribute__((packed));
+
+struct epoll_event {
+	__poll_t events;
+	__u64 data;
+};
+
+struct eppoll_entry;
+
+struct epitem {
+	union {
+		struct rb_node rbn;
+		struct callback_head rcu;
+	};
+	struct list_head rdllink;
+	struct epitem *next;
+	struct epoll_filefd ffd;
+	bool dying;
+	struct eppoll_entry *pwqlist;
+	struct eventpoll *ep;
+	struct hlist_node fllink;
+	struct wakeup_source __attribute__((btf_type_tag("rcu"))) *ws;
+	struct epoll_event event;
+};
+
+struct eppoll_entry {
+	struct eppoll_entry *next;
+	struct epitem *base;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *whead;
+};
+
+struct epitems_head {
+	struct hlist_head epitems;
+	struct epitems_head *next;
+};
+
+struct ep_pqueue {
+	poll_table pt;
+	struct epitem *epi;
+};
+
+struct signalfd_siginfo {
+	__u32 ssi_signo;
+	__s32 ssi_errno;
+	__s32 ssi_code;
+	__u32 ssi_pid;
+	__u32 ssi_uid;
+	__s32 ssi_fd;
+	__u32 ssi_tid;
+	__u32 ssi_band;
+	__u32 ssi_overrun;
+	__u32 ssi_trapno;
+	__s32 ssi_status;
+	__s32 ssi_int;
+	__u64 ssi_ptr;
+	__u64 ssi_utime;
+	__u64 ssi_stime;
+	__u64 ssi_addr;
+	__u16 ssi_addr_lsb;
+	__u16 __pad2;
+	__s32 ssi_syscall;
+	__u64 ssi_call_addr;
+	__u32 ssi_arch;
+	__u8 __pad[28];
+};
+
+struct signalfd_ctx {
+	sigset_t sigmask;
+};
+
+struct timerfd_ctx {
+	union {
+		struct hrtimer tmr;
+		struct alarm alarm;
+	} t;
+	ktime_t tintv;
+	ktime_t moffs;
+	wait_queue_head_t wqh;
+	u64 ticks;
+	int clockid;
+	unsigned short expired;
+	unsigned short settime_flags;
+	struct callback_head rcu;
+	struct list_head clist;
+	spinlock_t cancel_lock;
+	bool might_cancel;
+};
+
+struct eventfd_ctx {
+	struct kref kref;
+	wait_queue_head_t wqh;
+	__u64 count;
+	unsigned int flags;
+	int id;
+};
+
+struct userfaultfd_fork_ctx {
+	struct userfaultfd_ctx *orig;
+	struct userfaultfd_ctx *new;
+	struct list_head list;
+};
+
+struct userfaultfd_unmap_ctx {
+	struct userfaultfd_ctx *ctx;
+	unsigned long start;
+	unsigned long end;
+	struct list_head list;
+};
+
+struct uffd_msg {
+	__u8 event;
+	__u8 reserved1;
+	__u16 reserved2;
+	__u32 reserved3;
+	union {
+		struct {
+			__u64 flags;
+			__u64 address;
+			union {
+				__u32 ptid;
+			} feat;
+		} pagefault;
+		struct {
+			__u32 ufd;
+		} fork;
+		struct {
+			__u64 from;
+			__u64 to;
+			__u64 len;
+		} remap;
+		struct {
+			__u64 start;
+			__u64 end;
+		} remove;
+		struct {
+			__u64 reserved1;
+			__u64 reserved2;
+			__u64 reserved3;
+		} reserved;
+	} arg;
+};
+
+struct userfaultfd_wait_queue {
+	struct uffd_msg msg;
+	wait_queue_entry_t wq;
+	struct userfaultfd_ctx *ctx;
+	bool waken;
+};
+
+struct uffdio_range {
+	__u64 start;
+	__u64 len;
+};
+
+struct uffdio_register {
+	struct uffdio_range range;
+	__u64 mode;
+	__u64 ioctls;
+};
+
+struct uffdio_copy {
+	__u64 dst;
+	__u64 src;
+	__u64 len;
+	__u64 mode;
+	__s64 copy;
+};
+
+struct uffdio_zeropage {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 zeropage;
+};
+
+struct uffdio_move {
+	__u64 dst;
+	__u64 src;
+	__u64 len;
+	__u64 mode;
+	__s64 move;
+};
+
+struct uffdio_writeprotect {
+	struct uffdio_range range;
+	__u64 mode;
+};
+
+struct uffdio_continue {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 mapped;
+};
+
+struct uffdio_poison {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 updated;
+};
+
+struct uffdio_api {
+	__u64 api;
+	__u64 features;
+	__u64 ioctls;
+};
+
+struct userfaultfd_wake_range {
+	unsigned long start;
+	unsigned long len;
+};
+
+struct kioctx_cpu;
+
+struct ctx_rq_wait;
+
+struct kioctx {
+	struct percpu_ref users;
+	atomic_t dead;
+	struct percpu_ref reqs;
+	unsigned long user_id;
+	struct kioctx_cpu *cpu;
+	unsigned int req_batch;
+	unsigned int max_reqs;
+	unsigned int nr_events;
+	unsigned long mmap_base;
+	unsigned long mmap_size;
+	struct page **ring_pages;
+	long nr_pages;
+	struct rcu_work free_rwork;
+	struct ctx_rq_wait *rq_wait;
+	long: 64;
+	struct {
+		atomic_t reqs_available;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		spinlock_t ctx_lock;
+		struct list_head active_reqs;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex ring_lock;
+		wait_queue_head_t wait;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		unsigned int tail;
+		unsigned int completed_events;
+		spinlock_t completion_lock;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct page *internal_pages[8];
+	struct file *aio_ring_file;
+	unsigned int id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kioctx_cpu {
+	unsigned int reqs_available;
+};
+
+struct ctx_rq_wait {
+	struct completion comp;
+	atomic_t count;
+};
+
+enum {
+	IOCB_CMD_PREAD = 0,
+	IOCB_CMD_PWRITE = 1,
+	IOCB_CMD_FSYNC = 2,
+	IOCB_CMD_FDSYNC = 3,
+	IOCB_CMD_POLL = 5,
+	IOCB_CMD_NOOP = 6,
+	IOCB_CMD_PREADV = 7,
+	IOCB_CMD_PWRITEV = 8,
+};
+
+struct fsync_iocb {
+	struct file *file;
+	struct work_struct work;
+	bool datasync;
+	struct cred *creds;
+};
+
+struct poll_iocb {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	bool cancelled;
+	bool work_scheduled;
+	bool work_need_resched;
+	struct wait_queue_entry wait;
+	struct work_struct work;
+};
+
+typedef int kiocb_cancel_fn(struct kiocb *);
+
+struct io_event {
+	__u64 data;
+	__u64 obj;
+	__s64 res;
+	__s64 res2;
+};
+
+struct aio_kiocb {
+	union {
+		struct file *ki_filp;
+		struct kiocb rw;
+		struct fsync_iocb fsync;
+		struct poll_iocb poll;
+	};
+	struct kioctx *ki_ctx;
+	kiocb_cancel_fn *ki_cancel;
+	struct io_event ki_res;
+	struct list_head ki_list;
+	refcount_t ki_refcnt;
+	struct eventfd_ctx *ki_eventfd;
+};
+
+typedef __kernel_ulong_t aio_context_t;
+
+struct iocb {
+	__u64 aio_data;
+	__u32 aio_key;
+	__kernel_rwf_t aio_rw_flags;
+	__u16 aio_lio_opcode;
+	__s16 aio_reqprio;
+	__u32 aio_fildes;
+	__u64 aio_buf;
+	__u64 aio_nbytes;
+	__s64 aio_offset;
+	__u64 aio_reserved2;
+	__u32 aio_flags;
+	__u32 aio_resfd;
+};
+
+struct aio_poll_table {
+	struct poll_table_struct pt;
+	struct aio_kiocb *iocb;
+	bool queued;
+	int error;
+};
+
+typedef u32 compat_aio_context_t;
+
+struct __aio_sigset {
+	const sigset_t __attribute__((btf_type_tag("user"))) *sigmask;
+	size_t sigsetsize;
+};
+
+struct __compat_aio_sigset {
+	compat_uptr_t sigmask;
+	compat_size_t sigsetsize;
+};
+
+struct aio_ring {
+	unsigned int id;
+	unsigned int nr;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int magic;
+	unsigned int compat_features;
+	unsigned int incompat_features;
+	unsigned int header_length;
+	struct io_event io_events[0];
+};
+
+struct fscrypt_prepared_key {
+	struct crypto_skcipher *tfm;
+	struct blk_crypto_key *blk_key;
+};
+
+struct fscrypt_mode;
+
+struct fscrypt_master_key;
+
+struct fscrypt_direct_key;
+
+struct fscrypt_inode_info {
+	struct fscrypt_prepared_key ci_enc_key;
+	bool ci_owns_key;
+	bool ci_inlinecrypt;
+	u8 ci_data_unit_bits;
+	u8 ci_data_units_per_block_bits;
+	struct fscrypt_mode *ci_mode;
+	struct inode *ci_inode;
+	struct fscrypt_master_key *ci_master_key;
+	struct list_head ci_master_key_link;
+	struct fscrypt_direct_key *ci_direct_key;
+	siphash_key_t ci_dirhash_key;
+	bool ci_dirhash_key_initialized;
+	union fscrypt_policy ci_policy;
+	u8 ci_nonce[16];
+	u32 ci_hashed_ino;
+};
+
+struct fscrypt_mode {
+	const char *friendly_name;
+	const char *cipher_str;
+	int keysize;
+	int security_strength;
+	int ivsize;
+	int logged_cryptoapi_impl;
+	int logged_blk_crypto_native;
+	int logged_blk_crypto_fallback;
+	enum blk_crypto_mode_num blk_crypto_mode;
+};
+
+struct fscrypt_hkdf {
+	struct crypto_shash *hmac_tfm;
+};
+
+struct fscrypt_master_key_secret {
+	struct fscrypt_hkdf hkdf;
+	bool is_hw_wrapped;
+	u32 size;
+	u8 raw[128];
+};
+
+struct fscrypt_key_specifier {
+	__u32 type;
+	__u32 __reserved;
+	union {
+		__u8 __reserved[32];
+		__u8 descriptor[8];
+		__u8 identifier[16];
+	} u;
+};
+
+struct fscrypt_master_key {
+	struct hlist_node mk_node;
+	struct rw_semaphore mk_sem;
+	refcount_t mk_active_refs;
+	refcount_t mk_struct_refs;
+	struct callback_head mk_rcu_head;
+	struct fscrypt_master_key_secret mk_secret;
+	struct fscrypt_key_specifier mk_spec;
+	struct key *mk_users;
+	struct list_head mk_decrypted_inodes;
+	spinlock_t mk_decrypted_inodes_lock;
+	struct fscrypt_prepared_key mk_direct_keys[11];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_64_keys[11];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_32_keys[11];
+	siphash_key_t mk_ino_hash_key;
+	bool mk_ino_hash_key_initialized;
+	bool mk_present;
+};
+
+struct crypto_wait {
+	struct completion completion;
+	int err;
+};
+
+union fscrypt_iv {
+	struct {
+		__le64 index;
+		u8 nonce[16];
+	};
+	u8 raw[32];
+	__le64 dun[4];
+};
+
+typedef enum {
+	FS_DECRYPT = 0,
+	FS_ENCRYPT = 1,
+} fscrypt_direction_t;
+
+struct fscrypt_str {
+	unsigned char *name;
+	u32 len;
+};
+
+struct fscrypt_nokey_name {
+	u32 dirhash[2];
+	u8 bytes[149];
+	u8 sha256[32];
+};
+
+struct fscrypt_name {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	u32 hash;
+	u32 minor_hash;
+	struct fscrypt_str crypto_buf;
+	bool is_nokey_name;
+};
+
+struct fscrypt_symlink_data {
+	__le16 len;
+	char encrypted_path[0];
+};
+
+struct fscrypt_keyring {
+	spinlock_t lock;
+	struct hlist_head key_hashtable[128];
+};
+
+enum key_state {
+	KEY_IS_UNINSTANTIATED = 0,
+	KEY_IS_POSITIVE = 1,
+};
+
+struct fscrypt_add_key_arg {
+	struct fscrypt_key_specifier key_spec;
+	__u32 raw_size;
+	__u32 key_id;
+	__u32 __reserved[7];
+	__u32 __flags;
+	__u8 raw[0];
+};
+
+struct fscrypt_provisioning_key_payload {
+	__u32 type;
+	__u32 __reserved;
+	__u8 raw[0];
+};
+
+struct fscrypt_remove_key_arg {
+	struct fscrypt_key_specifier key_spec;
+	__u32 removal_status_flags;
+	__u32 __reserved[5];
+};
+
+struct fscrypt_get_key_status_arg {
+	struct fscrypt_key_specifier key_spec;
+	__u32 __reserved[6];
+	__u32 status;
+	__u32 status_flags;
+	__u32 user_count;
+	__u32 __out_reserved[13];
+};
+
+struct fscrypt_context_v1 {
+	u8 version;
+	u8 contents_encryption_mode;
+	u8 filenames_encryption_mode;
+	u8 flags;
+	u8 master_key_descriptor[8];
+	u8 nonce[16];
+};
+
+struct fscrypt_context_v2 {
+	u8 version;
+	u8 contents_encryption_mode;
+	u8 filenames_encryption_mode;
+	u8 flags;
+	u8 log2_data_unit_size;
+	u8 __reserved[3];
+	u8 master_key_identifier[16];
+	u8 nonce[16];
+};
+
+union fscrypt_context {
+	u8 version;
+	struct fscrypt_context_v1 v1;
+	struct fscrypt_context_v2 v2;
+};
+
+struct fscrypt_direct_key {
+	struct super_block *dk_sb;
+	struct hlist_node dk_node;
+	refcount_t dk_refcount;
+	const struct fscrypt_mode *dk_mode;
+	struct fscrypt_prepared_key dk_key;
+	u8 dk_descriptor[8];
+	u8 dk_raw[64];
+};
+
+struct fscrypt_key {
+	__u32 mode;
+	__u8 raw[64];
+	__u32 size;
+};
+
+struct user_key_payload {
+	struct callback_head rcu;
+	unsigned short datalen;
+	long: 0;
+	char data[0];
+};
+
+struct fscrypt_get_policy_ex_arg {
+	__u64 policy_size;
+	union {
+		__u8 version;
+		struct fscrypt_policy_v1 v1;
+		struct fscrypt_policy_v2 v2;
+	} policy;
+};
+
+struct fscrypt_dummy_policy {
+	const union fscrypt_policy *policy;
+};
+
+enum hash_algo {
+	HASH_ALGO_MD4 = 0,
+	HASH_ALGO_MD5 = 1,
+	HASH_ALGO_SHA1 = 2,
+	HASH_ALGO_RIPE_MD_160 = 3,
+	HASH_ALGO_SHA256 = 4,
+	HASH_ALGO_SHA384 = 5,
+	HASH_ALGO_SHA512 = 6,
+	HASH_ALGO_SHA224 = 7,
+	HASH_ALGO_RIPE_MD_128 = 8,
+	HASH_ALGO_RIPE_MD_256 = 9,
+	HASH_ALGO_RIPE_MD_320 = 10,
+	HASH_ALGO_WP_256 = 11,
+	HASH_ALGO_WP_384 = 12,
+	HASH_ALGO_WP_512 = 13,
+	HASH_ALGO_TGR_128 = 14,
+	HASH_ALGO_TGR_160 = 15,
+	HASH_ALGO_TGR_192 = 16,
+	HASH_ALGO_SM3_256 = 17,
+	HASH_ALGO_STREEBOG_256 = 18,
+	HASH_ALGO_STREEBOG_512 = 19,
+	HASH_ALGO__LAST = 20,
+};
+
+struct fsverity_hash_alg;
+
+struct merkle_tree_params {
+	const struct fsverity_hash_alg *hash_alg;
+	const u8 *hashstate;
+	unsigned int digest_size;
+	unsigned int block_size;
+	unsigned int hashes_per_block;
+	unsigned int blocks_per_page;
+	u8 log_digestsize;
+	u8 log_blocksize;
+	u8 log_arity;
+	u8 log_blocks_per_page;
+	unsigned int num_levels;
+	u64 tree_size;
+	unsigned long tree_pages;
+	unsigned long level_start[8];
+};
+
+struct fsverity_info {
+	struct merkle_tree_params tree_params;
+	u8 root_hash[64];
+	u8 file_digest[64];
+	const struct inode *inode;
+	unsigned long *hash_block_verified;
+};
+
+struct fsverity_hash_alg {
+	struct crypto_shash *tfm;
+	const char *name;
+	unsigned int digest_size;
+	unsigned int block_size;
+	enum hash_algo algo_id;
+	int mb_max_msgs;
+};
+
+struct block_buffer {
+	u32 filled;
+	bool is_root_hash;
+	u8 *data;
+};
+
+struct fsverity_descriptor {
+	__u8 version;
+	__u8 hash_algorithm;
+	__u8 log_blocksize;
+	__u8 salt_size;
+	__le32 sig_size;
+	__le64 data_size;
+	__u8 root_hash[64];
+	__u8 salt[32];
+	__u8 __reserved[144];
+	__u8 signature[0];
+};
+
+struct fsverity_enable_arg {
+	__u32 version;
+	__u32 hash_algorithm;
+	__u32 block_size;
+	__u32 salt_size;
+	__u64 salt_ptr;
+	__u32 sig_size;
+	__u32 __reserved1;
+	__u64 sig_ptr;
+	__u64 __reserved2[11];
+};
+
+struct fsverity_digest {
+	__u16 digest_algorithm;
+	__u16 digest_size;
+	__u8 digest[0];
+};
+
+struct fsverity_read_metadata_arg {
+	__u64 metadata_type;
+	__u64 offset;
+	__u64 length;
+	__u64 buf_ptr;
+	__u64 __reserved;
+};
+
+struct fsverity_pending_block {
+	const void *data;
+	u64 pos;
+	u8 real_hash[64];
+};
+
+struct fsverity_verification_context {
+	struct inode *inode;
+	struct fsverity_info *vi;
+	unsigned long max_ra_pages;
+	int num_pending;
+	struct fsverity_pending_block pending_blocks[2];
+};
+
+typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *);
+
+typedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);
+
+struct file_lock_list_struct {
+	spinlock_t lock;
+	struct hlist_head hlist;
+};
+
+struct trace_event_raw_locks_get_lock_context {
+	struct trace_entry ent;
+	unsigned long i_ino;
+	dev_t s_dev;
+	unsigned char type;
+	struct file_lock_context *ctx;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lock {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	unsigned long i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_pid;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	loff_t fl_start;
+	loff_t fl_end;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lease {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	unsigned long i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	unsigned long fl_break_time;
+	unsigned long fl_downgrade_time;
+	char __data[0];
+};
+
+struct trace_event_raw_generic_add_lease {
+	struct trace_entry ent;
+	unsigned long i_ino;
+	int wcount;
+	int rcount;
+	int icount;
+	dev_t s_dev;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	char __data[0];
+};
+
+struct trace_event_raw_leases_conflict {
+	struct trace_entry ent;
+	void *lease;
+	void *breaker;
+	unsigned int l_fl_flags;
+	unsigned int b_fl_flags;
+	unsigned char l_fl_type;
+	unsigned char b_fl_type;
+	bool conflict;
+	char __data[0];
+};
+
+struct flock64 {
+	short l_type;
+	short l_whence;
+	__kernel_loff_t l_start;
+	__kernel_loff_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+struct trace_event_data_offsets_locks_get_lock_context {};
+
+struct trace_event_data_offsets_filelock_lock {};
+
+struct trace_event_data_offsets_filelock_lease {};
+
+struct trace_event_data_offsets_generic_add_lease {};
+
+struct trace_event_data_offsets_leases_conflict {};
+
+struct locks_iterator {
+	int li_cpu;
+	loff_t li_pos;
+};
+
+enum {
+	Enabled = 0,
+	Magic = 1,
+};
+
+typedef struct {
+	struct list_head list;
+	unsigned long flags;
+	int offset;
+	int size;
+	char *magic;
+	char *mask;
+	const char *interpreter;
+	char *name;
+	struct dentry *dentry;
+	struct file *interp_file;
+} Node;
+
+struct gnu_property {
+	u32 pr_type;
+	u32 pr_datasz;
+};
+
+struct elf64_note {
+	Elf64_Word n_namesz;
+	Elf64_Word n_descsz;
+	Elf64_Word n_type;
+};
+
+struct memelfnote {
+	const char *name;
+	int type;
+	unsigned int datasz;
+	void *data;
+};
+
+struct elf_thread_core_info;
+
+struct elf_note_info {
+	struct elf_thread_core_info *thread;
+	struct memelfnote psinfo;
+	struct memelfnote signote;
+	struct memelfnote auxv;
+	struct memelfnote files;
+	siginfo_t csigdata;
+	size_t size;
+	int thread_notes;
+};
+
+struct elf_siginfo {
+	int si_signo;
+	int si_code;
+	int si_errno;
+};
+
+struct elf_prstatus_common {
+	struct elf_siginfo pr_info;
+	short pr_cursig;
+	unsigned long pr_sigpend;
+	unsigned long pr_sighold;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	struct __kernel_old_timeval pr_utime;
+	struct __kernel_old_timeval pr_stime;
+	struct __kernel_old_timeval pr_cutime;
+	struct __kernel_old_timeval pr_cstime;
+};
+
+typedef unsigned long elf_greg_t;
+
+typedef elf_greg_t elf_gregset_t[34];
+
+struct elf_prstatus {
+	struct elf_prstatus_common common;
+	elf_gregset_t pr_reg;
+	int pr_fpvalid;
+};
+
+struct elf_thread_core_info {
+	struct elf_thread_core_info *next;
+	struct task_struct *task;
+	struct elf_prstatus prstatus;
+	struct memelfnote notes[0];
+};
+
+typedef unsigned int __kernel_uid_t;
+
+typedef unsigned int __kernel_gid_t;
+
+struct elf_prpsinfo {
+	char pr_state;
+	char pr_sname;
+	char pr_zomb;
+	char pr_nice;
+	unsigned long pr_flag;
+	__kernel_uid_t pr_uid;
+	__kernel_gid_t pr_gid;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	char pr_fname[16];
+	char pr_psargs[80];
+};
+
+struct elf32_phdr {
+	Elf32_Word p_type;
+	Elf32_Off p_offset;
+	Elf32_Addr p_vaddr;
+	Elf32_Addr p_paddr;
+	Elf32_Word p_filesz;
+	Elf32_Word p_memsz;
+	Elf32_Word p_flags;
+	Elf32_Word p_align;
+};
+
+struct elf_thread_core_info___2;
+
+struct elf_note_info___2 {
+	struct elf_thread_core_info___2 *thread;
+	struct memelfnote psinfo;
+	struct memelfnote signote;
+	struct memelfnote auxv;
+	struct memelfnote files;
+	compat_siginfo_t csigdata;
+	size_t size;
+	int thread_notes;
+};
+
+struct compat_elf_siginfo {
+	compat_int_t si_signo;
+	compat_int_t si_code;
+	compat_int_t si_errno;
+};
+
+struct compat_elf_prstatus_common {
+	struct compat_elf_siginfo pr_info;
+	short pr_cursig;
+	compat_ulong_t pr_sigpend;
+	compat_ulong_t pr_sighold;
+	compat_pid_t pr_pid;
+	compat_pid_t pr_ppid;
+	compat_pid_t pr_pgrp;
+	compat_pid_t pr_sid;
+	struct old_timeval32 pr_utime;
+	struct old_timeval32 pr_stime;
+	struct old_timeval32 pr_cutime;
+	struct old_timeval32 pr_cstime;
+};
+
+typedef unsigned int compat_elf_greg_t;
+
+typedef compat_elf_greg_t compat_elf_gregset_t[18];
+
+struct compat_elf_prstatus {
+	struct compat_elf_prstatus_common common;
+	compat_elf_gregset_t pr_reg;
+	compat_int_t pr_fpvalid;
+};
+
+struct elf_thread_core_info___2 {
+	struct elf_thread_core_info___2 *next;
+	struct task_struct *task;
+	struct compat_elf_prstatus prstatus;
+	struct memelfnote notes[0];
+};
+
+typedef u16 __compat_uid_t;
+
+typedef u16 __compat_gid_t;
+
+struct compat_elf_prpsinfo {
+	char pr_state;
+	char pr_sname;
+	char pr_zomb;
+	char pr_nice;
+	compat_ulong_t pr_flag;
+	__compat_uid_t pr_uid;
+	__compat_gid_t pr_gid;
+	compat_pid_t pr_pid;
+	compat_pid_t pr_ppid;
+	compat_pid_t pr_pgrp;
+	compat_pid_t pr_sid;
+	char pr_fname[16];
+	char pr_psargs[80];
+};
+
+struct elf32_shdr {
+	Elf32_Word sh_name;
+	Elf32_Word sh_type;
+	Elf32_Word sh_flags;
+	Elf32_Addr sh_addr;
+	Elf32_Off sh_offset;
+	Elf32_Word sh_size;
+	Elf32_Word sh_link;
+	Elf32_Word sh_info;
+	Elf32_Word sh_addralign;
+	Elf32_Word sh_entsize;
+};
+
+enum {
+	MBE_REFERENCED_B = 0,
+	MBE_REUSABLE_B = 1,
+};
+
+struct mb_cache_entry {
+	struct list_head e_list;
+	struct hlist_bl_node e_hash_list;
+	atomic_t e_refcnt;
+	u32 e_key;
+	unsigned long e_flags;
+	u64 e_value;
+};
+
+struct mb_cache {
+	struct hlist_bl_head *c_hash;
+	int c_bucket_bits;
+	unsigned long c_max_entries;
+	spinlock_t c_list_lock;
+	struct list_head c_list;
+	unsigned long c_entry_count;
+	struct shrinker c_shrink;
+	struct work_struct c_shrink_work;
+};
+
+struct posix_acl_xattr_header {
+	__le32 a_version;
+};
+
+struct posix_acl_xattr_entry {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+};
+
+struct core_name {
+	char *corename;
+	int used;
+	int size;
+};
+
+typedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_release_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_invalidate_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_dio_rw_queued)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_iter_dstmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter_srcmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_writepage_map)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter)(void *, struct iomap_iter *, const void *, unsigned long);
+
+typedef void (*btf_trace_iomap_dio_rw_begin)(void *, struct kiocb *, struct iov_iter *, unsigned int, size_t);
+
+typedef void (*btf_trace_iomap_dio_complete)(void *, struct kiocb *, int, ssize_t);
+
+struct trace_event_raw_iomap_readpage_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	int nr_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_range_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t size;
+	loff_t offset;
+	u64 length;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	dev_t bdev;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_iter {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t pos;
+	u64 length;
+	unsigned int flags;
+	const void *ops;
+	unsigned long caller;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_dio_rw_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t isize;
+	loff_t pos;
+	size_t count;
+	size_t done_before;
+	int ki_flags;
+	unsigned int dio_flags;
+	bool aio;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_dio_complete {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t isize;
+	loff_t pos;
+	int ki_flags;
+	bool aio;
+	int error;
+	ssize_t ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iomap_readpage_class {};
+
+struct trace_event_data_offsets_iomap_range_class {};
+
+struct trace_event_data_offsets_iomap_class {};
+
+struct trace_event_data_offsets_iomap_iter {};
+
+struct trace_event_data_offsets_iomap_dio_rw_begin {};
+
+struct trace_event_data_offsets_iomap_dio_complete {};
+
+enum {
+	BIOSET_NEED_BVECS = 1,
+	BIOSET_NEED_RESCUER = 2,
+	BIOSET_PERCPU_CACHE = 4,
+};
+
+struct iomap_ioend {
+	struct list_head io_list;
+	u16 io_type;
+	u16 io_flags;
+	u32 io_folios;
+	struct inode *io_inode;
+	size_t io_size;
+	loff_t io_offset;
+	sector_t io_sector;
+	struct bio *io_bio;
+	struct bio io_inline_bio;
+};
+
+struct iomap_readpage_ctx {
+	struct folio *cur_folio;
+	bool cur_folio_in_bio;
+	struct bio *bio;
+	struct readahead_control *rac;
+};
+
+struct iomap_folio_state {
+	atomic_t read_bytes_pending;
+	atomic_t write_bytes_pending;
+	spinlock_t state_lock;
+	unsigned long state[0];
+};
+
+typedef int (*iomap_punch_t)(struct inode *, loff_t, loff_t);
+
+struct iomap_writeback_ops;
+
+struct iomap_writepage_ctx {
+	struct iomap iomap;
+	struct iomap_ioend *ioend;
+	const struct iomap_writeback_ops *ops;
+};
+
+struct iomap_writeback_ops {
+	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);
+	int (*prepare_ioend)(struct iomap_ioend *, int);
+	void (*discard_folio)(struct folio *, loff_t);
+};
+
+struct iomap_dio_ops;
+
+struct iomap_dio {
+	struct kiocb *iocb;
+	const struct iomap_dio_ops *dops;
+	loff_t i_size;
+	loff_t size;
+	atomic_t ref;
+	unsigned int flags;
+	int error;
+	size_t done_before;
+	bool wait_for_completion;
+	union {
+		struct {
+			struct iov_iter *iter;
+			struct task_struct *waiter;
+		} submit;
+		struct {
+			struct work_struct work;
+		} aio;
+	};
+};
+
+struct iomap_dio_ops {
+	int (*end_io)(struct kiocb *, ssize_t, int, unsigned int);
+	void (*submit_io)(const struct iomap_iter *, struct bio *, loff_t);
+	struct bio_set *bio_set;
+};
+
+struct iomap_swapfile_info {
+	struct iomap iomap;
+	struct swap_info_struct *sis;
+	uint64_t lowest_ppage;
+	uint64_t highest_ppage;
+	unsigned long nr_pages;
+	int nr_extents;
+	struct file *file;
+};
+
+struct dqstats {
+	unsigned long stat[8];
+	struct percpu_counter counter[8];
+};
+
+struct quota_module_name {
+	int qm_fmt_id;
+	char *qm_mod_name;
+};
+
+enum {
+	DQF_INFO_DIRTY_B = 17,
+};
+
+enum {
+	DQST_LOOKUPS = 0,
+	DQST_DROPS = 1,
+	DQST_READS = 2,
+	DQST_WRITES = 3,
+	DQST_CACHE_HITS = 4,
+	DQST_ALLOC_DQUOTS = 5,
+	DQST_FREE_DQUOTS = 6,
+	DQST_SYNCS = 7,
+	_DQST_DQSTAT_LAST = 8,
+};
+
+enum {
+	DQF_ROOT_SQUASH_B = 0,
+	DQF_SYS_FILE_B = 16,
+	DQF_PRIVATE = 17,
+};
+
+enum {
+	QIF_BLIMITS_B = 0,
+	QIF_SPACE_B = 1,
+	QIF_ILIMITS_B = 2,
+	QIF_INODES_B = 3,
+	QIF_BTIME_B = 4,
+	QIF_ITIME_B = 5,
+};
+
+typedef __kernel_uid32_t qid_t;
+
+struct dquot_warn {
+	struct super_block *w_sb;
+	struct kqid w_dq_id;
+	short w_type;
+};
+
+struct qtree_fmt_operations {
+	void (*mem2disk_dqblk)(void *, struct dquot *);
+	void (*disk2mem_dqblk)(struct dquot *, void *);
+	int (*is_id)(void *, struct dquot *);
+};
+
+struct v2_disk_dqheader {
+	__le32 dqh_magic;
+	__le32 dqh_version;
+};
+
+struct qtree_mem_dqinfo {
+	struct super_block *dqi_sb;
+	int dqi_type;
+	unsigned int dqi_blocks;
+	unsigned int dqi_free_blk;
+	unsigned int dqi_free_entry;
+	unsigned int dqi_blocksize_bits;
+	unsigned int dqi_entry_size;
+	unsigned int dqi_usable_bs;
+	unsigned int dqi_qtree_depth;
+	const struct qtree_fmt_operations *dqi_ops;
+};
+
+struct v2_disk_dqinfo {
+	__le32 dqi_bgrace;
+	__le32 dqi_igrace;
+	__le32 dqi_flags;
+	__le32 dqi_blocks;
+	__le32 dqi_free_blk;
+	__le32 dqi_free_entry;
+};
+
+struct v2r0_disk_dqblk {
+	__le32 dqb_id;
+	__le32 dqb_ihardlimit;
+	__le32 dqb_isoftlimit;
+	__le32 dqb_curinodes;
+	__le32 dqb_bhardlimit;
+	__le32 dqb_bsoftlimit;
+	__le64 dqb_curspace;
+	__le64 dqb_btime;
+	__le64 dqb_itime;
+};
+
+struct v2r1_disk_dqblk {
+	__le32 dqb_id;
+	__le32 dqb_pad;
+	__le64 dqb_ihardlimit;
+	__le64 dqb_isoftlimit;
+	__le64 dqb_curinodes;
+	__le64 dqb_bhardlimit;
+	__le64 dqb_bsoftlimit;
+	__le64 dqb_curspace;
+	__le64 dqb_btime;
+	__le64 dqb_itime;
+};
+
+struct qt_disk_dqdbheader {
+	__le32 dqdh_next_free;
+	__le32 dqdh_prev_free;
+	__le16 dqdh_entries;
+	__le16 dqdh_pad1;
+	__le32 dqdh_pad2;
+};
+
+struct if_dqblk {
+	__u64 dqb_bhardlimit;
+	__u64 dqb_bsoftlimit;
+	__u64 dqb_curspace;
+	__u64 dqb_ihardlimit;
+	__u64 dqb_isoftlimit;
+	__u64 dqb_curinodes;
+	__u64 dqb_btime;
+	__u64 dqb_itime;
+	__u32 dqb_valid;
+};
+
+struct fs_qfilestat {
+	__u64 qfs_ino;
+	__u64 qfs_nblks;
+	__u32 qfs_nextents;
+};
+
+typedef struct fs_qfilestat fs_qfilestat_t;
+
+struct fs_quota_stat {
+	__s8 qs_version;
+	__u16 qs_flags;
+	__s8 qs_pad;
+	fs_qfilestat_t qs_uquota;
+	fs_qfilestat_t qs_gquota;
+	__u32 qs_incoredqs;
+	__s32 qs_btimelimit;
+	__s32 qs_itimelimit;
+	__s32 qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+};
+
+struct fs_qfilestatv {
+	__u64 qfs_ino;
+	__u64 qfs_nblks;
+	__u32 qfs_nextents;
+	__u32 qfs_pad;
+};
+
+struct fs_quota_statv {
+	__s8 qs_version;
+	__u8 qs_pad1;
+	__u16 qs_flags;
+	__u32 qs_incoredqs;
+	struct fs_qfilestatv qs_uquota;
+	struct fs_qfilestatv qs_gquota;
+	struct fs_qfilestatv qs_pquota;
+	__s32 qs_btimelimit;
+	__s32 qs_itimelimit;
+	__s32 qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+	__u16 qs_rtbwarnlimit;
+	__u16 qs_pad3;
+	__u32 qs_pad4;
+	__u64 qs_pad2[7];
+};
+
+struct fs_disk_quota {
+	__s8 d_version;
+	__s8 d_flags;
+	__u16 d_fieldmask;
+	__u32 d_id;
+	__u64 d_blk_hardlimit;
+	__u64 d_blk_softlimit;
+	__u64 d_ino_hardlimit;
+	__u64 d_ino_softlimit;
+	__u64 d_bcount;
+	__u64 d_icount;
+	__s32 d_itimer;
+	__s32 d_btimer;
+	__u16 d_iwarns;
+	__u16 d_bwarns;
+	__s8 d_itimer_hi;
+	__s8 d_btimer_hi;
+	__s8 d_rtbtimer_hi;
+	__s8 d_padding2;
+	__u64 d_rtb_hardlimit;
+	__u64 d_rtb_softlimit;
+	__u64 d_rtbcount;
+	__s32 d_rtbtimer;
+	__u16 d_rtbwarns;
+	__s16 d_padding3;
+	char d_padding4[8];
+};
+
+struct if_dqinfo {
+	__u64 dqi_bgrace;
+	__u64 dqi_igrace;
+	__u32 dqi_flags;
+	__u32 dqi_valid;
+};
+
+struct if_nextdqblk {
+	__u64 dqb_bhardlimit;
+	__u64 dqb_bsoftlimit;
+	__u64 dqb_curspace;
+	__u64 dqb_ihardlimit;
+	__u64 dqb_isoftlimit;
+	__u64 dqb_curinodes;
+	__u64 dqb_btime;
+	__u64 dqb_itime;
+	__u32 dqb_valid;
+	__u32 dqb_id;
+};
+
+enum clear_refs_types {
+	CLEAR_REFS_ALL = 1,
+	CLEAR_REFS_ANON = 2,
+	CLEAR_REFS_MAPPED = 3,
+	CLEAR_REFS_SOFT_DIRTY = 4,
+	CLEAR_REFS_MM_HIWATER_RSS = 5,
+	CLEAR_REFS_LAST = 6,
+};
+
+struct proc_maps_private {
+	struct inode *inode;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	struct vma_iterator iter;
+};
+
+struct mem_size_stats {
+	unsigned long resident;
+	unsigned long shared_clean;
+	unsigned long shared_dirty;
+	unsigned long private_clean;
+	unsigned long private_dirty;
+	unsigned long referenced;
+	unsigned long anonymous;
+	unsigned long lazyfree;
+	unsigned long anonymous_thp;
+	unsigned long shmem_thp;
+	unsigned long file_thp;
+	unsigned long swap;
+	unsigned long swap_shared;
+	unsigned long writeback;
+	unsigned long same;
+	unsigned long huge;
+	unsigned long shared_hugetlb;
+	unsigned long private_hugetlb;
+	unsigned long ksm;
+	u64 pss;
+	u64 pss_anon;
+	u64 pss_file;
+	u64 pss_shmem;
+	u64 pss_dirty;
+	u64 pss_locked;
+	u64 swap_pss;
+};
+
+typedef struct {
+	u64 pme;
+} pagemap_entry_t;
+
+struct pagemapread {
+	int pos;
+	int len;
+	pagemap_entry_t *buffer;
+	bool show_pfn;
+};
+
+struct clear_refs_private {
+	enum clear_refs_types type;
+};
+
+enum {
+	BIAS = 2147483648,
+};
+
+enum {
+	PROC_ENTRY_PERMANENT = 1,
+};
+
+struct pde_opener {
+	struct list_head lh;
+	struct file *file;
+	bool closing;
+	struct completion *c;
+};
+
+enum proc_param {
+	Opt_gid___2 = 0,
+	Opt_hidepid = 1,
+	Opt_subset = 2,
+};
+
+struct proc_fs_context {
+	struct pid_namespace *pid_ns;
+	unsigned int mask;
+	enum proc_hidepid hidepid;
+	int gid;
+	enum proc_pidonly pidonly;
+};
+
+struct pid_entry {
+	const char *name;
+	unsigned int len;
+	umode_t mode;
+	const struct inode_operations *iop;
+	const struct file_operations *fop;
+	union proc_op op;
+};
+
+struct limit_names {
+	const char *name;
+	const char *unit;
+};
+
+struct map_files_info {
+	unsigned long start;
+	unsigned long end;
+	fmode_t mode;
+};
+
+struct syscall_info {
+	__u64 sp;
+	struct seccomp_data data;
+};
+
+struct genradix_root;
+
+struct __genradix {
+	struct genradix_root *root;
+};
+
+struct tgid_iter {
+	unsigned int tgid;
+	struct task_struct *task;
+};
+
+typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);
+
+struct fd_data {
+	fmode_t mode;
+	unsigned int fd;
+};
+
+struct sysctl_alias {
+	const char *kernel_param;
+	const char *sysctl_param;
+};
+
+struct seq_net_private {
+	struct net *net;
+	netns_tracker ns_tracker;
+};
+
+struct kernfs_root {
+	struct kernfs_node *kn;
+	unsigned int flags;
+	struct idr ino_idr;
+	u32 last_id_lowbits;
+	u32 id_highbits;
+	struct kernfs_syscall_ops *syscall_ops;
+	struct list_head supers;
+	wait_queue_head_t deactivate_waitq;
+	struct rw_semaphore kernfs_rwsem;
+	struct rw_semaphore kernfs_iattr_rwsem;
+	struct rw_semaphore kernfs_supers_rwsem;
+	struct callback_head rcu;
+};
+
+struct kernfs_iattrs {
+	kuid_t ia_uid;
+	kgid_t ia_gid;
+	struct timespec64 ia_atime;
+	struct timespec64 ia_mtime;
+	struct timespec64 ia_ctime;
+	struct simple_xattrs xattrs;
+	atomic_t nr_user_xattrs;
+	atomic_t user_xattr_size;
+};
+
+struct kernfs_global_locks {
+	struct mutex open_file_mutex[1024];
+};
+
+struct kernfs_super_info {
+	struct super_block *sb;
+	struct kernfs_root *root;
+	const void *ns;
+	struct list_head node;
+};
+
+enum kernfs_node_flag {
+	KERNFS_ACTIVATED = 16,
+	KERNFS_NS = 32,
+	KERNFS_HAS_SEQ_SHOW = 64,
+	KERNFS_HAS_MMAP = 128,
+	KERNFS_LOCKDEP = 256,
+	KERNFS_HIDDEN = 512,
+	KERNFS_SUICIDAL = 1024,
+	KERNFS_SUICIDED = 2048,
+	KERNFS_EMPTY_DIR = 4096,
+	KERNFS_HAS_RELEASE = 8192,
+	KERNFS_REMOVING = 16384,
+};
+
+struct configfs_fragment;
+
+struct configfs_dirent {
+	atomic_t s_count;
+	int s_dependent_count;
+	struct list_head s_sibling;
+	struct list_head s_children;
+	int s_links;
+	void *s_element;
+	int s_type;
+	umode_t s_mode;
+	struct dentry *s_dentry;
+	struct iattr *s_iattr;
+	struct configfs_fragment *s_frag;
+};
+
+struct configfs_fragment {
+	atomic_t frag_count;
+	struct rw_semaphore frag_sem;
+	bool frag_dead;
+};
+
+struct config_item;
+
+struct configfs_attribute {
+	const char *ca_name;
+	struct module *ca_owner;
+	umode_t ca_mode;
+	ssize_t (*show)(struct config_item *, char *);
+	ssize_t (*store)(struct config_item *, const char *, size_t);
+};
+
+struct config_group;
+
+struct config_item_type;
+
+struct config_item {
+	char *ci_name;
+	char ci_namebuf[20];
+	struct kref ci_kref;
+	struct list_head ci_entry;
+	struct config_item *ci_parent;
+	struct config_group *ci_group;
+	const struct config_item_type *ci_type;
+	struct dentry *ci_dentry;
+};
+
+struct configfs_subsystem;
+
+struct config_group {
+	struct config_item cg_item;
+	struct list_head cg_children;
+	struct configfs_subsystem *cg_subsys;
+	struct list_head default_groups;
+	struct list_head group_entry;
+};
+
+struct configfs_subsystem {
+	struct config_group su_group;
+	struct mutex su_mutex;
+};
+
+struct configfs_item_operations;
+
+struct configfs_group_operations;
+
+struct configfs_bin_attribute;
+
+struct config_item_type {
+	struct module *ct_owner;
+	struct configfs_item_operations *ct_item_ops;
+	struct configfs_group_operations *ct_group_ops;
+	struct configfs_attribute **ct_attrs;
+	struct configfs_bin_attribute **ct_bin_attrs;
+};
+
+struct configfs_item_operations {
+	void (*release)(struct config_item *);
+	int (*allow_link)(struct config_item *, struct config_item *);
+	void (*drop_link)(struct config_item *, struct config_item *);
+};
+
+struct configfs_group_operations {
+	struct config_item * (*make_item)(struct config_group *, const char *);
+	struct config_group * (*make_group)(struct config_group *, const char *);
+	void (*disconnect_notify)(struct config_group *, struct config_item *);
+	void (*drop_item)(struct config_group *, struct config_item *);
+};
+
+struct configfs_bin_attribute {
+	struct configfs_attribute cb_attr;
+	void *cb_private;
+	size_t cb_max_size;
+	ssize_t (*read)(struct config_item *, void *, size_t);
+	ssize_t (*write)(struct config_item *, const void *, size_t);
+};
+
+struct configfs_buffer {
+	size_t count;
+	loff_t pos;
+	char *page;
+	struct configfs_item_operations *ops;
+	struct mutex mutex;
+	int needs_read_fill;
+	bool read_in_progress;
+	bool write_in_progress;
+	char *bin_buffer;
+	int bin_buffer_size;
+	int cb_max_size;
+	struct config_item *item;
+	struct module *owner;
+	union {
+		struct configfs_attribute *attr;
+		struct configfs_bin_attribute *bin_attr;
+	};
+};
+
+enum {
+	Opt_uid___2 = 0,
+	Opt_gid___3 = 1,
+	Opt_mode___2 = 2,
+	Opt_ptmxmode = 3,
+	Opt_newinstance = 4,
+	Opt_max = 5,
+	Opt_err = 6,
+};
+
+struct pts_mount_opts {
+	int setuid;
+	int setgid;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	umode_t ptmxmode;
+	int reserve;
+	int max;
+};
+
+struct pts_fs_info {
+	struct ida allocated_ptys;
+	struct pts_mount_opts mount_opts;
+	struct super_block *sb;
+	struct dentry *ptmx_dentry;
+};
+
+typedef unsigned int tid_t;
+
+struct transaction_chp_stats_s {
+	unsigned long cs_chp_time;
+	__u32 cs_forced_to_close;
+	__u32 cs_written;
+	__u32 cs_dropped;
+};
+
+struct journal_s;
+
+typedef struct journal_s journal_t;
+
+struct journal_head;
+
+struct transaction_s;
+
+typedef struct transaction_s transaction_t;
+
+struct transaction_s {
+	journal_t *t_journal;
+	tid_t t_tid;
+	enum {
+		T_RUNNING = 0,
+		T_LOCKED = 1,
+		T_SWITCH = 2,
+		T_FLUSH = 3,
+		T_COMMIT = 4,
+		T_COMMIT_DFLUSH = 5,
+		T_COMMIT_JFLUSH = 6,
+		T_COMMIT_CALLBACK = 7,
+		T_FINISHED = 8,
+	} t_state;
+	unsigned long t_log_start;
+	int t_nr_buffers;
+	struct journal_head *t_reserved_list;
+	struct journal_head *t_buffers;
+	struct journal_head *t_forget;
+	struct journal_head *t_checkpoint_list;
+	struct journal_head *t_shadow_list;
+	struct list_head t_inode_list;
+	unsigned long t_max_wait;
+	unsigned long t_start;
+	unsigned long t_requested;
+	struct transaction_chp_stats_s t_chp_stats;
+	atomic_t t_updates;
+	atomic_t t_outstanding_credits;
+	atomic_t t_outstanding_revokes;
+	atomic_t t_handle_count;
+	transaction_t *t_cpnext;
+	transaction_t *t_cpprev;
+	unsigned long t_expires;
+	ktime_t t_start_time;
+	unsigned int t_synchronous_commit: 1;
+	int t_need_data_flush;
+	struct list_head t_private_list;
+};
+
+struct transaction_run_stats_s {
+	unsigned long rs_wait;
+	unsigned long rs_request_delay;
+	unsigned long rs_running;
+	unsigned long rs_locked;
+	unsigned long rs_flushing;
+	unsigned long rs_logging;
+	__u32 rs_handle_count;
+	__u32 rs_blocks;
+	__u32 rs_blocks_logged;
+};
+
+struct transaction_stats_s {
+	unsigned long ts_tid;
+	unsigned long ts_requested;
+	struct transaction_run_stats_s run;
+};
+
+enum passtype {
+	PASS_SCAN = 0,
+	PASS_REVOKE = 1,
+	PASS_REPLAY = 2,
+};
+
+struct journal_superblock_s;
+
+typedef struct journal_superblock_s journal_superblock_t;
+
+struct jbd2_revoke_table_s;
+
+struct jbd2_inode;
+
+struct journal_s {
+	unsigned long j_flags;
+	unsigned long j_atomic_flags;
+	int j_errno;
+	struct mutex j_abort_mutex;
+	struct buffer_head *j_sb_buffer;
+	journal_superblock_t *j_superblock;
+	rwlock_t j_state_lock;
+	int j_barrier_count;
+	struct mutex j_barrier;
+	transaction_t *j_running_transaction;
+	transaction_t *j_committing_transaction;
+	transaction_t *j_checkpoint_transactions;
+	wait_queue_head_t j_wait_transaction_locked;
+	wait_queue_head_t j_wait_done_commit;
+	wait_queue_head_t j_wait_commit;
+	wait_queue_head_t j_wait_updates;
+	wait_queue_head_t j_wait_reserved;
+	wait_queue_head_t j_fc_wait;
+	struct mutex j_checkpoint_mutex;
+	struct buffer_head *j_chkpt_bhs[64];
+	struct shrinker j_shrinker;
+	struct percpu_counter j_checkpoint_jh_count;
+	transaction_t *j_shrink_transaction;
+	unsigned long j_head;
+	unsigned long j_tail;
+	unsigned long j_free;
+	unsigned long j_first;
+	unsigned long j_last;
+	unsigned long j_fc_first;
+	unsigned long j_fc_off;
+	unsigned long j_fc_last;
+	struct block_device *j_dev;
+	int j_blocksize;
+	unsigned long long j_blk_offset;
+	char j_devname[56];
+	struct block_device *j_fs_dev;
+	unsigned int j_total_len;
+	atomic_t j_reserved_credits;
+	spinlock_t j_list_lock;
+	struct inode *j_inode;
+	tid_t j_tail_sequence;
+	tid_t j_transaction_sequence;
+	tid_t j_commit_sequence;
+	tid_t j_commit_request;
+	__u8 j_uuid[16];
+	struct task_struct *j_task;
+	int j_max_transaction_buffers;
+	int j_revoke_records_per_block;
+	unsigned long j_commit_interval;
+	struct timer_list j_commit_timer;
+	spinlock_t j_revoke_lock;
+	struct jbd2_revoke_table_s *j_revoke;
+	struct jbd2_revoke_table_s *j_revoke_table[2];
+	struct buffer_head **j_wbuf;
+	struct buffer_head **j_fc_wbuf;
+	int j_wbufsize;
+	int j_fc_wbufsize;
+	pid_t j_last_sync_writer;
+	u64 j_average_commit_time;
+	u32 j_min_batch_time;
+	u32 j_max_batch_time;
+	void (*j_commit_callback)(journal_t *, transaction_t *);
+	int (*j_submit_inode_data_buffers)(struct jbd2_inode *);
+	int (*j_finish_inode_data_buffers)(struct jbd2_inode *);
+	spinlock_t j_history_lock;
+	struct proc_dir_entry *j_proc_entry;
+	struct transaction_stats_s j_stats;
+	unsigned int j_failed_commit;
+	void *j_private;
+	struct crypto_shash *j_chksum_driver;
+	__u32 j_csum_seed;
+	void (*j_fc_cleanup_callback)(struct journal_s *, int, tid_t);
+	int (*j_fc_replay_callback)(struct journal_s *, struct buffer_head *, enum passtype, int, tid_t);
+	int (*j_bmap)(struct journal_s *, sector_t *);
+};
+
+struct journal_header_s {
+	__be32 h_magic;
+	__be32 h_blocktype;
+	__be32 h_sequence;
+};
+
+typedef struct journal_header_s journal_header_t;
+
+struct journal_superblock_s {
+	journal_header_t s_header;
+	__be32 s_blocksize;
+	__be32 s_maxlen;
+	__be32 s_first;
+	__be32 s_sequence;
+	__be32 s_start;
+	__be32 s_errno;
+	__be32 s_feature_compat;
+	__be32 s_feature_incompat;
+	__be32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	__be32 s_nr_users;
+	__be32 s_dynsuper;
+	__be32 s_max_transaction;
+	__be32 s_max_trans_data;
+	__u8 s_checksum_type;
+	__u8 s_padding2[3];
+	__be32 s_num_fc_blks;
+	__be32 s_head;
+	__u32 s_padding[40];
+	__be32 s_checksum;
+	__u8 s_users[768];
+};
+
+struct jbd2_inode {
+	transaction_t *i_transaction;
+	transaction_t *i_next_transaction;
+	struct list_head i_list;
+	struct inode *i_vfs_inode;
+	unsigned long i_flags;
+	loff_t i_dirty_start;
+	loff_t i_dirty_end;
+};
+
+struct jbd2_buffer_trigger_type;
+
+struct journal_head {
+	struct buffer_head *b_bh;
+	spinlock_t b_state_lock;
+	int b_jcount;
+	unsigned int b_jlist;
+	unsigned int b_modified;
+	char *b_frozen_data;
+	char *b_committed_data;
+	transaction_t *b_transaction;
+	transaction_t *b_next_transaction;
+	struct journal_head *b_tnext;
+	struct journal_head *b_tprev;
+	transaction_t *b_cp_transaction;
+	struct journal_head *b_cpnext;
+	struct journal_head *b_cpprev;
+	struct jbd2_buffer_trigger_type *b_triggers;
+	struct jbd2_buffer_trigger_type *b_frozen_triggers;
+};
+
+struct jbd2_buffer_trigger_type {
+	void (*t_frozen)(struct jbd2_buffer_trigger_type *, struct buffer_head *, void *, size_t);
+	void (*t_abort)(struct jbd2_buffer_trigger_type *, struct buffer_head *);
+};
+
+enum ext4_li_mode {
+	EXT4_LI_MODE_PREFETCH_BBITMAP = 0,
+	EXT4_LI_MODE_ITABLE = 1,
+};
+
+enum jbd_state_bits {
+	BH_JBD = 16,
+	BH_JWrite = 17,
+	BH_Freed = 18,
+	BH_Revoked = 19,
+	BH_RevokeValid = 20,
+	BH_JBDDirty = 21,
+	BH_JournalHead = 22,
+	BH_Shadow = 23,
+	BH_Verified = 24,
+	BH_JBDPrivateStart = 25,
+};
+
+struct ext4_group_desc {
+	__le32 bg_block_bitmap_lo;
+	__le32 bg_inode_bitmap_lo;
+	__le32 bg_inode_table_lo;
+	__le16 bg_free_blocks_count_lo;
+	__le16 bg_free_inodes_count_lo;
+	__le16 bg_used_dirs_count_lo;
+	__le16 bg_flags;
+	__le32 bg_exclude_bitmap_lo;
+	__le16 bg_block_bitmap_csum_lo;
+	__le16 bg_inode_bitmap_csum_lo;
+	__le16 bg_itable_unused_lo;
+	__le16 bg_checksum;
+	__le32 bg_block_bitmap_hi;
+	__le32 bg_inode_bitmap_hi;
+	__le32 bg_inode_table_hi;
+	__le16 bg_free_blocks_count_hi;
+	__le16 bg_free_inodes_count_hi;
+	__le16 bg_used_dirs_count_hi;
+	__le16 bg_itable_unused_hi;
+	__le32 bg_exclude_bitmap_hi;
+	__le16 bg_block_bitmap_csum_hi;
+	__le16 bg_inode_bitmap_csum_hi;
+	__u32 bg_reserved;
+};
+
+typedef int ext4_grpblk_t;
+
+typedef unsigned int ext4_group_t;
+
+struct ext4_group_info {
+	unsigned long bb_state;
+	struct rb_root bb_free_root;
+	ext4_grpblk_t bb_first_free;
+	ext4_grpblk_t bb_free;
+	ext4_grpblk_t bb_fragments;
+	int bb_avg_fragment_size_order;
+	ext4_grpblk_t bb_largest_free_order;
+	ext4_group_t bb_group;
+	struct list_head bb_prealloc_list;
+	struct rw_semaphore alloc_sem;
+	struct list_head bb_avg_fragment_size_node;
+	struct list_head bb_largest_free_order_node;
+	ext4_grpblk_t bb_counters[0];
+};
+
+typedef unsigned long long ext4_fsblk_t;
+
+typedef __u32 ext4_lblk_t;
+
+struct extent_status;
+
+struct ext4_es_tree {
+	struct rb_root root;
+	struct extent_status *cache_es;
+};
+
+struct ext4_pending_tree {
+	struct rb_root root;
+};
+
+struct ext4_inode_info {
+	__le32 i_data[15];
+	__u32 i_dtime;
+	ext4_fsblk_t i_file_acl;
+	ext4_group_t i_block_group;
+	ext4_lblk_t i_dir_start_lookup;
+	unsigned long i_flags;
+	struct rw_semaphore xattr_sem;
+	union {
+		struct list_head i_orphan;
+		unsigned int i_orphan_idx;
+	};
+	struct list_head i_fc_dilist;
+	struct list_head i_fc_list;
+	ext4_lblk_t i_fc_lblk_start;
+	ext4_lblk_t i_fc_lblk_len;
+	atomic_t i_fc_updates;
+	wait_queue_head_t i_fc_wait;
+	struct mutex i_fc_lock;
+	loff_t i_disksize;
+	struct rw_semaphore i_data_sem;
+	struct inode vfs_inode;
+	struct jbd2_inode *jinode;
+	spinlock_t i_raw_lock;
+	struct timespec64 i_crtime;
+	atomic_t i_prealloc_active;
+	struct rb_root i_prealloc_node;
+	rwlock_t i_prealloc_lock;
+	struct ext4_es_tree i_es_tree;
+	rwlock_t i_es_lock;
+	struct list_head i_es_list;
+	unsigned int i_es_all_nr;
+	unsigned int i_es_shk_nr;
+	ext4_lblk_t i_es_shrink_lblk;
+	ext4_group_t i_last_alloc_group;
+	unsigned int i_reserved_data_blocks;
+	struct ext4_pending_tree i_pending_tree;
+	__u16 i_extra_isize;
+	u16 i_inline_off;
+	u16 i_inline_size;
+	qsize_t i_reserved_quota;
+	spinlock_t i_completed_io_lock;
+	struct list_head i_rsv_conversion_list;
+	struct work_struct i_rsv_conversion_work;
+	atomic_t i_unwritten;
+	spinlock_t i_block_reservation_lock;
+	tid_t i_sync_tid;
+	tid_t i_datasync_tid;
+	struct dquot __attribute__((btf_type_tag("rcu"))) *i_dquot[3];
+	__u32 i_csum_seed;
+	kprojid_t i_projid;
+};
+
+struct extent_status {
+	struct rb_node rb_node;
+	ext4_lblk_t es_lblk;
+	ext4_lblk_t es_len;
+	ext4_fsblk_t es_pblk;
+};
+
+struct ext4_orphan_block;
+
+struct ext4_orphan_info {
+	int of_blocks;
+	__u32 of_csum_seed;
+	struct ext4_orphan_block *of_binfo;
+};
+
+struct ext4_es_stats {
+	unsigned long es_stats_shrunk;
+	struct percpu_counter es_stats_cache_hits;
+	struct percpu_counter es_stats_cache_misses;
+	u64 es_stats_scan_time;
+	u64 es_stats_max_scan_time;
+	struct percpu_counter es_stats_all_cnt;
+	struct percpu_counter es_stats_shk_cnt;
+};
+
+struct ext4_journal_trigger {
+	struct jbd2_buffer_trigger_type tr_triggers;
+	struct super_block *sb;
+};
+
+struct ext4_fc_stats {
+	unsigned int fc_ineligible_reason_count[10];
+	unsigned long fc_num_commits;
+	unsigned long fc_ineligible_commits;
+	unsigned long fc_failed_commits;
+	unsigned long fc_skipped_commits;
+	unsigned long fc_numblks;
+	u64 s_fc_avg_commit_time;
+};
+
+struct ext4_fc_alloc_region;
+
+struct ext4_fc_replay_state {
+	int fc_replay_num_tags;
+	int fc_replay_expected_off;
+	int fc_current_pass;
+	int fc_cur_tag;
+	int fc_crc;
+	struct ext4_fc_alloc_region *fc_regions;
+	int fc_regions_size;
+	int fc_regions_used;
+	int fc_regions_valid;
+	int *fc_modified_inodes;
+	int fc_modified_inodes_used;
+	int fc_modified_inodes_size;
+};
+
+struct ext4_super_block;
+
+struct blockgroup_lock;
+
+struct ext4_system_blocks;
+
+struct ext4_locality_group;
+
+struct flex_groups;
+
+struct ext4_li_request;
+
+struct ext4_sb_info {
+	unsigned long s_desc_size;
+	unsigned long s_inodes_per_block;
+	unsigned long s_blocks_per_group;
+	unsigned long s_clusters_per_group;
+	unsigned long s_inodes_per_group;
+	unsigned long s_itb_per_group;
+	unsigned long s_gdb_count;
+	unsigned long s_desc_per_block;
+	ext4_group_t s_groups_count;
+	ext4_group_t s_blockfile_groups;
+	unsigned long s_overhead;
+	unsigned int s_cluster_ratio;
+	unsigned int s_cluster_bits;
+	loff_t s_bitmap_maxbytes;
+	struct buffer_head *s_sbh;
+	struct ext4_super_block *s_es;
+	struct buffer_head * __attribute__((btf_type_tag("rcu"))) *s_group_desc;
+	unsigned int s_mount_opt;
+	unsigned int s_mount_opt2;
+	unsigned long s_mount_flags;
+	unsigned int s_def_mount_opt;
+	unsigned int s_def_mount_opt2;
+	ext4_fsblk_t s_sb_block;
+	atomic64_t s_resv_clusters;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	unsigned short s_mount_state;
+	unsigned short s_pad;
+	int s_addr_per_block_bits;
+	int s_desc_per_block_bits;
+	int s_inode_size;
+	int s_first_ino;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_inode_goal;
+	u32 s_hash_seed[4];
+	int s_def_hash_version;
+	int s_hash_unsigned;
+	struct percpu_counter s_freeclusters_counter;
+	struct percpu_counter s_freeinodes_counter;
+	struct percpu_counter s_dirs_counter;
+	struct percpu_counter s_dirtyclusters_counter;
+	struct percpu_counter s_sra_exceeded_retry_limit;
+	struct blockgroup_lock *s_blockgroup_lock;
+	struct proc_dir_entry *s_proc;
+	struct kobject s_kobj;
+	struct completion s_kobj_unregister;
+	struct super_block *s_sb;
+	struct buffer_head *s_mmp_bh;
+	struct journal_s *s_journal;
+	unsigned long s_ext4_flags;
+	struct mutex s_orphan_lock;
+	struct list_head s_orphan;
+	struct ext4_orphan_info s_orphan_info;
+	unsigned long s_commit_interval;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	struct block_device *s_journal_bdev;
+	char __attribute__((btf_type_tag("rcu"))) *s_qf_names[3];
+	int s_jquota_fmt;
+	unsigned int s_want_extra_isize;
+	struct ext4_system_blocks __attribute__((btf_type_tag("rcu"))) *s_system_blks;
+	struct ext4_group_info ** __attribute__((btf_type_tag("rcu"))) *s_group_info;
+	struct inode *s_buddy_cache;
+	spinlock_t s_md_lock;
+	unsigned short *s_mb_offsets;
+	unsigned int *s_mb_maxs;
+	unsigned int s_group_info_size;
+	unsigned int s_mb_free_pending;
+	struct list_head s_freed_data_list;
+	struct list_head s_discard_list;
+	struct work_struct s_discard_work;
+	atomic_t s_retry_alloc_pending;
+	struct list_head *s_mb_avg_fragment_size;
+	rwlock_t *s_mb_avg_fragment_size_locks;
+	struct list_head *s_mb_largest_free_orders;
+	rwlock_t *s_mb_largest_free_orders_locks;
+	unsigned long s_stripe;
+	unsigned int s_mb_max_linear_groups;
+	unsigned int s_mb_stream_request;
+	unsigned int s_mb_max_to_scan;
+	unsigned int s_mb_min_to_scan;
+	unsigned int s_mb_stats;
+	unsigned int s_mb_order2_reqs;
+	unsigned int s_mb_group_prealloc;
+	unsigned int s_max_dir_size_kb;
+	unsigned long s_mb_last_group;
+	unsigned long s_mb_last_start;
+	unsigned int s_mb_prefetch;
+	unsigned int s_mb_prefetch_limit;
+	unsigned int s_mb_best_avail_max_trim_order;
+	atomic_t s_bal_reqs;
+	atomic_t s_bal_success;
+	atomic_t s_bal_allocated;
+	atomic_t s_bal_ex_scanned;
+	atomic_t s_bal_cX_ex_scanned[5];
+	atomic_t s_bal_groups_scanned;
+	atomic_t s_bal_goals;
+	atomic_t s_bal_len_goals;
+	atomic_t s_bal_breaks;
+	atomic_t s_bal_2orders;
+	atomic_t s_bal_p2_aligned_bad_suggestions;
+	atomic_t s_bal_goal_fast_bad_suggestions;
+	atomic_t s_bal_best_avail_bad_suggestions;
+	atomic64_t s_bal_cX_groups_considered[5];
+	atomic64_t s_bal_cX_hits[5];
+	atomic64_t s_bal_cX_failed[5];
+	atomic_t s_mb_buddies_generated;
+	atomic64_t s_mb_generation_time;
+	atomic_t s_mb_lost_chunks;
+	atomic_t s_mb_preallocated;
+	atomic_t s_mb_discarded;
+	atomic_t s_lock_busy;
+	struct ext4_locality_group __attribute__((btf_type_tag("percpu"))) *s_locality_groups;
+	unsigned long s_sectors_written_start;
+	u64 s_kbytes_written;
+	unsigned int s_extent_max_zeroout_kb;
+	unsigned int s_log_groups_per_flex;
+	struct flex_groups * __attribute__((btf_type_tag("rcu"))) *s_flex_groups;
+	ext4_group_t s_flex_groups_allocated;
+	struct workqueue_struct *rsv_conversion_wq;
+	struct timer_list s_err_report;
+	struct ext4_li_request *s_li_request;
+	unsigned int s_li_wait_mult;
+	struct task_struct *s_mmp_tsk;
+	unsigned long s_last_trim_minblks;
+	struct crypto_shash *s_chksum_driver;
+	__u32 s_csum_seed;
+	struct shrinker s_es_shrinker;
+	struct list_head s_es_list;
+	long s_es_nr_inode;
+	struct ext4_es_stats s_es_stats;
+	struct mb_cache *s_ea_block_cache;
+	struct mb_cache *s_ea_inode_cache;
+	long: 64;
+	long: 64;
+	spinlock_t s_es_lock;
+	struct ext4_journal_trigger s_journal_triggers[1];
+	struct ratelimit_state s_err_ratelimit_state;
+	struct ratelimit_state s_warning_ratelimit_state;
+	struct ratelimit_state s_msg_ratelimit_state;
+	atomic_t s_warning_count;
+	atomic_t s_msg_count;
+	struct fscrypt_dummy_policy s_dummy_enc_policy;
+	struct percpu_rw_semaphore s_writepages_rwsem;
+	struct dax_device *s_daxdev;
+	u64 s_dax_part_off;
+	errseq_t s_bdev_wb_err;
+	spinlock_t s_bdev_wb_lock;
+	spinlock_t s_error_lock;
+	int s_add_error_count;
+	int s_first_error_code;
+	__u32 s_first_error_line;
+	__u32 s_first_error_ino;
+	__u64 s_first_error_block;
+	const char *s_first_error_func;
+	time64_t s_first_error_time;
+	int s_last_error_code;
+	__u32 s_last_error_line;
+	__u32 s_last_error_ino;
+	__u64 s_last_error_block;
+	const char *s_last_error_func;
+	time64_t s_last_error_time;
+	struct work_struct s_sb_upd_work;
+	atomic_t s_fc_subtid;
+	struct list_head s_fc_q[2];
+	struct list_head s_fc_dentry_q[2];
+	unsigned int s_fc_bytes;
+	spinlock_t s_fc_lock;
+	struct buffer_head *s_fc_bh;
+	struct ext4_fc_stats s_fc_stats;
+	tid_t s_fc_ineligible_tid;
+	struct ext4_fc_replay_state s_fc_replay_state;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ext4_super_block {
+	__le32 s_inodes_count;
+	__le32 s_blocks_count_lo;
+	__le32 s_r_blocks_count_lo;
+	__le32 s_free_blocks_count_lo;
+	__le32 s_free_inodes_count;
+	__le32 s_first_data_block;
+	__le32 s_log_block_size;
+	__le32 s_log_cluster_size;
+	__le32 s_blocks_per_group;
+	__le32 s_clusters_per_group;
+	__le32 s_inodes_per_group;
+	__le32 s_mtime;
+	__le32 s_wtime;
+	__le16 s_mnt_count;
+	__le16 s_max_mnt_count;
+	__le16 s_magic;
+	__le16 s_state;
+	__le16 s_errors;
+	__le16 s_minor_rev_level;
+	__le32 s_lastcheck;
+	__le32 s_checkinterval;
+	__le32 s_creator_os;
+	__le32 s_rev_level;
+	__le16 s_def_resuid;
+	__le16 s_def_resgid;
+	__le32 s_first_ino;
+	__le16 s_inode_size;
+	__le16 s_block_group_nr;
+	__le32 s_feature_compat;
+	__le32 s_feature_incompat;
+	__le32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	char s_volume_name[16];
+	char s_last_mounted[64];
+	__le32 s_algorithm_usage_bitmap;
+	__u8 s_prealloc_blocks;
+	__u8 s_prealloc_dir_blocks;
+	__le16 s_reserved_gdt_blocks;
+	__u8 s_journal_uuid[16];
+	__le32 s_journal_inum;
+	__le32 s_journal_dev;
+	__le32 s_last_orphan;
+	__le32 s_hash_seed[4];
+	__u8 s_def_hash_version;
+	__u8 s_jnl_backup_type;
+	__le16 s_desc_size;
+	__le32 s_default_mount_opts;
+	__le32 s_first_meta_bg;
+	__le32 s_mkfs_time;
+	__le32 s_jnl_blocks[17];
+	__le32 s_blocks_count_hi;
+	__le32 s_r_blocks_count_hi;
+	__le32 s_free_blocks_count_hi;
+	__le16 s_min_extra_isize;
+	__le16 s_want_extra_isize;
+	__le32 s_flags;
+	__le16 s_raid_stride;
+	__le16 s_mmp_update_interval;
+	__le64 s_mmp_block;
+	__le32 s_raid_stripe_width;
+	__u8 s_log_groups_per_flex;
+	__u8 s_checksum_type;
+	__u8 s_encryption_level;
+	__u8 s_reserved_pad;
+	__le64 s_kbytes_written;
+	__le32 s_snapshot_inum;
+	__le32 s_snapshot_id;
+	__le64 s_snapshot_r_blocks_count;
+	__le32 s_snapshot_list;
+	__le32 s_error_count;
+	__le32 s_first_error_time;
+	__le32 s_first_error_ino;
+	__le64 s_first_error_block;
+	__u8 s_first_error_func[32];
+	__le32 s_first_error_line;
+	__le32 s_last_error_time;
+	__le32 s_last_error_ino;
+	__le32 s_last_error_line;
+	__le64 s_last_error_block;
+	__u8 s_last_error_func[32];
+	__u8 s_mount_opts[64];
+	__le32 s_usr_quota_inum;
+	__le32 s_grp_quota_inum;
+	__le32 s_overhead_clusters;
+	__le32 s_backup_bgs[2];
+	__u8 s_encrypt_algos[4];
+	__u8 s_encrypt_pw_salt[16];
+	__le32 s_lpf_ino;
+	__le32 s_prj_quota_inum;
+	__le32 s_checksum_seed;
+	__u8 s_wtime_hi;
+	__u8 s_mtime_hi;
+	__u8 s_mkfs_time_hi;
+	__u8 s_lastcheck_hi;
+	__u8 s_first_error_time_hi;
+	__u8 s_last_error_time_hi;
+	__u8 s_first_error_errcode;
+	__u8 s_last_error_errcode;
+	__le16 s_encoding;
+	__le16 s_encoding_flags;
+	__le32 s_orphan_file_inum;
+	__le32 s_reserved[94];
+	__le32 s_checksum;
+};
+
+struct bgl_lock {
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct blockgroup_lock {
+	struct bgl_lock locks[128];
+};
+
+struct ext4_orphan_block {
+	atomic_t ob_free_entries;
+	struct buffer_head *ob_bh;
+};
+
+struct ext4_system_blocks {
+	struct rb_root root;
+	struct callback_head rcu;
+};
+
+struct ext4_locality_group {
+	struct mutex lg_mutex;
+	struct list_head lg_prealloc_list[10];
+	spinlock_t lg_prealloc_lock;
+};
+
+struct flex_groups {
+	atomic64_t free_clusters;
+	atomic_t free_inodes;
+	atomic_t used_dirs;
+};
+
+struct ext4_li_request {
+	struct super_block *lr_super;
+	enum ext4_li_mode lr_mode;
+	ext4_group_t lr_first_not_zeroed;
+	ext4_group_t lr_next_group;
+	struct list_head lr_request;
+	unsigned long lr_next_sched;
+	unsigned long lr_timeout;
+};
+
+struct ext4_fc_alloc_region {
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	int ino;
+	int len;
+};
+
+struct jbd2_journal_handle;
+
+typedef struct jbd2_journal_handle handle_t;
+
+struct jbd2_journal_handle {
+	union {
+		transaction_t *h_transaction;
+		journal_t *h_journal;
+	};
+	handle_t *h_rsv_handle;
+	int h_total_credits;
+	int h_revoke_credits;
+	int h_revoke_credits_requested;
+	int h_ref;
+	int h_err;
+	unsigned int h_sync: 1;
+	unsigned int h_jdata: 1;
+	unsigned int h_reserved: 1;
+	unsigned int h_aborted: 1;
+	unsigned int h_type: 8;
+	unsigned int h_line_no: 16;
+	unsigned long h_start_jiffies;
+	unsigned int h_requested_credits;
+	unsigned int saved_alloc_context;
+};
+
+struct ext4_allocation_request {
+	struct inode *inode;
+	unsigned int len;
+	ext4_lblk_t logical;
+	ext4_lblk_t lleft;
+	ext4_lblk_t lright;
+	ext4_fsblk_t goal;
+	ext4_fsblk_t pleft;
+	ext4_fsblk_t pright;
+	unsigned int flags;
+};
+
+struct ext4_system_zone {
+	struct rb_node node;
+	ext4_fsblk_t start_blk;
+	unsigned int count;
+	u32 ino;
+};
+
+struct ext4_map_blocks {
+	ext4_fsblk_t m_pblk;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+};
+
+typedef enum {
+	EXT4_IGET_NORMAL = 0,
+	EXT4_IGET_SPECIAL = 1,
+	EXT4_IGET_HANDLE = 2,
+	EXT4_IGET_BAD = 4,
+	EXT4_IGET_EA_INODE = 8,
+} ext4_iget_flags;
+
+enum {
+	EXT4_INODE_SECRM = 0,
+	EXT4_INODE_UNRM = 1,
+	EXT4_INODE_COMPR = 2,
+	EXT4_INODE_SYNC = 3,
+	EXT4_INODE_IMMUTABLE = 4,
+	EXT4_INODE_APPEND = 5,
+	EXT4_INODE_NODUMP = 6,
+	EXT4_INODE_NOATIME = 7,
+	EXT4_INODE_DIRTY = 8,
+	EXT4_INODE_COMPRBLK = 9,
+	EXT4_INODE_NOCOMPR = 10,
+	EXT4_INODE_ENCRYPT = 11,
+	EXT4_INODE_INDEX = 12,
+	EXT4_INODE_IMAGIC = 13,
+	EXT4_INODE_JOURNAL_DATA = 14,
+	EXT4_INODE_NOTAIL = 15,
+	EXT4_INODE_DIRSYNC = 16,
+	EXT4_INODE_TOPDIR = 17,
+	EXT4_INODE_HUGE_FILE = 18,
+	EXT4_INODE_EXTENTS = 19,
+	EXT4_INODE_VERITY = 20,
+	EXT4_INODE_EA_INODE = 21,
+	EXT4_INODE_DAX = 25,
+	EXT4_INODE_INLINE_DATA = 28,
+	EXT4_INODE_PROJINHERIT = 29,
+	EXT4_INODE_CASEFOLD = 30,
+	EXT4_INODE_RESERVED = 31,
+};
+
+struct fname {
+	__u32 hash;
+	__u32 minor_hash;
+	struct rb_node rb_hash;
+	struct fname *next;
+	__u32 inode;
+	__u8 name_len;
+	__u8 file_type;
+	char name[0];
+};
+
+struct ext4_dir_entry_2 {
+	__le32 inode;
+	__le16 rec_len;
+	__u8 name_len;
+	__u8 file_type;
+	char name[255];
+};
+
+struct ext4_dir_entry_hash {
+	__le32 hash;
+	__le32 minor_hash;
+};
+
+struct dir_private_info {
+	struct rb_root root;
+	struct rb_node *curr_node;
+	struct fname *extra_fname;
+	loff_t last_pos;
+	__u32 curr_hash;
+	__u32 curr_minor_hash;
+	__u32 next_hash;
+};
+
+enum ext4_journal_trigger_type {
+	EXT4_JTR_ORPHAN_FILE = 0,
+	EXT4_JTR_NONE = 1,
+};
+
+enum {
+	EXT4_STATE_NEW = 0,
+	EXT4_STATE_XATTR = 1,
+	EXT4_STATE_NO_EXPAND = 2,
+	EXT4_STATE_DA_ALLOC_CLOSE = 3,
+	EXT4_STATE_EXT_MIGRATE = 4,
+	EXT4_STATE_NEWENTRY = 5,
+	EXT4_STATE_MAY_INLINE_DATA = 6,
+	EXT4_STATE_EXT_PRECACHED = 7,
+	EXT4_STATE_LUSTRE_EA_INODE = 8,
+	EXT4_STATE_VERITY_IN_PROGRESS = 9,
+	EXT4_STATE_FC_COMMITTING = 10,
+	EXT4_STATE_ORPHAN_FILE = 11,
+};
+
+struct partial_cluster {
+	ext4_fsblk_t pclu;
+	ext4_lblk_t lblk;
+	enum {
+		initial = 0,
+		tofree = 1,
+		nofree = 2,
+	} state;
+};
+
+enum {
+	ES_WRITTEN_B = 0,
+	ES_UNWRITTEN_B = 1,
+	ES_DELAYED_B = 2,
+	ES_HOLE_B = 3,
+	ES_REFERENCED_B = 4,
+	ES_FLAGS = 5,
+};
+
+enum {
+	EXT4_FC_REASON_XATTR = 0,
+	EXT4_FC_REASON_CROSS_RENAME = 1,
+	EXT4_FC_REASON_JOURNAL_FLAG_CHANGE = 2,
+	EXT4_FC_REASON_NOMEM = 3,
+	EXT4_FC_REASON_SWAP_BOOT = 4,
+	EXT4_FC_REASON_RESIZE = 5,
+	EXT4_FC_REASON_RENAME_DIR = 6,
+	EXT4_FC_REASON_FALLOC_RANGE = 7,
+	EXT4_FC_REASON_INODE_JOURNAL_DATA = 8,
+	EXT4_FC_REASON_ENCRYPTED_FILENAME = 9,
+	EXT4_FC_REASON_MAX = 10,
+};
+
+enum SHIFT_DIRECTION {
+	SHIFT_LEFT = 0,
+	SHIFT_RIGHT = 1,
+};
+
+struct ext4_extent_idx {
+	__le32 ei_block;
+	__le32 ei_leaf_lo;
+	__le16 ei_leaf_hi;
+	__u16 ei_unused;
+};
+
+struct ext4_extent {
+	__le32 ee_block;
+	__le16 ee_len;
+	__le16 ee_start_hi;
+	__le32 ee_start_lo;
+};
+
+struct ext4_io_end_vec {
+	struct list_head list;
+	loff_t offset;
+	ssize_t size;
+};
+
+struct ext4_extent_tail {
+	__le32 et_checksum;
+};
+
+struct ext4_extent_header {
+	__le16 eh_magic;
+	__le16 eh_entries;
+	__le16 eh_max;
+	__le16 eh_depth;
+	__le32 eh_generation;
+};
+
+struct ext4_ext_path {
+	ext4_fsblk_t p_block;
+	__u16 p_depth;
+	__u16 p_maxdepth;
+	struct ext4_extent *p_ext;
+	struct ext4_extent_idx *p_idx;
+	struct ext4_extent_header *p_hdr;
+	struct buffer_head *p_bh;
+};
+
+struct ext4_iloc {
+	struct buffer_head *bh;
+	unsigned long offset;
+	ext4_group_t block_group;
+};
+
+struct ext4_io_end {
+	struct list_head list;
+	handle_t *handle;
+	struct inode *inode;
+	struct bio *bio;
+	unsigned int flag;
+	refcount_t count;
+	struct list_head list_vec;
+};
+
+typedef struct ext4_io_end ext4_io_end_t;
+
+struct pending_reservation {
+	struct rb_node rb_node;
+	ext4_lblk_t lclu;
+};
+
+struct rsvd_count {
+	int ndelonly;
+	bool first_do_lblk_found;
+	ext4_lblk_t first_do_lblk;
+	ext4_lblk_t last_do_lblk;
+	struct extent_status *left_es;
+	bool partial;
+	ext4_lblk_t lclu;
+};
+
+enum {
+	EXT4_MF_MNTDIR_SAMPLED = 0,
+	EXT4_MF_FC_INELIGIBLE = 1,
+};
+
+struct ext4_fsmap {
+	struct list_head fmr_list;
+	dev_t fmr_device;
+	uint32_t fmr_flags;
+	uint64_t fmr_physical;
+	uint64_t fmr_owner;
+	uint64_t fmr_length;
+};
+
+typedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);
+
+typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
+
+struct ext4_fsmap_head;
+
+struct ext4_getfsmap_info {
+	struct ext4_fsmap_head *gfi_head;
+	ext4_fsmap_format_t gfi_formatter;
+	void *gfi_format_arg;
+	ext4_fsblk_t gfi_next_fsblk;
+	u32 gfi_dev;
+	ext4_group_t gfi_agno;
+	struct ext4_fsmap gfi_low;
+	struct ext4_fsmap gfi_high;
+	struct ext4_fsmap gfi_lastfree;
+	struct list_head gfi_meta_list;
+	bool gfi_last;
+};
+
+struct ext4_fsmap_head {
+	uint32_t fmh_iflags;
+	uint32_t fmh_oflags;
+	unsigned int fmh_count;
+	unsigned int fmh_entries;
+	struct ext4_fsmap fmh_keys[2];
+};
+
+struct fsmap {
+	__u32 fmr_device;
+	__u32 fmr_flags;
+	__u64 fmr_physical;
+	__u64 fmr_owner;
+	__u64 fmr_offset;
+	__u64 fmr_length;
+	__u64 fmr_reserved[3];
+};
+
+struct ext4_getfsmap_dev {
+	int (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);
+	u32 gfd_dev;
+};
+
+struct dx_hash_info {
+	u32 hash;
+	u32 minor_hash;
+	int hash_version;
+	u32 *seed;
+};
+
+struct ext4_inode {
+	__le16 i_mode;
+	__le16 i_uid;
+	__le32 i_size_lo;
+	__le32 i_atime;
+	__le32 i_ctime;
+	__le32 i_mtime;
+	__le32 i_dtime;
+	__le16 i_gid;
+	__le16 i_links_count;
+	__le32 i_blocks_lo;
+	__le32 i_flags;
+	union {
+		struct {
+			__le32 l_i_version;
+		} linux1;
+		struct {
+			__u32 h_i_translator;
+		} hurd1;
+		struct {
+			__u32 m_i_reserved1;
+		} masix1;
+	} osd1;
+	__le32 i_block[15];
+	__le32 i_generation;
+	__le32 i_file_acl_lo;
+	__le32 i_size_high;
+	__le32 i_obso_faddr;
+	union {
+		struct {
+			__le16 l_i_blocks_high;
+			__le16 l_i_file_acl_high;
+			__le16 l_i_uid_high;
+			__le16 l_i_gid_high;
+			__le16 l_i_checksum_lo;
+			__le16 l_i_reserved;
+		} linux2;
+		struct {
+			__le16 h_i_reserved1;
+			__u16 h_i_mode_high;
+			__u16 h_i_uid_high;
+			__u16 h_i_gid_high;
+			__u32 h_i_author;
+		} hurd2;
+		struct {
+			__le16 h_i_reserved1;
+			__le16 m_i_file_acl_high;
+			__u32 m_i_reserved2[2];
+		} masix2;
+	} osd2;
+	__le16 i_extra_isize;
+	__le16 i_checksum_hi;
+	__le32 i_ctime_extra;
+	__le32 i_mtime_extra;
+	__le32 i_atime_extra;
+	__le32 i_crtime;
+	__le32 i_crtime_extra;
+	__le32 i_version_hi;
+	__le32 i_projid;
+};
+
+typedef unsigned int __kernel_mode_t;
+
+typedef __kernel_mode_t mode_t;
+
+struct orlov_stats {
+	__u64 free_clusters;
+	__u32 free_inodes;
+	__u32 used_dirs;
+};
+
+typedef struct {
+	__le32 *p;
+	__le32 key;
+	struct buffer_head *bh;
+} Indirect;
+
+struct ext4_xattr_ibody_header {
+	__le32 h_magic;
+};
+
+struct ext4_xattr_entry {
+	__u8 e_name_len;
+	__u8 e_name_index;
+	__le16 e_value_offs;
+	__le32 e_value_inum;
+	__le32 e_value_size;
+	__le32 e_hash;
+	char e_name[0];
+};
+
+struct ext4_xattr_info {
+	const char *name;
+	const void *value;
+	size_t value_len;
+	int name_index;
+	int in_inode;
+};
+
+struct ext4_xattr_search {
+	struct ext4_xattr_entry *first;
+	void *base;
+	void *end;
+	struct ext4_xattr_entry *here;
+	int not_found;
+};
+
+struct ext4_xattr_ibody_find {
+	struct ext4_xattr_search s;
+	struct ext4_iloc iloc;
+};
+
+struct ext4_filename {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	struct dx_hash_info hinfo;
+	struct fscrypt_str crypto_buf;
+	struct fscrypt_str cf_name;
+};
+
+typedef unsigned short __kernel_uid16_t;
+
+typedef __kernel_uid16_t uid16_t;
+
+typedef unsigned short __kernel_gid16_t;
+
+typedef __kernel_gid16_t gid16_t;
+
+struct ext4_xattr_inode_array {
+	unsigned int count;
+	struct inode *inodes[0];
+};
+
+struct ext4_io_submit {
+	struct writeback_control *io_wbc;
+	struct bio *io_bio;
+	ext4_io_end_t *io_end;
+	sector_t io_next_block;
+};
+
+struct mpage_da_data {
+	struct inode *inode;
+	struct writeback_control *wbc;
+	unsigned int can_map: 1;
+	unsigned long first_page;
+	unsigned long next_page;
+	unsigned long last_page;
+	struct ext4_map_blocks map;
+	struct ext4_io_submit io_submit;
+	unsigned int do_map: 1;
+	unsigned int scanned_until_end: 1;
+	unsigned int journalled_more_data: 1;
+};
+
+struct move_extent {
+	__u32 reserved;
+	__u32 donor_fd;
+	__u64 orig_start;
+	__u64 donor_start;
+	__u64 len;
+	__u64 moved_len;
+};
+
+struct ext4_new_group_input {
+	__u32 group;
+	__u64 block_bitmap;
+	__u64 inode_bitmap;
+	__u64 inode_table;
+	__u32 blocks_count;
+	__u16 reserved_blocks;
+	__u16 unused;
+};
+
+struct fstrim_range {
+	__u64 start;
+	__u64 len;
+	__u64 minlen;
+};
+
+struct ext4_new_group_data {
+	__u32 group;
+	__u64 block_bitmap;
+	__u64 inode_bitmap;
+	__u64 inode_table;
+	__u32 blocks_count;
+	__u16 reserved_blocks;
+	__u16 mdata_blocks;
+	__u32 free_clusters_count;
+};
+
+struct fsmap_head {
+	__u32 fmh_iflags;
+	__u32 fmh_oflags;
+	__u32 fmh_count;
+	__u32 fmh_entries;
+	__u64 fmh_reserved[6];
+	struct fsmap fmh_keys[2];
+	struct fsmap fmh_recs[0];
+};
+
+struct getfsmap_info {
+	struct super_block *gi_sb;
+	struct fsmap_head __attribute__((btf_type_tag("user"))) *gi_data;
+	unsigned int gi_idx;
+	__u32 gi_last_flags;
+};
+
+struct fsuuid {
+	__u32 fsu_len;
+	__u32 fsu_flags;
+	__u8 fsu_uuid[0];
+};
+
+typedef void ext4_update_sb_callback(struct ext4_super_block *, const void *);
+
+struct compat_ext4_new_group_input {
+	u32 group;
+	compat_u64 block_bitmap;
+	compat_u64 inode_bitmap;
+	compat_u64 inode_table;
+	u32 blocks_count;
+	u16 reserved_blocks;
+	u16 unused;
+};
+
+struct sg {
+	struct ext4_group_info info;
+	ext4_grpblk_t counters[18];
+};
+
+enum criteria {
+	CR_POWER2_ALIGNED = 0,
+	CR_GOAL_LEN_FAST = 1,
+	CR_BEST_AVAIL_LEN = 2,
+	CR_GOAL_LEN_SLOW = 3,
+	CR_ANY_FREE = 4,
+	EXT4_MB_NUM_CRS = 5,
+};
+
+enum {
+	MB_INODE_PA = 0,
+	MB_GROUP_PA = 1,
+};
+
+enum blk_default_limits {
+	BLK_MAX_SEGMENTS = 128,
+	BLK_SAFE_MAX_SECTORS = 255,
+	BLK_MAX_SEGMENT_SIZE = 65536,
+	BLK_SEG_BOUNDARY_MASK = 4294967295,
+};
+
+struct ext4_free_data {
+	struct list_head efd_list;
+	struct rb_node efd_node;
+	ext4_group_t efd_group;
+	ext4_grpblk_t efd_start_cluster;
+	ext4_grpblk_t efd_count;
+	tid_t efd_tid;
+};
+
+struct ext4_prealloc_space {
+	union {
+		struct rb_node inode_node;
+		struct list_head lg_list;
+	} pa_node;
+	struct list_head pa_group_list;
+	union {
+		struct list_head pa_tmp_list;
+		struct callback_head pa_rcu;
+	} u;
+	spinlock_t pa_lock;
+	atomic_t pa_count;
+	unsigned int pa_deleted;
+	ext4_fsblk_t pa_pstart;
+	ext4_lblk_t pa_lstart;
+	ext4_grpblk_t pa_len;
+	ext4_grpblk_t pa_free;
+	unsigned short pa_type;
+	union {
+		rwlock_t *inode_lock;
+		spinlock_t *lg_lock;
+	} pa_node_lock;
+	struct inode *pa_inode;
+};
+
+struct ext4_buddy {
+	struct page *bd_buddy_page;
+	void *bd_buddy;
+	struct page *bd_bitmap_page;
+	void *bd_bitmap;
+	struct ext4_group_info *bd_info;
+	struct super_block *bd_sb;
+	__u16 bd_blkbits;
+	ext4_group_t bd_group;
+};
+
+struct ext4_free_extent {
+	ext4_lblk_t fe_logical;
+	ext4_grpblk_t fe_start;
+	ext4_group_t fe_group;
+	ext4_grpblk_t fe_len;
+};
+
+struct ext4_allocation_context {
+	struct inode *ac_inode;
+	struct super_block *ac_sb;
+	struct ext4_free_extent ac_o_ex;
+	struct ext4_free_extent ac_g_ex;
+	struct ext4_free_extent ac_b_ex;
+	struct ext4_free_extent ac_f_ex;
+	ext4_grpblk_t ac_orig_goal_len;
+	__u32 ac_groups_considered;
+	__u32 ac_flags;
+	__u16 ac_groups_scanned;
+	__u16 ac_groups_linear_remaining;
+	__u16 ac_found;
+	__u16 ac_cX_found[5];
+	__u16 ac_tail;
+	__u16 ac_buddy;
+	__u8 ac_status;
+	__u8 ac_criteria;
+	__u8 ac_2order;
+	__u8 ac_op;
+	struct page *ac_bitmap_page;
+	struct page *ac_buddy_page;
+	struct ext4_prealloc_space *ac_pa;
+	struct ext4_locality_group *ac_lg;
+};
+
+struct migrate_struct {
+	ext4_lblk_t first_block;
+	ext4_lblk_t last_block;
+	ext4_lblk_t curr_block;
+	ext4_fsblk_t first_pblock;
+	ext4_fsblk_t last_pblock;
+};
+
+struct mmp_struct {
+	__le32 mmp_magic;
+	__le32 mmp_seq;
+	__le64 mmp_time;
+	char mmp_nodename[64];
+	char mmp_bdevname[32];
+	__le16 mmp_check_interval;
+	__le16 mmp_pad1;
+	__le32 mmp_pad2[226];
+	__le32 mmp_checksum;
+};
+
+struct ext4_dir_entry_tail {
+	__le32 det_reserved_zero1;
+	__le16 det_rec_len;
+	__u8 det_reserved_zero2;
+	__u8 det_reserved_ft;
+	__le32 det_checksum;
+};
+
+struct dx_entry;
+
+struct dx_frame {
+	struct buffer_head *bh;
+	struct dx_entry *entries;
+	struct dx_entry *at;
+};
+
+struct dx_entry {
+	__le32 hash;
+	__le32 block;
+};
+
+struct fake_dirent {
+	__le32 inode;
+	__le16 rec_len;
+	u8 name_len;
+	u8 file_type;
+};
+
+struct dx_root_info {
+	__le32 reserved_zero;
+	u8 hash_version;
+	u8 info_length;
+	u8 indirect_levels;
+	u8 unused_flags;
+};
+
+struct dx_root {
+	struct fake_dirent dot;
+	char dot_name[4];
+	struct fake_dirent dotdot;
+	char dotdot_name[4];
+	struct dx_root_info info;
+	struct dx_entry entries[0];
+};
+
+struct dx_node {
+	struct fake_dirent fake;
+	struct dx_entry entries[0];
+};
+
+struct dx_countlimit {
+	__le16 limit;
+	__le16 count;
+};
+
+struct ext4_dir_entry {
+	__le32 inode;
+	__le16 rec_len;
+	__le16 name_len;
+	char name[255];
+};
+
+struct dx_tail {
+	u32 dt_reserved;
+	__le32 dt_checksum;
+};
+
+struct dx_map_entry {
+	u32 hash;
+	u16 offs;
+	u16 size;
+};
+
+struct ext4_renament {
+	struct inode *dir;
+	struct dentry *dentry;
+	struct inode *inode;
+	bool is_dir;
+	int dir_nlink_delta;
+	struct buffer_head *bh;
+	struct ext4_dir_entry_2 *de;
+	int inlined;
+	struct buffer_head *dir_bh;
+	struct ext4_dir_entry_2 *parent_de;
+	int dir_inlined;
+};
+
+typedef enum {
+	EITHER = 0,
+	INDEX = 1,
+	DIRENT = 2,
+	DIRENT_HTREE = 3,
+} dirblock_type_t;
+
+enum bio_post_read_step {
+	STEP_INITIAL = 0,
+	STEP_DECRYPT = 1,
+	STEP_VERITY = 2,
+	STEP_MAX = 3,
+};
+
+struct bio_post_read_ctx {
+	struct bio *bio;
+	struct work_struct work;
+	unsigned int cur_step;
+	unsigned int enabled_steps;
+};
+
+enum {
+	BLOCK_BITMAP = 0,
+	INODE_BITMAP = 1,
+	INODE_TABLE = 2,
+	GROUP_TABLE_COUNT = 3,
+};
+
+struct ext4_rcu_ptr {
+	struct callback_head rcu;
+	void *ptr;
+};
+
+struct ext4_new_flex_group_data {
+	struct ext4_new_group_data *groups;
+	__u16 *bg_flags;
+	ext4_group_t resize_bg;
+	ext4_group_t count;
+};
+
+typedef void (*btf_trace_ext4_other_inode_update_time)(void *, struct inode *, ino_t);
+
+typedef void (*btf_trace_ext4_free_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_request_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_allocate_inode)(void *, struct inode *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_evict_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_drop_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_nfs_commit_metadata)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_mark_inode_dirty)(void *, struct inode *, unsigned long);
+
+typedef void (*btf_trace_ext4_begin_ordered_truncate)(void *, struct inode *, loff_t);
+
+typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_ext4_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_journalled_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_da_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_writepages)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_ext4_da_write_pages)(void *, struct inode *, unsigned long, struct writeback_control *);
+
+typedef void (*btf_trace_ext4_da_write_pages_extent)(void *, struct inode *, struct ext4_map_blocks *);
+
+typedef void (*btf_trace_ext4_writepages_result)(void *, struct inode *, struct writeback_control *, int, int);
+
+typedef void (*btf_trace_ext4_read_folio)(void *, struct inode *, struct folio *);
+
+typedef void (*btf_trace_ext4_release_folio)(void *, struct inode *, struct folio *);
+
+typedef void (*btf_trace_ext4_invalidate_folio)(void *, struct folio *, size_t, size_t);
+
+typedef void (*btf_trace_ext4_journalled_invalidate_folio)(void *, struct folio *, size_t, size_t);
+
+typedef void (*btf_trace_ext4_discard_blocks)(void *, struct super_block *, unsigned long long, unsigned long long);
+
+typedef void (*btf_trace_ext4_mb_new_inode_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);
+
+typedef void (*btf_trace_ext4_mb_new_group_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);
+
+typedef void (*btf_trace_ext4_mb_release_inode_pa)(void *, struct ext4_prealloc_space *, unsigned long long, unsigned int);
+
+typedef void (*btf_trace_ext4_mb_release_group_pa)(void *, struct super_block *, struct ext4_prealloc_space *);
+
+typedef void (*btf_trace_ext4_discard_preallocations)(void *, struct inode *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_mb_discard_preallocations)(void *, struct super_block *, int);
+
+typedef void (*btf_trace_ext4_request_blocks)(void *, struct ext4_allocation_request *);
+
+typedef void (*btf_trace_ext4_allocate_blocks)(void *, struct ext4_allocation_request *, unsigned long long);
+
+typedef void (*btf_trace_ext4_free_blocks)(void *, struct inode *, __u64, unsigned long, int);
+
+typedef void (*btf_trace_ext4_sync_file_enter)(void *, struct file *, int);
+
+typedef void (*btf_trace_ext4_sync_file_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_sync_fs)(void *, struct super_block *, int);
+
+typedef void (*btf_trace_ext4_alloc_da_blocks)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_mballoc_alloc)(void *, struct ext4_allocation_context *);
+
+typedef void (*btf_trace_ext4_mballoc_prealloc)(void *, struct ext4_allocation_context *);
+
+typedef void (*btf_trace_ext4_mballoc_discard)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_mballoc_free)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_forget)(void *, struct inode *, int, __u64);
+
+typedef void (*btf_trace_ext4_da_update_reserve_space)(void *, struct inode *, int, int);
+
+typedef void (*btf_trace_ext4_da_reserve_space)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_da_release_space)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_mb_bitmap_load)(void *, struct super_block *, unsigned long);
+
+typedef void (*btf_trace_ext4_mb_buddy_bitmap_load)(void *, struct super_block *, unsigned long);
+
+typedef void (*btf_trace_ext4_load_inode_bitmap)(void *, struct super_block *, unsigned long);
+
+typedef void (*btf_trace_ext4_read_block_bitmap_load)(void *, struct super_block *, unsigned long, bool);
+
+typedef void (*btf_trace_ext4_fallocate_enter)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_ext4_punch_hole)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_ext4_zero_range)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_ext4_fallocate_exit)(void *, struct inode *, loff_t, unsigned int, int);
+
+typedef void (*btf_trace_ext4_unlink_enter)(void *, struct inode *, struct dentry *);
+
+typedef void (*btf_trace_ext4_unlink_exit)(void *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_truncate_enter)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_truncate_exit)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_ext_convert_to_initialized_enter)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *);
+
+typedef void (*btf_trace_ext4_ext_convert_to_initialized_fastpath)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *, struct ext4_extent *);
+
+typedef void (*btf_trace_ext4_ext_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_ind_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_ext_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);
+
+typedef void (*btf_trace_ext4_ind_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);
+
+typedef void (*btf_trace_ext4_ext_load_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t);
+
+typedef void (*btf_trace_ext4_load_inode)(void *, struct super_block *, unsigned long);
+
+typedef void (*btf_trace_ext4_journal_start_sb)(void *, struct super_block *, int, int, int, int, unsigned long);
+
+typedef void (*btf_trace_ext4_journal_start_inode)(void *, struct inode *, int, int, int, int, unsigned long);
+
+typedef void (*btf_trace_ext4_journal_start_reserved)(void *, struct super_block *, int, unsigned long);
+
+typedef void (*btf_trace_ext4_trim_extent)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_trim_all_free)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_ext_handle_unwritten_extents)(void *, struct inode *, struct ext4_map_blocks *, int, unsigned int, ext4_fsblk_t);
+
+typedef void (*btf_trace_ext4_get_implied_cluster_alloc_exit)(void *, struct super_block *, struct ext4_map_blocks *, int);
+
+typedef void (*btf_trace_ext4_ext_show_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t, unsigned short);
+
+typedef void (*btf_trace_ext4_remove_blocks)(void *, struct inode *, struct ext4_extent *, ext4_lblk_t, ext4_fsblk_t, struct partial_cluster *);
+
+typedef void (*btf_trace_ext4_ext_rm_leaf)(void *, struct inode *, ext4_lblk_t, struct ext4_extent *, struct partial_cluster *);
+
+typedef void (*btf_trace_ext4_ext_rm_idx)(void *, struct inode *, ext4_fsblk_t);
+
+typedef void (*btf_trace_ext4_ext_remove_space)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int);
+
+typedef void (*btf_trace_ext4_ext_remove_space_done)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, struct partial_cluster *, __le16);
+
+typedef void (*btf_trace_ext4_es_insert_extent)(void *, struct inode *, struct extent_status *);
+
+typedef void (*btf_trace_ext4_es_cache_extent)(void *, struct inode *, struct extent_status *);
+
+typedef void (*btf_trace_ext4_es_remove_extent)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t);
+
+typedef void (*btf_trace_ext4_es_find_extent_range_enter)(void *, struct inode *, ext4_lblk_t);
+
+typedef void (*btf_trace_ext4_es_find_extent_range_exit)(void *, struct inode *, struct extent_status *);
+
+typedef void (*btf_trace_ext4_es_lookup_extent_enter)(void *, struct inode *, ext4_lblk_t);
+
+typedef void (*btf_trace_ext4_es_lookup_extent_exit)(void *, struct inode *, struct extent_status *, int);
+
+typedef void (*btf_trace_ext4_es_shrink_count)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_es_shrink_scan_enter)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_es_shrink_scan_exit)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_collapse_range)(void *, struct inode *, loff_t, loff_t);
+
+typedef void (*btf_trace_ext4_insert_range)(void *, struct inode *, loff_t, loff_t);
+
+typedef void (*btf_trace_ext4_es_shrink)(void *, struct super_block *, int, u64, int, int);
+
+typedef void (*btf_trace_ext4_es_insert_delayed_block)(void *, struct inode *, struct extent_status *, bool);
+
+typedef void (*btf_trace_ext4_fsmap_low_key)(void *, struct super_block *, u32, u32, u64, u64, u64);
+
+typedef void (*btf_trace_ext4_fsmap_high_key)(void *, struct super_block *, u32, u32, u64, u64, u64);
+
+typedef void (*btf_trace_ext4_fsmap_mapping)(void *, struct super_block *, u32, u32, u64, u64, u64);
+
+typedef void (*btf_trace_ext4_getfsmap_low_key)(void *, struct super_block *, struct ext4_fsmap *);
+
+typedef void (*btf_trace_ext4_getfsmap_high_key)(void *, struct super_block *, struct ext4_fsmap *);
+
+typedef void (*btf_trace_ext4_getfsmap_mapping)(void *, struct super_block *, struct ext4_fsmap *);
+
+typedef void (*btf_trace_ext4_shutdown)(void *, struct super_block *, unsigned long);
+
+typedef void (*btf_trace_ext4_error)(void *, struct super_block *, const char *, unsigned int);
+
+typedef void (*btf_trace_ext4_prefetch_bitmaps)(void *, struct super_block *, ext4_group_t, ext4_group_t, unsigned int);
+
+typedef void (*btf_trace_ext4_lazy_itable_init)(void *, struct super_block *, ext4_group_t);
+
+typedef void (*btf_trace_ext4_fc_replay_scan)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_fc_replay)(void *, struct super_block *, int, int, int, int);
+
+typedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *, tid_t);
+
+typedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int, tid_t);
+
+typedef void (*btf_trace_ext4_fc_stats)(void *, struct super_block *);
+
+typedef void (*btf_trace_ext4_fc_track_create)(void *, handle_t *, struct inode *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_fc_track_link)(void *, handle_t *, struct inode *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_fc_track_unlink)(void *, handle_t *, struct inode *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_fc_track_inode)(void *, handle_t *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_fc_track_range)(void *, handle_t *, struct inode *, long, long, int);
+
+typedef void (*btf_trace_ext4_fc_cleanup)(void *, journal_t *, int, tid_t);
+
+typedef void (*btf_trace_ext4_update_sb)(void *, struct super_block *, ext4_fsblk_t, unsigned int);
+
+struct ext4_lazy_init {
+	unsigned long li_state;
+	struct list_head li_request_list;
+	struct mutex li_list_mtx;
+};
+
+struct ext4_err_translation {
+	int code;
+	int errno;
+};
+
+struct mount_opts {
+	int token;
+	int mount_opt;
+	int flags;
+};
+
+struct ext4_sb_encodings {
+	__u16 magic;
+	char *name;
+	unsigned int version;
+};
+
+enum stat_group {
+	STAT_READ = 0,
+	STAT_WRITE = 1,
+	STAT_DISCARD = 2,
+	STAT_FLUSH = 3,
+	NR_STAT_GROUPS = 4,
+};
+
+enum {
+	Opt_bsd_df = 0,
+	Opt_minix_df = 1,
+	Opt_grpid = 2,
+	Opt_nogrpid = 3,
+	Opt_resgid = 4,
+	Opt_resuid = 5,
+	Opt_sb = 6,
+	Opt_nouid32 = 7,
+	Opt_debug = 8,
+	Opt_removed = 9,
+	Opt_user_xattr = 10,
+	Opt_acl = 11,
+	Opt_auto_da_alloc = 12,
+	Opt_noauto_da_alloc = 13,
+	Opt_noload = 14,
+	Opt_commit = 15,
+	Opt_min_batch_time = 16,
+	Opt_max_batch_time = 17,
+	Opt_journal_dev = 18,
+	Opt_journal_path = 19,
+	Opt_journal_checksum = 20,
+	Opt_journal_async_commit = 21,
+	Opt_abort = 22,
+	Opt_data_journal = 23,
+	Opt_data_ordered = 24,
+	Opt_data_writeback = 25,
+	Opt_data_err_abort = 26,
+	Opt_data_err_ignore = 27,
+	Opt_test_dummy_encryption = 28,
+	Opt_inlinecrypt = 29,
+	Opt_usrjquota = 30,
+	Opt_grpjquota = 31,
+	Opt_quota___2 = 32,
+	Opt_noquota = 33,
+	Opt_barrier = 34,
+	Opt_nobarrier = 35,
+	Opt_err___2 = 36,
+	Opt_usrquota___2 = 37,
+	Opt_grpquota___2 = 38,
+	Opt_prjquota = 39,
+	Opt_dax = 40,
+	Opt_dax_always = 41,
+	Opt_dax_inode = 42,
+	Opt_dax_never = 43,
+	Opt_stripe = 44,
+	Opt_delalloc = 45,
+	Opt_nodelalloc = 46,
+	Opt_warn_on_error = 47,
+	Opt_nowarn_on_error = 48,
+	Opt_mblk_io_submit = 49,
+	Opt_debug_want_extra_isize = 50,
+	Opt_nomblk_io_submit = 51,
+	Opt_block_validity = 52,
+	Opt_noblock_validity = 53,
+	Opt_inode_readahead_blks = 54,
+	Opt_journal_ioprio = 55,
+	Opt_dioread_nolock = 56,
+	Opt_dioread_lock = 57,
+	Opt_discard = 58,
+	Opt_nodiscard = 59,
+	Opt_init_itable = 60,
+	Opt_noinit_itable = 61,
+	Opt_max_dir_size_kb = 62,
+	Opt_nojournal_checksum = 63,
+	Opt_nombcache = 64,
+	Opt_no_prefetch_block_bitmaps = 65,
+	Opt_mb_optimize_scan = 66,
+	Opt_errors = 67,
+	Opt_data = 68,
+	Opt_data_err = 69,
+	Opt_jqfmt = 70,
+	Opt_dax_type = 71,
+};
+
+enum {
+	IOPRIO_CLASS_NONE = 0,
+	IOPRIO_CLASS_RT = 1,
+	IOPRIO_CLASS_BE = 2,
+	IOPRIO_CLASS_IDLE = 3,
+	IOPRIO_CLASS_INVALID = 7,
+};
+
+enum {
+	IOPRIO_HINT_NONE = 0,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_1 = 1,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_2 = 2,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_3 = 3,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_4 = 4,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_5 = 5,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_6 = 6,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_7 = 7,
+};
+
+enum {
+	I_DATA_SEM_NORMAL = 0,
+	I_DATA_SEM_OTHER = 1,
+	I_DATA_SEM_QUOTA = 2,
+	I_DATA_SEM_EA = 3,
+};
+
+struct trace_event_raw_ext4_other_inode_update_time {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t orig_ino;
+	uid_t uid;
+	gid_t gid;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_free_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	uid_t uid;
+	gid_t gid;
+	__u64 blocks;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_request_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t dir;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_allocate_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t dir;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_evict_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int nlink;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_drop_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int drop;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_nfs_commit_metadata {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mark_inode_dirty {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long ip;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_begin_ordered_truncate {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t new_size;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__write_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__write_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	unsigned int copied;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_writepages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long nr_to_write;
+	long pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	unsigned long writeback_index;
+	int sync_mode;
+	char for_kupdate;
+	char range_cyclic;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_write_pages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long first_page;
+	long nr_to_write;
+	int sync_mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_write_pages_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 lblk;
+	__u32 len;
+	__u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_writepages_result {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int ret;
+	int pages_written;
+	long pages_skipped;
+	unsigned long writeback_index;
+	int sync_mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__folio_op {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long index;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_invalidate_folio_op {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long index;
+	size_t offset;
+	size_t length;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_discard_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	__u64 blk;
+	__u64 count;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__mb_new_pa {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 pa_pstart;
+	__u64 pa_lstart;
+	__u32 pa_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mb_release_inode_pa {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	__u32 count;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mb_release_group_pa {
+	struct trace_entry ent;
+	dev_t dev;
+	__u64 pa_pstart;
+	__u32 pa_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_discard_preallocations {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int len;
+	unsigned int needed;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mb_discard_preallocations {
+	struct trace_entry ent;
+	dev_t dev;
+	int needed;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_request_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int len;
+	__u32 logical;
+	__u32 lleft;
+	__u32 lright;
+	__u64 goal;
+	__u64 pleft;
+	__u64 pright;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_allocate_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	unsigned int len;
+	__u32 logical;
+	__u32 lleft;
+	__u32 lright;
+	__u64 goal;
+	__u64 pleft;
+	__u64 pright;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_free_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	unsigned long count;
+	int flags;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_sync_file_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t parent;
+	int datasync;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_sync_file_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_sync_fs {
+	struct trace_entry ent;
+	dev_t dev;
+	int wait;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_alloc_da_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int data_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mballoc_alloc {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u32 orig_logical;
+	int orig_start;
+	__u32 orig_group;
+	int orig_len;
+	__u32 goal_logical;
+	int goal_start;
+	__u32 goal_group;
+	int goal_len;
+	__u32 result_logical;
+	int result_start;
+	__u32 result_group;
+	int result_len;
+	__u16 found;
+	__u16 groups;
+	__u16 buddy;
+	__u16 flags;
+	__u16 tail;
+	__u8 cr;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mballoc_prealloc {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u32 orig_logical;
+	int orig_start;
+	__u32 orig_group;
+	int orig_len;
+	__u32 result_logical;
+	int result_start;
+	__u32 result_group;
+	int result_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__mballoc {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int result_start;
+	__u32 result_group;
+	int result_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_forget {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	int is_metadata;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_update_reserve_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 i_blocks;
+	int used_blocks;
+	int reserved_data_blocks;
+	int quota_claim;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_reserve_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 i_blocks;
+	int reserved_data_blocks;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_release_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 i_blocks;
+	int freed_blocks;
+	int reserved_data_blocks;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__bitmap_load {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_read_block_bitmap_load {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	bool prefetch;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__fallocate_mode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	loff_t len;
+	int mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fallocate_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int blocks;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_unlink_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t parent;
+	loff_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_unlink_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__truncate {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_convert_to_initialized_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	ext4_lblk_t u_lblk;
+	unsigned int u_len;
+	ext4_fsblk_t u_pblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_convert_to_initialized_fastpath {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	ext4_lblk_t u_lblk;
+	unsigned int u_len;
+	ext4_fsblk_t u_pblk;
+	ext4_lblk_t i_lblk;
+	unsigned int i_len;
+	ext4_fsblk_t i_pblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__map_blocks_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	unsigned int len;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__map_blocks_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int flags;
+	ext4_fsblk_t pblk;
+	ext4_lblk_t lblk;
+	unsigned int len;
+	unsigned int mflags;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_load_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_fsblk_t pblk;
+	ext4_lblk_t lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_load_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_journal_start_sb {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long ip;
+	int blocks;
+	int rsv_blocks;
+	int revoke_creds;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_journal_start_inode {
+	struct trace_entry ent;
+	unsigned long ino;
+	dev_t dev;
+	unsigned long ip;
+	int blocks;
+	int rsv_blocks;
+	int revoke_creds;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_journal_start_reserved {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long ip;
+	int blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__trim {
+	struct trace_entry ent;
+	int dev_major;
+	int dev_minor;
+	__u32 group;
+	int start;
+	int len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_handle_unwritten_extents {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int flags;
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	unsigned int len;
+	unsigned int allocated;
+	ext4_fsblk_t newblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_get_implied_cluster_alloc_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int flags;
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	unsigned int len;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_show_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_fsblk_t pblk;
+	ext4_lblk_t lblk;
+	unsigned short len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_remove_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t from;
+	ext4_lblk_t to;
+	ext4_fsblk_t ee_pblk;
+	ext4_lblk_t ee_lblk;
+	unsigned short ee_len;
+	ext4_fsblk_t pc_pclu;
+	ext4_lblk_t pc_lblk;
+	int pc_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_rm_leaf {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t start;
+	ext4_lblk_t ee_lblk;
+	ext4_fsblk_t ee_pblk;
+	short ee_len;
+	ext4_fsblk_t pc_pclu;
+	ext4_lblk_t pc_lblk;
+	int pc_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_rm_idx {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_fsblk_t pblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_remove_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+	int depth;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_remove_space_done {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+	int depth;
+	ext4_fsblk_t pc_pclu;
+	ext4_lblk_t pc_lblk;
+	int pc_state;
+	unsigned short eh_entries;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__es_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_remove_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t lblk;
+	loff_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_find_extent_range_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_find_extent_range_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_lookup_extent_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_lookup_extent_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	int found;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__es_shrink_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	int nr_to_scan;
+	int cache_cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_shrink_scan_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	int nr_shrunk;
+	int cache_cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_collapse_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	loff_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_insert_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	loff_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_shrink {
+	struct trace_entry ent;
+	dev_t dev;
+	int nr_shrunk;
+	unsigned long long scan_time;
+	int nr_skipped;
+	int retried;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_insert_delayed_block {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	bool allocated;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fsmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t keydev;
+	u32 agno;
+	u64 bno;
+	u64 len;
+	u64 owner;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_getfsmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t keydev;
+	u64 block;
+	u64 len;
+	u64 owner;
+	u64 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_shutdown {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_error {
+	struct trace_entry ent;
+	dev_t dev;
+	const char *function;
+	unsigned int line;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_prefetch_bitmaps {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	__u32 next;
+	__u32 ios;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_lazy_itable_init {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_replay_scan {
+	struct trace_entry ent;
+	dev_t dev;
+	int error;
+	int off;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_replay {
+	struct trace_entry ent;
+	dev_t dev;
+	int tag;
+	int ino;
+	int priv1;
+	int priv2;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_commit_start {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_commit_stop {
+	struct trace_entry ent;
+	dev_t dev;
+	int nblks;
+	int reason;
+	int num_fc;
+	int num_fc_ineligible;
+	int nblks_agg;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int fc_ineligible_rc[10];
+	unsigned long fc_commits;
+	unsigned long fc_ineligible_commits;
+	unsigned long fc_numblks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_track_dentry {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_track_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_track_range {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
+	long start;
+	long end;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_cleanup {
+	struct trace_entry ent;
+	dev_t dev;
+	int j_fc_off;
+	int full;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_update_sb {
+	struct trace_entry ent;
+	dev_t dev;
+	ext4_fsblk_t fsblk;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct ext4_journal_cb_entry {
+	struct list_head jce_list;
+	void (*jce_func)(struct super_block *, struct ext4_journal_cb_entry *, int);
+};
+
+struct ext4_fs_context {
+	char *s_qf_names[3];
+	struct fscrypt_dummy_policy dummy_enc_policy;
+	int s_jquota_fmt;
+	unsigned short qname_spec;
+	unsigned long vals_s_flags;
+	unsigned long mask_s_flags;
+	unsigned long journal_devnum;
+	unsigned long s_commit_interval;
+	unsigned long s_stripe;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_want_extra_isize;
+	unsigned int s_li_wait_mult;
+	unsigned int s_max_dir_size_kb;
+	unsigned int journal_ioprio;
+	unsigned int vals_s_mount_opt;
+	unsigned int mask_s_mount_opt;
+	unsigned int vals_s_mount_opt2;
+	unsigned int mask_s_mount_opt2;
+	unsigned int opt_flags;
+	unsigned int spec;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	ext4_fsblk_t s_sb_block;
+};
+
+struct ext4_mount_options {
+	unsigned long s_mount_opt;
+	unsigned long s_mount_opt2;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	unsigned long s_commit_interval;
+	u32 s_min_batch_time;
+	u32 s_max_batch_time;
+	int s_jquota_fmt;
+	char *s_qf_names[3];
+};
+
+struct trace_event_data_offsets_ext4_other_inode_update_time {};
+
+struct trace_event_data_offsets_ext4_free_inode {};
+
+struct trace_event_data_offsets_ext4_request_inode {};
+
+struct trace_event_data_offsets_ext4_allocate_inode {};
+
+struct trace_event_data_offsets_ext4_evict_inode {};
+
+struct trace_event_data_offsets_ext4_drop_inode {};
+
+struct trace_event_data_offsets_ext4_nfs_commit_metadata {};
+
+struct trace_event_data_offsets_ext4_mark_inode_dirty {};
+
+struct trace_event_data_offsets_ext4_begin_ordered_truncate {};
+
+struct trace_event_data_offsets_ext4__write_begin {};
+
+struct trace_event_data_offsets_ext4__write_end {};
+
+struct trace_event_data_offsets_ext4_writepages {};
+
+struct trace_event_data_offsets_ext4_da_write_pages {};
+
+struct trace_event_data_offsets_ext4_da_write_pages_extent {};
+
+struct trace_event_data_offsets_ext4_writepages_result {};
+
+struct trace_event_data_offsets_ext4__folio_op {};
+
+struct trace_event_data_offsets_ext4_invalidate_folio_op {};
+
+struct trace_event_data_offsets_ext4_discard_blocks {};
+
+struct trace_event_data_offsets_ext4__mb_new_pa {};
+
+struct trace_event_data_offsets_ext4_mb_release_inode_pa {};
+
+struct trace_event_data_offsets_ext4_mb_release_group_pa {};
+
+struct trace_event_data_offsets_ext4_discard_preallocations {};
+
+struct trace_event_data_offsets_ext4_mb_discard_preallocations {};
+
+struct trace_event_data_offsets_ext4_request_blocks {};
+
+struct trace_event_data_offsets_ext4_allocate_blocks {};
+
+struct trace_event_data_offsets_ext4_free_blocks {};
+
+struct trace_event_data_offsets_ext4_sync_file_enter {};
+
+struct trace_event_data_offsets_ext4_sync_file_exit {};
+
+struct trace_event_data_offsets_ext4_sync_fs {};
+
+struct trace_event_data_offsets_ext4_alloc_da_blocks {};
+
+struct trace_event_data_offsets_ext4_mballoc_alloc {};
+
+struct trace_event_data_offsets_ext4_mballoc_prealloc {};
+
+struct trace_event_data_offsets_ext4__mballoc {};
+
+struct trace_event_data_offsets_ext4_forget {};
+
+struct trace_event_data_offsets_ext4_da_update_reserve_space {};
+
+struct trace_event_data_offsets_ext4_da_reserve_space {};
+
+struct trace_event_data_offsets_ext4_da_release_space {};
+
+struct trace_event_data_offsets_ext4__bitmap_load {};
+
+struct trace_event_data_offsets_ext4_read_block_bitmap_load {};
+
+struct trace_event_data_offsets_ext4__fallocate_mode {};
+
+struct trace_event_data_offsets_ext4_fallocate_exit {};
+
+struct trace_event_data_offsets_ext4_unlink_enter {};
+
+struct trace_event_data_offsets_ext4_unlink_exit {};
+
+struct trace_event_data_offsets_ext4__truncate {};
+
+struct trace_event_data_offsets_ext4_ext_convert_to_initialized_enter {};
+
+struct trace_event_data_offsets_ext4_ext_convert_to_initialized_fastpath {};
+
+struct trace_event_data_offsets_ext4__map_blocks_enter {};
+
+struct trace_event_data_offsets_ext4__map_blocks_exit {};
+
+struct trace_event_data_offsets_ext4_ext_load_extent {};
+
+struct trace_event_data_offsets_ext4_load_inode {};
+
+struct trace_event_data_offsets_ext4_journal_start_sb {};
+
+struct trace_event_data_offsets_ext4_journal_start_inode {};
+
+struct trace_event_data_offsets_ext4_journal_start_reserved {};
+
+struct trace_event_data_offsets_ext4__trim {};
+
+struct trace_event_data_offsets_ext4_ext_handle_unwritten_extents {};
+
+struct trace_event_data_offsets_ext4_get_implied_cluster_alloc_exit {};
+
+struct trace_event_data_offsets_ext4_ext_show_extent {};
+
+struct trace_event_data_offsets_ext4_remove_blocks {};
+
+struct trace_event_data_offsets_ext4_ext_rm_leaf {};
+
+struct trace_event_data_offsets_ext4_ext_rm_idx {};
+
+struct trace_event_data_offsets_ext4_ext_remove_space {};
+
+struct trace_event_data_offsets_ext4_ext_remove_space_done {};
+
+struct trace_event_data_offsets_ext4__es_extent {};
+
+struct trace_event_data_offsets_ext4_es_remove_extent {};
+
+struct trace_event_data_offsets_ext4_es_find_extent_range_enter {};
+
+struct trace_event_data_offsets_ext4_es_find_extent_range_exit {};
+
+struct trace_event_data_offsets_ext4_es_lookup_extent_enter {};
+
+struct trace_event_data_offsets_ext4_es_lookup_extent_exit {};
+
+struct trace_event_data_offsets_ext4__es_shrink_enter {};
+
+struct trace_event_data_offsets_ext4_es_shrink_scan_exit {};
+
+struct trace_event_data_offsets_ext4_collapse_range {};
+
+struct trace_event_data_offsets_ext4_insert_range {};
+
+struct trace_event_data_offsets_ext4_es_shrink {};
+
+struct trace_event_data_offsets_ext4_es_insert_delayed_block {};
+
+struct trace_event_data_offsets_ext4_fsmap_class {};
+
+struct trace_event_data_offsets_ext4_getfsmap_class {};
+
+struct trace_event_data_offsets_ext4_shutdown {};
+
+struct trace_event_data_offsets_ext4_error {};
+
+struct trace_event_data_offsets_ext4_prefetch_bitmaps {};
+
+struct trace_event_data_offsets_ext4_lazy_itable_init {};
+
+struct trace_event_data_offsets_ext4_fc_replay_scan {};
+
+struct trace_event_data_offsets_ext4_fc_replay {};
+
+struct trace_event_data_offsets_ext4_fc_commit_start {};
+
+struct trace_event_data_offsets_ext4_fc_commit_stop {};
+
+struct trace_event_data_offsets_ext4_fc_stats {};
+
+struct trace_event_data_offsets_ext4_fc_track_dentry {};
+
+struct trace_event_data_offsets_ext4_fc_track_inode {};
+
+struct trace_event_data_offsets_ext4_fc_track_range {};
+
+struct trace_event_data_offsets_ext4_fc_cleanup {};
+
+struct trace_event_data_offsets_ext4_update_sb {};
+
+struct ext4_attr {
+	struct attribute attr;
+	short attr_id;
+	short attr_ptr;
+	unsigned short attr_size;
+	union {
+		int offset;
+		void *explicit_ptr;
+	} u;
+};
+
+enum {
+	attr_noop = 0,
+	attr_delayed_allocation_blocks = 1,
+	attr_session_write_kbytes = 2,
+	attr_lifetime_write_kbytes = 3,
+	attr_reserved_clusters = 4,
+	attr_sra_exceeded_retry_limit = 5,
+	attr_inode_readahead = 6,
+	attr_trigger_test_error = 7,
+	attr_first_error_time = 8,
+	attr_last_error_time = 9,
+	attr_feature = 10,
+	attr_pointer_ui = 11,
+	attr_pointer_ul = 12,
+	attr_pointer_u64 = 13,
+	attr_pointer_u8 = 14,
+	attr_pointer_string = 15,
+	attr_pointer_atomic = 16,
+	attr_journal_task = 17,
+};
+
+enum {
+	ptr_explicit = 0,
+	ptr_ext4_sb_info_offset = 1,
+	ptr_ext4_super_block_offset = 2,
+};
+
+struct ext4_xattr_header {
+	__le32 h_magic;
+	__le32 h_refcount;
+	__le32 h_blocks;
+	__le32 h_hash;
+	__le32 h_checksum;
+	__u32 h_reserved[3];
+};
+
+struct ext4_xattr_block_find {
+	struct ext4_xattr_search s;
+	struct buffer_head *bh;
+};
+
+enum {
+	EXT4_FC_STATUS_OK = 0,
+	EXT4_FC_STATUS_INELIGIBLE = 1,
+	EXT4_FC_STATUS_SKIPPED = 2,
+	EXT4_FC_STATUS_FAILED = 3,
+};
+
+struct ext4_fc_dentry_update {
+	int fcd_op;
+	int fcd_parent;
+	int fcd_ino;
+	struct qstr fcd_name;
+	unsigned char fcd_iname[32];
+	struct list_head fcd_list;
+	struct list_head fcd_dilist;
+};
+
+struct __track_dentry_update_args {
+	struct dentry *dentry;
+	int op;
+};
+
+struct __track_range_args {
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+};
+
+struct ext4_fc_tl {
+	__le16 fc_tag;
+	__le16 fc_len;
+};
+
+struct ext4_fc_head {
+	__le32 fc_features;
+	__le32 fc_tid;
+};
+
+struct ext4_fc_tail {
+	__le32 fc_tid;
+	__le32 fc_crc;
+};
+
+struct ext4_fc_tl_mem {
+	u16 fc_tag;
+	u16 fc_len;
+};
+
+struct ext4_fc_add_range {
+	__le32 fc_ino;
+	__u8 fc_ex[12];
+};
+
+struct ext4_fc_del_range {
+	__le32 fc_ino;
+	__le32 fc_lblk;
+	__le32 fc_len;
+};
+
+struct dentry_info_args {
+	int parent_ino;
+	int dname_len;
+	int ino;
+	int inode_len;
+	char *dname;
+};
+
+struct ext4_fc_dentry_info {
+	__le32 fc_parent_ino;
+	__le32 fc_ino;
+	__u8 fc_dname[0];
+};
+
+struct ext4_fc_inode {
+	__le32 fc_ino;
+	__u8 fc_raw_inode[0];
+};
+
+struct ext4_orphan_block_tail {
+	__le32 ob_magic;
+	__le32 ob_checksum;
+};
+
+typedef struct {
+	__le32 a_version;
+} ext4_acl_header;
+
+typedef struct {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+} ext4_acl_entry;
+
+struct journal_block_tag_s {
+	__be32 t_blocknr;
+	__be16 t_checksum;
+	__be16 t_flags;
+	__be32 t_blocknr_high;
+};
+
+typedef struct journal_block_tag_s journal_block_tag_t;
+
+struct journal_block_tag3_s {
+	__be32 t_blocknr;
+	__be32 t_flags;
+	__be32 t_blocknr_high;
+	__be32 t_checksum;
+};
+
+typedef struct journal_block_tag3_s journal_block_tag3_t;
+
+struct commit_header {
+	__be32 h_magic;
+	__be32 h_blocktype;
+	__be32 h_sequence;
+	unsigned char h_chksum_type;
+	unsigned char h_chksum_size;
+	unsigned char h_padding[2];
+	__be32 h_chksum[8];
+	__be64 h_commit_sec;
+	__be32 h_commit_nsec;
+};
+
+struct jbd2_journal_block_tail {
+	__be32 t_checksum;
+};
+
+struct jbd2_journal_revoke_header_s {
+	journal_header_t r_header;
+	__be32 r_count;
+};
+
+typedef struct jbd2_journal_revoke_header_s jbd2_journal_revoke_header_t;
+
+struct recovery_info {
+	tid_t start_transaction;
+	tid_t end_transaction;
+	unsigned long head_block;
+	int nr_replays;
+	int nr_revokes;
+	int nr_revoke_hits;
+};
+
+enum shrink_type {
+	SHRINK_DESTROY = 0,
+	SHRINK_BUSY_STOP = 1,
+	SHRINK_BUSY_SKIP = 2,
+};
+
+struct jbd2_revoke_table_s {
+	int hash_size;
+	int hash_shift;
+	struct list_head *hash_table;
+};
+
+struct jbd2_revoke_record_s {
+	struct list_head hash;
+	tid_t sequence;
+	unsigned long long blocknr;
+};
+
+typedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);
+
+typedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_locking)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_flushing)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_logging)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_drop_transaction)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_end_commit)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_submit_inode_data)(void *, struct inode *);
+
+typedef void (*btf_trace_jbd2_handle_start)(void *, dev_t, tid_t, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_jbd2_handle_restart)(void *, dev_t, tid_t, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_jbd2_handle_extend)(void *, dev_t, tid_t, unsigned int, unsigned int, int, int);
+
+typedef void (*btf_trace_jbd2_handle_stats)(void *, dev_t, tid_t, unsigned int, unsigned int, int, int, int, int);
+
+typedef void (*btf_trace_jbd2_run_stats)(void *, dev_t, tid_t, struct transaction_run_stats_s *);
+
+typedef void (*btf_trace_jbd2_checkpoint_stats)(void *, dev_t, tid_t, struct transaction_chp_stats_s *);
+
+typedef void (*btf_trace_jbd2_update_log_tail)(void *, journal_t *, tid_t, unsigned long, unsigned long);
+
+typedef void (*btf_trace_jbd2_write_superblock)(void *, journal_t *, blk_opf_t);
+
+typedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, unsigned long);
+
+typedef void (*btf_trace_jbd2_shrink_count)(void *, journal_t *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_jbd2_shrink_scan_enter)(void *, journal_t *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_jbd2_shrink_scan_exit)(void *, journal_t *, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_jbd2_shrink_checkpoint_list)(void *, journal_t *, tid_t, tid_t, tid_t, unsigned long, tid_t);
+
+struct trace_event_raw_jbd2_checkpoint {
+	struct trace_entry ent;
+	dev_t dev;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	char sync_commit;
+	tid_t transaction;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_end_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	char sync_commit;
+	tid_t transaction;
+	tid_t head;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_submit_inode_data {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_start_class {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned int type;
+	unsigned int line_no;
+	int requested_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_extend {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned int type;
+	unsigned int line_no;
+	int buffer_credits;
+	int requested_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned int type;
+	unsigned int line_no;
+	int interval;
+	int sync;
+	int requested_blocks;
+	int dirtied_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_run_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned long wait;
+	unsigned long request_delay;
+	unsigned long running;
+	unsigned long locked;
+	unsigned long flushing;
+	unsigned long logging;
+	__u32 handle_count;
+	__u32 blocks;
+	__u32 blocks_logged;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_checkpoint_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned long chp_time;
+	__u32 forced_to_close;
+	__u32 written;
+	__u32 dropped;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_update_log_tail {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tail_sequence;
+	tid_t first_tid;
+	unsigned long block_nr;
+	unsigned long freed;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_write_superblock {
+	struct trace_entry ent;
+	dev_t dev;
+	blk_opf_t write_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_lock_buffer_stall {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long stall_ms;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_journal_shrink {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long nr_to_scan;
+	unsigned long count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_scan_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long nr_to_scan;
+	unsigned long nr_shrunk;
+	unsigned long count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_checkpoint_list {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t first_tid;
+	tid_t tid;
+	tid_t last_tid;
+	unsigned long nr_freed;
+	tid_t next_tid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_jbd2_checkpoint {};
+
+struct trace_event_data_offsets_jbd2_commit {};
+
+struct trace_event_data_offsets_jbd2_end_commit {};
+
+struct trace_event_data_offsets_jbd2_submit_inode_data {};
+
+struct trace_event_data_offsets_jbd2_handle_start_class {};
+
+struct trace_event_data_offsets_jbd2_handle_extend {};
+
+struct trace_event_data_offsets_jbd2_handle_stats {};
+
+struct trace_event_data_offsets_jbd2_run_stats {};
+
+struct trace_event_data_offsets_jbd2_checkpoint_stats {};
+
+struct trace_event_data_offsets_jbd2_update_log_tail {};
+
+struct trace_event_data_offsets_jbd2_write_superblock {};
+
+struct trace_event_data_offsets_jbd2_lock_buffer_stall {};
+
+struct trace_event_data_offsets_jbd2_journal_shrink {};
+
+struct trace_event_data_offsets_jbd2_shrink_scan_exit {};
+
+struct trace_event_data_offsets_jbd2_shrink_checkpoint_list {};
+
+struct jbd2_stats_proc_session {
+	journal_t *journal;
+	struct transaction_stats_s *stats;
+	int start;
+	int max;
+};
+
+enum ramfs_param {
+	Opt_mode___3 = 0,
+};
+
+struct ramfs_mount_opts {
+	umode_t mode;
+};
+
+struct ramfs_fs_info {
+	struct ramfs_mount_opts mount_opts;
+};
+
+struct fat_cache {
+	struct list_head cache_list;
+	int nr_contig;
+	int fcluster;
+	int dcluster;
+};
+
+struct msdos_inode_info {
+	spinlock_t cache_lru_lock;
+	struct list_head cache_lru;
+	int nr_caches;
+	unsigned int cache_valid_id;
+	loff_t mmu_private;
+	int i_start;
+	int i_logstart;
+	int i_attrs;
+	loff_t i_pos;
+	struct hlist_node i_fat_hash;
+	struct hlist_node i_dir_hash;
+	struct rw_semaphore truncate_lock;
+	struct timespec64 i_crtime;
+	struct inode vfs_inode;
+};
+
+struct fat_mount_options {
+	kuid_t fs_uid;
+	kgid_t fs_gid;
+	unsigned short fs_fmask;
+	unsigned short fs_dmask;
+	unsigned short codepage;
+	int time_offset;
+	char *iocharset;
+	unsigned short shortname;
+	unsigned char name_check;
+	unsigned char errors;
+	unsigned char nfs;
+	unsigned short allow_utime;
+	unsigned int quiet: 1;
+	unsigned int showexec: 1;
+	unsigned int sys_immutable: 1;
+	unsigned int dotsOK: 1;
+	unsigned int isvfat: 1;
+	unsigned int utf8: 1;
+	unsigned int unicode_xlate: 1;
+	unsigned int numtail: 1;
+	unsigned int flush: 1;
+	unsigned int nocase: 1;
+	unsigned int usefree: 1;
+	unsigned int tz_set: 1;
+	unsigned int rodir: 1;
+	unsigned int discard: 1;
+	unsigned int dos1xfloppy: 1;
+};
+
+struct nls_table;
+
+struct fatent_operations;
+
+struct msdos_sb_info {
+	unsigned short sec_per_clus;
+	unsigned short cluster_bits;
+	unsigned int cluster_size;
+	unsigned char fats;
+	unsigned char fat_bits;
+	unsigned short fat_start;
+	unsigned long fat_length;
+	unsigned long dir_start;
+	unsigned short dir_entries;
+	unsigned long data_start;
+	unsigned long max_cluster;
+	unsigned long root_cluster;
+	unsigned long fsinfo_sector;
+	struct mutex fat_lock;
+	struct mutex nfs_build_inode_lock;
+	struct mutex s_lock;
+	unsigned int prev_free;
+	unsigned int free_clusters;
+	unsigned int free_clus_valid;
+	struct fat_mount_options options;
+	struct nls_table *nls_disk;
+	struct nls_table *nls_io;
+	const void *dir_ops;
+	int dir_per_block;
+	int dir_per_block_bits;
+	unsigned int vol_id;
+	int fatent_shift;
+	const struct fatent_operations *fatent_ops;
+	struct inode *fat_inode;
+	struct inode *fsinfo_inode;
+	struct ratelimit_state ratelimit;
+	spinlock_t inode_hash_lock;
+	struct hlist_head inode_hashtable[256];
+	spinlock_t dir_hash_lock;
+	struct hlist_head dir_hashtable[256];
+	unsigned int dirty;
+	struct callback_head rcu;
+};
+
+typedef u16 wchar_t;
+
+struct nls_table {
+	const char *charset;
+	const char *alias;
+	int (*uni2char)(wchar_t, unsigned char *, int);
+	int (*char2uni)(const unsigned char *, int, wchar_t *);
+	const unsigned char *charset2lower;
+	const unsigned char *charset2upper;
+	struct module *owner;
+	struct nls_table *next;
+};
+
+struct fat_entry;
+
+struct fatent_operations {
+	void (*ent_blocknr)(struct super_block *, int, int *, sector_t *);
+	void (*ent_set_ptr)(struct fat_entry *, int);
+	int (*ent_bread)(struct super_block *, struct fat_entry *, int, sector_t);
+	int (*ent_get)(struct fat_entry *);
+	void (*ent_put)(struct fat_entry *, int);
+	int (*ent_next)(struct fat_entry *);
+};
+
+struct fat_cache_id {
+	unsigned int id;
+	int nr_contig;
+	int fcluster;
+	int dcluster;
+};
+
+struct fat_entry {
+	int entry;
+	union {
+		u8 *ent12_p[2];
+		__le16 *ent16_p;
+		__le32 *ent32_p;
+	} u;
+	int nr_bhs;
+	struct buffer_head *bhs[2];
+	struct inode *fat_inode;
+};
+
+enum {
+	PARSE_INVALID = 1,
+	PARSE_NOT_LONGNAME = 2,
+	PARSE_EOF = 3,
+};
+
+enum utf16_endian {
+	UTF16_HOST_ENDIAN = 0,
+	UTF16_LITTLE_ENDIAN = 1,
+	UTF16_BIG_ENDIAN = 2,
+};
+
+struct msdos_dir_entry {
+	__u8 name[11];
+	__u8 attr;
+	__u8 lcase;
+	__u8 ctime_cs;
+	__le16 ctime;
+	__le16 cdate;
+	__le16 adate;
+	__le16 starthi;
+	__le16 time;
+	__le16 date;
+	__le16 start;
+	__le32 size;
+};
+
+typedef unsigned long long llu;
+
+struct msdos_dir_slot {
+	__u8 id;
+	__u8 name0_4[10];
+	__u8 attr;
+	__u8 reserved;
+	__u8 alias_checksum;
+	__u8 name5_10[12];
+	__le16 start;
+	__u8 name11_12[4];
+};
+
+struct __fat_dirent {
+	long d_ino;
+	__kernel_off_t d_off;
+	unsigned short d_reclen;
+	char d_name[256];
+};
+
+struct fat_ioctl_filldir_callback {
+	struct dir_context ctx;
+	void __attribute__((btf_type_tag("user"))) *dirent;
+	int result;
+	const char *longname;
+	int long_len;
+	const char *shortname;
+	int short_len;
+};
+
+struct fat_slot_info {
+	loff_t i_pos;
+	loff_t slot_off;
+	int nr_slots;
+	struct msdos_dir_entry *de;
+	struct buffer_head *bh;
+};
+
+struct compat_dirent {
+	u32 d_ino;
+	compat_off_t d_off;
+	u16 d_reclen;
+	char d_name[256];
+};
+
+struct fatent_ra {
+	sector_t cur;
+	sector_t limit;
+	unsigned int ra_blocks;
+	sector_t ra_advance;
+	sector_t ra_next;
+	sector_t ra_limit;
+};
+
+struct fat_floppy_defaults {
+	unsigned int nr_sectors;
+	unsigned int sec_per_clus;
+	unsigned int dir_entries;
+	unsigned int media;
+	unsigned int fat_length;
+};
+
+enum {
+	Opt_check_n = 0,
+	Opt_check_r = 1,
+	Opt_check_s = 2,
+	Opt_uid___3 = 3,
+	Opt_gid___4 = 4,
+	Opt_umask = 5,
+	Opt_dmask = 6,
+	Opt_fmask = 7,
+	Opt_allow_utime = 8,
+	Opt_codepage = 9,
+	Opt_usefree = 10,
+	Opt_nocase = 11,
+	Opt_quiet = 12,
+	Opt_showexec = 13,
+	Opt_debug___2 = 14,
+	Opt_immutable = 15,
+	Opt_dots = 16,
+	Opt_nodots = 17,
+	Opt_charset = 18,
+	Opt_shortname_lower = 19,
+	Opt_shortname_win95 = 20,
+	Opt_shortname_winnt = 21,
+	Opt_shortname_mixed = 22,
+	Opt_utf8_no = 23,
+	Opt_utf8_yes = 24,
+	Opt_uni_xl_no = 25,
+	Opt_uni_xl_yes = 26,
+	Opt_nonumtail_no = 27,
+	Opt_nonumtail_yes = 28,
+	Opt_obsolete = 29,
+	Opt_flush = 30,
+	Opt_tz_utc = 31,
+	Opt_rodir = 32,
+	Opt_err_cont = 33,
+	Opt_err_panic = 34,
+	Opt_err_ro = 35,
+	Opt_discard___2 = 36,
+	Opt_nfs = 37,
+	Opt_time_offset = 38,
+	Opt_nfs_stale_rw = 39,
+	Opt_nfs_nostale_ro = 40,
+	Opt_err___3 = 41,
+	Opt_dos1xfloppy = 42,
+};
+
+struct fat_boot_sector {
+	__u8 ignored[3];
+	__u8 system_id[8];
+	__u8 sector_size[2];
+	__u8 sec_per_clus;
+	__le16 reserved;
+	__u8 fats;
+	__u8 dir_entries[2];
+	__u8 sectors[2];
+	__u8 media;
+	__le16 fat_length;
+	__le16 secs_track;
+	__le16 heads;
+	__le32 hidden;
+	__le32 total_sect;
+	union {
+		struct {
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat16;
+		struct {
+			__le32 length;
+			__le16 flags;
+			__u8 version[2];
+			__le32 root_cluster;
+			__le16 info_sector;
+			__le16 backup_boot;
+			__le16 reserved2[6];
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat32;
+	};
+};
+
+struct fat_boot_fsinfo {
+	__le32 signature1;
+	__le32 reserved1[120];
+	__le32 signature2;
+	__le32 free_clusters;
+	__le32 next_cluster;
+	__le32 reserved2[4];
+};
+
+struct fat_bios_param_block {
+	u16 fat_sector_size;
+	u8 fat_sec_per_clus;
+	u16 fat_reserved;
+	u8 fat_fats;
+	u16 fat_dir_entries;
+	u16 fat_sectors;
+	u16 fat_fat_length;
+	u32 fat_total_sect;
+	u8 fat16_state;
+	u32 fat16_vol_id;
+	u32 fat32_length;
+	u32 fat32_root_cluster;
+	u16 fat32_info_sector;
+	u8 fat32_state;
+	u32 fat32_vol_id;
+};
+
+struct fat_fid {
+	u32 i_gen;
+	u32 i_pos_low;
+	u16 i_pos_hi;
+	u16 parent_i_pos_hi;
+	u32 parent_i_pos_low;
+	u32 parent_i_gen;
+};
+
+struct shortname_info {
+	unsigned char lower: 1;
+	unsigned char upper: 1;
+	unsigned char valid: 1;
+};
+
+enum exfat_error_mode {
+	EXFAT_ERRORS_CONT = 0,
+	EXFAT_ERRORS_PANIC = 1,
+	EXFAT_ERRORS_RO = 2,
+};
+
+struct exfat_chain {
+	unsigned int dir;
+	unsigned int size;
+	unsigned char flags;
+};
+
+struct exfat_hint {
+	unsigned int clu;
+	union {
+		unsigned int off;
+		int eidx;
+	};
+};
+
+struct exfat_hint_femp {
+	int eidx;
+	int count;
+	struct exfat_chain cur;
+};
+
+struct exfat_inode_info {
+	struct exfat_chain dir;
+	int entry;
+	unsigned int type;
+	unsigned short attr;
+	unsigned int start_clu;
+	unsigned char flags;
+	unsigned int version;
+	struct exfat_hint hint_bmap;
+	struct exfat_hint hint_stat;
+	struct exfat_hint_femp hint_femp;
+	spinlock_t cache_lru_lock;
+	struct list_head cache_lru;
+	int nr_caches;
+	unsigned int cache_valid_id;
+	loff_t i_size_ondisk;
+	loff_t i_size_aligned;
+	loff_t i_pos;
+	struct hlist_node i_hash_fat;
+	struct rw_semaphore truncate_lock;
+	struct inode vfs_inode;
+	struct timespec64 i_crtime;
+};
+
+struct exfat_mount_options {
+	kuid_t fs_uid;
+	kgid_t fs_gid;
+	unsigned short fs_fmask;
+	unsigned short fs_dmask;
+	unsigned short allow_utime;
+	char *iocharset;
+	enum exfat_error_mode errors;
+	unsigned int utf8: 1;
+	unsigned int sys_tz: 1;
+	unsigned int discard: 1;
+	unsigned int keep_last_dots: 1;
+	int time_offset;
+};
+
+struct exfat_sb_info {
+	unsigned long long num_sectors;
+	unsigned int num_clusters;
+	unsigned int cluster_size;
+	unsigned int cluster_size_bits;
+	unsigned int sect_per_clus;
+	unsigned int sect_per_clus_bits;
+	unsigned long long FAT1_start_sector;
+	unsigned long long FAT2_start_sector;
+	unsigned long long data_start_sector;
+	unsigned int num_FAT_sectors;
+	unsigned int root_dir;
+	unsigned int dentries_per_clu;
+	unsigned int vol_flags;
+	unsigned int vol_flags_persistent;
+	struct buffer_head *boot_bh;
+	unsigned int map_clu;
+	unsigned int map_sectors;
+	struct buffer_head **vol_amap;
+	unsigned short *vol_utbl;
+	unsigned int clu_srch_ptr;
+	unsigned int used_clusters;
+	struct mutex s_lock;
+	struct mutex bitmap_lock;
+	struct exfat_mount_options options;
+	struct nls_table *nls_io;
+	struct ratelimit_state ratelimit;
+	spinlock_t inode_hash_lock;
+	struct hlist_head inode_hashtable[256];
+};
+
+struct exfat_entry_set_cache {
+	struct super_block *sb;
+	unsigned int start_off;
+	int num_bh;
+	struct buffer_head *__bh[3];
+	struct buffer_head **bh;
+	unsigned int num_entries;
+	bool modified;
+};
+
+struct exfat_dentry {
+	__u8 type;
+	union {
+		struct {
+			__u8 num_ext;
+			__le16 checksum;
+			__le16 attr;
+			__le16 reserved1;
+			__le16 create_time;
+			__le16 create_date;
+			__le16 modify_time;
+			__le16 modify_date;
+			__le16 access_time;
+			__le16 access_date;
+			__u8 create_time_cs;
+			__u8 modify_time_cs;
+			__u8 create_tz;
+			__u8 modify_tz;
+			__u8 access_tz;
+			__u8 reserved2[7];
+		} __attribute__((packed)) file;
+		struct {
+			__u8 flags;
+			__u8 reserved1;
+			__u8 name_len;
+			__le16 name_hash;
+			__le16 reserved2;
+			__le64 valid_size;
+			__le32 reserved3;
+			__le32 start_clu;
+			__le64 size;
+		} __attribute__((packed)) stream;
+		struct {
+			__u8 flags;
+			__le16 unicode_0_14[15];
+		} __attribute__((packed)) name;
+		struct {
+			__u8 flags;
+			__u8 reserved[18];
+			__le32 start_clu;
+			__le64 size;
+		} __attribute__((packed)) bitmap;
+		struct {
+			__u8 reserved1[3];
+			__le32 checksum;
+			__u8 reserved2[12];
+			__le32 start_clu;
+			__le64 size;
+		} __attribute__((packed)) upcase;
+		struct {
+			__u8 flags;
+			__u8 vendor_guid[16];
+			__u8 vendor_defined[14];
+		} vendor_ext;
+		struct {
+			__u8 flags;
+			__u8 vendor_guid[16];
+			__u8 vendor_defined[2];
+			__le32 start_clu;
+			__le64 size;
+		} __attribute__((packed)) vendor_alloc;
+		struct {
+			__u8 flags;
+			__u8 custom_defined[18];
+			__le32 start_clu;
+			__le64 size;
+		} __attribute__((packed)) generic_secondary;
+	} dentry;
+};
+
+struct exfat_dentry_namebuf {
+	char *lfn;
+	int lfnbuf_len;
+};
+
+struct exfat_dir_entry {
+	struct exfat_chain dir;
+	int entry;
+	unsigned int type;
+	unsigned int start_clu;
+	unsigned char flags;
+	unsigned short attr;
+	loff_t size;
+	unsigned int num_subdirs;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 crtime;
+	struct exfat_dentry_namebuf namebuf;
+};
+
+enum {
+	NLS_NAME_NO_LOSSY = 0,
+	NLS_NAME_LOSSY = 1,
+	NLS_NAME_OVERLEN = 2,
+};
+
+typedef u32 unicode_t;
+
+struct exfat_uni_name {
+	unsigned short name[258];
+	u16 name_hash;
+	unsigned char name_len;
+};
+
+enum exfat_validate_dentry_mode {
+	ES_MODE_STARTED = 0,
+	ES_MODE_GET_FILE_ENTRY = 1,
+	ES_MODE_GET_STRM_ENTRY = 2,
+	ES_MODE_GET_NAME_ENTRY = 3,
+	ES_MODE_GET_CRITICAL_SEC_ENTRY = 4,
+	ES_MODE_GET_BENIGN_SEC_ENTRY = 5,
+};
+
+enum {
+	DIRENT_STEP_FILE = 0,
+	DIRENT_STEP_STRM = 1,
+	DIRENT_STEP_NAME = 2,
+	DIRENT_STEP_SECD = 3,
+};
+
+enum {
+	Opt_uid___4 = 0,
+	Opt_gid___5 = 1,
+	Opt_umask___2 = 2,
+	Opt_dmask___2 = 3,
+	Opt_fmask___2 = 4,
+	Opt_allow_utime___2 = 5,
+	Opt_charset___2 = 6,
+	Opt_errors___2 = 7,
+	Opt_discard___3 = 8,
+	Opt_keep_last_dots = 9,
+	Opt_sys_tz = 10,
+	Opt_time_offset___2 = 11,
+	Opt_utf8 = 12,
+	Opt_debug___3 = 13,
+	Opt_namecase = 14,
+	Opt_codepage___2 = 15,
+};
+
+struct boot_sector {
+	__u8 jmp_boot[3];
+	__u8 fs_name[8];
+	__u8 must_be_zero[53];
+	__le64 partition_offset;
+	__le64 vol_length;
+	__le32 fat_offset;
+	__le32 fat_length;
+	__le32 clu_offset;
+	__le32 clu_count;
+	__le32 root_cluster;
+	__le32 vol_serial;
+	__u8 fs_revision[2];
+	__le16 vol_flags;
+	__u8 sect_size_bits;
+	__u8 sect_per_clus_bits;
+	__u8 num_fats;
+	__u8 drv_sel;
+	__u8 percent_in_use;
+	__u8 reserved[7];
+	__u8 boot_code[390];
+	__le16 signature;
+};
+
+struct exfat_cache {
+	struct list_head cache_list;
+	unsigned int nr_contig;
+	unsigned int fcluster;
+	unsigned int dcluster;
+};
+
+struct exfat_cache_id {
+	unsigned int id;
+	unsigned int nr_contig;
+	unsigned int fcluster;
+	unsigned int dcluster;
+};
+
+struct getdents_callback___2 {
+	struct dir_context ctx;
+	char *name;
+	u64 ino;
+	int found;
+	int sequence;
+};
+
+struct utf8_table {
+	int cmask;
+	int cval;
+	int shift;
+	long lmask;
+	long lval;
+};
+
+enum utf8_normalization {
+	UTF8_NFDI = 0,
+	UTF8_NFDICF = 1,
+	UTF8_NMAX = 2,
+};
+
+typedef const unsigned char utf8leaf_t;
+
+typedef const unsigned char utf8trie_t;
+
+struct utf8cursor {
+	const struct unicode_map *um;
+	enum utf8_normalization n;
+	const char *s;
+	const char *p;
+	const char *ss;
+	const char *sp;
+	unsigned int len;
+	unsigned int slen;
+	short ccc;
+	short nccc;
+	unsigned char hangul[12];
+};
+
+struct fuse_iqueue;
+
+struct fuse_iqueue_ops {
+	void (*wake_forget_and_unlock)(struct fuse_iqueue *, bool);
+	void (*wake_interrupt_and_unlock)(struct fuse_iqueue *, bool);
+	void (*wake_pending_and_unlock)(struct fuse_iqueue *, bool);
+	void (*release)(struct fuse_iqueue *);
+};
+
+struct fuse_forget_one {
+	uint64_t nodeid;
+	uint64_t nlookup;
+};
+
+struct fuse_forget_link {
+	struct fuse_forget_one forget_one;
+	struct fuse_forget_link *next;
+};
+
+struct fuse_iqueue {
+	unsigned int connected;
+	spinlock_t lock;
+	wait_queue_head_t waitq;
+	u64 reqctr;
+	struct list_head pending;
+	struct list_head interrupts;
+	struct fuse_forget_link forget_list_head;
+	struct fuse_forget_link *forget_list_tail;
+	int forget_batch;
+	struct fasync_struct *fasync;
+	const struct fuse_iqueue_ops *ops;
+	void *priv;
+};
+
+enum fuse_req_flag {
+	FR_ISREPLY = 0,
+	FR_FORCE = 1,
+	FR_BACKGROUND = 2,
+	FR_WAITING = 3,
+	FR_ABORTED = 4,
+	FR_INTERRUPTED = 5,
+	FR_LOCKED = 6,
+	FR_PENDING = 7,
+	FR_SENT = 8,
+	FR_FINISHED = 9,
+	FR_PRIVATE = 10,
+	FR_ASYNC = 11,
+};
+
+enum fuse_opcode {
+	FUSE_LOOKUP = 1,
+	FUSE_FORGET = 2,
+	FUSE_GETATTR = 3,
+	FUSE_SETATTR = 4,
+	FUSE_READLINK = 5,
+	FUSE_SYMLINK = 6,
+	FUSE_MKNOD = 8,
+	FUSE_MKDIR = 9,
+	FUSE_UNLINK = 10,
+	FUSE_RMDIR = 11,
+	FUSE_RENAME = 12,
+	FUSE_LINK = 13,
+	FUSE_OPEN = 14,
+	FUSE_READ = 15,
+	FUSE_WRITE = 16,
+	FUSE_STATFS = 17,
+	FUSE_RELEASE = 18,
+	FUSE_FSYNC = 20,
+	FUSE_SETXATTR = 21,
+	FUSE_GETXATTR = 22,
+	FUSE_LISTXATTR = 23,
+	FUSE_REMOVEXATTR = 24,
+	FUSE_FLUSH = 25,
+	FUSE_INIT = 26,
+	FUSE_OPENDIR = 27,
+	FUSE_READDIR = 28,
+	FUSE_RELEASEDIR = 29,
+	FUSE_FSYNCDIR = 30,
+	FUSE_GETLK = 31,
+	FUSE_SETLK = 32,
+	FUSE_SETLKW = 33,
+	FUSE_ACCESS = 34,
+	FUSE_CREATE = 35,
+	FUSE_INTERRUPT = 36,
+	FUSE_BMAP = 37,
+	FUSE_DESTROY = 38,
+	FUSE_IOCTL = 39,
+	FUSE_POLL = 40,
+	FUSE_NOTIFY_REPLY = 41,
+	FUSE_BATCH_FORGET = 42,
+	FUSE_FALLOCATE = 43,
+	FUSE_READDIRPLUS = 44,
+	FUSE_RENAME2 = 45,
+	FUSE_LSEEK = 46,
+	FUSE_COPY_FILE_RANGE = 47,
+	FUSE_SETUPMAPPING = 48,
+	FUSE_REMOVEMAPPING = 49,
+	FUSE_SYNCFS = 50,
+	FUSE_TMPFILE = 51,
+	FUSE_STATX = 52,
+	FUSE_CANONICAL_PATH = 2016,
+	CUSE_INIT = 4096,
+	CUSE_INIT_BSWAP_RESERVED = 1048576,
+	FUSE_INIT_BSWAP_RESERVED = 436207616,
+};
+
+enum fuse_notify_code {
+	FUSE_NOTIFY_POLL = 1,
+	FUSE_NOTIFY_INVAL_INODE = 2,
+	FUSE_NOTIFY_INVAL_ENTRY = 3,
+	FUSE_NOTIFY_STORE = 4,
+	FUSE_NOTIFY_RETRIEVE = 5,
+	FUSE_NOTIFY_DELETE = 6,
+	FUSE_NOTIFY_CODE_MAX = 7,
+};
+
+struct fuse_pqueue {
+	unsigned int connected;
+	spinlock_t lock;
+	struct list_head *processing;
+	struct list_head io;
+};
+
+struct fuse_conn;
+
+struct fuse_dev {
+	struct fuse_conn *fc;
+	struct fuse_pqueue pq;
+	struct list_head entry;
+};
+
+struct fuse_sync_bucket;
+
+struct fuse_conn {
+	spinlock_t lock;
+	refcount_t count;
+	atomic_t dev_count;
+	struct callback_head rcu;
+	kuid_t user_id;
+	kgid_t group_id;
+	struct pid_namespace *pid_ns;
+	struct user_namespace *user_ns;
+	unsigned int max_read;
+	unsigned int max_write;
+	unsigned int max_pages;
+	unsigned int max_pages_limit;
+	struct fuse_iqueue iq;
+	atomic64_t khctr;
+	struct rb_root polled_files;
+	unsigned int max_background;
+	unsigned int congestion_threshold;
+	unsigned int num_background;
+	unsigned int active_background;
+	struct list_head bg_queue;
+	spinlock_t bg_lock;
+	int initialized;
+	int blocked;
+	wait_queue_head_t blocked_waitq;
+	unsigned int connected;
+	bool aborted;
+	unsigned int conn_error: 1;
+	unsigned int conn_init: 1;
+	unsigned int async_read: 1;
+	unsigned int abort_err: 1;
+	unsigned int atomic_o_trunc: 1;
+	unsigned int export_support: 1;
+	unsigned int writeback_cache: 1;
+	unsigned int parallel_dirops: 1;
+	unsigned int handle_killpriv: 1;
+	unsigned int cache_symlinks: 1;
+	unsigned int legacy_opts_show: 1;
+	unsigned int handle_killpriv_v2: 1;
+	unsigned int no_open: 1;
+	unsigned int no_opendir: 1;
+	unsigned int no_fsync: 1;
+	unsigned int no_fsyncdir: 1;
+	unsigned int no_flush: 1;
+	unsigned int no_setxattr: 1;
+	unsigned int setxattr_ext: 1;
+	unsigned int no_getxattr: 1;
+	unsigned int no_listxattr: 1;
+	unsigned int no_removexattr: 1;
+	unsigned int no_lock: 1;
+	unsigned int no_access: 1;
+	unsigned int no_create: 1;
+	unsigned int no_interrupt: 1;
+	unsigned int no_bmap: 1;
+	unsigned int no_poll: 1;
+	unsigned int big_writes: 1;
+	unsigned int dont_mask: 1;
+	unsigned int no_flock: 1;
+	unsigned int no_fallocate: 1;
+	unsigned int no_rename2: 1;
+	unsigned int auto_inval_data: 1;
+	unsigned int explicit_inval_data: 1;
+	unsigned int do_readdirplus: 1;
+	unsigned int readdirplus_auto: 1;
+	unsigned int async_dio: 1;
+	unsigned int no_lseek: 1;
+	unsigned int posix_acl: 1;
+	unsigned int default_permissions: 1;
+	unsigned int allow_other: 1;
+	unsigned int no_copy_file_range: 1;
+	unsigned int destroy: 1;
+	unsigned int delete_stale: 1;
+	unsigned int no_control: 1;
+	unsigned int no_force_umount: 1;
+	unsigned int auto_submounts: 1;
+	unsigned int passthrough: 1;
+	unsigned int sync_fs: 1;
+	unsigned int init_security: 1;
+	unsigned int create_supp_group: 1;
+	unsigned int inode_dax: 1;
+	unsigned int no_tmpfile: 1;
+	unsigned int direct_io_allow_mmap: 1;
+	unsigned int no_statx: 1;
+	unsigned int no_daemon: 1;
+	atomic_t num_waiting;
+	unsigned int minor;
+	struct list_head entry;
+	dev_t dev;
+	struct dentry *ctl_dentry[5];
+	int ctl_ndents;
+	u32 scramble_key[4];
+	atomic64_t attr_version;
+	void (*release)(struct fuse_conn *);
+	struct rw_semaphore killsb;
+	struct list_head devices;
+	struct list_head mounts;
+	struct fuse_sync_bucket __attribute__((btf_type_tag("rcu"))) *curr_bucket;
+	struct idr passthrough_req;
+	spinlock_t passthrough_req_lock;
+};
+
+struct fuse_sync_bucket {
+	atomic_t count;
+	wait_queue_head_t waitq;
+	struct callback_head rcu;
+};
+
+struct fuse_in_header {
+	uint32_t len;
+	uint32_t opcode;
+	uint64_t unique;
+	uint64_t nodeid;
+	uint32_t uid;
+	uint32_t gid;
+	uint32_t pid;
+	union {
+		struct {
+			uint16_t total_extlen;
+			uint16_t padding;
+		};
+		uint32_t error_in;
+	};
+};
+
+struct fuse_out_header {
+	uint32_t len;
+	int32_t error;
+	uint64_t unique;
+};
+
+struct fuse_args;
+
+struct fuse_mount;
+
+struct fuse_req {
+	struct list_head list;
+	struct list_head intr_entry;
+	struct fuse_args *args;
+	refcount_t count;
+	unsigned long flags;
+	struct {
+		struct fuse_in_header h;
+	} in;
+	struct {
+		struct fuse_out_header h;
+	} out;
+	wait_queue_head_t waitq;
+	void *argbuf;
+	struct fuse_mount *fm;
+};
+
+struct fuse_in_arg {
+	unsigned int size;
+	const void *value;
+};
+
+struct fuse_arg {
+	unsigned int size;
+	void *value;
+};
+
+struct fuse_args {
+	uint64_t nodeid;
+	uint32_t opcode;
+	uint32_t error_in;
+	uint8_t in_numargs;
+	uint8_t out_numargs;
+	uint8_t ext_idx;
+	bool force: 1;
+	bool noreply: 1;
+	bool nocreds: 1;
+	bool in_pages: 1;
+	bool out_pages: 1;
+	bool user_pages: 1;
+	bool out_argvar: 1;
+	bool page_zeroing: 1;
+	bool page_replace: 1;
+	bool may_block: 1;
+	bool is_ext: 1;
+	struct fuse_in_arg in_args[5];
+	struct fuse_arg out_args[3];
+	void (*end)(struct fuse_mount *, struct fuse_args *, int);
+	struct path *canonical_path;
+};
+
+struct fuse_mount {
+	struct fuse_conn *fc;
+	struct super_block *sb;
+	struct list_head fc_entry;
+};
+
+struct fuse_passthrough {
+	struct file *filp;
+	struct cred *cred;
+};
+
+struct fuse_release_args;
+
+struct fuse_file {
+	struct fuse_mount *fm;
+	struct fuse_release_args *release_args;
+	u64 kh;
+	u64 fh;
+	u64 nodeid;
+	refcount_t count;
+	u32 open_flags;
+	struct list_head write_entry;
+	struct {
+		struct mutex lock;
+		loff_t pos;
+		loff_t cache_off;
+		u64 version;
+	} readdir;
+	struct fuse_passthrough passthrough;
+	struct file *backing_file;
+	struct rb_node polled_node;
+	wait_queue_head_t poll_wait;
+	bool flock: 1;
+};
+
+struct fuse_page_desc;
+
+struct fuse_args_pages {
+	struct fuse_args args;
+	struct page **pages;
+	struct fuse_page_desc *descs;
+	unsigned int num_pages;
+};
+
+struct fuse_page_desc {
+	unsigned int length;
+	unsigned int offset;
+};
+
+struct fuse_entry_bpf_out {
+	uint64_t backing_action;
+	uint64_t backing_fd;
+	uint64_t bpf_action;
+	uint64_t bpf_fd;
+};
+
+struct fuse_entry_bpf {
+	struct fuse_entry_bpf_out out;
+	struct file *backing_file;
+	struct file *bpf_file;
+};
+
+struct fuse_notify_retrieve_in {
+	uint64_t dummy1;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t dummy2;
+	uint64_t dummy3;
+	uint64_t dummy4;
+};
+
+struct fuse_retrieve_args {
+	struct fuse_args_pages ap;
+	struct fuse_notify_retrieve_in inarg;
+};
+
+struct fuse_copy_state {
+	int write;
+	struct fuse_req *req;
+	struct iov_iter *iter;
+	struct pipe_buffer *pipebufs;
+	struct pipe_buffer *currbuf;
+	struct pipe_inode_info *pipe;
+	unsigned long nr_segs;
+	struct page *pg;
+	unsigned int len;
+	unsigned int offset;
+	unsigned int move_pages: 1;
+};
+
+struct fuse_batch_forget_in {
+	uint32_t count;
+	uint32_t dummy;
+};
+
+struct fuse_forget_in {
+	uint64_t nlookup;
+};
+
+struct fuse_notify_poll_wakeup_out {
+	uint64_t kh;
+};
+
+struct fuse_notify_retrieve_out {
+	uint64_t notify_unique;
+	uint64_t nodeid;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_notify_inval_entry_out {
+	uint64_t parent;
+	uint32_t namelen;
+	uint32_t flags;
+};
+
+struct fuse_notify_store_out {
+	uint64_t nodeid;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_notify_inval_inode_out {
+	uint64_t ino;
+	int64_t off;
+	int64_t len;
+};
+
+struct fuse_notify_delete_out {
+	uint64_t parent;
+	uint64_t child;
+	uint32_t namelen;
+	uint32_t padding;
+};
+
+struct fuse_interrupt_in {
+	uint64_t unique;
+};
+
+enum {
+	FUSE_I_ADVISE_RDPLUS = 0,
+	FUSE_I_INIT_RDPLUS = 1,
+	FUSE_I_SIZE_UNSTABLE = 2,
+	FUSE_I_BAD = 3,
+	FUSE_I_BTIME = 4,
+};
+
+enum fuse_ext_type {
+	FUSE_MAX_NR_SECCTX = 31,
+	FUSE_EXT_GROUPS = 32,
+};
+
+struct fuse_dentry {
+	union {
+		u64 time;
+		struct callback_head rcu;
+	};
+	struct path backing_path;
+	struct bpf_prog *bpf;
+};
+
+struct fuse_submount_lookup;
+
+struct fuse_inode {
+	struct inode inode;
+	struct inode *backing_inode;
+	struct bpf_prog *bpf;
+	u64 nodeid;
+	u64 nlookup;
+	struct fuse_forget_link *forget;
+	u64 i_time;
+	u32 inval_mask;
+	umode_t orig_i_mode;
+	struct timespec64 i_btime;
+	u64 orig_ino;
+	u64 attr_version;
+	union {
+		struct {
+			struct list_head write_files;
+			struct list_head queued_writes;
+			int writectr;
+			wait_queue_head_t page_waitq;
+			struct rb_root writepages;
+		};
+		struct {
+			bool cached;
+			loff_t size;
+			loff_t pos;
+			u64 version;
+			struct timespec64 mtime;
+			u64 iversion;
+			spinlock_t lock;
+		} rdc;
+	};
+	unsigned long state;
+	struct mutex mutex;
+	spinlock_t lock;
+	struct fuse_submount_lookup *submount_lookup;
+};
+
+struct fuse_submount_lookup {
+	refcount_t count;
+	u64 nodeid;
+	struct fuse_forget_link *forget;
+};
+
+struct fuse_supp_groups {
+	uint32_t nr_groups;
+	uint32_t groups[0];
+};
+
+struct fuse_attr {
+	uint64_t ino;
+	uint64_t size;
+	uint64_t blocks;
+	uint64_t atime;
+	uint64_t mtime;
+	uint64_t ctime;
+	uint32_t atimensec;
+	uint32_t mtimensec;
+	uint32_t ctimensec;
+	uint32_t mode;
+	uint32_t nlink;
+	uint32_t uid;
+	uint32_t gid;
+	uint32_t rdev;
+	uint32_t blksize;
+	uint32_t flags;
+};
+
+struct fuse_entry_out {
+	uint64_t nodeid;
+	uint64_t generation;
+	uint64_t entry_valid;
+	uint64_t attr_valid;
+	uint32_t entry_valid_nsec;
+	uint32_t attr_valid_nsec;
+	struct fuse_attr attr;
+};
+
+struct fuse_sx_time {
+	int64_t tv_sec;
+	uint32_t tv_nsec;
+	int32_t __reserved;
+};
+
+struct fuse_statx {
+	uint32_t mask;
+	uint32_t blksize;
+	uint64_t attributes;
+	uint32_t nlink;
+	uint32_t uid;
+	uint32_t gid;
+	uint16_t mode;
+	uint16_t __spare0[1];
+	uint64_t ino;
+	uint64_t size;
+	uint64_t blocks;
+	uint64_t attributes_mask;
+	struct fuse_sx_time atime;
+	struct fuse_sx_time btime;
+	struct fuse_sx_time ctime;
+	struct fuse_sx_time mtime;
+	uint32_t rdev_major;
+	uint32_t rdev_minor;
+	uint32_t dev_major;
+	uint32_t dev_minor;
+	uint64_t __spare2[14];
+};
+
+struct fuse_dummy_io {
+	int unused;
+};
+
+struct fuse_statx_out {
+	uint64_t attr_valid;
+	uint32_t attr_valid_nsec;
+	uint32_t flags;
+	uint64_t spare[2];
+	struct fuse_statx stat;
+};
+
+struct fuse_statx_in {
+	uint32_t getattr_flags;
+	uint32_t reserved;
+	uint64_t fh;
+	uint32_t sx_flags;
+	uint32_t sx_mask;
+};
+
+struct fuse_getattr_in {
+	uint32_t getattr_flags;
+	uint32_t dummy;
+	uint64_t fh;
+};
+
+struct fuse_attr_out {
+	uint64_t attr_valid;
+	uint32_t attr_valid_nsec;
+	uint32_t dummy;
+	struct fuse_attr attr;
+};
+
+struct fuse_getattr_io {
+	struct fuse_getattr_in fgi;
+	struct fuse_attr_out fao;
+};
+
+struct fuse_setattr_in {
+	uint32_t valid;
+	uint32_t padding;
+	uint64_t fh;
+	uint64_t size;
+	uint64_t lock_owner;
+	uint64_t atime;
+	uint64_t mtime;
+	uint64_t ctime;
+	uint32_t atimensec;
+	uint32_t mtimensec;
+	uint32_t ctimensec;
+	uint32_t mode;
+	uint32_t unused4;
+	uint32_t uid;
+	uint32_t gid;
+	uint32_t unused5;
+};
+
+struct fuse_setattr_io {
+	struct fuse_setattr_in fsi;
+	struct fuse_attr_out fao;
+};
+
+struct fuse_access_in {
+	uint32_t mask;
+	uint32_t padding;
+};
+
+struct fuse_err_ret {
+	void *result;
+	bool ret;
+};
+
+struct fuse_lookup_io {
+	struct fuse_entry_out feo;
+	struct fuse_entry_bpf feb;
+};
+
+struct fuse_link_in {
+	uint64_t oldnodeid;
+};
+
+struct fuse_mkdir_in {
+	uint32_t mode;
+	uint32_t umask;
+};
+
+struct fuse_mknod_in {
+	uint32_t mode;
+	uint32_t rdev;
+	uint32_t umask;
+	uint32_t padding;
+};
+
+struct fuse_rename2_in {
+	uint64_t newdir;
+	uint32_t flags;
+	uint32_t padding;
+};
+
+struct fuse_rename_in {
+	uint64_t newdir;
+};
+
+struct fuse_secctx {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_secctx_header {
+	uint32_t size;
+	uint32_t nr_secctx;
+};
+
+struct fuse_ext_header {
+	uint32_t size;
+	uint32_t type;
+};
+
+struct fuse_create_in {
+	uint32_t flags;
+	uint32_t mode;
+	uint32_t umask;
+	uint32_t open_flags;
+};
+
+struct fuse_open_out {
+	uint64_t fh;
+	uint32_t open_flags;
+	uint32_t passthrough_fh;
+};
+
+struct fuse_create_open_io {
+	struct fuse_create_in fci;
+	struct fuse_entry_out feo;
+	struct fuse_open_out foo;
+};
+
+struct fuse_fsync_in {
+	uint64_t fh;
+	uint32_t fsync_flags;
+	uint32_t padding;
+};
+
+struct fuse_read_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t read_flags;
+	uint64_t lock_owner;
+	uint32_t flags;
+	uint32_t padding;
+};
+
+struct fuse_write_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t write_flags;
+	uint64_t lock_owner;
+	uint32_t flags;
+	uint32_t padding;
+};
+
+struct fuse_write_out {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_io_priv;
+
+struct fuse_io_args {
+	union {
+		struct {
+			struct fuse_read_in in;
+			u64 attr_ver;
+		} read;
+		struct {
+			struct fuse_write_in in;
+			struct fuse_write_out out;
+			bool page_locked;
+		} write;
+	};
+	struct fuse_args_pages ap;
+	struct fuse_io_priv *io;
+	struct fuse_file *ff;
+};
+
+struct fuse_writepage_args {
+	struct fuse_io_args ia;
+	struct rb_node writepages_entry;
+	struct list_head queue_entry;
+	struct fuse_writepage_args *next;
+	struct inode *inode;
+	struct fuse_sync_bucket *bucket;
+};
+
+struct fuse_io_priv {
+	struct kref refcnt;
+	int async;
+	spinlock_t lock;
+	unsigned int reqs;
+	ssize_t bytes;
+	size_t size;
+	__u64 offset;
+	bool write;
+	bool should_dirty;
+	int err;
+	struct kiocb *iocb;
+	struct completion *done;
+	bool blocking;
+};
+
+struct fuse_release_in {
+	uint64_t fh;
+	uint32_t flags;
+	uint32_t release_flags;
+	uint64_t lock_owner;
+};
+
+struct fuse_release_args {
+	struct fuse_args args;
+	struct fuse_release_in inarg;
+	struct inode *inode;
+};
+
+struct fuse_open_in {
+	uint32_t flags;
+	uint32_t open_flags;
+};
+
+struct fuse_open_io {
+	struct fuse_open_in foi;
+	struct fuse_open_out foo;
+};
+
+struct fuse_lseek_out {
+	uint64_t offset;
+};
+
+struct fuse_lseek_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint32_t whence;
+	uint32_t padding;
+};
+
+struct fuse_lseek_io {
+	struct fuse_lseek_in fli;
+	struct fuse_lseek_out flo;
+};
+
+struct fuse_read_iter_out {
+	uint64_t ret;
+};
+
+struct fuse_file_read_iter_io {
+	struct fuse_read_in fri;
+	struct fuse_read_iter_out frio;
+};
+
+struct fuse_write_iter_out {
+	uint64_t ret;
+};
+
+struct fuse_file_write_iter_io {
+	struct fuse_write_in fwi;
+	struct fuse_write_out fwo;
+	struct fuse_write_iter_out fwio;
+};
+
+struct fuse_flush_in {
+	uint64_t fh;
+	uint32_t unused;
+	uint32_t padding;
+	uint64_t lock_owner;
+};
+
+struct fuse_file_lock {
+	uint64_t start;
+	uint64_t end;
+	uint32_t type;
+	uint32_t pid;
+};
+
+struct fuse_lk_out {
+	struct fuse_file_lock lk;
+};
+
+struct fuse_lk_in {
+	uint64_t fh;
+	uint64_t owner;
+	struct fuse_file_lock lk;
+	uint32_t lk_flags;
+	uint32_t padding;
+};
+
+struct fuse_fallocate_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint64_t length;
+	uint32_t mode;
+	uint32_t padding;
+};
+
+struct fuse_copy_file_range_in {
+	uint64_t fh_in;
+	uint64_t off_in;
+	uint64_t nodeid_out;
+	uint64_t fh_out;
+	uint64_t off_out;
+	uint64_t len;
+	uint64_t flags;
+};
+
+struct fuse_copy_file_range_io {
+	struct fuse_copy_file_range_in fci;
+	struct fuse_write_out fwo;
+};
+
+struct fuse_fill_wb_data {
+	struct fuse_writepage_args *wpa;
+	struct fuse_file *ff;
+	struct inode *inode;
+	struct page **orig_pages;
+	unsigned int max_pages;
+};
+
+struct fuse_poll_out {
+	uint32_t revents;
+	uint32_t padding;
+};
+
+struct fuse_poll_in {
+	uint64_t fh;
+	uint64_t kh;
+	uint32_t flags;
+	uint32_t events;
+};
+
+struct fuse_bmap_out {
+	uint64_t block;
+};
+
+struct fuse_bmap_in {
+	uint64_t block;
+	uint32_t blocksize;
+	uint32_t padding;
+};
+
+enum fuse_dax_mode {
+	FUSE_DAX_INODE_DEFAULT = 0,
+	FUSE_DAX_ALWAYS = 1,
+	FUSE_DAX_NEVER = 2,
+	FUSE_DAX_INODE_USER = 3,
+};
+
+enum {
+	OPT_SOURCE = 0,
+	OPT_SUBTYPE = 1,
+	OPT_FD = 2,
+	OPT_ROOTMODE = 3,
+	OPT_USER_ID = 4,
+	OPT_GROUP_ID = 5,
+	OPT_DEFAULT_PERMISSIONS = 6,
+	OPT_ALLOW_OTHER = 7,
+	OPT_MAX_READ = 8,
+	OPT_BLKSIZE = 9,
+	OPT_ROOT_BPF = 10,
+	OPT_ROOT_DIR = 11,
+	OPT_NO_DAEMON = 12,
+	OPT_ERR = 13,
+};
+
+struct fuse_inode_identifier {
+	u64 nodeid;
+	struct inode *backing_inode;
+};
+
+struct fuse_init_in {
+	uint32_t major;
+	uint32_t minor;
+	uint32_t max_readahead;
+	uint32_t flags;
+	uint32_t flags2;
+	uint32_t unused[11];
+};
+
+struct fuse_init_out {
+	uint32_t major;
+	uint32_t minor;
+	uint32_t max_readahead;
+	uint32_t flags;
+	uint16_t max_background;
+	uint16_t congestion_threshold;
+	uint32_t max_write;
+	uint32_t time_gran;
+	uint16_t max_pages;
+	uint16_t map_alignment;
+	uint32_t flags2;
+	uint32_t unused[7];
+};
+
+struct fuse_init_args {
+	struct fuse_args args;
+	struct fuse_init_in in;
+	struct fuse_init_out out;
+};
+
+struct fuse_kstatfs {
+	uint64_t blocks;
+	uint64_t bfree;
+	uint64_t bavail;
+	uint64_t files;
+	uint64_t ffree;
+	uint32_t bsize;
+	uint32_t namelen;
+	uint32_t frsize;
+	uint32_t padding;
+	uint32_t spare[6];
+};
+
+struct fuse_statfs_out {
+	struct fuse_kstatfs st;
+};
+
+struct fuse_fs_context {
+	int fd;
+	struct file *file;
+	unsigned int rootmode;
+	kuid_t user_id;
+	kgid_t group_id;
+	bool is_bdev: 1;
+	bool fd_present: 1;
+	bool rootmode_present: 1;
+	bool user_id_present: 1;
+	bool group_id_present: 1;
+	bool default_permissions: 1;
+	bool allow_other: 1;
+	bool destroy: 1;
+	bool no_control: 1;
+	bool no_force_umount: 1;
+	bool legacy_opts_show: 1;
+	enum fuse_dax_mode dax_mode;
+	bool no_daemon: 1;
+	unsigned int max_read;
+	unsigned int blksize;
+	const char *subtype;
+	struct bpf_prog *root_bpf;
+	struct file *root_dir;
+	struct dax_device *dax_dev;
+	void **fudptr;
+};
+
+struct fuse_syncfs_in {
+	uint64_t padding;
+};
+
+struct fuse_inode_handle {
+	u64 nodeid;
+	u32 generation;
+};
+
+struct fuse_getxattr_in {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_getxattr_out {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_getxattr_io {
+	struct fuse_getxattr_in fgi;
+	struct fuse_getxattr_out fgo;
+};
+
+struct fuse_setxattr_in {
+	uint32_t size;
+	uint32_t flags;
+	uint32_t setxattr_flags;
+	uint32_t padding;
+};
+
+enum fuse_parse_result {
+	FOUND_ERR = -1,
+	FOUND_NONE = 0,
+	FOUND_SOME = 1,
+	FOUND_ALL = 2,
+};
+
+struct fuse_dirent {
+	uint64_t ino;
+	uint64_t off;
+	uint32_t namelen;
+	uint32_t type;
+	char name[0];
+};
+
+struct fuse_direntplus {
+	struct fuse_entry_out entry_out;
+	struct fuse_dirent dirent;
+};
+
+struct fuse_read_out {
+	uint64_t offset;
+	uint32_t again;
+	uint32_t padding;
+};
+
+struct fuse_read_io {
+	struct fuse_read_in fri;
+	struct fuse_read_out fro;
+};
+
+struct fuse_ioctl_out {
+	int32_t result;
+	uint32_t flags;
+	uint32_t in_iovs;
+	uint32_t out_iovs;
+};
+
+struct fuse_ioctl_iovec {
+	uint64_t base;
+	uint64_t len;
+};
+
+struct fuse_ioctl_in {
+	uint64_t fh;
+	uint32_t flags;
+	uint32_t cmd;
+	uint64_t arg;
+	uint32_t in_size;
+	uint32_t out_size;
+};
+
+struct fuse_aio_req {
+	struct kiocb iocb;
+	struct kiocb *iocb_fuse;
+};
+
+struct fuse_bpf_aio_req {
+	struct kiocb iocb;
+	refcount_t ref;
+	struct kiocb *iocb_orig;
+};
+
+struct extfuse_ctx {
+	struct dir_context ctx;
+	u8 *addr;
+	size_t offset;
+};
+
+struct virtio_device_id;
+
+struct virtio_device;
+
+struct virtio_driver {
+	struct device_driver driver;
+	const struct virtio_device_id *id_table;
+	const unsigned int *feature_table;
+	unsigned int feature_table_size;
+	const unsigned int *feature_table_legacy;
+	unsigned int feature_table_size_legacy;
+	int (*validate)(struct virtio_device *);
+	int (*probe)(struct virtio_device *);
+	void (*scan)(struct virtio_device *);
+	void (*remove)(struct virtio_device *);
+	void (*config_changed)(struct virtio_device *);
+	int (*freeze)(struct virtio_device *);
+	int (*restore)(struct virtio_device *);
+};
+
+struct virtio_device_id {
+	__u32 device;
+	__u32 vendor;
+};
+
+struct vringh_config_ops;
+
+struct virtio_config_ops;
+
+struct virtio_device {
+	int index;
+	bool failed;
+	bool config_enabled;
+	bool config_change_pending;
+	spinlock_t config_lock;
+	spinlock_t vqs_list_lock;
+	struct device dev;
+	struct virtio_device_id id;
+	const struct virtio_config_ops *config;
+	const struct vringh_config_ops *vringh_config;
+	struct list_head vqs;
+	u64 features;
+	void *priv;
+};
+
+struct virtqueue;
+
+typedef void vq_callback_t(struct virtqueue *);
+
+struct virtio_shm_region;
+
+struct virtio_config_ops {
+	void (*get)(struct virtio_device *, unsigned int, void *, unsigned int);
+	void (*set)(struct virtio_device *, unsigned int, const void *, unsigned int);
+	u32 (*generation)(struct virtio_device *);
+	u8 (*get_status)(struct virtio_device *);
+	void (*set_status)(struct virtio_device *, u8);
+	void (*reset)(struct virtio_device *);
+	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity *);
+	void (*del_vqs)(struct virtio_device *);
+	void (*synchronize_cbs)(struct virtio_device *);
+	u64 (*get_features)(struct virtio_device *);
+	int (*finalize_features)(struct virtio_device *);
+	const char * (*bus_name)(struct virtio_device *);
+	int (*set_vq_affinity)(struct virtqueue *, const struct cpumask *);
+	const struct cpumask * (*get_vq_affinity)(struct virtio_device *, int);
+	bool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8);
+	int (*disable_vq_and_reset)(struct virtqueue *);
+	int (*enable_vq_after_reset)(struct virtqueue *);
+};
+
+struct virtqueue {
+	struct list_head list;
+	void (*callback)(struct virtqueue *);
+	const char *name;
+	struct virtio_device *vdev;
+	unsigned int index;
+	unsigned int num_free;
+	unsigned int num_max;
+	bool reset;
+	void *priv;
+};
+
+struct virtio_shm_region {
+	u64 addr;
+	u64 len;
+};
+
+enum {
+	OPT_DAX = 0,
+	OPT_DAX_ENUM = 1,
+};
+
+enum {
+	VQ_HIPRIO = 0,
+	VQ_REQUEST = 1,
+};
+
+struct virtio_fs_vq;
+
+struct virtio_fs {
+	struct kref refcount;
+	struct list_head list;
+	char *tag;
+	struct virtio_fs_vq *vqs;
+	unsigned int nvqs;
+	unsigned int num_request_queues;
+	struct dax_device *dax_dev;
+	void *window_kaddr;
+	phys_addr_t window_phys_addr;
+	size_t window_len;
+};
+
+struct virtio_fs_vq {
+	spinlock_t lock;
+	struct virtqueue *vq;
+	struct work_struct done_work;
+	struct list_head queued_reqs;
+	struct list_head end_reqs;
+	struct delayed_work dispatch_work;
+	struct fuse_dev *fud;
+	bool connected;
+	long in_flight;
+	struct completion in_flight_zero;
+	char name[24];
+	long: 64;
+};
+
+struct virtio_fs_req_work {
+	struct fuse_req *req;
+	struct virtio_fs_vq *fsvq;
+	struct work_struct done_work;
+};
+
+struct virtio_fs_forget_req {
+	struct fuse_in_header ih;
+	struct fuse_forget_in arg;
+};
+
+struct virtio_fs_forget {
+	struct list_head list;
+	struct virtio_fs_forget_req req;
+};
+
+enum {
+	OVL_XINO_OFF = 0,
+	OVL_XINO_AUTO = 1,
+	OVL_XINO_ON = 2,
+};
+
+enum {
+	OVL_UUID_OFF = 0,
+	OVL_UUID_NULL = 1,
+	OVL_UUID_AUTO = 2,
+	OVL_UUID_ON = 3,
+};
+
+enum ovl_path_type {
+	__OVL_PATH_UPPER = 1,
+	__OVL_PATH_MERGE = 2,
+	__OVL_PATH_ORIGIN = 4,
+};
+
+enum ovl_xattr {
+	OVL_XATTR_OPAQUE = 0,
+	OVL_XATTR_REDIRECT = 1,
+	OVL_XATTR_ORIGIN = 2,
+	OVL_XATTR_IMPURE = 3,
+	OVL_XATTR_NLINK = 4,
+	OVL_XATTR_UPPER = 5,
+	OVL_XATTR_UUID = 6,
+	OVL_XATTR_METACOPY = 7,
+	OVL_XATTR_PROTATTR = 8,
+};
+
+enum {
+	OVL_REDIRECT_OFF = 0,
+	OVL_REDIRECT_FOLLOW = 1,
+	OVL_REDIRECT_NOFOLLOW = 2,
+	OVL_REDIRECT_ON = 3,
+};
+
+enum ovl_inode_flag {
+	OVL_IMPURE = 0,
+	OVL_WHITEOUTS = 1,
+	OVL_INDEX = 2,
+	OVL_UPPERDATA = 3,
+	OVL_CONST_INO = 4,
+	OVL_HAS_DIGEST = 5,
+	OVL_VERIFIED_DIGEST = 6,
+};
+
+enum ovl_entry_flag {
+	OVL_E_UPPER_ALIAS = 0,
+	OVL_E_OPAQUE = 1,
+	OVL_E_CONNECTED = 2,
+};
+
+struct ovl_dir_cache;
+
+struct ovl_entry;
+
+struct ovl_inode {
+	union {
+		struct ovl_dir_cache *cache;
+		const char *lowerdata_redirect;
+	};
+	const char *redirect;
+	u64 version;
+	unsigned long flags;
+	struct inode vfs_inode;
+	struct dentry *__upperdentry;
+	struct ovl_entry *oe;
+	struct mutex lock;
+};
+
+struct ovl_layer;
+
+struct ovl_path {
+	const struct ovl_layer *layer;
+	struct dentry *dentry;
+};
+
+struct ovl_entry {
+	unsigned int __numlower;
+	struct ovl_path __lowerstack[0];
+};
+
+struct ovl_sb;
+
+struct ovl_layer {
+	struct vfsmount *mnt;
+	struct inode *trap;
+	struct ovl_sb *fs;
+	int idx;
+	int fsid;
+};
+
+struct ovl_sb {
+	struct super_block *sb;
+	dev_t pseudo_dev;
+	bool bad_uuid;
+	bool is_lower;
+};
+
+struct ovl_config {
+	char *upperdir;
+	char *workdir;
+	char **lowerdirs;
+	bool default_permissions;
+	int redirect_mode;
+	int verity_mode;
+	bool index;
+	int uuid;
+	bool nfs_export;
+	int xino;
+	bool metacopy;
+	bool userxattr;
+	bool ovl_volatile;
+	bool override_creds;
+};
+
+struct ovl_fs {
+	unsigned int numlayer;
+	unsigned int numfs;
+	unsigned int numdatalayer;
+	const struct ovl_layer *layers;
+	struct ovl_sb *fs;
+	struct dentry *workbasedir;
+	struct dentry *workdir;
+	struct dentry *indexdir;
+	long namelen;
+	struct ovl_config config;
+	const struct cred *creator_cred;
+	bool tmpfile;
+	bool noxattr;
+	bool nofh;
+	bool upperdir_locked;
+	bool workdir_locked;
+	struct inode *workbasedir_trap;
+	struct inode *workdir_trap;
+	struct inode *indexdir_trap;
+	int xino_mode;
+	atomic_long_t last_ino;
+	struct dentry *whiteout;
+	bool no_shared_whiteout;
+	errseq_t errseq;
+};
+
+struct ovl_opt_set {
+	bool metacopy;
+	bool redirect;
+	bool nfs_export;
+	bool index;
+};
+
+struct ovl_fs_context_layer;
+
+struct ovl_fs_context {
+	struct path upper;
+	struct path work;
+	size_t capacity;
+	size_t nr;
+	size_t nr_data;
+	struct ovl_opt_set set;
+	struct ovl_fs_context_layer *lower;
+	char *lowerdir_all;
+};
+
+struct ovl_fs_context_layer {
+	char *name;
+	struct path path;
+};
+
+struct ovl_cattr {
+	dev_t rdev;
+	umode_t mode;
+	const char *link;
+	struct dentry *hardlink;
+};
+
+struct ovl_inode_params {
+	struct inode *newinode;
+	struct dentry *upperdentry;
+	struct ovl_entry *oe;
+	bool index;
+	char *redirect;
+	char *lowerdata_redirect;
+};
+
+enum {
+	OVL_VERITY_OFF = 0,
+	OVL_VERITY_ON = 1,
+	OVL_VERITY_REQUIRE = 2,
+};
+
+struct ovl_fb {
+	u8 version;
+	u8 magic;
+	u8 len;
+	u8 flags;
+	u8 type;
+	uuid_t uuid;
+	u32 fid[0];
+} __attribute__((packed));
+
+struct ovl_fh {
+	u8 padding[3];
+	union {
+		struct ovl_fb fb;
+		struct {
+			struct {} __empty_buf;
+			u8 buf[0];
+		};
+	};
+};
+
+struct ovl_metacopy {
+	u8 version;
+	u8 len;
+	u8 flags;
+	u8 digest_algo;
+	u8 digest[64];
+};
+
+struct ovl_lookup_data {
+	struct super_block *sb;
+	struct vfsmount *mnt;
+	struct qstr name;
+	bool is_dir;
+	bool opaque;
+	bool stop;
+	bool last;
+	char *redirect;
+	int metacopy;
+	bool absolute_redirect;
+};
+
+enum ovl_copyop {
+	OVL_COPY = 0,
+	OVL_CLONE = 1,
+	OVL_DEDUPE = 2,
+};
+
+struct ovl_aio_req {
+	struct kiocb iocb;
+	refcount_t ref;
+	struct kiocb *orig_iocb;
+};
+
+struct ovl_cache_entry {
+	unsigned int len;
+	unsigned int type;
+	u64 real_ino;
+	u64 ino;
+	struct list_head l_node;
+	struct rb_node node;
+	struct ovl_cache_entry *next_maybe_whiteout;
+	bool is_upper;
+	bool is_whiteout;
+	char name[0];
+};
+
+struct ovl_dir_cache {
+	long refcount;
+	u64 version;
+	struct list_head entries;
+	struct rb_root root;
+};
+
+struct ovl_readdir_translate {
+	struct dir_context *orig_ctx;
+	struct ovl_dir_cache *cache;
+	struct dir_context ctx;
+	u64 parent_ino;
+	int fsid;
+	int xinobits;
+	bool xinowarn;
+};
+
+struct ovl_readdir_data {
+	struct dir_context ctx;
+	struct dentry *dentry;
+	bool is_lowest;
+	struct rb_root *root;
+	struct list_head *list;
+	struct list_head middle;
+	struct ovl_cache_entry *first_maybe_whiteout;
+	int count;
+	int err;
+	bool is_upper;
+	bool d_type_supported;
+};
+
+struct ovl_dir_file {
+	bool is_real;
+	bool is_upper;
+	struct ovl_dir_cache *cache;
+	struct list_head *cursor;
+	struct file *realfile;
+	struct file *upperfile;
+};
+
+struct ovl_copy_up_ctx {
+	struct dentry *parent;
+	struct dentry *dentry;
+	struct path lowerpath;
+	struct kstat stat;
+	struct kstat pstat;
+	const char *link;
+	struct dentry *destdir;
+	struct qstr destname;
+	struct dentry *workdir;
+	bool origin;
+	bool indexed;
+	bool metacopy;
+	bool metacopy_digest;
+};
+
+struct ovl_cu_creds {
+	const struct cred *old;
+	struct cred *new;
+};
+
+enum ovl_opt {
+	Opt_lowerdir = 0,
+	Opt_lowerdir_add = 1,
+	Opt_datadir_add = 2,
+	Opt_upperdir = 3,
+	Opt_workdir = 4,
+	Opt_default_permissions = 5,
+	Opt_redirect_dir = 6,
+	Opt_index = 7,
+	Opt_uuid = 8,
+	Opt_nfs_export = 9,
+	Opt_userxattr = 10,
+	Opt_xino = 11,
+	Opt_metacopy = 12,
+	Opt_verity = 13,
+	Opt_volatile = 14,
+	Opt_override_creds = 15,
+};
+
+enum LOG_RECORD_TYPE {
+	FULL___2 = 0,
+	SAME_FILE = 1,
+	SAME_FILE_CLOSE_BLOCK = 2,
+	SAME_FILE_CLOSE_BLOCK_SHORT = 3,
+	SAME_FILE_NEXT_BLOCK = 4,
+	SAME_FILE_NEXT_BLOCK_SHORT = 5,
+};
+
+enum incfs_hash_tree_algorithm {
+	INCFS_HASH_TREE_NONE = 0,
+	INCFS_HASH_TREE_SHA256 = 1,
+};
+
+enum incfs_file_header_flags {
+	INCFS_FILE_MAPPED = 2,
+};
+
+enum FILL_PERMISSION {
+	CANT_FILL = 0,
+	CAN_FILL = 1,
+};
+
+enum incfs_compression_alg {
+	COMPRESSION_NONE = 0,
+	COMPRESSION_LZ4 = 1,
+	COMPRESSION_ZSTD = 2,
+};
+
+enum incfs_block_map_entry_flags {
+	INCFS_BLOCK_COMPRESSED_LZ4 = 1,
+	INCFS_BLOCK_COMPRESSED_ZSTD = 2,
+	INCFS_BLOCK_COMPRESSED_MASK = 7,
+};
+
+enum incfs_block_flags {
+	INCFS_BLOCK_FLAGS_NONE = 0,
+	INCFS_BLOCK_FLAGS_HASH = 1,
+};
+
+typedef struct {
+	__u8 bytes[16];
+} incfs_uuid_t;
+
+struct pending_read {
+	incfs_uuid_t file_id;
+	s64 timestamp_us;
+	atomic_t done;
+	int block_index;
+	int serial_number;
+	uid_t uid;
+	struct list_head mi_reads_list;
+	struct list_head segment_reads_list;
+	struct callback_head rcu;
+};
+
+struct full_record {
+	enum LOG_RECORD_TYPE type: 3;
+	u32 block_index: 29;
+	incfs_uuid_t file_id;
+	u64 absolute_ts_us;
+	uid_t uid;
+} __attribute__((packed));
+
+struct read_log_state {
+	u32 generation_id;
+	u32 next_offset;
+	u32 current_pass_no;
+	struct full_record base_record;
+	u64 current_record_no;
+};
+
+struct read_log {
+	void *rl_ring_buf;
+	int rl_size;
+	struct read_log_state rl_head;
+	struct read_log_state rl_tail;
+	spinlock_t rl_lock;
+	wait_queue_head_t ml_notif_wq;
+	struct delayed_work ml_wakeup_work;
+};
+
+struct mount_options {
+	unsigned int read_timeout_ms;
+	unsigned int readahead_pages;
+	unsigned int read_log_pages;
+	unsigned int read_log_wakeup_count;
+	bool report_uid;
+	char *sysfs_name;
+};
+
+struct mem_range {
+	u8 *data;
+	size_t len;
+};
+
+struct incfs_per_uid_read_timeouts;
+
+struct ZSTD_DCtx_s;
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx;
+
+typedef ZSTD_DCtx ZSTD_DStream;
+
+struct incfs_sysfs_node;
+
+struct mount_info {
+	struct super_block *mi_sb;
+	struct path mi_backing_dir_path;
+	struct dentry *mi_index_dir;
+	bool mi_index_free;
+	struct dentry *mi_incomplete_dir;
+	bool mi_incomplete_free;
+	const struct cred *mi_owner;
+	struct mount_options mi_options;
+	struct mutex mi_dir_struct_mutex;
+	wait_queue_head_t mi_pending_reads_notif_wq;
+	spinlock_t pending_read_lock;
+	struct list_head mi_reads_list_head;
+	int mi_pending_reads_count;
+	int mi_last_pending_read_number;
+	struct read_log mi_log;
+	struct mem_range pseudo_file_xattr[3];
+	wait_queue_head_t mi_blocks_written_notif_wq;
+	atomic_t mi_blocks_written;
+	spinlock_t mi_per_uid_read_timeouts_lock;
+	struct incfs_per_uid_read_timeouts *mi_per_uid_read_timeouts;
+	int mi_per_uid_read_timeouts_size;
+	struct mutex mi_zstd_workspace_mutex;
+	void *mi_zstd_workspace;
+	ZSTD_DStream *mi_zstd_stream;
+	struct delayed_work mi_zstd_cleanup_work;
+	struct incfs_sysfs_node *mi_sysfs_node;
+	struct mutex mi_le_mutex;
+	incfs_uuid_t mi_le_file_id;
+	u64 mi_le_time_us;
+	u32 mi_le_page;
+	u32 mi_le_errno;
+	uid_t mi_le_uid;
+	u32 mi_reads_failed_timed_out;
+	u32 mi_reads_failed_hash_verification;
+	u32 mi_reads_failed_other;
+	u32 mi_reads_delayed_pending;
+	u64 mi_reads_delayed_pending_us;
+	u32 mi_reads_delayed_min;
+	u64 mi_reads_delayed_min_us;
+};
+
+struct incfs_per_uid_read_timeouts {
+	__u32 uid;
+	__u32 min_time_us;
+	__u32 min_pending_time_us;
+	__u32 max_pending_time_us;
+};
+
+typedef uint16_t U16;
+
+typedef uint8_t BYTE;
+
+typedef uint32_t U32;
+
+typedef struct {
+	U16 nextState;
+	BYTE nbAdditionalBits;
+	BYTE nbBits;
+	U32 baseValue;
+} ZSTD_seqSymbol;
+
+typedef U32 HUF_DTable;
+
+typedef struct {
+	ZSTD_seqSymbol LLTable[513];
+	ZSTD_seqSymbol OFTable[257];
+	ZSTD_seqSymbol MLTable[513];
+	HUF_DTable hufTable[4097];
+	U32 rep[3];
+	U32 workspace[157];
+} ZSTD_entropyDTables_t;
+
+typedef enum {
+	ZSTD_frame = 0,
+	ZSTD_skippableFrame = 1,
+} ZSTD_frameType_e;
+
+typedef struct {
+	unsigned long long frameContentSize;
+	unsigned long long windowSize;
+	unsigned int blockSizeMax;
+	ZSTD_frameType_e frameType;
+	unsigned int headerSize;
+	unsigned int dictID;
+	unsigned int checksumFlag;
+} ZSTD_frameHeader;
+
+typedef uint64_t U64;
+
+typedef enum {
+	bt_raw = 0,
+	bt_rle = 1,
+	bt_compressed = 2,
+	bt_reserved = 3,
+} blockType_e;
+
+typedef enum {
+	ZSTDds_getFrameHeaderSize = 0,
+	ZSTDds_decodeFrameHeader = 1,
+	ZSTDds_decodeBlockHeader = 2,
+	ZSTDds_decompressBlock = 3,
+	ZSTDds_decompressLastBlock = 4,
+	ZSTDds_checkChecksum = 5,
+	ZSTDds_decodeSkippableHeader = 6,
+	ZSTDds_skipFrame = 7,
+} ZSTD_dStage;
+
+struct xxh64_state {
+	uint64_t total_len;
+	uint64_t v1;
+	uint64_t v2;
+	uint64_t v3;
+	uint64_t v4;
+	uint64_t mem64[4];
+	uint32_t memsize;
+};
+
+typedef enum {
+	ZSTD_f_zstd1 = 0,
+	ZSTD_f_zstd1_magicless = 1,
+} ZSTD_format_e;
+
+typedef enum {
+	ZSTD_d_validateChecksum = 0,
+	ZSTD_d_ignoreChecksum = 1,
+} ZSTD_forceIgnoreChecksum_e;
+
+typedef void * (*ZSTD_allocFunction)(void *, size_t);
+
+typedef void (*ZSTD_freeFunction)(void *, void *);
+
+typedef struct {
+	ZSTD_allocFunction customAlloc;
+	ZSTD_freeFunction customFree;
+	void *opaque;
+} ZSTD_customMem;
+
+typedef enum {
+	ZSTD_use_indefinitely = -1,
+	ZSTD_dont_use = 0,
+	ZSTD_use_once = 1,
+} ZSTD_dictUses_e;
+
+struct ZSTD_DDict_s;
+
+typedef struct ZSTD_DDict_s ZSTD_DDict;
+
+typedef struct {
+	const ZSTD_DDict **ddictPtrTable;
+	size_t ddictPtrTableSize;
+	size_t ddictPtrCount;
+} ZSTD_DDictHashSet;
+
+typedef enum {
+	ZSTD_rmd_refSingleDDict = 0,
+	ZSTD_rmd_refMultipleDDicts = 1,
+} ZSTD_refMultipleDDicts_e;
+
+typedef enum {
+	zdss_init = 0,
+	zdss_loadHeader = 1,
+	zdss_read = 2,
+	zdss_load = 3,
+	zdss_flush = 4,
+} ZSTD_dStreamStage;
+
+typedef enum {
+	ZSTD_bm_buffered = 0,
+	ZSTD_bm_stable = 1,
+} ZSTD_bufferMode_e;
+
+struct ZSTD_outBuffer_s {
+	void *dst;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
+
+typedef enum {
+	ZSTD_not_in_dst = 0,
+	ZSTD_in_dst = 1,
+	ZSTD_split = 2,
+} ZSTD_litLocation_e;
+
+struct ZSTD_DCtx_s {
+	const ZSTD_seqSymbol *LLTptr;
+	const ZSTD_seqSymbol *MLTptr;
+	const ZSTD_seqSymbol *OFTptr;
+	const HUF_DTable *HUFptr;
+	ZSTD_entropyDTables_t entropy;
+	U32 workspace[640];
+	const void *previousDstEnd;
+	const void *prefixStart;
+	const void *virtualStart;
+	const void *dictEnd;
+	size_t expected;
+	ZSTD_frameHeader fParams;
+	U64 processedCSize;
+	U64 decodedSize;
+	blockType_e bType;
+	ZSTD_dStage stage;
+	U32 litEntropy;
+	U32 fseEntropy;
+	struct xxh64_state xxhState;
+	size_t headerSize;
+	ZSTD_format_e format;
+	ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum;
+	U32 validateChecksum;
+	const BYTE *litPtr;
+	ZSTD_customMem customMem;
+	size_t litSize;
+	size_t rleSize;
+	size_t staticSize;
+	ZSTD_DDict *ddictLocal;
+	const ZSTD_DDict *ddict;
+	U32 dictID;
+	int ddictIsCold;
+	ZSTD_dictUses_e dictUses;
+	ZSTD_DDictHashSet *ddictSet;
+	ZSTD_refMultipleDDicts_e refMultipleDDicts;
+	ZSTD_dStreamStage streamStage;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inPos;
+	size_t maxWindowSize;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outStart;
+	size_t outEnd;
+	size_t lhSize;
+	U32 hostageByte;
+	int noForwardProgress;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_outBuffer expectedOutBuffer;
+	BYTE *litBuffer;
+	const BYTE *litBufferEnd;
+	ZSTD_litLocation_e litBufferLocation;
+	BYTE litExtraBuffer[65568];
+	BYTE headerBuffer[18];
+	size_t oversizedDuration;
+};
+
+struct incfs_sysfs_node {
+	struct kobject isn_sysfs_node;
+	struct completion isn_completion;
+	struct mount_info *isn_mi;
+};
+
+struct data_file;
+
+struct inode_info {
+	struct mount_info *n_mount_info;
+	struct inode *n_backing_inode;
+	struct data_file *n_file;
+	struct inode n_vfs_inode;
+};
+
+struct data_file_segment {
+	wait_queue_head_t new_data_arrival_wq;
+	struct rw_semaphore rwsem;
+	struct list_head reads_list_head;
+};
+
+struct backing_file_context;
+
+struct mtree;
+
+struct incfs_df_signature;
+
+struct incfs_df_verity_signature;
+
+struct data_file {
+	struct backing_file_context *df_backing_file_context;
+	struct mount_info *df_mount_info;
+	incfs_uuid_t df_id;
+	struct data_file_segment df_segments[3];
+	loff_t df_metadata_off;
+	loff_t df_blockmap_off;
+	loff_t df_size;
+	u32 df_header_flags;
+	int df_data_block_count;
+	int df_total_block_count;
+	loff_t df_mapped_offset;
+	atomic_t df_data_blocks_written;
+	u32 df_initial_data_blocks_written;
+	atomic_t df_hash_blocks_written;
+	u32 df_initial_hash_blocks_written;
+	loff_t df_status_offset;
+	struct mutex df_enable_verity;
+	struct mtree *df_hash_tree;
+	struct incfs_df_signature *df_signature;
+	struct mem_range df_verity_file_digest;
+	struct incfs_df_verity_signature *df_verity_signature;
+};
+
+struct backing_file_context {
+	struct mutex bc_mutex;
+	struct file *bc_file;
+	loff_t bc_last_md_record_offset;
+	const struct cred *bc_cred;
+	bool bc_has_bad_block;
+};
+
+struct incfs_hash_alg;
+
+struct mtree {
+	struct incfs_hash_alg *alg;
+	u8 root_hash[32];
+	u32 hash_level_suboffset[8];
+	u32 hash_tree_area_size;
+	int depth;
+};
+
+struct incfs_hash_alg {
+	const char *name;
+	int digest_size;
+	enum incfs_hash_tree_algorithm id;
+	struct crypto_shash *shash;
+};
+
+struct incfs_df_signature {
+	u32 sig_size;
+	u64 sig_offset;
+	u32 hash_size;
+	u64 hash_offset;
+};
+
+struct incfs_df_verity_signature {
+	u32 size;
+	u64 offset;
+};
+
+struct same_file {
+	enum LOG_RECORD_TYPE type: 3;
+	u32 block_index: 29;
+	uid_t uid;
+	u16 relative_ts_us;
+} __attribute__((packed));
+
+struct same_file_close_block {
+	enum LOG_RECORD_TYPE type: 3;
+	u16 relative_ts_us: 13;
+	s16 block_index_delta;
+};
+
+struct same_file_close_block_short {
+	enum LOG_RECORD_TYPE type: 3;
+	u8 relative_ts_tens_us: 5;
+	s8 block_index_delta;
+} __attribute__((packed));
+
+struct same_file_next_block {
+	enum LOG_RECORD_TYPE type: 3;
+	u16 relative_ts_us: 13;
+} __attribute__((packed));
+
+struct same_file_next_block_short {
+	enum LOG_RECORD_TYPE type: 3;
+	u8 relative_ts_tens_us: 5;
+} __attribute__((packed));
+
+union log_record {
+	struct full_record full_record;
+	struct same_file same_file;
+	struct same_file_close_block same_file_close_block;
+	struct same_file_close_block_short same_file_close_block_short;
+	struct same_file_next_block same_file_next_block;
+	struct same_file_next_block_short same_file_next_block_short;
+};
+
+struct incfs_md_header {
+	__u8 h_md_entry_type;
+	__le16 h_record_size;
+	__le32 h_unused1;
+	__le64 h_next_md_offset;
+	__le64 h_unused2;
+} __attribute__((packed));
+
+struct incfs_blockmap {
+	struct incfs_md_header m_header;
+	__le64 m_base_offset;
+	__le32 m_block_count;
+} __attribute__((packed));
+
+struct incfs_file_signature {
+	struct incfs_md_header sg_header;
+	__le32 sg_sig_size;
+	__le64 sg_sig_offset;
+	__le32 sg_hash_tree_size;
+	__le64 sg_hash_tree_offset;
+} __attribute__((packed));
+
+struct incfs_status {
+	struct incfs_md_header is_header;
+	__le32 is_data_blocks_written;
+	__le32 is_hash_blocks_written;
+	__le32 is_dummy[6];
+} __attribute__((packed));
+
+struct incfs_file_verity_signature {
+	struct incfs_md_header vs_header;
+	__le32 vs_size;
+	__le64 vs_offset;
+} __attribute__((packed));
+
+struct metadata_handler {
+	loff_t md_record_offset;
+	loff_t md_prev_record_offset;
+	void *context;
+	union {
+		struct incfs_md_header md_header;
+		struct incfs_blockmap blockmap;
+		struct incfs_file_signature signature;
+		struct incfs_status status;
+		struct incfs_file_verity_signature verity_signature;
+	} md_buffer;
+	int (*handle_blockmap)(struct incfs_blockmap *, struct metadata_handler *);
+	int (*handle_signature)(struct incfs_file_signature *, struct metadata_handler *);
+	int (*handle_status)(struct incfs_status *, struct metadata_handler *);
+	int (*handle_verity_signature)(struct incfs_file_verity_signature *, struct metadata_handler *);
+};
+
+struct incfs_blockmap_entry {
+	__le32 me_data_offset_lo;
+	__le16 me_data_offset_hi;
+	__le16 me_data_size;
+	__le16 me_flags;
+} __attribute__((packed));
+
+struct data_file_block {
+	loff_t db_backing_file_data_offset;
+	size_t db_stored_size;
+	enum incfs_compression_alg db_comp_alg;
+};
+
+struct incfs_read_data_file_timeouts {
+	u32 min_time_us;
+	u32 min_pending_time_us;
+	u32 max_pending_time_us;
+};
+
+struct ZSTD_inBuffer_s {
+	const void *src;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
+
+typedef ZSTD_DStream zstd_dstream;
+
+typedef ZSTD_outBuffer zstd_out_buffer;
+
+typedef ZSTD_inBuffer zstd_in_buffer;
+
+struct dir_file {
+	struct mount_info *mount_info;
+	struct file *backing_dir;
+};
+
+struct incfs_file_data {
+	enum FILL_PERMISSION fd_fill_permission;
+	int fd_get_block_pos;
+	int fd_filled_data_blocks;
+	int fd_filled_hash_blocks;
+};
+
+struct incfs_get_filled_blocks_args {
+	__u64 range_buffer;
+	__u32 range_buffer_size;
+	__u32 start_index;
+	__u32 end_index;
+	__u32 total_blocks_out;
+	__u32 data_blocks_out;
+	__u32 range_buffer_size_out;
+	__u32 index_out;
+};
+
+struct incfs_filled_range {
+	__u32 begin;
+	__u32 end;
+};
+
+struct incfs_fill_block {
+	__u32 block_index;
+	__u32 data_len;
+	__u64 data;
+	__u8 compression;
+	__u8 flags;
+	__u16 reserved1;
+	__u32 reserved2;
+	__u64 reserved3;
+};
+
+struct incfs_pending_read_info {
+	incfs_uuid_t file_id;
+	__u64 timestamp_us;
+	__u32 block_index;
+	__u32 serial_number;
+};
+
+struct incfs_pending_read_info2 {
+	incfs_uuid_t file_id;
+	__u64 timestamp_us;
+	__u32 block_index;
+	__u32 serial_number;
+	__u32 uid;
+	__u32 reserved;
+};
+
+enum incfs_metadata_type {
+	INCFS_MD_NONE = 0,
+	INCFS_MD_BLOCK_MAP = 1,
+	INCFS_MD_FILE_ATTR = 2,
+	INCFS_MD_SIGNATURE = 3,
+	INCFS_MD_STATUS = 4,
+	INCFS_MD_VERITY_SIGNATURE = 5,
+};
+
+struct incfs_file_header {
+	__le64 fh_magic;
+	__le64 fh_version;
+	__le16 fh_header_size;
+	__le16 fh_data_block_size;
+	__le32 fh_flags;
+	union {
+		struct {
+			__le64 fh_first_md_offset;
+			__le64 fh_file_size;
+			incfs_uuid_t fh_uuid;
+		};
+		struct {
+			__le64 fh_original_offset;
+			__le64 fh_mapped_file_size;
+			incfs_uuid_t fh_original_uuid;
+		};
+	};
+};
+
+struct signature_info {
+	u32 version;
+	enum incfs_hash_tree_algorithm hash_algorithm;
+	u8 log2_blocksize;
+	struct mem_range salt;
+	struct mem_range root_hash;
+};
+
+struct inode_search {
+	unsigned long ino;
+};
+
+struct incfs_new_file_args {
+	incfs_uuid_t file_id;
+	__u64 size;
+	__u16 mode;
+	__u16 reserved1;
+	__u32 reserved2;
+	__u64 directory_path;
+	__u64 file_name;
+	__u64 file_attr;
+	__u32 file_attr_len;
+	__u32 reserved4;
+	__u64 signature_info;
+	__u64 signature_size;
+	__u64 reserved6;
+};
+
+struct incfs_get_last_read_error_args {
+	incfs_uuid_t file_id_out;
+	__u64 time_us_out;
+	__u32 page_out;
+	__u32 errno_out;
+	__u32 uid_out;
+	__u32 reserved1;
+	__u64 reserved2;
+};
+
+struct incfs_get_read_timeouts_args {
+	__u64 timeouts_array;
+	__u32 timeouts_array_size;
+	__u32 timeouts_array_size_out;
+};
+
+struct incfs_permit_fill {
+	__u32 file_descriptor;
+};
+
+struct incfs_create_mapped_file_args {
+	__u64 size;
+	__u16 mode;
+	__u16 reserved1;
+	__u32 reserved2;
+	__u64 directory_path;
+	__u64 file_name;
+	incfs_uuid_t source_file_id;
+	__u64 source_offset;
+};
+
+struct incfs_set_read_timeouts_args {
+	__u64 timeouts_array;
+	__u32 timeouts_array_size;
+};
+
+struct pending_reads_state {
+	int last_pending_read_sn;
+};
+
+struct log_file_state {
+	struct read_log_state state;
+};
+
+struct blocks_written_file_state {
+	unsigned long blocks_written;
+};
+
+enum parse_parameter {
+	Opt_read_timeout = 0,
+	Opt_readahead_pages = 1,
+	Opt_rlog_pages = 2,
+	Opt_rlog_wakeup_cnt = 3,
+	Opt_report_uid = 4,
+	Opt_sysfs_name = 5,
+	Opt_err___4 = 6,
+};
+
+struct dentry_info {
+	struct path backing_path;
+};
+
+struct incfs_get_file_sig_args {
+	__u64 file_signature;
+	__u32 file_signature_buf_size;
+	__u32 file_signature_len_out;
+};
+
+struct incfs_get_block_count_args {
+	__u32 total_data_blocks_out;
+	__u32 filled_data_blocks_out;
+	__u32 total_hash_blocks_out;
+	__u32 filled_hash_blocks_out;
+};
+
+struct incfs_fill_blocks {
+	__u64 count;
+	__u64 fill_blocks;
+};
+
+struct inode_search___2 {
+	unsigned long ino;
+	struct dentry *backing_dentry;
+	size_t size;
+	bool verity;
+};
+
+enum {
+	Opt_uid___5 = 0,
+	Opt_gid___6 = 1,
+	Opt_mode___4 = 2,
+	Opt_err___5 = 3,
+};
+
+struct debugfs_fsdata {
+	const struct file_operations *real_fops;
+	union {
+		debugfs_automount_t automount;
+		struct {
+			refcount_t active_users;
+			struct completion active_users_drained;
+		};
+	};
+};
+
+struct debugfs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	unsigned int opts;
+};
+
+struct debugfs_fs_info {
+	struct debugfs_mount_opts mount_opts;
+};
+
+struct debugfs_reg32 {
+	char *name;
+	unsigned long offset;
+};
+
+struct debugfs_blob_wrapper {
+	void *data;
+	unsigned long size;
+};
+
+struct debugfs_regset32 {
+	const struct debugfs_reg32 *regs;
+	int nregs;
+	void *base;
+	struct device *dev;
+};
+
+struct debugfs_devm_entry {
+	int (*read)(struct seq_file *, void *);
+	struct device *dev;
+};
+
+struct tracefs_dir_ops {
+	int (*mkdir)(const char *);
+	int (*rmdir)(const char *);
+};
+
+enum {
+	TRACEFS_EVENT_INODE = 2,
+	TRACEFS_EVENT_TOP_INODE = 4,
+	TRACEFS_GID_PERM_SET = 8,
+	TRACEFS_UID_PERM_SET = 16,
+	TRACEFS_INSTANCE_INODE = 32,
+};
+
+struct tracefs_inode {
+	struct inode vfs_inode;
+	unsigned long flags;
+	void *private;
+};
+
+struct tracefs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	unsigned int opts;
+};
+
+struct tracefs_fs_info {
+	struct tracefs_mount_opts mount_opts;
+};
+
+struct eventfs_attr {
+	int mode;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct eventfs_inode {
+	union {
+		struct list_head list;
+		struct callback_head rcu;
+	};
+	struct list_head children;
+	const struct eventfs_entry *entries;
+	const char *name;
+	struct dentry *events_dir;
+	struct eventfs_attr *entry_attrs;
+	void *data;
+	struct eventfs_attr attr;
+	struct kref kref;
+	unsigned int is_freed: 1;
+	unsigned int is_events: 1;
+	unsigned int nr_entries: 30;
+	unsigned int ino;
+};
+
+enum {
+	EVENTFS_SAVE_MODE = 65536,
+	EVENTFS_SAVE_UID = 131072,
+	EVENTFS_SAVE_GID = 262144,
+	EVENTFS_TOPLEVEL = 524288,
+};
+
+typedef __le32 f2fs_hash_t;
+
+enum page_type {
+	DATA = 0,
+	NODE = 1,
+	META = 2,
+	NR_PAGE_TYPE = 3,
+	META_FLUSH = 4,
+	IPU = 5,
+	OPU = 6,
+};
+
+enum temp_type {
+	HOT = 0,
+	WARM = 1,
+	COLD = 2,
+	NR_TEMP_TYPE = 3,
+};
+
+enum iostat_type {
+	APP_DIRECT_IO = 0,
+	APP_BUFFERED_IO = 1,
+	APP_WRITE_IO = 2,
+	APP_MAPPED_IO = 3,
+	APP_BUFFERED_CDATA_IO = 4,
+	APP_MAPPED_CDATA_IO = 5,
+	FS_DATA_IO = 6,
+	FS_CDATA_IO = 7,
+	FS_NODE_IO = 8,
+	FS_META_IO = 9,
+	FS_GC_DATA_IO = 10,
+	FS_GC_NODE_IO = 11,
+	FS_CP_DATA_IO = 12,
+	FS_CP_NODE_IO = 13,
+	FS_CP_META_IO = 14,
+	APP_DIRECT_READ_IO = 15,
+	APP_BUFFERED_READ_IO = 16,
+	APP_READ_IO = 17,
+	APP_MAPPED_READ_IO = 18,
+	APP_BUFFERED_CDATA_READ_IO = 19,
+	APP_MAPPED_CDATA_READ_IO = 20,
+	FS_DATA_READ_IO = 21,
+	FS_GDATA_READ_IO = 22,
+	FS_CDATA_READ_IO = 23,
+	FS_NODE_READ_IO = 24,
+	FS_META_READ_IO = 25,
+	FS_DISCARD_IO = 26,
+	FS_FLUSH_IO = 27,
+	FS_ZONE_RESET_IO = 28,
+	NR_IO_TYPE = 29,
+};
+
+enum {
+	FI_NEW_INODE = 0,
+	FI_DIRTY_INODE = 1,
+	FI_AUTO_RECOVER = 2,
+	FI_DIRTY_DIR = 3,
+	FI_INC_LINK = 4,
+	FI_ACL_MODE = 5,
+	FI_NO_ALLOC = 6,
+	FI_FREE_NID = 7,
+	FI_NO_EXTENT = 8,
+	FI_INLINE_XATTR = 9,
+	FI_INLINE_DATA = 10,
+	FI_INLINE_DENTRY = 11,
+	FI_APPEND_WRITE = 12,
+	FI_UPDATE_WRITE = 13,
+	FI_NEED_IPU = 14,
+	FI_ATOMIC_FILE = 15,
+	FI_DATA_EXIST = 16,
+	FI_INLINE_DOTS = 17,
+	FI_SKIP_WRITES = 18,
+	FI_OPU_WRITE = 19,
+	FI_DIRTY_FILE = 20,
+	FI_PREALLOCATED_ALL = 21,
+	FI_HOT_DATA = 22,
+	FI_EXTRA_ATTR = 23,
+	FI_PROJ_INHERIT = 24,
+	FI_PIN_FILE = 25,
+	FI_VERITY_IN_PROGRESS = 26,
+	FI_COMPRESSED_FILE = 27,
+	FI_COMPRESS_CORRUPT = 28,
+	FI_MMAP_FILE = 29,
+	FI_ENABLE_COMPRESS = 30,
+	FI_COMPRESS_RELEASED = 31,
+	FI_ALIGNED_WRITE = 32,
+	FI_COW_FILE = 33,
+	FI_ATOMIC_COMMITTED = 34,
+	FI_ATOMIC_REPLACE = 35,
+	FI_OPENED_FILE = 36,
+	FI_MAX = 37,
+};
+
+enum {
+	FAULT_KMALLOC = 0,
+	FAULT_KVMALLOC = 1,
+	FAULT_PAGE_ALLOC = 2,
+	FAULT_PAGE_GET = 3,
+	FAULT_ALLOC_BIO = 4,
+	FAULT_ALLOC_NID = 5,
+	FAULT_ORPHAN = 6,
+	FAULT_BLOCK = 7,
+	FAULT_DIR_DEPTH = 8,
+	FAULT_EVICT_INODE = 9,
+	FAULT_TRUNCATE = 10,
+	FAULT_READ_IO = 11,
+	FAULT_CHECKPOINT = 12,
+	FAULT_DISCARD = 13,
+	FAULT_WRITE_IO = 14,
+	FAULT_SLAB_ALLOC = 15,
+	FAULT_DQUOT_INIT = 16,
+	FAULT_LOCK_OP = 17,
+	FAULT_BLKADDR_VALIDITY = 18,
+	FAULT_BLKADDR_CONSISTENCE = 19,
+	FAULT_NO_SEGMENT = 20,
+	FAULT_MAX = 21,
+};
+
+enum {
+	CP_TIME = 0,
+	REQ_TIME = 1,
+	DISCARD_TIME = 2,
+	GC_TIME = 3,
+	DISABLE_TIME = 4,
+	UMOUNT_DISCARD_TIMEOUT = 5,
+	MAX_TIME = 6,
+};
+
+enum fsync_mode {
+	FSYNC_MODE_POSIX = 0,
+	FSYNC_MODE_STRICT = 1,
+	FSYNC_MODE_NOBARRIER = 2,
+};
+
+enum {
+	ORPHAN_INO = 0,
+	APPEND_INO = 1,
+	UPDATE_INO = 2,
+	TRANS_DIR_INO = 3,
+	FLUSH_INO = 4,
+	MAX_INO_ENTRY = 5,
+};
+
+enum {
+	SBI_IS_DIRTY = 0,
+	SBI_IS_CLOSE = 1,
+	SBI_NEED_FSCK = 2,
+	SBI_POR_DOING = 3,
+	SBI_NEED_SB_WRITE = 4,
+	SBI_NEED_CP = 5,
+	SBI_IS_SHUTDOWN = 6,
+	SBI_IS_RECOVERED = 7,
+	SBI_CP_DISABLED = 8,
+	SBI_CP_DISABLED_QUICK = 9,
+	SBI_QUOTA_NEED_FLUSH = 10,
+	SBI_QUOTA_SKIP_FLUSH = 11,
+	SBI_QUOTA_NEED_REPAIR = 12,
+	SBI_IS_RESIZEFS = 13,
+	SBI_IS_FREEZING = 14,
+	SBI_IS_WRITABLE = 15,
+	MAX_SBI_FLAG = 16,
+};
+
+enum f2fs_error {
+	ERROR_CORRUPTED_CLUSTER = 0,
+	ERROR_FAIL_DECOMPRESSION = 1,
+	ERROR_INVALID_BLKADDR = 2,
+	ERROR_CORRUPTED_DIRENT = 3,
+	ERROR_CORRUPTED_INODE = 4,
+	ERROR_INCONSISTENT_SUMMARY = 5,
+	ERROR_INCONSISTENT_FOOTER = 6,
+	ERROR_INCONSISTENT_SUM_TYPE = 7,
+	ERROR_CORRUPTED_JOURNAL = 8,
+	ERROR_INCONSISTENT_NODE_COUNT = 9,
+	ERROR_INCONSISTENT_BLOCK_COUNT = 10,
+	ERROR_INVALID_CURSEG = 11,
+	ERROR_INCONSISTENT_SIT = 12,
+	ERROR_CORRUPTED_VERITY_XATTR = 13,
+	ERROR_CORRUPTED_XATTR = 14,
+	ERROR_INVALID_NODE_REFERENCE = 15,
+	ERROR_INCONSISTENT_NAT = 16,
+	ERROR_MAX = 17,
+};
+
+enum extent_type {
+	EX_READ = 0,
+	EX_BLOCK_AGE = 1,
+	NR_EXTENT_CACHES = 2,
+};
+
+enum {
+	PAGE_PRIVATE_NOT_POINTER = 0,
+	PAGE_PRIVATE_ONGOING_MIGRATION = 1,
+	PAGE_PRIVATE_INLINE_INODE = 2,
+	PAGE_PRIVATE_REF_RESOURCE = 3,
+	PAGE_PRIVATE_MAX = 4,
+};
+
+enum count_type {
+	F2FS_DIRTY_DENTS = 0,
+	F2FS_DIRTY_DATA = 1,
+	F2FS_DIRTY_QDATA = 2,
+	F2FS_DIRTY_NODES = 3,
+	F2FS_DIRTY_META = 4,
+	F2FS_DIRTY_IMETA = 5,
+	F2FS_WB_CP_DATA = 6,
+	F2FS_WB_DATA = 7,
+	F2FS_RD_DATA = 8,
+	F2FS_RD_NODE = 9,
+	F2FS_RD_META = 10,
+	F2FS_DIO_WRITE = 11,
+	F2FS_DIO_READ = 12,
+	NR_COUNT_TYPE = 13,
+};
+
+struct f2fs_rwsem {
+	struct rw_semaphore internal_rwsem;
+	wait_queue_head_t read_waiters;
+};
+
+typedef u32 nid_t;
+
+struct extent_tree;
+
+struct f2fs_inode_info {
+	struct inode vfs_inode;
+	unsigned long i_flags;
+	unsigned char i_advise;
+	unsigned char i_dir_level;
+	union {
+		unsigned int i_current_depth;
+		unsigned short i_gc_failures;
+	};
+	unsigned int i_pino;
+	umode_t i_acl_mode;
+	unsigned long flags[1];
+	struct f2fs_rwsem i_sem;
+	atomic_t dirty_pages;
+	f2fs_hash_t chash;
+	unsigned int clevel;
+	struct task_struct *task;
+	struct task_struct *cp_task;
+	struct task_struct *wb_task;
+	nid_t i_xattr_nid;
+	loff_t last_disk_size;
+	spinlock_t i_size_lock;
+	struct dquot __attribute__((btf_type_tag("rcu"))) *i_dquot[3];
+	qsize_t i_reserved_quota;
+	struct list_head dirty_list;
+	struct list_head gdirty_list;
+	struct task_struct *atomic_write_task;
+	struct extent_tree *extent_tree[2];
+	union {
+		struct inode *cow_inode;
+		struct inode *atomic_inode;
+	};
+	struct f2fs_rwsem i_gc_rwsem[2];
+	struct f2fs_rwsem i_xattr_sem;
+	int i_extra_isize;
+	kprojid_t i_projid;
+	int i_inline_xattr_size;
+	struct timespec64 i_crtime;
+	struct timespec64 i_disk_time[3];
+	atomic_t i_compr_blocks;
+	unsigned char i_compress_algorithm;
+	unsigned char i_log_cluster_size;
+	unsigned char i_compress_level;
+	unsigned char i_compress_flag;
+	unsigned int i_cluster_size;
+	unsigned int atomic_write_cnt;
+	loff_t original_i_size;
+};
+
+typedef u32 block_t;
+
+struct extent_info {
+	unsigned int fofs;
+	unsigned int len;
+	union {
+		struct {
+			block_t blk;
+			unsigned int c_len;
+		};
+		struct {
+			unsigned long long age;
+			unsigned long long last_blocks;
+		};
+	};
+};
+
+struct extent_node;
+
+struct extent_tree {
+	nid_t ino;
+	enum extent_type type;
+	struct rb_root_cached root;
+	struct extent_node *cached_en;
+	struct list_head list;
+	rwlock_t lock;
+	atomic_t node_cnt;
+	bool largest_updated;
+	struct extent_info largest;
+};
+
+struct extent_node {
+	struct rb_node rb_node;
+	struct extent_info ei;
+	struct list_head list;
+	struct extent_tree *et;
+};
+
+struct f2fs_dir_entry {
+	__le32 hash_code;
+	__le32 ino;
+	__le16 name_len;
+	__u8 file_type;
+} __attribute__((packed));
+
+struct f2fs_dentry_block {
+	__u8 dentry_bitmap[27];
+	__u8 reserved[3];
+	struct f2fs_dir_entry dentry[214];
+	__u8 filename[1712];
+};
+
+struct f2fs_extent {
+	__le32 fofs;
+	__le32 blk;
+	__le32 len;
+};
+
+struct f2fs_inode {
+	__le16 i_mode;
+	__u8 i_advise;
+	__u8 i_inline;
+	__le32 i_uid;
+	__le32 i_gid;
+	__le32 i_links;
+	__le64 i_size;
+	__le64 i_blocks;
+	__le64 i_atime;
+	__le64 i_ctime;
+	__le64 i_mtime;
+	__le32 i_atime_nsec;
+	__le32 i_ctime_nsec;
+	__le32 i_mtime_nsec;
+	__le32 i_generation;
+	union {
+		__le32 i_current_depth;
+		__le16 i_gc_failures;
+	};
+	__le32 i_xattr_nid;
+	__le32 i_flags;
+	__le32 i_pino;
+	__le32 i_namelen;
+	__u8 i_name[255];
+	__u8 i_dir_level;
+	struct f2fs_extent i_ext;
+	union {
+		struct {
+			__le16 i_extra_isize;
+			__le16 i_inline_xattr_size;
+			__le32 i_projid;
+			__le32 i_inode_checksum;
+			__le64 i_crtime;
+			__le32 i_crtime_nsec;
+			__le64 i_compr_blocks;
+			__u8 i_compress_algorithm;
+			__u8 i_log_cluster_size;
+			__le16 i_compress_flag;
+			__le32 i_extra_end[0];
+		} __attribute__((packed));
+		__le32 i_addr[923];
+	};
+	__le32 i_nid[5];
+};
+
+struct direct_node {
+	__le32 addr[1018];
+};
+
+struct indirect_node {
+	__le32 nid[1018];
+};
+
+struct node_footer {
+	__le32 nid;
+	__le32 ino;
+	__le32 flag;
+	__le64 cp_ver;
+	__le32 next_blkaddr;
+} __attribute__((packed));
+
+struct f2fs_node {
+	union {
+		struct f2fs_inode i;
+		struct direct_node dn;
+		struct indirect_node in;
+	};
+	struct node_footer footer;
+};
+
+struct ckpt_req_control {
+	struct task_struct *f2fs_issue_ckpt;
+	int ckpt_thread_ioprio;
+	wait_queue_head_t ckpt_wait_queue;
+	atomic_t issued_ckpt;
+	atomic_t total_ckpt;
+	atomic_t queued_ckpt;
+	struct llist_head issue_list;
+	spinlock_t stat_lock;
+	unsigned int cur_time;
+	unsigned int peak_time;
+};
+
+struct inode_management {
+	struct xarray ino_root;
+	spinlock_t ino_lock;
+	struct list_head ino_list;
+	unsigned long ino_num;
+};
+
+struct extent_tree_info {
+	struct xarray extent_tree_root;
+	struct mutex extent_tree_lock;
+	struct list_head extent_list;
+	spinlock_t extent_lock;
+	atomic_t total_ext_tree;
+	struct list_head zombie_list;
+	atomic_t total_zombie_tree;
+	atomic_t total_ext_node;
+};
+
+struct f2fs_mount_info {
+	unsigned int opt;
+	block_t root_reserved_blocks;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	int active_logs;
+	int inline_xattr_size;
+	char *s_qf_names[3];
+	int s_jquota_fmt;
+	int alloc_mode;
+	int fsync_mode;
+	int fs_mode;
+	int bggc_mode;
+	int memory_mode;
+	int errors;
+	int discard_unit;
+	struct fscrypt_dummy_policy dummy_enc_policy;
+	block_t unusable_cap_perc;
+	block_t unusable_cap;
+	unsigned char compress_algorithm;
+	unsigned char compress_log_size;
+	unsigned char compress_level;
+	bool compress_chksum;
+	unsigned char compress_ext_cnt;
+	unsigned char nocompress_ext_cnt;
+	int compress_mode;
+	unsigned char extensions[128];
+	unsigned char noextensions[128];
+};
+
+struct atgc_management {
+	bool atgc_enabled;
+	struct rb_root_cached root;
+	struct list_head victim_list;
+	unsigned int victim_count;
+	unsigned int candidate_ratio;
+	unsigned int max_candidate_count;
+	unsigned int age_weight;
+	unsigned long long age_threshold;
+};
+
+struct f2fs_super_block;
+
+struct f2fs_nm_info;
+
+struct f2fs_sm_info;
+
+struct f2fs_bio_info;
+
+struct f2fs_checkpoint;
+
+struct f2fs_gc_kthread;
+
+struct f2fs_stat_info;
+
+struct f2fs_dev_info;
+
+struct iostat_lat_info;
+
+struct f2fs_sb_info {
+	struct super_block *sb;
+	struct proc_dir_entry *s_proc;
+	struct f2fs_super_block *raw_super;
+	struct f2fs_rwsem sb_lock;
+	int valid_super_block;
+	unsigned long s_flag;
+	struct mutex writepages;
+	unsigned int blocks_per_blkz;
+	unsigned int max_open_zones;
+	struct f2fs_nm_info *nm_info;
+	struct inode *node_inode;
+	struct f2fs_sm_info *sm_info;
+	struct f2fs_bio_info *write_io[3];
+	struct f2fs_rwsem io_order_lock;
+	unsigned long page_eio_ofs[3];
+	int page_eio_cnt[3];
+	struct f2fs_checkpoint *ckpt;
+	int cur_cp_pack;
+	spinlock_t cp_lock;
+	struct inode *meta_inode;
+	struct f2fs_rwsem cp_global_sem;
+	struct f2fs_rwsem cp_rwsem;
+	struct f2fs_rwsem node_write;
+	struct f2fs_rwsem node_change;
+	wait_queue_head_t cp_wait;
+	unsigned long last_time[6];
+	long interval_time[6];
+	struct ckpt_req_control cprc_info;
+	struct inode_management im[5];
+	spinlock_t fsync_node_lock;
+	struct list_head fsync_node_list;
+	unsigned int fsync_seg_id;
+	unsigned int fsync_node_num;
+	unsigned int max_orphans;
+	struct list_head inode_list[3];
+	spinlock_t inode_lock[3];
+	struct mutex flush_lock;
+	struct extent_tree_info extent_tree[2];
+	atomic64_t allocated_data_blocks;
+	unsigned int hot_data_age_threshold;
+	unsigned int warm_data_age_threshold;
+	unsigned int last_age_weight;
+	unsigned int log_sectors_per_block;
+	unsigned int log_blocksize;
+	unsigned int blocksize;
+	unsigned int root_ino_num;
+	unsigned int node_ino_num;
+	unsigned int meta_ino_num;
+	unsigned int log_blocks_per_seg;
+	unsigned int blocks_per_seg;
+	unsigned int unusable_blocks_per_sec;
+	unsigned int segs_per_sec;
+	unsigned int secs_per_zone;
+	unsigned int total_sections;
+	unsigned int total_node_count;
+	unsigned int total_valid_node_count;
+	int dir_level;
+	bool readdir_ra;
+	u64 max_io_bytes;
+	block_t user_block_count;
+	block_t total_valid_block_count;
+	block_t discard_blks;
+	block_t last_valid_block_count;
+	block_t reserved_blocks;
+	block_t current_reserved_blocks;
+	block_t unusable_block_count;
+	unsigned int nquota_files;
+	struct f2fs_rwsem quota_sem;
+	atomic_t nr_pages[13];
+	struct percpu_counter alloc_valid_block_count;
+	struct percpu_counter rf_node_block_count;
+	atomic_t wb_sync_req[2];
+	struct percpu_counter total_valid_inode_count;
+	struct f2fs_mount_info mount_opt;
+	struct f2fs_rwsem gc_lock;
+	struct f2fs_gc_kthread *gc_thread;
+	struct atgc_management am;
+	unsigned int cur_victim_sec;
+	unsigned int gc_mode;
+	unsigned int next_victim_seg[2];
+	spinlock_t gc_remaining_trials_lock;
+	unsigned int gc_remaining_trials;
+	unsigned long long skipped_gc_rwsem;
+	unsigned short gc_pin_file_threshold;
+	struct f2fs_rwsem pin_sem;
+	unsigned int max_victim_search;
+	unsigned int migration_granularity;
+	struct f2fs_stat_info *stat_info;
+	atomic_t meta_count[4];
+	unsigned int segment_count[2];
+	unsigned int block_count[2];
+	atomic_t inplace_count;
+	atomic64_t total_hit_ext[2];
+	atomic64_t read_hit_rbtree[2];
+	atomic64_t read_hit_cached[2];
+	atomic64_t read_hit_largest;
+	atomic_t inline_xattr;
+	atomic_t inline_inode;
+	atomic_t inline_dir;
+	atomic_t compr_inode;
+	atomic64_t compr_blocks;
+	atomic_t swapfile_inode;
+	atomic_t atomic_files;
+	atomic_t max_aw_cnt;
+	unsigned int io_skip_bggc;
+	unsigned int other_skip_bggc;
+	unsigned int ndirty_inode[3];
+	atomic_t cp_call_count[2];
+	spinlock_t stat_lock;
+	unsigned int data_io_flag;
+	unsigned int node_io_flag;
+	struct kobject s_kobj;
+	struct completion s_kobj_unregister;
+	struct kobject s_stat_kobj;
+	struct completion s_stat_kobj_unregister;
+	struct kobject s_feature_list_kobj;
+	struct completion s_feature_list_kobj_unregister;
+	struct list_head s_list;
+	struct mutex umount_mutex;
+	unsigned int shrinker_run_no;
+	int s_ndevs;
+	struct f2fs_dev_info *devs;
+	unsigned int dirty_device;
+	spinlock_t dev_lock;
+	bool aligned_blksize;
+	u64 sectors_written_start;
+	u64 kbytes_written;
+	struct crypto_shash *s_chksum_driver;
+	__u32 s_chksum_seed;
+	struct workqueue_struct *post_read_wq;
+	struct work_struct s_error_work;
+	unsigned char errors[16];
+	unsigned char stop_reason[32];
+	spinlock_t error_lock;
+	bool error_dirty;
+	struct kmem_cache *inline_xattr_slab;
+	unsigned int inline_xattr_slab_size;
+	unsigned int gc_segment_mode;
+	unsigned int gc_reclaimed_segs[7];
+	unsigned long seq_file_ra_mul;
+	int max_fragment_chunk;
+	int max_fragment_hole;
+	atomic64_t current_atomic_write;
+	s64 peak_atomic_write;
+	u64 committed_atomic_block;
+	u64 revoked_atomic_block;
+	struct kmem_cache *page_array_slab;
+	unsigned int page_array_slab_size;
+	u64 compr_written_block;
+	u64 compr_saved_block;
+	u32 compr_new_inode;
+	struct inode *compress_inode;
+	unsigned int compress_percent;
+	unsigned int compress_watermark;
+	atomic_t compress_page_hit;
+	spinlock_t iostat_lock;
+	unsigned long long iostat_count[29];
+	unsigned long long iostat_bytes[29];
+	unsigned long long prev_iostat_bytes[29];
+	bool iostat_enable;
+	unsigned long iostat_next_period;
+	unsigned int iostat_period_ms;
+	spinlock_t iostat_lat_lock;
+	struct iostat_lat_info *iostat_io_lat;
+};
+
+struct f2fs_device {
+	__u8 path[64];
+	__le32 total_segments;
+};
+
+struct f2fs_super_block {
+	__le32 magic;
+	__le16 major_ver;
+	__le16 minor_ver;
+	__le32 log_sectorsize;
+	__le32 log_sectors_per_block;
+	__le32 log_blocksize;
+	__le32 log_blocks_per_seg;
+	__le32 segs_per_sec;
+	__le32 secs_per_zone;
+	__le32 checksum_offset;
+	__le64 block_count;
+	__le32 section_count;
+	__le32 segment_count;
+	__le32 segment_count_ckpt;
+	__le32 segment_count_sit;
+	__le32 segment_count_nat;
+	__le32 segment_count_ssa;
+	__le32 segment_count_main;
+	__le32 segment0_blkaddr;
+	__le32 cp_blkaddr;
+	__le32 sit_blkaddr;
+	__le32 nat_blkaddr;
+	__le32 ssa_blkaddr;
+	__le32 main_blkaddr;
+	__le32 root_ino;
+	__le32 node_ino;
+	__le32 meta_ino;
+	__u8 uuid[16];
+	__le16 volume_name[512];
+	__le32 extension_count;
+	__u8 extension_list[512];
+	__le32 cp_payload;
+	__u8 version[256];
+	__u8 init_version[256];
+	__le32 feature;
+	__u8 encryption_level;
+	__u8 encrypt_pw_salt[16];
+	struct f2fs_device devs[8];
+	__le32 qf_ino[3];
+	__u8 hot_ext_count;
+	__le16 s_encoding;
+	__le16 s_encoding_flags;
+	__u8 s_stop_reason[32];
+	__u8 s_errors[16];
+	__u8 reserved[258];
+	__le32 crc;
+} __attribute__((packed));
+
+struct f2fs_nm_info {
+	block_t nat_blkaddr;
+	nid_t max_nid;
+	nid_t available_nids;
+	nid_t next_scan_nid;
+	nid_t max_rf_node_blocks;
+	unsigned int ram_thresh;
+	unsigned int ra_nid_pages;
+	unsigned int dirty_nats_ratio;
+	struct xarray nat_root;
+	struct xarray nat_set_root;
+	struct f2fs_rwsem nat_tree_lock;
+	struct list_head nat_entries;
+	spinlock_t nat_list_lock;
+	unsigned int nat_cnt[3];
+	unsigned int nat_blocks;
+	struct xarray free_nid_root;
+	struct list_head free_nid_list;
+	unsigned int nid_cnt[2];
+	spinlock_t nid_list_lock;
+	struct mutex build_lock;
+	unsigned char **free_nid_bitmap;
+	unsigned char *nat_block_bitmap;
+	unsigned short *free_nid_count;
+	char *nat_bitmap;
+	unsigned int nat_bits_blocks;
+	unsigned char *nat_bits;
+	unsigned char *full_nat_bits;
+	unsigned char *empty_nat_bits;
+	int bitmap_size;
+};
+
+struct sit_info;
+
+struct free_segmap_info;
+
+struct dirty_seglist_info;
+
+struct curseg_info;
+
+struct flush_cmd_control;
+
+struct discard_cmd_control;
+
+struct f2fs_sm_info {
+	struct sit_info *sit_info;
+	struct free_segmap_info *free_info;
+	struct dirty_seglist_info *dirty_info;
+	struct curseg_info *curseg_array;
+	struct f2fs_rwsem curseg_lock;
+	block_t seg0_blkaddr;
+	block_t main_blkaddr;
+	block_t ssa_blkaddr;
+	unsigned int segment_count;
+	unsigned int main_segments;
+	unsigned int reserved_segments;
+	unsigned int additional_reserved_segments;
+	unsigned int ovp_segments;
+	unsigned int rec_prefree_segments;
+	struct list_head sit_entry_set;
+	unsigned int ipu_policy;
+	unsigned int min_ipu_util;
+	unsigned int min_fsync_blocks;
+	unsigned int min_seq_blocks;
+	unsigned int min_hot_blocks;
+	unsigned int min_ssr_sections;
+	struct flush_cmd_control *fcc_info;
+	struct discard_cmd_control *dcc_info;
+};
+
+struct flush_cmd_control {
+	struct task_struct *f2fs_issue_flush;
+	wait_queue_head_t flush_wait_queue;
+	atomic_t issued_flush;
+	atomic_t queued_flush;
+	struct llist_head issue_list;
+	struct llist_node *dispatch_list;
+};
+
+struct discard_cmd_control {
+	struct task_struct *f2fs_issue_discard;
+	struct list_head entry_list;
+	struct list_head pend_list[512];
+	struct list_head wait_list;
+	struct list_head fstrim_list;
+	wait_queue_head_t discard_wait_queue;
+	struct mutex cmd_lock;
+	unsigned int nr_discards;
+	unsigned int max_discards;
+	unsigned int max_discard_request;
+	unsigned int min_discard_issue_time;
+	unsigned int mid_discard_issue_time;
+	unsigned int max_discard_issue_time;
+	unsigned int discard_io_aware_gran;
+	unsigned int discard_urgent_util;
+	unsigned int discard_granularity;
+	unsigned int max_ordered_discard;
+	unsigned int discard_io_aware;
+	unsigned int undiscard_blks;
+	unsigned int next_pos;
+	atomic_t issued_discard;
+	atomic_t queued_discard;
+	atomic_t discard_cmd_cnt;
+	struct rb_root_cached root;
+	bool rbtree_check;
+	bool discard_wake;
+};
+
+struct f2fs_io_info {
+	struct f2fs_sb_info *sbi;
+	nid_t ino;
+	enum page_type type;
+	enum temp_type temp;
+	enum req_op op;
+	blk_opf_t op_flags;
+	block_t new_blkaddr;
+	block_t old_blkaddr;
+	struct page *page;
+	struct page *encrypted_page;
+	struct page *compressed_page;
+	struct list_head list;
+	unsigned int compr_blocks;
+	unsigned int need_lock: 8;
+	unsigned int version: 8;
+	unsigned int submitted: 1;
+	unsigned int in_list: 1;
+	unsigned int is_por: 1;
+	unsigned int encrypted: 1;
+	unsigned int meta_gc: 1;
+	enum iostat_type io_type;
+	struct writeback_control *io_wbc;
+	struct bio **bio;
+	sector_t *last_block;
+};
+
+struct f2fs_bio_info {
+	struct f2fs_sb_info *sbi;
+	struct bio *bio;
+	sector_t last_block_in_bio;
+	struct f2fs_io_info fio;
+	struct completion zone_wait;
+	struct bio *zone_pending_bio;
+	void *bi_private;
+	struct f2fs_rwsem io_rwsem;
+	spinlock_t io_lock;
+	struct list_head io_list;
+	struct list_head bio_list;
+	struct f2fs_rwsem bio_list_lock;
+};
+
+struct f2fs_checkpoint {
+	__le64 checkpoint_ver;
+	__le64 user_block_count;
+	__le64 valid_block_count;
+	__le32 rsvd_segment_count;
+	__le32 overprov_segment_count;
+	__le32 free_segment_count;
+	__le32 cur_node_segno[8];
+	__le16 cur_node_blkoff[8];
+	__le32 cur_data_segno[8];
+	__le16 cur_data_blkoff[8];
+	__le32 ckpt_flags;
+	__le32 cp_pack_total_block_count;
+	__le32 cp_pack_start_sum;
+	__le32 valid_node_count;
+	__le32 valid_inode_count;
+	__le32 next_free_nid;
+	__le32 sit_ver_bitmap_bytesize;
+	__le32 nat_ver_bitmap_bytesize;
+	__le32 checksum_offset;
+	__le64 elapsed_time;
+	unsigned char alloc_type[16];
+	unsigned char sit_nat_version_bitmap[0];
+};
+
+struct f2fs_stat_info {
+	struct list_head stat_list;
+	struct f2fs_sb_info *sbi;
+	int all_area_segs;
+	int sit_area_segs;
+	int nat_area_segs;
+	int ssa_area_segs;
+	int main_area_segs;
+	int main_area_sections;
+	int main_area_zones;
+	unsigned long long hit_cached[2];
+	unsigned long long hit_rbtree[2];
+	unsigned long long total_ext[2];
+	unsigned long long hit_total[2];
+	int ext_tree[2];
+	int zombie_tree[2];
+	int ext_node[2];
+	unsigned long long ext_mem[2];
+	unsigned long long hit_largest;
+	unsigned long long allocated_data_blocks;
+	int ndirty_node;
+	int ndirty_dent;
+	int ndirty_meta;
+	int ndirty_imeta;
+	int ndirty_data;
+	int ndirty_qdata;
+	unsigned int ndirty_dirs;
+	unsigned int ndirty_files;
+	unsigned int nquota_files;
+	unsigned int ndirty_all;
+	int nats;
+	int dirty_nats;
+	int sits;
+	int dirty_sits;
+	int free_nids;
+	int avail_nids;
+	int alloc_nids;
+	int total_count;
+	int utilization;
+	int nr_wb_cp_data;
+	int nr_wb_data;
+	int nr_rd_data;
+	int nr_rd_node;
+	int nr_rd_meta;
+	int nr_dio_read;
+	int nr_dio_write;
+	unsigned int io_skip_bggc;
+	unsigned int other_skip_bggc;
+	int nr_flushing;
+	int nr_flushed;
+	int flush_list_empty;
+	int nr_discarding;
+	int nr_discarded;
+	int nr_discard_cmd;
+	unsigned int undiscard_blks;
+	int nr_issued_ckpt;
+	int nr_total_ckpt;
+	int nr_queued_ckpt;
+	unsigned int cur_ckpt_time;
+	unsigned int peak_ckpt_time;
+	int inline_xattr;
+	int inline_inode;
+	int inline_dir;
+	int append;
+	int update;
+	int orphans;
+	int compr_inode;
+	int swapfile_inode;
+	unsigned long long compr_blocks;
+	int aw_cnt;
+	int max_aw_cnt;
+	unsigned int valid_count;
+	unsigned int valid_node_count;
+	unsigned int valid_inode_count;
+	unsigned int discard_blks;
+	unsigned int bimodal;
+	unsigned int avg_vblocks;
+	int util_free;
+	int util_valid;
+	int util_invalid;
+	int rsvd_segs;
+	int overp_segs;
+	int dirty_count;
+	int node_pages;
+	int meta_pages;
+	int compress_pages;
+	int compress_page_hit;
+	int prefree_count;
+	int free_segs;
+	int free_secs;
+	int cp_call_count[2];
+	int cp_count;
+	int gc_call_count[2];
+	int gc_segs[4];
+	int gc_secs[4];
+	int tot_blks;
+	int data_blks;
+	int node_blks;
+	int bg_data_blks;
+	int bg_node_blks;
+	int curseg[8];
+	int cursec[8];
+	int curzone[8];
+	unsigned int dirty_seg[8];
+	unsigned int full_seg[8];
+	unsigned int valid_blks[8];
+	unsigned int meta_count[4];
+	unsigned int segment_count[2];
+	unsigned int block_count[2];
+	unsigned int inplace_count;
+	unsigned long long base_mem;
+	unsigned long long cache_mem;
+	unsigned long long page_mem;
+};
+
+struct f2fs_dev_info {
+	struct block_device *bdev;
+	char path[64];
+	unsigned int total_segments;
+	block_t start_blk;
+	block_t end_blk;
+	unsigned int nr_blkz;
+	unsigned long *blkz_seq;
+};
+
+struct f2fs_filename {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	f2fs_hash_t hash;
+	struct fscrypt_str crypto_buf;
+	struct fscrypt_str cf_name;
+};
+
+struct f2fs_dentry_ptr {
+	struct inode *inode;
+	void *bitmap;
+	struct f2fs_dir_entry *dentry;
+	__u8 (*filename)[8];
+	int max;
+	int nr_bitmap;
+};
+
+enum {
+	META_CP = 0,
+	META_NAT = 1,
+	META_SIT = 2,
+	META_SSA = 3,
+	META_MAX = 4,
+	META_POR = 5,
+	DATA_GENERIC = 6,
+	DATA_GENERIC_ENHANCE = 7,
+	DATA_GENERIC_ENHANCE_READ = 8,
+	DATA_GENERIC_ENHANCE_UPDATE = 9,
+	META_GENERIC = 10,
+};
+
+enum {
+	ALLOC_NODE = 0,
+	LOOKUP_NODE = 1,
+	LOOKUP_NODE_RA = 2,
+};
+
+enum stop_cp_reason {
+	STOP_CP_REASON_SHUTDOWN = 0,
+	STOP_CP_REASON_FAULT_INJECT = 1,
+	STOP_CP_REASON_META_PAGE = 2,
+	STOP_CP_REASON_WRITE_FAIL = 3,
+	STOP_CP_REASON_CORRUPTED_SUMMARY = 4,
+	STOP_CP_REASON_UPDATE_INODE = 5,
+	STOP_CP_REASON_FLUSH_FAIL = 6,
+	STOP_CP_REASON_NO_SEGMENT = 7,
+	STOP_CP_REASON_MAX = 8,
+};
+
+enum {
+	CURSEG_HOT_DATA = 0,
+	CURSEG_WARM_DATA = 1,
+	CURSEG_COLD_DATA = 2,
+	CURSEG_HOT_NODE = 3,
+	CURSEG_WARM_NODE = 4,
+	CURSEG_COLD_NODE = 5,
+	NR_PERSISTENT_LOG = 6,
+	CURSEG_COLD_DATA_PINNED = 6,
+	CURSEG_ALL_DATA_ATGC = 7,
+	NO_CHECK_TYPE = 8,
+};
+
+enum {
+	F2FS_GET_BLOCK_DEFAULT = 0,
+	F2FS_GET_BLOCK_FIEMAP = 1,
+	F2FS_GET_BLOCK_BMAP = 2,
+	F2FS_GET_BLOCK_DIO = 3,
+	F2FS_GET_BLOCK_PRE_DIO = 4,
+	F2FS_GET_BLOCK_PRE_AIO = 5,
+	F2FS_GET_BLOCK_PRECACHE = 6,
+};
+
+enum cp_reason_type {
+	CP_NO_NEEDED = 0,
+	CP_NON_REGULAR = 1,
+	CP_COMPRESSED = 2,
+	CP_HARDLINK = 3,
+	CP_SB_NEED_CP = 4,
+	CP_WRONG_PINO = 5,
+	CP_NO_SPC_ROLL = 6,
+	CP_NODE_NEED_CP = 7,
+	CP_FASTBOOT_MODE = 8,
+	CP_SPEC_LOG_NUM = 9,
+	CP_RECOVER_DIR = 10,
+};
+
+enum inode_type {
+	DIR_INODE = 0,
+	FILE_INODE = 1,
+	DIRTY_META = 2,
+	NR_INODE_TYPE = 3,
+};
+
+enum {
+	COLD_BIT_SHIFT = 0,
+	FSYNC_BIT_SHIFT = 1,
+	DENT_BIT_SHIFT = 2,
+	OFFSET_BIT_SHIFT = 3,
+};
+
+enum compress_flag {
+	COMPRESS_CHKSUM = 0,
+	COMPRESS_MAX_FLAG = 1,
+};
+
+enum compress_algorithm_type {
+	COMPRESS_LZO = 0,
+	COMPRESS_LZ4 = 1,
+	COMPRESS_ZSTD = 2,
+	COMPRESS_LZORLE = 3,
+	COMPRESS_MAX = 4,
+};
+
+enum {
+	BG_GC = 0,
+	FG_GC = 1,
+};
+
+enum {
+	BACKGROUND = 0,
+	FOREGROUND = 1,
+	MAX_CALL_TYPE = 2,
+	TOTAL_CALL = 1,
+};
+
+enum {
+	FS_MODE_ADAPTIVE = 0,
+	FS_MODE_LFS = 1,
+	FS_MODE_FRAGMENT_SEG = 2,
+	FS_MODE_FRAGMENT_BLK = 3,
+};
+
+enum {
+	GC_CB = 0,
+	GC_GREEDY = 1,
+	GC_AT = 2,
+	ALLOC_NEXT = 3,
+	FLUSH_DEVICE = 4,
+	MAX_GC_POLICY = 5,
+};
+
+enum {
+	COMPR_MODE_FS = 0,
+	COMPR_MODE_USER = 1,
+};
+
+struct seg_entry;
+
+struct sec_entry;
+
+struct sit_info {
+	block_t sit_base_addr;
+	block_t sit_blocks;
+	block_t written_valid_blocks;
+	char *bitmap;
+	char *sit_bitmap;
+	unsigned int bitmap_size;
+	unsigned long *tmp_map;
+	unsigned long *dirty_sentries_bitmap;
+	unsigned int dirty_sentries;
+	unsigned int sents_per_block;
+	struct rw_semaphore sentry_lock;
+	struct seg_entry *sentries;
+	struct sec_entry *sec_entries;
+	unsigned long long elapsed_time;
+	unsigned long long mounted_time;
+	unsigned long long min_mtime;
+	unsigned long long max_mtime;
+	unsigned long long dirty_min_mtime;
+	unsigned long long dirty_max_mtime;
+	unsigned int last_victim[5];
+};
+
+struct seg_entry {
+	unsigned int type: 6;
+	unsigned int valid_blocks: 10;
+	unsigned int ckpt_valid_blocks: 10;
+	unsigned int padding: 6;
+	unsigned char *cur_valid_map;
+	unsigned char *ckpt_valid_map;
+	unsigned char *discard_map;
+	unsigned long long mtime;
+};
+
+struct sec_entry {
+	unsigned int valid_blocks;
+};
+
+struct free_segmap_info {
+	unsigned int start_segno;
+	unsigned int free_segments;
+	unsigned int free_sections;
+	spinlock_t segmap_lock;
+	unsigned long *free_segmap;
+	unsigned long *free_secmap;
+};
+
+struct dirty_seglist_info {
+	unsigned long *dirty_segmap[8];
+	unsigned long *dirty_secmap;
+	struct mutex seglist_lock;
+	int nr_dirty[8];
+	unsigned long *victim_secmap;
+	unsigned long *pinned_secmap;
+	unsigned int pinned_secmap_cnt;
+	bool enable_pin_section;
+};
+
+struct f2fs_summary_block;
+
+struct f2fs_journal;
+
+struct curseg_info {
+	struct mutex curseg_mutex;
+	struct f2fs_summary_block *sum_blk;
+	struct rw_semaphore journal_rwsem;
+	struct f2fs_journal *journal;
+	unsigned char alloc_type;
+	unsigned short seg_type;
+	unsigned int segno;
+	unsigned short next_blkoff;
+	unsigned int zone;
+	unsigned int next_segno;
+	int fragment_remained_chunk;
+	bool inited;
+};
+
+struct f2fs_summary {
+	__le32 nid;
+	union {
+		__u8 reserved[3];
+		struct {
+			__u8 version;
+			__le16 ofs_in_node;
+		} __attribute__((packed));
+	};
+} __attribute__((packed));
+
+struct f2fs_nat_entry {
+	__u8 version;
+	__le32 ino;
+	__le32 block_addr;
+} __attribute__((packed));
+
+struct nat_journal_entry {
+	__le32 nid;
+	struct f2fs_nat_entry ne;
+} __attribute__((packed));
+
+struct nat_journal {
+	struct nat_journal_entry entries[38];
+	__u8 reserved[11];
+};
+
+struct f2fs_sit_entry {
+	__le16 vblocks;
+	__u8 valid_map[64];
+	__le64 mtime;
+} __attribute__((packed));
+
+struct sit_journal_entry {
+	__le32 segno;
+	struct f2fs_sit_entry se;
+} __attribute__((packed));
+
+struct sit_journal {
+	struct sit_journal_entry entries[6];
+	__u8 reserved[37];
+};
+
+struct f2fs_extra_info {
+	__le64 kbytes_written;
+	__u8 reserved[497];
+} __attribute__((packed));
+
+struct f2fs_journal {
+	union {
+		__le16 n_nats;
+		__le16 n_sits;
+	};
+	union {
+		struct nat_journal nat_j;
+		struct sit_journal sit_j;
+		struct f2fs_extra_info info;
+	};
+} __attribute__((packed));
+
+struct summary_footer {
+	unsigned char entry_type;
+	__le32 check_sum;
+} __attribute__((packed));
+
+struct f2fs_summary_block {
+	struct f2fs_summary entries[512];
+	struct f2fs_journal journal;
+	struct summary_footer footer;
+};
+
+struct f2fs_gc_kthread {
+	struct task_struct *f2fs_gc_task;
+	wait_queue_head_t gc_wait_queue_head;
+	unsigned int urgent_sleep_time;
+	unsigned int min_sleep_time;
+	unsigned int max_sleep_time;
+	unsigned int no_gc_sleep_time;
+	bool gc_wake;
+	wait_queue_head_t fggc_wq;
+};
+
+struct iostat_lat_info {
+	unsigned long sum_lat[9];
+	unsigned long peak_lat[9];
+	unsigned int bio_cnt[9];
+};
+
+struct f2fs_gc_range {
+	__u32 sync;
+	__u64 start;
+	__u64 len;
+};
+
+struct f2fs_defragment {
+	__u64 start;
+	__u64 len;
+};
+
+struct f2fs_move_range {
+	__u32 dst_fd;
+	__u64 pos_in;
+	__u64 pos_out;
+	__u64 len;
+};
+
+struct f2fs_flush_device {
+	__u32 dev_num;
+	__u32 segments;
+};
+
+struct f2fs_sectrim_range {
+	__u64 start;
+	__u64 len;
+	__u64 flags;
+};
+
+struct f2fs_comp_option {
+	__u8 algorithm;
+	__u8 log_cluster_size;
+};
+
+struct dnode_of_data {
+	struct inode *inode;
+	struct page *inode_page;
+	struct page *node_page;
+	nid_t nid;
+	unsigned int ofs_in_node;
+	bool inode_page_locked;
+	bool node_changed;
+	char cur_level;
+	char max_level;
+	block_t data_blkaddr;
+};
+
+struct f2fs_map_blocks {
+	struct block_device *m_bdev;
+	block_t m_pblk;
+	block_t m_lblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+	unsigned long *m_next_pgofs;
+	unsigned long *m_next_extent;
+	int m_seg_type;
+	bool m_may_create;
+	bool m_multidev_dio;
+};
+
+struct f2fs_gc_control {
+	unsigned int victim_segno;
+	int init_gc_type;
+	bool no_bg_gc;
+	bool should_migrate_blocks;
+	bool err_gc_skipped;
+	unsigned int nr_free_secs;
+};
+
+struct node_info {
+	nid_t nid;
+	nid_t ino;
+	block_t blk_addr;
+	unsigned char version;
+	unsigned char flag;
+};
+
+struct compat_f2fs_gc_range {
+	u32 sync;
+	compat_u64 start;
+	compat_u64 len;
+};
+
+struct compat_f2fs_move_range {
+	u32 dst_fd;
+	compat_u64 pos_in;
+	compat_u64 pos_out;
+	compat_u64 len;
+};
+
+typedef void (*btf_trace_f2fs_sync_file_enter)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_sync_file_exit)(void *, struct inode *, int, int, int);
+
+typedef void (*btf_trace_f2fs_sync_fs)(void *, struct super_block *, int);
+
+typedef void (*btf_trace_f2fs_iget)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_iget_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_evict_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_new_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_unlink_enter)(void *, struct inode *, struct dentry *);
+
+typedef void (*btf_trace_f2fs_unlink_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_drop_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_truncate_data_blocks_range)(void *, struct inode *, nid_t, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_truncate_blocks_enter)(void *, struct inode *, u64);
+
+typedef void (*btf_trace_f2fs_truncate_blocks_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate_inode_blocks_enter)(void *, struct inode *, u64);
+
+typedef void (*btf_trace_f2fs_truncate_inode_blocks_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate_nodes_enter)(void *, struct inode *, nid_t, block_t);
+
+typedef void (*btf_trace_f2fs_truncate_nodes_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate_node)(void *, struct inode *, nid_t, block_t);
+
+typedef void (*btf_trace_f2fs_truncate_partial_nodes)(void *, struct inode *, nid_t *, int, int);
+
+typedef void (*btf_trace_f2fs_file_write_iter)(void *, struct inode *, loff_t, size_t, ssize_t);
+
+typedef void (*btf_trace_f2fs_map_blocks)(void *, struct inode *, struct f2fs_map_blocks *, int, int);
+
+typedef void (*btf_trace_f2fs_background_gc)(void *, struct super_block *, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_f2fs_gc_begin)(void *, struct super_block *, int, bool, unsigned int, long long, long long, long long, unsigned int, unsigned int, int, unsigned int);
+
+typedef void (*btf_trace_f2fs_gc_end)(void *, struct super_block *, int, int, int, long long, long long, long long, unsigned int, unsigned int, int, unsigned int);
+
+struct victim_sel_policy;
+
+typedef void (*btf_trace_f2fs_get_victim)(void *, struct super_block *, int, int, struct victim_sel_policy *, unsigned int, unsigned int, unsigned int);
+
+struct victim_sel_policy {
+	int alloc_mode;
+	int gc_mode;
+	unsigned long *dirty_bitmap;
+	unsigned int max_search;
+	unsigned int offset;
+	unsigned int ofs_unit;
+	unsigned int min_cost;
+	unsigned long long oldest_age;
+	unsigned int min_segno;
+	unsigned long long age;
+	unsigned long long age_threshold;
+};
+
+typedef void (*btf_trace_f2fs_lookup_start)(void *, struct inode *, struct dentry *, unsigned int);
+
+typedef void (*btf_trace_f2fs_lookup_end)(void *, struct inode *, struct dentry *, nid_t, int);
+
+typedef void (*btf_trace_f2fs_rename_start)(void *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
+
+typedef void (*btf_trace_f2fs_rename_end)(void *, struct dentry *, struct dentry *, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_readdir)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_f2fs_fallocate)(void *, struct inode *, int, loff_t, loff_t, int);
+
+typedef void (*btf_trace_f2fs_direct_IO_enter)(void *, struct inode *, struct kiocb *, long, int);
+
+typedef void (*btf_trace_f2fs_direct_IO_exit)(void *, struct inode *, loff_t, unsigned long, int, int);
+
+typedef void (*btf_trace_f2fs_reserve_new_blocks)(void *, struct inode *, nid_t, unsigned int, blkcnt_t);
+
+typedef void (*btf_trace_f2fs_submit_page_bio)(void *, struct page *, struct f2fs_io_info *);
+
+typedef void (*btf_trace_f2fs_submit_page_write)(void *, struct page *, struct f2fs_io_info *);
+
+typedef void (*btf_trace_f2fs_prepare_write_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_prepare_read_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_submit_read_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_submit_write_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_write_begin)(void *, struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_f2fs_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_f2fs_writepage)(void *, struct folio *, int);
+
+typedef void (*btf_trace_f2fs_do_write_data_page)(void *, struct folio *, int);
+
+typedef void (*btf_trace_f2fs_readpage)(void *, struct folio *, int);
+
+typedef void (*btf_trace_f2fs_set_page_dirty)(void *, struct folio *, int);
+
+typedef void (*btf_trace_f2fs_replace_atomic_write_block)(void *, struct inode *, struct inode *, unsigned long, block_t, block_t, bool);
+
+typedef void (*btf_trace_f2fs_filemap_fault)(void *, struct inode *, unsigned long, vm_flags_t, vm_fault_t);
+
+typedef void (*btf_trace_f2fs_vm_page_mkwrite)(void *, struct inode *, unsigned long, vm_flags_t, vm_fault_t);
+
+typedef void (*btf_trace_f2fs_writepages)(void *, struct inode *, struct writeback_control *, int);
+
+typedef void (*btf_trace_f2fs_readpages)(void *, struct inode *, unsigned long, unsigned int);
+
+typedef void (*btf_trace_f2fs_write_checkpoint)(void *, struct super_block *, int, const char *);
+
+typedef void (*btf_trace_f2fs_queue_discard)(void *, struct block_device *, block_t, block_t);
+
+typedef void (*btf_trace_f2fs_issue_discard)(void *, struct block_device *, block_t, block_t);
+
+typedef void (*btf_trace_f2fs_remove_discard)(void *, struct block_device *, block_t, block_t);
+
+typedef void (*btf_trace_f2fs_queue_reset_zone)(void *, struct block_device *, block_t);
+
+typedef void (*btf_trace_f2fs_issue_reset_zone)(void *, struct block_device *, block_t);
+
+typedef void (*btf_trace_f2fs_issue_flush)(void *, struct block_device *, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_lookup_extent_tree_start)(void *, struct inode *, unsigned int, enum extent_type);
+
+typedef void (*btf_trace_f2fs_lookup_read_extent_tree_end)(void *, struct inode *, unsigned int, struct extent_info *);
+
+typedef void (*btf_trace_f2fs_lookup_age_extent_tree_end)(void *, struct inode *, unsigned int, struct extent_info *);
+
+typedef void (*btf_trace_f2fs_update_read_extent_tree_range)(void *, struct inode *, unsigned int, unsigned int, block_t, unsigned int);
+
+typedef void (*btf_trace_f2fs_update_age_extent_tree_range)(void *, struct inode *, unsigned int, unsigned int, unsigned long long, unsigned long long);
+
+typedef void (*btf_trace_f2fs_shrink_extent_tree)(void *, struct f2fs_sb_info *, unsigned int, unsigned int, enum extent_type);
+
+typedef void (*btf_trace_f2fs_destroy_extent_tree)(void *, struct inode *, unsigned int, enum extent_type);
+
+typedef void (*btf_trace_f2fs_sync_dirty_inodes_enter)(void *, struct super_block *, int, s64);
+
+typedef void (*btf_trace_f2fs_sync_dirty_inodes_exit)(void *, struct super_block *, int, s64);
+
+typedef void (*btf_trace_f2fs_shutdown)(void *, struct f2fs_sb_info *, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_compress_pages_start)(void *, struct inode *, unsigned long, unsigned int, unsigned char);
+
+typedef void (*btf_trace_f2fs_decompress_pages_start)(void *, struct inode *, unsigned long, unsigned int, unsigned char);
+
+typedef void (*btf_trace_f2fs_compress_pages_end)(void *, struct inode *, unsigned long, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_decompress_pages_end)(void *, struct inode *, unsigned long, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_iostat)(void *, struct f2fs_sb_info *, unsigned long long *);
+
+struct f2fs_iostat_latency {
+	unsigned int peak_lat;
+	unsigned int avg_lat;
+	unsigned int cnt;
+};
+
+typedef void (*btf_trace_f2fs_iostat_latency)(void *, struct f2fs_sb_info *, struct f2fs_iostat_latency(*)[3]);
+
+typedef void (*btf_trace_f2fs_bmap)(void *, struct inode *, sector_t, sector_t);
+
+typedef void (*btf_trace_f2fs_fiemap)(void *, struct inode *, sector_t, sector_t, unsigned long long, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_dataread_start)(void *, struct inode *, loff_t, int, pid_t, char *, char *);
+
+typedef void (*btf_trace_f2fs_dataread_end)(void *, struct inode *, loff_t, int);
+
+typedef void (*btf_trace_f2fs_datawrite_start)(void *, struct inode *, loff_t, int, pid_t, char *, char *);
+
+typedef void (*btf_trace_f2fs_datawrite_end)(void *, struct inode *, loff_t, int);
+
+struct f2fs_sb_encodings {
+	__u16 magic;
+	char *name;
+	unsigned int version;
+};
+
+enum errors_option {
+	MOUNT_ERRORS_READONLY = 0,
+	MOUNT_ERRORS_CONTINUE = 1,
+	MOUNT_ERRORS_PANIC = 2,
+};
+
+enum iostat_lat_type {
+	READ_IO = 0,
+	WRITE_SYNC_IO = 1,
+	WRITE_ASYNC_IO = 2,
+	MAX_IO_TYPE = 3,
+};
+
+enum {
+	BGGC_MODE_ON = 0,
+	BGGC_MODE_OFF = 1,
+	BGGC_MODE_SYNC = 2,
+};
+
+enum {
+	DISCARD_UNIT_BLOCK = 0,
+	DISCARD_UNIT_SEGMENT = 1,
+	DISCARD_UNIT_SECTION = 2,
+};
+
+enum {
+	ALLOC_MODE_DEFAULT = 0,
+	ALLOC_MODE_REUSE = 1,
+};
+
+enum {
+	MEMORY_MODE_NORMAL = 0,
+	MEMORY_MODE_LOW = 1,
+};
+
+enum {
+	Opt_gc_background = 0,
+	Opt_disable_roll_forward = 1,
+	Opt_norecovery = 2,
+	Opt_discard___4 = 3,
+	Opt_nodiscard___2 = 4,
+	Opt_noheap = 5,
+	Opt_heap = 6,
+	Opt_user_xattr___2 = 7,
+	Opt_nouser_xattr = 8,
+	Opt_acl___2 = 9,
+	Opt_noacl = 10,
+	Opt_active_logs = 11,
+	Opt_disable_ext_identify = 12,
+	Opt_inline_xattr = 13,
+	Opt_noinline_xattr = 14,
+	Opt_inline_xattr_size = 15,
+	Opt_inline_data = 16,
+	Opt_inline_dentry = 17,
+	Opt_noinline_dentry = 18,
+	Opt_flush_merge = 19,
+	Opt_noflush_merge = 20,
+	Opt_barrier___2 = 21,
+	Opt_nobarrier___2 = 22,
+	Opt_fastboot = 23,
+	Opt_extent_cache = 24,
+	Opt_noextent_cache = 25,
+	Opt_noinline_data = 26,
+	Opt_data_flush = 27,
+	Opt_reserve_root = 28,
+	Opt_resgid___2 = 29,
+	Opt_resuid___2 = 30,
+	Opt_mode___5 = 31,
+	Opt_fault_injection = 32,
+	Opt_fault_type = 33,
+	Opt_lazytime = 34,
+	Opt_nolazytime = 35,
+	Opt_quota___3 = 36,
+	Opt_noquota___2 = 37,
+	Opt_usrquota___3 = 38,
+	Opt_grpquota___3 = 39,
+	Opt_prjquota___2 = 40,
+	Opt_usrjquota___2 = 41,
+	Opt_grpjquota___2 = 42,
+	Opt_prjjquota = 43,
+	Opt_offusrjquota = 44,
+	Opt_offgrpjquota = 45,
+	Opt_offprjjquota = 46,
+	Opt_jqfmt_vfsold = 47,
+	Opt_jqfmt_vfsv0 = 48,
+	Opt_jqfmt_vfsv1 = 49,
+	Opt_alloc = 50,
+	Opt_fsync = 51,
+	Opt_test_dummy_encryption___2 = 52,
+	Opt_inlinecrypt___2 = 53,
+	Opt_checkpoint_disable = 54,
+	Opt_checkpoint_disable_cap = 55,
+	Opt_checkpoint_disable_cap_perc = 56,
+	Opt_checkpoint_enable = 57,
+	Opt_checkpoint_merge = 58,
+	Opt_nocheckpoint_merge = 59,
+	Opt_compress_algorithm = 60,
+	Opt_compress_log_size = 61,
+	Opt_compress_extension = 62,
+	Opt_nocompress_extension = 63,
+	Opt_compress_chksum = 64,
+	Opt_compress_mode = 65,
+	Opt_compress_cache = 66,
+	Opt_atgc = 67,
+	Opt_gc_merge = 68,
+	Opt_nogc_merge = 69,
+	Opt_discard_unit = 70,
+	Opt_memory_mode = 71,
+	Opt_age_extent_cache = 72,
+	Opt_errors___3 = 73,
+	Opt_err___6 = 74,
+};
+
+enum {
+	GC_NORMAL = 0,
+	GC_IDLE_CB = 1,
+	GC_IDLE_GREEDY = 2,
+	GC_IDLE_AT = 3,
+	GC_URGENT_HIGH = 4,
+	GC_URGENT_LOW = 5,
+	GC_URGENT_MID = 6,
+	MAX_GC_MODE = 7,
+};
+
+enum blk_zone_type {
+	BLK_ZONE_TYPE_CONVENTIONAL = 1,
+	BLK_ZONE_TYPE_SEQWRITE_REQ = 2,
+	BLK_ZONE_TYPE_SEQWRITE_PREF = 3,
+};
+
+enum {
+	F2FS_IPU_FORCE = 0,
+	F2FS_IPU_SSR = 1,
+	F2FS_IPU_UTIL = 2,
+	F2FS_IPU_SSR_UTIL = 3,
+	F2FS_IPU_FSYNC = 4,
+	F2FS_IPU_ASYNC = 5,
+	F2FS_IPU_NOCACHE = 6,
+	F2FS_IPU_HONOR_OPU_WRITE = 7,
+	F2FS_IPU_MAX = 8,
+};
+
+struct trace_event_raw_f2fs__inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t pino;
+	umode_t mode;
+	loff_t size;
+	unsigned int nlink;
+	blkcnt_t blocks;
+	__u8 advise;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_sync_file_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int cp_reason;
+	int datasync;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_sync_fs {
+	struct trace_entry ent;
+	dev_t dev;
+	int dirty;
+	int wait;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__inode_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	umode_t mode;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_unlink_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t size;
+	blkcnt_t blocks;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_truncate_data_blocks_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	nid_t nid;
+	unsigned int ofs;
+	int free;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__truncate_op {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t size;
+	blkcnt_t blocks;
+	u64 from;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__truncate_node {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	nid_t nid;
+	block_t blk_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_truncate_partial_nodes {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	nid_t nid[3];
+	int depth;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_file_write_iter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	size_t length;
+	ssize_t ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_map_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	block_t m_lblk;
+	block_t m_pblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+	int m_seg_type;
+	bool m_may_create;
+	bool m_multidev_dio;
+	int flag;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_background_gc {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int wait_ms;
+	unsigned int prefree;
+	unsigned int free;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_gc_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	int gc_type;
+	bool no_bg_gc;
+	unsigned int nr_free_secs;
+	long long dirty_nodes;
+	long long dirty_dents;
+	long long dirty_imeta;
+	unsigned int free_sec;
+	unsigned int free_seg;
+	int reserved_seg;
+	unsigned int prefree_seg;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_gc_end {
+	struct trace_entry ent;
+	dev_t dev;
+	int ret;
+	int seg_freed;
+	int sec_freed;
+	long long dirty_nodes;
+	long long dirty_dents;
+	long long dirty_imeta;
+	unsigned int free_sec;
+	unsigned int free_seg;
+	int reserved_seg;
+	unsigned int prefree_seg;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_get_victim {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	int gc_type;
+	int alloc_mode;
+	int gc_mode;
+	unsigned int victim;
+	unsigned int cost;
+	unsigned int ofs_unit;
+	unsigned int pre_victim;
+	unsigned int prefree;
+	unsigned int free;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	u32 __data_loc_name;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	u32 __data_loc_name;
+	nid_t cino;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_rename_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	u32 __data_loc_old_name;
+	ino_t new_pino;
+	u32 __data_loc_new_name;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_rename_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	u32 __data_loc_old_name;
+	u32 __data_loc_new_name;
+	unsigned int flags;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_readdir {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t start;
+	loff_t end;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_fallocate {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int mode;
+	loff_t offset;
+	loff_t len;
+	loff_t size;
+	blkcnt_t blocks;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_direct_IO_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t ki_pos;
+	int ki_flags;
+	u16 ki_ioprio;
+	unsigned long len;
+	int rw;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_direct_IO_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned long len;
+	int rw;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_reserve_new_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	nid_t nid;
+	unsigned int ofs_in_node;
+	blkcnt_t count;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__submit_page_bio {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long index;
+	block_t old_blkaddr;
+	block_t new_blkaddr;
+	enum req_op op;
+	blk_opf_t op_flags;
+	int temp;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__bio {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t target;
+	enum req_op op;
+	blk_opf_t op_flags;
+	int type;
+	sector_t sector;
+	unsigned int size;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_write_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_write_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	unsigned int copied;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__folio {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int type;
+	int dir;
+	unsigned long index;
+	int dirty;
+	int uptodate;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_replace_atomic_write_block {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t cow_ino;
+	unsigned long index;
+	block_t old_addr;
+	block_t new_addr;
+	bool recovery;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_mmap {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long index;
+	vm_flags_t flags;
+	vm_fault_t ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_writepages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int type;
+	int dir;
+	long nr_to_write;
+	long pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	unsigned long writeback_index;
+	int sync_mode;
+	char for_kupdate;
+	char for_background;
+	char tagged_writepages;
+	char for_reclaim;
+	char range_cyclic;
+	char for_sync;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_readpages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long start;
+	unsigned int nrpage;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_write_checkpoint {
+	struct trace_entry ent;
+	dev_t dev;
+	int reason;
+	u32 __data_loc_dest_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_discard {
+	struct trace_entry ent;
+	dev_t dev;
+	block_t blkstart;
+	block_t blklen;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_reset_zone {
+	struct trace_entry ent;
+	dev_t dev;
+	block_t blkstart;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_issue_flush {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int nobarrier;
+	unsigned int flush_merge;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_extent_tree_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	enum extent_type type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_read_extent_tree_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	unsigned int fofs;
+	unsigned int len;
+	u32 blk;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_age_extent_tree_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	unsigned int fofs;
+	unsigned int len;
+	unsigned long long age;
+	unsigned long long blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_update_read_extent_tree_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	u32 blk;
+	unsigned int len;
+	unsigned int c_len;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_update_age_extent_tree_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	unsigned int len;
+	unsigned long long age;
+	unsigned long long blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_shrink_extent_tree {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int node_cnt;
+	unsigned int tree_cnt;
+	enum extent_type type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_destroy_extent_tree {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int node_cnt;
+	enum extent_type type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_sync_dirty_inodes {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	s64 count;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_shutdown {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int mode;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_zip_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long idx;
+	unsigned int size;
+	unsigned int algtype;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_zip_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long idx;
+	unsigned int size;
+	unsigned int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_iostat {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long long app_dio;
+	unsigned long long app_bio;
+	unsigned long long app_wio;
+	unsigned long long app_mio;
+	unsigned long long app_bcdio;
+	unsigned long long app_mcdio;
+	unsigned long long fs_dio;
+	unsigned long long fs_cdio;
+	unsigned long long fs_nio;
+	unsigned long long fs_mio;
+	unsigned long long fs_gc_dio;
+	unsigned long long fs_gc_nio;
+	unsigned long long fs_cp_dio;
+	unsigned long long fs_cp_nio;
+	unsigned long long fs_cp_mio;
+	unsigned long long app_drio;
+	unsigned long long app_brio;
+	unsigned long long app_rio;
+	unsigned long long app_mrio;
+	unsigned long long app_bcrio;
+	unsigned long long app_mcrio;
+	unsigned long long fs_drio;
+	unsigned long long fs_gdrio;
+	unsigned long long fs_cdrio;
+	unsigned long long fs_nrio;
+	unsigned long long fs_mrio;
+	unsigned long long fs_discard;
+	unsigned long long fs_reset_zone;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_iostat_latency {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int d_rd_peak;
+	unsigned int d_rd_avg;
+	unsigned int d_rd_cnt;
+	unsigned int n_rd_peak;
+	unsigned int n_rd_avg;
+	unsigned int n_rd_cnt;
+	unsigned int m_rd_peak;
+	unsigned int m_rd_avg;
+	unsigned int m_rd_cnt;
+	unsigned int d_wr_s_peak;
+	unsigned int d_wr_s_avg;
+	unsigned int d_wr_s_cnt;
+	unsigned int n_wr_s_peak;
+	unsigned int n_wr_s_avg;
+	unsigned int n_wr_s_cnt;
+	unsigned int m_wr_s_peak;
+	unsigned int m_wr_s_avg;
+	unsigned int m_wr_s_cnt;
+	unsigned int d_wr_as_peak;
+	unsigned int d_wr_as_avg;
+	unsigned int d_wr_as_cnt;
+	unsigned int n_wr_as_peak;
+	unsigned int n_wr_as_avg;
+	unsigned int n_wr_as_cnt;
+	unsigned int m_wr_as_peak;
+	unsigned int m_wr_as_avg;
+	unsigned int m_wr_as_cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_bmap {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	sector_t lblock;
+	sector_t pblock;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_fiemap {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	sector_t lblock;
+	sector_t pblock;
+	unsigned long long len;
+	unsigned int flags;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__rw_start {
+	struct trace_entry ent;
+	u32 __data_loc_pathbuf;
+	loff_t offset;
+	int bytes;
+	loff_t i_size;
+	u32 __data_loc_cmdline;
+	pid_t pid;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__rw_end {
+	struct trace_entry ent;
+	ino_t ino;
+	loff_t offset;
+	int bytes;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_f2fs_unlink_enter {
+	u32 name;
+};
+
+struct trace_event_data_offsets_f2fs_lookup_start {
+	u32 name;
+};
+
+struct trace_event_data_offsets_f2fs_lookup_end {
+	u32 name;
+};
+
+struct trace_event_data_offsets_f2fs_write_checkpoint {
+	u32 dest_msg;
+};
+
+struct cp_control {
+	int reason;
+	__u64 trim_start;
+	__u64 trim_end;
+	__u64 trim_minlen;
+};
+
+struct f2fs_report_zones_args {
+	struct f2fs_sb_info *sbi;
+	struct f2fs_dev_info *dev;
+};
+
+struct trace_event_data_offsets_f2fs__inode {};
+
+struct trace_event_data_offsets_f2fs__inode_exit {};
+
+struct trace_event_data_offsets_f2fs_sync_file_exit {};
+
+struct trace_event_data_offsets_f2fs_sync_fs {};
+
+struct trace_event_data_offsets_f2fs_truncate_data_blocks_range {};
+
+struct trace_event_data_offsets_f2fs__truncate_op {};
+
+struct trace_event_data_offsets_f2fs__truncate_node {};
+
+struct trace_event_data_offsets_f2fs_truncate_partial_nodes {};
+
+struct trace_event_data_offsets_f2fs_file_write_iter {};
+
+struct trace_event_data_offsets_f2fs_map_blocks {};
+
+struct trace_event_data_offsets_f2fs_background_gc {};
+
+struct trace_event_data_offsets_f2fs_gc_begin {};
+
+struct trace_event_data_offsets_f2fs_gc_end {};
+
+struct trace_event_data_offsets_f2fs_get_victim {};
+
+struct trace_event_data_offsets_f2fs_rename_start {
+	u32 old_name;
+	u32 new_name;
+};
+
+struct trace_event_data_offsets_f2fs_rename_end {
+	u32 old_name;
+	u32 new_name;
+};
+
+struct trace_event_data_offsets_f2fs_readdir {};
+
+struct trace_event_data_offsets_f2fs_fallocate {};
+
+struct trace_event_data_offsets_f2fs_direct_IO_enter {};
+
+struct trace_event_data_offsets_f2fs_direct_IO_exit {};
+
+struct trace_event_data_offsets_f2fs_reserve_new_blocks {};
+
+struct trace_event_data_offsets_f2fs__submit_page_bio {};
+
+struct trace_event_data_offsets_f2fs__bio {};
+
+struct trace_event_data_offsets_f2fs_write_begin {};
+
+struct trace_event_data_offsets_f2fs_write_end {};
+
+struct trace_event_data_offsets_f2fs__folio {};
+
+struct trace_event_data_offsets_f2fs_replace_atomic_write_block {};
+
+struct trace_event_data_offsets_f2fs_mmap {};
+
+struct trace_event_data_offsets_f2fs_writepages {};
+
+struct trace_event_data_offsets_f2fs_readpages {};
+
+struct trace_event_data_offsets_f2fs_discard {};
+
+struct trace_event_data_offsets_f2fs_reset_zone {};
+
+struct trace_event_data_offsets_f2fs_issue_flush {};
+
+struct trace_event_data_offsets_f2fs_lookup_extent_tree_start {};
+
+struct trace_event_data_offsets_f2fs_lookup_read_extent_tree_end {};
+
+struct trace_event_data_offsets_f2fs_lookup_age_extent_tree_end {};
+
+struct trace_event_data_offsets_f2fs_update_read_extent_tree_range {};
+
+struct trace_event_data_offsets_f2fs_update_age_extent_tree_range {};
+
+struct trace_event_data_offsets_f2fs_shrink_extent_tree {};
+
+struct trace_event_data_offsets_f2fs_destroy_extent_tree {};
+
+struct trace_event_data_offsets_f2fs_sync_dirty_inodes {};
+
+struct trace_event_data_offsets_f2fs_shutdown {};
+
+struct trace_event_data_offsets_f2fs_zip_start {};
+
+struct trace_event_data_offsets_f2fs_zip_end {};
+
+struct trace_event_data_offsets_f2fs_iostat {};
+
+struct trace_event_data_offsets_f2fs_iostat_latency {};
+
+struct trace_event_data_offsets_f2fs_bmap {};
+
+struct trace_event_data_offsets_f2fs_fiemap {};
+
+struct trace_event_data_offsets_f2fs__rw_start {
+	u32 pathbuf;
+	u32 cmdline;
+};
+
+struct trace_event_data_offsets_f2fs__rw_end {};
+
+enum nat_state {
+	TOTAL_NAT = 0,
+	DIRTY_NAT = 1,
+	RECLAIMABLE_NAT = 2,
+	MAX_NAT_STATE = 3,
+};
+
+enum nid_state {
+	FREE_NID = 0,
+	PREALLOC_NID = 1,
+	MAX_NID_STATE = 2,
+};
+
+enum dirty_type {
+	DIRTY_HOT_DATA = 0,
+	DIRTY_WARM_DATA = 1,
+	DIRTY_COLD_DATA = 2,
+	DIRTY_HOT_NODE = 3,
+	DIRTY_WARM_NODE = 4,
+	DIRTY_COLD_NODE = 5,
+	DIRTY = 6,
+	PRE = 7,
+	NR_DIRTY_TYPE = 8,
+};
+
+enum {
+	NAT_BITMAP = 0,
+	SIT_BITMAP = 1,
+};
+
+struct ino_entry {
+	struct list_head list;
+	nid_t ino;
+	unsigned int dirty_device;
+};
+
+struct f2fs_orphan_block {
+	__le32 ino[1020];
+	__le32 reserved;
+	__le16 blk_addr;
+	__le16 blk_count;
+	__le32 entry_count;
+	__le32 check_sum;
+};
+
+struct free_nid {
+	struct list_head list;
+	nid_t nid;
+	int state;
+};
+
+struct ckpt_req {
+	struct completion wait;
+	struct llist_node llnode;
+	int ret;
+	ktime_t queue_time;
+};
+
+enum {
+	LFS = 0,
+	SSR = 1,
+	AT_SSR = 2,
+};
+
+enum need_lock_type {
+	LOCK_REQ = 0,
+	LOCK_DONE = 1,
+	LOCK_RETRY = 2,
+};
+
+struct victim_entry {
+	struct rb_node rb_node;
+	unsigned long long mtime;
+	unsigned int segno;
+	struct list_head list;
+};
+
+struct inode_entry {
+	struct list_head list;
+	struct inode *inode;
+};
+
+struct gc_inode_list {
+	struct list_head ilist;
+	struct xarray iroot;
+};
+
+enum bio_post_read_step___2 {
+	STEP_DECRYPT___2 = 1,
+	STEP_DECOMPRESS = 2,
+	STEP_VERITY___2 = 4,
+};
+
+enum mem_type {
+	FREE_NIDS = 0,
+	NAT_ENTRIES = 1,
+	DIRTY_DENTS = 2,
+	INO_ENTRIES = 3,
+	READ_EXTENT_CACHE = 4,
+	AGE_EXTENT_CACHE = 5,
+	DISCARD_CACHE = 6,
+	COMPRESS_PAGE = 7,
+	BASE_CHECK = 8,
+};
+
+struct bio_entry {
+	struct bio *bio;
+	struct list_head list;
+};
+
+struct bio_post_read_ctx___2 {
+	struct bio *bio;
+	struct f2fs_sb_info *sbi;
+	struct work_struct work;
+	unsigned int enabled_steps;
+	bool decompression_attempted;
+	block_t fs_blkaddr;
+};
+
+struct bio_iostat_ctx {
+	struct f2fs_sb_info *sbi;
+	unsigned long submit_ts;
+	enum page_type type;
+	struct bio_post_read_ctx___2 *post_read_ctx;
+};
+
+struct bvec_iter_all {
+	struct bio_vec bv;
+	int idx;
+	unsigned int done;
+};
+
+struct compress_data;
+
+struct compress_ctx {
+	struct inode *inode;
+	unsigned long cluster_idx;
+	unsigned int cluster_size;
+	unsigned int log_cluster_size;
+	struct page **rpages;
+	unsigned int nr_rpages;
+	struct page **cpages;
+	unsigned int nr_cpages;
+	unsigned int valid_nr_cpages;
+	void *rbuf;
+	struct compress_data *cbuf;
+	size_t rlen;
+	size_t clen;
+	void *private;
+	void *private2;
+};
+
+struct compress_data {
+	__le32 clen;
+	__le32 chksum;
+	__le32 reserved[4];
+	u8 cdata[0];
+};
+
+struct decompress_io_ctx {
+	u32 magic;
+	struct inode *inode;
+	unsigned long cluster_idx;
+	unsigned int cluster_size;
+	unsigned int log_cluster_size;
+	struct page **rpages;
+	unsigned int nr_rpages;
+	struct page **cpages;
+	unsigned int nr_cpages;
+	struct page **tpages;
+	void *rbuf;
+	struct compress_data *cbuf;
+	size_t rlen;
+	size_t clen;
+	atomic_t remaining_pages;
+	refcount_t refcnt;
+	bool failed;
+	bool need_verity;
+	void *private;
+	void *private2;
+	struct work_struct verity_work;
+	struct work_struct free_work;
+};
+
+enum {
+	IS_CHECKPOINTED = 0,
+	HAS_FSYNCED_INODE = 1,
+	HAS_LAST_FSYNC = 2,
+	IS_DIRTY = 3,
+	IS_PREALLOC = 4,
+};
+
+enum {
+	NAT_JOURNAL = 0,
+	SIT_JOURNAL = 1,
+};
+
+struct fsync_node_entry {
+	struct list_head list;
+	struct page *page;
+	unsigned int seq_id;
+};
+
+struct nat_entry {
+	struct list_head list;
+	struct node_info ni;
+};
+
+struct f2fs_nat_block {
+	struct f2fs_nat_entry entries[455];
+};
+
+struct nat_entry_set {
+	struct list_head set_list;
+	struct list_head entry_list;
+	nid_t set;
+	unsigned int entry_cnt;
+};
+
+enum {
+	DPOLICY_BG = 0,
+	DPOLICY_FORCE = 1,
+	DPOLICY_FSTRIM = 2,
+	DPOLICY_UMOUNT = 3,
+	MAX_DPOLICY = 4,
+};
+
+enum {
+	D_PREP = 0,
+	D_PARTIAL = 1,
+	D_SUBMIT = 2,
+	D_DONE = 3,
+};
+
+enum {
+	DPOLICY_IO_AWARE_DISABLE = 0,
+	DPOLICY_IO_AWARE_ENABLE = 1,
+	DPOLICY_IO_AWARE_MAX = 2,
+};
+
+enum blk_zone_cond {
+	BLK_ZONE_COND_NOT_WP = 0,
+	BLK_ZONE_COND_EMPTY = 1,
+	BLK_ZONE_COND_IMP_OPEN = 2,
+	BLK_ZONE_COND_EXP_OPEN = 3,
+	BLK_ZONE_COND_CLOSED = 4,
+	BLK_ZONE_COND_READONLY = 13,
+	BLK_ZONE_COND_FULL = 14,
+	BLK_ZONE_COND_OFFLINE = 15,
+};
+
+struct flush_cmd {
+	struct completion wait;
+	struct llist_node llnode;
+	nid_t ino;
+	int ret;
+};
+
+struct discard_entry {
+	struct list_head list;
+	block_t start_blkaddr;
+	unsigned char discard_map[64];
+};
+
+struct sit_entry_set {
+	struct list_head set_list;
+	unsigned int start_segno;
+	unsigned int entry_cnt;
+};
+
+struct revoke_entry {
+	struct list_head list;
+	block_t old_addr;
+	unsigned long index;
+};
+
+struct discard_info {
+	block_t lstart;
+	block_t len;
+	block_t start;
+};
+
+struct discard_cmd {
+	struct rb_node rb_node;
+	struct discard_info di;
+	struct list_head list;
+	struct completion wait;
+	struct block_device *bdev;
+	unsigned short ref;
+	unsigned char state;
+	unsigned char queued;
+	int error;
+	spinlock_t lock;
+	unsigned short bio_ref;
+};
+
+struct f2fs_sit_block {
+	struct f2fs_sit_entry entries[55];
+};
+
+struct check_zone_write_pointer_args {
+	struct f2fs_sb_info *sbi;
+	struct f2fs_dev_info *fdev;
+};
+
+struct discard_policy {
+	int type;
+	unsigned int min_interval;
+	unsigned int mid_interval;
+	unsigned int max_interval;
+	unsigned int max_requests;
+	unsigned int io_aware_gran;
+	bool io_aware;
+	bool sync;
+	bool ordered;
+	bool timeout;
+	unsigned int granularity;
+};
+
+struct fsync_inode_entry {
+	struct list_head list;
+	struct inode *inode;
+	block_t blkaddr;
+	block_t last_dentry;
+};
+
+struct f2fs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct f2fs_attr *, struct f2fs_sb_info *, char *);
+	ssize_t (*store)(struct f2fs_attr *, struct f2fs_sb_info *, const char *, size_t);
+	int struct_type;
+	int offset;
+	int id;
+};
+
+enum {
+	GC_THREAD = 0,
+	SM_INFO = 1,
+	DCC_INFO = 2,
+	NM_INFO = 3,
+	F2FS_SBI = 4,
+	STAT_INFO = 5,
+	RESERVED_BLOCKS = 6,
+	CPRC_INFO = 7,
+	ATGC_INFO = 8,
+};
+
+struct f2fs_xattr_entry {
+	__u8 e_name_index;
+	__u8 e_name_len;
+	__le16 e_value_size;
+	char e_name[0];
+};
+
+struct f2fs_xattr_header {
+	__le32 h_magic;
+	__le32 h_refcount;
+	__u32 h_reserved[4];
+};
+
+struct f2fs_acl_header {
+	__le32 a_version;
+};
+
+struct f2fs_acl_entry {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+};
+
+struct fsverity_descriptor_location {
+	__le32 version;
+	__le32 size;
+	__le64 pos;
+};
+
+struct f2fs_compress_ops {
+	int (*init_compress_ctx)(struct compress_ctx *);
+	void (*destroy_compress_ctx)(struct compress_ctx *);
+	int (*compress_pages)(struct compress_ctx *);
+	int (*init_decompress_ctx)(struct decompress_io_ctx *);
+	void (*destroy_decompress_ctx)(struct decompress_io_ctx *);
+	int (*decompress_pages)(struct decompress_io_ctx *);
+	bool (*is_level_valid)(int);
+};
+
+struct compress_io_ctx {
+	u32 magic;
+	struct inode *inode;
+	struct page **rpages;
+	unsigned int nr_rpages;
+	atomic_t pending_pages;
+};
+
+typedef enum {
+	ZSTD_fast = 1,
+	ZSTD_dfast = 2,
+	ZSTD_greedy = 3,
+	ZSTD_lazy = 4,
+	ZSTD_lazy2 = 5,
+	ZSTD_btlazy2 = 6,
+	ZSTD_btopt = 7,
+	ZSTD_btultra = 8,
+	ZSTD_btultra2 = 9,
+} ZSTD_strategy;
+
+typedef struct {
+	unsigned int windowLog;
+	unsigned int chainLog;
+	unsigned int hashLog;
+	unsigned int searchLog;
+	unsigned int minMatch;
+	unsigned int targetLength;
+	ZSTD_strategy strategy;
+} ZSTD_compressionParameters;
+
+typedef struct {
+	int contentSizeFlag;
+	int checksumFlag;
+	int noDictIDFlag;
+} ZSTD_frameParameters;
+
+typedef struct {
+	ZSTD_compressionParameters cParams;
+	ZSTD_frameParameters fParams;
+} ZSTD_parameters;
+
+typedef ZSTD_parameters zstd_parameters;
+
+typedef ZSTD_compressionParameters zstd_compression_parameters;
+
+typedef enum {
+	ZSTDcs_created = 0,
+	ZSTDcs_init = 1,
+	ZSTDcs_ongoing = 2,
+	ZSTDcs_ending = 3,
+} ZSTD_compressionStage_e;
+
+typedef enum {
+	ZSTD_dictDefaultAttach = 0,
+	ZSTD_dictForceAttach = 1,
+	ZSTD_dictForceCopy = 2,
+	ZSTD_dictForceLoad = 3,
+} ZSTD_dictAttachPref_e;
+
+typedef enum {
+	ZSTD_ps_auto = 0,
+	ZSTD_ps_enable = 1,
+	ZSTD_ps_disable = 2,
+} ZSTD_paramSwitch_e;
+
+typedef struct {
+	ZSTD_paramSwitch_e enableLdm;
+	U32 hashLog;
+	U32 bucketSizeLog;
+	U32 minMatchLength;
+	U32 hashRateLog;
+	U32 windowLog;
+} ldmParams_t;
+
+typedef enum {
+	ZSTD_sf_noBlockDelimiters = 0,
+	ZSTD_sf_explicitBlockDelimiters = 1,
+} ZSTD_sequenceFormat_e;
+
+struct ZSTD_CCtx_params_s {
+	ZSTD_format_e format;
+	ZSTD_compressionParameters cParams;
+	ZSTD_frameParameters fParams;
+	int compressionLevel;
+	int forceWindow;
+	size_t targetCBlockSize;
+	int srcSizeHint;
+	ZSTD_dictAttachPref_e attachDictPref;
+	ZSTD_paramSwitch_e literalCompressionMode;
+	int nbWorkers;
+	size_t jobSize;
+	int overlapLog;
+	int rsyncable;
+	ldmParams_t ldmParams;
+	int enableDedicatedDictSearch;
+	ZSTD_bufferMode_e inBufferMode;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_sequenceFormat_e blockDelimiters;
+	int validateSequences;
+	ZSTD_paramSwitch_e useBlockSplitter;
+	ZSTD_paramSwitch_e useRowMatchFinder;
+	int deterministicRefPrefix;
+	ZSTD_customMem customMem;
+};
+
+typedef struct ZSTD_CCtx_params_s ZSTD_CCtx_params;
+
+typedef enum {
+	ZSTD_cwksp_alloc_objects = 0,
+	ZSTD_cwksp_alloc_buffers = 1,
+	ZSTD_cwksp_alloc_aligned = 2,
+} ZSTD_cwksp_alloc_phase_e;
+
+typedef enum {
+	ZSTD_cwksp_dynamic_alloc = 0,
+	ZSTD_cwksp_static_alloc = 1,
+} ZSTD_cwksp_static_alloc_e;
+
+typedef struct {
+	void *workspace;
+	void *workspaceEnd;
+	void *objectEnd;
+	void *tableEnd;
+	void *tableValidEnd;
+	void *allocStart;
+	BYTE allocFailed;
+	int workspaceOversizedDuration;
+	ZSTD_cwksp_alloc_phase_e phase;
+	ZSTD_cwksp_static_alloc_e isStatic;
+} ZSTD_cwksp;
+
+struct POOL_ctx_s;
+
+typedef struct POOL_ctx_s ZSTD_threadPool;
+
+typedef struct {
+	unsigned int offset;
+	unsigned int litLength;
+	unsigned int matchLength;
+	unsigned int rep;
+} ZSTD_Sequence;
+
+typedef struct {
+	int collectSequences;
+	ZSTD_Sequence *seqStart;
+	size_t seqIndex;
+	size_t maxSequences;
+} SeqCollector;
+
+typedef enum {
+	ZSTD_llt_none = 0,
+	ZSTD_llt_literalLength = 1,
+	ZSTD_llt_matchLength = 2,
+} ZSTD_longLengthType_e;
+
+struct seqDef_s;
+
+typedef struct seqDef_s seqDef;
+
+typedef struct {
+	seqDef *sequencesStart;
+	seqDef *sequences;
+	BYTE *litStart;
+	BYTE *lit;
+	BYTE *llCode;
+	BYTE *mlCode;
+	BYTE *ofCode;
+	size_t maxNbSeq;
+	size_t maxNbLit;
+	ZSTD_longLengthType_e longLengthType;
+	U32 longLengthPos;
+} seqStore_t;
+
+typedef struct {
+	const BYTE *nextSrc;
+	const BYTE *base;
+	const BYTE *dictBase;
+	U32 dictLimit;
+	U32 lowLimit;
+	U32 nbOverflowCorrections;
+} ZSTD_window_t;
+
+typedef struct {
+	U32 offset;
+	U32 checksum;
+} ldmEntry_t;
+
+typedef struct {
+	const BYTE *split;
+	U32 hash;
+	U32 checksum;
+	ldmEntry_t *bucket;
+} ldmMatchCandidate_t;
+
+typedef struct {
+	ZSTD_window_t window;
+	ldmEntry_t *hashTable;
+	U32 loadedDictEnd;
+	BYTE *bucketOffsets;
+	size_t splitIndices[64];
+	ldmMatchCandidate_t matchCandidates[64];
+} ldmState_t;
+
+typedef struct {
+	U32 offset;
+	U32 litLength;
+	U32 matchLength;
+} rawSeq;
+
+typedef struct {
+	rawSeq *seq;
+	size_t pos;
+	size_t posInSequence;
+	size_t size;
+	size_t capacity;
+} rawSeqStore_t;
+
+typedef size_t HUF_CElt;
+
+typedef enum {
+	HUF_repeat_none = 0,
+	HUF_repeat_check = 1,
+	HUF_repeat_valid = 2,
+} HUF_repeat;
+
+typedef struct {
+	HUF_CElt CTable[257];
+	HUF_repeat repeatMode;
+} ZSTD_hufCTables_t;
+
+typedef unsigned int FSE_CTable;
+
+typedef enum {
+	FSE_repeat_none = 0,
+	FSE_repeat_check = 1,
+	FSE_repeat_valid = 2,
+} FSE_repeat;
+
+typedef struct {
+	FSE_CTable offcodeCTable[193];
+	FSE_CTable matchlengthCTable[363];
+	FSE_CTable litlengthCTable[329];
+	FSE_repeat offcode_repeatMode;
+	FSE_repeat matchlength_repeatMode;
+	FSE_repeat litlength_repeatMode;
+} ZSTD_fseCTables_t;
+
+typedef struct {
+	ZSTD_hufCTables_t huf;
+	ZSTD_fseCTables_t fse;
+} ZSTD_entropyCTables_t;
+
+typedef struct {
+	ZSTD_entropyCTables_t entropy;
+	U32 rep[3];
+} ZSTD_compressedBlockState_t;
+
+typedef struct {
+	U32 off;
+	U32 len;
+} ZSTD_match_t;
+
+typedef struct {
+	int price;
+	U32 off;
+	U32 mlen;
+	U32 litlen;
+	U32 rep[3];
+} ZSTD_optimal_t;
+
+typedef enum {
+	zop_dynamic = 0,
+	zop_predef = 1,
+} ZSTD_OptPrice_e;
+
+typedef struct {
+	unsigned int *litFreq;
+	unsigned int *litLengthFreq;
+	unsigned int *matchLengthFreq;
+	unsigned int *offCodeFreq;
+	ZSTD_match_t *matchTable;
+	ZSTD_optimal_t *priceTable;
+	U32 litSum;
+	U32 litLengthSum;
+	U32 matchLengthSum;
+	U32 offCodeSum;
+	U32 litSumBasePrice;
+	U32 litLengthSumBasePrice;
+	U32 matchLengthSumBasePrice;
+	U32 offCodeSumBasePrice;
+	ZSTD_OptPrice_e priceType;
+	const ZSTD_entropyCTables_t *symbolCosts;
+	ZSTD_paramSwitch_e literalCompressionMode;
+} optState_t;
+
+struct ZSTD_matchState_t;
+
+typedef struct ZSTD_matchState_t ZSTD_matchState_t;
+
+struct ZSTD_matchState_t {
+	ZSTD_window_t window;
+	U32 loadedDictEnd;
+	U32 nextToUpdate;
+	U32 hashLog3;
+	U32 rowHashLog;
+	U16 *tagTable;
+	U32 hashCache[8];
+	U32 *hashTable;
+	U32 *hashTable3;
+	U32 *chainTable;
+	U32 forceNonContiguous;
+	int dedicatedDictSearch;
+	optState_t opt;
+	const ZSTD_matchState_t *dictMatchState;
+	ZSTD_compressionParameters cParams;
+	const rawSeqStore_t *ldmSeqStore;
+};
+
+typedef struct {
+	ZSTD_compressedBlockState_t *prevCBlock;
+	ZSTD_compressedBlockState_t *nextCBlock;
+	ZSTD_matchState_t matchState;
+} ZSTD_blockState_t;
+
+typedef enum {
+	ZSTDb_not_buffered = 0,
+	ZSTDb_buffered = 1,
+} ZSTD_buffered_policy_e;
+
+typedef enum {
+	zcss_init = 0,
+	zcss_load = 1,
+	zcss_flush = 2,
+} ZSTD_cStreamStage;
+
+typedef enum {
+	ZSTD_dct_auto = 0,
+	ZSTD_dct_rawContent = 1,
+	ZSTD_dct_fullDict = 2,
+} ZSTD_dictContentType_e;
+
+struct ZSTD_CDict_s;
+
+typedef struct ZSTD_CDict_s ZSTD_CDict;
+
+typedef struct {
+	void *dictBuffer;
+	const void *dict;
+	size_t dictSize;
+	ZSTD_dictContentType_e dictContentType;
+	ZSTD_CDict *cdict;
+} ZSTD_localDict;
+
+struct ZSTD_prefixDict_s {
+	const void *dict;
+	size_t dictSize;
+	ZSTD_dictContentType_e dictContentType;
+};
+
+typedef struct ZSTD_prefixDict_s ZSTD_prefixDict;
+
+typedef enum {
+	set_basic = 0,
+	set_rle = 1,
+	set_compressed = 2,
+	set_repeat = 3,
+} symbolEncodingType_e;
+
+typedef struct {
+	symbolEncodingType_e hType;
+	BYTE hufDesBuffer[128];
+	size_t hufDesSize;
+} ZSTD_hufCTablesMetadata_t;
+
+typedef struct {
+	symbolEncodingType_e llType;
+	symbolEncodingType_e ofType;
+	symbolEncodingType_e mlType;
+	BYTE fseTablesBuffer[133];
+	size_t fseTablesSize;
+	size_t lastCountSize;
+} ZSTD_fseCTablesMetadata_t;
+
+typedef struct {
+	ZSTD_hufCTablesMetadata_t hufMetadata;
+	ZSTD_fseCTablesMetadata_t fseMetadata;
+} ZSTD_entropyCTablesMetadata_t;
+
+typedef struct {
+	seqStore_t fullSeqStoreChunk;
+	seqStore_t firstHalfSeqStore;
+	seqStore_t secondHalfSeqStore;
+	seqStore_t currSeqStore;
+	seqStore_t nextSeqStore;
+	U32 partitions[196];
+	ZSTD_entropyCTablesMetadata_t entropyMetadata;
+} ZSTD_blockSplitCtx;
+
+struct ZSTD_CCtx_s {
+	ZSTD_compressionStage_e stage;
+	int cParamsChanged;
+	int bmi2;
+	ZSTD_CCtx_params requestedParams;
+	ZSTD_CCtx_params appliedParams;
+	ZSTD_CCtx_params simpleApiParams;
+	U32 dictID;
+	size_t dictContentSize;
+	ZSTD_cwksp workspace;
+	size_t blockSize;
+	unsigned long long pledgedSrcSizePlusOne;
+	unsigned long long consumedSrcSize;
+	unsigned long long producedCSize;
+	struct xxh64_state xxhState;
+	ZSTD_customMem customMem;
+	ZSTD_threadPool *pool;
+	size_t staticSize;
+	SeqCollector seqCollector;
+	int isFirstBlock;
+	int initialized;
+	seqStore_t seqStore;
+	ldmState_t ldmState;
+	rawSeq *ldmSequences;
+	size_t maxNbLdmSequences;
+	rawSeqStore_t externSeqStore;
+	ZSTD_blockState_t blockState;
+	U32 *entropyWorkspace;
+	ZSTD_buffered_policy_e bufferedPolicy;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inToCompress;
+	size_t inBuffPos;
+	size_t inBuffTarget;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outBuffContentSize;
+	size_t outBuffFlushedSize;
+	ZSTD_cStreamStage streamStage;
+	U32 frameEnded;
+	ZSTD_inBuffer expectedInBuffer;
+	size_t expectedOutBufferSize;
+	ZSTD_localDict localDict;
+	const ZSTD_CDict *cdict;
+	ZSTD_prefixDict prefixDict;
+	ZSTD_blockSplitCtx blockSplitCtx;
+};
+
+typedef struct ZSTD_CCtx_s ZSTD_CCtx;
+
+typedef ZSTD_CCtx ZSTD_CStream;
+
+typedef ZSTD_CStream zstd_cstream;
+
+typedef enum {
+	ZSTD_error_no_error = 0,
+	ZSTD_error_GENERIC = 1,
+	ZSTD_error_prefix_unknown = 10,
+	ZSTD_error_version_unsupported = 12,
+	ZSTD_error_frameParameter_unsupported = 14,
+	ZSTD_error_frameParameter_windowTooLarge = 16,
+	ZSTD_error_corruption_detected = 20,
+	ZSTD_error_checksum_wrong = 22,
+	ZSTD_error_dictionary_corrupted = 30,
+	ZSTD_error_dictionary_wrong = 32,
+	ZSTD_error_dictionaryCreation_failed = 34,
+	ZSTD_error_parameter_unsupported = 40,
+	ZSTD_error_parameter_outOfBound = 42,
+	ZSTD_error_tableLog_tooLarge = 44,
+	ZSTD_error_maxSymbolValue_tooLarge = 46,
+	ZSTD_error_maxSymbolValue_tooSmall = 48,
+	ZSTD_error_stage_wrong = 60,
+	ZSTD_error_init_missing = 62,
+	ZSTD_error_memory_allocation = 64,
+	ZSTD_error_workSpace_tooSmall = 66,
+	ZSTD_error_dstSize_tooSmall = 70,
+	ZSTD_error_srcSize_wrong = 72,
+	ZSTD_error_dstBuffer_null = 74,
+	ZSTD_error_frameIndex_tooLarge = 100,
+	ZSTD_error_seekableIO = 102,
+	ZSTD_error_dstBuffer_wrong = 104,
+	ZSTD_error_srcBuffer_wrong = 105,
+	ZSTD_error_maxCode = 120,
+} ZSTD_ErrorCode;
+
+typedef ZSTD_ErrorCode zstd_error_code;
+
+enum pstore_type_id {
+	PSTORE_TYPE_DMESG = 0,
+	PSTORE_TYPE_MCE = 1,
+	PSTORE_TYPE_CONSOLE = 2,
+	PSTORE_TYPE_FTRACE = 3,
+	PSTORE_TYPE_PPC_RTAS = 4,
+	PSTORE_TYPE_PPC_OF = 5,
+	PSTORE_TYPE_PPC_COMMON = 6,
+	PSTORE_TYPE_PMSG = 7,
+	PSTORE_TYPE_PPC_OPAL = 8,
+	PSTORE_TYPE_MAX = 9,
+};
+
+enum {
+	Opt_kmsg_bytes = 0,
+	Opt_err___7 = 1,
+};
+
+struct pstore_record;
+
+struct pstore_private {
+	struct list_head list;
+	struct dentry *dentry;
+	struct pstore_record *record;
+	size_t total_size;
+};
+
+struct pstore_info;
+
+struct pstore_record {
+	struct pstore_info *psi;
+	enum pstore_type_id type;
+	u64 id;
+	struct timespec64 time;
+	char *buf;
+	ssize_t size;
+	ssize_t ecc_notice_size;
+	void *priv;
+	int count;
+	enum kmsg_dump_reason reason;
+	unsigned int part;
+	bool compressed;
+};
+
+struct pstore_info {
+	struct module *owner;
+	const char *name;
+	spinlock_t buf_lock;
+	char *buf;
+	size_t bufsize;
+	struct mutex read_mutex;
+	int flags;
+	int max_reason;
+	void *data;
+	int (*open)(struct pstore_info *);
+	int (*close)(struct pstore_info *);
+	ssize_t (*read)(struct pstore_record *);
+	int (*write)(struct pstore_record *);
+	int (*write_user)(struct pstore_record *, const char __attribute__((btf_type_tag("user"))) *);
+	int (*erase)(struct pstore_record *);
+};
+
+struct pstore_ftrace_record {
+	unsigned long ip;
+	unsigned long parent_ip;
+	u64 ts;
+};
+
+struct pstore_ftrace_seq_data {
+	const void *ptr;
+	size_t off;
+	size_t size;
+};
+
+typedef unsigned char Byte;
+
+typedef unsigned long uLong;
+
+struct internal_state;
+
+struct z_stream_s {
+	const Byte *next_in;
+	uLong avail_in;
+	uLong total_in;
+	Byte *next_out;
+	uLong avail_out;
+	uLong total_out;
+	char *msg;
+	struct internal_state *state;
+	void *workspace;
+	int data_type;
+	uLong adler;
+	uLong reserved;
+};
+
+struct internal_state {
+	int dummy;
+};
+
+typedef struct z_stream_s z_stream;
+
+typedef z_stream *z_streamp;
+
+struct persistent_ram_ecc_info {
+	int block_size;
+	int ecc_size;
+	int symsize;
+	int poly;
+	uint16_t *par;
+};
+
+struct persistent_ram_zone;
+
+struct ramoops_context {
+	struct persistent_ram_zone **dprzs;
+	struct persistent_ram_zone *cprz;
+	struct persistent_ram_zone **fprzs;
+	struct persistent_ram_zone *mprz;
+	phys_addr_t phys_addr;
+	unsigned long size;
+	unsigned int memtype;
+	size_t record_size;
+	size_t console_size;
+	size_t ftrace_size;
+	size_t pmsg_size;
+	u32 flags;
+	struct persistent_ram_ecc_info ecc_info;
+	unsigned int max_dump_cnt;
+	unsigned int dump_write_cnt;
+	unsigned int dump_read_cnt;
+	unsigned int console_read_cnt;
+	unsigned int max_ftrace_cnt;
+	unsigned int ftrace_read_cnt;
+	unsigned int pmsg_read_cnt;
+	struct pstore_info pstore;
+};
+
+struct persistent_ram_buffer;
+
+struct rs_control;
+
+struct persistent_ram_zone {
+	phys_addr_t paddr;
+	size_t size;
+	void *vaddr;
+	char *label;
+	enum pstore_type_id type;
+	u32 flags;
+	raw_spinlock_t buffer_lock;
+	struct persistent_ram_buffer *buffer;
+	size_t buffer_size;
+	char *par_buffer;
+	char *par_header;
+	struct rs_control *rs_decoder;
+	int corrected_bytes;
+	int bad_blocks;
+	struct persistent_ram_ecc_info ecc_info;
+	char *old_log;
+	size_t old_log_size;
+};
+
+struct ramoops_platform_data {
+	unsigned long mem_size;
+	phys_addr_t mem_address;
+	unsigned int mem_type;
+	unsigned long record_size;
+	unsigned long console_size;
+	unsigned long ftrace_size;
+	unsigned long pmsg_size;
+	int max_reason;
+	u32 flags;
+	struct persistent_ram_ecc_info ecc_info;
+};
+
+struct persistent_ram_buffer {
+	uint32_t sig;
+	atomic_t start;
+	atomic_t size;
+	uint8_t data[0];
+};
+
+struct rs_codec;
+
+struct rs_control {
+	struct rs_codec *codec;
+	uint16_t buffers[0];
+};
+
+struct rs_codec {
+	int mm;
+	int nn;
+	uint16_t *alpha_to;
+	uint16_t *index_of;
+	uint16_t *genpoly;
+	int nroots;
+	int fcr;
+	int prim;
+	int iprim;
+	int gfpoly;
+	int (*gffunc)(int);
+	int users;
+	struct list_head list;
+};
+
+typedef void (*btf_trace_erofs_lookup)(void *, struct inode *, struct dentry *, unsigned int);
+
+typedef void (*btf_trace_erofs_fill_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_erofs_read_folio)(void *, struct folio *, bool);
+
+typedef void (*btf_trace_erofs_readpages)(void *, struct inode *, unsigned long, unsigned int, bool);
+
+struct erofs_map_blocks;
+
+typedef void (*btf_trace_erofs_map_blocks_enter)(void *, struct inode *, struct erofs_map_blocks *, unsigned int);
+
+enum erofs_kmap_type {
+	EROFS_NO_KMAP = 0,
+	EROFS_KMAP = 1,
+};
+
+struct erofs_buf {
+	struct inode *inode;
+	struct page *page;
+	void *base;
+	enum erofs_kmap_type kmap_type;
+};
+
+typedef u64 erofs_off_t;
+
+struct erofs_map_blocks {
+	struct erofs_buf buf;
+	erofs_off_t m_pa;
+	erofs_off_t m_la;
+	u64 m_plen;
+	u64 m_llen;
+	unsigned short m_deviceid;
+	char m_algorithmformat;
+	unsigned int m_flags;
+};
+
+typedef void (*btf_trace_z_erofs_map_blocks_iter_enter)(void *, struct inode *, struct erofs_map_blocks *, unsigned int);
+
+typedef void (*btf_trace_erofs_map_blocks_exit)(void *, struct inode *, struct erofs_map_blocks *, unsigned int, int);
+
+typedef void (*btf_trace_z_erofs_map_blocks_iter_exit)(void *, struct inode *, struct erofs_map_blocks *, unsigned int, int);
+
+typedef void (*btf_trace_erofs_destroy_inode)(void *, struct inode *);
+
+enum {
+	EROFS_ZIP_CACHE_DISABLED = 0,
+	EROFS_ZIP_CACHE_READAHEAD = 1,
+	EROFS_ZIP_CACHE_READAROUND = 2,
+};
+
+enum {
+	EROFS_SYNC_DECOMPRESS_AUTO = 0,
+	EROFS_SYNC_DECOMPRESS_FORCE_ON = 1,
+	EROFS_SYNC_DECOMPRESS_FORCE_OFF = 2,
+};
+
+enum {
+	Opt_user_xattr___3 = 0,
+	Opt_acl___3 = 1,
+	Opt_cache_strategy = 2,
+	Opt_dax___2 = 3,
+	Opt_dax_enum = 4,
+	Opt_device = 5,
+	Opt_fsid = 6,
+	Opt_domain_id = 7,
+	Opt_err___8 = 8,
+};
+
+typedef u32 erofs_blk_t;
+
+typedef u64 erofs_nid_t;
+
+struct erofs_inode {
+	erofs_nid_t nid;
+	unsigned long flags;
+	unsigned char datalayout;
+	unsigned char inode_isize;
+	unsigned int xattr_isize;
+	unsigned int xattr_name_filter;
+	unsigned int xattr_shared_count;
+	unsigned int *xattr_shared_xattrs;
+	union {
+		erofs_blk_t raw_blkaddr;
+		struct {
+			unsigned short chunkformat;
+			unsigned char chunkbits;
+		};
+		struct {
+			unsigned short z_advise;
+			unsigned char z_algorithmtype[2];
+			unsigned char z_logical_clusterbits;
+			unsigned long z_tailextent_headlcn;
+			union {
+				struct {
+					erofs_off_t z_idataoff;
+					unsigned short z_idata_size;
+				};
+				erofs_off_t z_fragmentoff;
+			};
+		};
+	};
+	struct inode vfs_inode;
+};
+
+struct trace_event_raw_erofs_lookup {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	u32 __data_loc_name;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct erofs_mount_opts {
+	unsigned char cache_strategy;
+	unsigned int sync_decompress;
+	unsigned int max_sync_decompress_pages;
+	unsigned int mount_opt;
+};
+
+struct erofs_sb_lz4_info {
+	u16 max_distance_pages;
+	u16 max_pclusterblks;
+};
+
+struct fscache_volume;
+
+struct erofs_dev_context;
+
+struct erofs_xattr_prefix_item;
+
+struct erofs_fscache;
+
+struct erofs_domain;
+
+struct erofs_sb_info {
+	struct erofs_mount_opts opt;
+	struct list_head list;
+	struct mutex umount_mutex;
+	struct xarray managed_pslots;
+	unsigned int shrinker_run_no;
+	u16 available_compr_algs;
+	struct inode *managed_cache;
+	struct erofs_sb_lz4_info lz4;
+	struct inode *packed_inode;
+	struct erofs_dev_context *devs;
+	struct dax_device *dax_dev;
+	u64 dax_part_off;
+	u64 total_blocks;
+	u32 primarydevice_blocks;
+	u32 meta_blkaddr;
+	u32 xattr_blkaddr;
+	u32 xattr_prefix_start;
+	u8 xattr_prefix_count;
+	struct erofs_xattr_prefix_item *xattr_prefixes;
+	unsigned int xattr_filter_reserved;
+	u16 device_id_mask;
+	unsigned char islotbits;
+	unsigned char blkszbits;
+	u32 sb_size;
+	u32 build_time_nsec;
+	u64 build_time;
+	erofs_nid_t root_nid;
+	erofs_nid_t packed_nid;
+	u64 inos;
+	u8 uuid[16];
+	u8 volume_name[16];
+	u32 feature_compat;
+	u32 feature_incompat;
+	struct kobject s_kobj;
+	struct completion s_kobj_unregister;
+	struct fscache_volume *volume;
+	struct erofs_fscache *s_fscache;
+	struct erofs_domain *domain;
+	char *fsid;
+	char *domain_id;
+};
+
+struct erofs_dev_context {
+	struct idr tree;
+	struct rw_semaphore rwsem;
+	unsigned int extra_devices;
+	bool flatdev;
+};
+
+struct erofs_xattr_long_prefix;
+
+struct erofs_xattr_prefix_item {
+	struct erofs_xattr_long_prefix *prefix;
+	u8 infix_len;
+};
+
+struct erofs_xattr_long_prefix {
+	__u8 base_index;
+	char infix[0];
+};
+
+struct fscache_cookie;
+
+struct erofs_fscache {
+	struct fscache_cookie *cookie;
+	struct inode *inode;
+	struct erofs_domain *domain;
+	struct list_head node;
+	refcount_t ref;
+	char *name;
+};
+
+struct erofs_domain {
+	refcount_t ref;
+	struct list_head list;
+	struct fscache_volume *volume;
+	char *domain_id;
+};
+
+struct trace_event_raw_erofs_fill_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	erofs_blk_t blkaddr;
+	unsigned int ofs;
+	char __data[0];
+};
+
+struct trace_event_raw_erofs_read_folio {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	int dir;
+	unsigned long index;
+	int uptodate;
+	bool raw;
+	char __data[0];
+};
+
+struct trace_event_raw_erofs_readpages {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	unsigned long start;
+	unsigned int nrpage;
+	bool raw;
+	char __data[0];
+};
+
+struct trace_event_raw_erofs__map_blocks_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	erofs_off_t la;
+	u64 llen;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_erofs__map_blocks_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	unsigned int flags;
+	erofs_off_t la;
+	erofs_off_t pa;
+	u64 llen;
+	u64 plen;
+	unsigned int mflags;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_erofs_destroy_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	char __data[0];
+};
+
+struct erofs_super_block {
+	__le32 magic;
+	__le32 checksum;
+	__le32 feature_compat;
+	__u8 blkszbits;
+	__u8 sb_extslots;
+	__le16 root_nid;
+	__le64 inos;
+	__le64 build_time;
+	__le32 build_time_nsec;
+	__le32 blocks;
+	__le32 meta_blkaddr;
+	__le32 xattr_blkaddr;
+	__u8 uuid[16];
+	__u8 volume_name[16];
+	__le32 feature_incompat;
+	union {
+		__le16 available_compr_algs;
+		__le16 lz4_max_distance;
+	} u1;
+	__le16 extra_devices;
+	__le16 devt_slotoff;
+	__u8 dirblkbits;
+	__u8 xattr_prefix_count;
+	__le32 xattr_prefix_start;
+	__le64 packed_nid;
+	__u8 xattr_filter_reserved;
+	__u8 reserved2[23];
+};
+
+struct trace_event_data_offsets_erofs_lookup {
+	u32 name;
+};
+
+struct erofs_fs_context {
+	struct erofs_mount_opts opt;
+	struct erofs_dev_context *devs;
+	char *fsid;
+	char *domain_id;
+};
+
+struct bdev_handle {
+	struct block_device *bdev;
+	void *holder;
+};
+
+struct trace_event_data_offsets_erofs_fill_inode {};
+
+struct trace_event_data_offsets_erofs_read_folio {};
+
+struct trace_event_data_offsets_erofs_readpages {};
+
+struct trace_event_data_offsets_erofs__map_blocks_enter {};
+
+struct trace_event_data_offsets_erofs__map_blocks_exit {};
+
+struct trace_event_data_offsets_erofs_destroy_inode {};
+
+struct erofs_device_info {
+	char *path;
+	struct erofs_fscache *fscache;
+	struct bdev_handle *bdev_handle;
+	struct dax_device *dax_dev;
+	u64 dax_part_off;
+	u32 blocks;
+	u32 mapped_blkaddr;
+};
+
+struct erofs_deviceslot {
+	u8 tag[64];
+	__le32 blocks;
+	__le32 mapped_blkaddr;
+	u8 reserved[56];
+};
+
+enum {
+	EROFS_INODE_FLAT_PLAIN = 0,
+	EROFS_INODE_COMPRESSED_FULL = 1,
+	EROFS_INODE_FLAT_INLINE = 2,
+	EROFS_INODE_COMPRESSED_COMPACT = 3,
+	EROFS_INODE_CHUNK_BASED = 4,
+	EROFS_INODE_DATALAYOUT_MAX = 5,
+};
+
+struct erofs_inode_chunk_info {
+	__le16 format;
+	__le16 reserved;
+};
+
+union erofs_inode_i_u {
+	__le32 compressed_blocks;
+	__le32 raw_blkaddr;
+	__le32 rdev;
+	struct erofs_inode_chunk_info c;
+};
+
+struct erofs_inode_extended {
+	__le16 i_format;
+	__le16 i_xattr_icount;
+	__le16 i_mode;
+	__le16 i_reserved;
+	__le64 i_size;
+	union erofs_inode_i_u i_u;
+	__le32 i_ino;
+	__le32 i_uid;
+	__le32 i_gid;
+	__le64 i_mtime;
+	__le32 i_mtime_nsec;
+	__le32 i_nlink;
+	__u8 i_reserved2[16];
+};
+
+struct erofs_inode_compact {
+	__le16 i_format;
+	__le16 i_xattr_icount;
+	__le16 i_mode;
+	__le16 i_nlink;
+	__le32 i_size;
+	__le32 i_reserved;
+	union erofs_inode_i_u i_u;
+	__le32 i_ino;
+	__le16 i_uid;
+	__le16 i_gid;
+	__le32 i_reserved2;
+};
+
+struct erofs_inode_chunk_index {
+	__le16 advise;
+	__le16 device_id;
+	__le32 blkaddr;
+};
+
+struct erofs_map_dev {
+	struct erofs_fscache *m_fscache;
+	struct block_device *m_bdev;
+	struct dax_device *m_daxdev;
+	u64 m_dax_part_off;
+	erofs_off_t m_pa;
+	unsigned int m_deviceid;
+};
+
+struct erofs_dirent {
+	__le64 nid;
+	__le16 nameoff;
+	__u8 file_type;
+	__u8 reserved;
+} __attribute__((packed));
+
+struct erofs_qstr {
+	const unsigned char *name;
+	const unsigned char *end;
+};
+
+struct erofs_attr {
+	struct attribute attr;
+	short attr_id;
+	int struct_type;
+	int offset;
+};
+
+enum {
+	attr_feature___2 = 0,
+	attr_pointer_ui___2 = 1,
+	attr_pointer_bool = 2,
+};
+
+enum {
+	struct_erofs_sb_info = 0,
+	struct_erofs_mount_opts = 1,
+};
+
+struct erofs_xattr_entry {
+	__u8 e_name_len;
+	__u8 e_name_index;
+	__le16 e_value_size;
+	char e_name[0];
+};
+
+struct erofs_xattr_iter {
+	struct super_block *sb;
+	struct erofs_buf buf;
+	erofs_off_t pos;
+	void *kaddr;
+	char *buffer;
+	int buffer_size;
+	int buffer_ofs;
+	int index;
+	int infix_len;
+	struct qstr name;
+	struct dentry *dentry;
+};
+
+struct erofs_xattr_ibody_header {
+	__le32 h_name_filter;
+	__u8 h_shared_count;
+	__u8 h_reserved2[7];
+	__le32 h_shared_xattrs[0];
+};
+
+struct z_erofs_decompress_req;
+
+struct z_erofs_decompressor {
+	int (*config)(struct super_block *, struct erofs_super_block *, void *, int);
+	int (*decompress)(struct z_erofs_decompress_req *, struct page **);
+	char *name;
+};
+
+struct z_erofs_decompress_req {
+	struct super_block *sb;
+	struct page **in;
+	struct page **out;
+	unsigned short pageofs_in;
+	unsigned short pageofs_out;
+	unsigned int inputsize;
+	unsigned int outputsize;
+	unsigned int alg;
+	bool inplace_io;
+	bool partial_decoding;
+	bool fillgaps;
+	gfp_t gfp;
+};
+
+enum {
+	Z_EROFS_COMPRESSION_LZ4 = 0,
+	Z_EROFS_COMPRESSION_LZMA = 1,
+	Z_EROFS_COMPRESSION_DEFLATE = 2,
+	Z_EROFS_COMPRESSION_MAX = 3,
+};
+
+enum {
+	Z_EROFS_COMPRESSION_SHIFTED = 3,
+	Z_EROFS_COMPRESSION_INTERLACED = 4,
+	Z_EROFS_COMPRESSION_RUNTIME_MAX = 5,
+};
+
+struct z_erofs_lz4_decompress_ctx {
+	struct z_erofs_decompress_req *rq;
+	unsigned int inpages;
+	unsigned int outpages;
+	unsigned int oend;
+};
+
+struct z_erofs_lz4_cfgs {
+	__le16 max_distance;
+	__le16 max_pclusterblks;
+	u8 reserved[10];
+};
+
+enum {
+	Z_EROFS_LCLUSTER_TYPE_PLAIN = 0,
+	Z_EROFS_LCLUSTER_TYPE_HEAD1 = 1,
+	Z_EROFS_LCLUSTER_TYPE_NONHEAD = 2,
+	Z_EROFS_LCLUSTER_TYPE_HEAD2 = 3,
+	Z_EROFS_LCLUSTER_TYPE_MAX = 4,
+};
+
+struct z_erofs_map_header {
+	union {
+		__le32 h_fragmentoff;
+		struct {
+			__le16 h_reserved1;
+			__le16 h_idata_size;
+		};
+	};
+	__le16 h_advise;
+	__u8 h_algorithmtype;
+	__u8 h_clusterbits;
+};
+
+struct z_erofs_maprecorder {
+	struct inode *inode;
+	struct erofs_map_blocks *map;
+	void *kaddr;
+	unsigned long lcn;
+	u8 type;
+	u8 headtype;
+	u16 clusterofs;
+	u16 delta[2];
+	erofs_blk_t pblk;
+	erofs_blk_t compressedblks;
+	erofs_off_t nextpackoff;
+	bool partialref;
+};
+
+struct z_erofs_lcluster_index {
+	__le16 di_advise;
+	__le16 di_clusterofs;
+	union {
+		__le32 blkaddr;
+		__le16 delta[2];
+	} di_u;
+};
+
+struct z_erofs_pcluster_slab {
+	struct kmem_cache *slab;
+	unsigned int maxpages;
+	char name[48];
+};
+
+enum z_erofs_pclustermode {
+	Z_EROFS_PCLUSTER_INFLIGHT = 0,
+	Z_EROFS_PCLUSTER_FOLLOWED_NOINPLACE = 1,
+	Z_EROFS_PCLUSTER_FOLLOWED = 2,
+};
+
+enum {
+	JQ_BYPASS = 0,
+	JQ_SUBMIT = 1,
+	NR_JOBQUEUES = 2,
+};
+
+struct z_erofs_bvec {
+	struct page *page;
+	int offset;
+	unsigned int end;
+};
+
+struct z_erofs_bvset_inline {
+	struct page *nextpage;
+	struct z_erofs_bvec bvec[2];
+};
+
+struct erofs_workgroup {
+	unsigned long index;
+	struct lockref lockref;
+};
+
+typedef void *z_erofs_next_pcluster_t;
+
+struct z_erofs_pcluster {
+	struct erofs_workgroup obj;
+	struct mutex lock;
+	z_erofs_next_pcluster_t next;
+	unsigned int length;
+	unsigned int vcnt;
+	unsigned int pclustersize;
+	unsigned short pageofs_out;
+	unsigned short pageofs_in;
+	union {
+		struct z_erofs_bvset_inline bvset;
+		struct callback_head rcu;
+	};
+	unsigned char algorithmformat;
+	bool partial;
+	bool multibases;
+	bool besteffort;
+	struct z_erofs_bvec compressed_bvecs[0];
+};
+
+struct z_erofs_bvset {
+	struct page *nextpage;
+	struct z_erofs_bvec bvec[0];
+};
+
+struct z_erofs_decompressqueue {
+	struct super_block *sb;
+	atomic_t pending_bios;
+	z_erofs_next_pcluster_t head;
+	union {
+		struct completion done;
+		struct work_struct work;
+		struct kthread_work kthread_work;
+	} u;
+	bool eio;
+	bool sync;
+};
+
+struct z_erofs_bvec_item {
+	struct z_erofs_bvec bvec;
+	struct list_head list;
+};
+
+struct z_erofs_bvec_iter {
+	struct page *bvpage;
+	struct z_erofs_bvset *bvset;
+	unsigned int nr;
+	unsigned int cur;
+};
+
+struct z_erofs_decompress_frontend {
+	struct inode * const inode;
+	struct erofs_map_blocks map;
+	struct z_erofs_bvec_iter biter;
+	struct page *pagepool;
+	struct page *candidate_bvpage;
+	struct z_erofs_pcluster *pcl;
+	z_erofs_next_pcluster_t owned_head;
+	enum z_erofs_pclustermode mode;
+	erofs_off_t headoffset;
+	unsigned int icur;
+};
+
+struct z_erofs_decompress_backend {
+	struct page *onstack_pages[32];
+	struct super_block *sb;
+	struct z_erofs_pcluster *pcl;
+	struct page **decompressed_pages;
+	struct page **compressed_pages;
+	struct list_head decompressed_secondary_bvecs;
+	struct page **pagepool;
+	unsigned int onstack_used;
+	unsigned int nr_pages;
+};
+
+struct z_erofs_gbuf {
+	spinlock_t lock;
+	void *ptr;
+	struct page **pages;
+	unsigned int nrpages;
+};
+
+struct key_user {
+	struct rb_node node;
+	struct mutex cons_lock;
+	spinlock_t lock;
+	refcount_t usage;
+	atomic_t nkeys;
+	atomic_t nikeys;
+	kuid_t uid;
+	int qnkeys;
+	int qnbytes;
+};
+
+enum key_notification_subtype {
+	NOTIFY_KEY_INSTANTIATED = 0,
+	NOTIFY_KEY_UPDATED = 1,
+	NOTIFY_KEY_LINKED = 2,
+	NOTIFY_KEY_UNLINKED = 3,
+	NOTIFY_KEY_CLEARED = 4,
+	NOTIFY_KEY_REVOKED = 5,
+	NOTIFY_KEY_INVALIDATED = 6,
+	NOTIFY_KEY_SETATTR = 7,
+};
+
+struct assoc_array_ops {
+	unsigned long (*get_key_chunk)(const void *, int);
+	unsigned long (*get_object_key_chunk)(const void *, int);
+	bool (*compare_object)(const void *, const void *);
+	int (*diff_objects)(const void *, const void *);
+	void (*free_object)(void *);
+};
+
+struct assoc_array_shortcut {
+	struct assoc_array_ptr *back_pointer;
+	int parent_slot;
+	int skip_to_level;
+	struct assoc_array_ptr *next_node;
+	unsigned long index_key[0];
+};
+
+struct assoc_array_node {
+	struct assoc_array_ptr *back_pointer;
+	u8 parent_slot;
+	struct assoc_array_ptr *slots[16];
+	unsigned long nr_leaves_on_branch;
+};
+
+struct assoc_array_edit {
+	struct callback_head rcu;
+	struct assoc_array *array;
+	const struct assoc_array_ops *ops;
+	const struct assoc_array_ops *ops_for_excised_subtree;
+	struct assoc_array_ptr *leaf;
+	struct assoc_array_ptr **leaf_p;
+	struct assoc_array_ptr *dead_leaf;
+	struct assoc_array_ptr *new_meta[3];
+	struct assoc_array_ptr *excised_meta[1];
+	struct assoc_array_ptr *excised_subtree;
+	struct assoc_array_ptr **set_backpointers[16];
+	struct assoc_array_ptr *set_backpointers_to;
+	struct assoc_array_node *adjust_count_on;
+	long adjust_count_by;
+	struct {
+		struct assoc_array_ptr **ptr;
+		struct assoc_array_ptr *to;
+	} set[2];
+	struct {
+		u8 *p;
+		u8 to;
+	} set_parent_slot[1];
+	u8 segment_cache[17];
+};
+
+struct keyring_search_context {
+	struct keyring_index_key index_key;
+	const struct cred *cred;
+	struct key_match_data match_data;
+	unsigned int flags;
+	int (*iterator)(const void *, void *);
+	int skipped_ret;
+	bool possessed;
+	key_ref_t result;
+	time64_t now;
+};
+
+struct keyring_read_iterator_context {
+	size_t buflen;
+	size_t count;
+	key_serial_t *buffer;
+};
+
+struct keyctl_dh_params {
+	union {
+		__s32 private;
+		__s32 priv;
+	};
+	__s32 prime;
+	__s32 base;
+};
+
+struct keyctl_kdf_params {
+	char __attribute__((btf_type_tag("user"))) *hashname;
+	char __attribute__((btf_type_tag("user"))) *otherinfo;
+	__u32 otherinfolen;
+	__u32 __spare[8];
+};
+
+struct keyctl_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+	__u32 __spare[10];
+};
+
+struct keyctl_pkey_params {
+	__s32 key_id;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	__u32 __spare[7];
+};
+
+struct request_key_auth {
+	struct callback_head rcu;
+	struct key *target_key;
+	struct key *dest_keyring;
+	const struct cred *cred;
+	void *callout_info;
+	size_t callout_len;
+	pid_t pid;
+	char op[8];
+};
+
+enum {
+	Opt_err___9 = 0,
+	Opt_enc = 1,
+	Opt_hash = 2,
+};
+
+enum lsm_order {
+	LSM_ORDER_FIRST = -1,
+	LSM_ORDER_MUTABLE = 0,
+	LSM_ORDER_LAST = 1,
+};
+
+struct lsm_blob_sizes;
+
+struct lsm_info {
+	const char *name;
+	enum lsm_order order;
+	unsigned long flags;
+	int *enabled;
+	int (*init)();
+	struct lsm_blob_sizes *blobs;
+};
+
+struct lsm_blob_sizes {
+	int lbs_cred;
+	int lbs_file;
+	int lbs_inode;
+	int lbs_superblock;
+	int lbs_ipc;
+	int lbs_msg_msg;
+	int lbs_task;
+	int lbs_xattr_count;
+};
+
+struct msg_msg;
+
+struct sctp_association;
+
+union security_list_options {
+	int (*binder_set_context_mgr)(const struct cred *);
+	int (*binder_transaction)(const struct cred *, const struct cred *);
+	int (*binder_transfer_binder)(const struct cred *, const struct cred *);
+	int (*binder_transfer_file)(const struct cred *, const struct cred *, const struct file *);
+	int (*ptrace_access_check)(struct task_struct *, unsigned int);
+	int (*ptrace_traceme)(struct task_struct *);
+	int (*capget)(const struct task_struct *, kernel_cap_t *, kernel_cap_t *, kernel_cap_t *);
+	int (*capset)(struct cred *, const struct cred *, const kernel_cap_t *, const kernel_cap_t *, const kernel_cap_t *);
+	int (*capable)(const struct cred *, struct user_namespace *, int, unsigned int);
+	int (*quotactl)(int, int, int, struct super_block *);
+	int (*quota_on)(struct dentry *);
+	int (*syslog)(int);
+	int (*settime)(const struct timespec64 *, const struct timezone *);
+	int (*vm_enough_memory)(struct mm_struct *, long);
+	int (*bprm_creds_for_exec)(struct linux_binprm *);
+	int (*bprm_creds_from_file)(struct linux_binprm *, struct file *);
+	int (*bprm_check_security)(struct linux_binprm *);
+	void (*bprm_committing_creds)(struct linux_binprm *);
+	void (*bprm_committed_creds)(struct linux_binprm *);
+	int (*fs_context_submount)(struct fs_context *, struct super_block *);
+	int (*fs_context_dup)(struct fs_context *, struct fs_context *);
+	int (*fs_context_parse_param)(struct fs_context *, struct fs_parameter *);
+	int (*sb_alloc_security)(struct super_block *);
+	void (*sb_delete)(struct super_block *);
+	void (*sb_free_security)(struct super_block *);
+	void (*sb_free_mnt_opts)(void *);
+	int (*sb_eat_lsm_opts)(char *, void **);
+	int (*sb_mnt_opts_compat)(struct super_block *, void *);
+	int (*sb_remount)(struct super_block *, void *);
+	int (*sb_kern_mount)(struct super_block *);
+	int (*sb_show_options)(struct seq_file *, struct super_block *);
+	int (*sb_statfs)(struct dentry *);
+	int (*sb_mount)(const char *, const struct path *, const char *, unsigned long, void *);
+	int (*sb_umount)(struct vfsmount *, int);
+	int (*sb_pivotroot)(const struct path *, const struct path *);
+	int (*sb_set_mnt_opts)(struct super_block *, void *, unsigned long, unsigned long *);
+	int (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, unsigned long, unsigned long *);
+	int (*move_mount)(const struct path *, const struct path *);
+	int (*dentry_init_security)(struct dentry *, int, const struct qstr *, const char **, void **, u32 *);
+	int (*dentry_create_files_as)(struct dentry *, int, struct qstr *, const struct cred *, struct cred *);
+	int (*path_notify)(const struct path *, u64, unsigned int);
+	int (*inode_alloc_security)(struct inode *);
+	void (*inode_free_security)(struct inode *);
+	int (*inode_init_security)(struct inode *, struct inode *, const struct qstr *, struct xattr *, int *);
+	int (*inode_init_security_anon)(struct inode *, const struct qstr *, const struct inode *);
+	int (*inode_create)(struct inode *, struct dentry *, umode_t);
+	int (*inode_link)(struct dentry *, struct inode *, struct dentry *);
+	int (*inode_unlink)(struct inode *, struct dentry *);
+	int (*inode_symlink)(struct inode *, struct dentry *, const char *);
+	int (*inode_mkdir)(struct inode *, struct dentry *, umode_t);
+	int (*inode_rmdir)(struct inode *, struct dentry *);
+	int (*inode_mknod)(struct inode *, struct dentry *, umode_t, dev_t);
+	int (*inode_rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);
+	int (*inode_readlink)(struct dentry *);
+	int (*inode_follow_link)(struct dentry *, struct inode *, bool);
+	int (*inode_permission)(struct inode *, int);
+	int (*inode_setattr)(struct dentry *, struct iattr *);
+	int (*inode_getattr)(const struct path *);
+	int (*inode_setxattr)(struct mnt_idmap *, struct dentry *, const char *, const void *, size_t, int);
+	void (*inode_post_setxattr)(struct dentry *, const char *, const void *, size_t, int);
+	int (*inode_getxattr)(struct dentry *, const char *);
+	int (*inode_listxattr)(struct dentry *);
+	int (*inode_removexattr)(struct mnt_idmap *, struct dentry *, const char *);
+	int (*inode_set_acl)(struct mnt_idmap *, struct dentry *, const char *, struct posix_acl *);
+	int (*inode_get_acl)(struct mnt_idmap *, struct dentry *, const char *);
+	int (*inode_remove_acl)(struct mnt_idmap *, struct dentry *, const char *);
+	int (*inode_need_killpriv)(struct dentry *);
+	int (*inode_killpriv)(struct mnt_idmap *, struct dentry *);
+	int (*inode_getsecurity)(struct mnt_idmap *, struct inode *, const char *, void **, bool);
+	int (*inode_setsecurity)(struct inode *, const char *, const void *, size_t, int);
+	int (*inode_listsecurity)(struct inode *, char *, size_t);
+	void (*inode_getsecid)(struct inode *, u32 *);
+	int (*inode_copy_up)(struct dentry *, struct cred **);
+	int (*inode_copy_up_xattr)(const char *);
+	int (*kernfs_init_security)(struct kernfs_node *, struct kernfs_node *);
+	int (*file_permission)(struct file *, int);
+	int (*file_alloc_security)(struct file *);
+	void (*file_free_security)(struct file *);
+	int (*file_ioctl)(struct file *, unsigned int, unsigned long);
+	int (*file_ioctl_compat)(struct file *, unsigned int, unsigned long);
+	int (*mmap_addr)(unsigned long);
+	int (*mmap_file)(struct file *, unsigned long, unsigned long, unsigned long);
+	int (*file_mprotect)(struct vm_area_struct *, unsigned long, unsigned long);
+	int (*file_lock)(struct file *, unsigned int);
+	int (*file_fcntl)(struct file *, unsigned int, unsigned long);
+	void (*file_set_fowner)(struct file *);
+	int (*file_send_sigiotask)(struct task_struct *, struct fown_struct *, int);
+	int (*file_receive)(struct file *);
+	int (*file_open)(struct file *);
+	int (*file_truncate)(struct file *);
+	int (*task_alloc)(struct task_struct *, unsigned long);
+	void (*task_free)(struct task_struct *);
+	int (*cred_alloc_blank)(struct cred *, gfp_t);
+	void (*cred_free)(struct cred *);
+	int (*cred_prepare)(struct cred *, const struct cred *, gfp_t);
+	void (*cred_transfer)(struct cred *, const struct cred *);
+	void (*cred_getsecid)(const struct cred *, u32 *);
+	int (*kernel_act_as)(struct cred *, u32);
+	int (*kernel_create_files_as)(struct cred *, struct inode *);
+	int (*kernel_module_request)(char *);
+	int (*kernel_load_data)(enum kernel_load_data_id, bool);
+	int (*kernel_post_load_data)(char *, loff_t, enum kernel_load_data_id, char *);
+	int (*kernel_read_file)(struct file *, enum kernel_read_file_id, bool);
+	int (*kernel_post_read_file)(struct file *, char *, loff_t, enum kernel_read_file_id);
+	int (*task_fix_setuid)(struct cred *, const struct cred *, int);
+	int (*task_fix_setgid)(struct cred *, const struct cred *, int);
+	int (*task_fix_setgroups)(struct cred *, const struct cred *);
+	int (*task_setpgid)(struct task_struct *, pid_t);
+	int (*task_getpgid)(struct task_struct *);
+	int (*task_getsid)(struct task_struct *);
+	void (*current_getsecid_subj)(u32 *);
+	void (*task_getsecid_obj)(struct task_struct *, u32 *);
+	int (*task_setnice)(struct task_struct *, int);
+	int (*task_setioprio)(struct task_struct *, int);
+	int (*task_getioprio)(struct task_struct *);
+	int (*task_prlimit)(const struct cred *, const struct cred *, unsigned int);
+	int (*task_setrlimit)(struct task_struct *, unsigned int, struct rlimit *);
+	int (*task_setscheduler)(struct task_struct *);
+	int (*task_getscheduler)(struct task_struct *);
+	int (*task_movememory)(struct task_struct *);
+	int (*task_kill)(struct task_struct *, struct kernel_siginfo *, int, const struct cred *);
+	int (*task_prctl)(int, unsigned long, unsigned long, unsigned long, unsigned long);
+	void (*task_to_inode)(struct task_struct *, struct inode *);
+	int (*userns_create)(const struct cred *);
+	int (*ipc_permission)(struct kern_ipc_perm *, short);
+	void (*ipc_getsecid)(struct kern_ipc_perm *, u32 *);
+	int (*msg_msg_alloc_security)(struct msg_msg *);
+	void (*msg_msg_free_security)(struct msg_msg *);
+	int (*msg_queue_alloc_security)(struct kern_ipc_perm *);
+	void (*msg_queue_free_security)(struct kern_ipc_perm *);
+	int (*msg_queue_associate)(struct kern_ipc_perm *, int);
+	int (*msg_queue_msgctl)(struct kern_ipc_perm *, int);
+	int (*msg_queue_msgsnd)(struct kern_ipc_perm *, struct msg_msg *, int);
+	int (*msg_queue_msgrcv)(struct kern_ipc_perm *, struct msg_msg *, struct task_struct *, long, int);
+	int (*shm_alloc_security)(struct kern_ipc_perm *);
+	void (*shm_free_security)(struct kern_ipc_perm *);
+	int (*shm_associate)(struct kern_ipc_perm *, int);
+	int (*shm_shmctl)(struct kern_ipc_perm *, int);
+	int (*shm_shmat)(struct kern_ipc_perm *, char __attribute__((btf_type_tag("user"))) *, int);
+	int (*sem_alloc_security)(struct kern_ipc_perm *);
+	void (*sem_free_security)(struct kern_ipc_perm *);
+	int (*sem_associate)(struct kern_ipc_perm *, int);
+	int (*sem_semctl)(struct kern_ipc_perm *, int);
+	int (*sem_semop)(struct kern_ipc_perm *, struct sembuf *, unsigned int, int);
+	int (*netlink_send)(struct sock *, struct sk_buff *);
+	void (*d_instantiate)(struct dentry *, struct inode *);
+	int (*getprocattr)(struct task_struct *, const char *, char **);
+	int (*setprocattr)(const char *, void *, size_t);
+	int (*ismaclabel)(const char *);
+	int (*secid_to_secctx)(u32, char **, u32 *);
+	int (*secctx_to_secid)(const char *, u32, u32 *);
+	void (*release_secctx)(char *, u32);
+	void (*inode_invalidate_secctx)(struct inode *);
+	int (*inode_notifysecctx)(struct inode *, void *, u32);
+	int (*inode_setsecctx)(struct dentry *, void *, u32);
+	int (*inode_getsecctx)(struct inode *, void **, u32 *);
+	int (*unix_stream_connect)(struct sock *, struct sock *, struct sock *);
+	int (*unix_may_send)(struct socket *, struct socket *);
+	int (*socket_create)(int, int, int, int);
+	int (*socket_post_create)(struct socket *, int, int, int, int);
+	int (*socket_socketpair)(struct socket *, struct socket *);
+	int (*socket_bind)(struct socket *, struct sockaddr *, int);
+	int (*socket_connect)(struct socket *, struct sockaddr *, int);
+	int (*socket_listen)(struct socket *, int);
+	int (*socket_accept)(struct socket *, struct socket *);
+	int (*socket_sendmsg)(struct socket *, struct msghdr *, int);
+	int (*socket_recvmsg)(struct socket *, struct msghdr *, int, int);
+	int (*socket_getsockname)(struct socket *);
+	int (*socket_getpeername)(struct socket *);
+	int (*socket_getsockopt)(struct socket *, int, int);
+	int (*socket_setsockopt)(struct socket *, int, int);
+	int (*socket_shutdown)(struct socket *, int);
+	int (*socket_sock_rcv_skb)(struct sock *, struct sk_buff *);
+	int (*socket_getpeersec_stream)(struct socket *, sockptr_t, sockptr_t, unsigned int);
+	int (*socket_getpeersec_dgram)(struct socket *, struct sk_buff *, u32 *);
+	int (*sk_alloc_security)(struct sock *, int, gfp_t);
+	void (*sk_free_security)(struct sock *);
+	void (*sk_clone_security)(const struct sock *, struct sock *);
+	void (*sk_getsecid)(const struct sock *, u32 *);
+	void (*sock_graft)(struct sock *, struct socket *);
+	int (*inet_conn_request)(const struct sock *, struct sk_buff *, struct request_sock *);
+	void (*inet_csk_clone)(struct sock *, const struct request_sock *);
+	void (*inet_conn_established)(struct sock *, struct sk_buff *);
+	int (*secmark_relabel_packet)(u32);
+	void (*secmark_refcount_inc)();
+	void (*secmark_refcount_dec)();
+	void (*req_classify_flow)(const struct request_sock *, struct flowi_common *);
+	int (*tun_dev_alloc_security)(void **);
+	void (*tun_dev_free_security)(void *);
+	int (*tun_dev_create)();
+	int (*tun_dev_attach_queue)(void *);
+	int (*tun_dev_attach)(struct sock *, void *);
+	int (*tun_dev_open)(void *);
+	int (*sctp_assoc_request)(struct sctp_association *, struct sk_buff *);
+	int (*sctp_bind_connect)(struct sock *, int, struct sockaddr *, int);
+	void (*sctp_sk_clone)(struct sctp_association *, struct sock *, struct sock *);
+	int (*sctp_assoc_established)(struct sctp_association *, struct sk_buff *);
+	int (*mptcp_add_subflow)(struct sock *, struct sock *);
+	int (*key_alloc)(struct key *, const struct cred *, unsigned long);
+	void (*key_free)(struct key *);
+	int (*key_permission)(key_ref_t, const struct cred *, enum key_need_perm);
+	int (*key_getsecurity)(struct key *, char **);
+	int (*audit_rule_init)(u32, u32, char *, void **);
+	int (*audit_rule_known)(struct audit_krule *);
+	int (*audit_rule_match)(u32, u32, u32, void *);
+	void (*audit_rule_free)(void *);
+	int (*bpf)(int, union bpf_attr *, unsigned int);
+	int (*bpf_map)(struct bpf_map *, fmode_t);
+	int (*bpf_prog)(struct bpf_prog *);
+	int (*bpf_map_alloc_security)(struct bpf_map *);
+	void (*bpf_map_free_security)(struct bpf_map *);
+	int (*bpf_prog_alloc_security)(struct bpf_prog_aux *);
+	void (*bpf_prog_free_security)(struct bpf_prog_aux *);
+	int (*locked_down)(enum lockdown_reason);
+	int (*perf_event_open)(struct perf_event_attr *, int);
+	int (*perf_event_alloc)(struct perf_event *);
+	void (*perf_event_free)(struct perf_event *);
+	int (*perf_event_read)(struct perf_event *);
+	int (*perf_event_write)(struct perf_event *);
+	int (*uring_override_creds)(const struct cred *);
+	int (*uring_sqpoll)();
+	int (*uring_cmd)(struct io_uring_cmd *);
+};
+
+struct security_hook_list {
+	struct hlist_node list;
+	struct hlist_head *head;
+	union security_list_options hook;
+	const char *lsm;
+};
+
+struct vfs_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+};
+
+struct vfs_ns_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+	__le32 rootid;
+};
+
+struct security_hook_heads {
+	struct hlist_head binder_set_context_mgr;
+	struct hlist_head binder_transaction;
+	struct hlist_head binder_transfer_binder;
+	struct hlist_head binder_transfer_file;
+	struct hlist_head ptrace_access_check;
+	struct hlist_head ptrace_traceme;
+	struct hlist_head capget;
+	struct hlist_head capset;
+	struct hlist_head capable;
+	struct hlist_head quotactl;
+	struct hlist_head quota_on;
+	struct hlist_head syslog;
+	struct hlist_head settime;
+	struct hlist_head vm_enough_memory;
+	struct hlist_head bprm_creds_for_exec;
+	struct hlist_head bprm_creds_from_file;
+	struct hlist_head bprm_check_security;
+	struct hlist_head bprm_committing_creds;
+	struct hlist_head bprm_committed_creds;
+	struct hlist_head fs_context_submount;
+	struct hlist_head fs_context_dup;
+	struct hlist_head fs_context_parse_param;
+	struct hlist_head sb_alloc_security;
+	struct hlist_head sb_delete;
+	struct hlist_head sb_free_security;
+	struct hlist_head sb_free_mnt_opts;
+	struct hlist_head sb_eat_lsm_opts;
+	struct hlist_head sb_mnt_opts_compat;
+	struct hlist_head sb_remount;
+	struct hlist_head sb_kern_mount;
+	struct hlist_head sb_show_options;
+	struct hlist_head sb_statfs;
+	struct hlist_head sb_mount;
+	struct hlist_head sb_umount;
+	struct hlist_head sb_pivotroot;
+	struct hlist_head sb_set_mnt_opts;
+	struct hlist_head sb_clone_mnt_opts;
+	struct hlist_head move_mount;
+	struct hlist_head dentry_init_security;
+	struct hlist_head dentry_create_files_as;
+	struct hlist_head path_notify;
+	struct hlist_head inode_alloc_security;
+	struct hlist_head inode_free_security;
+	struct hlist_head inode_init_security;
+	struct hlist_head inode_init_security_anon;
+	struct hlist_head inode_create;
+	struct hlist_head inode_link;
+	struct hlist_head inode_unlink;
+	struct hlist_head inode_symlink;
+	struct hlist_head inode_mkdir;
+	struct hlist_head inode_rmdir;
+	struct hlist_head inode_mknod;
+	struct hlist_head inode_rename;
+	struct hlist_head inode_readlink;
+	struct hlist_head inode_follow_link;
+	struct hlist_head inode_permission;
+	struct hlist_head inode_setattr;
+	struct hlist_head inode_getattr;
+	struct hlist_head inode_setxattr;
+	struct hlist_head inode_post_setxattr;
+	struct hlist_head inode_getxattr;
+	struct hlist_head inode_listxattr;
+	struct hlist_head inode_removexattr;
+	struct hlist_head inode_set_acl;
+	struct hlist_head inode_get_acl;
+	struct hlist_head inode_remove_acl;
+	struct hlist_head inode_need_killpriv;
+	struct hlist_head inode_killpriv;
+	struct hlist_head inode_getsecurity;
+	struct hlist_head inode_setsecurity;
+	struct hlist_head inode_listsecurity;
+	struct hlist_head inode_getsecid;
+	struct hlist_head inode_copy_up;
+	struct hlist_head inode_copy_up_xattr;
+	struct hlist_head kernfs_init_security;
+	struct hlist_head file_permission;
+	struct hlist_head file_alloc_security;
+	struct hlist_head file_free_security;
+	struct hlist_head file_ioctl;
+	struct hlist_head file_ioctl_compat;
+	struct hlist_head mmap_addr;
+	struct hlist_head mmap_file;
+	struct hlist_head file_mprotect;
+	struct hlist_head file_lock;
+	struct hlist_head file_fcntl;
+	struct hlist_head file_set_fowner;
+	struct hlist_head file_send_sigiotask;
+	struct hlist_head file_receive;
+	struct hlist_head file_open;
+	struct hlist_head file_truncate;
+	struct hlist_head task_alloc;
+	struct hlist_head task_free;
+	struct hlist_head cred_alloc_blank;
+	struct hlist_head cred_free;
+	struct hlist_head cred_prepare;
+	struct hlist_head cred_transfer;
+	struct hlist_head cred_getsecid;
+	struct hlist_head kernel_act_as;
+	struct hlist_head kernel_create_files_as;
+	struct hlist_head kernel_module_request;
+	struct hlist_head kernel_load_data;
+	struct hlist_head kernel_post_load_data;
+	struct hlist_head kernel_read_file;
+	struct hlist_head kernel_post_read_file;
+	struct hlist_head task_fix_setuid;
+	struct hlist_head task_fix_setgid;
+	struct hlist_head task_fix_setgroups;
+	struct hlist_head task_setpgid;
+	struct hlist_head task_getpgid;
+	struct hlist_head task_getsid;
+	struct hlist_head current_getsecid_subj;
+	struct hlist_head task_getsecid_obj;
+	struct hlist_head task_setnice;
+	struct hlist_head task_setioprio;
+	struct hlist_head task_getioprio;
+	struct hlist_head task_prlimit;
+	struct hlist_head task_setrlimit;
+	struct hlist_head task_setscheduler;
+	struct hlist_head task_getscheduler;
+	struct hlist_head task_movememory;
+	struct hlist_head task_kill;
+	struct hlist_head task_prctl;
+	struct hlist_head task_to_inode;
+	struct hlist_head userns_create;
+	struct hlist_head ipc_permission;
+	struct hlist_head ipc_getsecid;
+	struct hlist_head msg_msg_alloc_security;
+	struct hlist_head msg_msg_free_security;
+	struct hlist_head msg_queue_alloc_security;
+	struct hlist_head msg_queue_free_security;
+	struct hlist_head msg_queue_associate;
+	struct hlist_head msg_queue_msgctl;
+	struct hlist_head msg_queue_msgsnd;
+	struct hlist_head msg_queue_msgrcv;
+	struct hlist_head shm_alloc_security;
+	struct hlist_head shm_free_security;
+	struct hlist_head shm_associate;
+	struct hlist_head shm_shmctl;
+	struct hlist_head shm_shmat;
+	struct hlist_head sem_alloc_security;
+	struct hlist_head sem_free_security;
+	struct hlist_head sem_associate;
+	struct hlist_head sem_semctl;
+	struct hlist_head sem_semop;
+	struct hlist_head netlink_send;
+	struct hlist_head d_instantiate;
+	struct hlist_head getprocattr;
+	struct hlist_head setprocattr;
+	struct hlist_head ismaclabel;
+	struct hlist_head secid_to_secctx;
+	struct hlist_head secctx_to_secid;
+	struct hlist_head release_secctx;
+	struct hlist_head inode_invalidate_secctx;
+	struct hlist_head inode_notifysecctx;
+	struct hlist_head inode_setsecctx;
+	struct hlist_head inode_getsecctx;
+	struct hlist_head unix_stream_connect;
+	struct hlist_head unix_may_send;
+	struct hlist_head socket_create;
+	struct hlist_head socket_post_create;
+	struct hlist_head socket_socketpair;
+	struct hlist_head socket_bind;
+	struct hlist_head socket_connect;
+	struct hlist_head socket_listen;
+	struct hlist_head socket_accept;
+	struct hlist_head socket_sendmsg;
+	struct hlist_head socket_recvmsg;
+	struct hlist_head socket_getsockname;
+	struct hlist_head socket_getpeername;
+	struct hlist_head socket_getsockopt;
+	struct hlist_head socket_setsockopt;
+	struct hlist_head socket_shutdown;
+	struct hlist_head socket_sock_rcv_skb;
+	struct hlist_head socket_getpeersec_stream;
+	struct hlist_head socket_getpeersec_dgram;
+	struct hlist_head sk_alloc_security;
+	struct hlist_head sk_free_security;
+	struct hlist_head sk_clone_security;
+	struct hlist_head sk_getsecid;
+	struct hlist_head sock_graft;
+	struct hlist_head inet_conn_request;
+	struct hlist_head inet_csk_clone;
+	struct hlist_head inet_conn_established;
+	struct hlist_head secmark_relabel_packet;
+	struct hlist_head secmark_refcount_inc;
+	struct hlist_head secmark_refcount_dec;
+	struct hlist_head req_classify_flow;
+	struct hlist_head tun_dev_alloc_security;
+	struct hlist_head tun_dev_free_security;
+	struct hlist_head tun_dev_create;
+	struct hlist_head tun_dev_attach_queue;
+	struct hlist_head tun_dev_attach;
+	struct hlist_head tun_dev_open;
+	struct hlist_head sctp_assoc_request;
+	struct hlist_head sctp_bind_connect;
+	struct hlist_head sctp_sk_clone;
+	struct hlist_head sctp_assoc_established;
+	struct hlist_head mptcp_add_subflow;
+	struct hlist_head key_alloc;
+	struct hlist_head key_free;
+	struct hlist_head key_permission;
+	struct hlist_head key_getsecurity;
+	struct hlist_head audit_rule_init;
+	struct hlist_head audit_rule_known;
+	struct hlist_head audit_rule_match;
+	struct hlist_head audit_rule_free;
+	struct hlist_head bpf;
+	struct hlist_head bpf_map;
+	struct hlist_head bpf_prog;
+	struct hlist_head bpf_map_alloc_security;
+	struct hlist_head bpf_map_free_security;
+	struct hlist_head bpf_prog_alloc_security;
+	struct hlist_head bpf_prog_free_security;
+	struct hlist_head locked_down;
+	struct hlist_head perf_event_open;
+	struct hlist_head perf_event_alloc;
+	struct hlist_head perf_event_free;
+	struct hlist_head perf_event_read;
+	struct hlist_head perf_event_write;
+	struct hlist_head uring_override_creds;
+	struct hlist_head uring_sqpoll;
+	struct hlist_head uring_cmd;
+};
+
+enum lsm_event {
+	LSM_POLICY_CHANGE = 0,
+};
+
+struct msg_msgseg;
+
+struct msg_msg {
+	struct list_head m_list;
+	long m_type;
+	size_t m_ts;
+	struct msg_msgseg *next;
+	void *security;
+};
+
+struct security_class_mapping {
+	const char *name;
+	const char *perms[33];
+};
+
+struct ethtool_drvinfo {
+	__u32 cmd;
+	char driver[32];
+	char version[32];
+	char fw_version[32];
+	char bus_info[32];
+	char erom_version[32];
+	char reserved2[12];
+	__u32 n_priv_flags;
+	__u32 n_stats;
+	__u32 testinfo_len;
+	__u32 eedump_len;
+	__u32 regdump_len;
+};
+
+struct ethtool_regs {
+	__u32 cmd;
+	__u32 version;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_wolinfo {
+	__u32 cmd;
+	__u32 supported;
+	__u32 wolopts;
+	__u8 sopass[6];
+};
+
+enum ethtool_link_ext_substate_autoneg {
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 4,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 5,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 6,
+};
+
+enum ethtool_link_ext_substate_link_training {
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 4,
+};
+
+enum ethtool_link_ext_substate_link_logical_mismatch {
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 4,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 5,
+};
+
+enum ethtool_link_ext_substate_bad_signal_integrity {
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS = 4,
+};
+
+enum ethtool_link_ext_substate_cable_issue {
+	ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2,
+};
+
+enum ethtool_link_ext_substate_module {
+	ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1,
+};
+
+enum ethtool_link_ext_state {
+	ETHTOOL_LINK_EXT_STATE_AUTONEG = 0,
+	ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 1,
+	ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 2,
+	ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 3,
+	ETHTOOL_LINK_EXT_STATE_NO_CABLE = 4,
+	ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 5,
+	ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 6,
+	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7,
+	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8,
+	ETHTOOL_LINK_EXT_STATE_OVERHEAT = 9,
+	ETHTOOL_LINK_EXT_STATE_MODULE = 10,
+};
+
+struct ethtool_link_ext_state_info {
+	enum ethtool_link_ext_state link_ext_state;
+	union {
+		enum ethtool_link_ext_substate_autoneg autoneg;
+		enum ethtool_link_ext_substate_link_training link_training;
+		enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
+		enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
+		enum ethtool_link_ext_substate_cable_issue cable_issue;
+		enum ethtool_link_ext_substate_module module;
+		u32 __link_ext_substate;
+	};
+};
+
+struct ethtool_link_ext_stats {
+	u64 link_down_events;
+};
+
+struct ethtool_eeprom {
+	__u32 cmd;
+	__u32 magic;
+	__u32 offset;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_coalesce {
+	__u32 cmd;
+	__u32 rx_coalesce_usecs;
+	__u32 rx_max_coalesced_frames;
+	__u32 rx_coalesce_usecs_irq;
+	__u32 rx_max_coalesced_frames_irq;
+	__u32 tx_coalesce_usecs;
+	__u32 tx_max_coalesced_frames;
+	__u32 tx_coalesce_usecs_irq;
+	__u32 tx_max_coalesced_frames_irq;
+	__u32 stats_block_coalesce_usecs;
+	__u32 use_adaptive_rx_coalesce;
+	__u32 use_adaptive_tx_coalesce;
+	__u32 pkt_rate_low;
+	__u32 rx_coalesce_usecs_low;
+	__u32 rx_max_coalesced_frames_low;
+	__u32 tx_coalesce_usecs_low;
+	__u32 tx_max_coalesced_frames_low;
+	__u32 pkt_rate_high;
+	__u32 rx_coalesce_usecs_high;
+	__u32 rx_max_coalesced_frames_high;
+	__u32 tx_coalesce_usecs_high;
+	__u32 tx_max_coalesced_frames_high;
+	__u32 rate_sample_interval;
+};
+
+struct kernel_ethtool_coalesce {
+	u8 use_cqe_mode_tx;
+	u8 use_cqe_mode_rx;
+	u32 tx_aggr_max_bytes;
+	u32 tx_aggr_max_frames;
+	u32 tx_aggr_time_usecs;
+};
+
+struct ethtool_ringparam {
+	__u32 cmd;
+	__u32 rx_max_pending;
+	__u32 rx_mini_max_pending;
+	__u32 rx_jumbo_max_pending;
+	__u32 tx_max_pending;
+	__u32 rx_pending;
+	__u32 rx_mini_pending;
+	__u32 rx_jumbo_pending;
+	__u32 tx_pending;
+};
+
+struct kernel_ethtool_ringparam {
+	u32 rx_buf_len;
+	u8 tcp_data_split;
+	u8 tx_push;
+	u8 rx_push;
+	u32 cqe_size;
+	u32 tx_push_buf_len;
+	u32 tx_push_buf_max_len;
+};
+
+enum ethtool_mac_stats_src {
+	ETHTOOL_MAC_STATS_SRC_AGGREGATE = 0,
+	ETHTOOL_MAC_STATS_SRC_EMAC = 1,
+	ETHTOOL_MAC_STATS_SRC_PMAC = 2,
+};
+
+struct ethtool_pause_stats {
+	enum ethtool_mac_stats_src src;
+	union {
+		struct {
+			u64 tx_pause_frames;
+			u64 rx_pause_frames;
+		};
+		struct {
+			u64 tx_pause_frames;
+			u64 rx_pause_frames;
+		} stats;
+	};
+};
+
+struct ethtool_pauseparam {
+	__u32 cmd;
+	__u32 autoneg;
+	__u32 rx_pause;
+	__u32 tx_pause;
+};
+
+struct ethtool_test {
+	__u32 cmd;
+	__u32 flags;
+	__u32 reserved;
+	__u32 len;
+	__u64 data[0];
+};
+
+struct ethtool_stats {
+	__u32 cmd;
+	__u32 n_stats;
+	__u64 data[0];
+};
+
+struct ethtool_tcpip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be16 psrc;
+	__be16 pdst;
+	__u8 tos;
+};
+
+struct ethtool_ah_espip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be32 spi;
+	__u8 tos;
+};
+
+struct ethtool_usrip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be32 l4_4_bytes;
+	__u8 tos;
+	__u8 ip_ver;
+	__u8 proto;
+};
+
+struct ethtool_tcpip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be16 psrc;
+	__be16 pdst;
+	__u8 tclass;
+};
+
+struct ethtool_ah_espip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be32 spi;
+	__u8 tclass;
+};
+
+struct ethtool_usrip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be32 l4_4_bytes;
+	__u8 tclass;
+	__u8 l4_proto;
+};
+
+struct ethhdr {
+	unsigned char h_dest[6];
+	unsigned char h_source[6];
+	__be16 h_proto;
+};
+
+union ethtool_flow_union {
+	struct ethtool_tcpip4_spec tcp_ip4_spec;
+	struct ethtool_tcpip4_spec udp_ip4_spec;
+	struct ethtool_tcpip4_spec sctp_ip4_spec;
+	struct ethtool_ah_espip4_spec ah_ip4_spec;
+	struct ethtool_ah_espip4_spec esp_ip4_spec;
+	struct ethtool_usrip4_spec usr_ip4_spec;
+	struct ethtool_tcpip6_spec tcp_ip6_spec;
+	struct ethtool_tcpip6_spec udp_ip6_spec;
+	struct ethtool_tcpip6_spec sctp_ip6_spec;
+	struct ethtool_ah_espip6_spec ah_ip6_spec;
+	struct ethtool_ah_espip6_spec esp_ip6_spec;
+	struct ethtool_usrip6_spec usr_ip6_spec;
+	struct ethhdr ether_spec;
+	__u8 hdata[52];
+};
+
+struct ethtool_flow_ext {
+	__u8 padding[2];
+	unsigned char h_dest[6];
+	__be16 vlan_etype;
+	__be16 vlan_tci;
+	__be32 data[2];
+};
+
+struct ethtool_rx_flow_spec {
+	__u32 flow_type;
+	union ethtool_flow_union h_u;
+	struct ethtool_flow_ext h_ext;
+	union ethtool_flow_union m_u;
+	struct ethtool_flow_ext m_ext;
+	__u64 ring_cookie;
+	__u32 location;
+};
+
+struct ethtool_rxnfc {
+	__u32 cmd;
+	__u32 flow_type;
+	__u64 data;
+	struct ethtool_rx_flow_spec fs;
+	union {
+		__u32 rule_cnt;
+		__u32 rss_context;
+	};
+	__u32 rule_locs[0];
+};
+
+struct ethtool_flash {
+	__u32 cmd;
+	__u32 region;
+	char data[128];
+};
+
+struct ethtool_channels {
+	__u32 cmd;
+	__u32 max_rx;
+	__u32 max_tx;
+	__u32 max_other;
+	__u32 max_combined;
+	__u32 rx_count;
+	__u32 tx_count;
+	__u32 other_count;
+	__u32 combined_count;
+};
+
+struct ethtool_dump {
+	__u32 cmd;
+	__u32 version;
+	__u32 flag;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_ts_info {
+	__u32 cmd;
+	__u32 so_timestamping;
+	__s32 phc_index;
+	__u32 tx_types;
+	__u32 tx_reserved[3];
+	__u32 rx_filters;
+	__u32 rx_reserved[3];
+};
+
+struct ethtool_modinfo {
+	__u32 cmd;
+	__u32 type;
+	__u32 eeprom_len;
+	__u32 reserved[8];
+};
+
+struct ethtool_eee {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertised;
+	__u32 lp_advertised;
+	__u32 eee_active;
+	__u32 eee_enabled;
+	__u32 tx_lpi_enabled;
+	__u32 tx_lpi_timer;
+	__u32 reserved[2];
+};
+
+struct ethtool_tunable {
+	__u32 cmd;
+	__u32 id;
+	__u32 type_id;
+	__u32 len;
+	void *data[0];
+};
+
+struct ethtool_link_settings {
+	__u32 cmd;
+	__u32 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__s8 link_mode_masks_nwords;
+	__u8 transceiver;
+	__u8 master_slave_cfg;
+	__u8 master_slave_state;
+	__u8 rate_matching;
+	__u32 reserved[7];
+	__u32 link_mode_masks[0];
+};
+
+struct ethtool_link_ksettings {
+	struct ethtool_link_settings base;
+	struct {
+		unsigned long supported[2];
+		unsigned long advertising[2];
+		unsigned long lp_advertising[2];
+	} link_modes;
+	u32 lanes;
+};
+
+struct ethtool_fec_stat {
+	u64 total;
+	u64 lanes[8];
+};
+
+struct ethtool_fec_stats {
+	struct ethtool_fec_stat corrected_blocks;
+	struct ethtool_fec_stat uncorrectable_blocks;
+	struct ethtool_fec_stat corrected_bits;
+};
+
+struct ethtool_fecparam {
+	__u32 cmd;
+	__u32 active_fec;
+	__u32 fec;
+	__u32 reserved;
+};
+
+struct ethtool_module_eeprom {
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+	u8 *data;
+};
+
+struct ethtool_eth_phy_stats {
+	enum ethtool_mac_stats_src src;
+	union {
+		struct {
+			u64 SymbolErrorDuringCarrier;
+		};
+		struct {
+			u64 SymbolErrorDuringCarrier;
+		} stats;
+	};
+};
+
+struct ethtool_eth_mac_stats {
+	enum ethtool_mac_stats_src src;
+	union {
+		struct {
+			u64 FramesTransmittedOK;
+			u64 SingleCollisionFrames;
+			u64 MultipleCollisionFrames;
+			u64 FramesReceivedOK;
+			u64 FrameCheckSequenceErrors;
+			u64 AlignmentErrors;
+			u64 OctetsTransmittedOK;
+			u64 FramesWithDeferredXmissions;
+			u64 LateCollisions;
+			u64 FramesAbortedDueToXSColls;
+			u64 FramesLostDueToIntMACXmitError;
+			u64 CarrierSenseErrors;
+			u64 OctetsReceivedOK;
+			u64 FramesLostDueToIntMACRcvError;
+			u64 MulticastFramesXmittedOK;
+			u64 BroadcastFramesXmittedOK;
+			u64 FramesWithExcessiveDeferral;
+			u64 MulticastFramesReceivedOK;
+			u64 BroadcastFramesReceivedOK;
+			u64 InRangeLengthErrors;
+			u64 OutOfRangeLengthField;
+			u64 FrameTooLongErrors;
+		};
+		struct {
+			u64 FramesTransmittedOK;
+			u64 SingleCollisionFrames;
+			u64 MultipleCollisionFrames;
+			u64 FramesReceivedOK;
+			u64 FrameCheckSequenceErrors;
+			u64 AlignmentErrors;
+			u64 OctetsTransmittedOK;
+			u64 FramesWithDeferredXmissions;
+			u64 LateCollisions;
+			u64 FramesAbortedDueToXSColls;
+			u64 FramesLostDueToIntMACXmitError;
+			u64 CarrierSenseErrors;
+			u64 OctetsReceivedOK;
+			u64 FramesLostDueToIntMACRcvError;
+			u64 MulticastFramesXmittedOK;
+			u64 BroadcastFramesXmittedOK;
+			u64 FramesWithExcessiveDeferral;
+			u64 MulticastFramesReceivedOK;
+			u64 BroadcastFramesReceivedOK;
+			u64 InRangeLengthErrors;
+			u64 OutOfRangeLengthField;
+			u64 FrameTooLongErrors;
+		} stats;
+	};
+};
+
+struct ethtool_eth_ctrl_stats {
+	enum ethtool_mac_stats_src src;
+	union {
+		struct {
+			u64 MACControlFramesTransmitted;
+			u64 MACControlFramesReceived;
+			u64 UnsupportedOpcodesReceived;
+		};
+		struct {
+			u64 MACControlFramesTransmitted;
+			u64 MACControlFramesReceived;
+			u64 UnsupportedOpcodesReceived;
+		} stats;
+	};
+};
+
+struct ethtool_rmon_stats {
+	enum ethtool_mac_stats_src src;
+	union {
+		struct {
+			u64 undersize_pkts;
+			u64 oversize_pkts;
+			u64 fragments;
+			u64 jabbers;
+			u64 hist[10];
+			u64 hist_tx[10];
+		};
+		struct {
+			u64 undersize_pkts;
+			u64 oversize_pkts;
+			u64 fragments;
+			u64 jabbers;
+			u64 hist[10];
+			u64 hist_tx[10];
+		} stats;
+	};
+};
+
+struct ethtool_rmon_hist_range {
+	u16 low;
+	u16 high;
+};
+
+enum ethtool_module_power_mode_policy {
+	ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH = 1,
+	ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO = 2,
+};
+
+enum ethtool_module_power_mode {
+	ETHTOOL_MODULE_POWER_MODE_LOW = 1,
+	ETHTOOL_MODULE_POWER_MODE_HIGH = 2,
+};
+
+struct ethtool_module_power_mode_params {
+	enum ethtool_module_power_mode_policy policy;
+	enum ethtool_module_power_mode mode;
+};
+
+enum ethtool_mm_verify_status {
+	ETHTOOL_MM_VERIFY_STATUS_UNKNOWN = 0,
+	ETHTOOL_MM_VERIFY_STATUS_INITIAL = 1,
+	ETHTOOL_MM_VERIFY_STATUS_VERIFYING = 2,
+	ETHTOOL_MM_VERIFY_STATUS_SUCCEEDED = 3,
+	ETHTOOL_MM_VERIFY_STATUS_FAILED = 4,
+	ETHTOOL_MM_VERIFY_STATUS_DISABLED = 5,
+};
+
+struct ethtool_mm_state {
+	u32 verify_time;
+	u32 max_verify_time;
+	enum ethtool_mm_verify_status verify_status;
+	bool tx_enabled;
+	bool tx_active;
+	bool pmac_enabled;
+	bool verify_enabled;
+	u32 tx_min_frag_size;
+	u32 rx_min_frag_size;
+};
+
+struct ethtool_mm_cfg {
+	u32 verify_time;
+	bool verify_enabled;
+	bool tx_enabled;
+	bool pmac_enabled;
+	u32 tx_min_frag_size;
+};
+
+struct ethtool_mm_stats {
+	u64 MACMergeFrameAssErrorCount;
+	u64 MACMergeFrameSmdErrorCount;
+	u64 MACMergeFrameAssOkCount;
+	u64 MACMergeFragCountRx;
+	u64 MACMergeFragCountTx;
+	u64 MACMergeHoldCount;
+};
+
+struct selinux_audit_data;
+
+typedef void (*btf_trace_selinux_audited)(void *, struct selinux_audit_data *, char *, char *, const char *);
+
+struct selinux_audit_data {
+	u32 ssid;
+	u32 tsid;
+	u16 tclass;
+	u32 requested;
+	u32 audited;
+	u32 denied;
+	int result;
+};
+
+struct avc_cache_stats {
+	unsigned int lookups;
+	unsigned int misses;
+	unsigned int allocations;
+	unsigned int reclaims;
+	unsigned int frees;
+};
+
+struct avc_cache {
+	struct hlist_head slots[512];
+	spinlock_t slots_lock[512];
+	atomic_t lru_hint;
+	atomic_t active_nodes;
+	u32 latest_notif;
+};
+
+struct selinux_avc {
+	unsigned int avc_cache_threshold;
+	struct avc_cache avc_cache;
+};
+
+struct avc_callback_node {
+	int (*callback)(u32);
+	u32 events;
+	struct avc_callback_node *next;
+};
+
+struct av_decision {
+	u32 allowed;
+	u32 auditallow;
+	u32 auditdeny;
+	u32 seqno;
+	u32 flags;
+};
+
+struct avc_xperms_node;
+
+struct avc_entry {
+	u32 ssid;
+	u32 tsid;
+	u16 tclass;
+	struct av_decision avd;
+	struct avc_xperms_node *xp_node;
+};
+
+struct avc_node {
+	struct avc_entry ae;
+	struct hlist_node list;
+	struct callback_head rhead;
+};
+
+struct extended_perms_data {
+	u32 p[8];
+};
+
+struct extended_perms {
+	u16 len;
+	struct extended_perms_data drivers;
+};
+
+struct avc_xperms_node {
+	struct extended_perms xp;
+	struct list_head xpd_head;
+};
+
+struct trace_event_raw_selinux_audited {
+	struct trace_entry ent;
+	u32 requested;
+	u32 denied;
+	u32 audited;
+	int result;
+	u32 __data_loc_scontext;
+	u32 __data_loc_tcontext;
+	u32 __data_loc_tclass;
+	char __data[0];
+};
+
+struct extended_perms_decision {
+	u8 used;
+	u8 driver;
+	struct extended_perms_data *allowed;
+	struct extended_perms_data *auditallow;
+	struct extended_perms_data *dontaudit;
+};
+
+struct avc_xperms_decision_node {
+	struct extended_perms_decision xpd;
+	struct list_head xpd_list;
+};
+
+struct lsm_network_audit;
+
+struct lsm_ioctlop_audit;
+
+struct lsm_ibpkey_audit;
+
+struct lsm_ibendport_audit;
+
+struct common_audit_data {
+	char type;
+	union {
+		struct path path;
+		struct dentry *dentry;
+		struct inode *inode;
+		struct lsm_network_audit *net;
+		int cap;
+		int ipc_id;
+		struct task_struct *tsk;
+		struct {
+			key_serial_t key;
+			char *key_desc;
+		} key_struct;
+		char *kmod_name;
+		struct lsm_ioctlop_audit *op;
+		struct file *file;
+		struct lsm_ibpkey_audit *ibpkey;
+		struct lsm_ibendport_audit *ibendport;
+		int reason;
+		const char *anonclass;
+	} u;
+	union {
+		struct selinux_audit_data *selinux_audit_data;
+	};
+};
+
+struct lsm_network_audit {
+	int netif;
+	const struct sock *sk;
+	u16 family;
+	__be16 dport;
+	__be16 sport;
+	union {
+		struct {
+			__be32 daddr;
+			__be32 saddr;
+		} v4;
+		struct {
+			struct in6_addr daddr;
+			struct in6_addr saddr;
+		} v6;
+	} fam;
+};
+
+struct lsm_ioctlop_audit {
+	struct path path;
+	u16 cmd;
+};
+
+struct lsm_ibpkey_audit {
+	u64 subnet_prefix;
+	u16 pkey;
+};
+
+struct lsm_ibendport_audit {
+	const char *dev_name;
+	u8 port;
+};
+
+struct trace_event_data_offsets_selinux_audited {
+	u32 scontext;
+	u32 tcontext;
+	u32 tclass;
+};
+
+struct selinux_policy;
+
+struct selinux_state {
+	bool enforcing;
+	bool initialized;
+	bool policycap[8];
+	bool android_netlink_route;
+	bool android_netlink_getneigh;
+	struct page *status_page;
+	struct mutex status_lock;
+	struct selinux_policy __attribute__((btf_type_tag("rcu"))) *policy;
+	struct mutex policy_mutex;
+};
+
+struct xfrm_address_filter;
+
+struct xfrm_state_walk {
+	struct list_head all;
+	u8 state;
+	u8 dying;
+	u8 proto;
+	u32 seq;
+	struct xfrm_address_filter *filter;
+};
+
+struct xfrm_replay_state {
+	__u32 oseq;
+	__u32 seq;
+	__u32 bitmap;
+};
+
+enum xfrm_replay_mode {
+	XFRM_REPLAY_MODE_LEGACY = 0,
+	XFRM_REPLAY_MODE_BMP = 1,
+	XFRM_REPLAY_MODE_ESN = 2,
+};
+
+struct xfrm_stats {
+	__u32 replay_window;
+	__u32 replay;
+	__u32 integrity_failed;
+};
+
+struct xfrm_mode {
+	u8 encap;
+	u8 family;
+	u8 flags;
+};
+
+struct xfrm_algo_auth;
+
+struct xfrm_algo;
+
+struct xfrm_algo_aead;
+
+struct xfrm_encap_tmpl;
+
+struct xfrm_replay_state_esn;
+
+struct xfrm_type;
+
+struct xfrm_type_offload;
+
+struct xfrm_state {
+	possible_net_t xs_net;
+	union {
+		struct hlist_node gclist;
+		struct hlist_node bydst;
+	};
+	struct hlist_node bysrc;
+	struct hlist_node byspi;
+	struct hlist_node byseq;
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct xfrm_id id;
+	struct xfrm_selector sel;
+	struct xfrm_mark mark;
+	u32 if_id;
+	u32 tfcpad;
+	u32 genid;
+	struct xfrm_state_walk km;
+	struct {
+		u32 reqid;
+		u8 mode;
+		u8 replay_window;
+		u8 aalgo;
+		u8 ealgo;
+		u8 calgo;
+		u8 flags;
+		u16 family;
+		xfrm_address_t saddr;
+		int header_len;
+		int trailer_len;
+		u32 extra_flags;
+		struct xfrm_mark smark;
+	} props;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_algo_auth *aalg;
+	struct xfrm_algo *ealg;
+	struct xfrm_algo *calg;
+	struct xfrm_algo_aead *aead;
+	const char *geniv;
+	__be16 new_mapping_sport;
+	u32 new_mapping;
+	u32 mapping_maxage;
+	struct xfrm_encap_tmpl *encap;
+	struct sock __attribute__((btf_type_tag("rcu"))) *encap_sk;
+	xfrm_address_t *coaddr;
+	struct xfrm_state *tunnel;
+	atomic_t tunnel_users;
+	struct xfrm_replay_state replay;
+	struct xfrm_replay_state_esn *replay_esn;
+	struct xfrm_replay_state preplay;
+	struct xfrm_replay_state_esn *preplay_esn;
+	enum xfrm_replay_mode repl_mode;
+	u32 xflags;
+	u32 replay_maxage;
+	u32 replay_maxdiff;
+	struct timer_list rtimer;
+	struct xfrm_stats stats;
+	struct xfrm_lifetime_cur curlft;
+	struct hrtimer mtimer;
+	struct xfrm_dev_offload xso;
+	long saved_tmo;
+	time64_t lastused;
+	struct page_frag xfrag;
+	const struct xfrm_type *type;
+	struct xfrm_mode inner_mode;
+	struct xfrm_mode inner_mode_iaf;
+	struct xfrm_mode outer_mode;
+	const struct xfrm_type_offload *type_offload;
+	struct xfrm_sec_ctx *security;
+	void *data;
+};
+
+struct xfrm_address_filter {
+	xfrm_address_t saddr;
+	xfrm_address_t daddr;
+	__u16 family;
+	__u8 splen;
+	__u8 dplen;
+};
+
+struct xfrm_algo_auth {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_trunc_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_aead {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_icv_len;
+	char alg_key[0];
+};
+
+struct xfrm_encap_tmpl {
+	__u16 encap_type;
+	__be16 encap_sport;
+	__be16 encap_dport;
+	xfrm_address_t encap_oa;
+};
+
+struct xfrm_replay_state_esn {
+	unsigned int bmp_len;
+	__u32 oseq;
+	__u32 seq;
+	__u32 oseq_hi;
+	__u32 seq_hi;
+	__u32 replay_window;
+	__u32 bmp[0];
+};
+
+struct xfrm_type {
+	struct module *owner;
+	u8 proto;
+	u8 flags;
+	int (*init_state)(struct xfrm_state *, struct netlink_ext_ack *);
+	void (*destructor)(struct xfrm_state *);
+	int (*input)(struct xfrm_state *, struct sk_buff *);
+	int (*output)(struct xfrm_state *, struct sk_buff *);
+	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
+};
+
+struct xfrm_type_offload {
+	struct module *owner;
+	u8 proto;
+	void (*encap)(struct xfrm_state *, struct sk_buff *);
+	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
+	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
+};
+
+struct xfrm_sec_ctx {
+	__u8 ctx_doi;
+	__u8 ctx_alg;
+	__u16 ctx_len;
+	__u32 ctx_sid;
+	char ctx_str[0];
+};
+
+struct rt6key {
+	struct in6_addr addr;
+	int plen;
+};
+
+struct rtable;
+
+struct fnhe_hash_bucket;
+
+struct fib_nh_common {
+	struct net_device *nhc_dev;
+	netdevice_tracker nhc_dev_tracker;
+	int nhc_oif;
+	unsigned char nhc_scope;
+	u8 nhc_family;
+	u8 nhc_gw_family;
+	unsigned char nhc_flags;
+	struct lwtunnel_state *nhc_lwtstate;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} nhc_gw;
+	int nhc_weight;
+	atomic_t nhc_upper_bound;
+	struct rtable __attribute__((btf_type_tag("rcu"))) * __attribute__((btf_type_tag("percpu"))) *nhc_pcpu_rth_output;
+	struct rtable __attribute__((btf_type_tag("rcu"))) *nhc_rth_input;
+	struct fnhe_hash_bucket __attribute__((btf_type_tag("rcu"))) *nhc_exceptions;
+};
+
+struct rt6_exception_bucket;
+
+struct fib6_nh {
+	struct fib_nh_common nh_common;
+	unsigned long last_probe;
+	struct rt6_info * __attribute__((btf_type_tag("percpu"))) *rt6i_pcpu;
+	struct rt6_exception_bucket __attribute__((btf_type_tag("rcu"))) *rt6i_exception_bucket;
+};
+
+struct fib6_node;
+
+struct dst_metrics;
+
+struct nexthop;
+
+struct fib6_info {
+	struct fib6_table *fib6_table;
+	struct fib6_info __attribute__((btf_type_tag("rcu"))) *fib6_next;
+	struct fib6_node __attribute__((btf_type_tag("rcu"))) *fib6_node;
+	union {
+		struct list_head fib6_siblings;
+		struct list_head nh_list;
+	};
+	unsigned int fib6_nsiblings;
+	refcount_t fib6_ref;
+	unsigned long expires;
+	struct dst_metrics *fib6_metrics;
+	struct rt6key fib6_dst;
+	u32 fib6_flags;
+	struct rt6key fib6_src;
+	struct rt6key fib6_prefsrc;
+	u32 fib6_metric;
+	u8 fib6_protocol;
+	u8 fib6_type;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	u8 should_flush: 1;
+	u8 dst_nocount: 1;
+	u8 dst_nopolicy: 1;
+	u8 fib6_destroying: 1;
+	u8 unused: 4;
+	struct callback_head rcu;
+	struct nexthop *nh;
+	u64 android_kabi_reserved1;
+	struct fib6_nh fib6_nh[0];
+};
+
+struct fib6_node {
+	struct fib6_node __attribute__((btf_type_tag("rcu"))) *parent;
+	struct fib6_node __attribute__((btf_type_tag("rcu"))) *left;
+	struct fib6_node __attribute__((btf_type_tag("rcu"))) *right;
+	struct fib6_info __attribute__((btf_type_tag("rcu"))) *leaf;
+	__u16 fn_bit;
+	__u16 fn_flags;
+	int fn_sernum;
+	struct fib6_info __attribute__((btf_type_tag("rcu"))) *rr_ptr;
+	struct callback_head rcu;
+	u64 android_kabi_reserved1;
+};
+
+struct fib6_table {
+	struct hlist_node tb6_hlist;
+	u32 tb6_id;
+	spinlock_t tb6_lock;
+	struct fib6_node tb6_root;
+	struct inet_peer_base tb6_peers;
+	unsigned int flags;
+	unsigned int fib_seq;
+};
+
+struct dst_metrics {
+	u32 metrics[17];
+	refcount_t refcnt;
+};
+
+struct rtable {
+	struct dst_entry dst;
+	int rt_genid;
+	unsigned int rt_flags;
+	__u16 rt_type;
+	__u8 rt_is_input;
+	__u8 rt_uses_gateway;
+	int rt_iif;
+	u8 rt_gw_family;
+	union {
+		__be32 rt_gw4;
+		struct in6_addr rt_gw6;
+	};
+	u32 rt_mtu_locked: 1;
+	u32 rt_pmtu: 31;
+};
+
+struct fib_nh_exception;
+
+struct fnhe_hash_bucket {
+	struct fib_nh_exception __attribute__((btf_type_tag("rcu"))) *chain;
+};
+
+struct fib_nh_exception {
+	struct fib_nh_exception __attribute__((btf_type_tag("rcu"))) *fnhe_next;
+	int fnhe_genid;
+	__be32 fnhe_daddr;
+	u32 fnhe_pmtu;
+	bool fnhe_mtu_locked;
+	__be32 fnhe_gw;
+	unsigned long fnhe_expires;
+	struct rtable __attribute__((btf_type_tag("rcu"))) *fnhe_rth_input;
+	struct rtable __attribute__((btf_type_tag("rcu"))) *fnhe_rth_output;
+	unsigned long fnhe_stamp;
+	struct callback_head rcu;
+};
+
+struct rt6_info {
+	struct dst_entry dst;
+	struct fib6_info __attribute__((btf_type_tag("rcu"))) *from;
+	int sernum;
+	struct rt6key rt6i_dst;
+	struct rt6key rt6i_src;
+	struct in6_addr rt6i_gateway;
+	struct inet6_dev *rt6i_idev;
+	u32 rt6i_flags;
+	unsigned short rt6i_nfheader_len;
+	u64 android_kabi_reserved1;
+};
+
+struct rt6_exception_bucket {
+	struct hlist_head chain;
+	int depth;
+};
+
+struct rt6_statistics {
+	__u32 fib_nodes;
+	__u32 fib_route_nodes;
+	__u32 fib_rt_entries;
+	__u32 fib_rt_cache;
+	__u32 fib_discarded_routes;
+	atomic_t fib_rt_alloc;
+};
+
+struct hashtab_node;
+
+struct hashtab {
+	struct hashtab_node **htable;
+	u32 size;
+	u32 nel;
+};
+
+struct symtab {
+	struct hashtab table;
+	u32 nprim;
+};
+
+struct avtab_node;
+
+struct avtab {
+	struct avtab_node **htable;
+	u32 nel;
+	u32 nslot;
+	u32 mask;
+};
+
+struct ebitmap_node;
+
+struct ebitmap {
+	struct ebitmap_node *node;
+	u32 highbit;
+};
+
+struct class_datum;
+
+struct role_datum;
+
+struct user_datum;
+
+struct type_datum;
+
+struct cond_bool_datum;
+
+struct cond_node;
+
+struct role_allow;
+
+struct ocontext;
+
+struct genfs;
+
+struct policydb {
+	int mls_enabled;
+	int android_netlink_route;
+	int android_netlink_getneigh;
+	struct symtab symtab[8];
+	char **sym_val_to_name[8];
+	struct class_datum **class_val_to_struct;
+	struct role_datum **role_val_to_struct;
+	struct user_datum **user_val_to_struct;
+	struct type_datum **type_val_to_struct;
+	struct avtab te_avtab;
+	struct hashtab role_tr;
+	struct ebitmap filename_trans_ttypes;
+	struct hashtab filename_trans;
+	u32 compat_filename_trans_count;
+	struct cond_bool_datum **bool_val_to_struct;
+	struct avtab te_cond_avtab;
+	struct cond_node *cond_list;
+	u32 cond_list_len;
+	struct role_allow *role_allow;
+	struct ocontext *ocontexts[9];
+	struct genfs *genfs;
+	struct hashtab range_tr;
+	struct ebitmap *type_attr_map_array;
+	struct ebitmap policycaps;
+	struct ebitmap permissive_map;
+	size_t len;
+	unsigned int policyvers;
+	unsigned int reject_unknown: 1;
+	unsigned int allow_unknown: 1;
+	u16 process_class;
+	u32 process_trans_perms;
+};
+
+struct selinux_mapping;
+
+struct selinux_map {
+	struct selinux_mapping *mapping;
+	u16 size;
+};
+
+struct sidtab;
+
+struct selinux_policy {
+	struct sidtab *sidtab;
+	struct policydb policydb;
+	struct selinux_map map;
+	u32 latest_granting;
+};
+
+struct in_addr {
+	__be32 s_addr;
+};
+
+struct sockaddr_in {
+	__kernel_sa_family_t sin_family;
+	__be16 sin_port;
+	struct in_addr sin_addr;
+	unsigned char __pad[8];
+};
+
+struct sockaddr_in6 {
+	unsigned short sin6_family;
+	__be16 sin6_port;
+	__be32 sin6_flowinfo;
+	struct in6_addr sin6_addr;
+	__u32 sin6_scope_id;
+};
+
+union sctp_addr {
+	struct sockaddr_in v4;
+	struct sockaddr_in6 v6;
+	struct sockaddr sa;
+};
+
+struct sctp_tsnmap {
+	unsigned long *tsn_map;
+	__u32 base_tsn;
+	__u32 cumulative_tsn_ack_point;
+	__u32 max_tsn_seen;
+	__u16 len;
+	__u16 pending_data;
+	__u16 num_dup_tsns;
+	__be32 dup_tsns[16];
+};
+
+struct sctp_inithdr_host {
+	__u32 init_tag;
+	__u32 a_rwnd;
+	__u16 num_outbound_streams;
+	__u16 num_inbound_streams;
+	__u32 initial_tsn;
+};
+
+enum sctp_endpoint_type {
+	SCTP_EP_TYPE_SOCKET = 0,
+	SCTP_EP_TYPE_ASSOCIATION = 1,
+};
+
+struct sctp_chunk;
+
+struct sctp_inq {
+	struct list_head in_chunk_list;
+	struct sctp_chunk *in_progress;
+	struct work_struct immediate;
+};
+
+struct sctp_bind_addr {
+	__u16 port;
+	struct list_head address_list;
+};
+
+struct sctp_ep_common {
+	enum sctp_endpoint_type type;
+	refcount_t refcnt;
+	bool dead;
+	struct sock *sk;
+	struct net *net;
+	struct sctp_inq inqueue;
+	struct sctp_bind_addr bind_addr;
+};
+
+typedef __s32 sctp_assoc_t;
+
+struct sctp_cookie {
+	__u32 my_vtag;
+	__u32 peer_vtag;
+	__u32 my_ttag;
+	__u32 peer_ttag;
+	ktime_t expiration;
+	__u16 sinit_num_ostreams;
+	__u16 sinit_max_instreams;
+	__u32 initial_tsn;
+	union sctp_addr peer_addr;
+	__u16 my_port;
+	__u8 prsctp_capable;
+	__u8 padding;
+	__u32 adaptation_ind;
+	__u8 auth_random[36];
+	__u8 auth_hmacs[10];
+	__u8 auth_chunks[20];
+	__u32 raw_addr_list_len;
+};
+
+enum sctp_state {
+	SCTP_STATE_CLOSED = 0,
+	SCTP_STATE_COOKIE_WAIT = 1,
+	SCTP_STATE_COOKIE_ECHOED = 2,
+	SCTP_STATE_ESTABLISHED = 3,
+	SCTP_STATE_SHUTDOWN_PENDING = 4,
+	SCTP_STATE_SHUTDOWN_SENT = 5,
+	SCTP_STATE_SHUTDOWN_RECEIVED = 6,
+	SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
+};
+
+struct sctp_stream_out_ext;
+
+struct sctp_stream_out {
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	__u32 mid_uo;
+	struct sctp_stream_out_ext *ext;
+	__u8 state;
+};
+
+struct sctp_stream_in {
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	__u32 mid_uo;
+	__u32 fsn;
+	__u32 fsn_uo;
+	char pd_mode;
+	char pd_mode_uo;
+};
+
+struct sctp_stream_interleave;
+
+struct sctp_stream {
+	struct {
+		struct __genradix tree;
+		struct sctp_stream_out type[0];
+	} out;
+	struct {
+		struct __genradix tree;
+		struct sctp_stream_in type[0];
+	} in;
+	__u16 outcnt;
+	__u16 incnt;
+	struct sctp_stream_out *out_curr;
+	union {
+		struct {
+			struct list_head prio_list;
+		};
+		struct {
+			struct list_head rr_list;
+			struct sctp_stream_out_ext *rr_next;
+		};
+		struct {
+			struct list_head fc_list;
+		};
+	};
+	struct sctp_stream_interleave *si;
+};
+
+struct sctp_sched_ops;
+
+struct sctp_outq {
+	struct sctp_association *asoc;
+	struct list_head out_chunk_list;
+	struct sctp_sched_ops *sched;
+	unsigned int out_qlen;
+	unsigned int error;
+	struct list_head control_chunk_list;
+	struct list_head sacked;
+	struct list_head retransmit;
+	struct list_head abandoned;
+	__u32 outstanding_bytes;
+	char fast_rtx;
+	char cork;
+};
+
+struct sctp_ulpq {
+	char pd_mode;
+	struct sctp_association *asoc;
+	struct sk_buff_head reasm;
+	struct sk_buff_head reasm_uo;
+	struct sk_buff_head lobby;
+};
+
+struct sctp_priv_assoc_stats {
+	struct __kernel_sockaddr_storage obs_rto_ipaddr;
+	__u64 max_obs_rto;
+	__u64 isacks;
+	__u64 osacks;
+	__u64 opackets;
+	__u64 ipackets;
+	__u64 rtxchunks;
+	__u64 outofseqtsns;
+	__u64 idupchunks;
+	__u64 gapcnt;
+	__u64 ouodchunks;
+	__u64 iuodchunks;
+	__u64 oodchunks;
+	__u64 iodchunks;
+	__u64 octrlchunks;
+	__u64 ictrlchunks;
+};
+
+struct sctp_endpoint;
+
+struct sctp_transport;
+
+struct sctp_random_param;
+
+struct sctp_chunks_param;
+
+struct sctp_hmac_algo_param;
+
+struct sctp_auth_bytes;
+
+struct sctp_shared_key;
+
+struct sctp_association {
+	struct sctp_ep_common base;
+	struct list_head asocs;
+	sctp_assoc_t assoc_id;
+	struct sctp_endpoint *ep;
+	struct sctp_cookie c;
+	struct {
+		struct list_head transport_addr_list;
+		__u32 rwnd;
+		__u16 transport_count;
+		__u16 port;
+		struct sctp_transport *primary_path;
+		union sctp_addr primary_addr;
+		struct sctp_transport *active_path;
+		struct sctp_transport *retran_path;
+		struct sctp_transport *last_sent_to;
+		struct sctp_transport *last_data_from;
+		struct sctp_tsnmap tsn_map;
+		__be16 addip_disabled_mask;
+		__u16 ecn_capable: 1;
+		__u16 ipv4_address: 1;
+		__u16 ipv6_address: 1;
+		__u16 asconf_capable: 1;
+		__u16 prsctp_capable: 1;
+		__u16 reconf_capable: 1;
+		__u16 intl_capable: 1;
+		__u16 auth_capable: 1;
+		__u16 sack_needed: 1;
+		__u16 sack_generation: 1;
+		__u16 zero_window_announced: 1;
+		__u32 sack_cnt;
+		__u32 adaptation_ind;
+		struct sctp_inithdr_host i;
+		void *cookie;
+		int cookie_len;
+		__u32 addip_serial;
+		struct sctp_random_param *peer_random;
+		struct sctp_chunks_param *peer_chunks;
+		struct sctp_hmac_algo_param *peer_hmacs;
+	} peer;
+	enum sctp_state state;
+	int overall_error_count;
+	ktime_t cookie_life;
+	unsigned long rto_initial;
+	unsigned long rto_max;
+	unsigned long rto_min;
+	int max_burst;
+	int max_retrans;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u16 max_init_attempts;
+	__u16 init_retries;
+	unsigned long max_init_timeo;
+	unsigned long hbinterval;
+	unsigned long probe_interval;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u8 pmtu_pending;
+	__u32 pathmtu;
+	__u32 param_flags;
+	__u32 sackfreq;
+	unsigned long sackdelay;
+	unsigned long timeouts[12];
+	struct timer_list timers[12];
+	struct sctp_transport *shutdown_last_sent_to;
+	struct sctp_transport *init_last_sent_to;
+	int shutdown_retries;
+	__u32 next_tsn;
+	__u32 ctsn_ack_point;
+	__u32 adv_peer_ack_point;
+	__u32 highest_sacked;
+	__u32 fast_recovery_exit;
+	__u8 fast_recovery;
+	__u16 unack_data;
+	__u32 rtx_data_chunks;
+	__u32 rwnd;
+	__u32 a_rwnd;
+	__u32 rwnd_over;
+	__u32 rwnd_press;
+	int sndbuf_used;
+	atomic_t rmem_alloc;
+	wait_queue_head_t wait;
+	__u32 frag_point;
+	__u32 user_frag;
+	int init_err_counter;
+	int init_cycle;
+	__u16 default_stream;
+	__u16 default_flags;
+	__u32 default_ppid;
+	__u32 default_context;
+	__u32 default_timetolive;
+	__u32 default_rcv_context;
+	struct sctp_stream stream;
+	struct sctp_outq outqueue;
+	struct sctp_ulpq ulpq;
+	__u32 last_ecne_tsn;
+	__u32 last_cwr_tsn;
+	int numduptsns;
+	struct sctp_chunk *addip_last_asconf;
+	struct list_head asconf_ack_list;
+	struct list_head addip_chunk_list;
+	__u32 addip_serial;
+	int src_out_of_asoc_ok;
+	union sctp_addr *asconf_addr_del_pending;
+	struct sctp_transport *new_transport;
+	struct list_head endpoint_shared_keys;
+	struct sctp_auth_bytes *asoc_shared_key;
+	struct sctp_shared_key *shkey;
+	__u16 default_hmac_id;
+	__u16 active_key_id;
+	__u8 need_ecne: 1;
+	__u8 temp: 1;
+	__u8 pf_expose: 2;
+	__u8 force_delay: 1;
+	__u8 strreset_enable;
+	__u8 strreset_outstanding;
+	__u32 strreset_outseq;
+	__u32 strreset_inseq;
+	__u32 strreset_result[2];
+	struct sctp_chunk *strreset_chunk;
+	struct sctp_priv_assoc_stats stats;
+	int sent_cnt_removable;
+	__u16 subscribe;
+	__u64 abandoned_unsent[3];
+	__u64 abandoned_sent[3];
+	u32 secid;
+	u32 peer_secid;
+	struct callback_head rcu;
+};
+
+struct sctp_paramhdr;
+
+struct sctp_cookie_preserve_param;
+
+struct sctp_hostname_param;
+
+struct sctp_cookie_param;
+
+struct sctp_supported_addrs_param;
+
+struct sctp_ipv4addr_param;
+
+struct sctp_ipv6addr_param;
+
+union sctp_addr_param;
+
+struct sctp_adaptation_ind_param;
+
+struct sctp_supported_ext_param;
+
+struct sctp_addip_param;
+
+union sctp_params {
+	void *v;
+	struct sctp_paramhdr *p;
+	struct sctp_cookie_preserve_param *life;
+	struct sctp_hostname_param *dns;
+	struct sctp_cookie_param *cookie;
+	struct sctp_supported_addrs_param *sat;
+	struct sctp_ipv4addr_param *v4;
+	struct sctp_ipv6addr_param *v6;
+	union sctp_addr_param *addr;
+	struct sctp_adaptation_ind_param *aind;
+	struct sctp_supported_ext_param *ext;
+	struct sctp_random_param *random;
+	struct sctp_chunks_param *chunks;
+	struct sctp_hmac_algo_param *hmac_algo;
+	struct sctp_addip_param *addip;
+};
+
+struct sctp_sndrcvinfo {
+	__u16 sinfo_stream;
+	__u16 sinfo_ssn;
+	__u16 sinfo_flags;
+	__u32 sinfo_ppid;
+	__u32 sinfo_context;
+	__u32 sinfo_timetolive;
+	__u32 sinfo_tsn;
+	__u32 sinfo_cumtsn;
+	sctp_assoc_t sinfo_assoc_id;
+};
+
+struct sctp_datahdr;
+
+struct sctp_inithdr;
+
+struct sctp_sackhdr;
+
+struct sctp_heartbeathdr;
+
+struct sctp_sender_hb_info;
+
+struct sctp_shutdownhdr;
+
+struct sctp_signed_cookie;
+
+struct sctp_ecnehdr;
+
+struct sctp_cwrhdr;
+
+struct sctp_errhdr;
+
+struct sctp_addiphdr;
+
+struct sctp_fwdtsn_hdr;
+
+struct sctp_authhdr;
+
+struct sctp_idatahdr;
+
+struct sctp_ifwdtsn_hdr;
+
+struct sctp_chunkhdr;
+
+struct sctphdr;
+
+struct sctp_datamsg;
+
+struct sctp_chunk {
+	struct list_head list;
+	refcount_t refcnt;
+	int sent_count;
+	union {
+		struct list_head transmitted_list;
+		struct list_head stream_list;
+	};
+	struct list_head frag_list;
+	struct sk_buff *skb;
+	union {
+		struct sk_buff *head_skb;
+		struct sctp_shared_key *shkey;
+	};
+	union sctp_params param_hdr;
+	union {
+		__u8 *v;
+		struct sctp_datahdr *data_hdr;
+		struct sctp_inithdr *init_hdr;
+		struct sctp_sackhdr *sack_hdr;
+		struct sctp_heartbeathdr *hb_hdr;
+		struct sctp_sender_hb_info *hbs_hdr;
+		struct sctp_shutdownhdr *shutdown_hdr;
+		struct sctp_signed_cookie *cookie_hdr;
+		struct sctp_ecnehdr *ecne_hdr;
+		struct sctp_cwrhdr *ecn_cwr_hdr;
+		struct sctp_errhdr *err_hdr;
+		struct sctp_addiphdr *addip_hdr;
+		struct sctp_fwdtsn_hdr *fwdtsn_hdr;
+		struct sctp_authhdr *auth_hdr;
+		struct sctp_idatahdr *idata_hdr;
+		struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
+	} subh;
+	__u8 *chunk_end;
+	struct sctp_chunkhdr *chunk_hdr;
+	struct sctphdr *sctp_hdr;
+	struct sctp_sndrcvinfo sinfo;
+	struct sctp_association *asoc;
+	struct sctp_ep_common *rcvr;
+	unsigned long sent_at;
+	union sctp_addr source;
+	union sctp_addr dest;
+	struct sctp_datamsg *msg;
+	struct sctp_transport *transport;
+	struct sk_buff *auth_chunk;
+	__u16 rtt_in_progress: 1;
+	__u16 has_tsn: 1;
+	__u16 has_ssn: 1;
+	__u16 singleton: 1;
+	__u16 end_of_packet: 1;
+	__u16 ecn_ce_done: 1;
+	__u16 pdiscard: 1;
+	__u16 tsn_gap_acked: 1;
+	__u16 data_accepted: 1;
+	__u16 auth: 1;
+	__u16 has_asconf: 1;
+	__u16 pmtu_probe: 1;
+	__u16 tsn_missing_report: 2;
+	__u16 fast_retransmit: 2;
+};
+
+struct sctp_shared_key {
+	struct list_head key_list;
+	struct sctp_auth_bytes *key;
+	refcount_t refcnt;
+	__u16 key_id;
+	__u8 deactivated;
+};
+
+struct sctp_auth_bytes {
+	refcount_t refcnt;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct sctp_paramhdr {
+	__be16 type;
+	__be16 length;
+};
+
+struct sctp_cookie_preserve_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 lifespan_increment;
+};
+
+struct sctp_hostname_param {
+	struct sctp_paramhdr param_hdr;
+	uint8_t hostname[0];
+};
+
+struct sctp_cookie_param {
+	struct sctp_paramhdr p;
+	__u8 body[0];
+};
+
+struct sctp_supported_addrs_param {
+	struct sctp_paramhdr param_hdr;
+	__be16 types[0];
+};
+
+struct sctp_ipv4addr_param {
+	struct sctp_paramhdr param_hdr;
+	struct in_addr addr;
+};
+
+struct sctp_ipv6addr_param {
+	struct sctp_paramhdr param_hdr;
+	struct in6_addr addr;
+};
+
+union sctp_addr_param {
+	struct sctp_paramhdr p;
+	struct sctp_ipv4addr_param v4;
+	struct sctp_ipv6addr_param v6;
+};
+
+struct sctp_adaptation_ind_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 adaptation_ind;
+};
+
+struct sctp_supported_ext_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 chunks[0];
+};
+
+struct sctp_random_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 random_val[0];
+};
+
+struct sctp_chunks_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 chunks[0];
+};
+
+struct sctp_hmac_algo_param {
+	struct sctp_paramhdr param_hdr;
+	__be16 hmac_ids[0];
+};
+
+struct sctp_addip_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 crr_id;
+};
+
+struct sctp_datahdr {
+	__be32 tsn;
+	__be16 stream;
+	__be16 ssn;
+	__u32 ppid;
+};
+
+struct sctp_inithdr {
+	__be32 init_tag;
+	__be32 a_rwnd;
+	__be16 num_outbound_streams;
+	__be16 num_inbound_streams;
+	__be32 initial_tsn;
+};
+
+struct sctp_sackhdr {
+	__be32 cum_tsn_ack;
+	__be32 a_rwnd;
+	__be16 num_gap_ack_blocks;
+	__be16 num_dup_tsns;
+};
+
+struct sctp_heartbeathdr {
+	struct sctp_paramhdr info;
+};
+
+struct sctp_sender_hb_info {
+	struct sctp_paramhdr param_hdr;
+	union sctp_addr daddr;
+	unsigned long sent_at;
+	__u64 hb_nonce;
+	__u32 probe_size;
+};
+
+struct sctp_shutdownhdr {
+	__be32 cum_tsn_ack;
+};
+
+struct sctp_signed_cookie {
+	__u8 signature[32];
+	__u32 __pad;
+	struct sctp_cookie c;
+} __attribute__((packed));
+
+struct sctp_ecnehdr {
+	__be32 lowest_tsn;
+};
+
+struct sctp_cwrhdr {
+	__be32 lowest_tsn;
+};
+
+struct sctp_errhdr {
+	__be16 cause;
+	__be16 length;
+};
+
+struct sctp_addiphdr {
+	__be32 serial;
+};
+
+struct sctp_fwdtsn_hdr {
+	__be32 new_cum_tsn;
+};
+
+struct sctp_authhdr {
+	__be16 shkey_id;
+	__be16 hmac_id;
+};
+
+struct sctp_idatahdr {
+	__be32 tsn;
+	__be16 stream;
+	__be16 reserved;
+	__be32 mid;
+	union {
+		__u32 ppid;
+		__be32 fsn;
+	};
+	__u8 payload[0];
+};
+
+struct sctp_ifwdtsn_hdr {
+	__be32 new_cum_tsn;
+};
+
+struct sctp_chunkhdr {
+	__u8 type;
+	__u8 flags;
+	__be16 length;
+};
+
+struct sctphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 vtag;
+	__le32 checksum;
+};
+
+struct sctp_datamsg {
+	struct list_head chunks;
+	refcount_t refcnt;
+	unsigned long expires_at;
+	int send_error;
+	u8 send_failed: 1;
+	u8 can_delay: 1;
+	u8 abandoned: 1;
+};
+
+struct sctp_packet {
+	__u16 source_port;
+	__u16 destination_port;
+	__u32 vtag;
+	struct list_head chunk_list;
+	size_t overhead;
+	size_t size;
+	size_t max_size;
+	struct sctp_transport *transport;
+	struct sctp_chunk *auth;
+	u8 has_cookie_echo: 1;
+	u8 has_sack: 1;
+	u8 has_auth: 1;
+	u8 has_data: 1;
+	u8 ipfragok: 1;
+};
+
+struct sctp_af;
+
+struct sctp_transport {
+	struct list_head transports;
+	struct rhlist_head node;
+	refcount_t refcnt;
+	__u32 rto_pending: 1;
+	__u32 hb_sent: 1;
+	__u32 pmtu_pending: 1;
+	__u32 dst_pending_confirm: 1;
+	__u32 sack_generation: 1;
+	u32 dst_cookie;
+	struct flowi fl;
+	union sctp_addr ipaddr;
+	struct sctp_af *af_specific;
+	struct sctp_association *asoc;
+	unsigned long rto;
+	__u32 rtt;
+	__u32 rttvar;
+	__u32 srtt;
+	__u32 cwnd;
+	__u32 ssthresh;
+	__u32 partial_bytes_acked;
+	__u32 flight_size;
+	__u32 burst_limited;
+	struct dst_entry *dst;
+	union sctp_addr saddr;
+	unsigned long hbinterval;
+	unsigned long probe_interval;
+	unsigned long sackdelay;
+	__u32 sackfreq;
+	atomic_t mtu_info;
+	ktime_t last_time_heard;
+	unsigned long last_time_sent;
+	unsigned long last_time_ecne_reduced;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u32 pathmtu;
+	__u32 param_flags;
+	int init_sent_count;
+	int state;
+	unsigned short error_count;
+	struct timer_list T3_rtx_timer;
+	struct timer_list hb_timer;
+	struct timer_list proto_unreach_timer;
+	struct timer_list reconf_timer;
+	struct timer_list probe_timer;
+	struct list_head transmitted;
+	struct sctp_packet packet;
+	struct list_head send_ready;
+	struct {
+		__u32 next_tsn_at_change;
+		char changeover_active;
+		char cycling_changeover;
+		char cacc_saw_newack;
+	} cacc;
+	struct {
+		__u16 pmtu;
+		__u16 probe_size;
+		__u16 probe_high;
+		__u8 probe_count;
+		__u8 state;
+	} pl;
+	__u64 hb_nonce;
+	struct callback_head rcu;
+};
+
+enum sctp_scope {
+	SCTP_SCOPE_GLOBAL = 0,
+	SCTP_SCOPE_PRIVATE = 1,
+	SCTP_SCOPE_LINK = 2,
+	SCTP_SCOPE_LOOPBACK = 3,
+	SCTP_SCOPE_UNUSABLE = 4,
+};
+
+struct sctp_sock;
+
+struct sctp_af {
+	int (*sctp_xmit)(struct sk_buff *, struct sctp_transport *);
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char __attribute__((btf_type_tag("user"))) *, int __attribute__((btf_type_tag("user"))) *);
+	void (*get_dst)(struct sctp_transport *, union sctp_addr *, struct flowi *, struct sock *);
+	void (*get_saddr)(struct sctp_sock *, struct sctp_transport *, struct flowi *);
+	void (*copy_addrlist)(struct list_head *, struct net_device *);
+	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *);
+	void (*addr_copy)(union sctp_addr *, union sctp_addr *);
+	void (*from_skb)(union sctp_addr *, struct sk_buff *, int);
+	void (*from_sk)(union sctp_addr *, struct sock *);
+	bool (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);
+	int (*to_addr_param)(const union sctp_addr *, union sctp_addr_param *);
+	int (*addr_valid)(union sctp_addr *, struct sctp_sock *, const struct sk_buff *);
+	enum sctp_scope (*scope)(union sctp_addr *);
+	void (*inaddr_any)(union sctp_addr *, __be16);
+	int (*is_any)(const union sctp_addr *);
+	int (*available)(union sctp_addr *, struct sctp_sock *);
+	int (*skb_iif)(const struct sk_buff *);
+	int (*skb_sdif)(const struct sk_buff *);
+	int (*is_ce)(const struct sk_buff *);
+	void (*seq_dump_addr)(struct seq_file *, union sctp_addr *);
+	void (*ecn_capable)(struct sock *);
+	__u16 net_header_len;
+	int sockaddr_len;
+	int (*ip_options_len)(struct sock *);
+	sa_family_t sa_family;
+	struct list_head list;
+};
+
+struct ip_options;
+
+struct inet_cork {
+	unsigned int flags;
+	__be32 addr;
+	struct ip_options *opt;
+	unsigned int fragsize;
+	int length;
+	struct dst_entry *dst;
+	u8 tx_flags;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+	u64 transmit_time;
+	u32 mark;
+};
+
+struct inet_cork_full {
+	struct inet_cork base;
+	struct flowi fl;
+};
+
+struct ipv6_pinfo;
+
+struct ip_options_rcu;
+
+struct ip_mc_socklist;
+
+struct inet_sock {
+	struct sock sk;
+	struct ipv6_pinfo *pinet6;
+	unsigned long inet_flags;
+	__be32 inet_saddr;
+	__s16 uc_ttl;
+	__be16 inet_sport;
+	struct ip_options_rcu __attribute__((btf_type_tag("rcu"))) *inet_opt;
+	atomic_t inet_id;
+	__u8 tos;
+	__u8 min_ttl;
+	__u8 mc_ttl;
+	__u8 pmtudisc;
+	__u8 rcv_tos;
+	__u8 convert_csum;
+	int uc_index;
+	int mc_index;
+	__be32 mc_addr;
+	struct {
+		__u16 lo;
+		__u16 hi;
+	} local_port_range;
+	struct ip_mc_socklist __attribute__((btf_type_tag("rcu"))) *mc_list;
+	struct inet_cork_full cork;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum sctp_socket_type {
+	SCTP_SOCKET_UDP = 0,
+	SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1,
+	SCTP_SOCKET_TCP = 2,
+};
+
+struct sctp_rtoinfo {
+	sctp_assoc_t srto_assoc_id;
+	__u32 srto_initial;
+	__u32 srto_max;
+	__u32 srto_min;
+};
+
+struct sctp_paddrparams {
+	sctp_assoc_t spp_assoc_id;
+	struct __kernel_sockaddr_storage spp_address;
+	__u32 spp_hbinterval;
+	__u16 spp_pathmaxrxt;
+	__u32 spp_pathmtu;
+	__u32 spp_sackdelay;
+	__u32 spp_flags;
+	__u32 spp_ipv6_flowlabel;
+	__u8 spp_dscp;
+	int: 0;
+} __attribute__((packed));
+
+struct sctp_assocparams {
+	sctp_assoc_t sasoc_assoc_id;
+	__u16 sasoc_asocmaxrxt;
+	__u16 sasoc_number_peer_destinations;
+	__u32 sasoc_peer_rwnd;
+	__u32 sasoc_local_rwnd;
+	__u32 sasoc_cookie_life;
+};
+
+struct sctp_initmsg {
+	__u16 sinit_num_ostreams;
+	__u16 sinit_max_instreams;
+	__u16 sinit_max_attempts;
+	__u16 sinit_max_init_timeo;
+};
+
+struct sctp_pf;
+
+struct sctp_bind_bucket;
+
+struct sctp_sock {
+	struct inet_sock inet;
+	enum sctp_socket_type type;
+	struct sctp_pf *pf;
+	struct crypto_shash *hmac;
+	char *sctp_hmac_alg;
+	struct sctp_endpoint *ep;
+	struct sctp_bind_bucket *bind_hash;
+	__u16 default_stream;
+	__u32 default_ppid;
+	__u16 default_flags;
+	__u32 default_context;
+	__u32 default_timetolive;
+	__u32 default_rcv_context;
+	int max_burst;
+	__u32 hbinterval;
+	__u32 probe_interval;
+	__be16 udp_port;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u32 pathmtu;
+	__u32 sackdelay;
+	__u32 sackfreq;
+	__u32 param_flags;
+	__u32 default_ss;
+	struct sctp_rtoinfo rtoinfo;
+	struct sctp_paddrparams paddrparam;
+	struct sctp_assocparams assocparams;
+	__u16 subscribe;
+	struct sctp_initmsg initmsg;
+	int user_frag;
+	__u32 autoclose;
+	__u32 adaptation_ind;
+	__u32 pd_point;
+	__u16 nodelay: 1;
+	__u16 pf_expose: 2;
+	__u16 reuse: 1;
+	__u16 disable_fragments: 1;
+	__u16 v4mapped: 1;
+	__u16 frag_interleave: 1;
+	__u16 recvrcvinfo: 1;
+	__u16 recvnxtinfo: 1;
+	__u16 data_ready_signalled: 1;
+	atomic_t pd_mode;
+	struct sk_buff_head pd_lobby;
+	struct list_head auto_asconf_list;
+	int do_auto_asconf;
+};
+
+struct in6_pktinfo {
+	struct in6_addr ipi6_addr;
+	int ipi6_ifindex;
+};
+
+struct ipv6_txoptions;
+
+struct inet6_cork {
+	struct ipv6_txoptions *opt;
+	u8 hop_limit;
+	u8 tclass;
+};
+
+struct ipv6_mc_socklist;
+
+struct ipv6_ac_socklist;
+
+struct ipv6_fl_socklist;
+
+struct ipv6_pinfo {
+	struct in6_addr saddr;
+	struct in6_pktinfo sticky_pktinfo;
+	const struct in6_addr *daddr_cache;
+	__be32 flow_label;
+	__u32 frag_size;
+	__u16 __unused_1: 7;
+	__s16 hop_limit: 9;
+	__u16 mc_loop: 1;
+	__u16 __unused_2: 6;
+	__s16 mcast_hops: 9;
+	int ucast_oif;
+	int mcast_oif;
+	union {
+		struct {
+			__u16 srcrt: 1;
+			__u16 osrcrt: 1;
+			__u16 rxinfo: 1;
+			__u16 rxoinfo: 1;
+			__u16 rxhlim: 1;
+			__u16 rxohlim: 1;
+			__u16 hopopts: 1;
+			__u16 ohopopts: 1;
+			__u16 dstopts: 1;
+			__u16 odstopts: 1;
+			__u16 rxflow: 1;
+			__u16 rxtclass: 1;
+			__u16 rxpmtu: 1;
+			__u16 rxorigdstaddr: 1;
+			__u16 recvfragsize: 1;
+		} bits;
+		__u16 all;
+	} rxopt;
+	__u16 recverr: 1;
+	__u16 sndflow: 1;
+	__u16 repflow: 1;
+	__u16 pmtudisc: 3;
+	__u16 padding: 1;
+	__u16 srcprefs: 3;
+	__u16 dontfrag: 1;
+	__u16 autoflowlabel: 1;
+	__u16 autoflowlabel_set: 1;
+	__u16 mc_all: 1;
+	__u16 recverr_rfc4884: 1;
+	__u16 rtalert_isolate: 1;
+	__u8 min_hopcount;
+	__u8 tclass;
+	__be32 rcv_flowinfo;
+	__u32 dst_cookie;
+	struct ipv6_mc_socklist __attribute__((btf_type_tag("rcu"))) *ipv6_mc_list;
+	struct ipv6_ac_socklist *ipv6_ac_list;
+	struct ipv6_fl_socklist __attribute__((btf_type_tag("rcu"))) *ipv6_fl_list;
+	struct ipv6_txoptions __attribute__((btf_type_tag("rcu"))) *opt;
+	struct sk_buff *pktoptions;
+	struct sk_buff *rxpmtu;
+	struct inet6_cork cork;
+};
+
+struct ip6_sf_socklist;
+
+struct ipv6_mc_socklist {
+	struct in6_addr addr;
+	int ifindex;
+	unsigned int sfmode;
+	struct ipv6_mc_socklist __attribute__((btf_type_tag("rcu"))) *next;
+	struct ip6_sf_socklist __attribute__((btf_type_tag("rcu"))) *sflist;
+	struct callback_head rcu;
+};
+
+struct ip6_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	struct in6_addr sl_addr[0];
+};
+
+struct ipv6_ac_socklist {
+	struct in6_addr acl_addr;
+	int acl_ifindex;
+	struct ipv6_ac_socklist *acl_next;
+};
+
+struct ip6_flowlabel;
+
+struct ipv6_fl_socklist {
+	struct ipv6_fl_socklist __attribute__((btf_type_tag("rcu"))) *next;
+	struct ip6_flowlabel *fl;
+	struct callback_head rcu;
+};
+
+struct ip6_flowlabel {
+	struct ip6_flowlabel __attribute__((btf_type_tag("rcu"))) *next;
+	__be32 label;
+	atomic_t users;
+	struct in6_addr dst;
+	struct ipv6_txoptions *opt;
+	unsigned long linger;
+	struct callback_head rcu;
+	u8 share;
+	union {
+		struct pid *pid;
+		kuid_t uid;
+	} owner;
+	unsigned long lastuse;
+	unsigned long expires;
+	struct net *fl_net;
+};
+
+struct ipv6_opt_hdr;
+
+struct ipv6_rt_hdr;
+
+struct ipv6_txoptions {
+	refcount_t refcnt;
+	int tot_len;
+	__u16 opt_flen;
+	__u16 opt_nflen;
+	struct ipv6_opt_hdr *hopopt;
+	struct ipv6_opt_hdr *dst0opt;
+	struct ipv6_rt_hdr *srcrt;
+	struct ipv6_opt_hdr *dst1opt;
+	struct callback_head rcu;
+};
+
+struct ipv6_opt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+};
+
+struct ipv6_rt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+};
+
+struct ip_options {
+	__be32 faddr;
+	__be32 nexthop;
+	unsigned char optlen;
+	unsigned char srr;
+	unsigned char rr;
+	unsigned char ts;
+	unsigned char is_strictroute: 1;
+	unsigned char srr_is_hit: 1;
+	unsigned char is_changed: 1;
+	unsigned char rr_needaddr: 1;
+	unsigned char ts_needtime: 1;
+	unsigned char ts_needaddr: 1;
+	unsigned char router_alert;
+	unsigned char cipso;
+	unsigned char __pad2;
+	unsigned char __data[0];
+};
+
+struct ip_options_rcu {
+	struct callback_head rcu;
+	struct ip_options opt;
+};
+
+struct ip_mreqn {
+	struct in_addr imr_multiaddr;
+	struct in_addr imr_address;
+	int imr_ifindex;
+};
+
+struct ip_sf_socklist;
+
+struct ip_mc_socklist {
+	struct ip_mc_socklist __attribute__((btf_type_tag("rcu"))) *next_rcu;
+	struct ip_mreqn multi;
+	unsigned int sfmode;
+	struct ip_sf_socklist __attribute__((btf_type_tag("rcu"))) *sflist;
+	struct callback_head rcu;
+};
+
+struct sctp_ulpevent;
+
+struct sctp_pf {
+	void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
+	void (*skb_msgname)(struct sk_buff *, char *, int *);
+	int (*af_supported)(sa_family_t, struct sctp_sock *);
+	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *, struct sctp_sock *);
+	int (*bind_verify)(struct sctp_sock *, union sctp_addr *);
+	int (*send_verify)(struct sctp_sock *, union sctp_addr *);
+	int (*supported_addrs)(const struct sctp_sock *, __be16 *);
+	struct sock * (*create_accept_sk)(struct sock *, struct sctp_association *, bool);
+	int (*addr_to_user)(struct sctp_sock *, union sctp_addr *);
+	void (*to_sk_saddr)(union sctp_addr *, struct sock *);
+	void (*to_sk_daddr)(union sctp_addr *, struct sock *);
+	void (*copy_ip_options)(struct sock *, struct sock *);
+	struct sctp_af *af;
+};
+
+struct sctp_ulpevent {
+	struct sctp_association *asoc;
+	struct sctp_chunk *chunk;
+	unsigned int rmem_len;
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	union {
+		__u32 ppid;
+		__u32 fsn;
+	};
+	__u32 tsn;
+	__u32 cumtsn;
+	__u16 stream;
+	__u16 flags;
+	__u16 msg_flags;
+} __attribute__((packed));
+
+struct sctp_endpoint {
+	struct sctp_ep_common base;
+	struct hlist_node node;
+	int hashent;
+	struct list_head asocs;
+	__u8 secret_key[32];
+	__u8 *digest;
+	__u32 sndbuf_policy;
+	__u32 rcvbuf_policy;
+	struct crypto_shash **auth_hmacs;
+	struct sctp_hmac_algo_param *auth_hmacs_list;
+	struct sctp_chunks_param *auth_chunk_list;
+	struct list_head endpoint_shared_keys;
+	__u16 active_key_id;
+	__u8 ecn_enable: 1;
+	__u8 auth_enable: 1;
+	__u8 intl_enable: 1;
+	__u8 prsctp_enable: 1;
+	__u8 asconf_enable: 1;
+	__u8 reconf_enable: 1;
+	__u8 strreset_enable;
+	struct callback_head rcu;
+};
+
+struct sctp_bind_bucket {
+	unsigned short port;
+	signed char fastreuse;
+	signed char fastreuseport;
+	kuid_t fastuid;
+	struct hlist_node node;
+	struct hlist_head owner;
+	struct net *net;
+};
+
+struct sctp_stream_priorities;
+
+struct sctp_stream_out_ext {
+	__u64 abandoned_unsent[3];
+	__u64 abandoned_sent[3];
+	struct list_head outq;
+	union {
+		struct {
+			struct list_head prio_list;
+			struct sctp_stream_priorities *prio_head;
+		};
+		struct {
+			struct list_head rr_list;
+		};
+		struct {
+			struct list_head fc_list;
+			__u32 fc_length;
+			__u16 fc_weight;
+		};
+	};
+};
+
+struct sctp_stream_priorities {
+	struct list_head prio_sched;
+	struct list_head active;
+	struct sctp_stream_out_ext *next;
+	__u16 prio;
+	__u16 users;
+};
+
+struct sctp_stream_interleave {
+	__u16 data_chunk_len;
+	__u16 ftsn_chunk_len;
+	struct sctp_chunk * (*make_datafrag)(const struct sctp_association *, const struct sctp_sndrcvinfo *, int, __u8, gfp_t);
+	void (*assign_number)(struct sctp_chunk *);
+	bool (*validate_data)(struct sctp_chunk *);
+	int (*ulpevent_data)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
+	int (*enqueue_event)(struct sctp_ulpq *, struct sctp_ulpevent *);
+	void (*renege_events)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
+	void (*start_pd)(struct sctp_ulpq *, gfp_t);
+	void (*abort_pd)(struct sctp_ulpq *, gfp_t);
+	void (*generate_ftsn)(struct sctp_outq *, __u32);
+	bool (*validate_ftsn)(struct sctp_chunk *);
+	void (*report_ftsn)(struct sctp_ulpq *, __u32);
+	void (*handle_ftsn)(struct sctp_ulpq *, struct sctp_chunk *);
+};
+
+enum nf_hook_ops_type {
+	NF_HOOK_OP_UNDEFINED = 0,
+	NF_HOOK_OP_NF_TABLES = 1,
+	NF_HOOK_OP_BPF = 2,
+};
+
+struct nf_hook_ops {
+	nf_hookfn *hook;
+	struct net_device *dev;
+	void *priv;
+	u8 pf;
+	enum nf_hook_ops_type hook_ops_type: 8;
+	unsigned int hooknum;
+	int priority;
+};
+
+enum label_initialized {
+	LABEL_INVALID = 0,
+	LABEL_INITIALIZED = 1,
+	LABEL_PENDING = 2,
+};
+
+enum {
+	POLICYDB_CAP_NETPEER = 0,
+	POLICYDB_CAP_OPENPERM = 1,
+	POLICYDB_CAP_EXTSOCKCLASS = 2,
+	POLICYDB_CAP_ALWAYSNETWORK = 3,
+	POLICYDB_CAP_CGROUPSECLABEL = 4,
+	POLICYDB_CAP_NNP_NOSUID_TRANSITION = 5,
+	POLICYDB_CAP_GENFS_SECLABEL_SYMLINKS = 6,
+	POLICYDB_CAP_IOCTL_SKIP_CLOEXEC = 7,
+	__POLICYDB_CAP_MAX = 8,
+};
+
+struct sk_security_struct {
+	u32 sid;
+	u32 peer_sid;
+	u16 sclass;
+	enum {
+		SCTP_ASSOC_UNSET = 0,
+		SCTP_ASSOC_SET = 1,
+	} sctp_assoc_state;
+};
+
+enum {
+	Opt_error = -1,
+	Opt_context = 0,
+	Opt_defcontext = 1,
+	Opt_fscontext = 2,
+	Opt_rootcontext = 3,
+	Opt_seclabel = 4,
+};
+
+enum {
+	TCP_ESTABLISHED = 1,
+	TCP_SYN_SENT = 2,
+	TCP_SYN_RECV = 3,
+	TCP_FIN_WAIT1 = 4,
+	TCP_FIN_WAIT2 = 5,
+	TCP_TIME_WAIT = 6,
+	TCP_CLOSE = 7,
+	TCP_CLOSE_WAIT = 8,
+	TCP_LAST_ACK = 9,
+	TCP_LISTEN = 10,
+	TCP_CLOSING = 11,
+	TCP_NEW_SYN_RECV = 12,
+	TCP_MAX_STATES = 13,
+};
+
+struct inode_security_struct {
+	struct inode *inode;
+	struct list_head list;
+	u32 task_sid;
+	u32 sid;
+	u16 sclass;
+	unsigned char initialized;
+	spinlock_t lock;
+};
+
+struct tty_file_private {
+	struct tty_struct *tty;
+	struct file *file;
+	struct list_head list;
+};
+
+struct socket_alloc {
+	struct socket socket;
+	struct inode vfs_inode;
+};
+
+struct inet_skb_parm {
+	int iif;
+	struct ip_options opt;
+	u16 flags;
+	u16 frag_max_size;
+};
+
+struct inet6_skb_parm {
+	int iif;
+	__be16 ra;
+	__u16 dst0;
+	__u16 srcrt;
+	__u16 dst1;
+	__u16 lastopt;
+	__u16 nhoff;
+	__u16 flags;
+	__u16 dsthao;
+	__u16 frag_max_size;
+	__u16 srhoff;
+};
+
+struct task_security_struct {
+	u32 osid;
+	u32 sid;
+	u32 exec_sid;
+	u32 create_sid;
+	u32 keycreate_sid;
+	u32 sockcreate_sid;
+};
+
+struct superblock_security_struct {
+	u32 sid;
+	u32 def_sid;
+	u32 mntpoint_sid;
+	unsigned short behavior;
+	unsigned short flags;
+	struct mutex lock;
+	struct list_head isec_head;
+	spinlock_t isec_lock;
+};
+
+struct file_security_struct {
+	u32 sid;
+	u32 fown_sid;
+	u32 isid;
+	u32 pseqno;
+};
+
+struct bpf_security_struct {
+	u32 sid;
+};
+
+struct ipc_security_struct {
+	u16 sclass;
+	u32 sid;
+};
+
+struct msg_security_struct {
+	u32 sid;
+};
+
+typedef __u16 __sum16;
+
+struct iphdr {
+	__u8 ihl: 4;
+	__u8 version: 4;
+	__u8 tos;
+	__be16 tot_len;
+	__be16 id;
+	__be16 frag_off;
+	__u8 ttl;
+	__u8 protocol;
+	__sum16 check;
+	union {
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+		};
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+		} addrs;
+	};
+};
+
+struct tcphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 seq;
+	__be32 ack_seq;
+	__u16 res1: 4;
+	__u16 doff: 4;
+	__u16 fin: 1;
+	__u16 syn: 1;
+	__u16 rst: 1;
+	__u16 psh: 1;
+	__u16 ack: 1;
+	__u16 urg: 1;
+	__u16 ece: 1;
+	__u16 cwr: 1;
+	__be16 window;
+	__sum16 check;
+	__be16 urg_ptr;
+};
+
+struct dccp_hdr {
+	__be16 dccph_sport;
+	__be16 dccph_dport;
+	__u8 dccph_doff;
+	__u8 dccph_cscov: 4;
+	__u8 dccph_ccval: 4;
+	__sum16 dccph_checksum;
+	__u8 dccph_x: 1;
+	__u8 dccph_type: 4;
+	__u8 dccph_reserved: 3;
+	__u8 dccph_seq2;
+	__be16 dccph_seq;
+};
+
+struct udphdr {
+	__be16 source;
+	__be16 dest;
+	__be16 len;
+	__sum16 check;
+};
+
+struct ipv6hdr {
+	__u8 priority: 4;
+	__u8 version: 4;
+	__u8 flow_lbl[3];
+	__be16 payload_len;
+	__u8 nexthdr;
+	__u8 hop_limit;
+	union {
+		struct {
+			struct in6_addr saddr;
+			struct in6_addr daddr;
+		};
+		struct {
+			struct in6_addr saddr;
+			struct in6_addr daddr;
+		} addrs;
+	};
+};
+
+struct selinux_mnt_opts {
+	u32 fscontext_sid;
+	u32 context_sid;
+	u32 rootcontext_sid;
+	u32 defcontext_sid;
+};
+
+struct tun_security_struct {
+	u32 sid;
+};
+
+struct key_security_struct {
+	u32 sid;
+};
+
+struct perf_event_security_struct {
+	u32 sid;
+};
+
+enum sel_inos {
+	SEL_ROOT_INO = 2,
+	SEL_LOAD = 3,
+	SEL_ENFORCE = 4,
+	SEL_CONTEXT = 5,
+	SEL_ACCESS = 6,
+	SEL_CREATE = 7,
+	SEL_RELABEL = 8,
+	SEL_USER = 9,
+	SEL_POLICYVERS = 10,
+	SEL_COMMIT_BOOLS = 11,
+	SEL_MLS = 12,
+	SEL_DISABLE = 13,
+	SEL_MEMBER = 14,
+	SEL_CHECKREQPROT = 15,
+	SEL_COMPAT_NET = 16,
+	SEL_REJECT_UNKNOWN = 17,
+	SEL_DENY_UNKNOWN = 18,
+	SEL_STATUS = 19,
+	SEL_POLICY = 20,
+	SEL_VALIDATE_TRANS = 21,
+	SEL_INO_NEXT = 22,
+};
+
+struct selinux_fs_info {
+	struct dentry *bool_dir;
+	unsigned int bool_num;
+	char **bool_pending_names;
+	int *bool_pending_values;
+	struct dentry *class_dir;
+	unsigned long last_class_ino;
+	bool policy_opened;
+	struct dentry *policycap_dir;
+	unsigned long last_ino;
+	struct super_block *sb;
+};
+
+struct selinux_policy_convert_data;
+
+struct selinux_load_state {
+	struct selinux_policy *policy;
+	struct selinux_policy_convert_data *convert_data;
+};
+
+struct policy_load_memory {
+	size_t len;
+	void *data;
+};
+
+enum {
+	SELNL_MSG_SETENFORCE = 16,
+	SELNL_MSG_POLICYLOAD = 17,
+	SELNL_MSG_MAX = 18,
+};
+
+enum selinux_nlgroups {
+	SELNLGRP_NONE = 0,
+	SELNLGRP_AVC = 1,
+	__SELNLGRP_MAX = 2,
+};
+
+struct selnl_msg_setenforce {
+	__s32 val;
+};
+
+struct selnl_msg_policyload {
+	__u32 seqno;
+};
+
+struct nlmsg_perm {
+	u16 nlmsg_type;
+	u32 perm;
+};
+
+enum {
+	RTM_BASE = 16,
+	RTM_NEWLINK = 16,
+	RTM_DELLINK = 17,
+	RTM_GETLINK = 18,
+	RTM_SETLINK = 19,
+	RTM_NEWADDR = 20,
+	RTM_DELADDR = 21,
+	RTM_GETADDR = 22,
+	RTM_NEWROUTE = 24,
+	RTM_DELROUTE = 25,
+	RTM_GETROUTE = 26,
+	RTM_NEWNEIGH = 28,
+	RTM_DELNEIGH = 29,
+	RTM_GETNEIGH = 30,
+	RTM_NEWRULE = 32,
+	RTM_DELRULE = 33,
+	RTM_GETRULE = 34,
+	RTM_NEWQDISC = 36,
+	RTM_DELQDISC = 37,
+	RTM_GETQDISC = 38,
+	RTM_NEWTCLASS = 40,
+	RTM_DELTCLASS = 41,
+	RTM_GETTCLASS = 42,
+	RTM_NEWTFILTER = 44,
+	RTM_DELTFILTER = 45,
+	RTM_GETTFILTER = 46,
+	RTM_NEWACTION = 48,
+	RTM_DELACTION = 49,
+	RTM_GETACTION = 50,
+	RTM_NEWPREFIX = 52,
+	RTM_GETMULTICAST = 58,
+	RTM_GETANYCAST = 62,
+	RTM_NEWNEIGHTBL = 64,
+	RTM_GETNEIGHTBL = 66,
+	RTM_SETNEIGHTBL = 67,
+	RTM_NEWNDUSEROPT = 68,
+	RTM_NEWADDRLABEL = 72,
+	RTM_DELADDRLABEL = 73,
+	RTM_GETADDRLABEL = 74,
+	RTM_GETDCB = 78,
+	RTM_SETDCB = 79,
+	RTM_NEWNETCONF = 80,
+	RTM_DELNETCONF = 81,
+	RTM_GETNETCONF = 82,
+	RTM_NEWMDB = 84,
+	RTM_DELMDB = 85,
+	RTM_GETMDB = 86,
+	RTM_NEWNSID = 88,
+	RTM_DELNSID = 89,
+	RTM_GETNSID = 90,
+	RTM_NEWSTATS = 92,
+	RTM_GETSTATS = 94,
+	RTM_SETSTATS = 95,
+	RTM_NEWCACHEREPORT = 96,
+	RTM_NEWCHAIN = 100,
+	RTM_DELCHAIN = 101,
+	RTM_GETCHAIN = 102,
+	RTM_NEWNEXTHOP = 104,
+	RTM_DELNEXTHOP = 105,
+	RTM_GETNEXTHOP = 106,
+	RTM_NEWLINKPROP = 108,
+	RTM_DELLINKPROP = 109,
+	RTM_GETLINKPROP = 110,
+	RTM_NEWVLAN = 112,
+	RTM_DELVLAN = 113,
+	RTM_GETVLAN = 114,
+	RTM_NEWNEXTHOPBUCKET = 116,
+	RTM_DELNEXTHOPBUCKET = 117,
+	RTM_GETNEXTHOPBUCKET = 118,
+	RTM_NEWTUNNEL = 120,
+	RTM_DELTUNNEL = 121,
+	RTM_GETTUNNEL = 122,
+	__RTM_MAX = 123,
+};
+
+struct netif_security_struct {
+	struct net *ns;
+	int ifindex;
+	u32 sid;
+};
+
+struct sel_netif {
+	struct list_head list;
+	struct netif_security_struct nsec;
+	struct callback_head callback_head;
+};
+
+struct sel_netnode_bkt {
+	unsigned int size;
+	struct list_head list;
+};
+
+struct netnode_security_struct {
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} addr;
+	u32 sid;
+	u16 family;
+};
+
+struct sel_netnode {
+	struct netnode_security_struct nsec;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct sel_netport_bkt {
+	int size;
+	struct list_head list;
+};
+
+struct netport_security_struct {
+	u32 sid;
+	u16 port;
+	u8 protocol;
+};
+
+struct sel_netport {
+	struct netport_security_struct psec;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct selinux_kernel_status {
+	u32 version;
+	u32 sequence;
+	u32 enforcing;
+	u32 policyload;
+	u32 deny_unknown;
+};
+
+struct ebitmap_node {
+	struct ebitmap_node *next;
+	unsigned long maps[6];
+	u32 startbit;
+};
+
+struct policy_file {
+	char *data;
+	size_t len;
+};
+
+struct hashtab_node {
+	void *key;
+	void *datum;
+	struct hashtab_node *next;
+};
+
+struct hashtab_key_params {
+	u32 (*hash)(const void *);
+	int (*cmp)(const void *, const void *);
+};
+
+struct mls_level {
+	u32 sens;
+	struct ebitmap cat;
+};
+
+struct mls_range {
+	struct mls_level level[2];
+};
+
+struct context {
+	u32 user;
+	u32 role;
+	u32 type;
+	u32 len;
+	struct mls_range range;
+	char *str;
+};
+
+struct sidtab_str_cache;
+
+struct sidtab_entry {
+	u32 sid;
+	u32 hash;
+	struct context context;
+	struct sidtab_str_cache __attribute__((btf_type_tag("rcu"))) *cache;
+	struct hlist_node list;
+};
+
+struct sidtab_str_cache {
+	struct callback_head rcu_member;
+	struct list_head lru_member;
+	struct sidtab_entry *parent;
+	u32 len;
+	char str[0];
+};
+
+struct sidtab_node_inner;
+
+struct sidtab_node_leaf;
+
+union sidtab_entry_inner {
+	struct sidtab_node_inner *ptr_inner;
+	struct sidtab_node_leaf *ptr_leaf;
+};
+
+struct sidtab_isid_entry {
+	int set;
+	struct sidtab_entry entry;
+};
+
+struct sidtab_convert_params;
+
+struct sidtab {
+	union sidtab_entry_inner roots[4];
+	u32 count;
+	struct sidtab_convert_params *convert;
+	bool frozen;
+	spinlock_t lock;
+	u32 cache_free_slots;
+	struct list_head cache_lru_list;
+	spinlock_t cache_lock;
+	struct sidtab_isid_entry isids[27];
+	struct hlist_head context_to_sid[512];
+};
+
+struct sidtab_node_inner {
+	union sidtab_entry_inner entries[512];
+};
+
+struct sidtab_node_leaf {
+	struct sidtab_entry entries[39];
+};
+
+struct convert_context_args;
+
+struct sidtab_convert_params {
+	struct convert_context_args *args;
+	struct sidtab *target;
+};
+
+struct convert_context_args {
+	struct policydb *oldp;
+	struct policydb *newp;
+};
+
+struct common_datum;
+
+struct constraint_node;
+
+struct class_datum {
+	u32 value;
+	char *comkey;
+	struct common_datum *comdatum;
+	struct symtab permissions;
+	struct constraint_node *constraints;
+	struct constraint_node *validatetrans;
+	char default_user;
+	char default_role;
+	char default_type;
+	char default_range;
+};
+
+struct common_datum {
+	u32 value;
+	struct symtab permissions;
+};
+
+struct constraint_expr;
+
+struct constraint_node {
+	u32 permissions;
+	struct constraint_expr *expr;
+	struct constraint_node *next;
+};
+
+struct type_set;
+
+struct constraint_expr {
+	u32 expr_type;
+	u32 attr;
+	u32 op;
+	struct ebitmap names;
+	struct type_set *type_names;
+	struct constraint_expr *next;
+};
+
+struct type_set {
+	struct ebitmap types;
+	struct ebitmap negset;
+	u32 flags;
+};
+
+struct role_datum {
+	u32 value;
+	u32 bounds;
+	struct ebitmap dominates;
+	struct ebitmap types;
+};
+
+struct user_datum {
+	u32 value;
+	u32 bounds;
+	struct ebitmap roles;
+	struct mls_range range;
+	struct mls_level dfltlevel;
+};
+
+struct type_datum {
+	u32 value;
+	u32 bounds;
+	unsigned char primary;
+	unsigned char attribute;
+};
+
+struct avtab_key {
+	u16 source_type;
+	u16 target_type;
+	u16 target_class;
+	u16 specified;
+};
+
+struct avtab_extended_perms;
+
+struct avtab_datum {
+	union {
+		u32 data;
+		struct avtab_extended_perms *xperms;
+	} u;
+};
+
+struct avtab_node {
+	struct avtab_key key;
+	struct avtab_datum datum;
+	struct avtab_node *next;
+};
+
+struct avtab_extended_perms {
+	u8 specified;
+	u8 driver;
+	struct extended_perms_data perms;
+};
+
+struct cond_bool_datum {
+	__u32 value;
+	int state;
+};
+
+struct role_allow {
+	u32 role;
+	u32 new_role;
+	struct role_allow *next;
+};
+
+struct ocontext {
+	union {
+		char *name;
+		struct {
+			u8 protocol;
+			u16 low_port;
+			u16 high_port;
+		} port;
+		struct {
+			u32 addr;
+			u32 mask;
+		} node;
+		struct {
+			u32 addr[4];
+			u32 mask[4];
+		} node6;
+		struct {
+			u64 subnet_prefix;
+			u16 low_pkey;
+			u16 high_pkey;
+		} ibpkey;
+		struct {
+			char *dev_name;
+			u8 port;
+		} ibendport;
+	} u;
+	union {
+		u32 sclass;
+		u32 behavior;
+	} v;
+	struct context context[2];
+	u32 sid[2];
+	struct ocontext *next;
+};
+
+struct genfs {
+	char *fstype;
+	struct ocontext *head;
+	struct genfs *next;
+};
+
+struct policydb_compat_info {
+	unsigned int version;
+	unsigned int sym_num;
+	unsigned int ocon_num;
+};
+
+struct cond_expr_node;
+
+struct cond_expr {
+	struct cond_expr_node *nodes;
+	u32 len;
+};
+
+struct cond_av_list {
+	struct avtab_node **nodes;
+	u32 len;
+};
+
+struct cond_node {
+	int cur_state;
+	struct cond_expr expr;
+	struct cond_av_list true_list;
+	struct cond_av_list false_list;
+};
+
+struct cond_expr_node {
+	u32 expr_type;
+	u32 boolean;
+};
+
+struct filename_trans_key {
+	u32 ttype;
+	u16 tclass;
+	const char *name;
+};
+
+struct range_trans {
+	u32 source_type;
+	u32 target_type;
+	u32 target_class;
+};
+
+struct role_trans_key {
+	u32 role;
+	u32 type;
+	u32 tclass;
+};
+
+struct filename_trans_datum {
+	struct ebitmap stypes;
+	u32 otype;
+	struct filename_trans_datum *next;
+};
+
+struct level_datum {
+	struct mls_level *level;
+	unsigned char isalias;
+};
+
+struct role_trans_datum {
+	u32 new_role;
+};
+
+struct perm_datum {
+	u32 value;
+};
+
+struct policy_data {
+	struct policydb *p;
+	void *fp;
+};
+
+struct cat_datum {
+	u32 value;
+	unsigned char isalias;
+};
+
+struct selinux_mapping {
+	u16 value;
+	u16 num_perms;
+	u32 perms[32];
+};
+
+struct selinux_audit_rule {
+	u32 au_seqno;
+	struct context au_ctxt;
+};
+
+struct selinux_policy_convert_data {
+	struct convert_context_args args;
+	struct sidtab_convert_params sidtab_params;
+};
+
+struct cond_insertf_data {
+	struct policydb *p;
+	struct avtab_node **dst;
+	struct cond_av_list *other;
+};
+
+struct scm_stat {
+	atomic_t nr_fds;
+};
+
+struct unix_address;
+
+struct unix_sock {
+	struct sock sk;
+	struct unix_address *addr;
+	struct path path;
+	struct mutex iolock;
+	struct mutex bindlock;
+	struct sock *peer;
+	struct list_head link;
+	unsigned long inflight;
+	spinlock_t lock;
+	unsigned long gc_flags;
+	struct socket_wq peer_wq;
+	wait_queue_entry_t peer_wake;
+	struct scm_stat scm_stat;
+	struct sk_buff *oob_skb;
+	long: 64;
+};
+
+struct sockaddr_un {
+	__kernel_sa_family_t sun_family;
+	char sun_path[108];
+};
+
+struct unix_address {
+	refcount_t refcnt;
+	int len;
+	struct sockaddr_un name[0];
+};
+
+enum integrity_status {
+	INTEGRITY_PASS = 0,
+	INTEGRITY_PASS_IMMUTABLE = 1,
+	INTEGRITY_FAIL = 2,
+	INTEGRITY_FAIL_IMMUTABLE = 3,
+	INTEGRITY_NOLABEL = 4,
+	INTEGRITY_NOXATTRS = 5,
+	INTEGRITY_UNKNOWN = 6,
+};
+
+struct ima_digest_data;
+
+struct integrity_iint_cache {
+	struct rb_node rb_node;
+	struct mutex mutex;
+	struct inode *inode;
+	u64 version;
+	unsigned long flags;
+	unsigned long measured_pcrs;
+	unsigned long atomic_flags;
+	unsigned long real_ino;
+	dev_t real_dev;
+	enum integrity_status ima_file_status: 4;
+	enum integrity_status ima_mmap_status: 4;
+	enum integrity_status ima_bprm_status: 4;
+	enum integrity_status ima_read_status: 4;
+	enum integrity_status ima_creds_status: 4;
+	enum integrity_status evm_status: 4;
+	struct ima_digest_data *ima_hash;
+};
+
+struct ima_digest_data {
+	u8 algo;
+	u8 length;
+	union {
+		struct {
+			u8 unused;
+			u8 type;
+		} sha1;
+		struct {
+			u8 type;
+			u8 algo;
+		} ng;
+		u8 data[2];
+	} xattr;
+	u8 digest[0];
+};
+
+enum {
+	CRYPTO_MSG_ALG_REQUEST = 0,
+	CRYPTO_MSG_ALG_REGISTER = 1,
+	CRYPTO_MSG_ALG_LOADED = 2,
+};
+
+struct crypto_larval {
+	struct crypto_alg alg;
+	struct crypto_alg *adult;
+	struct completion completion;
+	u32 mask;
+	bool test_started;
+};
+
+struct crypto_cipher {
+	struct crypto_tfm base;
+};
+
+struct crypto_comp {
+	struct crypto_tfm base;
+};
+
+struct crypto_queue {
+	struct list_head list;
+	struct list_head *backlog;
+	unsigned int qlen;
+	unsigned int max_qlen;
+};
+
+struct crypto_engine {
+	char name[30];
+	bool idling;
+	bool busy;
+	bool running;
+	bool retry_support;
+	struct list_head list;
+	spinlock_t queue_lock;
+	struct crypto_queue queue;
+	struct device *dev;
+	bool rt;
+	int (*prepare_crypt_hardware)(struct crypto_engine *);
+	int (*unprepare_crypt_hardware)(struct crypto_engine *);
+	int (*do_batch_requests)(struct crypto_engine *);
+	struct kthread_worker *kworker;
+	struct kthread_work pump_requests;
+	void *priv_data;
+	struct crypto_async_request *cur_req;
+};
+
+struct crypto_engine_op {
+	int (*do_one_request)(struct crypto_engine *, void *);
+};
+
+struct crypto_engine_alg {
+	struct crypto_alg base;
+	struct crypto_engine_op op;
+};
+
+struct aead_engine_alg {
+	struct aead_alg base;
+	struct crypto_engine_op op;
+};
+
+struct ahash_request;
+
+struct crypto_ahash;
+
+struct ahash_alg {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_ahash *);
+	void (*exit_tfm)(struct crypto_ahash *);
+	int (*clone_tfm)(struct crypto_ahash *, struct crypto_ahash *);
+	struct hash_alg_common halg;
+};
+
+struct ahash_request {
+	struct crypto_async_request base;
+	unsigned int nbytes;
+	struct scatterlist *src;
+	u8 *result;
+	void *priv;
+	void *__ctx[0];
+};
+
+struct crypto_ahash {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	unsigned int statesize;
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct ahash_engine_alg {
+	struct ahash_alg base;
+	struct crypto_engine_op op;
+};
+
+struct akcipher_request;
+
+struct crypto_akcipher;
+
+struct akcipher_alg {
+	int (*sign)(struct akcipher_request *);
+	int (*verify)(struct akcipher_request *);
+	int (*encrypt)(struct akcipher_request *);
+	int (*decrypt)(struct akcipher_request *);
+	int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);
+	int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);
+	unsigned int (*max_size)(struct crypto_akcipher *);
+	int (*init)(struct crypto_akcipher *);
+	void (*exit)(struct crypto_akcipher *);
+	struct crypto_alg base;
+};
+
+struct akcipher_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	void *__ctx[0];
+};
+
+struct crypto_akcipher {
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct crypto_kpp;
+
+struct kpp_request;
+
+struct kpp_alg {
+	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
+	int (*generate_public_key)(struct kpp_request *);
+	int (*compute_shared_secret)(struct kpp_request *);
+	unsigned int (*max_size)(struct crypto_kpp *);
+	int (*init)(struct crypto_kpp *);
+	void (*exit)(struct crypto_kpp *);
+	struct crypto_alg base;
+};
+
+struct crypto_kpp {
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct kpp_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	void *__ctx[0];
+};
+
+struct skcipher_engine_alg {
+	struct skcipher_alg base;
+	struct crypto_engine_op op;
+};
+
+struct akcipher_engine_alg {
+	struct akcipher_alg base;
+	struct crypto_engine_op op;
+};
+
+struct kpp_engine_alg {
+	struct kpp_alg base;
+	struct crypto_engine_op op;
+};
+
+enum {
+	CRYPTOA_UNSPEC = 0,
+	CRYPTOA_ALG = 1,
+	CRYPTOA_TYPE = 2,
+	__CRYPTOA_MAX = 3,
+};
+
+struct rtattr {
+	unsigned short rta_len;
+	unsigned short rta_type;
+};
+
+struct crypto_attr_type {
+	u32 type;
+	u32 mask;
+};
+
+struct crypto_attr_alg {
+	char name[128];
+};
+
+struct aead_instance {
+	void (*free)(struct aead_instance *);
+	union {
+		struct {
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct aead_alg alg;
+	};
+};
+
+struct crypto_istat_aead {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_aead_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_rng;
+
+struct rng_alg {
+	int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);
+	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
+	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
+	unsigned int seedsize;
+	struct crypto_alg base;
+};
+
+struct crypto_rng {
+	struct crypto_tfm base;
+};
+
+struct crypto_sync_skcipher;
+
+struct aead_geniv_ctx {
+	spinlock_t lock;
+	struct crypto_aead *child;
+	struct crypto_sync_skcipher *sknull;
+	u8 salt[0];
+};
+
+enum {
+	SKCIPHER_WALK_PHYS = 1,
+	SKCIPHER_WALK_SLOW = 2,
+	SKCIPHER_WALK_COPY = 4,
+	SKCIPHER_WALK_DIFF = 8,
+	SKCIPHER_WALK_SLEEP = 16,
+};
+
+struct skcipher_walk_buffer {
+	struct list_head entry;
+	struct scatter_walk dst;
+	unsigned int len;
+	u8 *data;
+	u8 buffer[0];
+};
+
+struct crypto_sync_skcipher {
+	struct crypto_skcipher base;
+};
+
+struct skcipher_instance {
+	void (*free)(struct skcipher_instance *);
+	union {
+		struct {
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct skcipher_alg alg;
+	};
+};
+
+struct crypto_istat_cipher {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_cipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct skcipher_ctx_simple {
+	struct crypto_cipher *cipher;
+};
+
+struct crypto_skcipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct ahash_instance {
+	void (*free)(struct ahash_instance *);
+	union {
+		struct {
+			char head[96];
+			struct crypto_instance base;
+		} s;
+		struct ahash_alg alg;
+	};
+};
+
+struct crypto_hash_walk {
+	char *data;
+	unsigned int offset;
+	unsigned int alignmask;
+	struct page *pg;
+	unsigned int entrylen;
+	unsigned int total;
+	struct scatterlist *sg;
+	unsigned int flags;
+};
+
+struct crypto_ahash_spawn {
+	struct crypto_spawn base;
+};
+
+struct shash_instance {
+	void (*free)(struct shash_instance *);
+	union {
+		struct {
+			char head[120];
+			struct crypto_instance base;
+		} s;
+		struct shash_alg alg;
+	};
+};
+
+struct crypto_istat_hash {
+	atomic64_t hash_cnt;
+	atomic64_t hash_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_shash_spawn {
+	struct crypto_spawn base;
+};
+
+struct akcipher_instance {
+	void (*free)(struct akcipher_instance *);
+	union {
+		struct {
+			char head[72];
+			struct crypto_instance base;
+		} s;
+		struct akcipher_alg alg;
+	};
+};
+
+struct crypto_istat_akcipher {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t verify_cnt;
+	atomic64_t sign_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_akcipher_sync_data {
+	struct crypto_akcipher *tfm;
+	const void *src;
+	void *dst;
+	unsigned int slen;
+	unsigned int dlen;
+	struct akcipher_request *req;
+	struct crypto_wait cwait;
+	struct scatterlist sg;
+	u8 *buf;
+};
+
+struct crypto_akcipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_sig {
+	struct crypto_tfm base;
+};
+
+struct kpp_instance {
+	void (*free)(struct kpp_instance *);
+	union {
+		struct {
+			char head[48];
+			struct crypto_instance base;
+		} s;
+		struct kpp_alg alg;
+	};
+};
+
+struct crypto_istat_kpp {
+	atomic64_t setsecret_cnt;
+	atomic64_t generate_public_key_cnt;
+	atomic64_t compute_shared_secret_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_kpp_spawn {
+	struct crypto_spawn base;
+};
+
+typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
+
+struct asn1_decoder {
+	const unsigned char *machine;
+	size_t machlen;
+	const asn1_action_t *actions;
+};
+
+struct gcry_mpi;
+
+typedef struct gcry_mpi *MPI;
+
+struct rsa_mpi_key {
+	MPI n;
+	MPI e;
+	MPI d;
+	MPI p;
+	MPI q;
+	MPI dp;
+	MPI dq;
+	MPI qinv;
+};
+
+typedef unsigned long mpi_limb_t;
+
+struct gcry_mpi {
+	int alloced;
+	int nlimbs;
+	int nbits;
+	int sign;
+	unsigned int flags;
+	mpi_limb_t *d;
+};
+
+struct rsa_key {
+	const u8 *n;
+	const u8 *e;
+	const u8 *d;
+	const u8 *p;
+	const u8 *q;
+	const u8 *dp;
+	const u8 *dq;
+	const u8 *qinv;
+	size_t n_sz;
+	size_t e_sz;
+	size_t d_sz;
+	size_t p_sz;
+	size_t q_sz;
+	size_t dp_sz;
+	size_t dq_sz;
+	size_t qinv_sz;
+};
+
+struct rsa_asn1_template {
+	const char *name;
+	const u8 *data;
+	size_t size;
+};
+
+struct pkcs1pad_inst_ctx {
+	struct crypto_akcipher_spawn spawn;
+	const struct rsa_asn1_template *digest_info;
+};
+
+struct pkcs1pad_ctx {
+	struct crypto_akcipher *child;
+	unsigned int key_size;
+};
+
+struct pkcs1pad_request {
+	struct scatterlist in_sg[2];
+	struct scatterlist out_sg[1];
+	uint8_t *in_buf;
+	uint8_t *out_buf;
+	struct akcipher_request child_req;
+};
+
+struct acomp_req;
+
+struct crypto_acomp {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct acomp_req {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int slen;
+	unsigned int dlen;
+	u32 flags;
+	void *__ctx[0];
+};
+
+struct comp_alg_common {
+	struct crypto_alg base;
+};
+
+struct acomp_alg {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	int (*init)(struct crypto_acomp *);
+	void (*exit)(struct crypto_acomp *);
+	unsigned int reqsize;
+	union {
+		struct {
+			struct crypto_alg base;
+		};
+		struct comp_alg_common calg;
+	};
+};
+
+struct crypto_istat_compress {
+	atomic64_t compress_cnt;
+	atomic64_t compress_tlen;
+	atomic64_t decompress_cnt;
+	atomic64_t decompress_tlen;
+	atomic64_t err_cnt;
+};
+
+struct scomp_scratch {
+	spinlock_t lock;
+	void *src;
+	void *dst;
+};
+
+struct crypto_scomp;
+
+struct scomp_alg {
+	void * (*alloc_ctx)(struct crypto_scomp *);
+	void (*free_ctx)(struct crypto_scomp *, void *);
+	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	union {
+		struct {
+			struct crypto_alg base;
+		};
+		struct comp_alg_common calg;
+	};
+};
+
+struct crypto_scomp {
+	struct crypto_tfm base;
+};
+
+struct cryptomgr_param {
+	struct rtattr *tb[34];
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_type data;
+	} type;
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_alg data;
+	} attrs[32];
+	char template[128];
+	struct crypto_larval *larval;
+	u32 otype;
+	u32 omask;
+};
+
+struct cmac_desc_ctx {
+	unsigned int len;
+	u8 ctx[0];
+};
+
+struct cmac_tfm_ctx {
+	struct crypto_cipher *child;
+	u8 ctx[0];
+};
+
+struct hmac_ctx {
+	struct crypto_shash *hash;
+};
+
+typedef u32 u_int32_t;
+
+struct xcbc_tfm_ctx {
+	struct crypto_cipher *child;
+	u8 ctx[0];
+};
+
+struct xcbc_desc_ctx {
+	unsigned int len;
+	u8 ctx[0];
+};
+
+struct md5_state {
+	u32 hash[4];
+	u32 block[16];
+	u64 byte_count;
+};
+
+struct sha1_state;
+
+typedef void sha1_block_fn(struct sha1_state *, const u8 *, int);
+
+struct sha1_state {
+	u32 state[5];
+	u64 count;
+	u8 buffer[64];
+};
+
+struct sha3_state {
+	u64 st[25];
+	unsigned int rsiz;
+	unsigned int rsizw;
+	unsigned int partial;
+	u8 buf[144];
+};
+
+enum blake2b_lengths {
+	BLAKE2B_BLOCK_SIZE = 128,
+	BLAKE2B_HASH_SIZE = 64,
+	BLAKE2B_KEY_SIZE = 64,
+	BLAKE2B_160_HASH_SIZE = 20,
+	BLAKE2B_256_HASH_SIZE = 32,
+	BLAKE2B_384_HASH_SIZE = 48,
+	BLAKE2B_512_HASH_SIZE = 64,
+};
+
+enum blake2b_iv {
+	BLAKE2B_IV0 = 7640891576956012808ULL,
+	BLAKE2B_IV1 = 13503953896175478587ULL,
+	BLAKE2B_IV2 = 4354685564936845355ULL,
+	BLAKE2B_IV3 = 11912009170470909681ULL,
+	BLAKE2B_IV4 = 5840696475078001361ULL,
+	BLAKE2B_IV5 = 11170449401992604703ULL,
+	BLAKE2B_IV6 = 2270897969802886507ULL,
+	BLAKE2B_IV7 = 6620516959819538809ULL,
+};
+
+struct blake2b_state {
+	u64 h[8];
+	u64 t[2];
+	u64 f[2];
+	u8 buf[128];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+typedef void (*blake2b_compress_t)(struct blake2b_state *, const u8 *, size_t, u32);
+
+struct blake2b_tfm_ctx {
+	u8 key[64];
+	unsigned int keylen;
+};
+
+struct crypto_cts_reqctx {
+	struct scatterlist sg[2];
+	unsigned int offset;
+	struct skcipher_request subreq;
+};
+
+struct crypto_cts_ctx {
+	struct crypto_skcipher *child;
+};
+
+struct xts_instance_ctx {
+	struct crypto_skcipher_spawn spawn;
+	struct crypto_cipher_spawn tweak_spawn;
+};
+
+typedef struct {
+	__le64 b;
+	__le64 a;
+} le128;
+
+struct xts_request_ctx {
+	le128 t;
+	struct scatterlist *tail;
+	struct scatterlist sg[2];
+	struct skcipher_request subreq;
+};
+
+struct xts_tfm_ctx {
+	struct crypto_skcipher *child;
+	struct crypto_cipher *tweak;
+};
+
+struct crypto_rfc3686_ctx {
+	struct crypto_skcipher *child;
+	u8 nonce[4];
+};
+
+struct crypto_rfc3686_req_ctx {
+	u8 iv[16];
+	struct skcipher_request subreq;
+};
+
+struct hctr2_instance_ctx {
+	struct crypto_cipher_spawn blockcipher_spawn;
+	struct crypto_skcipher_spawn xctr_spawn;
+	struct crypto_shash_spawn polyval_spawn;
+};
+
+struct hctr2_tfm_ctx {
+	struct crypto_cipher *blockcipher;
+	struct crypto_skcipher *xctr;
+	struct crypto_shash *polyval;
+	u8 L[16];
+	int hashed_tweak_offset;
+};
+
+struct hctr2_request_ctx {
+	u8 first_block[16];
+	u8 xctr_iv[16];
+	struct scatterlist *bulk_part_dst;
+	struct scatterlist *bulk_part_src;
+	struct scatterlist sg_src[2];
+	struct scatterlist sg_dst[2];
+	union {
+		struct shash_desc hash_desc;
+		struct skcipher_request xctr_req;
+	} u;
+};
+
+struct sg_page_iter {
+	struct scatterlist *sg;
+	unsigned int sg_pgoffset;
+	unsigned int __nents;
+	int __pg_advance;
+};
+
+struct sg_mapping_iter {
+	struct page *page;
+	void *addr;
+	size_t length;
+	size_t consumed;
+	struct sg_page_iter piter;
+	unsigned int __offset;
+	unsigned int __remaining;
+	unsigned int __flags;
+};
+
+struct adiantum_instance_ctx {
+	struct crypto_skcipher_spawn streamcipher_spawn;
+	struct crypto_cipher_spawn blockcipher_spawn;
+	struct crypto_shash_spawn hash_spawn;
+};
+
+struct adiantum_request_ctx {
+	union {
+		u8 bytes[32];
+		__le32 words[8];
+		le128 bignum;
+	} rbuf;
+	bool enc;
+	le128 header_hash;
+	union {
+		struct shash_desc hash_desc;
+		struct skcipher_request streamcipher_req;
+	} u;
+};
+
+struct adiantum_tfm_ctx {
+	struct crypto_skcipher *streamcipher;
+	struct crypto_cipher *blockcipher;
+	struct crypto_shash *hash;
+	struct poly1305_core_key header_hash_key;
+};
+
+struct nhpoly1305_state {
+	struct poly1305_state poly_state;
+	u8 buffer[16];
+	unsigned int buflen;
+	unsigned int nh_remaining;
+	__le64 nh_hash[4];
+};
+
+struct nhpoly1305_key {
+	struct poly1305_core_key poly_key;
+	u32 nh_key[268];
+};
+
+typedef void (*nh_t)(const u32 *, const u8 *, size_t, __le64 *);
+
+struct crypto_rfc4543_instance_ctx {
+	struct crypto_aead_spawn aead;
+};
+
+struct gcm_instance_ctx {
+	struct crypto_skcipher_spawn ctr;
+	struct crypto_ahash_spawn ghash;
+};
+
+struct crypto_gcm_ghash_ctx {
+	unsigned int cryptlen;
+	struct scatterlist *src;
+	int (*complete)(struct aead_request *, u32);
+};
+
+struct crypto_gcm_req_priv_ctx {
+	u8 iv[16];
+	u8 auth_tag[16];
+	u8 iauth_tag[16];
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	struct scatterlist sg;
+	struct crypto_gcm_ghash_ctx ghash_ctx;
+	union {
+		struct ahash_request ahreq;
+		struct skcipher_request skreq;
+	} u;
+};
+
+struct crypto_gcm_ctx {
+	struct crypto_skcipher *ctr;
+	struct crypto_ahash *ghash;
+};
+
+struct crypto_rfc4543_ctx {
+	struct crypto_aead *child;
+	struct crypto_sync_skcipher *null;
+	u8 nonce[4];
+};
+
+struct crypto_rfc4106_ctx {
+	struct crypto_aead *child;
+	u8 nonce[4];
+};
+
+struct crypto_rfc4106_req_ctx {
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	struct aead_request subreq;
+};
+
+struct crypto_rfc4543_req_ctx {
+	struct aead_request subreq;
+};
+
+struct ccm_instance_ctx {
+	struct crypto_skcipher_spawn ctr;
+	struct crypto_ahash_spawn mac;
+};
+
+struct crypto_ccm_req_priv_ctx {
+	u8 odata[16];
+	u8 idata[16];
+	u8 auth_tag[16];
+	u32 flags;
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	union {
+		struct ahash_request ahreq;
+		struct skcipher_request skreq;
+	};
+};
+
+struct cbcmac_tfm_ctx {
+	struct crypto_cipher *child;
+};
+
+struct cbcmac_desc_ctx {
+	unsigned int len;
+};
+
+struct crypto_ccm_ctx {
+	struct crypto_ahash *mac;
+	struct crypto_skcipher *ctr;
+};
+
+struct crypto_rfc4309_ctx {
+	struct crypto_aead *child;
+	u8 nonce[3];
+};
+
+struct crypto_rfc4309_req_ctx {
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	struct aead_request subreq;
+};
+
+struct chachapoly_instance_ctx {
+	struct crypto_skcipher_spawn chacha;
+	struct crypto_ahash_spawn poly;
+	unsigned int saltlen;
+};
+
+struct chacha_req {
+	u8 iv[16];
+	struct scatterlist src[1];
+	struct skcipher_request req;
+};
+
+struct poly_req {
+	u8 pad[16];
+	struct {
+		__le64 assoclen;
+		__le64 cryptlen;
+	} tail;
+	struct scatterlist src[1];
+	struct ahash_request req;
+};
+
+struct chachapoly_req_ctx {
+	struct scatterlist src[2];
+	struct scatterlist dst[2];
+	u8 key[32];
+	u8 tag[16];
+	unsigned int cryptlen;
+	unsigned int assoclen;
+	u32 flags;
+	union {
+		struct poly_req poly;
+		struct chacha_req chacha;
+	} u;
+};
+
+struct chachapoly_ctx {
+	struct crypto_skcipher *chacha;
+	struct crypto_ahash *poly;
+	unsigned int saltlen;
+	u8 salt[0];
+};
+
+struct des_ctx {
+	u32 expkey[32];
+};
+
+struct des3_ede_ctx {
+	u32 expkey[96];
+};
+
+struct deflate_ctx {
+	struct z_stream_s comp_stream;
+	struct z_stream_s decomp_stream;
+};
+
+struct chksum_desc_ctx {
+	u32 crc;
+};
+
+struct chksum_ctx {
+	u32 key;
+};
+
+enum {
+	CRYPTO_AUTHENC_KEYA_UNSPEC = 0,
+	CRYPTO_AUTHENC_KEYA_PARAM = 1,
+};
+
+struct authenc_instance_ctx {
+	struct crypto_ahash_spawn auth;
+	struct crypto_skcipher_spawn enc;
+	unsigned int reqoff;
+};
+
+struct crypto_authenc_keys {
+	const u8 *authkey;
+	const u8 *enckey;
+	unsigned int authkeylen;
+	unsigned int enckeylen;
+};
+
+struct crypto_authenc_key_param {
+	__be32 enckeylen;
+};
+
+struct crypto_authenc_ctx {
+	struct crypto_ahash *auth;
+	struct crypto_skcipher *enc;
+	struct crypto_sync_skcipher *null;
+};
+
+struct authenc_request_ctx {
+	struct scatterlist src[2];
+	struct scatterlist dst[2];
+	char tail[0];
+};
+
+struct authenc_esn_instance_ctx {
+	struct crypto_ahash_spawn auth;
+	struct crypto_skcipher_spawn enc;
+};
+
+struct crypto_authenc_esn_ctx {
+	unsigned int reqoff;
+	struct crypto_ahash *auth;
+	struct crypto_skcipher *enc;
+	struct crypto_sync_skcipher *null;
+};
+
+struct authenc_esn_request_ctx {
+	struct scatterlist src[2];
+	struct scatterlist dst[2];
+	char tail[0];
+};
+
+struct lzo_ctx {
+	void *lzo_comp_mem;
+};
+
+struct lzorle_ctx {
+	void *lzorle_comp_mem;
+};
+
+struct lz4_ctx {
+	void *lz4_comp_mem;
+};
+
+struct crypto_istat_rng {
+	atomic64_t generate_cnt;
+	atomic64_t generate_tlen;
+	atomic64_t seed_cnt;
+	atomic64_t err_cnt;
+};
+
+struct prng_context {
+	spinlock_t prng_lock;
+	unsigned char rand_data[16];
+	unsigned char last_rand_data[16];
+	unsigned char DT[16];
+	unsigned char I[16];
+	unsigned char V[16];
+	u32 rand_data_valid;
+	struct crypto_cipher *tfm;
+	u32 flags;
+};
+
+struct drbg_state;
+
+struct drbg_state_ops {
+	int (*update)(struct drbg_state *, struct list_head *, int);
+	int (*generate)(struct drbg_state *, unsigned char *, unsigned int, struct list_head *);
+	int (*crypto_init)(struct drbg_state *);
+	int (*crypto_fini)(struct drbg_state *);
+};
+
+enum drbg_seed_state {
+	DRBG_SEED_STATE_UNSEEDED = 0,
+	DRBG_SEED_STATE_PARTIAL = 1,
+	DRBG_SEED_STATE_FULL = 2,
+};
+
+struct drbg_string {
+	const unsigned char *buf;
+	size_t len;
+	struct list_head list;
+};
+
+struct drbg_core;
+
+struct drbg_state {
+	struct mutex drbg_mutex;
+	unsigned char *V;
+	unsigned char *Vbuf;
+	unsigned char *C;
+	unsigned char *Cbuf;
+	size_t reseed_ctr;
+	size_t reseed_threshold;
+	unsigned char *scratchpad;
+	unsigned char *scratchpadbuf;
+	void *priv_data;
+	struct crypto_skcipher *ctr_handle;
+	struct skcipher_request *ctr_req;
+	__u8 *outscratchpadbuf;
+	__u8 *outscratchpad;
+	struct crypto_wait ctr_wait;
+	struct scatterlist sg_in;
+	struct scatterlist sg_out;
+	enum drbg_seed_state seeded;
+	unsigned long last_seed_time;
+	bool pr;
+	bool fips_primed;
+	unsigned char *prev;
+	struct crypto_rng *jent;
+	const struct drbg_state_ops *d_ops;
+	const struct drbg_core *core;
+	struct drbg_string test_data;
+};
+
+typedef uint32_t drbg_flag_t;
+
+struct drbg_core {
+	drbg_flag_t flags;
+	__u8 statelen;
+	__u8 blocklen_bytes;
+	char cra_name[128];
+	char backend_cra_name[128];
+};
+
+enum drbg_prefixes {
+	DRBG_PREFIX0 = 0,
+	DRBG_PREFIX1 = 1,
+	DRBG_PREFIX2 = 2,
+	DRBG_PREFIX3 = 3,
+};
+
+struct sdesc {
+	struct shash_desc shash;
+	char ctx[0];
+};
+
+typedef unsigned char u8___2;
+
+struct rand_data {
+	void *hash_state;
+	__u64 prev_time;
+	__u64 last_delta;
+	__s64 last_delta2;
+	unsigned int osr;
+	unsigned char *mem;
+	unsigned int memlocation;
+	unsigned int memblocks;
+	unsigned int memblocksize;
+	unsigned int memaccessloops;
+	unsigned int rct_count;
+	unsigned int apt_observations;
+	unsigned int apt_count;
+	unsigned int apt_base;
+	unsigned int apt_base_set: 1;
+};
+
+struct jitterentropy {
+	spinlock_t jent_lock;
+	struct rand_data *entropy_collector;
+	struct crypto_shash *tfm;
+	struct shash_desc *sdesc;
+};
+
+struct gf128mul_4k {
+	be128 t[256];
+};
+
+struct ghash_ctx {
+	struct gf128mul_4k *gf128;
+};
+
+struct ghash_desc_ctx___2 {
+	u8 buffer[16];
+	u32 bytes;
+};
+
+struct polyval_desc_ctx___2 {
+	union {
+		u8 buffer[16];
+		be128 buffer128;
+	};
+	u32 bytes;
+};
+
+struct polyval_tfm_ctx___2 {
+	struct gf128mul_4k *gf128;
+};
+
+typedef ZSTD_CCtx zstd_cctx;
+
+typedef ZSTD_DCtx zstd_dctx;
+
+struct zstd_ctx {
+	zstd_cctx *cctx;
+	zstd_dctx *dctx;
+	void *cwksp;
+	void *dwksp;
+};
+
+struct ecc_point {
+	u64 *x;
+	u64 *y;
+	u8 ndigits;
+};
+
+struct ecc_curve {
+	char *name;
+	struct ecc_point g;
+	u64 *p;
+	u64 *n;
+	u64 *a;
+	u64 *b;
+};
+
+typedef struct {
+	u64 m_low;
+	u64 m_high;
+} uint128_t;
+
+struct essiv_tfm_ctx {
+	union {
+		struct crypto_skcipher *skcipher;
+		struct crypto_aead *aead;
+	} u;
+	struct crypto_cipher *essiv_cipher;
+	struct crypto_shash *hash;
+	int ivoffset;
+};
+
+struct essiv_instance_ctx {
+	union {
+		struct crypto_skcipher_spawn skcipher_spawn;
+		struct crypto_aead_spawn aead_spawn;
+	} u;
+	char essiv_cipher_name[128];
+	char shash_driver_name[128];
+};
+
+struct essiv_aead_request_ctx {
+	struct scatterlist sg[4];
+	u8 *assoc;
+	struct aead_request aead_req;
+};
+
+struct ecdh {
+	char *key;
+	unsigned short key_size;
+};
+
+struct ecdh_ctx {
+	unsigned int curve_id;
+	unsigned int ndigits;
+	u64 private_key[8];
+};
+
+enum {
+	CRYPTO_KPP_SECRET_TYPE_UNKNOWN = 0,
+	CRYPTO_KPP_SECRET_TYPE_DH = 1,
+	CRYPTO_KPP_SECRET_TYPE_ECDH = 2,
+};
+
+struct kpp_secret {
+	unsigned short type;
+	unsigned short len;
+};
+
+enum asymmetric_payload_bits {
+	asym_crypto = 0,
+	asym_subtype = 1,
+	asym_key_ids = 2,
+	asym_auth = 3,
+};
+
+struct asymmetric_key_parser {
+	struct list_head link;
+	struct module *owner;
+	const char *name;
+	int (*parse)(struct key_preparsed_payload *);
+};
+
+struct asymmetric_key_ids {
+	void *id[3];
+};
+
+struct asymmetric_key_id {
+	unsigned short len;
+	unsigned char data[0];
+};
+
+struct public_key_signature;
+
+struct asymmetric_key_subtype {
+	struct module *owner;
+	const char *name;
+	unsigned short name_len;
+	void (*describe)(const struct key *, struct seq_file *);
+	void (*destroy)(void *, void *);
+	int (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
+	int (*eds_op)(struct kernel_pkey_params *, const void *, void *);
+	int (*verify_signature)(const struct key *, const struct public_key_signature *);
+};
+
+struct public_key_signature {
+	struct asymmetric_key_id *auth_ids[3];
+	u8 *s;
+	u8 *digest;
+	u32 s_size;
+	u32 digest_size;
+	const char *pkey_algo;
+	const char *hash_algo;
+	const char *encoding;
+};
+
+struct public_key {
+	void *key;
+	u32 keylen;
+	enum OID algo;
+	void *params;
+	u32 paramlen;
+	bool key_is_private;
+	const char *id_type;
+	const char *pkey_algo;
+	unsigned long key_eflags;
+};
+
+enum asn1_tag {
+	ASN1_EOC = 0,
+	ASN1_BOOL = 1,
+	ASN1_INT = 2,
+	ASN1_BTS = 3,
+	ASN1_OTS = 4,
+	ASN1_NULL = 5,
+	ASN1_OID = 6,
+	ASN1_ODE = 7,
+	ASN1_EXT = 8,
+	ASN1_REAL = 9,
+	ASN1_ENUM = 10,
+	ASN1_EPDV = 11,
+	ASN1_UTF8STR = 12,
+	ASN1_RELOID = 13,
+	ASN1_SEQ = 16,
+	ASN1_SET = 17,
+	ASN1_NUMSTR = 18,
+	ASN1_PRNSTR = 19,
+	ASN1_TEXSTR = 20,
+	ASN1_VIDSTR = 21,
+	ASN1_IA5STR = 22,
+	ASN1_UNITIM = 23,
+	ASN1_GENTIM = 24,
+	ASN1_GRASTR = 25,
+	ASN1_VISSTR = 26,
+	ASN1_GENSTR = 27,
+	ASN1_UNISTR = 28,
+	ASN1_CHRSTR = 29,
+	ASN1_BMPSTR = 30,
+	ASN1_LONG_TAG = 31,
+};
+
+struct x509_certificate {
+	struct x509_certificate *next;
+	struct x509_certificate *signer;
+	struct public_key *pub;
+	struct public_key_signature *sig;
+	char *issuer;
+	char *subject;
+	struct asymmetric_key_id *id;
+	struct asymmetric_key_id *skid;
+	time64_t valid_from;
+	time64_t valid_to;
+	const void *tbs;
+	unsigned int tbs_size;
+	unsigned int raw_sig_size;
+	const void *raw_sig;
+	const void *raw_serial;
+	unsigned int raw_serial_size;
+	unsigned int raw_issuer_size;
+	const void *raw_issuer;
+	const void *raw_subject;
+	unsigned int raw_subject_size;
+	unsigned int raw_skid_size;
+	const void *raw_skid;
+	unsigned int index;
+	bool seen;
+	bool verified;
+	bool self_signed;
+	bool unsupported_sig;
+	bool blacklisted;
+};
+
+struct x509_parse_context {
+	struct x509_certificate *cert;
+	unsigned long data;
+	const void *key;
+	size_t key_size;
+	const void *params;
+	size_t params_size;
+	enum OID key_algo;
+	enum OID last_oid;
+	enum OID sig_algo;
+	u8 o_size;
+	u8 cn_size;
+	u8 email_size;
+	u16 o_offset;
+	u16 cn_offset;
+	u16 email_offset;
+	unsigned int raw_akid_size;
+	const void *raw_akid;
+	const void *akid_raw_issuer;
+	unsigned int akid_raw_issuer_size;
+};
+
+enum blacklist_hash_type {
+	BLACKLIST_HASH_X509_TBS = 1,
+	BLACKLIST_HASH_BINARY = 2,
+};
+
+enum asn1_class {
+	ASN1_UNIV = 0,
+	ASN1_APPL = 1,
+	ASN1_CONT = 2,
+	ASN1_PRIV = 3,
+};
+
+struct pkcs7_signed_info {
+	struct pkcs7_signed_info *next;
+	struct x509_certificate *signer;
+	unsigned int index;
+	bool unsupported_crypto;
+	bool blacklisted;
+	const void *msgdigest;
+	unsigned int msgdigest_len;
+	unsigned int authattrs_len;
+	const void *authattrs;
+	unsigned long aa_set;
+	time64_t signing_time;
+	struct public_key_signature *sig;
+};
+
+struct pkcs7_parse_context {
+	struct pkcs7_message *msg;
+	struct pkcs7_signed_info *sinfo;
+	struct pkcs7_signed_info **ppsinfo;
+	struct x509_certificate *certs;
+	struct x509_certificate **ppcerts;
+	unsigned long data;
+	enum OID last_oid;
+	unsigned int x509_index;
+	unsigned int sinfo_index;
+	const void *raw_serial;
+	unsigned int raw_serial_size;
+	unsigned int raw_issuer_size;
+	const void *raw_issuer;
+	const void *raw_skid;
+	unsigned int raw_skid_size;
+	bool expect_skid;
+};
+
+enum {
+	DISK_EVENT_FLAG_POLL = 1,
+	DISK_EVENT_FLAG_UEVENT = 2,
+	DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE = 4,
+};
+
+enum {
+	DISK_EVENT_MEDIA_CHANGE = 1,
+	DISK_EVENT_EJECT_REQUEST = 2,
+};
+
+struct bdev_inode {
+	struct block_device bdev;
+	struct inode vfs_inode;
+};
+
+enum {
+	DIO_SHOULD_DIRTY = 1,
+	DIO_IS_SYNC = 2,
+};
+
+struct blkdev_dio {
+	union {
+		struct kiocb *iocb;
+		struct task_struct *waiter;
+	};
+	size_t size;
+	atomic_t ref;
+	unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bio bio;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum rq_qos_id {
+	RQ_QOS_WBT = 0,
+	RQ_QOS_LATENCY = 1,
+	RQ_QOS_COST = 2,
+};
+
+struct rq_qos_ops;
+
+struct rq_qos {
+	const struct rq_qos_ops *ops;
+	struct gendisk *disk;
+	enum rq_qos_id id;
+	struct rq_qos *next;
+	struct dentry *debugfs_dir;
+};
+
+struct blk_mq_debugfs_attr;
+
+struct rq_qos_ops {
+	void (*throttle)(struct rq_qos *, struct bio *);
+	void (*track)(struct rq_qos *, struct request *, struct bio *);
+	void (*merge)(struct rq_qos *, struct request *, struct bio *);
+	void (*issue)(struct rq_qos *, struct request *);
+	void (*requeue)(struct rq_qos *, struct request *);
+	void (*done)(struct rq_qos *, struct request *);
+	void (*done_bio)(struct rq_qos *, struct bio *);
+	void (*cleanup)(struct rq_qos *, struct bio *);
+	void (*queue_depth_changed)(struct rq_qos *);
+	void (*exit)(struct rq_qos *);
+	const struct blk_mq_debugfs_attr *debugfs_attrs;
+};
+
+struct blk_mq_debugfs_attr {
+	const char *name;
+	umode_t mode;
+	int (*show)(void *, struct seq_file *);
+	ssize_t (*write)(void *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	const struct seq_operations *seq_ops;
+};
+
+struct blkg_iostat {
+	u64 bytes[3];
+	u64 ios[3];
+};
+
+struct blkg_iostat_set {
+	struct u64_stats_sync sync;
+	struct blkcg_gq *blkg;
+	struct llist_node lnode;
+	int lqueued;
+	struct blkg_iostat cur;
+	struct blkg_iostat last;
+};
+
+struct blkcg;
+
+struct blkg_policy_data;
+
+struct blkcg_gq {
+	struct request_queue *q;
+	struct list_head q_node;
+	struct hlist_node blkcg_node;
+	struct blkcg *blkcg;
+	struct blkcg_gq *parent;
+	struct percpu_ref refcnt;
+	bool online;
+	struct blkg_iostat_set __attribute__((btf_type_tag("percpu"))) *iostat_cpu;
+	struct blkg_iostat_set iostat;
+	struct blkg_policy_data *pd[6];
+	union {
+		struct work_struct async_bio_work;
+		struct work_struct free_work;
+	};
+	atomic_t use_delay;
+	atomic64_t delay_nsec;
+	atomic64_t delay_start;
+	u64 last_delay;
+	int last_use;
+	struct callback_head callback_head;
+	u64 android_oem_data1;
+};
+
+struct blkcg_policy_data;
+
+struct blkcg {
+	struct cgroup_subsys_state css;
+	spinlock_t lock;
+	refcount_t online_pin;
+	struct xarray blkg_tree;
+	struct blkcg_gq __attribute__((btf_type_tag("rcu"))) *blkg_hint;
+	struct hlist_head blkg_list;
+	struct blkcg_policy_data *cpd[6];
+	struct list_head all_blkcgs_node;
+	struct llist_head __attribute__((btf_type_tag("percpu"))) *lhead;
+	struct list_head cgwb_list;
+	u64 android_oem_data1;
+};
+
+struct blkcg_policy_data {
+	struct blkcg *blkcg;
+	int plid;
+};
+
+struct blkg_policy_data {
+	struct blkcg_gq *blkg;
+	int plid;
+	bool online;
+};
+
+struct biovec_slab {
+	int nr_vecs;
+	char *name;
+	struct kmem_cache *slab;
+};
+
+struct bio_slab {
+	struct kmem_cache *slab;
+	unsigned int slab_ref;
+	unsigned int slab_size;
+	char name[8];
+};
+
+struct elevator_type;
+
+struct elevator_queue {
+	struct elevator_type *type;
+	void *elevator_data;
+	struct kobject kobj;
+	struct mutex sysfs_lock;
+	unsigned long flags;
+	struct hlist_head hash[64];
+};
+
+enum elv_merge {
+	ELEVATOR_NO_MERGE = 0,
+	ELEVATOR_FRONT_MERGE = 1,
+	ELEVATOR_BACK_MERGE = 2,
+	ELEVATOR_DISCARD_MERGE = 3,
+};
+
+typedef unsigned int blk_insert_t;
+
+struct blk_mq_alloc_data;
+
+struct elevator_mq_ops {
+	int (*init_sched)(struct request_queue *, struct elevator_type *);
+	void (*exit_sched)(struct elevator_queue *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*depth_updated)(struct blk_mq_hw_ctx *);
+	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
+	bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int);
+	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
+	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
+	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
+	void (*limit_depth)(blk_opf_t, struct blk_mq_alloc_data *);
+	void (*prepare_request)(struct request *);
+	void (*finish_request)(struct request *);
+	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, blk_insert_t);
+	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
+	bool (*has_work)(struct blk_mq_hw_ctx *);
+	void (*completed_request)(struct request *, u64);
+	void (*requeue_request)(struct request *);
+	struct request * (*former_request)(struct request_queue *, struct request *);
+	struct request * (*next_request)(struct request_queue *, struct request *);
+	void (*init_icq)(struct io_cq *);
+	void (*exit_icq)(struct io_cq *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct elv_fs_entry;
+
+struct elevator_type {
+	struct kmem_cache *icq_cache;
+	struct elevator_mq_ops ops;
+	size_t icq_size;
+	size_t icq_align;
+	struct elv_fs_entry *elevator_attrs;
+	const char *elevator_name;
+	const char *elevator_alias;
+	const unsigned int elevator_features;
+	struct module *elevator_owner;
+	const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
+	const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
+	char icq_cache_name[22];
+	struct list_head list;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct blk_mq_ctxs {
+	struct kobject kobj;
+	struct blk_mq_ctx __attribute__((btf_type_tag("percpu"))) *queue_ctx;
+};
+
+typedef __u32 blk_mq_req_flags_t;
+
+struct blk_mq_alloc_data {
+	struct request_queue *q;
+	blk_mq_req_flags_t flags;
+	unsigned int shallow_depth;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	unsigned int nr_tags;
+	struct request **cached_rq;
+	struct blk_mq_ctx *ctx;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+struct elv_fs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct elevator_queue *, char *);
+	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
+};
+
+enum {
+	BLK_MQ_F_SHOULD_MERGE = 1,
+	BLK_MQ_F_TAG_QUEUE_SHARED = 2,
+	BLK_MQ_F_STACKING = 4,
+	BLK_MQ_F_TAG_HCTX_SHARED = 8,
+	BLK_MQ_F_BLOCKING = 32,
+	BLK_MQ_F_NO_SCHED = 64,
+	BLK_MQ_F_NO_SCHED_BY_DEFAULT = 128,
+	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
+	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
+	BLK_MQ_S_STOPPED = 0,
+	BLK_MQ_S_TAG_ACTIVE = 1,
+	BLK_MQ_S_SCHED_RESTART = 2,
+	BLK_MQ_S_INACTIVE = 3,
+	BLK_MQ_MAX_DEPTH = 10240,
+	BLK_MQ_CPU_WORK_BATCH = 8,
+};
+
+typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_rq_requeue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_complete)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_error)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_insert)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_issue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_merge)(void *, struct request *);
+
+typedef void (*btf_trace_block_io_start)(void *, struct request *);
+
+typedef void (*btf_trace_block_io_done)(void *, struct request *);
+
+typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);
+
+typedef void (*btf_trace_block_bio_bounce)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_backmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_frontmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_queue)(void *, struct bio *);
+
+typedef void (*btf_trace_block_getrq)(void *, struct bio *);
+
+typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
+
+typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
+
+typedef void (*btf_trace_block_split)(void *, struct bio *, unsigned int);
+
+typedef void (*btf_trace_block_bio_remap)(void *, struct bio *, dev_t, sector_t);
+
+typedef void (*btf_trace_block_rq_remap)(void *, struct request *, dev_t, sector_t);
+
+enum {
+	BLK_MQ_REQ_NOWAIT = 1,
+	BLK_MQ_REQ_RESERVED = 2,
+	BLK_MQ_REQ_PM = 4,
+};
+
+enum blkg_rwstat_type {
+	BLKG_RWSTAT_READ = 0,
+	BLKG_RWSTAT_WRITE = 1,
+	BLKG_RWSTAT_SYNC = 2,
+	BLKG_RWSTAT_ASYNC = 3,
+	BLKG_RWSTAT_DISCARD = 4,
+	BLKG_RWSTAT_NR = 5,
+	BLKG_RWSTAT_TOTAL = 5,
+};
+
+struct blk_plug_cb;
+
+typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
+
+struct blk_plug_cb {
+	struct list_head list;
+	blk_plug_cb_fn callback;
+	void *data;
+};
+
+struct trace_event_raw_block_buffer {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_requeue {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	unsigned short ioprio;
+	char rwbs[10];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_completion {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	unsigned short ioprio;
+	char rwbs[10];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	unsigned int bytes;
+	unsigned short ioprio;
+	char rwbs[10];
+	char comm[16];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_complete {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	char rwbs[10];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	char rwbs[10];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_plug {
+	struct trace_entry ent;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_unplug {
+	struct trace_entry ent;
+	int nr_rq;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_split {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	sector_t new_sector;
+	char rwbs[10];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	char rwbs[10];
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	unsigned int nr_bios;
+	char rwbs[10];
+	char __data[0];
+};
+
+struct throtl_service_queue {
+	struct throtl_service_queue *parent_sq;
+	struct list_head queued[2];
+	unsigned int nr_queued[2];
+	struct rb_root_cached pending_tree;
+	unsigned int nr_pending;
+	unsigned long first_pending_disptime;
+	struct timer_list pending_timer;
+};
+
+struct throtl_grp;
+
+struct throtl_qnode {
+	struct list_head node;
+	struct bio_list bios;
+	struct throtl_grp *tg;
+};
+
+struct blkg_rwstat {
+	struct percpu_counter cpu_cnt[5];
+	atomic64_t aux_cnt[5];
+};
+
+struct throtl_grp {
+	struct blkg_policy_data pd;
+	struct rb_node rb_node;
+	struct throtl_data *td;
+	struct throtl_service_queue service_queue;
+	struct throtl_qnode qnode_on_self[2];
+	struct throtl_qnode qnode_on_parent[2];
+	unsigned long disptime;
+	unsigned int flags;
+	bool has_rules_bps[2];
+	bool has_rules_iops[2];
+	uint64_t bps[4];
+	uint64_t bps_conf[4];
+	unsigned int iops[4];
+	unsigned int iops_conf[4];
+	uint64_t bytes_disp[2];
+	unsigned int io_disp[2];
+	unsigned long last_low_overflow_time[2];
+	uint64_t last_bytes_disp[2];
+	unsigned int last_io_disp[2];
+	long long carryover_bytes[2];
+	int carryover_ios[2];
+	unsigned long last_check_time;
+	unsigned long latency_target;
+	unsigned long latency_target_conf;
+	unsigned long slice_start[2];
+	unsigned long slice_end[2];
+	unsigned long last_finish_time;
+	unsigned long checked_last_finish_time;
+	unsigned long avg_idletime;
+	unsigned long idletime_threshold;
+	unsigned long idletime_threshold_conf;
+	unsigned int bio_cnt;
+	unsigned int bad_bio_cnt;
+	unsigned long bio_cnt_reset_time;
+	struct blkg_rwstat stat_bytes;
+	struct blkg_rwstat stat_ios;
+};
+
+typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);
+
+typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);
+
+typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(struct gendisk *, struct blkcg *, gfp_t);
+
+typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_stat_pd_fn(struct blkg_policy_data *, struct seq_file *);
+
+struct blkcg_policy {
+	int plid;
+	struct cftype *dfl_cftypes;
+	struct cftype *legacy_cftypes;
+	blkcg_pol_alloc_cpd_fn *cpd_alloc_fn;
+	blkcg_pol_free_cpd_fn *cpd_free_fn;
+	blkcg_pol_alloc_pd_fn *pd_alloc_fn;
+	blkcg_pol_init_pd_fn *pd_init_fn;
+	blkcg_pol_online_pd_fn *pd_online_fn;
+	blkcg_pol_offline_pd_fn *pd_offline_fn;
+	blkcg_pol_free_pd_fn *pd_free_fn;
+	blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
+	blkcg_pol_stat_pd_fn *pd_stat_fn;
+};
+
+struct trace_event_data_offsets_block_buffer {};
+
+struct trace_event_data_offsets_block_rq_requeue {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq_completion {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_bio_complete {};
+
+struct trace_event_data_offsets_block_bio {};
+
+struct trace_event_data_offsets_block_plug {};
+
+struct trace_event_data_offsets_block_unplug {};
+
+struct trace_event_data_offsets_block_split {};
+
+struct trace_event_data_offsets_block_bio_remap {};
+
+struct trace_event_data_offsets_block_rq_remap {};
+
+struct queue_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct request_queue *, char *);
+	ssize_t (*store)(struct request_queue *, const char *, size_t);
+};
+
+enum {
+	REQ_FSEQ_PREFLUSH = 1,
+	REQ_FSEQ_DATA = 2,
+	REQ_FSEQ_POSTFLUSH = 4,
+	REQ_FSEQ_DONE = 8,
+	REQ_FSEQ_ACTIONS = 7,
+	FLUSH_PENDING_TIMEOUT = 1250,
+};
+
+enum {
+	BLK_MQ_NO_TAG = 4294967295,
+	BLK_MQ_TAG_MIN = 1,
+	BLK_MQ_TAG_MAX = 4294967294,
+};
+
+enum hctx_type {
+	HCTX_TYPE_DEFAULT = 0,
+	HCTX_TYPE_READ = 1,
+	HCTX_TYPE_POLL = 2,
+	HCTX_MAX_TYPES = 3,
+};
+
+enum {
+	ICQ_EXITED = 4,
+	ICQ_DESTROYED = 8,
+};
+
+struct rq_map_data {
+	struct page **pages;
+	unsigned long offset;
+	unsigned short page_order;
+	unsigned short nr_entries;
+	bool null_mapped;
+	bool from_user;
+};
+
+struct bio_map_data {
+	bool is_our_pages: 1;
+	bool is_null_mapped: 1;
+	struct iov_iter iter;
+	struct iovec iov[0];
+};
+
+enum bio_merge_status {
+	BIO_MERGE_OK = 0,
+	BIO_MERGE_NONE = 1,
+	BIO_MERGE_FAILED = 2,
+};
+
+struct req_iterator {
+	struct bvec_iter iter;
+	struct bio *bio;
+};
+
+enum prep_dispatch {
+	PREP_DISPATCH_OK = 0,
+	PREP_DISPATCH_NO_TAG = 1,
+	PREP_DISPATCH_NO_BUDGET = 2,
+};
+
+struct blk_mq_qe_pair {
+	struct list_head node;
+	struct request_queue *q;
+	struct elevator_type *type;
+};
+
+typedef bool busy_tag_iter_fn(struct request *, void *);
+
+typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
+
+struct flush_busy_ctx_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct list_head *list;
+};
+
+struct dispatch_rq_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request *rq;
+};
+
+struct blk_expired_data {
+	bool has_timedout_rq;
+	unsigned long next;
+	unsigned long timeout_start;
+};
+
+struct rq_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	bool has_rq;
+};
+
+struct mq_inflight {
+	struct block_device *part;
+	unsigned int inflight[2];
+};
+
+struct blk_rq_wait {
+	struct completion done;
+	blk_status_t ret;
+};
+
+enum {
+	BLK_MQ_UNIQUE_TAG_BITS = 16,
+	BLK_MQ_UNIQUE_TAG_MASK = 65535,
+};
+
+struct sbq_wait {
+	struct sbitmap_queue *sbq;
+	struct wait_queue_entry wait;
+};
+
+struct bt_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request_queue *q;
+	busy_tag_iter_fn *fn;
+	void *data;
+	bool reserved;
+};
+
+struct bt_tags_iter_data {
+	struct blk_mq_tags *tags;
+	busy_tag_iter_fn *fn;
+	void *data;
+	unsigned int flags;
+};
+
+struct blk_rq_stat;
+
+struct blk_stat_callback {
+	struct list_head list;
+	struct timer_list timer;
+	struct blk_rq_stat __attribute__((btf_type_tag("percpu"))) *cpu_stat;
+	int (*bucket_fn)(const struct request *);
+	unsigned int buckets;
+	struct blk_rq_stat *stat;
+	void (*timer_fn)(struct blk_stat_callback *);
+	void *data;
+	struct callback_head rcu;
+};
+
+struct blk_rq_stat {
+	u64 mean;
+	u64 min;
+	u64 max;
+	u32 nr_samples;
+	u64 batch;
+};
+
+struct blk_queue_stats {
+	struct list_head callbacks;
+	spinlock_t lock;
+	int accounting;
+};
+
+struct blk_mq_hw_ctx_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_mq_hw_ctx *, char *);
+};
+
+struct hd_geometry {
+	unsigned char heads;
+	unsigned char sectors;
+	unsigned short cylinders;
+	unsigned long start;
+};
+
+struct pr_keys {
+	u32 generation;
+	u32 num_keys;
+	u64 keys[0];
+};
+
+struct pr_held_reservation {
+	u64 key;
+	u32 generation;
+	enum pr_type type;
+};
+
+struct blkpg_partition {
+	long long start;
+	long long length;
+	int pno;
+	char devname[64];
+	char volname[64];
+};
+
+typedef u32 compat_caddr_t;
+
+struct blkpg_ioctl_arg {
+	int op;
+	int flags;
+	int datalen;
+	void __attribute__((btf_type_tag("user"))) *data;
+};
+
+struct pr_preempt {
+	__u64 old_key;
+	__u64 new_key;
+	__u32 type;
+	__u32 flags;
+};
+
+struct pr_clear {
+	__u64 key;
+	__u32 flags;
+	__u32 __pad;
+};
+
+struct pr_reservation {
+	__u64 key;
+	__u32 type;
+	__u32 flags;
+};
+
+struct pr_registration {
+	__u64 old_key;
+	__u64 new_key;
+	__u32 flags;
+	__u32 __pad;
+};
+
+struct compat_hd_geometry {
+	unsigned char heads;
+	unsigned char sectors;
+	unsigned short cylinders;
+	u32 start;
+};
+
+struct compat_blkpg_ioctl_arg {
+	compat_int_t op;
+	compat_int_t flags;
+	compat_int_t datalen;
+	compat_caddr_t data;
+};
+
+struct badblocks {
+	struct device *dev;
+	int count;
+	int unacked_exist;
+	int shift;
+	u64 *page;
+	int changed;
+	seqlock_t lock;
+	sector_t sector;
+	sector_t size;
+};
+
+struct blk_major_name {
+	struct blk_major_name *next;
+	int major;
+	char name[16];
+	void (*probe)(dev_t);
+};
+
+enum {
+	GENHD_FL_REMOVABLE = 1,
+	GENHD_FL_HIDDEN = 2,
+	GENHD_FL_NO_PART = 4,
+};
+
+struct klist;
+
+struct klist_node;
+
+struct klist_iter {
+	struct klist *i_klist;
+	struct klist_node *i_cur;
+};
+
+struct subsys_private;
+
+struct class_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+	struct subsys_private *sp;
+};
+
+struct klist {
+	spinlock_t k_lock;
+	struct list_head k_list;
+	void (*get)(struct klist_node *);
+	void (*put)(struct klist_node *);
+};
+
+struct klist_node {
+	void *n_klist;
+	struct list_head n_node;
+	struct kref n_ref;
+};
+
+enum {
+	IOPRIO_WHO_PROCESS = 1,
+	IOPRIO_WHO_PGRP = 2,
+	IOPRIO_WHO_USER = 3,
+};
+
+struct parsed_partitions {
+	struct gendisk *disk;
+	char name[32];
+	struct {
+		sector_t from;
+		sector_t size;
+		int flags;
+		bool has_info;
+		struct partition_meta_info info;
+	} *parts;
+	int next;
+	int limit;
+	bool access_beyond_eod;
+	char *pp_buf;
+};
+
+typedef struct {
+	struct folio *v;
+} Sector;
+
+enum msdos_sys_ind {
+	DOS_EXTENDED_PARTITION = 5,
+	LINUX_EXTENDED_PARTITION = 133,
+	WIN98_EXTENDED_PARTITION = 15,
+	LINUX_DATA_PARTITION = 131,
+	LINUX_LVM_PARTITION = 142,
+	LINUX_RAID_PARTITION = 253,
+	SOLARIS_X86_PARTITION = 130,
+	NEW_SOLARIS_X86_PARTITION = 191,
+	DM6_AUX1PARTITION = 81,
+	DM6_AUX3PARTITION = 83,
+	DM6_PARTITION = 84,
+	EZD_PARTITION = 85,
+	FREEBSD_PARTITION = 165,
+	OPENBSD_PARTITION = 166,
+	NETBSD_PARTITION = 169,
+	BSDI_PARTITION = 183,
+	MINIX_PARTITION = 129,
+	UNIXWARE_PARTITION = 99,
+};
+
+struct msdos_partition {
+	u8 boot_ind;
+	u8 head;
+	u8 sector;
+	u8 cyl;
+	u8 sys_ind;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_cyl;
+	__le32 start_sect;
+	__le32 nr_sects;
+};
+
+typedef struct {
+	__u8 b[16];
+} guid_t;
+
+typedef guid_t efi_guid_t;
+
+struct _gpt_header {
+	__le64 signature;
+	__le32 revision;
+	__le32 header_size;
+	__le32 header_crc32;
+	__le32 reserved1;
+	__le64 my_lba;
+	__le64 alternate_lba;
+	__le64 first_usable_lba;
+	__le64 last_usable_lba;
+	efi_guid_t disk_guid;
+	__le64 partition_entry_lba;
+	__le32 num_partition_entries;
+	__le32 sizeof_partition_entry;
+	__le32 partition_entry_array_crc32;
+} __attribute__((packed));
+
+typedef struct _gpt_header gpt_header;
+
+struct _gpt_entry_attributes {
+	u64 required_to_function: 1;
+	u64 reserved: 47;
+	u64 type_guid_specific: 16;
+};
+
+typedef struct _gpt_entry_attributes gpt_entry_attributes;
+
+struct _gpt_entry {
+	efi_guid_t partition_type_guid;
+	efi_guid_t unique_partition_guid;
+	__le64 starting_lba;
+	__le64 ending_lba;
+	gpt_entry_attributes attributes;
+	__le16 partition_name[36];
+};
+
+typedef struct _gpt_entry gpt_entry;
+
+struct _gpt_mbr_record {
+	u8 boot_indicator;
+	u8 start_head;
+	u8 start_sector;
+	u8 start_track;
+	u8 os_type;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_track;
+	__le32 starting_lba;
+	__le32 size_in_lba;
+};
+
+typedef struct _gpt_mbr_record gpt_mbr_record;
+
+struct _legacy_mbr {
+	u8 boot_code[440];
+	__le32 unique_mbr_signature;
+	__le16 unknown;
+	gpt_mbr_record partition_record[4];
+	__le16 signature;
+} __attribute__((packed));
+
+typedef struct _legacy_mbr legacy_mbr;
+
+struct rq_wait;
+
+typedef bool acquire_inflight_cb_t(struct rq_wait *, void *);
+
+struct rq_qos_wait_data {
+	struct wait_queue_entry wq;
+	struct task_struct *task;
+	struct rq_wait *rqw;
+	acquire_inflight_cb_t *cb;
+	void *private_data;
+	bool got_token;
+};
+
+struct rq_wait {
+	wait_queue_head_t wait;
+	atomic_t inflight;
+};
+
+struct rq_depth {
+	unsigned int max_depth;
+	int scale_step;
+	bool scaled_max;
+	unsigned int queue_depth;
+	unsigned int default_depth;
+};
+
+typedef void cleanup_cb_t(struct rq_wait *, void *);
+
+struct disk_events {
+	struct list_head node;
+	struct gendisk *disk;
+	spinlock_t lock;
+	struct mutex block_mutex;
+	int block;
+	unsigned int pending;
+	unsigned int clearing;
+	long poll_msecs;
+	struct delayed_work dwork;
+};
+
+struct blk_ia_range_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_independent_access_range *, char *);
+};
+
+struct uuidcmp {
+	const char *uuid;
+	int len;
+};
+
+struct sg_io_v4;
+
+typedef int bsg_sg_io_fn(struct request_queue *, struct sg_io_v4 *, bool, unsigned int);
+
+struct bsg_device {
+	struct request_queue *queue;
+	struct device device;
+	struct cdev cdev;
+	int max_queue;
+	unsigned int timeout;
+	unsigned int reserved_size;
+	bsg_sg_io_fn *sg_io_fn;
+};
+
+struct sg_io_v4 {
+	__s32 guard;
+	__u32 protocol;
+	__u32 subprotocol;
+	__u32 request_len;
+	__u64 request;
+	__u64 request_tag;
+	__u32 request_attr;
+	__u32 request_priority;
+	__u32 request_extra;
+	__u32 max_response_len;
+	__u64 response;
+	__u32 dout_iovec_count;
+	__u32 dout_xfer_len;
+	__u32 din_iovec_count;
+	__u32 din_xfer_len;
+	__u64 dout_xferp;
+	__u64 din_xferp;
+	__u32 timeout;
+	__u32 flags;
+	__u64 usr_ptr;
+	__u32 spare_in;
+	__u32 driver_status;
+	__u32 transport_status;
+	__u32 device_status;
+	__u32 retry_delay;
+	__u32 info;
+	__u32 duration;
+	__u32 response_len;
+	__s32 din_resid;
+	__s32 dout_resid;
+	__u64 generated_tag;
+	__u32 spare_out;
+	__u32 padding;
+};
+
+struct bsg_job;
+
+typedef int bsg_job_fn(struct bsg_job *);
+
+typedef enum blk_eh_timer_return bsg_timeout_fn(struct request *);
+
+struct bsg_set {
+	struct blk_mq_tag_set tag_set;
+	struct bsg_device *bd;
+	bsg_job_fn *job_fn;
+	bsg_timeout_fn *timeout_fn;
+};
+
+struct bsg_buffer {
+	unsigned int payload_len;
+	int sg_cnt;
+	struct scatterlist *sg_list;
+};
+
+struct bsg_job {
+	struct device *dev;
+	struct kref kref;
+	unsigned int timeout;
+	void *request;
+	void *reply;
+	unsigned int request_len;
+	unsigned int reply_len;
+	struct bsg_buffer request_payload;
+	struct bsg_buffer reply_payload;
+	int result;
+	unsigned int reply_payload_rcv_len;
+	struct request *bidi_rq;
+	struct bio *bidi_bio;
+	void *dd_data;
+};
+
+enum blkg_iostat_type {
+	BLKG_IOSTAT_READ = 0,
+	BLKG_IOSTAT_WRITE = 1,
+	BLKG_IOSTAT_DISCARD = 2,
+	BLKG_IOSTAT_NR = 3,
+};
+
+struct blkg_conf_ctx {
+	char *input;
+	char *body;
+	struct block_device *bdev;
+	struct blkcg_gq *blkg;
+};
+
+struct blkg_rwstat_sample {
+	u64 cnt[5];
+};
+
+struct latency_bucket {
+	unsigned long total_latency;
+	int samples;
+};
+
+struct avg_latency_bucket {
+	unsigned long latency;
+	bool valid;
+};
+
+struct throtl_data {
+	struct throtl_service_queue service_queue;
+	struct request_queue *queue;
+	unsigned int nr_queued[2];
+	unsigned int throtl_slice;
+	struct work_struct dispatch_work;
+	unsigned int limit_index;
+	bool limit_valid[2];
+	unsigned long low_upgrade_time;
+	unsigned long low_downgrade_time;
+	unsigned int scale;
+	struct latency_bucket tmp_buckets[18];
+	struct avg_latency_bucket avg_buckets[18];
+	struct latency_bucket __attribute__((btf_type_tag("percpu"))) *latency_buckets[2];
+	unsigned long last_calculate_time;
+	unsigned long filtered_latency;
+	bool track_bio_latency;
+};
+
+enum tg_state_flags {
+	THROTL_TG_PENDING = 1,
+	THROTL_TG_WAS_EMPTY = 2,
+	THROTL_TG_CANCELING = 4,
+};
+
+enum {
+	LIMIT_LOW = 0,
+	LIMIT_MAX = 1,
+	LIMIT_CNT = 2,
+};
+
+enum prio_policy {
+	POLICY_NO_CHANGE = 0,
+	POLICY_PROMOTE_TO_RT = 1,
+	POLICY_RESTRICT_TO_BE = 2,
+	POLICY_ALL_TO_IDLE = 3,
+	POLICY_NONE_TO_RT = 4,
+};
+
+struct ioprio_blkcg {
+	struct blkcg_policy_data cpd;
+	enum prio_policy prio_policy;
+};
+
+struct ioprio_blkg {
+	struct blkg_policy_data pd;
+};
+
+struct ioc_gq;
+
+struct ioc_now;
+
+typedef void (*btf_trace_iocost_iocg_activate)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
+struct iocg_stat {
+	u64 usage_us;
+	u64 wait_us;
+	u64 indebt_us;
+	u64 indelay_us;
+};
+
+struct ioc;
+
+struct iocg_pcpu_stat;
+
+struct ioc_gq {
+	struct blkg_policy_data pd;
+	struct ioc *ioc;
+	u32 cfg_weight;
+	u32 weight;
+	u32 active;
+	u32 inuse;
+	u32 last_inuse;
+	s64 saved_margin;
+	sector_t cursor;
+	atomic64_t vtime;
+	atomic64_t done_vtime;
+	u64 abs_vdebt;
+	u64 delay;
+	u64 delay_at;
+	atomic64_t active_period;
+	struct list_head active_list;
+	u64 child_active_sum;
+	u64 child_inuse_sum;
+	u64 child_adjusted_sum;
+	int hweight_gen;
+	u32 hweight_active;
+	u32 hweight_inuse;
+	u32 hweight_donating;
+	u32 hweight_after_donation;
+	struct list_head walk_list;
+	struct list_head surplus_list;
+	struct wait_queue_head waitq;
+	struct hrtimer waitq_timer;
+	u64 activated_at;
+	struct iocg_pcpu_stat __attribute__((btf_type_tag("percpu"))) *pcpu_stat;
+	struct iocg_stat stat;
+	struct iocg_stat last_stat;
+	u64 last_stat_abs_vusage;
+	u64 usage_delta_us;
+	u64 wait_since;
+	u64 indebt_since;
+	u64 indelay_since;
+	int level;
+	struct ioc_gq *ancestors[0];
+};
+
+struct ioc_params {
+	u32 qos[6];
+	u64 i_lcoefs[6];
+	u64 lcoefs[6];
+	u32 too_fast_vrate_pct;
+	u32 too_slow_vrate_pct;
+};
+
+struct ioc_margins {
+	s64 min;
+	s64 low;
+	s64 target;
+};
+
+enum ioc_running {
+	IOC_IDLE = 0,
+	IOC_RUNNING = 1,
+	IOC_STOP = 2,
+};
+
+struct ioc_pcpu_stat;
+
+struct ioc {
+	struct rq_qos rqos;
+	bool enabled;
+	struct ioc_params params;
+	struct ioc_margins margins;
+	u32 period_us;
+	u32 timer_slack_ns;
+	u64 vrate_min;
+	u64 vrate_max;
+	spinlock_t lock;
+	struct timer_list timer;
+	struct list_head active_iocgs;
+	struct ioc_pcpu_stat __attribute__((btf_type_tag("percpu"))) *pcpu_stat;
+	enum ioc_running running;
+	atomic64_t vtime_rate;
+	u64 vtime_base_rate;
+	s64 vtime_err;
+	seqcount_spinlock_t period_seqcount;
+	u64 period_at;
+	u64 period_at_vtime;
+	atomic64_t cur_period;
+	int busy_level;
+	bool weights_updated;
+	atomic_t hweight_gen;
+	u64 dfgv_period_at;
+	u64 dfgv_period_rem;
+	u64 dfgv_usage_us_sum;
+	u64 autop_too_fast_at;
+	u64 autop_too_slow_at;
+	int autop_idx;
+	bool user_qos_params: 1;
+	bool user_cost_model: 1;
+};
+
+struct ioc_missed {
+	local_t nr_met;
+	local_t nr_missed;
+	u32 last_met;
+	u32 last_missed;
+};
+
+struct ioc_pcpu_stat {
+	struct ioc_missed missed[2];
+	local64_t rq_wait_ns;
+	u64 last_rq_wait_ns;
+};
+
+struct iocg_pcpu_stat {
+	local64_t abs_vusage;
+};
+
+struct ioc_now {
+	u64 now_ns;
+	u64 now;
+	u64 vnow;
+};
+
+typedef void (*btf_trace_iocost_iocg_idle)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_shortage)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_transfer)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_adjust)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_ioc_vrate_adj)(void *, struct ioc *, u64, u32 *, u32, int, int);
+
+typedef void (*btf_trace_iocost_iocg_forgive_debt)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u64, u64, u64, u64);
+
+enum {
+	MILLION = 1000000,
+	MIN_PERIOD = 1000,
+	MAX_PERIOD = 1000000,
+	MARGIN_MIN_PCT = 10,
+	MARGIN_LOW_PCT = 20,
+	MARGIN_TARGET_PCT = 50,
+	INUSE_ADJ_STEP_PCT = 25,
+	TIMER_SLACK_PCT = 1,
+	WEIGHT_ONE = 65536,
+};
+
+enum {
+	QOS_RPPM = 0,
+	QOS_RLAT = 1,
+	QOS_WPPM = 2,
+	QOS_WLAT = 3,
+	QOS_MIN = 4,
+	QOS_MAX = 5,
+	NR_QOS_PARAMS = 6,
+};
+
+enum {
+	QOS_ENABLE = 0,
+	QOS_CTRL = 1,
+	NR_QOS_CTRL_PARAMS = 2,
+};
+
+enum {
+	VTIME_PER_SEC_SHIFT = 37ULL,
+	VTIME_PER_SEC = 137438953472ULL,
+	VTIME_PER_USEC = 137438ULL,
+	VTIME_PER_NSEC = 137ULL,
+	VRATE_MIN_PPM = 10000ULL,
+	VRATE_MAX_PPM = 100000000ULL,
+	VRATE_MIN = 1374ULL,
+	VRATE_CLAMP_ADJ_PCT = 4ULL,
+	AUTOP_CYCLE_NSEC = 10000000000ULL,
+};
+
+enum {
+	AUTOP_INVALID = 0,
+	AUTOP_HDD = 1,
+	AUTOP_SSD_QD1 = 2,
+	AUTOP_SSD_DFL = 3,
+	AUTOP_SSD_FAST = 4,
+};
+
+enum {
+	RQ_WAIT_BUSY_PCT = 5,
+	UNBUSY_THR_PCT = 75,
+	MIN_DELAY_THR_PCT = 500,
+	MAX_DELAY_THR_PCT = 25000,
+	MIN_DELAY = 250,
+	MAX_DELAY = 250000,
+	DFGV_USAGE_PCT = 50,
+	DFGV_PERIOD = 100000,
+	MAX_LAGGING_PERIODS = 10,
+	IOC_PAGE_SHIFT = 12,
+	IOC_PAGE_SIZE = 4096,
+	IOC_SECT_TO_PAGE_SHIFT = 3,
+	LCOEF_RANDIO_PAGES = 4096,
+};
+
+enum {
+	I_LCOEF_RBPS = 0,
+	I_LCOEF_RSEQIOPS = 1,
+	I_LCOEF_RRANDIOPS = 2,
+	I_LCOEF_WBPS = 3,
+	I_LCOEF_WSEQIOPS = 4,
+	I_LCOEF_WRANDIOPS = 5,
+	NR_I_LCOEFS = 6,
+};
+
+enum {
+	LCOEF_RPAGE = 0,
+	LCOEF_RSEQIO = 1,
+	LCOEF_RRANDIO = 2,
+	LCOEF_WPAGE = 3,
+	LCOEF_WSEQIO = 4,
+	LCOEF_WRANDIO = 5,
+	NR_LCOEFS = 6,
+};
+
+enum {
+	COST_CTRL = 0,
+	COST_MODEL = 1,
+	NR_COST_CTRL_PARAMS = 2,
+};
+
+struct trace_event_raw_iocost_iocg_state {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u64 vnow;
+	u64 vrate;
+	u64 last_period;
+	u64 cur_period;
+	u64 vtime;
+	u32 weight;
+	u32 inuse;
+	u64 hweight_active;
+	u64 hweight_inuse;
+	char __data[0];
+};
+
+struct trace_event_raw_iocg_inuse_update {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u32 old_inuse;
+	u32 new_inuse;
+	u64 old_hweight_inuse;
+	u64 new_hweight_inuse;
+	char __data[0];
+};
+
+struct trace_event_raw_iocost_ioc_vrate_adj {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u64 old_vrate;
+	u64 new_vrate;
+	int busy_level;
+	u32 read_missed_ppm;
+	u32 write_missed_ppm;
+	u32 rq_wait_pct;
+	int nr_lagging;
+	int nr_shortages;
+	char __data[0];
+};
+
+struct trace_event_raw_iocost_iocg_forgive_debt {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u64 vnow;
+	u32 usage_pct;
+	u64 old_debt;
+	u64 new_debt;
+	u64 old_delay;
+	u64 new_delay;
+	char __data[0];
+};
+
+struct ioc_cgrp {
+	struct blkcg_policy_data cpd;
+	unsigned int dfl_weight;
+};
+
+struct iocg_wait {
+	struct wait_queue_entry wait;
+	struct bio *bio;
+	u64 abs_cost;
+	bool committed;
+};
+
+struct trace_event_data_offsets_iocost_ioc_vrate_adj {
+	u32 devname;
+};
+
+struct trace_event_data_offsets_iocost_iocg_state {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct trace_event_data_offsets_iocg_inuse_update {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct trace_event_data_offsets_iocost_iocg_forgive_debt {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct iocg_wake_ctx {
+	struct ioc_gq *iocg;
+	u32 hw_inuse;
+	s64 vbudget;
+};
+
+enum dd_prio {
+	DD_RT_PRIO = 0,
+	DD_BE_PRIO = 1,
+	DD_IDLE_PRIO = 2,
+	DD_PRIO_MAX = 2,
+};
+
+enum dd_data_dir {
+	DD_READ = 0,
+	DD_WRITE = 1,
+};
+
+struct io_stats_per_prio {
+	uint32_t inserted;
+	uint32_t merged;
+	uint32_t dispatched;
+	atomic_t completed;
+};
+
+struct dd_per_prio {
+	struct list_head dispatch;
+	struct rb_root sort_list[2];
+	struct list_head fifo_list[2];
+	sector_t latest_pos[2];
+	struct io_stats_per_prio stats;
+};
+
+struct deadline_data {
+	struct dd_per_prio per_prio[3];
+	enum dd_data_dir last_dir;
+	unsigned int batching;
+	unsigned int starved;
+	int fifo_expire[2];
+	int fifo_batch;
+	int writes_starved;
+	int front_merges;
+	u32 async_depth;
+	int prio_aging_expire;
+	spinlock_t lock;
+	spinlock_t zone_lock;
+};
+
+typedef void (*btf_trace_kyber_latency)(void *, dev_t, const char *, const char *, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kyber_adjust)(void *, dev_t, const char *, unsigned int);
+
+typedef void (*btf_trace_kyber_throttled)(void *, dev_t, const char *);
+
+enum {
+	KYBER_READ = 0,
+	KYBER_WRITE = 1,
+	KYBER_DISCARD = 2,
+	KYBER_OTHER = 3,
+	KYBER_NUM_DOMAINS = 4,
+};
+
+enum {
+	KYBER_TOTAL_LATENCY = 0,
+	KYBER_IO_LATENCY = 1,
+};
+
+enum {
+	KYBER_LATENCY_SHIFT = 2,
+	KYBER_GOOD_BUCKETS = 4,
+	KYBER_LATENCY_BUCKETS = 8,
+};
+
+enum {
+	KYBER_ASYNC_PERCENT = 75,
+};
+
+struct trace_event_raw_kyber_latency {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char type[8];
+	u8 percentile;
+	u8 numerator;
+	u8 denominator;
+	unsigned int samples;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_adjust {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	unsigned int depth;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_throttled {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char __data[0];
+};
+
+struct kyber_cpu_latency {
+	atomic_t buckets[48];
+};
+
+struct kyber_queue_data {
+	struct request_queue *q;
+	dev_t dev;
+	struct sbitmap_queue domain_tokens[4];
+	unsigned int async_depth;
+	struct kyber_cpu_latency __attribute__((btf_type_tag("percpu"))) *cpu_latency;
+	struct timer_list timer;
+	unsigned int latency_buckets[48];
+	unsigned long latency_timeout[3];
+	int domain_p99[3];
+	u64 latency_targets[3];
+};
+
+struct kyber_ctx_queue {
+	spinlock_t lock;
+	struct list_head rq_list[4];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kyber_hctx_data {
+	spinlock_t lock;
+	struct list_head rqs[4];
+	unsigned int cur_domain;
+	unsigned int batching;
+	struct kyber_ctx_queue *kcqs;
+	struct sbitmap kcq_map[4];
+	struct sbq_wait domain_wait[4];
+	struct sbq_wait_state *domain_ws[4];
+	atomic_t wait_index[4];
+};
+
+struct flush_kcq_data {
+	struct kyber_hctx_data *khd;
+	unsigned int sched_domain;
+	struct list_head *list;
+};
+
+struct trace_event_data_offsets_kyber_latency {};
+
+struct trace_event_data_offsets_kyber_adjust {};
+
+struct trace_event_data_offsets_kyber_throttled {};
+
+enum bfqq_state_flags {
+	BFQQF_just_created = 0,
+	BFQQF_busy = 1,
+	BFQQF_wait_request = 2,
+	BFQQF_non_blocking_wait_rq = 3,
+	BFQQF_fifo_expire = 4,
+	BFQQF_has_short_ttime = 5,
+	BFQQF_sync = 6,
+	BFQQF_IO_bound = 7,
+	BFQQF_in_large_burst = 8,
+	BFQQF_softrt_update = 9,
+	BFQQF_coop = 10,
+	BFQQF_split_coop = 11,
+};
+
+enum bfqq_expiration {
+	BFQQE_TOO_IDLE = 0,
+	BFQQE_BUDGET_TIMEOUT = 1,
+	BFQQE_BUDGET_EXHAUSTED = 2,
+	BFQQE_NO_MORE_REQUESTS = 3,
+	BFQQE_PREEMPTED = 4,
+};
+
+struct bfq_weight_counter {
+	unsigned int weight;
+	unsigned int num_active;
+	struct rb_node weights_node;
+};
+
+struct bfq_sched_data;
+
+struct bfq_queue;
+
+struct bfq_entity {
+	struct rb_node rb_node;
+	bool on_st_or_in_serv;
+	u64 start;
+	u64 finish;
+	struct rb_root *tree;
+	u64 min_start;
+	int service;
+	int budget;
+	int allocated;
+	int dev_weight;
+	int weight;
+	int new_weight;
+	int orig_weight;
+	struct bfq_entity *parent;
+	struct bfq_sched_data *my_sched_data;
+	struct bfq_sched_data *sched_data;
+	int prio_changed;
+	bool in_groups_with_pending_reqs;
+	struct bfq_queue *last_bfqq_created;
+};
+
+struct bfq_ttime {
+	u64 last_end_request;
+	u64 ttime_total;
+	unsigned long ttime_samples;
+	u64 ttime_mean;
+};
+
+struct bfq_data;
+
+struct bfq_io_cq;
+
+struct bfq_queue {
+	int ref;
+	int stable_ref;
+	struct bfq_data *bfqd;
+	unsigned short ioprio;
+	unsigned short ioprio_class;
+	unsigned short new_ioprio;
+	unsigned short new_ioprio_class;
+	u64 last_serv_time_ns;
+	unsigned int inject_limit;
+	unsigned long decrease_time_jif;
+	struct bfq_queue *new_bfqq;
+	struct rb_node pos_node;
+	struct rb_root *pos_root;
+	struct rb_root sort_list;
+	struct request *next_rq;
+	int queued[2];
+	int meta_pending;
+	struct list_head fifo;
+	struct bfq_entity entity;
+	struct bfq_weight_counter *weight_counter;
+	int max_budget;
+	unsigned long budget_timeout;
+	int dispatched;
+	unsigned long flags;
+	struct list_head bfqq_list;
+	struct bfq_ttime ttime;
+	u64 io_start_time;
+	u64 tot_idle_time;
+	u32 seek_history;
+	struct hlist_node burst_list_node;
+	sector_t last_request_pos;
+	unsigned int requests_within_timer;
+	pid_t pid;
+	struct bfq_io_cq *bic;
+	unsigned long wr_cur_max_time;
+	unsigned long soft_rt_next_start;
+	unsigned long last_wr_start_finish;
+	unsigned int wr_coeff;
+	unsigned long last_idle_bklogged;
+	unsigned long service_from_backlogged;
+	unsigned long service_from_wr;
+	unsigned long wr_start_at_switch_to_srt;
+	unsigned long split_time;
+	unsigned long first_IO_time;
+	unsigned long creation_time;
+	struct bfq_queue *waker_bfqq;
+	struct bfq_queue *tentative_waker_bfqq;
+	unsigned int num_waker_detections;
+	u64 waker_detection_started;
+	struct hlist_node woken_list_node;
+	struct hlist_head woken_list;
+	unsigned int actuator_idx;
+};
+
+struct bfq_group;
+
+struct bfq_data {
+	struct request_queue *queue;
+	struct list_head dispatch;
+	struct bfq_group *root_group;
+	struct rb_root_cached queue_weights_tree;
+	unsigned int num_groups_with_pending_reqs;
+	unsigned int busy_queues[3];
+	int wr_busy_queues;
+	int queued;
+	int tot_rq_in_driver;
+	int rq_in_driver[8];
+	bool nonrot_with_queueing;
+	int max_rq_in_driver;
+	int hw_tag_samples;
+	int hw_tag;
+	int budgets_assigned;
+	struct hrtimer idle_slice_timer;
+	struct bfq_queue *in_service_queue;
+	sector_t last_position;
+	sector_t in_serv_last_pos;
+	u64 last_completion;
+	struct bfq_queue *last_completed_rq_bfqq;
+	struct bfq_queue *last_bfqq_created;
+	u64 last_empty_occupied_ns;
+	bool wait_dispatch;
+	struct request *waited_rq;
+	bool rqs_injected;
+	u64 first_dispatch;
+	u64 last_dispatch;
+	ktime_t last_budget_start;
+	ktime_t last_idling_start;
+	unsigned long last_idling_start_jiffies;
+	int peak_rate_samples;
+	u32 sequential_samples;
+	u64 tot_sectors_dispatched;
+	u32 last_rq_max_size;
+	u64 delta_from_first;
+	u32 peak_rate;
+	int bfq_max_budget;
+	struct list_head active_list[8];
+	struct list_head idle_list;
+	u64 bfq_fifo_expire[2];
+	unsigned int bfq_back_penalty;
+	unsigned int bfq_back_max;
+	u32 bfq_slice_idle;
+	int bfq_user_max_budget;
+	unsigned int bfq_timeout;
+	bool strict_guarantees;
+	unsigned long last_ins_in_burst;
+	unsigned long bfq_burst_interval;
+	int burst_size;
+	struct bfq_entity *burst_parent_entity;
+	unsigned long bfq_large_burst_thresh;
+	bool large_burst;
+	struct hlist_head burst_list;
+	bool low_latency;
+	unsigned int bfq_wr_coeff;
+	unsigned int bfq_wr_rt_max_time;
+	unsigned int bfq_wr_min_idle_time;
+	unsigned long bfq_wr_min_inter_arr_async;
+	unsigned int bfq_wr_max_softrt_rate;
+	u64 rate_dur_prod;
+	struct bfq_queue oom_bfqq;
+	spinlock_t lock;
+	struct bfq_io_cq *bio_bic;
+	struct bfq_queue *bio_bfqq;
+	unsigned int word_depths[4];
+	unsigned int full_depth_shift;
+	unsigned int num_actuators;
+	sector_t sector[8];
+	sector_t nr_sectors[8];
+	struct blk_independent_access_range ia_ranges[8];
+	unsigned int actuator_load_threshold;
+};
+
+struct bfq_service_tree {
+	struct rb_root active;
+	struct rb_root idle;
+	struct bfq_entity *first_idle;
+	struct bfq_entity *last_idle;
+	u64 vtime;
+	unsigned long wsum;
+};
+
+struct bfq_sched_data {
+	struct bfq_entity *in_service_entity;
+	struct bfq_entity *next_in_service;
+	struct bfq_service_tree service_tree[3];
+	unsigned long bfq_class_idle_last_service;
+};
+
+struct bfqg_stats {
+	struct blkg_rwstat bytes;
+	struct blkg_rwstat ios;
+};
+
+struct bfq_group {
+	struct blkg_policy_data pd;
+	char blkg_path[128];
+	refcount_t ref;
+	struct bfq_entity entity;
+	struct bfq_sched_data sched_data;
+	struct bfq_data *bfqd;
+	struct bfq_queue *async_bfqq[128];
+	struct bfq_queue *async_idle_bfqq[8];
+	struct bfq_entity *my_entity;
+	int active_entities;
+	int num_queues_with_pending_reqs;
+	struct rb_root rq_pos_tree;
+	struct bfqg_stats stats;
+};
+
+struct bfq_iocq_bfqq_data {
+	bool saved_has_short_ttime;
+	bool saved_IO_bound;
+	u64 saved_io_start_time;
+	u64 saved_tot_idle_time;
+	bool saved_in_large_burst;
+	bool was_in_burst_list;
+	unsigned int saved_weight;
+	unsigned long saved_wr_coeff;
+	unsigned long saved_last_wr_start_finish;
+	unsigned long saved_service_from_wr;
+	unsigned long saved_wr_start_at_switch_to_srt;
+	unsigned int saved_wr_cur_max_time;
+	struct bfq_ttime saved_ttime;
+	u64 saved_last_serv_time_ns;
+	unsigned int saved_inject_limit;
+	unsigned long saved_decrease_time_jif;
+	struct bfq_queue *stable_merge_bfqq;
+	bool stably_merged;
+};
+
+struct bfq_io_cq {
+	struct io_cq icq;
+	struct bfq_queue *bfqq[16];
+	int ioprio;
+	uint64_t blkcg_serial_nr;
+	struct bfq_iocq_bfqq_data bfqq_data[8];
+	unsigned int requests;
+};
+
+struct bfq_group_data {
+	struct blkcg_policy_data pd;
+	unsigned int weight;
+};
+
+enum blk_zone_report_flags {
+	BLK_ZONE_REP_CAPACITY = 1,
+};
+
+struct blk_zone_report {
+	__u64 sector;
+	__u32 nr_zones;
+	__u32 flags;
+	struct blk_zone zones[0];
+};
+
+struct zone_report_args {
+	struct blk_zone __attribute__((btf_type_tag("user"))) *zones;
+};
+
+struct blk_zone_range {
+	__u64 sector;
+	__u64 nr_sectors;
+};
+
+struct blk_revalidate_zone_args {
+	struct gendisk *disk;
+	unsigned long *conv_zones_bitmap;
+	unsigned long *seq_zones_wlock;
+	unsigned int nr_zones;
+	sector_t zone_sectors;
+	sector_t sector;
+};
+
+typedef void (*btf_trace_wbt_stat)(void *, struct backing_dev_info *, struct blk_rq_stat *);
+
+typedef void (*btf_trace_wbt_lat)(void *, struct backing_dev_info *, unsigned long);
+
+typedef void (*btf_trace_wbt_step)(void *, struct backing_dev_info *, const char *, int, unsigned long, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_wbt_timer)(void *, struct backing_dev_info *, unsigned int, int, unsigned int);
+
+enum {
+	WBT_STATE_ON_DEFAULT = 1,
+	WBT_STATE_ON_MANUAL = 2,
+	WBT_STATE_OFF_DEFAULT = 3,
+	WBT_STATE_OFF_MANUAL = 4,
+};
+
+enum {
+	WBT_RWQ_BG = 0,
+	WBT_RWQ_KSWAPD = 1,
+	WBT_RWQ_DISCARD = 2,
+	WBT_NUM_RWQ = 3,
+};
+
+enum {
+	RWB_DEF_DEPTH = 16,
+	RWB_WINDOW_NSEC = 100000000,
+	RWB_MIN_WRITE_SAMPLES = 3,
+	RWB_UNKNOWN_BUMP = 5,
+};
+
+enum {
+	LAT_OK = 1,
+	LAT_UNKNOWN = 2,
+	LAT_UNKNOWN_WRITES = 3,
+	LAT_EXCEEDED = 4,
+};
+
+enum wbt_flags {
+	WBT_TRACKED = 1,
+	WBT_READ = 2,
+	WBT_KSWAPD = 4,
+	WBT_DISCARD = 8,
+	WBT_NR_BITS = 4,
+};
+
+struct trace_event_raw_wbt_stat {
+	struct trace_entry ent;
+	char name[32];
+	s64 rmean;
+	u64 rmin;
+	u64 rmax;
+	s64 rnr_samples;
+	s64 rtime;
+	s64 wmean;
+	u64 wmin;
+	u64 wmax;
+	s64 wnr_samples;
+	s64 wtime;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_lat {
+	struct trace_entry ent;
+	char name[32];
+	unsigned long lat;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_step {
+	struct trace_entry ent;
+	char name[32];
+	const char *msg;
+	int step;
+	unsigned long window;
+	unsigned int bg;
+	unsigned int normal;
+	unsigned int max;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_timer {
+	struct trace_entry ent;
+	char name[32];
+	unsigned int status;
+	int step;
+	unsigned int inflight;
+	char __data[0];
+};
+
+struct rq_wb {
+	unsigned int wb_background;
+	unsigned int wb_normal;
+	short enable_state;
+	unsigned int unknown_cnt;
+	u64 win_nsec;
+	u64 cur_win_nsec;
+	struct blk_stat_callback *cb;
+	u64 sync_issue;
+	void *sync_cookie;
+	unsigned int wc;
+	unsigned long last_issue;
+	unsigned long last_comp;
+	unsigned long min_lat_nsec;
+	struct rq_qos rqos;
+	struct rq_wait rq_wait[3];
+	struct rq_depth rq_depth;
+};
+
+struct wbt_wait_data {
+	struct rq_wb *rwb;
+	enum wbt_flags wb_acct;
+	blk_opf_t opf;
+};
+
+struct trace_event_data_offsets_wbt_stat {};
+
+struct trace_event_data_offsets_wbt_lat {};
+
+struct trace_event_data_offsets_wbt_step {};
+
+struct trace_event_data_offsets_wbt_timer {};
+
+struct show_busy_params {
+	struct seq_file *m;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+struct blk_crypto_mode {
+	const char *name;
+	const char *cipher_str;
+	unsigned int keysize;
+	unsigned int security_strength;
+	unsigned int ivsize;
+};
+
+struct blk_crypto_ll_ops {
+	int (*keyslot_program)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+	int (*keyslot_evict)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+	int (*derive_sw_secret)(struct blk_crypto_profile *, const u8 *, size_t, u8 *);
+};
+
+struct blk_crypto_profile {
+	struct blk_crypto_ll_ops ll_ops;
+	unsigned int max_dun_bytes_supported;
+	unsigned int key_types_supported;
+	unsigned int modes_supported[5];
+	struct device *dev;
+	unsigned int num_slots;
+	struct rw_semaphore lock;
+	struct lock_class_key lockdep_key;
+	wait_queue_head_t idle_slots_wait_queue;
+	struct list_head idle_slots;
+	spinlock_t idle_slots_lock;
+	struct hlist_head *slot_hashtable;
+	unsigned int log_slot_ht_size;
+	struct blk_crypto_keyslot *slots;
+};
+
+struct blk_crypto_keyslot {
+	atomic_t slot_refs;
+	struct list_head idle_slot_node;
+	struct hlist_node hash_node;
+	const struct blk_crypto_key *key;
+	struct blk_crypto_profile *profile;
+};
+
+struct blk_crypto_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_crypto_profile *, struct blk_crypto_attr *, char *);
+};
+
+struct blk_crypto_kobj {
+	struct kobject kobj;
+	struct blk_crypto_profile *profile;
+};
+
+struct blk_crypto_fallback_keyslot {
+	enum blk_crypto_mode_num crypto_mode;
+	struct crypto_skcipher *tfms[5];
+};
+
+struct bio_fallback_crypt_ctx {
+	struct bio_crypt_ctx crypt_ctx;
+	struct bvec_iter crypt_iter;
+	union {
+		struct {
+			struct work_struct work;
+			struct bio *bio;
+		};
+		struct {
+			void *bi_private_orig;
+			bio_end_io_t *bi_end_io_orig;
+		};
+	};
+};
+
+union blk_crypto_iv {
+	__le64 dun[4];
+	u8 bytes[32];
+};
+
+struct bd_holder_disk {
+	struct list_head list;
+	struct kobject *holder_dir;
+	int refcnt;
+};
+
+struct io_cache_entry {
+	struct io_wq_work_node node;
+};
+
+struct io_rsrc_put {
+	u64 tag;
+	union {
+		void *rsrc;
+		struct file *file;
+		struct io_mapped_ubuf *buf;
+	};
+};
+
+struct io_rsrc_node {
+	union {
+		struct io_cache_entry cache;
+		struct io_ring_ctx *ctx;
+	};
+	int refs;
+	bool empty;
+	u16 type;
+	struct list_head node;
+	struct io_rsrc_put item;
+};
+
+struct io_mapped_ubuf {
+	u64 ubuf;
+	u64 ubuf_end;
+	unsigned int nr_bvecs;
+	unsigned long acct_pages;
+	struct bio_vec bvec[0];
+};
+
+struct io_buffer {
+	struct list_head list;
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 bgid;
+};
+
+struct io_uring_buf_ring;
+
+struct io_buffer_list {
+	union {
+		struct list_head buf_list;
+		struct {
+			struct page **buf_pages;
+			struct io_uring_buf_ring *buf_ring;
+		};
+		struct callback_head rcu;
+	};
+	__u16 bgid;
+	__u16 buf_nr_pages;
+	__u16 nr_entries;
+	__u16 head;
+	__u16 mask;
+	atomic_t refs;
+	__u8 is_mapped;
+	__u8 is_mmap;
+};
+
+struct io_uring_buf {
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 resv;
+};
+
+struct io_uring_buf_ring {
+	union {
+		struct {
+			__u64 resv1;
+			__u32 resv2;
+			__u16 resv3;
+			__u16 tail;
+		};
+		struct {
+			struct {} __empty_bufs;
+			struct io_uring_buf bufs[0];
+		};
+	};
+};
+
+struct io_poll {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	int retries;
+	struct wait_queue_entry wait;
+};
+
+struct async_poll {
+	union {
+		struct io_poll poll;
+		struct io_cache_entry cache;
+	};
+	struct io_poll *double_poll;
+};
+
+struct io_sq_data {
+	refcount_t refs;
+	atomic_t park_pending;
+	struct mutex lock;
+	struct list_head ctx_list;
+	struct task_struct *thread;
+	struct wait_queue_head wait;
+	unsigned int sq_thread_idle;
+	int sq_cpu;
+	pid_t task_pid;
+	pid_t task_tgid;
+	unsigned long state;
+	struct completion exited;
+};
+
+struct io_rsrc_data {
+	struct io_ring_ctx *ctx;
+	u64 **tags;
+	unsigned int nr;
+	u16 rsrc_type;
+	bool quiesce;
+};
+
+typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
+
+typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, long);
+
+typedef void (*btf_trace_io_uring_file_get)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_queue_async_work)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_defer)(void *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
+
+typedef void (*btf_trace_io_uring_fail_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_complete)(void *, void *, void *, u64, int, unsigned int, u64, u64);
+
+typedef void (*btf_trace_io_uring_submit_req)(void *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_poll_arm)(void *, struct io_kiocb *, int, int);
+
+typedef void (*btf_trace_io_uring_task_add)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_req_failed)(void *, const struct io_uring_sqe *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_cqe_overflow)(void *, void *, unsigned long long, s32, u32, void *);
+
+typedef void (*btf_trace_io_uring_task_work_run)(void *, void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_io_uring_short_write)(void *, void *, u64, u64, u64);
+
+typedef void (*btf_trace_io_uring_local_work_run)(void *, void *, int, unsigned int);
+
+struct creds;
+
+enum {
+	REQ_F_FIXED_FILE = 1,
+	REQ_F_IO_DRAIN = 2,
+	REQ_F_LINK = 4,
+	REQ_F_HARDLINK = 8,
+	REQ_F_FORCE_ASYNC = 16,
+	REQ_F_BUFFER_SELECT = 32,
+	REQ_F_CQE_SKIP = 64,
+	REQ_F_FAIL = 256,
+	REQ_F_INFLIGHT = 512,
+	REQ_F_CUR_POS = 1024,
+	REQ_F_NOWAIT = 2048,
+	REQ_F_LINK_TIMEOUT = 4096,
+	REQ_F_NEED_CLEANUP = 8192,
+	REQ_F_POLLED = 16384,
+	REQ_F_BUFFER_SELECTED = 32768,
+	REQ_F_BUFFER_RING = 65536,
+	REQ_F_REISSUE = 131072,
+	REQ_F_SUPPORT_NOWAIT = 536870912,
+	REQ_F_ISREG = 1073741824,
+	REQ_F_CREDS = 262144,
+	REQ_F_REFCOUNT = 524288,
+	REQ_F_ARM_LTIMEOUT = 1048576,
+	REQ_F_ASYNC_DATA = 2097152,
+	REQ_F_SKIP_LINK_CQES = 4194304,
+	REQ_F_SINGLE_POLL = 8388608,
+	REQ_F_DOUBLE_POLL = 16777216,
+	REQ_F_PARTIAL_IO = 33554432,
+	REQ_F_APOLL_MULTISHOT = 67108864,
+	REQ_F_CLEAR_POLLIN = 134217728,
+	REQ_F_HASH_LOCKED = 268435456,
+};
+
+enum {
+	IO_WQ_WORK_CANCEL = 1,
+	IO_WQ_WORK_HASHED = 2,
+	IO_WQ_WORK_UNBOUND = 4,
+	IO_WQ_WORK_CONCURRENT = 16,
+	IO_WQ_HASH_SHIFT = 24,
+};
+
+enum {
+	IO_CHECK_CQ_OVERFLOW_BIT = 0,
+	IO_CHECK_CQ_DROPPED_BIT = 1,
+};
+
+enum io_uring_cmd_flags {
+	IO_URING_F_COMPLETE_DEFER = 1,
+	IO_URING_F_UNLOCKED = 2,
+	IO_URING_F_MULTISHOT = 4,
+	IO_URING_F_IOWQ = 8,
+	IO_URING_F_NONBLOCK = -2147483648,
+	IO_URING_F_SQE128 = 256,
+	IO_URING_F_CQE32 = 512,
+	IO_URING_F_IOPOLL = 1024,
+};
+
+enum {
+	IO_APOLL_OK = 0,
+	IO_APOLL_ABORTED = 1,
+	IO_APOLL_READY = 2,
+};
+
+enum {
+	IO_EVENTFD_OP_SIGNAL_BIT = 0,
+	IO_EVENTFD_OP_FREE_BIT = 1,
+};
+
+enum {
+	IORING_CQE_BUFFER_SHIFT = 16,
+};
+
+enum {
+	IOU_F_TWQ_LAZY_WAKE = 1,
+};
+
+enum {
+	IOU_OK = 0,
+	IOU_ISSUE_SKIP_COMPLETE = -529,
+	IOU_REQUEUE = -3072,
+	IOU_STOP_MULTISHOT = -125,
+};
+
+enum {
+	REQ_F_FIXED_FILE_BIT = 0,
+	REQ_F_IO_DRAIN_BIT = 1,
+	REQ_F_LINK_BIT = 2,
+	REQ_F_HARDLINK_BIT = 3,
+	REQ_F_FORCE_ASYNC_BIT = 4,
+	REQ_F_BUFFER_SELECT_BIT = 5,
+	REQ_F_CQE_SKIP_BIT = 6,
+	REQ_F_FAIL_BIT = 8,
+	REQ_F_INFLIGHT_BIT = 9,
+	REQ_F_CUR_POS_BIT = 10,
+	REQ_F_NOWAIT_BIT = 11,
+	REQ_F_LINK_TIMEOUT_BIT = 12,
+	REQ_F_NEED_CLEANUP_BIT = 13,
+	REQ_F_POLLED_BIT = 14,
+	REQ_F_BUFFER_SELECTED_BIT = 15,
+	REQ_F_BUFFER_RING_BIT = 16,
+	REQ_F_REISSUE_BIT = 17,
+	REQ_F_CREDS_BIT = 18,
+	REQ_F_REFCOUNT_BIT = 19,
+	REQ_F_ARM_LTIMEOUT_BIT = 20,
+	REQ_F_ASYNC_DATA_BIT = 21,
+	REQ_F_SKIP_LINK_CQES_BIT = 22,
+	REQ_F_SINGLE_POLL_BIT = 23,
+	REQ_F_DOUBLE_POLL_BIT = 24,
+	REQ_F_PARTIAL_IO_BIT = 25,
+	REQ_F_APOLL_MULTISHOT_BIT = 26,
+	REQ_F_CLEAR_POLLIN_BIT = 27,
+	REQ_F_HASH_LOCKED_BIT = 28,
+	REQ_F_SUPPORT_NOWAIT_BIT = 29,
+	REQ_F_ISREG_BIT = 30,
+	__REQ_F_LAST_BIT = 31,
+};
+
+enum io_uring_op {
+	IORING_OP_NOP = 0,
+	IORING_OP_READV = 1,
+	IORING_OP_WRITEV = 2,
+	IORING_OP_FSYNC = 3,
+	IORING_OP_READ_FIXED = 4,
+	IORING_OP_WRITE_FIXED = 5,
+	IORING_OP_POLL_ADD = 6,
+	IORING_OP_POLL_REMOVE = 7,
+	IORING_OP_SYNC_FILE_RANGE = 8,
+	IORING_OP_SENDMSG = 9,
+	IORING_OP_RECVMSG = 10,
+	IORING_OP_TIMEOUT = 11,
+	IORING_OP_TIMEOUT_REMOVE = 12,
+	IORING_OP_ACCEPT = 13,
+	IORING_OP_ASYNC_CANCEL = 14,
+	IORING_OP_LINK_TIMEOUT = 15,
+	IORING_OP_CONNECT = 16,
+	IORING_OP_FALLOCATE = 17,
+	IORING_OP_OPENAT = 18,
+	IORING_OP_CLOSE = 19,
+	IORING_OP_FILES_UPDATE = 20,
+	IORING_OP_STATX = 21,
+	IORING_OP_READ = 22,
+	IORING_OP_WRITE = 23,
+	IORING_OP_FADVISE = 24,
+	IORING_OP_MADVISE = 25,
+	IORING_OP_SEND = 26,
+	IORING_OP_RECV = 27,
+	IORING_OP_OPENAT2 = 28,
+	IORING_OP_EPOLL_CTL = 29,
+	IORING_OP_SPLICE = 30,
+	IORING_OP_PROVIDE_BUFFERS = 31,
+	IORING_OP_REMOVE_BUFFERS = 32,
+	IORING_OP_TEE = 33,
+	IORING_OP_SHUTDOWN = 34,
+	IORING_OP_RENAMEAT = 35,
+	IORING_OP_UNLINKAT = 36,
+	IORING_OP_MKDIRAT = 37,
+	IORING_OP_SYMLINKAT = 38,
+	IORING_OP_LINKAT = 39,
+	IORING_OP_MSG_RING = 40,
+	IORING_OP_FSETXATTR = 41,
+	IORING_OP_SETXATTR = 42,
+	IORING_OP_FGETXATTR = 43,
+	IORING_OP_GETXATTR = 44,
+	IORING_OP_SOCKET = 45,
+	IORING_OP_URING_CMD = 46,
+	IORING_OP_SEND_ZC = 47,
+	IORING_OP_SENDMSG_ZC = 48,
+	IORING_OP_LAST = 49,
+};
+
+enum {
+	IOSQE_FIXED_FILE_BIT = 0,
+	IOSQE_IO_DRAIN_BIT = 1,
+	IOSQE_IO_LINK_BIT = 2,
+	IOSQE_IO_HARDLINK_BIT = 3,
+	IOSQE_ASYNC_BIT = 4,
+	IOSQE_BUFFER_SELECT_BIT = 5,
+	IOSQE_CQE_SKIP_SUCCESS_BIT = 6,
+};
+
+enum io_wq_cancel {
+	IO_WQ_CANCEL_OK = 0,
+	IO_WQ_CANCEL_RUNNING = 1,
+	IO_WQ_CANCEL_NOTFOUND = 2,
+};
+
+enum {
+	IORING_REGISTER_BUFFERS = 0,
+	IORING_UNREGISTER_BUFFERS = 1,
+	IORING_REGISTER_FILES = 2,
+	IORING_UNREGISTER_FILES = 3,
+	IORING_REGISTER_EVENTFD = 4,
+	IORING_UNREGISTER_EVENTFD = 5,
+	IORING_REGISTER_FILES_UPDATE = 6,
+	IORING_REGISTER_EVENTFD_ASYNC = 7,
+	IORING_REGISTER_PROBE = 8,
+	IORING_REGISTER_PERSONALITY = 9,
+	IORING_UNREGISTER_PERSONALITY = 10,
+	IORING_REGISTER_RESTRICTIONS = 11,
+	IORING_REGISTER_ENABLE_RINGS = 12,
+	IORING_REGISTER_FILES2 = 13,
+	IORING_REGISTER_FILES_UPDATE2 = 14,
+	IORING_REGISTER_BUFFERS2 = 15,
+	IORING_REGISTER_BUFFERS_UPDATE = 16,
+	IORING_REGISTER_IOWQ_AFF = 17,
+	IORING_UNREGISTER_IOWQ_AFF = 18,
+	IORING_REGISTER_IOWQ_MAX_WORKERS = 19,
+	IORING_REGISTER_RING_FDS = 20,
+	IORING_UNREGISTER_RING_FDS = 21,
+	IORING_REGISTER_PBUF_RING = 22,
+	IORING_UNREGISTER_PBUF_RING = 23,
+	IORING_REGISTER_SYNC_CANCEL = 24,
+	IORING_REGISTER_FILE_ALLOC_RANGE = 25,
+	IORING_REGISTER_LAST = 26,
+	IORING_REGISTER_USE_REGISTERED_RING = 2147483648,
+};
+
+enum {
+	IORING_RSRC_FILE = 0,
+	IORING_RSRC_BUFFER = 1,
+};
+
+enum {
+	IORING_RESTRICTION_REGISTER_OP = 0,
+	IORING_RESTRICTION_SQE_OP = 1,
+	IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2,
+	IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3,
+	IORING_RESTRICTION_LAST = 4,
+};
+
+struct trace_event_raw_io_uring_create {
+	struct trace_entry ent;
+	int fd;
+	void *ctx;
+	u32 sq_entries;
+	u32 cq_entries;
+	u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_register {
+	struct trace_entry ent;
+	void *ctx;
+	unsigned int opcode;
+	unsigned int nr_files;
+	unsigned int nr_bufs;
+	long ret;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_file_get {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int fd;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_queue_async_work {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	u8 opcode;
+	unsigned int flags;
+	struct io_wq_work *work;
+	int rw;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_defer {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long data;
+	u8 opcode;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	void *target_req;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqring_wait {
+	struct trace_entry ent;
+	void *ctx;
+	int min_events;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_fail_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long user_data;
+	u8 opcode;
+	void *link;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_complete {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int res;
+	unsigned int cflags;
+	u64 extra1;
+	u64 extra2;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_submit_req {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long user_data;
+	u8 opcode;
+	u32 flags;
+	bool sq_thread;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_poll_arm {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long user_data;
+	u8 opcode;
+	int mask;
+	int events;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_add {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long user_data;
+	u8 opcode;
+	int mask;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_req_failed {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long user_data;
+	u8 opcode;
+	u8 flags;
+	u8 ioprio;
+	u64 off;
+	u64 addr;
+	u32 len;
+	u32 op_flags;
+	u16 buf_index;
+	u16 personality;
+	u32 file_index;
+	u64 pad1;
+	u64 addr3;
+	int error;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqe_overflow {
+	struct trace_entry ent;
+	void *ctx;
+	unsigned long long user_data;
+	s32 res;
+	u32 cflags;
+	void *ocqe;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_work_run {
+	struct trace_entry ent;
+	void *tctx;
+	unsigned int count;
+	unsigned int loops;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_short_write {
+	struct trace_entry ent;
+	void *ctx;
+	u64 fpos;
+	u64 wanted;
+	u64 got;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_local_work_run {
+	struct trace_entry ent;
+	void *ctx;
+	int count;
+	unsigned int loops;
+	char __data[0];
+};
+
+struct io_defer_entry {
+	struct list_head list;
+	struct io_kiocb *req;
+	u32 seq;
+};
+
+struct io_tctx_node {
+	struct list_head ctx_node;
+	struct task_struct *task;
+	struct io_ring_ctx *ctx;
+};
+
+struct io_overflow_cqe {
+	struct list_head list;
+	struct io_uring_cqe cqe;
+};
+
+struct io_wait_queue {
+	struct wait_queue_entry wq;
+	struct io_ring_ctx *ctx;
+	unsigned int cq_tail;
+	unsigned int nr_timeouts;
+	ktime_t timeout;
+};
+
+struct io_tctx_exit {
+	struct callback_head task_work;
+	struct completion completion;
+	struct io_ring_ctx *ctx;
+};
+
+struct io_sqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 flags;
+	__u32 dropped;
+	__u32 array;
+	__u32 resv1;
+	__u64 user_addr;
+};
+
+struct io_cqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 overflow;
+	__u32 cqes;
+	__u32 flags;
+	__u32 resv1;
+	__u64 user_addr;
+};
+
+struct io_uring_params {
+	__u32 sq_entries;
+	__u32 cq_entries;
+	__u32 flags;
+	__u32 sq_thread_cpu;
+	__u32 sq_thread_idle;
+	__u32 features;
+	__u32 wq_fd;
+	__u32 resv[3];
+	struct io_sqring_offsets sq_off;
+	struct io_cqring_offsets cq_off;
+};
+
+struct trace_event_data_offsets_io_uring_queue_async_work {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_defer {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_fail_link {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_submit_req {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_poll_arm {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_task_add {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_req_failed {
+	u32 op_str;
+};
+
+struct io_cold_def {
+	unsigned short async_size;
+	const char *name;
+	int (*prep_async)(struct io_kiocb *);
+	void (*cleanup)(struct io_kiocb *);
+	void (*fail)(struct io_kiocb *);
+};
+
+struct io_issue_def {
+	unsigned int needs_file: 1;
+	unsigned int plug: 1;
+	unsigned int hash_reg_file: 1;
+	unsigned int unbound_nonreg_file: 1;
+	unsigned int pollin: 1;
+	unsigned int pollout: 1;
+	unsigned int poll_exclusive: 1;
+	unsigned int buffer_select: 1;
+	unsigned int not_supported: 1;
+	unsigned int audit_skip: 1;
+	unsigned int ioprio: 1;
+	unsigned int iopoll: 1;
+	unsigned int iopoll_queue: 1;
+	unsigned int manual_alloc: 1;
+	int (*issue)(struct io_kiocb *, unsigned int);
+	int (*prep)(struct io_kiocb *, const struct io_uring_sqe *);
+};
+
+typedef bool work_cancel_fn(struct io_wq_work *, void *);
+
+struct io_uring_getevents_arg {
+	__u64 sigmask;
+	__u32 sigmask_sz;
+	__u32 pad;
+	__u64 ts;
+};
+
+struct io_uring_file_index_range {
+	__u32 off;
+	__u32 len;
+	__u64 resv;
+};
+
+struct trace_event_data_offsets_io_uring_create {};
+
+struct trace_event_data_offsets_io_uring_register {};
+
+struct trace_event_data_offsets_io_uring_file_get {};
+
+struct trace_event_data_offsets_io_uring_link {};
+
+struct trace_event_data_offsets_io_uring_cqring_wait {};
+
+struct trace_event_data_offsets_io_uring_complete {};
+
+struct trace_event_data_offsets_io_uring_cqe_overflow {};
+
+struct trace_event_data_offsets_io_uring_task_work_run {};
+
+struct trace_event_data_offsets_io_uring_short_write {};
+
+struct trace_event_data_offsets_io_uring_local_work_run {};
+
+struct io_task_cancel {
+	struct task_struct *task;
+	bool all;
+};
+
+struct io_uring_probe_op {
+	__u8 op;
+	__u8 resv;
+	__u16 flags;
+	__u32 resv2;
+};
+
+struct io_uring_probe {
+	__u8 last_op;
+	__u8 ops_len;
+	__u16 resv;
+	__u32 resv2[3];
+	struct io_uring_probe_op ops[0];
+};
+
+struct io_uring_restriction {
+	__u16 opcode;
+	union {
+		__u8 register_op;
+		__u8 sqe_op;
+		__u8 sqe_flags;
+	};
+	__u8 resv;
+	__u32 resv2[3];
+};
+
+struct io_xattr {
+	struct file *file;
+	struct xattr_ctx ctx;
+	struct filename *filename;
+};
+
+struct io_rename {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_unlink {
+	struct file *file;
+	int dfd;
+	int flags;
+	struct filename *filename;
+};
+
+struct io_mkdir {
+	struct file *file;
+	int dfd;
+	umode_t mode;
+	struct filename *filename;
+};
+
+struct io_link {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_splice {
+	struct file *file_out;
+	loff_t off_out;
+	loff_t off_in;
+	u64 len;
+	int splice_fd_in;
+	unsigned int flags;
+};
+
+struct io_sync {
+	struct file *file;
+	loff_t len;
+	loff_t off;
+	int flags;
+	int mode;
+};
+
+struct io_madvise {
+	struct file *file;
+	u64 addr;
+	u32 len;
+	u32 advice;
+};
+
+struct io_fadvise {
+	struct file *file;
+	u64 offset;
+	u32 len;
+	u32 advice;
+};
+
+struct io_open {
+	struct file *file;
+	int dfd;
+	u32 file_slot;
+	struct filename *filename;
+	struct open_how how;
+	unsigned long nofile;
+};
+
+struct io_close {
+	struct file *file;
+	int fd;
+	u32 file_slot;
+};
+
+enum {
+	SOCKET_URING_OP_SIOCINQ = 0,
+	SOCKET_URING_OP_SIOCOUTQ = 1,
+};
+
+struct io_epoll {
+	struct file *file;
+	int epfd;
+	int op;
+	int fd;
+	struct epoll_event event;
+};
+
+struct io_statx {
+	struct file *file;
+	int dfd;
+	unsigned int mask;
+	unsigned int flags;
+	struct filename *filename;
+	struct statx __attribute__((btf_type_tag("user"))) *buffer;
+};
+
+enum {
+	SKBFL_ZEROCOPY_ENABLE = 1,
+	SKBFL_SHARED_FRAG = 2,
+	SKBFL_PURE_ZEROCOPY = 4,
+	SKBFL_DONT_ORPHAN = 8,
+	SKBFL_MANAGED_FRAG_REFS = 16,
+};
+
+struct io_shutdown {
+	struct file *file;
+	int how;
+};
+
+struct compat_msghdr;
+
+struct user_msghdr;
+
+struct io_sr_msg {
+	struct file *file;
+	union {
+		struct compat_msghdr __attribute__((btf_type_tag("user"))) *umsg_compat;
+		struct user_msghdr __attribute__((btf_type_tag("user"))) *umsg;
+		void __attribute__((btf_type_tag("user"))) *buf;
+	};
+	unsigned int len;
+	unsigned int done_io;
+	unsigned int msg_flags;
+	unsigned int nr_multishot_loops;
+	u16 flags;
+	u16 addr_len;
+	u16 buf_group;
+	void __attribute__((btf_type_tag("user"))) *addr;
+	void __attribute__((btf_type_tag("user"))) *msg_control;
+	struct io_kiocb *notif;
+};
+
+struct compat_msghdr {
+	compat_uptr_t msg_name;
+	compat_int_t msg_namelen;
+	compat_uptr_t msg_iov;
+	compat_size_t msg_iovlen;
+	compat_uptr_t msg_control;
+	compat_size_t msg_controllen;
+	compat_uint_t msg_flags;
+};
+
+struct user_msghdr {
+	void __attribute__((btf_type_tag("user"))) *msg_name;
+	int msg_namelen;
+	struct iovec __attribute__((btf_type_tag("user"))) *msg_iov;
+	__kernel_size_t msg_iovlen;
+	void __attribute__((btf_type_tag("user"))) *msg_control;
+	__kernel_size_t msg_controllen;
+	unsigned int msg_flags;
+};
+
+struct io_accept {
+	struct file *file;
+	struct sockaddr __attribute__((btf_type_tag("user"))) *addr;
+	int __attribute__((btf_type_tag("user"))) *addr_len;
+	int flags;
+	u32 file_slot;
+	unsigned long nofile;
+};
+
+struct io_socket {
+	struct file *file;
+	int domain;
+	int type;
+	int protocol;
+	int flags;
+	u32 file_slot;
+	unsigned long nofile;
+};
+
+struct io_connect {
+	struct file *file;
+	struct sockaddr __attribute__((btf_type_tag("user"))) *addr;
+	int addr_len;
+	bool in_progress;
+	bool seen_econnaborted;
+};
+
+struct io_async_msghdr {
+	union {
+		struct iovec fast_iov[8];
+		struct {
+			struct iovec fast_iov_one;
+			__kernel_size_t controllen;
+			int namelen;
+			__kernel_size_t payloadlen;
+		};
+		struct io_cache_entry cache;
+	};
+	struct iovec *free_iov;
+	struct sockaddr __attribute__((btf_type_tag("user"))) *uaddr;
+	struct msghdr msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+typedef s32 compat_ssize_t;
+
+struct io_notif_data {
+	struct file *file;
+	struct ubuf_info uarg;
+	unsigned long account_pages;
+	bool zc_report;
+	bool zc_used;
+	bool zc_copied;
+};
+
+struct io_uring_recvmsg_out {
+	__u32 namelen;
+	__u32 controllen;
+	__u32 payloadlen;
+	__u32 flags;
+};
+
+struct io_recvmsg_multishot_hdr {
+	struct io_uring_recvmsg_out msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+struct io_async_connect {
+	struct __kernel_sockaddr_storage address;
+};
+
+enum {
+	IORING_MSG_DATA = 0,
+	IORING_MSG_SEND_FD = 1,
+};
+
+struct io_msg {
+	struct file *file;
+	struct file *src_file;
+	struct callback_head tw;
+	u64 user_data;
+	u32 len;
+	u32 cmd;
+	u32 src_fd;
+	union {
+		u32 dst_fd;
+		u32 cqe_flags;
+	};
+	u32 flags;
+};
+
+struct io_timeout {
+	struct file *file;
+	u32 off;
+	u32 target_seq;
+	u32 repeats;
+	struct list_head list;
+	struct io_kiocb *head;
+	struct io_kiocb *prev;
+};
+
+struct io_timeout_rem {
+	struct file *file;
+	u64 addr;
+	struct timespec64 ts;
+	u32 flags;
+	bool ltimeout;
+};
+
+struct io_timeout_data {
+	struct io_kiocb *req;
+	struct hrtimer timer;
+	struct timespec64 ts;
+	enum hrtimer_mode mode;
+	u32 flags;
+};
+
+struct io_cancel_data {
+	struct io_ring_ctx *ctx;
+	union {
+		u64 data;
+		struct file *file;
+	};
+	u8 opcode;
+	u32 flags;
+	int seq;
+};
+
+enum {
+	IO_SQ_THREAD_SHOULD_STOP = 0,
+	IO_SQ_THREAD_SHOULD_PARK = 1,
+};
+
+typedef void io_wq_work_fn(struct io_wq_work *);
+
+typedef struct io_wq_work *free_work_fn(struct io_wq_work *);
+
+struct io_wq_data {
+	struct io_wq_hash *hash;
+	struct task_struct *task;
+	io_wq_work_fn *do_work;
+	free_work_fn *free_work;
+};
+
+struct io_uring_rsrc_update {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+};
+
+enum {
+	IOU_POLL_DONE = 0,
+	IOU_POLL_NO_ACTION = 1,
+	IOU_POLL_REMOVE_POLL_USE_RES = 2,
+	IOU_POLL_REISSUE = 3,
+	IOU_POLL_REQUEUE = 4,
+};
+
+struct io_poll_update {
+	struct file *file;
+	u64 old_user_data;
+	u64 new_user_data;
+	__poll_t events;
+	bool update_events;
+	bool update_user_data;
+};
+
+struct io_poll_table {
+	struct poll_table_struct pt;
+	struct io_kiocb *req;
+	int nr_entries;
+	int error;
+	bool owning;
+	__poll_t result_mask;
+};
+
+struct io_cancel {
+	struct file *file;
+	u64 addr;
+	u32 flags;
+	s32 fd;
+	u8 opcode;
+};
+
+struct io_uring_sync_cancel_reg {
+	__u64 addr;
+	__s32 fd;
+	__u32 flags;
+	struct __kernel_timespec timeout;
+	__u8 opcode;
+	__u8 pad[7];
+	__u64 pad2[3];
+};
+
+enum {
+	IOU_PBUF_RING_MMAP = 1,
+};
+
+struct io_provide_buf {
+	struct file *file;
+	__u64 addr;
+	__u32 len;
+	__u32 bgid;
+	__u32 nbufs;
+	__u16 bid;
+};
+
+struct io_buf_free {
+	struct hlist_node list;
+	void *mem;
+	size_t size;
+	int inuse;
+};
+
+struct io_uring_buf_reg {
+	__u64 ring_addr;
+	__u32 ring_entries;
+	__u16 bgid;
+	__u16 flags;
+	__u64 resv[3];
+};
+
+struct io_rsrc_update {
+	struct file *file;
+	u64 arg;
+	u32 nr_args;
+	u32 offset;
+};
+
+struct io_uring_rsrc_update2 {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+	__u64 tags;
+	__u32 nr;
+	__u32 resv2;
+};
+
+struct io_uring_rsrc_register {
+	__u32 nr;
+	__u32 flags;
+	__u64 resv2;
+	__u64 data;
+	__u64 tags;
+};
+
+struct io_rw {
+	struct kiocb kiocb;
+	u64 addr;
+	u32 len;
+	rwf_t flags;
+};
+
+struct iov_iter_state {
+	size_t iov_offset;
+	size_t count;
+	unsigned long nr_segs;
+};
+
+struct io_rw_state {
+	struct iov_iter iter;
+	struct iov_iter_state iter_state;
+	struct iovec fast_iov[8];
+};
+
+struct io_async_rw {
+	struct io_rw_state s;
+	const struct iovec *free_iovec;
+	size_t bytes_done;
+	struct wait_page_queue wpq;
+};
+
+enum {
+	IO_WQ_BIT_EXIT = 0,
+};
+
+enum {
+	IO_WORKER_F_UP = 1,
+	IO_WORKER_F_RUNNING = 2,
+	IO_WORKER_F_FREE = 4,
+	IO_WORKER_F_BOUND = 8,
+};
+
+enum {
+	IO_ACCT_STALLED_BIT = 0,
+};
+
+enum {
+	IO_WQ_ACCT_BOUND = 0,
+	IO_WQ_ACCT_UNBOUND = 1,
+	IO_WQ_ACCT_NR = 2,
+};
+
+struct io_wq_acct {
+	unsigned int nr_workers;
+	unsigned int max_workers;
+	int index;
+	atomic_t nr_running;
+	raw_spinlock_t lock;
+	struct io_wq_work_list work_list;
+	unsigned long flags;
+};
+
+struct io_wq {
+	unsigned long state;
+	free_work_fn *free_work;
+	io_wq_work_fn *do_work;
+	struct io_wq_hash *hash;
+	atomic_t worker_refs;
+	struct completion worker_done;
+	struct hlist_node cpuhp_node;
+	struct task_struct *task;
+	struct io_wq_acct acct[2];
+	raw_spinlock_t lock;
+	struct hlist_nulls_head free_list;
+	struct list_head all_list;
+	struct wait_queue_entry wait;
+	struct io_wq_work *hash_tail[64];
+	cpumask_var_t cpu_mask;
+};
+
+struct io_worker {
+	refcount_t ref;
+	unsigned int flags;
+	struct hlist_nulls_node nulls_node;
+	struct list_head all_list;
+	struct task_struct *task;
+	struct io_wq *wq;
+	struct io_wq_work *cur_work;
+	struct io_wq_work *next_work;
+	raw_spinlock_t lock;
+	struct completion ref_done;
+	unsigned long create_state;
+	struct callback_head create_work;
+	int create_index;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct io_cb_cancel_data {
+	work_cancel_fn *fn;
+	void *data;
+	int nr_running;
+	int nr_pending;
+	bool cancel_all;
+};
+
+struct online_data {
+	unsigned int cpu;
+	bool online;
+};
+
+struct wrapper {
+	cmp_func_t cmp;
+	swap_func_t swap;
+};
+
+enum {
+	MAX_OPT_ARGS = 3,
+};
+
+enum {
+	REG_OP_ISFREE = 0,
+	REG_OP_ALLOC = 1,
+	REG_OP_RELEASE = 2,
+};
+
+struct region {
+	unsigned int start;
+	unsigned int off;
+	unsigned int group_len;
+	unsigned int end;
+	unsigned int nbits;
+};
+
+typedef void sg_free_fn(struct scatterlist *, unsigned int);
+
+struct sg_append_table {
+	struct sg_table sgt;
+	struct scatterlist *prv;
+	unsigned int total_nents;
+};
+
+typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
+
+struct sg_dma_page_iter {
+	struct sg_page_iter base;
+};
+
+struct csum_state {
+	__wsum csum;
+	size_t off;
+};
+
+union nested_table {
+	union nested_table __attribute__((btf_type_tag("rcu"))) *table;
+	struct rhash_lock_head __attribute__((btf_type_tag("rcu"))) *bucket;
+};
+
+struct rhashtable_walker {
+	struct list_head list;
+	struct bucket_table *tbl;
+};
+
+struct rhashtable_iter {
+	struct rhashtable *ht;
+	struct rhash_head *p;
+	struct rhlist_head *list;
+	struct rhashtable_walker walker;
+	unsigned int slot;
+	unsigned int skip;
+	bool end_of_table;
+};
+
+struct once_work {
+	struct work_struct work;
+	struct static_key_true *key;
+	struct module *module;
+};
+
+struct genradix_node {
+	union {
+		struct genradix_node *children[512];
+		u8 data[4096];
+	};
+};
+
+struct genradix_iter {
+	size_t offset;
+	size_t pos;
+};
+
+enum string_size_units {
+	STRING_UNITS_10 = 0,
+	STRING_UNITS_2 = 1,
+};
+
+struct strarray {
+	char **array;
+	size_t n;
+};
+
+struct kunit_hooks_table {
+	void (*fail_current_test)(const char *, int, const char *, ...);
+	void * (*get_static_stub_address)(struct kunit *, void *);
+};
+
+struct reciprocal_value_adv {
+	u32 m;
+	u8 sh;
+	u8 exp;
+	bool is_wide_m;
+};
+
+struct gf128mul_64k {
+	struct gf128mul_4k *t[16];
+};
+
+enum blake2s_lengths {
+	BLAKE2S_BLOCK_SIZE = 64,
+	BLAKE2S_HASH_SIZE = 32,
+	BLAKE2S_KEY_SIZE = 32,
+	BLAKE2S_128_HASH_SIZE = 16,
+	BLAKE2S_160_HASH_SIZE = 20,
+	BLAKE2S_224_HASH_SIZE = 28,
+	BLAKE2S_256_HASH_SIZE = 32,
+};
+
+struct blake2s_state {
+	u32 h[8];
+	u32 t[2];
+	u32 f[2];
+	u8 buf[64];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2s_iv {
+	BLAKE2S_IV0 = 1779033703,
+	BLAKE2S_IV1 = 3144134277,
+	BLAKE2S_IV2 = 1013904242,
+	BLAKE2S_IV3 = 2773480762,
+	BLAKE2S_IV4 = 1359893119,
+	BLAKE2S_IV5 = 2600822924,
+	BLAKE2S_IV6 = 528734635,
+	BLAKE2S_IV7 = 1541459225,
+};
+
+typedef mpi_limb_t *mpi_ptr_t;
+
+typedef int mpi_size_t;
+
+typedef mpi_limb_t UWtype;
+
+typedef unsigned int UHWtype;
+
+struct mpi_ec_ctx;
+
+struct field_table {
+	const char *p;
+	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
+	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
+};
+
+struct barrett_ctx_s;
+
+typedef struct barrett_ctx_s *mpi_barrett_t;
+
+enum gcry_mpi_ec_models {
+	MPI_EC_WEIERSTRASS = 0,
+	MPI_EC_MONTGOMERY = 1,
+	MPI_EC_EDWARDS = 2,
+};
+
+enum ecc_dialects {
+	ECC_DIALECT_STANDARD = 0,
+	ECC_DIALECT_ED25519 = 1,
+	ECC_DIALECT_SAFECURVE = 2,
+};
+
+struct gcry_mpi_point;
+
+typedef struct gcry_mpi_point *MPI_POINT;
+
+struct mpi_ec_ctx {
+	enum gcry_mpi_ec_models model;
+	enum ecc_dialects dialect;
+	int flags;
+	unsigned int nbits;
+	MPI p;
+	MPI a;
+	MPI b;
+	MPI_POINT G;
+	MPI n;
+	unsigned int h;
+	MPI_POINT Q;
+	MPI d;
+	const char *name;
+	struct {
+		struct {
+			unsigned int a_is_pminus3: 1;
+			unsigned int two_inv_p: 1;
+		} valid;
+		int a_is_pminus3;
+		MPI two_inv_p;
+		mpi_barrett_t p_barrett;
+		MPI scratch[11];
+	} t;
+	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
+	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
+};
+
+struct gcry_mpi_point {
+	MPI x;
+	MPI y;
+	MPI z;
+};
+
+enum gcry_mpi_constants {
+	MPI_C_ZERO = 0,
+	MPI_C_ONE = 1,
+	MPI_C_TWO = 2,
+	MPI_C_THREE = 3,
+	MPI_C_FOUR = 4,
+	MPI_C_EIGHT = 5,
+};
+
+enum gcry_mpi_format {
+	GCRYMPI_FMT_NONE = 0,
+	GCRYMPI_FMT_STD = 1,
+	GCRYMPI_FMT_PGP = 2,
+	GCRYMPI_FMT_SSH = 3,
+	GCRYMPI_FMT_HEX = 4,
+	GCRYMPI_FMT_USG = 5,
+	GCRYMPI_FMT_OPAQUE = 8,
+};
+
+struct barrett_ctx_s {
+	MPI m;
+	int m_copied;
+	int k;
+	MPI y;
+	MPI r1;
+	MPI r2;
+	MPI r3;
+};
+
+struct karatsuba_ctx {
+	struct karatsuba_ctx *next;
+	mpi_ptr_t tspace;
+	mpi_size_t tspace_size;
+	mpi_ptr_t tp;
+	mpi_size_t tp_size;
+};
+
+typedef long mpi_limb_signed_t;
+
+enum devm_ioremap_type {
+	DEVM_IOREMAP = 0,
+	DEVM_IOREMAP_UC = 1,
+	DEVM_IOREMAP_WC = 2,
+	DEVM_IOREMAP_NP = 3,
+};
+
+enum {
+	PCI_STD_RESOURCES = 0,
+	PCI_STD_RESOURCE_END = 5,
+	PCI_ROM_RESOURCE = 6,
+	PCI_IOV_RESOURCES = 7,
+	PCI_IOV_RESOURCE_END = 12,
+	PCI_BRIDGE_RESOURCES = 13,
+	PCI_BRIDGE_RESOURCE_END = 16,
+	PCI_NUM_RESOURCES = 17,
+	DEVICE_COUNT_RESOURCE = 17,
+};
+
+struct pcim_iomap_devres {
+	void *table[6];
+};
+
+struct arch_io_reserve_memtype_wc_devres {
+	resource_size_t start;
+	resource_size_t size;
+};
+
+typedef void (*btf_trace_rwmmio_write)(void *, unsigned long, unsigned long, u64, u8, volatile void *);
+
+typedef void (*btf_trace_rwmmio_post_write)(void *, unsigned long, unsigned long, u64, u8, volatile void *);
+
+typedef void (*btf_trace_rwmmio_read)(void *, unsigned long, unsigned long, u8, volatile const void *);
+
+typedef void (*btf_trace_rwmmio_post_read)(void *, unsigned long, unsigned long, u64, u8, volatile const void *);
+
+struct trace_event_raw_rwmmio_rw_template {
+	struct trace_entry ent;
+	unsigned long caller;
+	unsigned long caller0;
+	unsigned long addr;
+	u64 val;
+	u8 width;
+	char __data[0];
+};
+
+struct trace_event_raw_rwmmio_read {
+	struct trace_entry ent;
+	unsigned long caller;
+	unsigned long caller0;
+	unsigned long addr;
+	u8 width;
+	char __data[0];
+};
+
+struct trace_event_raw_rwmmio_post_read {
+	struct trace_entry ent;
+	unsigned long caller;
+	unsigned long caller0;
+	unsigned long addr;
+	u64 val;
+	u8 width;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rwmmio_rw_template {};
+
+struct trace_event_data_offsets_rwmmio_read {};
+
+struct trace_event_data_offsets_rwmmio_post_read {};
+
+enum assoc_array_walk_status {
+	assoc_array_walk_tree_empty = 0,
+	assoc_array_walk_found_terminal_node = 1,
+	assoc_array_walk_found_wrong_shortcut = 2,
+};
+
+struct assoc_array_walk_result {
+	struct {
+		struct assoc_array_node *node;
+		int level;
+		int slot;
+	} terminal_node;
+	struct {
+		struct assoc_array_shortcut *shortcut;
+		int level;
+		int sc_level;
+		unsigned long sc_segments;
+		unsigned long dissimilarity;
+	} wrong_shortcut;
+};
+
+struct assoc_array_delete_collapse_context {
+	struct assoc_array_node *node;
+	const void *skip_leaf;
+	int slot;
+};
+
+struct linear_range {
+	unsigned int min;
+	unsigned int min_sel;
+	unsigned int max_sel;
+	unsigned int step;
+};
+
+struct xxh32_state {
+	uint32_t total_len_32;
+	uint32_t large_len;
+	uint32_t v1;
+	uint32_t v2;
+	uint32_t v3;
+	uint32_t v4;
+	uint32_t mem32[4];
+	uint32_t memsize;
+};
+
+struct gen_pool_chunk {
+	struct list_head next_chunk;
+	atomic_long_t avail;
+	phys_addr_t phys_addr;
+	void *owner;
+	unsigned long start_addr;
+	unsigned long end_addr;
+	unsigned long bits[0];
+};
+
+struct genpool_data_align {
+	int align;
+};
+
+struct genpool_data_fixed {
+	unsigned long offset;
+};
+
+typedef enum {
+	HEAD = 0,
+	FLAGS = 1,
+	TIME = 2,
+	OS = 3,
+	EXLEN = 4,
+	EXTRA = 5,
+	NAME = 6,
+	COMMENT = 7,
+	HCRC = 8,
+	DICTID = 9,
+	DICT = 10,
+	TYPE = 11,
+	TYPEDO = 12,
+	STORED = 13,
+	COPY = 14,
+	TABLE = 15,
+	LENLENS = 16,
+	CODELENS = 17,
+	LEN = 18,
+	LENEXT = 19,
+	DIST = 20,
+	DISTEXT = 21,
+	MATCH = 22,
+	LIT = 23,
+	CHECK = 24,
+	LENGTH = 25,
+	DONE = 26,
+	BAD = 27,
+	MEM = 28,
+	SYNC = 29,
+} inflate_mode;
+
+typedef struct {
+	unsigned char op;
+	unsigned char bits;
+	unsigned short val;
+} code;
+
+struct inflate_state {
+	inflate_mode mode;
+	int last;
+	int wrap;
+	int havedict;
+	int flags;
+	unsigned int dmax;
+	unsigned long check;
+	unsigned long total;
+	unsigned int wbits;
+	unsigned int wsize;
+	unsigned int whave;
+	unsigned int write;
+	unsigned char *window;
+	unsigned long hold;
+	unsigned int bits;
+	unsigned int length;
+	unsigned int offset;
+	unsigned int extra;
+	const code *lencode;
+	const code *distcode;
+	unsigned int lenbits;
+	unsigned int distbits;
+	unsigned int ncode;
+	unsigned int nlen;
+	unsigned int ndist;
+	unsigned int have;
+	code *next;
+	unsigned short lens[320];
+	unsigned short work[288];
+	code codes[2048];
+};
+
+struct inflate_workspace {
+	struct inflate_state inflate_state;
+	unsigned char working_window[32768];
+};
+
+typedef enum {
+	CODES = 0,
+	LENS = 1,
+	DISTS = 2,
+} codetype;
+
+typedef unsigned int uInt;
+
+typedef unsigned short ush;
+
+typedef enum {
+	need_more = 0,
+	block_done = 1,
+	finish_started = 2,
+	finish_done = 3,
+} block_state;
+
+struct deflate_state;
+
+typedef struct deflate_state deflate_state;
+
+typedef block_state (*compress_func)(deflate_state *, int);
+
+struct config_s {
+	ush good_length;
+	ush max_lazy;
+	ush nice_length;
+	ush max_chain;
+	compress_func func;
+};
+
+typedef struct config_s config;
+
+typedef unsigned long ulg;
+
+typedef ush Pos;
+
+typedef unsigned int IPos;
+
+struct ct_data_s {
+	union {
+		ush freq;
+		ush code;
+	} fc;
+	union {
+		ush dad;
+		ush len;
+	} dl;
+};
+
+typedef struct ct_data_s ct_data;
+
+struct static_tree_desc_s;
+
+typedef struct static_tree_desc_s static_tree_desc;
+
+struct tree_desc_s {
+	ct_data *dyn_tree;
+	int max_code;
+	static_tree_desc *stat_desc;
+};
+
+typedef unsigned char uch;
+
+struct deflate_state {
+	z_streamp strm;
+	int status;
+	Byte *pending_buf;
+	ulg pending_buf_size;
+	Byte *pending_out;
+	int pending;
+	int noheader;
+	Byte data_type;
+	Byte method;
+	int last_flush;
+	uInt w_size;
+	uInt w_bits;
+	uInt w_mask;
+	Byte *window;
+	ulg window_size;
+	Pos *prev;
+	Pos *head;
+	uInt ins_h;
+	uInt hash_size;
+	uInt hash_bits;
+	uInt hash_mask;
+	uInt hash_shift;
+	long block_start;
+	uInt match_length;
+	IPos prev_match;
+	int match_available;
+	uInt strstart;
+	uInt match_start;
+	uInt lookahead;
+	uInt prev_length;
+	uInt max_chain_length;
+	uInt max_lazy_match;
+	int level;
+	int strategy;
+	uInt good_match;
+	int nice_match;
+	struct ct_data_s dyn_ltree[573];
+	struct ct_data_s dyn_dtree[61];
+	struct ct_data_s bl_tree[39];
+	struct tree_desc_s l_desc;
+	struct tree_desc_s d_desc;
+	struct tree_desc_s bl_desc;
+	ush bl_count[16];
+	int heap[573];
+	int heap_len;
+	int heap_max;
+	uch depth[573];
+	uch *l_buf;
+	uInt lit_bufsize;
+	uInt last_lit;
+	ush *d_buf;
+	ulg opt_len;
+	ulg static_len;
+	ulg compressed_len;
+	uInt matches;
+	int last_eob_len;
+	ush bi_buf;
+	int bi_valid;
+};
+
+struct static_tree_desc_s {
+	const ct_data *static_tree;
+	const int *extra_bits;
+	int extra_base;
+	int elems;
+	int max_length;
+};
+
+struct deflate_workspace {
+	deflate_state deflate_memory;
+	Byte *window_memory;
+	Pos *prev_memory;
+	Pos *head_memory;
+	char *overlay_memory;
+};
+
+typedef struct deflate_workspace deflate_workspace;
+
+typedef struct tree_desc_s tree_desc;
+
+enum {
+	RS_DECODE_LAMBDA = 0,
+	RS_DECODE_SYN = 1,
+	RS_DECODE_B = 2,
+	RS_DECODE_T = 3,
+	RS_DECODE_OMEGA = 4,
+	RS_DECODE_ROOT = 5,
+	RS_DECODE_REG = 6,
+	RS_DECODE_LOC = 7,
+	RS_DECODE_NUM_BUFFERS = 8,
+};
+
+typedef struct {
+	uint32_t hashTable[4096];
+	uint32_t currentOffset;
+	uint32_t initCheck;
+	const uint8_t *dictionary;
+	uint8_t *bufferStart;
+	uint32_t dictSize;
+} LZ4_stream_t_internal;
+
+typedef union {
+	unsigned long long table[2052];
+	LZ4_stream_t_internal internal_donotuse;
+} LZ4_stream_t;
+
+typedef uintptr_t uptrval;
+
+typedef enum {
+	noLimit = 0,
+	limitedOutput = 1,
+} limitedOutput_directive;
+
+typedef enum {
+	byPtr = 0,
+	byU32 = 1,
+	byU16 = 2,
+} tableType_t;
+
+typedef enum {
+	noDict = 0,
+	withPrefix64k = 1,
+	usingExtDict = 2,
+} dict_directive;
+
+typedef enum {
+	noDictIssue = 0,
+	dictSmall = 1,
+} dictIssue_directive;
+
+typedef struct {
+	unsigned int hashTable[32768];
+	unsigned short chainTable[65536];
+	const unsigned char *end;
+	const unsigned char *base;
+	const unsigned char *dictBase;
+	unsigned int dictLimit;
+	unsigned int lowLimit;
+	unsigned int nextToUpdate;
+	unsigned int compressionLevel;
+} LZ4HC_CCtx_internal;
+
+typedef union {
+	size_t table[32774];
+	LZ4HC_CCtx_internal internal_donotuse;
+} LZ4_streamHC_t;
+
+typedef enum {
+	endOnOutputSize = 0,
+	endOnInputSize = 1,
+} endCondition_directive;
+
+typedef enum {
+	decode_full_block = 0,
+	partial_decode = 1,
+} earlyEnd_directive;
+
+typedef struct {
+	const uint8_t *externalDict;
+	size_t extDictSize;
+	const uint8_t *prefixEnd;
+	size_t prefixSize;
+} LZ4_streamDecode_t_internal;
+
+typedef union {
+	unsigned long long table[4];
+	LZ4_streamDecode_t_internal internal_donotuse;
+} LZ4_streamDecode_t;
+
+typedef enum {
+	ZSTD_reset_session_only = 1,
+	ZSTD_reset_parameters = 2,
+	ZSTD_reset_session_and_parameters = 3,
+} ZSTD_ResetDirective;
+
+typedef enum {
+	ZSTD_c_compressionLevel = 100,
+	ZSTD_c_windowLog = 101,
+	ZSTD_c_hashLog = 102,
+	ZSTD_c_chainLog = 103,
+	ZSTD_c_searchLog = 104,
+	ZSTD_c_minMatch = 105,
+	ZSTD_c_targetLength = 106,
+	ZSTD_c_strategy = 107,
+	ZSTD_c_enableLongDistanceMatching = 160,
+	ZSTD_c_ldmHashLog = 161,
+	ZSTD_c_ldmMinMatch = 162,
+	ZSTD_c_ldmBucketSizeLog = 163,
+	ZSTD_c_ldmHashRateLog = 164,
+	ZSTD_c_contentSizeFlag = 200,
+	ZSTD_c_checksumFlag = 201,
+	ZSTD_c_dictIDFlag = 202,
+	ZSTD_c_nbWorkers = 400,
+	ZSTD_c_jobSize = 401,
+	ZSTD_c_overlapLog = 402,
+	ZSTD_c_experimentalParam1 = 500,
+	ZSTD_c_experimentalParam2 = 10,
+	ZSTD_c_experimentalParam3 = 1000,
+	ZSTD_c_experimentalParam4 = 1001,
+	ZSTD_c_experimentalParam5 = 1002,
+	ZSTD_c_experimentalParam6 = 1003,
+	ZSTD_c_experimentalParam7 = 1004,
+	ZSTD_c_experimentalParam8 = 1005,
+	ZSTD_c_experimentalParam9 = 1006,
+	ZSTD_c_experimentalParam10 = 1007,
+	ZSTD_c_experimentalParam11 = 1008,
+	ZSTD_c_experimentalParam12 = 1009,
+	ZSTD_c_experimentalParam13 = 1010,
+	ZSTD_c_experimentalParam14 = 1011,
+	ZSTD_c_experimentalParam15 = 1012,
+} ZSTD_cParameter;
+
+typedef struct {
+	int deltaFindState;
+	U32 deltaNbBits;
+} FSE_symbolCompressionTransform;
+
+typedef struct {
+	ptrdiff_t value;
+	const void *stateTable;
+	const void *symbolTT;
+	unsigned int stateLog;
+} FSE_CState_t;
+
+typedef struct {
+	size_t bitContainer;
+	unsigned int bitPos;
+	char *startPtr;
+	char *ptr;
+	char *endPtr;
+} BIT_CStream_t;
+
+typedef enum {
+	trustInput = 0,
+	checkMaxSymbolValue = 1,
+} HIST_checkInput_e;
+
+typedef s16 int16_t;
+
+typedef int16_t S16;
+
+typedef struct {
+	FSE_CTable CTable[59];
+	U32 scratchBuffer[41];
+	unsigned int count[13];
+	S16 norm[13];
+} HUF_CompressWeightsWksp;
+
+typedef struct {
+	HUF_CompressWeightsWksp wksp;
+	BYTE bitsToWeight[13];
+	BYTE huffWeight[255];
+} HUF_WriteCTableWksp;
+
+struct nodeElt_s {
+	U32 count;
+	U16 parent;
+	BYTE byte;
+	BYTE nbBits;
+};
+
+typedef struct nodeElt_s nodeElt;
+
+typedef nodeElt huffNodeTable[512];
+
+typedef struct {
+	U16 base;
+	U16 curr;
+} rankPos;
+
+typedef struct {
+	huffNodeTable huffNodeTbl;
+	rankPos rankPosition[192];
+} HUF_buildCTable_wksp_tables;
+
+typedef struct {
+	unsigned int count[256];
+	HUF_CElt CTable[257];
+	union {
+		HUF_buildCTable_wksp_tables buildCTable_wksp;
+		HUF_WriteCTableWksp writeCTable_wksp;
+		U32 hist_wksp[1024];
+	} wksps;
+} HUF_compress_tables_t;
+
+typedef struct {
+	size_t bitContainer[2];
+	size_t bitPos[2];
+	BYTE *startPtr;
+	BYTE *ptr;
+	BYTE *endPtr;
+} HUF_CStream_t;
+
+typedef enum {
+	HUF_singleStream = 0,
+	HUF_fourStreams = 1,
+} HUF_nbStreams_e;
+
+typedef size_t (*ZSTD_blockCompressor)(ZSTD_matchState_t *, seqStore_t *, U32 *, const void *, size_t);
+
+struct seqDef_s {
+	U32 offBase;
+	U16 litLength;
+	U16 mlBase;
+};
+
+typedef uint8_t U8;
+
+enum {
+	ZSTDbss_compress = 0,
+	ZSTDbss_noCompress = 1,
+};
+
+struct ZSTD_CDict_s {
+	const void *dictContent;
+	size_t dictContentSize;
+	ZSTD_dictContentType_e dictContentType;
+	U32 *entropyWorkspace;
+	ZSTD_cwksp workspace;
+	ZSTD_matchState_t matchState;
+	ZSTD_compressedBlockState_t cBlockState;
+	ZSTD_customMem customMem;
+	U32 dictID;
+	int compressionLevel;
+	ZSTD_paramSwitch_e useRowMatchFinder;
+};
+
+typedef struct {
+	size_t error;
+	int lowerBound;
+	int upperBound;
+} ZSTD_bounds;
+
+typedef enum {
+	ZSTD_dlm_byCopy = 0,
+	ZSTD_dlm_byRef = 1,
+} ZSTD_dictLoadMethod_e;
+
+typedef enum {
+	ZSTD_cpm_noAttachDict = 0,
+	ZSTD_cpm_attachDict = 1,
+	ZSTD_cpm_createCDict = 2,
+	ZSTD_cpm_unknown = 3,
+} ZSTD_cParamMode_e;
+
+typedef enum {
+	ZSTD_e_continue = 0,
+	ZSTD_e_flush = 1,
+	ZSTD_e_end = 2,
+} ZSTD_EndDirective;
+
+typedef struct {
+	U32 LLtype;
+	U32 Offtype;
+	U32 MLtype;
+	size_t size;
+	size_t lastCountSize;
+} ZSTD_symbolEncodingTypeStats_t;
+
+struct repcodes_s {
+	U32 rep[3];
+};
+
+typedef struct repcodes_s repcodes_t;
+
+typedef struct {
+	U32 *splitLocations;
+	size_t idx;
+} seqStoreSplits;
+
+typedef enum {
+	ZSTD_dtlm_fast = 0,
+	ZSTD_dtlm_full = 1,
+} ZSTD_dictTableLoadMethod_e;
+
+typedef struct {
+	U32 idx;
+	U32 posInSequence;
+	size_t posInSrc;
+} ZSTD_sequencePosition;
+
+typedef size_t (*ZSTD_sequenceCopier)(ZSTD_CCtx *, ZSTD_sequencePosition *, const ZSTD_Sequence * const, size_t, const void *, size_t);
+
+typedef enum {
+	ZSTD_defaultDisallowed = 0,
+	ZSTD_defaultAllowed = 1,
+} ZSTD_defaultPolicy_e;
+
+typedef enum {
+	ZSTD_noDict = 0,
+	ZSTD_extDict = 1,
+	ZSTD_dictMatchState = 2,
+	ZSTD_dedicatedDictSearch = 3,
+} ZSTD_dictMode_e;
+
+typedef enum {
+	ZSTD_no_overlap = 0,
+	ZSTD_overlap_src_before_dst = 1,
+} ZSTD_overlap_e;
+
+typedef struct {
+	unsigned long long ingested;
+	unsigned long long consumed;
+	unsigned long long produced;
+	unsigned long long flushed;
+	unsigned int currentJobID;
+	unsigned int nbActiveWorkers;
+} ZSTD_frameProgression;
+
+typedef enum {
+	ZSTDcrp_makeClean = 0,
+	ZSTDcrp_leaveDirty = 1,
+} ZSTD_compResetPolicy_e;
+
+typedef enum {
+	ZSTDirp_continue = 0,
+	ZSTDirp_reset = 1,
+} ZSTD_indexResetPolicy_e;
+
+typedef enum {
+	ZSTD_resetTarget_CDict = 0,
+	ZSTD_resetTarget_CCtx = 1,
+} ZSTD_resetTarget_e;
+
+typedef struct {
+	S16 norm[53];
+	U32 wksp[285];
+} ZSTD_BuildCTableWksp;
+
+typedef struct {
+	U32 litLength;
+	U32 matchLength;
+} ZSTD_sequenceLength;
+
+typedef enum {
+	search_hashChain = 0,
+	search_binaryTree = 1,
+	search_rowHash = 2,
+} searchMethod_e;
+
+typedef U64 ZSTD_VecMask;
+
+typedef struct {
+	U64 rolling;
+	U64 stopMask;
+} ldmRollingHashState_t;
+
+typedef U32 (*ZSTD_getAllMatchesFn)(ZSTD_match_t *, ZSTD_matchState_t *, U32 *, const BYTE *, const BYTE *, const U32 *, const U32, const U32);
+
+typedef struct {
+	rawSeqStore_t seqStore;
+	U32 startPosInBlock;
+	U32 endPosInBlock;
+	U32 offset;
+} ZSTD_optLdm_t;
+
+typedef ZSTD_frameHeader zstd_frame_header;
+
+typedef struct {
+	U32 tableTime;
+	U32 decode256Time;
+} algo_time_t;
+
+typedef struct {
+	BYTE nbBits;
+	BYTE byte;
+} HUF_DEltX1;
+
+typedef struct {
+	U32 rankVal[13];
+	U32 rankStart[13];
+	U32 statsWksp[218];
+	BYTE symbols[256];
+	BYTE huffWeight[256];
+} HUF_ReadDTableX1_Workspace;
+
+typedef struct {
+	U16 sequence;
+	BYTE nbBits;
+	BYTE length;
+} HUF_DEltX2;
+
+typedef U32 rankValCol_t[13];
+
+typedef struct {
+	BYTE symbol;
+} sortedSymbol_t;
+
+typedef struct {
+	rankValCol_t rankVal[12];
+	U32 rankStats[13];
+	U32 rankStart0[15];
+	sortedSymbol_t sortedSymbol[256];
+	BYTE weightList[256];
+	U32 calleeWksp[218];
+} HUF_ReadDTableX2_Workspace;
+
+typedef struct {
+	BYTE maxTableLog;
+	BYTE tableType;
+	BYTE tableLog;
+	BYTE reserved;
+} DTableDesc;
+
+typedef struct {
+	size_t bitContainer;
+	unsigned int bitsConsumed;
+	const char *ptr;
+	const char *start;
+	const char *limitPtr;
+} BIT_DStream_t;
+
+typedef enum {
+	BIT_DStream_unfinished = 0,
+	BIT_DStream_endOfBuffer = 1,
+	BIT_DStream_completed = 2,
+	BIT_DStream_overflow = 3,
+} BIT_DStream_status;
+
+struct ZSTD_DDict_s {
+	void *dictBuffer;
+	const void *dictContent;
+	size_t dictSize;
+	ZSTD_entropyDTables_t entropy;
+	U32 dictID;
+	U32 entropyPresent;
+	ZSTD_customMem cMem;
+};
+
+typedef struct {
+	size_t compressedSize;
+	unsigned long long decompressedBound;
+} ZSTD_frameSizeInfo;
+
+typedef struct {
+	blockType_e blockType;
+	U32 lastBlock;
+	U32 origSize;
+} blockProperties_t;
+
+typedef enum {
+	not_streaming = 0,
+	is_streaming = 1,
+} streaming_operation;
+
+typedef enum {
+	ZSTD_d_windowLogMax = 100,
+	ZSTD_d_experimentalParam1 = 1000,
+	ZSTD_d_experimentalParam2 = 1001,
+	ZSTD_d_experimentalParam3 = 1002,
+	ZSTD_d_experimentalParam4 = 1003,
+} ZSTD_dParameter;
+
+typedef enum {
+	ZSTDnit_frameHeader = 0,
+	ZSTDnit_blockHeader = 1,
+	ZSTDnit_block = 2,
+	ZSTDnit_lastBlock = 3,
+	ZSTDnit_checksum = 4,
+	ZSTDnit_skippableFrame = 5,
+} ZSTD_nextInputType_e;
+
+typedef enum {
+	ZSTD_lo_isRegularOffset = 0,
+	ZSTD_lo_isLongOffset = 1,
+} ZSTD_longOffset_e;
+
+typedef struct {
+	U32 fastMode;
+	U32 tableLog;
+} ZSTD_seqSymbol_header;
+
+typedef struct {
+	size_t litLength;
+	size_t matchLength;
+	size_t offset;
+} seq_t;
+
+typedef struct {
+	size_t state;
+	const ZSTD_seqSymbol *table;
+} ZSTD_fseState;
+
+typedef struct {
+	BIT_DStream_t DStream;
+	ZSTD_fseState stateLL;
+	ZSTD_fseState stateOffb;
+	ZSTD_fseState stateML;
+	size_t prevOffset[3];
+} seqState_t;
+
+typedef ZSTD_ErrorCode ERR_enum;
+
+typedef unsigned int FSE_DTable;
+
+typedef struct {
+	U16 tableLog;
+	U16 fastMode;
+} FSE_DTableHeader;
+
+typedef struct {
+	unsigned short newState;
+	unsigned char symbol;
+	unsigned char nbBits;
+} FSE_decode_t;
+
+typedef struct {
+	short ncount[256];
+	FSE_DTable dtable[0];
+} FSE_DecompressWksp;
+
+typedef struct {
+	size_t state;
+	const void *table;
+} FSE_DState_t;
+
+enum xz_ret {
+	XZ_OK = 0,
+	XZ_STREAM_END = 1,
+	XZ_UNSUPPORTED_CHECK = 2,
+	XZ_MEM_ERROR = 3,
+	XZ_MEMLIMIT_ERROR = 4,
+	XZ_FORMAT_ERROR = 5,
+	XZ_OPTIONS_ERROR = 6,
+	XZ_DATA_ERROR = 7,
+	XZ_BUF_ERROR = 8,
+};
+
+typedef uint64_t vli_type;
+
+struct xz_dec_hash {
+	vli_type unpadded;
+	vli_type uncompressed;
+	uint32_t crc32;
+};
+
+enum xz_check {
+	XZ_CHECK_NONE = 0,
+	XZ_CHECK_CRC32 = 1,
+	XZ_CHECK_CRC64 = 4,
+	XZ_CHECK_SHA256 = 10,
+};
+
+enum xz_mode {
+	XZ_SINGLE = 0,
+	XZ_PREALLOC = 1,
+	XZ_DYNALLOC = 2,
+};
+
+struct xz_dec_lzma2;
+
+struct xz_dec_bcj;
+
+struct xz_dec {
+	enum {
+		SEQ_STREAM_HEADER = 0,
+		SEQ_BLOCK_START = 1,
+		SEQ_BLOCK_HEADER = 2,
+		SEQ_BLOCK_UNCOMPRESS = 3,
+		SEQ_BLOCK_PADDING = 4,
+		SEQ_BLOCK_CHECK = 5,
+		SEQ_INDEX = 6,
+		SEQ_INDEX_PADDING = 7,
+		SEQ_INDEX_CRC32 = 8,
+		SEQ_STREAM_FOOTER = 9,
+	} sequence;
+	uint32_t pos;
+	vli_type vli;
+	size_t in_start;
+	size_t out_start;
+	uint32_t crc32;
+	enum xz_check check_type;
+	enum xz_mode mode;
+	bool allow_buf_error;
+	struct {
+		vli_type compressed;
+		vli_type uncompressed;
+		uint32_t size;
+	} block_header;
+	struct {
+		vli_type compressed;
+		vli_type uncompressed;
+		vli_type count;
+		struct xz_dec_hash hash;
+	} block;
+	struct {
+		enum {
+			SEQ_INDEX_COUNT = 0,
+			SEQ_INDEX_UNPADDED = 1,
+			SEQ_INDEX_UNCOMPRESSED = 2,
+		} sequence;
+		vli_type size;
+		vli_type count;
+		struct xz_dec_hash hash;
+	} index;
+	struct {
+		size_t pos;
+		size_t size;
+		uint8_t buf[1024];
+	} temp;
+	struct xz_dec_lzma2 *lzma2;
+	struct xz_dec_bcj *bcj;
+	bool bcj_active;
+};
+
+struct xz_buf {
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_size;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+};
+
+enum lzma2_seq {
+	SEQ_CONTROL = 0,
+	SEQ_UNCOMPRESSED_1 = 1,
+	SEQ_UNCOMPRESSED_2 = 2,
+	SEQ_COMPRESSED_0 = 3,
+	SEQ_COMPRESSED_1 = 4,
+	SEQ_PROPERTIES = 5,
+	SEQ_LZMA_PREPARE = 6,
+	SEQ_LZMA_RUN = 7,
+	SEQ_COPY = 8,
+};
+
+enum lzma_state {
+	STATE_LIT_LIT = 0,
+	STATE_MATCH_LIT_LIT = 1,
+	STATE_REP_LIT_LIT = 2,
+	STATE_SHORTREP_LIT_LIT = 3,
+	STATE_MATCH_LIT = 4,
+	STATE_REP_LIT = 5,
+	STATE_SHORTREP_LIT = 6,
+	STATE_LIT_MATCH = 7,
+	STATE_LIT_LONGREP = 8,
+	STATE_LIT_SHORTREP = 9,
+	STATE_NONLIT_MATCH = 10,
+	STATE_NONLIT_REP = 11,
+};
+
+struct rc_dec {
+	uint32_t range;
+	uint32_t code;
+	uint32_t init_bytes_left;
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_limit;
+};
+
+struct dictionary {
+	uint8_t *buf;
+	size_t start;
+	size_t pos;
+	size_t full;
+	size_t limit;
+	size_t end;
+	uint32_t size;
+	uint32_t size_max;
+	uint32_t allocated;
+	enum xz_mode mode;
+};
+
+struct lzma2_dec {
+	enum lzma2_seq sequence;
+	enum lzma2_seq next_sequence;
+	uint32_t uncompressed;
+	uint32_t compressed;
+	bool need_dict_reset;
+	bool need_props;
+};
+
+struct lzma_len_dec {
+	uint16_t choice;
+	uint16_t choice2;
+	uint16_t low[128];
+	uint16_t mid[128];
+	uint16_t high[256];
+};
+
+struct lzma_dec {
+	uint32_t rep0;
+	uint32_t rep1;
+	uint32_t rep2;
+	uint32_t rep3;
+	enum lzma_state state;
+	uint32_t len;
+	uint32_t lc;
+	uint32_t literal_pos_mask;
+	uint32_t pos_mask;
+	uint16_t is_match[192];
+	uint16_t is_rep[12];
+	uint16_t is_rep0[12];
+	uint16_t is_rep1[12];
+	uint16_t is_rep2[12];
+	uint16_t is_rep0_long[192];
+	uint16_t dist_slot[256];
+	uint16_t dist_special[114];
+	uint16_t dist_align[16];
+	struct lzma_len_dec match_len_dec;
+	struct lzma_len_dec rep_len_dec;
+	uint16_t literal[12288];
+};
+
+struct xz_dec_lzma2 {
+	struct rc_dec rc;
+	struct dictionary dict;
+	struct lzma2_dec lzma2;
+	struct lzma_dec lzma;
+	struct {
+		uint32_t size;
+		uint8_t buf[63];
+	} temp;
+};
+
+struct xz_dec_bcj {
+	enum {
+		BCJ_X86 = 4,
+		BCJ_POWERPC = 5,
+		BCJ_IA64 = 6,
+		BCJ_ARM = 7,
+		BCJ_ARMTHUMB = 8,
+		BCJ_SPARC = 9,
+	} type;
+	enum xz_ret ret;
+	bool single_call;
+	uint32_t pos;
+	uint32_t x86_prev_mask;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+	struct {
+		size_t filtered;
+		size_t size;
+		uint8_t buf[16];
+	} temp;
+};
+
+struct ts_config;
+
+struct ts_state;
+
+struct ts_ops {
+	const char *name;
+	struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
+	unsigned int (*find)(struct ts_config *, struct ts_state *);
+	void (*destroy)(struct ts_config *);
+	void * (*get_pattern)(struct ts_config *);
+	unsigned int (*get_pattern_len)(struct ts_config *);
+	struct module *owner;
+	struct list_head list;
+};
+
+struct ts_config {
+	struct ts_ops *ops;
+	int flags;
+	unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);
+	void (*finish)(struct ts_config *, struct ts_state *);
+};
+
+struct ts_state {
+	unsigned int offset;
+	char cb[48];
+};
+
+struct ts_linear_state {
+	unsigned int len;
+	const void *data;
+};
+
+struct ts_kmp {
+	u8 *pattern;
+	unsigned int pattern_len;
+	unsigned int prefix_tbl[0];
+};
+
+struct ts_bm {
+	u8 *pattern;
+	unsigned int patlen;
+	unsigned int bad_shift[256];
+	unsigned int good_shift[0];
+};
+
+enum {
+	TS_FSM_SPECIFIC = 0,
+	TS_FSM_WILDCARD = 1,
+	TS_FSM_DIGIT = 2,
+	TS_FSM_XDIGIT = 3,
+	TS_FSM_PRINT = 4,
+	TS_FSM_ALPHA = 5,
+	TS_FSM_ALNUM = 6,
+	TS_FSM_ASCII = 7,
+	TS_FSM_CNTRL = 8,
+	TS_FSM_GRAPH = 9,
+	TS_FSM_LOWER = 10,
+	TS_FSM_UPPER = 11,
+	TS_FSM_PUNCT = 12,
+	TS_FSM_SPACE = 13,
+	__TS_FSM_TYPE_MAX = 14,
+};
+
+enum {
+	TS_FSM_SINGLE = 0,
+	TS_FSM_PERHAPS = 1,
+	TS_FSM_ANY = 2,
+	TS_FSM_MULTI = 3,
+	TS_FSM_HEAD_IGNORE = 4,
+	__TS_FSM_RECUR_MAX = 5,
+};
+
+struct ts_fsm_token {
+	__u16 type;
+	__u8 recur;
+	__u8 value;
+};
+
+struct ts_fsm {
+	unsigned int ntokens;
+	struct ts_fsm_token tokens[0];
+};
+
+struct ddebug_table {
+	struct list_head link;
+	struct list_head maps;
+	const char *mod_name;
+	unsigned int num_ddebugs;
+	struct _ddebug *ddebugs;
+};
+
+struct ddebug_class_param {
+	union {
+		unsigned long *bits;
+		unsigned int *lvl;
+	};
+	char flags[8];
+	const struct ddebug_class_map *map;
+};
+
+struct ddebug_query {
+	const char *filename;
+	const char *module;
+	const char *function;
+	const char *format;
+	const char *class_string;
+	unsigned int first_lineno;
+	unsigned int last_lineno;
+};
+
+struct flag_settings {
+	unsigned int flags;
+	unsigned int mask;
+};
+
+struct flagsbuf {
+	char buf[8];
+};
+
+struct ddebug_iter {
+	struct ddebug_table *table;
+	int idx;
+};
+
+enum nla_policy_validation {
+	NLA_VALIDATE_NONE = 0,
+	NLA_VALIDATE_RANGE = 1,
+	NLA_VALIDATE_RANGE_WARN_TOO_LONG = 2,
+	NLA_VALIDATE_MIN = 3,
+	NLA_VALIDATE_MAX = 4,
+	NLA_VALIDATE_MASK = 5,
+	NLA_VALIDATE_RANGE_PTR = 6,
+	NLA_VALIDATE_FUNCTION = 7,
+};
+
+enum {
+	NLA_UNSPEC = 0,
+	NLA_U8 = 1,
+	NLA_U16 = 2,
+	NLA_U32 = 3,
+	NLA_U64 = 4,
+	NLA_STRING = 5,
+	NLA_FLAG = 6,
+	NLA_MSECS = 7,
+	NLA_NESTED = 8,
+	NLA_NESTED_ARRAY = 9,
+	NLA_NUL_STRING = 10,
+	NLA_BINARY = 11,
+	NLA_S8 = 12,
+	NLA_S16 = 13,
+	NLA_S32 = 14,
+	NLA_S64 = 15,
+	NLA_BITFIELD32 = 16,
+	NLA_REJECT = 17,
+	NLA_BE16 = 18,
+	NLA_BE32 = 19,
+	__NLA_TYPE_MAX = 20,
+};
+
+enum netlink_validation {
+	NL_VALIDATE_LIBERAL = 0,
+	NL_VALIDATE_TRAILING = 1,
+	NL_VALIDATE_MAXTYPE = 2,
+	NL_VALIDATE_UNSPEC = 4,
+	NL_VALIDATE_STRICT_ATTRS = 8,
+	NL_VALIDATE_NESTED = 16,
+};
+
+struct nla_bitfield32 {
+	__u32 value;
+	__u32 selector;
+};
+
+struct cpu_rmap {
+	struct kref refcount;
+	u16 size;
+	void **obj;
+	struct {
+		u16 index;
+		u16 dist;
+	} near[0];
+};
+
+struct irq_glue {
+	struct irq_affinity_notify notify;
+	struct cpu_rmap *rmap;
+	u16 index;
+};
+
+struct sg_pool {
+	size_t size;
+	char *name;
+	struct kmem_cache *slab;
+	mempool_t *pool;
+};
+
+union handle_parts {
+	depot_stack_handle_t handle;
+	struct {
+		u32 pool_index: 16;
+		u32 offset: 10;
+		u32 valid: 1;
+		u32 extra: 5;
+	};
+};
+
+struct stack_record {
+	struct stack_record *next;
+	u32 hash;
+	u32 size;
+	union handle_parts handle;
+	unsigned long entries[0];
+};
+
+enum asn1_opcode {
+	ASN1_OP_MATCH = 0,
+	ASN1_OP_MATCH_OR_SKIP = 1,
+	ASN1_OP_MATCH_ACT = 2,
+	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
+	ASN1_OP_MATCH_JUMP = 4,
+	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
+	ASN1_OP_MATCH_ANY = 8,
+	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
+	ASN1_OP_MATCH_ANY_ACT = 10,
+	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
+	ASN1_OP_COND_MATCH_OR_SKIP = 17,
+	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
+	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
+	ASN1_OP_COND_MATCH_ANY = 24,
+	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
+	ASN1_OP_COND_MATCH_ANY_ACT = 26,
+	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
+	ASN1_OP_COND_FAIL = 28,
+	ASN1_OP_COMPLETE = 29,
+	ASN1_OP_ACT = 30,
+	ASN1_OP_MAYBE_ACT = 31,
+	ASN1_OP_END_SEQ = 32,
+	ASN1_OP_END_SET = 33,
+	ASN1_OP_END_SEQ_OF = 34,
+	ASN1_OP_END_SET_OF = 35,
+	ASN1_OP_END_SEQ_ACT = 36,
+	ASN1_OP_END_SET_ACT = 37,
+	ASN1_OP_END_SEQ_OF_ACT = 38,
+	ASN1_OP_END_SET_OF_ACT = 39,
+	ASN1_OP_RETURN = 40,
+	ASN1_OP__NR = 41,
+};
+
+enum asn1_method {
+	ASN1_PRIM = 0,
+	ASN1_CONS = 1,
+};
+
+struct font_desc {
+	int idx;
+	const char *name;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	const void *data;
+	int pref;
+};
+
+struct font_data {
+	unsigned int extra[4];
+	const unsigned char data[0];
+};
+
+typedef u16 ucs2_char_t;
+
+enum ubsan_checks {
+	ubsan_add_overflow = 0,
+	ubsan_builtin_unreachable = 1,
+	ubsan_cfi_check_fail = 2,
+	ubsan_divrem_overflow = 3,
+	ubsan_dynamic_type_cache_miss = 4,
+	ubsan_float_cast_overflow = 5,
+	ubsan_function_type_mismatch = 6,
+	ubsan_implicit_conversion = 7,
+	ubsan_invalid_builtin = 8,
+	ubsan_invalid_objc_cast = 9,
+	ubsan_load_invalid_value = 10,
+	ubsan_missing_return = 11,
+	ubsan_mul_overflow = 12,
+	ubsan_negate_overflow = 13,
+	ubsan_nullability_arg = 14,
+	ubsan_nullability_return = 15,
+	ubsan_nonnull_arg = 16,
+	ubsan_nonnull_return = 17,
+	ubsan_out_of_bounds = 18,
+	ubsan_pointer_overflow = 19,
+	ubsan_shift_out_of_bounds = 20,
+	ubsan_sub_overflow = 21,
+	ubsan_type_mismatch = 22,
+	ubsan_alignment_assumption = 23,
+	ubsan_vla_bound_not_positive = 24,
+};
+
+struct node_groups {
+	unsigned int id;
+	union {
+		unsigned int ngroups;
+		unsigned int ncpus;
+	};
+};
+
+typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
+
+struct tegra_ictlr_soc {
+	unsigned int num_ictlrs;
+};
+
+struct tegra_ictlr_info {
+	void *base[6];
+	u32 cop_ier[6];
+	u32 cop_iep[6];
+	u32 cpu_ier[6];
+	u32 cpu_iep[6];
+	u32 ictlr_wake_mask[6];
+};
+
+struct sun6i_r_intc_variant {
+	u32 first_mux_irq;
+	u32 nr_mux_irqs;
+	u32 mux_valid[4];
+};
+
+struct sunxi_sc_nmi_reg_offs {
+	u32 ctrl;
+	u32 pend;
+	u32 enable;
+};
+
+enum {
+	SUNXI_SRC_TYPE_LEVEL_LOW = 0,
+	SUNXI_SRC_TYPE_EDGE_FALLING = 1,
+	SUNXI_SRC_TYPE_LEVEL_HIGH = 2,
+	SUNXI_SRC_TYPE_EDGE_RISING = 3,
+};
+
+union gic_base {
+	void *common_base;
+	void __attribute__((btf_type_tag("percpu"))) **percpu_base;
+};
+
+struct gic_chip_data {
+	union gic_base dist_base;
+	union gic_base cpu_base;
+	void *raw_dist_base;
+	void *raw_cpu_base;
+	u32 percpu_offset;
+	u32 saved_spi_enable[32];
+	u32 saved_spi_active[32];
+	u32 saved_spi_conf[64];
+	u32 saved_spi_target[255];
+	u32 __attribute__((btf_type_tag("percpu"))) *saved_ppi_enable;
+	u32 __attribute__((btf_type_tag("percpu"))) *saved_ppi_active;
+	u32 __attribute__((btf_type_tag("percpu"))) *saved_ppi_conf;
+	struct irq_domain *domain;
+	unsigned int gic_irqs;
+};
+
+struct gic_quirk {
+	const char *desc;
+	const char *compatible;
+	const char *property;
+	bool (*init)(void *);
+	u32 iidr;
+	u32 mask;
+};
+
+struct gic_clk_data {
+	unsigned int num_clocks;
+	const char * const *clocks;
+};
+
+struct clk_bulk_data {
+	const char *id;
+	struct clk *clk;
+};
+
+struct gic_chip_data;
+
+struct gic_chip_pm {
+	struct gic_chip_data *chip_data;
+	const struct gic_clk_data *clk_data;
+	struct clk_bulk_data *clks;
+};
+
+struct v2m_data {
+	struct list_head entry;
+	struct fwnode_handle *fwnode;
+	struct resource res;
+	void *base;
+	u32 spi_start;
+	u32 nr_spis;
+	u32 spi_offset;
+	unsigned long *bm;
+	u32 flags;
+};
+
+struct rdists {
+	struct {
+		raw_spinlock_t rd_lock;
+		void *rd_base;
+		struct page *pend_page;
+		phys_addr_t phys_base;
+		u64 flags;
+		cpumask_t *vpe_table_mask;
+		void *vpe_l1_base;
+	} *rdist;
+	phys_addr_t prop_table_pa;
+	void *prop_table_va;
+	u64 flags;
+	u32 gicd_typer;
+	u32 gicd_typer2;
+	int cpuhp_memreserve_state;
+	bool has_vlpis;
+	bool has_rvpeid;
+	bool has_direct_lpi;
+	bool has_vpend_valid_dirty;
+};
+
+struct redist_region;
+
+struct partition_desc;
+
+struct gic_chip_data___2 {
+	struct fwnode_handle *fwnode;
+	phys_addr_t dist_phys_base;
+	void *dist_base;
+	struct redist_region *redist_regions;
+	struct rdists rdists;
+	struct irq_domain *domain;
+	u64 redist_stride;
+	u32 nr_redist_regions;
+	u64 flags;
+	bool has_rss;
+	unsigned int ppi_nr;
+	struct partition_desc **ppi_descs;
+};
+
+struct redist_region {
+	void *redist_base;
+	phys_addr_t phys_base;
+	bool single_redist;
+};
+
+enum gic_intid_range {
+	SGI_RANGE = 0,
+	PPI_RANGE = 1,
+	SPI_RANGE = 2,
+	EPPI_RANGE = 3,
+	ESPI_RANGE = 4,
+	LPI_RANGE = 5,
+	__INVALID_RANGE__ = 6,
+};
+
+struct partition_affinity {
+	cpumask_t mask;
+	void *partition_id;
+};
+
+struct mbi_range {
+	u32 spi_start;
+	u32 nr_spis;
+	unsigned long *bm;
+};
+
+struct event_lpi_map {
+	unsigned long *lpi_map;
+	u16 *col_map;
+	irq_hw_number_t lpi_base;
+	int nr_lpis;
+	raw_spinlock_t vlpi_lock;
+	struct its_vm *vm;
+	struct its_vlpi_map *vlpi_maps;
+	int nr_vlpis;
+};
+
+struct its_node;
+
+struct its_device___2 {
+	struct list_head entry;
+	struct its_node *its;
+	struct event_lpi_map event_map;
+	void *itt;
+	u32 nr_ites;
+	u32 device_id;
+	bool shared;
+};
+
+struct its_baser {
+	void *base;
+	u64 val;
+	u32 order;
+	u32 psz;
+};
+
+struct its_cmd_block;
+
+struct its_collection___2;
+
+struct its_node {
+	raw_spinlock_t lock;
+	struct mutex dev_alloc_lock;
+	struct list_head entry;
+	void *base;
+	void *sgir_base;
+	phys_addr_t phys_base;
+	struct its_cmd_block *cmd_base;
+	struct its_cmd_block *cmd_write;
+	struct its_baser tables[8];
+	struct its_collection___2 *collections;
+	struct fwnode_handle *fwnode_handle;
+	u64 (*get_msi_base)(struct its_device___2 *);
+	u64 typer;
+	u64 cbaser_save;
+	u32 ctlr_save;
+	u32 mpidr;
+	struct list_head its_device_list;
+	u64 flags;
+	unsigned long list_nr;
+	int numa_node;
+	unsigned int msi_domain_flags;
+	u32 pre_its_base;
+	int vlpi_redist_offset;
+};
+
+struct its_cmd_block {
+	union {
+		u64 raw_cmd[4];
+		__le64 raw_cmd_le[4];
+	};
+};
+
+struct its_collection___2 {
+	u64 target_address;
+	u16 col_id;
+};
+
+struct cpu_lpi_count {
+	atomic_t managed;
+	atomic_t unmanaged;
+};
+
+enum its_vcpu_info_cmd_type {
+	MAP_VLPI = 0,
+	GET_VLPI = 1,
+	PROP_UPDATE_VLPI = 2,
+	PROP_UPDATE_AND_INV_VLPI = 3,
+	SCHEDULE_VPE = 4,
+	DESCHEDULE_VPE = 5,
+	COMMIT_VPE = 6,
+	INVALL_VPE = 7,
+	PROP_UPDATE_VSGI = 8,
+};
+
+struct lpi_range {
+	struct list_head entry;
+	u32 base_id;
+	u32 span;
+};
+
+struct its_cmd_desc {
+	union {
+		struct {
+			struct its_device___2 *dev;
+			u32 event_id;
+		} its_inv_cmd;
+		struct {
+			struct its_device___2 *dev;
+			u32 event_id;
+		} its_clear_cmd;
+		struct {
+			struct its_device___2 *dev;
+			u32 event_id;
+		} its_int_cmd;
+		struct {
+			struct its_device___2 *dev;
+			int valid;
+		} its_mapd_cmd;
+		struct {
+			struct its_collection___2 *col;
+			int valid;
+		} its_mapc_cmd;
+		struct {
+			struct its_device___2 *dev;
+			u32 phys_id;
+			u32 event_id;
+		} its_mapti_cmd;
+		struct {
+			struct its_device___2 *dev;
+			struct its_collection___2 *col;
+			u32 event_id;
+		} its_movi_cmd;
+		struct {
+			struct its_device___2 *dev;
+			u32 event_id;
+		} its_discard_cmd;
+		struct {
+			struct its_collection___2 *col;
+		} its_invall_cmd;
+		struct {
+			struct its_vpe *vpe;
+		} its_vinvall_cmd;
+		struct {
+			struct its_vpe *vpe;
+			struct its_collection___2 *col;
+			bool valid;
+		} its_vmapp_cmd;
+		struct {
+			struct its_vpe *vpe;
+			struct its_device___2 *dev;
+			u32 virt_id;
+			u32 event_id;
+			bool db_enabled;
+		} its_vmapti_cmd;
+		struct {
+			struct its_vpe *vpe;
+			struct its_device___2 *dev;
+			u32 event_id;
+			bool db_enabled;
+		} its_vmovi_cmd;
+		struct {
+			struct its_vpe *vpe;
+			struct its_collection___2 *col;
+			u16 seq_num;
+			u16 its_list;
+		} its_vmovp_cmd;
+		struct {
+			struct its_vpe *vpe;
+		} its_invdb_cmd;
+		struct {
+			struct its_vpe *vpe;
+			u8 sgi;
+			u8 priority;
+			bool enable;
+			bool group;
+			bool clear;
+		} its_vsgi_cmd;
+	};
+};
+
+struct its_cmd_info {
+	enum its_vcpu_info_cmd_type cmd_type;
+	union {
+		struct its_vlpi_map *map;
+		u8 config;
+		bool req_db;
+		struct {
+			bool g0en;
+			bool g1en;
+		};
+		struct {
+			u8 priority;
+			bool group;
+		};
+	};
+};
+
+typedef struct its_collection___2 * (*its_cmd_builder_t)(struct its_node *, struct its_cmd_block *, struct its_cmd_desc *);
+
+typedef struct its_vpe * (*its_cmd_vbuilder_t)(struct its_node *, struct its_cmd_block *, struct its_cmd_desc *);
+
+struct partition_desc {
+	int nr_parts;
+	struct partition_affinity *parts;
+	struct irq_domain *domain;
+	struct irq_desc *chained_desc;
+	unsigned long *bitmap;
+	struct irq_domain_ops ops;
+};
+
+struct mbigen_device {
+	struct platform_device *pdev;
+	void *base;
+};
+
+typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
+
+struct cs_data {
+	u32 enable_mask;
+	u16 slow_cfg;
+	u16 fast_cfg;
+};
+
+struct ebi2_xmem_prop {
+	const char *prop;
+	u32 max;
+	bool slowreg;
+	u16 shift;
+};
+
+struct of_dev_auxdata {
+	char *compatible;
+	resource_size_t phys_addr;
+	char *name;
+	void *platform_data;
+};
+
+struct simple_pm_bus {
+	struct clk_bulk_data *clks;
+	int num_clks;
+};
+
+enum phy_mode {
+	PHY_MODE_INVALID = 0,
+	PHY_MODE_USB_HOST = 1,
+	PHY_MODE_USB_HOST_LS = 2,
+	PHY_MODE_USB_HOST_FS = 3,
+	PHY_MODE_USB_HOST_HS = 4,
+	PHY_MODE_USB_HOST_SS = 5,
+	PHY_MODE_USB_DEVICE = 6,
+	PHY_MODE_USB_DEVICE_LS = 7,
+	PHY_MODE_USB_DEVICE_FS = 8,
+	PHY_MODE_USB_DEVICE_HS = 9,
+	PHY_MODE_USB_DEVICE_SS = 10,
+	PHY_MODE_USB_OTG = 11,
+	PHY_MODE_UFS_HS_A = 12,
+	PHY_MODE_UFS_HS_B = 13,
+	PHY_MODE_PCIE = 14,
+	PHY_MODE_ETHERNET = 15,
+	PHY_MODE_MIPI_DPHY = 16,
+	PHY_MODE_SATA = 17,
+	PHY_MODE_LVDS = 18,
+	PHY_MODE_DP = 19,
+};
+
+enum phy_media {
+	PHY_MEDIA_DEFAULT = 0,
+	PHY_MEDIA_SR = 1,
+	PHY_MEDIA_DAC = 2,
+};
+
+enum device_link_state {
+	DL_STATE_NONE = -1,
+	DL_STATE_DORMANT = 0,
+	DL_STATE_AVAILABLE = 1,
+	DL_STATE_CONSUMER_PROBE = 2,
+	DL_STATE_ACTIVE = 3,
+	DL_STATE_SUPPLIER_UNBIND = 4,
+};
+
+struct phy;
+
+struct phy_lookup {
+	struct list_head node;
+	const char *dev_id;
+	const char *con_id;
+	struct phy *phy;
+};
+
+struct phy_attrs {
+	u32 bus_width;
+	u32 max_link_rate;
+	enum phy_mode mode;
+};
+
+struct phy_ops;
+
+struct regulator;
+
+struct phy {
+	struct device dev;
+	int id;
+	const struct phy_ops *ops;
+	struct mutex mutex;
+	int init_count;
+	int power_count;
+	struct phy_attrs attrs;
+	struct regulator *pwr;
+	struct dentry *debugfs;
+};
+
+union phy_configure_opts;
+
+struct phy_ops {
+	int (*init)(struct phy *);
+	int (*exit)(struct phy *);
+	int (*power_on)(struct phy *);
+	int (*power_off)(struct phy *);
+	int (*set_mode)(struct phy *, enum phy_mode, int);
+	int (*set_media)(struct phy *, enum phy_media);
+	int (*set_speed)(struct phy *, int);
+	int (*configure)(struct phy *, union phy_configure_opts *);
+	int (*validate)(struct phy *, enum phy_mode, int, union phy_configure_opts *);
+	int (*reset)(struct phy *);
+	int (*calibrate)(struct phy *);
+	void (*release)(struct phy *);
+	struct module *owner;
+};
+
+struct phy_configure_opts_mipi_dphy {
+	unsigned int clk_miss;
+	unsigned int clk_post;
+	unsigned int clk_pre;
+	unsigned int clk_prepare;
+	unsigned int clk_settle;
+	unsigned int clk_term_en;
+	unsigned int clk_trail;
+	unsigned int clk_zero;
+	unsigned int d_term_en;
+	unsigned int eot;
+	unsigned int hs_exit;
+	unsigned int hs_prepare;
+	unsigned int hs_settle;
+	unsigned int hs_skip;
+	unsigned int hs_trail;
+	unsigned int hs_zero;
+	unsigned int init;
+	unsigned int lpx;
+	unsigned int ta_get;
+	unsigned int ta_go;
+	unsigned int ta_sure;
+	unsigned int wakeup;
+	unsigned long hs_clk_rate;
+	unsigned long lp_clk_rate;
+	unsigned char lanes;
+};
+
+struct phy_configure_opts_dp {
+	unsigned int link_rate;
+	unsigned int lanes;
+	unsigned int voltage[4];
+	unsigned int pre[4];
+	u8 ssc: 1;
+	u8 set_rate: 1;
+	u8 set_lanes: 1;
+	u8 set_voltages: 1;
+};
+
+struct phy_configure_opts_lvds {
+	unsigned int bits_per_lane_and_dclk_cycle;
+	unsigned long differential_clk_rate;
+	unsigned int lanes;
+	bool is_slave;
+};
+
+union phy_configure_opts {
+	struct phy_configure_opts_mipi_dphy mipi_dphy;
+	struct phy_configure_opts_dp dp;
+	struct phy_configure_opts_lvds lvds;
+};
+
+struct phy_provider {
+	struct device *dev;
+	struct device_node *children;
+	struct module *owner;
+	struct list_head list;
+	struct phy * (*of_xlate)(struct device *, struct of_phandle_args *);
+};
+
+struct device_link {
+	struct device *supplier;
+	struct list_head s_node;
+	struct device *consumer;
+	struct list_head c_node;
+	struct device link_dev;
+	enum device_link_state status;
+	u32 flags;
+	refcount_t rpm_active;
+	struct kref kref;
+	struct work_struct rm_work;
+	bool supplier_preactivated;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum pinctrl_map_type {
+	PIN_MAP_TYPE_INVALID = 0,
+	PIN_MAP_TYPE_DUMMY_STATE = 1,
+	PIN_MAP_TYPE_MUX_GROUP = 2,
+	PIN_MAP_TYPE_CONFIGS_PIN = 3,
+	PIN_MAP_TYPE_CONFIGS_GROUP = 4,
+};
+
+enum pin_config_param {
+	PIN_CONFIG_BIAS_BUS_HOLD = 0,
+	PIN_CONFIG_BIAS_DISABLE = 1,
+	PIN_CONFIG_BIAS_HIGH_IMPEDANCE = 2,
+	PIN_CONFIG_BIAS_PULL_DOWN = 3,
+	PIN_CONFIG_BIAS_PULL_PIN_DEFAULT = 4,
+	PIN_CONFIG_BIAS_PULL_UP = 5,
+	PIN_CONFIG_DRIVE_OPEN_DRAIN = 6,
+	PIN_CONFIG_DRIVE_OPEN_SOURCE = 7,
+	PIN_CONFIG_DRIVE_PUSH_PULL = 8,
+	PIN_CONFIG_DRIVE_STRENGTH = 9,
+	PIN_CONFIG_DRIVE_STRENGTH_UA = 10,
+	PIN_CONFIG_INPUT_DEBOUNCE = 11,
+	PIN_CONFIG_INPUT_ENABLE = 12,
+	PIN_CONFIG_INPUT_SCHMITT = 13,
+	PIN_CONFIG_INPUT_SCHMITT_ENABLE = 14,
+	PIN_CONFIG_MODE_LOW_POWER = 15,
+	PIN_CONFIG_MODE_PWM = 16,
+	PIN_CONFIG_OUTPUT = 17,
+	PIN_CONFIG_OUTPUT_ENABLE = 18,
+	PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS = 19,
+	PIN_CONFIG_PERSIST_STATE = 20,
+	PIN_CONFIG_POWER_SOURCE = 21,
+	PIN_CONFIG_SKEW_DELAY = 22,
+	PIN_CONFIG_SLEEP_HARDWARE_STATE = 23,
+	PIN_CONFIG_SLEW_RATE = 24,
+	PIN_CONFIG_END = 127,
+	PIN_CONFIG_MAX = 255,
+};
+
+struct pinctrl_desc;
+
+struct pinctrl;
+
+struct pinctrl_state;
+
+struct pinctrl_dev {
+	struct list_head node;
+	struct pinctrl_desc *desc;
+	struct xarray pin_desc_tree;
+	struct xarray pin_group_tree;
+	unsigned int num_groups;
+	struct xarray pin_function_tree;
+	unsigned int num_functions;
+	struct list_head gpio_ranges;
+	struct device *dev;
+	struct module *owner;
+	void *driver_data;
+	struct pinctrl *p;
+	struct pinctrl_state *hog_default;
+	struct pinctrl_state *hog_sleep;
+	struct mutex mutex;
+	struct dentry *device_root;
+};
+
+struct pinctrl_pin_desc;
+
+struct pinctrl_ops;
+
+struct pinmux_ops;
+
+struct pinconf_ops;
+
+struct pinconf_generic_params;
+
+struct pin_config_item;
+
+struct pinctrl_desc {
+	const char *name;
+	const struct pinctrl_pin_desc *pins;
+	unsigned int npins;
+	const struct pinctrl_ops *pctlops;
+	const struct pinmux_ops *pmxops;
+	const struct pinconf_ops *confops;
+	struct module *owner;
+	unsigned int num_custom_params;
+	const struct pinconf_generic_params *custom_params;
+	const struct pin_config_item *custom_conf_items;
+	bool link_consumers;
+};
+
+struct pinctrl_pin_desc {
+	unsigned int number;
+	const char *name;
+	void *drv_data;
+};
+
+struct pinctrl_map;
+
+struct pinctrl_ops {
+	int (*get_groups_count)(struct pinctrl_dev *);
+	const char * (*get_group_name)(struct pinctrl_dev *, unsigned int);
+	int (*get_group_pins)(struct pinctrl_dev *, unsigned int, const unsigned int **, unsigned int *);
+	void (*pin_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
+	int (*dt_node_to_map)(struct pinctrl_dev *, struct device_node *, struct pinctrl_map **, unsigned int *);
+	void (*dt_free_map)(struct pinctrl_dev *, struct pinctrl_map *, unsigned int);
+};
+
+struct dev_pin_info {
+	struct pinctrl *p;
+	struct pinctrl_state *default_state;
+	struct pinctrl_state *init_state;
+	struct pinctrl_state *sleep_state;
+	struct pinctrl_state *idle_state;
+};
+
+struct pinctrl {
+	struct list_head node;
+	struct device *dev;
+	struct list_head states;
+	struct pinctrl_state *state;
+	struct list_head dt_maps;
+	struct kref users;
+};
+
+struct pinctrl_state {
+	struct list_head node;
+	const char *name;
+	struct list_head settings;
+};
+
+struct pinctrl_map_mux {
+	const char *group;
+	const char *function;
+};
+
+struct pinctrl_map_configs {
+	const char *group_or_pin;
+	unsigned long *configs;
+	unsigned int num_configs;
+};
+
+struct pinctrl_map {
+	const char *dev_name;
+	const char *name;
+	enum pinctrl_map_type type;
+	const char *ctrl_dev_name;
+	union {
+		struct pinctrl_map_mux mux;
+		struct pinctrl_map_configs configs;
+	} data;
+};
+
+struct pinctrl_gpio_range;
+
+struct pinmux_ops {
+	int (*request)(struct pinctrl_dev *, unsigned int);
+	int (*free)(struct pinctrl_dev *, unsigned int);
+	int (*get_functions_count)(struct pinctrl_dev *);
+	const char * (*get_function_name)(struct pinctrl_dev *, unsigned int);
+	int (*get_function_groups)(struct pinctrl_dev *, unsigned int, const char * const **, unsigned int *);
+	int (*set_mux)(struct pinctrl_dev *, unsigned int, unsigned int);
+	int (*gpio_request_enable)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int);
+	void (*gpio_disable_free)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int);
+	int (*gpio_set_direction)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int, bool);
+	bool strict;
+};
+
+struct pinconf_ops {
+	bool is_generic;
+	int (*pin_config_get)(struct pinctrl_dev *, unsigned int, unsigned long *);
+	int (*pin_config_set)(struct pinctrl_dev *, unsigned int, unsigned long *, unsigned int);
+	int (*pin_config_group_get)(struct pinctrl_dev *, unsigned int, unsigned long *);
+	int (*pin_config_group_set)(struct pinctrl_dev *, unsigned int, unsigned long *, unsigned int);
+	void (*pin_config_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
+	void (*pin_config_group_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);
+	void (*pin_config_config_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned long);
+};
+
+struct pinconf_generic_params {
+	const char * const property;
+	enum pin_config_param param;
+	u32 default_value;
+};
+
+struct pin_config_item {
+	const enum pin_config_param param;
+	const char * const display;
+	const char * const format;
+	bool has_arg;
+};
+
+struct gpio_chip;
+
+struct pinctrl_gpio_range {
+	struct list_head node;
+	const char *name;
+	unsigned int id;
+	unsigned int base;
+	unsigned int pin_base;
+	unsigned int npins;
+	const unsigned int *pins;
+	struct gpio_chip *gc;
+};
+
+union gpio_irq_fwspec;
+
+struct gpio_irq_chip {
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	struct fwnode_handle *fwnode;
+	struct irq_domain *parent_domain;
+	int (*child_to_parent_hwirq)(struct gpio_chip *, unsigned int, unsigned int, unsigned int *, unsigned int *);
+	int (*populate_parent_alloc_arg)(struct gpio_chip *, union gpio_irq_fwspec *, unsigned int, unsigned int);
+	unsigned int (*child_offset_to_irq)(struct gpio_chip *, unsigned int);
+	struct irq_domain_ops child_irq_domain_ops;
+	irq_flow_handler_t handler;
+	unsigned int default_type;
+	struct lock_class_key *lock_key;
+	struct lock_class_key *request_key;
+	irq_flow_handler_t parent_handler;
+	union {
+		void *parent_handler_data;
+		void **parent_handler_data_array;
+	};
+	unsigned int num_parents;
+	unsigned int *parents;
+	unsigned int *map;
+	bool threaded;
+	bool per_parent_data;
+	bool initialized;
+	bool domain_is_allocated_externally;
+	int (*init_hw)(struct gpio_chip *);
+	void (*init_valid_mask)(struct gpio_chip *, unsigned long *, unsigned int);
+	unsigned long *valid_mask;
+	unsigned int first;
+	void (*irq_enable)(struct irq_data *);
+	void (*irq_disable)(struct irq_data *);
+	void (*irq_unmask)(struct irq_data *);
+	void (*irq_mask)(struct irq_data *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct gpio_device;
+
+struct gpio_chip {
+	const char *label;
+	struct gpio_device *gpiodev;
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	struct module *owner;
+	int (*request)(struct gpio_chip *, unsigned int);
+	void (*free)(struct gpio_chip *, unsigned int);
+	int (*get_direction)(struct gpio_chip *, unsigned int);
+	int (*direction_input)(struct gpio_chip *, unsigned int);
+	int (*direction_output)(struct gpio_chip *, unsigned int, int);
+	int (*get)(struct gpio_chip *, unsigned int);
+	int (*get_multiple)(struct gpio_chip *, unsigned long *, unsigned long *);
+	void (*set)(struct gpio_chip *, unsigned int, int);
+	void (*set_multiple)(struct gpio_chip *, unsigned long *, unsigned long *);
+	int (*set_config)(struct gpio_chip *, unsigned int, unsigned long);
+	int (*to_irq)(struct gpio_chip *, unsigned int);
+	void (*dbg_show)(struct seq_file *, struct gpio_chip *);
+	int (*init_valid_mask)(struct gpio_chip *, unsigned long *, unsigned int);
+	int (*add_pin_ranges)(struct gpio_chip *);
+	int (*en_hw_timestamp)(struct gpio_chip *, u32, unsigned long);
+	int (*dis_hw_timestamp)(struct gpio_chip *, u32, unsigned long);
+	int base;
+	u16 ngpio;
+	u16 offset;
+	const char * const *names;
+	bool can_sleep;
+	unsigned long (*read_reg)(void *);
+	void (*write_reg)(void *, unsigned long);
+	bool be_bits;
+	void *reg_dat;
+	void *reg_set;
+	void *reg_clr;
+	void *reg_dir_out;
+	void *reg_dir_in;
+	bool bgpio_dir_unreadable;
+	int bgpio_bits;
+	raw_spinlock_t bgpio_lock;
+	unsigned long bgpio_data;
+	unsigned long bgpio_dir;
+	struct gpio_irq_chip irq;
+	unsigned long *valid_mask;
+	unsigned int of_gpio_n_cells;
+	int (*of_xlate)(struct gpio_chip *, const struct of_phandle_args *, u32 *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct gpio_desc;
+
+struct gpio_device {
+	struct device dev;
+	struct cdev chrdev;
+	int id;
+	struct device *mockdev;
+	struct module *owner;
+	struct gpio_chip *chip;
+	struct gpio_desc *descs;
+	int base;
+	u16 ngpio;
+	const char *label;
+	void *data;
+	struct list_head list;
+	struct blocking_notifier_head line_state_notifier;
+	struct blocking_notifier_head device_notifier;
+	struct rw_semaphore sem;
+	struct list_head pin_ranges;
+	u64 android_kabi_reserved1;
+};
+
+struct gpio_desc {
+	struct gpio_device *gdev;
+	unsigned long flags;
+	const char *label;
+	const char *name;
+	unsigned int debounce_period_us;
+	u64 android_kabi_reserved1;
+};
+
+union gpio_irq_fwspec {
+	struct irq_fwspec fwspec;
+	msi_alloc_info_t msiinfo;
+};
+
+struct pinctrl_maps {
+	struct list_head node;
+	const struct pinctrl_map *maps;
+	unsigned int num_maps;
+};
+
+struct pinctrl_setting_mux {
+	unsigned int group;
+	unsigned int func;
+};
+
+struct pinctrl_setting_configs {
+	unsigned int group_or_pin;
+	unsigned long *configs;
+	unsigned int num_configs;
+};
+
+struct pinctrl_setting {
+	struct list_head node;
+	enum pinctrl_map_type type;
+	struct pinctrl_dev *pctldev;
+	const char *dev_name;
+	union {
+		struct pinctrl_setting_mux mux;
+		struct pinctrl_setting_configs configs;
+	} data;
+};
+
+struct pin_desc {
+	struct pinctrl_dev *pctldev;
+	const char *name;
+	bool dynamic_name;
+	void *drv_data;
+	unsigned int mux_usecount;
+	const char *mux_owner;
+	const struct pinctrl_setting_mux *mux_setting;
+	const char *gpio_owner;
+};
+
+struct pctldev;
+
+struct group_desc {
+	const char *name;
+	int *pins;
+	int num_pins;
+	void *data;
+};
+
+struct function_desc {
+	const char *name;
+	const char * const *group_names;
+	int num_group_names;
+	void *data;
+};
+
+struct pinctrl_dt_map {
+	struct list_head node;
+	struct pinctrl_dev *pctldev;
+	struct pinctrl_map *map;
+	unsigned int num_maps;
+};
+
+struct pcs_conf_type {
+	const char *name;
+	enum pin_config_param param;
+};
+
+struct pcs_soc_data {
+	unsigned int flags;
+	int irq;
+	unsigned int irq_enable_mask;
+	unsigned int irq_status_mask;
+	void (*rearm)();
+};
+
+struct pcs_gpiofunc_range {
+	unsigned int offset;
+	unsigned int npins;
+	unsigned int gpiofunc;
+	struct list_head node;
+};
+
+struct pcs_data {
+	struct pinctrl_pin_desc *pa;
+	int cur;
+};
+
+struct pcs_device {
+	struct resource *res;
+	void *base;
+	void *saved_vals;
+	unsigned int size;
+	struct device *dev;
+	struct device_node *np;
+	struct pinctrl_dev *pctl;
+	unsigned int flags;
+	struct property *missing_nr_pinctrl_cells;
+	struct pcs_soc_data socdata;
+	raw_spinlock_t lock;
+	struct mutex mutex;
+	unsigned int width;
+	unsigned int fmask;
+	unsigned int fshift;
+	unsigned int foff;
+	unsigned int fmax;
+	bool bits_per_mux;
+	unsigned int bits_per_pin;
+	struct pcs_data pins;
+	struct list_head gpiofuncs;
+	struct list_head irqs;
+	struct irq_chip chip;
+	struct irq_domain *domain;
+	struct pinctrl_desc desc;
+	unsigned int (*read)(void *);
+	void (*write)(unsigned int, void *);
+};
+
+struct pcs_interrupt {
+	void *reg;
+	irq_hw_number_t hwirq;
+	unsigned int irq;
+	struct list_head node;
+};
+
+struct pcs_func_vals {
+	void *reg;
+	unsigned int val;
+	unsigned int mask;
+};
+
+struct pcs_conf_vals;
+
+struct pcs_function {
+	const char *name;
+	struct pcs_func_vals *vals;
+	unsigned int nvals;
+	const char **pgnames;
+	int npgnames;
+	struct pcs_conf_vals *conf;
+	int nconfs;
+	struct list_head node;
+};
+
+struct pcs_conf_vals {
+	enum pin_config_param param;
+	unsigned int val;
+	unsigned int enable;
+	unsigned int disable;
+	unsigned int mask;
+};
+
+struct pcs_pdata {
+	int irq;
+	void (*rearm)();
+};
+
+enum tegra_pinconf_param {
+	TEGRA_PINCONF_PARAM_PULL = 0,
+	TEGRA_PINCONF_PARAM_TRISTATE = 1,
+	TEGRA_PINCONF_PARAM_ENABLE_INPUT = 2,
+	TEGRA_PINCONF_PARAM_OPEN_DRAIN = 3,
+	TEGRA_PINCONF_PARAM_LOCK = 4,
+	TEGRA_PINCONF_PARAM_IORESET = 5,
+	TEGRA_PINCONF_PARAM_RCV_SEL = 6,
+	TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE = 7,
+	TEGRA_PINCONF_PARAM_SCHMITT = 8,
+	TEGRA_PINCONF_PARAM_LOW_POWER_MODE = 9,
+	TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH = 10,
+	TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH = 11,
+	TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING = 12,
+	TEGRA_PINCONF_PARAM_SLEW_RATE_RISING = 13,
+	TEGRA_PINCONF_PARAM_DRIVE_TYPE = 14,
+};
+
+struct cfg_param {
+	const char *property;
+	enum tegra_pinconf_param param;
+};
+
+struct tegra_pinctrl_soc_data;
+
+struct tegra_function;
+
+struct tegra_pmx {
+	struct device *dev;
+	struct pinctrl_dev *pctl;
+	const struct tegra_pinctrl_soc_data *soc;
+	struct tegra_function *functions;
+	const char **group_pins;
+	struct pinctrl_gpio_range gpio_range;
+	struct pinctrl_desc desc;
+	int nbanks;
+	void **regs;
+	u32 *backup_regs;
+};
+
+struct tegra_pingroup;
+
+struct tegra_pinctrl_soc_data {
+	unsigned int ngpios;
+	const char *gpio_compatible;
+	const struct pinctrl_pin_desc *pins;
+	unsigned int npins;
+	const char * const *functions;
+	unsigned int nfunctions;
+	const struct tegra_pingroup *groups;
+	unsigned int ngroups;
+	bool hsm_in_mux;
+	bool schmitt_in_mux;
+	bool drvtype_in_mux;
+	bool sfsel_in_mux;
+};
+
+struct tegra_pingroup {
+	const char *name;
+	const unsigned int *pins;
+	u8 npins;
+	u8 funcs[4];
+	s32 mux_reg;
+	s32 pupd_reg;
+	s32 tri_reg;
+	s32 drv_reg;
+	u32 mux_bank: 2;
+	u32 pupd_bank: 2;
+	u32 tri_bank: 2;
+	u32 drv_bank: 2;
+	s32 mux_bit: 6;
+	s32 pupd_bit: 6;
+	s32 tri_bit: 6;
+	s32 einput_bit: 6;
+	s32 odrain_bit: 6;
+	s32 lock_bit: 6;
+	s32 ioreset_bit: 6;
+	s32 rcv_sel_bit: 6;
+	s32 hsm_bit: 6;
+	long: 2;
+	s32 sfsel_bit: 6;
+	s32 schmitt_bit: 6;
+	s32 lpmd_bit: 6;
+	s32 drvdn_bit: 6;
+	s32 drvup_bit: 6;
+	int: 2;
+	s32 slwr_bit: 6;
+	s32 slwf_bit: 6;
+	s32 lpdr_bit: 6;
+	s32 drvtype_bit: 6;
+	s32 drvdn_width: 6;
+	long: 2;
+	s32 drvup_width: 6;
+	s32 slwr_width: 6;
+	s32 slwf_width: 6;
+	u32 parked_bitmask;
+};
+
+struct tegra_function {
+	const char *name;
+	const char **groups;
+	unsigned int ngroups;
+};
+
+struct tegra_xusb_padctl_function;
+
+struct tegra_xusb_padctl_lane;
+
+struct tegra_xusb_padctl_soc {
+	const struct pinctrl_pin_desc *pins;
+	unsigned int num_pins;
+	const struct tegra_xusb_padctl_function *functions;
+	unsigned int num_functions;
+	const struct tegra_xusb_padctl_lane *lanes;
+	unsigned int num_lanes;
+};
+
+struct tegra_xusb_padctl_function {
+	const char *name;
+	const char * const *groups;
+	unsigned int num_groups;
+};
+
+struct tegra_xusb_padctl_lane {
+	const char *name;
+	unsigned int offset;
+	unsigned int shift;
+	unsigned int mask;
+	unsigned int iddq;
+	const unsigned int *funcs;
+	unsigned int num_funcs;
+};
+
+enum tegra_xusb_padctl_param {
+	TEGRA_XUSB_PADCTL_IDDQ = 0,
+};
+
+struct tegra_xusb_padctl_property {
+	const char *name;
+	enum tegra_xusb_padctl_param param;
+};
+
+struct reset_control;
+
+struct tegra_xusb_padctl {
+	struct device *dev;
+	void *regs;
+	struct mutex lock;
+	struct reset_control *rst;
+	const struct tegra_xusb_padctl_soc *soc;
+	struct pinctrl_dev *pinctrl;
+	struct pinctrl_desc desc;
+	struct phy_provider *provider;
+	struct phy *phys[2];
+	unsigned int enable;
+};
+
+typedef void (*btf_trace_gpio_direction)(void *, unsigned int, int, int);
+
+typedef void (*btf_trace_gpio_value)(void *, unsigned int, int, int);
+
+enum gpio_lookup_flags {
+	GPIO_ACTIVE_HIGH = 0,
+	GPIO_ACTIVE_LOW = 1,
+	GPIO_OPEN_DRAIN = 2,
+	GPIO_OPEN_SOURCE = 4,
+	GPIO_PERSISTENT = 0,
+	GPIO_TRANSITORY = 8,
+	GPIO_PULL_UP = 16,
+	GPIO_PULL_DOWN = 32,
+	GPIO_PULL_DISABLE = 64,
+	GPIO_LOOKUP_FLAGS_DEFAULT = 0,
+};
+
+enum gpiod_flags {
+	GPIOD_ASIS = 0,
+	GPIOD_IN = 1,
+	GPIOD_OUT_LOW = 3,
+	GPIOD_OUT_HIGH = 7,
+	GPIOD_OUT_LOW_OPEN_DRAIN = 11,
+	GPIOD_OUT_HIGH_OPEN_DRAIN = 15,
+};
+
+enum {
+	GPIOLINE_CHANGED_REQUESTED = 1,
+	GPIOLINE_CHANGED_RELEASED = 2,
+	GPIOLINE_CHANGED_CONFIG = 3,
+};
+
+struct gpio_pin_range {
+	struct list_head node;
+	struct pinctrl_dev *pctldev;
+	struct pinctrl_gpio_range range;
+};
+
+struct trace_event_raw_gpio_direction {
+	struct trace_entry ent;
+	unsigned int gpio;
+	int in;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_gpio_value {
+	struct trace_entry ent;
+	unsigned int gpio;
+	int get;
+	int value;
+	char __data[0];
+};
+
+struct gpiod_hog {
+	struct list_head list;
+	const char *chip_label;
+	u16 chip_hwnum;
+	const char *line_name;
+	unsigned long lflags;
+	int dflags;
+};
+
+struct gpiod_lookup {
+	const char *key;
+	u16 chip_hwnum;
+	const char *con_id;
+	unsigned int idx;
+	unsigned long flags;
+};
+
+struct gpiod_lookup_table {
+	struct list_head list;
+	const char *dev_id;
+	struct gpiod_lookup table[0];
+};
+
+typedef struct {
+	spinlock_t *lock;
+	unsigned long flags;
+} class_spinlock_irqsave_t;
+
+struct gpio_array;
+
+struct gpio_descs {
+	struct gpio_array *info;
+	unsigned int ndescs;
+	struct gpio_desc *desc[0];
+};
+
+struct gpio_array {
+	struct gpio_desc **desc;
+	unsigned int size;
+	struct gpio_chip *chip;
+	unsigned long *get_mask;
+	unsigned long *set_mask;
+	u64 android_kabi_reserved1;
+	unsigned long invert_mask[0];
+};
+
+struct trace_event_data_offsets_gpio_direction {};
+
+struct trace_event_data_offsets_gpio_value {};
+
+struct gpio {
+	unsigned int gpio;
+	unsigned long flags;
+	const char *label;
+};
+
+enum of_gpio_flags {
+	OF_GPIO_ACTIVE_LOW = 1,
+	OF_GPIO_SINGLE_ENDED = 2,
+	OF_GPIO_OPEN_DRAIN = 4,
+	OF_GPIO_TRANSITORY = 8,
+	OF_GPIO_PULL_UP = 16,
+	OF_GPIO_PULL_DOWN = 32,
+	OF_GPIO_PULL_DISABLE = 64,
+};
+
+typedef struct gpio_desc * (*of_find_gpio_quirk)(struct device_node *, const char *, unsigned int, enum of_gpio_flags *);
+
+struct of_rename_gpio {
+	const char *con_id;
+	const char *legacy_id;
+	const char *compatible;
+};
+
+enum gpio_v2_line_flag {
+	GPIO_V2_LINE_FLAG_USED = 1,
+	GPIO_V2_LINE_FLAG_ACTIVE_LOW = 2,
+	GPIO_V2_LINE_FLAG_INPUT = 4,
+	GPIO_V2_LINE_FLAG_OUTPUT = 8,
+	GPIO_V2_LINE_FLAG_EDGE_RISING = 16,
+	GPIO_V2_LINE_FLAG_EDGE_FALLING = 32,
+	GPIO_V2_LINE_FLAG_OPEN_DRAIN = 64,
+	GPIO_V2_LINE_FLAG_OPEN_SOURCE = 128,
+	GPIO_V2_LINE_FLAG_BIAS_PULL_UP = 256,
+	GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN = 512,
+	GPIO_V2_LINE_FLAG_BIAS_DISABLED = 1024,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME = 2048,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE = 4096,
+};
+
+enum gpio_v2_line_changed_type {
+	GPIO_V2_LINE_CHANGED_REQUESTED = 1,
+	GPIO_V2_LINE_CHANGED_RELEASED = 2,
+	GPIO_V2_LINE_CHANGED_CONFIG = 3,
+};
+
+enum gpio_v2_line_attr_id {
+	GPIO_V2_LINE_ATTR_ID_FLAGS = 1,
+	GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES = 2,
+	GPIO_V2_LINE_ATTR_ID_DEBOUNCE = 3,
+};
+
+enum gpio_v2_line_event_id {
+	GPIO_V2_LINE_EVENT_RISING_EDGE = 1,
+	GPIO_V2_LINE_EVENT_FALLING_EDGE = 2,
+};
+
+struct gpioevent_data {
+	__u64 timestamp;
+	__u32 id;
+};
+
+struct lineevent_state {
+	struct gpio_device *gdev;
+	const char *label;
+	struct gpio_desc *desc;
+	u32 eflags;
+	int irq;
+	wait_queue_head_t wait;
+	struct notifier_block device_unregistered_nb;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpioevent_data *type;
+			const struct gpioevent_data *const_type;
+			char (*rectype)[0];
+			struct gpioevent_data *ptr;
+			const struct gpioevent_data *ptr_const;
+		};
+		struct gpioevent_data buf[16];
+	} events;
+	u64 timestamp;
+};
+
+struct linereq;
+
+struct line {
+	struct gpio_desc *desc;
+	struct linereq *req;
+	unsigned int irq;
+	u64 edflags;
+	u64 timestamp_ns;
+	u32 req_seqno;
+	u32 line_seqno;
+	struct delayed_work work;
+	unsigned int sw_debounced;
+	unsigned int level;
+};
+
+struct gpio_v2_line_event {
+	__u64 timestamp_ns;
+	__u32 id;
+	__u32 offset;
+	__u32 seqno;
+	__u32 line_seqno;
+	__u32 padding[6];
+};
+
+struct linereq {
+	struct gpio_device *gdev;
+	const char *label;
+	u32 num_lines;
+	wait_queue_head_t wait;
+	struct notifier_block device_unregistered_nb;
+	u32 event_buffer_size;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpio_v2_line_event *type;
+			const struct gpio_v2_line_event *const_type;
+			char (*rectype)[0];
+			struct gpio_v2_line_event *ptr;
+			const struct gpio_v2_line_event *ptr_const;
+		};
+		struct gpio_v2_line_event buf[0];
+	} events;
+	atomic_t seqno;
+	struct mutex config_mutex;
+	struct line lines[0];
+};
+
+struct gpio_v2_line_attribute {
+	__u32 id;
+	__u32 padding;
+	union {
+		__u64 flags;
+		__u64 values;
+		__u32 debounce_period_us;
+	};
+};
+
+struct gpio_v2_line_info {
+	char name[32];
+	char consumer[32];
+	__u32 offset;
+	__u32 num_attrs;
+	__u64 flags;
+	struct gpio_v2_line_attribute attrs[10];
+	__u32 padding[4];
+};
+
+struct gpio_v2_line_info_changed {
+	struct gpio_v2_line_info info;
+	__u64 timestamp_ns;
+	__u32 event_type;
+	__u32 padding[5];
+};
+
+struct gpio_chardev_data {
+	struct gpio_device *gdev;
+	wait_queue_head_t wait;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpio_v2_line_info_changed *type;
+			const struct gpio_v2_line_info_changed *const_type;
+			char (*rectype)[0];
+			struct gpio_v2_line_info_changed *ptr;
+			const struct gpio_v2_line_info_changed *ptr_const;
+		};
+		struct gpio_v2_line_info_changed buf[32];
+	} events;
+	struct notifier_block lineinfo_changed_nb;
+	struct notifier_block device_unregistered_nb;
+	unsigned long *watched_lines;
+	atomic_t watch_abi_version;
+};
+
+typedef ssize_t (*read_fn)(struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+
+struct gpioline_info {
+	__u32 line_offset;
+	__u32 flags;
+	char name[32];
+	char consumer[32];
+};
+
+struct gpioline_info_changed {
+	struct gpioline_info info;
+	__u64 timestamp;
+	__u32 event_type;
+	__u32 padding[5];
+};
+
+typedef __poll_t (*poll_fn)(struct file *, struct poll_table_struct *);
+
+typedef long (*ioctl_fn)(struct file *, unsigned int, unsigned long);
+
+struct gpio_v2_line_config_attribute {
+	struct gpio_v2_line_attribute attr;
+	__u64 mask;
+};
+
+struct gpio_v2_line_config {
+	__u64 flags;
+	__u32 num_attrs;
+	__u32 padding[5];
+	struct gpio_v2_line_config_attribute attrs[10];
+};
+
+struct gpio_v2_line_request {
+	__u32 offsets[64];
+	char consumer[32];
+	struct gpio_v2_line_config config;
+	__u32 num_lines;
+	__u32 event_buffer_size;
+	__u32 padding[5];
+	__s32 fd;
+};
+
+struct gpiochip_info {
+	char name[32];
+	char label[32];
+	__u32 lines;
+};
+
+struct gpioevent_request {
+	__u32 lineoffset;
+	__u32 handleflags;
+	__u32 eventflags;
+	char consumer_label[32];
+	int fd;
+};
+
+struct gpiohandle_request {
+	__u32 lineoffsets[64];
+	__u32 flags;
+	__u8 default_values[64];
+	char consumer_label[32];
+	__u32 lines;
+	int fd;
+};
+
+struct linehandle_state {
+	struct gpio_device *gdev;
+	const char *label;
+	struct gpio_desc *descs[64];
+	u32 num_descs;
+};
+
+struct gpiohandle_data {
+	__u8 values[64];
+};
+
+struct gpiohandle_config {
+	__u32 flags;
+	__u8 default_values[64];
+	__u32 padding[4];
+};
+
+struct gpio_v2_line_values {
+	__u64 bits;
+	__u64 mask;
+};
+
+struct software_node {
+	const char *name;
+	const struct software_node *parent;
+	const struct property_entry *properties;
+};
+
+struct bgpio_pdata {
+	const char *label;
+	int base;
+	int ngpio;
+};
+
+struct amba_device;
+
+struct amba_id;
+
+struct amba_driver {
+	struct device_driver drv;
+	int (*probe)(struct amba_device *, const struct amba_id *);
+	void (*remove)(struct amba_device *);
+	void (*shutdown)(struct amba_device *);
+	const struct amba_id *id_table;
+	bool driver_managed_dma;
+	u64 android_kabi_reserved1;
+};
+
+struct amba_cs_uci_id {
+	unsigned int devarch;
+	unsigned int devarch_mask;
+	unsigned int devtype;
+	void *data;
+};
+
+struct amba_device {
+	struct device dev;
+	struct resource res;
+	struct clk *pclk;
+	struct device_dma_parameters dma_parms;
+	unsigned int periphid;
+	struct mutex periphid_lock;
+	unsigned int cid;
+	struct amba_cs_uci_id uci;
+	unsigned int irq[9];
+	const char *driver_override;
+	u64 android_kabi_reserved1;
+};
+
+struct amba_id {
+	unsigned int id;
+	unsigned int mask;
+	void *data;
+};
+
+struct pl061_context_save_regs {
+	u8 gpio_data;
+	u8 gpio_dir;
+	u8 gpio_is;
+	u8 gpio_ibe;
+	u8 gpio_iev;
+	u8 gpio_ie;
+};
+
+struct pl061 {
+	raw_spinlock_t lock;
+	void *base;
+	struct gpio_chip gc;
+	int parent_irq;
+	struct pl061_context_save_regs csave_regs;
+};
+
+struct pwm_device;
+
+struct pwm_state;
+
+typedef void (*btf_trace_pwm_apply)(void *, struct pwm_device *, const struct pwm_state *, int);
+
+enum pwm_polarity {
+	PWM_POLARITY_NORMAL = 0,
+	PWM_POLARITY_INVERSED = 1,
+};
+
+struct pwm_args {
+	u64 period;
+	enum pwm_polarity polarity;
+};
+
+struct pwm_state {
+	u64 period;
+	u64 duty_cycle;
+	enum pwm_polarity polarity;
+	bool enabled;
+	bool usage_power;
+};
+
+struct pwm_chip;
+
+struct pwm_device {
+	const char *label;
+	unsigned long flags;
+	unsigned int hwpwm;
+	unsigned int pwm;
+	struct pwm_chip *chip;
+	void *chip_data;
+	struct pwm_args args;
+	struct pwm_state state;
+	struct pwm_state last;
+	u64 android_kabi_reserved1;
+};
+
+struct pwm_ops;
+
+struct pwm_chip {
+	struct device *dev;
+	const struct pwm_ops *ops;
+	int base;
+	unsigned int npwm;
+	struct pwm_device * (*of_xlate)(struct pwm_chip *, const struct of_phandle_args *);
+	unsigned int of_pwm_n_cells;
+	struct list_head list;
+	struct pwm_device *pwms;
+	u64 android_kabi_reserved1;
+};
+
+struct pwm_capture;
+
+struct pwm_ops {
+	int (*request)(struct pwm_chip *, struct pwm_device *);
+	void (*free)(struct pwm_chip *, struct pwm_device *);
+	int (*capture)(struct pwm_chip *, struct pwm_device *, struct pwm_capture *, unsigned long);
+	int (*apply)(struct pwm_chip *, struct pwm_device *, const struct pwm_state *);
+	int (*get_state)(struct pwm_chip *, struct pwm_device *, struct pwm_state *);
+	struct module *owner;
+	u64 android_kabi_reserved1;
+};
+
+struct pwm_capture {
+	unsigned int period;
+	unsigned int duty_cycle;
+};
+
+typedef void (*btf_trace_pwm_get)(void *, struct pwm_device *, const struct pwm_state *, int);
+
+enum {
+	PWMF_REQUESTED = 0,
+	PWMF_EXPORTED = 1,
+};
+
+struct pwm_lookup {
+	struct list_head list;
+	const char *provider;
+	unsigned int index;
+	const char *dev_id;
+	const char *con_id;
+	unsigned int period;
+	enum pwm_polarity polarity;
+	const char *module;
+};
+
+struct trace_event_raw_pwm {
+	struct trace_entry ent;
+	struct pwm_device *pwm;
+	u64 period;
+	u64 duty_cycle;
+	enum pwm_polarity polarity;
+	bool enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_pwm {};
+
+struct pwm_export {
+	struct device child;
+	struct pwm_device *pwm;
+	struct mutex lock;
+	struct pwm_state suspend;
+};
+
+enum {
+	pci_channel_io_normal = 1,
+	pci_channel_io_frozen = 2,
+	pci_channel_io_perm_failure = 3,
+};
+
+struct rcec_ea {
+	u8 nextbusn;
+	u8 lastbusn;
+	u32 bitmap;
+};
+
+struct pci_sriov {
+	int pos;
+	int nres;
+	u32 cap;
+	u16 ctrl;
+	u16 total_VFs;
+	u16 initial_VFs;
+	u16 num_VFs;
+	u16 offset;
+	u16 stride;
+	u16 vf_device;
+	u32 pgsz;
+	u8 link;
+	u8 max_VF_buses;
+	u16 driver_max_VFs;
+	struct pci_dev *dev;
+	struct pci_dev *self;
+	u32 class;
+	u8 hdr_type;
+	u16 subsystem_vendor;
+	u16 subsystem_device;
+	resource_size_t barsz[6];
+	bool drivers_autoprobe;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef u64 pci_bus_addr_t;
+
+struct pci_bus_region {
+	pci_bus_addr_t start;
+	pci_bus_addr_t end;
+};
+
+enum pci_fixup_pass {
+	pci_fixup_early = 0,
+	pci_fixup_header = 1,
+	pci_fixup_final = 2,
+	pci_fixup_enable = 3,
+	pci_fixup_resume = 4,
+	pci_fixup_suspend = 5,
+	pci_fixup_resume_early = 6,
+	pci_fixup_suspend_late = 7,
+};
+
+struct pci_bus_resource {
+	struct list_head list;
+	struct resource *res;
+	unsigned int flags;
+};
+
+enum pci_bar_type {
+	pci_bar_unknown = 0,
+	pci_bar_io = 1,
+	pci_bar_mem32 = 2,
+	pci_bar_mem64 = 3,
+};
+
+enum pci_bus_speed {
+	PCI_SPEED_33MHz = 0,
+	PCI_SPEED_66MHz = 1,
+	PCI_SPEED_66MHz_PCIX = 2,
+	PCI_SPEED_100MHz_PCIX = 3,
+	PCI_SPEED_133MHz_PCIX = 4,
+	PCI_SPEED_66MHz_PCIX_ECC = 5,
+	PCI_SPEED_100MHz_PCIX_ECC = 6,
+	PCI_SPEED_133MHz_PCIX_ECC = 7,
+	PCI_SPEED_66MHz_PCIX_266 = 9,
+	PCI_SPEED_100MHz_PCIX_266 = 10,
+	PCI_SPEED_133MHz_PCIX_266 = 11,
+	AGP_UNKNOWN = 12,
+	AGP_1X = 13,
+	AGP_2X = 14,
+	AGP_4X = 15,
+	AGP_8X = 16,
+	PCI_SPEED_66MHz_PCIX_533 = 17,
+	PCI_SPEED_100MHz_PCIX_533 = 18,
+	PCI_SPEED_133MHz_PCIX_533 = 19,
+	PCIE_SPEED_2_5GT = 20,
+	PCIE_SPEED_5_0GT = 21,
+	PCIE_SPEED_8_0GT = 22,
+	PCIE_SPEED_16_0GT = 23,
+	PCIE_SPEED_32_0GT = 24,
+	PCIE_SPEED_64_0GT = 25,
+	PCI_SPEED_UNKNOWN = 255,
+};
+
+enum pci_bus_flags {
+	PCI_BUS_FLAGS_NO_MSI = 1,
+	PCI_BUS_FLAGS_NO_MMRBC = 2,
+	PCI_BUS_FLAGS_NO_AERSID = 4,
+	PCI_BUS_FLAGS_NO_EXTCFG = 8,
+};
+
+enum pcie_bus_config_types {
+	PCIE_BUS_TUNE_OFF = 0,
+	PCIE_BUS_DEFAULT = 1,
+	PCIE_BUS_SAFE = 2,
+	PCIE_BUS_PERFORMANCE = 3,
+	PCIE_BUS_PEER2PEER = 4,
+};
+
+enum {
+	PCI_REASSIGN_ALL_RSRC = 1,
+	PCI_REASSIGN_ALL_BUS = 2,
+	PCI_PROBE_ONLY = 4,
+	PCI_CAN_SKIP_ISA_ALIGN = 8,
+	PCI_ENABLE_PROC_DOMAINS = 16,
+	PCI_COMPAT_DOMAIN_0 = 32,
+	PCI_SCAN_ALL_PCIE_DEVS = 64,
+};
+
+enum pci_dev_flags {
+	PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,
+	PCI_DEV_FLAGS_NO_D3 = 2,
+	PCI_DEV_FLAGS_ASSIGNED = 4,
+	PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,
+	PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,
+	PCI_DEV_FLAGS_NO_BUS_RESET = 64,
+	PCI_DEV_FLAGS_NO_PM_RESET = 128,
+	PCI_DEV_FLAGS_VPD_REF_F0 = 256,
+	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
+	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
+	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
+	PCI_DEV_FLAGS_HAS_MSI_MASKING = 4096,
+};
+
+struct hotplug_slot_ops;
+
+struct hotplug_slot {
+	const struct hotplug_slot_ops *ops;
+	struct list_head slot_list;
+	struct pci_slot *pci_slot;
+	struct module *owner;
+	const char *mod_name;
+};
+
+struct hotplug_slot_ops {
+	int (*enable_slot)(struct hotplug_slot *);
+	int (*disable_slot)(struct hotplug_slot *);
+	int (*set_attention_status)(struct hotplug_slot *, u8);
+	int (*hardware_test)(struct hotplug_slot *, u32);
+	int (*get_power_status)(struct hotplug_slot *, u8 *);
+	int (*get_attention_status)(struct hotplug_slot *, u8 *);
+	int (*get_latch_status)(struct hotplug_slot *, u8 *);
+	int (*get_adapter_status)(struct hotplug_slot *, u8 *);
+	int (*reset_slot)(struct hotplug_slot *, bool);
+};
+
+struct pci_host_bridge {
+	struct device dev;
+	struct pci_bus *bus;
+	struct pci_ops *ops;
+	struct pci_ops *child_ops;
+	void *sysdata;
+	int busnr;
+	int domain_nr;
+	struct list_head windows;
+	struct list_head dma_ranges;
+	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
+	int (*map_irq)(const struct pci_dev *, u8, u8);
+	void (*release_fn)(struct pci_host_bridge *);
+	void *release_data;
+	unsigned int ignore_reset_delay: 1;
+	unsigned int no_ext_tags: 1;
+	unsigned int no_inc_mrrs: 1;
+	unsigned int native_aer: 1;
+	unsigned int native_pcie_hotplug: 1;
+	unsigned int native_shpc_hotplug: 1;
+	unsigned int native_pme: 1;
+	unsigned int native_ltr: 1;
+	unsigned int native_dpc: 1;
+	unsigned int native_cxl_error: 1;
+	unsigned int preserve_config: 1;
+	unsigned int size_windows: 1;
+	unsigned int msi_domain: 1;
+	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	long: 64;
+	long: 64;
+	unsigned long private[0];
+};
+
+struct pci_domain_busn_res {
+	struct list_head list;
+	struct resource res;
+	int domain_nr;
+};
+
+typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
+
+struct dmi_strmatch {
+	unsigned char slot: 7;
+	unsigned char exact_match: 1;
+	char substr[79];
+};
+
+struct dmi_system_id {
+	int (*callback)(const struct dmi_system_id *);
+	const char *ident;
+	struct dmi_strmatch matches[4];
+	void *driver_data;
+};
+
+struct pci_reset_fn_method {
+	int (*reset_fn)(struct pci_dev *, bool);
+	char *name;
+};
+
+struct bus_attribute {
+	struct attribute attr;
+	ssize_t (*show)(const struct bus_type *, char *);
+	ssize_t (*store)(const struct bus_type *, const char *, size_t);
+};
+
+enum pcie_reset_state {
+	pcie_deassert_reset = 1,
+	pcie_warm_reset = 2,
+	pcie_hot_reset = 3,
+};
+
+enum {
+	LOGIC_PIO_INDIRECT = 0,
+	LOGIC_PIO_CPU_MMIO = 1,
+};
+
+enum pcie_link_width {
+	PCIE_LNK_WIDTH_RESRV = 0,
+	PCIE_LNK_X1 = 1,
+	PCIE_LNK_X2 = 2,
+	PCIE_LNK_X4 = 4,
+	PCIE_LNK_X8 = 8,
+	PCIE_LNK_X12 = 12,
+	PCIE_LNK_X16 = 16,
+	PCIE_LNK_X32 = 32,
+	PCIE_LNK_WIDTH_UNKNOWN = 255,
+};
+
+struct pci_cap_saved_data {
+	u16 cap_nr;
+	bool cap_extended;
+	unsigned int size;
+	u32 data[0];
+};
+
+struct pci_cap_saved_state {
+	struct hlist_node next;
+	struct pci_cap_saved_data cap;
+};
+
+struct pci_pme_device {
+	struct list_head list;
+	struct pci_dev *dev;
+};
+
+struct pci_devres {
+	unsigned int enabled: 1;
+	unsigned int pinned: 1;
+	unsigned int orig_intx: 1;
+	unsigned int restore_intx: 1;
+	unsigned int mwi: 1;
+	u32 region_mask;
+};
+
+struct logic_pio_host_ops;
+
+struct logic_pio_hwaddr {
+	struct list_head list;
+	struct fwnode_handle *fwnode;
+	resource_size_t hw_start;
+	resource_size_t io_start;
+	resource_size_t size;
+	unsigned long flags;
+	void *hostdata;
+	const struct logic_pio_host_ops *ops;
+};
+
+struct logic_pio_host_ops {
+	u32 (*in)(void *, unsigned long, size_t);
+	void (*out)(void *, unsigned long, u32, size_t);
+	u32 (*ins)(void *, unsigned long, void *, size_t, unsigned int);
+	void (*outs)(void *, unsigned long, const void *, size_t, unsigned int);
+};
+
+struct pci_saved_state {
+	u32 config_space[16];
+	struct pci_cap_saved_data cap[0];
+};
+
+struct driver_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device_driver *, char *);
+	ssize_t (*store)(struct device_driver *, const char *, size_t);
+};
+
+enum pci_ers_result {
+	PCI_ERS_RESULT_NONE = 1,
+	PCI_ERS_RESULT_CAN_RECOVER = 2,
+	PCI_ERS_RESULT_NEED_RESET = 3,
+	PCI_ERS_RESULT_DISCONNECT = 4,
+	PCI_ERS_RESULT_RECOVERED = 5,
+	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
+};
+
+struct pci_dynid {
+	struct list_head node;
+	struct pci_device_id id;
+};
+
+struct pcie_device {
+	int irq;
+	struct pci_dev *port;
+	u32 service;
+	void *priv_data;
+	struct device device;
+};
+
+struct pcie_port_service_driver {
+	const char *name;
+	int (*probe)(struct pcie_device *);
+	void (*remove)(struct pcie_device *);
+	int (*suspend)(struct pcie_device *);
+	int (*resume_noirq)(struct pcie_device *);
+	int (*resume)(struct pcie_device *);
+	int (*runtime_suspend)(struct pcie_device *);
+	int (*runtime_resume)(struct pcie_device *);
+	int (*slot_reset)(struct pcie_device *);
+	int port_type;
+	u32 service;
+	struct device_driver driver;
+};
+
+struct drv_dev_and_id {
+	struct pci_driver *drv;
+	struct pci_dev *dev;
+	const struct pci_device_id *id;
+};
+
+enum pci_mmap_api {
+	PCI_MMAP_SYSFS = 0,
+	PCI_MMAP_PROCFS = 1,
+};
+
+enum pci_mmap_state {
+	pci_mmap_io = 0,
+	pci_mmap_mem = 1,
+};
+
+enum enable_type {
+	undefined = -1,
+	user_disabled = 0,
+	auto_disabled = 1,
+	user_enabled = 2,
+	auto_enabled = 3,
+};
+
+enum release_type {
+	leaf_only = 0,
+	whole_subtree = 1,
+};
+
+struct pci_dev_resource {
+	struct list_head list;
+	struct resource *res;
+	struct pci_dev *dev;
+	resource_size_t start;
+	resource_size_t end;
+	resource_size_t add_size;
+	resource_size_t min_align;
+	unsigned long flags;
+};
+
+enum support_mode {
+	ALLOW_LEGACY = 0,
+	DENY_LEGACY = 1,
+};
+
+struct msix_entry {
+	u32 vector;
+	u16 entry;
+};
+
+struct portdrv_service_data {
+	struct pcie_port_service_driver *drv;
+	struct device *dev;
+	u32 service;
+};
+
+typedef int (*pcie_callback_t)(struct pcie_device *);
+
+struct walk_rcec_data {
+	struct pci_dev *rcec;
+	int (*user_callback)(struct pci_dev *, void *);
+	void *user_data;
+};
+
+struct pcie_link_state {
+	struct pci_dev *pdev;
+	struct pci_dev *downstream;
+	struct pcie_link_state *root;
+	struct pcie_link_state *parent;
+	struct list_head sibling;
+	u32 aspm_support: 7;
+	u32 aspm_enabled: 7;
+	u32 aspm_capable: 7;
+	u32 aspm_default: 7;
+	int: 4;
+	u32 aspm_disable: 7;
+	u32 clkpm_capable: 1;
+	u32 clkpm_enabled: 1;
+	u32 clkpm_default: 1;
+	u32 clkpm_disable: 1;
+};
+
+struct aer_stats {
+	u64 dev_cor_errs[16];
+	u64 dev_fatal_errs[27];
+	u64 dev_nonfatal_errs[27];
+	u64 dev_total_cor_errs;
+	u64 dev_total_fatal_errs;
+	u64 dev_total_nonfatal_errs;
+	u64 rootport_total_cor_errs;
+	u64 rootport_total_fatal_errs;
+	u64 rootport_total_nonfatal_errs;
+};
+
+struct aer_err_source {
+	unsigned int status;
+	unsigned int id;
+};
+
+struct aer_header_log_regs {
+	unsigned int dw0;
+	unsigned int dw1;
+	unsigned int dw2;
+	unsigned int dw3;
+};
+
+struct aer_err_info {
+	struct pci_dev *dev[5];
+	int error_dev_num;
+	unsigned int id: 16;
+	unsigned int severity: 2;
+	unsigned int __pad1: 5;
+	unsigned int multi_error_valid: 1;
+	unsigned int first_error: 5;
+	unsigned int __pad2: 2;
+	unsigned int tlp_header_valid: 1;
+	unsigned int status;
+	unsigned int mask;
+	struct aer_header_log_regs tlp;
+};
+
+struct aer_rpc {
+	struct pci_dev *rpd;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct aer_err_source *type;
+			const struct aer_err_source *const_type;
+			char (*rectype)[0];
+			struct aer_err_source *ptr;
+			const struct aer_err_source *ptr_const;
+		};
+		struct aer_err_source buf[128];
+	} aer_fifo;
+};
+
+struct pcie_pme_service_data {
+	spinlock_t lock;
+	struct pcie_device *srv;
+	struct work_struct work;
+	bool noirq;
+};
+
+struct pci_slot_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct pci_slot *, char *);
+	ssize_t (*store)(struct pci_slot *, const char *, size_t);
+};
+
+struct of_bus;
+
+struct of_pci_range_parser {
+	struct device_node *node;
+	struct of_bus *bus;
+	const __be32 *range;
+	const __be32 *end;
+	int na;
+	int ns;
+	int pna;
+	bool dma;
+};
+
+struct of_pci_range {
+	union {
+		u64 pci_addr;
+		u64 bus_addr;
+	};
+	u64 cpu_addr;
+	u64 size;
+	u32 flags;
+};
+
+struct pci_dev_reset_methods {
+	u16 vendor;
+	u16 device;
+	int (*reset)(struct pci_dev *, bool);
+};
+
+struct pci_dev_acs_enabled {
+	u16 vendor;
+	u16 device;
+	int (*acs_enabled)(struct pci_dev *, u16);
+};
+
+struct pci_dev_acs_ops {
+	u16 vendor;
+	u16 device;
+	int (*enable_acs)(struct pci_dev *);
+	int (*disable_acs_redir)(struct pci_dev *);
+};
+
+enum dmi_field {
+	DMI_NONE = 0,
+	DMI_BIOS_VENDOR = 1,
+	DMI_BIOS_VERSION = 2,
+	DMI_BIOS_DATE = 3,
+	DMI_BIOS_RELEASE = 4,
+	DMI_EC_FIRMWARE_RELEASE = 5,
+	DMI_SYS_VENDOR = 6,
+	DMI_PRODUCT_NAME = 7,
+	DMI_PRODUCT_VERSION = 8,
+	DMI_PRODUCT_SERIAL = 9,
+	DMI_PRODUCT_UUID = 10,
+	DMI_PRODUCT_SKU = 11,
+	DMI_PRODUCT_FAMILY = 12,
+	DMI_BOARD_VENDOR = 13,
+	DMI_BOARD_NAME = 14,
+	DMI_BOARD_VERSION = 15,
+	DMI_BOARD_SERIAL = 16,
+	DMI_BOARD_ASSET_TAG = 17,
+	DMI_CHASSIS_VENDOR = 18,
+	DMI_CHASSIS_TYPE = 19,
+	DMI_CHASSIS_VERSION = 20,
+	DMI_CHASSIS_SERIAL = 21,
+	DMI_CHASSIS_ASSET_TAG = 22,
+	DMI_STRING_MAX = 23,
+	DMI_OEM_STRING = 24,
+};
+
+enum {
+	NVME_REG_CAP = 0,
+	NVME_REG_VS = 8,
+	NVME_REG_INTMS = 12,
+	NVME_REG_INTMC = 16,
+	NVME_REG_CC = 20,
+	NVME_REG_CSTS = 28,
+	NVME_REG_NSSR = 32,
+	NVME_REG_AQA = 36,
+	NVME_REG_ASQ = 40,
+	NVME_REG_ACQ = 48,
+	NVME_REG_CMBLOC = 56,
+	NVME_REG_CMBSZ = 60,
+	NVME_REG_BPINFO = 64,
+	NVME_REG_BPRSEL = 68,
+	NVME_REG_BPMBL = 72,
+	NVME_REG_CMBMSC = 80,
+	NVME_REG_CRTO = 104,
+	NVME_REG_PMRCAP = 3584,
+	NVME_REG_PMRCTL = 3588,
+	NVME_REG_PMRSTS = 3592,
+	NVME_REG_PMREBS = 3596,
+	NVME_REG_PMRSWTP = 3600,
+	NVME_REG_DBS = 4096,
+};
+
+enum {
+	NVME_CC_ENABLE = 1,
+	NVME_CC_EN_SHIFT = 0,
+	NVME_CC_CSS_SHIFT = 4,
+	NVME_CC_MPS_SHIFT = 7,
+	NVME_CC_AMS_SHIFT = 11,
+	NVME_CC_SHN_SHIFT = 14,
+	NVME_CC_IOSQES_SHIFT = 16,
+	NVME_CC_IOCQES_SHIFT = 20,
+	NVME_CC_CSS_NVM = 0,
+	NVME_CC_CSS_CSI = 96,
+	NVME_CC_CSS_MASK = 112,
+	NVME_CC_AMS_RR = 0,
+	NVME_CC_AMS_WRRU = 2048,
+	NVME_CC_AMS_VS = 14336,
+	NVME_CC_SHN_NONE = 0,
+	NVME_CC_SHN_NORMAL = 16384,
+	NVME_CC_SHN_ABRUPT = 32768,
+	NVME_CC_SHN_MASK = 49152,
+	NVME_CC_IOSQES = 393216,
+	NVME_CC_IOCQES = 4194304,
+	NVME_CC_CRIME = 16777216,
+};
+
+enum {
+	NVME_CSTS_RDY = 1,
+	NVME_CSTS_CFS = 2,
+	NVME_CSTS_NSSRO = 16,
+	NVME_CSTS_PP = 32,
+	NVME_CSTS_SHST_NORMAL = 0,
+	NVME_CSTS_SHST_OCCUR = 4,
+	NVME_CSTS_SHST_CMPLT = 8,
+	NVME_CSTS_SHST_MASK = 12,
+};
+
+enum {
+	SWITCHTEC_GAS_MRPC_OFFSET = 0,
+	SWITCHTEC_GAS_TOP_CFG_OFFSET = 4096,
+	SWITCHTEC_GAS_SW_EVENT_OFFSET = 6144,
+	SWITCHTEC_GAS_SYS_INFO_OFFSET = 8192,
+	SWITCHTEC_GAS_FLASH_INFO_OFFSET = 8704,
+	SWITCHTEC_GAS_PART_CFG_OFFSET = 16384,
+	SWITCHTEC_GAS_NTB_OFFSET = 65536,
+	SWITCHTEC_GAS_PFF_CSR_OFFSET = 1261568,
+};
+
+enum {
+	SWITCHTEC_NTB_REG_INFO_OFFSET = 0,
+	SWITCHTEC_NTB_REG_CTRL_OFFSET = 16384,
+	SWITCHTEC_NTB_REG_DBMSG_OFFSET = 409600,
+};
+
+struct pci_fixup {
+	u16 vendor;
+	u16 device;
+	u32 class;
+	unsigned int class_shift;
+	int hook_offset;
+};
+
+struct ntb_ctrl_regs {
+	u32 partition_status;
+	u32 partition_op;
+	u32 partition_ctrl;
+	u32 bar_setup;
+	u32 bar_error;
+	u16 lut_table_entries;
+	u16 lut_table_offset;
+	u32 lut_error;
+	u16 req_id_table_size;
+	u16 req_id_table_offset;
+	u32 req_id_error;
+	u32 reserved1[7];
+	struct {
+		u32 ctl;
+		u32 win_size;
+		u64 xlate_addr;
+	} bar_entry[6];
+	struct {
+		u32 win_size;
+		u32 reserved[3];
+	} bar_ext_entry[6];
+	u32 reserved2[192];
+	u32 req_id_table[512];
+	u32 reserved3[256];
+	u64 lut_entry[512];
+};
+
+struct nt_partition_info {
+	u32 xlink_enabled;
+	u32 target_part_low;
+	u32 target_part_high;
+	u32 reserved;
+};
+
+struct ntb_info_regs {
+	u8 partition_count;
+	u8 partition_id;
+	u16 reserved1;
+	u64 ep_map;
+	u16 requester_id;
+	u16 reserved2;
+	u32 reserved3[4];
+	struct nt_partition_info ntp_info[48];
+} __attribute__((packed));
+
+struct pci_config_window;
+
+struct pci_ecam_ops {
+	unsigned int bus_shift;
+	struct pci_ops pci_ops;
+	int (*init)(struct pci_config_window *);
+};
+
+struct pci_config_window {
+	struct resource res;
+	struct resource busr;
+	unsigned int bus_shift;
+	void *priv;
+	const struct pci_ecam_ops *ops;
+	union {
+		void *win;
+		void **winp;
+	};
+	struct device *parent;
+};
+
+enum pci_interrupt_pin {
+	PCI_INTERRUPT_UNKNOWN = 0,
+	PCI_INTERRUPT_INTA = 1,
+	PCI_INTERRUPT_INTB = 2,
+	PCI_INTERRUPT_INTC = 3,
+	PCI_INTERRUPT_INTD = 4,
+};
+
+enum pci_barno {
+	NO_BAR = -1,
+	BAR_0 = 0,
+	BAR_1 = 1,
+	BAR_2 = 2,
+	BAR_3 = 3,
+	BAR_4 = 4,
+	BAR_5 = 5,
+};
+
+enum pci_epc_irq_type {
+	PCI_EPC_IRQ_UNKNOWN = 0,
+	PCI_EPC_IRQ_LEGACY = 1,
+	PCI_EPC_IRQ_MSI = 2,
+	PCI_EPC_IRQ_MSIX = 3,
+};
+
+enum pci_epc_interface_type {
+	UNKNOWN_INTERFACE = -1,
+	PRIMARY_INTERFACE = 0,
+	SECONDARY_INTERFACE = 1,
+};
+
+struct pci_epc_ops;
+
+struct pci_epc_mem;
+
+struct pci_epc {
+	struct device dev;
+	struct list_head pci_epf;
+	struct mutex list_lock;
+	const struct pci_epc_ops *ops;
+	struct pci_epc_mem **windows;
+	struct pci_epc_mem *mem;
+	unsigned int num_windows;
+	u8 max_functions;
+	u8 *max_vfs;
+	struct config_group *group;
+	struct mutex lock;
+	unsigned long function_num_map;
+};
+
+struct pci_epf_header;
+
+struct pci_epf_bar;
+
+struct pci_epc_features;
+
+struct pci_epc_ops {
+	int (*write_header)(struct pci_epc *, u8, u8, struct pci_epf_header *);
+	int (*set_bar)(struct pci_epc *, u8, u8, struct pci_epf_bar *);
+	void (*clear_bar)(struct pci_epc *, u8, u8, struct pci_epf_bar *);
+	int (*map_addr)(struct pci_epc *, u8, u8, phys_addr_t, u64, size_t);
+	void (*unmap_addr)(struct pci_epc *, u8, u8, phys_addr_t);
+	int (*set_msi)(struct pci_epc *, u8, u8, u8);
+	int (*get_msi)(struct pci_epc *, u8, u8);
+	int (*set_msix)(struct pci_epc *, u8, u8, u16, enum pci_barno, u32);
+	int (*get_msix)(struct pci_epc *, u8, u8);
+	int (*raise_irq)(struct pci_epc *, u8, u8, enum pci_epc_irq_type, u16);
+	int (*map_msi_irq)(struct pci_epc *, u8, u8, phys_addr_t, u8, u32, u32 *, u32 *);
+	int (*start)(struct pci_epc *);
+	void (*stop)(struct pci_epc *);
+	const struct pci_epc_features * (*get_features)(struct pci_epc *, u8, u8);
+	struct module *owner;
+};
+
+struct pci_epf_header {
+	u16 vendorid;
+	u16 deviceid;
+	u8 revid;
+	u8 progif_code;
+	u8 subclass_code;
+	u8 baseclass_code;
+	u8 cache_line_size;
+	u16 subsys_vendor_id;
+	u16 subsys_id;
+	enum pci_interrupt_pin interrupt_pin;
+};
+
+struct pci_epf_bar {
+	dma_addr_t phys_addr;
+	void *addr;
+	size_t size;
+	enum pci_barno barno;
+	int flags;
+};
+
+struct pci_epc_features {
+	unsigned int linkup_notifier: 1;
+	unsigned int core_init_notifier: 1;
+	unsigned int msi_capable: 1;
+	unsigned int msix_capable: 1;
+	u8 reserved_bar;
+	u8 bar_fixed_64bit;
+	u64 bar_fixed_size[6];
+	size_t align;
+};
+
+struct pci_epc_mem_window {
+	phys_addr_t phys_base;
+	size_t size;
+	size_t page_size;
+};
+
+struct pci_epc_mem {
+	struct pci_epc_mem_window window;
+	unsigned long *bitmap;
+	int pages;
+	struct mutex lock;
+};
+
+struct pci_epf_driver;
+
+struct pci_epf_device_id;
+
+struct pci_epc_event_ops;
+
+struct pci_epf {
+	struct device dev;
+	const char *name;
+	struct pci_epf_header *header;
+	struct pci_epf_bar bar[6];
+	u8 msi_interrupts;
+	u16 msix_interrupts;
+	u8 func_no;
+	u8 vfunc_no;
+	struct pci_epc *epc;
+	struct pci_epf *epf_pf;
+	struct pci_epf_driver *driver;
+	const struct pci_epf_device_id *id;
+	struct list_head list;
+	struct mutex lock;
+	struct pci_epc *sec_epc;
+	struct list_head sec_epc_list;
+	struct pci_epf_bar sec_epc_bar[6];
+	u8 sec_epc_func_no;
+	struct config_group *group;
+	unsigned int is_bound;
+	unsigned int is_vf;
+	unsigned long vfunction_num_map;
+	struct list_head pci_vepf;
+	const struct pci_epc_event_ops *event_ops;
+};
+
+struct pci_epf_ops;
+
+struct pci_epf_driver {
+	int (*probe)(struct pci_epf *, const struct pci_epf_device_id *);
+	void (*remove)(struct pci_epf *);
+	struct device_driver driver;
+	struct pci_epf_ops *ops;
+	struct module *owner;
+	struct list_head epf_group;
+	const struct pci_epf_device_id *id_table;
+};
+
+struct pci_epf_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct pci_epf_ops {
+	int (*bind)(struct pci_epf *);
+	void (*unbind)(struct pci_epf *);
+	struct config_group * (*add_cfs)(struct pci_epf *, struct config_group *);
+};
+
+struct pci_epc_event_ops {
+	int (*core_init)(struct pci_epf *);
+	int (*link_up)(struct pci_epf *);
+	int (*link_down)(struct pci_epf *);
+	int (*bme)(struct pci_epf *);
+};
+
+struct dw_edma_plat_ops {
+	int (*irq_vector)(struct device *, unsigned int);
+	u64 (*pci_address)(struct device *, phys_addr_t);
+};
+
+enum dw_pcie_ltssm {
+	DW_PCIE_LTSSM_DETECT_QUIET = 0,
+	DW_PCIE_LTSSM_DETECT_ACT = 1,
+	DW_PCIE_LTSSM_L0 = 17,
+	DW_PCIE_LTSSM_L2_IDLE = 21,
+	DW_PCIE_LTSSM_UNKNOWN = 4294967295,
+};
+
+enum dw_edma_map_format {
+	EDMA_MF_EDMA_LEGACY = 0,
+	EDMA_MF_EDMA_UNROLL = 1,
+	EDMA_MF_HDMA_COMPAT = 5,
+	EDMA_MF_HDMA_NATIVE = 7,
+};
+
+enum dw_pcie_app_clk {
+	DW_PCIE_DBI_CLK = 0,
+	DW_PCIE_MSTR_CLK = 1,
+	DW_PCIE_SLV_CLK = 2,
+	DW_PCIE_NUM_APP_CLKS = 3,
+};
+
+enum dw_pcie_core_clk {
+	DW_PCIE_PIPE_CLK = 0,
+	DW_PCIE_CORE_CLK = 1,
+	DW_PCIE_AUX_CLK = 2,
+	DW_PCIE_REF_CLK = 3,
+	DW_PCIE_NUM_CORE_CLKS = 4,
+};
+
+enum dw_pcie_app_rst {
+	DW_PCIE_DBI_RST = 0,
+	DW_PCIE_MSTR_RST = 1,
+	DW_PCIE_SLV_RST = 2,
+	DW_PCIE_NUM_APP_RSTS = 3,
+};
+
+enum dw_pcie_core_rst {
+	DW_PCIE_NON_STICKY_RST = 0,
+	DW_PCIE_STICKY_RST = 1,
+	DW_PCIE_CORE_RST = 2,
+	DW_PCIE_PIPE_RST = 3,
+	DW_PCIE_PHY_RST = 4,
+	DW_PCIE_HOT_RST = 5,
+	DW_PCIE_PWR_RST = 6,
+	DW_PCIE_NUM_CORE_RSTS = 7,
+};
+
+enum dw_edma_chip_flags {
+	DW_EDMA_CHIP_LOCAL = 1,
+};
+
+struct dw_pcie_host_ops;
+
+struct dw_pcie_rp {
+	bool has_msi_ctrl: 1;
+	bool cfg0_io_shared: 1;
+	u64 cfg0_base;
+	void *va_cfg0_base;
+	u32 cfg0_size;
+	resource_size_t io_base;
+	phys_addr_t io_bus_addr;
+	u32 io_size;
+	int irq;
+	const struct dw_pcie_host_ops *ops;
+	int msi_irq[8];
+	struct irq_domain *irq_domain;
+	struct irq_domain *msi_domain;
+	dma_addr_t msi_data;
+	struct irq_chip *msi_irq_chip;
+	u32 num_vectors;
+	u32 irq_mask[8];
+	struct pci_host_bridge *bridge;
+	raw_spinlock_t lock;
+	unsigned long msi_irq_in_use[4];
+};
+
+struct dw_pcie_ep_ops;
+
+struct dw_pcie_ep {
+	struct pci_epc *epc;
+	struct list_head func_list;
+	const struct dw_pcie_ep_ops *ops;
+	phys_addr_t phys_base;
+	size_t addr_size;
+	size_t page_size;
+	u8 bar_to_atu[6];
+	phys_addr_t *outbound_addr;
+	unsigned long *ib_window_map;
+	unsigned long *ob_window_map;
+	void *msi_mem;
+	phys_addr_t msi_mem_phys;
+	struct pci_epf_bar *epf_bar[6];
+};
+
+struct dw_edma_region {
+	u64 paddr;
+	union {
+		void *mem;
+		void *io;
+	} vaddr;
+	size_t sz;
+};
+
+struct dw_edma;
+
+struct dw_edma_chip {
+	struct device *dev;
+	int nr_irqs;
+	const struct dw_edma_plat_ops *ops;
+	u32 flags;
+	void *reg_base;
+	u16 ll_wr_cnt;
+	u16 ll_rd_cnt;
+	struct dw_edma_region ll_region_wr[8];
+	struct dw_edma_region ll_region_rd[8];
+	struct dw_edma_region dt_region_wr[8];
+	struct dw_edma_region dt_region_rd[8];
+	enum dw_edma_map_format mf;
+	struct dw_edma *dw;
+};
+
+struct reset_control_bulk_data {
+	const char *id;
+	struct reset_control *rstc;
+};
+
+struct dw_pcie_ops;
+
+struct dw_pcie {
+	struct device *dev;
+	void *dbi_base;
+	void *dbi_base2;
+	void *atu_base;
+	size_t atu_size;
+	u32 num_ib_windows;
+	u32 num_ob_windows;
+	u32 region_align;
+	u64 region_limit;
+	struct dw_pcie_rp pp;
+	struct dw_pcie_ep ep;
+	const struct dw_pcie_ops *ops;
+	u32 version;
+	u32 type;
+	unsigned long caps;
+	int num_lanes;
+	int link_gen;
+	u8 n_fts[2];
+	struct dw_edma_chip edma;
+	struct clk_bulk_data app_clks[3];
+	struct clk_bulk_data core_clks[4];
+	struct reset_control_bulk_data app_rsts[3];
+	struct reset_control_bulk_data core_rsts[7];
+	struct gpio_desc *pe_rst;
+	bool suspended;
+};
+
+struct dw_pcie_host_ops {
+	int (*host_init)(struct dw_pcie_rp *);
+	void (*host_deinit)(struct dw_pcie_rp *);
+	int (*msi_host_init)(struct dw_pcie_rp *);
+	void (*pme_turn_off)(struct dw_pcie_rp *);
+};
+
+struct dw_pcie_ep_ops {
+	void (*ep_init)(struct dw_pcie_ep *);
+	int (*raise_irq)(struct dw_pcie_ep *, u8, enum pci_epc_irq_type, u16);
+	const struct pci_epc_features * (*get_features)(struct dw_pcie_ep *);
+	unsigned int (*func_conf_select)(struct dw_pcie_ep *, u8);
+};
+
+struct dw_pcie_ops {
+	u64 (*cpu_addr_fixup)(struct dw_pcie *, u64);
+	u32 (*read_dbi)(struct dw_pcie *, void *, u32, size_t);
+	void (*write_dbi)(struct dw_pcie *, void *, u32, size_t, u32);
+	void (*write_dbi2)(struct dw_pcie *, void *, u32, size_t, u32);
+	int (*link_up)(struct dw_pcie *);
+	enum dw_pcie_ltssm (*get_ltssm)(struct dw_pcie *);
+	int (*start_link)(struct dw_pcie *);
+	void (*stop_link)(struct dw_pcie *);
+};
+
+struct dw_pcie_ep_func {
+	struct list_head list;
+	u8 func_no;
+	u8 msi_cap;
+	u8 msix_cap;
+};
+
+struct pci_epf_msix_tbl {
+	u64 msg_addr;
+	u32 msg_data;
+	u32 vector_ctrl;
+};
+
+enum dw_pcie_device_mode {
+	DW_PCIE_UNKNOWN_TYPE = 0,
+	DW_PCIE_EP_TYPE = 1,
+	DW_PCIE_LEG_EP_TYPE = 2,
+	DW_PCIE_RC_TYPE = 3,
+};
+
+struct dw_plat_pcie_of_data {
+	enum dw_pcie_device_mode mode;
+};
+
+struct dw_plat_pcie {
+	struct dw_pcie *pci;
+	enum dw_pcie_device_mode mode;
+};
+
+struct qcom_pcie_ops;
+
+struct qcom_pcie_cfg {
+	const struct qcom_pcie_ops *ops;
+};
+
+struct qcom_pcie;
+
+struct qcom_pcie_ops {
+	int (*get_resources)(struct qcom_pcie *);
+	int (*init)(struct qcom_pcie *);
+	int (*post_init)(struct qcom_pcie *);
+	void (*deinit)(struct qcom_pcie *);
+	void (*ltssm_enable)(struct qcom_pcie *);
+	int (*config_sid)(struct qcom_pcie *);
+};
+
+struct qcom_pcie_resources_1_0_0 {
+	struct clk_bulk_data clks[4];
+	struct reset_control *core;
+	struct regulator *vdda;
+};
+
+struct regulator_bulk_data {
+	const char *supply;
+	int init_load_uA;
+	struct regulator *consumer;
+	int ret;
+};
+
+struct qcom_pcie_resources_2_1_0 {
+	struct clk_bulk_data clks[5];
+	struct reset_control_bulk_data resets[6];
+	int num_resets;
+	struct regulator_bulk_data supplies[3];
+};
+
+struct qcom_pcie_resources_2_3_2 {
+	struct clk_bulk_data clks[4];
+	struct regulator_bulk_data supplies[2];
+};
+
+struct qcom_pcie_resources_2_3_3 {
+	struct clk_bulk_data clks[5];
+	struct reset_control_bulk_data rst[7];
+};
+
+struct qcom_pcie_resources_2_4_0 {
+	struct clk_bulk_data clks[4];
+	int num_clks;
+	struct reset_control_bulk_data resets[12];
+	int num_resets;
+};
+
+struct qcom_pcie_resources_2_7_0 {
+	struct clk_bulk_data clks[15];
+	int num_clks;
+	struct regulator_bulk_data supplies[2];
+	struct reset_control *rst;
+};
+
+struct qcom_pcie_resources_2_9_0 {
+	struct clk_bulk_data clks[5];
+	struct reset_control *rst;
+};
+
+union qcom_pcie_resources {
+	struct qcom_pcie_resources_1_0_0 v1_0_0;
+	struct qcom_pcie_resources_2_1_0 v2_1_0;
+	struct qcom_pcie_resources_2_3_2 v2_3_2;
+	struct qcom_pcie_resources_2_3_3 v2_3_3;
+	struct qcom_pcie_resources_2_4_0 v2_4_0;
+	struct qcom_pcie_resources_2_7_0 v2_7_0;
+	struct qcom_pcie_resources_2_9_0 v2_9_0;
+};
+
+struct icc_path;
+
+struct qcom_pcie {
+	struct dw_pcie *pci;
+	void *parf;
+	void *elbi;
+	void *mhi;
+	union qcom_pcie_resources res;
+	struct phy *phy;
+	struct gpio_desc *reset;
+	struct icc_path *icc_mem;
+	const struct qcom_pcie_cfg *cfg;
+	struct dentry *debugfs;
+	bool suspended;
+};
+
+typedef void (*regmap_lock)(void *);
+
+typedef void (*regmap_unlock)(void *);
+
+enum regcache_type {
+	REGCACHE_NONE = 0,
+	REGCACHE_RBTREE = 1,
+	REGCACHE_FLAT = 2,
+	REGCACHE_MAPLE = 3,
+};
+
+enum regmap_endian {
+	REGMAP_ENDIAN_DEFAULT = 0,
+	REGMAP_ENDIAN_BIG = 1,
+	REGMAP_ENDIAN_LITTLE = 2,
+	REGMAP_ENDIAN_NATIVE = 3,
+};
+
+struct regmap_access_table;
+
+struct reg_default;
+
+struct regmap_range_cfg;
+
+struct regmap_config {
+	const char *name;
+	int reg_bits;
+	int reg_stride;
+	int reg_shift;
+	unsigned int reg_base;
+	int pad_bits;
+	int val_bits;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	bool disable_locking;
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool fast_io;
+	bool io_port;
+	unsigned int max_register;
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	const struct reg_default *reg_defaults;
+	unsigned int num_reg_defaults;
+	enum regcache_type cache_type;
+	const void *reg_defaults_raw;
+	unsigned int num_reg_defaults_raw;
+	unsigned long read_flag_mask;
+	unsigned long write_flag_mask;
+	bool zero_flag_mask;
+	bool use_single_read;
+	bool use_single_write;
+	bool use_relaxed_mmio;
+	bool can_multi_write;
+	enum regmap_endian reg_format_endian;
+	enum regmap_endian val_format_endian;
+	const struct regmap_range_cfg *ranges;
+	unsigned int num_ranges;
+	bool use_hwlock;
+	bool use_raw_spinlock;
+	unsigned int hwlock_id;
+	unsigned int hwlock_mode;
+	bool can_sleep;
+	u64 android_kabi_reserved1;
+};
+
+struct regmap_range;
+
+struct regmap_access_table {
+	const struct regmap_range *yes_ranges;
+	unsigned int n_yes_ranges;
+	const struct regmap_range *no_ranges;
+	unsigned int n_no_ranges;
+};
+
+struct regmap_range {
+	unsigned int range_min;
+	unsigned int range_max;
+};
+
+struct reg_default {
+	unsigned int reg;
+	unsigned int def;
+};
+
+struct regmap_range_cfg {
+	const char *name;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
+	u64 android_kabi_reserved1;
+};
+
+enum pcie_kirin_phy_type {
+	PCIE_KIRIN_INTERNAL_PHY = 0,
+	PCIE_KIRIN_EXTERNAL_PHY = 1,
+};
+
+struct kirin_pcie_data {
+	enum pcie_kirin_phy_type phy_type;
+};
+
+struct regmap;
+
+struct kirin_pcie {
+	enum pcie_kirin_phy_type type;
+	struct dw_pcie *pci;
+	struct regmap *apb;
+	struct phy *phy;
+	void *phy_priv;
+	int gpio_id_dwc_perst;
+	int num_slots;
+	int gpio_id_reset[3];
+	const char *reset_names[3];
+	int n_gpio_clkreq;
+	int gpio_id_clkreq[3];
+	const char *clkreq_names[3];
+};
+
+struct hi3660_pcie_phy {
+	struct device *dev;
+	void *base;
+	struct regmap *crgctrl;
+	struct regmap *sysctrl;
+	struct clk *apb_sys_clk;
+	struct clk *apb_phy_clk;
+	struct clk *phy_ref_clk;
+	struct clk *aclk;
+	struct clk *aux_clk;
+};
+
+enum hdmi_infoframe_type {
+	HDMI_INFOFRAME_TYPE_VENDOR = 129,
+	HDMI_INFOFRAME_TYPE_AVI = 130,
+	HDMI_INFOFRAME_TYPE_SPD = 131,
+	HDMI_INFOFRAME_TYPE_AUDIO = 132,
+	HDMI_INFOFRAME_TYPE_DRM = 135,
+};
+
+enum hdmi_colorspace {
+	HDMI_COLORSPACE_RGB = 0,
+	HDMI_COLORSPACE_YUV422 = 1,
+	HDMI_COLORSPACE_YUV444 = 2,
+	HDMI_COLORSPACE_YUV420 = 3,
+	HDMI_COLORSPACE_RESERVED4 = 4,
+	HDMI_COLORSPACE_RESERVED5 = 5,
+	HDMI_COLORSPACE_RESERVED6 = 6,
+	HDMI_COLORSPACE_IDO_DEFINED = 7,
+};
+
+enum hdmi_scan_mode {
+	HDMI_SCAN_MODE_NONE = 0,
+	HDMI_SCAN_MODE_OVERSCAN = 1,
+	HDMI_SCAN_MODE_UNDERSCAN = 2,
+	HDMI_SCAN_MODE_RESERVED = 3,
+};
+
+enum hdmi_colorimetry {
+	HDMI_COLORIMETRY_NONE = 0,
+	HDMI_COLORIMETRY_ITU_601 = 1,
+	HDMI_COLORIMETRY_ITU_709 = 2,
+	HDMI_COLORIMETRY_EXTENDED = 3,
+};
+
+enum hdmi_picture_aspect {
+	HDMI_PICTURE_ASPECT_NONE = 0,
+	HDMI_PICTURE_ASPECT_4_3 = 1,
+	HDMI_PICTURE_ASPECT_16_9 = 2,
+	HDMI_PICTURE_ASPECT_64_27 = 3,
+	HDMI_PICTURE_ASPECT_256_135 = 4,
+	HDMI_PICTURE_ASPECT_RESERVED = 5,
+};
+
+enum hdmi_active_aspect {
+	HDMI_ACTIVE_ASPECT_16_9_TOP = 2,
+	HDMI_ACTIVE_ASPECT_14_9_TOP = 3,
+	HDMI_ACTIVE_ASPECT_16_9_CENTER = 4,
+	HDMI_ACTIVE_ASPECT_PICTURE = 8,
+	HDMI_ACTIVE_ASPECT_4_3 = 9,
+	HDMI_ACTIVE_ASPECT_16_9 = 10,
+	HDMI_ACTIVE_ASPECT_14_9 = 11,
+	HDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13,
+	HDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14,
+	HDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15,
+};
+
+enum hdmi_extended_colorimetry {
+	HDMI_EXTENDED_COLORIMETRY_XV_YCC_601 = 0,
+	HDMI_EXTENDED_COLORIMETRY_XV_YCC_709 = 1,
+	HDMI_EXTENDED_COLORIMETRY_S_YCC_601 = 2,
+	HDMI_EXTENDED_COLORIMETRY_OPYCC_601 = 3,
+	HDMI_EXTENDED_COLORIMETRY_OPRGB = 4,
+	HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM = 5,
+	HDMI_EXTENDED_COLORIMETRY_BT2020 = 6,
+	HDMI_EXTENDED_COLORIMETRY_RESERVED = 7,
+};
+
+enum hdmi_quantization_range {
+	HDMI_QUANTIZATION_RANGE_DEFAULT = 0,
+	HDMI_QUANTIZATION_RANGE_LIMITED = 1,
+	HDMI_QUANTIZATION_RANGE_FULL = 2,
+	HDMI_QUANTIZATION_RANGE_RESERVED = 3,
+};
+
+enum hdmi_nups {
+	HDMI_NUPS_UNKNOWN = 0,
+	HDMI_NUPS_HORIZONTAL = 1,
+	HDMI_NUPS_VERTICAL = 2,
+	HDMI_NUPS_BOTH = 3,
+};
+
+enum hdmi_ycc_quantization_range {
+	HDMI_YCC_QUANTIZATION_RANGE_LIMITED = 0,
+	HDMI_YCC_QUANTIZATION_RANGE_FULL = 1,
+};
+
+enum hdmi_content_type {
+	HDMI_CONTENT_TYPE_GRAPHICS = 0,
+	HDMI_CONTENT_TYPE_PHOTO = 1,
+	HDMI_CONTENT_TYPE_CINEMA = 2,
+	HDMI_CONTENT_TYPE_GAME = 3,
+};
+
+enum hdmi_spd_sdi {
+	HDMI_SPD_SDI_UNKNOWN = 0,
+	HDMI_SPD_SDI_DSTB = 1,
+	HDMI_SPD_SDI_DVDP = 2,
+	HDMI_SPD_SDI_DVHS = 3,
+	HDMI_SPD_SDI_HDDVR = 4,
+	HDMI_SPD_SDI_DVC = 5,
+	HDMI_SPD_SDI_DSC = 6,
+	HDMI_SPD_SDI_VCD = 7,
+	HDMI_SPD_SDI_GAME = 8,
+	HDMI_SPD_SDI_PC = 9,
+	HDMI_SPD_SDI_BD = 10,
+	HDMI_SPD_SDI_SACD = 11,
+	HDMI_SPD_SDI_HDDVD = 12,
+	HDMI_SPD_SDI_PMP = 13,
+};
+
+enum hdmi_audio_coding_type {
+	HDMI_AUDIO_CODING_TYPE_STREAM = 0,
+	HDMI_AUDIO_CODING_TYPE_PCM = 1,
+	HDMI_AUDIO_CODING_TYPE_AC3 = 2,
+	HDMI_AUDIO_CODING_TYPE_MPEG1 = 3,
+	HDMI_AUDIO_CODING_TYPE_MP3 = 4,
+	HDMI_AUDIO_CODING_TYPE_MPEG2 = 5,
+	HDMI_AUDIO_CODING_TYPE_AAC_LC = 6,
+	HDMI_AUDIO_CODING_TYPE_DTS = 7,
+	HDMI_AUDIO_CODING_TYPE_ATRAC = 8,
+	HDMI_AUDIO_CODING_TYPE_DSD = 9,
+	HDMI_AUDIO_CODING_TYPE_EAC3 = 10,
+	HDMI_AUDIO_CODING_TYPE_DTS_HD = 11,
+	HDMI_AUDIO_CODING_TYPE_MLP = 12,
+	HDMI_AUDIO_CODING_TYPE_DST = 13,
+	HDMI_AUDIO_CODING_TYPE_WMA_PRO = 14,
+	HDMI_AUDIO_CODING_TYPE_CXT = 15,
+};
+
+enum hdmi_audio_sample_size {
+	HDMI_AUDIO_SAMPLE_SIZE_STREAM = 0,
+	HDMI_AUDIO_SAMPLE_SIZE_16 = 1,
+	HDMI_AUDIO_SAMPLE_SIZE_20 = 2,
+	HDMI_AUDIO_SAMPLE_SIZE_24 = 3,
+};
+
+enum hdmi_audio_sample_frequency {
+	HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM = 0,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_32000 = 1,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_44100 = 2,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_48000 = 3,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_88200 = 4,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_96000 = 5,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_176400 = 6,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_192000 = 7,
+};
+
+enum hdmi_audio_coding_type_ext {
+	HDMI_AUDIO_CODING_TYPE_EXT_CT = 0,
+	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC = 1,
+	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2 = 2,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND = 3,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC = 4,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2 = 5,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC = 6,
+	HDMI_AUDIO_CODING_TYPE_EXT_DRA = 7,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND = 8,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND = 10,
+};
+
+enum hdmi_3d_structure {
+	HDMI_3D_STRUCTURE_INVALID = -1,
+	HDMI_3D_STRUCTURE_FRAME_PACKING = 0,
+	HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE = 1,
+	HDMI_3D_STRUCTURE_LINE_ALTERNATIVE = 2,
+	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL = 3,
+	HDMI_3D_STRUCTURE_L_DEPTH = 4,
+	HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH = 5,
+	HDMI_3D_STRUCTURE_TOP_AND_BOTTOM = 6,
+	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF = 8,
+};
+
+enum hdmi_eotf {
+	HDMI_EOTF_TRADITIONAL_GAMMA_SDR = 0,
+	HDMI_EOTF_TRADITIONAL_GAMMA_HDR = 1,
+	HDMI_EOTF_SMPTE_ST2084 = 2,
+	HDMI_EOTF_BT_2100_HLG = 3,
+};
+
+enum hdmi_metadata_type {
+	HDMI_STATIC_METADATA_TYPE1 = 0,
+};
+
+struct hdmi_any_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+};
+
+struct hdmi_avi_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	bool itc;
+	unsigned char pixel_repeat;
+	enum hdmi_colorspace colorspace;
+	enum hdmi_scan_mode scan_mode;
+	enum hdmi_colorimetry colorimetry;
+	enum hdmi_picture_aspect picture_aspect;
+	enum hdmi_active_aspect active_aspect;
+	enum hdmi_extended_colorimetry extended_colorimetry;
+	enum hdmi_quantization_range quantization_range;
+	enum hdmi_nups nups;
+	unsigned char video_code;
+	enum hdmi_ycc_quantization_range ycc_quantization_range;
+	enum hdmi_content_type content_type;
+	unsigned short top_bar;
+	unsigned short bottom_bar;
+	unsigned short left_bar;
+	unsigned short right_bar;
+};
+
+struct hdmi_spd_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	char vendor[8];
+	char product[16];
+	enum hdmi_spd_sdi sdi;
+};
+
+struct hdmi_audio_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	unsigned char channels;
+	enum hdmi_audio_coding_type coding_type;
+	enum hdmi_audio_sample_size sample_size;
+	enum hdmi_audio_sample_frequency sample_frequency;
+	enum hdmi_audio_coding_type_ext coding_type_ext;
+	unsigned char channel_allocation;
+	unsigned char level_shift_value;
+	bool downmix_inhibit;
+};
+
+struct hdmi_vendor_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	unsigned int oui;
+	u8 vic;
+	enum hdmi_3d_structure s3d_struct;
+	unsigned int s3d_ext_data;
+};
+
+struct hdmi_drm_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	enum hdmi_eotf eotf;
+	enum hdmi_metadata_type metadata_type;
+	struct {
+		u16 x;
+		u16 y;
+	} display_primaries[3];
+	struct {
+		u16 x;
+		u16 y;
+	} white_point;
+	u16 max_display_mastering_luminance;
+	u16 min_display_mastering_luminance;
+	u16 max_cll;
+	u16 max_fall;
+};
+
+union hdmi_vendor_any_infoframe {
+	struct {
+		enum hdmi_infoframe_type type;
+		unsigned char version;
+		unsigned char length;
+		unsigned int oui;
+	} any;
+	struct hdmi_vendor_infoframe hdmi;
+};
+
+struct dp_sdp_header {
+	u8 HB0;
+	u8 HB1;
+	u8 HB2;
+	u8 HB3;
+};
+
+struct dp_sdp {
+	struct dp_sdp_header sdp_header;
+	u8 db[32];
+};
+
+union hdmi_infoframe {
+	struct hdmi_any_infoframe any;
+	struct hdmi_avi_infoframe avi;
+	struct hdmi_spd_infoframe spd;
+	union hdmi_vendor_any_infoframe vendor;
+	struct hdmi_audio_infoframe audio;
+	struct hdmi_drm_infoframe drm;
+};
+
+enum backlight_type {
+	BACKLIGHT_RAW = 1,
+	BACKLIGHT_PLATFORM = 2,
+	BACKLIGHT_FIRMWARE = 3,
+	BACKLIGHT_TYPE_MAX = 4,
+};
+
+enum backlight_scale {
+	BACKLIGHT_SCALE_UNKNOWN = 0,
+	BACKLIGHT_SCALE_LINEAR = 1,
+	BACKLIGHT_SCALE_NON_LINEAR = 2,
+};
+
+enum backlight_update_reason {
+	BACKLIGHT_UPDATE_HOTKEY = 0,
+	BACKLIGHT_UPDATE_SYSFS = 1,
+};
+
+enum backlight_notification {
+	BACKLIGHT_REGISTERED = 0,
+	BACKLIGHT_UNREGISTERED = 1,
+};
+
+struct backlight_properties {
+	int brightness;
+	int max_brightness;
+	int power;
+	int fb_blank;
+	enum backlight_type type;
+	unsigned int state;
+	enum backlight_scale scale;
+};
+
+struct backlight_ops;
+
+struct backlight_device {
+	struct backlight_properties props;
+	struct mutex update_lock;
+	struct mutex ops_lock;
+	const struct backlight_ops *ops;
+	struct notifier_block fb_notif;
+	struct list_head entry;
+	struct device dev;
+	bool fb_bl_on[32];
+	int use_count;
+};
+
+struct fb_info;
+
+struct backlight_ops {
+	unsigned int options;
+	int (*update_status)(struct backlight_device *);
+	int (*get_brightness)(struct backlight_device *);
+	int (*check_fb)(struct backlight_device *, struct fb_info *);
+};
+
+struct fb_bitfield {
+	__u32 offset;
+	__u32 length;
+	__u32 msb_right;
+};
+
+struct fb_var_screeninfo {
+	__u32 xres;
+	__u32 yres;
+	__u32 xres_virtual;
+	__u32 yres_virtual;
+	__u32 xoffset;
+	__u32 yoffset;
+	__u32 bits_per_pixel;
+	__u32 grayscale;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	__u32 nonstd;
+	__u32 activate;
+	__u32 height;
+	__u32 width;
+	__u32 accel_flags;
+	__u32 pixclock;
+	__u32 left_margin;
+	__u32 right_margin;
+	__u32 upper_margin;
+	__u32 lower_margin;
+	__u32 hsync_len;
+	__u32 vsync_len;
+	__u32 sync;
+	__u32 vmode;
+	__u32 rotate;
+	__u32 colorspace;
+	__u32 reserved[4];
+};
+
+struct fb_fix_screeninfo {
+	char id[16];
+	unsigned long smem_start;
+	__u32 smem_len;
+	__u32 type;
+	__u32 type_aux;
+	__u32 visual;
+	__u16 xpanstep;
+	__u16 ypanstep;
+	__u16 ywrapstep;
+	__u32 line_length;
+	unsigned long mmio_start;
+	__u32 mmio_len;
+	__u32 accel;
+	__u16 capabilities;
+	__u16 reserved[2];
+};
+
+struct fb_chroma {
+	__u32 redx;
+	__u32 greenx;
+	__u32 bluex;
+	__u32 whitex;
+	__u32 redy;
+	__u32 greeny;
+	__u32 bluey;
+	__u32 whitey;
+};
+
+struct fb_videomode;
+
+struct fb_monspecs {
+	struct fb_chroma chroma;
+	struct fb_videomode *modedb;
+	__u8 manufacturer[4];
+	__u8 monitor[14];
+	__u8 serial_no[14];
+	__u8 ascii[14];
+	__u32 modedb_len;
+	__u32 model;
+	__u32 serial;
+	__u32 year;
+	__u32 week;
+	__u32 hfmin;
+	__u32 hfmax;
+	__u32 dclkmin;
+	__u32 dclkmax;
+	__u16 input;
+	__u16 dpms;
+	__u16 signal;
+	__u16 vfmin;
+	__u16 vfmax;
+	__u16 gamma;
+	__u16 gtf: 1;
+	__u16 misc;
+	__u8 version;
+	__u8 revision;
+	__u8 max_x;
+	__u8 max_y;
+};
+
+struct fb_pixmap {
+	u8 *addr;
+	u32 size;
+	u32 offset;
+	u32 buf_align;
+	u32 scan_align;
+	u32 access_align;
+	u32 flags;
+	u32 blit_x;
+	u32 blit_y;
+	void (*writeio)(struct fb_info *, void *, void *, unsigned int);
+	void (*readio)(struct fb_info *, void *, void *, unsigned int);
+};
+
+struct fb_cmap {
+	__u32 start;
+	__u32 len;
+	__u16 *red;
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;
+};
+
+struct fb_ops;
+
+struct fb_info {
+	refcount_t count;
+	int node;
+	int flags;
+	int fbcon_rotate_hint;
+	struct mutex lock;
+	struct mutex mm_lock;
+	struct fb_var_screeninfo var;
+	struct fb_fix_screeninfo fix;
+	struct fb_monspecs monspecs;
+	struct fb_pixmap pixmap;
+	struct fb_pixmap sprite;
+	struct fb_cmap cmap;
+	struct list_head modelist;
+	struct fb_videomode *mode;
+	const struct fb_ops *fbops;
+	struct device *device;
+	struct device *dev;
+	int class_flag;
+	union {
+		char *screen_base;
+		char *screen_buffer;
+	};
+	unsigned long screen_size;
+	void *pseudo_palette;
+	u32 state;
+	void *fbcon_par;
+	void *par;
+	bool skip_vt_switch;
+};
+
+struct fb_videomode {
+	const char *name;
+	u32 refresh;
+	u32 xres;
+	u32 yres;
+	u32 pixclock;
+	u32 left_margin;
+	u32 right_margin;
+	u32 upper_margin;
+	u32 lower_margin;
+	u32 hsync_len;
+	u32 vsync_len;
+	u32 sync;
+	u32 vmode;
+	u32 flag;
+};
+
+struct fb_fillrect;
+
+struct fb_copyarea;
+
+struct fb_image;
+
+struct fb_cursor;
+
+struct fb_blit_caps;
+
+struct fb_ops {
+	struct module *owner;
+	int (*fb_open)(struct fb_info *, int);
+	int (*fb_release)(struct fb_info *, int);
+	ssize_t (*fb_read)(struct fb_info *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*fb_write)(struct fb_info *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	int (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);
+	int (*fb_set_par)(struct fb_info *);
+	int (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);
+	int (*fb_setcmap)(struct fb_cmap *, struct fb_info *);
+	int (*fb_blank)(int, struct fb_info *);
+	int (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);
+	void (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);
+	void (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);
+	void (*fb_imageblit)(struct fb_info *, const struct fb_image *);
+	int (*fb_cursor)(struct fb_info *, struct fb_cursor *);
+	int (*fb_sync)(struct fb_info *);
+	int (*fb_ioctl)(struct fb_info *, unsigned int, unsigned long);
+	int (*fb_compat_ioctl)(struct fb_info *, unsigned int, unsigned long);
+	int (*fb_mmap)(struct fb_info *, struct vm_area_struct *);
+	void (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);
+	void (*fb_destroy)(struct fb_info *);
+	int (*fb_debug_enter)(struct fb_info *);
+	int (*fb_debug_leave)(struct fb_info *);
+};
+
+struct fb_fillrect {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 color;
+	__u32 rop;
+};
+
+struct fb_copyarea {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 sx;
+	__u32 sy;
+};
+
+struct fb_image {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 fg_color;
+	__u32 bg_color;
+	__u8 depth;
+	const char *data;
+	struct fb_cmap cmap;
+};
+
+struct fbcurpos {
+	__u16 x;
+	__u16 y;
+};
+
+struct fb_cursor {
+	__u16 set;
+	__u16 enable;
+	__u16 rop;
+	const char *mask;
+	struct fbcurpos hot;
+	struct fb_image image;
+};
+
+struct fb_blit_caps {
+	u32 x;
+	u32 y;
+	u32 len;
+	u32 flags;
+};
+
+enum display_flags {
+	DISPLAY_FLAGS_HSYNC_LOW = 1,
+	DISPLAY_FLAGS_HSYNC_HIGH = 2,
+	DISPLAY_FLAGS_VSYNC_LOW = 4,
+	DISPLAY_FLAGS_VSYNC_HIGH = 8,
+	DISPLAY_FLAGS_DE_LOW = 16,
+	DISPLAY_FLAGS_DE_HIGH = 32,
+	DISPLAY_FLAGS_PIXDATA_POSEDGE = 64,
+	DISPLAY_FLAGS_PIXDATA_NEGEDGE = 128,
+	DISPLAY_FLAGS_INTERLACED = 256,
+	DISPLAY_FLAGS_DOUBLESCAN = 512,
+	DISPLAY_FLAGS_DOUBLECLK = 1024,
+	DISPLAY_FLAGS_SYNC_POSEDGE = 2048,
+	DISPLAY_FLAGS_SYNC_NEGEDGE = 4096,
+};
+
+struct display_timing;
+
+struct display_timings {
+	unsigned int num_timings;
+	unsigned int native_mode;
+	struct display_timing **timings;
+};
+
+struct timing_entry {
+	u32 min;
+	u32 typ;
+	u32 max;
+};
+
+struct display_timing {
+	struct timing_entry pixelclock;
+	struct timing_entry hactive;
+	struct timing_entry hfront_porch;
+	struct timing_entry hback_porch;
+	struct timing_entry hsync_len;
+	struct timing_entry vactive;
+	struct timing_entry vfront_porch;
+	struct timing_entry vback_porch;
+	struct timing_entry vsync_len;
+	enum display_flags flags;
+};
+
+struct videomode {
+	unsigned long pixelclock;
+	u32 hactive;
+	u32 hfront_porch;
+	u32 hback_porch;
+	u32 hsync_len;
+	u32 vactive;
+	u32 vfront_porch;
+	u32 vback_porch;
+	u32 vsync_len;
+	enum display_flags flags;
+};
+
+struct pm_domain_data {
+	struct list_head list_node;
+	struct device *dev;
+};
+
+struct devm_clk_state {
+	struct clk *clk;
+	void (*exit)(struct clk *);
+};
+
+struct clk_bulk_devres {
+	struct clk_bulk_data *clks;
+	int num_clks;
+};
+
+struct clk_hw;
+
+struct clk_lookup {
+	struct list_head node;
+	const char *dev_id;
+	const char *con_id;
+	struct clk *clk;
+	struct clk_hw *clk_hw;
+};
+
+struct clk_core;
+
+struct clk_init_data;
+
+struct clk_hw {
+	struct clk_core *core;
+	struct clk *clk;
+	const struct clk_init_data *init;
+};
+
+struct clk_ops;
+
+struct clk_parent_data;
+
+struct clk_init_data {
+	const char *name;
+	const struct clk_ops *ops;
+	const char * const *parent_names;
+	const struct clk_parent_data *parent_data;
+	const struct clk_hw **parent_hws;
+	u8 num_parents;
+	unsigned long flags;
+};
+
+struct clk_rate_request;
+
+struct clk_duty;
+
+struct clk_ops {
+	int (*prepare)(struct clk_hw *);
+	void (*unprepare)(struct clk_hw *);
+	int (*is_prepared)(struct clk_hw *);
+	void (*unprepare_unused)(struct clk_hw *);
+	int (*enable)(struct clk_hw *);
+	void (*disable)(struct clk_hw *);
+	int (*is_enabled)(struct clk_hw *);
+	void (*disable_unused)(struct clk_hw *);
+	int (*save_context)(struct clk_hw *);
+	void (*restore_context)(struct clk_hw *);
+	unsigned long (*recalc_rate)(struct clk_hw *, unsigned long);
+	long (*round_rate)(struct clk_hw *, unsigned long, unsigned long *);
+	int (*determine_rate)(struct clk_hw *, struct clk_rate_request *);
+	int (*set_parent)(struct clk_hw *, u8);
+	u8 (*get_parent)(struct clk_hw *);
+	int (*set_rate)(struct clk_hw *, unsigned long, unsigned long);
+	int (*set_rate_and_parent)(struct clk_hw *, unsigned long, unsigned long, u8);
+	unsigned long (*recalc_accuracy)(struct clk_hw *, unsigned long);
+	int (*get_phase)(struct clk_hw *);
+	int (*set_phase)(struct clk_hw *, int);
+	int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);
+	int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);
+	int (*init)(struct clk_hw *);
+	void (*terminate)(struct clk_hw *);
+	void (*debug_init)(struct clk_hw *, struct dentry *);
+	int (*pre_rate_change)(struct clk_hw *, unsigned long, unsigned long);
+	int (*post_rate_change)(struct clk_hw *, unsigned long, unsigned long);
+};
+
+struct clk_rate_request {
+	struct clk_core *core;
+	unsigned long rate;
+	unsigned long min_rate;
+	unsigned long max_rate;
+	unsigned long best_parent_rate;
+	struct clk_hw *best_parent_hw;
+};
+
+struct clk_duty {
+	unsigned int num;
+	unsigned int den;
+};
+
+struct clk_parent_data {
+	const struct clk_hw *hw;
+	const char *fw_name;
+	const char *name;
+	int index;
+};
+
+struct clk_lookup_alloc {
+	struct clk_lookup cl;
+	char dev_id[20];
+	char con_id[16];
+};
+
+typedef void (*btf_trace_clk_enable)(void *, struct clk_core *);
+
+struct clk_parent_map;
+
+struct clk_core {
+	const char *name;
+	const struct clk_ops *ops;
+	struct clk_hw *hw;
+	struct module *owner;
+	struct device *dev;
+	struct hlist_node rpm_node;
+	struct device_node *of_node;
+	struct clk_core *parent;
+	struct clk_parent_map *parents;
+	u8 num_parents;
+	u8 new_parent_index;
+	unsigned long rate;
+	unsigned long req_rate;
+	unsigned long new_rate;
+	struct clk_core *new_parent;
+	struct clk_core *new_child;
+	unsigned long flags;
+	bool orphan;
+	bool rpm_enabled;
+	bool need_sync;
+	bool boot_enabled;
+	unsigned int enable_count;
+	unsigned int prepare_count;
+	unsigned int protect_count;
+	unsigned long min_rate;
+	unsigned long max_rate;
+	unsigned long accuracy;
+	int phase;
+	struct clk_duty duty;
+	struct hlist_head children;
+	struct hlist_node child_node;
+	struct hlist_head clks;
+	unsigned int notifier_count;
+	struct dentry *dentry;
+	struct hlist_node debug_node;
+	struct kref ref;
+};
+
+struct clk {
+	struct clk_core *core;
+	struct device *dev;
+	const char *dev_id;
+	const char *con_id;
+	unsigned long min_rate;
+	unsigned long max_rate;
+	unsigned int exclusive_count;
+	struct hlist_node clks_node;
+};
+
+struct clk_parent_map {
+	const struct clk_hw *hw;
+	struct clk_core *core;
+	const char *fw_name;
+	const char *name;
+	int index;
+};
+
+typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_disable)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, unsigned long);
+
+typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, unsigned long);
+
+typedef void (*btf_trace_clk_set_min_rate)(void *, struct clk_core *, unsigned long);
+
+typedef void (*btf_trace_clk_set_max_rate)(void *, struct clk_core *, unsigned long);
+
+typedef void (*btf_trace_clk_set_rate_range)(void *, struct clk_core *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);
+
+typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);
+
+typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);
+
+typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);
+
+typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);
+
+typedef void (*btf_trace_clk_rate_request_start)(void *, struct clk_rate_request *);
+
+typedef void (*btf_trace_clk_rate_request_done)(void *, struct clk_rate_request *);
+
+struct clk_notifier {
+	struct clk *clk;
+	struct srcu_notifier_head notifier_head;
+	struct list_head node;
+};
+
+struct of_clk_provider {
+	struct list_head link;
+	struct device_node *node;
+	struct clk * (*get)(struct of_phandle_args *, void *);
+	struct clk_hw * (*get_hw)(struct of_phandle_args *, void *);
+	void *data;
+};
+
+struct clock_provider {
+	void (*clk_init_cb)(struct device_node *);
+	struct device_node *np;
+	struct list_head node;
+};
+
+struct trace_event_raw_clk {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long rate;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate_range {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long min;
+	unsigned long max;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_parent {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_pname;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_phase {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int phase;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_duty_cycle {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int num;
+	unsigned int den;
+	char __data[0];
+};
+
+struct trace_event_raw_clk_rate_request {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_pname;
+	unsigned long min;
+	unsigned long max;
+	unsigned long prate;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_clk {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_rate_range {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_phase {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clk_duty_cycle {
+	u32 name;
+};
+
+struct clk_notifier_data {
+	struct clk *clk;
+	unsigned long old_rate;
+	unsigned long new_rate;
+};
+
+struct trace_event_data_offsets_clk_parent {
+	u32 name;
+	u32 pname;
+};
+
+struct trace_event_data_offsets_clk_rate_request {
+	u32 name;
+	u32 pname;
+};
+
+struct clk_notifier_devres {
+	struct clk *clk;
+	struct notifier_block *nb;
+};
+
+struct clk_onecell_data {
+	struct clk **clks;
+	unsigned int clk_num;
+};
+
+struct clk_hw_onecell_data {
+	unsigned int num;
+	struct clk_hw *hws[0];
+};
+
+struct clk_div_table;
+
+struct clk_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u8 width;
+	u8 flags;
+	const struct clk_div_table *table;
+	spinlock_t *lock;
+};
+
+struct clk_div_table {
+	unsigned int val;
+	unsigned int div;
+};
+
+struct clk_fixed_factor {
+	struct clk_hw hw;
+	unsigned int mult;
+	unsigned int div;
+};
+
+struct clk_fixed_rate {
+	struct clk_hw hw;
+	unsigned long fixed_rate;
+	unsigned long fixed_accuracy;
+	unsigned long flags;
+};
+
+struct clk_gate {
+	struct clk_hw hw;
+	void *reg;
+	u8 bit_idx;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_multiplier {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u8 width;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_mux {
+	struct clk_hw hw;
+	void *reg;
+	const u32 *table;
+	u32 mask;
+	u8 shift;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct clk_composite {
+	struct clk_hw hw;
+	struct clk_ops ops;
+	struct clk_hw *mux_hw;
+	struct clk_hw *rate_hw;
+	struct clk_hw *gate_hw;
+	const struct clk_ops *mux_ops;
+	const struct clk_ops *rate_ops;
+	const struct clk_ops *gate_ops;
+};
+
+struct clk_fractional_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 mshift;
+	u8 mwidth;
+	u8 nshift;
+	u8 nwidth;
+	u8 flags;
+	void (*approximation)(struct clk_hw *, unsigned long, unsigned long *, unsigned long *, unsigned long *);
+	spinlock_t *lock;
+};
+
+struct u32_fract {
+	__u32 numerator;
+	__u32 denominator;
+};
+
+struct clk_gpio {
+	struct clk_hw hw;
+	struct gpio_desc *gpiod;
+};
+
+struct scpi_dvfs_info;
+
+struct scpi_ops;
+
+struct scpi_clk {
+	u32 id;
+	struct clk_hw hw;
+	struct scpi_dvfs_info *info;
+	struct scpi_ops *scpi_ops;
+};
+
+struct scpi_opp;
+
+struct scpi_dvfs_info {
+	unsigned int count;
+	unsigned int latency;
+	struct scpi_opp *opps;
+};
+
+struct scpi_opp {
+	u32 freq;
+	u32 m_volt;
+};
+
+struct scpi_sensor_info;
+
+struct scpi_ops {
+	u32 (*get_version)();
+	int (*clk_get_range)(u16, unsigned long *, unsigned long *);
+	unsigned long (*clk_get_val)(u16);
+	int (*clk_set_val)(u16, unsigned long);
+	int (*dvfs_get_idx)(u8);
+	int (*dvfs_set_idx)(u8, u8);
+	struct scpi_dvfs_info * (*dvfs_get_info)(u8);
+	int (*device_domain_id)(struct device *);
+	int (*get_transition_latency)(struct device *);
+	int (*add_opps_to_device)(struct device *);
+	int (*sensor_get_capability)(u16 *);
+	int (*sensor_get_info)(u16, struct scpi_sensor_info *);
+	int (*sensor_get_value)(u16, u64 *);
+	int (*device_get_power_state)(u16);
+	int (*device_set_power_state)(u16, u8);
+};
+
+struct scpi_sensor_info {
+	u16 sensor_id;
+	u8 class;
+	u8 trigger_type;
+	char name[20];
+};
+
+struct scpi_clk_data {
+	struct scpi_clk **clk;
+	unsigned int clk_num;
+};
+
+struct hisi_phase_clock {
+	unsigned int id;
+	const char *name;
+	const char *parent_names;
+	unsigned long flags;
+	unsigned long offset;
+	u8 shift;
+	u8 width;
+	u32 *phase_degrees;
+	u32 *phase_regvals;
+	u8 phase_num;
+};
+
+struct hisi_clock_data {
+	struct clk_onecell_data clk_data;
+	void *base;
+};
+
+struct hisi_fixed_rate_clock {
+	unsigned int id;
+	char *name;
+	const char *parent_name;
+	unsigned long flags;
+	unsigned long fixed_rate;
+};
+
+struct hisi_fixed_factor_clock {
+	unsigned int id;
+	char *name;
+	const char *parent_name;
+	unsigned long mult;
+	unsigned long div;
+	unsigned long flags;
+};
+
+struct hisi_mux_clock {
+	unsigned int id;
+	const char *name;
+	const char * const *parent_names;
+	u8 num_parents;
+	unsigned long flags;
+	unsigned long offset;
+	u8 shift;
+	u8 width;
+	u8 mux_flags;
+	const u32 *table;
+	const char *alias;
+};
+
+struct hisi_divider_clock {
+	unsigned int id;
+	const char *name;
+	const char *parent_name;
+	unsigned long flags;
+	unsigned long offset;
+	u8 shift;
+	u8 width;
+	u8 div_flags;
+	struct clk_div_table *table;
+	const char *alias;
+};
+
+struct hisi_gate_clock {
+	unsigned int id;
+	const char *name;
+	const char *parent_name;
+	unsigned long flags;
+	unsigned long offset;
+	u8 bit_idx;
+	u8 gate_flags;
+	const char *alias;
+};
+
+struct hi6220_divider_clock {
+	unsigned int id;
+	const char *name;
+	const char *parent_name;
+	unsigned long flags;
+	unsigned long offset;
+	u8 shift;
+	u8 width;
+	u32 mask_bit;
+	const char *alias;
+};
+
+struct clkgate_separated {
+	struct clk_hw hw;
+	void *enable;
+	u8 bit_idx;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct hi6220_clk_divider {
+	struct clk_hw hw;
+	void *reg;
+	u8 shift;
+	u8 width;
+	u32 mask;
+	const struct clk_div_table *table;
+	spinlock_t *lock;
+};
+
+struct clk_hisi_phase {
+	struct clk_hw hw;
+	void *reg;
+	u32 *phase_degrees;
+	u32 *phase_regvals;
+	u8 phase_num;
+	u32 mask;
+	u8 shift;
+	u8 flags;
+	spinlock_t *lock;
+};
+
+struct hisi_crg_funcs {
+	struct hisi_clock_data * (*register_clks)(struct platform_device *);
+	void (*unregister_clks)(struct platform_device *);
+};
+
+struct hisi_reset_controller;
+
+struct hisi_crg_dev {
+	struct hisi_clock_data *clk_data;
+	struct hisi_reset_controller *rstc;
+	const struct hisi_crg_funcs *funcs;
+};
+
+struct hi3519_crg_data {
+	struct hisi_clock_data *clk_data;
+	struct hisi_reset_controller *rstc;
+};
+
+struct hi3559av100_pll_clock {
+	u32 id;
+	const char *name;
+	const char *parent_name;
+	const u32 ctrl_reg1;
+	const u8 frac_shift;
+	const u8 frac_width;
+	const u8 postdiv1_shift;
+	const u8 postdiv1_width;
+	const u8 postdiv2_shift;
+	const u8 postdiv2_width;
+	const u32 ctrl_reg2;
+	const u8 fbdiv_shift;
+	const u8 fbdiv_width;
+	const u8 refdiv_shift;
+	const u8 refdiv_width;
+};
+
+struct hi3559av100_clk_pll {
+	struct clk_hw hw;
+	u32 id;
+	void *ctrl_reg1;
+	u8 frac_shift;
+	u8 frac_width;
+	u8 postdiv1_shift;
+	u8 postdiv1_width;
+	u8 postdiv2_shift;
+	u8 postdiv2_width;
+	void *ctrl_reg2;
+	u8 fbdiv_shift;
+	u8 fbdiv_width;
+	u8 refdiv_shift;
+	u8 refdiv_width;
+};
+
+struct reset_controller_dev;
+
+struct reset_control_ops {
+	int (*reset)(struct reset_controller_dev *, unsigned long);
+	int (*assert)(struct reset_controller_dev *, unsigned long);
+	int (*deassert)(struct reset_controller_dev *, unsigned long);
+	int (*status)(struct reset_controller_dev *, unsigned long);
+};
+
+struct reset_controller_dev {
+	const struct reset_control_ops *ops;
+	struct module *owner;
+	struct list_head list;
+	struct list_head reset_control_head;
+	struct device *dev;
+	struct device_node *of_node;
+	int of_reset_n_cells;
+	int (*of_xlate)(struct reset_controller_dev *, const struct of_phandle_args *);
+	unsigned int nr_resets;
+};
+
+struct hisi_reset_controller {
+	spinlock_t lock;
+	void *membase;
+	struct reset_controller_dev rcdev;
+};
+
+struct mbox_client {
+	struct device *dev;
+	bool tx_block;
+	unsigned long tx_tout;
+	bool knows_txdone;
+	void (*rx_callback)(struct mbox_client *, void *);
+	void (*tx_prepare)(struct mbox_client *, void *);
+	void (*tx_done)(struct mbox_client *, void *, int);
+};
+
+struct mbox_chan;
+
+struct hi6220_stub_clk {
+	u32 id;
+	struct device *dev;
+	struct clk_hw hw;
+	struct regmap *dfs_map;
+	struct mbox_client cl;
+	struct mbox_chan *mbox;
+};
+
+struct hi6220_mbox_msg {
+	unsigned char type;
+	unsigned char cmd;
+	unsigned char obj;
+	unsigned char src;
+	unsigned char para[4];
+};
+
+union hi6220_mbox_data {
+	unsigned int data[8];
+	struct hi6220_mbox_msg msg;
+};
+
+struct hi3660_stub_clk_chan {
+	struct mbox_client cl;
+	struct mbox_chan *mbox;
+};
+
+struct hi3660_stub_clk {
+	unsigned int id;
+	struct clk_hw hw;
+	unsigned int cmd;
+	unsigned int msg[8];
+	unsigned int rate;
+};
+
+struct tegra_cpu_car_ops {
+	void (*wait_for_reset)(u32);
+	void (*put_in_reset)(u32);
+	void (*out_of_reset)(u32);
+	void (*enable_clock)(u32);
+	void (*disable_clock)(u32);
+	bool (*rail_off_ready)();
+	void (*suspend)();
+	void (*resume)();
+};
+
+typedef void (*tegra_clk_apply_init_table_func)();
+
+struct tegra_clk_periph_regs {
+	u32 enb_reg;
+	u32 enb_set_reg;
+	u32 enb_clr_reg;
+	u32 rst_reg;
+	u32 rst_set_reg;
+	u32 rst_clr_reg;
+};
+
+struct tegra_clk_duplicate {
+	int clk_id;
+	struct clk_lookup lookup;
+};
+
+struct tegra_clk_init_table {
+	unsigned int clk_id;
+	unsigned int parent_id;
+	unsigned long rate;
+	int state;
+};
+
+struct tegra_devclk {
+	int dt_id;
+	char *dev_id;
+	char *con_id;
+};
+
+struct tegra_clk {
+	int dt_id;
+	bool present;
+};
+
+struct tegra_clk_sync_source {
+	struct clk_hw hw;
+	unsigned long rate;
+	unsigned long max_rate;
+};
+
+struct tegra_clk_device {
+	struct notifier_block clk_nb;
+	struct device *dev;
+	struct clk_hw *hw;
+	struct mutex lock;
+};
+
+struct tegra_core_opp_params {
+	bool init_state;
+};
+
+enum dfll_ctrl_mode {
+	DFLL_UNINITIALIZED = 0,
+	DFLL_DISABLED = 1,
+	DFLL_OPEN_LOOP = 2,
+	DFLL_CLOSED_LOOP = 3,
+};
+
+enum dfll_tune_range {
+	DFLL_TUNE_UNINITIALIZED = 0,
+	DFLL_TUNE_LOW = 1,
+};
+
+enum tegra_dfll_pmu_if {
+	TEGRA_DFLL_PMU_I2C = 0,
+	TEGRA_DFLL_PMU_PWM = 1,
+};
+
+struct i2c_adapter;
+
+struct i2c_client {
+	unsigned short flags;
+	unsigned short addr;
+	char name[20];
+	struct i2c_adapter *adapter;
+	struct device dev;
+	int init_irq;
+	int irq;
+	struct list_head detected;
+	void *devres_group_id;
+};
+
+struct i2c_algorithm;
+
+struct i2c_lock_operations;
+
+struct i2c_bus_recovery_info;
+
+struct i2c_adapter_quirks;
+
+struct i2c_adapter {
+	struct module *owner;
+	unsigned int class;
+	const struct i2c_algorithm *algo;
+	void *algo_data;
+	const struct i2c_lock_operations *lock_ops;
+	struct rt_mutex bus_lock;
+	struct rt_mutex mux_lock;
+	int timeout;
+	int retries;
+	struct device dev;
+	unsigned long locked_flags;
+	int nr;
+	char name[48];
+	struct completion dev_released;
+	struct mutex userspace_clients_lock;
+	struct list_head userspace_clients;
+	struct i2c_bus_recovery_info *bus_recovery_info;
+	const struct i2c_adapter_quirks *quirks;
+	struct irq_domain *host_notify_domain;
+	struct regulator *bus_regulator;
+};
+
+struct i2c_msg;
+
+union i2c_smbus_data;
+
+struct i2c_algorithm {
+	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*smbus_xfer)(struct i2c_adapter *, u16, unsigned short, char, u8, int, union i2c_smbus_data *);
+	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, unsigned short, char, u8, int, union i2c_smbus_data *);
+	u32 (*functionality)(struct i2c_adapter *);
+};
+
+struct i2c_msg {
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	__u8 *buf;
+};
+
+union i2c_smbus_data {
+	__u8 byte;
+	__u16 word;
+	__u8 block[34];
+};
+
+struct i2c_lock_operations {
+	void (*lock_bus)(struct i2c_adapter *, unsigned int);
+	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
+	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
+};
+
+struct i2c_bus_recovery_info {
+	int (*recover_bus)(struct i2c_adapter *);
+	int (*get_scl)(struct i2c_adapter *);
+	void (*set_scl)(struct i2c_adapter *, int);
+	int (*get_sda)(struct i2c_adapter *);
+	void (*set_sda)(struct i2c_adapter *, int);
+	int (*get_bus_free)(struct i2c_adapter *);
+	void (*prepare_recovery)(struct i2c_adapter *);
+	void (*unprepare_recovery)(struct i2c_adapter *);
+	struct gpio_desc *scl_gpiod;
+	struct gpio_desc *sda_gpiod;
+	struct pinctrl *pinctrl;
+	struct pinctrl_state *pins_default;
+	struct pinctrl_state *pins_gpio;
+};
+
+struct i2c_adapter_quirks {
+	u64 flags;
+	int max_num_msgs;
+	u16 max_write_len;
+	u16 max_read_len;
+	u16 max_comb_1st_msg_len;
+	u16 max_comb_2nd_msg_len;
+};
+
+struct dfll_rate_req {
+	unsigned long rate;
+	unsigned long dvco_target_rate;
+	int lut_index;
+	u8 mult_bits;
+	u8 scale_bits;
+};
+
+struct tegra_dfll_soc_data;
+
+struct tegra_dfll {
+	struct device *dev;
+	struct tegra_dfll_soc_data *soc;
+	void *base;
+	void *i2c_base;
+	void *i2c_controller_base;
+	void *lut_base;
+	struct regulator *vdd_reg;
+	struct clk *soc_clk;
+	struct clk *ref_clk;
+	struct clk *i2c_clk;
+	struct clk *dfll_clk;
+	struct reset_control *dfll_rst;
+	struct reset_control *dvco_rst;
+	unsigned long ref_rate;
+	unsigned long i2c_clk_rate;
+	unsigned long dvco_rate_min;
+	enum dfll_ctrl_mode mode;
+	enum dfll_tune_range tune_range;
+	struct dentry *debugfs_dir;
+	struct clk_hw dfll_clk_hw;
+	const char *output_clock_name;
+	struct dfll_rate_req last_req;
+	unsigned long last_unrounded_rate;
+	u32 droop_ctrl;
+	u32 sample_rate;
+	u32 force_mode;
+	u32 cf;
+	u32 ci;
+	u32 cg;
+	bool cg_scale;
+	u32 i2c_fs_rate;
+	u32 i2c_reg;
+	u32 i2c_slave_addr;
+	unsigned int lut[33];
+	unsigned long lut_uv[33];
+	int lut_size;
+	u8 lut_bottom;
+	u8 lut_min;
+	u8 lut_max;
+	u8 lut_safe;
+	enum tegra_dfll_pmu_if pmu_if;
+	unsigned long pwm_rate;
+	struct pinctrl *pwm_pin;
+	struct pinctrl_state *pwm_enable_state;
+	struct pinctrl_state *pwm_disable_state;
+	u32 reg_init_uV;
+};
+
+struct rail_alignment {
+	int offset_uv;
+	int step_uv;
+};
+
+struct cvb_table;
+
+struct tegra_dfll_soc_data {
+	struct device *dev;
+	unsigned long max_freq;
+	const struct cvb_table *cvb;
+	struct rail_alignment alignment;
+	void (*init_clock_trimmers)();
+	void (*set_clock_trimmers_high)();
+	void (*set_clock_trimmers_low)();
+};
+
+struct cvb_coefficients {
+	int c0;
+	int c1;
+	int c2;
+};
+
+struct cvb_table_freq_entry {
+	unsigned long freq;
+	struct cvb_coefficients coefficients;
+};
+
+struct cvb_cpu_dfll_data {
+	u32 tune0_low;
+	u32 tune0_high;
+	u32 tune1;
+	unsigned int tune_high_min_millivolts;
+};
+
+struct cvb_table {
+	int speedo_id;
+	int process_id;
+	int min_millivolts;
+	int max_millivolts;
+	int speedo_scale;
+	int voltage_scale;
+	struct cvb_table_freq_entry entries[40];
+	struct cvb_cpu_dfll_data cpu_dfll_data;
+};
+
+struct tegra_clk_frac_div {
+	struct clk_hw hw;
+	void *reg;
+	u8 flags;
+	u8 shift;
+	u8 width;
+	u8 frac_width;
+	spinlock_t *lock;
+};
+
+struct tegra_clk_periph_gate {
+	u32 magic;
+	struct clk_hw hw;
+	void *clk_base;
+	u8 flags;
+	int clk_num;
+	int *enable_refcnt;
+	const struct tegra_clk_periph_regs *regs;
+};
+
+struct tegra_clk_periph {
+	u32 magic;
+	struct clk_hw hw;
+	struct clk_mux mux;
+	struct tegra_clk_frac_div divider;
+	struct tegra_clk_periph_gate gate;
+	const struct clk_ops *mux_ops;
+	const struct clk_ops *div_ops;
+	const struct clk_ops *gate_ops;
+};
+
+struct tegra_periph_init_data {
+	const char *name;
+	int clk_id;
+	union {
+		const char * const *parent_names;
+		const char *parent_name;
+	} p;
+	int num_parents;
+	struct tegra_clk_periph periph;
+	u32 offset;
+	const char *con_id;
+	const char *dev_id;
+	unsigned long flags;
+};
+
+struct tegra_clk_periph_fixed {
+	struct clk_hw hw;
+	void *base;
+	const struct tegra_clk_periph_regs *regs;
+	unsigned int mul;
+	unsigned int div;
+	unsigned int num;
+};
+
+struct div_nmp {
+	u8 divn_shift;
+	u8 divn_width;
+	u8 divm_shift;
+	u8 divm_width;
+	u8 divp_shift;
+	u8 divp_width;
+	u8 override_divn_shift;
+	u8 override_divm_shift;
+	u8 override_divp_shift;
+};
+
+struct utmi_clk_param {
+	u32 osc_frequency;
+	u8 enable_delay_count;
+	u8 stable_count;
+	u8 active_delay_count;
+	u8 xtal_freq_count;
+};
+
+struct tegra_clk_pll_params;
+
+struct tegra_clk_pll {
+	struct clk_hw hw;
+	void *clk_base;
+	void *pmc;
+	spinlock_t *lock;
+	struct tegra_clk_pll_params *params;
+};
+
+struct pdiv_map;
+
+struct tegra_clk_pll_freq_table;
+
+struct tegra_clk_pll_params {
+	unsigned long input_min;
+	unsigned long input_max;
+	unsigned long cf_min;
+	unsigned long cf_max;
+	unsigned long vco_min;
+	unsigned long vco_max;
+	u32 base_reg;
+	u32 misc_reg;
+	u32 lock_reg;
+	u32 lock_mask;
+	u32 lock_enable_bit_idx;
+	u32 iddq_reg;
+	u32 iddq_bit_idx;
+	u32 reset_reg;
+	u32 reset_bit_idx;
+	u32 sdm_din_reg;
+	u32 sdm_din_mask;
+	u32 sdm_ctrl_reg;
+	u32 sdm_ctrl_en_mask;
+	u32 ssc_ctrl_reg;
+	u32 ssc_ctrl_en_mask;
+	u32 aux_reg;
+	u32 dyn_ramp_reg;
+	u32 ext_misc_reg[6];
+	u32 pmc_divnm_reg;
+	u32 pmc_divp_reg;
+	u32 flags;
+	int stepa_shift;
+	int stepb_shift;
+	int lock_delay;
+	int max_p;
+	bool defaults_set;
+	const struct pdiv_map *pdiv_tohw;
+	struct div_nmp *div_nmp;
+	struct tegra_clk_pll_freq_table *freq_table;
+	unsigned long fixed_rate;
+	u16 mdiv_default;
+	u32 (*round_p_to_pdiv)(u32, u32 *);
+	void (*set_gain)(struct tegra_clk_pll_freq_table *);
+	int (*calc_rate)(struct clk_hw *, struct tegra_clk_pll_freq_table *, unsigned long, unsigned long);
+	unsigned long (*adjust_vco)(struct tegra_clk_pll_params *, unsigned long);
+	void (*set_defaults)(struct tegra_clk_pll *);
+	int (*dyn_ramp)(struct tegra_clk_pll *, struct tegra_clk_pll_freq_table *);
+	int (*pre_rate_change)();
+	void (*post_rate_change)();
+};
+
+struct pdiv_map {
+	u8 pdiv;
+	u8 hw_val;
+};
+
+struct tegra_clk_pll_freq_table {
+	unsigned long input_rate;
+	unsigned long output_rate;
+	u32 n;
+	u32 m;
+	u8 p;
+	u8 cpcon;
+	u16 sdm_data;
+};
+
+struct tegra_clk_pll_out {
+	struct clk_hw hw;
+	void *reg;
+	u8 enb_bit_idx;
+	u8 rst_bit_idx;
+	spinlock_t *lock;
+	u8 flags;
+};
+
+struct tegra_sdmmc_mux {
+	struct clk_hw hw;
+	void *reg;
+	spinlock_t *lock;
+	const struct clk_ops *gate_ops;
+	struct tegra_clk_periph_gate gate;
+	u8 div_flags;
+};
+
+struct tegra_clk_super_mux {
+	struct clk_hw hw;
+	void *reg;
+	struct tegra_clk_frac_div frac_div;
+	const struct clk_ops *div_ops;
+	u8 width;
+	u8 flags;
+	u8 div2_index;
+	u8 pllx_index;
+	spinlock_t *lock;
+};
+
+struct tegra_sync_source_initdata {
+	char *name;
+	unsigned long rate;
+	unsigned long max_rate;
+	int clk_id;
+};
+
+struct tegra_audio_clk_initdata {
+	char *gate_name;
+	char *mux_name;
+	u32 offset;
+	int gate_clk_id;
+	int mux_clk_id;
+};
+
+struct tegra_audio2x_clk_initdata {
+	char *parent;
+	char *gate_name;
+	char *name_2x;
+	char *div_name;
+	int clk_id;
+	int clk_num;
+	u8 div_offset;
+};
+
+enum clk_id {
+	tegra_clk_actmon = 0,
+	tegra_clk_adx = 1,
+	tegra_clk_adx1 = 2,
+	tegra_clk_afi = 3,
+	tegra_clk_amx = 4,
+	tegra_clk_amx1 = 5,
+	tegra_clk_apb2ape = 6,
+	tegra_clk_ahbdma = 7,
+	tegra_clk_apbdma = 8,
+	tegra_clk_apbif = 9,
+	tegra_clk_ape = 10,
+	tegra_clk_audio0 = 11,
+	tegra_clk_audio0_2x = 12,
+	tegra_clk_audio0_mux = 13,
+	tegra_clk_audio1 = 14,
+	tegra_clk_audio1_2x = 15,
+	tegra_clk_audio1_mux = 16,
+	tegra_clk_audio2 = 17,
+	tegra_clk_audio2_2x = 18,
+	tegra_clk_audio2_mux = 19,
+	tegra_clk_audio3 = 20,
+	tegra_clk_audio3_2x = 21,
+	tegra_clk_audio3_mux = 22,
+	tegra_clk_audio4 = 23,
+	tegra_clk_audio4_2x = 24,
+	tegra_clk_audio4_mux = 25,
+	tegra_clk_bsea = 26,
+	tegra_clk_bsev = 27,
+	tegra_clk_cclk_g = 28,
+	tegra_clk_cclk_lp = 29,
+	tegra_clk_cilab = 30,
+	tegra_clk_cilcd = 31,
+	tegra_clk_cile = 32,
+	tegra_clk_clk_32k = 33,
+	tegra_clk_clk72Mhz = 34,
+	tegra_clk_clk72Mhz_8 = 35,
+	tegra_clk_clk_m = 36,
+	tegra_clk_osc = 37,
+	tegra_clk_osc_div2 = 38,
+	tegra_clk_osc_div4 = 39,
+	tegra_clk_cml0 = 40,
+	tegra_clk_cml1 = 41,
+	tegra_clk_csi = 42,
+	tegra_clk_csite = 43,
+	tegra_clk_csite_8 = 44,
+	tegra_clk_csus = 45,
+	tegra_clk_cve = 46,
+	tegra_clk_dam0 = 47,
+	tegra_clk_dam1 = 48,
+	tegra_clk_dam2 = 49,
+	tegra_clk_d_audio = 50,
+	tegra_clk_dbgapb = 51,
+	tegra_clk_dds = 52,
+	tegra_clk_dfll_ref = 53,
+	tegra_clk_dfll_soc = 54,
+	tegra_clk_disp1 = 55,
+	tegra_clk_disp1_8 = 56,
+	tegra_clk_disp2 = 57,
+	tegra_clk_disp2_8 = 58,
+	tegra_clk_dp2 = 59,
+	tegra_clk_dpaux = 60,
+	tegra_clk_dpaux1 = 61,
+	tegra_clk_dsialp = 62,
+	tegra_clk_dsia_mux = 63,
+	tegra_clk_dsiblp = 64,
+	tegra_clk_dsib_mux = 65,
+	tegra_clk_dtv = 66,
+	tegra_clk_emc = 67,
+	tegra_clk_entropy = 68,
+	tegra_clk_entropy_8 = 69,
+	tegra_clk_epp = 70,
+	tegra_clk_epp_8 = 71,
+	tegra_clk_extern1 = 72,
+	tegra_clk_extern2 = 73,
+	tegra_clk_extern3 = 74,
+	tegra_clk_fuse = 75,
+	tegra_clk_fuse_burn = 76,
+	tegra_clk_gpu = 77,
+	tegra_clk_gr2d = 78,
+	tegra_clk_gr2d_8 = 79,
+	tegra_clk_gr3d = 80,
+	tegra_clk_gr3d_8 = 81,
+	tegra_clk_hclk = 82,
+	tegra_clk_hda = 83,
+	tegra_clk_hda_8 = 84,
+	tegra_clk_hda2codec_2x = 85,
+	tegra_clk_hda2codec_2x_8 = 86,
+	tegra_clk_hda2hdmi = 87,
+	tegra_clk_hdmi = 88,
+	tegra_clk_hdmi_audio = 89,
+	tegra_clk_host1x = 90,
+	tegra_clk_host1x_8 = 91,
+	tegra_clk_host1x_9 = 92,
+	tegra_clk_hsic_trk = 93,
+	tegra_clk_i2c1 = 94,
+	tegra_clk_i2c2 = 95,
+	tegra_clk_i2c3 = 96,
+	tegra_clk_i2c4 = 97,
+	tegra_clk_i2c5 = 98,
+	tegra_clk_i2c6 = 99,
+	tegra_clk_i2cslow = 100,
+	tegra_clk_i2s0 = 101,
+	tegra_clk_i2s0_sync = 102,
+	tegra_clk_i2s1 = 103,
+	tegra_clk_i2s1_sync = 104,
+	tegra_clk_i2s2 = 105,
+	tegra_clk_i2s2_sync = 106,
+	tegra_clk_i2s3 = 107,
+	tegra_clk_i2s3_sync = 108,
+	tegra_clk_i2s4 = 109,
+	tegra_clk_i2s4_sync = 110,
+	tegra_clk_isp = 111,
+	tegra_clk_isp_8 = 112,
+	tegra_clk_isp_9 = 113,
+	tegra_clk_ispb = 114,
+	tegra_clk_kbc = 115,
+	tegra_clk_kfuse = 116,
+	tegra_clk_la = 117,
+	tegra_clk_maud = 118,
+	tegra_clk_mipi = 119,
+	tegra_clk_mipibif = 120,
+	tegra_clk_mipi_cal = 121,
+	tegra_clk_mpe = 122,
+	tegra_clk_mselect = 123,
+	tegra_clk_msenc = 124,
+	tegra_clk_ndflash = 125,
+	tegra_clk_ndflash_8 = 126,
+	tegra_clk_ndspeed = 127,
+	tegra_clk_ndspeed_8 = 128,
+	tegra_clk_nor = 129,
+	tegra_clk_nvdec = 130,
+	tegra_clk_nvenc = 131,
+	tegra_clk_nvjpg = 132,
+	tegra_clk_owr = 133,
+	tegra_clk_owr_8 = 134,
+	tegra_clk_pcie = 135,
+	tegra_clk_pclk = 136,
+	tegra_clk_pll_a = 137,
+	tegra_clk_pll_a_out0 = 138,
+	tegra_clk_pll_a1 = 139,
+	tegra_clk_pll_c = 140,
+	tegra_clk_pll_c2 = 141,
+	tegra_clk_pll_c3 = 142,
+	tegra_clk_pll_c4 = 143,
+	tegra_clk_pll_c4_out0 = 144,
+	tegra_clk_pll_c4_out1 = 145,
+	tegra_clk_pll_c4_out2 = 146,
+	tegra_clk_pll_c4_out3 = 147,
+	tegra_clk_pll_c_out1 = 148,
+	tegra_clk_pll_d = 149,
+	tegra_clk_pll_d2 = 150,
+	tegra_clk_pll_d2_out0 = 151,
+	tegra_clk_pll_d_out0 = 152,
+	tegra_clk_pll_dp = 153,
+	tegra_clk_pll_e_out0 = 154,
+	tegra_clk_pll_g_ref = 155,
+	tegra_clk_pll_m = 156,
+	tegra_clk_pll_m_out1 = 157,
+	tegra_clk_pll_mb = 158,
+	tegra_clk_pll_p = 159,
+	tegra_clk_pll_p_out1 = 160,
+	tegra_clk_pll_p_out2 = 161,
+	tegra_clk_pll_p_out2_int = 162,
+	tegra_clk_pll_p_out3 = 163,
+	tegra_clk_pll_p_out4 = 164,
+	tegra_clk_pll_p_out4_cpu = 165,
+	tegra_clk_pll_p_out5 = 166,
+	tegra_clk_pll_p_out_hsio = 167,
+	tegra_clk_pll_p_out_xusb = 168,
+	tegra_clk_pll_p_out_cpu = 169,
+	tegra_clk_pll_p_out_adsp = 170,
+	tegra_clk_pll_ref = 171,
+	tegra_clk_pll_re_out = 172,
+	tegra_clk_pll_re_vco = 173,
+	tegra_clk_pll_u = 174,
+	tegra_clk_pll_u_out = 175,
+	tegra_clk_pll_u_out1 = 176,
+	tegra_clk_pll_u_out2 = 177,
+	tegra_clk_pll_u_12m = 178,
+	tegra_clk_pll_u_480m = 179,
+	tegra_clk_pll_u_48m = 180,
+	tegra_clk_pll_u_60m = 181,
+	tegra_clk_pll_x = 182,
+	tegra_clk_pll_x_out0 = 183,
+	tegra_clk_pwm = 184,
+	tegra_clk_qspi = 185,
+	tegra_clk_rtc = 186,
+	tegra_clk_sata = 187,
+	tegra_clk_sata_8 = 188,
+	tegra_clk_sata_cold = 189,
+	tegra_clk_sata_oob = 190,
+	tegra_clk_sata_oob_8 = 191,
+	tegra_clk_sbc1 = 192,
+	tegra_clk_sbc1_8 = 193,
+	tegra_clk_sbc1_9 = 194,
+	tegra_clk_sbc2 = 195,
+	tegra_clk_sbc2_8 = 196,
+	tegra_clk_sbc2_9 = 197,
+	tegra_clk_sbc3 = 198,
+	tegra_clk_sbc3_8 = 199,
+	tegra_clk_sbc3_9 = 200,
+	tegra_clk_sbc4 = 201,
+	tegra_clk_sbc4_8 = 202,
+	tegra_clk_sbc4_9 = 203,
+	tegra_clk_sbc5 = 204,
+	tegra_clk_sbc5_8 = 205,
+	tegra_clk_sbc6 = 206,
+	tegra_clk_sbc6_8 = 207,
+	tegra_clk_sclk = 208,
+	tegra_clk_sdmmc_legacy = 209,
+	tegra_clk_sdmmc1 = 210,
+	tegra_clk_sdmmc1_8 = 211,
+	tegra_clk_sdmmc1_9 = 212,
+	tegra_clk_sdmmc2 = 213,
+	tegra_clk_sdmmc2_8 = 214,
+	tegra_clk_sdmmc3 = 215,
+	tegra_clk_sdmmc3_8 = 216,
+	tegra_clk_sdmmc3_9 = 217,
+	tegra_clk_sdmmc4 = 218,
+	tegra_clk_sdmmc4_8 = 219,
+	tegra_clk_se = 220,
+	tegra_clk_se_10 = 221,
+	tegra_clk_soc_therm = 222,
+	tegra_clk_soc_therm_8 = 223,
+	tegra_clk_sor0 = 224,
+	tegra_clk_sor0_out = 225,
+	tegra_clk_sor1 = 226,
+	tegra_clk_sor1_out = 227,
+	tegra_clk_spdif = 228,
+	tegra_clk_spdif_2x = 229,
+	tegra_clk_spdif_in = 230,
+	tegra_clk_spdif_in_8 = 231,
+	tegra_clk_spdif_in_sync = 232,
+	tegra_clk_spdif_mux = 233,
+	tegra_clk_spdif_out = 234,
+	tegra_clk_timer = 235,
+	tegra_clk_trace = 236,
+	tegra_clk_tsec = 237,
+	tegra_clk_tsec_8 = 238,
+	tegra_clk_tsecb = 239,
+	tegra_clk_tsensor = 240,
+	tegra_clk_tvdac = 241,
+	tegra_clk_tvo = 242,
+	tegra_clk_uarta = 243,
+	tegra_clk_uarta_8 = 244,
+	tegra_clk_uartb = 245,
+	tegra_clk_uartb_8 = 246,
+	tegra_clk_uartc = 247,
+	tegra_clk_uartc_8 = 248,
+	tegra_clk_uartd = 249,
+	tegra_clk_uartd_8 = 250,
+	tegra_clk_uarte = 251,
+	tegra_clk_uarte_8 = 252,
+	tegra_clk_uartape = 253,
+	tegra_clk_usb2 = 254,
+	tegra_clk_usb2_hsic_trk = 255,
+	tegra_clk_usb2_trk = 256,
+	tegra_clk_usb3 = 257,
+	tegra_clk_usbd = 258,
+	tegra_clk_vcp = 259,
+	tegra_clk_vde = 260,
+	tegra_clk_vde_8 = 261,
+	tegra_clk_vfir = 262,
+	tegra_clk_vi = 263,
+	tegra_clk_vi_8 = 264,
+	tegra_clk_vi_9 = 265,
+	tegra_clk_vi_10 = 266,
+	tegra_clk_vi_i2c = 267,
+	tegra_clk_vic03 = 268,
+	tegra_clk_vic03_8 = 269,
+	tegra_clk_vim2_clk = 270,
+	tegra_clk_vimclk_sync = 271,
+	tegra_clk_vi_sensor = 272,
+	tegra_clk_vi_sensor_8 = 273,
+	tegra_clk_vi_sensor_9 = 274,
+	tegra_clk_vi_sensor2 = 275,
+	tegra_clk_vi_sensor2_8 = 276,
+	tegra_clk_xusb_dev = 277,
+	tegra_clk_xusb_dev_src = 278,
+	tegra_clk_xusb_dev_src_8 = 279,
+	tegra_clk_xusb_falcon_src = 280,
+	tegra_clk_xusb_falcon_src_8 = 281,
+	tegra_clk_xusb_fs_src = 282,
+	tegra_clk_xusb_gate = 283,
+	tegra_clk_xusb_host = 284,
+	tegra_clk_xusb_host_src = 285,
+	tegra_clk_xusb_host_src_8 = 286,
+	tegra_clk_xusb_hs_src = 287,
+	tegra_clk_xusb_hs_src_4 = 288,
+	tegra_clk_xusb_ss = 289,
+	tegra_clk_xusb_ss_src = 290,
+	tegra_clk_xusb_ss_src_8 = 291,
+	tegra_clk_xusb_ss_div2 = 292,
+	tegra_clk_xusb_ssp_src = 293,
+	tegra_clk_sclk_mux = 294,
+	tegra_clk_sor_safe = 295,
+	tegra_clk_cec = 296,
+	tegra_clk_ispa = 297,
+	tegra_clk_dmic1 = 298,
+	tegra_clk_dmic2 = 299,
+	tegra_clk_dmic3 = 300,
+	tegra_clk_dmic1_sync_clk = 301,
+	tegra_clk_dmic2_sync_clk = 302,
+	tegra_clk_dmic3_sync_clk = 303,
+	tegra_clk_dmic1_sync_clk_mux = 304,
+	tegra_clk_dmic2_sync_clk_mux = 305,
+	tegra_clk_dmic3_sync_clk_mux = 306,
+	tegra_clk_iqc1 = 307,
+	tegra_clk_iqc2 = 308,
+	tegra_clk_pll_a_out_adsp = 309,
+	tegra_clk_pll_a_out0_out_adsp = 310,
+	tegra_clk_adsp = 311,
+	tegra_clk_adsp_neon = 312,
+	tegra_clk_max = 313,
+};
+
+struct tegra_audio_clk_info {
+	char *name;
+	struct tegra_clk_pll_params *pll_params;
+	int clk_id;
+	char *parent;
+};
+
+struct pll_out_data {
+	char *div_name;
+	char *pll_out_name;
+	u32 offset;
+	int clk_id;
+	u8 div_shift;
+	u8 div_flags;
+	u8 rst_shift;
+	spinlock_t *lock;
+};
+
+enum tegra_super_gen {
+	gen4 = 4,
+	gen5 = 5,
+};
+
+struct tegra_super_gen_info {
+	enum tegra_super_gen gen;
+	const char **sclk_parents;
+	const char **cclk_g_parents;
+	const char **cclk_lp_parents;
+	int num_sclk_parents;
+	int num_cclk_g_parents;
+	int num_cclk_lp_parents;
+};
+
+enum {
+	DOWN___2 = 0,
+	UP___2 = 1,
+};
+
+struct dev_pm_opp_data {
+	unsigned int level;
+	unsigned long freq;
+	unsigned long u_volt;
+};
+
+enum gpd_status {
+	GENPD_STATE_ON = 0,
+	GENPD_STATE_OFF = 1,
+};
+
+enum {
+	CMD_CLK_GET_RATE = 1,
+	CMD_CLK_SET_RATE = 2,
+	CMD_CLK_ROUND_RATE = 3,
+	CMD_CLK_GET_PARENT = 4,
+	CMD_CLK_SET_PARENT = 5,
+	CMD_CLK_IS_ENABLED = 6,
+	CMD_CLK_ENABLE = 7,
+	CMD_CLK_DISABLE = 8,
+	CMD_CLK_PROPERTIES = 9,
+	CMD_CLK_POSSIBLE_PARENTS = 10,
+	CMD_CLK_NUM_POSSIBLE_PARENTS = 11,
+	CMD_CLK_GET_POSSIBLE_PARENT = 12,
+	CMD_CLK_RESET_REFCOUNTS = 13,
+	CMD_CLK_GET_ALL_INFO = 14,
+	CMD_CLK_GET_MAX_CLK_ID = 15,
+	CMD_CLK_GET_FMAX_AT_VMIN = 16,
+	CMD_CLK_MAX = 17,
+};
+
+struct tegra_bpmp;
+
+struct tegra_bpmp_clk {
+	struct clk_hw hw;
+	struct tegra_bpmp *bpmp;
+	unsigned int id;
+	unsigned int num_parents;
+	unsigned int *parents;
+};
+
+struct generic_pm_domain;
+
+typedef struct generic_pm_domain * (*genpd_xlate_t)(struct of_phandle_args *, void *);
+
+struct genpd_onecell_data {
+	struct generic_pm_domain **domains;
+	unsigned int num_domains;
+	genpd_xlate_t xlate;
+};
+
+struct tegra_bpmp_soc;
+
+struct tegra_bpmp_channel;
+
+struct tegra_bpmp {
+	const struct tegra_bpmp_soc *soc;
+	struct device *dev;
+	void *priv;
+	struct {
+		struct mbox_client client;
+		struct mbox_chan *channel;
+	} mbox;
+	spinlock_t atomic_tx_lock;
+	struct tegra_bpmp_channel *tx_channel;
+	struct tegra_bpmp_channel *rx_channel;
+	struct tegra_bpmp_channel *threaded_channels;
+	struct {
+		unsigned long *allocated;
+		unsigned long *busy;
+		unsigned int count;
+		struct semaphore lock;
+	} threaded;
+	struct list_head mrqs;
+	spinlock_t lock;
+	struct tegra_bpmp_clk **clocks;
+	unsigned int num_clocks;
+	struct reset_controller_dev rstc;
+	struct genpd_onecell_data genpd;
+	struct dentry *debugfs_mirror;
+	bool suspended;
+};
+
+struct tegra_bpmp_ops;
+
+struct tegra_bpmp_soc {
+	struct {
+		struct {
+			unsigned int offset;
+			unsigned int count;
+			unsigned int timeout;
+		} cpu_tx;
+		struct {
+			unsigned int offset;
+			unsigned int count;
+			unsigned int timeout;
+		} thread;
+		struct {
+			unsigned int offset;
+			unsigned int count;
+			unsigned int timeout;
+		} cpu_rx;
+	} channels;
+	const struct tegra_bpmp_ops *ops;
+	unsigned int num_resets;
+};
+
+struct tegra_bpmp_ops {
+	int (*init)(struct tegra_bpmp *);
+	void (*deinit)(struct tegra_bpmp *);
+	bool (*is_response_ready)(struct tegra_bpmp_channel *);
+	bool (*is_request_ready)(struct tegra_bpmp_channel *);
+	int (*ack_response)(struct tegra_bpmp_channel *);
+	int (*ack_request)(struct tegra_bpmp_channel *);
+	bool (*is_response_channel_free)(struct tegra_bpmp_channel *);
+	bool (*is_request_channel_free)(struct tegra_bpmp_channel *);
+	int (*post_response)(struct tegra_bpmp_channel *);
+	int (*post_request)(struct tegra_bpmp_channel *);
+	int (*ring_doorbell)(struct tegra_bpmp *);
+	int (*resume)(struct tegra_bpmp *);
+};
+
+struct iosys_map {
+	union {
+		void *vaddr_iomem;
+		void *vaddr;
+	};
+	bool is_iomem;
+};
+
+struct tegra_ivc;
+
+struct tegra_bpmp_channel {
+	struct tegra_bpmp *bpmp;
+	struct iosys_map ib;
+	struct iosys_map ob;
+	struct completion completion;
+	struct tegra_ivc *ivc;
+	unsigned int index;
+};
+
+struct gpd_dev_ops {
+	int (*start)(struct device *);
+	int (*stop)(struct device *);
+};
+
+struct dev_power_governor;
+
+struct genpd_governor_data;
+
+struct opp_table;
+
+struct dev_pm_opp;
+
+struct genpd_power_state;
+
+struct genpd_lock_ops;
+
+struct generic_pm_domain {
+	struct device dev;
+	struct dev_pm_domain domain;
+	struct list_head gpd_list_node;
+	struct list_head parent_links;
+	struct list_head child_links;
+	struct list_head dev_list;
+	struct dev_power_governor *gov;
+	struct genpd_governor_data *gd;
+	struct work_struct power_off_work;
+	struct fwnode_handle *provider;
+	bool has_provider;
+	const char *name;
+	atomic_t sd_count;
+	enum gpd_status status;
+	unsigned int device_count;
+	unsigned int suspended_count;
+	unsigned int prepared_count;
+	unsigned int performance_state;
+	cpumask_var_t cpus;
+	bool synced_poweroff;
+	int (*power_off)(struct generic_pm_domain *);
+	int (*power_on)(struct generic_pm_domain *);
+	struct raw_notifier_head power_notifiers;
+	struct opp_table *opp_table;
+	unsigned int (*opp_to_performance_state)(struct generic_pm_domain *, struct dev_pm_opp *);
+	int (*set_performance_state)(struct generic_pm_domain *, unsigned int);
+	struct gpd_dev_ops dev_ops;
+	int (*attach_dev)(struct generic_pm_domain *, struct device *);
+	void (*detach_dev)(struct generic_pm_domain *, struct device *);
+	unsigned int flags;
+	struct genpd_power_state *states;
+	void (*free_states)(struct genpd_power_state *, unsigned int);
+	unsigned int state_count;
+	unsigned int state_idx;
+	u64 on_time;
+	u64 accounting_time;
+	const struct genpd_lock_ops *lock_ops;
+	union {
+		struct mutex mlock;
+		struct {
+			spinlock_t slock;
+			unsigned long lock_flags;
+		};
+	};
+};
+
+struct dev_power_governor {
+	bool (*power_down_ok)(struct dev_pm_domain *);
+	bool (*suspend_ok)(struct device *);
+};
+
+struct genpd_governor_data {
+	s64 max_off_time_ns;
+	bool max_off_time_changed;
+	ktime_t next_wakeup;
+	ktime_t next_hrtimer;
+	bool cached_power_down_ok;
+	bool cached_power_down_state_idx;
+};
+
+struct genpd_power_state {
+	s64 power_off_latency_ns;
+	s64 power_on_latency_ns;
+	s64 residency_ns;
+	u64 usage;
+	u64 rejected;
+	struct fwnode_handle *fwnode;
+	u64 idle_time;
+	void *data;
+};
+
+struct genpd_lock_ops {
+	void (*lock)(struct generic_pm_domain *);
+	void (*lock_nested)(struct generic_pm_domain *, int);
+	int (*lock_interruptible)(struct generic_pm_domain *);
+	void (*unlock)(struct generic_pm_domain *);
+};
+
+struct tegra_bpmp_clk_message {
+	unsigned int cmd;
+	unsigned int id;
+	struct {
+		const void *data;
+		size_t size;
+	} tx;
+	struct {
+		void *data;
+		size_t size;
+		int ret;
+	} rx;
+};
+
+struct tegra_bpmp_message {
+	unsigned int mrq;
+	struct {
+		const void *data;
+		size_t size;
+	} tx;
+	struct {
+		void *data;
+		size_t size;
+		int ret;
+	} rx;
+	unsigned long flags;
+};
+
+struct cmd_clk_get_rate_request {};
+
+struct cmd_clk_set_rate_request {
+	int32_t unused;
+	int64_t rate;
+} __attribute__((packed));
+
+struct cmd_clk_round_rate_request {
+	int32_t unused;
+	int64_t rate;
+} __attribute__((packed));
+
+struct cmd_clk_get_parent_request {};
+
+struct cmd_clk_set_parent_request {
+	uint32_t parent_id;
+};
+
+struct cmd_clk_enable_request {};
+
+struct cmd_clk_disable_request {};
+
+struct cmd_clk_is_enabled_request {};
+
+struct cmd_clk_properties_request {};
+
+struct cmd_clk_possible_parents_request {};
+
+struct cmd_clk_num_possible_parents_request {};
+
+struct cmd_clk_get_possible_parent_request {
+	uint8_t parent_idx;
+};
+
+struct cmd_clk_get_all_info_request {};
+
+struct cmd_clk_get_max_clk_id_request {};
+
+struct cmd_clk_get_fmax_at_vmin_request {};
+
+struct mrq_clk_request {
+	uint32_t cmd_and_id;
+	union {
+		struct cmd_clk_get_rate_request clk_get_rate;
+		struct cmd_clk_set_rate_request clk_set_rate;
+		struct cmd_clk_round_rate_request clk_round_rate;
+		struct cmd_clk_get_parent_request clk_get_parent;
+		struct cmd_clk_set_parent_request clk_set_parent;
+		struct cmd_clk_enable_request clk_enable;
+		struct cmd_clk_disable_request clk_disable;
+		struct cmd_clk_is_enabled_request clk_is_enabled;
+		struct cmd_clk_properties_request clk_properties;
+		struct cmd_clk_possible_parents_request clk_possible_parents;
+		struct cmd_clk_num_possible_parents_request clk_num_possible_parents;
+		struct cmd_clk_get_possible_parent_request clk_get_possible_parent;
+		struct cmd_clk_get_all_info_request clk_get_all_info;
+		struct cmd_clk_get_max_clk_id_request clk_get_max_clk_id;
+		struct cmd_clk_get_fmax_at_vmin_request clk_get_fmax_at_vmin;
+	};
+};
+
+struct cmd_clk_get_max_clk_id_response {
+	uint32_t max_id;
+};
+
+struct tegra_bpmp_clk_info {
+	unsigned int id;
+	char name[40];
+	unsigned int parents[16];
+	unsigned int num_parents;
+	unsigned long flags;
+};
+
+struct cmd_clk_get_all_info_response {
+	uint32_t flags;
+	uint32_t parent;
+	uint32_t parents[16];
+	uint8_t num_parents;
+	uint8_t name[40];
+} __attribute__((packed));
+
+struct cmd_clk_get_rate_response {
+	int64_t rate;
+};
+
+struct cmd_clk_get_parent_response {
+	uint32_t parent_id;
+};
+
+struct cmd_clk_is_enabled_response {
+	int32_t state;
+};
+
+struct cmd_clk_round_rate_response {
+	int64_t rate;
+};
+
+struct cmd_clk_set_parent_response {
+	uint32_t parent_id;
+};
+
+struct cmd_clk_set_rate_response {
+	int64_t rate;
+};
+
+struct dma_chan;
+
+struct dma_chan_tbl_ent {
+	struct dma_chan *chan;
+};
+
+typedef s32 dma_cookie_t;
+
+struct dma_device;
+
+struct dma_chan_dev;
+
+struct dma_chan_percpu;
+
+struct dma_router;
+
+struct dma_chan {
+	struct dma_device *device;
+	struct device *slave;
+	dma_cookie_t cookie;
+	dma_cookie_t completed_cookie;
+	int chan_id;
+	struct dma_chan_dev *dev;
+	const char *name;
+	char *dbg_client_name;
+	struct list_head device_node;
+	struct dma_chan_percpu __attribute__((btf_type_tag("percpu"))) *local;
+	int client_count;
+	int table_count;
+	struct dma_router *router;
+	void *route_data;
+	void *private;
+};
+
+typedef bool (*dma_filter_fn)(struct dma_chan *, void *);
+
+struct dma_slave_map;
+
+struct dma_filter {
+	dma_filter_fn fn;
+	int mapcnt;
+	const struct dma_slave_map *map;
+};
+
+typedef struct {
+	unsigned long bits[1];
+} dma_cap_mask_t;
+
+enum dma_desc_metadata_mode {
+	DESC_METADATA_NONE = 0,
+	DESC_METADATA_CLIENT = 1,
+	DESC_METADATA_ENGINE = 2,
+};
+
+enum dmaengine_alignment {
+	DMAENGINE_ALIGN_1_BYTE = 0,
+	DMAENGINE_ALIGN_2_BYTES = 1,
+	DMAENGINE_ALIGN_4_BYTES = 2,
+	DMAENGINE_ALIGN_8_BYTES = 3,
+	DMAENGINE_ALIGN_16_BYTES = 4,
+	DMAENGINE_ALIGN_32_BYTES = 5,
+	DMAENGINE_ALIGN_64_BYTES = 6,
+	DMAENGINE_ALIGN_128_BYTES = 7,
+	DMAENGINE_ALIGN_256_BYTES = 8,
+};
+
+enum dma_residue_granularity {
+	DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
+	DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
+	DMA_RESIDUE_GRANULARITY_BURST = 2,
+};
+
+enum sum_check_flags {
+	SUM_CHECK_P_RESULT = 1,
+	SUM_CHECK_Q_RESULT = 2,
+};
+
+enum dma_transfer_direction {
+	DMA_MEM_TO_MEM = 0,
+	DMA_MEM_TO_DEV = 1,
+	DMA_DEV_TO_MEM = 2,
+	DMA_DEV_TO_DEV = 3,
+	DMA_TRANS_NONE = 4,
+};
+
+enum dma_status {
+	DMA_COMPLETE = 0,
+	DMA_IN_PROGRESS = 1,
+	DMA_PAUSED = 2,
+	DMA_ERROR = 3,
+	DMA_OUT_OF_ORDER = 4,
+};
+
+struct dma_async_tx_descriptor;
+
+struct dma_interleaved_template;
+
+struct dma_slave_caps;
+
+struct dma_slave_config;
+
+struct dma_tx_state;
+
+struct dma_device {
+	struct kref ref;
+	unsigned int chancnt;
+	unsigned int privatecnt;
+	struct list_head channels;
+	struct list_head global_node;
+	struct dma_filter filter;
+	dma_cap_mask_t cap_mask;
+	enum dma_desc_metadata_mode desc_metadata_modes;
+	unsigned short max_xor;
+	unsigned short max_pq;
+	enum dmaengine_alignment copy_align;
+	enum dmaengine_alignment xor_align;
+	enum dmaengine_alignment pq_align;
+	enum dmaengine_alignment fill_align;
+	int dev_id;
+	struct device *dev;
+	struct module *owner;
+	struct ida chan_ida;
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool descriptor_reuse;
+	enum dma_residue_granularity residue_granularity;
+	int (*device_alloc_chan_resources)(struct dma_chan *);
+	int (*device_router_config)(struct dma_chan *);
+	void (*device_free_chan_resources)(struct dma_chan *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan *, dma_addr_t, dma_addr_t, size_t, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan *, dma_addr_t, dma_addr_t *, unsigned int, size_t, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan *, dma_addr_t, int, size_t, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan *, struct scatterlist *, unsigned int, int, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan *, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan *, struct scatterlist *, unsigned int, enum dma_transfer_direction, unsigned long, void *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan *, struct dma_interleaved_template *, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan *, dma_addr_t, u64, unsigned long);
+	void (*device_caps)(struct dma_chan *, struct dma_slave_caps *);
+	int (*device_config)(struct dma_chan *, struct dma_slave_config *);
+	int (*device_pause)(struct dma_chan *);
+	int (*device_resume)(struct dma_chan *);
+	int (*device_terminate_all)(struct dma_chan *);
+	void (*device_synchronize)(struct dma_chan *);
+	enum dma_status (*device_tx_status)(struct dma_chan *, dma_cookie_t, struct dma_tx_state *);
+	void (*device_issue_pending)(struct dma_chan *);
+	void (*device_release)(struct dma_device *);
+	void (*dbg_summary_show)(struct seq_file *, struct dma_device *);
+	struct dentry *dbg_dev_root;
+};
+
+struct dma_slave_map {
+	const char *devname;
+	const char *slave;
+	void *param;
+};
+
+enum dma_ctrl_flags {
+	DMA_PREP_INTERRUPT = 1,
+	DMA_CTRL_ACK = 2,
+	DMA_PREP_PQ_DISABLE_P = 4,
+	DMA_PREP_PQ_DISABLE_Q = 8,
+	DMA_PREP_CONTINUE = 16,
+	DMA_PREP_FENCE = 32,
+	DMA_CTRL_REUSE = 64,
+	DMA_PREP_CMD = 128,
+	DMA_PREP_REPEAT = 256,
+	DMA_PREP_LOAD_EOT = 512,
+};
+
+typedef void (*dma_async_tx_callback)(void *);
+
+struct dmaengine_result;
+
+typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
+
+struct dmaengine_unmap_data;
+
+struct dma_descriptor_metadata_ops;
+
+struct dma_async_tx_descriptor {
+	dma_cookie_t cookie;
+	enum dma_ctrl_flags flags;
+	dma_addr_t phys;
+	struct dma_chan *chan;
+	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
+	int (*desc_free)(struct dma_async_tx_descriptor *);
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+	struct dmaengine_unmap_data *unmap;
+	enum dma_desc_metadata_mode desc_metadata_mode;
+	struct dma_descriptor_metadata_ops *metadata_ops;
+	struct dma_async_tx_descriptor *next;
+	struct dma_async_tx_descriptor *parent;
+	spinlock_t lock;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum dmaengine_tx_result {
+	DMA_TRANS_NOERROR = 0,
+	DMA_TRANS_READ_FAILED = 1,
+	DMA_TRANS_WRITE_FAILED = 2,
+	DMA_TRANS_ABORTED = 3,
+};
+
+struct dmaengine_result {
+	enum dmaengine_tx_result result;
+	u32 residue;
+};
+
+struct dmaengine_unmap_data {
+	u8 map_cnt;
+	u8 to_cnt;
+	u8 from_cnt;
+	u8 bidi_cnt;
+	struct device *dev;
+	struct kref kref;
+	size_t len;
+	dma_addr_t addr[0];
+};
+
+struct dma_descriptor_metadata_ops {
+	int (*attach)(struct dma_async_tx_descriptor *, void *, size_t);
+	void * (*get_ptr)(struct dma_async_tx_descriptor *, size_t *, size_t *);
+	int (*set_len)(struct dma_async_tx_descriptor *, size_t);
+};
+
+struct data_chunk {
+	size_t size;
+	size_t icg;
+	size_t dst_icg;
+	size_t src_icg;
+};
+
+struct dma_interleaved_template {
+	dma_addr_t src_start;
+	dma_addr_t dst_start;
+	enum dma_transfer_direction dir;
+	bool src_inc;
+	bool dst_inc;
+	bool src_sgl;
+	bool dst_sgl;
+	size_t numf;
+	size_t frame_size;
+	struct data_chunk sgl[0];
+};
+
+struct dma_slave_caps {
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool cmd_pause;
+	bool cmd_resume;
+	bool cmd_terminate;
+	enum dma_residue_granularity residue_granularity;
+	bool descriptor_reuse;
+};
+
+enum dma_slave_buswidth {
+	DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
+	DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
+	DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
+	DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
+	DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
+	DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
+	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
+	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
+	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
+	DMA_SLAVE_BUSWIDTH_128_BYTES = 128,
+};
+
+struct dma_slave_config {
+	enum dma_transfer_direction direction;
+	phys_addr_t src_addr;
+	phys_addr_t dst_addr;
+	enum dma_slave_buswidth src_addr_width;
+	enum dma_slave_buswidth dst_addr_width;
+	u32 src_maxburst;
+	u32 dst_maxburst;
+	u32 src_port_window_size;
+	u32 dst_port_window_size;
+	bool device_fc;
+	void *peripheral_config;
+	size_t peripheral_size;
+};
+
+struct dma_tx_state {
+	dma_cookie_t last;
+	dma_cookie_t used;
+	u32 residue;
+	u32 in_flight_bytes;
+};
+
+struct dma_chan_dev {
+	struct dma_chan *chan;
+	struct device device;
+	int dev_id;
+	bool chan_dma_dev;
+};
+
+struct dma_chan_percpu {
+	unsigned long memcpy_count;
+	unsigned long bytes_transferred;
+};
+
+struct dma_router {
+	struct device *dev;
+	void (*route_free)(struct device *, void *);
+};
+
+struct dmaengine_unmap_pool {
+	struct kmem_cache *cache;
+	const char *name;
+	mempool_t *pool;
+	size_t size;
+};
+
+enum dma_transaction_type {
+	DMA_MEMCPY = 0,
+	DMA_XOR = 1,
+	DMA_PQ = 2,
+	DMA_XOR_VAL = 3,
+	DMA_PQ_VAL = 4,
+	DMA_MEMSET = 5,
+	DMA_MEMSET_SG = 6,
+	DMA_INTERRUPT = 7,
+	DMA_PRIVATE = 8,
+	DMA_ASYNC_TX = 9,
+	DMA_SLAVE = 10,
+	DMA_CYCLIC = 11,
+	DMA_INTERLEAVE = 12,
+	DMA_COMPLETION_NO_ORDER = 13,
+	DMA_REPEAT = 14,
+	DMA_LOAD_EOT = 15,
+	DMA_TX_TYPE_END = 16,
+};
+
+struct virt_dma_desc {
+	struct dma_async_tx_descriptor tx;
+	struct dmaengine_result tx_result;
+	struct list_head node;
+};
+
+struct virt_dma_chan {
+	struct dma_chan chan;
+	struct tasklet_struct task;
+	void (*desc_free)(struct virt_dma_desc *);
+	spinlock_t lock;
+	struct list_head desc_allocated;
+	struct list_head desc_submitted;
+	struct list_head desc_issued;
+	struct list_head desc_completed;
+	struct list_head desc_terminated;
+	struct virt_dma_desc *cyclic;
+};
+
+struct dmaengine_desc_callback {
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+};
+
+struct of_dma {
+	struct list_head of_dma_controllers;
+	struct device_node *of_node;
+	struct dma_chan * (*of_dma_xlate)(struct of_phandle_args *, struct of_dma *);
+	void * (*of_dma_route_allocate)(struct of_phandle_args *, struct of_dma *);
+	struct dma_router *dma_router;
+	void *of_dma_data;
+};
+
+struct of_dma_filter_info {
+	dma_cap_mask_t dma_cap;
+	dma_filter_fn filter_fn;
+};
+
+struct geni_se_desc {
+	unsigned int num_clks;
+	const char * const *clks;
+};
+
+enum geni_se_xfer_mode {
+	GENI_SE_INVALID = 0,
+	GENI_SE_FIFO = 1,
+	GENI_SE_DMA = 2,
+	GENI_GPI_DMA = 3,
+};
+
+enum geni_se_protocol_type {
+	GENI_SE_NONE = 0,
+	GENI_SE_SPI = 1,
+	GENI_SE_UART = 2,
+	GENI_SE_I2C = 3,
+	GENI_SE_I3C = 4,
+	GENI_SE_SPI_SLAVE = 5,
+};
+
+struct geni_icc_path {
+	struct icc_path *path;
+	unsigned int avg_bw;
+};
+
+struct geni_wrapper;
+
+struct geni_se {
+	void *base;
+	struct device *dev;
+	struct geni_wrapper *wrapper;
+	struct clk *clk;
+	unsigned int num_clk_levels;
+	unsigned long *clk_perf_tbl;
+	struct geni_icc_path icc_paths[3];
+};
+
+struct geni_wrapper {
+	struct device *dev;
+	void *base;
+	struct clk_bulk_data clks[2];
+	unsigned int num_clks;
+};
+
+struct qcom_smem_state_ops {
+	int (*update_bits)(void *, u32, u32);
+};
+
+struct qcom_smem_state {
+	struct kref refcount;
+	bool orphan;
+	struct list_head list;
+	struct device_node *of_node;
+	void *priv;
+	struct qcom_smem_state_ops ops;
+};
+
+enum bus_notifier_event {
+	BUS_NOTIFY_ADD_DEVICE = 0,
+	BUS_NOTIFY_DEL_DEVICE = 1,
+	BUS_NOTIFY_REMOVED_DEVICE = 2,
+	BUS_NOTIFY_BIND_DRIVER = 3,
+	BUS_NOTIFY_BOUND_DRIVER = 4,
+	BUS_NOTIFY_UNBIND_DRIVER = 5,
+	BUS_NOTIFY_UNBOUND_DRIVER = 6,
+	BUS_NOTIFY_DRIVER_NOT_BOUND = 7,
+};
+
+struct sunxi_sram_func;
+
+struct sunxi_sram_data {
+	char *name;
+	u8 reg;
+	u8 offset;
+	u8 width;
+	struct sunxi_sram_func *func;
+	struct list_head list;
+};
+
+struct sunxi_sram_desc {
+	struct sunxi_sram_data data;
+	bool claimed;
+};
+
+struct sunxi_sram_func {
+	char *func;
+	u8 val;
+	u32 reg_val;
+};
+
+struct sunxi_sramc_variant {
+	int num_emac_clocks;
+	bool has_ldo_ctrl;
+};
+
+enum tegra_revision {
+	TEGRA_REVISION_UNKNOWN = 0,
+	TEGRA_REVISION_A01 = 1,
+	TEGRA_REVISION_A02 = 2,
+	TEGRA_REVISION_A03 = 3,
+	TEGRA_REVISION_A03p = 4,
+	TEGRA_REVISION_A04 = 5,
+	TEGRA_REVISION_MAX = 6,
+};
+
+enum tegra_platform {
+	TEGRA_PLATFORM_SILICON = 0,
+	TEGRA_PLATFORM_QT = 1,
+	TEGRA_PLATFORM_SYSTEM_FPGA = 2,
+	TEGRA_PLATFORM_UNIT_FPGA = 3,
+	TEGRA_PLATFORM_ASIM_QT = 4,
+	TEGRA_PLATFORM_ASIM_LINSIM = 5,
+	TEGRA_PLATFORM_DSIM_ASIM_LINSIM = 6,
+	TEGRA_PLATFORM_VERIFICATION_SIMULATION = 7,
+	TEGRA_PLATFORM_VDK = 8,
+	TEGRA_PLATFORM_VSP = 9,
+	TEGRA_PLATFORM_MAX = 10,
+};
+
+struct tegra_sku_info {
+	int sku_id;
+	int cpu_process_id;
+	int cpu_speedo_id;
+	int cpu_speedo_value;
+	int cpu_iddq_value;
+	int soc_process_id;
+	int soc_speedo_id;
+	int soc_speedo_value;
+	int gpu_process_id;
+	int gpu_speedo_id;
+	int gpu_speedo_value;
+	enum tegra_revision revision;
+	enum tegra_platform platform;
+};
+
+struct tegra_fuse_soc;
+
+struct nvmem_device;
+
+struct nvmem_cell_lookup;
+
+struct tegra_fuse {
+	struct device *dev;
+	void *base;
+	phys_addr_t phys;
+	struct clk *clk;
+	struct reset_control *rst;
+	u32 (*read_early)(struct tegra_fuse *, unsigned int);
+	u32 (*read)(struct tegra_fuse *, unsigned int);
+	const struct tegra_fuse_soc *soc;
+	struct {
+		struct mutex lock;
+		struct completion wait;
+		struct dma_chan *chan;
+		struct dma_slave_config config;
+		dma_addr_t phys;
+		u32 *virt;
+	} apbdma;
+	struct nvmem_device *nvmem;
+	struct nvmem_cell_lookup *lookups;
+};
+
+struct tegra_fuse_info;
+
+struct nvmem_cell_info;
+
+struct nvmem_keepout;
+
+struct tegra_fuse_soc {
+	void (*init)(struct tegra_fuse *);
+	void (*speedo_init)(struct tegra_sku_info *);
+	int (*probe)(struct tegra_fuse *);
+	const struct tegra_fuse_info *info;
+	const struct nvmem_cell_lookup *lookups;
+	unsigned int num_lookups;
+	const struct nvmem_cell_info *cells;
+	unsigned int num_cells;
+	const struct nvmem_keepout *keepouts;
+	unsigned int num_keepouts;
+	const struct attribute_group *soc_attr_group;
+	bool clk_suspend_on;
+};
+
+struct tegra_fuse_info {
+	u32 (*read)(struct tegra_fuse *, unsigned int);
+	unsigned int size;
+	unsigned int spare;
+};
+
+struct nvmem_cell_lookup {
+	const char *nvmem_name;
+	const char *cell_name;
+	const char *dev_id;
+	const char *con_id;
+	struct list_head node;
+};
+
+typedef int (*nvmem_cell_post_process_t)(void *, const char *, int, unsigned int, void *, size_t);
+
+struct nvmem_cell_info {
+	const char *name;
+	unsigned int offset;
+	size_t raw_len;
+	unsigned int bytes;
+	unsigned int bit_offset;
+	unsigned int nbits;
+	struct device_node *np;
+	nvmem_cell_post_process_t read_post_process;
+	void *priv;
+};
+
+struct nvmem_keepout {
+	unsigned int start;
+	unsigned int end;
+	unsigned char value;
+};
+
+enum nvmem_type {
+	NVMEM_TYPE_UNKNOWN = 0,
+	NVMEM_TYPE_EEPROM = 1,
+	NVMEM_TYPE_OTP = 2,
+	NVMEM_TYPE_BATTERY_BACKED = 3,
+	NVMEM_TYPE_FRAM = 4,
+};
+
+struct soc_device_attribute {
+	const char *machine;
+	const char *family;
+	const char *revision;
+	const char *serial_number;
+	const char *soc_id;
+	const void *data;
+	const struct attribute_group *custom_attr_group;
+};
+
+typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
+
+struct nvmem_layout;
+
+struct nvmem_config {
+	struct device *dev;
+	const char *name;
+	int id;
+	struct module *owner;
+	const struct nvmem_cell_info *cells;
+	int ncells;
+	bool add_legacy_fixed_of_cells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	enum nvmem_type type;
+	bool read_only;
+	bool root_only;
+	bool ignore_wp;
+	struct nvmem_layout *layout;
+	struct device_node *of_node;
+	bool no_of_node;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	int size;
+	int word_size;
+	int stride;
+	void *priv;
+	bool compat;
+	struct device *base_dev;
+};
+
+struct nvmem_layout {
+	const char *name;
+	const struct of_device_id *of_match_table;
+	int (*add_cells)(struct device *, struct nvmem_device *, struct nvmem_layout *);
+	void (*fixup_cell_info)(struct nvmem_device *, struct nvmem_layout *, struct nvmem_cell_info *);
+	struct module *owner;
+	struct list_head node;
+};
+
+struct tegra_cbb_ops;
+
+struct tegra_cbb {
+	struct device *dev;
+	const struct tegra_cbb_ops *ops;
+	struct list_head node;
+};
+
+struct tegra_cbb_ops {
+	int (*debugfs_show)(struct tegra_cbb *, struct seq_file *, void *);
+	int (*interrupt_enable)(struct tegra_cbb *);
+	void (*error_enable)(struct tegra_cbb *);
+	void (*fault_enable)(struct tegra_cbb *);
+	void (*stall_enable)(struct tegra_cbb *);
+	void (*error_clear)(struct tegra_cbb *);
+	u32 (*get_status)(struct tegra_cbb *);
+};
+
+struct tegra234_cbb_fabric;
+
+struct tegra234_cbb_acpi_uid {
+	const char *hid;
+	const char *uid;
+	const struct tegra234_cbb_fabric *fabric;
+};
+
+struct tegra_cbb_error;
+
+struct tegra234_slave_lookup;
+
+struct tegra234_cbb_fabric {
+	const char *name;
+	phys_addr_t off_mask_erd;
+	phys_addr_t firewall_base;
+	unsigned int firewall_ctl;
+	unsigned int firewall_wr_ctl;
+	const char * const *master_id;
+	unsigned int notifier_offset;
+	const struct tegra_cbb_error *errors;
+	const int max_errors;
+	const struct tegra234_slave_lookup *slave_map;
+	const int max_slaves;
+};
+
+struct tegra_cbb_error {
+	const char *code;
+	const char *source;
+	const char *desc;
+};
+
+struct tegra234_slave_lookup {
+	const char *name;
+	unsigned int offset;
+};
+
+enum tegra234_cbb_fabric_ids {
+	CBB_FAB_ID = 0,
+	SCE_FAB_ID = 1,
+	RCE_FAB_ID = 2,
+	DCE_FAB_ID = 3,
+	AON_FAB_ID = 4,
+	PSC_FAB_ID = 5,
+	BPMP_FAB_ID = 6,
+	FSI_FAB_ID = 7,
+	MAX_FAB_ID = 8,
+};
+
+struct tegra234_cbb {
+	struct tegra_cbb base;
+	const struct tegra234_cbb_fabric *fabric;
+	struct resource *res;
+	void *regs;
+	int num_intr;
+	int sec_irq;
+	void *mon;
+	unsigned int type;
+	u32 mask;
+	u64 access;
+	u32 mn_attr0;
+	u32 mn_attr1;
+	u32 mn_attr2;
+	u32 mn_user_bits;
+};
+
+typedef int (*config_clks_t)(struct device *, struct opp_table *, struct dev_pm_opp *, void *, bool);
+
+typedef int (*config_regulators_t)(struct device *, struct dev_pm_opp *, struct dev_pm_opp *, struct regulator **, unsigned int);
+
+struct dev_pm_opp_config {
+	const char * const *clk_names;
+	config_clks_t config_clks;
+	const char *prop_name;
+	config_regulators_t config_regulators;
+	const unsigned int *supported_hw;
+	unsigned int supported_hw_count;
+	const char * const *regulator_names;
+	const char * const *genpd_names;
+	struct device ***virt_devs;
+};
+
+enum tegra_suspend_mode {
+	TEGRA_SUSPEND_NONE = 0,
+	TEGRA_SUSPEND_LP2 = 1,
+	TEGRA_SUSPEND_LP1 = 2,
+	TEGRA_SUSPEND_LP0 = 3,
+	TEGRA_MAX_SUSPEND_MODE = 4,
+	TEGRA_SUSPEND_NOT_READY = 5,
+};
+
+struct tegra_pmc_soc;
+
+struct tegra_pmc {
+	struct device *dev;
+	void *base;
+	void *wake;
+	void *aotag;
+	void *scratch;
+	struct clk *clk;
+	const struct tegra_pmc_soc *soc;
+	bool tz_only;
+	unsigned long rate;
+	enum tegra_suspend_mode suspend_mode;
+	u32 cpu_good_time;
+	u32 cpu_off_time;
+	u32 core_osc_time;
+	u32 core_pmu_time;
+	u32 core_off_time;
+	bool corereq_high;
+	bool sysclkreq_high;
+	bool combined_req;
+	bool cpu_pwr_good_en;
+	u32 lp0_vec_phys;
+	u32 lp0_vec_size;
+	unsigned long powergates_available[1];
+	struct mutex powergates_lock;
+	struct pinctrl_dev *pctl_dev;
+	struct irq_domain *domain;
+	struct irq_chip irq;
+	struct notifier_block clk_nb;
+	bool core_domain_state_synced;
+	bool core_domain_registered;
+	unsigned long *wake_type_level_map;
+	unsigned long *wake_type_dual_edge_map;
+	unsigned long *wake_sw_status_map;
+	unsigned long *wake_cntrl_level_map;
+	struct syscore_ops syscore;
+};
+
+struct tegra_io_pad_soc;
+
+struct tegra_pmc_regs;
+
+struct tegra_wake_event;
+
+struct pmc_clk_init_data;
+
+struct tegra_pmc_soc {
+	unsigned int num_powergates;
+	const char * const *powergates;
+	unsigned int num_cpu_powergates;
+	const u8 *cpu_powergates;
+	bool has_tsense_reset;
+	bool has_gpu_clamps;
+	bool needs_mbist_war;
+	bool has_impl_33v_pwr;
+	bool maybe_tz_only;
+	const struct tegra_io_pad_soc *io_pads;
+	unsigned int num_io_pads;
+	const struct pinctrl_pin_desc *pin_descs;
+	unsigned int num_pin_descs;
+	const struct tegra_pmc_regs *regs;
+	void (*init)(struct tegra_pmc *);
+	void (*setup_irq_polarity)(struct tegra_pmc *, struct device_node *, bool);
+	void (*set_wake_filters)(struct tegra_pmc *);
+	int (*irq_set_wake)(struct irq_data *, unsigned int);
+	int (*irq_set_type)(struct irq_data *, unsigned int);
+	int (*powergate_set)(struct tegra_pmc *, unsigned int, bool);
+	const char * const *reset_sources;
+	unsigned int num_reset_sources;
+	const char * const *reset_levels;
+	unsigned int num_reset_levels;
+	const struct tegra_wake_event *wake_events;
+	unsigned int num_wake_events;
+	unsigned int max_wake_events;
+	unsigned int max_wake_vectors;
+	const struct pmc_clk_init_data *pmc_clks_data;
+	unsigned int num_pmc_clks;
+	bool has_blink_output;
+	bool has_usb_sleepwalk;
+	bool supports_core_domain;
+};
+
+enum tegra_io_pad {
+	TEGRA_IO_PAD_AUDIO = 0,
+	TEGRA_IO_PAD_AUDIO_HV = 1,
+	TEGRA_IO_PAD_BB = 2,
+	TEGRA_IO_PAD_CAM = 3,
+	TEGRA_IO_PAD_COMP = 4,
+	TEGRA_IO_PAD_CONN = 5,
+	TEGRA_IO_PAD_CSIA = 6,
+	TEGRA_IO_PAD_CSIB = 7,
+	TEGRA_IO_PAD_CSIC = 8,
+	TEGRA_IO_PAD_CSID = 9,
+	TEGRA_IO_PAD_CSIE = 10,
+	TEGRA_IO_PAD_CSIF = 11,
+	TEGRA_IO_PAD_CSIG = 12,
+	TEGRA_IO_PAD_CSIH = 13,
+	TEGRA_IO_PAD_DAP3 = 14,
+	TEGRA_IO_PAD_DAP5 = 15,
+	TEGRA_IO_PAD_DBG = 16,
+	TEGRA_IO_PAD_DEBUG_NONAO = 17,
+	TEGRA_IO_PAD_DMIC = 18,
+	TEGRA_IO_PAD_DMIC_HV = 19,
+	TEGRA_IO_PAD_DP = 20,
+	TEGRA_IO_PAD_DSI = 21,
+	TEGRA_IO_PAD_DSIB = 22,
+	TEGRA_IO_PAD_DSIC = 23,
+	TEGRA_IO_PAD_DSID = 24,
+	TEGRA_IO_PAD_EDP = 25,
+	TEGRA_IO_PAD_EMMC = 26,
+	TEGRA_IO_PAD_EMMC2 = 27,
+	TEGRA_IO_PAD_EQOS = 28,
+	TEGRA_IO_PAD_GPIO = 29,
+	TEGRA_IO_PAD_GP_PWM2 = 30,
+	TEGRA_IO_PAD_GP_PWM3 = 31,
+	TEGRA_IO_PAD_HDMI = 32,
+	TEGRA_IO_PAD_HDMI_DP0 = 33,
+	TEGRA_IO_PAD_HDMI_DP1 = 34,
+	TEGRA_IO_PAD_HDMI_DP2 = 35,
+	TEGRA_IO_PAD_HDMI_DP3 = 36,
+	TEGRA_IO_PAD_HSIC = 37,
+	TEGRA_IO_PAD_HV = 38,
+	TEGRA_IO_PAD_LVDS = 39,
+	TEGRA_IO_PAD_MIPI_BIAS = 40,
+	TEGRA_IO_PAD_NAND = 41,
+	TEGRA_IO_PAD_PEX_BIAS = 42,
+	TEGRA_IO_PAD_PEX_CLK_BIAS = 43,
+	TEGRA_IO_PAD_PEX_CLK1 = 44,
+	TEGRA_IO_PAD_PEX_CLK2 = 45,
+	TEGRA_IO_PAD_PEX_CLK3 = 46,
+	TEGRA_IO_PAD_PEX_CLK_2_BIAS = 47,
+	TEGRA_IO_PAD_PEX_CLK_2 = 48,
+	TEGRA_IO_PAD_PEX_CNTRL = 49,
+	TEGRA_IO_PAD_PEX_CTL2 = 50,
+	TEGRA_IO_PAD_PEX_L0_RST = 51,
+	TEGRA_IO_PAD_PEX_L1_RST = 52,
+	TEGRA_IO_PAD_PEX_L5_RST = 53,
+	TEGRA_IO_PAD_PWR_CTL = 54,
+	TEGRA_IO_PAD_SDMMC1 = 55,
+	TEGRA_IO_PAD_SDMMC1_HV = 56,
+	TEGRA_IO_PAD_SDMMC2 = 57,
+	TEGRA_IO_PAD_SDMMC2_HV = 58,
+	TEGRA_IO_PAD_SDMMC3 = 59,
+	TEGRA_IO_PAD_SDMMC3_HV = 60,
+	TEGRA_IO_PAD_SDMMC4 = 61,
+	TEGRA_IO_PAD_SOC_GPIO10 = 62,
+	TEGRA_IO_PAD_SOC_GPIO12 = 63,
+	TEGRA_IO_PAD_SOC_GPIO13 = 64,
+	TEGRA_IO_PAD_SOC_GPIO53 = 65,
+	TEGRA_IO_PAD_SPI = 66,
+	TEGRA_IO_PAD_SPI_HV = 67,
+	TEGRA_IO_PAD_SYS_DDC = 68,
+	TEGRA_IO_PAD_UART = 69,
+	TEGRA_IO_PAD_UART4 = 70,
+	TEGRA_IO_PAD_UART5 = 71,
+	TEGRA_IO_PAD_UFS = 72,
+	TEGRA_IO_PAD_USB0 = 73,
+	TEGRA_IO_PAD_USB1 = 74,
+	TEGRA_IO_PAD_USB2 = 75,
+	TEGRA_IO_PAD_USB3 = 76,
+	TEGRA_IO_PAD_USB_BIAS = 77,
+	TEGRA_IO_PAD_AO_HV = 78,
+};
+
+struct tegra_io_pad_soc {
+	enum tegra_io_pad id;
+	unsigned int dpd;
+	unsigned int request;
+	unsigned int status;
+	unsigned int voltage;
+	const char *name;
+};
+
+struct tegra_pmc_regs {
+	unsigned int scratch0;
+	unsigned int rst_status;
+	unsigned int rst_source_shift;
+	unsigned int rst_source_mask;
+	unsigned int rst_level_shift;
+	unsigned int rst_level_mask;
+};
+
+struct tegra_wake_event {
+	const char *name;
+	unsigned int id;
+	unsigned int irq;
+	struct {
+		unsigned int instance;
+		unsigned int pin;
+	} gpio;
+};
+
+struct pmc_clk_init_data {
+	char *name;
+	const char * const *parents;
+	int num_parents;
+	int clk_id;
+	u8 mux_shift;
+	u8 force_en_shift;
+};
+
+struct tegra_powergate {
+	struct generic_pm_domain genpd;
+	struct tegra_pmc *pmc;
+	unsigned int id;
+	struct clk **clks;
+	unsigned int num_clks;
+	unsigned long *clk_rates;
+	struct reset_control *reset;
+};
+
+struct pmc_clk {
+	struct clk_hw hw;
+	unsigned long offs;
+	u32 mux_shift;
+	u32 force_en_shift;
+};
+
+struct pmc_clk_gate {
+	struct clk_hw hw;
+	unsigned long offs;
+	u32 shift;
+};
+
+struct arm_smccc_quirk {
+	int id;
+	union {
+		unsigned long a6;
+	} state;
+};
+
+typedef int (*regmap_hw_write)(void *, const void *, size_t);
+
+typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
+
+struct regmap_async;
+
+typedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);
+
+typedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);
+
+typedef int (*regmap_hw_reg_noinc_write)(void *, unsigned int, const void *, size_t);
+
+typedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+
+typedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);
+
+typedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);
+
+typedef int (*regmap_hw_reg_noinc_read)(void *, unsigned int, void *, size_t);
+
+typedef void (*regmap_hw_free_context)(void *);
+
+typedef struct regmap_async * (*regmap_hw_async_alloc)();
+
+struct regmap_bus {
+	bool fast_io;
+	bool free_on_exit;
+	regmap_hw_write write;
+	regmap_hw_gather_write gather_write;
+	regmap_hw_async_write async_write;
+	regmap_hw_reg_write reg_write;
+	regmap_hw_reg_noinc_write reg_noinc_write;
+	regmap_hw_reg_update_bits reg_update_bits;
+	regmap_hw_read read;
+	regmap_hw_reg_read reg_read;
+	regmap_hw_reg_noinc_read reg_noinc_read;
+	regmap_hw_free_context free_context;
+	regmap_hw_async_alloc async_alloc;
+	u8 read_flag_mask;
+	enum regmap_endian reg_format_endian_default;
+	enum regmap_endian val_format_endian_default;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	u64 android_kabi_reserved1;
+};
+
+struct scmi_device;
+
+struct scmi_device_id;
+
+struct scmi_driver {
+	const char *name;
+	int (*probe)(struct scmi_device *);
+	void (*remove)(struct scmi_device *);
+	const struct scmi_device_id *id_table;
+	struct device_driver driver;
+};
+
+struct scmi_handle;
+
+struct scmi_device {
+	u32 id;
+	u8 protocol_id;
+	const char *name;
+	struct device dev;
+	struct scmi_handle *handle;
+	u64 android_kabi_reserved1;
+};
+
+struct scmi_revision_info;
+
+struct scmi_protocol_handle;
+
+struct scmi_notify_ops;
+
+struct scmi_handle {
+	struct device *dev;
+	struct scmi_revision_info *version;
+	int (*devm_protocol_acquire)(struct scmi_device *, u8);
+	const void * (*devm_protocol_get)(struct scmi_device *, u8, struct scmi_protocol_handle **);
+	void (*devm_protocol_put)(struct scmi_device *, u8);
+	bool (*is_transport_atomic)(const struct scmi_handle *, unsigned int *);
+	const struct scmi_notify_ops *notify_ops;
+	u64 android_kabi_reserved1;
+};
+
+struct scmi_revision_info {
+	u16 major_ver;
+	u16 minor_ver;
+	u8 num_protocols;
+	u8 num_agents;
+	u32 impl_ver;
+	char vendor_id[16];
+	char sub_vendor_id[16];
+};
+
+struct scmi_notify_ops {
+	int (*devm_event_notifier_register)(struct scmi_device *, u8, u8, const u32 *, struct notifier_block *);
+	int (*devm_event_notifier_unregister)(struct scmi_device *, u8, u8, const u32 *, struct notifier_block *);
+	int (*event_notifier_register)(const struct scmi_handle *, u8, u8, const u32 *, struct notifier_block *);
+	int (*event_notifier_unregister)(const struct scmi_handle *, u8, u8, const u32 *, struct notifier_block *);
+};
+
+struct scmi_device_id {
+	u8 protocol_id;
+	const char *name;
+};
+
+enum scmi_power_scale {
+	SCMI_POWER_BOGOWATTS = 0,
+	SCMI_POWER_MILLIWATTS = 1,
+	SCMI_POWER_MICROWATTS = 2,
+};
+
+enum scmi_std_protocol {
+	SCMI_PROTOCOL_BASE = 16,
+	SCMI_PROTOCOL_POWER = 17,
+	SCMI_PROTOCOL_SYSTEM = 18,
+	SCMI_PROTOCOL_PERF = 19,
+	SCMI_PROTOCOL_CLOCK = 20,
+	SCMI_PROTOCOL_SENSOR = 21,
+	SCMI_PROTOCOL_RESET = 22,
+	SCMI_PROTOCOL_VOLTAGE = 23,
+	SCMI_PROTOCOL_POWERCAP = 24,
+	SCMI_PROTOCOL_PINCTRL = 25,
+};
+
+struct scmi_perf_proto_ops;
+
+struct scmi_perf_domain_info;
+
+struct scmi_perf_domain {
+	struct generic_pm_domain genpd;
+	const struct scmi_perf_proto_ops *perf_ops;
+	const struct scmi_protocol_handle *ph;
+	const struct scmi_perf_domain_info *info;
+	u32 domain_id;
+};
+
+struct scmi_perf_proto_ops {
+	int (*num_domains_get)(const struct scmi_protocol_handle *);
+	const struct scmi_perf_domain_info * (*info_get)(const struct scmi_protocol_handle *, u32);
+	int (*limits_set)(const struct scmi_protocol_handle *, u32, u32, u32);
+	int (*limits_get)(const struct scmi_protocol_handle *, u32, u32 *, u32 *);
+	int (*level_set)(const struct scmi_protocol_handle *, u32, u32, bool);
+	int (*level_get)(const struct scmi_protocol_handle *, u32, u32 *, bool);
+	int (*transition_latency_get)(const struct scmi_protocol_handle *, u32);
+	int (*device_opps_add)(const struct scmi_protocol_handle *, struct device *, u32);
+	int (*freq_set)(const struct scmi_protocol_handle *, u32, unsigned long, bool);
+	int (*freq_get)(const struct scmi_protocol_handle *, u32, unsigned long *, bool);
+	int (*est_power_get)(const struct scmi_protocol_handle *, u32, unsigned long *, unsigned long *);
+	bool (*fast_switch_possible)(const struct scmi_protocol_handle *, u32);
+	enum scmi_power_scale (*power_scale_get)(const struct scmi_protocol_handle *);
+	u64 android_kabi_reserved1;
+};
+
+struct scmi_xfer_ops;
+
+struct scmi_proto_helpers_ops;
+
+struct scmi_protocol_handle {
+	struct device *dev;
+	const struct scmi_xfer_ops *xops;
+	const struct scmi_proto_helpers_ops *hops;
+	int (*set_priv)(const struct scmi_protocol_handle *, void *, u32);
+	void * (*get_priv)(const struct scmi_protocol_handle *);
+};
+
+struct scmi_perf_domain_info {
+	char name[64];
+	bool set_perf;
+};
+
+enum mrq_pg_cmd {
+	CMD_PG_QUERY_ABI = 0,
+	CMD_PG_SET_STATE = 1,
+	CMD_PG_GET_STATE = 2,
+	CMD_PG_GET_NAME = 3,
+	CMD_PG_GET_MAX_ID = 4,
+};
+
+enum pg_states {
+	PG_STATE_OFF = 0,
+	PG_STATE_ON = 1,
+	PG_STATE_RUNNING = 2,
+};
+
+struct tegra_powergate___2 {
+	struct generic_pm_domain genpd;
+	struct tegra_bpmp *bpmp;
+	unsigned int id;
+};
+
+struct cmd_pg_query_abi_request {
+	uint32_t type;
+};
+
+struct cmd_pg_set_state_request {
+	uint32_t state;
+};
+
+struct mrq_pg_request {
+	uint32_t cmd;
+	uint32_t id;
+	union {
+		struct cmd_pg_query_abi_request query_abi;
+		struct cmd_pg_set_state_request set_state;
+	};
+};
+
+struct cmd_pg_get_state_response {
+	uint32_t state;
+};
+
+struct cmd_pg_get_name_response {
+	uint8_t name[40];
+};
+
+struct cmd_pg_get_max_id_response {
+	uint32_t max_id;
+};
+
+struct mrq_pg_response {
+	union {
+		struct cmd_pg_get_state_response get_state;
+		struct cmd_pg_get_name_response get_name;
+		struct cmd_pg_get_max_id_response get_max_id;
+	};
+};
+
+struct tegra_powergate_info {
+	unsigned int id;
+	char *name;
+};
+
+struct vring_desc;
+
+typedef struct vring_desc vring_desc_t;
+
+struct vring_avail;
+
+typedef struct vring_avail vring_avail_t;
+
+struct vring_used;
+
+typedef struct vring_used vring_used_t;
+
+struct vring {
+	unsigned int num;
+	vring_desc_t *desc;
+	vring_avail_t *avail;
+	vring_used_t *used;
+};
+
+struct vring_desc_state_split;
+
+struct vring_desc_extra;
+
+struct vring_virtqueue_split {
+	struct vring vring;
+	u16 avail_flags_shadow;
+	u16 avail_idx_shadow;
+	struct vring_desc_state_split *desc_state;
+	struct vring_desc_extra *desc_extra;
+	dma_addr_t queue_dma_addr;
+	size_t queue_size_in_bytes;
+	u32 vring_align;
+	bool may_reduce_num;
+};
+
+struct vring_packed_desc;
+
+struct vring_packed_desc_event;
+
+struct vring_desc_state_packed;
+
+struct vring_virtqueue_packed {
+	struct {
+		unsigned int num;
+		struct vring_packed_desc *desc;
+		struct vring_packed_desc_event *driver;
+		struct vring_packed_desc_event *device;
+	} vring;
+	bool avail_wrap_counter;
+	u16 avail_used_flags;
+	u16 next_avail_idx;
+	u16 event_flags_shadow;
+	struct vring_desc_state_packed *desc_state;
+	struct vring_desc_extra *desc_extra;
+	dma_addr_t ring_dma_addr;
+	dma_addr_t driver_event_dma_addr;
+	dma_addr_t device_event_dma_addr;
+	size_t ring_size_in_bytes;
+	size_t event_size_in_bytes;
+};
+
+struct vring_virtqueue {
+	struct virtqueue vq;
+	bool packed_ring;
+	bool use_dma_api;
+	bool weak_barriers;
+	bool broken;
+	bool indirect;
+	bool event;
+	bool premapped;
+	bool do_unmap;
+	unsigned int free_head;
+	unsigned int num_added;
+	u16 last_used_idx;
+	bool event_triggered;
+	union {
+		struct vring_virtqueue_split split;
+		struct vring_virtqueue_packed packed;
+	};
+	bool (*notify)(struct virtqueue *);
+	bool we_own_ring;
+	struct device *dma_dev;
+};
+
+typedef __u64 __virtio64;
+
+typedef __u32 __virtio32;
+
+typedef __u16 __virtio16;
+
+struct vring_desc {
+	__virtio64 addr;
+	__virtio32 len;
+	__virtio16 flags;
+	__virtio16 next;
+};
+
+struct vring_avail {
+	__virtio16 flags;
+	__virtio16 idx;
+	__virtio16 ring[0];
+};
+
+struct vring_used_elem {
+	__virtio32 id;
+	__virtio32 len;
+};
+
+typedef struct vring_used_elem vring_used_elem_t;
+
+struct vring_used {
+	__virtio16 flags;
+	__virtio16 idx;
+	vring_used_elem_t ring[0];
+};
+
+struct vring_desc_state_split {
+	void *data;
+	struct vring_desc *indir_desc;
+};
+
+struct vring_desc_extra {
+	dma_addr_t addr;
+	u32 len;
+	u16 flags;
+	u16 next;
+};
+
+struct vring_packed_desc {
+	__le64 addr;
+	__le32 len;
+	__le16 id;
+	__le16 flags;
+};
+
+struct vring_packed_desc_event {
+	__le16 off_wrap;
+	__le16 flags;
+};
+
+struct vring_desc_state_packed {
+	void *data;
+	struct vring_packed_desc *indir_desc;
+	u16 num;
+	u16 last;
+};
+
+typedef void (*btf_trace_regulator_enable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_enable_delay)(void *, const char *);
+
+typedef void (*btf_trace_regulator_enable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_disable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_disable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_enable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_enable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_disable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_disable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_set_voltage)(void *, const char *, int, int);
+
+typedef void (*btf_trace_regulator_set_voltage_complete)(void *, const char *, unsigned int);
+
+struct ww_class {
+	atomic_long_t stamp;
+	struct lock_class_key acquire_key;
+	struct lock_class_key mutex_key;
+	const char *acquire_name;
+	const char *mutex_name;
+	unsigned int is_wait_die;
+};
+
+struct regulator_dev;
+
+struct regulator_coupler {
+	struct list_head list;
+	int (*attach_regulator)(struct regulator_coupler *, struct regulator_dev *);
+	int (*detach_regulator)(struct regulator_coupler *, struct regulator_dev *);
+	int (*balance_voltage)(struct regulator_coupler *, struct regulator_dev *, suspend_state_t);
+};
+
+struct coupling_desc {
+	struct regulator_dev **coupled_rdevs;
+	struct regulator_coupler *coupler;
+	int n_resolved;
+	int n_coupled;
+};
+
+struct regulator_desc;
+
+struct regulation_constraints;
+
+struct regulator_enable_gpio;
+
+struct regulator_dev {
+	const struct regulator_desc *desc;
+	int exclusive;
+	u32 use_count;
+	u32 open_count;
+	u32 bypass_count;
+	struct list_head list;
+	struct list_head consumer_list;
+	struct coupling_desc coupling_desc;
+	struct blocking_notifier_head notifier;
+	struct ww_mutex mutex;
+	struct task_struct *mutex_owner;
+	int ref_cnt;
+	struct module *owner;
+	struct device dev;
+	struct regulation_constraints *constraints;
+	struct regulator *supply;
+	const char *supply_name;
+	struct regmap *regmap;
+	struct delayed_work disable_work;
+	void *reg_data;
+	struct dentry *debugfs;
+	struct regulator_enable_gpio *ena_pin;
+	unsigned int ena_gpio_state: 1;
+	unsigned int is_switch: 1;
+	ktime_t last_off;
+	int cached_err;
+	bool use_cached_err;
+	spinlock_t err_lock;
+	u64 android_kabi_reserved1;
+};
+
+enum regulator_type {
+	REGULATOR_VOLTAGE = 0,
+	REGULATOR_CURRENT = 1,
+};
+
+struct regulator_config;
+
+struct regulator_ops;
+
+struct regulator_desc {
+	const char *name;
+	const char *supply_name;
+	const char *of_match;
+	bool of_match_full_name;
+	const char *regulators_node;
+	int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);
+	int id;
+	unsigned int continuous_voltage_range: 1;
+	unsigned int n_voltages;
+	unsigned int n_current_limits;
+	const struct regulator_ops *ops;
+	int irq;
+	enum regulator_type type;
+	struct module *owner;
+	unsigned int min_uV;
+	unsigned int uV_step;
+	unsigned int linear_min_sel;
+	int fixed_uV;
+	unsigned int ramp_delay;
+	int min_dropout_uV;
+	const struct linear_range *linear_ranges;
+	const unsigned int *linear_range_selectors_bitfield;
+	int n_linear_ranges;
+	const unsigned int *volt_table;
+	const unsigned int *curr_table;
+	unsigned int vsel_range_reg;
+	unsigned int vsel_range_mask;
+	unsigned int vsel_reg;
+	unsigned int vsel_mask;
+	unsigned int vsel_step;
+	unsigned int csel_reg;
+	unsigned int csel_mask;
+	unsigned int apply_reg;
+	unsigned int apply_bit;
+	unsigned int enable_reg;
+	unsigned int enable_mask;
+	unsigned int enable_val;
+	unsigned int disable_val;
+	bool enable_is_inverted;
+	unsigned int bypass_reg;
+	unsigned int bypass_mask;
+	unsigned int bypass_val_on;
+	unsigned int bypass_val_off;
+	unsigned int active_discharge_on;
+	unsigned int active_discharge_off;
+	unsigned int active_discharge_mask;
+	unsigned int active_discharge_reg;
+	unsigned int soft_start_reg;
+	unsigned int soft_start_mask;
+	unsigned int soft_start_val_on;
+	unsigned int pull_down_reg;
+	unsigned int pull_down_mask;
+	unsigned int pull_down_val_on;
+	unsigned int ramp_reg;
+	unsigned int ramp_mask;
+	const unsigned int *ramp_delay_table;
+	unsigned int n_ramp_values;
+	unsigned int enable_time;
+	unsigned int off_on_delay;
+	unsigned int poll_enabled_time;
+	unsigned int (*of_map_mode)(unsigned int);
+	u64 android_kabi_reserved1;
+};
+
+struct regulator_init_data;
+
+struct regulator_config {
+	struct device *dev;
+	const struct regulator_init_data *init_data;
+	void *driver_data;
+	struct device_node *of_node;
+	struct regmap *regmap;
+	struct gpio_desc *ena_gpiod;
+};
+
+struct regulator_state {
+	int uV;
+	int min_uV;
+	int max_uV;
+	unsigned int mode;
+	int enabled;
+	bool changeable;
+};
+
+struct notification_limit {
+	int prot;
+	int err;
+	int warn;
+};
+
+struct regulation_constraints {
+	const char *name;
+	int min_uV;
+	int max_uV;
+	int uV_offset;
+	int min_uA;
+	int max_uA;
+	int ilim_uA;
+	int system_load;
+	u32 *max_spread;
+	int max_uV_step;
+	unsigned int valid_modes_mask;
+	unsigned int valid_ops_mask;
+	int input_uV;
+	struct regulator_state state_disk;
+	struct regulator_state state_mem;
+	struct regulator_state state_standby;
+	struct notification_limit over_curr_limits;
+	struct notification_limit over_voltage_limits;
+	struct notification_limit under_voltage_limits;
+	struct notification_limit temp_limits;
+	suspend_state_t initial_state;
+	unsigned int initial_mode;
+	unsigned int ramp_delay;
+	unsigned int settling_time;
+	unsigned int settling_time_up;
+	unsigned int settling_time_down;
+	unsigned int enable_time;
+	unsigned int active_discharge;
+	unsigned int always_on: 1;
+	unsigned int boot_on: 1;
+	unsigned int apply_uV: 1;
+	unsigned int ramp_disable: 1;
+	unsigned int soft_start: 1;
+	unsigned int pull_down: 1;
+	unsigned int over_current_protection: 1;
+	unsigned int over_current_detection: 1;
+	unsigned int over_voltage_detection: 1;
+	unsigned int under_voltage_detection: 1;
+	unsigned int over_temp_detection: 1;
+};
+
+struct regulator_consumer_supply;
+
+struct regulator_init_data {
+	const char *supply_regulator;
+	struct regulation_constraints constraints;
+	int num_consumer_supplies;
+	struct regulator_consumer_supply *consumer_supplies;
+	int (*regulator_init)(void *);
+	void *driver_data;
+};
+
+struct regulator_consumer_supply {
+	const char *dev_name;
+	const char *supply;
+};
+
+struct regulator_ops {
+	int (*list_voltage)(struct regulator_dev *, unsigned int);
+	int (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);
+	int (*map_voltage)(struct regulator_dev *, int, int);
+	int (*set_voltage_sel)(struct regulator_dev *, unsigned int);
+	int (*get_voltage)(struct regulator_dev *);
+	int (*get_voltage_sel)(struct regulator_dev *);
+	int (*set_current_limit)(struct regulator_dev *, int, int);
+	int (*get_current_limit)(struct regulator_dev *);
+	int (*set_input_current_limit)(struct regulator_dev *, int);
+	int (*set_over_current_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_over_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_under_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_thermal_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_active_discharge)(struct regulator_dev *, bool);
+	int (*enable)(struct regulator_dev *);
+	int (*disable)(struct regulator_dev *);
+	int (*is_enabled)(struct regulator_dev *);
+	int (*set_mode)(struct regulator_dev *, unsigned int);
+	unsigned int (*get_mode)(struct regulator_dev *);
+	int (*get_error_flags)(struct regulator_dev *, unsigned int *);
+	int (*enable_time)(struct regulator_dev *);
+	int (*set_ramp_delay)(struct regulator_dev *, int);
+	int (*set_voltage_time)(struct regulator_dev *, int, int);
+	int (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);
+	int (*set_soft_start)(struct regulator_dev *);
+	int (*get_status)(struct regulator_dev *);
+	unsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);
+	int (*set_load)(struct regulator_dev *, int);
+	int (*set_bypass)(struct regulator_dev *, bool);
+	int (*get_bypass)(struct regulator_dev *, bool *);
+	int (*set_suspend_voltage)(struct regulator_dev *, int);
+	int (*set_suspend_enable)(struct regulator_dev *);
+	int (*set_suspend_disable)(struct regulator_dev *);
+	int (*set_suspend_mode)(struct regulator_dev *, unsigned int);
+	int (*resume)(struct regulator_dev *);
+	int (*set_pull_down)(struct regulator_dev *);
+	u64 android_kabi_reserved1;
+};
+
+struct regulator_voltage {
+	int min_uV;
+	int max_uV;
+};
+
+struct regulator {
+	struct device *dev;
+	struct list_head list;
+	unsigned int always_on: 1;
+	unsigned int bypass: 1;
+	unsigned int device_link: 1;
+	int uA_load;
+	unsigned int enable_count;
+	unsigned int deferred_disables;
+	struct regulator_voltage voltage[5];
+	const char *supply_name;
+	struct device_attribute dev_attr;
+	struct regulator_dev *rdev;
+	struct dentry *debugfs;
+};
+
+struct regulator_enable_gpio {
+	struct list_head list;
+	struct gpio_desc *gpiod;
+	u32 enable_count;
+	u32 request_count;
+};
+
+enum regulator_get_type {
+	NORMAL_GET = 0,
+	EXCLUSIVE_GET = 1,
+	OPTIONAL_GET = 2,
+	MAX_GET_TYPE = 3,
+};
+
+enum regulator_status {
+	REGULATOR_STATUS_OFF = 0,
+	REGULATOR_STATUS_ON = 1,
+	REGULATOR_STATUS_ERROR = 2,
+	REGULATOR_STATUS_FAST = 3,
+	REGULATOR_STATUS_NORMAL = 4,
+	REGULATOR_STATUS_IDLE = 5,
+	REGULATOR_STATUS_STANDBY = 6,
+	REGULATOR_STATUS_BYPASS = 7,
+	REGULATOR_STATUS_UNDEFINED = 8,
+};
+
+enum regulator_detection_severity {
+	REGULATOR_SEVERITY_PROT = 0,
+	REGULATOR_SEVERITY_ERR = 1,
+	REGULATOR_SEVERITY_WARN = 2,
+};
+
+enum regulator_active_discharge {
+	REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
+	REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
+	REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
+};
+
+struct trace_event_raw_regulator_basic {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_regulator_range {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int min;
+	int max;
+	char __data[0];
+};
+
+struct trace_event_raw_regulator_value {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int val;
+	char __data[0];
+};
+
+struct regulator_map {
+	struct list_head list;
+	const char *dev_name;
+	const char *supply;
+	struct regulator_dev *regulator;
+};
+
+struct regulator_supply_alias {
+	struct list_head list;
+	struct device *src_dev;
+	const char *src_supply;
+	struct device *alias_dev;
+	const char *alias_supply;
+};
+
+struct trace_event_data_offsets_regulator_basic {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regulator_range {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regulator_value {
+	u32 name;
+};
+
+struct pre_voltage_change_data {
+	unsigned long old_uV;
+	unsigned long min_uV;
+	unsigned long max_uV;
+};
+
+struct summary_lock_data {
+	struct ww_acquire_ctx *ww_ctx;
+	struct regulator_dev **new_contended_rdev;
+	struct regulator_dev **old_contended_rdev;
+};
+
+struct summary_data {
+	struct seq_file *s;
+	struct regulator_dev *parent;
+	int level;
+};
+
+struct fixed_voltage_config {
+	const char *supply_name;
+	const char *input_supply;
+	int microvolts;
+	unsigned int startup_delay;
+	unsigned int off_on_delay;
+	unsigned int enabled_at_boot: 1;
+	struct regulator_init_data *init_data;
+};
+
+struct fixed_regulator_data {
+	struct fixed_voltage_config cfg;
+	struct regulator_init_data init_data;
+	struct platform_device pdev;
+};
+
+struct regulator_bulk_devres {
+	struct regulator_bulk_data *consumers;
+	int num_consumers;
+};
+
+struct regulator_supply_alias_match {
+	struct device *dev;
+	const char *id;
+};
+
+struct regulator_irq_data;
+
+struct regulator_irq_desc {
+	const char *name;
+	int fatal_cnt;
+	int reread_ms;
+	int irq_off_ms;
+	bool skip_off;
+	bool high_prio;
+	void *data;
+	int (*die)(struct regulator_irq_data *);
+	int (*map_event)(int, struct regulator_irq_data *, unsigned long *);
+	int (*renable)(struct regulator_irq_data *);
+};
+
+struct regulator_err_state;
+
+struct regulator_irq_data {
+	struct regulator_err_state *states;
+	int num_states;
+	void *data;
+	long opaque;
+};
+
+struct regulator_err_state {
+	struct regulator_dev *rdev;
+	unsigned long notifs;
+	unsigned long errors;
+	int possible_errs;
+};
+
+struct regulator_notifier_match {
+	struct regulator *regulator;
+	struct notifier_block *nb;
+};
+
+enum {
+	REGULATOR_ERROR_CLEARED = 0,
+	REGULATOR_FAILED_RETRY = 1,
+	REGULATOR_ERROR_ON = 2,
+};
+
+struct regulator_irq {
+	struct regulator_irq_data rdata;
+	struct regulator_irq_desc desc;
+	int irq;
+	int retry_cnt;
+	struct delayed_work isr_work;
+};
+
+struct of_regulator_match {
+	const char *name;
+	void *driver_data;
+	struct regulator_init_data *init_data;
+	struct device_node *of_node;
+	const struct regulator_desc *desc;
+};
+
+struct devm_of_regulator_matches {
+	struct of_regulator_match *matches;
+	unsigned int num_matches;
+};
+
+struct fixed_dev_type {
+	bool has_enable_clock;
+	bool has_performance_state;
+};
+
+struct fixed_voltage_data {
+	struct regulator_desc desc;
+	struct regulator_dev *dev;
+	struct clk *enable_clock;
+	unsigned int enable_counter;
+	int performance_state;
+};
+
+struct reset_control {
+	struct reset_controller_dev *rcdev;
+	struct list_head list;
+	unsigned int id;
+	struct kref refcnt;
+	bool acquired;
+	bool shared;
+	bool array;
+	atomic_t deassert_count;
+	atomic_t triggered_count;
+};
+
+struct reset_control_array {
+	struct reset_control base;
+	unsigned int num_rstcs;
+	struct reset_control *rstc[0];
+};
+
+struct reset_control_lookup {
+	struct list_head list;
+	const char *provider;
+	unsigned int index;
+	const char *dev_id;
+	const char *con_id;
+};
+
+struct reset_control_bulk_devres {
+	int num_rstcs;
+	struct reset_control_bulk_data *rstcs;
+};
+
+enum hi6220_reset_ctrl_type {
+	PERIPHERAL = 0,
+	MEDIA = 1,
+	AO = 2,
+};
+
+struct hi6220_reset_data {
+	struct reset_controller_dev rc_dev;
+	struct regmap *regmap;
+};
+
+struct hi3660_reset_controller {
+	struct reset_controller_dev rst;
+	struct regmap *map;
+};
+
+enum mrq_reset_commands {
+	CMD_RESET_ASSERT = 1,
+	CMD_RESET_DEASSERT = 2,
+	CMD_RESET_MODULE = 3,
+	CMD_RESET_GET_MAX_ID = 4,
+	CMD_RESET_MAX = 5,
+};
+
+struct mrq_reset_request {
+	uint32_t cmd;
+	uint32_t reset_id;
+};
+
+struct scmi_reset_proto_ops {
+	int (*num_domains_get)(const struct scmi_protocol_handle *);
+	const char * (*name_get)(const struct scmi_protocol_handle *, u32);
+	int (*latency_get)(const struct scmi_protocol_handle *, u32);
+	int (*reset)(const struct scmi_protocol_handle *, u32);
+	int (*assert)(const struct scmi_protocol_handle *, u32);
+	int (*deassert)(const struct scmi_protocol_handle *, u32);
+	u64 android_kabi_reserved1;
+};
+
+struct scmi_reset_data {
+	struct reset_controller_dev rcdev;
+	const struct scmi_protocol_handle *ph;
+};
+
+struct reset_simple_devdata {
+	u32 reg_offset;
+	u32 nr_resets;
+	bool active_low;
+	bool status_active_low;
+};
+
+struct reset_simple_data {
+	spinlock_t lock;
+	void *membase;
+	struct reset_controller_dev rcdev;
+	bool active_low;
+	bool status_active_low;
+	unsigned int reset_us;
+};
+
+struct serial_icounter_struct {
+	int cts;
+	int dsr;
+	int rng;
+	int dcd;
+	int rx;
+	int tx;
+	int frame;
+	int overrun;
+	int parity;
+	int brk;
+	int buf_overrun;
+	int reserved[9];
+};
+
+struct serial_struct {
+	int type;
+	int line;
+	unsigned int port;
+	int irq;
+	int flags;
+	int xmit_fifo_size;
+	int custom_divisor;
+	int baud_base;
+	unsigned short close_delay;
+	char io_type;
+	char reserved_char[1];
+	int hub6;
+	unsigned short closing_wait;
+	unsigned short closing_wait2;
+	unsigned char *iomem_base;
+	unsigned short iomem_reg_shift;
+	unsigned int port_high;
+	unsigned long iomap_base;
+};
+
+struct serial_struct32 {
+	compat_int_t type;
+	compat_int_t line;
+	compat_uint_t port;
+	compat_int_t irq;
+	compat_int_t flags;
+	compat_int_t xmit_fifo_size;
+	compat_int_t custom_divisor;
+	compat_int_t baud_base;
+	unsigned short close_delay;
+	char io_type;
+	char reserved_char;
+	compat_int_t hub6;
+	unsigned short closing_wait;
+	unsigned short closing_wait2;
+	compat_uint_t iomem_base;
+	unsigned short iomem_reg_shift;
+	unsigned int port_high;
+	compat_int_t reserved;
+};
+
+enum {
+	ERASE = 0,
+	WERASE = 1,
+	KILL = 2,
+};
+
+struct n_tty_data {
+	size_t read_head;
+	size_t commit_head;
+	size_t canon_head;
+	size_t echo_head;
+	size_t echo_commit;
+	size_t echo_mark;
+	unsigned long char_map[4];
+	unsigned long overrun_time;
+	unsigned int num_overrun;
+	bool no_room;
+	unsigned char lnext: 1;
+	unsigned char erasing: 1;
+	unsigned char raw: 1;
+	unsigned char real_raw: 1;
+	unsigned char icanon: 1;
+	unsigned char push: 1;
+	u8 read_buf[4096];
+	unsigned long read_flags[64];
+	u8 echo_buf[4096];
+	size_t read_tail;
+	size_t line_start;
+	size_t lookahead_count;
+	unsigned int column;
+	unsigned int canon_column;
+	size_t echo_tail;
+	struct mutex atomic_read_lock;
+	struct mutex output_lock;
+};
+
+struct termios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+};
+
+struct termios2 {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct termio {
+	unsigned short c_iflag;
+	unsigned short c_oflag;
+	unsigned short c_cflag;
+	unsigned short c_lflag;
+	unsigned char c_line;
+	unsigned char c_cc[8];
+};
+
+struct ldsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+};
+
+struct tty_audit_buf {
+	struct mutex mutex;
+	dev_t dev;
+	bool icanon;
+	size_t valid;
+	u8 *data;
+};
+
+struct input_handle;
+
+struct input_value;
+
+struct input_dev;
+
+struct input_device_id;
+
+struct input_handler {
+	void *private;
+	void (*event)(struct input_handle *, unsigned int, unsigned int, int);
+	void (*events)(struct input_handle *, const struct input_value *, unsigned int);
+	bool (*filter)(struct input_handle *, unsigned int, unsigned int, int);
+	bool (*match)(struct input_handler *, struct input_dev *);
+	int (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);
+	void (*disconnect)(struct input_handle *);
+	void (*start)(struct input_handle *);
+	bool legacy_minors;
+	int minor;
+	const char *name;
+	const struct input_device_id *id_table;
+	struct list_head h_list;
+	struct list_head node;
+	u64 android_kabi_reserved1;
+};
+
+struct input_handle {
+	void *private;
+	int open;
+	const char *name;
+	struct input_dev *dev;
+	struct input_handler *handler;
+	struct list_head d_node;
+	struct list_head h_node;
+	u64 android_kabi_reserved1;
+};
+
+struct input_id {
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+};
+
+struct input_keymap_entry;
+
+struct ff_device;
+
+struct input_dev_poller;
+
+struct input_mt;
+
+struct input_absinfo;
+
+struct input_dev {
+	const char *name;
+	const char *phys;
+	const char *uniq;
+	struct input_id id;
+	unsigned long propbit[1];
+	unsigned long evbit[1];
+	unsigned long keybit[12];
+	unsigned long relbit[1];
+	unsigned long absbit[1];
+	unsigned long mscbit[1];
+	unsigned long ledbit[1];
+	unsigned long sndbit[1];
+	unsigned long ffbit[2];
+	unsigned long swbit[1];
+	unsigned int hint_events_per_packet;
+	unsigned int keycodemax;
+	unsigned int keycodesize;
+	void *keycode;
+	int (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);
+	int (*getkeycode)(struct input_dev *, struct input_keymap_entry *);
+	struct ff_device *ff;
+	struct input_dev_poller *poller;
+	unsigned int repeat_key;
+	struct timer_list timer;
+	int rep[2];
+	struct input_mt *mt;
+	struct input_absinfo *absinfo;
+	unsigned long key[12];
+	unsigned long led[1];
+	unsigned long snd[1];
+	unsigned long sw[1];
+	int (*open)(struct input_dev *);
+	void (*close)(struct input_dev *);
+	int (*flush)(struct input_dev *, struct file *);
+	int (*event)(struct input_dev *, unsigned int, unsigned int, int);
+	struct input_handle __attribute__((btf_type_tag("rcu"))) *grab;
+	spinlock_t event_lock;
+	struct mutex mutex;
+	unsigned int users;
+	bool going_away;
+	struct device dev;
+	struct list_head h_list;
+	struct list_head node;
+	unsigned int num_vals;
+	unsigned int max_vals;
+	struct input_value *vals;
+	bool devres_managed;
+	ktime_t timestamp[3];
+	bool inhibited;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct input_keymap_entry {
+	__u8 flags;
+	__u8 len;
+	__u16 index;
+	__u32 keycode;
+	__u8 scancode[32];
+};
+
+struct ff_effect;
+
+struct ff_device {
+	int (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);
+	int (*erase)(struct input_dev *, int);
+	int (*playback)(struct input_dev *, int, int);
+	void (*set_gain)(struct input_dev *, u16);
+	void (*set_autocenter)(struct input_dev *, u16);
+	void (*destroy)(struct ff_device *);
+	void *private;
+	unsigned long ffbit[2];
+	struct mutex mutex;
+	int max_effects;
+	struct ff_effect *effects;
+	u64 android_kabi_reserved1;
+	struct file *effect_owners[0];
+};
+
+struct ff_envelope {
+	__u16 attack_length;
+	__u16 attack_level;
+	__u16 fade_length;
+	__u16 fade_level;
+};
+
+struct ff_constant_effect {
+	__s16 level;
+	struct ff_envelope envelope;
+};
+
+struct ff_ramp_effect {
+	__s16 start_level;
+	__s16 end_level;
+	struct ff_envelope envelope;
+};
+
+struct ff_periodic_effect {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+	struct ff_envelope envelope;
+	__u32 custom_len;
+	__s16 __attribute__((btf_type_tag("user"))) *custom_data;
+};
+
+struct ff_condition_effect {
+	__u16 right_saturation;
+	__u16 left_saturation;
+	__s16 right_coeff;
+	__s16 left_coeff;
+	__u16 deadband;
+	__s16 center;
+};
+
+struct ff_rumble_effect {
+	__u16 strong_magnitude;
+	__u16 weak_magnitude;
+};
+
+struct ff_trigger {
+	__u16 button;
+	__u16 interval;
+};
+
+struct ff_replay {
+	__u16 length;
+	__u16 delay;
+};
+
+struct ff_effect {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect periodic;
+		struct ff_condition_effect condition[2];
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+struct input_absinfo {
+	__s32 value;
+	__s32 minimum;
+	__s32 maximum;
+	__s32 fuzz;
+	__s32 flat;
+	__s32 resolution;
+};
+
+struct input_value {
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct input_device_id {
+	kernel_ulong_t flags;
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+	kernel_ulong_t evbit[1];
+	kernel_ulong_t keybit[12];
+	kernel_ulong_t relbit[1];
+	kernel_ulong_t absbit[1];
+	kernel_ulong_t mscbit[1];
+	kernel_ulong_t ledbit[1];
+	kernel_ulong_t sndbit[1];
+	kernel_ulong_t ffbit[2];
+	kernel_ulong_t swbit[1];
+	kernel_ulong_t propbit[1];
+	kernel_ulong_t driver_info;
+};
+
+struct sysrq_state {
+	struct input_handle handle;
+	struct work_struct reinject_work;
+	unsigned long key_down[12];
+	unsigned int alt;
+	unsigned int alt_use;
+	unsigned int shift;
+	unsigned int shift_use;
+	bool active;
+	bool need_reinject;
+	bool reinjecting;
+	bool reset_canceled;
+	bool reset_requested;
+	unsigned long reset_keybit[12];
+	int reset_seq_len;
+	int reset_seq_cnt;
+	int reset_seq_version;
+	struct timer_list keyreset_timer;
+};
+
+struct earlycon_device;
+
+struct earlycon_id {
+	char name[15];
+	char name_term;
+	char compatible[128];
+	int (*setup)(struct earlycon_device *, const char *);
+};
+
+struct uart_icount {
+	__u32 cts;
+	__u32 dsr;
+	__u32 rng;
+	__u32 dcd;
+	__u32 rx;
+	__u32 tx;
+	__u32 frame;
+	__u32 overrun;
+	__u32 parity;
+	__u32 brk;
+	__u32 buf_overrun;
+};
+
+typedef u64 upf_t;
+
+typedef unsigned int upstat_t;
+
+struct serial_rs485 {
+	__u32 flags;
+	__u32 delay_rts_before_send;
+	__u32 delay_rts_after_send;
+	union {
+		__u32 padding[5];
+		struct {
+			__u8 addr_recv;
+			__u8 addr_dest;
+			__u8 padding0[2];
+			__u32 padding1[4];
+		};
+	};
+};
+
+struct serial_iso7816 {
+	__u32 flags;
+	__u32 tg;
+	__u32 sc_fi;
+	__u32 sc_di;
+	__u32 clk;
+	__u32 reserved[5];
+};
+
+struct uart_state;
+
+struct uart_ops;
+
+struct serial_port_device;
+
+struct uart_port {
+	spinlock_t lock;
+	unsigned long iobase;
+	unsigned char *membase;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
+	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+	int (*rs485_config)(struct uart_port *, struct ktermios *, struct serial_rs485 *);
+	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
+	unsigned int ctrl_id;
+	unsigned int port_id;
+	unsigned int irq;
+	unsigned long irqflags;
+	unsigned int uartclk;
+	unsigned int fifosize;
+	unsigned char x_char;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char quirks;
+	unsigned int read_status_mask;
+	unsigned int ignore_status_mask;
+	struct uart_state *state;
+	struct uart_icount icount;
+	struct console *cons;
+	upf_t flags;
+	upstat_t status;
+	bool hw_stopped;
+	unsigned int mctrl;
+	unsigned int frame_time;
+	unsigned int type;
+	const struct uart_ops *ops;
+	unsigned int custom_divisor;
+	unsigned int line;
+	unsigned int minor;
+	resource_size_t mapbase;
+	resource_size_t mapsize;
+	struct device *dev;
+	struct serial_port_device *port_dev;
+	unsigned long sysrq;
+	u8 sysrq_ch;
+	unsigned char has_sysrq;
+	unsigned char sysrq_seq;
+	unsigned char hub6;
+	unsigned char suspended;
+	unsigned char console_reinit;
+	const char *name;
+	struct attribute_group *attr_group;
+	const struct attribute_group **tty_groups;
+	struct serial_rs485 rs485;
+	struct serial_rs485 rs485_supported;
+	struct gpio_desc *rs485_term_gpio;
+	struct gpio_desc *rs485_rx_during_tx_gpio;
+	struct serial_iso7816 iso7816;
+	void *private_data;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct earlycon_device {
+	struct console *con;
+	struct uart_port port;
+	char options[32];
+	unsigned int baud;
+};
+
+enum uart_pm_state {
+	UART_PM_STATE_ON = 0,
+	UART_PM_STATE_OFF = 3,
+	UART_PM_STATE_UNDEFINED = 4,
+};
+
+struct circ_buf {
+	char *buf;
+	int head;
+	int tail;
+};
+
+struct uart_state {
+	struct tty_port port;
+	enum uart_pm_state pm_state;
+	struct circ_buf xmit;
+	atomic_t refcount;
+	wait_queue_head_t remove_wait;
+	struct uart_port *uart_port;
+};
+
+struct uart_ops {
+	unsigned int (*tx_empty)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*stop_tx)(struct uart_port *);
+	void (*start_tx)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	void (*send_xchar)(struct uart_port *, char);
+	void (*stop_rx)(struct uart_port *);
+	void (*start_rx)(struct uart_port *);
+	void (*enable_ms)(struct uart_port *);
+	void (*break_ctl)(struct uart_port *, int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*flush_buffer)(struct uart_port *);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	const char * (*type)(struct uart_port *);
+	void (*release_port)(struct uart_port *);
+	int (*request_port)(struct uart_port *);
+	void (*config_port)(struct uart_port *, int);
+	int (*verify_port)(struct uart_port *, struct serial_struct *);
+	int (*ioctl)(struct uart_port *, unsigned int, unsigned long);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct hvc_struct;
+
+struct hv_ops {
+	int (*get_chars)(uint32_t, char *, int);
+	int (*put_chars)(uint32_t, const char *, int);
+	int (*flush)(uint32_t, bool);
+	int (*notifier_add)(struct hvc_struct *, int);
+	void (*notifier_del)(struct hvc_struct *, int);
+	void (*notifier_hangup)(struct hvc_struct *, int);
+	int (*tiocmget)(struct hvc_struct *);
+	int (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int);
+	void (*dtr_rts)(struct hvc_struct *, bool);
+};
+
+struct hvc_struct {
+	struct tty_port port;
+	spinlock_t lock;
+	int index;
+	int do_wakeup;
+	char *outbuf;
+	int outbuf_size;
+	int n_outbuf;
+	uint32_t vtermno;
+	const struct hv_ops *ops;
+	int irq_requested;
+	int data;
+	struct winsize ws;
+	struct work_struct tty_resize;
+	struct list_head next;
+	unsigned long flags;
+};
+
+struct serial_port_device {
+	struct device dev;
+	struct uart_port *port;
+	unsigned int tx_enabled: 1;
+};
+
+struct serial_ctrl_device {
+	struct device dev;
+	struct ida port_ida;
+};
+
+struct uart_driver {
+	struct module *owner;
+	const char *driver_name;
+	const char *dev_name;
+	int major;
+	int minor;
+	int nr;
+	struct console *cons;
+	struct uart_state *state;
+	struct tty_driver *tty_driver;
+	u64 android_kabi_reserved1;
+};
+
+struct uart_match {
+	struct uart_port *port;
+	struct uart_driver *driver;
+};
+
+struct mctrl_gpios;
+
+struct uart_8250_dma;
+
+struct uart_8250_ops;
+
+struct uart_8250_em485;
+
+struct uart_8250_port {
+	struct uart_port port;
+	struct timer_list timer;
+	struct list_head list;
+	u32 capabilities;
+	u16 bugs;
+	unsigned int tx_loadsz;
+	unsigned char acr;
+	unsigned char fcr;
+	unsigned char ier;
+	unsigned char lcr;
+	unsigned char mcr;
+	unsigned char cur_iotype;
+	unsigned int rpm_tx_active;
+	unsigned char canary;
+	unsigned char probe;
+	struct mctrl_gpios *gpios;
+	u16 lsr_saved_flags;
+	u16 lsr_save_mask;
+	unsigned char msr_saved_flags;
+	struct uart_8250_dma *dma;
+	const struct uart_8250_ops *ops;
+	u32 (*dl_read)(struct uart_8250_port *);
+	void (*dl_write)(struct uart_8250_port *, u32);
+	struct uart_8250_em485 *em485;
+	void (*rs485_start_tx)(struct uart_8250_port *);
+	void (*rs485_stop_tx)(struct uart_8250_port *);
+	struct delayed_work overrun_backoff;
+	u32 overrun_backoff_time_ms;
+};
+
+struct uart_8250_dma {
+	int (*tx_dma)(struct uart_8250_port *);
+	int (*rx_dma)(struct uart_8250_port *);
+	void (*prepare_tx_dma)(struct uart_8250_port *);
+	void (*prepare_rx_dma)(struct uart_8250_port *);
+	dma_filter_fn fn;
+	void *rx_param;
+	void *tx_param;
+	struct dma_slave_config rxconf;
+	struct dma_slave_config txconf;
+	struct dma_chan *rxchan;
+	struct dma_chan *txchan;
+	phys_addr_t rx_dma_addr;
+	phys_addr_t tx_dma_addr;
+	dma_addr_t rx_addr;
+	dma_addr_t tx_addr;
+	dma_cookie_t rx_cookie;
+	dma_cookie_t tx_cookie;
+	void *rx_buf;
+	size_t rx_size;
+	size_t tx_size;
+	unsigned char tx_running;
+	unsigned char tx_err;
+	unsigned char rx_running;
+};
+
+struct uart_8250_ops {
+	int (*setup_irq)(struct uart_8250_port *);
+	void (*release_irq)(struct uart_8250_port *);
+	void (*setup_timer)(struct uart_8250_port *);
+};
+
+struct uart_8250_em485 {
+	struct hrtimer start_tx_timer;
+	struct hrtimer stop_tx_timer;
+	struct hrtimer *active_timer;
+	struct uart_8250_port *port;
+	unsigned int tx_stopped: 1;
+};
+
+struct old_serial_port {
+	unsigned int uart;
+	unsigned int baud_base;
+	unsigned int port;
+	unsigned int irq;
+	upf_t flags;
+	unsigned char io_type;
+	unsigned char *iomem_base;
+	unsigned short iomem_reg_shift;
+};
+
+enum {
+	PLAT8250_DEV_LEGACY = -1,
+	PLAT8250_DEV_PLATFORM = 0,
+	PLAT8250_DEV_PLATFORM1 = 1,
+	PLAT8250_DEV_PLATFORM2 = 2,
+	PLAT8250_DEV_FOURPORT = 3,
+	PLAT8250_DEV_ACCENT = 4,
+	PLAT8250_DEV_BOCA = 5,
+	PLAT8250_DEV_EXAR_ST16C554 = 6,
+	PLAT8250_DEV_HUB6 = 7,
+	PLAT8250_DEV_AU1X00 = 8,
+	PLAT8250_DEV_SM501 = 9,
+};
+
+struct irq_info {
+	struct hlist_node node;
+	int irq;
+	spinlock_t lock;
+	struct list_head *head;
+};
+
+struct plat_serial8250_port {
+	unsigned long iobase;
+	void *membase;
+	resource_size_t mapbase;
+	resource_size_t mapsize;
+	unsigned int uartclk;
+	unsigned int irq;
+	unsigned long irqflags;
+	void *private_data;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char hub6;
+	unsigned char has_sysrq;
+	unsigned int type;
+	upf_t flags;
+	u16 bugs;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	u32 (*dl_read)(struct uart_8250_port *);
+	void (*dl_write)(struct uart_8250_port *, u32);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+};
+
+struct serial8250_config {
+	const char *name;
+	unsigned short fifo_size;
+	unsigned short tx_loadsz;
+	unsigned char fcr;
+	unsigned char rxtrig_bytes[4];
+	unsigned int flags;
+};
+
+struct dw8250_port_data {
+	int line;
+	struct uart_8250_dma dma;
+	u8 dlf_size;
+	bool hw_rs485_support;
+};
+
+struct dw8250_platform_data;
+
+struct dw8250_data {
+	struct dw8250_port_data data;
+	const struct dw8250_platform_data *pdata;
+	int msr_mask_on;
+	int msr_mask_off;
+	struct clk *clk;
+	struct clk *pclk;
+	struct notifier_block clk_notifier;
+	struct work_struct clk_work;
+	struct reset_control *rst;
+	unsigned int skip_autocfg: 1;
+	unsigned int uart_16550_compatible: 1;
+};
+
+struct dw8250_platform_data {
+	u8 usr_reg;
+	u32 cpr_val;
+	unsigned int quirks;
+};
+
+struct serial_private;
+
+struct pciserial_board;
+
+struct pci_serial_quirk {
+	u32 vendor;
+	u32 device;
+	u32 subvendor;
+	u32 subdevice;
+	int (*probe)(struct pci_dev *);
+	int (*init)(struct pci_dev *);
+	int (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);
+	void (*exit)(struct pci_dev *);
+};
+
+struct serial_private {
+	struct pci_dev *dev;
+	unsigned int nr;
+	struct pci_serial_quirk *quirk;
+	const struct pciserial_board *board;
+	int line[0];
+};
+
+struct pciserial_board {
+	unsigned int flags;
+	unsigned int num_ports;
+	unsigned int base_baud;
+	unsigned int uart_offset;
+	unsigned int reg_shift;
+	unsigned int first_offset;
+};
+
+struct timedia_struct {
+	int num;
+	const unsigned short *ids;
+};
+
+enum pci_board_num_t {
+	pbn_default = 0,
+	pbn_b0_1_115200 = 1,
+	pbn_b0_2_115200 = 2,
+	pbn_b0_4_115200 = 3,
+	pbn_b0_5_115200 = 4,
+	pbn_b0_8_115200 = 5,
+	pbn_b0_1_921600 = 6,
+	pbn_b0_2_921600 = 7,
+	pbn_b0_4_921600 = 8,
+	pbn_b0_2_1130000 = 9,
+	pbn_b0_4_1152000 = 10,
+	pbn_b0_4_1250000 = 11,
+	pbn_b0_2_1843200 = 12,
+	pbn_b0_4_1843200 = 13,
+	pbn_b0_1_15625000 = 14,
+	pbn_b0_bt_1_115200 = 15,
+	pbn_b0_bt_2_115200 = 16,
+	pbn_b0_bt_4_115200 = 17,
+	pbn_b0_bt_8_115200 = 18,
+	pbn_b0_bt_1_460800 = 19,
+	pbn_b0_bt_2_460800 = 20,
+	pbn_b0_bt_4_460800 = 21,
+	pbn_b0_bt_1_921600 = 22,
+	pbn_b0_bt_2_921600 = 23,
+	pbn_b0_bt_4_921600 = 24,
+	pbn_b0_bt_8_921600 = 25,
+	pbn_b1_1_115200 = 26,
+	pbn_b1_2_115200 = 27,
+	pbn_b1_4_115200 = 28,
+	pbn_b1_8_115200 = 29,
+	pbn_b1_16_115200 = 30,
+	pbn_b1_1_921600 = 31,
+	pbn_b1_2_921600 = 32,
+	pbn_b1_4_921600 = 33,
+	pbn_b1_8_921600 = 34,
+	pbn_b1_2_1250000 = 35,
+	pbn_b1_bt_1_115200 = 36,
+	pbn_b1_bt_2_115200 = 37,
+	pbn_b1_bt_4_115200 = 38,
+	pbn_b1_bt_2_921600 = 39,
+	pbn_b1_1_1382400 = 40,
+	pbn_b1_2_1382400 = 41,
+	pbn_b1_4_1382400 = 42,
+	pbn_b1_8_1382400 = 43,
+	pbn_b2_1_115200 = 44,
+	pbn_b2_2_115200 = 45,
+	pbn_b2_4_115200 = 46,
+	pbn_b2_8_115200 = 47,
+	pbn_b2_1_460800 = 48,
+	pbn_b2_4_460800 = 49,
+	pbn_b2_8_460800 = 50,
+	pbn_b2_16_460800 = 51,
+	pbn_b2_1_921600 = 52,
+	pbn_b2_4_921600 = 53,
+	pbn_b2_8_921600 = 54,
+	pbn_b2_8_1152000 = 55,
+	pbn_b2_bt_1_115200 = 56,
+	pbn_b2_bt_2_115200 = 57,
+	pbn_b2_bt_4_115200 = 58,
+	pbn_b2_bt_2_921600 = 59,
+	pbn_b2_bt_4_921600 = 60,
+	pbn_b3_2_115200 = 61,
+	pbn_b3_4_115200 = 62,
+	pbn_b3_8_115200 = 63,
+	pbn_b4_bt_2_921600 = 64,
+	pbn_b4_bt_4_921600 = 65,
+	pbn_b4_bt_8_921600 = 66,
+	pbn_panacom = 67,
+	pbn_panacom2 = 68,
+	pbn_panacom4 = 69,
+	pbn_plx_romulus = 70,
+	pbn_oxsemi = 71,
+	pbn_oxsemi_1_15625000 = 72,
+	pbn_oxsemi_2_15625000 = 73,
+	pbn_oxsemi_4_15625000 = 74,
+	pbn_oxsemi_8_15625000 = 75,
+	pbn_intel_i960 = 76,
+	pbn_sgi_ioc3 = 77,
+	pbn_computone_4 = 78,
+	pbn_computone_6 = 79,
+	pbn_computone_8 = 80,
+	pbn_sbsxrsio = 81,
+	pbn_pasemi_1682M = 82,
+	pbn_ni8430_2 = 83,
+	pbn_ni8430_4 = 84,
+	pbn_ni8430_8 = 85,
+	pbn_ni8430_16 = 86,
+	pbn_ADDIDATA_PCIe_1_3906250 = 87,
+	pbn_ADDIDATA_PCIe_2_3906250 = 88,
+	pbn_ADDIDATA_PCIe_4_3906250 = 89,
+	pbn_ADDIDATA_PCIe_8_3906250 = 90,
+	pbn_ce4100_1_115200 = 91,
+	pbn_omegapci = 92,
+	pbn_NETMOS9900_2s_115200 = 93,
+	pbn_brcm_trumanage = 94,
+	pbn_fintek_4 = 95,
+	pbn_fintek_8 = 96,
+	pbn_fintek_12 = 97,
+	pbn_fintek_F81504A = 98,
+	pbn_fintek_F81508A = 99,
+	pbn_fintek_F81512A = 100,
+	pbn_wch382_2 = 101,
+	pbn_wch384_4 = 102,
+	pbn_wch384_8 = 103,
+	pbn_sunix_pci_1s = 104,
+	pbn_sunix_pci_2s = 105,
+	pbn_sunix_pci_4s = 106,
+	pbn_sunix_pci_8s = 107,
+	pbn_sunix_pci_16s = 108,
+	pbn_titan_1_4000000 = 109,
+	pbn_titan_2_4000000 = 110,
+	pbn_titan_4_4000000 = 111,
+	pbn_titan_8_4000000 = 112,
+	pbn_moxa8250_2p = 113,
+	pbn_moxa8250_4p = 114,
+	pbn_moxa8250_8p = 115,
+};
+
+struct f815xxa_data {
+	spinlock_t lock;
+	int idx;
+};
+
+struct pericom8250 {
+	void *virt;
+	unsigned int nr;
+	int line[0];
+};
+
+struct of_serial_info {
+	struct clk *clk;
+	struct reset_control *rst;
+	int type;
+	int line;
+};
+
+struct pl011_dmabuf {
+	dma_addr_t dma;
+	size_t len;
+	char *buf;
+};
+
+struct pl011_dmarx_data {
+	struct dma_chan *chan;
+	struct completion complete;
+	bool use_buf_b;
+	struct pl011_dmabuf dbuf_a;
+	struct pl011_dmabuf dbuf_b;
+	dma_cookie_t cookie;
+	bool running;
+	struct timer_list timer;
+	unsigned int last_residue;
+	unsigned long last_jiffies;
+	bool auto_poll_rate;
+	unsigned int poll_rate;
+	unsigned int poll_timeout;
+};
+
+struct pl011_dmatx_data {
+	struct dma_chan *chan;
+	dma_addr_t dma;
+	size_t len;
+	char *buf;
+	bool queued;
+};
+
+struct vendor_data;
+
+struct uart_amba_port {
+	struct uart_port port;
+	const u16 *reg_offset;
+	struct clk *clk;
+	const struct vendor_data *vendor;
+	unsigned int dmacr;
+	unsigned int im;
+	unsigned int old_status;
+	unsigned int fifosize;
+	unsigned int fixed_baud;
+	char type[12];
+	bool rs485_tx_started;
+	unsigned int rs485_tx_drain_interval;
+	bool using_tx_dma;
+	bool using_rx_dma;
+	struct pl011_dmarx_data dmarx;
+	struct pl011_dmatx_data dmatx;
+	bool dma_probed;
+};
+
+struct vendor_data {
+	const u16 *reg_offset;
+	unsigned int ifls;
+	unsigned int fr_busy;
+	unsigned int fr_dsr;
+	unsigned int fr_cts;
+	unsigned int fr_ri;
+	unsigned int inv_fr;
+	bool access_32b;
+	bool oversampling;
+	bool dma_threshold;
+	bool cts_event_workaround;
+	bool always_enabled;
+	bool fixed_options;
+	unsigned int (*get_fifosize)(struct amba_device *);
+};
+
+enum {
+	REG_DR = 0,
+	REG_ST_DMAWM = 1,
+	REG_ST_TIMEOUT = 2,
+	REG_FR = 3,
+	REG_LCRH_RX = 4,
+	REG_LCRH_TX = 5,
+	REG_IBRD = 6,
+	REG_FBRD = 7,
+	REG_CR = 8,
+	REG_IFLS = 9,
+	REG_IMSC = 10,
+	REG_RIS = 11,
+	REG_MIS = 12,
+	REG_ICR = 13,
+	REG_DMACR = 14,
+	REG_ST_XFCR = 15,
+	REG_ST_XON1 = 16,
+	REG_ST_XON2 = 17,
+	REG_ST_XOFF1 = 18,
+	REG_ST_XOFF2 = 19,
+	REG_ST_ITCR = 20,
+	REG_ST_ITIP = 21,
+	REG_ST_ABCR = 22,
+	REG_ST_ABIMSC = 23,
+	REG_ARRAY_SIZE = 24,
+};
+
+struct amba_pl011_data {
+	bool (*dma_filter)(struct dma_chan *, void *);
+	void *dma_rx_param;
+	void *dma_tx_param;
+	bool dma_rx_poll_enable;
+	unsigned int dma_rx_poll_rate;
+	unsigned int dma_rx_poll_timeout;
+	void (*init)();
+	void (*exit)();
+};
+
+struct s3c24xx_uart_info;
+
+struct s3c24xx_serial_drv_data;
+
+struct s3c2410_uartcfg;
+
+struct s3c24xx_uart_dma;
+
+struct s3c24xx_uart_port {
+	unsigned char rx_claimed;
+	unsigned char tx_claimed;
+	unsigned char rx_enabled;
+	unsigned char tx_enabled;
+	unsigned int pm_level;
+	unsigned long baudclk_rate;
+	unsigned int min_dma_size;
+	unsigned int rx_irq;
+	unsigned int tx_irq;
+	unsigned int tx_in_progress;
+	unsigned int tx_mode;
+	unsigned int rx_mode;
+	const struct s3c24xx_uart_info *info;
+	struct clk *clk;
+	struct clk *baudclk;
+	struct uart_port port;
+	const struct s3c24xx_serial_drv_data *drv_data;
+	const struct s3c2410_uartcfg *cfg;
+	struct s3c24xx_uart_dma *dma;
+};
+
+enum s3c24xx_port_type {
+	TYPE_S3C24XX = 0,
+	TYPE_S3C6400 = 1,
+	TYPE_APPLE_S5L = 2,
+};
+
+struct s3c24xx_uart_info {
+	const char *name;
+	enum s3c24xx_port_type type;
+	unsigned int port_type;
+	unsigned int fifosize;
+	unsigned long rx_fifomask;
+	unsigned long rx_fifoshift;
+	unsigned long rx_fifofull;
+	unsigned long tx_fifomask;
+	unsigned long tx_fifoshift;
+	unsigned long tx_fifofull;
+	unsigned int def_clk_sel;
+	unsigned long num_clks;
+	unsigned long clksel_mask;
+	unsigned long clksel_shift;
+	unsigned long ucon_mask;
+	unsigned int has_divslot: 1;
+};
+
+struct s3c2410_uartcfg {
+	unsigned char hwport;
+	unsigned char unused;
+	unsigned short flags;
+	upf_t uart_flags;
+	unsigned int clk_sel;
+	unsigned int has_fracval;
+	unsigned long ucon;
+	unsigned long ulcon;
+	unsigned long ufcon;
+};
+
+struct s3c24xx_serial_drv_data {
+	const struct s3c24xx_uart_info info;
+	const struct s3c2410_uartcfg def_cfg;
+	const unsigned int fifosize[12];
+};
+
+struct s3c24xx_uart_dma {
+	unsigned int rx_chan_id;
+	unsigned int tx_chan_id;
+	struct dma_slave_config rx_conf;
+	struct dma_slave_config tx_conf;
+	struct dma_chan *rx_chan;
+	struct dma_chan *tx_chan;
+	dma_addr_t rx_addr;
+	dma_addr_t tx_addr;
+	dma_cookie_t rx_cookie;
+	dma_cookie_t tx_cookie;
+	char *rx_buf;
+	dma_addr_t tx_transfer_addr;
+	size_t rx_size;
+	size_t tx_size;
+	struct dma_async_tx_descriptor *tx_desc;
+	struct dma_async_tx_descriptor *rx_desc;
+	int tx_bytes_requested;
+	int rx_bytes_requested;
+};
+
+struct samsung_early_console_data {
+	u32 txfull_mask;
+	u32 rxfifo_mask;
+};
+
+struct qcom_geni_private_data {
+	struct uart_driver *drv;
+	u32 poll_cached_bytes;
+	unsigned int poll_cached_bytes_cnt;
+	u32 write_cached_bytes;
+	unsigned int write_cached_bytes_cnt;
+};
+
+struct qcom_geni_device_data;
+
+struct qcom_geni_serial_port {
+	struct uart_port uport;
+	struct geni_se se;
+	const char *name;
+	u32 tx_fifo_depth;
+	u32 tx_fifo_width;
+	u32 rx_fifo_depth;
+	dma_addr_t tx_dma_addr;
+	dma_addr_t rx_dma_addr;
+	bool setup;
+	unsigned int baud;
+	unsigned long clk_rate;
+	void *rx_buf;
+	u32 loopback;
+	bool brk;
+	unsigned int tx_remaining;
+	int wakeup_irq;
+	bool rx_tx_swap;
+	bool cts_rts_swap;
+	struct qcom_geni_private_data private_data;
+	const struct qcom_geni_device_data *dev_data;
+};
+
+struct qcom_geni_device_data {
+	bool console;
+	enum geni_se_xfer_mode mode;
+};
+
+enum geni_icc_path_index {
+	GENI_TO_CORE = 0,
+	CPU_TO_GENI = 1,
+	GENI_TO_DDR = 2,
+};
+
+struct tegra_tcu {
+	struct uart_driver driver;
+	struct console console;
+	struct uart_port port;
+	struct mbox_client tx_client;
+	struct mbox_client rx_client;
+	struct mbox_chan *tx;
+	struct mbox_chan *rx;
+};
+
+struct sprd_uart_dma {
+	struct dma_chan *chn;
+	unsigned char *virt;
+	dma_addr_t phys_addr;
+	dma_cookie_t cookie;
+	u32 trans_len;
+	bool enable;
+};
+
+struct sprd_uart_port {
+	struct uart_port port;
+	char name[16];
+	struct clk *clk;
+	struct sprd_uart_dma tx_dma;
+	struct sprd_uart_dma rx_dma;
+	dma_addr_t pos;
+	unsigned char *rx_buf_tail;
+};
+
+enum sprd_dma_chn_mode {
+	SPRD_DMA_CHN_MODE_NONE = 0,
+	SPRD_DMA_SRC_CHN0 = 1,
+	SPRD_DMA_SRC_CHN1 = 2,
+	SPRD_DMA_DST_CHN0 = 3,
+	SPRD_DMA_DST_CHN1 = 4,
+};
+
+enum sprd_dma_trg_mode {
+	SPRD_DMA_NO_TRG = 0,
+	SPRD_DMA_FRAG_DONE_TRG = 1,
+	SPRD_DMA_BLOCK_DONE_TRG = 2,
+	SPRD_DMA_TRANS_DONE_TRG = 3,
+	SPRD_DMA_LIST_DONE_TRG = 4,
+};
+
+enum sprd_dma_req_mode {
+	SPRD_DMA_FRAG_REQ = 0,
+	SPRD_DMA_BLK_REQ = 1,
+	SPRD_DMA_TRANS_REQ = 2,
+	SPRD_DMA_LIST_REQ = 3,
+};
+
+enum sprd_dma_int_type {
+	SPRD_DMA_NO_INT = 0,
+	SPRD_DMA_FRAG_INT = 1,
+	SPRD_DMA_BLK_INT = 2,
+	SPRD_DMA_BLK_FRAG_INT = 3,
+	SPRD_DMA_TRANS_INT = 4,
+	SPRD_DMA_TRANS_FRAG_INT = 5,
+	SPRD_DMA_TRANS_BLK_INT = 6,
+	SPRD_DMA_LIST_INT = 7,
+	SPRD_DMA_CFGERR_INT = 8,
+};
+
+enum mctrl_gpio_idx {
+	UART_GPIO_CTS = 0,
+	UART_GPIO_DSR = 1,
+	UART_GPIO_DCD = 2,
+	UART_GPIO_RNG = 3,
+	UART_GPIO_RI = 3,
+	UART_GPIO_RTS = 4,
+	UART_GPIO_DTR = 5,
+	UART_GPIO_MAX = 6,
+};
+
+struct mctrl_gpios {
+	struct uart_port *port;
+	struct gpio_desc *gpio[6];
+	int irq[6];
+	unsigned int mctrl_prev;
+	bool mctrl_on;
+};
+
+enum serdev_parity {
+	SERDEV_PARITY_NONE = 0,
+	SERDEV_PARITY_EVEN = 1,
+	SERDEV_PARITY_ODD = 2,
+};
+
+struct serdev_controller;
+
+struct serdev_device_ops;
+
+struct serdev_device {
+	struct device dev;
+	int nr;
+	struct serdev_controller *ctrl;
+	const struct serdev_device_ops *ops;
+	struct completion write_comp;
+	struct mutex write_lock;
+};
+
+struct serdev_controller_ops;
+
+struct serdev_controller {
+	struct device dev;
+	unsigned int nr;
+	struct serdev_device *serdev;
+	const struct serdev_controller_ops *ops;
+};
+
+struct serdev_controller_ops {
+	int (*write_buf)(struct serdev_controller *, const unsigned char *, size_t);
+	void (*write_flush)(struct serdev_controller *);
+	int (*write_room)(struct serdev_controller *);
+	int (*open)(struct serdev_controller *);
+	void (*close)(struct serdev_controller *);
+	void (*set_flow_control)(struct serdev_controller *, bool);
+	int (*set_parity)(struct serdev_controller *, enum serdev_parity);
+	unsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);
+	void (*wait_until_sent)(struct serdev_controller *, long);
+	int (*get_tiocm)(struct serdev_controller *);
+	int (*set_tiocm)(struct serdev_controller *, unsigned int, unsigned int);
+	int (*break_ctl)(struct serdev_controller *, unsigned int);
+};
+
+struct serdev_device_ops {
+	int (*receive_buf)(struct serdev_device *, const unsigned char *, size_t);
+	void (*write_wakeup)(struct serdev_device *);
+};
+
+struct serdev_device_driver {
+	struct device_driver driver;
+	int (*probe)(struct serdev_device *);
+	void (*remove)(struct serdev_device *);
+};
+
+struct serport {
+	struct tty_port *port;
+	struct tty_struct *tty;
+	struct tty_driver *tty_drv;
+	int tty_idx;
+	unsigned long flags;
+};
+
+struct memdev {
+	const char *name;
+	const struct file_operations *fops;
+	fmode_t fmode;
+	umode_t mode;
+};
+
+struct timer_rand_state {
+	unsigned long last_time;
+	long last_delta;
+	long last_delta2;
+};
+
+enum {
+	CRNG_EMPTY = 0,
+	CRNG_EARLY = 1,
+	CRNG_READY = 2,
+};
+
+struct batch_u8 {
+	u8 entropy[96];
+	local_lock_t lock;
+	unsigned long generation;
+	unsigned int position;
+};
+
+struct batch_u16 {
+	u16 entropy[48];
+	local_lock_t lock;
+	unsigned long generation;
+	unsigned int position;
+};
+
+struct batch_u32 {
+	u32 entropy[24];
+	local_lock_t lock;
+	unsigned long generation;
+	unsigned int position;
+};
+
+struct batch_u64 {
+	u64 entropy[12];
+	local_lock_t lock;
+	unsigned long generation;
+	unsigned int position;
+};
+
+struct crng {
+	u8 key[32];
+	unsigned long generation;
+	local_lock_t lock;
+};
+
+struct fast_pool {
+	unsigned long pool[4];
+	unsigned long last;
+	unsigned int count;
+	struct timer_list mix;
+};
+
+enum {
+	MIX_INFLIGHT = 2147483648,
+};
+
+enum {
+	POOL_BITS = 256,
+	POOL_READY_BITS = 256,
+	POOL_EARLY_BITS = 128,
+};
+
+enum {
+	CRNG_RESEED_START_INTERVAL = 250,
+	CRNG_RESEED_INTERVAL = 15000,
+};
+
+enum {
+	NUM_TRIAL_SAMPLES = 8192,
+	MAX_SAMPLES_PER_BIT = 16,
+};
+
+struct entropy_timer_state {
+	unsigned long entropy;
+	struct timer_list timer;
+	atomic_t samples;
+	unsigned int samples_per_bit;
+};
+
+struct hwrng {
+	const char *name;
+	int (*init)(struct hwrng *);
+	void (*cleanup)(struct hwrng *);
+	int (*data_present)(struct hwrng *, int);
+	int (*data_read)(struct hwrng *, u32 *);
+	int (*read)(struct hwrng *, void *, size_t, bool);
+	unsigned long priv;
+	unsigned short quality;
+	struct list_head list;
+	struct kref ref;
+	struct completion cleanup_done;
+	struct completion dying;
+};
+
+struct hisi_rng {
+	void *base;
+	struct hwrng rng;
+};
+
+struct histb_rng_priv {
+	struct hwrng rng;
+	void *base;
+};
+
+struct cn10k_rng {
+	void *reg_base;
+	struct hwrng ops;
+	struct pci_dev *pdev;
+	bool extended_trng_regs;
+};
+
+struct iommu_group {
+	struct kobject kobj;
+	struct kobject *devices_kobj;
+	struct list_head devices;
+	struct xarray pasid_array;
+	struct mutex mutex;
+	void *iommu_data;
+	void (*iommu_data_release)(void *);
+	char *name;
+	int id;
+	struct iommu_domain *default_domain;
+	struct iommu_domain *blocking_domain;
+	struct iommu_domain *domain;
+	struct list_head entry;
+	unsigned int owner_cnt;
+	void *owner;
+};
+
+struct iommu_group_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct iommu_group *, char *);
+	ssize_t (*store)(struct iommu_group *, const char *, size_t);
+};
+
+enum iommu_fault_type {
+	IOMMU_FAULT_DMA_UNRECOV = 1,
+	IOMMU_FAULT_PAGE_REQ = 2,
+};
+
+enum fsl_mc_pool_type {
+	FSL_MC_POOL_DPMCP = 0,
+	FSL_MC_POOL_DPBP = 1,
+	FSL_MC_POOL_DPCON = 2,
+	FSL_MC_POOL_IRQ = 3,
+	FSL_MC_NUM_POOL_TYPES = 4,
+};
+
+enum iommu_resv_type {
+	IOMMU_RESV_DIRECT = 0,
+	IOMMU_RESV_DIRECT_RELAXABLE = 1,
+	IOMMU_RESV_RESERVED = 2,
+	IOMMU_RESV_MSI = 3,
+	IOMMU_RESV_SW_MSI = 4,
+};
+
+enum {
+	IOMMU_SET_DOMAIN_MUST_SUCCEED = 1,
+};
+
+struct group_device {
+	struct list_head list;
+	struct device *dev;
+	char *name;
+};
+
+struct fsl_mc_obj_desc {
+	char type[16];
+	int id;
+	u16 vendor;
+	u16 ver_major;
+	u16 ver_minor;
+	u8 irq_count;
+	u8 region_count;
+	u32 state;
+	char label[16];
+	u16 flags;
+};
+
+struct fsl_mc_io;
+
+struct fsl_mc_device_irq;
+
+struct fsl_mc_resource;
+
+struct fsl_mc_device {
+	struct device dev;
+	u64 dma_mask;
+	u16 flags;
+	u32 icid;
+	u16 mc_handle;
+	struct fsl_mc_io *mc_io;
+	struct fsl_mc_obj_desc obj_desc;
+	struct resource *regions;
+	struct fsl_mc_device_irq **irqs;
+	struct fsl_mc_resource *resource;
+	struct device_link *consumer_link;
+	const char *driver_override;
+};
+
+struct fsl_mc_io {
+	struct device *dev;
+	u16 flags;
+	u32 portal_size;
+	phys_addr_t portal_phys_addr;
+	void *portal_virt_addr;
+	struct fsl_mc_device *dpmcp_dev;
+	union {
+		struct mutex mutex;
+		raw_spinlock_t spinlock;
+	};
+};
+
+struct fsl_mc_resource_pool;
+
+struct fsl_mc_resource {
+	enum fsl_mc_pool_type type;
+	s32 id;
+	void *data;
+	struct fsl_mc_resource_pool *parent_pool;
+	struct list_head node;
+};
+
+struct fsl_mc_device_irq {
+	unsigned int virq;
+	struct fsl_mc_device *mc_dev;
+	u8 dev_irq_index;
+	struct fsl_mc_resource resource;
+};
+
+struct iommu_resv_region {
+	struct list_head list;
+	phys_addr_t start;
+	size_t length;
+	int prot;
+	enum iommu_resv_type type;
+	void (*free)(struct device *, struct iommu_resv_region *);
+};
+
+struct group_for_pci_data {
+	struct pci_dev *pdev;
+	struct iommu_group *group;
+};
+
+typedef void (*btf_trace_add_device_to_group)(void *, int, struct device *);
+
+typedef void (*btf_trace_remove_device_from_group)(void *, int, struct device *);
+
+typedef void (*btf_trace_attach_device_to_domain)(void *, struct device *);
+
+typedef void (*btf_trace_map)(void *, unsigned long, phys_addr_t, size_t);
+
+typedef void (*btf_trace_unmap)(void *, unsigned long, size_t, size_t);
+
+typedef void (*btf_trace_io_page_fault)(void *, struct device *, unsigned long, int);
+
+struct trace_event_raw_iommu_group_event {
+	struct trace_entry ent;
+	int gid;
+	u32 __data_loc_device;
+	char __data[0];
+};
+
+struct trace_event_raw_iommu_device_event {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	char __data[0];
+};
+
+struct trace_event_raw_map {
+	struct trace_entry ent;
+	u64 iova;
+	u64 paddr;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_unmap {
+	struct trace_entry ent;
+	u64 iova;
+	size_t size;
+	size_t unmapped_size;
+	char __data[0];
+};
+
+struct trace_event_raw_iommu_error {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	u64 iova;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iommu_group_event {
+	u32 device;
+};
+
+struct trace_event_data_offsets_iommu_device_event {
+	u32 device;
+};
+
+struct trace_event_data_offsets_map {};
+
+struct trace_event_data_offsets_unmap {};
+
+struct trace_event_data_offsets_iommu_error {
+	u32 device;
+	u32 driver;
+};
+
+struct iova {
+	struct rb_node node;
+	unsigned long pfn_hi;
+	unsigned long pfn_lo;
+};
+
+struct iova_rcache;
+
+struct iova_domain {
+	spinlock_t iova_rbtree_lock;
+	struct rb_root rbroot;
+	struct rb_node *cached_node;
+	struct rb_node *cached32_node;
+	unsigned long granule;
+	unsigned long start_pfn;
+	unsigned long dma_32bit_pfn;
+	unsigned long max32_alloc_size;
+	struct iova anchor;
+	struct iova_rcache *rcaches;
+	struct hlist_node cpuhp_dead;
+	u64 android_vendor_data1;
+};
+
+enum iommu_dma_cookie_type {
+	IOMMU_DMA_IOVA_COOKIE = 0,
+	IOMMU_DMA_MSI_COOKIE = 1,
+};
+
+struct iova_fq;
+
+struct iommu_dma_cookie {
+	enum iommu_dma_cookie_type type;
+	union {
+		struct {
+			struct iova_domain iovad;
+			struct iova_fq __attribute__((btf_type_tag("percpu"))) *fq;
+			atomic64_t fq_flush_start_cnt;
+			atomic64_t fq_flush_finish_cnt;
+			struct timer_list fq_timer;
+			atomic_t fq_timer_on;
+		};
+		dma_addr_t msi_iova;
+	};
+	struct list_head msi_page_list;
+	struct iommu_domain *fq_domain;
+	struct mutex mutex;
+};
+
+struct iova_fq_entry {
+	unsigned long iova_pfn;
+	unsigned long pages;
+	struct list_head freelist;
+	u64 counter;
+};
+
+struct iova_fq {
+	struct iova_fq_entry entries[256];
+	unsigned int head;
+	unsigned int tail;
+	spinlock_t lock;
+};
+
+struct iommu_dma_msi_page {
+	struct list_head list;
+	dma_addr_t iova;
+	phys_addr_t phys;
+};
+
+struct io_pgtable;
+
+struct io_pgtable_cfg;
+
+struct io_pgtable_init_fns {
+	struct io_pgtable * (*alloc)(struct io_pgtable_cfg *, void *);
+	void (*free)(struct io_pgtable *);
+	int (*configure)(struct io_pgtable_cfg *, size_t *);
+};
+
+enum io_pgtable_fmt {
+	ARM_32_LPAE_S1 = 0,
+	ARM_32_LPAE_S2 = 1,
+	ARM_64_LPAE_S1 = 2,
+	ARM_64_LPAE_S2 = 3,
+	ARM_V7S = 4,
+	ARM_MALI_LPAE = 5,
+	AMD_IOMMU_V1 = 6,
+	AMD_IOMMU_V2 = 7,
+	APPLE_DART = 8,
+	APPLE_DART2 = 9,
+	IO_PGTABLE_NUM_FMTS = 10,
+};
+
+struct iommu_flush_ops;
+
+struct io_pgtable_cfg {
+	enum io_pgtable_fmt fmt;
+	unsigned long quirks;
+	unsigned long pgsize_bitmap;
+	unsigned int ias;
+	unsigned int oas;
+	bool coherent_walk;
+	const struct iommu_flush_ops *tlb;
+	struct device *iommu_dev;
+	union {
+		struct {
+			u64 ttbr;
+			struct {
+				u32 ips: 3;
+				u32 tg: 2;
+				u32 sh: 2;
+				u32 orgn: 2;
+				u32 irgn: 2;
+				u32 tsz: 6;
+			} tcr;
+			u64 mair;
+		} arm_lpae_s1_cfg;
+		struct {
+			u64 vttbr;
+			struct {
+				u32 ps: 3;
+				u32 tg: 2;
+				u32 sh: 2;
+				u32 orgn: 2;
+				u32 irgn: 2;
+				u32 sl: 2;
+				u32 tsz: 6;
+			} vtcr;
+		} arm_lpae_s2_cfg;
+		struct {
+			u32 ttbr;
+			u32 tcr;
+			u32 nmrr;
+			u32 prrr;
+		} arm_v7s_cfg;
+		struct {
+			u64 transtab;
+			u64 memattr;
+		} arm_mali_lpae_cfg;
+		struct {
+			u64 ttbr[4];
+			u32 n_ttbrs;
+		} apple_dart_cfg;
+	};
+};
+
+struct io_pgtable_walker;
+
+struct io_pgtable_ops {
+	int (*map_pages)(struct io_pgtable_ops *, unsigned long, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
+	size_t (*unmap_pages)(struct io_pgtable_ops *, unsigned long, size_t, size_t, struct iommu_iotlb_gather *);
+	size_t (*unmap_pages_walk)(struct io_pgtable_ops *, unsigned long, size_t, size_t, struct iommu_iotlb_gather *, struct io_pgtable_walker *);
+	phys_addr_t (*iova_to_phys)(struct io_pgtable_ops *, unsigned long);
+};
+
+struct io_pgtable {
+	enum io_pgtable_fmt fmt;
+	void *cookie;
+	struct io_pgtable_cfg cfg;
+	struct io_pgtable_ops ops;
+};
+
+struct iommu_flush_ops {
+	void (*tlb_flush_all)(void *);
+	void (*tlb_flush_walk)(unsigned long, size_t, size_t, void *);
+	void (*tlb_add_page)(struct iommu_iotlb_gather *, unsigned long, size_t, void *);
+};
+
+struct io_pgtable_ctxt;
+
+struct io_pgtable_walker {
+	void (*cb)(struct io_pgtable_ctxt *);
+	void * const arg;
+};
+
+struct io_pgtable_ctxt {
+	void *arg;
+	u64 addr;
+	size_t size;
+};
+
+typedef u32 arm_v7s_iopte;
+
+struct arm_v7s_io_pgtable {
+	struct io_pgtable iop;
+	arm_v7s_iopte *pgd;
+	struct kmem_cache *l2_tables;
+	spinlock_t split_lock;
+};
+
+struct arm_lpae_io_pgtable {
+	struct io_pgtable iop;
+	int pgd_bits;
+	int start_level;
+	int bits_per_level;
+	void *pgd;
+	bool idmapped;
+};
+
+typedef u64 arm_lpae_iopte;
+
+struct iova_magazine;
+
+struct iova_cpu_rcache {
+	spinlock_t lock;
+	struct iova_magazine *loaded;
+	struct iova_magazine *prev;
+};
+
+struct iova_magazine {
+	unsigned long size;
+	unsigned long pfns[127];
+};
+
+struct iova_rcache {
+	spinlock_t lock;
+	unsigned long depot_size;
+	struct iova_magazine *depot[32];
+	struct iova_cpu_rcache __attribute__((btf_type_tag("percpu"))) *cpu_rcaches;
+};
+
+struct of_phandle_iterator {
+	const char *cells_name;
+	int cell_count;
+	const struct device_node *parent;
+	const __be32 *list_end;
+	const __be32 *phandle_end;
+	const __be32 *cur;
+	uint32_t cur_count;
+	phandle phandle;
+	struct device_node *node;
+};
+
+struct of_pci_iommu_alias_info {
+	struct device *dev;
+	struct device_node *np;
+};
+
+enum switch_power_state {
+	DRM_SWITCH_POWER_ON = 0,
+	DRM_SWITCH_POWER_OFF = 1,
+	DRM_SWITCH_POWER_CHANGING = 2,
+	DRM_SWITCH_POWER_DYNAMIC_OFF = 3,
+};
+
+struct drm_modeset_lock {
+	struct ww_mutex mutex;
+	struct list_head head;
+};
+
+struct drm_modeset_acquire_ctx;
+
+struct drm_mode_config_funcs;
+
+struct drm_property;
+
+struct drm_atomic_state;
+
+struct drm_mode_config_helper_funcs;
+
+struct drm_mode_config {
+	struct mutex mutex;
+	struct drm_modeset_lock connection_mutex;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct mutex idr_mutex;
+	struct idr object_idr;
+	struct idr tile_idr;
+	struct mutex fb_lock;
+	int num_fb;
+	struct list_head fb_list;
+	spinlock_t connector_list_lock;
+	int num_connector;
+	struct ida connector_ida;
+	struct list_head connector_list;
+	struct llist_head connector_free_list;
+	struct work_struct connector_free_work;
+	int num_encoder;
+	struct list_head encoder_list;
+	int num_total_plane;
+	struct list_head plane_list;
+	int num_crtc;
+	struct list_head crtc_list;
+	struct list_head property_list;
+	struct list_head privobj_list;
+	int min_width;
+	int min_height;
+	int max_width;
+	int max_height;
+	const struct drm_mode_config_funcs *funcs;
+	bool poll_enabled;
+	bool poll_running;
+	bool delayed_event;
+	struct delayed_work output_poll_work;
+	struct mutex blob_lock;
+	struct list_head property_blob_list;
+	struct drm_property *edid_property;
+	struct drm_property *dpms_property;
+	struct drm_property *path_property;
+	struct drm_property *tile_property;
+	struct drm_property *link_status_property;
+	struct drm_property *plane_type_property;
+	struct drm_property *prop_src_x;
+	struct drm_property *prop_src_y;
+	struct drm_property *prop_src_w;
+	struct drm_property *prop_src_h;
+	struct drm_property *prop_crtc_x;
+	struct drm_property *prop_crtc_y;
+	struct drm_property *prop_crtc_w;
+	struct drm_property *prop_crtc_h;
+	struct drm_property *prop_fb_id;
+	struct drm_property *prop_in_fence_fd;
+	struct drm_property *prop_out_fence_ptr;
+	struct drm_property *prop_crtc_id;
+	struct drm_property *prop_fb_damage_clips;
+	struct drm_property *prop_active;
+	struct drm_property *prop_mode_id;
+	struct drm_property *prop_vrr_enabled;
+	struct drm_property *dvi_i_subconnector_property;
+	struct drm_property *dvi_i_select_subconnector_property;
+	struct drm_property *dp_subconnector_property;
+	struct drm_property *tv_subconnector_property;
+	struct drm_property *tv_select_subconnector_property;
+	struct drm_property *legacy_tv_mode_property;
+	struct drm_property *tv_mode_property;
+	struct drm_property *tv_left_margin_property;
+	struct drm_property *tv_right_margin_property;
+	struct drm_property *tv_top_margin_property;
+	struct drm_property *tv_bottom_margin_property;
+	struct drm_property *tv_brightness_property;
+	struct drm_property *tv_contrast_property;
+	struct drm_property *tv_flicker_reduction_property;
+	struct drm_property *tv_overscan_property;
+	struct drm_property *tv_saturation_property;
+	struct drm_property *tv_hue_property;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *aspect_ratio_property;
+	struct drm_property *content_type_property;
+	struct drm_property *degamma_lut_property;
+	struct drm_property *degamma_lut_size_property;
+	struct drm_property *ctm_property;
+	struct drm_property *gamma_lut_property;
+	struct drm_property *gamma_lut_size_property;
+	struct drm_property *suggested_x_property;
+	struct drm_property *suggested_y_property;
+	struct drm_property *non_desktop_property;
+	struct drm_property *panel_orientation_property;
+	struct drm_property *writeback_fb_id_property;
+	struct drm_property *writeback_pixel_formats_property;
+	struct drm_property *writeback_out_fence_ptr_property;
+	struct drm_property *hdr_output_metadata_property;
+	struct drm_property *content_protection_property;
+	struct drm_property *hdcp_content_type_property;
+	uint32_t preferred_depth;
+	uint32_t prefer_shadow;
+	bool quirk_addfb_prefer_xbgr_30bpp;
+	bool quirk_addfb_prefer_host_byte_order;
+	bool async_page_flip;
+	bool fb_modifiers_not_supported;
+	bool normalize_zpos;
+	struct drm_property *modifiers_property;
+	uint32_t cursor_width;
+	uint32_t cursor_height;
+	struct drm_atomic_state *suspend_state;
+	const struct drm_mode_config_helper_funcs *helper_private;
+};
+
+struct drm_vram_mm;
+
+struct drm_driver;
+
+struct drm_minor;
+
+struct drm_master;
+
+struct drm_vblank_crtc;
+
+struct drm_vma_offset_manager;
+
+struct drm_fb_helper;
+
+struct drm_device {
+	int if_version;
+	struct kref ref;
+	struct device *dev;
+	struct {
+		struct list_head resources;
+		void *final_kfree;
+		spinlock_t lock;
+	} managed;
+	const struct drm_driver *driver;
+	void *dev_private;
+	struct drm_minor *primary;
+	struct drm_minor *render;
+	struct drm_minor *accel;
+	bool registered;
+	struct drm_master *master;
+	u32 driver_features;
+	bool unplugged;
+	struct inode *anon_inode;
+	char *unique;
+	struct mutex struct_mutex;
+	struct mutex master_mutex;
+	atomic_t open_count;
+	struct mutex filelist_mutex;
+	struct list_head filelist;
+	struct list_head filelist_internal;
+	struct mutex clientlist_mutex;
+	struct list_head clientlist;
+	bool vblank_disable_immediate;
+	struct drm_vblank_crtc *vblank;
+	spinlock_t vblank_time_lock;
+	spinlock_t vbl_lock;
+	u32 max_vblank_count;
+	struct list_head vblank_event_list;
+	spinlock_t event_lock;
+	unsigned int num_crtcs;
+	struct drm_mode_config mode_config;
+	struct mutex object_name_lock;
+	struct idr object_name_idr;
+	struct drm_vma_offset_manager *vma_offset_manager;
+	struct drm_vram_mm *vram_mm;
+	enum switch_power_state switch_power_state;
+	struct drm_fb_helper *fb_helper;
+	struct mutex debugfs_mutex;
+	struct list_head debugfs_list;
+};
+
+struct drm_file;
+
+struct drm_gem_object;
+
+struct dma_buf;
+
+struct dma_buf_attachment;
+
+struct drm_mode_create_dumb;
+
+struct drm_printer;
+
+struct drm_ioctl_desc;
+
+struct drm_driver {
+	int (*load)(struct drm_device *, unsigned long);
+	int (*open)(struct drm_device *, struct drm_file *);
+	void (*postclose)(struct drm_device *, struct drm_file *);
+	void (*lastclose)(struct drm_device *);
+	void (*unload)(struct drm_device *);
+	void (*release)(struct drm_device *);
+	void (*master_set)(struct drm_device *, struct drm_file *, bool);
+	void (*master_drop)(struct drm_device *, struct drm_file *);
+	void (*debugfs_init)(struct drm_minor *);
+	struct drm_gem_object * (*gem_create_object)(struct drm_device *, size_t);
+	int (*prime_handle_to_fd)(struct drm_device *, struct drm_file *, uint32_t, uint32_t, int *);
+	int (*prime_fd_to_handle)(struct drm_device *, struct drm_file *, int, uint32_t *);
+	struct drm_gem_object * (*gem_prime_import)(struct drm_device *, struct dma_buf *);
+	struct drm_gem_object * (*gem_prime_import_sg_table)(struct drm_device *, struct dma_buf_attachment *, struct sg_table *);
+	int (*dumb_create)(struct drm_file *, struct drm_device *, struct drm_mode_create_dumb *);
+	int (*dumb_map_offset)(struct drm_file *, struct drm_device *, uint32_t, uint64_t *);
+	void (*show_fdinfo)(struct drm_printer *, struct drm_file *);
+	int major;
+	int minor;
+	int patchlevel;
+	char *name;
+	char *desc;
+	char *date;
+	u32 driver_features;
+	const struct drm_ioctl_desc *ioctls;
+	int num_ioctls;
+	const struct file_operations *fops;
+};
+
+struct drm_mode_create_dumb {
+	__u32 height;
+	__u32 width;
+	__u32 bpp;
+	__u32 flags;
+	__u32 handle;
+	__u32 pitch;
+	__u64 size;
+};
+
+struct drm_printer {
+	void (*printfn)(struct drm_printer *, struct va_format *);
+	void (*puts)(struct drm_printer *, const char *);
+	void *arg;
+	const char *prefix;
+};
+
+enum drm_ioctl_flags {
+	DRM_AUTH = 1,
+	DRM_MASTER = 2,
+	DRM_ROOT_ONLY = 4,
+	DRM_UNLOCKED = 16,
+	DRM_RENDER_ALLOW = 32,
+};
+
+typedef int drm_ioctl_t(struct drm_device *, void *, struct drm_file *);
+
+struct drm_ioctl_desc {
+	unsigned int cmd;
+	enum drm_ioctl_flags flags;
+	drm_ioctl_t *func;
+	const char *name;
+};
+
+struct drm_master {
+	struct kref refcount;
+	struct drm_device *dev;
+	char *unique;
+	int unique_len;
+	struct idr magic_map;
+	void *driver_priv;
+	struct drm_master *lessor;
+	int lessee_id;
+	struct list_head lessee_list;
+	struct list_head lessees;
+	struct idr leases;
+	struct idr lessee_idr;
+};
+
+struct drm_modeset_acquire_ctx {
+	struct ww_acquire_ctx ww_ctx;
+	struct drm_modeset_lock *contended;
+	depot_stack_handle_t stack_depot;
+	struct list_head locked;
+	bool trylock_only;
+	bool interruptible;
+};
+
+enum drm_mode_status {
+	MODE_OK = 0,
+	MODE_HSYNC = 1,
+	MODE_VSYNC = 2,
+	MODE_H_ILLEGAL = 3,
+	MODE_V_ILLEGAL = 4,
+	MODE_BAD_WIDTH = 5,
+	MODE_NOMODE = 6,
+	MODE_NO_INTERLACE = 7,
+	MODE_NO_DBLESCAN = 8,
+	MODE_NO_VSCAN = 9,
+	MODE_MEM = 10,
+	MODE_VIRTUAL_X = 11,
+	MODE_VIRTUAL_Y = 12,
+	MODE_MEM_VIRT = 13,
+	MODE_NOCLOCK = 14,
+	MODE_CLOCK_HIGH = 15,
+	MODE_CLOCK_LOW = 16,
+	MODE_CLOCK_RANGE = 17,
+	MODE_BAD_HVALUE = 18,
+	MODE_BAD_VVALUE = 19,
+	MODE_BAD_VSCAN = 20,
+	MODE_HSYNC_NARROW = 21,
+	MODE_HSYNC_WIDE = 22,
+	MODE_HBLANK_NARROW = 23,
+	MODE_HBLANK_WIDE = 24,
+	MODE_VSYNC_NARROW = 25,
+	MODE_VSYNC_WIDE = 26,
+	MODE_VBLANK_NARROW = 27,
+	MODE_VBLANK_WIDE = 28,
+	MODE_PANEL = 29,
+	MODE_INTERLACE_WIDTH = 30,
+	MODE_ONE_WIDTH = 31,
+	MODE_ONE_HEIGHT = 32,
+	MODE_ONE_SIZE = 33,
+	MODE_NO_REDUCED = 34,
+	MODE_NO_STEREO = 35,
+	MODE_NO_420 = 36,
+	MODE_STALE = -3,
+	MODE_BAD = -2,
+	MODE_ERROR = -1,
+};
+
+struct drm_framebuffer;
+
+struct drm_mode_fb_cmd2;
+
+struct drm_format_info;
+
+struct drm_display_mode;
+
+struct drm_mode_config_funcs {
+	struct drm_framebuffer * (*fb_create)(struct drm_device *, struct drm_file *, const struct drm_mode_fb_cmd2 *);
+	const struct drm_format_info * (*get_format_info)(const struct drm_mode_fb_cmd2 *);
+	void (*output_poll_changed)(struct drm_device *);
+	enum drm_mode_status (*mode_valid)(struct drm_device *, const struct drm_display_mode *);
+	int (*atomic_check)(struct drm_device *, struct drm_atomic_state *);
+	int (*atomic_commit)(struct drm_device *, struct drm_atomic_state *, bool);
+	struct drm_atomic_state * (*atomic_state_alloc)(struct drm_device *);
+	void (*atomic_state_clear)(struct drm_atomic_state *);
+	void (*atomic_state_free)(struct drm_atomic_state *);
+};
+
+struct drm_mode_fb_cmd2 {
+	__u32 fb_id;
+	__u32 width;
+	__u32 height;
+	__u32 pixel_format;
+	__u32 flags;
+	__u32 handles[4];
+	__u32 pitches[4];
+	__u32 offsets[4];
+	__u64 modifier[4];
+};
+
+struct drm_format_info {
+	u32 format;
+	u8 depth;
+	u8 num_planes;
+	union {
+		u8 cpp[4];
+		u8 char_per_block[4];
+	};
+	u8 block_w[4];
+	u8 block_h[4];
+	u8 hsub;
+	u8 vsub;
+	bool has_alpha;
+	bool is_yuv;
+	bool is_color_indexed;
+};
+
+struct drm_display_mode {
+	int clock;
+	u16 hdisplay;
+	u16 hsync_start;
+	u16 hsync_end;
+	u16 htotal;
+	u16 hskew;
+	u16 vdisplay;
+	u16 vsync_start;
+	u16 vsync_end;
+	u16 vtotal;
+	u16 vscan;
+	u32 flags;
+	int crtc_clock;
+	u16 crtc_hdisplay;
+	u16 crtc_hblank_start;
+	u16 crtc_hblank_end;
+	u16 crtc_hsync_start;
+	u16 crtc_hsync_end;
+	u16 crtc_htotal;
+	u16 crtc_hskew;
+	u16 crtc_vdisplay;
+	u16 crtc_vblank_start;
+	u16 crtc_vblank_end;
+	u16 crtc_vsync_start;
+	u16 crtc_vsync_end;
+	u16 crtc_vtotal;
+	u16 width_mm;
+	u16 height_mm;
+	u8 type;
+	bool expose_to_userspace;
+	struct list_head head;
+	char name[32];
+	enum drm_mode_status status;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+};
+
+struct drm_mode_config_helper_funcs {
+	void (*atomic_commit_tail)(struct drm_atomic_state *);
+	int (*atomic_commit_setup)(struct drm_atomic_state *);
+};
+
+struct drm_debugfs_info {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+	u32 driver_features;
+	void *data;
+};
+
+enum drm_gem_object_status {
+	DRM_GEM_OBJECT_RESIDENT = 1,
+	DRM_GEM_OBJECT_PURGEABLE = 2,
+};
+
+enum drm_color_encoding {
+	DRM_COLOR_YCBCR_BT601 = 0,
+	DRM_COLOR_YCBCR_BT709 = 1,
+	DRM_COLOR_YCBCR_BT2020 = 2,
+	DRM_COLOR_ENCODING_MAX = 3,
+};
+
+enum drm_color_range {
+	DRM_COLOR_YCBCR_LIMITED_RANGE = 0,
+	DRM_COLOR_YCBCR_FULL_RANGE = 1,
+	DRM_COLOR_RANGE_MAX = 2,
+};
+
+enum drm_scaling_filter {
+	DRM_SCALING_FILTER_DEFAULT = 0,
+	DRM_SCALING_FILTER_NEAREST_NEIGHBOR = 1,
+};
+
+enum drm_plane_type {
+	DRM_PLANE_TYPE_OVERLAY = 0,
+	DRM_PLANE_TYPE_PRIMARY = 1,
+	DRM_PLANE_TYPE_CURSOR = 2,
+};
+
+enum drm_connector_registration_state {
+	DRM_CONNECTOR_INITIALIZING = 0,
+	DRM_CONNECTOR_REGISTERED = 1,
+	DRM_CONNECTOR_UNREGISTERED = 2,
+};
+
+enum drm_connector_status {
+	connector_status_connected = 1,
+	connector_status_disconnected = 2,
+	connector_status_unknown = 3,
+};
+
+enum subpixel_order {
+	SubPixelUnknown = 0,
+	SubPixelHorizontalRGB = 1,
+	SubPixelHorizontalBGR = 2,
+	SubPixelVerticalRGB = 3,
+	SubPixelVerticalBGR = 4,
+	SubPixelNone = 5,
+};
+
+enum drm_link_status {
+	DRM_LINK_STATUS_GOOD = 0,
+	DRM_LINK_STATUS_BAD = 1,
+};
+
+enum drm_mode_subconnector {
+	DRM_MODE_SUBCONNECTOR_Automatic = 0,
+	DRM_MODE_SUBCONNECTOR_Unknown = 0,
+	DRM_MODE_SUBCONNECTOR_VGA = 1,
+	DRM_MODE_SUBCONNECTOR_DVID = 3,
+	DRM_MODE_SUBCONNECTOR_DVIA = 4,
+	DRM_MODE_SUBCONNECTOR_Composite = 5,
+	DRM_MODE_SUBCONNECTOR_SVIDEO = 6,
+	DRM_MODE_SUBCONNECTOR_Component = 8,
+	DRM_MODE_SUBCONNECTOR_SCART = 9,
+	DRM_MODE_SUBCONNECTOR_DisplayPort = 10,
+	DRM_MODE_SUBCONNECTOR_HDMIA = 11,
+	DRM_MODE_SUBCONNECTOR_Native = 15,
+	DRM_MODE_SUBCONNECTOR_Wireless = 18,
+};
+
+enum drm_colorspace {
+	DRM_MODE_COLORIMETRY_DEFAULT = 0,
+	DRM_MODE_COLORIMETRY_NO_DATA = 0,
+	DRM_MODE_COLORIMETRY_SMPTE_170M_YCC = 1,
+	DRM_MODE_COLORIMETRY_BT709_YCC = 2,
+	DRM_MODE_COLORIMETRY_XVYCC_601 = 3,
+	DRM_MODE_COLORIMETRY_XVYCC_709 = 4,
+	DRM_MODE_COLORIMETRY_SYCC_601 = 5,
+	DRM_MODE_COLORIMETRY_OPYCC_601 = 6,
+	DRM_MODE_COLORIMETRY_OPRGB = 7,
+	DRM_MODE_COLORIMETRY_BT2020_CYCC = 8,
+	DRM_MODE_COLORIMETRY_BT2020_RGB = 9,
+	DRM_MODE_COLORIMETRY_BT2020_YCC = 10,
+	DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65 = 11,
+	DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER = 12,
+	DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED = 13,
+	DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT = 14,
+	DRM_MODE_COLORIMETRY_BT601_YCC = 15,
+	DRM_MODE_COLORIMETRY_COUNT = 16,
+};
+
+enum drm_privacy_screen_status {
+	PRIVACY_SCREEN_DISABLED = 0,
+	PRIVACY_SCREEN_ENABLED = 1,
+	PRIVACY_SCREEN_DISABLED_LOCKED = 2,
+	PRIVACY_SCREEN_ENABLED_LOCKED = 3,
+};
+
+enum drm_connector_force {
+	DRM_FORCE_UNSPECIFIED = 0,
+	DRM_FORCE_OFF = 1,
+	DRM_FORCE_ON = 2,
+	DRM_FORCE_ON_DIGITAL = 3,
+};
+
+enum drm_panel_orientation {
+	DRM_MODE_PANEL_ORIENTATION_UNKNOWN = -1,
+	DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
+	DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP = 1,
+	DRM_MODE_PANEL_ORIENTATION_LEFT_UP = 2,
+	DRM_MODE_PANEL_ORIENTATION_RIGHT_UP = 3,
+};
+
+enum drm_connector_tv_mode {
+	DRM_MODE_TV_MODE_NTSC = 0,
+	DRM_MODE_TV_MODE_NTSC_443 = 1,
+	DRM_MODE_TV_MODE_NTSC_J = 2,
+	DRM_MODE_TV_MODE_PAL = 3,
+	DRM_MODE_TV_MODE_PAL_M = 4,
+	DRM_MODE_TV_MODE_PAL_N = 5,
+	DRM_MODE_TV_MODE_SECAM = 6,
+	DRM_MODE_TV_MODE_MAX = 7,
+};
+
+enum drm_debug_category {
+	DRM_UT_CORE = 0,
+	DRM_UT_DRIVER = 1,
+	DRM_UT_KMS = 2,
+	DRM_UT_PRIME = 3,
+	DRM_UT_ATOMIC = 4,
+	DRM_UT_VBL = 5,
+	DRM_UT_STATE = 6,
+	DRM_UT_LEASE = 7,
+	DRM_UT_DP = 8,
+	DRM_UT_DRMRES = 9,
+};
+
+enum drm_bridge_attach_flags {
+	DRM_BRIDGE_ATTACH_NO_CONNECTOR = 1,
+};
+
+enum drm_bridge_ops {
+	DRM_BRIDGE_OP_DETECT = 1,
+	DRM_BRIDGE_OP_EDID = 2,
+	DRM_BRIDGE_OP_HPD = 4,
+	DRM_BRIDGE_OP_MODES = 8,
+};
+
+enum drm_driver_feature {
+	DRIVER_GEM = 1,
+	DRIVER_MODESET = 2,
+	DRIVER_RENDER = 8,
+	DRIVER_ATOMIC = 16,
+	DRIVER_SYNCOBJ = 32,
+	DRIVER_SYNCOBJ_TIMELINE = 64,
+	DRIVER_COMPUTE_ACCEL = 128,
+	DRIVER_GEM_GPUVA = 256,
+	DRIVER_CURSOR_HOTSPOT = 512,
+	DRIVER_USE_AGP = 33554432,
+	DRIVER_LEGACY = 67108864,
+	DRIVER_PCI_DMA = 134217728,
+	DRIVER_SG = 268435456,
+	DRIVER_HAVE_DMA = 536870912,
+	DRIVER_HAVE_IRQ = 1073741824,
+};
+
+struct drm_crtc;
+
+struct drm_pending_vblank_event;
+
+struct drm_crtc_commit {
+	struct drm_crtc *crtc;
+	struct kref ref;
+	struct completion flip_done;
+	struct completion hw_done;
+	struct completion cleanup_done;
+	struct list_head commit_entry;
+	struct drm_pending_vblank_event *event;
+	bool abort_completion;
+};
+
+struct drm_object_properties;
+
+struct drm_mode_object {
+	uint32_t id;
+	uint32_t type;
+	struct drm_object_properties *properties;
+	struct kref refcount;
+	void (*free_cb)(struct kref *);
+};
+
+struct drm_object_properties {
+	int count;
+	struct drm_property *properties[96];
+	uint64_t values[96];
+};
+
+struct drm_crtc_crc_entry;
+
+struct drm_crtc_crc {
+	spinlock_t lock;
+	const char *source;
+	bool opened;
+	bool overflow;
+	struct drm_crtc_crc_entry *entries;
+	int head;
+	int tail;
+	size_t values_cnt;
+	wait_queue_head_t wq;
+};
+
+struct drm_plane;
+
+struct drm_crtc_funcs;
+
+struct drm_crtc_helper_funcs;
+
+struct drm_crtc_state;
+
+struct drm_self_refresh_data;
+
+struct drm_crtc {
+	struct drm_device *dev;
+	struct device_node *port;
+	struct list_head head;
+	char *name;
+	struct drm_modeset_lock mutex;
+	struct drm_mode_object base;
+	struct drm_plane *primary;
+	struct drm_plane *cursor;
+	unsigned int index;
+	int cursor_x;
+	int cursor_y;
+	bool enabled;
+	struct drm_display_mode mode;
+	struct drm_display_mode hwmode;
+	int x;
+	int y;
+	const struct drm_crtc_funcs *funcs;
+	uint32_t gamma_size;
+	uint16_t *gamma_store;
+	const struct drm_crtc_helper_funcs *helper_private;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_filter_property;
+	struct drm_crtc_state *state;
+	struct list_head commit_list;
+	spinlock_t commit_lock;
+	struct dentry *debugfs_entry;
+	struct drm_crtc_crc crc;
+	unsigned int fence_context;
+	spinlock_t fence_lock;
+	unsigned long fence_seqno;
+	char timeline_name[32];
+	struct drm_self_refresh_data *self_refresh_data;
+};
+
+typedef unsigned int drm_magic_t;
+
+struct drm_prime_file_private {
+	struct mutex lock;
+	struct rb_root dmabufs;
+	struct rb_root handles;
+};
+
+struct drm_file {
+	bool authenticated;
+	bool stereo_allowed;
+	bool universal_planes;
+	bool atomic;
+	bool aspect_ratio_allowed;
+	bool writeback_connectors;
+	bool was_master;
+	bool is_master;
+	bool supports_virtualized_cursor_plane;
+	struct drm_master *master;
+	spinlock_t master_lookup_lock;
+	struct pid __attribute__((btf_type_tag("rcu"))) *pid;
+	u64 client_id;
+	drm_magic_t magic;
+	struct list_head lhead;
+	struct drm_minor *minor;
+	struct idr object_idr;
+	spinlock_t table_lock;
+	struct idr syncobj_idr;
+	spinlock_t syncobj_table_lock;
+	struct file *filp;
+	void *driver_priv;
+	struct list_head fbs;
+	struct mutex fbs_lock;
+	struct list_head blobs;
+	wait_queue_head_t event_wait;
+	struct list_head pending_event_list;
+	struct list_head event_list;
+	int event_space;
+	struct mutex event_read_lock;
+	struct drm_prime_file_private prime;
+};
+
+struct drm_minor {
+	int index;
+	int type;
+	struct device *kdev;
+	struct drm_device *dev;
+	struct dentry *debugfs_root;
+	struct list_head debugfs_list;
+	struct mutex debugfs_lock;
+};
+
+struct drm_mm;
+
+struct drm_mm_node {
+	unsigned long color;
+	u64 start;
+	u64 size;
+	struct drm_mm *mm;
+	struct list_head node_list;
+	struct list_head hole_stack;
+	struct rb_node rb;
+	struct rb_node rb_hole_size;
+	struct rb_node rb_hole_addr;
+	u64 __subtree_last;
+	u64 hole_size;
+	u64 subtree_max_hole;
+	unsigned long flags;
+};
+
+struct drm_vma_offset_node {
+	rwlock_t vm_lock;
+	struct drm_mm_node vm_node;
+	struct rb_root vm_files;
+	void *driver_private;
+};
+
+struct dma_resv_list;
+
+struct dma_resv {
+	struct ww_mutex lock;
+	struct dma_resv_list __attribute__((btf_type_tag("rcu"))) *fences;
+};
+
+struct drm_gem_object_funcs;
+
+struct drm_gem_lru;
+
+struct drm_gem_object {
+	struct kref refcount;
+	unsigned int handle_count;
+	struct drm_device *dev;
+	struct file *filp;
+	struct drm_vma_offset_node vma_node;
+	size_t size;
+	int name;
+	struct dma_buf *dma_buf;
+	struct dma_buf_attachment *import_attach;
+	struct dma_resv *resv;
+	struct dma_resv _resv;
+	struct {
+		struct list_head list;
+	} gpuva;
+	const struct drm_gem_object_funcs *funcs;
+	struct list_head lru_node;
+	struct drm_gem_lru *lru;
+};
+
+struct drm_mm {
+	void (*color_adjust)(const struct drm_mm_node *, unsigned long, u64 *, u64 *);
+	struct list_head hole_stack;
+	struct drm_mm_node head_node;
+	struct rb_root_cached interval_tree;
+	struct rb_root_cached holes_size;
+	struct rb_root holes_addr;
+	unsigned long scan_active;
+};
+
+struct dma_fence;
+
+struct dma_resv_list {
+	struct callback_head rcu;
+	u32 num_fences;
+	u32 max_fences;
+	struct dma_fence __attribute__((btf_type_tag("rcu"))) *table[0];
+};
+
+struct drm_gem_object_funcs {
+	void (*free)(struct drm_gem_object *);
+	int (*open)(struct drm_gem_object *, struct drm_file *);
+	void (*close)(struct drm_gem_object *, struct drm_file *);
+	void (*print_info)(struct drm_printer *, unsigned int, const struct drm_gem_object *);
+	struct dma_buf * (*export)(struct drm_gem_object *, int);
+	int (*pin)(struct drm_gem_object *);
+	void (*unpin)(struct drm_gem_object *);
+	struct sg_table * (*get_sg_table)(struct drm_gem_object *);
+	int (*vmap)(struct drm_gem_object *, struct iosys_map *);
+	void (*vunmap)(struct drm_gem_object *, struct iosys_map *);
+	int (*mmap)(struct drm_gem_object *, struct vm_area_struct *);
+	int (*evict)(struct drm_gem_object *);
+	enum drm_gem_object_status (*status)(struct drm_gem_object *);
+	const struct vm_operations_struct *vm_ops;
+};
+
+struct drm_gem_lru {
+	struct mutex *lock;
+	long count;
+	struct list_head list;
+};
+
+struct drm_vblank_crtc {
+	struct drm_device *dev;
+	wait_queue_head_t queue;
+	struct timer_list disable_timer;
+	seqlock_t seqlock;
+	atomic64_t count;
+	ktime_t time;
+	atomic_t refcount;
+	u32 last;
+	u32 max_vblank_count;
+	unsigned int inmodeset;
+	unsigned int pipe;
+	int framedur_ns;
+	int linedur_ns;
+	struct drm_display_mode hwmode;
+	bool enabled;
+	struct kthread_worker *worker;
+	struct list_head pending_work;
+	wait_queue_head_t work_wait_queue;
+};
+
+struct drm_framebuffer_funcs;
+
+struct drm_framebuffer {
+	struct drm_device *dev;
+	struct list_head head;
+	struct drm_mode_object base;
+	char comm[16];
+	const struct drm_format_info *format;
+	const struct drm_framebuffer_funcs *funcs;
+	unsigned int pitches[4];
+	unsigned int offsets[4];
+	uint64_t modifier;
+	unsigned int width;
+	unsigned int height;
+	int flags;
+	int hot_x;
+	int hot_y;
+	struct list_head filp_head;
+	struct drm_gem_object *obj[4];
+};
+
+struct drm_property {
+	struct list_head head;
+	struct drm_mode_object base;
+	uint32_t flags;
+	char name[32];
+	uint32_t num_values;
+	uint64_t *values;
+	struct drm_device *dev;
+	struct list_head enum_list;
+};
+
+struct drm_clip_rect;
+
+struct drm_framebuffer_funcs {
+	void (*destroy)(struct drm_framebuffer *);
+	int (*create_handle)(struct drm_framebuffer *, struct drm_file *, unsigned int *);
+	int (*dirty)(struct drm_framebuffer *, struct drm_file *, unsigned int, unsigned int, struct drm_clip_rect *, unsigned int);
+};
+
+struct drm_clip_rect {
+	unsigned short x1;
+	unsigned short y1;
+	unsigned short x2;
+	unsigned short y2;
+};
+
+struct __drm_planes_state;
+
+struct __drm_crtcs_state;
+
+struct __drm_connnectors_state;
+
+struct __drm_private_objs_state;
+
+struct drm_atomic_state {
+	struct kref ref;
+	struct drm_device *dev;
+	bool allow_modeset: 1;
+	bool legacy_cursor_update: 1;
+	bool async_update: 1;
+	bool duplicated: 1;
+	struct __drm_planes_state *planes;
+	struct __drm_crtcs_state *crtcs;
+	int num_connector;
+	struct __drm_connnectors_state *connectors;
+	int num_private_objs;
+	struct __drm_private_objs_state *private_objs;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct drm_crtc_commit *fake_commit;
+	struct work_struct commit_work;
+};
+
+struct drm_plane_state;
+
+struct __drm_planes_state {
+	struct drm_plane *ptr;
+	struct drm_plane_state *state;
+	struct drm_plane_state *old_state;
+	struct drm_plane_state *new_state;
+};
+
+struct drm_plane_funcs;
+
+struct drm_plane_helper_funcs;
+
+struct drm_plane {
+	struct drm_device *dev;
+	struct list_head head;
+	char *name;
+	struct drm_modeset_lock mutex;
+	struct drm_mode_object base;
+	uint32_t possible_crtcs;
+	uint32_t *format_types;
+	unsigned int format_count;
+	bool format_default;
+	uint64_t *modifiers;
+	unsigned int modifier_count;
+	struct drm_crtc *crtc;
+	struct drm_framebuffer *fb;
+	struct drm_framebuffer *old_fb;
+	const struct drm_plane_funcs *funcs;
+	struct drm_object_properties properties;
+	enum drm_plane_type type;
+	unsigned int index;
+	const struct drm_plane_helper_funcs *helper_private;
+	struct drm_plane_state *state;
+	struct drm_property *alpha_property;
+	struct drm_property *zpos_property;
+	struct drm_property *rotation_property;
+	struct drm_property *blend_mode_property;
+	struct drm_property *color_encoding_property;
+	struct drm_property *color_range_property;
+	struct drm_property *scaling_filter_property;
+};
+
+struct drm_plane_funcs {
+	int (*update_plane)(struct drm_plane *, struct drm_crtc *, struct drm_framebuffer *, int, int, unsigned int, unsigned int, uint32_t, uint32_t, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*disable_plane)(struct drm_plane *, struct drm_modeset_acquire_ctx *);
+	void (*destroy)(struct drm_plane *);
+	void (*reset)(struct drm_plane *);
+	int (*set_property)(struct drm_plane *, struct drm_property *, uint64_t);
+	struct drm_plane_state * (*atomic_duplicate_state)(struct drm_plane *);
+	void (*atomic_destroy_state)(struct drm_plane *, struct drm_plane_state *);
+	int (*atomic_set_property)(struct drm_plane *, struct drm_plane_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_plane *, const struct drm_plane_state *, struct drm_property *, uint64_t *);
+	int (*late_register)(struct drm_plane *);
+	void (*early_unregister)(struct drm_plane *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_plane_state *);
+	bool (*format_mod_supported)(struct drm_plane *, uint32_t, uint64_t);
+};
+
+struct drm_rect {
+	int x1;
+	int y1;
+	int x2;
+	int y2;
+};
+
+struct drm_property_blob;
+
+struct drm_plane_state {
+	struct drm_plane *plane;
+	struct drm_crtc *crtc;
+	struct drm_framebuffer *fb;
+	struct dma_fence *fence;
+	int32_t crtc_x;
+	int32_t crtc_y;
+	uint32_t crtc_w;
+	uint32_t crtc_h;
+	uint32_t src_x;
+	uint32_t src_y;
+	uint32_t src_h;
+	uint32_t src_w;
+	u16 alpha;
+	uint16_t pixel_blend_mode;
+	unsigned int rotation;
+	unsigned int zpos;
+	unsigned int normalized_zpos;
+	enum drm_color_encoding color_encoding;
+	enum drm_color_range color_range;
+	struct drm_property_blob *fb_damage_clips;
+	bool ignore_damage_clips;
+	struct drm_rect src;
+	struct drm_rect dst;
+	bool visible;
+	enum drm_scaling_filter scaling_filter;
+	struct drm_crtc_commit *commit;
+	struct drm_atomic_state *state;
+};
+
+struct dma_fence_ops;
+
+struct dma_fence {
+	spinlock_t *lock;
+	const struct dma_fence_ops *ops;
+	union {
+		struct list_head cb_list;
+		ktime_t timestamp;
+		struct callback_head rcu;
+	};
+	u64 context;
+	u64 seqno;
+	unsigned long flags;
+	struct kref refcount;
+	int error;
+};
+
+struct dma_fence_ops {
+	bool use_64bit_seqno;
+	const char * (*get_driver_name)(struct dma_fence *);
+	const char * (*get_timeline_name)(struct dma_fence *);
+	bool (*enable_signaling)(struct dma_fence *);
+	bool (*signaled)(struct dma_fence *);
+	long (*wait)(struct dma_fence *, bool, long);
+	void (*release)(struct dma_fence *);
+	void (*fence_value_str)(struct dma_fence *, char *, int);
+	void (*timeline_value_str)(struct dma_fence *, char *, int);
+	void (*set_deadline)(struct dma_fence *, ktime_t);
+};
+
+struct drm_property_blob {
+	struct drm_mode_object base;
+	struct drm_device *dev;
+	struct list_head head_global;
+	struct list_head head_file;
+	size_t length;
+	void *data;
+};
+
+struct drm_plane_helper_funcs {
+	int (*prepare_fb)(struct drm_plane *, struct drm_plane_state *);
+	void (*cleanup_fb)(struct drm_plane *, struct drm_plane_state *);
+	int (*begin_fb_access)(struct drm_plane *, struct drm_plane_state *);
+	void (*end_fb_access)(struct drm_plane *, struct drm_plane_state *);
+	int (*atomic_check)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_update)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_disable)(struct drm_plane *, struct drm_atomic_state *);
+	int (*atomic_async_check)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_async_update)(struct drm_plane *, struct drm_atomic_state *);
+};
+
+struct __drm_crtcs_state {
+	struct drm_crtc *ptr;
+	struct drm_crtc_state *state;
+	struct drm_crtc_state *old_state;
+	struct drm_crtc_state *new_state;
+	struct drm_crtc_commit *commit;
+	s32 __attribute__((btf_type_tag("user"))) *out_fence_ptr;
+	u64 last_vblank_count;
+};
+
+struct drm_crtc_state {
+	struct drm_crtc *crtc;
+	bool enable;
+	bool active;
+	bool planes_changed: 1;
+	bool mode_changed: 1;
+	bool active_changed: 1;
+	bool connectors_changed: 1;
+	bool zpos_changed: 1;
+	bool color_mgmt_changed: 1;
+	bool no_vblank: 1;
+	u32 plane_mask;
+	u32 connector_mask;
+	u32 encoder_mask;
+	struct drm_display_mode adjusted_mode;
+	struct drm_display_mode mode;
+	struct drm_property_blob *mode_blob;
+	struct drm_property_blob *degamma_lut;
+	struct drm_property_blob *ctm;
+	struct drm_property_blob *gamma_lut;
+	u32 target_vblank;
+	bool async_flip;
+	bool vrr_enabled;
+	bool self_refresh_active;
+	enum drm_scaling_filter scaling_filter;
+	struct drm_pending_vblank_event *event;
+	struct drm_crtc_commit *commit;
+	struct drm_atomic_state *state;
+};
+
+struct drm_event {
+	__u32 type;
+	__u32 length;
+};
+
+struct drm_event_vblank {
+	struct drm_event base;
+	__u64 user_data;
+	__u32 tv_sec;
+	__u32 tv_usec;
+	__u32 sequence;
+	__u32 crtc_id;
+};
+
+struct drm_event_crtc_sequence {
+	struct drm_event base;
+	__u64 user_data;
+	__s64 time_ns;
+	__u64 sequence;
+};
+
+struct drm_pending_event {
+	struct completion *completion;
+	void (*completion_release)(struct completion *);
+	struct drm_event *event;
+	struct dma_fence *fence;
+	struct drm_file *file_priv;
+	struct list_head link;
+	struct list_head pending_link;
+};
+
+struct drm_pending_vblank_event {
+	struct drm_pending_event base;
+	unsigned int pipe;
+	u64 sequence;
+	union {
+		struct drm_event base;
+		struct drm_event_vblank vbl;
+		struct drm_event_crtc_sequence seq;
+	} event;
+};
+
+struct drm_connector;
+
+struct drm_connector_state;
+
+struct __drm_connnectors_state {
+	struct drm_connector *ptr;
+	struct drm_connector_state *state;
+	struct drm_connector_state *old_state;
+	struct drm_connector_state *new_state;
+	s32 __attribute__((btf_type_tag("user"))) *out_fence_ptr;
+};
+
+struct drm_scrambling {
+	bool supported;
+	bool low_rates;
+};
+
+struct drm_scdc {
+	bool supported;
+	bool read_request;
+	struct drm_scrambling scrambling;
+};
+
+struct drm_hdmi_dsc_cap {
+	bool v_1p2;
+	bool native_420;
+	bool all_bpp;
+	u8 bpc_supported;
+	u8 max_slices;
+	int clk_per_slice;
+	u8 max_lanes;
+	u8 max_frl_rate_per_lane;
+	u8 total_chunk_kbytes;
+};
+
+struct drm_hdmi_info {
+	struct drm_scdc scdc;
+	unsigned long y420_vdb_modes[4];
+	unsigned long y420_cmdb_modes[4];
+	u8 y420_dc_modes;
+	u8 max_frl_rate_per_lane;
+	u8 max_lanes;
+	struct drm_hdmi_dsc_cap dsc_cap;
+};
+
+struct drm_monitor_range_info {
+	u16 min_vfreq;
+	u16 max_vfreq;
+};
+
+struct drm_luminance_range_info {
+	u32 min_luminance;
+	u32 max_luminance;
+};
+
+struct drm_display_info {
+	unsigned int width_mm;
+	unsigned int height_mm;
+	unsigned int bpc;
+	enum subpixel_order subpixel_order;
+	int panel_orientation;
+	u32 color_formats;
+	const u32 *bus_formats;
+	unsigned int num_bus_formats;
+	u32 bus_flags;
+	int max_tmds_clock;
+	bool dvi_dual;
+	bool is_hdmi;
+	bool has_audio;
+	bool has_hdmi_infoframe;
+	bool rgb_quant_range_selectable;
+	u8 edid_hdmi_rgb444_dc_modes;
+	u8 edid_hdmi_ycbcr444_dc_modes;
+	u8 cea_rev;
+	struct drm_hdmi_info hdmi;
+	bool non_desktop;
+	struct drm_monitor_range_info monitor_range;
+	struct drm_luminance_range_info luminance_range;
+	u8 mso_stream_count;
+	u8 mso_pixel_overlap;
+	u32 max_dsc_bpp;
+	u8 *vics;
+	int vics_len;
+	u32 quirks;
+};
+
+struct drm_privacy_screen;
+
+struct drm_connector_tv_margins {
+	unsigned int bottom;
+	unsigned int left;
+	unsigned int right;
+	unsigned int top;
+};
+
+struct drm_cmdline_mode {
+	char name[32];
+	bool specified;
+	bool refresh_specified;
+	bool bpp_specified;
+	unsigned int pixel_clock;
+	int xres;
+	int yres;
+	int bpp;
+	int refresh;
+	bool rb;
+	bool interlace;
+	bool cvt;
+	bool margins;
+	enum drm_connector_force force;
+	unsigned int rotation_reflection;
+	enum drm_panel_orientation panel_orientation;
+	struct drm_connector_tv_margins tv_margins;
+	enum drm_connector_tv_mode tv_mode;
+	bool tv_mode_specified;
+};
+
+struct hdr_static_metadata {
+	__u8 eotf;
+	__u8 metadata_type;
+	__u16 max_cll;
+	__u16 max_fall;
+	__u16 min_cll;
+};
+
+struct hdr_sink_metadata {
+	__u32 metadata_type;
+	union {
+		struct hdr_static_metadata hdmi_type1;
+	};
+};
+
+struct drm_connector_funcs;
+
+struct drm_connector_helper_funcs;
+
+struct drm_edid;
+
+struct drm_encoder;
+
+struct drm_tile_group;
+
+struct drm_connector {
+	struct drm_device *dev;
+	struct device *kdev;
+	struct device_attribute *attr;
+	struct fwnode_handle *fwnode;
+	struct list_head head;
+	struct list_head global_connector_list_entry;
+	struct drm_mode_object base;
+	char *name;
+	struct mutex mutex;
+	unsigned int index;
+	int connector_type;
+	int connector_type_id;
+	bool interlace_allowed;
+	bool doublescan_allowed;
+	bool stereo_allowed;
+	bool ycbcr_420_allowed;
+	enum drm_connector_registration_state registration_state;
+	struct list_head modes;
+	enum drm_connector_status status;
+	struct list_head probed_modes;
+	struct drm_display_info display_info;
+	const struct drm_connector_funcs *funcs;
+	struct drm_property_blob *edid_blob_ptr;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *vrr_capable_property;
+	struct drm_property *colorspace_property;
+	struct drm_property_blob *path_blob_ptr;
+	struct drm_property *max_bpc_property;
+	struct drm_privacy_screen *privacy_screen;
+	struct notifier_block privacy_screen_notifier;
+	struct drm_property *privacy_screen_sw_state_property;
+	struct drm_property *privacy_screen_hw_state_property;
+	uint8_t polled;
+	int dpms;
+	const struct drm_connector_helper_funcs *helper_private;
+	struct drm_cmdline_mode cmdline_mode;
+	enum drm_connector_force force;
+	const struct drm_edid *edid_override;
+	struct mutex edid_override_mutex;
+	u64 epoch_counter;
+	u32 possible_encoders;
+	struct drm_encoder *encoder;
+	uint8_t eld[128];
+	bool latency_present[2];
+	int video_latency[2];
+	int audio_latency[2];
+	struct i2c_adapter *ddc;
+	int null_edid_counter;
+	unsigned int bad_edid_counter;
+	bool edid_corrupt;
+	u8 real_edid_checksum;
+	struct dentry *debugfs_entry;
+	struct drm_connector_state *state;
+	struct drm_property_blob *tile_blob_ptr;
+	bool has_tile;
+	struct drm_tile_group *tile_group;
+	bool tile_is_single_monitor;
+	uint8_t num_h_tile;
+	uint8_t num_v_tile;
+	uint8_t tile_h_loc;
+	uint8_t tile_v_loc;
+	uint16_t tile_h_size;
+	uint16_t tile_v_size;
+	struct llist_node free_node;
+	struct hdr_sink_metadata hdr_sink_metadata;
+};
+
+struct drm_connector_funcs {
+	int (*dpms)(struct drm_connector *, int);
+	void (*reset)(struct drm_connector *);
+	enum drm_connector_status (*detect)(struct drm_connector *, bool);
+	void (*force)(struct drm_connector *);
+	int (*fill_modes)(struct drm_connector *, uint32_t, uint32_t);
+	int (*set_property)(struct drm_connector *, struct drm_property *, uint64_t);
+	int (*late_register)(struct drm_connector *);
+	void (*early_unregister)(struct drm_connector *);
+	void (*destroy)(struct drm_connector *);
+	struct drm_connector_state * (*atomic_duplicate_state)(struct drm_connector *);
+	void (*atomic_destroy_state)(struct drm_connector *, struct drm_connector_state *);
+	int (*atomic_set_property)(struct drm_connector *, struct drm_connector_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_connector *, const struct drm_connector_state *, struct drm_property *, uint64_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_connector_state *);
+	void (*oob_hotplug_event)(struct drm_connector *);
+	void (*debugfs_init)(struct drm_connector *, struct dentry *);
+};
+
+struct drm_tv_connector_state {
+	enum drm_mode_subconnector select_subconnector;
+	enum drm_mode_subconnector subconnector;
+	struct drm_connector_tv_margins margins;
+	unsigned int legacy_mode;
+	unsigned int mode;
+	unsigned int brightness;
+	unsigned int contrast;
+	unsigned int flicker_reduction;
+	unsigned int overscan;
+	unsigned int saturation;
+	unsigned int hue;
+};
+
+struct drm_writeback_job;
+
+struct drm_connector_state {
+	struct drm_connector *connector;
+	struct drm_crtc *crtc;
+	struct drm_encoder *best_encoder;
+	enum drm_link_status link_status;
+	struct drm_atomic_state *state;
+	struct drm_crtc_commit *commit;
+	struct drm_tv_connector_state tv;
+	bool self_refresh_aware;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+	unsigned int content_type;
+	unsigned int hdcp_content_type;
+	unsigned int scaling_mode;
+	unsigned int content_protection;
+	enum drm_colorspace colorspace;
+	struct drm_writeback_job *writeback_job;
+	u8 max_requested_bpc;
+	u8 max_bpc;
+	enum drm_privacy_screen_status privacy_screen_sw_state;
+	struct drm_property_blob *hdr_output_metadata;
+};
+
+struct drm_encoder_funcs;
+
+struct drm_encoder_helper_funcs;
+
+struct drm_encoder {
+	struct drm_device *dev;
+	struct list_head head;
+	struct drm_mode_object base;
+	char *name;
+	int encoder_type;
+	unsigned int index;
+	uint32_t possible_crtcs;
+	uint32_t possible_clones;
+	struct drm_crtc *crtc;
+	struct list_head bridge_chain;
+	const struct drm_encoder_funcs *funcs;
+	const struct drm_encoder_helper_funcs *helper_private;
+};
+
+struct drm_encoder_funcs {
+	void (*reset)(struct drm_encoder *);
+	void (*destroy)(struct drm_encoder *);
+	int (*late_register)(struct drm_encoder *);
+	void (*early_unregister)(struct drm_encoder *);
+};
+
+struct drm_encoder_helper_funcs {
+	void (*dpms)(struct drm_encoder *, int);
+	enum drm_mode_status (*mode_valid)(struct drm_encoder *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_encoder *, const struct drm_display_mode *, struct drm_display_mode *);
+	void (*prepare)(struct drm_encoder *);
+	void (*commit)(struct drm_encoder *);
+	void (*mode_set)(struct drm_encoder *, struct drm_display_mode *, struct drm_display_mode *);
+	void (*atomic_mode_set)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
+	enum drm_connector_status (*detect)(struct drm_encoder *, struct drm_connector *);
+	void (*atomic_disable)(struct drm_encoder *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_encoder *, struct drm_atomic_state *);
+	void (*disable)(struct drm_encoder *);
+	void (*enable)(struct drm_encoder *);
+	int (*atomic_check)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
+};
+
+struct drm_writeback_connector;
+
+struct drm_writeback_job {
+	struct drm_writeback_connector *connector;
+	bool prepared;
+	struct work_struct cleanup_work;
+	struct list_head list_entry;
+	struct drm_framebuffer *fb;
+	struct dma_fence *out_fence;
+	void *priv;
+};
+
+struct drm_writeback_connector {
+	struct drm_connector base;
+	struct drm_encoder encoder;
+	struct drm_property_blob *pixel_formats_blob_ptr;
+	spinlock_t job_lock;
+	struct list_head job_queue;
+	unsigned int fence_context;
+	spinlock_t fence_lock;
+	unsigned long fence_seqno;
+	char timeline_name[32];
+};
+
+struct drm_connector_helper_funcs {
+	int (*get_modes)(struct drm_connector *);
+	int (*detect_ctx)(struct drm_connector *, struct drm_modeset_acquire_ctx *, bool);
+	enum drm_mode_status (*mode_valid)(struct drm_connector *, struct drm_display_mode *);
+	int (*mode_valid_ctx)(struct drm_connector *, struct drm_display_mode *, struct drm_modeset_acquire_ctx *, enum drm_mode_status *);
+	struct drm_encoder * (*best_encoder)(struct drm_connector *);
+	struct drm_encoder * (*atomic_best_encoder)(struct drm_connector *, struct drm_atomic_state *);
+	int (*atomic_check)(struct drm_connector *, struct drm_atomic_state *);
+	void (*atomic_commit)(struct drm_connector *, struct drm_atomic_state *);
+	int (*prepare_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
+	void (*cleanup_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
+	void (*enable_hpd)(struct drm_connector *);
+	void (*disable_hpd)(struct drm_connector *);
+};
+
+struct edid;
+
+struct drm_edid {
+	size_t size;
+	const struct edid *edid;
+};
+
+struct drm_tile_group {
+	struct kref refcount;
+	struct drm_device *dev;
+	int id;
+	u8 group_data[8];
+};
+
+struct drm_private_obj;
+
+struct drm_private_state;
+
+struct __drm_private_objs_state {
+	struct drm_private_obj *ptr;
+	struct drm_private_state *state;
+	struct drm_private_state *old_state;
+	struct drm_private_state *new_state;
+};
+
+struct drm_private_state_funcs;
+
+struct drm_private_obj {
+	struct list_head head;
+	struct drm_modeset_lock lock;
+	struct drm_private_state *state;
+	const struct drm_private_state_funcs *funcs;
+};
+
+struct drm_private_state {
+	struct drm_atomic_state *state;
+	struct drm_private_obj *obj;
+};
+
+struct drm_private_state_funcs {
+	struct drm_private_state * (*atomic_duplicate_state)(struct drm_private_obj *);
+	void (*atomic_destroy_state)(struct drm_private_obj *, struct drm_private_state *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_private_state *);
+};
+
+struct drm_vma_offset_manager {
+	rwlock_t vm_lock;
+	struct drm_mm vm_addr_space_mm;
+};
+
+struct drm_mode_set;
+
+struct drm_crtc_funcs {
+	void (*reset)(struct drm_crtc *);
+	int (*cursor_set)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t);
+	int (*cursor_set2)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t, int32_t, int32_t);
+	int (*cursor_move)(struct drm_crtc *, int, int);
+	int (*gamma_set)(struct drm_crtc *, u16 *, u16 *, u16 *, uint32_t, struct drm_modeset_acquire_ctx *);
+	void (*destroy)(struct drm_crtc *);
+	int (*set_config)(struct drm_mode_set *, struct drm_modeset_acquire_ctx *);
+	int (*page_flip)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*page_flip_target)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*set_property)(struct drm_crtc *, struct drm_property *, uint64_t);
+	struct drm_crtc_state * (*atomic_duplicate_state)(struct drm_crtc *);
+	void (*atomic_destroy_state)(struct drm_crtc *, struct drm_crtc_state *);
+	int (*atomic_set_property)(struct drm_crtc *, struct drm_crtc_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_crtc *, const struct drm_crtc_state *, struct drm_property *, uint64_t *);
+	int (*late_register)(struct drm_crtc *);
+	void (*early_unregister)(struct drm_crtc *);
+	int (*set_crc_source)(struct drm_crtc *, const char *);
+	int (*verify_crc_source)(struct drm_crtc *, const char *, size_t *);
+	const char * const * (*get_crc_sources)(struct drm_crtc *, size_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_crtc_state *);
+	u32 (*get_vblank_counter)(struct drm_crtc *);
+	int (*enable_vblank)(struct drm_crtc *);
+	void (*disable_vblank)(struct drm_crtc *);
+	bool (*get_vblank_timestamp)(struct drm_crtc *, int *, ktime_t *, bool);
+};
+
+struct drm_mode_set {
+	struct drm_framebuffer *fb;
+	struct drm_crtc *crtc;
+	struct drm_display_mode *mode;
+	uint32_t x;
+	uint32_t y;
+	struct drm_connector **connectors;
+	size_t num_connectors;
+};
+
+enum mode_set_atomic {
+	LEAVE_ATOMIC_MODE_SET = 0,
+	ENTER_ATOMIC_MODE_SET = 1,
+};
+
+struct drm_crtc_helper_funcs {
+	void (*dpms)(struct drm_crtc *, int);
+	void (*prepare)(struct drm_crtc *);
+	void (*commit)(struct drm_crtc *);
+	enum drm_mode_status (*mode_valid)(struct drm_crtc *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_crtc *, const struct drm_display_mode *, struct drm_display_mode *);
+	int (*mode_set)(struct drm_crtc *, struct drm_display_mode *, struct drm_display_mode *, int, int, struct drm_framebuffer *);
+	void (*mode_set_nofb)(struct drm_crtc *);
+	int (*mode_set_base)(struct drm_crtc *, int, int, struct drm_framebuffer *);
+	int (*mode_set_base_atomic)(struct drm_crtc *, struct drm_framebuffer *, int, int, enum mode_set_atomic);
+	void (*disable)(struct drm_crtc *);
+	int (*atomic_check)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_begin)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_flush)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_disable)(struct drm_crtc *, struct drm_atomic_state *);
+	bool (*get_scanout_position)(struct drm_crtc *, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
+};
+
+struct drm_crtc_crc_entry {
+	bool has_frame_counter;
+	uint32_t frame;
+	uint32_t crcs[10];
+};
+
+struct drm_bridge_timings;
+
+struct drm_bridge_funcs;
+
+struct drm_bridge {
+	struct drm_private_obj base;
+	struct drm_device *dev;
+	struct drm_encoder *encoder;
+	struct list_head chain_node;
+	struct device_node *of_node;
+	struct list_head list;
+	const struct drm_bridge_timings *timings;
+	const struct drm_bridge_funcs *funcs;
+	void *driver_private;
+	enum drm_bridge_ops ops;
+	int type;
+	bool interlace_allowed;
+	bool pre_enable_prev_first;
+	struct i2c_adapter *ddc;
+	struct mutex hpd_mutex;
+	void (*hpd_cb)(void *, enum drm_connector_status);
+	void *hpd_data;
+};
+
+struct drm_bridge_timings {
+	u32 input_bus_flags;
+	u32 setup_time_ps;
+	u32 hold_time_ps;
+	bool dual_link;
+};
+
+struct drm_bridge_state;
+
+struct drm_bridge_funcs {
+	int (*attach)(struct drm_bridge *, enum drm_bridge_attach_flags);
+	void (*detach)(struct drm_bridge *);
+	enum drm_mode_status (*mode_valid)(struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_bridge *, const struct drm_display_mode *, struct drm_display_mode *);
+	void (*disable)(struct drm_bridge *);
+	void (*post_disable)(struct drm_bridge *);
+	void (*mode_set)(struct drm_bridge *, const struct drm_display_mode *, const struct drm_display_mode *);
+	void (*pre_enable)(struct drm_bridge *);
+	void (*enable)(struct drm_bridge *);
+	void (*atomic_pre_enable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_enable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_disable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_post_disable)(struct drm_bridge *, struct drm_bridge_state *);
+	struct drm_bridge_state * (*atomic_duplicate_state)(struct drm_bridge *);
+	void (*atomic_destroy_state)(struct drm_bridge *, struct drm_bridge_state *);
+	u32 * (*atomic_get_output_bus_fmts)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *, unsigned int *);
+	u32 * (*atomic_get_input_bus_fmts)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *, u32, unsigned int *);
+	int (*atomic_check)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *);
+	struct drm_bridge_state * (*atomic_reset)(struct drm_bridge *);
+	enum drm_connector_status (*detect)(struct drm_bridge *);
+	int (*get_modes)(struct drm_bridge *, struct drm_connector *);
+	const struct drm_edid * (*edid_read)(struct drm_bridge *, struct drm_connector *);
+	struct edid * (*get_edid)(struct drm_bridge *, struct drm_connector *);
+	void (*hpd_notify)(struct drm_bridge *, enum drm_connector_status);
+	void (*hpd_enable)(struct drm_bridge *);
+	void (*hpd_disable)(struct drm_bridge *);
+	void (*debugfs_init)(struct drm_bridge *, struct dentry *);
+};
+
+struct drm_bus_cfg {
+	u32 format;
+	u32 flags;
+};
+
+struct drm_bridge_state {
+	struct drm_private_state base;
+	struct drm_bridge *bridge;
+	struct drm_bus_cfg input_bus_cfg;
+	struct drm_bus_cfg output_bus_cfg;
+};
+
+struct drm_connector_list_iter {
+	struct drm_device *dev;
+	struct drm_connector *conn;
+};
+
+struct drm_mode_rect {
+	__s32 x1;
+	__s32 y1;
+	__s32 x2;
+	__s32 y2;
+};
+
+struct drm_debugfs_entry {
+	struct drm_device *dev;
+	struct drm_debugfs_info file;
+	struct list_head list;
+};
+
+struct drm_mode_modeinfo {
+	__u32 clock;
+	__u16 hdisplay;
+	__u16 hsync_start;
+	__u16 hsync_end;
+	__u16 htotal;
+	__u16 hskew;
+	__u16 vdisplay;
+	__u16 vsync_start;
+	__u16 vsync_end;
+	__u16 vtotal;
+	__u16 vscan;
+	__u32 vrefresh;
+	__u32 flags;
+	__u32 type;
+	char name[32];
+};
+
+struct dma_fence_cb;
+
+typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
+
+struct dma_fence_cb {
+	struct list_head node;
+	dma_fence_func_t func;
+};
+
+struct sync_file {
+	struct file *file;
+	char user_name[32];
+	struct list_head sync_file_list;
+	wait_queue_head_t wq;
+	unsigned long flags;
+	struct dma_fence *fence;
+	struct dma_fence_cb cb;
+};
+
+struct drm_out_fence_state {
+	s32 __attribute__((btf_type_tag("user"))) *out_fence_ptr;
+	struct sync_file *sync_file;
+	int fd;
+};
+
+struct drm_mode_atomic {
+	__u32 flags;
+	__u32 count_objs;
+	__u64 objs_ptr;
+	__u64 count_props_ptr;
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u64 reserved;
+	__u64 user_data;
+};
+
+struct drm_auth {
+	drm_magic_t magic;
+};
+
+struct drm_prop_enum_list {
+	int type;
+	const char *name;
+};
+
+struct est_timings {
+	u8 t1;
+	u8 t2;
+	u8 mfg_rsvd;
+};
+
+struct std_timing {
+	u8 hsize;
+	u8 vfreq_aspect;
+};
+
+struct detailed_pixel_timing {
+	u8 hactive_lo;
+	u8 hblank_lo;
+	u8 hactive_hblank_hi;
+	u8 vactive_lo;
+	u8 vblank_lo;
+	u8 vactive_vblank_hi;
+	u8 hsync_offset_lo;
+	u8 hsync_pulse_width_lo;
+	u8 vsync_offset_pulse_width_lo;
+	u8 hsync_vsync_offset_pulse_width_hi;
+	u8 width_mm_lo;
+	u8 height_mm_lo;
+	u8 width_height_mm_hi;
+	u8 hborder;
+	u8 vborder;
+	u8 misc;
+};
+
+struct detailed_data_string {
+	u8 str[13];
+};
+
+struct detailed_data_monitor_range {
+	u8 min_vfreq;
+	u8 max_vfreq;
+	u8 min_hfreq_khz;
+	u8 max_hfreq_khz;
+	u8 pixel_clock_mhz;
+	u8 flags;
+	union {
+		struct {
+			u8 reserved;
+			u8 hfreq_start_khz;
+			u8 c;
+			__le16 m;
+			u8 k;
+			u8 j;
+		} __attribute__((packed)) gtf2;
+		struct {
+			u8 version;
+			u8 data1;
+			u8 data2;
+			u8 supported_aspects;
+			u8 flags;
+			u8 supported_scalings;
+			u8 preferred_refresh;
+		} cvt;
+	} formula;
+};
+
+struct detailed_data_wpindex {
+	u8 white_yx_lo;
+	u8 white_x_hi;
+	u8 white_y_hi;
+	u8 gamma;
+};
+
+struct cvt_timing {
+	u8 code[3];
+};
+
+struct detailed_non_pixel {
+	u8 pad1;
+	u8 type;
+	u8 pad2;
+	union {
+		struct detailed_data_string str;
+		struct detailed_data_monitor_range range;
+		struct detailed_data_wpindex color;
+		struct std_timing timings[6];
+		struct cvt_timing cvt[4];
+	} data;
+};
+
+struct detailed_timing {
+	__le16 pixel_clock;
+	union {
+		struct detailed_pixel_timing pixel_data;
+		struct detailed_non_pixel other_data;
+	} data;
+};
+
+struct edid {
+	u8 header[8];
+	u8 mfg_id[2];
+	u8 prod_code[2];
+	u32 serial;
+	u8 mfg_week;
+	u8 mfg_year;
+	u8 version;
+	u8 revision;
+	u8 input;
+	u8 width_cm;
+	u8 height_cm;
+	u8 gamma;
+	u8 features;
+	u8 red_green_lo;
+	u8 blue_white_lo;
+	u8 red_x;
+	u8 red_y;
+	u8 green_x;
+	u8 green_y;
+	u8 blue_x;
+	u8 blue_y;
+	u8 white_x;
+	u8 white_y;
+	struct est_timings established_timings;
+	struct std_timing standard_timings[8];
+	struct detailed_timing detailed_timings[4];
+	u8 extensions;
+	u8 checksum;
+};
+
+struct drm_client_funcs;
+
+struct drm_client_dev {
+	struct drm_device *dev;
+	const char *name;
+	struct list_head list;
+	const struct drm_client_funcs *funcs;
+	struct drm_file *file;
+	struct mutex modeset_mutex;
+	struct drm_mode_set *modesets;
+	bool hotplug_failed;
+};
+
+struct drm_client_funcs {
+	struct module *owner;
+	void (*unregister)(struct drm_client_dev *);
+	int (*restore)(struct drm_client_dev *);
+	int (*hotplug)(struct drm_client_dev *);
+};
+
+struct drm_client_buffer {
+	struct drm_client_dev *client;
+	u32 pitch;
+	struct drm_gem_object *gem;
+	struct iosys_map map;
+	struct drm_framebuffer *fb;
+};
+
+struct drm_mode_fb_cmd {
+	__u32 fb_id;
+	__u32 width;
+	__u32 height;
+	__u32 pitch;
+	__u32 bpp;
+	__u32 depth;
+	__u32 handle;
+};
+
+struct drm_client_offset {
+	int x;
+	int y;
+};
+
+enum drm_color_lut_tests {
+	DRM_COLOR_LUT_EQUAL_CHANNELS = 1,
+	DRM_COLOR_LUT_NON_DECREASING = 2,
+};
+
+struct drm_color_lut {
+	__u16 red;
+	__u16 green;
+	__u16 blue;
+	__u16 reserved;
+};
+
+struct drm_mode_crtc_lut {
+	__u32 crtc_id;
+	__u32 gamma_size;
+	__u64 red;
+	__u64 green;
+	__u64 blue;
+};
+
+struct drm_conn_prop_enum_list {
+	int type;
+	const char *name;
+	struct ida ida;
+};
+
+typedef void (*drmres_release_t)(struct drm_device *, void *);
+
+struct drm_panel_funcs;
+
+struct drm_panel {
+	struct device *dev;
+	struct backlight_device *backlight;
+	const struct drm_panel_funcs *funcs;
+	int connector_type;
+	struct list_head list;
+	struct list_head followers;
+	struct mutex follower_lock;
+	bool prepare_prev_first;
+	bool prepared;
+	bool enabled;
+};
+
+struct drm_panel_funcs {
+	int (*prepare)(struct drm_panel *);
+	int (*enable)(struct drm_panel *);
+	int (*disable)(struct drm_panel *);
+	int (*unprepare)(struct drm_panel *);
+	int (*get_modes)(struct drm_panel *, struct drm_connector *);
+	enum drm_panel_orientation (*get_orientation)(struct drm_panel *);
+	int (*get_timings)(struct drm_panel *, unsigned int, struct display_timing *);
+	void (*debugfs_init)(struct drm_panel *, struct dentry *);
+};
+
+struct drm_mode_connector_set_property {
+	__u64 value;
+	__u32 prop_id;
+	__u32 connector_id;
+};
+
+struct drm_mode_obj_set_property {
+	__u64 value;
+	__u32 prop_id;
+	__u32 obj_id;
+	__u32 obj_type;
+};
+
+struct drm_mode_get_connector {
+	__u64 encoders_ptr;
+	__u64 modes_ptr;
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u32 count_modes;
+	__u32 count_props;
+	__u32 count_encoders;
+	__u32 encoder_id;
+	__u32 connector_id;
+	__u32 connector_type;
+	__u32 connector_type_id;
+	__u32 connection;
+	__u32 mm_width;
+	__u32 mm_height;
+	__u32 subpixel;
+	__u32 pad;
+};
+
+struct drm_mode_crtc {
+	__u64 set_connectors_ptr;
+	__u32 count_connectors;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 x;
+	__u32 y;
+	__u32 gamma_size;
+	__u32 mode_valid;
+	struct drm_mode_modeinfo mode;
+};
+
+struct displayid_block {
+	u8 tag;
+	u8 rev;
+	u8 num_bytes;
+};
+
+struct displayid_header {
+	u8 rev;
+	u8 bytes;
+	u8 prod_id;
+	u8 ext_count;
+};
+
+struct displayid_iter {
+	const struct drm_edid *drm_edid;
+	const u8 *section;
+	int length;
+	int idx;
+	int ext_index;
+	u8 version;
+	u8 primary_use;
+};
+
+enum drm_minor_type {
+	DRM_MINOR_PRIMARY = 0,
+	DRM_MINOR_CONTROL = 1,
+	DRM_MINOR_RENDER = 2,
+	DRM_MINOR_ACCEL = 32,
+};
+
+struct drm_mode_map_dumb {
+	__u32 handle;
+	__u32 pad;
+	__u64 offset;
+};
+
+struct drm_mode_destroy_dumb {
+	__u32 handle;
+};
+
+struct edid_quirk {
+	u32 panel_id;
+	u32 quirks;
+};
+
+struct minimode {
+	short w;
+	short h;
+	short r;
+	short rb;
+};
+
+struct stereo_mandatory_mode {
+	int width;
+	int height;
+	int vrefresh;
+	unsigned int flags;
+};
+
+enum edid_block_status {
+	EDID_BLOCK_OK = 0,
+	EDID_BLOCK_READ_FAIL = 1,
+	EDID_BLOCK_NULL = 2,
+	EDID_BLOCK_ZERO = 3,
+	EDID_BLOCK_HEADER_CORRUPT = 4,
+	EDID_BLOCK_HEADER_REPAIR = 5,
+	EDID_BLOCK_HEADER_FIXED = 6,
+	EDID_BLOCK_CHECKSUM = 7,
+	EDID_BLOCK_VERSION = 8,
+};
+
+struct cea_db {
+	u8 tag_length;
+	u8 data[0];
+};
+
+struct displayid_vesa_vendor_specific_block {
+	struct displayid_block base;
+	u8 oui[3];
+	u8 data_structure_type;
+	u8 mso;
+};
+
+struct displayid_detailed_timings_1 {
+	u8 pixel_clock[3];
+	u8 flags;
+	u8 hactive[2];
+	u8 hblank[2];
+	u8 hsync[2];
+	u8 hsw[2];
+	u8 vactive[2];
+	u8 vblank[2];
+	u8 vsync[2];
+	u8 vsw[2];
+};
+
+struct displayid_detailed_timing_block {
+	struct displayid_block base;
+	struct displayid_detailed_timings_1 timings[0];
+};
+
+struct displayid_tiled_block {
+	struct displayid_block base;
+	u8 tile_cap;
+	u8 topo[3];
+	u8 tile_size[4];
+	u8 tile_pixel_bezel[5];
+	u8 topology_id[8];
+};
+
+typedef void detailed_cb(const struct detailed_timing *, void *);
+
+struct drm_edid_iter {
+	const struct drm_edid *drm_edid;
+	int index;
+};
+
+struct cea_db_iter {
+	struct drm_edid_iter edid_iter;
+	struct displayid_iter displayid_iter;
+	const u8 *collection;
+	int index;
+	int end;
+};
+
+struct cea_sad {
+	u8 format;
+	u8 channels;
+	u8 freq;
+	u8 byte2;
+};
+
+struct detailed_mode_closure {
+	struct drm_connector *connector;
+	const struct drm_edid *drm_edid;
+	bool preferred;
+	int modes;
+};
+
+typedef int read_block_fn(void *, u8 *, unsigned int, size_t);
+
+struct drm_mode_get_encoder {
+	__u32 encoder_id;
+	__u32 encoder_type;
+	__u32 crtc_id;
+	__u32 possible_crtcs;
+	__u32 possible_clones;
+};
+
+enum dma_resv_usage {
+	DMA_RESV_USAGE_KERNEL = 0,
+	DMA_RESV_USAGE_WRITE = 1,
+	DMA_RESV_USAGE_READ = 2,
+	DMA_RESV_USAGE_BOOKKEEP = 3,
+};
+
+struct drm_memory_stats {
+	u64 shared;
+	u64 private;
+	u64 resident;
+	u64 purgeable;
+	u64 active;
+};
+
+struct drm_mode_rmfb_work {
+	struct work_struct work;
+	struct list_head fbs;
+};
+
+struct drm_mode_fb_dirty_cmd {
+	__u32 fb_id;
+	__u32 flags;
+	__u32 color;
+	__u32 num_clips;
+	__u64 clips_ptr;
+};
+
+struct dma_buf_poll_cb_t {
+	struct dma_fence_cb cb;
+	wait_queue_head_t *poll;
+	__poll_t active;
+};
+
+struct dma_buf_ops;
+
+struct dma_buf_sysfs_entry;
+
+struct dma_buf {
+	size_t size;
+	struct file *file;
+	struct list_head attachments;
+	const struct dma_buf_ops *ops;
+	unsigned int vmapping_counter;
+	struct iosys_map vmap_ptr;
+	const char *exp_name;
+	const char *name;
+	spinlock_t name_lock;
+	struct module *owner;
+	struct list_head list_node;
+	void *priv;
+	struct dma_resv *resv;
+	wait_queue_head_t poll;
+	struct dma_buf_poll_cb_t cb_in;
+	struct dma_buf_poll_cb_t cb_out;
+	struct dma_buf_sysfs_entry *sysfs_entry;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct dma_buf_ops {
+	bool cache_sgt_mapping;
+	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
+	void (*detach)(struct dma_buf *, struct dma_buf_attachment *);
+	int (*pin)(struct dma_buf_attachment *);
+	void (*unpin)(struct dma_buf_attachment *);
+	struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);
+	void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);
+	void (*release)(struct dma_buf *);
+	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*begin_cpu_access_partial)(struct dma_buf *, enum dma_data_direction, unsigned int, unsigned int);
+	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*end_cpu_access_partial)(struct dma_buf *, enum dma_data_direction, unsigned int, unsigned int);
+	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
+	int (*vmap)(struct dma_buf *, struct iosys_map *);
+	void (*vunmap)(struct dma_buf *, struct iosys_map *);
+	int (*get_flags)(struct dma_buf *, unsigned long *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct dma_buf_attach_ops;
+
+struct dma_buf_attachment {
+	struct dma_buf *dmabuf;
+	struct device *dev;
+	struct list_head node;
+	struct sg_table *sgt;
+	enum dma_data_direction dir;
+	bool peer2peer;
+	const struct dma_buf_attach_ops *importer_ops;
+	void *importer_priv;
+	void *priv;
+	unsigned long dma_map_attrs;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct dma_buf_attach_ops {
+	bool allow_peer2peer;
+	void (*move_notify)(struct dma_buf_attachment *);
+	u64 android_kabi_reserved1;
+};
+
+struct dma_buf_sysfs_entry {
+	union {
+		struct kobject kobj;
+		struct work_struct sysfs_add_work;
+	};
+	struct dma_buf *dmabuf;
+};
+
+struct drm_gem_close {
+	__u32 handle;
+	__u32 pad;
+};
+
+struct drm_gem_flink {
+	__u32 handle;
+	__u32 name;
+};
+
+struct drm_gem_open {
+	__u32 name;
+	__u32 handle;
+	__u64 size;
+};
+
+enum drm_stat_type {
+	_DRM_STAT_LOCK = 0,
+	_DRM_STAT_OPENS = 1,
+	_DRM_STAT_CLOSES = 2,
+	_DRM_STAT_IOCTLS = 3,
+	_DRM_STAT_LOCKS = 4,
+	_DRM_STAT_UNLOCKS = 5,
+	_DRM_STAT_VALUE = 6,
+	_DRM_STAT_BYTE = 7,
+	_DRM_STAT_COUNT = 8,
+	_DRM_STAT_IRQ = 9,
+	_DRM_STAT_PRIMARY = 10,
+	_DRM_STAT_SECONDARY = 11,
+	_DRM_STAT_DMA = 12,
+	_DRM_STAT_SPECIAL = 13,
+	_DRM_STAT_MISSED = 14,
+};
+
+struct drm_unique {
+	__kernel_size_t unique_len;
+	char __attribute__((btf_type_tag("user"))) *unique;
+};
+
+struct drm_client {
+	int idx;
+	int auth;
+	unsigned long pid;
+	unsigned long uid;
+	unsigned long magic;
+	unsigned long iocs;
+};
+
+struct drm_version {
+	int version_major;
+	int version_minor;
+	int version_patchlevel;
+	__kernel_size_t name_len;
+	char __attribute__((btf_type_tag("user"))) *name;
+	__kernel_size_t date_len;
+	char __attribute__((btf_type_tag("user"))) *date;
+	__kernel_size_t desc_len;
+	char __attribute__((btf_type_tag("user"))) *desc;
+};
+
+struct drm_stats {
+	unsigned long count;
+	struct {
+		unsigned long value;
+		enum drm_stat_type type;
+	} data[15];
+};
+
+struct drm_set_version {
+	int drm_di_major;
+	int drm_di_minor;
+	int drm_dd_major;
+	int drm_dd_minor;
+};
+
+struct drm_get_cap {
+	__u64 capability;
+	__u64 value;
+};
+
+struct drm_set_client_cap {
+	__u64 capability;
+	__u64 value;
+};
+
+struct drm_mode_create_lease {
+	__u64 object_ids;
+	__u32 object_count;
+	__u32 flags;
+	__u32 lessee_id;
+	__u32 fd;
+};
+
+struct drm_mode_list_lessees {
+	__u32 count_lessees;
+	__u32 pad;
+	__u64 lessees_ptr;
+};
+
+struct drm_mode_get_lease {
+	__u32 count_objects;
+	__u32 pad;
+	__u64 objects_ptr;
+};
+
+struct drm_mode_revoke_lease {
+	__u32 lessee_id;
+};
+
+struct drmres_node {
+	struct list_head entry;
+	drmres_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct drmres {
+	struct drmres_node node;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u8 data[0];
+};
+
+enum drm_mm_insert_mode {
+	DRM_MM_INSERT_BEST = 0,
+	DRM_MM_INSERT_LOW = 1,
+	DRM_MM_INSERT_HIGH = 2,
+	DRM_MM_INSERT_EVICT = 3,
+	DRM_MM_INSERT_ONCE = 2147483648,
+	DRM_MM_INSERT_HIGHEST = 2147483650,
+	DRM_MM_INSERT_LOWEST = 2147483649,
+};
+
+struct drm_mm_scan {
+	struct drm_mm *mm;
+	u64 size;
+	u64 alignment;
+	u64 remainder_mask;
+	u64 range_start;
+	u64 range_end;
+	u64 hit_start;
+	u64 hit_end;
+	unsigned long color;
+	enum drm_mm_insert_mode mode;
+};
+
+struct drm_mode_card_res {
+	__u64 fb_id_ptr;
+	__u64 crtc_id_ptr;
+	__u64 connector_id_ptr;
+	__u64 encoder_id_ptr;
+	__u32 count_fbs;
+	__u32 count_crtcs;
+	__u32 count_connectors;
+	__u32 count_encoders;
+	__u32 min_width;
+	__u32 max_width;
+	__u32 min_height;
+	__u32 max_height;
+};
+
+struct drm_mode_obj_get_properties {
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u32 count_props;
+	__u32 obj_id;
+	__u32 obj_type;
+};
+
+struct analog_param_range {
+	unsigned int min;
+	unsigned int typ;
+	unsigned int max;
+};
+
+struct analog_param_field {
+	unsigned int even;
+	unsigned int odd;
+};
+
+struct analog_parameters {
+	unsigned int num_lines;
+	unsigned int line_duration_ns;
+	struct analog_param_range hact_ns;
+	struct analog_param_range hfp_ns;
+	struct analog_param_range hslen_ns;
+	struct analog_param_range hbp_ns;
+	struct analog_param_range hblk_ns;
+	unsigned int bt601_hfp;
+	struct analog_param_field vfp_lines;
+	struct analog_param_field vslen_lines;
+	struct analog_param_field vbp_lines;
+};
+
+struct drm_named_mode {
+	const char *name;
+	unsigned int pixel_clock_khz;
+	unsigned int xres;
+	unsigned int yres;
+	unsigned int flags;
+	unsigned int tv_mode;
+};
+
+enum drm_mode_analog {
+	DRM_MODE_ANALOG_NTSC = 0,
+	DRM_MODE_ANALOG_PAL = 1,
+};
+
+enum drm_bus_flags {
+	DRM_BUS_FLAG_DE_LOW = 1,
+	DRM_BUS_FLAG_DE_HIGH = 2,
+	DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE = 4,
+	DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE = 8,
+	DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE = 8,
+	DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE = 4,
+	DRM_BUS_FLAG_DATA_MSB_TO_LSB = 16,
+	DRM_BUS_FLAG_DATA_LSB_TO_MSB = 32,
+	DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE = 64,
+	DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE = 128,
+	DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE = 128,
+	DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE = 64,
+	DRM_BUS_FLAG_SHARP_SIGNALS = 256,
+};
+
+struct drm_format_modifier {
+	__u64 formats;
+	__u32 offset;
+	__u32 pad;
+	__u64 modifier;
+};
+
+struct drm_format_modifier_blob {
+	__u32 version;
+	__u32 flags;
+	__u32 count_formats;
+	__u32 formats_offset;
+	__u32 count_modifiers;
+	__u32 modifiers_offset;
+};
+
+struct drm_mode_cursor2 {
+	__u32 flags;
+	__u32 crtc_id;
+	__s32 x;
+	__s32 y;
+	__u32 width;
+	__u32 height;
+	__u32 handle;
+	__s32 hot_x;
+	__s32 hot_y;
+};
+
+struct drm_mode_get_plane_res {
+	__u64 plane_id_ptr;
+	__u32 count_planes;
+};
+
+struct drm_mode_get_plane {
+	__u32 plane_id;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 possible_crtcs;
+	__u32 gamma_size;
+	__u32 count_format_types;
+	__u64 format_type_ptr;
+};
+
+struct drm_mode_set_plane {
+	__u32 plane_id;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 flags;
+	__s32 crtc_x;
+	__s32 crtc_y;
+	__u32 crtc_w;
+	__u32 crtc_h;
+	__u32 src_x;
+	__u32 src_y;
+	__u32 src_h;
+	__u32 src_w;
+};
+
+struct drm_mode_cursor {
+	__u32 flags;
+	__u32 crtc_id;
+	__s32 x;
+	__s32 y;
+	__u32 width;
+	__u32 height;
+	__u32 handle;
+};
+
+struct drm_mode_crtc_page_flip_target {
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 flags;
+	__u32 sequence;
+	__u64 user_data;
+};
+
+struct drm_prime_member {
+	struct dma_buf *dma_buf;
+	uint32_t handle;
+	struct rb_node dmabuf_rb;
+	struct rb_node handle_rb;
+};
+
+struct dma_buf_export_info {
+	const char *exp_name;
+	struct module *owner;
+	const struct dma_buf_ops *ops;
+	size_t size;
+	int flags;
+	struct dma_resv *resv;
+	void *priv;
+	unsigned long dma_map_attrs;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct drm_prime_handle {
+	__u32 handle;
+	__u32 flags;
+	__s32 fd;
+};
+
+struct drm_print_iterator {
+	void *data;
+	ssize_t start;
+	ssize_t remain;
+	ssize_t offset;
+};
+
+struct drm_property_enum {
+	uint64_t value;
+	struct list_head head;
+	char name[32];
+};
+
+struct drm_mode_get_property {
+	__u64 values_ptr;
+	__u64 enum_blob_ptr;
+	__u32 prop_id;
+	__u32 flags;
+	char name[32];
+	__u32 count_values;
+	__u32 count_enum_blobs;
+};
+
+struct drm_mode_property_enum {
+	__u64 value;
+	char name[32];
+};
+
+struct drm_mode_get_blob {
+	__u32 blob_id;
+	__u32 length;
+	__u64 data;
+};
+
+struct drm_mode_create_blob {
+	__u64 data;
+	__u32 length;
+	__u32 blob_id;
+};
+
+struct drm_mode_destroy_blob {
+	__u32 blob_id;
+};
+
+enum dma_fence_flag_bits {
+	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
+	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
+	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
+	DMA_FENCE_FLAG_USER_BITS = 3,
+};
+
+struct syncobj_wait_entry {
+	struct list_head node;
+	struct task_struct *task;
+	struct dma_fence *fence;
+	struct dma_fence_cb fence_cb;
+	u64 point;
+};
+
+struct drm_syncobj;
+
+struct syncobj_eventfd_entry {
+	struct list_head node;
+	struct dma_fence *fence;
+	struct dma_fence_cb fence_cb;
+	struct drm_syncobj *syncobj;
+	struct eventfd_ctx *ev_fd_ctx;
+	u64 point;
+	u32 flags;
+};
+
+struct drm_syncobj {
+	struct kref refcount;
+	struct dma_fence __attribute__((btf_type_tag("rcu"))) *fence;
+	struct list_head cb_list;
+	struct list_head ev_fd_list;
+	spinlock_t lock;
+	struct file *file;
+};
+
+struct dma_fence_chain {
+	struct dma_fence base;
+	struct dma_fence __attribute__((btf_type_tag("rcu"))) *prev;
+	u64 prev_seqno;
+	struct dma_fence *fence;
+	union {
+		struct dma_fence_cb cb;
+		struct irq_work work;
+	};
+	spinlock_t lock;
+};
+
+struct drm_syncobj_transfer {
+	__u32 src_handle;
+	__u32 dst_handle;
+	__u64 src_point;
+	__u64 dst_point;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct dma_fence_unwrap {
+	struct dma_fence *chain;
+	struct dma_fence *array;
+	unsigned int index;
+};
+
+struct drm_syncobj_wait {
+	__u64 handles;
+	__s64 timeout_nsec;
+	__u32 count_handles;
+	__u32 flags;
+	__u32 first_signaled;
+	__u32 pad;
+};
+
+struct drm_syncobj_timeline_wait {
+	__u64 handles;
+	__u64 points;
+	__s64 timeout_nsec;
+	__u32 count_handles;
+	__u32 flags;
+	__u32 first_signaled;
+	__u32 pad;
+};
+
+struct drm_syncobj_create {
+	__u32 handle;
+	__u32 flags;
+};
+
+struct drm_syncobj_destroy {
+	__u32 handle;
+	__u32 pad;
+};
+
+struct drm_syncobj_handle {
+	__u32 handle;
+	__u32 flags;
+	__s32 fd;
+	__u32 pad;
+};
+
+struct drm_syncobj_eventfd {
+	__u32 handle;
+	__u32 flags;
+	__u64 point;
+	__s32 fd;
+	__u32 pad;
+};
+
+struct drm_syncobj_array {
+	__u64 handles;
+	__u32 count_handles;
+	__u32 pad;
+};
+
+struct drm_syncobj_timeline_array {
+	__u64 handles;
+	__u64 points;
+	__u32 count_handles;
+	__u32 flags;
+};
+
+struct class_attribute {
+	struct attribute attr;
+	ssize_t (*show)(const struct class *, const struct class_attribute *, char *);
+	ssize_t (*store)(const struct class *, const struct class_attribute *, const char *, size_t);
+};
+
+struct class_attribute_string {
+	struct class_attribute attr;
+	char *str;
+};
+
+struct component_ops {
+	int (*bind)(struct device *, struct device *, void *);
+	void (*unbind)(struct device *, struct device *, void *);
+};
+
+typedef void (*btf_trace_drm_vblank_event)(void *, int, unsigned int, ktime_t, bool);
+
+typedef void (*btf_trace_drm_vblank_event_queued)(void *, struct drm_file *, int, unsigned int);
+
+typedef void (*btf_trace_drm_vblank_event_delivered)(void *, struct drm_file *, int, unsigned int);
+
+struct trace_event_raw_drm_vblank_event {
+	struct trace_entry ent;
+	int crtc;
+	unsigned int seq;
+	ktime_t time;
+	bool high_prec;
+	char __data[0];
+};
+
+struct trace_event_raw_drm_vblank_event_queued {
+	struct trace_entry ent;
+	struct drm_file *file;
+	int crtc;
+	unsigned int seq;
+	char __data[0];
+};
+
+struct trace_event_raw_drm_vblank_event_delivered {
+	struct trace_entry ent;
+	struct drm_file *file;
+	int crtc;
+	unsigned int seq;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_drm_vblank_event {};
+
+struct trace_event_data_offsets_drm_vblank_event_queued {};
+
+struct trace_event_data_offsets_drm_vblank_event_delivered {};
+
+enum drm_vblank_seq_type {
+	_DRM_VBLANK_ABSOLUTE = 0,
+	_DRM_VBLANK_RELATIVE = 1,
+	_DRM_VBLANK_HIGH_CRTC_MASK = 62,
+	_DRM_VBLANK_EVENT = 67108864,
+	_DRM_VBLANK_FLIP = 134217728,
+	_DRM_VBLANK_NEXTONMISS = 268435456,
+	_DRM_VBLANK_SECONDARY = 536870912,
+	_DRM_VBLANK_SIGNAL = 1073741824,
+};
+
+struct drm_wait_vblank_request {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	unsigned long signal;
+};
+
+struct drm_wait_vblank_reply {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	long tval_sec;
+	long tval_usec;
+};
+
+union drm_wait_vblank {
+	struct drm_wait_vblank_request request;
+	struct drm_wait_vblank_reply reply;
+};
+
+typedef bool (*drm_vblank_get_scanout_position_func)(struct drm_crtc *, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
+
+struct drm_modeset_ctl {
+	__u32 crtc;
+	__u32 cmd;
+};
+
+struct drm_crtc_get_sequence {
+	__u32 crtc_id;
+	__u32 active;
+	__u64 sequence;
+	__s64 sequence_ns;
+};
+
+struct drm_crtc_queue_sequence {
+	__u32 crtc_id;
+	__u32 flags;
+	__u64 sequence;
+	__u64 user_data;
+};
+
+struct drm_vblank_work {
+	struct kthread_work base;
+	struct drm_vblank_crtc *vblank;
+	u64 count;
+	int cancelling;
+	struct list_head node;
+};
+
+struct drm_vma_offset_file {
+	struct rb_node vm_rb;
+	struct drm_file *vm_tag;
+	unsigned long vm_count;
+};
+
+struct drm_gpuva_op;
+
+struct drm_gpuva_fn_ops {
+	struct drm_gpuva_op * (*op_alloc)();
+	void (*op_free)(struct drm_gpuva_op *);
+	int (*sm_step_map)(struct drm_gpuva_op *, void *);
+	int (*sm_step_remap)(struct drm_gpuva_op *, void *);
+	int (*sm_step_unmap)(struct drm_gpuva_op *, void *);
+};
+
+struct drm_gpuva_op_map {
+	struct {
+		u64 addr;
+		u64 range;
+	} va;
+	struct {
+		u64 offset;
+		struct drm_gem_object *obj;
+	} gem;
+};
+
+struct drm_gpuva_op_unmap;
+
+struct drm_gpuva_op_remap {
+	struct drm_gpuva_op_map *prev;
+	struct drm_gpuva_op_map *next;
+	struct drm_gpuva_op_unmap *unmap;
+};
+
+struct drm_gpuva;
+
+struct drm_gpuva_op_unmap {
+	struct drm_gpuva *va;
+	bool keep;
+};
+
+struct drm_gpuva_op_prefetch {
+	struct drm_gpuva *va;
+};
+
+enum drm_gpuva_op_type {
+	DRM_GPUVA_OP_MAP = 0,
+	DRM_GPUVA_OP_REMAP = 1,
+	DRM_GPUVA_OP_UNMAP = 2,
+	DRM_GPUVA_OP_PREFETCH = 3,
+};
+
+struct drm_gpuva_op {
+	struct list_head entry;
+	enum drm_gpuva_op_type op;
+	union {
+		struct drm_gpuva_op_map map;
+		struct drm_gpuva_op_remap remap;
+		struct drm_gpuva_op_unmap unmap;
+		struct drm_gpuva_op_prefetch prefetch;
+	};
+};
+
+enum drm_gpuva_flags {
+	DRM_GPUVA_INVALIDATED = 1,
+	DRM_GPUVA_SPARSE = 2,
+	DRM_GPUVA_USERBITS = 4,
+};
+
+struct drm_gpuva_manager;
+
+struct drm_gpuva {
+	struct drm_gpuva_manager *mgr;
+	enum drm_gpuva_flags flags;
+	struct {
+		u64 addr;
+		u64 range;
+	} va;
+	struct {
+		u64 offset;
+		struct drm_gem_object *obj;
+		struct list_head entry;
+	} gem;
+	struct {
+		struct rb_node node;
+		struct list_head entry;
+		u64 __subtree_last;
+	} rb;
+};
+
+struct drm_gpuva_manager {
+	const char *name;
+	u64 mm_start;
+	u64 mm_range;
+	struct {
+		struct rb_root_cached tree;
+		struct list_head list;
+	} rb;
+	struct drm_gpuva kernel_alloc_node;
+	const struct drm_gpuva_fn_ops *ops;
+};
+
+struct drm_gpuva_ops {
+	struct list_head list;
+};
+
+typedef int drm_ioctl_compat_t(struct file *, unsigned int, unsigned long);
+
+struct drm_version_32 {
+	int version_major;
+	int version_minor;
+	int version_patchlevel;
+	u32 name_len;
+	u32 name;
+	u32 date_len;
+	u32 date;
+	u32 desc_len;
+	u32 desc;
+};
+
+typedef struct drm_version_32 drm_version32_t;
+
+struct drm_unique32 {
+	u32 unique_len;
+	u32 unique;
+};
+
+typedef struct drm_unique32 drm_unique32_t;
+
+struct drm_client32 {
+	int idx;
+	int auth;
+	u32 pid;
+	u32 uid;
+	u32 magic;
+	u32 iocs;
+};
+
+typedef struct drm_client32 drm_client32_t;
+
+struct drm_stats32 {
+	u32 count;
+	struct {
+		u32 value;
+		enum drm_stat_type type;
+	} data[15];
+};
+
+typedef struct drm_stats32 drm_stats32_t;
+
+struct drm_wait_vblank_request32 {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	u32 signal;
+};
+
+struct drm_wait_vblank_reply32 {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	s32 tval_sec;
+	s32 tval_usec;
+};
+
+union drm_wait_vblank32 {
+	struct drm_wait_vblank_request32 request;
+	struct drm_wait_vblank_reply32 reply;
+};
+
+typedef union drm_wait_vblank32 drm_wait_vblank32_t;
+
+enum {
+	FB_BLANK_UNBLANK = 0,
+	FB_BLANK_NORMAL = 1,
+	FB_BLANK_VSYNC_SUSPEND = 2,
+	FB_BLANK_HSYNC_SUSPEND = 3,
+	FB_BLANK_POWERDOWN = 4,
+};
+
+struct drm_panel_follower_funcs;
+
+struct drm_panel_follower {
+	const struct drm_panel_follower_funcs *funcs;
+	struct list_head list;
+	struct drm_panel *panel;
+};
+
+struct drm_panel_follower_funcs {
+	int (*panel_prepared)(struct drm_panel_follower *);
+	int (*panel_unpreparing)(struct drm_panel_follower *);
+};
+
+enum drm_of_lvds_pixels {
+	DRM_OF_LVDS_EVEN = 1,
+	DRM_OF_LVDS_ODD = 2,
+};
+
+enum drm_lvds_dual_link_pixels {
+	DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS = 0,
+	DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS = 1,
+};
+
+enum mipi_dsi_pixel_format {
+	MIPI_DSI_FMT_RGB888 = 0,
+	MIPI_DSI_FMT_RGB666 = 1,
+	MIPI_DSI_FMT_RGB666_PACKED = 2,
+	MIPI_DSI_FMT_RGB565 = 3,
+};
+
+struct component_master_ops {
+	int (*bind)(struct device *);
+	void (*unbind)(struct device *);
+};
+
+struct of_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct device_node *local_node;
+};
+
+struct mipi_dsi_host_ops;
+
+struct mipi_dsi_host {
+	struct device *dev;
+	const struct mipi_dsi_host_ops *ops;
+	struct list_head list;
+};
+
+struct mipi_dsi_device;
+
+struct mipi_dsi_msg;
+
+struct mipi_dsi_host_ops {
+	int (*attach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
+	int (*detach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
+	ssize_t (*transfer)(struct mipi_dsi_host *, const struct mipi_dsi_msg *);
+};
+
+struct drm_dsc_config;
+
+struct mipi_dsi_device {
+	struct mipi_dsi_host *host;
+	struct device dev;
+	bool attached;
+	char name[20];
+	unsigned int channel;
+	unsigned int lanes;
+	enum mipi_dsi_pixel_format format;
+	unsigned long mode_flags;
+	unsigned long hs_rate;
+	unsigned long lp_rate;
+	struct drm_dsc_config *dsc;
+};
+
+struct mipi_dsi_msg {
+	u8 channel;
+	u8 type;
+	u16 flags;
+	size_t tx_len;
+	const void *tx_buf;
+	size_t rx_len;
+	void *rx_buf;
+};
+
+struct drm_info_list;
+
+struct drm_info_node {
+	struct drm_minor *minor;
+	const struct drm_info_list *info_ent;
+	struct list_head list;
+	struct dentry *dent;
+};
+
+struct drm_info_list {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+	u32 driver_features;
+	void *data;
+};
+
+struct drm_gem_shmem_object {
+	struct drm_gem_object base;
+	struct page **pages;
+	unsigned int pages_use_count;
+	int madv;
+	struct list_head madv_list;
+	struct sg_table *sgt;
+	void *vaddr;
+	unsigned int vmap_use_count;
+	bool pages_mark_dirty_on_put: 1;
+	bool pages_mark_accessed_on_put: 1;
+	bool map_wc: 1;
+};
+
+struct drm_bridge_connector {
+	struct drm_connector base;
+	struct drm_encoder *encoder;
+	struct drm_bridge *bridge_edid;
+	struct drm_bridge *bridge_hpd;
+	struct drm_bridge *bridge_detect;
+	struct drm_bridge *bridge_modes;
+};
+
+struct drm_atomic_helper_damage_iter {
+	struct drm_rect plane_src;
+	const struct drm_rect *clips;
+	uint32_t num_clips;
+	uint32_t curr_clip;
+	bool full_update;
+};
+
+enum i2c_alert_protocol {
+	I2C_PROTOCOL_SMBUS_ALERT = 0,
+	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
+};
+
+struct i2c_device_id;
+
+struct i2c_board_info;
+
+struct i2c_driver {
+	unsigned int class;
+	int (*probe)(struct i2c_client *);
+	void (*remove)(struct i2c_client *);
+	void (*shutdown)(struct i2c_client *);
+	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
+	int (*command)(struct i2c_client *, unsigned int, void *);
+	struct device_driver driver;
+	const struct i2c_device_id *id_table;
+	int (*detect)(struct i2c_client *, struct i2c_board_info *);
+	const unsigned short *address_list;
+	struct list_head clients;
+	u32 flags;
+};
+
+struct i2c_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct i2c_board_info {
+	char type[20];
+	unsigned short flags;
+	unsigned short addr;
+	const char *dev_name;
+	void *platform_data;
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	const struct software_node *swnode;
+	const struct resource *resources;
+	unsigned int num_resources;
+	int irq;
+};
+
+struct drm_encoder_slave;
+
+struct drm_i2c_encoder_driver {
+	struct i2c_driver i2c_driver;
+	int (*encoder_init)(struct i2c_client *, struct drm_device *, struct drm_encoder_slave *);
+};
+
+struct drm_encoder_slave_funcs;
+
+struct drm_encoder_slave {
+	struct drm_encoder base;
+	const struct drm_encoder_slave_funcs *slave_funcs;
+	void *slave_priv;
+	void *bus_priv;
+};
+
+struct drm_encoder_slave_funcs {
+	void (*set_config)(struct drm_encoder *, void *);
+	void (*destroy)(struct drm_encoder *);
+	void (*dpms)(struct drm_encoder *, int);
+	void (*save)(struct drm_encoder *);
+	void (*restore)(struct drm_encoder *);
+	bool (*mode_fixup)(struct drm_encoder *, const struct drm_display_mode *, struct drm_display_mode *);
+	int (*mode_valid)(struct drm_encoder *, struct drm_display_mode *);
+	void (*mode_set)(struct drm_encoder *, struct drm_display_mode *, struct drm_display_mode *);
+	enum drm_connector_status (*detect)(struct drm_encoder *, struct drm_connector *);
+	int (*get_modes)(struct drm_encoder *, struct drm_connector *);
+	int (*create_resources)(struct drm_encoder *, struct drm_connector *);
+	int (*set_property)(struct drm_encoder *, struct drm_connector *, struct drm_property *, uint64_t);
+};
+
+struct drm_flip_work;
+
+typedef void (*drm_flip_func_t)(struct drm_flip_work *, void *);
+
+struct drm_flip_work {
+	const char *name;
+	drm_flip_func_t func;
+	struct work_struct worker;
+	struct list_head queued;
+	struct list_head commited;
+	spinlock_t lock;
+};
+
+struct drm_flip_task {
+	struct list_head node;
+	void *data;
+};
+
+struct drm_shadow_plane_state {
+	struct drm_plane_state base;
+	struct iosys_map map[4];
+	struct iosys_map data[4];
+};
+
+struct drm_simple_display_pipe_funcs;
+
+struct drm_simple_display_pipe {
+	struct drm_crtc crtc;
+	struct drm_plane plane;
+	struct drm_encoder encoder;
+	struct drm_connector *connector;
+	const struct drm_simple_display_pipe_funcs *funcs;
+};
+
+struct drm_simple_display_pipe_funcs {
+	enum drm_mode_status (*mode_valid)(struct drm_simple_display_pipe *, const struct drm_display_mode *);
+	void (*enable)(struct drm_simple_display_pipe *, struct drm_crtc_state *, struct drm_plane_state *);
+	void (*disable)(struct drm_simple_display_pipe *);
+	int (*check)(struct drm_simple_display_pipe *, struct drm_plane_state *, struct drm_crtc_state *);
+	void (*update)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	int (*prepare_fb)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	void (*cleanup_fb)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	int (*begin_fb_access)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	void (*end_fb_access)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	int (*enable_vblank)(struct drm_simple_display_pipe *);
+	void (*disable_vblank)(struct drm_simple_display_pipe *);
+	void (*reset_crtc)(struct drm_simple_display_pipe *);
+	struct drm_crtc_state * (*duplicate_crtc_state)(struct drm_simple_display_pipe *);
+	void (*destroy_crtc_state)(struct drm_simple_display_pipe *, struct drm_crtc_state *);
+	void (*reset_plane)(struct drm_simple_display_pipe *);
+	struct drm_plane_state * (*duplicate_plane_state)(struct drm_simple_display_pipe *);
+	void (*destroy_plane_state)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+};
+
+struct drm_afbc_framebuffer {
+	struct drm_framebuffer base;
+	u32 block_width;
+	u32 block_height;
+	u32 aligned_width;
+	u32 aligned_height;
+	u32 offset;
+	u32 afbc_size;
+};
+
+struct drm_fb_helper_funcs;
+
+struct drm_fb_helper {
+	struct drm_client_dev client;
+	struct drm_client_buffer *buffer;
+	struct drm_framebuffer *fb;
+	struct drm_device *dev;
+	const struct drm_fb_helper_funcs *funcs;
+	struct fb_info *info;
+	u32 pseudo_palette[17];
+	struct drm_clip_rect damage_clip;
+	spinlock_t damage_lock;
+	struct work_struct damage_work;
+	struct work_struct resume_work;
+	struct mutex lock;
+	struct list_head kernel_fb_list;
+	bool delayed_hotplug;
+	bool deferred_setup;
+	int preferred_bpp;
+};
+
+struct drm_fb_helper_surface_size;
+
+struct drm_fb_helper_funcs {
+	int (*fb_probe)(struct drm_fb_helper *, struct drm_fb_helper_surface_size *);
+	int (*fb_dirty)(struct drm_fb_helper *, struct drm_clip_rect *);
+};
+
+struct drm_fb_helper_surface_size {
+	u32 fb_width;
+	u32 fb_height;
+	u32 surface_width;
+	u32 surface_height;
+	u32 surface_bpp;
+	u32 surface_depth;
+};
+
+struct ewma_psr_time {
+	unsigned long internal;
+};
+
+struct drm_self_refresh_data {
+	struct drm_crtc *crtc;
+	struct delayed_work entry_work;
+	struct mutex avg_mutex;
+	struct ewma_psr_time entry_avg_ms;
+	struct ewma_psr_time exit_avg_ms;
+};
+
+struct panel_bridge {
+	struct drm_bridge bridge;
+	struct drm_connector connector;
+	struct drm_panel *panel;
+	u32 connector_type;
+};
+
+enum {
+	MIPI_DSI_V_SYNC_START = 1,
+	MIPI_DSI_V_SYNC_END = 17,
+	MIPI_DSI_H_SYNC_START = 33,
+	MIPI_DSI_H_SYNC_END = 49,
+	MIPI_DSI_COMPRESSION_MODE = 7,
+	MIPI_DSI_END_OF_TRANSMISSION = 8,
+	MIPI_DSI_COLOR_MODE_OFF = 2,
+	MIPI_DSI_COLOR_MODE_ON = 18,
+	MIPI_DSI_SHUTDOWN_PERIPHERAL = 34,
+	MIPI_DSI_TURN_ON_PERIPHERAL = 50,
+	MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM = 3,
+	MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM = 19,
+	MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM = 35,
+	MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM = 4,
+	MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM = 20,
+	MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM = 36,
+	MIPI_DSI_DCS_SHORT_WRITE = 5,
+	MIPI_DSI_DCS_SHORT_WRITE_PARAM = 21,
+	MIPI_DSI_DCS_READ = 6,
+	MIPI_DSI_EXECUTE_QUEUE = 22,
+	MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE = 55,
+	MIPI_DSI_NULL_PACKET = 9,
+	MIPI_DSI_BLANKING_PACKET = 25,
+	MIPI_DSI_GENERIC_LONG_WRITE = 41,
+	MIPI_DSI_DCS_LONG_WRITE = 57,
+	MIPI_DSI_PICTURE_PARAMETER_SET = 10,
+	MIPI_DSI_COMPRESSED_PIXEL_STREAM = 11,
+	MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20 = 12,
+	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24 = 28,
+	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16 = 44,
+	MIPI_DSI_PACKED_PIXEL_STREAM_30 = 13,
+	MIPI_DSI_PACKED_PIXEL_STREAM_36 = 29,
+	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12 = 61,
+	MIPI_DSI_PACKED_PIXEL_STREAM_16 = 14,
+	MIPI_DSI_PACKED_PIXEL_STREAM_18 = 30,
+	MIPI_DSI_PIXEL_STREAM_3BYTE_18 = 46,
+	MIPI_DSI_PACKED_PIXEL_STREAM_24 = 62,
+};
+
+enum {
+	MIPI_DCS_NOP = 0,
+	MIPI_DCS_SOFT_RESET = 1,
+	MIPI_DCS_GET_COMPRESSION_MODE = 3,
+	MIPI_DCS_GET_DISPLAY_ID = 4,
+	MIPI_DCS_GET_ERROR_COUNT_ON_DSI = 5,
+	MIPI_DCS_GET_RED_CHANNEL = 6,
+	MIPI_DCS_GET_GREEN_CHANNEL = 7,
+	MIPI_DCS_GET_BLUE_CHANNEL = 8,
+	MIPI_DCS_GET_DISPLAY_STATUS = 9,
+	MIPI_DCS_GET_POWER_MODE = 10,
+	MIPI_DCS_GET_ADDRESS_MODE = 11,
+	MIPI_DCS_GET_PIXEL_FORMAT = 12,
+	MIPI_DCS_GET_DISPLAY_MODE = 13,
+	MIPI_DCS_GET_SIGNAL_MODE = 14,
+	MIPI_DCS_GET_DIAGNOSTIC_RESULT = 15,
+	MIPI_DCS_ENTER_SLEEP_MODE = 16,
+	MIPI_DCS_EXIT_SLEEP_MODE = 17,
+	MIPI_DCS_ENTER_PARTIAL_MODE = 18,
+	MIPI_DCS_ENTER_NORMAL_MODE = 19,
+	MIPI_DCS_GET_IMAGE_CHECKSUM_RGB = 20,
+	MIPI_DCS_GET_IMAGE_CHECKSUM_CT = 21,
+	MIPI_DCS_EXIT_INVERT_MODE = 32,
+	MIPI_DCS_ENTER_INVERT_MODE = 33,
+	MIPI_DCS_SET_GAMMA_CURVE = 38,
+	MIPI_DCS_SET_DISPLAY_OFF = 40,
+	MIPI_DCS_SET_DISPLAY_ON = 41,
+	MIPI_DCS_SET_COLUMN_ADDRESS = 42,
+	MIPI_DCS_SET_PAGE_ADDRESS = 43,
+	MIPI_DCS_WRITE_MEMORY_START = 44,
+	MIPI_DCS_WRITE_LUT = 45,
+	MIPI_DCS_READ_MEMORY_START = 46,
+	MIPI_DCS_SET_PARTIAL_ROWS = 48,
+	MIPI_DCS_SET_PARTIAL_COLUMNS = 49,
+	MIPI_DCS_SET_SCROLL_AREA = 51,
+	MIPI_DCS_SET_TEAR_OFF = 52,
+	MIPI_DCS_SET_TEAR_ON = 53,
+	MIPI_DCS_SET_ADDRESS_MODE = 54,
+	MIPI_DCS_SET_SCROLL_START = 55,
+	MIPI_DCS_EXIT_IDLE_MODE = 56,
+	MIPI_DCS_ENTER_IDLE_MODE = 57,
+	MIPI_DCS_SET_PIXEL_FORMAT = 58,
+	MIPI_DCS_WRITE_MEMORY_CONTINUE = 60,
+	MIPI_DCS_SET_3D_CONTROL = 61,
+	MIPI_DCS_READ_MEMORY_CONTINUE = 62,
+	MIPI_DCS_GET_3D_CONTROL = 63,
+	MIPI_DCS_SET_VSYNC_TIMING = 64,
+	MIPI_DCS_SET_TEAR_SCANLINE = 68,
+	MIPI_DCS_GET_SCANLINE = 69,
+	MIPI_DCS_SET_DISPLAY_BRIGHTNESS = 81,
+	MIPI_DCS_GET_DISPLAY_BRIGHTNESS = 82,
+	MIPI_DCS_WRITE_CONTROL_DISPLAY = 83,
+	MIPI_DCS_GET_CONTROL_DISPLAY = 84,
+	MIPI_DCS_WRITE_POWER_SAVE = 85,
+	MIPI_DCS_GET_POWER_SAVE = 86,
+	MIPI_DCS_SET_CABC_MIN_BRIGHTNESS = 94,
+	MIPI_DCS_GET_CABC_MIN_BRIGHTNESS = 95,
+	MIPI_DCS_READ_DDB_START = 161,
+	MIPI_DCS_READ_PPS_START = 162,
+	MIPI_DCS_READ_DDB_CONTINUE = 168,
+	MIPI_DCS_READ_PPS_CONTINUE = 169,
+};
+
+enum mipi_dsi_dcs_tear_mode {
+	MIPI_DSI_DCS_TEAR_MODE_VBLANK = 0,
+	MIPI_DSI_DCS_TEAR_MODE_VHBLANK = 1,
+};
+
+struct drm_dsc_rc_range_parameters {
+	u8 range_min_qp;
+	u8 range_max_qp;
+	u8 range_bpg_offset;
+};
+
+struct drm_dsc_config {
+	u8 line_buf_depth;
+	u8 bits_per_component;
+	bool convert_rgb;
+	u8 slice_count;
+	u16 slice_width;
+	u16 slice_height;
+	bool simple_422;
+	u16 pic_width;
+	u16 pic_height;
+	u8 rc_tgt_offset_high;
+	u8 rc_tgt_offset_low;
+	u16 bits_per_pixel;
+	u8 rc_edge_factor;
+	u8 rc_quant_incr_limit1;
+	u8 rc_quant_incr_limit0;
+	u16 initial_xmit_delay;
+	u16 initial_dec_delay;
+	bool block_pred_enable;
+	u8 first_line_bpg_offset;
+	u16 initial_offset;
+	u16 rc_buf_thresh[14];
+	struct drm_dsc_rc_range_parameters rc_range_params[15];
+	u16 rc_model_size;
+	u8 flatness_min_qp;
+	u8 flatness_max_qp;
+	u8 initial_scale_value;
+	u16 scale_decrement_interval;
+	u16 scale_increment_interval;
+	u16 nfl_bpg_offset;
+	u16 slice_bpg_offset;
+	u16 final_offset;
+	bool vbr_enable;
+	u8 mux_word_size;
+	u16 slice_chunk_size;
+	u16 rc_bits;
+	u8 dsc_version_minor;
+	u8 dsc_version_major;
+	bool native_422;
+	bool native_420;
+	u8 second_line_bpg_offset;
+	u16 nsl_bpg_offset;
+	u16 second_line_offset_adj;
+};
+
+struct mipi_dsi_driver {
+	struct device_driver driver;
+	int (*probe)(struct mipi_dsi_device *);
+	void (*remove)(struct mipi_dsi_device *);
+	void (*shutdown)(struct mipi_dsi_device *);
+};
+
+struct mipi_dsi_device_info {
+	char type[20];
+	u32 channel;
+	struct device_node *node;
+};
+
+struct mipi_dsi_packet {
+	size_t size;
+	u8 header[4];
+	size_t payload_length;
+	const u8 *payload;
+};
+
+struct drm_dsc_picture_parameter_set {
+	u8 dsc_version;
+	u8 pps_identifier;
+	u8 pps_reserved;
+	u8 pps_3;
+	u8 pps_4;
+	u8 bits_per_pixel_low;
+	__be16 pic_height;
+	__be16 pic_width;
+	__be16 slice_height;
+	__be16 slice_width;
+	__be16 chunk_size;
+	u8 initial_xmit_delay_high;
+	u8 initial_xmit_delay_low;
+	__be16 initial_dec_delay;
+	u8 pps20_reserved;
+	u8 initial_scale_value;
+	__be16 scale_increment_interval;
+	u8 scale_decrement_interval_high;
+	u8 scale_decrement_interval_low;
+	u8 pps26_reserved;
+	u8 first_line_bpg_offset;
+	__be16 nfl_bpg_offset;
+	__be16 slice_bpg_offset;
+	__be16 initial_offset;
+	__be16 final_offset;
+	u8 flatness_min_qp;
+	u8 flatness_max_qp;
+	__be16 rc_model_size;
+	u8 rc_edge_factor;
+	u8 rc_quant_incr_limit0;
+	u8 rc_quant_incr_limit1;
+	u8 rc_tgt_offset;
+	u8 rc_buf_thresh[14];
+	__be16 rc_range_parameters[15];
+	u8 native_422_420;
+	u8 second_line_bpg_offset;
+	__be16 nsl_bpg_offset;
+	__be16 second_line_offset_adj;
+	u32 pps_long_94_reserved;
+	u32 pps_long_98_reserved;
+	u32 pps_long_102_reserved;
+	u32 pps_long_106_reserved;
+	u32 pps_long_110_reserved;
+	u32 pps_long_114_reserved;
+	u32 pps_long_118_reserved;
+	u32 pps_long_122_reserved;
+	__be16 pps_short_126_reserved;
+} __attribute__((packed));
+
+struct ttm_kmap_iter;
+
+struct ttm_kmap_iter_ops {
+	void (*map_local)(struct ttm_kmap_iter *, struct iosys_map *, unsigned long);
+	void (*unmap_local)(struct ttm_kmap_iter *, struct iosys_map *);
+	bool maps_tt;
+};
+
+struct ttm_kmap_iter {
+	const struct ttm_kmap_iter_ops *ops;
+};
+
+enum ttm_caching {
+	ttm_uncached = 0,
+	ttm_write_combined = 1,
+	ttm_cached = 2,
+};
+
+enum ttm_bo_type {
+	ttm_bo_type_device = 0,
+	ttm_bo_type_kernel = 1,
+	ttm_bo_type_sg = 2,
+};
+
+struct ttm_tt;
+
+struct ttm_kmap_iter_tt {
+	struct ttm_kmap_iter base;
+	struct ttm_tt *tt;
+	pgprot_t prot;
+};
+
+struct ttm_tt {
+	struct page **pages;
+	uint32_t page_flags;
+	uint32_t num_pages;
+	struct sg_table *sg;
+	dma_addr_t *dma_address;
+	struct file *swap_storage;
+	enum ttm_caching caching;
+};
+
+struct ttm_device;
+
+struct ttm_resource;
+
+struct ttm_lru_bulk_move;
+
+struct ttm_buffer_object {
+	struct drm_gem_object base;
+	struct ttm_device *bdev;
+	enum ttm_bo_type type;
+	uint32_t page_alignment;
+	void (*destroy)(struct ttm_buffer_object *);
+	struct kref kref;
+	struct ttm_resource *resource;
+	struct ttm_tt *ttm;
+	bool deleted;
+	struct ttm_lru_bulk_move *bulk_move;
+	unsigned int priority;
+	unsigned int pin_count;
+	struct work_struct delayed_delete;
+	struct sg_table *sg;
+};
+
+struct ttm_resource_manager_func;
+
+struct ttm_resource_manager {
+	bool use_type;
+	bool use_tt;
+	struct ttm_device *bdev;
+	uint64_t size;
+	const struct ttm_resource_manager_func *func;
+	spinlock_t move_lock;
+	struct dma_fence *move;
+	struct list_head lru[4];
+	uint64_t usage;
+};
+
+struct ttm_pool;
+
+struct ttm_pool_type {
+	struct ttm_pool *pool;
+	unsigned int order;
+	enum ttm_caching caching;
+	struct list_head shrinker_list;
+	spinlock_t lock;
+	struct list_head pages;
+};
+
+struct ttm_pool {
+	struct device *dev;
+	int nid;
+	bool use_dma_alloc;
+	bool use_dma32;
+	struct {
+		struct ttm_pool_type orders[11];
+	} caching[3];
+};
+
+struct ttm_device_funcs;
+
+struct ttm_device {
+	struct list_head device_list;
+	const struct ttm_device_funcs *funcs;
+	struct ttm_resource_manager sysman;
+	struct ttm_resource_manager *man_drv[8];
+	struct drm_vma_offset_manager *vma_manager;
+	struct ttm_pool pool;
+	spinlock_t lru_lock;
+	struct list_head pinned;
+	struct address_space *dev_mapping;
+	struct workqueue_struct *wq;
+};
+
+struct ttm_operation_ctx;
+
+struct ttm_place;
+
+struct ttm_placement;
+
+struct ttm_device_funcs {
+	struct ttm_tt * (*ttm_tt_create)(struct ttm_buffer_object *, uint32_t);
+	int (*ttm_tt_populate)(struct ttm_device *, struct ttm_tt *, struct ttm_operation_ctx *);
+	void (*ttm_tt_unpopulate)(struct ttm_device *, struct ttm_tt *);
+	void (*ttm_tt_destroy)(struct ttm_device *, struct ttm_tt *);
+	bool (*eviction_valuable)(struct ttm_buffer_object *, const struct ttm_place *);
+	void (*evict_flags)(struct ttm_buffer_object *, struct ttm_placement *);
+	int (*move)(struct ttm_buffer_object *, bool, struct ttm_operation_ctx *, struct ttm_resource *, struct ttm_place *);
+	void (*delete_mem_notify)(struct ttm_buffer_object *);
+	void (*swap_notify)(struct ttm_buffer_object *);
+	int (*io_mem_reserve)(struct ttm_device *, struct ttm_resource *);
+	void (*io_mem_free)(struct ttm_device *, struct ttm_resource *);
+	unsigned long (*io_mem_pfn)(struct ttm_buffer_object *, unsigned long);
+	int (*access_memory)(struct ttm_buffer_object *, unsigned long, void *, int, int);
+	void (*release_notify)(struct ttm_buffer_object *);
+};
+
+struct ttm_operation_ctx {
+	bool interruptible;
+	bool no_wait_gpu;
+	bool gfp_retry_mayfail;
+	bool allow_res_evict;
+	bool force_alloc;
+	struct dma_resv *resv;
+	uint64_t bytes_moved;
+};
+
+struct ttm_place {
+	unsigned int fpfn;
+	unsigned int lpfn;
+	uint32_t mem_type;
+	uint32_t flags;
+};
+
+struct ttm_bus_placement {
+	void *addr;
+	phys_addr_t offset;
+	bool is_iomem;
+	enum ttm_caching caching;
+};
+
+struct ttm_resource {
+	unsigned long start;
+	size_t size;
+	uint32_t mem_type;
+	uint32_t placement;
+	struct ttm_bus_placement bus;
+	struct ttm_buffer_object *bo;
+	struct list_head lru;
+};
+
+struct ttm_resource_manager_func {
+	int (*alloc)(struct ttm_resource_manager *, struct ttm_buffer_object *, const struct ttm_place *, struct ttm_resource **);
+	void (*free)(struct ttm_resource_manager *, struct ttm_resource *);
+	bool (*intersects)(struct ttm_resource_manager *, struct ttm_resource *, const struct ttm_place *, size_t);
+	bool (*compatible)(struct ttm_resource_manager *, struct ttm_resource *, const struct ttm_place *, size_t);
+	void (*debug)(struct ttm_resource_manager *, struct drm_printer *);
+};
+
+struct ttm_lru_bulk_move_pos {
+	struct ttm_resource *first;
+	struct ttm_resource *last;
+};
+
+struct ttm_lru_bulk_move {
+	struct ttm_lru_bulk_move_pos pos[32];
+};
+
+struct ttm_placement {
+	unsigned int num_placement;
+	const struct ttm_place *placement;
+	unsigned int num_busy_placement;
+	const struct ttm_place *busy_placement;
+};
+
+struct dma_resv_iter {
+	struct dma_resv *obj;
+	enum dma_resv_usage usage;
+	struct dma_fence *fence;
+	enum dma_resv_usage fence_usage;
+	unsigned int index;
+	struct dma_resv_list *fences;
+	unsigned int num_fences;
+	bool is_restarted;
+};
+
+struct ttm_resource_cursor {
+	unsigned int priority;
+};
+
+struct ttm_bo_kmap_obj {
+	void *virtual;
+	struct page *page;
+	enum {
+		ttm_bo_map_iomap = 129,
+		ttm_bo_map_vmap = 2,
+		ttm_bo_map_kmap = 3,
+		ttm_bo_map_premapped = 132,
+	} bo_kmap_type;
+	struct ttm_buffer_object *bo;
+};
+
+struct ttm_transfer_obj {
+	struct ttm_buffer_object base;
+	struct ttm_buffer_object *bo;
+};
+
+struct ttm_kmap_iter_linear_io {
+	struct ttm_kmap_iter base;
+	struct iosys_map dmap;
+	bool needs_unmap;
+};
+
+struct ttm_validate_buffer {
+	struct list_head head;
+	struct ttm_buffer_object *bo;
+	unsigned int num_shared;
+};
+
+struct ttm_range_mgr_node {
+	struct ttm_resource base;
+	struct drm_mm_node mm_nodes[0];
+};
+
+struct ttm_range_manager {
+	struct ttm_resource_manager manager;
+	struct drm_mm mm;
+	spinlock_t lock;
+};
+
+struct io_mapping;
+
+struct ttm_kmap_iter_iomap {
+	struct ttm_kmap_iter base;
+	struct io_mapping *iomap;
+	struct sg_table *st;
+	resource_size_t start;
+	struct {
+		struct scatterlist *sg;
+		unsigned long i;
+		unsigned long end;
+		unsigned long offs;
+	} cache;
+};
+
+struct io_mapping {
+	resource_size_t base;
+	unsigned long size;
+	pgprot_t prot;
+	void *iomem;
+};
+
+struct ttm_pool_dma {
+	dma_addr_t addr;
+	unsigned long vaddr;
+};
+
+struct ttm_global {
+	struct page *dummy_read_page;
+	struct list_head device_list;
+	atomic_t bo_count;
+};
+
+typedef void (*btf_trace_gpu_mem_total)(void *, uint32_t, uint32_t, uint64_t);
+
+struct trace_event_raw_gpu_mem_total {
+	struct trace_entry ent;
+	uint32_t gpu_id;
+	uint32_t pid;
+	uint64_t size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_gpu_mem_total {};
+
+struct aggregate_device;
+
+struct component {
+	struct list_head node;
+	struct aggregate_device *adev;
+	bool bound;
+	const struct component_ops *ops;
+	int subcomponent;
+	struct device *dev;
+};
+
+struct component_match;
+
+struct aggregate_device {
+	struct list_head node;
+	bool bound;
+	const struct component_master_ops *ops;
+	struct device *parent;
+	struct component_match *match;
+};
+
+struct component_match_array;
+
+struct component_match {
+	size_t alloc;
+	size_t num;
+	struct component_match_array *compare;
+};
+
+struct component_match_array {
+	void *data;
+	int (*compare)(struct device *, void *);
+	int (*compare_typed)(struct device *, int, void *);
+	void (*release)(struct device *, void *);
+	struct component *component;
+	bool duplicate;
+};
+
+struct device_private {
+	struct klist klist_children;
+	struct klist_node knode_parent;
+	struct klist_node knode_driver;
+	struct klist_node knode_bus;
+	struct klist_node knode_class;
+	struct list_head deferred_probe;
+	struct device_driver *async_driver;
+	char *deferred_probe_reason;
+	struct device *device;
+	u8 dead: 1;
+};
+
+struct driver_private {
+	struct kobject kobj;
+	struct klist klist_devices;
+	struct klist_node knode_bus;
+	struct module_kobject *mkobj;
+	struct device_driver *driver;
+};
+
+struct wake_irq {
+	struct device *dev;
+	unsigned int status;
+	int irq;
+	const char *name;
+};
+
+enum dpm_order {
+	DPM_ORDER_NONE = 0,
+	DPM_ORDER_DEV_AFTER_PARENT = 1,
+	DPM_ORDER_PARENT_BEFORE_DEV = 2,
+	DPM_ORDER_DEV_LAST = 3,
+};
+
+struct dev_ext_attribute {
+	struct device_attribute attr;
+	void *var;
+};
+
+struct fwnode_link {
+	struct fwnode_handle *supplier;
+	struct list_head s_hook;
+	struct fwnode_handle *consumer;
+	struct list_head c_hook;
+	u8 flags;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+};
+
+struct class_dir {
+	struct kobject kobj;
+	const struct class *class;
+};
+
+struct root_device {
+	struct device dev;
+	struct module *owner;
+};
+
+struct subsys_private {
+	struct kset subsys;
+	struct kset *devices_kset;
+	struct list_head interfaces;
+	struct mutex mutex;
+	struct kset *drivers_kset;
+	struct klist klist_devices;
+	struct klist klist_drivers;
+	struct blocking_notifier_head bus_notifier;
+	unsigned int drivers_autoprobe: 1;
+	const struct bus_type *bus;
+	struct device *dev_root;
+	struct kset glue_dirs;
+	const struct class *class;
+	struct lock_class_key lock_key;
+};
+
+union device_attr_group_devres {
+	const struct attribute_group *group;
+	const struct attribute_group **groups;
+};
+
+struct subsys_interface {
+	const char *name;
+	struct bus_type *subsys;
+	struct list_head node;
+	int (*add_dev)(struct device *, struct subsys_interface *);
+	void (*remove_dev)(struct device *, struct subsys_interface *);
+};
+
+struct subsys_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+};
+
+struct device_attach_data {
+	struct device *dev;
+	bool check_async;
+	bool want_async;
+	bool have_async;
+};
+
+struct class_compat {
+	struct kobject *kobj;
+};
+
+struct platform_object {
+	struct platform_device pdev;
+	char name[0];
+};
+
+struct irq_affinity_devres {
+	unsigned int count;
+	unsigned int irq[0];
+};
+
+struct cpu_attr {
+	struct device_attribute attr;
+	const struct cpumask * const map;
+};
+
+struct probe;
+
+struct kobj_map {
+	struct probe *probes[255];
+	struct mutex *lock;
+};
+
+struct probe {
+	struct probe *next;
+	dev_t dev;
+	unsigned long range;
+	struct module *owner;
+	kobj_probe_t *get;
+	int (*lock)(dev_t, void *);
+	void *data;
+};
+
+struct devres_node {
+	struct list_head entry;
+	dr_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct devres {
+	struct devres_node node;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u8 data[0];
+};
+
+struct devres_group {
+	struct devres_node node[2];
+	void *id;
+	int color;
+};
+
+struct action_devres {
+	void *data;
+	void (*action)(void *);
+};
+
+struct pages_devres {
+	unsigned long addr;
+	unsigned int order;
+};
+
+struct attribute_container;
+
+struct internal_container {
+	struct klist_node node;
+	struct attribute_container *cont;
+	struct device classdev;
+};
+
+struct attribute_container {
+	struct list_head node;
+	struct klist containers;
+	struct class *class;
+	const struct attribute_group *grp;
+	struct device_attribute **attrs;
+	int (*match)(struct attribute_container *, struct device *);
+	unsigned long flags;
+};
+
+struct transport_container;
+
+struct transport_class {
+	struct class class;
+	int (*setup)(struct transport_container *, struct device *, struct device *);
+	int (*configure)(struct transport_container *, struct device *, struct device *);
+	int (*remove)(struct transport_container *, struct device *, struct device *);
+};
+
+struct transport_container {
+	struct attribute_container ac;
+	const struct attribute_group *statistics;
+};
+
+struct anon_transport_class {
+	struct transport_class tclass;
+	struct attribute_container container;
+};
+
+struct container_dev {
+	struct device dev;
+	int (*offline)(struct container_dev *);
+};
+
+typedef enum {
+	PHY_INTERFACE_MODE_NA = 0,
+	PHY_INTERFACE_MODE_INTERNAL = 1,
+	PHY_INTERFACE_MODE_MII = 2,
+	PHY_INTERFACE_MODE_GMII = 3,
+	PHY_INTERFACE_MODE_SGMII = 4,
+	PHY_INTERFACE_MODE_TBI = 5,
+	PHY_INTERFACE_MODE_REVMII = 6,
+	PHY_INTERFACE_MODE_RMII = 7,
+	PHY_INTERFACE_MODE_REVRMII = 8,
+	PHY_INTERFACE_MODE_RGMII = 9,
+	PHY_INTERFACE_MODE_RGMII_ID = 10,
+	PHY_INTERFACE_MODE_RGMII_RXID = 11,
+	PHY_INTERFACE_MODE_RGMII_TXID = 12,
+	PHY_INTERFACE_MODE_RTBI = 13,
+	PHY_INTERFACE_MODE_SMII = 14,
+	PHY_INTERFACE_MODE_XGMII = 15,
+	PHY_INTERFACE_MODE_XLGMII = 16,
+	PHY_INTERFACE_MODE_MOCA = 17,
+	PHY_INTERFACE_MODE_PSGMII = 18,
+	PHY_INTERFACE_MODE_QSGMII = 19,
+	PHY_INTERFACE_MODE_TRGMII = 20,
+	PHY_INTERFACE_MODE_100BASEX = 21,
+	PHY_INTERFACE_MODE_1000BASEX = 22,
+	PHY_INTERFACE_MODE_2500BASEX = 23,
+	PHY_INTERFACE_MODE_5GBASER = 24,
+	PHY_INTERFACE_MODE_RXAUI = 25,
+	PHY_INTERFACE_MODE_XAUI = 26,
+	PHY_INTERFACE_MODE_10GBASER = 27,
+	PHY_INTERFACE_MODE_25GBASER = 28,
+	PHY_INTERFACE_MODE_USXGMII = 29,
+	PHY_INTERFACE_MODE_10GKR = 30,
+	PHY_INTERFACE_MODE_QUSGMII = 31,
+	PHY_INTERFACE_MODE_1000BASEKX = 32,
+	PHY_INTERFACE_MODE_MAX = 33,
+} phy_interface_t;
+
+typedef void * (*devcon_match_fn_t)(const struct fwnode_handle *, const char *, void *);
+
+struct cache_type_info {
+	const char *size_prop;
+	const char *line_size_props[2];
+	const char *nr_sets_prop;
+};
+
+struct swnode {
+	struct kobject kobj;
+	struct fwnode_handle fwnode;
+	const struct software_node *node;
+	int id;
+	struct ida child_ids;
+	struct list_head entry;
+	struct list_head children;
+	struct swnode *parent;
+	unsigned int allocated: 1;
+	unsigned int managed: 1;
+};
+
+struct software_node_ref_args {
+	const struct software_node *node;
+	unsigned int nargs;
+	u64 args[8];
+};
+
+struct auxiliary_device;
+
+struct auxiliary_device_id;
+
+struct auxiliary_driver {
+	int (*probe)(struct auxiliary_device *, const struct auxiliary_device_id *);
+	void (*remove)(struct auxiliary_device *);
+	void (*shutdown)(struct auxiliary_device *);
+	int (*suspend)(struct auxiliary_device *, pm_message_t);
+	int (*resume)(struct auxiliary_device *);
+	const char *name;
+	struct device_driver driver;
+	const struct auxiliary_device_id *id_table;
+};
+
+struct auxiliary_device {
+	struct device dev;
+	const char *name;
+	u32 id;
+};
+
+struct auxiliary_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+struct dev_pm_domain_attach_data {
+	const char * const *pd_names;
+	const u32 num_pd_names;
+	const u32 pd_flags;
+};
+
+struct dev_pm_domain_list {
+	struct device **pd_devs;
+	struct device_link **pd_links;
+	u32 num_pds;
+};
+
+enum pm_qos_flags_status {
+	PM_QOS_FLAGS_UNDEFINED = -1,
+	PM_QOS_FLAGS_NONE = 0,
+	PM_QOS_FLAGS_SOME = 1,
+	PM_QOS_FLAGS_ALL = 2,
+};
+
+typedef int (*pm_callback_t)(struct device *);
+
+struct suspend_stats {
+	int success;
+	int fail;
+	int failed_freeze;
+	int failed_prepare;
+	int failed_suspend;
+	int failed_suspend_late;
+	int failed_suspend_noirq;
+	int failed_resume;
+	int failed_resume_early;
+	int failed_resume_noirq;
+	int last_failed_dev;
+	char failed_devs[80];
+	int last_failed_errno;
+	int errno[2];
+	int last_failed_step;
+	u64 last_hw_sleep;
+	u64 total_hw_sleep;
+	u64 max_hw_sleep;
+	enum suspend_stat_step failed_steps[2];
+};
+
+enum genpd_notication {
+	GENPD_NOTIFY_PRE_OFF = 0,
+	GENPD_NOTIFY_OFF = 1,
+	GENPD_NOTIFY_PRE_ON = 2,
+	GENPD_NOTIFY_ON = 3,
+};
+
+struct gpd_link {
+	struct generic_pm_domain *parent;
+	struct list_head parent_node;
+	struct generic_pm_domain *child;
+	struct list_head child_node;
+	unsigned int performance_state;
+	unsigned int prev_performance_state;
+};
+
+struct of_genpd_provider {
+	struct list_head link;
+	struct device_node *node;
+	genpd_xlate_t xlate;
+	void *data;
+};
+
+struct gpd_timing_data;
+
+struct generic_pm_domain_data {
+	struct pm_domain_data base;
+	struct gpd_timing_data *td;
+	struct notifier_block nb;
+	struct notifier_block *power_nb;
+	int cpu;
+	unsigned int performance_state;
+	unsigned int default_pstate;
+	unsigned int rpm_pstate;
+	void *data;
+};
+
+struct gpd_timing_data {
+	s64 suspend_latency_ns;
+	s64 resume_latency_ns;
+	s64 effective_constraint_ns;
+	ktime_t next_wakeup;
+	bool constraint_changed;
+	bool cached_suspend_ok;
+};
+
+enum pce_status {
+	PCE_STATUS_NONE = 0,
+	PCE_STATUS_ACQUIRED = 1,
+	PCE_STATUS_PREPARED = 2,
+	PCE_STATUS_ENABLED = 3,
+	PCE_STATUS_ERROR = 4,
+};
+
+struct pm_clock_entry {
+	struct list_head node;
+	char *con_id;
+	struct clk *clk;
+	enum pce_status status;
+	bool enabled_when_prepared;
+};
+
+struct pm_clk_notifier_block {
+	struct notifier_block nb;
+	struct dev_pm_domain *pm_domain;
+	char *con_ids[0];
+};
+
+struct firmware_fallback_config {
+	unsigned int force_sysfs_fallback;
+	unsigned int ignore_sysfs_fallback;
+	int old_timeout;
+	int loading_timeout;
+};
+
+struct firmware_cache {
+	spinlock_t lock;
+	struct list_head head;
+	int state;
+};
+
+enum fw_status {
+	FW_STATUS_UNKNOWN = 0,
+	FW_STATUS_LOADING = 1,
+	FW_STATUS_DONE = 2,
+	FW_STATUS_ABORTED = 3,
+};
+
+enum fw_opt {
+	FW_OPT_UEVENT = 1,
+	FW_OPT_NOWAIT = 2,
+	FW_OPT_USERHELPER = 4,
+	FW_OPT_NO_WARN = 8,
+	FW_OPT_NOCACHE = 16,
+	FW_OPT_NOFALLBACK_SYSFS = 32,
+	FW_OPT_FALLBACK_PLATFORM = 64,
+	FW_OPT_PARTIAL = 128,
+};
+
+struct fw_state {
+	struct completion completion;
+	enum fw_status status;
+};
+
+struct fw_priv {
+	struct kref ref;
+	struct list_head list;
+	struct firmware_cache *fwc;
+	struct fw_state fw_st;
+	void *data;
+	size_t size;
+	size_t allocated_size;
+	size_t offset;
+	u32 opt_flags;
+	bool is_paged_buf;
+	struct page **pages;
+	int nr_pages;
+	int page_array_size;
+	bool need_uevent;
+	struct list_head pending_list;
+	const char *fw_name;
+};
+
+struct firmware;
+
+struct firmware_work {
+	struct work_struct work;
+	struct module *module;
+	const char *name;
+	struct device *device;
+	void *context;
+	void (*cont)(const struct firmware *, void *);
+	u32 opt_flags;
+};
+
+struct firmware {
+	size_t size;
+	const u8 *data;
+	void *priv;
+};
+
+struct fw_sysfs {
+	bool nowait;
+	struct device dev;
+	struct fw_priv *fw_priv;
+	struct firmware *fw;
+	void *fw_upload_priv;
+};
+
+struct builtin_fw {
+	char *name;
+	void *data;
+	unsigned long size;
+};
+
+struct for_each_memory_block_cb_data {
+	walk_memory_blocks_func_t func;
+	void *arg;
+};
+
+typedef void (*btf_trace_regmap_reg_write)(void *, struct regmap *, unsigned int, unsigned int);
+
+struct regmap_format {
+	size_t buf_size;
+	size_t reg_bytes;
+	size_t pad_bytes;
+	size_t val_bytes;
+	s8 reg_shift;
+	void (*format_write)(struct regmap *, unsigned int, unsigned int);
+	void (*format_reg)(void *, unsigned int, unsigned int);
+	void (*format_val)(void *, unsigned int, unsigned int);
+	unsigned int (*parse_val)(const void *);
+	void (*parse_inplace)(void *);
+};
+
+struct regcache_ops;
+
+struct reg_sequence;
+
+struct hwspinlock;
+
+struct regmap {
+	union {
+		struct mutex mutex;
+		struct {
+			spinlock_t spinlock;
+			unsigned long spinlock_flags;
+		};
+		struct {
+			raw_spinlock_t raw_spinlock;
+			unsigned long raw_spinlock_flags;
+		};
+	};
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	gfp_t alloc_flags;
+	unsigned int reg_base;
+	struct device *dev;
+	void *work_buf;
+	struct regmap_format format;
+	const struct regmap_bus *bus;
+	void *bus_context;
+	const char *name;
+	bool async;
+	spinlock_t async_lock;
+	wait_queue_head_t async_waitq;
+	struct list_head async_list;
+	struct list_head async_free;
+	int async_ret;
+	bool debugfs_disable;
+	struct dentry *debugfs;
+	const char *debugfs_name;
+	unsigned int debugfs_reg_len;
+	unsigned int debugfs_val_len;
+	unsigned int debugfs_tot_len;
+	struct list_head debugfs_off_cache;
+	struct mutex cache_lock;
+	unsigned int max_register;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	bool defer_caching;
+	unsigned long read_flag_mask;
+	unsigned long write_flag_mask;
+	int reg_shift;
+	int reg_stride;
+	int reg_stride_order;
+	bool force_write_field;
+	const struct regcache_ops *cache_ops;
+	enum regcache_type cache_type;
+	unsigned int cache_size_raw;
+	unsigned int cache_word_size;
+	unsigned int num_reg_defaults;
+	unsigned int num_reg_defaults_raw;
+	bool cache_only;
+	bool cache_bypass;
+	bool cache_free;
+	struct reg_default *reg_defaults;
+	const void *reg_defaults_raw;
+	void *cache;
+	bool cache_dirty;
+	bool no_sync_defaults;
+	struct reg_sequence *patch;
+	int patch_regs;
+	bool use_single_read;
+	bool use_single_write;
+	bool can_multi_write;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	struct rb_root range_tree;
+	void *selector_work_buf;
+	struct hwspinlock *hwlock;
+	bool can_sleep;
+};
+
+struct regmap_async {
+	struct list_head list;
+	struct regmap *map;
+	void *work_buf;
+};
+
+struct regcache_ops {
+	const char *name;
+	enum regcache_type type;
+	int (*init)(struct regmap *);
+	int (*exit)(struct regmap *);
+	void (*debugfs_init)(struct regmap *);
+	int (*read)(struct regmap *, unsigned int, unsigned int *);
+	int (*write)(struct regmap *, unsigned int, unsigned int);
+	int (*sync)(struct regmap *, unsigned int, unsigned int);
+	int (*drop)(struct regmap *, unsigned int, unsigned int);
+};
+
+struct reg_sequence {
+	unsigned int reg;
+	unsigned int def;
+	unsigned int delay_us;
+};
+
+typedef void (*btf_trace_regmap_reg_read)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_bulk_write)(void *, struct regmap *, unsigned int, const void *, int);
+
+typedef void (*btf_trace_regmap_bulk_read)(void *, struct regmap *, unsigned int, const void *, int);
+
+typedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regcache_sync)(void *, struct regmap *, const char *, const char *);
+
+typedef void (*btf_trace_regmap_cache_only)(void *, struct regmap *, bool);
+
+typedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap *, bool);
+
+typedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap *);
+
+typedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap *);
+
+typedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap *);
+
+typedef void (*btf_trace_regcache_drop_region)(void *, struct regmap *, unsigned int, unsigned int);
+
+struct trace_event_raw_regmap_reg {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	unsigned int val;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_bulk {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	u32 __data_loc_buf;
+	int val_len;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_block {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	int count;
+	char __data[0];
+};
+
+struct trace_event_raw_regcache_sync {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_status;
+	u32 __data_loc_type;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_bool {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int flag;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_async {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_regcache_drop_region {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int from;
+	unsigned int to;
+	char __data[0];
+};
+
+struct regmap_range_node {
+	struct rb_node node;
+	const char *name;
+	struct regmap *map;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
+};
+
+struct trace_event_data_offsets_regmap_reg {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_bulk {
+	u32 name;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_regmap_block {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_bool {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_async {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regcache_drop_region {
+	u32 name;
+};
+
+struct regmap_field {
+	struct regmap *regmap;
+	unsigned int mask;
+	unsigned int shift;
+	unsigned int reg;
+	unsigned int id_size;
+	unsigned int id_offset;
+};
+
+struct reg_field {
+	unsigned int reg;
+	unsigned int lsb;
+	unsigned int msb;
+	unsigned int id_size;
+	unsigned int id_offset;
+};
+
+struct trace_event_data_offsets_regcache_sync {
+	u32 name;
+	u32 status;
+	u32 type;
+};
+
+struct regcache_rbtree_node {
+	void *block;
+	unsigned long *cache_present;
+	unsigned int base_reg;
+	unsigned int blklen;
+	struct rb_node node;
+};
+
+struct regcache_rbtree_ctx {
+	struct rb_root root;
+	struct regcache_rbtree_node *cached_rbnode;
+};
+
+struct regmap_debugfs_node {
+	struct regmap *map;
+	struct list_head link;
+};
+
+struct regmap_debugfs_off_cache {
+	struct list_head list;
+	off_t min;
+	off_t max;
+	unsigned int base_reg;
+	unsigned int max_reg;
+};
+
+struct spi_delay {
+	u16 value;
+	u8 unit;
+};
+
+struct spi_controller;
+
+struct spi_statistics;
+
+struct spi_device {
+	struct device dev;
+	struct spi_controller *controller;
+	struct spi_controller *master;
+	u32 max_speed_hz;
+	u8 chip_select;
+	u8 bits_per_word;
+	bool rt;
+	u32 mode;
+	int irq;
+	void *controller_state;
+	void *controller_data;
+	char modalias[32];
+	const char *driver_override;
+	struct gpio_desc *cs_gpiod;
+	struct spi_delay word_delay;
+	struct spi_delay cs_setup;
+	struct spi_delay cs_hold;
+	struct spi_delay cs_inactive;
+	struct spi_statistics __attribute__((btf_type_tag("percpu"))) *pcpu_statistics;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct spi_message;
+
+struct spi_transfer;
+
+struct spi_controller_mem_ops;
+
+struct spi_controller_mem_caps;
+
+struct spi_controller {
+	struct device dev;
+	struct list_head list;
+	s16 bus_num;
+	u16 num_chipselect;
+	u16 dma_alignment;
+	u32 mode_bits;
+	u32 buswidth_override_bits;
+	u32 bits_per_word_mask;
+	u32 min_speed_hz;
+	u32 max_speed_hz;
+	u16 flags;
+	bool devm_allocated;
+	union {
+		bool slave;
+		bool target;
+	};
+	size_t (*max_transfer_size)(struct spi_device *);
+	size_t (*max_message_size)(struct spi_device *);
+	struct mutex io_mutex;
+	struct mutex add_lock;
+	spinlock_t bus_lock_spinlock;
+	struct mutex bus_lock_mutex;
+	bool bus_lock_flag;
+	int (*setup)(struct spi_device *);
+	int (*set_cs_timing)(struct spi_device *);
+	int (*transfer)(struct spi_device *, struct spi_message *);
+	void (*cleanup)(struct spi_device *);
+	bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	struct device *dma_map_dev;
+	struct device *cur_rx_dma_dev;
+	struct device *cur_tx_dma_dev;
+	bool queued;
+	struct kthread_worker *kworker;
+	struct kthread_work pump_messages;
+	spinlock_t queue_lock;
+	struct list_head queue;
+	struct spi_message *cur_msg;
+	struct completion cur_msg_completion;
+	bool cur_msg_incomplete;
+	bool cur_msg_need_completion;
+	bool busy;
+	bool running;
+	bool rt;
+	bool auto_runtime_pm;
+	bool cur_msg_mapped;
+	char last_cs;
+	bool last_cs_mode_high;
+	bool fallback;
+	struct completion xfer_completion;
+	size_t max_dma_len;
+	int (*prepare_transfer_hardware)(struct spi_controller *);
+	int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_transfer_hardware)(struct spi_controller *);
+	int (*prepare_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_message)(struct spi_controller *, struct spi_message *);
+	union {
+		int (*slave_abort)(struct spi_controller *);
+		int (*target_abort)(struct spi_controller *);
+	};
+	void (*set_cs)(struct spi_device *, bool);
+	int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	void (*handle_err)(struct spi_controller *, struct spi_message *);
+	const struct spi_controller_mem_ops *mem_ops;
+	const struct spi_controller_mem_caps *mem_caps;
+	struct gpio_desc **cs_gpiods;
+	bool use_gpio_descriptors;
+	s8 unused_native_cs;
+	s8 max_native_cs;
+	struct spi_statistics __attribute__((btf_type_tag("percpu"))) *pcpu_statistics;
+	struct dma_chan *dma_tx;
+	struct dma_chan *dma_rx;
+	void *dummy_rx;
+	void *dummy_tx;
+	int (*fw_translate_cs)(struct spi_controller *, unsigned int);
+	bool ptp_sts_supported;
+	unsigned long irq_flags;
+	bool queue_empty;
+	bool must_async;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct ptp_system_timestamp;
+
+struct spi_transfer {
+	const void *tx_buf;
+	void *rx_buf;
+	unsigned int len;
+	u16 error;
+	dma_addr_t tx_dma;
+	dma_addr_t rx_dma;
+	struct sg_table tx_sg;
+	struct sg_table rx_sg;
+	unsigned int dummy_data: 1;
+	unsigned int cs_off: 1;
+	unsigned int cs_change: 1;
+	unsigned int tx_nbits: 3;
+	unsigned int rx_nbits: 3;
+	unsigned int timestamped: 1;
+	u8 bits_per_word;
+	struct spi_delay delay;
+	struct spi_delay cs_change_delay;
+	struct spi_delay word_delay;
+	u32 speed_hz;
+	u32 effective_speed_hz;
+	unsigned int ptp_sts_word_pre;
+	unsigned int ptp_sts_word_post;
+	struct ptp_system_timestamp *ptp_sts;
+	struct list_head transfer_list;
+	u64 android_kabi_reserved1;
+};
+
+struct spi_message {
+	struct list_head transfers;
+	struct spi_device *spi;
+	unsigned int is_dma_mapped: 1;
+	bool prepared;
+	int status;
+	void (*complete)(void *);
+	void *context;
+	unsigned int frame_length;
+	unsigned int actual_length;
+	struct list_head queue;
+	void *state;
+	struct list_head resources;
+	u64 android_kabi_reserved1;
+	struct spi_transfer t[0];
+};
+
+struct spi_mem;
+
+struct spi_mem_op;
+
+struct spi_mem_dirmap_desc;
+
+struct spi_controller_mem_ops {
+	int (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);
+	bool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);
+	int (*exec_op)(struct spi_mem *, const struct spi_mem_op *);
+	const char * (*get_name)(struct spi_mem *);
+	int (*dirmap_create)(struct spi_mem_dirmap_desc *);
+	void (*dirmap_destroy)(struct spi_mem_dirmap_desc *);
+	ssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);
+	ssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);
+	int (*poll_status)(struct spi_mem *, const struct spi_mem_op *, u16, u16, unsigned long, unsigned long, unsigned long);
+};
+
+struct spi_controller_mem_caps {
+	bool dtr;
+	bool ecc;
+};
+
+struct spi_statistics {
+	struct u64_stats_sync syncp;
+	u64_stats_t messages;
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t timedout;
+	u64_stats_t spi_sync;
+	u64_stats_t spi_sync_immediate;
+	u64_stats_t spi_async;
+	u64_stats_t bytes;
+	u64_stats_t bytes_rx;
+	u64_stats_t bytes_tx;
+	u64_stats_t transfer_bytes_histo[17];
+	u64_stats_t transfers_split_maxsize;
+};
+
+struct regmap_async_spi {
+	struct regmap_async core;
+	struct spi_message m;
+	struct spi_transfer t[2];
+};
+
+struct spmi_controller;
+
+struct spmi_device {
+	struct device dev;
+	struct spmi_controller *ctrl;
+	u8 usid;
+};
+
+struct spmi_controller {
+	struct device dev;
+	unsigned int nr;
+	int (*cmd)(struct spmi_controller *, u8, u8);
+	int (*read_cmd)(struct spmi_controller *, u8, u8, u16, u8 *, size_t);
+	int (*write_cmd)(struct spmi_controller *, u8, u8, u16, const u8 *, size_t);
+	u64 android_kabi_reserved1;
+};
+
+struct regmap_mmio_context {
+	void *regs;
+	unsigned int val_bytes;
+	bool big_endian;
+	bool attached_clk;
+	struct clk *clk;
+	void (*reg_write)(struct regmap_mmio_context *, unsigned int, unsigned int);
+	unsigned int (*reg_read)(struct regmap_mmio_context *, unsigned int);
+};
+
+struct regmap_irq_chip;
+
+struct regmap_irq_chip_data {
+	struct mutex lock;
+	struct irq_chip irq_chip;
+	struct regmap *map;
+	const struct regmap_irq_chip *chip;
+	int irq_base;
+	struct irq_domain *domain;
+	int irq;
+	int wake_count;
+	void *status_reg_buf;
+	unsigned int *main_status_buf;
+	unsigned int *status_buf;
+	unsigned int *mask_buf;
+	unsigned int *mask_buf_def;
+	unsigned int *wake_buf;
+	unsigned int *type_buf;
+	unsigned int *type_buf_def;
+	unsigned int **config_buf;
+	unsigned int irq_reg_stride;
+	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *, unsigned int, int);
+	unsigned int clear_status: 1;
+};
+
+struct regmap_irq_sub_irq_map;
+
+struct regmap_irq;
+
+struct regmap_irq_chip {
+	const char *name;
+	unsigned int main_status;
+	unsigned int num_main_status_bits;
+	struct regmap_irq_sub_irq_map *sub_reg_offsets;
+	int num_main_regs;
+	unsigned int status_base;
+	unsigned int mask_base;
+	unsigned int unmask_base;
+	unsigned int ack_base;
+	unsigned int wake_base;
+	const unsigned int *config_base;
+	unsigned int irq_reg_stride;
+	unsigned int init_ack_masked: 1;
+	unsigned int mask_unmask_non_inverted: 1;
+	unsigned int use_ack: 1;
+	unsigned int ack_invert: 1;
+	unsigned int clear_ack: 1;
+	unsigned int status_invert: 1;
+	unsigned int wake_invert: 1;
+	unsigned int type_in_mask: 1;
+	unsigned int clear_on_unmask: 1;
+	unsigned int runtime_pm: 1;
+	unsigned int no_status: 1;
+	int num_regs;
+	const struct regmap_irq *irqs;
+	int num_irqs;
+	int num_config_bases;
+	int num_config_regs;
+	int (*handle_pre_irq)(void *);
+	int (*handle_post_irq)(void *);
+	int (*handle_mask_sync)(int, unsigned int, unsigned int, void *);
+	int (*set_type_config)(unsigned int **, unsigned int, const struct regmap_irq *, int, void *);
+	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *, unsigned int, int);
+	void *irq_drv_data;
+};
+
+struct regmap_irq_sub_irq_map {
+	unsigned int num_regs;
+	unsigned int *offset;
+};
+
+struct regmap_irq_type {
+	unsigned int type_reg_offset;
+	unsigned int type_reg_mask;
+	unsigned int type_rising_val;
+	unsigned int type_falling_val;
+	unsigned int type_level_low_val;
+	unsigned int type_level_high_val;
+	unsigned int types_supported;
+};
+
+struct regmap_irq {
+	unsigned int reg_offset;
+	unsigned int mask;
+	struct regmap_irq_type type;
+};
+
+struct soc_device {
+	struct device dev;
+	struct soc_device_attribute *attr;
+	int soc_dev_num;
+};
+
+struct devcd_entry {
+	struct device devcd_dev;
+	void *data;
+	size_t datalen;
+	struct mutex mutex;
+	bool delete_work;
+	struct module *owner;
+	ssize_t (*read)(char *, loff_t, size_t, void *, size_t);
+	void (*free)(void *);
+	struct delayed_work del_wk;
+	struct device *failing_dev;
+};
+
+struct platform_msi_priv_data {
+	struct device *dev;
+	void *host_data;
+	msi_alloc_info_t arg;
+	irq_write_msi_msg_t write_msg;
+	int devid;
+};
+
+typedef void (*btf_trace_thermal_pressure_update)(void *, int, unsigned long);
+
+struct cpu_topology {
+	int thread_id;
+	int core_id;
+	int cluster_id;
+	int package_id;
+	cpumask_t thread_sibling;
+	cpumask_t core_sibling;
+	cpumask_t cluster_sibling;
+	cpumask_t llc_sibling;
+};
+
+struct trace_event_raw_thermal_pressure_update {
+	struct trace_entry ent;
+	unsigned long thermal_pressure;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_thermal_pressure_update {};
+
+typedef void (*btf_trace_devres_log)(void *, struct device *, const char *, void *, const char *, size_t);
+
+struct trace_event_raw_devres {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	struct device *dev;
+	const char *op;
+	void *node;
+	const char *name;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devres {
+	u32 devname;
+};
+
+struct brd_device {
+	int brd_number;
+	struct gendisk *brd_disk;
+	struct list_head brd_list;
+	struct xarray brd_pages;
+	u64 brd_nr_pages;
+};
+
+enum {
+	Lo_unbound = 0,
+	Lo_bound = 1,
+	Lo_rundown = 2,
+	Lo_deleting = 3,
+};
+
+enum {
+	LO_FLAGS_READ_ONLY = 1,
+	LO_FLAGS_AUTOCLEAR = 4,
+	LO_FLAGS_PARTSCAN = 8,
+	LO_FLAGS_DIRECT_IO = 16,
+};
+
+struct loop_device {
+	int lo_number;
+	loff_t lo_offset;
+	loff_t lo_sizelimit;
+	int lo_flags;
+	char lo_file_name[64];
+	struct file *lo_backing_file;
+	struct block_device *lo_device;
+	gfp_t old_gfp_mask;
+	spinlock_t lo_lock;
+	int lo_state;
+	spinlock_t lo_work_lock;
+	struct workqueue_struct *workqueue;
+	struct work_struct rootcg_work;
+	struct list_head rootcg_cmd_list;
+	struct list_head idle_worker_list;
+	struct rb_root worker_tree;
+	struct timer_list timer;
+	bool use_dio;
+	bool sysfs_inited;
+	struct request_queue *lo_queue;
+	struct blk_mq_tag_set tag_set;
+	struct gendisk *lo_disk;
+	struct mutex lo_mutex;
+	bool idr_visible;
+};
+
+struct loop_worker {
+	struct rb_node rb_node;
+	struct work_struct work;
+	struct list_head cmd_list;
+	struct list_head idle_list;
+	struct loop_device *lo;
+	struct cgroup_subsys_state *blkcg_css;
+	unsigned long last_ran_at;
+};
+
+struct loop_cmd {
+	struct list_head list_entry;
+	bool use_aio;
+	atomic_t ref;
+	long ret;
+	struct kiocb iocb;
+	struct bio_vec *bvec;
+	struct cgroup_subsys_state *blkcg_css;
+	struct cgroup_subsys_state *memcg_css;
+};
+
+struct compat_loop_info {
+	compat_int_t lo_number;
+	compat_dev_t lo_device;
+	compat_ulong_t lo_inode;
+	compat_dev_t lo_rdevice;
+	compat_int_t lo_offset;
+	compat_int_t lo_encrypt_type;
+	compat_int_t lo_encrypt_key_size;
+	compat_int_t lo_flags;
+	char lo_name[64];
+	unsigned char lo_encrypt_key[32];
+	compat_ulong_t lo_init[2];
+	char reserved[4];
+};
+
+typedef unsigned int __kernel_old_dev_t;
+
+struct loop_info {
+	int lo_number;
+	__kernel_old_dev_t lo_device;
+	unsigned long lo_inode;
+	__kernel_old_dev_t lo_rdevice;
+	int lo_offset;
+	int lo_encrypt_type;
+	int lo_encrypt_key_size;
+	int lo_flags;
+	char lo_name[64];
+	unsigned char lo_encrypt_key[32];
+	unsigned long lo_init[2];
+	char reserved[4];
+};
+
+struct loop_info64 {
+	__u64 lo_device;
+	__u64 lo_inode;
+	__u64 lo_rdevice;
+	__u64 lo_offset;
+	__u64 lo_sizelimit;
+	__u32 lo_number;
+	__u32 lo_encrypt_type;
+	__u32 lo_encrypt_key_size;
+	__u32 lo_flags;
+	__u8 lo_file_name[64];
+	__u8 lo_crypt_name[64];
+	__u8 lo_encrypt_key[32];
+	__u64 lo_init[2];
+};
+
+struct loop_config {
+	__u32 fd;
+	__u32 block_size;
+	struct loop_info64 info;
+	__u64 __reserved[8];
+};
+
+struct ublk_io {
+	__u64 addr;
+	unsigned int flags;
+	int res;
+	struct io_uring_cmd *cmd;
+};
+
+struct ublk_device;
+
+struct ublk_queue {
+	int q_id;
+	int q_depth;
+	unsigned long flags;
+	struct task_struct *ubq_daemon;
+	char *io_cmd_buf;
+	struct llist_head io_cmds;
+	unsigned long io_addr;
+	unsigned int max_io_sz;
+	bool force_abort;
+	bool timeout;
+	unsigned short nr_io_ready;
+	spinlock_t cancel_lock;
+	struct ublk_device *dev;
+	struct ublk_io ios[0];
+};
+
+struct ublksrv_ctrl_dev_info {
+	__u16 nr_hw_queues;
+	__u16 queue_depth;
+	__u16 state;
+	__u16 pad0;
+	__u32 max_io_buf_bytes;
+	__u32 dev_id;
+	__s32 ublksrv_pid;
+	__u32 pad1;
+	__u64 flags;
+	__u64 ublksrv_flags;
+	__u32 owner_uid;
+	__u32 owner_gid;
+	__u64 reserved1;
+	__u64 reserved2;
+};
+
+struct ublk_param_basic {
+	__u32 attrs;
+	__u8 logical_bs_shift;
+	__u8 physical_bs_shift;
+	__u8 io_opt_shift;
+	__u8 io_min_shift;
+	__u32 max_sectors;
+	__u32 chunk_sectors;
+	__u64 dev_sectors;
+	__u64 virt_boundary_mask;
+};
+
+struct ublk_param_discard {
+	__u32 discard_alignment;
+	__u32 discard_granularity;
+	__u32 max_discard_sectors;
+	__u32 max_write_zeroes_sectors;
+	__u16 max_discard_segments;
+	__u16 reserved0;
+};
+
+struct ublk_param_devt {
+	__u32 char_major;
+	__u32 char_minor;
+	__u32 disk_major;
+	__u32 disk_minor;
+};
+
+struct ublk_param_zoned {
+	__u32 max_open_zones;
+	__u32 max_active_zones;
+	__u32 max_zone_append_sectors;
+	__u8 reserved[20];
+};
+
+struct ublk_params {
+	__u32 len;
+	__u32 types;
+	struct ublk_param_basic basic;
+	struct ublk_param_discard discard;
+	struct ublk_param_devt devt;
+	struct ublk_param_zoned zoned;
+};
+
+struct ublk_device {
+	struct gendisk *ub_disk;
+	char *__queues;
+	unsigned int queue_size;
+	struct ublksrv_ctrl_dev_info dev_info;
+	struct blk_mq_tag_set tag_set;
+	struct cdev cdev;
+	struct device cdev_dev;
+	unsigned long state;
+	int ub_number;
+	struct mutex mutex;
+	spinlock_t mm_lock;
+	struct mm_struct *mm;
+	struct ublk_params params;
+	struct completion completion;
+	unsigned int nr_queues_ready;
+	unsigned int nr_privileged_daemon;
+	struct delayed_work monitor_work;
+	struct work_struct quiesce_work;
+	struct work_struct stop_work;
+};
+
+struct ublksrv_ctrl_cmd {
+	__u32 dev_id;
+	__u16 queue_id;
+	__u16 len;
+	__u64 addr;
+	__u64 data[1];
+	__u16 dev_path_len;
+	__u16 pad;
+	__u32 reserved;
+};
+
+struct ublk_rq_data {
+	struct llist_node node;
+	struct kref ref;
+	__u64 sector;
+	__u32 operation;
+	__u32 nr_zones;
+};
+
+struct ublksrv_io_desc {
+	__u32 op_flags;
+	union {
+		__u32 nr_sectors;
+		__u32 nr_zones;
+	};
+	__u64 start_sector;
+	__u64 addr;
+};
+
+struct ublk_uring_cmd_pdu {
+	struct ublk_queue *ubq;
+};
+
+struct ublk_io_iter {
+	struct page *pages[32];
+	struct bio *bio;
+	struct bvec_iter iter;
+};
+
+struct ublksrv_io_cmd {
+	__u16 q_id;
+	__u16 tag;
+	__s32 result;
+	union {
+		__u64 addr;
+		__u64 zone_append_lba;
+	};
+};
+
+struct ublk_params_header {
+	__u32 len;
+	__u32 types;
+};
+
+struct sram_config {
+	int (*init)();
+	bool map_only_reserved;
+};
+
+struct sram_reserve {
+	struct list_head list;
+	u32 start;
+	u32 size;
+	struct resource res;
+	bool export;
+	bool pool;
+	bool protect_exec;
+	const char *label;
+};
+
+struct sram_partition {
+	void *base;
+	struct gen_pool *pool;
+	struct bin_attribute battr;
+	struct mutex lock;
+	struct list_head list;
+};
+
+struct sram_dev {
+	const struct sram_config *config;
+	struct device *dev;
+	void *virt_base;
+	bool no_memory_wc;
+	struct gen_pool *pool;
+	struct sram_partition *partition;
+	u32 partitions;
+};
+
+struct io_stats {
+	u64 read_bytes;
+	u64 write_bytes;
+	u64 rchar;
+	u64 wchar;
+	u64 fsync;
+};
+
+struct uid_entry {
+	uid_t uid;
+	u64 utime;
+	u64 stime;
+	int state;
+	struct io_stats io[4];
+	struct hlist_node hash;
+};
+
+struct update_stats_work {
+	uid_t uid;
+	struct task_io_accounting ioac;
+	u64 utime;
+	u64 stime;
+	struct llist_node node;
+};
+
+struct task_entry {
+	char comm[256];
+	pid_t pid;
+	struct io_stats io[4];
+	struct hlist_node hash;
+};
+
+struct mfd_cell_acpi_match;
+
+struct mfd_cell {
+	const char *name;
+	int id;
+	int level;
+	int (*suspend)(struct platform_device *);
+	int (*resume)(struct platform_device *);
+	void *platform_data;
+	size_t pdata_size;
+	const struct mfd_cell_acpi_match *acpi_match;
+	const struct software_node *swnode;
+	const char *of_compatible;
+	u64 of_reg;
+	bool use_of_reg;
+	int num_resources;
+	const struct resource *resources;
+	bool ignore_resource_conflicts;
+	bool pm_runtime_no_callbacks;
+	int num_parent_supplies;
+	const char * const *parent_supplies;
+};
+
+struct mfd_cell_acpi_match {
+	const char *pnpid;
+	const unsigned long long adr;
+};
+
+struct mfd_of_node_entry {
+	struct list_head list;
+	struct device *dev;
+	struct device_node *np;
+};
+
+struct syscon {
+	struct device_node *np;
+	struct regmap *regmap;
+	struct reset_control *reset;
+	struct list_head list;
+};
+
+struct syscon_platform_data {
+	const char *label;
+};
+
+enum nvdimm_passphrase_type {
+	NVDIMM_USER = 0,
+	NVDIMM_MASTER = 1,
+};
+
+enum nvdimm_fwa_state {
+	NVDIMM_FWA_INVALID = 0,
+	NVDIMM_FWA_IDLE = 1,
+	NVDIMM_FWA_ARMED = 2,
+	NVDIMM_FWA_BUSY = 3,
+	NVDIMM_FWA_ARM_OVERFLOW = 4,
+};
+
+enum nvdimm_fwa_result {
+	NVDIMM_FWA_RESULT_INVALID = 0,
+	NVDIMM_FWA_RESULT_NONE = 1,
+	NVDIMM_FWA_RESULT_SUCCESS = 2,
+	NVDIMM_FWA_RESULT_NOTSTAGED = 3,
+	NVDIMM_FWA_RESULT_NEEDRESET = 4,
+	NVDIMM_FWA_RESULT_FAIL = 5,
+};
+
+enum nvdimm_fwa_trigger {
+	NVDIMM_FWA_ARM = 0,
+	NVDIMM_FWA_DISARM = 1,
+};
+
+enum nvdimm_fwa_capability {
+	NVDIMM_FWA_CAP_INVALID = 0,
+	NVDIMM_FWA_CAP_NONE = 1,
+	NVDIMM_FWA_CAP_QUIESCE = 2,
+	NVDIMM_FWA_CAP_LIVE = 3,
+};
+
+enum {
+	ND_CMD_IMPLEMENTED = 0,
+	ND_CMD_ARS_CAP = 1,
+	ND_CMD_ARS_START = 2,
+	ND_CMD_ARS_STATUS = 3,
+	ND_CMD_CLEAR_ERROR = 4,
+	ND_CMD_SMART = 1,
+	ND_CMD_SMART_THRESHOLD = 2,
+	ND_CMD_DIMM_FLAGS = 3,
+	ND_CMD_GET_CONFIG_SIZE = 4,
+	ND_CMD_GET_CONFIG_DATA = 5,
+	ND_CMD_SET_CONFIG_DATA = 6,
+	ND_CMD_VENDOR_EFFECT_LOG_SIZE = 7,
+	ND_CMD_VENDOR_EFFECT_LOG = 8,
+	ND_CMD_VENDOR = 9,
+	ND_CMD_CALL = 10,
+};
+
+struct nvdimm_bus;
+
+struct nvdimm_map {
+	struct nvdimm_bus *nvdimm_bus;
+	struct list_head list;
+	resource_size_t offset;
+	unsigned long flags;
+	size_t size;
+	union {
+		void *mem;
+		void *iomem;
+	};
+	struct kref kref;
+};
+
+struct badrange {
+	struct list_head list;
+	spinlock_t lock;
+};
+
+struct nvdimm_bus_descriptor;
+
+struct nvdimm_bus {
+	struct nvdimm_bus_descriptor *nd_desc;
+	wait_queue_head_t wait;
+	struct list_head list;
+	struct device dev;
+	int id;
+	int probe_active;
+	atomic_t ioctl_active;
+	struct list_head mapping_list;
+	struct mutex reconfig_mutex;
+	struct badrange badrange;
+};
+
+struct nvdimm;
+
+typedef int (*ndctl_fn)(struct nvdimm_bus_descriptor *, struct nvdimm *, unsigned int, void *, unsigned int, int *);
+
+struct nvdimm_bus_fw_ops;
+
+struct nvdimm_bus_descriptor {
+	const struct attribute_group **attr_groups;
+	unsigned long cmd_mask;
+	unsigned long dimm_family_mask;
+	unsigned long bus_family_mask;
+	struct module *module;
+	char *provider_name;
+	struct device_node *of_node;
+	ndctl_fn ndctl;
+	int (*flush_probe)(struct nvdimm_bus_descriptor *);
+	int (*clear_to_send)(struct nvdimm_bus_descriptor *, struct nvdimm *, unsigned int, void *);
+	const struct nvdimm_bus_fw_ops *fw_ops;
+};
+
+struct nvdimm_security_ops;
+
+struct nvdimm_fw_ops;
+
+struct nvdimm {
+	unsigned long flags;
+	void *provider_data;
+	unsigned long cmd_mask;
+	struct device dev;
+	atomic_t busy;
+	int id;
+	int num_flush;
+	struct resource *flush_wpq;
+	const char *dimm_id;
+	struct {
+		const struct nvdimm_security_ops *ops;
+		unsigned long flags;
+		unsigned long ext_flags;
+		unsigned int overwrite_tmo;
+		struct kernfs_node *overwrite_state;
+	} sec;
+	struct delayed_work dwork;
+	const struct nvdimm_fw_ops *fw_ops;
+};
+
+struct nvdimm_key_data;
+
+struct nvdimm_security_ops {
+	unsigned long (*get_flags)(struct nvdimm *, enum nvdimm_passphrase_type);
+	int (*freeze)(struct nvdimm *);
+	int (*change_key)(struct nvdimm *, const struct nvdimm_key_data *, const struct nvdimm_key_data *, enum nvdimm_passphrase_type);
+	int (*unlock)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*disable)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*erase)(struct nvdimm *, const struct nvdimm_key_data *, enum nvdimm_passphrase_type);
+	int (*overwrite)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*query_overwrite)(struct nvdimm *);
+	int (*disable_master)(struct nvdimm *, const struct nvdimm_key_data *);
+};
+
+struct nvdimm_key_data {
+	u8 data[32];
+};
+
+struct nvdimm_fw_ops {
+	enum nvdimm_fwa_state (*activate_state)(struct nvdimm *);
+	enum nvdimm_fwa_result (*activate_result)(struct nvdimm *);
+	int (*arm)(struct nvdimm *, enum nvdimm_fwa_trigger);
+};
+
+struct nvdimm_bus_fw_ops {
+	enum nvdimm_fwa_state (*activate_state)(struct nvdimm_bus_descriptor *);
+	enum nvdimm_fwa_capability (*capability)(struct nvdimm_bus_descriptor *);
+	int (*activate)(struct nvdimm_bus_descriptor *);
+};
+
+struct nd_cmd_desc {
+	int in_num;
+	int out_num;
+	u32 in_sizes[5];
+	int out_sizes[5];
+};
+
+enum nvdimm_event {
+	NVDIMM_REVALIDATE_POISON = 0,
+	NVDIMM_REVALIDATE_REGION = 1,
+};
+
+struct nd_device_driver {
+	struct device_driver drv;
+	unsigned long type;
+	int (*probe)(struct device *);
+	void (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+	void (*notify)(struct device *, enum nvdimm_event);
+};
+
+enum nd_async_mode {
+	ND_SYNC = 0,
+	ND_ASYNC = 1,
+};
+
+enum nd_ioctl_mode {
+	BUS_IOCTL = 0,
+	DIMM_IOCTL = 1,
+};
+
+enum {
+	NDD_UNARMED = 1,
+	NDD_LOCKED = 2,
+	NDD_SECURITY_OVERWRITE = 3,
+	NDD_WORK_PENDING = 4,
+	NDD_LABELING = 6,
+	NDD_INCOHERENT = 7,
+	NDD_REGISTER_SYNC = 8,
+	ND_IOCTL_MAX_BUFLEN = 4194304,
+	ND_CMD_MAX_ELEM = 5,
+	ND_CMD_MAX_ENVELOPE = 256,
+	ND_MAX_MAPPINGS = 32,
+	ND_REGION_PAGEMAP = 0,
+	ND_REGION_PERSIST_CACHE = 1,
+	ND_REGION_PERSIST_MEMCTRL = 2,
+	ND_REGION_ASYNC = 3,
+	ND_REGION_CXL = 4,
+	DPA_RESOURCE_ADJUSTED = 1,
+};
+
+enum nvdimm_claim_class {
+	NVDIMM_CCLASS_NONE = 0,
+	NVDIMM_CCLASS_BTT = 1,
+	NVDIMM_CCLASS_BTT2 = 2,
+	NVDIMM_CCLASS_PFN = 3,
+	NVDIMM_CCLASS_DAX = 4,
+	NVDIMM_CCLASS_UNKNOWN = 5,
+};
+
+enum nd_pfn_mode {
+	PFN_MODE_NONE = 0,
+	PFN_MODE_RAM = 1,
+	PFN_MODE_PMEM = 2,
+};
+
+struct nd_cmd_pkg {
+	__u64 nd_family;
+	__u64 nd_command;
+	__u32 nd_size_in;
+	__u32 nd_size_out;
+	__u32 nd_reserved2[9];
+	__u32 nd_fw_size;
+	unsigned char nd_payload[0];
+};
+
+struct nd_cmd_clear_error {
+	__u64 address;
+	__u64 length;
+	__u32 status;
+	__u8 reserved[4];
+	__u64 cleared;
+};
+
+struct nd_namespace_common {
+	int force_raw;
+	struct device dev;
+	struct device *claim;
+	enum nvdimm_claim_class claim_class;
+	int (*rw_bytes)(struct nd_namespace_common *, resource_size_t, void *, size_t, int, unsigned long);
+};
+
+struct nd_namespace_io {
+	struct nd_namespace_common common;
+	struct resource res;
+	resource_size_t size;
+	void *addr;
+	struct badblocks bb;
+};
+
+struct badrange_entry {
+	u64 start;
+	u64 length;
+	struct list_head list;
+};
+
+struct clear_badblocks_context {
+	resource_size_t phys;
+	resource_size_t cleared;
+};
+
+struct nvdimm_drvdata;
+
+struct nd_mapping {
+	struct nvdimm *nvdimm;
+	u64 start;
+	u64 size;
+	int position;
+	struct list_head labels;
+	struct mutex lock;
+	struct nvdimm_drvdata *ndd;
+};
+
+struct nd_interleave_set;
+
+struct nd_percpu_lane;
+
+struct nd_region {
+	struct device dev;
+	struct ida ns_ida;
+	struct ida btt_ida;
+	struct ida pfn_ida;
+	struct ida dax_ida;
+	unsigned long flags;
+	struct device *ns_seed;
+	struct device *btt_seed;
+	struct device *pfn_seed;
+	struct device *dax_seed;
+	unsigned long align;
+	u16 ndr_mappings;
+	u64 ndr_size;
+	u64 ndr_start;
+	int id;
+	int num_lanes;
+	int ro;
+	int numa_node;
+	int target_node;
+	void *provider_data;
+	struct kernfs_node *bb_state;
+	struct badblocks bb;
+	struct nd_interleave_set *nd_set;
+	struct nd_percpu_lane __attribute__((btf_type_tag("percpu"))) *lane;
+	int (*flush)(struct nd_region *, struct bio *);
+	struct nd_mapping mapping[0];
+};
+
+struct nd_interleave_set {
+	u64 cookie1;
+	u64 cookie2;
+	u64 altcookie;
+	guid_t type_guid;
+};
+
+struct nd_percpu_lane {
+	int count;
+	spinlock_t lock;
+};
+
+struct nd_cmd_get_config_size {
+	__u32 status;
+	__u32 config_size;
+	__u32 max_xfer;
+};
+
+struct nvdimm_drvdata {
+	struct device *dev;
+	int nslabel_size;
+	struct nd_cmd_get_config_size nsarea;
+	void *data;
+	bool cxl;
+	int ns_current;
+	int ns_next;
+	struct resource dpa;
+	struct kref kref;
+};
+
+struct nd_cmd_vendor_hdr {
+	__u32 opcode;
+	__u32 in_length;
+	__u8 in_buf[0];
+};
+
+struct nd_cmd_set_config_hdr {
+	__u32 in_offset;
+	__u32 in_length;
+	__u8 in_buf[0];
+};
+
+struct btt;
+
+struct nd_btt {
+	struct device dev;
+	struct nd_namespace_common *ndns;
+	struct btt *btt;
+	unsigned long lbasize;
+	u64 size;
+	uuid_t *uuid;
+	int id;
+	int initial_offset;
+	u16 version_major;
+	u16 version_minor;
+};
+
+struct nd_cmd_ars_cap {
+	__u64 address;
+	__u64 length;
+	__u32 status;
+	__u32 max_ars_out;
+	__u32 clear_err_unit;
+	__u16 flags;
+	__u16 reserved;
+};
+
+struct nd_pfn_sb;
+
+struct nd_pfn {
+	int id;
+	uuid_t *uuid;
+	struct device dev;
+	unsigned long align;
+	unsigned long npfns;
+	enum nd_pfn_mode mode;
+	struct nd_pfn_sb *pfn_sb;
+	struct nd_namespace_common *ndns;
+};
+
+struct nd_pfn_sb {
+	u8 signature[16];
+	u8 uuid[16];
+	u8 parent_uuid[16];
+	__le32 flags;
+	__le16 version_major;
+	__le16 version_minor;
+	__le64 dataoff;
+	__le64 npfns;
+	__le32 mode;
+	__le32 start_pad;
+	__le32 end_trunc;
+	__le32 align;
+	__le32 page_size;
+	__le16 page_struct_size;
+	u8 padding[3994];
+	__le64 checksum;
+};
+
+struct nd_dax {
+	struct nd_pfn nd_pfn;
+};
+
+enum nvdimm_security_bits {
+	NVDIMM_SECURITY_DISABLED = 0,
+	NVDIMM_SECURITY_UNLOCKED = 1,
+	NVDIMM_SECURITY_LOCKED = 2,
+	NVDIMM_SECURITY_FROZEN = 3,
+	NVDIMM_SECURITY_OVERWRITE = 4,
+};
+
+struct nd_cmd_get_config_data_hdr {
+	__u32 in_offset;
+	__u32 in_length;
+	__u32 status;
+	__u8 out_buf[0];
+};
+
+struct nd_label_id {
+	char id[50];
+};
+
+struct nvdimm_pmu {
+	struct pmu pmu;
+	struct device *dev;
+	int cpu;
+	struct hlist_node node;
+	enum cpuhp_state cpuhp_state;
+	struct cpumask arch_cpumask;
+};
+
+enum {
+	ND_MAX_LANES = 256,
+	INT_LBASIZE_ALIGNMENT = 64,
+	NVDIMM_IO_ATOMIC = 1,
+};
+
+struct nd_namespace_label;
+
+struct nd_label_ent {
+	struct list_head list;
+	unsigned long flags;
+	struct nd_namespace_label *label;
+};
+
+struct nvdimm_cxl_label {
+	u8 type[16];
+	u8 uuid[16];
+	u8 name[64];
+	__le32 flags;
+	__le16 nrange;
+	__le16 position;
+	__le64 dpa;
+	__le64 rawsize;
+	__le32 slot;
+	__le32 align;
+	u8 region_uuid[16];
+	u8 abstraction_uuid[16];
+	__le16 lbasize;
+	u8 reserved[86];
+	__le64 checksum;
+};
+
+struct nvdimm_efi_label {
+	u8 uuid[16];
+	u8 name[64];
+	__le32 flags;
+	__le16 nlabel;
+	__le16 position;
+	__le64 isetcookie;
+	__le64 lbasize;
+	__le64 dpa;
+	__le64 rawsize;
+	__le32 slot;
+	u8 align;
+	u8 reserved[3];
+	guid_t type_guid;
+	guid_t abstraction_guid;
+	u8 reserved2[88];
+	__le64 checksum;
+};
+
+struct nd_namespace_label {
+	union {
+		struct nvdimm_cxl_label cxl;
+		struct nvdimm_efi_label efi;
+	};
+};
+
+struct nd_region_data {
+	int ns_count;
+	int ns_active;
+	unsigned int hints_shift;
+	void *flush_wpq[0];
+};
+
+struct nd_namespace_index {
+	u8 sig[16];
+	u8 flags[3];
+	u8 labelsize;
+	__le32 seq;
+	__le64 myoff;
+	__le64 mysize;
+	__le64 otheroff;
+	__le64 labeloff;
+	__le32 nslot;
+	__le16 major;
+	__le16 minor;
+	__le64 checksum;
+	u8 free[0];
+};
+
+struct nd_mapping_desc;
+
+struct nd_region_desc {
+	struct resource *res;
+	struct nd_mapping_desc *mapping;
+	u16 num_mappings;
+	const struct attribute_group **attr_groups;
+	struct nd_interleave_set *nd_set;
+	void *provider_data;
+	int num_lanes;
+	int numa_node;
+	int target_node;
+	unsigned long flags;
+	int memregion;
+	struct device_node *of_node;
+	int (*flush)(struct nd_region *, struct bio *);
+};
+
+struct nd_mapping_desc {
+	struct nvdimm *nvdimm;
+	u64 start;
+	u64 size;
+	int position;
+};
+
+struct conflict_context {
+	struct nd_region *nd_region;
+	resource_size_t start;
+	resource_size_t size;
+};
+
+enum {
+	ND_MIN_NAMESPACE_SIZE = 4096,
+};
+
+enum alloc_loc {
+	ALLOC_ERR = 0,
+	ALLOC_BEFORE = 1,
+	ALLOC_MID = 2,
+	ALLOC_AFTER = 3,
+};
+
+enum nd_label_flags {
+	ND_LABEL_REAP = 0,
+};
+
+enum {
+	NSINDEX_SIG_LEN = 16,
+	NSINDEX_ALIGN = 256,
+	NSINDEX_SEQ_MASK = 3,
+	NSLABEL_UUID_LEN = 16,
+	NSLABEL_NAME_LEN = 64,
+	NSLABEL_FLAG_ROLABEL = 1,
+	NSLABEL_FLAG_LOCAL = 2,
+	NSLABEL_FLAG_BTT = 4,
+	NSLABEL_FLAG_UPDATING = 8,
+	BTT_ALIGN = 4096,
+	BTTINFO_SIG_LEN = 16,
+	BTTINFO_UUID_LEN = 16,
+	BTTINFO_FLAG_ERROR = 1,
+	BTTINFO_MAJOR_VERSION = 1,
+	ND_LABEL_MIN_SIZE = 1024,
+	ND_LABEL_ID_SIZE = 50,
+	ND_NSINDEX_INIT = 1,
+};
+
+struct nd_namespace_pmem {
+	struct nd_namespace_io nsio;
+	unsigned long lbasize;
+	char *alt_name;
+	uuid_t *uuid;
+	int id;
+};
+
+struct btt {
+	struct gendisk *btt_disk;
+	struct list_head arena_list;
+	struct dentry *debugfs_dir;
+	struct nd_btt *nd_btt;
+	u64 nlba;
+	unsigned long long rawsize;
+	u32 lbasize;
+	u32 sector_size;
+	struct nd_region *nd_region;
+	struct mutex init_lock;
+	int init_state;
+	int num_arenas;
+	struct badblocks *phys_bb;
+};
+
+struct nd_gen_sb {
+	char reserved[4088];
+	__le64 checksum;
+};
+
+struct btt_sb {
+	u8 signature[16];
+	u8 uuid[16];
+	u8 parent_uuid[16];
+	__le32 flags;
+	__le16 version_major;
+	__le16 version_minor;
+	__le32 external_lbasize;
+	__le32 external_nlba;
+	__le32 internal_lbasize;
+	__le32 internal_nlba;
+	__le32 nfree;
+	__le32 infosize;
+	__le64 nextoff;
+	__le64 dataoff;
+	__le64 mapoff;
+	__le64 logoff;
+	__le64 info2off;
+	u8 padding[3968];
+	__le64 checksum;
+};
+
+enum dax_access_mode {
+	DAX_ACCESS = 0,
+	DAX_RECOVERY_WRITE = 1,
+};
+
+struct dax_operations {
+	long (*direct_access)(struct dax_device *, unsigned long, long, enum dax_access_mode, void **, pfn_t *);
+	bool (*dax_supported)(struct dax_device *, struct block_device *, int, sector_t, sector_t);
+	int (*zero_page_range)(struct dax_device *, unsigned long, size_t);
+	size_t (*recovery_write)(struct dax_device *, unsigned long, void *, size_t, struct iov_iter *);
+};
+
+struct pmem_device {
+	phys_addr_t phys_addr;
+	phys_addr_t data_offset;
+	u64 pfn_flags;
+	void *virt_addr;
+	size_t size;
+	u32 pfn_pad;
+	struct kernfs_node *bb_state;
+	struct badblocks bb;
+	struct dax_device *dax_dev;
+	struct gendisk *disk;
+	struct dev_pagemap pgmap;
+};
+
+enum btt_init_state {
+	INIT_UNCHECKED = 0,
+	INIT_NOTFOUND = 1,
+	INIT_READY = 2,
+};
+
+enum log_ent_request {
+	LOG_NEW_ENT = 0,
+	LOG_OLD_ENT = 1,
+};
+
+struct free_entry;
+
+struct aligned_lock;
+
+struct arena_info {
+	u64 size;
+	u64 external_lba_start;
+	u32 internal_nlba;
+	u32 internal_lbasize;
+	u32 external_nlba;
+	u32 external_lbasize;
+	u32 nfree;
+	u16 version_major;
+	u16 version_minor;
+	u32 sector_size;
+	u64 nextoff;
+	u64 infooff;
+	u64 dataoff;
+	u64 mapoff;
+	u64 logoff;
+	u64 info2off;
+	struct free_entry *freelist;
+	u32 *rtt;
+	struct aligned_lock *map_locks;
+	struct nd_btt *nd_btt;
+	struct list_head list;
+	struct dentry *debugfs_dir;
+	u32 flags;
+	struct mutex err_lock;
+	int log_index[2];
+};
+
+struct free_entry {
+	u32 block;
+	u8 sub;
+	u8 seq;
+	u8 has_err;
+};
+
+struct aligned_lock {
+	union {
+		spinlock_t lock;
+		u8 cacheline_padding[64];
+	};
+};
+
+struct log_entry {
+	__le32 lba;
+	__le32 old_map;
+	__le32 new_map;
+	__le32 seq;
+};
+
+struct log_group {
+	struct log_entry ent[4];
+};
+
+struct bio_integrity_payload {
+	struct bio *bip_bio;
+	struct bvec_iter bip_iter;
+	unsigned short bip_vcnt;
+	unsigned short bip_max_vcnt;
+	unsigned short bip_flags;
+	int: 0;
+	struct bvec_iter bio_iter;
+	struct work_struct bip_work;
+	struct bio_vec *bip_vec;
+	struct bio_vec bip_inline_vecs[0];
+};
+
+struct of_pmem_private {
+	struct nvdimm_bus_descriptor bus_desc;
+	struct nvdimm_bus *bus;
+};
+
+enum dax_device_flags {
+	DAXDEV_ALIVE = 0,
+	DAXDEV_WRITE_CACHE = 1,
+	DAXDEV_SYNC = 2,
+	DAXDEV_NOCACHE = 3,
+	DAXDEV_NOMC = 4,
+};
+
+struct dax_holder_operations;
+
+struct dax_device {
+	struct inode inode;
+	struct cdev cdev;
+	void *private;
+	unsigned long flags;
+	const struct dax_operations *ops;
+	void *holder_data;
+	const struct dax_holder_operations *holder_ops;
+};
+
+struct dax_holder_operations {
+	int (*notify_failure)(struct dax_device *, u64, u64, int);
+};
+
+enum dax_driver_type {
+	DAXDRV_KMEM_TYPE = 0,
+	DAXDRV_DEVICE_TYPE = 1,
+};
+
+enum id_action {
+	ID_REMOVE = 0,
+	ID_ADD = 1,
+};
+
+struct dax_id {
+	struct list_head list;
+	char dev_name[30];
+};
+
+struct dax_region;
+
+struct dev_dax_range;
+
+struct dev_dax {
+	struct dax_region *region;
+	struct dax_device *dax_dev;
+	unsigned int align;
+	int target_node;
+	bool dyn_id;
+	int id;
+	struct ida ida;
+	struct device dev;
+	struct dev_pagemap *pgmap;
+	int nr_range;
+	struct dev_dax_range *ranges;
+};
+
+struct dax_region {
+	int id;
+	int target_node;
+	struct kref kref;
+	struct device *dev;
+	unsigned int align;
+	struct ida ida;
+	struct resource res;
+	struct device *seed;
+	struct device *youngest;
+};
+
+struct dax_mapping;
+
+struct dev_dax_range {
+	unsigned long pgoff;
+	struct range range;
+	struct dax_mapping *mapping;
+};
+
+struct dax_mapping {
+	struct device dev;
+	int range_id;
+	int id;
+};
+
+struct dax_device_driver {
+	struct device_driver drv;
+	struct list_head ids;
+	enum dax_driver_type type;
+	int (*probe)(struct dev_dax *);
+	void (*remove)(struct dev_dax *);
+};
+
+struct dev_dax_data {
+	struct dax_region *dax_region;
+	struct dev_pagemap *pgmap;
+	resource_size_t size;
+	int id;
+};
+
+struct dma_buf_list {
+	struct list_head head;
+	struct mutex lock;
+};
+
+struct dma_buf_import_sync_file {
+	__u32 flags;
+	__s32 fd;
+};
+
+struct dma_buf_export_sync_file {
+	__u32 flags;
+	__s32 fd;
+};
+
+struct dma_buf_sync {
+	__u64 flags;
+};
+
+typedef void (*btf_trace_dma_fence_emit)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_init)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_destroy)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_enable_signal)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_signaled)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_wait_start)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_wait_end)(void *, struct dma_fence *);
+
+struct trace_event_raw_dma_fence {
+	struct trace_entry ent;
+	u32 __data_loc_driver;
+	u32 __data_loc_timeline;
+	unsigned int context;
+	unsigned int seqno;
+	char __data[0];
+};
+
+struct default_wait_cb {
+	struct dma_fence_cb base;
+	struct task_struct *task;
+};
+
+struct trace_event_data_offsets_dma_fence {
+	u32 driver;
+	u32 timeline;
+};
+
+struct dma_fence_array;
+
+struct dma_fence_array_cb {
+	struct dma_fence_cb cb;
+	struct dma_fence_array *array;
+};
+
+struct dma_fence_array {
+	struct dma_fence base;
+	spinlock_t lock;
+	unsigned int num_fences;
+	atomic_t num_pending;
+	struct dma_fence **fences;
+	struct irq_work work;
+};
+
+struct dma_heap_ops;
+
+struct dma_heap {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+	dev_t heap_devt;
+	struct list_head list;
+	struct cdev heap_cdev;
+	struct kref refcount;
+	struct device *heap_dev;
+};
+
+struct dma_heap_ops {
+	struct dma_buf * (*allocate)(struct dma_heap *, unsigned long, u32, u64);
+	long (*get_pool_size)(struct dma_heap *);
+};
+
+struct dma_heap_allocation_data {
+	__u64 len;
+	__u32 fd;
+	__u32 fd_flags;
+	__u64 heap_flags;
+};
+
+struct dma_heap_export_info {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+};
+
+enum df_reason {
+	DF_NORMAL = 0,
+	DF_UNDER_PRESSURE = 1,
+};
+
+struct deferred_freelist_item {
+	size_t nr_pages;
+	void (*free)(struct deferred_freelist_item *, enum df_reason);
+	struct list_head list;
+};
+
+enum {
+	POOL_LOWPAGE = 0,
+	POOL_HIGHPAGE = 1,
+	POOL_TYPE_SIZE = 2,
+};
+
+struct dmabuf_page_pool {
+	int count[2];
+	struct list_head items[2];
+	spinlock_t lock;
+	gfp_t gfp_mask;
+	unsigned int order;
+	struct list_head list;
+};
+
+struct sync_merge_data {
+	char name[32];
+	__s32 fd2;
+	__s32 fence;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct sync_file_info {
+	char name[32];
+	__s32 status;
+	__u32 flags;
+	__u32 num_fences;
+	__u32 pad;
+	__u64 sync_fence_info;
+};
+
+struct sync_fence_info {
+	char obj_name[32];
+	char driver_name[32];
+	__s32 status;
+	__u32 flags;
+	__u64 timestamp_ns;
+};
+
+struct dma_buf_stats_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dma_buf *, struct dma_buf_stats_attribute *, char *);
+};
+
+struct scsi_cmnd;
+
+typedef void (*btf_trace_scsi_dispatch_cmd_start)(void *, struct scsi_cmnd *);
+
+enum scsi_cmnd_submitter {
+	SUBMITTED_BY_BLOCK_LAYER = 0,
+	SUBMITTED_BY_SCSI_ERROR_HANDLER = 1,
+	SUBMITTED_BY_SCSI_RESET_IOCTL = 2,
+} __attribute__((mode(byte)));
+
+struct scsi_data_buffer {
+	struct sg_table table;
+	unsigned int length;
+};
+
+struct scsi_device;
+
+struct scsi_cmnd {
+	struct scsi_device *device;
+	struct list_head eh_entry;
+	struct delayed_work abort_work;
+	struct callback_head rcu;
+	int eh_eflags;
+	int budget_token;
+	unsigned long jiffies_at_alloc;
+	int retries;
+	int allowed;
+	unsigned char prot_op;
+	unsigned char prot_type;
+	unsigned char prot_flags;
+	enum scsi_cmnd_submitter submitter;
+	unsigned short cmd_len;
+	enum dma_data_direction sc_data_direction;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scsi_data_buffer *prot_sdb;
+	unsigned int underflow;
+	unsigned int transfersize;
+	unsigned int resid_len;
+	unsigned int sense_len;
+	unsigned char *sense_buffer;
+	int flags;
+	unsigned long state;
+	unsigned int extra_len;
+	unsigned char *host_scribble;
+	int result;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef __u64 blist_flags_t;
+
+enum scsi_device_state {
+	SDEV_CREATED = 1,
+	SDEV_RUNNING = 2,
+	SDEV_CANCEL = 3,
+	SDEV_DEL = 4,
+	SDEV_QUIESCE = 5,
+	SDEV_OFFLINE = 6,
+	SDEV_TRANSPORT_OFFLINE = 7,
+	SDEV_BLOCK = 8,
+	SDEV_CREATED_BLOCK = 9,
+};
+
+struct Scsi_Host;
+
+struct scsi_vpd;
+
+struct scsi_target;
+
+struct scsi_device_handler;
+
+struct scsi_device {
+	struct Scsi_Host *host;
+	struct request_queue *request_queue;
+	struct list_head siblings;
+	struct list_head same_target_siblings;
+	struct sbitmap budget_map;
+	atomic_t device_blocked;
+	atomic_t restarts;
+	spinlock_t list_lock;
+	struct list_head starved_entry;
+	unsigned short queue_depth;
+	unsigned short max_queue_depth;
+	unsigned short last_queue_full_depth;
+	unsigned short last_queue_full_count;
+	unsigned long last_queue_full_time;
+	unsigned long queue_ramp_up_period;
+	unsigned long last_queue_ramp_up;
+	unsigned int id;
+	unsigned int channel;
+	u64 lun;
+	unsigned int manufacturer;
+	unsigned int sector_size;
+	void *hostdata;
+	unsigned char type;
+	char scsi_level;
+	char inq_periph_qual;
+	struct mutex inquiry_mutex;
+	unsigned char inquiry_len;
+	unsigned char *inquiry;
+	const char *vendor;
+	const char *model;
+	const char *rev;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pg0;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pg83;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pg80;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pg89;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pgb0;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pgb1;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pgb2;
+	struct scsi_target *sdev_target;
+	blist_flags_t sdev_bflags;
+	unsigned int eh_timeout;
+	unsigned int manage_system_start_stop: 1;
+	unsigned int manage_runtime_start_stop: 1;
+	unsigned int manage_shutdown: 1;
+	unsigned int force_runtime_start_on_system_start: 1;
+	unsigned int removable: 1;
+	unsigned int changed: 1;
+	unsigned int busy: 1;
+	unsigned int lockable: 1;
+	unsigned int locked: 1;
+	unsigned int borken: 1;
+	unsigned int disconnect: 1;
+	unsigned int soft_reset: 1;
+	unsigned int sdtr: 1;
+	unsigned int wdtr: 1;
+	unsigned int ppr: 1;
+	unsigned int tagged_supported: 1;
+	unsigned int simple_tags: 1;
+	unsigned int was_reset: 1;
+	unsigned int expecting_cc_ua: 1;
+	unsigned int use_10_for_rw: 1;
+	unsigned int use_10_for_ms: 1;
+	unsigned int set_dbd_for_ms: 1;
+	unsigned int read_before_ms: 1;
+	unsigned int no_report_opcodes: 1;
+	unsigned int no_write_same: 1;
+	unsigned int use_16_for_rw: 1;
+	unsigned int use_16_for_sync: 1;
+	unsigned int skip_ms_page_8: 1;
+	unsigned int skip_ms_page_3f: 1;
+	unsigned int skip_vpd_pages: 1;
+	unsigned int try_vpd_pages: 1;
+	unsigned int use_192_bytes_for_3f: 1;
+	unsigned int no_start_on_add: 1;
+	unsigned int allow_restart: 1;
+	unsigned int no_start_on_resume: 1;
+	unsigned int start_stop_pwr_cond: 1;
+	unsigned int no_uld_attach: 1;
+	unsigned int select_no_atn: 1;
+	unsigned int fix_capacity: 1;
+	unsigned int guess_capacity: 1;
+	unsigned int retry_hwerror: 1;
+	unsigned int last_sector_bug: 1;
+	unsigned int no_read_disc_info: 1;
+	unsigned int no_read_capacity_16: 1;
+	unsigned int try_rc_10_first: 1;
+	unsigned int security_supported: 1;
+	unsigned int is_visible: 1;
+	unsigned int wce_default_on: 1;
+	unsigned int no_dif: 1;
+	unsigned int broken_fua: 1;
+	unsigned int lun_in_cdb: 1;
+	unsigned int unmap_limit_for_ws: 1;
+	unsigned int rpm_autosuspend: 1;
+	unsigned int ignore_media_change: 1;
+	unsigned int silence_suspend: 1;
+	unsigned int no_vpd_size: 1;
+	unsigned int cdl_supported: 1;
+	unsigned int cdl_enable: 1;
+	unsigned int queue_stopped;
+	bool offline_already;
+	atomic_t disk_events_disable_depth;
+	unsigned long supported_events[1];
+	unsigned long pending_events[1];
+	struct list_head event_list;
+	struct work_struct event_work;
+	unsigned int max_device_blocked;
+	atomic_t iorequest_cnt;
+	atomic_t iodone_cnt;
+	atomic_t ioerr_cnt;
+	atomic_t iotmo_cnt;
+	struct device sdev_gendev;
+	struct device sdev_dev;
+	struct work_struct requeue_work;
+	struct scsi_device_handler *handler;
+	void *handler_data;
+	size_t dma_drain_len;
+	void *dma_drain_buf;
+	unsigned int sg_timeout;
+	unsigned int sg_reserved_size;
+	struct bsg_device *bsg_dev;
+	unsigned char access_state;
+	struct mutex state_mutex;
+	enum scsi_device_state sdev_state;
+	struct task_struct *quiesced_by;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	unsigned long sdev_data[0];
+};
+
+enum scsi_host_state {
+	SHOST_CREATED = 1,
+	SHOST_RUNNING = 2,
+	SHOST_CANCEL = 3,
+	SHOST_DEL = 4,
+	SHOST_RECOVERY = 5,
+	SHOST_CANCEL_RECOVERY = 6,
+	SHOST_DEL_RECOVERY = 7,
+};
+
+struct scsi_host_template;
+
+struct scsi_transport_template;
+
+struct Scsi_Host {
+	struct list_head __devices;
+	struct list_head __targets;
+	struct list_head starved_list;
+	spinlock_t default_lock;
+	spinlock_t *host_lock;
+	struct mutex scan_mutex;
+	struct list_head eh_abort_list;
+	struct list_head eh_cmd_q;
+	struct task_struct *ehandler;
+	struct completion *eh_action;
+	wait_queue_head_t host_wait;
+	const struct scsi_host_template *hostt;
+	struct scsi_transport_template *transportt;
+	struct kref tagset_refcnt;
+	struct completion tagset_freed;
+	struct blk_mq_tag_set tag_set;
+	atomic_t host_blocked;
+	unsigned int host_failed;
+	unsigned int host_eh_scheduled;
+	unsigned int host_no;
+	int eh_deadline;
+	unsigned long last_reset;
+	unsigned int max_channel;
+	unsigned int max_id;
+	u64 max_lun;
+	unsigned int unique_id;
+	unsigned short max_cmd_len;
+	int this_id;
+	int can_queue;
+	short cmd_per_lun;
+	unsigned short sg_tablesize;
+	unsigned short sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int opt_sectors;
+	unsigned int max_segment_size;
+	unsigned long dma_boundary;
+	unsigned long virt_boundary_mask;
+	unsigned int nr_hw_queues;
+	unsigned int nr_maps;
+	unsigned int active_mode: 2;
+	unsigned int host_self_blocked: 1;
+	unsigned int reverse_ordering: 1;
+	unsigned int tmf_in_progress: 1;
+	unsigned int async_scan: 1;
+	unsigned int eh_noresume: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int queuecommand_may_block: 1;
+	unsigned int short_inquiry: 1;
+	unsigned int no_scsi2_lun_in_cdb: 1;
+	char work_q_name[20];
+	struct workqueue_struct *work_q;
+	struct workqueue_struct *tmf_work_q;
+	unsigned int max_host_blocked;
+	unsigned int prot_capabilities;
+	unsigned char prot_guard_type;
+	unsigned long base;
+	unsigned long io_port;
+	unsigned char n_io_port;
+	unsigned char dma_channel;
+	unsigned int irq;
+	enum scsi_host_state shost_state;
+	struct device shost_gendev;
+	struct device shost_dev;
+	void *shost_data;
+	struct device *dma_dev;
+	int rpm_autosuspend_delay;
+	u64 android_kabi_reserved1;
+	unsigned long hostdata[0];
+};
+
+enum scsi_timeout_action {
+	SCSI_EH_DONE = 0,
+	SCSI_EH_RESET_TIMER = 1,
+	SCSI_EH_NOT_HANDLED = 2,
+};
+
+struct scsi_host_template {
+	unsigned int cmd_size;
+	int (*queuecommand)(struct Scsi_Host *, struct scsi_cmnd *);
+	void (*commit_rqs)(struct Scsi_Host *, u16);
+	struct module *module;
+	const char *name;
+	const char * (*info)(struct Scsi_Host *);
+	int (*ioctl)(struct scsi_device *, unsigned int, void __attribute__((btf_type_tag("user"))) *);
+	int (*compat_ioctl)(struct scsi_device *, unsigned int, void __attribute__((btf_type_tag("user"))) *);
+	int (*init_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*exit_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*eh_abort_handler)(struct scsi_cmnd *);
+	int (*eh_device_reset_handler)(struct scsi_cmnd *);
+	int (*eh_target_reset_handler)(struct scsi_cmnd *);
+	int (*eh_bus_reset_handler)(struct scsi_cmnd *);
+	int (*eh_host_reset_handler)(struct scsi_cmnd *);
+	int (*slave_alloc)(struct scsi_device *);
+	int (*slave_configure)(struct scsi_device *);
+	void (*slave_destroy)(struct scsi_device *);
+	int (*target_alloc)(struct scsi_target *);
+	void (*target_destroy)(struct scsi_target *);
+	int (*scan_finished)(struct Scsi_Host *, unsigned long);
+	void (*scan_start)(struct Scsi_Host *);
+	int (*change_queue_depth)(struct scsi_device *, int);
+	void (*map_queues)(struct Scsi_Host *);
+	int (*mq_poll)(struct Scsi_Host *, unsigned int);
+	bool (*dma_need_drain)(struct request *);
+	int (*bios_param)(struct scsi_device *, struct block_device *, sector_t, int *);
+	void (*unlock_native_capacity)(struct scsi_device *);
+	int (*show_info)(struct seq_file *, struct Scsi_Host *);
+	int (*write_info)(struct Scsi_Host *, char *, int);
+	enum scsi_timeout_action (*eh_timed_out)(struct scsi_cmnd *);
+	bool (*eh_should_retry_cmd)(struct scsi_cmnd *);
+	int (*host_reset)(struct Scsi_Host *, int);
+	const char *proc_name;
+	int can_queue;
+	int this_id;
+	unsigned short sg_tablesize;
+	unsigned short sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	unsigned long dma_boundary;
+	unsigned long virt_boundary_mask;
+	short cmd_per_lun;
+	int tag_alloc_policy;
+	unsigned int track_queue_depth: 1;
+	unsigned int supported_mode: 2;
+	unsigned int emulated: 1;
+	unsigned int skip_settle_delay: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int queuecommand_may_block: 1;
+	unsigned int max_host_blocked;
+	const struct attribute_group **shost_groups;
+	const struct attribute_group **sdev_groups;
+	u64 vendor_id;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum scsi_target_state {
+	STARGET_CREATED = 1,
+	STARGET_RUNNING = 2,
+	STARGET_REMOVE = 3,
+	STARGET_CREATED_REMOVE = 4,
+	STARGET_DEL = 5,
+};
+
+struct scsi_target {
+	struct scsi_device *starget_sdev_user;
+	struct list_head siblings;
+	struct list_head devices;
+	struct device dev;
+	struct kref reap_ref;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int create: 1;
+	unsigned int single_lun: 1;
+	unsigned int pdt_1f_for_no_lun: 1;
+	unsigned int no_report_luns: 1;
+	unsigned int expecting_lun_change: 1;
+	atomic_t target_busy;
+	atomic_t target_blocked;
+	unsigned int can_queue;
+	unsigned int max_target_blocked;
+	char scsi_level;
+	enum scsi_target_state state;
+	void *hostdata;
+	unsigned long starget_data[0];
+};
+
+struct scsi_vpd {
+	struct callback_head rcu;
+	int len;
+	unsigned char data[0];
+};
+
+typedef void (*btf_trace_scsi_dispatch_cmd_error)(void *, struct scsi_cmnd *, int);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_done)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_timeout)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_eh_wakeup)(void *, struct Scsi_Host *);
+
+enum scsi_vpd_parameters {
+	SCSI_VPD_HEADER_SIZE = 4,
+	SCSI_VPD_LIST_SIZE = 36,
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_start {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_error {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int rtn;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_cmd_done_timeout_template {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int result;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	u8 sense_key;
+	u8 asc;
+	u8 ascq;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_eh_wakeup {
+	struct trace_entry ent;
+	unsigned int host_no;
+	char __data[0];
+};
+
+struct scsi_driver {
+	struct device_driver gendrv;
+	int (*resume)(struct device *);
+	void (*rescan)(struct device *);
+	blk_status_t (*init_command)(struct scsi_cmnd *);
+	void (*uninit_command)(struct scsi_cmnd *);
+	int (*done)(struct scsi_cmnd *);
+	int (*eh_action)(struct scsi_cmnd *, int);
+	void (*eh_reset)(struct scsi_cmnd *);
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_start {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_error {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_cmd_done_timeout_template {
+	u32 cmnd;
+};
+
+struct scsi_sense_hdr {
+	u8 response_code;
+	u8 sense_key;
+	u8 asc;
+	u8 ascq;
+	u8 byte4;
+	u8 byte5;
+	u8 byte6;
+	u8 additional_length;
+};
+
+struct scsi_exec_args {
+	unsigned char *sense;
+	unsigned int sense_len;
+	struct scsi_sense_hdr *sshdr;
+	blk_mq_req_flags_t req_flags;
+	int scmd_flags;
+	int *resid;
+};
+
+struct scsi_mode_data {
+	__u32 length;
+	__u16 block_descriptor_length;
+	__u8 medium_type;
+	__u8 device_specific;
+	__u8 header_length;
+	__u8 longlba: 1;
+};
+
+struct trace_event_data_offsets_scsi_eh_wakeup {};
+
+enum scsi_host_status {
+	DID_OK = 0,
+	DID_NO_CONNECT = 1,
+	DID_BUS_BUSY = 2,
+	DID_TIME_OUT = 3,
+	DID_BAD_TARGET = 4,
+	DID_ABORT = 5,
+	DID_PARITY = 6,
+	DID_ERROR = 7,
+	DID_RESET = 8,
+	DID_BAD_INTR = 9,
+	DID_PASSTHROUGH = 10,
+	DID_SOFT_ERROR = 11,
+	DID_IMM_RETRY = 12,
+	DID_REQUEUE = 13,
+	DID_TRANSPORT_DISRUPTED = 14,
+	DID_TRANSPORT_FAILFAST = 15,
+	DID_TRANSPORT_MARGINAL = 20,
+};
+
+struct scsi_transport_template {
+	struct transport_container host_attrs;
+	struct transport_container target_attrs;
+	struct transport_container device_attrs;
+	int (*user_scan)(struct Scsi_Host *, uint, uint, u64);
+	int device_size;
+	int device_private_offset;
+	int target_size;
+	int target_private_offset;
+	int host_size;
+	unsigned int create_work_queue: 1;
+	void (*eh_strategy_handler)(struct Scsi_Host *);
+};
+
+struct scsi_host_busy_iter_data {
+	bool (*fn)(struct scsi_cmnd *, void *);
+	void *priv;
+};
+
+enum scsi_msg_byte {
+	COMMAND_COMPLETE = 0,
+	EXTENDED_MESSAGE = 1,
+	SAVE_POINTERS = 2,
+	RESTORE_POINTERS = 3,
+	DISCONNECT = 4,
+	INITIATOR_ERROR = 5,
+	ABORT_TASK_SET = 6,
+	MESSAGE_REJECT = 7,
+	NOP = 8,
+	MSG_PARITY_ERROR = 9,
+	LINKED_CMD_COMPLETE = 10,
+	LINKED_FLG_CMD_COMPLETE = 11,
+	TARGET_RESET = 12,
+	ABORT_TASK = 13,
+	CLEAR_TASK_SET = 14,
+	INITIATE_RECOVERY = 15,
+	RELEASE_RECOVERY = 16,
+	TERMINATE_IO_PROC = 17,
+	CLEAR_ACA = 22,
+	LOGICAL_UNIT_RESET = 23,
+	SIMPLE_QUEUE_TAG = 32,
+	HEAD_OF_QUEUE_TAG = 33,
+	ORDERED_QUEUE_TAG = 34,
+	IGNORE_WIDE_RESIDUE = 35,
+	ACA = 36,
+	QAS_REQUEST = 85,
+	BUS_DEVICE_RESET = 12,
+	ABORT = 6,
+};
+
+enum sam_status {
+	SAM_STAT_GOOD = 0,
+	SAM_STAT_CHECK_CONDITION = 2,
+	SAM_STAT_CONDITION_MET = 4,
+	SAM_STAT_BUSY = 8,
+	SAM_STAT_INTERMEDIATE = 16,
+	SAM_STAT_INTERMEDIATE_CONDITION_MET = 20,
+	SAM_STAT_RESERVATION_CONFLICT = 24,
+	SAM_STAT_COMMAND_TERMINATED = 34,
+	SAM_STAT_TASK_SET_FULL = 40,
+	SAM_STAT_ACA_ACTIVE = 48,
+	SAM_STAT_TASK_ABORTED = 64,
+};
+
+struct request_sense;
+
+struct cdrom_generic_command {
+	unsigned char cmd[12];
+	unsigned char __attribute__((btf_type_tag("user"))) *buffer;
+	unsigned int buflen;
+	int stat;
+	struct request_sense __attribute__((btf_type_tag("user"))) *sense;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	union {
+		void __attribute__((btf_type_tag("user"))) *reserved[1];
+		void __attribute__((btf_type_tag("user"))) *unused;
+	};
+};
+
+struct request_sense {
+	__u8 error_code: 7;
+	__u8 valid: 1;
+	__u8 segment_number;
+	__u8 sense_key: 4;
+	__u8 reserved2: 1;
+	__u8 ili: 1;
+	__u8 reserved1: 2;
+	__u8 information[4];
+	__u8 add_sense_len;
+	__u8 command_info[4];
+	__u8 asc;
+	__u8 ascq;
+	__u8 fruc;
+	__u8 sks[3];
+	__u8 asb[46];
+};
+
+struct scsi_ioctl_command {
+	unsigned int inlen;
+	unsigned int outlen;
+	unsigned char data[0];
+};
+
+struct scsi_idlun {
+	__u32 dev_id;
+	__u32 host_unique_id;
+};
+
+struct sg_io_hdr {
+	int interface_id;
+	int dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	unsigned short iovec_count;
+	unsigned int dxfer_len;
+	void __attribute__((btf_type_tag("user"))) *dxferp;
+	unsigned char __attribute__((btf_type_tag("user"))) *cmdp;
+	void __attribute__((btf_type_tag("user"))) *sbp;
+	unsigned int timeout;
+	unsigned int flags;
+	int pack_id;
+	void __attribute__((btf_type_tag("user"))) *usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	unsigned short host_status;
+	unsigned short driver_status;
+	int resid;
+	unsigned int duration;
+	unsigned int info;
+};
+
+struct compat_cdrom_generic_command {
+	unsigned char cmd[12];
+	compat_caddr_t buffer;
+	compat_uint_t buflen;
+	compat_int_t stat;
+	compat_caddr_t sense;
+	unsigned char data_direction;
+	unsigned char pad[3];
+	compat_int_t quiet;
+	compat_int_t timeout;
+	compat_caddr_t unused;
+};
+
+struct compat_sg_io_hdr {
+	compat_int_t interface_id;
+	compat_int_t dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	unsigned short iovec_count;
+	compat_uint_t dxfer_len;
+	compat_uint_t dxferp;
+	compat_uptr_t cmdp;
+	compat_uptr_t sbp;
+	compat_uint_t timeout;
+	compat_uint_t flags;
+	compat_int_t pack_id;
+	compat_uptr_t usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	unsigned short host_status;
+	unsigned short driver_status;
+	compat_int_t resid;
+	compat_uint_t duration;
+	compat_uint_t info;
+};
+
+enum scsi_disposition {
+	NEEDS_RETRY = 8193,
+	SUCCESS = 8194,
+	FAILED = 8195,
+	QUEUED = 8196,
+	SOFT_ERROR = 8197,
+	ADD_TO_MLQUEUE = 8198,
+	TIMEOUT_ERROR = 8199,
+	SCSI_RETURN_NOT_HANDLED = 8200,
+	FAST_IO_FAIL = 8201,
+};
+
+enum scsi_ml_status {
+	SCSIML_STAT_OK = 0,
+	SCSIML_STAT_RESV_CONFLICT = 1,
+	SCSIML_STAT_NOSPC = 2,
+	SCSIML_STAT_MED_ERROR = 3,
+	SCSIML_STAT_TGT_FAILURE = 4,
+	SCSIML_STAT_DL_TIMEOUT = 5,
+};
+
+enum scsi_prot_operations {
+	SCSI_PROT_NORMAL = 0,
+	SCSI_PROT_READ_INSERT = 1,
+	SCSI_PROT_WRITE_STRIP = 2,
+	SCSI_PROT_READ_STRIP = 3,
+	SCSI_PROT_WRITE_INSERT = 4,
+	SCSI_PROT_READ_PASS = 5,
+	SCSI_PROT_WRITE_PASS = 6,
+};
+
+enum scsi_device_event {
+	SDEV_EVT_MEDIA_CHANGE = 1,
+	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
+	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
+	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
+	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
+	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
+	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
+	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
+	SDEV_EVT_FIRST = 1,
+	SDEV_EVT_LAST = 8,
+	SDEV_EVT_MAXBITS = 9,
+};
+
+typedef void (*activate_complete)(void *, int);
+
+struct scsi_device_handler {
+	struct list_head list;
+	struct module *module;
+	const char *name;
+	enum scsi_disposition (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *);
+	int (*attach)(struct scsi_device *);
+	void (*detach)(struct scsi_device *);
+	int (*activate)(struct scsi_device *, activate_complete, void *);
+	blk_status_t (*prep_fn)(struct scsi_device *, struct request *);
+	int (*set_params)(struct scsi_device *, const char *);
+	void (*rescan)(struct scsi_device *);
+};
+
+struct scsi_eh_save {
+	int result;
+	unsigned int resid_len;
+	int eh_eflags;
+	enum dma_data_direction data_direction;
+	unsigned int underflow;
+	unsigned char cmd_len;
+	unsigned char prot_op;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scatterlist sense_sgl;
+};
+
+enum {
+	ACTION_FAIL = 0,
+	ACTION_REPREP = 1,
+	ACTION_DELAYED_REPREP = 2,
+	ACTION_RETRY = 3,
+	ACTION_DELAYED_RETRY = 4,
+};
+
+enum scsi_host_prot_capabilities {
+	SHOST_DIF_TYPE1_PROTECTION = 1,
+	SHOST_DIF_TYPE2_PROTECTION = 2,
+	SHOST_DIF_TYPE3_PROTECTION = 4,
+	SHOST_DIX_TYPE0_PROTECTION = 8,
+	SHOST_DIX_TYPE1_PROTECTION = 16,
+	SHOST_DIX_TYPE2_PROTECTION = 32,
+	SHOST_DIX_TYPE3_PROTECTION = 64,
+};
+
+struct scsi_event {
+	enum scsi_device_event evt_type;
+	struct list_head node;
+};
+
+enum scsi_scan_mode {
+	SCSI_SCAN_INITIAL = 0,
+	SCSI_SCAN_RESCAN = 1,
+	SCSI_SCAN_MANUAL = 2,
+};
+
+enum scsi_timeouts {
+	SCSI_DEFAULT_EH_TIMEOUT = 2500,
+};
+
+struct async_scan_data {
+	struct list_head list;
+	struct Scsi_Host *shost;
+	struct completion prev_finished;
+};
+
+struct scsi_lun {
+	__u8 scsi_lun[8];
+};
+
+enum scsi_devinfo_key {
+	SCSI_DEVINFO_GLOBAL = 0,
+	SCSI_DEVINFO_SPI = 1,
+};
+
+struct scsi_dev_info_list {
+	struct list_head dev_info_list;
+	char vendor[8];
+	char model[16];
+	blist_flags_t flags;
+	unsigned int compatible;
+};
+
+struct scsi_dev_info_list_table {
+	struct list_head node;
+	struct list_head scsi_dev_info_list;
+	const char *name;
+	int key;
+};
+
+struct scsi_varlen_cdb_hdr {
+	__u8 opcode;
+	__u8 control;
+	__u8 misc[5];
+	__u8 additional_cdb_length;
+	__be16 service_action;
+};
+
+enum scsi_pr_type {
+	SCSI_PR_WRITE_EXCLUSIVE = 1,
+	SCSI_PR_EXCLUSIVE_ACCESS = 3,
+	SCSI_PR_WRITE_EXCLUSIVE_REG_ONLY = 5,
+	SCSI_PR_EXCLUSIVE_ACCESS_REG_ONLY = 6,
+	SCSI_PR_WRITE_EXCLUSIVE_ALL_REGS = 7,
+	SCSI_PR_EXCLUSIVE_ACCESS_ALL_REGS = 8,
+};
+
+enum pr_status {
+	PR_STS_SUCCESS = 0,
+	PR_STS_IOERR = 2,
+	PR_STS_RESERVATION_CONFLICT = 24,
+	PR_STS_RETRY_PATH_FAILURE = 917504,
+	PR_STS_PATH_FAST_FAILED = 983040,
+	PR_STS_PATH_FAILED = 65536,
+};
+
+enum {
+	SD_DEF_XFER_BLOCKS = 65535,
+	SD_MAX_XFER_BLOCKS = 4294967295,
+	SD_MAX_WS10_BLOCKS = 65535,
+	SD_MAX_WS16_BLOCKS = 8388607,
+};
+
+enum {
+	SD_LBP_FULL = 0,
+	SD_LBP_UNMAP = 1,
+	SD_LBP_WS16 = 2,
+	SD_LBP_WS10 = 3,
+	SD_LBP_ZERO = 4,
+	SD_LBP_DISABLE = 5,
+};
+
+enum t10_dif_type {
+	T10_PI_TYPE0_PROTECTION = 0,
+	T10_PI_TYPE1_PROTECTION = 1,
+	T10_PI_TYPE2_PROTECTION = 2,
+	T10_PI_TYPE3_PROTECTION = 3,
+};
+
+enum {
+	SD_ZERO_WRITE = 0,
+	SD_ZERO_WS = 1,
+	SD_ZERO_WS16_UNMAP = 2,
+	SD_ZERO_WS10_UNMAP = 3,
+};
+
+enum bip_flags {
+	BIP_BLOCK_INTEGRITY = 1,
+	BIP_MAPPED_INTEGRITY = 2,
+	BIP_CTRL_NOCHECK = 4,
+	BIP_DISK_NOCHECK = 8,
+	BIP_IP_CHECKSUM = 16,
+};
+
+enum scsi_prot_flags {
+	SCSI_PROT_TRANSFER_PI = 1,
+	SCSI_PROT_GUARD_CHECK = 2,
+	SCSI_PROT_REF_CHECK = 4,
+	SCSI_PROT_REF_INCREMENT = 8,
+	SCSI_PROT_IP_CHECKSUM = 16,
+};
+
+enum {
+	SD_EXT_CDB_SIZE = 32,
+	SD_MEMPOOL_SIZE = 2,
+};
+
+struct opal_dev;
+
+struct zoned_disk_info {
+	u32 nr_zones;
+	u32 zone_blocks;
+};
+
+struct scsi_disk {
+	struct scsi_device *device;
+	struct device disk_dev;
+	struct gendisk *disk;
+	struct opal_dev *opal_dev;
+	struct zoned_disk_info early_zone_info;
+	struct zoned_disk_info zone_info;
+	u32 zones_optimal_open;
+	u32 zones_optimal_nonseq;
+	u32 zones_max_open;
+	u32 zone_starting_lba_gran;
+	u32 *zones_wp_offset;
+	spinlock_t zones_wp_offset_lock;
+	u32 *rev_wp_offset;
+	struct mutex rev_mutex;
+	struct work_struct zone_wp_offset_work;
+	char *zone_wp_update_buf;
+	atomic_t openers;
+	sector_t capacity;
+	int max_retries;
+	u32 min_xfer_blocks;
+	u32 max_xfer_blocks;
+	u32 opt_xfer_blocks;
+	u32 max_ws_blocks;
+	u32 max_unmap_blocks;
+	u32 unmap_granularity;
+	u32 unmap_alignment;
+	u32 index;
+	unsigned int physical_block_size;
+	unsigned int max_medium_access_timeouts;
+	unsigned int medium_access_timed_out;
+	u8 media_present;
+	u8 write_prot;
+	u8 protection_type;
+	u8 provisioning_mode;
+	u8 zeroing_mode;
+	u8 nr_actuators;
+	bool suspended;
+	unsigned int ATO: 1;
+	unsigned int cache_override: 1;
+	unsigned int WCE: 1;
+	unsigned int RCD: 1;
+	unsigned int DPOFUA: 1;
+	unsigned int first_scan: 1;
+	unsigned int lbpme: 1;
+	unsigned int lbprz: 1;
+	unsigned int lbpu: 1;
+	unsigned int lbpws: 1;
+	unsigned int lbpws10: 1;
+	unsigned int lbpvpd: 1;
+	unsigned int ws10: 1;
+	unsigned int ws16: 1;
+	unsigned int rc_basis: 2;
+	unsigned int zoned: 2;
+	unsigned int urswrz: 1;
+	unsigned int security: 1;
+	unsigned int ignore_medium_access_errors: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef void (*btf_trace_scsi_prepare_zone_append)(void *, struct scsi_cmnd *, sector_t, unsigned int);
+
+typedef void (*btf_trace_scsi_zone_wp_update)(void *, struct scsi_cmnd *, sector_t, unsigned int, unsigned int);
+
+enum zbc_zone_type {
+	ZBC_ZONE_TYPE_CONV = 1,
+	ZBC_ZONE_TYPE_SEQWRITE_REQ = 2,
+	ZBC_ZONE_TYPE_SEQWRITE_PREF = 3,
+	ZBC_ZONE_TYPE_SEQ_OR_BEFORE_REQ = 4,
+	ZBC_ZONE_TYPE_GAP = 5,
+};
+
+enum zbc_zone_cond {
+	ZBC_ZONE_COND_NO_WP = 0,
+	ZBC_ZONE_COND_EMPTY = 1,
+	ZBC_ZONE_COND_IMP_OPEN = 2,
+	ZBC_ZONE_COND_EXP_OPEN = 3,
+	ZBC_ZONE_COND_CLOSED = 4,
+	ZBC_ZONE_COND_READONLY = 13,
+	ZBC_ZONE_COND_FULL = 14,
+	ZBC_ZONE_COND_OFFLINE = 15,
+};
+
+enum zbc_zone_alignment_method {
+	ZBC_CONSTANT_ZONE_LENGTH = 1,
+	ZBC_CONSTANT_ZONE_START_OFFSET = 8,
+};
+
+struct trace_event_raw_scsi_prepare_zone_append {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	sector_t lba;
+	unsigned int wp_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_zone_wp_update {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	sector_t rq_sector;
+	unsigned int wp_offset;
+	unsigned int good_bytes;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scsi_prepare_zone_append {};
+
+struct trace_event_data_offsets_scsi_zone_wp_update {};
+
+struct nvme_command;
+
+typedef void (*btf_trace_nvme_setup_cmd)(void *, struct request *, struct nvme_command *);
+
+struct nvme_sgl_desc {
+	__le64 addr;
+	__le32 length;
+	__u8 rsvd[3];
+	__u8 type;
+};
+
+struct nvme_keyed_sgl_desc {
+	__le64 addr;
+	__u8 length[3];
+	__u8 key[4];
+	__u8 type;
+};
+
+union nvme_data_ptr {
+	struct {
+		__le64 prp1;
+		__le64 prp2;
+	};
+	struct nvme_sgl_desc sgl;
+	struct nvme_keyed_sgl_desc ksgl;
+};
+
+struct nvme_common_command {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le32 cdw2[2];
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	union {
+		struct {
+			__le32 cdw10;
+			__le32 cdw11;
+			__le32 cdw12;
+			__le32 cdw13;
+			__le32 cdw14;
+			__le32 cdw15;
+		};
+		struct {
+			__le32 cdw10;
+			__le32 cdw11;
+			__le32 cdw12;
+			__le32 cdw13;
+			__le32 cdw14;
+			__le32 cdw15;
+		} cdws;
+	};
+};
+
+struct nvme_rw_command {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le32 cdw2;
+	__le32 cdw3;
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le16 length;
+	__le16 control;
+	__le32 dsmgmt;
+	__le32 reftag;
+	__le16 apptag;
+	__le16 appmask;
+};
+
+struct nvme_identify {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__u8 cns;
+	__u8 rsvd3;
+	__le16 ctrlid;
+	__u8 rsvd11[3];
+	__u8 csi;
+	__u32 rsvd12[4];
+};
+
+struct nvme_features {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le32 fid;
+	__le32 dword11;
+	__le32 dword12;
+	__le32 dword13;
+	__le32 dword14;
+	__le32 dword15;
+};
+
+struct nvme_create_cq {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	__le64 prp1;
+	__u64 rsvd8;
+	__le16 cqid;
+	__le16 qsize;
+	__le16 cq_flags;
+	__le16 irq_vector;
+	__u32 rsvd12[4];
+};
+
+struct nvme_create_sq {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	__le64 prp1;
+	__u64 rsvd8;
+	__le16 sqid;
+	__le16 qsize;
+	__le16 sq_flags;
+	__le16 cqid;
+	__u32 rsvd12[4];
+};
+
+struct nvme_delete_queue {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[9];
+	__le16 qid;
+	__u16 rsvd10;
+	__u32 rsvd11[5];
+};
+
+struct nvme_download_firmware {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	union nvme_data_ptr dptr;
+	__le32 numd;
+	__le32 offset;
+	__u32 rsvd12[4];
+};
+
+struct nvme_format_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[4];
+	__le32 cdw10;
+	__u32 rsvd11[5];
+};
+
+struct nvme_dsm_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le32 nr;
+	__le32 attributes;
+	__u32 rsvd12[4];
+};
+
+struct nvme_write_zeroes_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2;
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le16 length;
+	__le16 control;
+	__le32 dsmgmt;
+	__le32 reftag;
+	__le16 apptag;
+	__le16 appmask;
+};
+
+struct nvme_zone_mgmt_send_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le32 cdw2[2];
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le32 cdw12;
+	__u8 zsa;
+	__u8 select_all;
+	__u8 rsvd13[2];
+	__le32 cdw14[2];
+};
+
+struct nvme_zone_mgmt_recv_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le32 numd;
+	__u8 zra;
+	__u8 zrasf;
+	__u8 pr;
+	__u8 rsvd13;
+	__le32 cdw14[2];
+};
+
+struct nvme_abort_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[9];
+	__le16 sqid;
+	__u16 cid;
+	__u32 rsvd11[5];
+};
+
+struct nvme_get_log_page_command {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__u8 lid;
+	__u8 lsp;
+	__le16 numdl;
+	__le16 numdu;
+	__u16 rsvd11;
+	union {
+		struct {
+			__le32 lpol;
+			__le32 lpou;
+		};
+		__le64 lpo;
+	};
+	__u8 rsvd14[3];
+	__u8 csi;
+	__u32 rsvd15;
+};
+
+struct nvmf_common_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[35];
+	__u8 ts[24];
+};
+
+struct nvmf_connect_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__le16 recfmt;
+	__le16 qid;
+	__le16 sqsize;
+	__u8 cattr;
+	__u8 resv3;
+	__le32 kato;
+	__u8 resv4[12];
+};
+
+struct nvmf_property_set_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[35];
+	__u8 attrib;
+	__u8 resv3[3];
+	__le32 offset;
+	__le64 value;
+	__u8 resv4[8];
+};
+
+struct nvmf_property_get_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[35];
+	__u8 attrib;
+	__u8 resv3[3];
+	__le32 offset;
+	__u8 resv4[16];
+};
+
+struct nvmf_auth_common_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__u8 resv3;
+	__u8 spsp0;
+	__u8 spsp1;
+	__u8 secp;
+	__le32 al_tl;
+	__u8 resv4[16];
+};
+
+struct nvmf_auth_send_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__u8 resv3;
+	__u8 spsp0;
+	__u8 spsp1;
+	__u8 secp;
+	__le32 tl;
+	__u8 resv4[16];
+};
+
+struct nvmf_auth_receive_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__u8 resv3;
+	__u8 spsp0;
+	__u8 spsp1;
+	__u8 secp;
+	__le32 al;
+	__u8 resv4[16];
+};
+
+struct nvme_dbbuf {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	__le64 prp1;
+	__le64 prp2;
+	__u32 rsvd12[6];
+};
+
+struct nvme_directive_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le32 numd;
+	__u8 doper;
+	__u8 dtype;
+	__le16 dspec;
+	__u8 endir;
+	__u8 tdtype;
+	__u16 rsvd15;
+	__u32 rsvd16[3];
+};
+
+struct nvme_command {
+	union {
+		struct nvme_common_command common;
+		struct nvme_rw_command rw;
+		struct nvme_identify identify;
+		struct nvme_features features;
+		struct nvme_create_cq create_cq;
+		struct nvme_create_sq create_sq;
+		struct nvme_delete_queue delete_queue;
+		struct nvme_download_firmware dlfw;
+		struct nvme_format_cmd format;
+		struct nvme_dsm_cmd dsm;
+		struct nvme_write_zeroes_cmd write_zeroes;
+		struct nvme_zone_mgmt_send_cmd zms;
+		struct nvme_zone_mgmt_recv_cmd zmr;
+		struct nvme_abort_cmd abort;
+		struct nvme_get_log_page_command get_log_page;
+		struct nvmf_common_command fabrics;
+		struct nvmf_connect_command connect;
+		struct nvmf_property_set_command prop_set;
+		struct nvmf_property_get_command prop_get;
+		struct nvmf_auth_common_command auth_common;
+		struct nvmf_auth_send_command auth_send;
+		struct nvmf_auth_receive_command auth_receive;
+		struct nvme_dbbuf dbbuf;
+		struct nvme_directive_cmd directive;
+	};
+};
+
+typedef void (*btf_trace_nvme_complete_rq)(void *, struct request *);
+
+struct nvme_ctrl;
+
+typedef void (*btf_trace_nvme_async_event)(void *, struct nvme_ctrl *, u32);
+
+enum nvme_ctrl_state {
+	NVME_CTRL_NEW = 0,
+	NVME_CTRL_LIVE = 1,
+	NVME_CTRL_RESETTING = 2,
+	NVME_CTRL_CONNECTING = 3,
+	NVME_CTRL_DELETING = 4,
+	NVME_CTRL_DELETING_NOIO = 5,
+	NVME_CTRL_DEAD = 6,
+};
+
+struct nvme_id_power_state {
+	__le16 max_power;
+	__u8 rsvd2;
+	__u8 flags;
+	__le32 entry_lat;
+	__le32 exit_lat;
+	__u8 read_tput;
+	__u8 read_lat;
+	__u8 write_tput;
+	__u8 write_lat;
+	__le16 idle_power;
+	__u8 idle_scale;
+	__u8 rsvd19;
+	__le16 active_power;
+	__u8 active_work_scale;
+	__u8 rsvd23[9];
+};
+
+struct nvme_fault_inject {};
+
+enum nvme_ctrl_type {
+	NVME_CTRL_IO = 1,
+	NVME_CTRL_DISC = 2,
+	NVME_CTRL_ADMIN = 3,
+};
+
+enum nvme_dctype {
+	NVME_DCTYPE_NOT_REPORTED = 0,
+	NVME_DCTYPE_DDC = 1,
+	NVME_DCTYPE_CDC = 2,
+};
+
+struct nvme_ctrl_ops;
+
+struct nvme_subsystem;
+
+struct nvme_effects_log;
+
+struct nvme_ana_rsp_hdr;
+
+struct nvmf_ctrl_options;
+
+struct nvme_ctrl {
+	bool comp_seen;
+	bool identified;
+	enum nvme_ctrl_state state;
+	spinlock_t lock;
+	struct mutex scan_lock;
+	const struct nvme_ctrl_ops *ops;
+	struct request_queue *admin_q;
+	struct request_queue *connect_q;
+	struct request_queue *fabrics_q;
+	struct device *dev;
+	int instance;
+	int numa_node;
+	struct blk_mq_tag_set *tagset;
+	struct blk_mq_tag_set *admin_tagset;
+	struct list_head namespaces;
+	struct rw_semaphore namespaces_rwsem;
+	struct device ctrl_device;
+	struct device *device;
+	struct cdev cdev;
+	struct work_struct reset_work;
+	struct work_struct delete_work;
+	wait_queue_head_t state_wq;
+	struct nvme_subsystem *subsys;
+	struct list_head subsys_entry;
+	struct opal_dev *opal_dev;
+	char name[12];
+	u16 cntlid;
+	u16 mtfa;
+	u32 ctrl_config;
+	u32 queue_count;
+	u64 cap;
+	u32 max_hw_sectors;
+	u32 max_segments;
+	u32 max_integrity_segments;
+	u32 max_discard_sectors;
+	u32 max_discard_segments;
+	u32 max_zeroes_sectors;
+	u32 max_zone_append;
+	u16 crdt[3];
+	u16 oncs;
+	u32 dmrsl;
+	u16 oacs;
+	u16 sqsize;
+	u32 max_namespaces;
+	atomic_t abort_limit;
+	u8 vwc;
+	u32 vs;
+	u32 sgls;
+	u16 kas;
+	u8 npss;
+	u8 apsta;
+	u16 wctemp;
+	u16 cctemp;
+	u32 oaes;
+	u32 aen_result;
+	u32 ctratt;
+	unsigned int shutdown_timeout;
+	unsigned int kato;
+	bool subsystem;
+	unsigned long quirks;
+	struct nvme_id_power_state psd[32];
+	struct nvme_effects_log *effects;
+	struct xarray cels;
+	struct work_struct scan_work;
+	struct work_struct async_event_work;
+	struct delayed_work ka_work;
+	struct delayed_work failfast_work;
+	struct nvme_command ka_cmd;
+	unsigned long ka_last_check_time;
+	struct work_struct fw_act_work;
+	unsigned long events;
+	u8 anacap;
+	u8 anatt;
+	u32 anagrpmax;
+	u32 nanagrpid;
+	struct mutex ana_lock;
+	struct nvme_ana_rsp_hdr *ana_log_buf;
+	size_t ana_log_size;
+	struct timer_list anatt_timer;
+	struct work_struct ana_work;
+	u64 ps_max_latency_us;
+	bool apst_enabled;
+	u16 hmmaxd;
+	u32 hmpre;
+	u32 hmmin;
+	u32 hmminds;
+	u32 ioccsz;
+	u32 iorcsz;
+	u16 icdoff;
+	u16 maxcmd;
+	int nr_reconnects;
+	unsigned long flags;
+	struct nvmf_ctrl_options *opts;
+	struct page *discard_page;
+	unsigned long discard_page_busy;
+	struct nvme_fault_inject fault_inject;
+	enum nvme_ctrl_type cntrltype;
+	enum nvme_dctype dctype;
+};
+
+struct nvme_ctrl_ops {
+	const char *name;
+	struct module *module;
+	unsigned int flags;
+	const struct attribute_group **dev_attr_groups;
+	int (*reg_read32)(struct nvme_ctrl *, u32, u32 *);
+	int (*reg_write32)(struct nvme_ctrl *, u32, u32);
+	int (*reg_read64)(struct nvme_ctrl *, u32, u64 *);
+	void (*free_ctrl)(struct nvme_ctrl *);
+	void (*submit_async_event)(struct nvme_ctrl *);
+	void (*delete_ctrl)(struct nvme_ctrl *);
+	void (*stop_ctrl)(struct nvme_ctrl *);
+	int (*get_address)(struct nvme_ctrl *, char *, int);
+	void (*print_device_info)(struct nvme_ctrl *);
+	bool (*supports_pci_p2pdma)(struct nvme_ctrl *);
+};
+
+enum nvme_subsys_type {
+	NVME_NQN_DISC = 1,
+	NVME_NQN_NVME = 2,
+	NVME_NQN_CURR = 3,
+};
+
+enum nvme_iopolicy {
+	NVME_IOPOLICY_NUMA = 0,
+	NVME_IOPOLICY_RR = 1,
+};
+
+struct nvme_subsystem {
+	int instance;
+	struct device dev;
+	struct kref ref;
+	struct list_head entry;
+	struct mutex lock;
+	struct list_head ctrls;
+	struct list_head nsheads;
+	char subnqn[223];
+	char serial[20];
+	char model[40];
+	char firmware_rev[8];
+	u8 cmic;
+	enum nvme_subsys_type subtype;
+	u16 vendor_id;
+	u16 awupf;
+	struct ida ns_ida;
+	enum nvme_iopolicy iopolicy;
+};
+
+struct nvme_effects_log {
+	__le32 acs[256];
+	__le32 iocs[256];
+	__u8 resv[2048];
+};
+
+struct nvme_ana_rsp_hdr {
+	__le64 chgcnt;
+	__le16 ngrps;
+	__le16 rsvd10[3];
+};
+
+struct nvmf_host;
+
+struct nvmf_ctrl_options {
+	unsigned int mask;
+	int max_reconnects;
+	char *transport;
+	char *subsysnqn;
+	char *traddr;
+	char *trsvcid;
+	char *host_traddr;
+	char *host_iface;
+	size_t queue_size;
+	unsigned int nr_io_queues;
+	unsigned int reconnect_delay;
+	bool discovery_nqn;
+	bool duplicate_connect;
+	unsigned int kato;
+	struct nvmf_host *host;
+	char *dhchap_secret;
+	char *dhchap_ctrl_secret;
+	bool disable_sqflow;
+	bool hdr_digest;
+	bool data_digest;
+	unsigned int nr_write_queues;
+	unsigned int nr_poll_queues;
+	int tos;
+	int fast_io_fail_tmo;
+};
+
+struct nvmf_host {
+	struct kref ref;
+	struct list_head list;
+	char nqn[223];
+	uuid_t id;
+};
+
+typedef void (*btf_trace_nvme_sq)(void *, struct request *, __le16, int);
+
+struct nvme_core_quirk_entry {
+	u16 vid;
+	const char *mn;
+	const char *fr;
+	unsigned long quirks;
+};
+
+enum nvme_disposition {
+	COMPLETE = 0,
+	RETRY = 1,
+	FAILOVER = 2,
+	AUTHENTICATE = 3,
+};
+
+enum {
+	NVME_SC_SUCCESS = 0,
+	NVME_SC_INVALID_OPCODE = 1,
+	NVME_SC_INVALID_FIELD = 2,
+	NVME_SC_CMDID_CONFLICT = 3,
+	NVME_SC_DATA_XFER_ERROR = 4,
+	NVME_SC_POWER_LOSS = 5,
+	NVME_SC_INTERNAL = 6,
+	NVME_SC_ABORT_REQ = 7,
+	NVME_SC_ABORT_QUEUE = 8,
+	NVME_SC_FUSED_FAIL = 9,
+	NVME_SC_FUSED_MISSING = 10,
+	NVME_SC_INVALID_NS = 11,
+	NVME_SC_CMD_SEQ_ERROR = 12,
+	NVME_SC_SGL_INVALID_LAST = 13,
+	NVME_SC_SGL_INVALID_COUNT = 14,
+	NVME_SC_SGL_INVALID_DATA = 15,
+	NVME_SC_SGL_INVALID_METADATA = 16,
+	NVME_SC_SGL_INVALID_TYPE = 17,
+	NVME_SC_CMB_INVALID_USE = 18,
+	NVME_SC_PRP_INVALID_OFFSET = 19,
+	NVME_SC_ATOMIC_WU_EXCEEDED = 20,
+	NVME_SC_OP_DENIED = 21,
+	NVME_SC_SGL_INVALID_OFFSET = 22,
+	NVME_SC_RESERVED = 23,
+	NVME_SC_HOST_ID_INCONSIST = 24,
+	NVME_SC_KA_TIMEOUT_EXPIRED = 25,
+	NVME_SC_KA_TIMEOUT_INVALID = 26,
+	NVME_SC_ABORTED_PREEMPT_ABORT = 27,
+	NVME_SC_SANITIZE_FAILED = 28,
+	NVME_SC_SANITIZE_IN_PROGRESS = 29,
+	NVME_SC_SGL_INVALID_GRANULARITY = 30,
+	NVME_SC_CMD_NOT_SUP_CMB_QUEUE = 31,
+	NVME_SC_NS_WRITE_PROTECTED = 32,
+	NVME_SC_CMD_INTERRUPTED = 33,
+	NVME_SC_TRANSIENT_TR_ERR = 34,
+	NVME_SC_ADMIN_COMMAND_MEDIA_NOT_READY = 36,
+	NVME_SC_INVALID_IO_CMD_SET = 44,
+	NVME_SC_LBA_RANGE = 128,
+	NVME_SC_CAP_EXCEEDED = 129,
+	NVME_SC_NS_NOT_READY = 130,
+	NVME_SC_RESERVATION_CONFLICT = 131,
+	NVME_SC_FORMAT_IN_PROGRESS = 132,
+	NVME_SC_CQ_INVALID = 256,
+	NVME_SC_QID_INVALID = 257,
+	NVME_SC_QUEUE_SIZE = 258,
+	NVME_SC_ABORT_LIMIT = 259,
+	NVME_SC_ABORT_MISSING = 260,
+	NVME_SC_ASYNC_LIMIT = 261,
+	NVME_SC_FIRMWARE_SLOT = 262,
+	NVME_SC_FIRMWARE_IMAGE = 263,
+	NVME_SC_INVALID_VECTOR = 264,
+	NVME_SC_INVALID_LOG_PAGE = 265,
+	NVME_SC_INVALID_FORMAT = 266,
+	NVME_SC_FW_NEEDS_CONV_RESET = 267,
+	NVME_SC_INVALID_QUEUE = 268,
+	NVME_SC_FEATURE_NOT_SAVEABLE = 269,
+	NVME_SC_FEATURE_NOT_CHANGEABLE = 270,
+	NVME_SC_FEATURE_NOT_PER_NS = 271,
+	NVME_SC_FW_NEEDS_SUBSYS_RESET = 272,
+	NVME_SC_FW_NEEDS_RESET = 273,
+	NVME_SC_FW_NEEDS_MAX_TIME = 274,
+	NVME_SC_FW_ACTIVATE_PROHIBITED = 275,
+	NVME_SC_OVERLAPPING_RANGE = 276,
+	NVME_SC_NS_INSUFFICIENT_CAP = 277,
+	NVME_SC_NS_ID_UNAVAILABLE = 278,
+	NVME_SC_NS_ALREADY_ATTACHED = 280,
+	NVME_SC_NS_IS_PRIVATE = 281,
+	NVME_SC_NS_NOT_ATTACHED = 282,
+	NVME_SC_THIN_PROV_NOT_SUPP = 283,
+	NVME_SC_CTRL_LIST_INVALID = 284,
+	NVME_SC_SELT_TEST_IN_PROGRESS = 285,
+	NVME_SC_BP_WRITE_PROHIBITED = 286,
+	NVME_SC_CTRL_ID_INVALID = 287,
+	NVME_SC_SEC_CTRL_STATE_INVALID = 288,
+	NVME_SC_CTRL_RES_NUM_INVALID = 289,
+	NVME_SC_RES_ID_INVALID = 290,
+	NVME_SC_PMR_SAN_PROHIBITED = 291,
+	NVME_SC_ANA_GROUP_ID_INVALID = 292,
+	NVME_SC_ANA_ATTACH_FAILED = 293,
+	NVME_SC_BAD_ATTRIBUTES = 384,
+	NVME_SC_INVALID_PI = 385,
+	NVME_SC_READ_ONLY = 386,
+	NVME_SC_ONCS_NOT_SUPPORTED = 387,
+	NVME_SC_CONNECT_FORMAT = 384,
+	NVME_SC_CONNECT_CTRL_BUSY = 385,
+	NVME_SC_CONNECT_INVALID_PARAM = 386,
+	NVME_SC_CONNECT_RESTART_DISC = 387,
+	NVME_SC_CONNECT_INVALID_HOST = 388,
+	NVME_SC_DISCOVERY_RESTART = 400,
+	NVME_SC_AUTH_REQUIRED = 401,
+	NVME_SC_ZONE_BOUNDARY_ERROR = 440,
+	NVME_SC_ZONE_FULL = 441,
+	NVME_SC_ZONE_READ_ONLY = 442,
+	NVME_SC_ZONE_OFFLINE = 443,
+	NVME_SC_ZONE_INVALID_WRITE = 444,
+	NVME_SC_ZONE_TOO_MANY_ACTIVE = 445,
+	NVME_SC_ZONE_TOO_MANY_OPEN = 446,
+	NVME_SC_ZONE_INVALID_TRANSITION = 447,
+	NVME_SC_WRITE_FAULT = 640,
+	NVME_SC_READ_ERROR = 641,
+	NVME_SC_GUARD_CHECK = 642,
+	NVME_SC_APPTAG_CHECK = 643,
+	NVME_SC_REFTAG_CHECK = 644,
+	NVME_SC_COMPARE_FAILED = 645,
+	NVME_SC_ACCESS_DENIED = 646,
+	NVME_SC_UNWRITTEN_BLOCK = 647,
+	NVME_SC_INTERNAL_PATH_ERROR = 768,
+	NVME_SC_ANA_PERSISTENT_LOSS = 769,
+	NVME_SC_ANA_INACCESSIBLE = 770,
+	NVME_SC_ANA_TRANSITION = 771,
+	NVME_SC_CTRL_PATH_ERROR = 864,
+	NVME_SC_HOST_PATH_ERROR = 880,
+	NVME_SC_HOST_ABORTED_CMD = 881,
+	NVME_SC_CRD = 6144,
+	NVME_SC_MORE = 8192,
+	NVME_SC_DNR = 16384,
+};
+
+enum {
+	NVME_REQ_CANCELLED = 1,
+	NVME_REQ_USERCMD = 2,
+	NVME_MPATH_IO_STATS = 4,
+};
+
+enum nvme_ana_state {
+	NVME_ANA_OPTIMIZED = 1,
+	NVME_ANA_NONOPTIMIZED = 2,
+	NVME_ANA_INACCESSIBLE = 3,
+	NVME_ANA_PERSISTENT_LOSS = 4,
+	NVME_ANA_CHANGE = 15,
+};
+
+enum {
+	NVME_CMD_FUSE_FIRST = 1,
+	NVME_CMD_FUSE_SECOND = 2,
+	NVME_CMD_SGL_METABUF = 64,
+	NVME_CMD_SGL_METASEG = 128,
+	NVME_CMD_SGL_ALL = 192,
+};
+
+enum nvme_ctrl_flags {
+	NVME_CTRL_FAILFAST_EXPIRED = 0,
+	NVME_CTRL_ADMIN_Q_STOPPED = 1,
+	NVME_CTRL_STARTED_ONCE = 2,
+	NVME_CTRL_STOPPED = 3,
+	NVME_CTRL_SKIP_ID_CNS_CS = 4,
+	NVME_CTRL_DIRTY_CAPABILITY = 5,
+	NVME_CTRL_FROZEN = 6,
+};
+
+enum nvmf_capsule_command {
+	nvme_fabrics_type_property_set = 0,
+	nvme_fabrics_type_connect = 1,
+	nvme_fabrics_type_property_get = 4,
+	nvme_fabrics_type_auth_send = 5,
+	nvme_fabrics_type_auth_receive = 6,
+};
+
+enum nvme_zone_mgmt_action {
+	NVME_ZONE_CLOSE = 1,
+	NVME_ZONE_FINISH = 2,
+	NVME_ZONE_OPEN = 3,
+	NVME_ZONE_RESET = 4,
+	NVME_ZONE_OFFLINE = 5,
+	NVME_ZONE_SET_DESC_EXT = 16,
+};
+
+enum nvme_opcode {
+	nvme_cmd_flush = 0,
+	nvme_cmd_write = 1,
+	nvme_cmd_read = 2,
+	nvme_cmd_write_uncor = 4,
+	nvme_cmd_compare = 5,
+	nvme_cmd_write_zeroes = 8,
+	nvme_cmd_dsm = 9,
+	nvme_cmd_verify = 12,
+	nvme_cmd_resv_register = 13,
+	nvme_cmd_resv_report = 14,
+	nvme_cmd_resv_acquire = 17,
+	nvme_cmd_resv_release = 21,
+	nvme_cmd_zone_mgmt_send = 121,
+	nvme_cmd_zone_mgmt_recv = 122,
+	nvme_cmd_zone_append = 125,
+	nvme_cmd_vendor_start = 128,
+};
+
+enum {
+	NVME_CMD_EFFECTS_CSUPP = 1,
+	NVME_CMD_EFFECTS_LBCC = 2,
+	NVME_CMD_EFFECTS_NCC = 4,
+	NVME_CMD_EFFECTS_NIC = 8,
+	NVME_CMD_EFFECTS_CCC = 16,
+	NVME_CMD_EFFECTS_CSE_MASK = 458752,
+	NVME_CMD_EFFECTS_UUID_SEL = 524288,
+	NVME_CMD_EFFECTS_SCOPE_MASK = 4293918720,
+};
+
+enum nvme_admin_opcode {
+	nvme_admin_delete_sq = 0,
+	nvme_admin_create_sq = 1,
+	nvme_admin_get_log_page = 2,
+	nvme_admin_delete_cq = 4,
+	nvme_admin_create_cq = 5,
+	nvme_admin_identify = 6,
+	nvme_admin_abort_cmd = 8,
+	nvme_admin_set_features = 9,
+	nvme_admin_get_features = 10,
+	nvme_admin_async_event = 12,
+	nvme_admin_ns_mgmt = 13,
+	nvme_admin_activate_fw = 16,
+	nvme_admin_download_fw = 17,
+	nvme_admin_dev_self_test = 20,
+	nvme_admin_ns_attach = 21,
+	nvme_admin_keep_alive = 24,
+	nvme_admin_directive_send = 25,
+	nvme_admin_directive_recv = 26,
+	nvme_admin_virtual_mgmt = 28,
+	nvme_admin_nvme_mi_send = 29,
+	nvme_admin_nvme_mi_recv = 30,
+	nvme_admin_dbbuf = 124,
+	nvme_admin_format_nvm = 128,
+	nvme_admin_security_send = 129,
+	nvme_admin_security_recv = 130,
+	nvme_admin_sanitize_nvm = 132,
+	nvme_admin_get_lba_status = 134,
+	nvme_admin_vendor_start = 192,
+};
+
+enum {
+	NVME_QUEUE_PHYS_CONTIG = 1,
+	NVME_CQ_IRQ_ENABLED = 2,
+	NVME_SQ_PRIO_URGENT = 0,
+	NVME_SQ_PRIO_HIGH = 2,
+	NVME_SQ_PRIO_MEDIUM = 4,
+	NVME_SQ_PRIO_LOW = 6,
+	NVME_FEAT_ARBITRATION = 1,
+	NVME_FEAT_POWER_MGMT = 2,
+	NVME_FEAT_LBA_RANGE = 3,
+	NVME_FEAT_TEMP_THRESH = 4,
+	NVME_FEAT_ERR_RECOVERY = 5,
+	NVME_FEAT_VOLATILE_WC = 6,
+	NVME_FEAT_NUM_QUEUES = 7,
+	NVME_FEAT_IRQ_COALESCE = 8,
+	NVME_FEAT_IRQ_CONFIG = 9,
+	NVME_FEAT_WRITE_ATOMIC = 10,
+	NVME_FEAT_ASYNC_EVENT = 11,
+	NVME_FEAT_AUTO_PST = 12,
+	NVME_FEAT_HOST_MEM_BUF = 13,
+	NVME_FEAT_TIMESTAMP = 14,
+	NVME_FEAT_KATO = 15,
+	NVME_FEAT_HCTM = 16,
+	NVME_FEAT_NOPSC = 17,
+	NVME_FEAT_RRL = 18,
+	NVME_FEAT_PLM_CONFIG = 19,
+	NVME_FEAT_PLM_WINDOW = 20,
+	NVME_FEAT_HOST_BEHAVIOR = 22,
+	NVME_FEAT_SANITIZE = 23,
+	NVME_FEAT_SW_PROGRESS = 128,
+	NVME_FEAT_HOST_ID = 129,
+	NVME_FEAT_RESV_MASK = 130,
+	NVME_FEAT_RESV_PERSIST = 131,
+	NVME_FEAT_WRITE_PROTECT = 132,
+	NVME_FEAT_VENDOR_START = 192,
+	NVME_FEAT_VENDOR_END = 255,
+	NVME_LOG_ERROR = 1,
+	NVME_LOG_SMART = 2,
+	NVME_LOG_FW_SLOT = 3,
+	NVME_LOG_CHANGED_NS = 4,
+	NVME_LOG_CMD_EFFECTS = 5,
+	NVME_LOG_DEVICE_SELF_TEST = 6,
+	NVME_LOG_TELEMETRY_HOST = 7,
+	NVME_LOG_TELEMETRY_CTRL = 8,
+	NVME_LOG_ENDURANCE_GROUP = 9,
+	NVME_LOG_ANA = 12,
+	NVME_LOG_DISC = 112,
+	NVME_LOG_RESERVATION = 128,
+	NVME_FWACT_REPL = 0,
+	NVME_FWACT_REPL_ACTV = 8,
+	NVME_FWACT_ACTV = 16,
+};
+
+enum nvme_quirks {
+	NVME_QUIRK_STRIPE_SIZE = 1,
+	NVME_QUIRK_IDENTIFY_CNS = 2,
+	NVME_QUIRK_DEALLOCATE_ZEROES = 4,
+	NVME_QUIRK_DELAY_BEFORE_CHK_RDY = 8,
+	NVME_QUIRK_NO_APST = 16,
+	NVME_QUIRK_NO_DEEPEST_PS = 32,
+	NVME_QUIRK_MEDIUM_PRIO_SQ = 128,
+	NVME_QUIRK_IGNORE_DEV_SUBNQN = 256,
+	NVME_QUIRK_DISABLE_WRITE_ZEROES = 512,
+	NVME_QUIRK_SIMPLE_SUSPEND = 1024,
+	NVME_QUIRK_SINGLE_VECTOR = 2048,
+	NVME_QUIRK_128_BYTES_SQES = 4096,
+	NVME_QUIRK_SHARED_TAGS = 8192,
+	NVME_QUIRK_NO_TEMP_THRESH_CHANGE = 16384,
+	NVME_QUIRK_NO_NS_DESC_LIST = 32768,
+	NVME_QUIRK_DMA_ADDRESS_BITS_48 = 65536,
+	NVME_QUIRK_SKIP_CID_GEN = 131072,
+	NVME_QUIRK_BOGUS_NID = 262144,
+	NVME_QUIRK_NO_SECONDARY_TEMP_THRESH = 524288,
+	NVME_QUIRK_FORCE_NO_SIMPLE_SUSPEND = 1048576,
+};
+
+enum {
+	NVME_CAP_CSS_NVM = 1,
+	NVME_CAP_CSS_CSI = 64,
+};
+
+enum {
+	NVME_CAP_CRMS_CRWMS = 576460752303423488ULL,
+	NVME_CAP_CRMS_CRIMS = 1152921504606846976ULL,
+};
+
+enum {
+	NVME_AER_ERROR = 0,
+	NVME_AER_SMART = 1,
+	NVME_AER_NOTICE = 2,
+	NVME_AER_CSS = 6,
+	NVME_AER_VS = 7,
+};
+
+enum {
+	NVME_AER_ERROR_PERSIST_INT_ERR = 3,
+};
+
+enum nvmf_fabrics_opcode {
+	nvme_fabrics_command = 127,
+};
+
+enum nvme_ns_features {
+	NVME_NS_EXT_LBAS = 1,
+	NVME_NS_METADATA_SUPPORTED = 2,
+	NVME_NS_DEAC = 3,
+};
+
+enum {
+	NVME_RW_LR = 32768,
+	NVME_RW_FUA = 16384,
+	NVME_RW_APPEND_PIREMAP = 512,
+	NVME_RW_DSM_FREQ_UNSPEC = 0,
+	NVME_RW_DSM_FREQ_TYPICAL = 1,
+	NVME_RW_DSM_FREQ_RARE = 2,
+	NVME_RW_DSM_FREQ_READS = 3,
+	NVME_RW_DSM_FREQ_WRITES = 4,
+	NVME_RW_DSM_FREQ_RW = 5,
+	NVME_RW_DSM_FREQ_ONCE = 6,
+	NVME_RW_DSM_FREQ_PREFETCH = 7,
+	NVME_RW_DSM_FREQ_TEMP = 8,
+	NVME_RW_DSM_LATENCY_NONE = 0,
+	NVME_RW_DSM_LATENCY_IDLE = 16,
+	NVME_RW_DSM_LATENCY_NORM = 32,
+	NVME_RW_DSM_LATENCY_LOW = 48,
+	NVME_RW_DSM_SEQ_REQ = 64,
+	NVME_RW_DSM_COMPRESSED = 128,
+	NVME_RW_PRINFO_PRCHK_REF = 1024,
+	NVME_RW_PRINFO_PRCHK_APP = 2048,
+	NVME_RW_PRINFO_PRCHK_GUARD = 4096,
+	NVME_RW_PRINFO_PRACT = 8192,
+	NVME_RW_DTYPE_STREAMS = 16,
+	NVME_WZ_DEAC = 512,
+};
+
+enum {
+	NVME_NS_FEAT_THIN = 1,
+	NVME_NS_FEAT_ATOMICS = 2,
+	NVME_NS_FEAT_IO_OPT = 16,
+	NVME_NS_ATTR_RO = 1,
+	NVME_NS_FLBAS_LBA_MASK = 15,
+	NVME_NS_FLBAS_LBA_UMASK = 96,
+	NVME_NS_FLBAS_LBA_SHIFT = 1,
+	NVME_NS_FLBAS_META_EXT = 16,
+	NVME_NS_NMIC_SHARED = 1,
+	NVME_LBAF_RP_BEST = 0,
+	NVME_LBAF_RP_BETTER = 1,
+	NVME_LBAF_RP_GOOD = 2,
+	NVME_LBAF_RP_DEGRADED = 3,
+	NVME_NS_DPC_PI_LAST = 16,
+	NVME_NS_DPC_PI_FIRST = 8,
+	NVME_NS_DPC_PI_TYPE3 = 4,
+	NVME_NS_DPC_PI_TYPE2 = 2,
+	NVME_NS_DPC_PI_TYPE1 = 1,
+	NVME_NS_DPS_PI_FIRST = 8,
+	NVME_NS_DPS_PI_MASK = 7,
+	NVME_NS_DPS_PI_TYPE1 = 1,
+	NVME_NS_DPS_PI_TYPE2 = 2,
+	NVME_NS_DPS_PI_TYPE3 = 3,
+};
+
+enum {
+	NVME_NVM_NS_16B_GUARD = 0,
+	NVME_NVM_NS_32B_GUARD = 1,
+	NVME_NVM_NS_64B_GUARD = 2,
+};
+
+enum {
+	NVME_DSMGMT_IDR = 1,
+	NVME_DSMGMT_IDW = 2,
+	NVME_DSMGMT_AD = 4,
+};
+
+enum {
+	NVME_ID_CNS_NS = 0,
+	NVME_ID_CNS_CTRL = 1,
+	NVME_ID_CNS_NS_ACTIVE_LIST = 2,
+	NVME_ID_CNS_NS_DESC_LIST = 3,
+	NVME_ID_CNS_CS_NS = 5,
+	NVME_ID_CNS_CS_CTRL = 6,
+	NVME_ID_CNS_NS_CS_INDEP = 8,
+	NVME_ID_CNS_NS_PRESENT_LIST = 16,
+	NVME_ID_CNS_NS_PRESENT = 17,
+	NVME_ID_CNS_CTRL_NS_LIST = 18,
+	NVME_ID_CNS_CTRL_LIST = 19,
+	NVME_ID_CNS_SCNDRY_CTRL_LIST = 21,
+	NVME_ID_CNS_NS_GRANULARITY = 22,
+	NVME_ID_CNS_UUID_LIST = 23,
+};
+
+enum {
+	NVME_CTRL_CMIC_MULTI_PORT = 1,
+	NVME_CTRL_CMIC_MULTI_CTRL = 2,
+	NVME_CTRL_CMIC_ANA = 8,
+	NVME_CTRL_ONCS_COMPARE = 1,
+	NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 2,
+	NVME_CTRL_ONCS_DSM = 4,
+	NVME_CTRL_ONCS_WRITE_ZEROES = 8,
+	NVME_CTRL_ONCS_RESERVATIONS = 32,
+	NVME_CTRL_ONCS_TIMESTAMP = 64,
+	NVME_CTRL_VWC_PRESENT = 1,
+	NVME_CTRL_OACS_SEC_SUPP = 1,
+	NVME_CTRL_OACS_NS_MNGT_SUPP = 8,
+	NVME_CTRL_OACS_DIRECTIVES = 32,
+	NVME_CTRL_OACS_DBBUF_SUPP = 256,
+	NVME_CTRL_LPA_CMD_EFFECTS_LOG = 2,
+	NVME_CTRL_CTRATT_128_ID = 1,
+	NVME_CTRL_CTRATT_NON_OP_PSP = 2,
+	NVME_CTRL_CTRATT_NVM_SETS = 4,
+	NVME_CTRL_CTRATT_READ_RECV_LVLS = 8,
+	NVME_CTRL_CTRATT_ENDURANCE_GROUPS = 16,
+	NVME_CTRL_CTRATT_PREDICTABLE_LAT = 32,
+	NVME_CTRL_CTRATT_NAMESPACE_GRANULARITY = 128,
+	NVME_CTRL_CTRATT_UUID_LIST = 512,
+};
+
+enum {
+	NVME_CSI_NVM = 0,
+	NVME_CSI_ZNS = 2,
+};
+
+enum {
+	NVME_PS_FLAGS_MAX_POWER_SCALE = 1,
+	NVME_PS_FLAGS_NON_OP_STATE = 2,
+};
+
+enum {
+	NVME_ENABLE_ACRE = 1,
+	NVME_ENABLE_LBAFEE = 1,
+};
+
+enum nvme_ctrl_attr {
+	NVME_CTRL_ATTR_HID_128_BIT = 1,
+	NVME_CTRL_ATTR_TBKAS = 64,
+	NVME_CTRL_ATTR_ELBAS = 32768,
+};
+
+enum {
+	NVME_AER_NOTICE_NS_CHANGED = 0,
+	NVME_AER_NOTICE_FW_ACT_STARTING = 1,
+	NVME_AER_NOTICE_ANA = 3,
+	NVME_AER_NOTICE_DISC_CHANGED = 240,
+};
+
+enum {
+	NVME_AEN_CFG_NS_ATTR = 256,
+	NVME_AEN_CFG_FW_ACT = 512,
+	NVME_AEN_CFG_ANA_CHANGE = 2048,
+	NVME_AEN_CFG_DISC_CHANGE = -2147483648,
+};
+
+enum {
+	NVME_NIDT_EUI64 = 1,
+	NVME_NIDT_NGUID = 2,
+	NVME_NIDT_UUID = 3,
+	NVME_NIDT_CSI = 4,
+};
+
+enum {
+	NVME_NSTAT_NRDY = 1,
+};
+
+enum {
+	NVME_ID_NS_NVM_STS_MASK = 127,
+	NVME_ID_NS_NVM_GUARD_SHIFT = 7,
+	NVME_ID_NS_NVM_GUARD_MASK = 3,
+};
+
+struct nvme_ns_head;
+
+struct nvme_ns {
+	struct list_head list;
+	struct nvme_ctrl *ctrl;
+	struct request_queue *queue;
+	struct gendisk *disk;
+	enum nvme_ana_state ana_state;
+	u32 ana_grpid;
+	struct list_head siblings;
+	struct kref kref;
+	struct nvme_ns_head *head;
+	int lba_shift;
+	u16 ms;
+	u16 pi_size;
+	u16 sgs;
+	u32 sws;
+	u8 pi_type;
+	u8 guard_type;
+	u64 zsze;
+	unsigned long features;
+	unsigned long flags;
+	struct cdev cdev;
+	struct device cdev_device;
+	struct nvme_fault_inject fault_inject;
+};
+
+struct nvme_ns_ids {
+	u8 eui64[8];
+	u8 nguid[16];
+	uuid_t uuid;
+	u8 csi;
+};
+
+struct nvme_ns_head {
+	struct list_head list;
+	struct srcu_struct srcu;
+	struct nvme_subsystem *subsys;
+	unsigned int ns_id;
+	struct nvme_ns_ids ids;
+	struct list_head entry;
+	struct kref ref;
+	bool shared;
+	int instance;
+	struct nvme_effects_log *effects;
+	struct cdev cdev;
+	struct device cdev_device;
+	struct gendisk *disk;
+	struct bio_list requeue_list;
+	spinlock_t requeue_lock;
+	struct work_struct requeue_work;
+	struct mutex lock;
+	unsigned long flags;
+	struct nvme_ns __attribute__((btf_type_tag("rcu"))) *current_path[0];
+};
+
+struct trace_event_raw_nvme_setup_cmd {
+	struct trace_entry ent;
+	char disk[32];
+	int ctrl_id;
+	int qid;
+	u8 opcode;
+	u8 flags;
+	u8 fctype;
+	u16 cid;
+	u32 nsid;
+	bool metadata;
+	u8 cdw10[24];
+	char __data[0];
+};
+
+struct trace_event_raw_nvme_complete_rq {
+	struct trace_entry ent;
+	char disk[32];
+	int ctrl_id;
+	int qid;
+	int cid;
+	u64 result;
+	u8 retries;
+	u8 flags;
+	u16 status;
+	char __data[0];
+};
+
+struct trace_event_raw_nvme_async_event {
+	struct trace_entry ent;
+	int ctrl_id;
+	u32 result;
+	char __data[0];
+};
+
+struct trace_event_raw_nvme_sq {
+	struct trace_entry ent;
+	int ctrl_id;
+	char disk[32];
+	int qid;
+	u16 sq_head;
+	u16 sq_tail;
+	char __data[0];
+};
+
+union nvme_result {
+	__le16 u16;
+	__le32 u32;
+	__le64 u64;
+};
+
+struct nvme_id_ctrl {
+	__le16 vid;
+	__le16 ssvid;
+	char sn[20];
+	char mn[40];
+	char fr[8];
+	__u8 rab;
+	__u8 ieee[3];
+	__u8 cmic;
+	__u8 mdts;
+	__le16 cntlid;
+	__le32 ver;
+	__le32 rtd3r;
+	__le32 rtd3e;
+	__le32 oaes;
+	__le32 ctratt;
+	__u8 rsvd100[11];
+	__u8 cntrltype;
+	__u8 fguid[16];
+	__le16 crdt1;
+	__le16 crdt2;
+	__le16 crdt3;
+	__u8 rsvd134[122];
+	__le16 oacs;
+	__u8 acl;
+	__u8 aerl;
+	__u8 frmw;
+	__u8 lpa;
+	__u8 elpe;
+	__u8 npss;
+	__u8 avscc;
+	__u8 apsta;
+	__le16 wctemp;
+	__le16 cctemp;
+	__le16 mtfa;
+	__le32 hmpre;
+	__le32 hmmin;
+	__u8 tnvmcap[16];
+	__u8 unvmcap[16];
+	__le32 rpmbs;
+	__le16 edstt;
+	__u8 dsto;
+	__u8 fwug;
+	__le16 kas;
+	__le16 hctma;
+	__le16 mntmt;
+	__le16 mxtmt;
+	__le32 sanicap;
+	__le32 hmminds;
+	__le16 hmmaxd;
+	__u8 rsvd338[4];
+	__u8 anatt;
+	__u8 anacap;
+	__le32 anagrpmax;
+	__le32 nanagrpid;
+	__u8 rsvd352[160];
+	__u8 sqes;
+	__u8 cqes;
+	__le16 maxcmd;
+	__le32 nn;
+	__le16 oncs;
+	__le16 fuses;
+	__u8 fna;
+	__u8 vwc;
+	__le16 awun;
+	__le16 awupf;
+	__u8 nvscc;
+	__u8 nwpc;
+	__le16 acwu;
+	__u8 rsvd534[2];
+	__le32 sgls;
+	__le32 mnan;
+	__u8 rsvd544[224];
+	char subnqn[256];
+	__u8 rsvd1024[768];
+	__le32 ioccsz;
+	__le32 iorcsz;
+	__le16 icdoff;
+	__u8 ctrattr;
+	__u8 msdbd;
+	__u8 rsvd1804[2];
+	__u8 dctype;
+	__u8 rsvd1807[241];
+	struct nvme_id_power_state psd[32];
+	__u8 vs[1024];
+};
+
+struct nvme_feat_host_behavior {
+	__u8 acre;
+	__u8 etdas;
+	__u8 lbafee;
+	__u8 resv1[509];
+};
+
+struct nvme_id_ctrl_nvm {
+	__u8 vsl;
+	__u8 wzsl;
+	__u8 wusl;
+	__u8 dmrl;
+	__le32 dmrsl;
+	__le64 dmsl;
+	__u8 rsvd16[4080];
+};
+
+struct nvme_fw_slot_info_log {
+	__u8 afi;
+	__u8 rsvd1[7];
+	__le64 frs[7];
+	__u8 rsvd64[448];
+};
+
+struct nvme_ns_info {
+	struct nvme_ns_ids ids;
+	u32 nsid;
+	__le32 anagrpid;
+	bool is_shared;
+	bool is_readonly;
+	bool is_ready;
+	bool is_removed;
+};
+
+struct nvme_ns_id_desc {
+	__u8 nidt;
+	__u8 nidl;
+	__le16 reserved;
+};
+
+struct nvme_lbaf {
+	__le16 ms;
+	__u8 ds;
+	__u8 rp;
+};
+
+struct nvme_id_ns {
+	__le64 nsze;
+	__le64 ncap;
+	__le64 nuse;
+	__u8 nsfeat;
+	__u8 nlbaf;
+	__u8 flbas;
+	__u8 mc;
+	__u8 dpc;
+	__u8 dps;
+	__u8 nmic;
+	__u8 rescap;
+	__u8 fpi;
+	__u8 dlfeat;
+	__le16 nawun;
+	__le16 nawupf;
+	__le16 nacwu;
+	__le16 nabsn;
+	__le16 nabo;
+	__le16 nabspf;
+	__le16 noiob;
+	__u8 nvmcap[16];
+	__le16 npwg;
+	__le16 npwa;
+	__le16 npdg;
+	__le16 npda;
+	__le16 nows;
+	__u8 rsvd74[18];
+	__le32 anagrpid;
+	__u8 rsvd96[3];
+	__u8 nsattr;
+	__le16 nvmsetid;
+	__le16 endgid;
+	__u8 nguid[16];
+	__u8 eui64[8];
+	struct nvme_lbaf lbaf[64];
+	__u8 vs[3712];
+};
+
+struct nvme_id_ns_cs_indep {
+	__u8 nsfeat;
+	__u8 nmic;
+	__u8 rescap;
+	__u8 fpi;
+	__le32 anagrpid;
+	__u8 nsattr;
+	__u8 rsvd9;
+	__le16 nvmsetid;
+	__le16 endgid;
+	__u8 nstat;
+	__u8 rsvd15[4081];
+};
+
+struct nvme_id_ns_nvm {
+	__le64 lbstm;
+	__u8 pic;
+	__u8 rsvd9[3];
+	__le32 elbaf[64];
+	__u8 rsvd268[3828];
+};
+
+struct trace_event_data_offsets_nvme_setup_cmd {};
+
+struct trace_event_data_offsets_nvme_complete_rq {};
+
+struct trace_event_data_offsets_nvme_async_event {};
+
+struct trace_event_data_offsets_nvme_sq {};
+
+struct nvme_request {
+	struct nvme_command *cmd;
+	union nvme_result result;
+	u8 genctr;
+	u8 retries;
+	u8 flags;
+	u16 status;
+	unsigned long start_time;
+	struct nvme_ctrl *ctrl;
+};
+
+struct nvme_dsm_range {
+	__le32 cattr;
+	__le32 nlb;
+	__le64 slba;
+};
+
+struct nvme_feat_auto_pst {
+	__le64 entries[32];
+};
+
+enum {
+	NVME_IOCTL_VEC = 1,
+	NVME_IOCTL_PARTITION = 2,
+};
+
+struct nvme_uring_cmd_pdu {
+	union {
+		struct bio *bio;
+		struct request *req;
+	};
+	u32 meta_len;
+	u32 nvme_status;
+	union {
+		struct {
+			void *meta;
+			void __attribute__((btf_type_tag("user"))) *meta_buffer;
+		};
+		u64 result;
+	} u;
+};
+
+struct nvme_user_io {
+	__u8 opcode;
+	__u8 flags;
+	__u16 control;
+	__u16 nblocks;
+	__u16 rsvd;
+	__u64 metadata;
+	__u64 addr;
+	__u64 slba;
+	__u32 dsmgmt;
+	__u32 reftag;
+	__u16 apptag;
+	__u16 appmask;
+};
+
+struct nvme_uring_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 rsvd1;
+	__u32 nsid;
+	__u32 cdw2;
+	__u32 cdw3;
+	__u64 metadata;
+	__u64 addr;
+	__u32 metadata_len;
+	__u32 data_len;
+	__u32 cdw10;
+	__u32 cdw11;
+	__u32 cdw12;
+	__u32 cdw13;
+	__u32 cdw14;
+	__u32 cdw15;
+	__u32 timeout_ms;
+	__u32 rsvd2;
+};
+
+struct nvme_uring_data {
+	__u64 metadata;
+	__u64 addr;
+	__u32 data_len;
+	__u32 metadata_len;
+	__u32 timeout_ms;
+};
+
+struct nvme_passthru_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 rsvd1;
+	__u32 nsid;
+	__u32 cdw2;
+	__u32 cdw3;
+	__u64 metadata;
+	__u64 addr;
+	__u32 metadata_len;
+	__u32 data_len;
+	__u32 cdw10;
+	__u32 cdw11;
+	__u32 cdw12;
+	__u32 cdw13;
+	__u32 cdw14;
+	__u32 cdw15;
+	__u32 timeout_ms;
+	__u32 result;
+};
+
+struct nvme_passthru_cmd64 {
+	__u8 opcode;
+	__u8 flags;
+	__u16 rsvd1;
+	__u32 nsid;
+	__u32 cdw2;
+	__u32 cdw3;
+	__u64 metadata;
+	__u64 addr;
+	__u32 metadata_len;
+	union {
+		__u32 data_len;
+		__u32 vec_cnt;
+	};
+	__u32 cdw10;
+	__u32 cdw11;
+	__u32 cdw12;
+	__u32 cdw13;
+	__u32 cdw14;
+	__u32 cdw15;
+	__u32 timeout_ms;
+	__u32 rsvd2;
+	__u64 result;
+};
+
+enum nvme_pr_type {
+	NVME_PR_WRITE_EXCLUSIVE = 1,
+	NVME_PR_EXCLUSIVE_ACCESS = 2,
+	NVME_PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
+	NVME_PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
+	NVME_PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
+	NVME_PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
+};
+
+enum nvme_eds {
+	NVME_EXTENDED_DATA_STRUCT = 1,
+};
+
+struct nvme_registered_ctrl {
+	__le16 cntlid;
+	__u8 rcsts;
+	__u8 rsvd3[5];
+	__le64 hostid;
+	__le64 rkey;
+};
+
+struct nvme_reservation_status {
+	__le32 gen;
+	__u8 rtype;
+	__u8 regctl[2];
+	__u8 resv5[2];
+	__u8 ptpls;
+	__u8 resv10[14];
+	struct nvme_registered_ctrl regctl_ds[0];
+};
+
+struct nvme_registered_ctrl_ext {
+	__le16 cntlid;
+	__u8 rcsts;
+	__u8 rsvd3[5];
+	__le64 rkey;
+	__u8 hostid[16];
+	__u8 rsvd32[32];
+};
+
+struct nvme_reservation_status_ext {
+	__le32 gen;
+	__u8 rtype;
+	__u8 regctl[2];
+	__u8 resv5[2];
+	__u8 ptpls;
+	__u8 resv10[14];
+	__u8 rsvd24[40];
+	struct nvme_registered_ctrl_ext regctl_eds[0];
+};
+
+struct nvme_ana_group_desc {
+	__le32 grpid;
+	__le32 nnsids;
+	__le64 chgcnt;
+	__u8 state;
+	__u8 rsvd17[15];
+	__le32 nsids[0];
+};
+
+enum {
+	NVME_ZRA_ZONE_REPORT = 0,
+	NVME_ZRASF_ZONE_REPORT_ALL = 0,
+	NVME_ZRASF_ZONE_STATE_EMPTY = 1,
+	NVME_ZRASF_ZONE_STATE_IMP_OPEN = 2,
+	NVME_ZRASF_ZONE_STATE_EXP_OPEN = 3,
+	NVME_ZRASF_ZONE_STATE_CLOSED = 4,
+	NVME_ZRASF_ZONE_STATE_READONLY = 5,
+	NVME_ZRASF_ZONE_STATE_FULL = 6,
+	NVME_ZRASF_ZONE_STATE_OFFLINE = 7,
+	NVME_REPORT_ZONE_PARTIAL = 1,
+};
+
+enum {
+	NVME_ZONE_TYPE_SEQWRITE_REQ = 2,
+};
+
+struct nvme_id_ctrl_zns {
+	__u8 zasl;
+	__u8 rsvd1[4095];
+};
+
+struct nvme_zone_descriptor {
+	__u8 zt;
+	__u8 zs;
+	__u8 za;
+	__u8 rsvd3[5];
+	__le64 zcap;
+	__le64 zslba;
+	__le64 wp;
+	__u8 rsvd32[32];
+};
+
+struct nvme_zns_lbafe {
+	__le64 zsze;
+	__u8 zdes;
+	__u8 rsvd9[7];
+};
+
+struct nvme_id_ns_zns {
+	__le16 zoc;
+	__le16 ozcs;
+	__le32 mar;
+	__le32 mor;
+	__le32 rrl;
+	__le32 frl;
+	__u8 rsvd20[2796];
+	struct nvme_zns_lbafe lbafe[64];
+	__u8 vs[256];
+};
+
+struct nvme_zone_report {
+	__le64 nr_zones;
+	__u8 resv8[56];
+	struct nvme_zone_descriptor entries[0];
+};
+
+enum {
+	NVME_HOST_MEM_ENABLE = 1,
+	NVME_HOST_MEM_RETURN = 2,
+};
+
+enum {
+	NVME_CMBMSC_CRE = 1,
+	NVME_CMBMSC_CMSE = 2,
+};
+
+enum {
+	NVME_CMBSZ_SQS = 1,
+	NVME_CMBSZ_CQS = 2,
+	NVME_CMBSZ_LISTS = 4,
+	NVME_CMBSZ_RDS = 8,
+	NVME_CMBSZ_WDS = 16,
+	NVME_CMBSZ_SZ_SHIFT = 12,
+	NVME_CMBSZ_SZ_MASK = 1048575,
+	NVME_CMBSZ_SZU_SHIFT = 8,
+	NVME_CMBSZ_SZU_MASK = 15,
+};
+
+enum {
+	NVME_SGL_FMT_DATA_DESC = 0,
+	NVME_SGL_FMT_SEG_DESC = 2,
+	NVME_SGL_FMT_LAST_SEG_DESC = 3,
+	NVME_KEY_SGL_FMT_DATA_DESC = 4,
+	NVME_TRANSPORT_SGL_DATA_DESC = 5,
+};
+
+struct nvme_queue;
+
+struct nvme_host_mem_buf_desc;
+
+struct nvme_dev {
+	struct nvme_queue *queues;
+	struct blk_mq_tag_set tagset;
+	struct blk_mq_tag_set admin_tagset;
+	u32 *dbs;
+	struct device *dev;
+	struct dma_pool *prp_page_pool;
+	struct dma_pool *prp_small_pool;
+	unsigned int online_queues;
+	unsigned int max_qid;
+	unsigned int io_queues[3];
+	unsigned int num_vecs;
+	u32 q_depth;
+	int io_sqes;
+	u32 db_stride;
+	void *bar;
+	unsigned long bar_mapped_size;
+	struct mutex shutdown_lock;
+	bool subsystem;
+	u64 cmb_size;
+	bool cmb_use_sqes;
+	u32 cmbsz;
+	u32 cmbloc;
+	struct nvme_ctrl ctrl;
+	u32 last_ps;
+	bool hmb;
+	mempool_t *iod_mempool;
+	__le32 *dbbuf_dbs;
+	dma_addr_t dbbuf_dbs_dma_addr;
+	__le32 *dbbuf_eis;
+	dma_addr_t dbbuf_eis_dma_addr;
+	u64 host_mem_size;
+	u32 nr_host_mem_descs;
+	dma_addr_t host_mem_descs_dma;
+	struct nvme_host_mem_buf_desc *host_mem_descs;
+	void **host_mem_desc_bufs;
+	unsigned int nr_allocated_queues;
+	unsigned int nr_write_queues;
+	unsigned int nr_poll_queues;
+};
+
+struct nvme_completion;
+
+struct nvme_queue {
+	struct nvme_dev *dev;
+	spinlock_t sq_lock;
+	void *sq_cmds;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t cq_poll_lock;
+	struct nvme_completion *cqes;
+	dma_addr_t sq_dma_addr;
+	dma_addr_t cq_dma_addr;
+	u32 *q_db;
+	u32 q_depth;
+	u16 cq_vector;
+	u16 sq_tail;
+	u16 last_sq_tail;
+	u16 cq_head;
+	u16 qid;
+	u8 cq_phase;
+	u8 sqes;
+	unsigned long flags;
+	__le32 *dbbuf_sq_db;
+	__le32 *dbbuf_cq_db;
+	__le32 *dbbuf_sq_ei;
+	__le32 *dbbuf_cq_ei;
+	struct completion delete_done;
+};
+
+struct nvme_completion {
+	union nvme_result result;
+	__le16 sq_head;
+	__le16 sq_id;
+	__u16 command_id;
+	__le16 status;
+};
+
+struct nvme_host_mem_buf_desc {
+	__le64 addr;
+	__le32 size;
+	__u32 rsvd;
+};
+
+union nvme_descriptor {
+	struct nvme_sgl_desc *sg_list;
+	__le64 *prp_list;
+};
+
+struct nvme_iod {
+	struct nvme_request req;
+	struct nvme_command cmd;
+	bool aborted;
+	s8 nr_allocations;
+	unsigned int dma_len;
+	dma_addr_t first_dma;
+	dma_addr_t meta_dma;
+	struct sg_table sgt;
+	union nvme_descriptor list[5];
+};
+
+typedef void (*btf_trace_spi_controller_idle)(void *, struct spi_controller *);
+
+struct ptp_system_timestamp {
+	struct timespec64 pre_ts;
+	struct timespec64 post_ts;
+};
+
+struct spi_mem {
+	struct spi_device *spi;
+	void *drvpriv;
+	const char *name;
+};
+
+enum spi_mem_data_dir {
+	SPI_MEM_NO_DATA = 0,
+	SPI_MEM_DATA_IN = 1,
+	SPI_MEM_DATA_OUT = 2,
+};
+
+struct spi_mem_op {
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 __pad: 7;
+		u16 opcode;
+	} cmd;
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 __pad: 7;
+		u64 val;
+	} addr;
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 __pad: 7;
+	} dummy;
+	struct {
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 ecc: 1;
+		u8 __pad: 6;
+		enum spi_mem_data_dir dir;
+		unsigned int nbytes;
+		union {
+			void *in;
+			const void *out;
+		} buf;
+	} data;
+};
+
+struct spi_mem_dirmap_info {
+	struct spi_mem_op op_tmpl;
+	u64 offset;
+	u64 length;
+};
+
+struct spi_mem_dirmap_desc {
+	struct spi_mem *mem;
+	struct spi_mem_dirmap_info info;
+	unsigned int nodirmap;
+	void *priv;
+};
+
+typedef void (*btf_trace_spi_controller_busy)(void *, struct spi_controller *);
+
+typedef void (*btf_trace_spi_setup)(void *, struct spi_device *, int);
+
+typedef void (*btf_trace_spi_set_cs)(void *, struct spi_device *, bool);
+
+typedef void (*btf_trace_spi_message_submit)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_message_start)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_message_done)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_transfer_start)(void *, struct spi_message *, struct spi_transfer *);
+
+typedef void (*btf_trace_spi_transfer_stop)(void *, struct spi_message *, struct spi_transfer *);
+
+struct spi_board_info {
+	char modalias[32];
+	const void *platform_data;
+	const struct software_node *swnode;
+	void *controller_data;
+	int irq;
+	u32 max_speed_hz;
+	u16 bus_num;
+	u16 chip_select;
+	u32 mode;
+	u64 android_kabi_reserved1;
+};
+
+struct boardinfo {
+	struct list_head list;
+	struct spi_board_info board_info;
+};
+
+struct trace_event_raw_spi_controller {
+	struct trace_entry ent;
+	int bus_num;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_setup {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	unsigned long mode;
+	unsigned int bits_per_word;
+	unsigned int max_speed_hz;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_set_cs {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	unsigned long mode;
+	bool enable;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_message {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_message *msg;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_message_done {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_message *msg;
+	unsigned int frame;
+	unsigned int actual;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_transfer {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_transfer *xfer;
+	int len;
+	u32 __data_loc_rx_buf;
+	u32 __data_loc_tx_buf;
+	char __data[0];
+};
+
+struct spi_device_id;
+
+struct spi_driver {
+	const struct spi_device_id *id_table;
+	int (*probe)(struct spi_device *);
+	void (*remove)(struct spi_device *);
+	void (*shutdown)(struct spi_device *);
+	struct device_driver driver;
+	u64 android_kabi_reserved1;
+};
+
+struct spi_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+typedef void (*spi_res_release_t)(struct spi_controller *, struct spi_message *, void *);
+
+struct spi_res {
+	struct list_head entry;
+	spi_res_release_t release;
+	unsigned long long data[0];
+};
+
+struct trace_event_data_offsets_spi_transfer {
+	u32 rx_buf;
+	u32 tx_buf;
+};
+
+struct acpi_device;
+
+struct spi_replaced_transfers;
+
+typedef void (*spi_replaced_release_t)(struct spi_controller *, struct spi_message *, struct spi_replaced_transfers *);
+
+struct spi_replaced_transfers {
+	spi_replaced_release_t release;
+	void *extradata;
+	struct list_head replaced_transfers;
+	struct list_head *replaced_after;
+	size_t inserted;
+	struct spi_transfer inserted_transfers[0];
+};
+
+struct trace_event_data_offsets_spi_controller {};
+
+struct trace_event_data_offsets_spi_setup {};
+
+struct trace_event_data_offsets_spi_set_cs {};
+
+struct trace_event_data_offsets_spi_message {};
+
+struct trace_event_data_offsets_spi_message_done {};
+
+struct spi_mem_driver {
+	struct spi_driver spidrv;
+	int (*probe)(struct spi_mem *);
+	int (*remove)(struct spi_mem *);
+	void (*shutdown)(struct spi_mem *);
+};
+
+typedef void (*btf_trace_spmi_write_begin)(void *, u8, u8, u16, u8, const u8 *);
+
+typedef void (*btf_trace_spmi_write_end)(void *, u8, u8, u16, int);
+
+typedef void (*btf_trace_spmi_read_begin)(void *, u8, u8, u16);
+
+typedef void (*btf_trace_spmi_read_end)(void *, u8, u8, u16, int, u8, const u8 *);
+
+typedef void (*btf_trace_spmi_cmd)(void *, u8, u8, int);
+
+struct trace_event_raw_spmi_write_begin {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	u8 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_write_end {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_read_begin {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_read_end {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	int ret;
+	u8 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_cmd {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	int ret;
+	char __data[0];
+};
+
+struct spmi_driver {
+	struct device_driver driver;
+	int (*probe)(struct spmi_device *);
+	void (*remove)(struct spmi_device *);
+	void (*shutdown)(struct spmi_device *);
+	u64 android_kabi_reserved1;
+};
+
+struct trace_event_data_offsets_spmi_write_begin {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_spmi_read_end {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_spmi_write_end {};
+
+struct trace_event_data_offsets_spmi_read_begin {};
+
+struct trace_event_data_offsets_spmi_cmd {};
+
+enum {
+	NETIF_F_SG_BIT = 0,
+	NETIF_F_IP_CSUM_BIT = 1,
+	__UNUSED_NETIF_F_1 = 2,
+	NETIF_F_HW_CSUM_BIT = 3,
+	NETIF_F_IPV6_CSUM_BIT = 4,
+	NETIF_F_HIGHDMA_BIT = 5,
+	NETIF_F_FRAGLIST_BIT = 6,
+	NETIF_F_HW_VLAN_CTAG_TX_BIT = 7,
+	NETIF_F_HW_VLAN_CTAG_RX_BIT = 8,
+	NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,
+	NETIF_F_VLAN_CHALLENGED_BIT = 10,
+	NETIF_F_GSO_BIT = 11,
+	NETIF_F_LLTX_BIT = 12,
+	NETIF_F_NETNS_LOCAL_BIT = 13,
+	NETIF_F_GRO_BIT = 14,
+	NETIF_F_LRO_BIT = 15,
+	NETIF_F_GSO_SHIFT = 16,
+	NETIF_F_TSO_BIT = 16,
+	NETIF_F_GSO_ROBUST_BIT = 17,
+	NETIF_F_TSO_ECN_BIT = 18,
+	NETIF_F_TSO_MANGLEID_BIT = 19,
+	NETIF_F_TSO6_BIT = 20,
+	NETIF_F_FSO_BIT = 21,
+	NETIF_F_GSO_GRE_BIT = 22,
+	NETIF_F_GSO_GRE_CSUM_BIT = 23,
+	NETIF_F_GSO_IPXIP4_BIT = 24,
+	NETIF_F_GSO_IPXIP6_BIT = 25,
+	NETIF_F_GSO_UDP_TUNNEL_BIT = 26,
+	NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,
+	NETIF_F_GSO_PARTIAL_BIT = 28,
+	NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,
+	NETIF_F_GSO_SCTP_BIT = 30,
+	NETIF_F_GSO_ESP_BIT = 31,
+	NETIF_F_GSO_UDP_BIT = 32,
+	NETIF_F_GSO_UDP_L4_BIT = 33,
+	NETIF_F_GSO_FRAGLIST_BIT = 34,
+	NETIF_F_GSO_LAST = 34,
+	NETIF_F_FCOE_CRC_BIT = 35,
+	NETIF_F_SCTP_CRC_BIT = 36,
+	NETIF_F_FCOE_MTU_BIT = 37,
+	NETIF_F_NTUPLE_BIT = 38,
+	NETIF_F_RXHASH_BIT = 39,
+	NETIF_F_RXCSUM_BIT = 40,
+	NETIF_F_NOCACHE_COPY_BIT = 41,
+	NETIF_F_LOOPBACK_BIT = 42,
+	NETIF_F_RXFCS_BIT = 43,
+	NETIF_F_RXALL_BIT = 44,
+	NETIF_F_HW_VLAN_STAG_TX_BIT = 45,
+	NETIF_F_HW_VLAN_STAG_RX_BIT = 46,
+	NETIF_F_HW_VLAN_STAG_FILTER_BIT = 47,
+	NETIF_F_HW_L2FW_DOFFLOAD_BIT = 48,
+	NETIF_F_HW_TC_BIT = 49,
+	NETIF_F_HW_ESP_BIT = 50,
+	NETIF_F_HW_ESP_TX_CSUM_BIT = 51,
+	NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52,
+	NETIF_F_HW_TLS_TX_BIT = 53,
+	NETIF_F_HW_TLS_RX_BIT = 54,
+	NETIF_F_GRO_HW_BIT = 55,
+	NETIF_F_HW_TLS_RECORD_BIT = 56,
+	NETIF_F_GRO_FRAGLIST_BIT = 57,
+	NETIF_F_HW_MACSEC_BIT = 58,
+	NETIF_F_GRO_UDP_FWD_BIT = 59,
+	NETIF_F_HW_HSR_TAG_INS_BIT = 60,
+	NETIF_F_HW_HSR_TAG_RM_BIT = 61,
+	NETIF_F_HW_HSR_FWD_BIT = 62,
+	NETIF_F_HW_HSR_DUP_BIT = 63,
+	NETDEV_FEATURE_COUNT = 64,
+};
+
+enum {
+	SKBTX_HW_TSTAMP = 1,
+	SKBTX_SW_TSTAMP = 2,
+	SKBTX_IN_PROGRESS = 4,
+	SKBTX_HW_TSTAMP_USE_CYCLES = 8,
+	SKBTX_WIFI_STATUS = 16,
+	SKBTX_HW_TSTAMP_NETDEV = 32,
+	SKBTX_SCHED_TSTAMP = 64,
+};
+
+enum {
+	IFLA_UNSPEC = 0,
+	IFLA_ADDRESS = 1,
+	IFLA_BROADCAST = 2,
+	IFLA_IFNAME = 3,
+	IFLA_MTU = 4,
+	IFLA_LINK = 5,
+	IFLA_QDISC = 6,
+	IFLA_STATS = 7,
+	IFLA_COST = 8,
+	IFLA_PRIORITY = 9,
+	IFLA_MASTER = 10,
+	IFLA_WIRELESS = 11,
+	IFLA_PROTINFO = 12,
+	IFLA_TXQLEN = 13,
+	IFLA_MAP = 14,
+	IFLA_WEIGHT = 15,
+	IFLA_OPERSTATE = 16,
+	IFLA_LINKMODE = 17,
+	IFLA_LINKINFO = 18,
+	IFLA_NET_NS_PID = 19,
+	IFLA_IFALIAS = 20,
+	IFLA_NUM_VF = 21,
+	IFLA_VFINFO_LIST = 22,
+	IFLA_STATS64 = 23,
+	IFLA_VF_PORTS = 24,
+	IFLA_PORT_SELF = 25,
+	IFLA_AF_SPEC = 26,
+	IFLA_GROUP = 27,
+	IFLA_NET_NS_FD = 28,
+	IFLA_EXT_MASK = 29,
+	IFLA_PROMISCUITY = 30,
+	IFLA_NUM_TX_QUEUES = 31,
+	IFLA_NUM_RX_QUEUES = 32,
+	IFLA_CARRIER = 33,
+	IFLA_PHYS_PORT_ID = 34,
+	IFLA_CARRIER_CHANGES = 35,
+	IFLA_PHYS_SWITCH_ID = 36,
+	IFLA_LINK_NETNSID = 37,
+	IFLA_PHYS_PORT_NAME = 38,
+	IFLA_PROTO_DOWN = 39,
+	IFLA_GSO_MAX_SEGS = 40,
+	IFLA_GSO_MAX_SIZE = 41,
+	IFLA_PAD = 42,
+	IFLA_XDP = 43,
+	IFLA_EVENT = 44,
+	IFLA_NEW_NETNSID = 45,
+	IFLA_IF_NETNSID = 46,
+	IFLA_TARGET_NETNSID = 46,
+	IFLA_CARRIER_UP_COUNT = 47,
+	IFLA_CARRIER_DOWN_COUNT = 48,
+	IFLA_NEW_IFINDEX = 49,
+	IFLA_MIN_MTU = 50,
+	IFLA_MAX_MTU = 51,
+	IFLA_PROP_LIST = 52,
+	IFLA_ALT_IFNAME = 53,
+	IFLA_PERM_ADDRESS = 54,
+	IFLA_PROTO_DOWN_REASON = 55,
+	IFLA_PARENT_DEV_NAME = 56,
+	IFLA_PARENT_DEV_BUS_NAME = 57,
+	IFLA_GRO_MAX_SIZE = 58,
+	IFLA_TSO_MAX_SIZE = 59,
+	IFLA_TSO_MAX_SEGS = 60,
+	IFLA_ALLMULTI = 61,
+	IFLA_DEVLINK_PORT = 62,
+	IFLA_GSO_IPV4_MAX_SIZE = 63,
+	IFLA_GRO_IPV4_MAX_SIZE = 64,
+	__IFLA_MAX = 65,
+};
+
+struct ip_tunnel_parm {
+	char name[16];
+	int link;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	struct iphdr iph;
+};
+
+struct nh_info;
+
+struct nh_group;
+
+struct nexthop {
+	struct rb_node rb_node;
+	struct list_head fi_list;
+	struct list_head f6i_list;
+	struct list_head fdb_list;
+	struct list_head grp_list;
+	struct net *net;
+	u32 id;
+	u8 protocol;
+	u8 nh_flags;
+	bool is_group;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	union {
+		struct nh_info __attribute__((btf_type_tag("rcu"))) *nh_info;
+		struct nh_group __attribute__((btf_type_tag("rcu"))) *nh_grp;
+	};
+};
+
+struct fib_info;
+
+struct fib_nh {
+	struct fib_nh_common nh_common;
+	struct hlist_node nh_hash;
+	struct fib_info *nh_parent;
+	__be32 nh_saddr;
+	int nh_saddr_genid;
+};
+
+struct nh_info {
+	struct hlist_node dev_hash;
+	struct nexthop *nh_parent;
+	u8 family;
+	bool reject_nh;
+	bool fdb_nh;
+	union {
+		struct fib_nh_common fib_nhc;
+		struct fib_nh fib_nh;
+		struct fib6_nh fib6_nh;
+	};
+};
+
+struct fib_info {
+	struct hlist_node fib_hash;
+	struct hlist_node fib_lhash;
+	struct list_head nh_list;
+	struct net *fib_net;
+	refcount_t fib_treeref;
+	refcount_t fib_clntref;
+	unsigned int fib_flags;
+	unsigned char fib_dead;
+	unsigned char fib_protocol;
+	unsigned char fib_scope;
+	unsigned char fib_type;
+	__be32 fib_prefsrc;
+	u32 fib_tb_id;
+	u32 fib_priority;
+	struct dst_metrics *fib_metrics;
+	int fib_nhs;
+	bool fib_nh_is_v6;
+	bool nh_updated;
+	bool pfsrc_removed;
+	struct nexthop *nh;
+	struct callback_head rcu;
+	struct fib_nh fib_nh[0];
+};
+
+struct nh_grp_entry {
+	struct nexthop *nh;
+	u8 weight;
+	union {
+		struct {
+			atomic_t upper_bound;
+		} hthr;
+		struct {
+			struct list_head uw_nh_entry;
+			u16 count_buckets;
+			u16 wants_buckets;
+		} res;
+	};
+	struct list_head nh_list;
+	struct nexthop *nh_parent;
+};
+
+struct nh_res_table;
+
+struct nh_group {
+	struct nh_group *spare;
+	u16 num_nh;
+	bool is_multipath;
+	bool hash_threshold;
+	bool resilient;
+	bool fdb_nh;
+	bool has_v4;
+	struct nh_res_table __attribute__((btf_type_tag("rcu"))) *res_table;
+	struct nh_grp_entry nh_entries[0];
+};
+
+struct nh_res_bucket {
+	struct nh_grp_entry __attribute__((btf_type_tag("rcu"))) *nh_entry;
+	atomic_long_t used_time;
+	unsigned long migrated_time;
+	bool occupied;
+	u8 nh_flags;
+};
+
+struct nh_res_table {
+	struct net *net;
+	u32 nhg_id;
+	struct delayed_work upkeep_dw;
+	struct list_head uw_nh_entries;
+	unsigned long unbalanced_since;
+	u32 idle_timer;
+	u32 unbalanced_timer;
+	u16 num_nh_buckets;
+	struct nh_res_bucket nh_buckets[0];
+};
+
+enum noise_lengths {
+	NOISE_PUBLIC_KEY_LEN = 32,
+	NOISE_SYMMETRIC_KEY_LEN = 32,
+	NOISE_TIMESTAMP_LEN = 12,
+	NOISE_AUTHTAG_LEN = 16,
+	NOISE_HASH_LEN = 32,
+};
+
+enum index_hashtable_type {
+	INDEX_HASHTABLE_HANDSHAKE = 1,
+	INDEX_HASHTABLE_KEYPAIR = 2,
+};
+
+enum noise_handshake_state {
+	HANDSHAKE_ZEROED = 0,
+	HANDSHAKE_CREATED_INITIATION = 1,
+	HANDSHAKE_CONSUMED_INITIATION = 2,
+	HANDSHAKE_CREATED_RESPONSE = 3,
+	HANDSHAKE_CONSUMED_RESPONSE = 4,
+};
+
+enum message_type {
+	MESSAGE_INVALID = 0,
+	MESSAGE_HANDSHAKE_INITIATION = 1,
+	MESSAGE_HANDSHAKE_RESPONSE = 2,
+	MESSAGE_HANDSHAKE_COOKIE = 3,
+	MESSAGE_DATA = 4,
+};
+
+enum limits {
+	REKEY_AFTER_MESSAGES = 1152921504606846976ULL,
+	REJECT_AFTER_MESSAGES = 18446744073709543486ULL,
+	REKEY_TIMEOUT = 5ULL,
+	REKEY_TIMEOUT_JITTER_MAX_JIFFIES = 83ULL,
+	REKEY_AFTER_TIME = 120ULL,
+	REJECT_AFTER_TIME = 180ULL,
+	INITIATIONS_PER_SECOND = 50ULL,
+	MAX_PEERS_PER_DEVICE = 1048576ULL,
+	KEEPALIVE_TIMEOUT = 10ULL,
+	MAX_TIMER_HANDSHAKES = 18ULL,
+	MAX_QUEUED_INCOMING_HANDSHAKES = 4096ULL,
+	MAX_STAGED_PACKETS = 128ULL,
+	MAX_QUEUED_PACKETS = 1024ULL,
+};
+
+enum curve25519_lengths {
+	CURVE25519_KEY_SIZE = 32,
+};
+
+struct wg_peer;
+
+struct index_hashtable_entry {
+	struct wg_peer *peer;
+	struct hlist_node index_hash;
+	enum index_hashtable_type type;
+	__le32 index;
+};
+
+struct noise_symmetric_key {
+	u8 key[32];
+	u64 birthdate;
+	bool is_valid;
+};
+
+struct noise_replay_counter {
+	u64 counter;
+	spinlock_t lock;
+	unsigned long backtrack[128];
+};
+
+struct noise_keypair {
+	struct index_hashtable_entry entry;
+	struct noise_symmetric_key sending;
+	atomic64_t sending_counter;
+	struct noise_symmetric_key receiving;
+	struct noise_replay_counter receiving_counter;
+	__le32 remote_index;
+	bool i_am_the_initiator;
+	struct kref refcount;
+	struct callback_head rcu;
+	u64 internal_id;
+};
+
+struct prev_queue {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	struct sk_buff *peeked;
+	struct {
+		struct sk_buff *next;
+		struct sk_buff *prev;
+	} empty;
+	atomic_t count;
+};
+
+struct noise_keypairs {
+	struct noise_keypair __attribute__((btf_type_tag("rcu"))) *current_keypair;
+	struct noise_keypair __attribute__((btf_type_tag("rcu"))) *previous_keypair;
+	struct noise_keypair __attribute__((btf_type_tag("rcu"))) *next_keypair;
+	spinlock_t keypair_update_lock;
+};
+
+struct endpoint {
+	union {
+		struct sockaddr addr;
+		struct sockaddr_in addr4;
+		struct sockaddr_in6 addr6;
+	};
+	union {
+		struct {
+			struct in_addr src4;
+			int src_if4;
+		};
+		struct in6_addr src6;
+	};
+};
+
+struct dst_cache_pcpu;
+
+struct dst_cache {
+	struct dst_cache_pcpu __attribute__((btf_type_tag("percpu"))) *cache;
+	unsigned long reset_ts;
+};
+
+struct noise_static_identity;
+
+struct noise_handshake {
+	struct index_hashtable_entry entry;
+	enum noise_handshake_state state;
+	u64 last_initiation_consumption;
+	struct noise_static_identity *static_identity;
+	u8 ephemeral_private[32];
+	u8 remote_static[32];
+	u8 remote_ephemeral[32];
+	u8 precomputed_static_static[32];
+	u8 preshared_key[32];
+	u8 hash[32];
+	u8 chaining_key[32];
+	u8 latest_timestamp[12];
+	__le32 remote_index;
+	struct rw_semaphore lock;
+};
+
+struct cookie {
+	u64 birthdate;
+	bool is_valid;
+	u8 cookie[16];
+	bool have_sent_mac1;
+	u8 last_mac1_sent[16];
+	u8 cookie_decryption_key[32];
+	u8 message_mac1_key[32];
+	struct rw_semaphore lock;
+};
+
+struct gro_list {
+	struct list_head list;
+	int count;
+};
+
+struct napi_struct {
+	struct list_head poll_list;
+	unsigned long state;
+	int weight;
+	int defer_hard_irqs_count;
+	unsigned long gro_bitmask;
+	int (*poll)(struct napi_struct *, int);
+	int list_owner;
+	struct net_device *dev;
+	struct gro_list gro_hash[8];
+	struct sk_buff *skb;
+	struct list_head rx_list;
+	int rx_count;
+	unsigned int napi_id;
+	struct hrtimer timer;
+	struct task_struct *thread;
+	struct list_head dev_list;
+	struct hlist_node napi_hash_node;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct wg_device;
+
+struct wg_peer {
+	struct wg_device *device;
+	struct prev_queue tx_queue;
+	struct prev_queue rx_queue;
+	struct sk_buff_head staged_packet_queue;
+	int serial_work_cpu;
+	bool is_dead;
+	struct noise_keypairs keypairs;
+	struct endpoint endpoint;
+	struct dst_cache endpoint_cache;
+	rwlock_t endpoint_lock;
+	struct noise_handshake handshake;
+	atomic64_t last_sent_handshake;
+	struct work_struct transmit_handshake_work;
+	struct work_struct clear_peer_work;
+	struct work_struct transmit_packet_work;
+	struct cookie latest_cookie;
+	struct hlist_node pubkey_hash;
+	u64 rx_bytes;
+	u64 tx_bytes;
+	struct timer_list timer_retransmit_handshake;
+	struct timer_list timer_send_keepalive;
+	struct timer_list timer_new_handshake;
+	struct timer_list timer_zero_key_material;
+	struct timer_list timer_persistent_keepalive;
+	unsigned int timer_handshake_attempts;
+	u16 persistent_keepalive_interval;
+	bool timer_need_another_keepalive;
+	bool sent_lastminute_handshake;
+	struct timespec64 walltime_last_handshake;
+	struct kref refcount;
+	struct callback_head rcu;
+	struct list_head peer_list;
+	struct list_head allowedips_list;
+	struct napi_struct napi;
+	u64 internal_id;
+};
+
+struct multicore_worker;
+
+struct crypt_queue {
+	struct ptr_ring ring;
+	struct multicore_worker __attribute__((btf_type_tag("percpu"))) *worker;
+	int last_cpu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct noise_static_identity {
+	u8 static_public[32];
+	u8 static_private[32];
+	struct rw_semaphore lock;
+	bool has_identity;
+};
+
+struct cookie_checker {
+	u8 secret[32];
+	u8 cookie_encryption_key[32];
+	u8 message_mac1_key[32];
+	u64 secret_birthdate;
+	struct rw_semaphore secret_lock;
+	struct wg_device *device;
+};
+
+struct allowedips_node;
+
+struct allowedips {
+	struct allowedips_node __attribute__((btf_type_tag("rcu"))) *root4;
+	struct allowedips_node __attribute__((btf_type_tag("rcu"))) *root6;
+	u64 seq;
+};
+
+struct pubkey_hashtable;
+
+struct index_hashtable;
+
+struct wg_device {
+	struct net_device *dev;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypt_queue encrypt_queue;
+	struct crypt_queue decrypt_queue;
+	struct crypt_queue handshake_queue;
+	struct sock __attribute__((btf_type_tag("rcu"))) *sock4;
+	struct sock __attribute__((btf_type_tag("rcu"))) *sock6;
+	struct net __attribute__((btf_type_tag("rcu"))) *creating_net;
+	struct noise_static_identity static_identity;
+	struct workqueue_struct *packet_crypt_wq;
+	struct workqueue_struct *handshake_receive_wq;
+	struct workqueue_struct *handshake_send_wq;
+	struct cookie_checker cookie_checker;
+	struct pubkey_hashtable *peer_hashtable;
+	struct index_hashtable *index_hashtable;
+	struct allowedips peer_allowedips;
+	struct mutex device_update_lock;
+	struct mutex socket_update_lock;
+	struct list_head device_list;
+	struct list_head peer_list;
+	atomic_t handshake_queue_len;
+	unsigned int num_peers;
+	unsigned int device_update_gen;
+	u32 fwmark;
+	u16 incoming_port;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct multicore_worker {
+	void *ptr;
+	struct work_struct work;
+};
+
+struct pubkey_hashtable {
+	struct hlist_head hashtable[2048];
+	siphash_key_t key;
+	struct mutex lock;
+};
+
+struct index_hashtable {
+	struct hlist_head hashtable[8192];
+	spinlock_t lock;
+};
+
+struct allowedips_node {
+	struct wg_peer __attribute__((btf_type_tag("rcu"))) *peer;
+	struct allowedips_node __attribute__((btf_type_tag("rcu"))) *bit[2];
+	u8 cidr;
+	u8 bit_at_a;
+	u8 bit_at_b;
+	u8 bitlen;
+	long: 0;
+	u8 bits[16];
+	unsigned long parent_bit_packed;
+	union {
+		struct list_head peer_list;
+		struct callback_head rcu;
+	};
+};
+
+struct dst_cache_pcpu {
+	unsigned long refresh_ts;
+	struct dst_entry *dst;
+	u32 cookie;
+	union {
+		struct in_addr in_saddr;
+		struct in6_addr in6_saddr;
+	};
+};
+
+struct message_header {
+	__le32 type;
+};
+
+struct message_macs {
+	u8 mac1[16];
+	u8 mac2[16];
+};
+
+struct message_handshake_initiation {
+	struct message_header header;
+	__le32 sender_index;
+	u8 unencrypted_ephemeral[32];
+	u8 encrypted_static[48];
+	u8 encrypted_timestamp[28];
+	struct message_macs macs;
+};
+
+struct message_handshake_response {
+	struct message_header header;
+	__le32 sender_index;
+	__le32 receiver_index;
+	u8 unencrypted_ephemeral[32];
+	u8 encrypted_nothing[16];
+	struct message_macs macs;
+};
+
+struct in_ifaddr {
+	struct hlist_node hash;
+	struct in_ifaddr __attribute__((btf_type_tag("rcu"))) *ifa_next;
+	struct in_device *ifa_dev;
+	struct callback_head callback_head;
+	__be32 ifa_local;
+	__be32 ifa_address;
+	__be32 ifa_mask;
+	__u32 ifa_rt_priority;
+	__be32 ifa_broadcast;
+	unsigned char ifa_scope;
+	unsigned char ifa_prefixlen;
+	unsigned char ifa_proto;
+	__u32 ifa_flags;
+	char ifa_label[16];
+	__u32 ifa_valid_lft;
+	__u32 ifa_preferred_lft;
+	unsigned long ifa_cstamp;
+	unsigned long ifa_tstamp;
+};
+
+struct ip_sf_list;
+
+struct ip_mc_list {
+	struct in_device *interface;
+	__be32 multiaddr;
+	unsigned int sfmode;
+	struct ip_sf_list *sources;
+	struct ip_sf_list *tomb;
+	unsigned long sfcount[2];
+	union {
+		struct ip_mc_list *next;
+		struct ip_mc_list __attribute__((btf_type_tag("rcu"))) *next_rcu;
+	};
+	struct ip_mc_list __attribute__((btf_type_tag("rcu"))) *next_hash;
+	struct timer_list timer;
+	int users;
+	refcount_t refcnt;
+	spinlock_t lock;
+	char tm_running;
+	char reporter;
+	char unsolicit_count;
+	char loaded;
+	unsigned char gsquery;
+	unsigned char crcount;
+	struct callback_head rcu;
+};
+
+enum macsec_offload {
+	MACSEC_OFFLOAD_OFF = 0,
+	MACSEC_OFFLOAD_PHY = 1,
+	MACSEC_OFFLOAD_MAC = 2,
+	__MACSEC_OFFLOAD_END = 3,
+	MACSEC_OFFLOAD_MAX = 2,
+};
+
+struct macsec_secy;
+
+struct macsec_rx_sc;
+
+struct macsec_rx_sa;
+
+struct macsec_tx_sa;
+
+struct macsec_tx_sc_stats;
+
+struct macsec_tx_sa_stats;
+
+struct macsec_rx_sc_stats;
+
+struct macsec_rx_sa_stats;
+
+struct macsec_dev_stats;
+
+struct macsec_context {
+	union {
+		struct net_device *netdev;
+		struct phy_device *phydev;
+	};
+	enum macsec_offload offload;
+	struct macsec_secy *secy;
+	struct macsec_rx_sc *rx_sc;
+	struct {
+		bool update_pn;
+		unsigned char assoc_num;
+		u8 key[128];
+		union {
+			struct macsec_rx_sa *rx_sa;
+			struct macsec_tx_sa *tx_sa;
+		};
+	} sa;
+	union {
+		struct macsec_tx_sc_stats *tx_sc_stats;
+		struct macsec_tx_sa_stats *tx_sa_stats;
+		struct macsec_rx_sc_stats *rx_sc_stats;
+		struct macsec_rx_sa_stats *rx_sa_stats;
+		struct macsec_dev_stats *dev_stats;
+	} stats;
+};
+
+typedef u64 sci_t;
+
+enum macsec_validation_type {
+	MACSEC_VALIDATE_DISABLED = 0,
+	MACSEC_VALIDATE_CHECK = 1,
+	MACSEC_VALIDATE_STRICT = 2,
+	__MACSEC_VALIDATE_END = 3,
+	MACSEC_VALIDATE_MAX = 2,
+};
+
+struct pcpu_tx_sc_stats;
+
+struct metadata_dst;
+
+struct macsec_tx_sc {
+	bool active;
+	u8 encoding_sa;
+	bool encrypt;
+	bool send_sci;
+	bool end_station;
+	bool scb;
+	struct macsec_tx_sa __attribute__((btf_type_tag("rcu"))) *sa[4];
+	struct pcpu_tx_sc_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	struct metadata_dst *md_dst;
+};
+
+struct macsec_secy {
+	struct net_device *netdev;
+	unsigned int n_rx_sc;
+	sci_t sci;
+	u16 key_len;
+	u16 icv_len;
+	enum macsec_validation_type validate_frames;
+	bool xpn;
+	bool operational;
+	bool protect_frames;
+	bool replay_protect;
+	u32 replay_window;
+	struct macsec_tx_sc tx_sc;
+	struct macsec_rx_sc __attribute__((btf_type_tag("rcu"))) *rx_sc;
+};
+
+union salt {
+	struct {
+		u32 ssci;
+		u64 pn;
+	} __attribute__((packed));
+	u8 bytes[12];
+};
+
+typedef union salt salt_t;
+
+struct macsec_key {
+	u8 id[16];
+	struct crypto_aead *tfm;
+	salt_t salt;
+};
+
+typedef u32 ssci_t;
+
+union pn {
+	struct {
+		u32 lower;
+		u32 upper;
+	};
+	u64 full64;
+};
+
+typedef union pn pn_t;
+
+struct macsec_tx_sa {
+	struct macsec_key key;
+	ssci_t ssci;
+	spinlock_t lock;
+	union {
+		pn_t next_pn_halves;
+		u64 next_pn;
+	};
+	refcount_t refcnt;
+	bool active;
+	struct macsec_tx_sa_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	struct callback_head rcu;
+};
+
+struct macsec_tx_sa_stats {
+	__u32 OutPktsProtected;
+	__u32 OutPktsEncrypted;
+};
+
+struct macsec_tx_sc_stats {
+	__u64 OutPktsProtected;
+	__u64 OutPktsEncrypted;
+	__u64 OutOctetsProtected;
+	__u64 OutOctetsEncrypted;
+};
+
+struct pcpu_tx_sc_stats {
+	struct macsec_tx_sc_stats stats;
+	struct u64_stats_sync syncp;
+};
+
+struct ip_tunnel_key {
+	__be64 tun_id;
+	union {
+		struct {
+			__be32 src;
+			__be32 dst;
+		} ipv4;
+		struct {
+			struct in6_addr src;
+			struct in6_addr dst;
+		} ipv6;
+	} u;
+	__be16 tun_flags;
+	u8 tos;
+	u8 ttl;
+	__be32 label;
+	u32 nhid;
+	__be16 tp_src;
+	__be16 tp_dst;
+	__u8 flow_flags;
+};
+
+struct ip_tunnel_encap {
+	u16 type;
+	u16 flags;
+	__be16 sport;
+	__be16 dport;
+};
+
+struct ip_tunnel_info {
+	struct ip_tunnel_key key;
+	struct ip_tunnel_encap encap;
+	struct dst_cache dst_cache;
+	u8 options_len;
+	u8 mode;
+};
+
+struct hw_port_info {
+	struct net_device *lower_dev;
+	u32 port_id;
+};
+
+struct macsec_info {
+	sci_t sci;
+};
+
+struct xfrm_md_info {
+	u32 if_id;
+	int link;
+	struct dst_entry *dst_orig;
+};
+
+enum metadata_type {
+	METADATA_IP_TUNNEL = 0,
+	METADATA_HW_PORT_MUX = 1,
+	METADATA_MACSEC = 2,
+	METADATA_XFRM = 3,
+};
+
+struct metadata_dst {
+	struct dst_entry dst;
+	enum metadata_type type;
+	union {
+		struct ip_tunnel_info tun_info;
+		struct hw_port_info port_info;
+		struct macsec_info macsec_info;
+		struct xfrm_md_info xfrm_info;
+	} u;
+};
+
+struct pcpu_rx_sc_stats;
+
+struct macsec_rx_sc {
+	struct macsec_rx_sc __attribute__((btf_type_tag("rcu"))) *next;
+	sci_t sci;
+	bool active;
+	struct macsec_rx_sa __attribute__((btf_type_tag("rcu"))) *sa[4];
+	struct pcpu_rx_sc_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	refcount_t refcnt;
+	struct callback_head callback_head;
+};
+
+struct macsec_rx_sa {
+	struct macsec_key key;
+	ssci_t ssci;
+	spinlock_t lock;
+	union {
+		pn_t next_pn_halves;
+		u64 next_pn;
+	};
+	refcount_t refcnt;
+	bool active;
+	struct macsec_rx_sa_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	struct macsec_rx_sc *sc;
+	struct callback_head rcu;
+};
+
+struct macsec_rx_sa_stats {
+	__u32 InPktsOK;
+	__u32 InPktsInvalid;
+	__u32 InPktsNotValid;
+	__u32 InPktsNotUsingSA;
+	__u32 InPktsUnusedSA;
+};
+
+struct macsec_rx_sc_stats {
+	__u64 InOctetsValidated;
+	__u64 InOctetsDecrypted;
+	__u64 InPktsUnchecked;
+	__u64 InPktsDelayed;
+	__u64 InPktsOK;
+	__u64 InPktsInvalid;
+	__u64 InPktsLate;
+	__u64 InPktsNotValid;
+	__u64 InPktsNotUsingSA;
+	__u64 InPktsUnusedSA;
+};
+
+struct pcpu_rx_sc_stats {
+	struct macsec_rx_sc_stats stats;
+	struct u64_stats_sync syncp;
+};
+
+struct macsec_dev_stats {
+	__u64 OutPktsUntagged;
+	__u64 InPktsUntagged;
+	__u64 OutPktsTooLong;
+	__u64 InPktsNoTag;
+	__u64 InPktsBadTag;
+	__u64 InPktsUnknownSCI;
+	__u64 InPktsNoSCI;
+	__u64 InPktsOverrun;
+};
+
+enum message_alignments {
+	MESSAGE_PADDING_MULTIPLE = 16,
+	MESSAGE_MINIMUM_LENGTH = 32,
+};
+
+enum {
+	WG_NETDEV_FEATURES = 1126357076009ULL,
+};
+
+enum {
+	IPV4_DEVCONF_FORWARDING = 1,
+	IPV4_DEVCONF_MC_FORWARDING = 2,
+	IPV4_DEVCONF_PROXY_ARP = 3,
+	IPV4_DEVCONF_ACCEPT_REDIRECTS = 4,
+	IPV4_DEVCONF_SECURE_REDIRECTS = 5,
+	IPV4_DEVCONF_SEND_REDIRECTS = 6,
+	IPV4_DEVCONF_SHARED_MEDIA = 7,
+	IPV4_DEVCONF_RP_FILTER = 8,
+	IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,
+	IPV4_DEVCONF_BOOTP_RELAY = 10,
+	IPV4_DEVCONF_LOG_MARTIANS = 11,
+	IPV4_DEVCONF_TAG = 12,
+	IPV4_DEVCONF_ARPFILTER = 13,
+	IPV4_DEVCONF_MEDIUM_ID = 14,
+	IPV4_DEVCONF_NOXFRM = 15,
+	IPV4_DEVCONF_NOPOLICY = 16,
+	IPV4_DEVCONF_FORCE_IGMP_VERSION = 17,
+	IPV4_DEVCONF_ARP_ANNOUNCE = 18,
+	IPV4_DEVCONF_ARP_IGNORE = 19,
+	IPV4_DEVCONF_PROMOTE_SECONDARIES = 20,
+	IPV4_DEVCONF_ARP_ACCEPT = 21,
+	IPV4_DEVCONF_ARP_NOTIFY = 22,
+	IPV4_DEVCONF_ACCEPT_LOCAL = 23,
+	IPV4_DEVCONF_SRC_VMARK = 24,
+	IPV4_DEVCONF_PROXY_ARP_PVLAN = 25,
+	IPV4_DEVCONF_ROUTE_LOCALNET = 26,
+	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,
+	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,
+	IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,
+	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
+	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
+	IPV4_DEVCONF_BC_FORWARDING = 32,
+	IPV4_DEVCONF_ARP_EVICT_NOCARRIER = 33,
+	__IPV4_DEVCONF_MAX = 34,
+};
+
+enum in6_addr_gen_mode {
+	IN6_ADDR_GEN_MODE_EUI64 = 0,
+	IN6_ADDR_GEN_MODE_NONE = 1,
+	IN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,
+	IN6_ADDR_GEN_MODE_RANDOM = 3,
+};
+
+struct packet_cb {
+	u64 nonce;
+	struct noise_keypair *keypair;
+	atomic_t state;
+	u32 mtu;
+	u8 ds;
+};
+
+enum {
+	NAPI_STATE_SCHED = 0,
+	NAPI_STATE_MISSED = 1,
+	NAPI_STATE_DISABLE = 2,
+	NAPI_STATE_NPSVC = 3,
+	NAPI_STATE_LISTED = 4,
+	NAPI_STATE_NO_BUSY_POLL = 5,
+	NAPI_STATE_IN_BUSY_POLL = 6,
+	NAPI_STATE_PREFER_BUSY_POLL = 7,
+	NAPI_STATE_THREADED = 8,
+	NAPI_STATE_SCHED_THREADED = 9,
+};
+
+enum netdev_state_t {
+	__LINK_STATE_START = 0,
+	__LINK_STATE_PRESENT = 1,
+	__LINK_STATE_NOCARRIER = 2,
+	__LINK_STATE_LINKWATCH_PENDING = 3,
+	__LINK_STATE_DORMANT = 4,
+	__LINK_STATE_TESTING = 5,
+};
+
+struct udp_hslot;
+
+struct udp_table {
+	struct udp_hslot *hash;
+	struct udp_hslot *hash2;
+	unsigned int mask;
+	unsigned int log;
+};
+
+struct udp_hslot {
+	struct hlist_head head;
+	int count;
+	spinlock_t lock;
+};
+
+enum {
+	HANDSHAKE_DSCP = 136,
+};
+
+enum packet_state {
+	PACKET_STATE_UNCRYPTED = 0,
+	PACKET_STATE_CRYPTED = 1,
+	PACKET_STATE_DEAD = 2,
+};
+
+enum {
+	INET_ECN_NOT_ECT = 0,
+	INET_ECN_ECT_1 = 1,
+	INET_ECN_ECT_0 = 2,
+	INET_ECN_CE = 3,
+	INET_ECN_MASK = 3,
+};
+
+struct message_data {
+	struct message_header header;
+	__le32 key_idx;
+	__le64 counter;
+	u8 encrypted_data[0];
+};
+
+struct message_handshake_cookie {
+	struct message_header header;
+	__le32 receiver_index;
+	u8 nonce[24];
+	u8 encrypted_cookie[32];
+};
+
+struct vlan_hdr {
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+struct flow_dissector_key_control {
+	u16 thoff;
+	u16 addr_type;
+	u32 flags;
+};
+
+struct flow_dissector_key_basic {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+};
+
+struct flow_keys_basic {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+};
+
+struct flow_dissector {
+	unsigned long long used_keys;
+	unsigned short offset[33];
+};
+
+enum cookie_mac_state {
+	INVALID_MAC = 0,
+	VALID_MAC_BUT_NO_COOKIE = 1,
+	VALID_MAC_WITH_COOKIE_BUT_RATELIMITED = 2,
+	VALID_MAC_WITH_COOKIE = 3,
+};
+
+enum counter_values {
+	COUNTER_BITS_TOTAL = 8192,
+	COUNTER_REDUNDANT_BITS = 64,
+	COUNTER_WINDOW_SIZE = 8128,
+};
+
+enum gro_result {
+	GRO_MERGED = 0,
+	GRO_MERGED_FREE = 1,
+	GRO_HELD = 2,
+	GRO_NORMAL = 3,
+	GRO_CONSUMED = 4,
+};
+
+typedef enum gro_result gro_result_t;
+
+struct udp_tunnel_info {
+	unsigned short type;
+	sa_family_t sa_family;
+	__be16 port;
+	u8 hw_priv;
+};
+
+struct udp_tunnel_nic_shared {
+	struct udp_tunnel_nic *udp_tunnel_nic_info;
+	struct list_head devices;
+};
+
+enum rt_scope_t {
+	RT_SCOPE_UNIVERSE = 0,
+	RT_SCOPE_SITE = 200,
+	RT_SCOPE_LINK = 253,
+	RT_SCOPE_HOST = 254,
+	RT_SCOPE_NOWHERE = 255,
+};
+
+enum {
+	RTAX_UNSPEC = 0,
+	RTAX_LOCK = 1,
+	RTAX_MTU = 2,
+	RTAX_WINDOW = 3,
+	RTAX_RTT = 4,
+	RTAX_RTTVAR = 5,
+	RTAX_SSTHRESH = 6,
+	RTAX_CWND = 7,
+	RTAX_ADVMSS = 8,
+	RTAX_REORDERING = 9,
+	RTAX_HOPLIMIT = 10,
+	RTAX_INITCWND = 11,
+	RTAX_FEATURES = 12,
+	RTAX_RTO_MIN = 13,
+	RTAX_INITRWND = 14,
+	RTAX_QUICKACK = 15,
+	RTAX_CC_ALGO = 16,
+	RTAX_FASTOPEN_NO_COOKIE = 17,
+	__RTAX_MAX = 18,
+};
+
+struct udp_port_cfg {
+	u8 family;
+	union {
+		struct in_addr local_ip;
+		struct in6_addr local_ip6;
+	};
+	union {
+		struct in_addr peer_ip;
+		struct in6_addr peer_ip6;
+	};
+	__be16 local_udp_port;
+	__be16 peer_udp_port;
+	int bind_ifindex;
+	unsigned int use_udp_checksums: 1;
+	unsigned int use_udp6_tx_checksums: 1;
+	unsigned int use_udp6_rx_checksums: 1;
+	unsigned int ipv6_v6only: 1;
+};
+
+typedef int (*udp_tunnel_encap_rcv_t)(struct sock *, struct sk_buff *);
+
+typedef int (*udp_tunnel_encap_err_lookup_t)(struct sock *, struct sk_buff *);
+
+typedef void (*udp_tunnel_encap_err_rcv_t)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+
+typedef void (*udp_tunnel_encap_destroy_t)(struct sock *);
+
+typedef struct sk_buff * (*udp_tunnel_gro_receive_t)(struct sock *, struct list_head *, struct sk_buff *);
+
+typedef int (*udp_tunnel_gro_complete_t)(struct sock *, struct sk_buff *, int);
+
+struct udp_tunnel_sock_cfg {
+	void *sk_user_data;
+	__u8 encap_type;
+	udp_tunnel_encap_rcv_t encap_rcv;
+	udp_tunnel_encap_err_lookup_t encap_err_lookup;
+	udp_tunnel_encap_err_rcv_t encap_err_rcv;
+	udp_tunnel_encap_destroy_t encap_destroy;
+	udp_tunnel_gro_receive_t gro_receive;
+	udp_tunnel_gro_complete_t gro_complete;
+};
+
+typedef struct {
+	unsigned long key[2];
+} hsiphash_key_t;
+
+enum {
+	PACKETS_PER_SECOND = 20,
+	PACKETS_BURSTABLE = 5,
+	PACKET_COST = 50000000,
+	TOKEN_MAX = 250000000,
+};
+
+struct ratelimiter_entry {
+	u64 last_time_ns;
+	u64 tokens;
+	u64 ip;
+	void *net;
+	spinlock_t lock;
+	struct hlist_node hash;
+	struct callback_head rcu;
+};
+
+enum cookie_values {
+	COOKIE_SECRET_MAX_AGE = 120,
+	COOKIE_SECRET_LATENCY = 5,
+	COOKIE_NONCE_LEN = 24,
+	COOKIE_LEN = 16,
+};
+
+enum {
+	COOKIE_KEY_LABEL_LEN = 8,
+};
+
+enum wgdevice_attribute {
+	WGDEVICE_A_UNSPEC = 0,
+	WGDEVICE_A_IFINDEX = 1,
+	WGDEVICE_A_IFNAME = 2,
+	WGDEVICE_A_PRIVATE_KEY = 3,
+	WGDEVICE_A_PUBLIC_KEY = 4,
+	WGDEVICE_A_FLAGS = 5,
+	WGDEVICE_A_LISTEN_PORT = 6,
+	WGDEVICE_A_FWMARK = 7,
+	WGDEVICE_A_PEERS = 8,
+	__WGDEVICE_A_LAST = 9,
+};
+
+enum wg_cmd {
+	WG_CMD_GET_DEVICE = 0,
+	WG_CMD_SET_DEVICE = 1,
+	__WG_CMD_MAX = 2,
+};
+
+enum wgpeer_attribute {
+	WGPEER_A_UNSPEC = 0,
+	WGPEER_A_PUBLIC_KEY = 1,
+	WGPEER_A_PRESHARED_KEY = 2,
+	WGPEER_A_FLAGS = 3,
+	WGPEER_A_ENDPOINT = 4,
+	WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL = 5,
+	WGPEER_A_LAST_HANDSHAKE_TIME = 6,
+	WGPEER_A_RX_BYTES = 7,
+	WGPEER_A_TX_BYTES = 8,
+	WGPEER_A_ALLOWEDIPS = 9,
+	WGPEER_A_PROTOCOL_VERSION = 10,
+	__WGPEER_A_LAST = 11,
+};
+
+enum wgallowedip_attribute {
+	WGALLOWEDIP_A_UNSPEC = 0,
+	WGALLOWEDIP_A_FAMILY = 1,
+	WGALLOWEDIP_A_IPADDR = 2,
+	WGALLOWEDIP_A_CIDR_MASK = 3,
+	__WGALLOWEDIP_A_LAST = 4,
+};
+
+enum wgdevice_flag {
+	WGDEVICE_F_REPLACE_PEERS = 1,
+	__WGDEVICE_F_ALL = 1,
+};
+
+enum wgpeer_flag {
+	WGPEER_F_REMOVE_ME = 1,
+	WGPEER_F_REPLACE_ALLOWEDIPS = 2,
+	WGPEER_F_UPDATE_ONLY = 4,
+	__WGPEER_F_ALL = 7,
+};
+
+struct dump_ctx {
+	struct wg_device *wg;
+	struct wg_peer *next_peer;
+	u64 allowedips_seq;
+	struct allowedips_node *next_allowedip;
+};
+
+struct genl_dumpit_info {
+	struct genl_split_ops op;
+	struct genl_info info;
+};
+
+struct qdisc_walker {
+	int stop;
+	int skip;
+	int count;
+	int (*fn)(struct Qdisc *, unsigned long, struct qdisc_walker *);
+};
+
+struct ifb_q_stats_desc {
+	char desc[32];
+	size_t offset;
+};
+
+enum netdev_queue_state_t {
+	__QUEUE_STATE_DRV_XOFF = 0,
+	__QUEUE_STATE_STACK_XOFF = 1,
+	__QUEUE_STATE_FROZEN = 2,
+};
+
+enum ethtool_stringset {
+	ETH_SS_TEST = 0,
+	ETH_SS_STATS = 1,
+	ETH_SS_PRIV_FLAGS = 2,
+	ETH_SS_NTUPLE_FILTERS = 3,
+	ETH_SS_FEATURES = 4,
+	ETH_SS_RSS_HASH_FUNCS = 5,
+	ETH_SS_TUNABLES = 6,
+	ETH_SS_PHY_STATS = 7,
+	ETH_SS_PHY_TUNABLES = 8,
+	ETH_SS_LINK_MODES = 9,
+	ETH_SS_MSG_CLASSES = 10,
+	ETH_SS_WOL_MODES = 11,
+	ETH_SS_SOF_TIMESTAMPING = 12,
+	ETH_SS_TS_TX_TYPES = 13,
+	ETH_SS_TS_RX_FILTERS = 14,
+	ETH_SS_UDP_TUNNEL_TYPES = 15,
+	ETH_SS_STATS_STD = 16,
+	ETH_SS_STATS_ETH_PHY = 17,
+	ETH_SS_STATS_ETH_MAC = 18,
+	ETH_SS_STATS_ETH_CTRL = 19,
+	ETH_SS_STATS_RMON = 20,
+	ETH_SS_COUNT = 21,
+};
+
+struct ifb_q_stats {
+	u64 packets;
+	u64 bytes;
+	struct u64_stats_sync sync;
+};
+
+struct ifb_q_private {
+	struct net_device *dev;
+	struct tasklet_struct ifb_tasklet;
+	int tasklet_pending;
+	int txqnum;
+	struct sk_buff_head rq;
+	struct sk_buff_head tq;
+	struct ifb_q_stats rx_stats;
+	struct ifb_q_stats tx_stats;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ifb_dev_private {
+	struct ifb_q_private *tx_private;
+};
+
+struct mdio_bus_stats {
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t writes;
+	u64_stats_t reads;
+	struct u64_stats_sync syncp;
+};
+
+struct mdio_device;
+
+struct phy_package_shared;
+
+struct mii_bus {
+	struct module *owner;
+	const char *name;
+	char id[61];
+	void *priv;
+	int (*read)(struct mii_bus *, int, int);
+	int (*write)(struct mii_bus *, int, int, u16);
+	int (*read_c45)(struct mii_bus *, int, int, int);
+	int (*write_c45)(struct mii_bus *, int, int, int, u16);
+	int (*reset)(struct mii_bus *);
+	struct mdio_bus_stats stats[32];
+	struct mutex mdio_lock;
+	struct device *parent;
+	enum {
+		MDIOBUS_ALLOCATED = 1,
+		MDIOBUS_REGISTERED = 2,
+		MDIOBUS_UNREGISTERED = 3,
+		MDIOBUS_RELEASED = 4,
+	} state;
+	struct device dev;
+	struct mdio_device *mdio_map[32];
+	u32 phy_mask;
+	u32 phy_ignore_ta_mask;
+	int irq[32];
+	int reset_delay_us;
+	int reset_post_delay_us;
+	struct gpio_desc *reset_gpiod;
+	struct mutex shared_lock;
+	struct phy_package_shared *shared[32];
+};
+
+struct mdio_device {
+	struct device dev;
+	struct mii_bus *bus;
+	char modalias[32];
+	int (*bus_match)(struct device *, struct device_driver *);
+	void (*device_free)(struct mdio_device *);
+	void (*device_remove)(struct mdio_device *);
+	int addr;
+	int flags;
+	struct gpio_desc *reset_gpio;
+	struct reset_control *reset_ctrl;
+	unsigned int reset_assert_delay;
+	unsigned int reset_deassert_delay;
+};
+
+struct phy_package_shared {
+	int addr;
+	refcount_t refcnt;
+	unsigned long flags;
+	size_t priv_size;
+	void *priv;
+};
+
+struct mdio_board_info {
+	const char *bus_id;
+	char modalias[32];
+	int mdio_addr;
+	const void *platform_data;
+};
+
+struct mdio_board_entry {
+	struct list_head list;
+	struct mdio_board_info board_info;
+};
+
+struct phylib_stubs {
+	int (*hwtstamp_get)(struct phy_device *, struct kernel_hwtstamp_config *);
+	int (*hwtstamp_set)(struct phy_device *, struct kernel_hwtstamp_config *, struct netlink_ext_ack *);
+};
+
+struct mdiobus_devres {
+	struct mii_bus *mii;
+};
+
+struct sfp_eeprom_id;
+
+struct sfp_upstream_ops {
+	void (*attach)(void *, struct sfp_bus *);
+	void (*detach)(void *, struct sfp_bus *);
+	int (*module_insert)(void *, const struct sfp_eeprom_id *);
+	void (*module_remove)(void *);
+	int (*module_start)(void *);
+	void (*module_stop)(void *);
+	void (*link_down)(void *);
+	void (*link_up)(void *);
+	int (*connect_phy)(void *, struct phy_device *);
+	void (*disconnect_phy)(void *);
+};
+
+struct sfp_eeprom_base {
+	u8 phys_id;
+	u8 phys_ext_id;
+	u8 connector;
+	u8 if_1x_copper_passive: 1;
+	u8 if_1x_copper_active: 1;
+	u8 if_1x_lx: 1;
+	u8 if_1x_sx: 1;
+	u8 e10g_base_sr: 1;
+	u8 e10g_base_lr: 1;
+	u8 e10g_base_lrm: 1;
+	u8 e10g_base_er: 1;
+	u8 sonet_oc3_short_reach: 1;
+	u8 sonet_oc3_smf_intermediate_reach: 1;
+	u8 sonet_oc3_smf_long_reach: 1;
+	u8 unallocated_5_3: 1;
+	u8 sonet_oc12_short_reach: 1;
+	u8 sonet_oc12_smf_intermediate_reach: 1;
+	u8 sonet_oc12_smf_long_reach: 1;
+	u8 unallocated_5_7: 1;
+	u8 sonet_oc48_short_reach: 1;
+	u8 sonet_oc48_intermediate_reach: 1;
+	u8 sonet_oc48_long_reach: 1;
+	u8 sonet_reach_bit2: 1;
+	u8 sonet_reach_bit1: 1;
+	u8 sonet_oc192_short_reach: 1;
+	u8 escon_smf_1310_laser: 1;
+	u8 escon_mmf_1310_led: 1;
+	u8 e1000_base_sx: 1;
+	u8 e1000_base_lx: 1;
+	u8 e1000_base_cx: 1;
+	u8 e1000_base_t: 1;
+	u8 e100_base_lx: 1;
+	u8 e100_base_fx: 1;
+	u8 e_base_bx10: 1;
+	u8 e_base_px: 1;
+	u8 fc_tech_electrical_inter_enclosure: 1;
+	u8 fc_tech_lc: 1;
+	u8 fc_tech_sa: 1;
+	u8 fc_ll_m: 1;
+	u8 fc_ll_l: 1;
+	u8 fc_ll_i: 1;
+	u8 fc_ll_s: 1;
+	u8 fc_ll_v: 1;
+	u8 unallocated_8_0: 1;
+	u8 unallocated_8_1: 1;
+	u8 sfp_ct_passive: 1;
+	u8 sfp_ct_active: 1;
+	u8 fc_tech_ll: 1;
+	u8 fc_tech_sl: 1;
+	u8 fc_tech_sn: 1;
+	u8 fc_tech_electrical_intra_enclosure: 1;
+	u8 fc_media_sm: 1;
+	u8 unallocated_9_1: 1;
+	u8 fc_media_m5: 1;
+	u8 fc_media_m6: 1;
+	u8 fc_media_tv: 1;
+	u8 fc_media_mi: 1;
+	u8 fc_media_tp: 1;
+	u8 fc_media_tw: 1;
+	u8 fc_speed_100: 1;
+	u8 unallocated_10_1: 1;
+	u8 fc_speed_200: 1;
+	u8 fc_speed_3200: 1;
+	u8 fc_speed_400: 1;
+	u8 fc_speed_1600: 1;
+	u8 fc_speed_800: 1;
+	u8 fc_speed_1200: 1;
+	u8 encoding;
+	u8 br_nominal;
+	u8 rate_id;
+	u8 link_len[6];
+	char vendor_name[16];
+	u8 extended_cc;
+	char vendor_oui[3];
+	char vendor_pn[16];
+	char vendor_rev[4];
+	union {
+		__be16 optical_wavelength;
+		__be16 cable_compliance;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 reserved60_2: 6;
+			u8 reserved61: 8;
+		} passive;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 sff8431_lim: 1;
+			u8 fc_pi_4_lim: 1;
+			u8 reserved60_4: 4;
+			u8 reserved61: 8;
+		} active;
+	};
+	u8 reserved62;
+	u8 cc_base;
+};
+
+struct sfp_eeprom_ext {
+	__be16 options;
+	u8 br_max;
+	u8 br_min;
+	char vendor_sn[16];
+	char datecode[8];
+	u8 diagmon;
+	u8 enhopts;
+	u8 sff8472_compliance;
+	u8 cc_ext;
+};
+
+struct sfp_eeprom_id {
+	struct sfp_eeprom_base base;
+	struct sfp_eeprom_ext ext;
+};
+
+struct phy_c45_device_ids {
+	u32 devices_in_package;
+	u32 mmds_present;
+	u32 device_ids[32];
+};
+
+enum phy_state {
+	PHY_DOWN = 0,
+	PHY_READY = 1,
+	PHY_HALTED = 2,
+	PHY_ERROR = 3,
+	PHY_UP = 4,
+	PHY_RUNNING = 5,
+	PHY_NOLINK = 6,
+	PHY_CABLETEST = 7,
+};
+
+struct pse_control;
+
+struct phy_driver;
+
+struct phy_led_trigger;
+
+struct phylink;
+
+struct mii_timestamper;
+
+struct phy_device {
+	struct mdio_device mdio;
+	struct phy_driver *drv;
+	struct device_link *devlink;
+	u32 phy_id;
+	struct phy_c45_device_ids c45_ids;
+	unsigned int is_c45: 1;
+	unsigned int is_internal: 1;
+	unsigned int is_pseudo_fixed_link: 1;
+	unsigned int is_gigabit_capable: 1;
+	unsigned int has_fixups: 1;
+	unsigned int suspended: 1;
+	unsigned int suspended_by_mdio_bus: 1;
+	unsigned int sysfs_links: 1;
+	unsigned int loopback_enabled: 1;
+	unsigned int downshifted_rate: 1;
+	unsigned int is_on_sfp_module: 1;
+	unsigned int mac_managed_pm: 1;
+	unsigned int wol_enabled: 1;
+	unsigned int autoneg: 1;
+	unsigned int link: 1;
+	unsigned int autoneg_complete: 1;
+	unsigned int interrupts: 1;
+	unsigned int irq_suspended: 1;
+	unsigned int irq_rerun: 1;
+	int rate_matching;
+	enum phy_state state;
+	u32 dev_flags;
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int port;
+	int pause;
+	int asym_pause;
+	u8 master_slave_get;
+	u8 master_slave_set;
+	u8 master_slave_state;
+	unsigned long supported[2];
+	unsigned long advertising[2];
+	unsigned long lp_advertising[2];
+	unsigned long adv_old[2];
+	unsigned long supported_eee[2];
+	unsigned long advertising_eee[2];
+	bool eee_enabled;
+	unsigned long host_interfaces[1];
+	u32 eee_broken_modes;
+	struct phy_led_trigger *phy_led_triggers;
+	unsigned int phy_num_led_triggers;
+	struct phy_led_trigger *last_triggered;
+	struct phy_led_trigger *led_link_trigger;
+	struct list_head leds;
+	int irq;
+	void *priv;
+	struct phy_package_shared *shared;
+	struct sk_buff *skb;
+	void *ehdr;
+	struct nlattr *nest;
+	struct delayed_work state_queue;
+	struct mutex lock;
+	bool sfp_bus_attached;
+	struct sfp_bus *sfp_bus;
+	struct phylink *phylink;
+	struct net_device *attached_dev;
+	struct mii_timestamper *mii_ts;
+	struct pse_control *psec;
+	u8 mdix;
+	u8 mdix_ctrl;
+	int pma_extable;
+	unsigned int link_down_events;
+	void (*phy_link_change)(struct phy_device *, bool);
+	void (*adjust_link)(struct net_device *);
+	const struct macsec_ops *macsec_ops;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct mdio_driver_common {
+	struct device_driver driver;
+	int flags;
+};
+
+enum led_brightness {
+	LED_OFF = 0,
+	LED_ON = 1,
+	LED_HALF = 127,
+	LED_FULL = 255,
+};
+
+struct phy_tdr_config;
+
+struct phy_plca_cfg;
+
+struct phy_plca_status;
+
+struct phy_driver {
+	struct mdio_driver_common mdiodrv;
+	u32 phy_id;
+	char *name;
+	u32 phy_id_mask;
+	const unsigned long * const features;
+	u32 flags;
+	const void *driver_data;
+	int (*soft_reset)(struct phy_device *);
+	int (*config_init)(struct phy_device *);
+	int (*probe)(struct phy_device *);
+	int (*get_features)(struct phy_device *);
+	int (*get_rate_matching)(struct phy_device *, phy_interface_t);
+	int (*suspend)(struct phy_device *);
+	int (*resume)(struct phy_device *);
+	int (*config_aneg)(struct phy_device *);
+	int (*aneg_done)(struct phy_device *);
+	int (*read_status)(struct phy_device *);
+	int (*config_intr)(struct phy_device *);
+	irqreturn_t (*handle_interrupt)(struct phy_device *);
+	void (*remove)(struct phy_device *);
+	int (*match_phy_device)(struct phy_device *);
+	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*link_change_notify)(struct phy_device *);
+	int (*read_mmd)(struct phy_device *, int, u16);
+	int (*write_mmd)(struct phy_device *, int, u16, u16);
+	int (*read_page)(struct phy_device *);
+	int (*write_page)(struct phy_device *, int);
+	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
+	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
+	int (*cable_test_start)(struct phy_device *);
+	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
+	int (*cable_test_get_status)(struct phy_device *, bool *);
+	int (*get_sset_count)(struct phy_device *);
+	void (*get_strings)(struct phy_device *, u8 *);
+	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
+	int (*set_loopback)(struct phy_device *, bool);
+	int (*get_sqi)(struct phy_device *);
+	int (*get_sqi_max)(struct phy_device *);
+	int (*get_plca_cfg)(struct phy_device *, struct phy_plca_cfg *);
+	int (*set_plca_cfg)(struct phy_device *, const struct phy_plca_cfg *);
+	int (*get_plca_status)(struct phy_device *, struct phy_plca_status *);
+	int (*led_brightness_set)(struct phy_device *, u8, enum led_brightness);
+	int (*led_blink_set)(struct phy_device *, u8, unsigned long *, unsigned long *);
+	int (*led_hw_is_supported)(struct phy_device *, u8, unsigned long);
+	int (*led_hw_control_set)(struct phy_device *, u8, unsigned long);
+	int (*led_hw_control_get)(struct phy_device *, u8, unsigned long *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct phy_tdr_config {
+	u32 first;
+	u32 last;
+	u32 step;
+	s8 pair;
+};
+
+struct phy_plca_cfg {
+	int version;
+	int enabled;
+	int node_id;
+	int node_cnt;
+	int to_tmr;
+	int burst_cnt;
+	int burst_tmr;
+};
+
+struct phy_plca_status {
+	bool pst;
+};
+
+struct phylink_link_state {
+	unsigned long advertising[2];
+	unsigned long lp_advertising[2];
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int pause;
+	int rate_matching;
+	unsigned int link: 1;
+	unsigned int an_complete: 1;
+};
+
+struct phylink_mac_ops;
+
+struct phylink_config;
+
+struct phylink_pcs;
+
+struct phylink {
+	struct net_device *netdev;
+	const struct phylink_mac_ops *mac_ops;
+	struct phylink_config *config;
+	struct phylink_pcs *pcs;
+	struct device *dev;
+	unsigned int old_link_state: 1;
+	unsigned long phylink_disable_state;
+	struct phy_device *phydev;
+	phy_interface_t link_interface;
+	u8 cfg_link_an_mode;
+	u8 cur_link_an_mode;
+	u8 link_port;
+	unsigned long supported[2];
+	struct phylink_link_state link_config;
+	phy_interface_t cur_interface;
+	struct gpio_desc *link_gpio;
+	unsigned int link_irq;
+	struct timer_list link_poll;
+	void (*get_fixed_state)(struct net_device *, struct phylink_link_state *);
+	struct mutex state_mutex;
+	struct phylink_link_state phy_state;
+	struct work_struct resolve;
+	unsigned int pcs_neg_mode;
+	unsigned int pcs_state;
+	bool mac_link_dropped;
+	bool using_mac_select_pcs;
+	struct sfp_bus *sfp_bus;
+	bool sfp_may_have_phy;
+	unsigned long sfp_interfaces[1];
+	unsigned long sfp_support[2];
+	u8 sfp_port;
+};
+
+struct phylink_mac_ops {
+	void (*validate)(struct phylink_config *, unsigned long *, struct phylink_link_state *);
+	struct phylink_pcs * (*mac_select_pcs)(struct phylink_config *, phy_interface_t);
+	int (*mac_prepare)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_config)(struct phylink_config *, unsigned int, const struct phylink_link_state *);
+	int (*mac_finish)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_link_down)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_link_up)(struct phylink_config *, struct phy_device *, unsigned int, phy_interface_t, int, int, bool, bool);
+};
+
+enum phylink_op_type {
+	PHYLINK_NETDEV = 0,
+	PHYLINK_DEV = 1,
+};
+
+struct phylink_config {
+	struct device *dev;
+	enum phylink_op_type type;
+	bool poll_fixed_state;
+	bool mac_managed_pm;
+	bool ovr_an_inband;
+	void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
+	unsigned long supported_interfaces[1];
+	unsigned long mac_capabilities;
+};
+
+struct phylink_pcs_ops;
+
+struct phylink_pcs {
+	const struct phylink_pcs_ops *ops;
+	struct phylink *phylink;
+	bool neg_mode;
+	bool poll;
+};
+
+struct phylink_pcs_ops {
+	int (*pcs_validate)(struct phylink_pcs *, unsigned long *, const struct phylink_link_state *);
+	int (*pcs_enable)(struct phylink_pcs *);
+	void (*pcs_disable)(struct phylink_pcs *);
+	void (*pcs_pre_config)(struct phylink_pcs *, phy_interface_t);
+	int (*pcs_post_config)(struct phylink_pcs *, phy_interface_t);
+	void (*pcs_get_state)(struct phylink_pcs *, struct phylink_link_state *);
+	int (*pcs_config)(struct phylink_pcs *, unsigned int, phy_interface_t, const unsigned long *, bool);
+	void (*pcs_an_restart)(struct phylink_pcs *);
+	void (*pcs_link_up)(struct phylink_pcs *, unsigned int, phy_interface_t, int, int);
+};
+
+struct mii_timestamper {
+	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
+	void (*link_state)(struct mii_timestamper *, struct phy_device *);
+	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
+	struct device *device;
+};
+
+enum ethtool_link_mode_bit_indices {
+	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
+	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
+	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
+	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
+	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
+	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
+	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
+	ETHTOOL_LINK_MODE_TP_BIT = 7,
+	ETHTOOL_LINK_MODE_AUI_BIT = 8,
+	ETHTOOL_LINK_MODE_MII_BIT = 9,
+	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
+	ETHTOOL_LINK_MODE_BNC_BIT = 11,
+	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
+	ETHTOOL_LINK_MODE_Pause_BIT = 13,
+	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
+	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
+	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
+	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
+	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
+	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
+	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
+	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
+	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
+	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
+	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
+	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
+	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
+	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
+	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
+	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
+	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
+	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
+	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
+	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
+	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
+	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
+	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
+	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
+	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
+	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
+	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
+	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
+	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
+	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
+	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
+	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
+	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
+	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
+	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
+	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
+	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
+	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
+	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
+	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
+	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
+	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
+	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
+	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
+	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
+	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
+	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
+	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
+	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
+	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
+	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
+	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
+	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
+	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
+	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
+	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
+	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
+	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
+	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
+	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
+	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
+	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
+	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
+	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
+	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
+	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
+	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
+	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
+	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
+	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
+	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
+	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
+	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
+	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
+	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
+	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
+	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
+	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
+	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT = 92,
+	ETHTOOL_LINK_MODE_800000baseCR8_Full_BIT = 93,
+	ETHTOOL_LINK_MODE_800000baseKR8_Full_BIT = 94,
+	ETHTOOL_LINK_MODE_800000baseDR8_Full_BIT = 95,
+	ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT = 96,
+	ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT = 97,
+	ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT = 98,
+	ETHTOOL_LINK_MODE_10baseT1S_Full_BIT = 99,
+	ETHTOOL_LINK_MODE_10baseT1S_Half_BIT = 100,
+	ETHTOOL_LINK_MODE_10baseT1S_P2MP_Half_BIT = 101,
+	__ETHTOOL_LINK_MODE_MASK_NBITS = 102,
+};
+
+enum {
+	MLO_PAUSE_NONE = 0,
+	MLO_PAUSE_RX = 1,
+	MLO_PAUSE_TX = 2,
+	MLO_PAUSE_TXRX_MASK = 3,
+	MLO_PAUSE_AN = 4,
+	MLO_AN_PHY = 0,
+	MLO_AN_FIXED = 1,
+	MLO_AN_INBAND = 2,
+	PHYLINK_PCS_NEG_NONE = 0,
+	PHYLINK_PCS_NEG_ENABLED = 16,
+	PHYLINK_PCS_NEG_OUTBAND = 32,
+	PHYLINK_PCS_NEG_INBAND = 64,
+	PHYLINK_PCS_NEG_INBAND_DISABLED = 64,
+	PHYLINK_PCS_NEG_INBAND_ENABLED = 80,
+	MAC_SYM_PAUSE = 1,
+	MAC_ASYM_PAUSE = 2,
+	MAC_10HD = 4,
+	MAC_10FD = 8,
+	MAC_10 = 12,
+	MAC_100HD = 16,
+	MAC_100FD = 32,
+	MAC_100 = 48,
+	MAC_1000HD = 64,
+	MAC_1000FD = 128,
+	MAC_1000 = 192,
+	MAC_2500FD = 256,
+	MAC_5000FD = 512,
+	MAC_10000FD = 1024,
+	MAC_20000FD = 2048,
+	MAC_25000FD = 4096,
+	MAC_40000FD = 8192,
+	MAC_50000FD = 16384,
+	MAC_56000FD = 32768,
+	MAC_100000FD = 65536,
+	MAC_200000FD = 131072,
+	MAC_400000FD = 262144,
+};
+
+enum {
+	PHYLINK_DISABLE_STOPPED = 0,
+	PHYLINK_DISABLE_LINK = 1,
+	PHYLINK_DISABLE_MAC_WOL = 2,
+	PCS_STATE_DOWN = 0,
+	PCS_STATE_STARTING = 1,
+	PCS_STATE_STARTED = 2,
+};
+
+struct mii_ioctl_data {
+	__u16 phy_id;
+	__u16 reg_num;
+	__u16 val_in;
+	__u16 val_out;
+};
+
+struct phy_setting {
+	u32 speed;
+	u8 duplex;
+	u8 bit;
+};
+
+struct fixed_phy_status {
+	int link;
+	int speed;
+	int duplex;
+	int pause;
+	int asym_pause;
+};
+
+struct led_classdev;
+
+struct led_hw_trigger_type;
+
+struct led_trigger {
+	const char *name;
+	int (*activate)(struct led_classdev *);
+	void (*deactivate)(struct led_classdev *);
+	struct led_hw_trigger_type *trigger_type;
+	spinlock_t leddev_list_lock;
+	struct list_head led_cdevs;
+	struct list_head next_trig;
+	const struct attribute_group **groups;
+};
+
+struct phy_led_trigger {
+	struct led_trigger trigger;
+	char name[76];
+	unsigned int speed;
+};
+
+struct led_pattern;
+
+struct led_classdev {
+	const char *name;
+	unsigned int brightness;
+	unsigned int max_brightness;
+	unsigned int color;
+	int flags;
+	unsigned long work_flags;
+	void (*brightness_set)(struct led_classdev *, enum led_brightness);
+	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
+	enum led_brightness (*brightness_get)(struct led_classdev *);
+	int (*blink_set)(struct led_classdev *, unsigned long *, unsigned long *);
+	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
+	int (*pattern_clear)(struct led_classdev *);
+	struct device *dev;
+	const struct attribute_group **groups;
+	struct list_head node;
+	const char *default_trigger;
+	unsigned long blink_delay_on;
+	unsigned long blink_delay_off;
+	struct timer_list blink_timer;
+	int blink_brightness;
+	int new_blink_brightness;
+	void (*flash_resume)(struct led_classdev *);
+	struct work_struct set_brightness_work;
+	int delayed_set_value;
+	unsigned long delayed_delay_on;
+	unsigned long delayed_delay_off;
+	struct rw_semaphore trigger_lock;
+	struct led_trigger *trigger;
+	struct list_head trig_list;
+	void *trigger_data;
+	bool activated;
+	struct led_hw_trigger_type *trigger_type;
+	const char *hw_control_trigger;
+	int (*hw_control_is_supported)(struct led_classdev *, unsigned long);
+	int (*hw_control_set)(struct led_classdev *, unsigned long);
+	int (*hw_control_get)(struct led_classdev *, unsigned long *);
+	struct device * (*hw_control_get_device)(struct led_classdev *);
+	struct mutex led_access;
+};
+
+struct led_pattern {
+	u32 delta_t;
+	int brightness;
+};
+
+struct led_hw_trigger_type {
+	int dummy;
+};
+
+enum {
+	ETHTOOL_MSG_KERNEL_NONE = 0,
+	ETHTOOL_MSG_STRSET_GET_REPLY = 1,
+	ETHTOOL_MSG_LINKINFO_GET_REPLY = 2,
+	ETHTOOL_MSG_LINKINFO_NTF = 3,
+	ETHTOOL_MSG_LINKMODES_GET_REPLY = 4,
+	ETHTOOL_MSG_LINKMODES_NTF = 5,
+	ETHTOOL_MSG_LINKSTATE_GET_REPLY = 6,
+	ETHTOOL_MSG_DEBUG_GET_REPLY = 7,
+	ETHTOOL_MSG_DEBUG_NTF = 8,
+	ETHTOOL_MSG_WOL_GET_REPLY = 9,
+	ETHTOOL_MSG_WOL_NTF = 10,
+	ETHTOOL_MSG_FEATURES_GET_REPLY = 11,
+	ETHTOOL_MSG_FEATURES_SET_REPLY = 12,
+	ETHTOOL_MSG_FEATURES_NTF = 13,
+	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14,
+	ETHTOOL_MSG_PRIVFLAGS_NTF = 15,
+	ETHTOOL_MSG_RINGS_GET_REPLY = 16,
+	ETHTOOL_MSG_RINGS_NTF = 17,
+	ETHTOOL_MSG_CHANNELS_GET_REPLY = 18,
+	ETHTOOL_MSG_CHANNELS_NTF = 19,
+	ETHTOOL_MSG_COALESCE_GET_REPLY = 20,
+	ETHTOOL_MSG_COALESCE_NTF = 21,
+	ETHTOOL_MSG_PAUSE_GET_REPLY = 22,
+	ETHTOOL_MSG_PAUSE_NTF = 23,
+	ETHTOOL_MSG_EEE_GET_REPLY = 24,
+	ETHTOOL_MSG_EEE_NTF = 25,
+	ETHTOOL_MSG_TSINFO_GET_REPLY = 26,
+	ETHTOOL_MSG_CABLE_TEST_NTF = 27,
+	ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,
+	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,
+	ETHTOOL_MSG_FEC_GET_REPLY = 30,
+	ETHTOOL_MSG_FEC_NTF = 31,
+	ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 32,
+	ETHTOOL_MSG_STATS_GET_REPLY = 33,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 34,
+	ETHTOOL_MSG_MODULE_GET_REPLY = 35,
+	ETHTOOL_MSG_MODULE_NTF = 36,
+	ETHTOOL_MSG_PSE_GET_REPLY = 37,
+	ETHTOOL_MSG_RSS_GET_REPLY = 38,
+	ETHTOOL_MSG_PLCA_GET_CFG_REPLY = 39,
+	ETHTOOL_MSG_PLCA_GET_STATUS_REPLY = 40,
+	ETHTOOL_MSG_PLCA_NTF = 41,
+	ETHTOOL_MSG_MM_GET_REPLY = 42,
+	ETHTOOL_MSG_MM_NTF = 43,
+	__ETHTOOL_MSG_KERNEL_CNT = 44,
+	ETHTOOL_MSG_KERNEL_MAX = 43,
+};
+
+struct ethtool_phy_ops {
+	int (*get_sset_count)(struct phy_device *);
+	int (*get_strings)(struct phy_device *, u8 *);
+	int (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*get_plca_cfg)(struct phy_device *, struct phy_plca_cfg *);
+	int (*set_plca_cfg)(struct phy_device *, const struct phy_plca_cfg *, struct netlink_ext_ack *);
+	int (*get_plca_status)(struct phy_device *, struct phy_plca_status *);
+	int (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *);
+	int (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *);
+};
+
+struct phy_fixup {
+	struct list_head list;
+	char bus_id[64];
+	u32 phy_uid;
+	u32 phy_uid_mask;
+	int (*run)(struct phy_device *);
+};
+
+struct phy_led {
+	struct list_head list;
+	struct phy_device *phydev;
+	struct led_classdev led_cdev;
+	u8 index;
+};
+
+struct led_init_data {
+	struct fwnode_handle *fwnode;
+	const char *default_label;
+	const char *devicename;
+	bool devname_mandatory;
+};
+
+typedef void (*btf_trace_mdio_access)(void *, struct mii_bus *, char, u8, unsigned int, u16, int);
+
+struct trace_event_raw_mdio_access {
+	struct trace_entry ent;
+	char busid[61];
+	char read;
+	u8 addr;
+	u16 val;
+	unsigned int regnum;
+	char __data[0];
+};
+
+struct mdio_driver {
+	struct mdio_driver_common mdiodrv;
+	int (*probe)(struct mdio_device *);
+	void (*remove)(struct mdio_device *);
+	void (*shutdown)(struct mdio_device *);
+};
+
+struct trace_event_data_offsets_mdio_access {};
+
+struct mdio_bus_stat_attr {
+	int addr;
+	unsigned int field_offset;
+};
+
+struct swmii_regs {
+	u16 bmsr;
+	u16 lpa;
+	u16 lpagb;
+	u16 estat;
+};
+
+enum {
+	SWMII_SPEED_10 = 0,
+	SWMII_SPEED_100 = 1,
+	SWMII_SPEED_1000 = 2,
+	SWMII_DUPLEX_HALF = 0,
+	SWMII_DUPLEX_FULL = 1,
+};
+
+struct fixed_mdio_bus {
+	struct mii_bus *mii_bus;
+	struct list_head phys;
+};
+
+struct fixed_phy {
+	int addr;
+	struct phy_device *phydev;
+	struct fixed_phy_status status;
+	bool no_carrier;
+	int (*link_update)(struct net_device *, struct fixed_phy_status *);
+	struct list_head node;
+	struct gpio_desc *link_gpiod;
+};
+
+struct wpan_phy;
+
+struct wpan_dev_header_ops;
+
+struct wpan_dev {
+	struct wpan_phy *wpan_phy;
+	int iftype;
+	struct list_head list;
+	struct net_device *netdev;
+	const struct wpan_dev_header_ops *header_ops;
+	struct net_device *lowpan_dev;
+	u32 identifier;
+	__le16 pan_id;
+	__le16 short_addr;
+	__le64 extended_addr;
+	atomic_t bsn;
+	atomic_t dsn;
+	u8 min_be;
+	u8 max_be;
+	u8 csma_retries;
+	s8 frame_retries;
+	bool lbt;
+	bool ackreq;
+};
+
+enum nl802154_supported_bool_states {
+	NL802154_SUPPORTED_BOOL_FALSE = 0,
+	NL802154_SUPPORTED_BOOL_TRUE = 1,
+	__NL802154_SUPPORTED_BOOL_INVALD = 2,
+	NL802154_SUPPORTED_BOOL_BOTH = 3,
+	__NL802154_SUPPORTED_BOOL_AFTER_LAST = 4,
+	NL802154_SUPPORTED_BOOL_MAX = 3,
+};
+
+struct wpan_phy_supported {
+	u32 channels[32];
+	u32 cca_modes;
+	u32 cca_opts;
+	u32 iftypes;
+	enum nl802154_supported_bool_states lbt;
+	u8 min_minbe;
+	u8 max_minbe;
+	u8 min_maxbe;
+	u8 max_maxbe;
+	u8 min_csma_backoffs;
+	u8 max_csma_backoffs;
+	s8 min_frame_retries;
+	s8 max_frame_retries;
+	size_t tx_powers_size;
+	size_t cca_ed_levels_size;
+	const s32 *tx_powers;
+	const s32 *cca_ed_levels;
+};
+
+enum nl802154_cca_modes {
+	__NL802154_CCA_INVALID = 0,
+	NL802154_CCA_ENERGY = 1,
+	NL802154_CCA_CARRIER = 2,
+	NL802154_CCA_ENERGY_CARRIER = 3,
+	NL802154_CCA_ALOHA = 4,
+	NL802154_CCA_UWB_SHR = 5,
+	NL802154_CCA_UWB_MULTIPLEXED = 6,
+	__NL802154_CCA_ATTR_AFTER_LAST = 7,
+	NL802154_CCA_ATTR_MAX = 6,
+};
+
+enum nl802154_cca_opts {
+	NL802154_CCA_OPT_ENERGY_CARRIER_AND = 0,
+	NL802154_CCA_OPT_ENERGY_CARRIER_OR = 1,
+	__NL802154_CCA_OPT_ATTR_AFTER_LAST = 2,
+	NL802154_CCA_OPT_ATTR_MAX = 1,
+};
+
+struct wpan_phy_cca {
+	enum nl802154_cca_modes mode;
+	enum nl802154_cca_opts opt;
+};
+
+enum ieee802154_filtering_level {
+	IEEE802154_FILTERING_NONE = 0,
+	IEEE802154_FILTERING_1_FCS = 1,
+	IEEE802154_FILTERING_2_PROMISCUOUS = 2,
+	IEEE802154_FILTERING_3_SCAN = 3,
+	IEEE802154_FILTERING_4_FRAME_FIELDS = 4,
+};
+
+struct wpan_phy {
+	const void *privid;
+	unsigned long flags;
+	u8 current_channel;
+	u8 current_page;
+	struct wpan_phy_supported supported;
+	s32 transmit_power;
+	struct wpan_phy_cca cca;
+	__le64 perm_extended_addr;
+	s32 cca_ed_level;
+	u32 symbol_duration;
+	u16 lifs_period;
+	u16 sifs_period;
+	struct device dev;
+	possible_net_t _net;
+	spinlock_t queue_lock;
+	atomic_t ongoing_txs;
+	atomic_t hold_txs;
+	wait_queue_head_t sync_txq;
+	enum ieee802154_filtering_level filtering;
+	long: 64;
+	char priv[0];
+};
+
+struct ieee802154_addr;
+
+struct wpan_dev_header_ops {
+	int (*create)(struct sk_buff *, struct net_device *, const struct ieee802154_addr *, const struct ieee802154_addr *, unsigned int);
+};
+
+struct ieee802154_addr {
+	u8 mode;
+	__le16 pan_id;
+	union {
+		__le16 short_addr;
+		__le64 extended_addr;
+	};
+};
+
+enum {
+	NETIF_MSG_DRV_BIT = 0,
+	NETIF_MSG_PROBE_BIT = 1,
+	NETIF_MSG_LINK_BIT = 2,
+	NETIF_MSG_TIMER_BIT = 3,
+	NETIF_MSG_IFDOWN_BIT = 4,
+	NETIF_MSG_IFUP_BIT = 5,
+	NETIF_MSG_RX_ERR_BIT = 6,
+	NETIF_MSG_TX_ERR_BIT = 7,
+	NETIF_MSG_TX_QUEUED_BIT = 8,
+	NETIF_MSG_INTR_BIT = 9,
+	NETIF_MSG_TX_DONE_BIT = 10,
+	NETIF_MSG_RX_STATUS_BIT = 11,
+	NETIF_MSG_PKTDATA_BIT = 12,
+	NETIF_MSG_HW_BIT = 13,
+	NETIF_MSG_WOL_BIT = 14,
+	NETIF_MSG_CLASS_COUNT = 15,
+};
+
+enum {
+	IFLA_TUN_UNSPEC = 0,
+	IFLA_TUN_OWNER = 1,
+	IFLA_TUN_GROUP = 2,
+	IFLA_TUN_TYPE = 3,
+	IFLA_TUN_PI = 4,
+	IFLA_TUN_VNET_HDR = 5,
+	IFLA_TUN_PERSIST = 6,
+	IFLA_TUN_MULTI_QUEUE = 7,
+	IFLA_TUN_NUM_QUEUES = 8,
+	IFLA_TUN_NUM_DISABLED_QUEUES = 9,
+	__IFLA_TUN_MAX = 10,
+};
+
+enum {
+	SKB_GSO_TCPV4 = 1,
+	SKB_GSO_DODGY = 2,
+	SKB_GSO_TCP_ECN = 4,
+	SKB_GSO_TCP_FIXEDID = 8,
+	SKB_GSO_TCPV6 = 16,
+	SKB_GSO_FCOE = 32,
+	SKB_GSO_GRE = 64,
+	SKB_GSO_GRE_CSUM = 128,
+	SKB_GSO_IPXIP4 = 256,
+	SKB_GSO_IPXIP6 = 512,
+	SKB_GSO_UDP_TUNNEL = 1024,
+	SKB_GSO_UDP_TUNNEL_CSUM = 2048,
+	SKB_GSO_PARTIAL = 4096,
+	SKB_GSO_TUNNEL_REMCSUM = 8192,
+	SKB_GSO_SCTP = 16384,
+	SKB_GSO_ESP = 32768,
+	SKB_GSO_UDP = 65536,
+	SKB_GSO_UDP_L4 = 131072,
+	SKB_GSO_FRAGLIST = 262144,
+};
+
+enum xdp_mem_type {
+	MEM_TYPE_PAGE_SHARED = 0,
+	MEM_TYPE_PAGE_ORDER0 = 1,
+	MEM_TYPE_PAGE_POOL = 2,
+	MEM_TYPE_XSK_BUFF_POOL = 3,
+	MEM_TYPE_MAX = 4,
+};
+
+struct tun_struct;
+
+struct tun_flow_entry {
+	struct hlist_node hash_link;
+	struct callback_head rcu;
+	struct tun_struct *tun;
+	u32 rxhash;
+	u32 rps_rxhash;
+	int queue_index;
+	long: 64;
+	unsigned long updated;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tap_filter {
+	unsigned int count;
+	u32 mask[2];
+	unsigned char addr[48];
+};
+
+struct tun_file;
+
+struct tun_prog;
+
+struct tun_struct {
+	struct tun_file __attribute__((btf_type_tag("rcu"))) *tfiles[256];
+	unsigned int numqueues;
+	unsigned int flags;
+	kuid_t owner;
+	kgid_t group;
+	struct net_device *dev;
+	netdev_features_t set_features;
+	int align;
+	int vnet_hdr_sz;
+	int sndbuf;
+	struct tap_filter txflt;
+	struct sock_fprog fprog;
+	bool filter_attached;
+	u32 msg_enable;
+	spinlock_t lock;
+	struct hlist_head flows[1024];
+	struct timer_list flow_gc_timer;
+	unsigned long ageing_time;
+	unsigned int numdisabled;
+	struct list_head disabled;
+	void *security;
+	u32 flow_count;
+	u32 rx_batched;
+	atomic_long_t rx_frame_errors;
+	struct bpf_prog __attribute__((btf_type_tag("rcu"))) *xdp_prog;
+	struct tun_prog __attribute__((btf_type_tag("rcu"))) *steering_prog;
+	struct tun_prog __attribute__((btf_type_tag("rcu"))) *filter_prog;
+	struct ethtool_link_ksettings link_ksettings;
+	struct file *file;
+	struct ifreq *ifr;
+};
+
+struct tun_file {
+	struct sock sk;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct socket socket;
+	struct tun_struct __attribute__((btf_type_tag("rcu"))) *tun;
+	struct fasync_struct *fasync;
+	unsigned int flags;
+	union {
+		u16 queue_index;
+		unsigned int ifindex;
+	};
+	struct napi_struct napi;
+	bool napi_enabled;
+	bool napi_frags_enabled;
+	struct mutex napi_mutex;
+	struct list_head next;
+	struct tun_struct *detached;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring tx_ring;
+	struct xdp_rxq_info xdp_rxq;
+};
+
+struct tun_prog {
+	struct callback_head rcu;
+	struct bpf_prog *prog;
+};
+
+struct rps_sock_flow_table {
+	u32 mask;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 ents[0];
+};
+
+struct tun_pi {
+	__u16 flags;
+	__be16 proto;
+};
+
+struct virtio_net_hdr {
+	__u8 flags;
+	__u8 gso_type;
+	__virtio16 hdr_len;
+	__virtio16 gso_size;
+	__virtio16 csum_start;
+	__virtio16 csum_offset;
+};
+
+struct veth {
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+};
+
+struct nf_conntrack {
+	refcount_t use;
+};
+
+struct tun_page {
+	struct page *page;
+	int count;
+};
+
+struct tun_xdp_hdr {
+	int buflen;
+	struct virtio_net_hdr gso;
+};
+
+struct tun_filter {
+	__u16 flags;
+	__u16 count;
+	__u8 addr[0];
+};
+
+struct tun_msg_ctl {
+	unsigned short type;
+	unsigned short num;
+	void *ptr;
+};
+
+struct page_pool_params {
+	unsigned int flags;
+	unsigned int order;
+	unsigned int pool_size;
+	int nid;
+	struct device *dev;
+	struct napi_struct *napi;
+	enum dma_data_direction dma_dir;
+	unsigned int max_len;
+	unsigned int offset;
+	void (*init_callback)(struct page *, void *);
+	void *init_arg;
+};
+
+struct pp_alloc_cache {
+	u32 count;
+	struct page *cache[128];
+};
+
+struct page_pool {
+	struct page_pool_params p;
+	long frag_users;
+	struct page *frag_page;
+	unsigned int frag_offset;
+	u32 pages_state_hold_cnt;
+	struct delayed_work release_dw;
+	void (*disconnect)(void *);
+	unsigned long defer_start;
+	unsigned long defer_warn;
+	u32 xdp_mem_id;
+	struct pp_alloc_cache alloc;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring ring;
+	atomic_t pages_state_release_cnt;
+	refcount_t user_cnt;
+	u64 destroy_cnt;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct veth_q_stat_desc {
+	char desc[32];
+	size_t offset;
+};
+
+enum {
+	VETH_INFO_UNSPEC = 0,
+	VETH_INFO_PEER = 1,
+	__VETH_INFO_MAX = 2,
+};
+
+struct veth_stats {
+	u64 rx_drops;
+	u64 xdp_packets;
+	u64 xdp_bytes;
+	u64 xdp_redirect;
+	u64 xdp_drops;
+	u64 xdp_tx;
+	u64 xdp_tx_err;
+	u64 peer_tq_xdp_xmit;
+	u64 peer_tq_xdp_xmit_err;
+};
+
+struct veth_rq_stats {
+	struct veth_stats vs;
+	struct u64_stats_sync syncp;
+};
+
+struct veth_rq {
+	struct napi_struct xdp_napi;
+	struct napi_struct __attribute__((btf_type_tag("rcu"))) *napi;
+	struct net_device *dev;
+	struct bpf_prog __attribute__((btf_type_tag("rcu"))) *xdp_prog;
+	struct xdp_mem_info xdp_mem;
+	struct veth_rq_stats stats;
+	bool rx_notify_masked;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring xdp_ring;
+	struct xdp_rxq_info xdp_rxq;
+	struct page_pool *page_pool;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ifinfomsg {
+	unsigned char ifi_family;
+	unsigned char __ifi_pad;
+	unsigned short ifi_type;
+	int ifi_index;
+	unsigned int ifi_flags;
+	unsigned int ifi_change;
+};
+
+struct veth_priv {
+	struct net_device __attribute__((btf_type_tag("rcu"))) *peer;
+	atomic64_t dropped;
+	struct bpf_prog *_xdp_prog;
+	struct veth_rq *rq;
+	unsigned int requested_headroom;
+};
+
+struct veth_xdp_tx_bq {
+	struct xdp_frame *q[16];
+	unsigned int count;
+};
+
+struct veth_xdp_buff {
+	struct xdp_buff xdp;
+	struct sk_buff *skb;
+};
+
+struct uio_mem;
+
+struct map_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct uio_mem *, char *);
+	ssize_t (*store)(struct uio_mem *, const char *, size_t);
+};
+
+struct uio_map;
+
+struct uio_mem {
+	const char *name;
+	phys_addr_t addr;
+	unsigned long offs;
+	resource_size_t size;
+	int memtype;
+	void *internal_addr;
+	struct uio_map *map;
+};
+
+struct uio_map {
+	struct kobject kobj;
+	struct uio_mem *mem;
+};
+
+struct uio_port;
+
+struct portio_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct uio_port *, char *);
+	ssize_t (*store)(struct uio_port *, const char *, size_t);
+};
+
+struct uio_portio;
+
+struct uio_port {
+	const char *name;
+	unsigned long start;
+	unsigned long size;
+	int porttype;
+	struct uio_portio *portio;
+};
+
+struct uio_portio {
+	struct kobject kobj;
+	struct uio_port *port;
+};
+
+struct uio_info;
+
+struct uio_device {
+	struct module *owner;
+	struct device dev;
+	int minor;
+	atomic_t event;
+	struct fasync_struct *async_queue;
+	wait_queue_head_t wait;
+	struct uio_info *info;
+	struct mutex info_lock;
+	struct kobject *map_dir;
+	struct kobject *portio_dir;
+	u64 android_kabi_reserved1;
+};
+
+struct uio_info {
+	struct uio_device *uio_dev;
+	const char *name;
+	const char *version;
+	struct uio_mem mem[5];
+	struct uio_port port[5];
+	long irq;
+	unsigned long irq_flags;
+	void *priv;
+	irqreturn_t (*handler)(int, struct uio_info *);
+	int (*mmap)(struct uio_info *, struct vm_area_struct *);
+	int (*open)(struct uio_info *, struct inode *);
+	int (*release)(struct uio_info *, struct inode *);
+	int (*irqcontrol)(struct uio_info *, s32);
+	u64 android_kabi_reserved1;
+};
+
+struct uio_listener {
+	struct uio_device *dev;
+	s32 event_count;
+};
+
+enum usb_otg_state {
+	OTG_STATE_UNDEFINED = 0,
+	OTG_STATE_B_IDLE = 1,
+	OTG_STATE_B_SRP_INIT = 2,
+	OTG_STATE_B_PERIPHERAL = 3,
+	OTG_STATE_B_WAIT_ACON = 4,
+	OTG_STATE_B_HOST = 5,
+	OTG_STATE_A_IDLE = 6,
+	OTG_STATE_A_WAIT_VRISE = 7,
+	OTG_STATE_A_WAIT_BCON = 8,
+	OTG_STATE_A_HOST = 9,
+	OTG_STATE_A_SUSPEND = 10,
+	OTG_STATE_A_PERIPHERAL = 11,
+	OTG_STATE_A_WAIT_VFALL = 12,
+	OTG_STATE_A_VBUS_ERR = 13,
+};
+
+enum usb_device_speed {
+	USB_SPEED_UNKNOWN = 0,
+	USB_SPEED_LOW = 1,
+	USB_SPEED_FULL = 2,
+	USB_SPEED_HIGH = 3,
+	USB_SPEED_WIRELESS = 4,
+	USB_SPEED_SUPER = 5,
+	USB_SPEED_SUPER_PLUS = 6,
+};
+
+enum usb_ssp_rate {
+	USB_SSP_GEN_UNKNOWN = 0,
+	USB_SSP_GEN_2x1 = 1,
+	USB_SSP_GEN_1x2 = 2,
+	USB_SSP_GEN_2x2 = 3,
+};
+
+enum usb_device_state {
+	USB_STATE_NOTATTACHED = 0,
+	USB_STATE_ATTACHED = 1,
+	USB_STATE_POWERED = 2,
+	USB_STATE_RECONNECTING = 3,
+	USB_STATE_UNAUTHENTICATED = 4,
+	USB_STATE_DEFAULT = 5,
+	USB_STATE_ADDRESS = 6,
+	USB_STATE_CONFIGURED = 7,
+	USB_STATE_SUSPENDED = 8,
+};
+
+enum usb_dr_mode {
+	USB_DR_MODE_UNKNOWN = 0,
+	USB_DR_MODE_HOST = 1,
+	USB_DR_MODE_PERIPHERAL = 2,
+	USB_DR_MODE_OTG = 3,
+};
+
+struct usb_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bEndpointAddress;
+	__u8 bmAttributes;
+	__le16 wMaxPacketSize;
+	__u8 bInterval;
+	__u8 bRefresh;
+	__u8 bSynchAddress;
+} __attribute__((packed));
+
+struct usb_otg_caps {
+	u16 otg_rev;
+	bool hnp_support;
+	bool srp_support;
+	bool adp_support;
+};
+
+enum usb_interface_condition {
+	USB_INTERFACE_UNBOUND = 0,
+	USB_INTERFACE_BINDING = 1,
+	USB_INTERFACE_BOUND = 2,
+	USB_INTERFACE_UNBINDING = 3,
+};
+
+enum usb_wireless_status {
+	USB_WIRELESS_STATUS_NA = 0,
+	USB_WIRELESS_STATUS_DISCONNECTED = 1,
+	USB_WIRELESS_STATUS_CONNECTED = 2,
+};
+
+enum usb3_link_state {
+	USB3_LPM_U0 = 0,
+	USB3_LPM_U1 = 1,
+	USB3_LPM_U2 = 2,
+	USB3_LPM_U3 = 3,
+};
+
+enum usb_phy_type {
+	USB_PHY_TYPE_UNDEFINED = 0,
+	USB_PHY_TYPE_USB2 = 1,
+	USB_PHY_TYPE_USB3 = 2,
+};
+
+enum usb_phy_events {
+	USB_EVENT_NONE = 0,
+	USB_EVENT_VBUS = 1,
+	USB_EVENT_ID = 2,
+	USB_EVENT_CHARGER = 3,
+	USB_EVENT_ENUMERATED = 4,
+};
+
+enum usb_charger_type {
+	UNKNOWN_TYPE = 0,
+	SDP_TYPE = 1,
+	DCP_TYPE = 2,
+	CDP_TYPE = 3,
+	ACA_TYPE = 4,
+};
+
+enum usb_charger_state {
+	USB_CHARGER_DEFAULT = 0,
+	USB_CHARGER_PRESENT = 1,
+	USB_CHARGER_ABSENT = 2,
+};
+
+enum usb_dev_authorize_policy {
+	USB_DEVICE_AUTHORIZE_NONE = 0,
+	USB_DEVICE_AUTHORIZE_ALL = 1,
+	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
+};
+
+enum usb_port_connect_type {
+	USB_PORT_CONNECT_TYPE_UNKNOWN = 0,
+	USB_PORT_CONNECT_TYPE_HOT_PLUG = 1,
+	USB_PORT_CONNECT_TYPE_HARD_WIRED = 2,
+	USB_PORT_NOT_USED = 3,
+};
+
+struct usb_host_interface;
+
+struct usb_interface_assoc_descriptor;
+
+struct usb_interface {
+	struct usb_host_interface *altsetting;
+	struct usb_host_interface *cur_altsetting;
+	unsigned int num_altsetting;
+	struct usb_interface_assoc_descriptor *intf_assoc;
+	int minor;
+	enum usb_interface_condition condition;
+	unsigned int sysfs_files_created: 1;
+	unsigned int ep_devs_created: 1;
+	unsigned int unregistering: 1;
+	unsigned int needs_remote_wakeup: 1;
+	unsigned int needs_altsetting0: 1;
+	unsigned int needs_binding: 1;
+	unsigned int resetting_device: 1;
+	unsigned int authorized: 1;
+	enum usb_wireless_status wireless_status;
+	struct work_struct wireless_status_work;
+	struct device dev;
+	struct device *usb_dev;
+	struct work_struct reset_ws;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_interface_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bInterfaceNumber;
+	__u8 bAlternateSetting;
+	__u8 bNumEndpoints;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 iInterface;
+};
+
+struct usb_host_endpoint;
+
+struct usb_host_interface {
+	struct usb_interface_descriptor desc;
+	int extralen;
+	unsigned char *extra;
+	struct usb_host_endpoint *endpoint;
+	char *string;
+};
+
+struct usb_ss_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bMaxBurst;
+	__u8 bmAttributes;
+	__le16 wBytesPerInterval;
+};
+
+struct usb_ssp_isoc_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wReseved;
+	__le32 dwBytesPerInterval;
+};
+
+struct ep_device;
+
+struct usb_host_endpoint {
+	struct usb_endpoint_descriptor desc;
+	struct usb_ss_ep_comp_descriptor ss_ep_comp;
+	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
+	long: 0;
+	struct list_head urb_list;
+	void *hcpriv;
+	struct ep_device *ep_dev;
+	unsigned char *extra;
+	int extralen;
+	int enabled;
+	int streams;
+	long: 0;
+} __attribute__((packed));
+
+struct usb_interface_assoc_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bFirstInterface;
+	__u8 bInterfaceCount;
+	__u8 bFunctionClass;
+	__u8 bFunctionSubClass;
+	__u8 bFunctionProtocol;
+	__u8 iFunction;
+};
+
+struct usb_descriptor_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+};
+
+struct usb_device;
+
+struct each_dev_arg {
+	void *data;
+	int (*fn)(struct usb_device *, void *);
+};
+
+struct usb_device_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__le16 idVendor;
+	__le16 idProduct;
+	__le16 bcdDevice;
+	__u8 iManufacturer;
+	__u8 iProduct;
+	__u8 iSerialNumber;
+	__u8 bNumConfigurations;
+};
+
+struct usb2_lpm_parameters {
+	unsigned int besl;
+	int timeout;
+};
+
+struct usb3_lpm_parameters {
+	unsigned int mel;
+	unsigned int pel;
+	unsigned int sel;
+	int timeout;
+};
+
+struct usb_tt;
+
+struct usb_bus;
+
+struct usb_host_bos;
+
+struct usb_host_config;
+
+struct usb_device {
+	int devnum;
+	char devpath[16];
+	u32 route;
+	enum usb_device_state state;
+	enum usb_device_speed speed;
+	unsigned int rx_lanes;
+	unsigned int tx_lanes;
+	enum usb_ssp_rate ssp_rate;
+	struct usb_tt *tt;
+	int ttport;
+	unsigned int toggle[2];
+	struct usb_device *parent;
+	struct usb_bus *bus;
+	struct usb_host_endpoint ep0;
+	struct device dev;
+	struct usb_device_descriptor descriptor;
+	struct usb_host_bos *bos;
+	struct usb_host_config *config;
+	struct usb_host_config *actconfig;
+	struct usb_host_endpoint *ep_in[16];
+	struct usb_host_endpoint *ep_out[16];
+	char **rawdescriptors;
+	unsigned short bus_mA;
+	u8 portnum;
+	u8 level;
+	u8 devaddr;
+	unsigned int can_submit: 1;
+	unsigned int persist_enabled: 1;
+	unsigned int reset_in_progress: 1;
+	unsigned int have_langid: 1;
+	unsigned int authorized: 1;
+	unsigned int authenticated: 1;
+	unsigned int lpm_capable: 1;
+	unsigned int lpm_devinit_allow: 1;
+	unsigned int usb2_hw_lpm_capable: 1;
+	unsigned int usb2_hw_lpm_besl_capable: 1;
+	unsigned int usb2_hw_lpm_enabled: 1;
+	unsigned int usb2_hw_lpm_allowed: 1;
+	unsigned int usb3_lpm_u1_enabled: 1;
+	unsigned int usb3_lpm_u2_enabled: 1;
+	int string_langid;
+	char *product;
+	char *manufacturer;
+	char *serial;
+	struct list_head filelist;
+	int maxchild;
+	u32 quirks;
+	atomic_t urbnum;
+	unsigned long active_duration;
+	unsigned long connect_time;
+	unsigned int do_remote_wakeup: 1;
+	unsigned int reset_resume: 1;
+	unsigned int port_is_suspended: 1;
+	int slot_id;
+	struct usb2_lpm_parameters l1_params;
+	struct usb3_lpm_parameters u1_params;
+	struct usb3_lpm_parameters u2_params;
+	unsigned int lpm_disable_count;
+	u16 hub_delay;
+	unsigned int use_generic_driver: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_tt {
+	struct usb_device *hub;
+	int multi;
+	unsigned int think_time;
+	void *hcpriv;
+	spinlock_t lock;
+	struct list_head clear_list;
+	struct work_struct clear_work;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_devmap {
+	unsigned long devicemap[2];
+};
+
+struct mon_bus;
+
+struct usb_bus {
+	struct device *controller;
+	struct device *sysdev;
+	int busnum;
+	const char *bus_name;
+	u8 uses_pio_for_control;
+	u8 otg_port;
+	unsigned int is_b_host: 1;
+	unsigned int b_hnp_enable: 1;
+	unsigned int no_stop_on_short: 1;
+	unsigned int no_sg_constraint: 1;
+	unsigned int sg_tablesize;
+	int devnum_next;
+	struct mutex devnum_next_mutex;
+	struct usb_devmap devmap;
+	struct usb_device *root_hub;
+	struct usb_bus *hs_companion;
+	int bandwidth_allocated;
+	int bandwidth_int_reqs;
+	int bandwidth_isoc_reqs;
+	unsigned int resuming_ports;
+	struct mon_bus *mon_bus;
+	int monitored;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_bos_descriptor;
+
+struct usb_ext_cap_descriptor;
+
+struct usb_ss_cap_descriptor;
+
+struct usb_ssp_cap_descriptor;
+
+struct usb_ss_container_id_descriptor;
+
+struct usb_ptm_cap_descriptor;
+
+struct usb_host_bos {
+	struct usb_bos_descriptor *desc;
+	struct usb_ext_cap_descriptor *ext_cap;
+	struct usb_ss_cap_descriptor *ss_cap;
+	struct usb_ssp_cap_descriptor *ssp_cap;
+	struct usb_ss_container_id_descriptor *ss_id;
+	struct usb_ptm_cap_descriptor *ptm_cap;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_bos_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumDeviceCaps;
+} __attribute__((packed));
+
+struct usb_ext_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__le32 bmAttributes;
+} __attribute__((packed));
+
+struct usb_ss_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bmAttributes;
+	__le16 wSpeedSupported;
+	__u8 bFunctionalitySupport;
+	__u8 bU1devExitLat;
+	__le16 bU2DevExitLat;
+};
+
+struct usb_ssp_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__le32 bmAttributes;
+	__le16 wFunctionalitySupport;
+	__le16 wReserved;
+	union {
+		__le32 legacy_padding;
+		struct {
+			struct {} __empty_bmSublinkSpeedAttr;
+			__le32 bmSublinkSpeedAttr[0];
+		};
+	};
+};
+
+struct usb_ss_container_id_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__u8 ContainerID[16];
+};
+
+struct usb_ptm_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+struct usb_config_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumInterfaces;
+	__u8 bConfigurationValue;
+	__u8 iConfiguration;
+	__u8 bmAttributes;
+	__u8 bMaxPower;
+} __attribute__((packed));
+
+struct usb_interface_cache;
+
+struct usb_host_config {
+	struct usb_config_descriptor desc;
+	char *string;
+	struct usb_interface_assoc_descriptor *intf_assoc[16];
+	struct usb_interface *interface[32];
+	struct usb_interface_cache *intf_cache[32];
+	unsigned char *extra;
+	int extralen;
+};
+
+struct usb_interface_cache {
+	unsigned int num_altsetting;
+	struct kref ref;
+	struct usb_host_interface altsetting[0];
+};
+
+struct giveback_urb_bh {
+	bool running;
+	bool high_prio;
+	spinlock_t lock;
+	struct list_head head;
+	struct tasklet_struct bh;
+	struct usb_host_endpoint *completing_ep;
+};
+
+struct urb;
+
+struct hc_driver;
+
+struct usb_phy;
+
+struct usb_phy_roothub;
+
+struct usb_hcd {
+	struct usb_bus self;
+	struct kref kref;
+	const char *product_desc;
+	int speed;
+	char irq_descr[24];
+	struct timer_list rh_timer;
+	struct urb *status_urb;
+	struct work_struct wakeup_work;
+	struct work_struct died_work;
+	const struct hc_driver *driver;
+	struct usb_phy *usb_phy;
+	struct usb_phy_roothub *phy_roothub;
+	unsigned long flags;
+	enum usb_dev_authorize_policy dev_policy;
+	unsigned int rh_registered: 1;
+	unsigned int rh_pollable: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int msi_enabled: 1;
+	unsigned int skip_phy_initialization: 1;
+	unsigned int uses_new_polling: 1;
+	unsigned int has_tt: 1;
+	unsigned int amd_resume_bug: 1;
+	unsigned int can_do_streams: 1;
+	unsigned int tpl_support: 1;
+	unsigned int cant_recv_wakeups: 1;
+	unsigned int irq;
+	void *regs;
+	resource_size_t rsrc_start;
+	resource_size_t rsrc_len;
+	unsigned int power_budget;
+	struct giveback_urb_bh high_prio_bh;
+	struct giveback_urb_bh low_prio_bh;
+	struct mutex *address0_mutex;
+	struct mutex *bandwidth_mutex;
+	struct usb_hcd *shared_hcd;
+	struct usb_hcd *primary_hcd;
+	struct dma_pool *pool[4];
+	int state;
+	struct gen_pool *localmem_pool;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	unsigned long hcd_priv[0];
+};
+
+typedef void (*usb_complete_t)(struct urb *);
+
+struct usb_iso_packet_descriptor {
+	unsigned int offset;
+	unsigned int length;
+	unsigned int actual_length;
+	int status;
+};
+
+struct usb_anchor;
+
+struct urb {
+	struct kref kref;
+	int unlinked;
+	void *hcpriv;
+	atomic_t use_count;
+	atomic_t reject;
+	struct list_head urb_list;
+	struct list_head anchor_list;
+	struct usb_anchor *anchor;
+	struct usb_device *dev;
+	struct usb_host_endpoint *ep;
+	unsigned int pipe;
+	unsigned int stream_id;
+	int status;
+	unsigned int transfer_flags;
+	void *transfer_buffer;
+	dma_addr_t transfer_dma;
+	struct scatterlist *sg;
+	int num_mapped_sgs;
+	int num_sgs;
+	u32 transfer_buffer_length;
+	u32 actual_length;
+	unsigned char *setup_packet;
+	dma_addr_t setup_dma;
+	int start_frame;
+	int number_of_packets;
+	int interval;
+	int error_count;
+	void *context;
+	usb_complete_t complete;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	struct usb_iso_packet_descriptor iso_frame_desc[0];
+};
+
+struct usb_anchor {
+	struct list_head urb_list;
+	wait_queue_head_t wait;
+	spinlock_t lock;
+	atomic_t suspend_wakeups;
+	unsigned int poisoned: 1;
+};
+
+struct hc_driver {
+	const char *description;
+	const char *product_desc;
+	size_t hcd_priv_size;
+	irqreturn_t (*irq)(struct usb_hcd *);
+	int flags;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*pci_suspend)(struct usb_hcd *, bool);
+	int (*pci_resume)(struct usb_hcd *, pm_message_t);
+	int (*pci_poweroff_late)(struct usb_hcd *, bool);
+	void (*stop)(struct usb_hcd *);
+	void (*shutdown)(struct usb_hcd *);
+	int (*get_frame_number)(struct usb_hcd *);
+	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
+	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
+	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
+	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
+	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
+	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*hub_status_data)(struct usb_hcd *, char *);
+	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
+	int (*bus_suspend)(struct usb_hcd *);
+	int (*bus_resume)(struct usb_hcd *);
+	int (*start_port_reset)(struct usb_hcd *, unsigned int);
+	unsigned long (*get_resuming_ports)(struct usb_hcd *);
+	void (*relinquish_port)(struct usb_hcd *, int);
+	int (*port_handed_over)(struct usb_hcd *, int);
+	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
+	void (*free_dev)(struct usb_hcd *, struct usb_device *);
+	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
+	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*address_device)(struct usb_hcd *, struct usb_device *, unsigned int);
+	int (*enable_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+	int (*reset_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_device)(struct usb_hcd *, struct usb_device *);
+	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
+	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*find_raw_port_number)(struct usb_hcd *, int);
+	int (*port_power)(struct usb_hcd *, int, bool);
+	int (*submit_single_step_set_feature)(struct usb_hcd *, struct urb *, int);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_charger_current {
+	unsigned int sdp_min;
+	unsigned int sdp_max;
+	unsigned int dcp_min;
+	unsigned int dcp_max;
+	unsigned int cdp_min;
+	unsigned int cdp_max;
+	unsigned int aca_min;
+	unsigned int aca_max;
+};
+
+struct usb_otg;
+
+struct usb_phy_io_ops;
+
+struct extcon_dev;
+
+struct usb_phy {
+	struct device *dev;
+	const char *label;
+	unsigned int flags;
+	enum usb_phy_type type;
+	enum usb_phy_events last_event;
+	struct usb_otg *otg;
+	struct device *io_dev;
+	struct usb_phy_io_ops *io_ops;
+	void *io_priv;
+	struct extcon_dev *edev;
+	struct extcon_dev *id_edev;
+	struct notifier_block vbus_nb;
+	struct notifier_block id_nb;
+	struct notifier_block type_nb;
+	enum usb_charger_type chg_type;
+	enum usb_charger_state chg_state;
+	struct usb_charger_current chg_cur;
+	struct work_struct chg_work;
+	struct atomic_notifier_head notifier;
+	u16 port_status;
+	u16 port_change;
+	struct list_head head;
+	int (*init)(struct usb_phy *);
+	void (*shutdown)(struct usb_phy *);
+	int (*set_vbus)(struct usb_phy *, int);
+	int (*set_power)(struct usb_phy *, unsigned int);
+	int (*set_suspend)(struct usb_phy *, int);
+	int (*set_wakeup)(struct usb_phy *, bool);
+	int (*notify_connect)(struct usb_phy *, enum usb_device_speed);
+	int (*notify_disconnect)(struct usb_phy *, enum usb_device_speed);
+	enum usb_charger_type (*charger_detect)(struct usb_phy *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_gadget;
+
+struct usb_otg {
+	u8 default_a;
+	struct phy *phy;
+	struct usb_phy *usb_phy;
+	struct usb_bus *host;
+	struct usb_gadget *gadget;
+	enum usb_otg_state state;
+	int (*set_host)(struct usb_otg *, struct usb_bus *);
+	int (*set_peripheral)(struct usb_otg *, struct usb_gadget *);
+	int (*set_vbus)(struct usb_otg *, bool);
+	int (*start_srp)(struct usb_otg *);
+	int (*start_hnp)(struct usb_otg *);
+	u64 android_kabi_reserved1;
+};
+
+struct usb_phy_io_ops {
+	int (*read)(struct usb_phy *, u32);
+	int (*write)(struct usb_phy *, u32, u32);
+};
+
+struct usb_hub_status {
+	__le16 wHubStatus;
+	__le16 wHubChange;
+};
+
+struct usb_port_status {
+	__le16 wPortStatus;
+	__le16 wPortChange;
+	__le32 dwExtPortStatus;
+};
+
+struct usb_hub_descriptor;
+
+struct usb_port;
+
+struct usb_hub {
+	struct device *intfdev;
+	struct usb_device *hdev;
+	struct kref kref;
+	struct urb *urb;
+	u8 (*buffer)[8];
+	union {
+		struct usb_hub_status hub;
+		struct usb_port_status port;
+	} *status;
+	struct mutex status_mutex;
+	int error;
+	int nerrors;
+	unsigned long event_bits[1];
+	unsigned long change_bits[1];
+	unsigned long removed_bits[1];
+	unsigned long wakeup_bits[1];
+	unsigned long power_bits[1];
+	unsigned long child_usage_bits[1];
+	unsigned long warm_reset_bits[1];
+	struct usb_hub_descriptor *descriptor;
+	struct usb_tt tt;
+	unsigned int mA_per_port;
+	unsigned int wakeup_enabled_descendants;
+	unsigned int limited_power: 1;
+	unsigned int quiescing: 1;
+	unsigned int disconnected: 1;
+	unsigned int in_reset: 1;
+	unsigned int quirk_disable_autosuspend: 1;
+	unsigned int quirk_check_port_auto_suspend: 1;
+	unsigned int has_indicators: 1;
+	u8 indicator[31];
+	struct delayed_work leds;
+	struct delayed_work init_work;
+	struct work_struct events;
+	spinlock_t irq_urb_lock;
+	struct timer_list irq_urb_retry;
+	struct usb_port **ports;
+	struct list_head onboard_hub_devs;
+};
+
+struct usb_hub_descriptor {
+	__u8 bDescLength;
+	__u8 bDescriptorType;
+	__u8 bNbrPorts;
+	__le16 wHubCharacteristics;
+	__u8 bPwrOn2PwrGood;
+	__u8 bHubContrCurrent;
+	union {
+		struct {
+			__u8 DeviceRemovable[4];
+			__u8 PortPwrCtrlMask[4];
+		} hs;
+		struct {
+			__u8 bHubHdrDecLat;
+			__le16 wHubDelay;
+			__le16 DeviceRemovable;
+		} __attribute__((packed)) ss;
+	} u;
+} __attribute__((packed));
+
+typedef u32 usb_port_location_t;
+
+struct usb_dev_state;
+
+struct usb_port {
+	struct usb_device *child;
+	struct device dev;
+	struct usb_dev_state *port_owner;
+	struct usb_port *peer;
+	struct dev_pm_qos_request *req;
+	enum usb_port_connect_type connect_type;
+	enum usb_device_state state;
+	struct kernfs_node *state_kn;
+	usb_port_location_t location;
+	struct mutex status_lock;
+	u32 over_current_count;
+	u8 portnum;
+	u32 quirks;
+	unsigned int early_stop: 1;
+	unsigned int ignore_event: 1;
+	unsigned int is_superspeed: 1;
+	unsigned int usb3_lpm_u1_permit: 1;
+	unsigned int usb3_lpm_u2_permit: 1;
+};
+
+struct usbdrv_wrap {
+	struct device_driver driver;
+	int for_devices;
+};
+
+struct usb_device_id;
+
+struct usb_device_driver {
+	const char *name;
+	bool (*match)(struct usb_device *);
+	int (*probe)(struct usb_device *);
+	void (*disconnect)(struct usb_device *);
+	int (*suspend)(struct usb_device *, pm_message_t);
+	int (*resume)(struct usb_device *, pm_message_t);
+	const struct attribute_group **dev_groups;
+	struct usbdrv_wrap drvwrap;
+	const struct usb_device_id *id_table;
+	unsigned int supports_autosuspend: 1;
+	unsigned int generic_subclass: 1;
+};
+
+struct usb_device_id {
+	__u16 match_flags;
+	__u16 idVendor;
+	__u16 idProduct;
+	__u16 bcdDevice_lo;
+	__u16 bcdDevice_hi;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 bInterfaceNumber;
+	kernel_ulong_t driver_info;
+};
+
+struct usb_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct usb_driver {
+	const char *name;
+	int (*probe)(struct usb_interface *, const struct usb_device_id *);
+	void (*disconnect)(struct usb_interface *);
+	int (*unlocked_ioctl)(struct usb_interface *, unsigned int, void *);
+	int (*suspend)(struct usb_interface *, pm_message_t);
+	int (*resume)(struct usb_interface *);
+	int (*reset_resume)(struct usb_interface *);
+	int (*pre_reset)(struct usb_interface *);
+	int (*post_reset)(struct usb_interface *);
+	const struct usb_device_id *id_table;
+	const struct attribute_group **dev_groups;
+	struct usb_dynids dynids;
+	struct usbdrv_wrap drvwrap;
+	unsigned int no_dynamic_id: 1;
+	unsigned int supports_autosuspend: 1;
+	unsigned int disable_hub_initiated_lpm: 1;
+	unsigned int soft_unbind: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct find_interface_arg {
+	int minor;
+	struct device_driver *drv;
+};
+
+enum hub_led_mode {
+	INDICATOR_AUTO = 0,
+	INDICATOR_CYCLE = 1,
+	INDICATOR_GREEN_BLINK = 2,
+	INDICATOR_GREEN_BLINK_OFF = 3,
+	INDICATOR_AMBER_BLINK = 4,
+	INDICATOR_AMBER_BLINK_OFF = 5,
+	INDICATOR_ALT_BLINK = 6,
+	INDICATOR_ALT_BLINK_OFF = 7,
+} __attribute__((mode(byte)));
+
+enum hub_quiescing_type {
+	HUB_DISCONNECT = 0,
+	HUB_PRE_RESET = 1,
+	HUB_SUSPEND = 2,
+};
+
+enum hub_activation_type {
+	HUB_INIT = 0,
+	HUB_INIT2 = 1,
+	HUB_INIT3 = 2,
+	HUB_POST_RESET = 3,
+	HUB_RESUME = 4,
+	HUB_RESET_RESUME = 5,
+};
+
+struct usb_tt_clear {
+	struct list_head clear_list;
+	unsigned int tt;
+	u16 devinfo;
+	struct usb_hcd *hcd;
+	struct usb_host_endpoint *ep;
+};
+
+struct usb_otg_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bmAttributes;
+};
+
+struct usb_qualifier_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__u8 bNumConfigurations;
+	__u8 bRESERVED;
+};
+
+struct usbdevfs_hub_portinfo {
+	char nports;
+	char port[127];
+};
+
+struct usb_set_sel_req {
+	__u8 u1_sel;
+	__u8 u1_pel;
+	__le16 u2_sel;
+	__le16 u2_pel;
+};
+
+struct usb_mon_operations {
+	void (*urb_submit)(struct usb_bus *, struct urb *);
+	void (*urb_submit_error)(struct usb_bus *, struct urb *, int);
+	void (*urb_complete)(struct usb_bus *, struct urb *, int);
+};
+
+enum usb_led_event {
+	USB_LED_EVENT_HOST = 0,
+	USB_LED_EVENT_GADGET = 1,
+};
+
+struct usb_ctrlrequest {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__le16 wValue;
+	__le16 wIndex;
+	__le16 wLength;
+};
+
+struct usb_cdc_union_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bMasterInterface0;
+	__u8 bSlaveInterface0;
+};
+
+struct usb_cdc_country_functional_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iCountryCodeRelDate;
+	__le16 wCountyCode0;
+};
+
+struct usb_cdc_header_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdCDC;
+} __attribute__((packed));
+
+struct usb_cdc_acm_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+};
+
+struct usb_cdc_ether_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iMACAddress;
+	__le32 bmEthernetStatistics;
+	__le16 wMaxSegmentSize;
+	__le16 wNumberMCFilters;
+	__u8 bNumberPowerFilters;
+} __attribute__((packed));
+
+struct usb_cdc_call_mgmt_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+	__u8 bDataInterface;
+};
+
+struct usb_cdc_dmm_desc {
+	__u8 bFunctionLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u16 bcdVersion;
+	__le16 wMaxCommand;
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+	__u8 bGUID[16];
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_detail_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bGuidDescriptorType;
+	__u8 bDetailData[0];
+};
+
+struct usb_cdc_ncm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdNcmVersion;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMVersion;
+	__le16 wMaxControlMessage;
+	__u8 bNumberFilters;
+	__u8 bMaxFilterSize;
+	__le16 wMaxSegmentSize;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_extended_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMExtendedVersion;
+	__u8 bMaxOutstandingCommandMessages;
+	__le16 wMTU;
+} __attribute__((packed));
+
+struct set_config_request {
+	struct usb_device *udev;
+	int config;
+	struct work_struct work;
+	struct list_head node;
+};
+
+struct usb_sg_request {
+	int status;
+	size_t bytes;
+	spinlock_t lock;
+	struct usb_device *dev;
+	int pipe;
+	int entries;
+	struct urb **urbs;
+	int count;
+	struct completion complete;
+};
+
+struct api_context {
+	struct completion done;
+	int status;
+};
+
+struct usb_cdc_network_terminal_desc;
+
+struct usb_cdc_obex_desc;
+
+struct usb_cdc_parsed_header {
+	struct usb_cdc_union_desc *usb_cdc_union_desc;
+	struct usb_cdc_header_desc *usb_cdc_header_desc;
+	struct usb_cdc_call_mgmt_descriptor *usb_cdc_call_mgmt_descriptor;
+	struct usb_cdc_acm_descriptor *usb_cdc_acm_descriptor;
+	struct usb_cdc_country_functional_desc *usb_cdc_country_functional_desc;
+	struct usb_cdc_network_terminal_desc *usb_cdc_network_terminal_desc;
+	struct usb_cdc_ether_desc *usb_cdc_ether_desc;
+	struct usb_cdc_dmm_desc *usb_cdc_dmm_desc;
+	struct usb_cdc_mdlm_desc *usb_cdc_mdlm_desc;
+	struct usb_cdc_mdlm_detail_desc *usb_cdc_mdlm_detail_desc;
+	struct usb_cdc_obex_desc *usb_cdc_obex_desc;
+	struct usb_cdc_ncm_desc *usb_cdc_ncm_desc;
+	struct usb_cdc_mbim_desc *usb_cdc_mbim_desc;
+	struct usb_cdc_mbim_extended_desc *usb_cdc_mbim_extended_desc;
+	bool phonet_magic_present;
+};
+
+struct usb_cdc_network_terminal_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bEntityId;
+	__u8 iName;
+	__u8 bChannelIndex;
+	__u8 bPhysicalInterface;
+};
+
+struct usb_cdc_obex_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+} __attribute__((packed));
+
+struct usb_dynid {
+	struct list_head node;
+	struct usb_device_id id;
+};
+
+struct usb_dev_cap_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+struct usb_class_driver {
+	char *name;
+	char * (*devnode)(const struct device *, umode_t *);
+	const struct file_operations *fops;
+	int minor_base;
+};
+
+struct ep_device {
+	struct usb_endpoint_descriptor *desc;
+	struct usb_device *udev;
+	struct device dev;
+};
+
+enum snoop_when {
+	SUBMIT = 0,
+	COMPLETE___2 = 1,
+};
+
+struct usb_dev_state {
+	struct list_head list;
+	struct usb_device *dev;
+	struct file *file;
+	spinlock_t lock;
+	struct list_head async_pending;
+	struct list_head async_completed;
+	struct list_head memory_list;
+	wait_queue_head_t wait;
+	wait_queue_head_t wait_for_resume;
+	unsigned int discsignr;
+	struct pid *disc_pid;
+	const struct cred *cred;
+	sigval_t disccontext;
+	unsigned long ifclaimed;
+	u32 disabled_bulk_eps;
+	unsigned long interface_allowed_mask;
+	int not_yet_resumed;
+	bool suspend_allowed;
+	bool privileges_dropped;
+};
+
+struct usb_memory;
+
+struct async {
+	struct list_head asynclist;
+	struct usb_dev_state *ps;
+	struct pid *pid;
+	const struct cred *cred;
+	unsigned int signr;
+	unsigned int ifnum;
+	void __attribute__((btf_type_tag("user"))) *userbuffer;
+	void __attribute__((btf_type_tag("user"))) *userurb;
+	sigval_t userurb_sigval;
+	struct urb *urb;
+	struct usb_memory *usbm;
+	unsigned int mem_usage;
+	int status;
+	u8 bulk_addr;
+	u8 bulk_status;
+};
+
+struct usb_memory {
+	struct list_head memlist;
+	int vma_use_count;
+	int urb_use_count;
+	u32 size;
+	void *mem;
+	dma_addr_t dma_handle;
+	unsigned long vm_start;
+	struct usb_dev_state *ps;
+};
+
+struct usbdevfs_iso_packet_desc {
+	unsigned int length;
+	unsigned int actual_length;
+	unsigned int status;
+};
+
+struct usbdevfs_urb {
+	unsigned char type;
+	unsigned char endpoint;
+	int status;
+	unsigned int flags;
+	void __attribute__((btf_type_tag("user"))) *buffer;
+	int buffer_length;
+	int actual_length;
+	int start_frame;
+	union {
+		int number_of_packets;
+		unsigned int stream_id;
+	};
+	int error_count;
+	unsigned int signr;
+	void __attribute__((btf_type_tag("user"))) *usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_urb32 {
+	unsigned char type;
+	unsigned char endpoint;
+	compat_int_t status;
+	compat_uint_t flags;
+	compat_caddr_t buffer;
+	compat_int_t buffer_length;
+	compat_int_t actual_length;
+	compat_int_t start_frame;
+	compat_int_t number_of_packets;
+	compat_int_t error_count;
+	compat_uint_t signr;
+	compat_caddr_t usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_setinterface {
+	unsigned int interface;
+	unsigned int altsetting;
+};
+
+struct usbdevfs_bulktransfer32 {
+	compat_uint_t ep;
+	compat_uint_t len;
+	compat_uint_t timeout;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_bulktransfer {
+	unsigned int ep;
+	unsigned int len;
+	unsigned int timeout;
+	void __attribute__((btf_type_tag("user"))) *data;
+};
+
+struct usbdevfs_getdriver {
+	unsigned int interface;
+	char driver[256];
+};
+
+struct usbdevfs_disconnect_claim {
+	unsigned int interface;
+	unsigned int flags;
+	char driver[256];
+};
+
+struct usbdevfs_disconnectsignal32 {
+	compat_int_t signr;
+	compat_caddr_t context;
+};
+
+struct usbdevfs_ctrltransfer32 {
+	u8 bRequestType;
+	u8 bRequest;
+	u16 wValue;
+	u16 wIndex;
+	u16 wLength;
+	u32 timeout;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_ctrltransfer {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__u16 wValue;
+	__u16 wIndex;
+	__u16 wLength;
+	__u32 timeout;
+	void __attribute__((btf_type_tag("user"))) *data;
+};
+
+struct usbdevfs_disconnectsignal {
+	unsigned int signr;
+	void __attribute__((btf_type_tag("user"))) *context;
+};
+
+struct usbdevfs_ioctl32 {
+	s32 ifno;
+	s32 ioctl_code;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_ioctl {
+	int ifno;
+	int ioctl_code;
+	void __attribute__((btf_type_tag("user"))) *data;
+};
+
+struct usbdevfs_connectinfo {
+	unsigned int devnum;
+	unsigned char slow;
+};
+
+struct usbdevfs_conninfo_ex {
+	__u32 size;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 speed;
+	__u8 num_ports;
+	__u8 ports[7];
+};
+
+struct usbdevfs_streams {
+	unsigned int num_streams;
+	unsigned int num_eps;
+	unsigned char eps[0];
+};
+
+struct quirk_entry {
+	u16 vid;
+	u16 pid;
+	u32 flags;
+};
+
+struct class_info {
+	int class;
+	char *class_name;
+};
+
+struct usb_phy_roothub {
+	struct phy *phy;
+	struct list_head list;
+};
+
+typedef void (*companion_fn)(struct pci_dev *, struct usb_hcd *, struct pci_dev *, struct usb_hcd *);
+
+struct phy_devm {
+	struct usb_phy *phy;
+	struct notifier_block *nb;
+};
+
+enum usb_phy_interface {
+	USBPHY_INTERFACE_MODE_UNKNOWN = 0,
+	USBPHY_INTERFACE_MODE_UTMI = 1,
+	USBPHY_INTERFACE_MODE_UTMIW = 2,
+	USBPHY_INTERFACE_MODE_ULPI = 3,
+	USBPHY_INTERFACE_MODE_SERIAL = 4,
+	USBPHY_INTERFACE_MODE_HSIC = 5,
+};
+
+struct usb_ep;
+
+struct usb_request {
+	void *buf;
+	unsigned int length;
+	dma_addr_t dma;
+	struct scatterlist *sg;
+	unsigned int num_sgs;
+	unsigned int num_mapped_sgs;
+	unsigned int stream_id: 16;
+	unsigned int is_last: 1;
+	unsigned int no_interrupt: 1;
+	unsigned int zero: 1;
+	unsigned int short_not_ok: 1;
+	unsigned int dma_mapped: 1;
+	void (*complete)(struct usb_ep *, struct usb_request *);
+	void *context;
+	struct list_head list;
+	unsigned int frame_number;
+	int status;
+	unsigned int actual;
+	u64 android_kabi_reserved1;
+};
+
+struct dwc3_ep;
+
+struct dwc3_trb;
+
+struct dwc3_request {
+	struct usb_request request;
+	struct list_head list;
+	struct dwc3_ep *dep;
+	struct scatterlist *sg;
+	struct scatterlist *start_sg;
+	unsigned int num_pending_sgs;
+	unsigned int num_queued_sgs;
+	unsigned int remaining;
+	unsigned int status;
+	u8 epnum;
+	struct dwc3_trb *trb;
+	dma_addr_t trb_dma;
+	unsigned int num_trbs;
+	unsigned int needs_extra_trb: 1;
+	unsigned int direction: 1;
+	unsigned int mapped: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct ulpi;
+
+enum dwc3_ep0_next {
+	DWC3_EP0_UNKNOWN = 0,
+	DWC3_EP0_COMPLETE = 1,
+	DWC3_EP0_NRDY_DATA = 2,
+	DWC3_EP0_NRDY_STATUS = 3,
+};
+
+enum dwc3_ep0_state {
+	EP0_UNCONNECTED = 0,
+	EP0_SETUP_PHASE = 1,
+	EP0_DATA_PHASE = 2,
+	EP0_STATUS_PHASE = 3,
+};
+
+enum dwc3_link_state {
+	DWC3_LINK_STATE_U0 = 0,
+	DWC3_LINK_STATE_U1 = 1,
+	DWC3_LINK_STATE_U2 = 2,
+	DWC3_LINK_STATE_U3 = 3,
+	DWC3_LINK_STATE_SS_DIS = 4,
+	DWC3_LINK_STATE_RX_DET = 5,
+	DWC3_LINK_STATE_SS_INACT = 6,
+	DWC3_LINK_STATE_POLL = 7,
+	DWC3_LINK_STATE_RECOV = 8,
+	DWC3_LINK_STATE_HRESET = 9,
+	DWC3_LINK_STATE_CMPLY = 10,
+	DWC3_LINK_STATE_LPBK = 11,
+	DWC3_LINK_STATE_RESET = 14,
+	DWC3_LINK_STATE_RESUME = 15,
+	DWC3_LINK_STATE_MASK = 15,
+};
+
+struct dwc3_hwparams {
+	u32 hwparams0;
+	u32 hwparams1;
+	u32 hwparams2;
+	u32 hwparams3;
+	u32 hwparams4;
+	u32 hwparams5;
+	u32 hwparams6;
+	u32 hwparams7;
+	u32 hwparams8;
+	u32 hwparams9;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct dwc3_event_buffer;
+
+struct usb_gadget_driver;
+
+struct usb_role_switch;
+
+struct power_supply;
+
+struct dwc3 {
+	struct work_struct drd_work;
+	struct dwc3_trb *ep0_trb;
+	void *bounce;
+	u8 *setup_buf;
+	dma_addr_t ep0_trb_addr;
+	dma_addr_t bounce_addr;
+	struct dwc3_request ep0_usb_req;
+	struct completion ep0_in_setup;
+	spinlock_t lock;
+	struct mutex mutex;
+	struct device *dev;
+	struct device *sysdev;
+	struct platform_device *xhci;
+	struct resource xhci_resources[2];
+	struct dwc3_event_buffer *ev_buf;
+	struct dwc3_ep *eps[32];
+	struct usb_gadget *gadget;
+	struct usb_gadget_driver *gadget_driver;
+	struct clk *bus_clk;
+	struct clk *ref_clk;
+	struct clk *susp_clk;
+	struct reset_control *reset;
+	struct usb_phy *usb2_phy;
+	struct usb_phy *usb3_phy;
+	struct phy *usb2_generic_phy;
+	struct phy *usb3_generic_phy;
+	bool phys_ready;
+	struct ulpi *ulpi;
+	bool ulpi_ready;
+	void *regs;
+	size_t regs_size;
+	enum usb_dr_mode dr_mode;
+	u32 current_dr_role;
+	u32 desired_dr_role;
+	struct extcon_dev *edev;
+	struct notifier_block edev_nb;
+	enum usb_phy_interface hsphy_mode;
+	struct usb_role_switch *role_sw;
+	enum usb_dr_mode role_switch_default_mode;
+	struct power_supply *usb_psy;
+	u32 fladj;
+	u32 ref_clk_per;
+	u32 irq_gadget;
+	u32 otg_irq;
+	u32 current_otg_role;
+	u32 desired_otg_role;
+	bool otg_restart_host;
+	u32 u1u2;
+	u32 maximum_speed;
+	u32 gadget_max_speed;
+	enum usb_ssp_rate max_ssp_rate;
+	enum usb_ssp_rate gadget_ssp_rate;
+	u32 ip;
+	u32 revision;
+	u32 version_type;
+	enum dwc3_ep0_next ep0_next_event;
+	enum dwc3_ep0_state ep0state;
+	enum dwc3_link_state link_state;
+	u16 u2sel;
+	u16 u2pel;
+	u8 u1sel;
+	u8 u1pel;
+	u8 speed;
+	u8 num_eps;
+	struct dwc3_hwparams hwparams;
+	struct debugfs_regset32 *regset;
+	u32 dbg_lsp_select;
+	u8 test_mode;
+	u8 test_mode_nr;
+	u8 lpm_nyet_threshold;
+	u8 hird_threshold;
+	u8 rx_thr_num_pkt;
+	u8 rx_max_burst;
+	u8 tx_thr_num_pkt;
+	u8 tx_max_burst;
+	u8 rx_thr_num_pkt_prd;
+	u8 rx_max_burst_prd;
+	u8 tx_thr_num_pkt_prd;
+	u8 tx_max_burst_prd;
+	u8 tx_fifo_resize_max_num;
+	u8 clear_stall_protocol;
+	u16 num_hc_interrupters;
+	const char *hsphy_interface;
+	unsigned int connected: 1;
+	unsigned int softconnect: 1;
+	unsigned int delayed_status: 1;
+	unsigned int ep0_bounced: 1;
+	unsigned int ep0_expect_in: 1;
+	unsigned int sysdev_is_parent: 1;
+	unsigned int has_lpm_erratum: 1;
+	unsigned int is_utmi_l1_suspend: 1;
+	unsigned int is_fpga: 1;
+	unsigned int pending_events: 1;
+	unsigned int do_fifo_resize: 1;
+	unsigned int pullups_connected: 1;
+	unsigned int setup_packet_pending: 1;
+	unsigned int three_stage_setup: 1;
+	unsigned int dis_start_transfer_quirk: 1;
+	unsigned int usb3_lpm_capable: 1;
+	unsigned int usb2_lpm_disable: 1;
+	unsigned int usb2_gadget_lpm_disable: 1;
+	unsigned int disable_scramble_quirk: 1;
+	unsigned int u2exit_lfps_quirk: 1;
+	unsigned int u2ss_inp3_quirk: 1;
+	unsigned int req_p1p2p3_quirk: 1;
+	unsigned int del_p1p2p3_quirk: 1;
+	unsigned int del_phy_power_chg_quirk: 1;
+	unsigned int lfps_filter_quirk: 1;
+	unsigned int rx_detect_poll_quirk: 1;
+	unsigned int dis_u3_susphy_quirk: 1;
+	unsigned int dis_u2_susphy_quirk: 1;
+	unsigned int dis_enblslpm_quirk: 1;
+	unsigned int dis_u1_entry_quirk: 1;
+	unsigned int dis_u2_entry_quirk: 1;
+	unsigned int dis_rxdet_inp3_quirk: 1;
+	unsigned int dis_u2_freeclk_exists_quirk: 1;
+	unsigned int dis_del_phy_power_chg_quirk: 1;
+	unsigned int dis_tx_ipgap_linecheck_quirk: 1;
+	unsigned int resume_hs_terminations: 1;
+	unsigned int ulpi_ext_vbus_drv: 1;
+	unsigned int parkmode_disable_ss_quirk: 1;
+	unsigned int parkmode_disable_hs_quirk: 1;
+	unsigned int gfladj_refclk_lpm_sel: 1;
+	unsigned int tx_de_emphasis_quirk: 1;
+	unsigned int tx_de_emphasis: 2;
+	unsigned int dis_metastability_quirk: 1;
+	unsigned int dis_split_quirk: 1;
+	unsigned int async_callbacks: 1;
+	unsigned int sys_wakeup: 1;
+	unsigned int wakeup_configured: 1;
+	unsigned int suspended: 1;
+	u16 imod_interval;
+	int max_cfg_eps;
+	int last_fifo_depth;
+	int num_ep_resized;
+	struct dentry *debug_root;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct dwc3_trb {
+	u32 bpl;
+	u32 bph;
+	u32 size;
+	u32 ctrl;
+};
+
+struct usb_ep_caps {
+	unsigned int type_control: 1;
+	unsigned int type_iso: 1;
+	unsigned int type_bulk: 1;
+	unsigned int type_int: 1;
+	unsigned int dir_in: 1;
+	unsigned int dir_out: 1;
+};
+
+struct usb_ep_ops;
+
+struct usb_ep {
+	void *driver_data;
+	const char *name;
+	const struct usb_ep_ops *ops;
+	struct list_head ep_list;
+	struct usb_ep_caps caps;
+	bool claimed;
+	bool enabled;
+	unsigned int maxpacket: 16;
+	unsigned int maxpacket_limit: 16;
+	unsigned int max_streams: 16;
+	unsigned int mult: 2;
+	unsigned int maxburst: 5;
+	u8 address;
+	const struct usb_endpoint_descriptor *desc;
+	const struct usb_ss_ep_comp_descriptor *comp_desc;
+	u64 android_kabi_reserved1;
+};
+
+struct usb_ep_ops {
+	int (*enable)(struct usb_ep *, const struct usb_endpoint_descriptor *);
+	int (*disable)(struct usb_ep *);
+	void (*dispose)(struct usb_ep *);
+	struct usb_request * (*alloc_request)(struct usb_ep *, gfp_t);
+	void (*free_request)(struct usb_ep *, struct usb_request *);
+	int (*queue)(struct usb_ep *, struct usb_request *, gfp_t);
+	int (*dequeue)(struct usb_ep *, struct usb_request *);
+	int (*set_halt)(struct usb_ep *, int);
+	int (*set_wedge)(struct usb_ep *);
+	int (*fifo_status)(struct usb_ep *);
+	void (*fifo_flush)(struct usb_ep *);
+	u64 android_kabi_reserved1;
+};
+
+struct dwc3_ep {
+	struct usb_ep endpoint;
+	struct list_head cancelled_list;
+	struct list_head pending_list;
+	struct list_head started_list;
+	void *regs;
+	struct dwc3_trb *trb_pool;
+	dma_addr_t trb_pool_dma;
+	struct dwc3 *dwc;
+	u32 saved_state;
+	unsigned int flags;
+	u8 trb_enqueue;
+	u8 trb_dequeue;
+	u8 number;
+	u8 type;
+	u8 resource_index;
+	u32 frame_number;
+	u32 interval;
+	char name[20];
+	unsigned int direction: 1;
+	unsigned int stream_capable: 1;
+	u8 combo_num;
+	int start_cmd_status;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct dwc3_event_buffer {
+	void *buf;
+	void *cache;
+	unsigned int length;
+	unsigned int lpos;
+	unsigned int count;
+	unsigned int flags;
+	dma_addr_t dma;
+	struct dwc3 *dwc;
+	u64 android_kabi_reserved1;
+};
+
+struct usb_udc;
+
+struct usb_gadget_ops;
+
+struct usb_gadget {
+	struct work_struct work;
+	struct usb_udc *udc;
+	const struct usb_gadget_ops *ops;
+	struct usb_ep *ep0;
+	struct list_head ep_list;
+	enum usb_device_speed speed;
+	enum usb_device_speed max_speed;
+	enum usb_ssp_rate ssp_rate;
+	enum usb_ssp_rate max_ssp_rate;
+	enum usb_device_state state;
+	const char *name;
+	struct device dev;
+	unsigned int isoch_delay;
+	unsigned int out_epnum;
+	unsigned int in_epnum;
+	unsigned int mA;
+	struct usb_otg_caps *otg_caps;
+	unsigned int sg_supported: 1;
+	unsigned int is_otg: 1;
+	unsigned int is_a_peripheral: 1;
+	unsigned int b_hnp_enable: 1;
+	unsigned int a_hnp_support: 1;
+	unsigned int a_alt_hnp_support: 1;
+	unsigned int hnp_polling_support: 1;
+	unsigned int host_request_flag: 1;
+	unsigned int quirk_ep_out_aligned_size: 1;
+	unsigned int quirk_altset_not_supp: 1;
+	unsigned int quirk_stall_not_supp: 1;
+	unsigned int quirk_zlp_not_supp: 1;
+	unsigned int quirk_avoids_skb_reserve: 1;
+	unsigned int is_selfpowered: 1;
+	unsigned int deactivated: 1;
+	unsigned int connected: 1;
+	unsigned int lpm_capable: 1;
+	unsigned int wakeup_capable: 1;
+	unsigned int wakeup_armed: 1;
+	int irq;
+	int id_number;
+};
+
+struct usb_dcd_config_params;
+
+struct usb_gadget_ops {
+	int (*get_frame)(struct usb_gadget *);
+	int (*wakeup)(struct usb_gadget *);
+	int (*func_wakeup)(struct usb_gadget *, int);
+	int (*set_remote_wakeup)(struct usb_gadget *, int);
+	int (*set_selfpowered)(struct usb_gadget *, int);
+	int (*vbus_session)(struct usb_gadget *, int);
+	int (*vbus_draw)(struct usb_gadget *, unsigned int);
+	int (*pullup)(struct usb_gadget *, int);
+	int (*ioctl)(struct usb_gadget *, unsigned int, unsigned long);
+	void (*get_config_params)(struct usb_gadget *, struct usb_dcd_config_params *);
+	int (*udc_start)(struct usb_gadget *, struct usb_gadget_driver *);
+	int (*udc_stop)(struct usb_gadget *);
+	void (*udc_set_speed)(struct usb_gadget *, enum usb_device_speed);
+	void (*udc_set_ssp_rate)(struct usb_gadget *, enum usb_ssp_rate);
+	void (*udc_async_callbacks)(struct usb_gadget *, bool);
+	struct usb_ep * (*match_ep)(struct usb_gadget *, struct usb_endpoint_descriptor *, struct usb_ss_ep_comp_descriptor *);
+	int (*check_config)(struct usb_gadget *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_dcd_config_params {
+	__u8 bU1devExitLat;
+	__le16 bU2DevExitLat;
+	__u8 besl_baseline;
+	__u8 besl_deep;
+};
+
+struct usb_gadget_driver {
+	char *function;
+	enum usb_device_speed max_speed;
+	int (*bind)(struct usb_gadget *, struct usb_gadget_driver *);
+	void (*unbind)(struct usb_gadget *);
+	int (*setup)(struct usb_gadget *, const struct usb_ctrlrequest *);
+	void (*disconnect)(struct usb_gadget *);
+	void (*suspend)(struct usb_gadget *);
+	void (*resume)(struct usb_gadget *);
+	void (*reset)(struct usb_gadget *);
+	struct device_driver driver;
+	char *udc_name;
+	unsigned int match_existing_only: 1;
+	bool is_bound: 1;
+};
+
+struct power_supply_desc;
+
+struct power_supply_battery_info;
+
+struct thermal_zone_device;
+
+struct power_supply {
+	const struct power_supply_desc *desc;
+	char **supplied_to;
+	size_t num_supplicants;
+	char **supplied_from;
+	size_t num_supplies;
+	struct device_node *of_node;
+	void *drv_data;
+	struct device dev;
+	struct work_struct changed_work;
+	struct delayed_work deferred_register_work;
+	spinlock_t changed_lock;
+	bool changed;
+	bool initialized;
+	bool removing;
+	atomic_t use_cnt;
+	struct power_supply_battery_info *battery_info;
+	struct thermal_zone_device *tzd;
+	struct thermal_cooling_device *tcd;
+	struct led_trigger *charging_full_trig;
+	char *charging_full_trig_name;
+	struct led_trigger *charging_trig;
+	char *charging_trig_name;
+	struct led_trigger *full_trig;
+	char *full_trig_name;
+	struct led_trigger *online_trig;
+	char *online_trig_name;
+	struct led_trigger *charging_blink_full_solid_trig;
+	char *charging_blink_full_solid_trig_name;
+	u64 android_kabi_reserved1;
+};
+
+enum power_supply_type {
+	POWER_SUPPLY_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_TYPE_BATTERY = 1,
+	POWER_SUPPLY_TYPE_UPS = 2,
+	POWER_SUPPLY_TYPE_MAINS = 3,
+	POWER_SUPPLY_TYPE_USB = 4,
+	POWER_SUPPLY_TYPE_USB_DCP = 5,
+	POWER_SUPPLY_TYPE_USB_CDP = 6,
+	POWER_SUPPLY_TYPE_USB_ACA = 7,
+	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
+	POWER_SUPPLY_TYPE_USB_PD = 9,
+	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
+	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
+	POWER_SUPPLY_TYPE_WIRELESS = 12,
+};
+
+enum power_supply_usb_type {
+	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_USB_TYPE_SDP = 1,
+	POWER_SUPPLY_USB_TYPE_DCP = 2,
+	POWER_SUPPLY_USB_TYPE_CDP = 3,
+	POWER_SUPPLY_USB_TYPE_ACA = 4,
+	POWER_SUPPLY_USB_TYPE_C = 5,
+	POWER_SUPPLY_USB_TYPE_PD = 6,
+	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
+	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
+	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
+};
+
+enum power_supply_property {
+	POWER_SUPPLY_PROP_STATUS = 0,
+	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
+	POWER_SUPPLY_PROP_HEALTH = 2,
+	POWER_SUPPLY_PROP_PRESENT = 3,
+	POWER_SUPPLY_PROP_ONLINE = 4,
+	POWER_SUPPLY_PROP_AUTHENTIC = 5,
+	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
+	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
+	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
+	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
+	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
+	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
+	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
+	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
+	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
+	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
+	POWER_SUPPLY_PROP_POWER_NOW = 20,
+	POWER_SUPPLY_PROP_POWER_AVG = 21,
+	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
+	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
+	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
+	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
+	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
+	POWER_SUPPLY_PROP_CHARGE_BEHAVIOUR = 37,
+	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 38,
+	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 39,
+	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 40,
+	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 41,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 42,
+	POWER_SUPPLY_PROP_ENERGY_FULL = 43,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY = 44,
+	POWER_SUPPLY_PROP_ENERGY_NOW = 45,
+	POWER_SUPPLY_PROP_ENERGY_AVG = 46,
+	POWER_SUPPLY_PROP_CAPACITY = 47,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 48,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 49,
+	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 50,
+	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 51,
+	POWER_SUPPLY_PROP_TEMP = 52,
+	POWER_SUPPLY_PROP_TEMP_MAX = 53,
+	POWER_SUPPLY_PROP_TEMP_MIN = 54,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 55,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 56,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT = 57,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 58,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 59,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 60,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 61,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 62,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 63,
+	POWER_SUPPLY_PROP_TYPE = 64,
+	POWER_SUPPLY_PROP_USB_TYPE = 65,
+	POWER_SUPPLY_PROP_SCOPE = 66,
+	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 67,
+	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 68,
+	POWER_SUPPLY_PROP_CALIBRATE = 69,
+	POWER_SUPPLY_PROP_MANUFACTURE_YEAR = 70,
+	POWER_SUPPLY_PROP_MANUFACTURE_MONTH = 71,
+	POWER_SUPPLY_PROP_MANUFACTURE_DAY = 72,
+	POWER_SUPPLY_PROP_MODEL_NAME = 73,
+	POWER_SUPPLY_PROP_MANUFACTURER = 74,
+	POWER_SUPPLY_PROP_SERIAL_NUMBER = 75,
+};
+
+union power_supply_propval;
+
+struct power_supply_desc {
+	const char *name;
+	enum power_supply_type type;
+	const enum power_supply_usb_type *usb_types;
+	size_t num_usb_types;
+	const enum power_supply_property *properties;
+	size_t num_properties;
+	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
+	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
+	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
+	void (*external_power_changed)(struct power_supply *);
+	void (*set_charged)(struct power_supply *);
+	bool no_thermal;
+	int use_for_apm;
+	u64 android_kabi_reserved1;
+};
+
+union power_supply_propval {
+	int intval;
+	const char *strval;
+};
+
+struct power_supply_maintenance_charge_table;
+
+struct power_supply_battery_ocv_table;
+
+struct power_supply_resistance_temp_table;
+
+struct power_supply_vbat_ri_table;
+
+struct power_supply_battery_info {
+	unsigned int technology;
+	int energy_full_design_uwh;
+	int charge_full_design_uah;
+	int voltage_min_design_uv;
+	int voltage_max_design_uv;
+	int tricklecharge_current_ua;
+	int precharge_current_ua;
+	int precharge_voltage_max_uv;
+	int charge_term_current_ua;
+	int charge_restart_voltage_uv;
+	int overvoltage_limit_uv;
+	int constant_charge_current_max_ua;
+	int constant_charge_voltage_max_uv;
+	struct power_supply_maintenance_charge_table *maintenance_charge;
+	int maintenance_charge_size;
+	int alert_low_temp_charge_current_ua;
+	int alert_low_temp_charge_voltage_uv;
+	int alert_high_temp_charge_current_ua;
+	int alert_high_temp_charge_voltage_uv;
+	int factory_internal_resistance_uohm;
+	int factory_internal_resistance_charging_uohm;
+	int ocv_temp[20];
+	int temp_ambient_alert_min;
+	int temp_ambient_alert_max;
+	int temp_alert_min;
+	int temp_alert_max;
+	int temp_min;
+	int temp_max;
+	struct power_supply_battery_ocv_table *ocv_table[20];
+	int ocv_table_size[20];
+	struct power_supply_resistance_temp_table *resist_table;
+	int resist_table_size;
+	struct power_supply_vbat_ri_table *vbat2ri_discharging;
+	int vbat2ri_discharging_size;
+	struct power_supply_vbat_ri_table *vbat2ri_charging;
+	int vbat2ri_charging_size;
+	int bti_resistance_ohm;
+	int bti_resistance_tolerance;
+	u64 android_kabi_reserved1;
+};
+
+struct power_supply_maintenance_charge_table {
+	int charge_current_max_ua;
+	int charge_voltage_max_uv;
+	int charge_safety_timer_minutes;
+};
+
+struct power_supply_battery_ocv_table {
+	int ocv;
+	int capacity;
+};
+
+struct power_supply_resistance_temp_table {
+	int temp;
+	int resistance;
+};
+
+struct power_supply_vbat_ri_table {
+	int vbat_uv;
+	int ri_uohm;
+};
+
+typedef void (*btf_trace_dwc3_readl)(void *, void *, u32, u32);
+
+typedef void (*btf_trace_dwc3_writel)(void *, void *, u32, u32);
+
+typedef void (*btf_trace_dwc3_event)(void *, u32, struct dwc3 *);
+
+typedef void (*btf_trace_dwc3_ctrl_req)(void *, struct usb_ctrlrequest *);
+
+typedef void (*btf_trace_dwc3_alloc_request)(void *, struct dwc3_request *);
+
+typedef void (*btf_trace_dwc3_free_request)(void *, struct dwc3_request *);
+
+typedef void (*btf_trace_dwc3_ep_queue)(void *, struct dwc3_request *);
+
+typedef void (*btf_trace_dwc3_ep_dequeue)(void *, struct dwc3_request *);
+
+typedef void (*btf_trace_dwc3_gadget_giveback)(void *, struct dwc3_request *);
+
+typedef void (*btf_trace_dwc3_gadget_generic_cmd)(void *, unsigned int, u32, int);
+
+struct dwc3_gadget_ep_cmd_params;
+
+typedef void (*btf_trace_dwc3_gadget_ep_cmd)(void *, struct dwc3_ep *, unsigned int, struct dwc3_gadget_ep_cmd_params *, int);
+
+struct dwc3_gadget_ep_cmd_params {
+	u32 param2;
+	u32 param1;
+	u32 param0;
+};
+
+typedef void (*btf_trace_dwc3_prepare_trb)(void *, struct dwc3_ep *, struct dwc3_trb *);
+
+typedef void (*btf_trace_dwc3_complete_trb)(void *, struct dwc3_ep *, struct dwc3_trb *);
+
+typedef void (*btf_trace_dwc3_gadget_ep_enable)(void *, struct dwc3_ep *);
+
+typedef void (*btf_trace_dwc3_gadget_ep_disable)(void *, struct dwc3_ep *);
+
+struct trace_event_raw_dwc3_log_io {
+	struct trace_entry ent;
+	void *base;
+	u32 offset;
+	u32 value;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_event {
+	struct trace_entry ent;
+	u32 event;
+	u32 ep0state;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_ctrl {
+	struct trace_entry ent;
+	__u8 bRequestType;
+	__u8 bRequest;
+	__u16 wValue;
+	__u16 wIndex;
+	__u16 wLength;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_request {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	struct dwc3_request *req;
+	unsigned int actual;
+	unsigned int length;
+	int status;
+	int zero;
+	int short_not_ok;
+	int no_interrupt;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_generic_cmd {
+	struct trace_entry ent;
+	unsigned int cmd;
+	u32 param;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_gadget_ep_cmd {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int cmd;
+	u32 param0;
+	u32 param1;
+	u32 param2;
+	int cmd_status;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_trb {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	struct dwc3_trb *trb;
+	u32 bpl;
+	u32 bph;
+	u32 size;
+	u32 ctrl;
+	u32 type;
+	u32 enqueue;
+	u32 dequeue;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_ep {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int maxpacket;
+	unsigned int maxpacket_limit;
+	unsigned int max_streams;
+	unsigned int maxburst;
+	unsigned int flags;
+	unsigned int direction;
+	u8 trb_enqueue;
+	u8 trb_dequeue;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_dwc3_log_request {
+	u32 name;
+};
+
+struct trace_event_data_offsets_dwc3_log_gadget_ep_cmd {
+	u32 name;
+};
+
+struct trace_event_data_offsets_dwc3_log_trb {
+	u32 name;
+};
+
+struct trace_event_data_offsets_dwc3_log_ep {
+	u32 name;
+};
+
+struct dwc3_event_type {
+	u32 is_devspec: 1;
+	u32 type: 7;
+	u32 reserved8_31: 24;
+};
+
+struct dwc3_event_depevt {
+	u32 one_bit: 1;
+	u32 endpoint_number: 5;
+	u32 endpoint_event: 4;
+	u32 reserved11_10: 2;
+	u32 status: 4;
+	u32 parameters: 16;
+};
+
+struct dwc3_event_devt {
+	u32 one_bit: 1;
+	u32 device_event: 7;
+	u32 type: 4;
+	u32 reserved15_12: 4;
+	u32 event_info: 9;
+	u32 reserved31_25: 7;
+};
+
+struct dwc3_event_gevt {
+	u32 one_bit: 1;
+	u32 device_event: 7;
+	u32 phy_port_number: 4;
+	u32 reserved31_12: 20;
+};
+
+union dwc3_event {
+	u32 raw;
+	struct dwc3_event_type type;
+	struct dwc3_event_depevt depevt;
+	struct dwc3_event_devt devt;
+	struct dwc3_event_gevt gevt;
+};
+
+struct trace_event_data_offsets_dwc3_log_io {};
+
+struct trace_event_data_offsets_dwc3_log_event {};
+
+struct trace_event_data_offsets_dwc3_log_ctrl {};
+
+struct trace_event_data_offsets_dwc3_log_generic_cmd {};
+
+struct timing {
+	u8 u1sel;
+	u8 u1pel;
+	__le16 u2sel;
+	__le16 u2pel;
+};
+
+enum usb_role {
+	USB_ROLE_NONE = 0,
+	USB_ROLE_HOST = 1,
+	USB_ROLE_DEVICE = 2,
+};
+
+typedef int (*usb_role_switch_set_t)(struct usb_role_switch *, enum usb_role);
+
+typedef enum usb_role (*usb_role_switch_get_t)(struct usb_role_switch *);
+
+struct usb_role_switch_desc {
+	struct fwnode_handle *fwnode;
+	struct device *usb2_port;
+	struct device *usb3_port;
+	struct device *udc;
+	usb_role_switch_set_t set;
+	usb_role_switch_get_t get;
+	bool allow_userspace_control;
+	void *driver_data;
+	const char *name;
+};
+
+struct dwc3_ep_file_map {
+	const char name[25];
+	const struct file_operations * const fops;
+};
+
+struct dwc3_haps {
+	struct platform_device *dwc3;
+	struct pci_dev *pci;
+};
+
+struct dwc3_of_simple {
+	struct device *dev;
+	struct clk_bulk_data *clks;
+	int num_clocks;
+	struct reset_control *resets;
+	bool need_reset;
+};
+
+struct dwc3_acpi_pdata;
+
+struct dwc3_qcom {
+	struct device *dev;
+	void *qscratch_base;
+	struct platform_device *dwc3;
+	struct platform_device *urs_usb;
+	struct clk **clks;
+	int num_clocks;
+	struct reset_control *resets;
+	int hs_phy_irq;
+	int dp_hs_phy_irq;
+	int dm_hs_phy_irq;
+	int ss_phy_irq;
+	enum usb_device_speed usb2_speed;
+	struct extcon_dev *edev;
+	struct extcon_dev *host_edev;
+	struct notifier_block vbus_nb;
+	struct notifier_block host_nb;
+	const struct dwc3_acpi_pdata *acpi_pdata;
+	enum usb_dr_mode mode;
+	bool is_suspended;
+	bool pm_suspended;
+	struct icc_path *icc_path_ddr;
+	struct icc_path *icc_path_apps;
+};
+
+struct dwc3_acpi_pdata {
+	u32 qscratch_base_offset;
+	u32 qscratch_base_size;
+	u32 dwc3_core_base_size;
+	int hs_phy_irq_index;
+	int dp_hs_phy_irq_index;
+	int dm_hs_phy_irq_index;
+	int ss_phy_irq_index;
+	bool is_urs;
+};
+
+enum amd_chipset_gen {
+	NOT_AMD_CHIPSET = 0,
+	AMD_CHIPSET_SB600 = 1,
+	AMD_CHIPSET_SB700 = 2,
+	AMD_CHIPSET_SB800 = 3,
+	AMD_CHIPSET_HUDSON2 = 4,
+	AMD_CHIPSET_BOLTON = 5,
+	AMD_CHIPSET_YANGTZE = 6,
+	AMD_CHIPSET_TAISHAN = 7,
+	AMD_CHIPSET_UNKNOWN = 8,
+};
+
+struct amd_chipset_type {
+	enum amd_chipset_gen gen;
+	u8 rev;
+};
+
+struct amd_chipset_info {
+	struct pci_dev *nb_dev;
+	struct pci_dev *smbus_dev;
+	int nb_type;
+	struct amd_chipset_type sb_type;
+	int isoc_reqs;
+	int probe_count;
+	bool need_pll_quirk;
+};
+
+enum ehci_hrtimer_event {
+	EHCI_HRTIMER_POLL_ASS = 0,
+	EHCI_HRTIMER_POLL_PSS = 1,
+	EHCI_HRTIMER_POLL_DEAD = 2,
+	EHCI_HRTIMER_UNLINK_INTR = 3,
+	EHCI_HRTIMER_FREE_ITDS = 4,
+	EHCI_HRTIMER_ACTIVE_UNLINK = 5,
+	EHCI_HRTIMER_START_UNLINK_INTR = 6,
+	EHCI_HRTIMER_ASYNC_UNLINKS = 7,
+	EHCI_HRTIMER_IAA_WATCHDOG = 8,
+	EHCI_HRTIMER_DISABLE_PERIODIC = 9,
+	EHCI_HRTIMER_DISABLE_ASYNC = 10,
+	EHCI_HRTIMER_IO_WATCHDOG = 11,
+	EHCI_HRTIMER_NUM_EVENTS = 12,
+};
+
+enum ehci_rh_state {
+	EHCI_RH_HALTED = 0,
+	EHCI_RH_SUSPENDED = 1,
+	EHCI_RH_RUNNING = 2,
+	EHCI_RH_STOPPING = 3,
+};
+
+struct ehci_caps;
+
+struct ehci_regs;
+
+struct ehci_dbg_port;
+
+struct ehci_qh;
+
+union ehci_shadow;
+
+struct ehci_itd;
+
+struct ehci_sitd;
+
+struct ehci_hcd {
+	enum ehci_hrtimer_event next_hrtimer_event;
+	unsigned int enabled_hrtimer_events;
+	ktime_t hr_timeouts[12];
+	struct hrtimer hrtimer;
+	int PSS_poll_count;
+	int ASS_poll_count;
+	int died_poll_count;
+	struct ehci_caps *caps;
+	struct ehci_regs *regs;
+	struct ehci_dbg_port *debug;
+	__u32 hcs_params;
+	spinlock_t lock;
+	enum ehci_rh_state rh_state;
+	bool scanning: 1;
+	bool need_rescan: 1;
+	bool intr_unlinking: 1;
+	bool iaa_in_progress: 1;
+	bool async_unlinking: 1;
+	bool shutdown: 1;
+	struct ehci_qh *qh_scan_next;
+	struct ehci_qh *async;
+	struct ehci_qh *dummy;
+	struct list_head async_unlink;
+	struct list_head async_idle;
+	unsigned int async_unlink_cycle;
+	unsigned int async_count;
+	__le32 old_current;
+	__le32 old_token;
+	unsigned int periodic_size;
+	__le32 *periodic;
+	dma_addr_t periodic_dma;
+	struct list_head intr_qh_list;
+	unsigned int i_thresh;
+	union ehci_shadow *pshadow;
+	struct list_head intr_unlink_wait;
+	struct list_head intr_unlink;
+	unsigned int intr_unlink_wait_cycle;
+	unsigned int intr_unlink_cycle;
+	unsigned int now_frame;
+	unsigned int last_iso_frame;
+	unsigned int intr_count;
+	unsigned int isoc_count;
+	unsigned int periodic_count;
+	unsigned int uframe_periodic_max;
+	struct list_head cached_itd_list;
+	struct ehci_itd *last_itd_to_free;
+	struct list_head cached_sitd_list;
+	struct ehci_sitd *last_sitd_to_free;
+	unsigned long reset_done[15];
+	unsigned long bus_suspended;
+	unsigned long companion_ports;
+	unsigned long owned_ports;
+	unsigned long port_c_suspend;
+	unsigned long suspended_ports;
+	unsigned long resuming_ports;
+	struct dma_pool *qh_pool;
+	struct dma_pool *qtd_pool;
+	struct dma_pool *itd_pool;
+	struct dma_pool *sitd_pool;
+	unsigned int random_frame;
+	unsigned long next_statechange;
+	ktime_t last_periodic_enable;
+	u32 command;
+	unsigned int no_selective_suspend: 1;
+	unsigned int has_fsl_port_bug: 1;
+	unsigned int has_fsl_hs_errata: 1;
+	unsigned int has_fsl_susp_errata: 1;
+	unsigned int has_ci_pec_bug: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_capbase: 1;
+	unsigned int has_amcc_usb23: 1;
+	unsigned int need_io_watchdog: 1;
+	unsigned int amd_pll_fix: 1;
+	unsigned int use_dummy_qh: 1;
+	unsigned int has_synopsys_hc_bug: 1;
+	unsigned int frame_index_bug: 1;
+	unsigned int need_oc_pp_cycle: 1;
+	unsigned int imx28_write_fix: 1;
+	unsigned int spurious_oc: 1;
+	unsigned int is_aspeed: 1;
+	unsigned int zx_wakeup_clear_needed: 1;
+	__le32 *ohci_hcctrl_reg;
+	unsigned int has_hostpc: 1;
+	unsigned int has_tdi_phy_lpm: 1;
+	unsigned int has_ppcd: 1;
+	u8 sbrn;
+	u8 bandwidth[64];
+	u8 tt_budget[64];
+	struct list_head tt_list;
+	unsigned long priv[0];
+};
+
+struct ehci_caps {
+	u32 hc_capbase;
+	u32 hcs_params;
+	u32 hcc_params;
+	u8 portroute[8];
+};
+
+struct ehci_regs {
+	u32 command;
+	u32 status;
+	u32 intr_enable;
+	u32 frame_index;
+	u32 segment;
+	u32 frame_list;
+	u32 async_next;
+	u32 reserved1[2];
+	u32 txfill_tuning;
+	u32 reserved2[6];
+	u32 configured_flag;
+	union {
+		u32 port_status[15];
+		struct {
+			u32 reserved3[9];
+			u32 usbmode;
+		};
+	};
+	union {
+		struct {
+			u32 reserved4;
+			u32 hostpc[15];
+		};
+		u32 brcm_insnreg[4];
+	};
+	u32 reserved5[2];
+	u32 usbmode_ex;
+};
+
+struct ehci_dbg_port {
+	u32 control;
+	u32 pids;
+	u32 data03;
+	u32 data47;
+	u32 address;
+};
+
+struct ehci_fstn;
+
+union ehci_shadow {
+	struct ehci_qh *qh;
+	struct ehci_itd *itd;
+	struct ehci_sitd *sitd;
+	struct ehci_fstn *fstn;
+	__le32 *hw_next;
+	void *ptr;
+};
+
+struct ehci_per_sched {
+	struct usb_device *udev;
+	struct usb_host_endpoint *ep;
+	struct list_head ps_list;
+	u16 tt_usecs;
+	u16 cs_mask;
+	u16 period;
+	u16 phase;
+	u8 bw_phase;
+	u8 phase_uf;
+	u8 usecs;
+	u8 c_usecs;
+	u8 bw_uperiod;
+	u8 bw_period;
+};
+
+struct ehci_qh_hw;
+
+struct ehci_qtd;
+
+struct ehci_qh {
+	struct ehci_qh_hw *hw;
+	dma_addr_t qh_dma;
+	union ehci_shadow qh_next;
+	struct list_head qtd_list;
+	struct list_head intr_node;
+	struct ehci_qtd *dummy;
+	struct list_head unlink_node;
+	struct ehci_per_sched ps;
+	unsigned int unlink_cycle;
+	u8 qh_state;
+	u8 xacterrs;
+	u8 unlink_reason;
+	u8 gap_uf;
+	unsigned int is_out: 1;
+	unsigned int clearing_tt: 1;
+	unsigned int dequeue_during_giveback: 1;
+	unsigned int should_be_inactive: 1;
+};
+
+struct ehci_qh_hw {
+	__le32 hw_next;
+	__le32 hw_info1;
+	__le32 hw_info2;
+	__le32 hw_current;
+	__le32 hw_qtd_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ehci_iso_stream;
+
+struct ehci_itd {
+	__le32 hw_next;
+	__le32 hw_transaction[8];
+	__le32 hw_bufp[7];
+	__le32 hw_bufp_hi[7];
+	dma_addr_t itd_dma;
+	union ehci_shadow itd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head itd_list;
+	unsigned int frame;
+	unsigned int pg;
+	unsigned int index[8];
+	long: 64;
+};
+
+struct ehci_iso_stream {
+	struct ehci_qh_hw *hw;
+	u8 bEndpointAddress;
+	u8 highspeed;
+	struct list_head td_list;
+	struct list_head free_list;
+	struct ehci_per_sched ps;
+	unsigned int next_uframe;
+	__le32 splits;
+	u16 uperiod;
+	u16 maxp;
+	unsigned int bandwidth;
+	__le32 buf0;
+	__le32 buf1;
+	__le32 buf2;
+	__le32 address;
+};
+
+struct ehci_sitd {
+	__le32 hw_next;
+	__le32 hw_fullspeed_ep;
+	__le32 hw_uframe;
+	__le32 hw_results;
+	__le32 hw_buf[2];
+	__le32 hw_backpointer;
+	__le32 hw_buf_hi[2];
+	dma_addr_t sitd_dma;
+	union ehci_shadow sitd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head sitd_list;
+	unsigned int frame;
+	unsigned int index;
+};
+
+struct ehci_fstn {
+	__le32 hw_next;
+	__le32 hw_prev;
+	dma_addr_t fstn_dma;
+	union ehci_shadow fstn_next;
+	long: 64;
+};
+
+struct ehci_qtd {
+	__le32 hw_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	dma_addr_t qtd_dma;
+	struct list_head qtd_list;
+	struct urb *urb;
+	size_t length;
+};
+
+struct ehci_tt {
+	u16 bandwidth[8];
+	struct list_head tt_list;
+	struct list_head ps_list;
+	struct usb_tt *usb_tt;
+	int tt_port;
+};
+
+struct ehci_iso_packet {
+	u64 bufp;
+	__le32 transaction;
+	u8 cross;
+	u32 buf1;
+};
+
+struct ehci_iso_sched {
+	struct list_head td_list;
+	unsigned int span;
+	unsigned int first_packet;
+	struct ehci_iso_packet packet[0];
+};
+
+struct ehci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*port_power)(struct usb_hcd *, int, bool);
+};
+
+struct usb_ehci_pdata {
+	int caps_offset;
+	unsigned int has_tt: 1;
+	unsigned int has_synopsys_hc_bug: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int no_io_watchdog: 1;
+	unsigned int reset_on_resume: 1;
+	unsigned int dma_mask_64: 1;
+	unsigned int spurious_oc: 1;
+	int (*power_on)(struct platform_device *);
+	void (*power_off)(struct platform_device *);
+	void (*power_suspend)(struct platform_device *);
+	int (*pre_setup)(struct usb_hcd *);
+};
+
+struct ehci_platform_priv {
+	struct clk *clks[4];
+	struct reset_control *rsts;
+	bool reset_on_resume;
+	bool quirk_poll;
+	struct timer_list poll_timer;
+	struct delayed_work poll_work;
+};
+
+enum xhci_ring_type {
+	TYPE_CTRL = 0,
+	TYPE_ISOC = 1,
+	TYPE_BULK = 2,
+	TYPE_INTR = 3,
+	TYPE_STREAM = 4,
+	TYPE_COMMAND = 5,
+	TYPE_EVENT = 6,
+};
+
+enum xhci_overhead_type {
+	LS_OVERHEAD_TYPE = 0,
+	FS_OVERHEAD_TYPE = 1,
+	HS_OVERHEAD_TYPE = 2,
+};
+
+enum xhci_cancelled_td_status {
+	TD_DIRTY = 0,
+	TD_HALTED = 1,
+	TD_CLEARING_CACHE = 2,
+	TD_CLEARED = 3,
+};
+
+enum xhci_setup_dev {
+	SETUP_CONTEXT_ONLY = 0,
+	SETUP_CONTEXT_ADDRESS = 1,
+};
+
+struct s3_save {
+	u32 command;
+	u32 dev_nt;
+	u64 dcbaa_ptr;
+	u32 config_reg;
+};
+
+struct xhci_bus_state {
+	unsigned long bus_suspended;
+	unsigned long next_statechange;
+	u32 port_c_suspend;
+	u32 suspended_ports;
+	u32 port_remote_wakeup;
+	unsigned long resuming_ports;
+};
+
+struct xhci_port;
+
+struct xhci_hub {
+	struct xhci_port **ports;
+	unsigned int num_ports;
+	struct usb_hcd *hcd;
+	struct xhci_bus_state bus_state;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_cap_regs;
+
+struct xhci_op_regs;
+
+struct xhci_run_regs;
+
+struct xhci_doorbell_array;
+
+struct xhci_device_context_array;
+
+struct xhci_interrupter;
+
+struct xhci_ring;
+
+struct xhci_command;
+
+struct xhci_scratchpad;
+
+struct xhci_virt_device;
+
+struct xhci_root_port_bw_info;
+
+struct xhci_port_cap;
+
+struct xhci_hcd {
+	struct usb_hcd *main_hcd;
+	struct usb_hcd *shared_hcd;
+	struct xhci_cap_regs *cap_regs;
+	struct xhci_op_regs *op_regs;
+	struct xhci_run_regs *run_regs;
+	struct xhci_doorbell_array *dba;
+	__u32 hcs_params1;
+	__u32 hcs_params2;
+	__u32 hcs_params3;
+	__u32 hcc_params;
+	__u32 hcc_params2;
+	spinlock_t lock;
+	u8 sbrn;
+	u16 hci_version;
+	u8 max_slots;
+	u16 max_interrupters;
+	u8 max_ports;
+	u8 isoc_threshold;
+	u32 imod_interval;
+	int event_ring_max;
+	int page_size;
+	int page_shift;
+	int msix_count;
+	struct clk *clk;
+	struct clk *reg_clk;
+	struct reset_control *reset;
+	struct xhci_device_context_array *dcbaa;
+	struct xhci_interrupter **interrupters;
+	struct xhci_ring *cmd_ring;
+	unsigned int cmd_ring_state;
+	struct list_head cmd_list;
+	unsigned int cmd_ring_reserved_trbs;
+	struct delayed_work cmd_timer;
+	struct completion cmd_ring_stop_completion;
+	struct xhci_command *current_cmd;
+	struct xhci_scratchpad *scratchpad;
+	struct mutex mutex;
+	struct xhci_virt_device *devs[256];
+	struct xhci_root_port_bw_info *rh_bw;
+	struct dma_pool *device_pool;
+	struct dma_pool *segment_pool;
+	struct dma_pool *small_streams_pool;
+	struct dma_pool *medium_streams_pool;
+	unsigned int xhc_state;
+	unsigned long run_graceperiod;
+	struct s3_save s3;
+	unsigned long long quirks;
+	unsigned int num_active_eps;
+	unsigned int limit_active_eps;
+	struct xhci_port *hw_ports;
+	struct xhci_hub usb2_rhub;
+	struct xhci_hub usb3_rhub;
+	unsigned int hw_lpm_support: 1;
+	unsigned int broken_suspend: 1;
+	unsigned int allow_single_roothub: 1;
+	u32 *ext_caps;
+	unsigned int num_ext_caps;
+	struct xhci_port_cap *port_caps;
+	unsigned int num_port_caps;
+	struct timer_list comp_mode_recovery_timer;
+	u32 port_status_u0;
+	u16 test_mode;
+	struct dentry *debugfs_root;
+	struct dentry *debugfs_slots;
+	struct list_head regset_list;
+	void *dbc;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	unsigned long priv[0];
+};
+
+struct xhci_cap_regs {
+	__le32 hc_capbase;
+	__le32 hcs_params1;
+	__le32 hcs_params2;
+	__le32 hcs_params3;
+	__le32 hcc_params;
+	__le32 db_off;
+	__le32 run_regs_off;
+	__le32 hcc_params2;
+};
+
+struct xhci_op_regs {
+	__le32 command;
+	__le32 status;
+	__le32 page_size;
+	__le32 reserved1;
+	__le32 reserved2;
+	__le32 dev_notification;
+	__le64 cmd_ring;
+	__le32 reserved3[4];
+	__le64 dcbaa_ptr;
+	__le32 config_reg;
+	__le32 reserved4[241];
+	__le32 port_status_base;
+	__le32 port_power_base;
+	__le32 port_link_base;
+	__le32 reserved5;
+	__le32 reserved6[1016];
+};
+
+struct xhci_intr_reg {
+	__le32 irq_pending;
+	__le32 irq_control;
+	__le32 erst_size;
+	__le32 rsvd;
+	__le64 erst_base;
+	__le64 erst_dequeue;
+};
+
+struct xhci_run_regs {
+	__le32 microframe_index;
+	__le32 rsvd[7];
+	struct xhci_intr_reg ir_set[128];
+};
+
+struct xhci_doorbell_array {
+	__le32 doorbell[256];
+};
+
+struct xhci_device_context_array {
+	__le64 dev_context_ptrs[256];
+	dma_addr_t dma;
+};
+
+struct xhci_erst_entry;
+
+struct xhci_erst {
+	struct xhci_erst_entry *entries;
+	unsigned int num_entries;
+	dma_addr_t erst_dma_addr;
+	unsigned int erst_size;
+	u64 android_kabi_reserved1;
+};
+
+struct xhci_interrupter {
+	struct xhci_ring *event_ring;
+	struct xhci_erst erst;
+	struct xhci_intr_reg *ir_set;
+	unsigned int intr_num;
+	bool ip_autoclear;
+	bool skip_events;
+	u32 isoc_bei_interval;
+	u32 s3_irq_pending;
+	u32 s3_irq_control;
+	u32 s3_erst_size;
+	u64 s3_erst_base;
+	u64 s3_erst_dequeue;
+};
+
+struct xhci_segment;
+
+union xhci_trb;
+
+struct xhci_ring {
+	struct xhci_segment *first_seg;
+	struct xhci_segment *last_seg;
+	union xhci_trb *enqueue;
+	struct xhci_segment *enq_seg;
+	union xhci_trb *dequeue;
+	struct xhci_segment *deq_seg;
+	struct list_head td_list;
+	u32 cycle_state;
+	unsigned int stream_id;
+	unsigned int num_segs;
+	unsigned int num_trbs_free;
+	unsigned int bounce_buf_len;
+	enum xhci_ring_type type;
+	bool last_td_was_short;
+	struct xarray *trb_address_map;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct xhci_segment {
+	union xhci_trb *trbs;
+	struct xhci_segment *next;
+	unsigned int num;
+	dma_addr_t dma;
+	dma_addr_t bounce_dma;
+	void *bounce_buf;
+	unsigned int bounce_offs;
+	unsigned int bounce_len;
+	u64 android_kabi_reserved1;
+};
+
+struct xhci_link_trb {
+	__le64 segment_ptr;
+	__le32 intr_target;
+	__le32 control;
+};
+
+struct xhci_transfer_event {
+	__le64 buffer;
+	__le32 transfer_len;
+	__le32 flags;
+};
+
+struct xhci_event_cmd {
+	__le64 cmd_trb;
+	__le32 status;
+	__le32 flags;
+};
+
+struct xhci_generic_trb {
+	__le32 field[4];
+};
+
+union xhci_trb {
+	struct xhci_link_trb link;
+	struct xhci_transfer_event trans_event;
+	struct xhci_event_cmd event_cmd;
+	struct xhci_generic_trb generic;
+};
+
+struct xhci_erst_entry {
+	__le64 seg_addr;
+	__le32 seg_size;
+	__le32 rsvd;
+};
+
+struct xhci_container_ctx;
+
+struct xhci_command {
+	struct xhci_container_ctx *in_ctx;
+	u32 status;
+	int slot_id;
+	struct completion *completion;
+	union xhci_trb *command_trb;
+	struct list_head cmd_list;
+	unsigned int timeout_ms;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct xhci_container_ctx {
+	unsigned int type;
+	int size;
+	u8 *bytes;
+	dma_addr_t dma;
+};
+
+struct xhci_scratchpad {
+	u64 *sp_array;
+	dma_addr_t sp_dma;
+	void **sp_buffers;
+};
+
+struct xhci_bw_info {
+	unsigned int ep_interval;
+	unsigned int mult;
+	unsigned int num_packets;
+	unsigned int max_packet_size;
+	unsigned int max_esit_payload;
+	unsigned int type;
+};
+
+struct xhci_sideband;
+
+struct xhci_stream_info;
+
+struct xhci_virt_ep {
+	struct xhci_virt_device *vdev;
+	unsigned int ep_index;
+	struct xhci_ring *ring;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *new_ring;
+	unsigned int err_count;
+	unsigned int ep_state;
+	struct list_head cancelled_td_list;
+	struct xhci_hcd *xhci;
+	struct xhci_segment *queued_deq_seg;
+	union xhci_trb *queued_deq_ptr;
+	bool skip;
+	struct xhci_bw_info bw_info;
+	struct list_head bw_endpoint_list;
+	int next_frame_id;
+	bool use_extended_tbc;
+	struct xhci_sideband *sideband;
+};
+
+struct xhci_interval_bw_table;
+
+struct xhci_tt_bw_info;
+
+struct xhci_virt_device {
+	int slot_id;
+	struct usb_device *udev;
+	struct xhci_container_ctx *out_ctx;
+	struct xhci_container_ctx *in_ctx;
+	struct xhci_virt_ep eps[31];
+	u8 fake_port;
+	u8 real_port;
+	struct xhci_interval_bw_table *bw_table;
+	struct xhci_tt_bw_info *tt_info;
+	unsigned long flags;
+	u16 current_mel;
+	void *debugfs_private;
+	struct xhci_sideband *sideband;
+};
+
+struct xhci_stream_ctx;
+
+struct xhci_stream_info {
+	struct xhci_ring **stream_rings;
+	unsigned int num_streams;
+	struct xhci_stream_ctx *stream_ctx_array;
+	unsigned int num_stream_ctxs;
+	dma_addr_t ctx_array_dma;
+	struct xarray trb_address_map;
+	struct xhci_command *free_streams_command;
+};
+
+struct xhci_stream_ctx {
+	__le64 stream_ring;
+	__le32 reserved[2];
+};
+
+struct xhci_interval_bw {
+	unsigned int num_packets;
+	struct list_head endpoints;
+	unsigned int overhead[3];
+};
+
+struct xhci_interval_bw_table {
+	unsigned int interval0_esit_payload;
+	struct xhci_interval_bw interval_bw[16];
+	unsigned int bw_used;
+	unsigned int ss_bw_in;
+	unsigned int ss_bw_out;
+};
+
+struct xhci_tt_bw_info {
+	struct list_head tt_list;
+	int slot_id;
+	int ttport;
+	struct xhci_interval_bw_table bw_table;
+	int active_eps;
+};
+
+struct xhci_root_port_bw_info {
+	struct list_head tts;
+	unsigned int num_active_tts;
+	struct xhci_interval_bw_table bw_table;
+};
+
+struct xhci_port {
+	__le32 *addr;
+	int hw_portnum;
+	int hcd_portnum;
+	struct xhci_hub *rhub;
+	struct xhci_port_cap *port_cap;
+	unsigned int lpm_incapable: 1;
+	unsigned long resume_timestamp;
+	bool rexit_active;
+	struct completion rexit_done;
+	struct completion u3exit_done;
+};
+
+struct xhci_port_cap {
+	u32 *psi;
+	u8 psi_count;
+	u8 psi_uid_count;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_input_control_ctx {
+	__le32 drop_flags;
+	__le32 add_flags;
+	__le32 rsvd2[6];
+};
+
+struct xhci_ep_ctx {
+	__le32 ep_info;
+	__le32 ep_info2;
+	__le64 deq;
+	__le32 tx_info;
+	__le32 reserved[3];
+};
+
+struct xhci_slot_ctx {
+	__le32 dev_info;
+	__le32 dev_info2;
+	__le32 tt_info;
+	__le32 dev_state;
+	__le32 reserved[4];
+};
+
+struct xhci_td {
+	struct list_head td_list;
+	struct list_head cancelled_td_list;
+	int status;
+	enum xhci_cancelled_td_status cancel_status;
+	struct urb *urb;
+	struct xhci_segment *start_seg;
+	union xhci_trb *first_trb;
+	union xhci_trb *last_trb;
+	struct xhci_segment *last_trb_seg;
+	struct xhci_segment *bounce_seg;
+	bool urb_length_set;
+	bool error_mid_td;
+	unsigned int num_trbs;
+};
+
+struct urb_priv {
+	int num_tds;
+	int num_tds_done;
+	struct xhci_td td[0];
+};
+
+typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);
+
+struct xhci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum xhci_ep_reset_type {
+	EP_HARD_RESET = 0,
+	EP_SOFT_RESET = 1,
+};
+
+typedef void (*btf_trace_xhci_dbg_address)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_context_change)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_quirks)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_reset_ep)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_cancel_urb)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_init)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_ring_expansion)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_address_ctx)(void *, struct xhci_hcd *, struct xhci_container_ctx *, unsigned int);
+
+typedef void (*btf_trace_xhci_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_command)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_queue_trb)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_gadget_ep_queue)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_free_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_alloc_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_addressable_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_stop_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_urb_enqueue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_giveback)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_dequeue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_handle_cmd_stop_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_config_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_add_endpoint)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_alloc_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_free_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_disable_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_discover_or_reset_device)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_setup_device_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_addr_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_address_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_ring_alloc)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_free)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_expansion)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_enq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_deq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_handle_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_get_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_hub_status_data)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_ep_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_host_doorbell)(void *, u32, u32);
+
+struct dbc_request;
+
+typedef void (*btf_trace_xhci_dbc_alloc_request)(void *, struct dbc_request *);
+
+struct xhci_dbc;
+
+struct dbc_request {
+	void *buf;
+	unsigned int length;
+	dma_addr_t dma;
+	void (*complete)(struct xhci_dbc *, struct dbc_request *);
+	struct list_head list_pool;
+	int status;
+	unsigned int actual;
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	dma_addr_t trb_dma;
+	union xhci_trb *trb;
+	unsigned int direction: 1;
+};
+
+enum dbc_state {
+	DS_DISABLED = 0,
+	DS_INITIALIZED = 1,
+	DS_ENABLED = 2,
+	DS_CONNECTED = 3,
+	DS_CONFIGURED = 4,
+	DS_STALLED = 5,
+};
+
+struct dbc_ep {
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	struct xhci_ring *ring;
+	unsigned int direction: 1;
+};
+
+struct dbc_regs;
+
+struct dbc_str_descs;
+
+struct dbc_driver;
+
+struct xhci_dbc {
+	spinlock_t lock;
+	struct device *dev;
+	struct xhci_hcd *xhci;
+	struct dbc_regs *regs;
+	struct xhci_ring *ring_evt;
+	struct xhci_ring *ring_in;
+	struct xhci_ring *ring_out;
+	struct xhci_erst erst;
+	struct xhci_container_ctx *ctx;
+	struct dbc_str_descs *string;
+	dma_addr_t string_dma;
+	size_t string_size;
+	u16 idVendor;
+	u16 idProduct;
+	u16 bcdDevice;
+	u8 bInterfaceProtocol;
+	enum dbc_state state;
+	struct delayed_work event_work;
+	unsigned int resume_required: 1;
+	struct dbc_ep eps[2];
+	const struct dbc_driver *driver;
+	void *priv;
+};
+
+struct dbc_regs {
+	__le32 capability;
+	__le32 doorbell;
+	__le32 ersts;
+	__le32 __reserved_0;
+	__le64 erstba;
+	__le64 erdp;
+	__le32 control;
+	__le32 status;
+	__le32 portsc;
+	__le32 __reserved_1;
+	__le64 dccp;
+	__le32 devinfo1;
+	__le32 devinfo2;
+};
+
+struct dbc_str_descs {
+	char string0[64];
+	char manufacturer[64];
+	char product[64];
+	char serial[64];
+};
+
+struct dbc_driver {
+	int (*configure)(struct xhci_dbc *);
+	void (*disconnect)(struct xhci_dbc *);
+};
+
+typedef void (*btf_trace_xhci_dbc_free_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_queue_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_giveback_request)(void *, struct dbc_request *);
+
+struct trace_event_raw_xhci_log_msg {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctx {
+	struct trace_entry ent;
+	int ctx_64;
+	unsigned int ctx_type;
+	dma_addr_t ctx_dma;
+	u8 *ctx_va;
+	unsigned int ctx_ep_num;
+	u32 __data_loc_ctx_data;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_trb {
+	struct trace_entry ent;
+	u32 type;
+	u32 field0;
+	u32 field1;
+	u32 field2;
+	u32 field3;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_free_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	unsigned long long out_ctx;
+	unsigned long long in_ctx;
+	u8 fake_port;
+	u8 real_port;
+	u16 current_mel;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	unsigned long long out_ctx;
+	unsigned long long in_ctx;
+	int devnum;
+	int state;
+	int speed;
+	u8 portnum;
+	u8 level;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_urb {
+	struct trace_entry ent;
+	void *urb;
+	unsigned int pipe;
+	unsigned int stream;
+	int status;
+	unsigned int flags;
+	int num_mapped_sgs;
+	int num_sgs;
+	int length;
+	int actual;
+	int epnum;
+	int dir_in;
+	int type;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ep_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u64 deq;
+	u32 tx_info;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_slot_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u32 tt_info;
+	u32 state;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctrl_ctx {
+	struct trace_entry ent;
+	u32 drop;
+	u32 add;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ring {
+	struct trace_entry ent;
+	u32 type;
+	void *ring;
+	dma_addr_t enq;
+	dma_addr_t deq;
+	dma_addr_t enq_seg;
+	dma_addr_t deq_seg;
+	unsigned int num_segs;
+	unsigned int stream_id;
+	unsigned int cycle_state;
+	unsigned int bounce_buf_len;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_portsc {
+	struct trace_entry ent;
+	u32 portnum;
+	u32 portsc;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_doorbell {
+	struct trace_entry ent;
+	u32 slot;
+	u32 doorbell;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_dbc_log_request {
+	struct trace_entry ent;
+	struct dbc_request *req;
+	bool dir;
+	unsigned int actual;
+	unsigned int length;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xhci_log_msg {
+	u32 msg;
+};
+
+struct trace_event_data_offsets_xhci_log_ctx {
+	u32 ctx_data;
+};
+
+struct trace_event_data_offsets_xhci_log_trb {};
+
+struct trace_event_data_offsets_xhci_log_free_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_urb {};
+
+struct trace_event_data_offsets_xhci_log_ep_ctx {};
+
+struct trace_event_data_offsets_xhci_log_slot_ctx {};
+
+struct trace_event_data_offsets_xhci_log_ctrl_ctx {};
+
+struct trace_event_data_offsets_xhci_log_ring {};
+
+struct trace_event_data_offsets_xhci_log_portsc {};
+
+struct trace_event_data_offsets_xhci_log_doorbell {};
+
+struct trace_event_data_offsets_xhci_dbc_log_request {};
+
+struct xhci_file_map {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+};
+
+struct xhci_regset {
+	char name[32];
+	struct debugfs_regset32 regset;
+	size_t nregs;
+	struct list_head list;
+};
+
+struct xhci_ep_priv;
+
+struct xhci_slot_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_ep_priv *eps[31];
+	struct xhci_virt_device *dev;
+};
+
+struct xhci_ep_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *show_ring;
+	unsigned int stream_id;
+};
+
+struct xhci_driver_data {
+	u64 quirks;
+	const char *firmware;
+};
+
+struct xhci_plat_priv {
+	const char *firmware_name;
+	unsigned long long quirks;
+	void (*plat_start)(struct usb_hcd *);
+	int (*init_quirk)(struct usb_hcd *);
+	int (*suspend_quirk)(struct usb_hcd *);
+	int (*resume_quirk)(struct usb_hcd *);
+};
+
+enum {
+	US_FL_SINGLE_LUN = 1,
+	US_FL_NEED_OVERRIDE = 2,
+	US_FL_SCM_MULT_TARG = 4,
+	US_FL_FIX_INQUIRY = 8,
+	US_FL_FIX_CAPACITY = 16,
+	US_FL_IGNORE_RESIDUE = 32,
+	US_FL_BULK32 = 64,
+	US_FL_NOT_LOCKABLE = 128,
+	US_FL_GO_SLOW = 256,
+	US_FL_NO_WP_DETECT = 512,
+	US_FL_MAX_SECTORS_64 = 1024,
+	US_FL_IGNORE_DEVICE = 2048,
+	US_FL_CAPACITY_HEURISTICS = 4096,
+	US_FL_MAX_SECTORS_MIN = 8192,
+	US_FL_BULK_IGNORE_TAG = 16384,
+	US_FL_SANE_SENSE = 32768,
+	US_FL_CAPACITY_OK = 65536,
+	US_FL_BAD_SENSE = 131072,
+	US_FL_NO_READ_DISC_INFO = 262144,
+	US_FL_NO_READ_CAPACITY_16 = 524288,
+	US_FL_INITIAL_READ10 = 1048576,
+	US_FL_WRITE_CACHE = 2097152,
+	US_FL_NEEDS_CAP16 = 4194304,
+	US_FL_IGNORE_UAS = 8388608,
+	US_FL_BROKEN_FUA = 16777216,
+	US_FL_NO_ATA_1X = 33554432,
+	US_FL_NO_REPORT_OPCODES = 67108864,
+	US_FL_MAX_SECTORS_240 = 134217728,
+	US_FL_NO_REPORT_LUNS = 268435456,
+	US_FL_ALWAYS_SYNC = 536870912,
+	US_FL_NO_SAME = 1073741824,
+	US_FL_SENSE_AFTER_SYNC = 2147483648,
+};
+
+enum {
+	SUBMIT_STATUS_URB = 2,
+	ALLOC_DATA_IN_URB = 4,
+	SUBMIT_DATA_IN_URB = 8,
+	ALLOC_DATA_OUT_URB = 16,
+	SUBMIT_DATA_OUT_URB = 32,
+	ALLOC_CMD_URB = 64,
+	SUBMIT_CMD_URB = 128,
+	COMMAND_INFLIGHT = 256,
+	DATA_IN_URB_INFLIGHT = 512,
+	DATA_OUT_URB_INFLIGHT = 1024,
+	COMMAND_ABORTED = 2048,
+	IS_IN_WORK_LIST = 4096,
+};
+
+enum {
+	IU_ID_COMMAND = 1,
+	IU_ID_STATUS = 3,
+	IU_ID_RESPONSE = 4,
+	IU_ID_TASK_MGMT = 5,
+	IU_ID_READ_READY = 6,
+	IU_ID_WRITE_READY = 7,
+};
+
+enum {
+	RC_TMF_COMPLETE = 0,
+	RC_INVALID_INFO_UNIT = 2,
+	RC_TMF_NOT_SUPPORTED = 4,
+	RC_TMF_FAILED = 5,
+	RC_TMF_SUCCEEDED = 8,
+	RC_INCORRECT_LUN = 9,
+	RC_OVERLAPPED_TAG = 10,
+};
+
+enum {
+	CMD_PIPE_ID = 1,
+	STATUS_PIPE_ID = 2,
+	DATA_IN_PIPE_ID = 3,
+	DATA_OUT_PIPE_ID = 4,
+	UAS_SIMPLE_TAG = 0,
+	UAS_HEAD_TAG = 1,
+	UAS_ORDERED_TAG = 2,
+	UAS_ACA = 4,
+};
+
+struct uas_dev_info {
+	struct usb_interface *intf;
+	struct usb_device *udev;
+	struct usb_anchor cmd_urbs;
+	struct usb_anchor sense_urbs;
+	struct usb_anchor data_urbs;
+	unsigned long flags;
+	int qdepth;
+	int resetting;
+	unsigned int cmd_pipe;
+	unsigned int status_pipe;
+	unsigned int data_in_pipe;
+	unsigned int data_out_pipe;
+	unsigned int use_streams: 1;
+	unsigned int shutdown: 1;
+	struct scsi_cmnd *cmnd[256];
+	spinlock_t lock;
+	struct work_struct work;
+	struct work_struct scan_work;
+};
+
+struct response_iu {
+	__u8 iu_id;
+	__u8 rsvd1;
+	__be16 tag;
+	__u8 add_response_info[3];
+	__u8 response_code;
+};
+
+struct uas_cmd_info {
+	unsigned int state;
+	unsigned int uas_tag;
+	struct urb *cmd_urb;
+	struct urb *data_in_urb;
+	struct urb *data_out_urb;
+};
+
+struct sense_iu {
+	__u8 iu_id;
+	__u8 rsvd1;
+	__be16 tag;
+	__be16 status_qual;
+	__u8 status;
+	__u8 rsvd7[7];
+	__be16 len;
+	__u8 sense[96];
+};
+
+struct command_iu {
+	__u8 iu_id;
+	__u8 rsvd1;
+	__be16 tag;
+	__u8 prio_attr;
+	__u8 rsvd5;
+	__u8 len;
+	__u8 rsvd7;
+	struct scsi_lun lun;
+	__u8 cdb[16];
+};
+
+struct iu {
+	__u8 iu_id;
+	__u8 rsvd1;
+	__be16 tag;
+};
+
+struct us_data;
+
+typedef int (*trans_cmnd)(struct scsi_cmnd *, struct us_data *);
+
+typedef int (*trans_reset)(struct us_data *);
+
+typedef void (*proto_cmnd)(struct scsi_cmnd *, struct us_data *);
+
+typedef void (*extra_data_destructor)(void *);
+
+typedef void (*pm_hook)(struct us_data *, int);
+
+struct us_unusual_dev;
+
+struct us_data {
+	struct mutex dev_mutex;
+	struct usb_device *pusb_dev;
+	struct usb_interface *pusb_intf;
+	const struct us_unusual_dev *unusual_dev;
+	unsigned long fflags;
+	unsigned long dflags;
+	unsigned int send_bulk_pipe;
+	unsigned int recv_bulk_pipe;
+	unsigned int send_ctrl_pipe;
+	unsigned int recv_ctrl_pipe;
+	unsigned int recv_intr_pipe;
+	char *transport_name;
+	char *protocol_name;
+	__le32 bcs_signature;
+	u8 subclass;
+	u8 protocol;
+	u8 max_lun;
+	u8 ifnum;
+	u8 ep_bInterval;
+	trans_cmnd transport;
+	trans_reset transport_reset;
+	proto_cmnd proto_handler;
+	struct scsi_cmnd *srb;
+	unsigned int tag;
+	char scsi_name[32];
+	struct urb *current_urb;
+	struct usb_ctrlrequest *cr;
+	struct usb_sg_request current_sg;
+	unsigned char *iobuf;
+	dma_addr_t iobuf_dma;
+	struct task_struct *ctl_thread;
+	struct completion cmnd_ready;
+	struct completion notify;
+	wait_queue_head_t delay_wait;
+	struct delayed_work scan_dwork;
+	void *extra;
+	extra_data_destructor extra_destructor;
+	pm_hook suspend_resume_hook;
+	int use_last_sector_hacks;
+	int last_sector_retries;
+};
+
+struct us_unusual_dev {
+	const char *vendorName;
+	const char *productName;
+	__u8 useProtocol;
+	__u8 useTransport;
+	int (*initFunction)(struct us_data *);
+};
+
+enum xfer_buf_dir {
+	TO_XFER_BUF = 0,
+	FROM_XFER_BUF = 1,
+};
+
+struct bulk_cb_wrap {
+	__le32 Signature;
+	__u32 Tag;
+	__le32 DataTransferLength;
+	__u8 Flags;
+	__u8 Lun;
+	__u8 Length;
+	__u8 CDB[16];
+};
+
+struct bulk_cs_wrap {
+	__le32 Signature;
+	__u32 Tag;
+	__le32 Residue;
+	__u8 Status;
+};
+
+struct swoc_info {
+	__u8 rev;
+	__u8 reserved[8];
+	__u16 LinuxSKU;
+	__u16 LinuxVer;
+	__u8 reserved2[47];
+} __attribute__((packed));
+
+struct ignore_entry {
+	u16 vid;
+	u16 pid;
+	u16 bcdmin;
+	u16 bcdmax;
+};
+
+struct usb_string;
+
+struct usb_gadget_strings {
+	u16 language;
+	struct usb_string *strings;
+};
+
+struct usb_string {
+	u8 id;
+	const char *s;
+};
+
+struct usb_otg20_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bmAttributes;
+	__le16 bcdOTG;
+} __attribute__((packed));
+
+struct usb_configuration;
+
+struct usb_os_desc_table;
+
+struct usb_function_instance;
+
+struct usb_function {
+	const char *name;
+	struct usb_gadget_strings **strings;
+	struct usb_descriptor_header **fs_descriptors;
+	struct usb_descriptor_header **hs_descriptors;
+	struct usb_descriptor_header **ss_descriptors;
+	struct usb_descriptor_header **ssp_descriptors;
+	struct usb_configuration *config;
+	struct usb_os_desc_table *os_desc_table;
+	unsigned int os_desc_n;
+	int (*bind)(struct usb_configuration *, struct usb_function *);
+	void (*unbind)(struct usb_configuration *, struct usb_function *);
+	void (*free_func)(struct usb_function *);
+	struct module *mod;
+	int (*set_alt)(struct usb_function *, unsigned int, unsigned int);
+	int (*get_alt)(struct usb_function *, unsigned int);
+	void (*disable)(struct usb_function *);
+	int (*setup)(struct usb_function *, const struct usb_ctrlrequest *);
+	bool (*req_match)(struct usb_function *, const struct usb_ctrlrequest *, bool);
+	void (*suspend)(struct usb_function *);
+	void (*resume)(struct usb_function *);
+	int (*get_status)(struct usb_function *);
+	int (*func_suspend)(struct usb_function *, u8);
+	bool func_suspended;
+	bool func_wakeup_armed;
+	struct list_head list;
+	unsigned long endpoints[1];
+	const struct usb_function_instance *fi;
+	unsigned int bind_deactivated: 1;
+};
+
+struct usb_composite_dev;
+
+struct usb_configuration {
+	const char *label;
+	struct usb_gadget_strings **strings;
+	const struct usb_descriptor_header **descriptors;
+	void (*unbind)(struct usb_configuration *);
+	int (*setup)(struct usb_configuration *, const struct usb_ctrlrequest *);
+	u8 bConfigurationValue;
+	u8 iConfiguration;
+	u8 bmAttributes;
+	u16 MaxPower;
+	struct usb_composite_dev *cdev;
+	struct list_head list;
+	struct list_head functions;
+	u8 next_interface_id;
+	unsigned int superspeed: 1;
+	unsigned int highspeed: 1;
+	unsigned int fullspeed: 1;
+	unsigned int superspeed_plus: 1;
+	struct usb_function *interface[16];
+};
+
+struct android_uevent_opts {
+	struct device *dev;
+	int device_id;
+	bool connected;
+	bool configured;
+	bool sw_connected;
+	struct work_struct work;
+	struct ida function_ida;
+};
+
+struct usb_composite_driver;
+
+struct usb_composite_dev {
+	struct usb_gadget *gadget;
+	struct usb_request *req;
+	struct usb_request *os_desc_req;
+	struct usb_configuration *config;
+	u8 qw_sign[14];
+	u8 b_vendor_code;
+	struct usb_configuration *os_desc_config;
+	unsigned int use_os_string: 1;
+	u16 bcd_webusb_version;
+	u8 b_webusb_vendor_code;
+	char landing_page[260];
+	unsigned int use_webusb: 1;
+	unsigned int suspended: 1;
+	struct usb_device_descriptor desc;
+	struct list_head configs;
+	struct list_head gstrings;
+	struct usb_composite_driver *driver;
+	u8 next_string_id;
+	char *def_manufacturer;
+	struct usb_string *usb_strings;
+	unsigned int deactivations;
+	int delayed_status;
+	spinlock_t lock;
+	struct android_uevent_opts android_opts;
+	unsigned int setup_pending: 1;
+	unsigned int os_desc_pending: 1;
+};
+
+struct usb_composite_driver {
+	const char *name;
+	const struct usb_device_descriptor *dev;
+	struct usb_gadget_strings **strings;
+	enum usb_device_speed max_speed;
+	unsigned int needs_serial: 1;
+	int (*bind)(struct usb_composite_dev *);
+	int (*unbind)(struct usb_composite_dev *);
+	void (*disconnect)(struct usb_composite_dev *);
+	void (*suspend)(struct usb_composite_dev *);
+	void (*resume)(struct usb_composite_dev *);
+	struct usb_gadget_driver gadget_driver;
+};
+
+struct usb_os_desc;
+
+struct usb_os_desc_table {
+	int if_id;
+	struct usb_os_desc *os_desc;
+};
+
+struct usb_os_desc {
+	char *ext_compat_id;
+	struct list_head ext_prop;
+	int ext_prop_len;
+	int ext_prop_count;
+	struct mutex *opts_mutex;
+	struct config_group group;
+	struct module *owner;
+};
+
+struct usb_function_driver;
+
+struct usb_function_instance {
+	struct config_group group;
+	struct list_head cfs_list;
+	struct usb_function_driver *fd;
+	int (*set_inst_name)(struct usb_function_instance *, const char *);
+	void (*free_func_inst)(struct usb_function_instance *);
+};
+
+struct usb_function_driver {
+	const char *name;
+	struct module *mod;
+	struct list_head list;
+	struct usb_function_instance * (*alloc_inst)();
+	struct usb_function * (*alloc_func)(struct usb_function_instance *);
+};
+
+enum {
+	USB_GADGET_MANUFACTURER_IDX = 0,
+	USB_GADGET_PRODUCT_IDX = 1,
+	USB_GADGET_SERIAL_IDX = 2,
+	USB_GADGET_FIRST_AVAIL_IDX = 3,
+};
+
+struct webusb_url_descriptor {
+	u8 bLength;
+	u8 bDescriptorType;
+	u8 bScheme;
+	u8 URL[252];
+};
+
+struct usb_gadget_string_container {
+	struct list_head list;
+	u8 *stash[0];
+};
+
+struct usb_webusb_cap_data {
+	__le16 bcdVersion;
+	u8 bVendorCode;
+	u8 iLandingPage;
+};
+
+struct usb_os_desc_ext_prop {
+	struct list_head entry;
+	u8 type;
+	int name_len;
+	char *name;
+	int data_len;
+	char *data;
+	struct config_item item;
+};
+
+struct usb_os_string {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 qwSignature[14];
+	__u8 bMS_VendorCode;
+	__u8 bPad;
+};
+
+struct usb_string_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	union {
+		__le16 legacy_padding;
+		struct {
+			struct {} __empty_wData;
+			__le16 wData[0];
+		};
+	};
+};
+
+struct usb_plat_dev_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__u8 UUID[16];
+	__u8 CapabilityData[0];
+};
+
+struct usb_composite_overwrite {
+	u16 idVendor;
+	u16 idProduct;
+	u16 bcdDevice;
+	char *serial_number;
+	char *manufacturer;
+	char *product;
+};
+
+struct gadget_info {
+	struct config_group group;
+	struct config_group functions_group;
+	struct config_group configs_group;
+	struct config_group strings_group;
+	struct config_group os_desc_group;
+	struct config_group webusb_group;
+	struct mutex lock;
+	struct usb_gadget_strings *gstrings[3];
+	struct list_head string_list;
+	struct list_head available_func;
+	struct usb_composite_driver composite;
+	struct usb_composite_dev cdev;
+	bool use_os_desc;
+	char b_vendor_code;
+	char qw_sign[14];
+	bool use_webusb;
+	u16 bcd_webusb_version;
+	u8 b_webusb_vendor_code;
+	char landing_page[260];
+	spinlock_t spinlock;
+	bool unbind;
+};
+
+struct config_usb_cfg {
+	struct config_group group;
+	struct config_group strings_group;
+	struct list_head string_list;
+	struct usb_configuration c;
+	struct list_head func_list;
+	struct usb_gadget_strings *gstrings[3];
+};
+
+struct gadget_config_name {
+	struct usb_gadget_strings stringtab_dev;
+	struct usb_string strings;
+	char *configuration;
+	struct config_group group;
+	struct list_head list;
+};
+
+struct gadget_language {
+	struct usb_gadget_strings stringtab_dev;
+	struct usb_string strings[3];
+	char *manufacturer;
+	char *product;
+	char *serialnumber;
+	struct config_group group;
+	struct list_head list;
+	struct list_head gadget_strings;
+	unsigned int nstrings;
+};
+
+struct gadget_string {
+	struct config_item item;
+	struct list_head list;
+	char string[126];
+	struct usb_string usb_string;
+};
+
+struct usb_udc {
+	struct usb_gadget_driver *driver;
+	struct usb_gadget *gadget;
+	struct device dev;
+	struct list_head list;
+	bool vbus;
+	bool started;
+	bool allow_connect;
+	struct work_struct vbus_work;
+	struct mutex connect_lock;
+};
+
+typedef void (*btf_trace_usb_gadget_frame_number)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_wakeup)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_set_remote_wakeup)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_set_selfpowered)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_clear_selfpowered)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_vbus_connect)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_vbus_draw)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_vbus_disconnect)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_connect)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_disconnect)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_deactivate)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_activate)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_ep_set_maxpacket_limit)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_enable)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_disable)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_set_halt)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_clear_halt)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_set_wedge)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_fifo_status)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_fifo_flush)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_alloc_request)(void *, struct usb_ep *, struct usb_request *, int);
+
+typedef void (*btf_trace_usb_ep_free_request)(void *, struct usb_ep *, struct usb_request *, int);
+
+typedef void (*btf_trace_usb_ep_queue)(void *, struct usb_ep *, struct usb_request *, int);
+
+typedef void (*btf_trace_usb_ep_dequeue)(void *, struct usb_ep *, struct usb_request *, int);
+
+typedef void (*btf_trace_usb_gadget_giveback_request)(void *, struct usb_ep *, struct usb_request *, int);
+
+struct trace_event_raw_udc_log_gadget {
+	struct trace_entry ent;
+	enum usb_device_speed speed;
+	enum usb_device_speed max_speed;
+	enum usb_device_state state;
+	unsigned int mA;
+	unsigned int sg_supported;
+	unsigned int is_otg;
+	unsigned int is_a_peripheral;
+	unsigned int b_hnp_enable;
+	unsigned int a_hnp_support;
+	unsigned int hnp_polling_support;
+	unsigned int host_request_flag;
+	unsigned int quirk_ep_out_aligned_size;
+	unsigned int quirk_altset_not_supp;
+	unsigned int quirk_stall_not_supp;
+	unsigned int quirk_zlp_not_supp;
+	unsigned int is_selfpowered;
+	unsigned int deactivated;
+	unsigned int connected;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_udc_log_ep {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int maxpacket;
+	unsigned int maxpacket_limit;
+	unsigned int max_streams;
+	unsigned int mult;
+	unsigned int maxburst;
+	u8 address;
+	bool claimed;
+	bool enabled;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_udc_log_req {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int length;
+	unsigned int actual;
+	unsigned int num_sgs;
+	unsigned int num_mapped_sgs;
+	unsigned int stream_id;
+	unsigned int no_interrupt;
+	unsigned int zero;
+	unsigned int short_not_ok;
+	int status;
+	int ret;
+	struct usb_request *req;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_udc_log_ep {
+	u32 name;
+};
+
+struct trace_event_data_offsets_udc_log_req {
+	u32 name;
+};
+
+struct trace_event_data_offsets_udc_log_gadget {};
+
+struct f_serial_opts {
+	struct usb_function_instance func_inst;
+	u8 port_num;
+};
+
+struct usb_cdc_line_coding {
+	__le32 dwDTERate;
+	__u8 bCharFormat;
+	__u8 bParityType;
+	__u8 bDataBits;
+} __attribute__((packed));
+
+struct gs_port;
+
+struct gserial {
+	struct usb_function func;
+	struct gs_port *ioport;
+	struct usb_ep *in;
+	struct usb_ep *out;
+	struct usb_cdc_line_coding port_line_coding;
+	void (*connect)(struct gserial *);
+	void (*disconnect)(struct gserial *);
+	int (*send_break)(struct gserial *, int);
+};
+
+struct f_acm {
+	struct gserial port;
+	u8 ctrl_id;
+	u8 data_id;
+	u8 port_num;
+	u8 pending;
+	spinlock_t lock;
+	struct usb_ep *notify;
+	struct usb_request *notify_req;
+	struct usb_cdc_line_coding port_line_coding;
+	u16 port_handshake_bits;
+	u16 serial_state;
+};
+
+struct usb_cdc_notification {
+	__u8 bmRequestType;
+	__u8 bNotificationType;
+	__le16 wValue;
+	__le16 wIndex;
+	__le16 wLength;
+};
+
+struct portmaster {
+	struct mutex lock;
+	struct gs_port *port;
+};
+
+struct kfifo {
+	union {
+		struct __kfifo kfifo;
+		unsigned char *type;
+		const unsigned char *const_type;
+		char (*rectype)[0];
+		void *ptr;
+		const void *ptr_const;
+	};
+	unsigned char buf[0];
+};
+
+struct gs_port {
+	struct tty_port port;
+	spinlock_t port_lock;
+	struct gserial *port_usb;
+	u8 port_num;
+	struct list_head read_pool;
+	int read_started;
+	int read_allocated;
+	struct list_head read_queue;
+	unsigned int n_read;
+	struct delayed_work push;
+	struct list_head write_pool;
+	int write_started;
+	int write_allocated;
+	struct kfifo port_write_buf;
+	wait_queue_head_t drain_wait;
+	bool write_busy;
+	wait_queue_head_t close_wait;
+	bool suspended;
+	bool start_delayed;
+	struct usb_cdc_line_coding port_line_coding;
+};
+
+struct f_gser {
+	struct gserial port;
+	u8 data_id;
+	u8 port_num;
+};
+
+struct gether;
+
+struct eth_dev {
+	spinlock_t lock;
+	struct gether *port_usb;
+	struct net_device *net;
+	struct usb_gadget *gadget;
+	spinlock_t req_lock;
+	struct list_head tx_reqs;
+	struct list_head rx_reqs;
+	atomic_t tx_qlen;
+	struct sk_buff_head rx_frames;
+	unsigned int qmult;
+	unsigned int header_len;
+	struct sk_buff * (*wrap)(struct gether *, struct sk_buff *);
+	int (*unwrap)(struct gether *, struct sk_buff *, struct sk_buff_head *);
+	struct work_struct work;
+	unsigned long todo;
+	bool zlp;
+	bool no_skb_reserve;
+	bool ifname_set;
+	u8 host_mac[6];
+	u8 dev_mac[6];
+};
+
+struct gether {
+	struct usb_function func;
+	struct eth_dev *ioport;
+	struct usb_ep *in_ep;
+	struct usb_ep *out_ep;
+	bool is_zlp_ok;
+	u16 cdc_filter;
+	u32 header_len;
+	bool is_fixed;
+	u32 fixed_out_len;
+	u32 fixed_in_len;
+	bool supports_multi_frame;
+	struct sk_buff * (*wrap)(struct gether *, struct sk_buff *);
+	int (*unwrap)(struct gether *, struct sk_buff *, struct sk_buff_head *);
+	void (*open)(struct gether *);
+	void (*close)(struct gether *);
+	bool is_suspend;
+};
+
+struct ndp_parser_opts {
+	u32 nth_sign;
+	u32 ndp_sign;
+	unsigned int nth_size;
+	unsigned int ndp_size;
+	unsigned int dpe_size;
+	unsigned int ndplen_align;
+	unsigned int dgram_item_len;
+	unsigned int block_length;
+	unsigned int ndp_index;
+	unsigned int reserved1;
+	unsigned int reserved2;
+	unsigned int next_ndp_index;
+};
+
+struct usb_cdc_ncm_ntb_parameters {
+	__le16 wLength;
+	__le16 bmNtbFormatsSupported;
+	__le32 dwNtbInMaxSize;
+	__le16 wNdpInDivisor;
+	__le16 wNdpInPayloadRemainder;
+	__le16 wNdpInAlignment;
+	__le16 wPadding1;
+	__le32 dwNtbOutMaxSize;
+	__le16 wNdpOutDivisor;
+	__le16 wNdpOutPayloadRemainder;
+	__le16 wNdpOutAlignment;
+	__le16 wNtbOutMaxDatagrams;
+};
+
+enum ncm_notify_state {
+	NCM_NOTIFY_NONE = 0,
+	NCM_NOTIFY_CONNECT = 1,
+	NCM_NOTIFY_SPEED = 2,
+};
+
+struct f_ncm_opts {
+	struct usb_function_instance func_inst;
+	struct net_device *net;
+	bool bound;
+	struct config_group *ncm_interf_group;
+	struct usb_os_desc ncm_os_desc;
+	char ncm_ext_compat_id[16];
+	struct mutex lock;
+	int refcnt;
+};
+
+struct f_ncm {
+	struct gether port;
+	u8 ctrl_id;
+	u8 data_id;
+	char ethaddr[14];
+	struct usb_ep *notify;
+	struct usb_request *notify_req;
+	u8 notify_state;
+	atomic_t notify_count;
+	bool is_open;
+	const struct ndp_parser_opts *parser_opts;
+	bool is_crc;
+	u32 ndp_sign;
+	spinlock_t lock;
+	struct net_device *netdev;
+	struct sk_buff *skb_tx_data;
+	struct sk_buff *skb_tx_ndp;
+	u16 ndp_dgram_count;
+	struct hrtimer task_timer;
+};
+
+enum ecm_notify_state {
+	ECM_NOTIFY_NONE = 0,
+	ECM_NOTIFY_CONNECT = 1,
+	ECM_NOTIFY_SPEED = 2,
+};
+
+struct f_ecm_opts {
+	struct usb_function_instance func_inst;
+	struct net_device *net;
+	bool bound;
+	struct mutex lock;
+	int refcnt;
+};
+
+struct f_ecm {
+	struct gether port;
+	u8 ctrl_id;
+	u8 data_id;
+	char ethaddr[14];
+	struct usb_ep *notify;
+	struct usb_request *notify_req;
+	u8 notify_state;
+	atomic_t notify_count;
+	bool is_open;
+};
+
+struct f_eem_opts {
+	struct usb_function_instance func_inst;
+	struct net_device *net;
+	bool bound;
+	struct mutex lock;
+	int refcnt;
+};
+
+struct f_eem {
+	struct gether port;
+	u8 ctrl_id;
+};
+
+struct in_context {
+	struct sk_buff *skb;
+	struct usb_ep *ep;
+};
+
+enum fsg_buffer_state {
+	BUF_STATE_SENDING = -2,
+	BUF_STATE_RECEIVING = -1,
+	BUF_STATE_EMPTY = 0,
+	BUF_STATE_FULL = 1,
+};
+
+enum fsg_state {
+	FSG_STATE_NORMAL = 0,
+	FSG_STATE_ABORT_BULK_OUT = 1,
+	FSG_STATE_PROTOCOL_RESET = 2,
+	FSG_STATE_CONFIG_CHANGE = 3,
+	FSG_STATE_EXIT = 4,
+	FSG_STATE_TERMINATED = 5,
+};
+
+enum data_direction {
+	DATA_DIR_UNKNOWN = 0,
+	DATA_DIR_FROM_HOST = 1,
+	DATA_DIR_TO_HOST = 2,
+	DATA_DIR_NONE = 3,
+};
+
+enum {
+	FSG_STRING_INTERFACE = 0,
+};
+
+struct fsg_lun {
+	struct file *filp;
+	loff_t file_length;
+	loff_t num_sectors;
+	unsigned int initially_ro: 1;
+	unsigned int ro: 1;
+	unsigned int removable: 1;
+	unsigned int cdrom: 1;
+	unsigned int prevent_medium_removal: 1;
+	unsigned int registered: 1;
+	unsigned int info_valid: 1;
+	unsigned int nofua: 1;
+	u32 sense_data;
+	u32 sense_data_info;
+	u32 unit_attention_data;
+	unsigned int blkbits;
+	unsigned int blksize;
+	struct device dev;
+	const char *name;
+	const char **name_pfx;
+	char inquiry_string[29];
+};
+
+struct fsg_lun_opts {
+	struct config_group group;
+	struct fsg_lun *lun;
+	int lun_id;
+};
+
+struct fsg_common;
+
+struct fsg_opts {
+	struct fsg_common *common;
+	struct usb_function_instance func_inst;
+	struct fsg_lun_opts lun0;
+	struct config_group *default_groups[2];
+	bool no_configfs;
+	struct mutex lock;
+	int refcnt;
+};
+
+struct fsg_dev;
+
+struct fsg_buffhd;
+
+struct fsg_common {
+	struct usb_gadget *gadget;
+	struct usb_composite_dev *cdev;
+	struct fsg_dev *fsg;
+	wait_queue_head_t io_wait;
+	wait_queue_head_t fsg_wait;
+	struct rw_semaphore filesem;
+	spinlock_t lock;
+	struct usb_ep *ep0;
+	struct usb_request *ep0req;
+	unsigned int ep0_req_tag;
+	struct fsg_buffhd *next_buffhd_to_fill;
+	struct fsg_buffhd *next_buffhd_to_drain;
+	struct fsg_buffhd *buffhds;
+	unsigned int fsg_num_buffers;
+	int cmnd_size;
+	u8 cmnd[16];
+	unsigned int lun;
+	struct fsg_lun *luns[16];
+	struct fsg_lun *curlun;
+	unsigned int bulk_out_maxpacket;
+	enum fsg_state state;
+	unsigned int exception_req_tag;
+	void *exception_arg;
+	enum data_direction data_dir;
+	u32 data_size;
+	u32 data_size_from_cmnd;
+	u32 tag;
+	u32 residue;
+	u32 usb_amount_left;
+	unsigned int can_stall: 1;
+	unsigned int free_storage_on_release: 1;
+	unsigned int phase_error: 1;
+	unsigned int short_packet_received: 1;
+	unsigned int bad_lun_okay: 1;
+	unsigned int running: 1;
+	unsigned int sysfs: 1;
+	struct completion thread_notifier;
+	struct task_struct *thread_task;
+	void *private_data;
+	char inquiry_string[29];
+};
+
+struct fsg_dev {
+	struct usb_function function;
+	struct usb_gadget *gadget;
+	struct fsg_common *common;
+	u16 interface_number;
+	unsigned int bulk_in_enabled: 1;
+	unsigned int bulk_out_enabled: 1;
+	unsigned long atomic_bitflags;
+	struct usb_ep *bulk_in;
+	struct usb_ep *bulk_out;
+};
+
+struct fsg_buffhd {
+	void *buf;
+	enum fsg_buffer_state state;
+	struct fsg_buffhd *next;
+	unsigned int bulk_out_intended_length;
+	struct usb_request *inreq;
+	struct usb_request *outreq;
+};
+
+struct fsg_lun_config {
+	const char *filename;
+	char ro;
+	char removable;
+	char cdrom;
+	char nofua;
+	char inquiry_string[29];
+};
+
+struct fsg_operations;
+
+struct fsg_config {
+	unsigned int nluns;
+	struct fsg_lun_config luns[16];
+	const struct fsg_operations *ops;
+	void *private_data;
+	const char *vendor_name;
+	const char *product_name;
+	char can_stall;
+	unsigned int fsg_num_buffers;
+};
+
+struct fsg_module_parameters {
+	char *file[16];
+	bool ro[16];
+	bool removable[16];
+	bool cdrom[16];
+	bool nofua[16];
+	unsigned int file_count;
+	unsigned int ro_count;
+	unsigned int removable_count;
+	unsigned int cdrom_count;
+	unsigned int nofua_count;
+	unsigned int luns;
+	bool stall;
+};
+
+enum ffs_state {
+	FFS_READ_DESCRIPTORS = 0,
+	FFS_READ_STRINGS = 1,
+	FFS_ACTIVE = 2,
+	FFS_DEACTIVATED = 3,
+	FFS_CLOSING = 4,
+};
+
+enum ffs_setup_state {
+	FFS_NO_SETUP = 0,
+	FFS_SETUP_PENDING = 1,
+	FFS_SETUP_CANCELLED = 2,
+};
+
+enum {
+	Opt_no_disconnect = 0,
+	Opt_rmode = 1,
+	Opt_fmode = 2,
+	Opt_mode___6 = 3,
+	Opt_uid___6 = 4,
+	Opt_gid___7 = 5,
+};
+
+enum usb_functionfs_event_type {
+	FUNCTIONFS_BIND = 0,
+	FUNCTIONFS_UNBIND = 1,
+	FUNCTIONFS_ENABLE = 2,
+	FUNCTIONFS_DISABLE = 3,
+	FUNCTIONFS_SETUP = 4,
+	FUNCTIONFS_SUSPEND = 5,
+	FUNCTIONFS_RESUME = 6,
+};
+
+enum {
+	FUNCTIONFS_DESCRIPTORS_MAGIC = 1,
+	FUNCTIONFS_STRINGS_MAGIC = 2,
+	FUNCTIONFS_DESCRIPTORS_MAGIC_V2 = 3,
+};
+
+enum functionfs_flags {
+	FUNCTIONFS_HAS_FS_DESC = 1,
+	FUNCTIONFS_HAS_HS_DESC = 2,
+	FUNCTIONFS_HAS_SS_DESC = 4,
+	FUNCTIONFS_HAS_MS_OS_DESC = 8,
+	FUNCTIONFS_VIRTUAL_ADDR = 16,
+	FUNCTIONFS_EVENTFD = 32,
+	FUNCTIONFS_ALL_CTRL_RECIP = 64,
+	FUNCTIONFS_CONFIG0_SETUP = 128,
+};
+
+enum ffs_entity_type {
+	FFS_DESCRIPTOR = 0,
+	FFS_INTERFACE = 1,
+	FFS_STRING = 2,
+	FFS_ENDPOINT = 3,
+};
+
+enum ffs_os_desc_type {
+	FFS_OS_DESC = 0,
+	FFS_OS_DESC_EXT_COMPAT = 1,
+	FFS_OS_DESC_EXT_PROP = 2,
+};
+
+struct ffs_data;
+
+struct f_fs_opts;
+
+struct ffs_dev {
+	struct ffs_data *ffs_data;
+	struct f_fs_opts *opts;
+	struct list_head entry;
+	char name[41];
+	bool mounted;
+	bool desc_ready;
+	bool single;
+	int (*ffs_ready_callback)(struct ffs_data *);
+	void (*ffs_closed_callback)(struct ffs_data *);
+	void * (*ffs_acquire_dev_callback)(struct ffs_dev *);
+	void (*ffs_release_dev_callback)(struct ffs_dev *);
+};
+
+struct ffs_file_perms {
+	umode_t mode;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct ffs_function;
+
+struct ffs_epfile;
+
+struct ffs_data {
+	struct usb_gadget *gadget;
+	struct mutex mutex;
+	spinlock_t eps_lock;
+	struct usb_request *ep0req;
+	struct completion ep0req_completion;
+	refcount_t ref;
+	atomic_t opened;
+	enum ffs_state state;
+	enum ffs_setup_state setup_state;
+	struct {
+		u8 types[4];
+		unsigned short count;
+		unsigned short can_stall;
+		struct usb_ctrlrequest setup;
+		wait_queue_head_t waitq;
+	} ev;
+	unsigned long flags;
+	wait_queue_head_t wait;
+	struct ffs_function *func;
+	const char *dev_name;
+	void *private_data;
+	const void *raw_descs_data;
+	const void *raw_descs;
+	unsigned int raw_descs_length;
+	unsigned int fs_descs_count;
+	unsigned int hs_descs_count;
+	unsigned int ss_descs_count;
+	unsigned int ms_os_descs_count;
+	unsigned int ms_os_descs_ext_prop_count;
+	unsigned int ms_os_descs_ext_prop_name_len;
+	unsigned int ms_os_descs_ext_prop_data_len;
+	void *ms_os_descs_ext_prop_avail;
+	void *ms_os_descs_ext_prop_name_avail;
+	void *ms_os_descs_ext_prop_data_avail;
+	unsigned int user_flags;
+	u8 eps_addrmap[31];
+	unsigned short strings_count;
+	unsigned short interfaces_count;
+	unsigned short eps_count;
+	unsigned short _pad1;
+	const void *raw_strings;
+	struct usb_gadget_strings **stringtabs;
+	struct super_block *sb;
+	struct ffs_file_perms file_perms;
+	struct eventfd_ctx *ffs_eventfd;
+	struct workqueue_struct *io_completion_wq;
+	bool no_disconnect;
+	struct work_struct reset_work;
+	struct ffs_epfile *epfiles;
+};
+
+struct ffs_ep;
+
+struct ffs_function {
+	struct usb_configuration *conf;
+	struct usb_gadget *gadget;
+	struct ffs_data *ffs;
+	struct ffs_ep *eps;
+	u8 eps_revmap[16];
+	short *interfaces_nums;
+	struct usb_function function;
+};
+
+struct ffs_ep {
+	struct usb_ep *ep;
+	struct usb_request *req;
+	struct usb_endpoint_descriptor *descs[3];
+	u8 num;
+};
+
+struct ffs_buffer;
+
+struct ffs_epfile {
+	struct mutex mutex;
+	struct ffs_data *ffs;
+	struct ffs_ep *ep;
+	struct dentry *dentry;
+	struct ffs_buffer *read_buffer;
+	char name[5];
+	unsigned char in;
+	unsigned char isoc;
+	unsigned char _pad;
+};
+
+struct ffs_buffer {
+	size_t length;
+	char *data;
+	char storage[0];
+};
+
+struct f_fs_opts {
+	struct usb_function_instance func_inst;
+	struct ffs_dev *dev;
+	unsigned int refcnt;
+	bool no_configfs;
+};
+
+struct ffs_io_data {
+	bool aio;
+	bool read;
+	struct kiocb *kiocb;
+	struct iov_iter data;
+	const void *to_free;
+	char *buf;
+	struct mm_struct *mm;
+	struct work_struct work;
+	struct usb_ep *ep;
+	struct usb_request *req;
+	struct sg_table sgt;
+	bool use_sg;
+	struct ffs_data *ffs;
+	int status;
+	struct completion done;
+};
+
+typedef int (*ffs_entity_callback)(enum ffs_entity_type, u8 *, struct usb_descriptor_header *, void *);
+
+struct ffs_desc_helper {
+	struct ffs_data *ffs;
+	unsigned int interfaces_count;
+	unsigned int eps_count;
+};
+
+struct usb_os_desc_header {
+	__u8 interface;
+	__le32 dwLength;
+	__le16 bcdVersion;
+	__le16 wIndex;
+	union {
+		struct {
+			__u8 bCount;
+			__u8 Reserved;
+		};
+		__le16 wCount;
+	};
+} __attribute__((packed));
+
+typedef int (*ffs_os_desc_callback)(enum ffs_os_desc_type, struct usb_os_desc_header *, void *, unsigned int, void *);
+
+struct usb_ext_compat_desc {
+	__u8 bFirstInterfaceNumber;
+	__u8 Reserved1;
+	__u8 CompatibleID[8];
+	__u8 SubCompatibleID[8];
+	__u8 Reserved2[6];
+};
+
+struct usb_ext_prop_desc {
+	__le32 dwSize;
+	__le32 dwPropertyDataType;
+	__le16 wPropertyNameLength;
+} __attribute__((packed));
+
+struct ffs_sb_fill_data {
+	struct ffs_file_perms perms;
+	umode_t root_mode;
+	const char *dev_name;
+	bool no_disconnect;
+	struct ffs_data *ffs_data;
+};
+
+struct usb_functionfs_event {
+	union {
+		struct usb_ctrlrequest setup;
+	} u;
+	__u8 type;
+	__u8 _pad[3];
+};
+
+typedef unsigned long snd_pcm_uframes_t;
+
+struct snd_pcm_substream;
+
+struct snd_pcm_hw_params;
+
+struct snd_pcm_audio_tstamp_config;
+
+struct snd_pcm_audio_tstamp_report;
+
+struct snd_pcm_ops {
+	int (*open)(struct snd_pcm_substream *);
+	int (*close)(struct snd_pcm_substream *);
+	int (*ioctl)(struct snd_pcm_substream *, unsigned int, void *);
+	int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
+	int (*hw_free)(struct snd_pcm_substream *);
+	int (*prepare)(struct snd_pcm_substream *);
+	int (*trigger)(struct snd_pcm_substream *, int);
+	int (*sync_stop)(struct snd_pcm_substream *);
+	snd_pcm_uframes_t (*pointer)(struct snd_pcm_substream *);
+	int (*get_time_info)(struct snd_pcm_substream *, struct timespec64 *, struct timespec64 *, struct snd_pcm_audio_tstamp_config *, struct snd_pcm_audio_tstamp_report *);
+	int (*fill_silence)(struct snd_pcm_substream *, int, unsigned long, unsigned long);
+	int (*copy)(struct snd_pcm_substream *, int, unsigned long, struct iov_iter *, unsigned long);
+	struct page * (*page)(struct snd_pcm_substream *, unsigned long);
+	int (*mmap)(struct snd_pcm_substream *, struct vm_area_struct *);
+	int (*ack)(struct snd_pcm_substream *);
+	u64 android_kabi_reserved1;
+};
+
+struct snd_dma_device {
+	int type;
+	enum dma_data_direction dir;
+	bool need_sync;
+	struct device *dev;
+};
+
+struct snd_dma_buffer {
+	struct snd_dma_device dev;
+	unsigned char *area;
+	dma_addr_t addr;
+	size_t bytes;
+	void *private_data;
+};
+
+struct snd_pcm_group {
+	spinlock_t lock;
+	struct mutex mutex;
+	struct list_head substreams;
+	refcount_t refs;
+};
+
+struct snd_pcm;
+
+struct snd_pcm_str;
+
+struct snd_pcm_runtime;
+
+struct snd_timer;
+
+struct snd_pcm_substream {
+	struct snd_pcm *pcm;
+	struct snd_pcm_str *pstr;
+	void *private_data;
+	int number;
+	char name[32];
+	int stream;
+	struct pm_qos_request latency_pm_qos_req;
+	size_t buffer_bytes_max;
+	struct snd_dma_buffer dma_buffer;
+	size_t dma_max;
+	const struct snd_pcm_ops *ops;
+	struct snd_pcm_runtime *runtime;
+	struct snd_timer *timer;
+	unsigned int timer_running: 1;
+	long wait_time;
+	struct snd_pcm_substream *next;
+	struct list_head link_list;
+	struct snd_pcm_group self_group;
+	struct snd_pcm_group *group;
+	int ref_count;
+	atomic_t mmap_count;
+	unsigned int f_flags;
+	void (*pcm_release)(struct snd_pcm_substream *);
+	struct pid *pid;
+	unsigned int hw_opened: 1;
+	unsigned int managed_buffer_alloc: 1;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_kcontrol;
+
+struct snd_pcm_str {
+	int stream;
+	struct snd_pcm *pcm;
+	unsigned int substream_count;
+	unsigned int substream_opened;
+	struct snd_pcm_substream *substream;
+	struct snd_kcontrol *chmap_kctl;
+	struct device *dev;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_card;
+
+struct snd_pcm {
+	struct snd_card *card;
+	struct list_head list;
+	int device;
+	unsigned int info_flags;
+	unsigned short dev_class;
+	unsigned short dev_subclass;
+	char id[64];
+	char name[80];
+	struct snd_pcm_str streams[2];
+	struct mutex open_mutex;
+	wait_queue_head_t open_wait;
+	void *private_data;
+	void (*private_free)(struct snd_pcm *);
+	bool internal;
+	bool nonatomic;
+	bool no_device_suspend;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_shutdown_f_ops;
+
+struct snd_info_entry;
+
+struct snd_card {
+	int number;
+	char id[16];
+	char driver[16];
+	char shortname[32];
+	char longname[80];
+	char irq_descr[32];
+	char mixername[80];
+	char components[128];
+	struct module *module;
+	void *private_data;
+	void (*private_free)(struct snd_card *);
+	struct list_head devices;
+	struct device *ctl_dev;
+	unsigned int last_numid;
+	struct rw_semaphore controls_rwsem;
+	rwlock_t ctl_files_rwlock;
+	int controls_count;
+	size_t user_ctl_alloc_size;
+	struct list_head controls;
+	struct list_head ctl_files;
+	struct xarray ctl_numids;
+	struct xarray ctl_hash;
+	bool ctl_hash_collision;
+	struct snd_info_entry *proc_root;
+	struct proc_dir_entry *proc_root_link;
+	struct list_head files_list;
+	struct snd_shutdown_f_ops *s_f_ops;
+	spinlock_t files_lock;
+	int shutdown;
+	struct completion *release_completion;
+	struct device *dev;
+	struct device card_dev;
+	const struct attribute_group *dev_groups[4];
+	bool registered;
+	bool managed;
+	bool releasing;
+	int sync_irq;
+	wait_queue_head_t remove_sleep;
+	size_t total_pcm_alloc_bytes;
+	struct mutex memory_mutex;
+	unsigned int power_state;
+	atomic_t power_ref;
+	wait_queue_head_t power_sleep;
+	wait_queue_head_t power_ref_sleep;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef int snd_kcontrol_tlv_rw_t(struct snd_kcontrol *, int, unsigned int, unsigned int __attribute__((btf_type_tag("user"))) *);
+
+typedef int snd_ctl_elem_iface_t;
+
+struct snd_ctl_elem_id {
+	unsigned int numid;
+	snd_ctl_elem_iface_t iface;
+	unsigned int device;
+	unsigned int subdevice;
+	unsigned char name[44];
+	unsigned int index;
+};
+
+struct snd_ctl_elem_info;
+
+typedef int snd_kcontrol_info_t(struct snd_kcontrol *, struct snd_ctl_elem_info *);
+
+struct snd_ctl_elem_value;
+
+typedef int snd_kcontrol_get_t(struct snd_kcontrol *, struct snd_ctl_elem_value *);
+
+typedef int snd_kcontrol_put_t(struct snd_kcontrol *, struct snd_ctl_elem_value *);
+
+struct snd_ctl_file;
+
+struct snd_kcontrol_volatile {
+	struct snd_ctl_file *owner;
+	unsigned int access;
+};
+
+struct snd_kcontrol {
+	struct list_head list;
+	struct snd_ctl_elem_id id;
+	unsigned int count;
+	snd_kcontrol_info_t *info;
+	snd_kcontrol_get_t *get;
+	snd_kcontrol_put_t *put;
+	union {
+		snd_kcontrol_tlv_rw_t *c;
+		const unsigned int *p;
+	} tlv;
+	unsigned long private_value;
+	void *private_data;
+	void (*private_free)(struct snd_kcontrol *);
+	struct snd_kcontrol_volatile vd[0];
+};
+
+typedef int snd_ctl_elem_type_t;
+
+struct snd_ctl_elem_info {
+	struct snd_ctl_elem_id id;
+	snd_ctl_elem_type_t type;
+	unsigned int access;
+	unsigned int count;
+	__kernel_pid_t owner;
+	union {
+		struct {
+			long min;
+			long max;
+			long step;
+		} integer;
+		struct {
+			long long min;
+			long long max;
+			long long step;
+		} integer64;
+		struct {
+			unsigned int items;
+			unsigned int item;
+			char name[64];
+			__u64 names_ptr;
+			unsigned int names_length;
+		} enumerated;
+		unsigned char reserved[128];
+	} value;
+	unsigned char reserved[64];
+};
+
+struct snd_aes_iec958 {
+	unsigned char status[24];
+	unsigned char subcode[147];
+	unsigned char pad;
+	unsigned char dig_subframe[4];
+};
+
+struct snd_ctl_elem_value {
+	struct snd_ctl_elem_id id;
+	unsigned int indirect: 1;
+	union {
+		union {
+			long value[128];
+			long *value_ptr;
+		} integer;
+		union {
+			long long value[64];
+			long long *value_ptr;
+		} integer64;
+		union {
+			unsigned int item[128];
+			unsigned int *item_ptr;
+		} enumerated;
+		union {
+			unsigned char data[512];
+			unsigned char *data_ptr;
+		} bytes;
+		struct snd_aes_iec958 iec958;
+	} value;
+	unsigned char reserved[128];
+};
+
+struct snd_fasync;
+
+struct snd_ctl_file {
+	struct list_head list;
+	struct snd_card *card;
+	struct pid *pid;
+	int preferred_subdevice[2];
+	wait_queue_head_t change_sleep;
+	spinlock_t read_lock;
+	struct snd_fasync *fasync;
+	int subscribed;
+	struct list_head events;
+};
+
+typedef int snd_pcm_state_t;
+
+typedef long snd_pcm_sframes_t;
+
+typedef int snd_pcm_access_t;
+
+typedef int snd_pcm_format_t;
+
+typedef int snd_pcm_subformat_t;
+
+union snd_pcm_sync_id {
+	unsigned char id[16];
+	unsigned short id16[8];
+	unsigned int id32[4];
+};
+
+struct snd_pcm_hardware {
+	unsigned int info;
+	u64 formats;
+	unsigned int rates;
+	unsigned int rate_min;
+	unsigned int rate_max;
+	unsigned int channels_min;
+	unsigned int channels_max;
+	size_t buffer_bytes_max;
+	size_t period_bytes_min;
+	size_t period_bytes_max;
+	unsigned int periods_min;
+	unsigned int periods_max;
+	size_t fifo_size;
+};
+
+struct snd_mask {
+	__u32 bits[8];
+};
+
+struct snd_interval {
+	unsigned int min;
+	unsigned int max;
+	unsigned int openmin: 1;
+	unsigned int openmax: 1;
+	unsigned int integer: 1;
+	unsigned int empty: 1;
+};
+
+struct snd_pcm_hw_rule;
+
+struct snd_pcm_hw_constraints {
+	struct snd_mask masks[3];
+	struct snd_interval intervals[12];
+	unsigned int rules_num;
+	unsigned int rules_all;
+	struct snd_pcm_hw_rule *rules;
+};
+
+struct snd_pcm_audio_tstamp_config {
+	u32 type_requested: 4;
+	u32 report_delay: 1;
+};
+
+struct snd_pcm_audio_tstamp_report {
+	u32 valid: 1;
+	u32 actual_type: 4;
+	u32 accuracy_report: 1;
+	u32 accuracy;
+};
+
+struct snd_pcm_mmap_status;
+
+struct snd_pcm_mmap_control;
+
+struct snd_pcm_runtime {
+	snd_pcm_state_t state;
+	snd_pcm_state_t suspended_state;
+	struct snd_pcm_substream *trigger_master;
+	struct timespec64 trigger_tstamp;
+	bool trigger_tstamp_latched;
+	int overrange;
+	snd_pcm_uframes_t avail_max;
+	snd_pcm_uframes_t hw_ptr_base;
+	snd_pcm_uframes_t hw_ptr_interrupt;
+	unsigned long hw_ptr_jiffies;
+	unsigned long hw_ptr_buffer_jiffies;
+	snd_pcm_sframes_t delay;
+	u64 hw_ptr_wrap;
+	snd_pcm_access_t access;
+	snd_pcm_format_t format;
+	snd_pcm_subformat_t subformat;
+	unsigned int rate;
+	unsigned int channels;
+	snd_pcm_uframes_t period_size;
+	unsigned int periods;
+	snd_pcm_uframes_t buffer_size;
+	snd_pcm_uframes_t min_align;
+	size_t byte_align;
+	unsigned int frame_bits;
+	unsigned int sample_bits;
+	unsigned int info;
+	unsigned int rate_num;
+	unsigned int rate_den;
+	unsigned int no_period_wakeup: 1;
+	int tstamp_mode;
+	unsigned int period_step;
+	snd_pcm_uframes_t start_threshold;
+	snd_pcm_uframes_t stop_threshold;
+	snd_pcm_uframes_t silence_threshold;
+	snd_pcm_uframes_t silence_size;
+	snd_pcm_uframes_t boundary;
+	snd_pcm_uframes_t silence_start;
+	snd_pcm_uframes_t silence_filled;
+	union snd_pcm_sync_id sync;
+	struct snd_pcm_mmap_status *status;
+	struct snd_pcm_mmap_control *control;
+	snd_pcm_uframes_t twake;
+	wait_queue_head_t sleep;
+	wait_queue_head_t tsleep;
+	struct snd_fasync *fasync;
+	bool stop_operating;
+	struct mutex buffer_mutex;
+	atomic_t buffer_accessing;
+	void *private_data;
+	void (*private_free)(struct snd_pcm_runtime *);
+	struct snd_pcm_hardware hw;
+	struct snd_pcm_hw_constraints hw_constraints;
+	unsigned int timer_resolution;
+	int tstamp_type;
+	unsigned char *dma_area;
+	dma_addr_t dma_addr;
+	size_t dma_bytes;
+	struct snd_dma_buffer *dma_buffer_p;
+	unsigned int buffer_changed: 1;
+	struct snd_pcm_audio_tstamp_config audio_tstamp_config;
+	struct snd_pcm_audio_tstamp_report audio_tstamp_report;
+	struct timespec64 driver_tstamp;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef char __pad_before_uframe[0];
+
+typedef char __pad_after_uframe[0];
+
+struct snd_pcm_mmap_status {
+	snd_pcm_state_t state;
+	__u32 pad1;
+	__pad_before_uframe __pad1;
+	snd_pcm_uframes_t hw_ptr;
+	__pad_after_uframe __pad2;
+	struct __kernel_timespec tstamp;
+	snd_pcm_state_t suspended_state;
+	__u32 pad3;
+	struct __kernel_timespec audio_tstamp;
+};
+
+struct snd_pcm_mmap_control {
+	__pad_before_uframe __pad1;
+	snd_pcm_uframes_t appl_ptr;
+	__pad_before_uframe __pad2;
+	__pad_before_uframe __pad3;
+	snd_pcm_uframes_t avail_min;
+	__pad_after_uframe __pad4;
+};
+
+typedef int (*snd_pcm_hw_rule_func_t)(struct snd_pcm_hw_params *, struct snd_pcm_hw_rule *);
+
+struct snd_pcm_hw_rule {
+	unsigned int cond;
+	int var;
+	int deps[5];
+	snd_pcm_hw_rule_func_t func;
+	void *private;
+};
+
+struct snd_pcm_hw_params {
+	unsigned int flags;
+	struct snd_mask masks[3];
+	struct snd_mask mres[5];
+	struct snd_interval intervals[12];
+	struct snd_interval ires[9];
+	unsigned int rmask;
+	unsigned int cmask;
+	unsigned int info;
+	unsigned int msbits;
+	unsigned int rate_num;
+	unsigned int rate_den;
+	snd_pcm_uframes_t fifo_size;
+	unsigned char reserved[64];
+};
+
+struct snd_kcontrol_new {
+	snd_ctl_elem_iface_t iface;
+	unsigned int device;
+	unsigned int subdevice;
+	const char *name;
+	unsigned int index;
+	unsigned int access;
+	unsigned int count;
+	snd_kcontrol_info_t *info;
+	snd_kcontrol_get_t *get;
+	snd_kcontrol_put_t *put;
+	union {
+		snd_kcontrol_tlv_rw_t *c;
+		const unsigned int *p;
+	} tlv;
+	unsigned long private_value;
+};
+
+enum {
+	SNDRV_PCM_STREAM_PLAYBACK = 0,
+	SNDRV_PCM_STREAM_CAPTURE = 1,
+	SNDRV_PCM_STREAM_LAST = 1,
+};
+
+enum {
+	UAC_FBACK_CTRL = 0,
+	UAC_P_PITCH_CTRL = 1,
+	UAC_MUTE_CTRL = 2,
+	UAC_VOLUME_CTRL = 3,
+	UAC_RATE_CTRL = 4,
+};
+
+struct snd_uac_chip;
+
+struct uac_rtd_params {
+	struct snd_uac_chip *uac;
+	bool ep_enabled;
+	struct snd_pcm_substream *ss;
+	ssize_t hw_ptr;
+	void *rbuf;
+	unsigned int pitch;
+	unsigned int max_psize;
+	struct usb_request **reqs;
+	struct usb_request *req_fback;
+	bool fb_ep_enabled;
+	int fu_id;
+	struct snd_kcontrol *snd_kctl_volume;
+	struct snd_kcontrol *snd_kctl_mute;
+	s16 volume_min;
+	s16 volume_max;
+	s16 volume_res;
+	s16 volume;
+	int mute;
+	struct snd_kcontrol *snd_kctl_rate;
+	int srate;
+	int active;
+	spinlock_t lock;
+};
+
+struct g_audio;
+
+struct snd_uac_chip {
+	struct g_audio *audio_dev;
+	struct uac_rtd_params p_prm;
+	struct uac_rtd_params c_prm;
+	struct snd_card *card;
+	struct snd_pcm *pcm;
+	unsigned long long p_residue_mil;
+	unsigned int p_interval;
+	unsigned int p_framesize;
+};
+
+struct uac_fu_params {
+	int id;
+	bool mute_present;
+	bool volume_present;
+	s16 volume_min;
+	s16 volume_max;
+	s16 volume_res;
+};
+
+struct uac_params {
+	int p_chmask;
+	int p_srates[10];
+	int p_ssize;
+	struct uac_fu_params p_fu;
+	int c_chmask;
+	int c_srates[10];
+	int c_ssize;
+	struct uac_fu_params c_fu;
+	int req_number;
+	int fb_max;
+};
+
+struct g_audio {
+	struct usb_function func;
+	struct usb_gadget *gadget;
+	struct usb_ep *in_ep;
+	struct usb_ep *out_ep;
+	struct usb_ep *in_ep_fback;
+	unsigned int in_ep_maxpsize;
+	unsigned int out_ep_maxpsize;
+	int (*notify)(struct g_audio *, int, int);
+	struct snd_uac_chip *uac;
+	struct uac_params params;
+};
+
+typedef int snd_pcm_hw_param_t;
+
+struct uac2_feature_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__u8 bmaControls[0];
+};
+
+struct uac_clock_source_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bmAttributes;
+	__u8 bmControls;
+	__u8 bAssocTerminal;
+	__u8 iClockSource;
+};
+
+struct uac2_input_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bCSourceID;
+	__u8 bNrChannels;
+	__le32 bmChannelConfig;
+	__u8 iChannelNames;
+	__le16 bmControls;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uac2_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 bCSourceID;
+	__le16 bmControls;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uac2_as_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalLink;
+	__u8 bmControls;
+	__u8 bFormatType;
+	__le32 bmFormats;
+	__u8 bNrChannels;
+	__le32 bmChannelConfig;
+	__u8 iChannelNames;
+} __attribute__((packed));
+
+struct uac2_format_type_i_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bSubslotSize;
+	__u8 bBitResolution;
+};
+
+struct uac2_ac_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 bcdADC;
+	__u8 bCategory;
+	__le16 wTotalLength;
+	__u8 bmControls;
+} __attribute__((packed));
+
+struct uac2_iso_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bmAttributes;
+	__u8 bmControls;
+	__u8 bLockDelayUnits;
+	__le16 wLockDelay;
+};
+
+enum {
+	STR_ASSOC = 0,
+	STR_IF_CTRL = 1,
+	STR_CLKSRC_IN = 2,
+	STR_CLKSRC_OUT = 3,
+	STR_USB_IT = 4,
+	STR_IO_IT = 5,
+	STR_USB_OT = 6,
+	STR_IO_OT = 7,
+	STR_FU_IN = 8,
+	STR_FU_OUT = 9,
+	STR_AS_OUT_ALT0 = 10,
+	STR_AS_OUT_ALT1 = 11,
+	STR_AS_IN_ALT0 = 12,
+	STR_AS_IN_ALT1 = 13,
+};
+
+struct f_uac2_opts {
+	struct usb_function_instance func_inst;
+	int p_chmask;
+	int p_srates[10];
+	int p_ssize;
+	u8 p_hs_bint;
+	int c_chmask;
+	int c_srates[10];
+	int c_ssize;
+	int c_sync;
+	u8 c_hs_bint;
+	bool p_mute_present;
+	bool p_volume_present;
+	s16 p_volume_min;
+	s16 p_volume_max;
+	s16 p_volume_res;
+	bool c_mute_present;
+	bool c_volume_present;
+	s16 c_volume_min;
+	s16 c_volume_max;
+	s16 c_volume_res;
+	int req_number;
+	int fb_max;
+	bool bound;
+	char function_name[32];
+	struct mutex lock;
+	int refcnt;
+};
+
+struct f_uac2 {
+	struct g_audio g_audio;
+	u8 ac_intf;
+	u8 as_in_intf;
+	u8 as_out_intf;
+	u8 ac_alt;
+	u8 as_in_alt;
+	u8 as_out_alt;
+	struct usb_ctrlrequest setup_cr;
+	struct usb_ep *int_ep;
+	atomic_t int_count;
+	int clock_id;
+};
+
+struct cntrl_cur_lay2 {
+	__le16 wCUR;
+};
+
+struct cntrl_cur_lay3 {
+	__le32 dCUR;
+};
+
+struct cntrl_range_lay2 {
+	__le16 wNumSubRanges;
+	__le16 wMIN;
+	__le16 wMAX;
+	__le16 wRES;
+};
+
+struct cntrl_subrange_lay3 {
+	__le32 dMIN;
+	__le32 dMAX;
+	__le32 dRES;
+};
+
+struct cntrl_ranges_lay3_srates {
+	__le16 wNumSubRanges;
+	struct cntrl_subrange_lay3 r[10];
+} __attribute__((packed));
+
+struct uac2_interrupt_data_msg {
+	__u8 bInfo;
+	__u8 bAttribute;
+	__le16 wValue;
+	__le16 wIndex;
+};
+
+struct uvc_control_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 wMaxTransferSize;
+} __attribute__((packed));
+
+enum media_pad_signal_type {
+	PAD_SIGNAL_DEFAULT = 0,
+	PAD_SIGNAL_ANALOG = 1,
+	PAD_SIGNAL_DV = 2,
+	PAD_SIGNAL_AUDIO = 3,
+};
+
+enum media_request_state {
+	MEDIA_REQUEST_STATE_IDLE = 0,
+	MEDIA_REQUEST_STATE_VALIDATING = 1,
+	MEDIA_REQUEST_STATE_QUEUED = 2,
+	MEDIA_REQUEST_STATE_COMPLETE = 3,
+	MEDIA_REQUEST_STATE_CLEANING = 4,
+	MEDIA_REQUEST_STATE_UPDATING = 5,
+	NR_OF_MEDIA_REQUEST_STATE = 6,
+};
+
+enum media_entity_type {
+	MEDIA_ENTITY_TYPE_BASE = 0,
+	MEDIA_ENTITY_TYPE_VIDEO_DEVICE = 1,
+	MEDIA_ENTITY_TYPE_V4L2_SUBDEV = 2,
+};
+
+enum v4l2_priority {
+	V4L2_PRIORITY_UNSET = 0,
+	V4L2_PRIORITY_BACKGROUND = 1,
+	V4L2_PRIORITY_INTERACTIVE = 2,
+	V4L2_PRIORITY_RECORD = 3,
+	V4L2_PRIORITY_DEFAULT = 2,
+};
+
+enum v4l2_subdev_ir_mode {
+	V4L2_SUBDEV_IR_MODE_PULSE_WIDTH = 0,
+};
+
+enum v4l2_mbus_frame_desc_type {
+	V4L2_MBUS_FRAME_DESC_TYPE_UNDEFINED = 0,
+	V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL = 1,
+	V4L2_MBUS_FRAME_DESC_TYPE_CSI2 = 2,
+};
+
+enum v4l2_mbus_frame_desc_flags {
+	V4L2_MBUS_FRAME_DESC_FL_LEN_MAX = 1,
+	V4L2_MBUS_FRAME_DESC_FL_BLOB = 2,
+};
+
+enum v4l2_mbus_type {
+	V4L2_MBUS_UNKNOWN = 0,
+	V4L2_MBUS_PARALLEL = 1,
+	V4L2_MBUS_BT656 = 2,
+	V4L2_MBUS_CSI1 = 3,
+	V4L2_MBUS_CCP2 = 4,
+	V4L2_MBUS_CSI2_DPHY = 5,
+	V4L2_MBUS_CSI2_CPHY = 6,
+	V4L2_MBUS_DPI = 7,
+	V4L2_MBUS_INVALID = 8,
+};
+
+enum v4l2_subdev_format_whence {
+	V4L2_SUBDEV_FORMAT_TRY = 0,
+	V4L2_SUBDEV_FORMAT_ACTIVE = 1,
+};
+
+enum v4l2_async_match_type {
+	V4L2_ASYNC_MATCH_TYPE_I2C = 0,
+	V4L2_ASYNC_MATCH_TYPE_FWNODE = 1,
+};
+
+enum vb2_buffer_state {
+	VB2_BUF_STATE_DEQUEUED = 0,
+	VB2_BUF_STATE_IN_REQUEST = 1,
+	VB2_BUF_STATE_PREPARING = 2,
+	VB2_BUF_STATE_QUEUED = 3,
+	VB2_BUF_STATE_ACTIVE = 4,
+	VB2_BUF_STATE_DONE = 5,
+	VB2_BUF_STATE_ERROR = 6,
+};
+
+enum vfl_devnode_type {
+	VFL_TYPE_VIDEO = 0,
+	VFL_TYPE_VBI = 1,
+	VFL_TYPE_RADIO = 2,
+	VFL_TYPE_SUBDEV = 3,
+	VFL_TYPE_SDR = 4,
+	VFL_TYPE_TOUCH = 5,
+	VFL_TYPE_MAX = 6,
+};
+
+enum vfl_devnode_direction {
+	VFL_DIR_RX = 0,
+	VFL_DIR_TX = 1,
+	VFL_DIR_M2M = 2,
+};
+
+enum uvc_state {
+	UVC_STATE_DISCONNECTED = 0,
+	UVC_STATE_CONNECTED = 1,
+	UVC_STATE_STREAMING = 2,
+};
+
+enum uvc_buffer_state {
+	UVC_BUF_STATE_IDLE = 0,
+	UVC_BUF_STATE_QUEUED = 1,
+	UVC_BUF_STATE_ACTIVE = 2,
+	UVC_BUF_STATE_DONE = 3,
+	UVC_BUF_STATE_ERROR = 4,
+};
+
+struct uvc_descriptor_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+};
+
+struct uvc_camera_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 iTerminal;
+	__le16 wObjectiveFocalLengthMin;
+	__le16 wObjectiveFocalLengthMax;
+	__le16 wOcularFocalLength;
+	__u8 bControlSize;
+	__u8 bmControls[3];
+};
+
+struct uvc_processing_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__le16 wMaxMultiplier;
+	__u8 bControlSize;
+	__u8 bmControls[2];
+	__u8 iProcessing;
+	__u8 bmVideoStandards;
+} __attribute__((packed));
+
+struct uvc_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uvcg_streaming_header;
+
+struct f_uvc_opts {
+	struct usb_function_instance func_inst;
+	unsigned int streaming_interval;
+	unsigned int streaming_maxpacket;
+	unsigned int streaming_maxburst;
+	unsigned int control_interface;
+	unsigned int streaming_interface;
+	char function_name[32];
+	unsigned int last_unit_id;
+	bool enable_interrupt_ep;
+	const struct uvc_descriptor_header * const *fs_control;
+	const struct uvc_descriptor_header * const *ss_control;
+	const struct uvc_descriptor_header * const *fs_streaming;
+	const struct uvc_descriptor_header * const *hs_streaming;
+	const struct uvc_descriptor_header * const *ss_streaming;
+	struct uvc_camera_terminal_descriptor uvc_camera_terminal;
+	struct uvc_processing_unit_descriptor uvc_processing;
+	struct uvc_output_terminal_descriptor uvc_output_terminal;
+	struct uvc_descriptor_header *uvc_fs_control_cls[5];
+	struct uvc_descriptor_header *uvc_ss_control_cls[5];
+	struct list_head extension_units;
+	struct uvc_descriptor_header **uvc_fs_streaming_cls;
+	struct uvc_descriptor_header **uvc_hs_streaming_cls;
+	struct uvc_descriptor_header **uvc_ss_streaming_cls;
+	u8 iad_index;
+	u8 vs0_index;
+	u8 vs1_index;
+	struct mutex lock;
+	int refcnt;
+	struct uvcg_streaming_header *header;
+};
+
+struct uvc_input_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bNumFormats;
+	__le16 wTotalLength;
+	__u8 bEndpointAddress;
+	__u8 bmInfo;
+	__u8 bTerminalLink;
+	__u8 bStillCaptureMethod;
+	__u8 bTriggerSupport;
+	__u8 bTriggerUsage;
+	__u8 bControlSize;
+	__u8 bmaControls[0];
+} __attribute__((packed));
+
+struct uvcg_streaming_header {
+	struct config_item item;
+	struct uvc_input_header_descriptor desc;
+	unsigned int linked;
+	struct list_head formats;
+	unsigned int num_fmt;
+};
+
+struct uvcg_extension_unit_descriptor {
+	u8 bLength;
+	u8 bDescriptorType;
+	u8 bDescriptorSubType;
+	u8 bUnitID;
+	u8 guidExtensionCode[16];
+	u8 bNumControls;
+	u8 bNrInPins;
+	u8 *baSourceID;
+	u8 bControlSize;
+	u8 *bmControls;
+	u8 iExtension;
+} __attribute__((packed));
+
+struct uvcg_extension {
+	struct config_item item;
+	struct list_head list;
+	u8 string_descriptor_index;
+	struct uvcg_extension_unit_descriptor desc;
+};
+
+struct media_device;
+
+struct media_gobj {
+	struct media_device *mdev;
+	u32 id;
+	struct list_head list;
+};
+
+struct media_pad;
+
+struct media_entity_operations;
+
+struct media_entity {
+	struct media_gobj graph_obj;
+	const char *name;
+	enum media_entity_type obj_type;
+	u32 function;
+	unsigned long flags;
+	u16 num_pads;
+	u16 num_links;
+	u16 num_backlinks;
+	int internal_idx;
+	struct media_pad *pads;
+	struct list_head links;
+	const struct media_entity_operations *ops;
+	int use_count;
+	union {
+		struct {
+			u32 major;
+			u32 minor;
+		} dev;
+	} info;
+};
+
+struct media_pipeline {
+	bool allocated;
+	struct media_device *mdev;
+	struct list_head pads;
+	int start_count;
+};
+
+typedef __u64 v4l2_std_id;
+
+struct media_intf_devnode;
+
+struct v4l2_file_operations;
+
+struct v4l2_device;
+
+struct v4l2_ctrl_handler;
+
+struct vb2_queue;
+
+struct v4l2_prio_state;
+
+struct v4l2_ioctl_ops;
+
+struct video_device {
+	struct media_entity entity;
+	struct media_intf_devnode *intf_devnode;
+	struct media_pipeline pipe;
+	const struct v4l2_file_operations *fops;
+	u32 device_caps;
+	struct device dev;
+	struct cdev *cdev;
+	struct v4l2_device *v4l2_dev;
+	struct device *dev_parent;
+	struct v4l2_ctrl_handler *ctrl_handler;
+	struct vb2_queue *queue;
+	struct v4l2_prio_state *prio;
+	char name[32];
+	enum vfl_devnode_type vfl_type;
+	enum vfl_devnode_direction vfl_dir;
+	int minor;
+	u16 num;
+	unsigned long flags;
+	int index;
+	spinlock_t fh_lock;
+	struct list_head fh_list;
+	int dev_debug;
+	v4l2_std_id tvnorms;
+	void (*release)(struct video_device *);
+	const struct v4l2_ioctl_ops *ioctl_ops;
+	unsigned long valid_ioctls[3];
+	struct mutex *lock;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct v4l2_prio_state {
+	atomic_t prios[4];
+};
+
+struct v4l2_subdev;
+
+struct v4l2_device {
+	struct device *dev;
+	struct media_device *mdev;
+	struct list_head subdevs;
+	spinlock_t lock;
+	char name[36];
+	void (*notify)(struct v4l2_subdev *, unsigned int, void *);
+	struct v4l2_ctrl_handler *ctrl_handler;
+	struct v4l2_prio_state prio;
+	struct kref ref;
+	void (*release)(struct v4l2_device *);
+};
+
+struct vb2_ops;
+
+struct vb2_mem_ops;
+
+struct vb2_buf_ops;
+
+struct vb2_buffer;
+
+struct vb2_fileio_data;
+
+struct vb2_threadio_data;
+
+struct vb2_queue {
+	unsigned int type;
+	unsigned int io_modes;
+	struct device *dev;
+	unsigned long dma_attrs;
+	unsigned int bidirectional: 1;
+	unsigned int fileio_read_once: 1;
+	unsigned int fileio_write_immediately: 1;
+	unsigned int allow_zero_bytesused: 1;
+	unsigned int quirk_poll_must_check_waiting_for_buffers: 1;
+	unsigned int supports_requests: 1;
+	unsigned int requires_requests: 1;
+	unsigned int uses_qbuf: 1;
+	unsigned int uses_requests: 1;
+	unsigned int allow_cache_hints: 1;
+	unsigned int non_coherent_mem: 1;
+	struct mutex *lock;
+	void *owner;
+	const struct vb2_ops *ops;
+	const struct vb2_mem_ops *mem_ops;
+	const struct vb2_buf_ops *buf_ops;
+	void *drv_priv;
+	u32 subsystem_flags;
+	unsigned int buf_struct_size;
+	u32 timestamp_flags;
+	gfp_t gfp_flags;
+	u32 min_buffers_needed;
+	struct device *alloc_devs[8];
+	struct mutex mmap_lock;
+	unsigned int memory;
+	enum dma_data_direction dma_dir;
+	struct vb2_buffer *bufs[64];
+	unsigned int num_buffers;
+	struct list_head queued_list;
+	unsigned int queued_count;
+	atomic_t owned_by_drv_count;
+	struct list_head done_list;
+	spinlock_t done_lock;
+	wait_queue_head_t done_wq;
+	unsigned int streaming: 1;
+	unsigned int start_streaming_called: 1;
+	unsigned int error: 1;
+	unsigned int waiting_for_buffers: 1;
+	unsigned int waiting_in_dqbuf: 1;
+	unsigned int is_multiplanar: 1;
+	unsigned int is_output: 1;
+	unsigned int copy_timestamp: 1;
+	unsigned int last_buffer_dequeued: 1;
+	struct vb2_fileio_data *fileio;
+	struct vb2_threadio_data *threadio;
+	char name[32];
+};
+
+struct uvc_video_queue {
+	struct vb2_queue queue;
+	unsigned int flags;
+	__u32 sequence;
+	unsigned int buf_used;
+	bool use_sg;
+	spinlock_t irqlock;
+	struct list_head irqqueue;
+};
+
+struct uvc_device;
+
+struct uvc_buffer;
+
+struct uvc_video {
+	struct uvc_device *uvc;
+	struct usb_ep *ep;
+	struct work_struct pump;
+	struct workqueue_struct *async_wq;
+	u8 bpp;
+	u32 fcc;
+	unsigned int width;
+	unsigned int height;
+	unsigned int imagesize;
+	struct mutex mutex;
+	unsigned int uvc_num_requests;
+	bool is_enabled;
+	unsigned int req_size;
+	struct list_head ureqs;
+	struct list_head req_free;
+	struct list_head req_ready;
+	spinlock_t req_lock;
+	unsigned int req_int_count;
+	void (*encode)(struct usb_request *, struct uvc_video *, struct uvc_buffer *);
+	__u32 payload_size;
+	__u32 max_payload_size;
+	struct uvc_video_queue queue;
+	unsigned int fid;
+};
+
+struct uvc_device {
+	struct video_device vdev;
+	struct v4l2_device v4l2_dev;
+	enum uvc_state state;
+	struct usb_function func;
+	struct uvc_video video;
+	bool func_connected;
+	wait_queue_head_t func_connected_queue;
+	struct uvcg_streaming_header *header;
+	struct {
+		const struct uvc_descriptor_header * const *fs_control;
+		const struct uvc_descriptor_header * const *ss_control;
+		const struct uvc_descriptor_header * const *fs_streaming;
+		const struct uvc_descriptor_header * const *hs_streaming;
+		const struct uvc_descriptor_header * const *ss_streaming;
+		struct list_head *extension_units;
+	} desc;
+	unsigned int control_intf;
+	struct usb_ep *interrupt_ep;
+	struct usb_request *control_req;
+	void *control_buf;
+	bool enable_interrupt_ep;
+	unsigned int streaming_intf;
+	unsigned int event_length;
+	unsigned int event_setup_out: 1;
+};
+
+struct media_entity_enum {
+	unsigned long *bmap;
+	int idx_max;
+};
+
+struct media_graph {
+	struct {
+		struct media_entity *entity;
+		struct list_head *link;
+	} stack[16];
+	struct media_entity_enum ent_enum;
+	int top;
+};
+
+struct media_devnode;
+
+struct media_device_ops;
+
+struct media_device {
+	struct device *dev;
+	struct media_devnode *devnode;
+	char model[32];
+	char driver_name[32];
+	char serial[40];
+	char bus_info[32];
+	u32 hw_revision;
+	u64 topology_version;
+	u32 id;
+	struct ida entity_internal_idx;
+	int entity_internal_idx_max;
+	struct list_head entities;
+	struct list_head interfaces;
+	struct list_head pads;
+	struct list_head links;
+	struct list_head entity_notify;
+	struct mutex graph_mutex;
+	struct media_graph pm_count_walk;
+	void *source_priv;
+	int (*enable_source)(struct media_entity *, struct media_pipeline *);
+	void (*disable_source)(struct media_entity *);
+	const struct media_device_ops *ops;
+	struct mutex req_queue_mutex;
+	atomic_t request_id;
+};
+
+struct media_file_operations;
+
+struct media_devnode {
+	struct media_device *media_dev;
+	const struct media_file_operations *fops;
+	struct device dev;
+	struct cdev cdev;
+	struct device *parent;
+	int minor;
+	unsigned long flags;
+	void (*release)(struct media_devnode *);
+};
+
+struct media_file_operations {
+	struct module *owner;
+	ssize_t (*read)(struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*write)(struct file *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	__poll_t (*poll)(struct file *, struct poll_table_struct *);
+	long (*ioctl)(struct file *, unsigned int, unsigned long);
+	long (*compat_ioctl)(struct file *, unsigned int, unsigned long);
+	int (*open)(struct file *);
+	int (*release)(struct file *);
+};
+
+struct media_link;
+
+struct media_request;
+
+struct media_device_ops {
+	int (*link_notify)(struct media_link *, u32, unsigned int);
+	struct media_request * (*req_alloc)(struct media_device *);
+	void (*req_free)(struct media_request *);
+	int (*req_validate)(struct media_request *);
+	void (*req_queue)(struct media_request *);
+};
+
+struct media_interface;
+
+struct media_link {
+	struct media_gobj graph_obj;
+	struct list_head list;
+	union {
+		struct media_gobj *gobj0;
+		struct media_pad *source;
+		struct media_interface *intf;
+	};
+	union {
+		struct media_gobj *gobj1;
+		struct media_pad *sink;
+		struct media_entity *entity;
+	};
+	struct media_link *reverse;
+	unsigned long flags;
+	bool is_backlink;
+};
+
+struct media_pad {
+	struct media_gobj graph_obj;
+	struct media_entity *entity;
+	u16 index;
+	u16 num_links;
+	enum media_pad_signal_type sig_type;
+	unsigned long flags;
+	struct media_pipeline *pipe;
+};
+
+struct media_interface {
+	struct media_gobj graph_obj;
+	struct list_head links;
+	u32 type;
+	u32 flags;
+};
+
+struct media_request {
+	struct media_device *mdev;
+	struct kref kref;
+	char debug_str[27];
+	enum media_request_state state;
+	unsigned int updating_count;
+	unsigned int access_count;
+	struct list_head objects;
+	unsigned int num_incomplete_objects;
+	wait_queue_head_t poll_wait;
+	spinlock_t lock;
+};
+
+struct media_entity_operations {
+	int (*get_fwnode_pad)(struct media_entity *, struct fwnode_endpoint *);
+	int (*link_setup)(struct media_entity *, const struct media_pad *, const struct media_pad *, u32);
+	int (*link_validate)(struct media_link *);
+	bool (*has_pad_interdep)(struct media_entity *, unsigned int, unsigned int);
+};
+
+struct media_intf_devnode {
+	struct media_interface intf;
+	u32 major;
+	u32 minor;
+};
+
+struct v4l2_file_operations {
+	struct module *owner;
+	ssize_t (*read)(struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*write)(struct file *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	__poll_t (*poll)(struct file *, struct poll_table_struct *);
+	long (*unlocked_ioctl)(struct file *, unsigned int, unsigned long);
+	long (*compat_ioctl32)(struct file *, unsigned int, unsigned long);
+	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+	int (*mmap)(struct file *, struct vm_area_struct *);
+	int (*open)(struct file *);
+	int (*release)(struct file *);
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_subdev_ops;
+
+struct v4l2_subdev_internal_ops;
+
+struct v4l2_async_notifier;
+
+struct v4l2_subdev_platform_data;
+
+struct v4l2_subdev_state;
+
+struct v4l2_subdev {
+	struct media_entity entity;
+	struct list_head list;
+	struct module *owner;
+	bool owner_v4l2_dev;
+	u32 flags;
+	struct v4l2_device *v4l2_dev;
+	const struct v4l2_subdev_ops *ops;
+	const struct v4l2_subdev_internal_ops *internal_ops;
+	struct v4l2_ctrl_handler *ctrl_handler;
+	char name[32];
+	u32 grp_id;
+	void *dev_priv;
+	void *host_priv;
+	struct video_device *devnode;
+	struct device *dev;
+	struct fwnode_handle *fwnode;
+	struct list_head async_list;
+	struct list_head async_subdev_endpoint_list;
+	struct v4l2_async_notifier *subdev_notifier;
+	struct list_head asc_list;
+	struct v4l2_subdev_platform_data *pdata;
+	struct mutex *state_lock;
+	struct led_classdev *privacy_led;
+	struct v4l2_subdev_state *active_state;
+	u64 enabled_streams;
+};
+
+struct v4l2_subdev_core_ops;
+
+struct v4l2_subdev_tuner_ops;
+
+struct v4l2_subdev_audio_ops;
+
+struct v4l2_subdev_video_ops;
+
+struct v4l2_subdev_vbi_ops;
+
+struct v4l2_subdev_ir_ops;
+
+struct v4l2_subdev_sensor_ops;
+
+struct v4l2_subdev_pad_ops;
+
+struct v4l2_subdev_ops {
+	const struct v4l2_subdev_core_ops *core;
+	const struct v4l2_subdev_tuner_ops *tuner;
+	const struct v4l2_subdev_audio_ops *audio;
+	const struct v4l2_subdev_video_ops *video;
+	const struct v4l2_subdev_vbi_ops *vbi;
+	const struct v4l2_subdev_ir_ops *ir;
+	const struct v4l2_subdev_sensor_ops *sensor;
+	const struct v4l2_subdev_pad_ops *pad;
+};
+
+struct v4l2_subdev_io_pin_config;
+
+struct v4l2_fh;
+
+struct v4l2_event_subscription;
+
+struct v4l2_subdev_core_ops {
+	int (*log_status)(struct v4l2_subdev *);
+	int (*s_io_pin_config)(struct v4l2_subdev *, size_t, struct v4l2_subdev_io_pin_config *);
+	int (*init)(struct v4l2_subdev *, u32);
+	int (*load_fw)(struct v4l2_subdev *);
+	int (*reset)(struct v4l2_subdev *, u32);
+	int (*s_gpio)(struct v4l2_subdev *, u32);
+	long (*command)(struct v4l2_subdev *, unsigned int, void *);
+	long (*ioctl)(struct v4l2_subdev *, unsigned int, void *);
+	long (*compat_ioctl32)(struct v4l2_subdev *, unsigned int, unsigned long);
+	int (*s_power)(struct v4l2_subdev *, int);
+	int (*interrupt_service_routine)(struct v4l2_subdev *, u32, bool *);
+	int (*subscribe_event)(struct v4l2_subdev *, struct v4l2_fh *, struct v4l2_event_subscription *);
+	int (*unsubscribe_event)(struct v4l2_subdev *, struct v4l2_fh *, struct v4l2_event_subscription *);
+};
+
+struct v4l2_subdev_io_pin_config {
+	u32 flags;
+	u8 pin;
+	u8 function;
+	u8 value;
+	u8 strength;
+};
+
+struct v4l2_m2m_ctx;
+
+struct v4l2_fh {
+	struct list_head list;
+	struct video_device *vdev;
+	struct v4l2_ctrl_handler *ctrl_handler;
+	enum v4l2_priority prio;
+	wait_queue_head_t wait;
+	struct mutex subscribe_lock;
+	struct list_head subscribed;
+	struct list_head available;
+	unsigned int navailable;
+	u32 sequence;
+	struct v4l2_m2m_ctx *m2m_ctx;
+};
+
+struct v4l2_event_subscription {
+	__u32 type;
+	__u32 id;
+	__u32 flags;
+	__u32 reserved[5];
+};
+
+struct tuner_setup;
+
+struct v4l2_frequency;
+
+struct v4l2_frequency_band;
+
+struct v4l2_tuner;
+
+struct v4l2_modulator;
+
+struct v4l2_priv_tun_config;
+
+struct v4l2_subdev_tuner_ops {
+	int (*standby)(struct v4l2_subdev *);
+	int (*s_radio)(struct v4l2_subdev *);
+	int (*s_frequency)(struct v4l2_subdev *, const struct v4l2_frequency *);
+	int (*g_frequency)(struct v4l2_subdev *, struct v4l2_frequency *);
+	int (*enum_freq_bands)(struct v4l2_subdev *, struct v4l2_frequency_band *);
+	int (*g_tuner)(struct v4l2_subdev *, struct v4l2_tuner *);
+	int (*s_tuner)(struct v4l2_subdev *, const struct v4l2_tuner *);
+	int (*g_modulator)(struct v4l2_subdev *, struct v4l2_modulator *);
+	int (*s_modulator)(struct v4l2_subdev *, const struct v4l2_modulator *);
+	int (*s_type_addr)(struct v4l2_subdev *, struct tuner_setup *);
+	int (*s_config)(struct v4l2_subdev *, const struct v4l2_priv_tun_config *);
+};
+
+struct v4l2_frequency {
+	__u32 tuner;
+	__u32 type;
+	__u32 frequency;
+	__u32 reserved[8];
+};
+
+struct v4l2_frequency_band {
+	__u32 tuner;
+	__u32 type;
+	__u32 index;
+	__u32 capability;
+	__u32 rangelow;
+	__u32 rangehigh;
+	__u32 modulation;
+	__u32 reserved[9];
+};
+
+struct v4l2_tuner {
+	__u32 index;
+	__u8 name[32];
+	__u32 type;
+	__u32 capability;
+	__u32 rangelow;
+	__u32 rangehigh;
+	__u32 rxsubchans;
+	__u32 audmode;
+	__s32 signal;
+	__s32 afc;
+	__u32 reserved[4];
+};
+
+struct v4l2_modulator {
+	__u32 index;
+	__u8 name[32];
+	__u32 capability;
+	__u32 rangelow;
+	__u32 rangehigh;
+	__u32 txsubchans;
+	__u32 type;
+	__u32 reserved[3];
+};
+
+struct v4l2_priv_tun_config {
+	int tuner;
+	void *priv;
+};
+
+struct v4l2_subdev_audio_ops {
+	int (*s_clock_freq)(struct v4l2_subdev *, u32);
+	int (*s_i2s_clock_freq)(struct v4l2_subdev *, u32);
+	int (*s_routing)(struct v4l2_subdev *, u32, u32, u32);
+	int (*s_stream)(struct v4l2_subdev *, int);
+};
+
+struct v4l2_fract;
+
+struct v4l2_subdev_frame_interval;
+
+struct v4l2_dv_timings;
+
+struct v4l2_subdev_video_ops {
+	int (*s_routing)(struct v4l2_subdev *, u32, u32, u32);
+	int (*s_crystal_freq)(struct v4l2_subdev *, u32, u32);
+	int (*g_std)(struct v4l2_subdev *, v4l2_std_id *);
+	int (*s_std)(struct v4l2_subdev *, v4l2_std_id);
+	int (*s_std_output)(struct v4l2_subdev *, v4l2_std_id);
+	int (*g_std_output)(struct v4l2_subdev *, v4l2_std_id *);
+	int (*querystd)(struct v4l2_subdev *, v4l2_std_id *);
+	int (*g_tvnorms)(struct v4l2_subdev *, v4l2_std_id *);
+	int (*g_tvnorms_output)(struct v4l2_subdev *, v4l2_std_id *);
+	int (*g_input_status)(struct v4l2_subdev *, u32 *);
+	int (*s_stream)(struct v4l2_subdev *, int);
+	int (*g_pixelaspect)(struct v4l2_subdev *, struct v4l2_fract *);
+	int (*g_frame_interval)(struct v4l2_subdev *, struct v4l2_subdev_frame_interval *);
+	int (*s_frame_interval)(struct v4l2_subdev *, struct v4l2_subdev_frame_interval *);
+	int (*s_dv_timings)(struct v4l2_subdev *, struct v4l2_dv_timings *);
+	int (*g_dv_timings)(struct v4l2_subdev *, struct v4l2_dv_timings *);
+	int (*query_dv_timings)(struct v4l2_subdev *, struct v4l2_dv_timings *);
+	int (*s_rx_buffer)(struct v4l2_subdev *, void *, unsigned int *);
+	int (*pre_streamon)(struct v4l2_subdev *, u32);
+	int (*post_streamoff)(struct v4l2_subdev *);
+};
+
+struct v4l2_fract {
+	__u32 numerator;
+	__u32 denominator;
+};
+
+struct v4l2_subdev_frame_interval {
+	__u32 pad;
+	struct v4l2_fract interval;
+	__u32 stream;
+	__u32 reserved[8];
+};
+
+struct v4l2_bt_timings {
+	__u32 width;
+	__u32 height;
+	__u32 interlaced;
+	__u32 polarities;
+	__u64 pixelclock;
+	__u32 hfrontporch;
+	__u32 hsync;
+	__u32 hbackporch;
+	__u32 vfrontporch;
+	__u32 vsync;
+	__u32 vbackporch;
+	__u32 il_vfrontporch;
+	__u32 il_vsync;
+	__u32 il_vbackporch;
+	__u32 standards;
+	__u32 flags;
+	struct v4l2_fract picture_aspect;
+	__u8 cea861_vic;
+	__u8 hdmi_vic;
+	__u8 reserved[46];
+} __attribute__((packed));
+
+struct v4l2_dv_timings {
+	__u32 type;
+	union {
+		struct v4l2_bt_timings bt;
+		__u32 reserved[32];
+	};
+};
+
+struct v4l2_decode_vbi_line;
+
+struct v4l2_sliced_vbi_data;
+
+struct v4l2_sliced_vbi_cap;
+
+struct v4l2_vbi_format;
+
+struct v4l2_sliced_vbi_format;
+
+struct v4l2_subdev_vbi_ops {
+	int (*decode_vbi_line)(struct v4l2_subdev *, struct v4l2_decode_vbi_line *);
+	int (*s_vbi_data)(struct v4l2_subdev *, const struct v4l2_sliced_vbi_data *);
+	int (*g_vbi_data)(struct v4l2_subdev *, struct v4l2_sliced_vbi_data *);
+	int (*g_sliced_vbi_cap)(struct v4l2_subdev *, struct v4l2_sliced_vbi_cap *);
+	int (*s_raw_fmt)(struct v4l2_subdev *, struct v4l2_vbi_format *);
+	int (*g_sliced_fmt)(struct v4l2_subdev *, struct v4l2_sliced_vbi_format *);
+	int (*s_sliced_fmt)(struct v4l2_subdev *, struct v4l2_sliced_vbi_format *);
+};
+
+struct v4l2_decode_vbi_line {
+	u32 is_second_field;
+	u8 *p;
+	u32 line;
+	u32 type;
+};
+
+struct v4l2_sliced_vbi_data {
+	__u32 id;
+	__u32 field;
+	__u32 line;
+	__u32 reserved;
+	__u8 data[48];
+};
+
+struct v4l2_sliced_vbi_cap {
+	__u16 service_set;
+	__u16 service_lines[48];
+	__u32 type;
+	__u32 reserved[3];
+};
+
+struct v4l2_vbi_format {
+	__u32 sampling_rate;
+	__u32 offset;
+	__u32 samples_per_line;
+	__u32 sample_format;
+	__s32 start[2];
+	__u32 count[2];
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct v4l2_sliced_vbi_format {
+	__u16 service_set;
+	__u16 service_lines[48];
+	__u32 io_size;
+	__u32 reserved[2];
+};
+
+struct v4l2_subdev_ir_parameters;
+
+struct v4l2_subdev_ir_ops {
+	int (*rx_read)(struct v4l2_subdev *, u8 *, size_t, ssize_t *);
+	int (*rx_g_parameters)(struct v4l2_subdev *, struct v4l2_subdev_ir_parameters *);
+	int (*rx_s_parameters)(struct v4l2_subdev *, struct v4l2_subdev_ir_parameters *);
+	int (*tx_write)(struct v4l2_subdev *, u8 *, size_t, ssize_t *);
+	int (*tx_g_parameters)(struct v4l2_subdev *, struct v4l2_subdev_ir_parameters *);
+	int (*tx_s_parameters)(struct v4l2_subdev *, struct v4l2_subdev_ir_parameters *);
+};
+
+struct v4l2_subdev_ir_parameters {
+	unsigned int bytes_per_data_element;
+	enum v4l2_subdev_ir_mode mode;
+	bool enable;
+	bool interrupt_enable;
+	bool shutdown;
+	bool modulation;
+	u32 max_pulse_width;
+	unsigned int carrier_freq;
+	unsigned int duty_cycle;
+	bool invert_level;
+	bool invert_carrier_sense;
+	u32 noise_filter_min_width;
+	unsigned int carrier_range_lower;
+	unsigned int carrier_range_upper;
+	u32 resolution;
+};
+
+struct v4l2_subdev_sensor_ops {
+	int (*g_skip_top_lines)(struct v4l2_subdev *, u32 *);
+	int (*g_skip_frames)(struct v4l2_subdev *, u32 *);
+};
+
+struct v4l2_subdev_mbus_code_enum;
+
+struct v4l2_subdev_frame_size_enum;
+
+struct v4l2_subdev_frame_interval_enum;
+
+struct v4l2_subdev_format;
+
+struct v4l2_subdev_selection;
+
+struct v4l2_edid;
+
+struct v4l2_dv_timings_cap;
+
+struct v4l2_enum_dv_timings;
+
+struct v4l2_mbus_frame_desc;
+
+struct v4l2_mbus_config;
+
+struct v4l2_subdev_krouting;
+
+struct v4l2_subdev_pad_ops {
+	int (*init_cfg)(struct v4l2_subdev *, struct v4l2_subdev_state *);
+	int (*enum_mbus_code)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_mbus_code_enum *);
+	int (*enum_frame_size)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_frame_size_enum *);
+	int (*enum_frame_interval)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_frame_interval_enum *);
+	int (*get_fmt)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_format *);
+	int (*set_fmt)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_format *);
+	int (*get_selection)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_selection *);
+	int (*set_selection)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_selection *);
+	int (*get_edid)(struct v4l2_subdev *, struct v4l2_edid *);
+	int (*set_edid)(struct v4l2_subdev *, struct v4l2_edid *);
+	int (*dv_timings_cap)(struct v4l2_subdev *, struct v4l2_dv_timings_cap *);
+	int (*enum_dv_timings)(struct v4l2_subdev *, struct v4l2_enum_dv_timings *);
+	int (*link_validate)(struct v4l2_subdev *, struct media_link *, struct v4l2_subdev_format *, struct v4l2_subdev_format *);
+	int (*get_frame_desc)(struct v4l2_subdev *, unsigned int, struct v4l2_mbus_frame_desc *);
+	int (*set_frame_desc)(struct v4l2_subdev *, unsigned int, struct v4l2_mbus_frame_desc *);
+	int (*get_mbus_config)(struct v4l2_subdev *, unsigned int, struct v4l2_mbus_config *);
+	int (*set_routing)(struct v4l2_subdev *, struct v4l2_subdev_state *, enum v4l2_subdev_format_whence, struct v4l2_subdev_krouting *);
+	int (*enable_streams)(struct v4l2_subdev *, struct v4l2_subdev_state *, u32, u64);
+	int (*disable_streams)(struct v4l2_subdev *, struct v4l2_subdev_state *, u32, u64);
+};
+
+struct v4l2_subdev_route;
+
+struct v4l2_subdev_krouting {
+	unsigned int num_routes;
+	struct v4l2_subdev_route *routes;
+};
+
+struct v4l2_subdev_stream_config;
+
+struct v4l2_subdev_stream_configs {
+	u32 num_configs;
+	struct v4l2_subdev_stream_config *configs;
+};
+
+struct v4l2_subdev_pad_config;
+
+struct v4l2_subdev_state {
+	struct mutex _lock;
+	struct mutex *lock;
+	struct v4l2_subdev_pad_config *pads;
+	struct v4l2_subdev_krouting routing;
+	struct v4l2_subdev_stream_configs stream_configs;
+};
+
+struct v4l2_mbus_framefmt {
+	__u32 width;
+	__u32 height;
+	__u32 code;
+	__u32 field;
+	__u32 colorspace;
+	union {
+		__u16 ycbcr_enc;
+		__u16 hsv_enc;
+	};
+	__u16 quantization;
+	__u16 xfer_func;
+	__u16 flags;
+	__u16 reserved[10];
+};
+
+struct v4l2_rect {
+	__s32 left;
+	__s32 top;
+	__u32 width;
+	__u32 height;
+};
+
+struct v4l2_subdev_pad_config {
+	struct v4l2_mbus_framefmt try_fmt;
+	struct v4l2_rect try_crop;
+	struct v4l2_rect try_compose;
+};
+
+struct v4l2_subdev_route {
+	__u32 sink_pad;
+	__u32 sink_stream;
+	__u32 source_pad;
+	__u32 source_stream;
+	__u32 flags;
+	__u32 reserved[5];
+};
+
+struct v4l2_subdev_stream_config {
+	u32 pad;
+	u32 stream;
+	bool enabled;
+	struct v4l2_mbus_framefmt fmt;
+	struct v4l2_rect crop;
+	struct v4l2_rect compose;
+};
+
+struct v4l2_subdev_mbus_code_enum {
+	__u32 pad;
+	__u32 index;
+	__u32 code;
+	__u32 which;
+	__u32 flags;
+	__u32 stream;
+	__u32 reserved[6];
+};
+
+struct v4l2_subdev_frame_size_enum {
+	__u32 index;
+	__u32 pad;
+	__u32 code;
+	__u32 min_width;
+	__u32 max_width;
+	__u32 min_height;
+	__u32 max_height;
+	__u32 which;
+	__u32 stream;
+	__u32 reserved[7];
+};
+
+struct v4l2_subdev_frame_interval_enum {
+	__u32 index;
+	__u32 pad;
+	__u32 code;
+	__u32 width;
+	__u32 height;
+	struct v4l2_fract interval;
+	__u32 which;
+	__u32 stream;
+	__u32 reserved[7];
+};
+
+struct v4l2_subdev_format {
+	__u32 which;
+	__u32 pad;
+	struct v4l2_mbus_framefmt format;
+	__u32 stream;
+	__u32 reserved[7];
+};
+
+struct v4l2_subdev_selection {
+	__u32 which;
+	__u32 pad;
+	__u32 target;
+	__u32 flags;
+	struct v4l2_rect r;
+	__u32 stream;
+	__u32 reserved[7];
+};
+
+struct v4l2_edid {
+	__u32 pad;
+	__u32 start_block;
+	__u32 blocks;
+	__u32 reserved[5];
+	__u8 *edid;
+};
+
+struct v4l2_bt_timings_cap {
+	__u32 min_width;
+	__u32 max_width;
+	__u32 min_height;
+	__u32 max_height;
+	__u64 min_pixelclock;
+	__u64 max_pixelclock;
+	__u32 standards;
+	__u32 capabilities;
+	__u32 reserved[16];
+};
+
+struct v4l2_dv_timings_cap {
+	__u32 type;
+	__u32 pad;
+	__u32 reserved[2];
+	union {
+		struct v4l2_bt_timings_cap bt;
+		__u32 raw_data[32];
+	};
+};
+
+struct v4l2_enum_dv_timings {
+	__u32 index;
+	__u32 pad;
+	__u32 reserved[2];
+	struct v4l2_dv_timings timings;
+};
+
+struct v4l2_mbus_frame_desc_entry_csi2 {
+	u8 vc;
+	u8 dt;
+};
+
+struct v4l2_mbus_frame_desc_entry {
+	enum v4l2_mbus_frame_desc_flags flags;
+	u32 stream;
+	u32 pixelcode;
+	u32 length;
+	union {
+		struct v4l2_mbus_frame_desc_entry_csi2 csi2;
+	} bus;
+};
+
+struct v4l2_mbus_frame_desc {
+	enum v4l2_mbus_frame_desc_type type;
+	struct v4l2_mbus_frame_desc_entry entry[8];
+	unsigned short num_entries;
+};
+
+struct v4l2_mbus_config_parallel {
+	unsigned int flags;
+	unsigned char bus_width;
+	unsigned char data_shift;
+};
+
+struct v4l2_mbus_config_mipi_csi1 {
+	unsigned char clock_inv: 1;
+	unsigned char strobe: 1;
+	bool lane_polarity[2];
+	unsigned char data_lane;
+	unsigned char clock_lane;
+};
+
+struct v4l2_mbus_config_mipi_csi2 {
+	unsigned int flags;
+	unsigned char data_lanes[8];
+	unsigned char clock_lane;
+	unsigned char num_data_lanes;
+	bool lane_polarities[9];
+};
+
+struct v4l2_mbus_config {
+	enum v4l2_mbus_type type;
+	union {
+		struct v4l2_mbus_config_parallel parallel;
+		struct v4l2_mbus_config_mipi_csi1 mipi_csi1;
+		struct v4l2_mbus_config_mipi_csi2 mipi_csi2;
+	} bus;
+};
+
+struct v4l2_subdev_fh;
+
+struct v4l2_subdev_internal_ops {
+	int (*registered)(struct v4l2_subdev *);
+	void (*unregistered)(struct v4l2_subdev *);
+	int (*open)(struct v4l2_subdev *, struct v4l2_subdev_fh *);
+	int (*close)(struct v4l2_subdev *, struct v4l2_subdev_fh *);
+	void (*release)(struct v4l2_subdev *);
+};
+
+struct v4l2_subdev_fh {
+	struct v4l2_fh vfh;
+	struct module *owner;
+	struct v4l2_subdev_state *state;
+	u64 client_caps;
+};
+
+struct v4l2_async_notifier_operations;
+
+struct v4l2_async_notifier {
+	const struct v4l2_async_notifier_operations *ops;
+	struct v4l2_device *v4l2_dev;
+	struct v4l2_subdev *sd;
+	struct v4l2_async_notifier *parent;
+	struct list_head waiting_list;
+	struct list_head done_list;
+	struct list_head notifier_entry;
+};
+
+struct v4l2_async_connection;
+
+struct v4l2_async_notifier_operations {
+	int (*bound)(struct v4l2_async_notifier *, struct v4l2_subdev *, struct v4l2_async_connection *);
+	int (*complete)(struct v4l2_async_notifier *);
+	void (*unbind)(struct v4l2_async_notifier *, struct v4l2_subdev *, struct v4l2_async_connection *);
+	void (*destroy)(struct v4l2_async_connection *);
+};
+
+struct v4l2_async_match_desc {
+	enum v4l2_async_match_type type;
+	union {
+		struct fwnode_handle *fwnode;
+		struct {
+			int adapter_id;
+			unsigned short address;
+		} i2c;
+	};
+};
+
+struct v4l2_async_connection {
+	struct v4l2_async_match_desc match;
+	struct v4l2_async_notifier *notifier;
+	struct list_head asc_entry;
+	struct list_head asc_subdev_entry;
+	struct v4l2_subdev *sd;
+};
+
+struct v4l2_subdev_platform_data {
+	struct regulator_bulk_data *regulators;
+	int num_regulators;
+	void *host_priv;
+};
+
+struct vb2_ops {
+	int (*queue_setup)(struct vb2_queue *, unsigned int *, unsigned int *, unsigned int *, struct device **);
+	void (*wait_prepare)(struct vb2_queue *);
+	void (*wait_finish)(struct vb2_queue *);
+	int (*buf_out_validate)(struct vb2_buffer *);
+	int (*buf_init)(struct vb2_buffer *);
+	int (*buf_prepare)(struct vb2_buffer *);
+	void (*buf_finish)(struct vb2_buffer *);
+	void (*buf_cleanup)(struct vb2_buffer *);
+	int (*prepare_streaming)(struct vb2_queue *);
+	int (*start_streaming)(struct vb2_queue *, unsigned int);
+	void (*stop_streaming)(struct vb2_queue *);
+	void (*unprepare_streaming)(struct vb2_queue *);
+	void (*buf_queue)(struct vb2_buffer *);
+	void (*buf_request_complete)(struct vb2_buffer *);
+};
+
+struct media_request_object_ops;
+
+struct media_request_object {
+	const struct media_request_object_ops *ops;
+	void *priv;
+	struct media_request *req;
+	struct list_head list;
+	struct kref kref;
+	bool completed;
+};
+
+struct vb2_plane {
+	void *mem_priv;
+	struct dma_buf *dbuf;
+	unsigned int dbuf_mapped;
+	unsigned int bytesused;
+	unsigned int length;
+	unsigned int min_length;
+	union {
+		unsigned int offset;
+		unsigned long userptr;
+		int fd;
+	} m;
+	unsigned int data_offset;
+};
+
+struct vb2_buffer {
+	struct vb2_queue *vb2_queue;
+	unsigned int index;
+	unsigned int type;
+	unsigned int memory;
+	unsigned int num_planes;
+	u64 timestamp;
+	struct media_request *request;
+	struct media_request_object req_obj;
+	enum vb2_buffer_state state;
+	unsigned int synced: 1;
+	unsigned int prepared: 1;
+	unsigned int copied_timestamp: 1;
+	unsigned int skip_cache_sync_on_prepare: 1;
+	unsigned int skip_cache_sync_on_finish: 1;
+	struct vb2_plane planes[8];
+	struct list_head queued_entry;
+	struct list_head done_entry;
+};
+
+struct media_request_object_ops {
+	int (*prepare)(struct media_request_object *);
+	void (*unprepare)(struct media_request_object *);
+	void (*queue)(struct media_request_object *);
+	void (*unbind)(struct media_request_object *);
+	void (*release)(struct media_request_object *);
+};
+
+struct vb2_mem_ops {
+	void * (*alloc)(struct vb2_buffer *, struct device *, unsigned long);
+	void (*put)(void *);
+	struct dma_buf * (*get_dmabuf)(struct vb2_buffer *, void *, unsigned long);
+	void * (*get_userptr)(struct vb2_buffer *, struct device *, unsigned long, unsigned long);
+	void (*put_userptr)(void *);
+	void (*prepare)(void *);
+	void (*finish)(void *);
+	void * (*attach_dmabuf)(struct vb2_buffer *, struct device *, struct dma_buf *, unsigned long);
+	void (*detach_dmabuf)(void *);
+	int (*map_dmabuf)(void *);
+	void (*unmap_dmabuf)(void *);
+	void * (*vaddr)(struct vb2_buffer *, void *);
+	void * (*cookie)(struct vb2_buffer *, void *);
+	unsigned int (*num_users)(void *);
+	int (*mmap)(void *, struct vm_area_struct *);
+};
+
+struct vb2_buf_ops {
+	int (*verify_planes_array)(struct vb2_buffer *, const void *);
+	void (*init_buffer)(struct vb2_buffer *);
+	void (*fill_user_buffer)(struct vb2_buffer *, void *);
+	int (*fill_vb2_buffer)(struct vb2_buffer *, struct vb2_plane *);
+	void (*copy_timestamp)(struct vb2_buffer *, const void *);
+};
+
+enum v4l2_buf_type {
+	V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
+	V4L2_BUF_TYPE_VIDEO_OUTPUT = 2,
+	V4L2_BUF_TYPE_VIDEO_OVERLAY = 3,
+	V4L2_BUF_TYPE_VBI_CAPTURE = 4,
+	V4L2_BUF_TYPE_VBI_OUTPUT = 5,
+	V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6,
+	V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7,
+	V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
+	V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
+	V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
+	V4L2_BUF_TYPE_SDR_CAPTURE = 11,
+	V4L2_BUF_TYPE_SDR_OUTPUT = 12,
+	V4L2_BUF_TYPE_META_CAPTURE = 13,
+	V4L2_BUF_TYPE_META_OUTPUT = 14,
+	V4L2_BUF_TYPE_PRIVATE = 128,
+};
+
+struct v4l2_capability;
+
+struct v4l2_fmtdesc;
+
+struct v4l2_format;
+
+struct v4l2_requestbuffers;
+
+struct v4l2_buffer;
+
+struct v4l2_exportbuffer;
+
+struct v4l2_create_buffers;
+
+struct v4l2_framebuffer;
+
+struct v4l2_input;
+
+struct v4l2_output;
+
+struct v4l2_queryctrl;
+
+struct v4l2_query_ext_ctrl;
+
+struct v4l2_control;
+
+struct v4l2_ext_controls;
+
+struct v4l2_querymenu;
+
+struct v4l2_audio;
+
+struct v4l2_audioout;
+
+struct v4l2_selection;
+
+struct v4l2_jpegcompression;
+
+struct v4l2_enc_idx;
+
+struct v4l2_encoder_cmd;
+
+struct v4l2_decoder_cmd;
+
+struct v4l2_streamparm;
+
+struct v4l2_hw_freq_seek;
+
+struct v4l2_frmsizeenum;
+
+struct v4l2_frmivalenum;
+
+struct v4l2_ioctl_ops {
+	int (*vidioc_querycap)(struct file *, void *, struct v4l2_capability *);
+	int (*vidioc_enum_fmt_vid_cap)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_vid_overlay)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_vid_out)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_sdr_cap)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_sdr_out)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_meta_cap)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_meta_out)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_g_fmt_vid_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vid_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vid_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vid_out_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_sliced_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_sliced_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vid_cap_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vid_out_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_sdr_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_sdr_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_meta_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_meta_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_out_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_sliced_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_sliced_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_cap_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_out_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_sdr_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_sdr_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_meta_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_meta_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_out_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_sliced_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_sliced_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_cap_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_out_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_sdr_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_sdr_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_meta_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_meta_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_reqbufs)(struct file *, void *, struct v4l2_requestbuffers *);
+	int (*vidioc_querybuf)(struct file *, void *, struct v4l2_buffer *);
+	int (*vidioc_qbuf)(struct file *, void *, struct v4l2_buffer *);
+	int (*vidioc_expbuf)(struct file *, void *, struct v4l2_exportbuffer *);
+	int (*vidioc_dqbuf)(struct file *, void *, struct v4l2_buffer *);
+	int (*vidioc_create_bufs)(struct file *, void *, struct v4l2_create_buffers *);
+	int (*vidioc_prepare_buf)(struct file *, void *, struct v4l2_buffer *);
+	int (*vidioc_overlay)(struct file *, void *, unsigned int);
+	int (*vidioc_g_fbuf)(struct file *, void *, struct v4l2_framebuffer *);
+	int (*vidioc_s_fbuf)(struct file *, void *, const struct v4l2_framebuffer *);
+	int (*vidioc_streamon)(struct file *, void *, enum v4l2_buf_type);
+	int (*vidioc_streamoff)(struct file *, void *, enum v4l2_buf_type);
+	int (*vidioc_g_std)(struct file *, void *, v4l2_std_id *);
+	int (*vidioc_s_std)(struct file *, void *, v4l2_std_id);
+	int (*vidioc_querystd)(struct file *, void *, v4l2_std_id *);
+	int (*vidioc_enum_input)(struct file *, void *, struct v4l2_input *);
+	int (*vidioc_g_input)(struct file *, void *, unsigned int *);
+	int (*vidioc_s_input)(struct file *, void *, unsigned int);
+	int (*vidioc_enum_output)(struct file *, void *, struct v4l2_output *);
+	int (*vidioc_g_output)(struct file *, void *, unsigned int *);
+	int (*vidioc_s_output)(struct file *, void *, unsigned int);
+	int (*vidioc_queryctrl)(struct file *, void *, struct v4l2_queryctrl *);
+	int (*vidioc_query_ext_ctrl)(struct file *, void *, struct v4l2_query_ext_ctrl *);
+	int (*vidioc_g_ctrl)(struct file *, void *, struct v4l2_control *);
+	int (*vidioc_s_ctrl)(struct file *, void *, struct v4l2_control *);
+	int (*vidioc_g_ext_ctrls)(struct file *, void *, struct v4l2_ext_controls *);
+	int (*vidioc_s_ext_ctrls)(struct file *, void *, struct v4l2_ext_controls *);
+	int (*vidioc_try_ext_ctrls)(struct file *, void *, struct v4l2_ext_controls *);
+	int (*vidioc_querymenu)(struct file *, void *, struct v4l2_querymenu *);
+	int (*vidioc_enumaudio)(struct file *, void *, struct v4l2_audio *);
+	int (*vidioc_g_audio)(struct file *, void *, struct v4l2_audio *);
+	int (*vidioc_s_audio)(struct file *, void *, const struct v4l2_audio *);
+	int (*vidioc_enumaudout)(struct file *, void *, struct v4l2_audioout *);
+	int (*vidioc_g_audout)(struct file *, void *, struct v4l2_audioout *);
+	int (*vidioc_s_audout)(struct file *, void *, const struct v4l2_audioout *);
+	int (*vidioc_g_modulator)(struct file *, void *, struct v4l2_modulator *);
+	int (*vidioc_s_modulator)(struct file *, void *, const struct v4l2_modulator *);
+	int (*vidioc_g_pixelaspect)(struct file *, void *, int, struct v4l2_fract *);
+	int (*vidioc_g_selection)(struct file *, void *, struct v4l2_selection *);
+	int (*vidioc_s_selection)(struct file *, void *, struct v4l2_selection *);
+	int (*vidioc_g_jpegcomp)(struct file *, void *, struct v4l2_jpegcompression *);
+	int (*vidioc_s_jpegcomp)(struct file *, void *, const struct v4l2_jpegcompression *);
+	int (*vidioc_g_enc_index)(struct file *, void *, struct v4l2_enc_idx *);
+	int (*vidioc_encoder_cmd)(struct file *, void *, struct v4l2_encoder_cmd *);
+	int (*vidioc_try_encoder_cmd)(struct file *, void *, struct v4l2_encoder_cmd *);
+	int (*vidioc_decoder_cmd)(struct file *, void *, struct v4l2_decoder_cmd *);
+	int (*vidioc_try_decoder_cmd)(struct file *, void *, struct v4l2_decoder_cmd *);
+	int (*vidioc_g_parm)(struct file *, void *, struct v4l2_streamparm *);
+	int (*vidioc_s_parm)(struct file *, void *, struct v4l2_streamparm *);
+	int (*vidioc_g_tuner)(struct file *, void *, struct v4l2_tuner *);
+	int (*vidioc_s_tuner)(struct file *, void *, const struct v4l2_tuner *);
+	int (*vidioc_g_frequency)(struct file *, void *, struct v4l2_frequency *);
+	int (*vidioc_s_frequency)(struct file *, void *, const struct v4l2_frequency *);
+	int (*vidioc_enum_freq_bands)(struct file *, void *, struct v4l2_frequency_band *);
+	int (*vidioc_g_sliced_vbi_cap)(struct file *, void *, struct v4l2_sliced_vbi_cap *);
+	int (*vidioc_log_status)(struct file *, void *);
+	int (*vidioc_s_hw_freq_seek)(struct file *, void *, const struct v4l2_hw_freq_seek *);
+	int (*vidioc_enum_framesizes)(struct file *, void *, struct v4l2_frmsizeenum *);
+	int (*vidioc_enum_frameintervals)(struct file *, void *, struct v4l2_frmivalenum *);
+	int (*vidioc_s_dv_timings)(struct file *, void *, struct v4l2_dv_timings *);
+	int (*vidioc_g_dv_timings)(struct file *, void *, struct v4l2_dv_timings *);
+	int (*vidioc_query_dv_timings)(struct file *, void *, struct v4l2_dv_timings *);
+	int (*vidioc_enum_dv_timings)(struct file *, void *, struct v4l2_enum_dv_timings *);
+	int (*vidioc_dv_timings_cap)(struct file *, void *, struct v4l2_dv_timings_cap *);
+	int (*vidioc_g_edid)(struct file *, void *, struct v4l2_edid *);
+	int (*vidioc_s_edid)(struct file *, void *, struct v4l2_edid *);
+	int (*vidioc_subscribe_event)(struct v4l2_fh *, const struct v4l2_event_subscription *);
+	int (*vidioc_unsubscribe_event)(struct v4l2_fh *, const struct v4l2_event_subscription *);
+	long (*vidioc_default)(struct file *, void *, bool, unsigned int, void *);
+};
+
+struct v4l2_timecode {
+	__u32 type;
+	__u32 flags;
+	__u8 frames;
+	__u8 seconds;
+	__u8 minutes;
+	__u8 hours;
+	__u8 userbits[4];
+};
+
+struct vb2_v4l2_buffer {
+	struct vb2_buffer vb2_buf;
+	__u32 flags;
+	__u32 field;
+	struct v4l2_timecode timecode;
+	__u32 sequence;
+	__s32 request_fd;
+	bool is_held;
+	struct vb2_plane planes[8];
+	u64 android_kabi_reserved1;
+};
+
+struct uvc_buffer {
+	struct vb2_v4l2_buffer buf;
+	struct list_head queue;
+	enum uvc_buffer_state state;
+	void *mem;
+	struct sg_table *sgt;
+	struct scatterlist *sg;
+	unsigned int offset;
+	unsigned int length;
+	unsigned int bytesused;
+};
+
+struct v4l2_event_vsync {
+	__u8 field;
+};
+
+struct v4l2_event_ctrl {
+	__u32 changes;
+	__u32 type;
+	union {
+		__s32 value;
+		__s64 value64;
+	};
+	__u32 flags;
+	__s32 minimum;
+	__s32 maximum;
+	__s32 step;
+	__s32 default_value;
+};
+
+struct v4l2_event_frame_sync {
+	__u32 frame_sequence;
+};
+
+struct v4l2_event_src_change {
+	__u32 changes;
+};
+
+struct v4l2_event_motion_det {
+	__u32 flags;
+	__u32 frame_sequence;
+	__u32 region_mask;
+};
+
+struct v4l2_event {
+	__u32 type;
+	union {
+		struct v4l2_event_vsync vsync;
+		struct v4l2_event_ctrl ctrl;
+		struct v4l2_event_frame_sync frame_sync;
+		struct v4l2_event_src_change src_change;
+		struct v4l2_event_motion_det motion_det;
+		__u8 data[64];
+	} u;
+	__u32 pending;
+	__u32 sequence;
+	struct __kernel_timespec timestamp;
+	__u32 id;
+	__u32 reserved[8];
+};
+
+struct uvc_request_data {
+	__s32 length;
+	__u8 data[60];
+};
+
+struct uvc_event {
+	union {
+		enum usb_device_speed speed;
+		struct usb_ctrlrequest req;
+		struct uvc_request_data data;
+	};
+};
+
+struct uvc_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdUVC;
+	__le16 wTotalLength;
+	__le32 dwClockFrequency;
+	__u8 bInCollection;
+	__u8 baInterfaceNr[0];
+} __attribute__((packed));
+
+enum vb2_io_modes {
+	VB2_MMAP = 1,
+	VB2_USERPTR = 2,
+	VB2_READ = 4,
+	VB2_WRITE = 8,
+	VB2_DMABUF = 16,
+};
+
+enum v4l2_field {
+	V4L2_FIELD_ANY = 0,
+	V4L2_FIELD_NONE = 1,
+	V4L2_FIELD_TOP = 2,
+	V4L2_FIELD_BOTTOM = 3,
+	V4L2_FIELD_INTERLACED = 4,
+	V4L2_FIELD_SEQ_TB = 5,
+	V4L2_FIELD_SEQ_BT = 6,
+	V4L2_FIELD_ALTERNATE = 7,
+	V4L2_FIELD_INTERLACED_TB = 8,
+	V4L2_FIELD_INTERLACED_BT = 9,
+};
+
+struct v4l2_requestbuffers {
+	__u32 count;
+	__u32 type;
+	__u32 memory;
+	__u32 capabilities;
+	__u8 flags;
+	__u8 reserved[3];
+};
+
+struct __kernel_v4l2_timeval {
+	long long tv_sec;
+	long long tv_usec;
+};
+
+struct v4l2_plane;
+
+struct v4l2_buffer {
+	__u32 index;
+	__u32 type;
+	__u32 bytesused;
+	__u32 flags;
+	__u32 field;
+	struct __kernel_v4l2_timeval timestamp;
+	struct v4l2_timecode timecode;
+	__u32 sequence;
+	__u32 memory;
+	union {
+		__u32 offset;
+		unsigned long userptr;
+		struct v4l2_plane *planes;
+		__s32 fd;
+	} m;
+	__u32 length;
+	__u32 reserved2;
+	union {
+		__s32 request_fd;
+		__u32 reserved;
+	};
+};
+
+struct v4l2_plane {
+	__u32 bytesused;
+	__u32 length;
+	union {
+		__u32 mem_offset;
+		unsigned long userptr;
+		__s32 fd;
+	} m;
+	__u32 data_offset;
+	__u32 reserved[11];
+};
+
+struct v4l2_capability {
+	__u8 driver[16];
+	__u8 card[32];
+	__u8 bus_info[32];
+	__u32 version;
+	__u32 capabilities;
+	__u32 device_caps;
+	__u32 reserved[3];
+};
+
+struct v4l2_fmtdesc {
+	__u32 index;
+	__u32 type;
+	__u32 flags;
+	__u8 description[32];
+	__u32 pixelformat;
+	__u32 mbus_code;
+	__u32 reserved[3];
+};
+
+struct v4l2_pix_format {
+	__u32 width;
+	__u32 height;
+	__u32 pixelformat;
+	__u32 field;
+	__u32 bytesperline;
+	__u32 sizeimage;
+	__u32 colorspace;
+	__u32 priv;
+	__u32 flags;
+	union {
+		__u32 ycbcr_enc;
+		__u32 hsv_enc;
+	};
+	__u32 quantization;
+	__u32 xfer_func;
+};
+
+struct v4l2_plane_pix_format {
+	__u32 sizeimage;
+	__u32 bytesperline;
+	__u16 reserved[6];
+};
+
+struct v4l2_pix_format_mplane {
+	__u32 width;
+	__u32 height;
+	__u32 pixelformat;
+	__u32 field;
+	__u32 colorspace;
+	struct v4l2_plane_pix_format plane_fmt[8];
+	__u8 num_planes;
+	__u8 flags;
+	union {
+		__u8 ycbcr_enc;
+		__u8 hsv_enc;
+	};
+	__u8 quantization;
+	__u8 xfer_func;
+	__u8 reserved[7];
+};
+
+struct v4l2_clip;
+
+struct v4l2_window {
+	struct v4l2_rect w;
+	__u32 field;
+	__u32 chromakey;
+	struct v4l2_clip *clips;
+	__u32 clipcount;
+	void __attribute__((btf_type_tag("user"))) *bitmap;
+	__u8 global_alpha;
+};
+
+struct v4l2_sdr_format {
+	__u32 pixelformat;
+	__u32 buffersize;
+	__u8 reserved[24];
+};
+
+struct v4l2_meta_format {
+	__u32 dataformat;
+	__u32 buffersize;
+};
+
+struct v4l2_format {
+	__u32 type;
+	union {
+		struct v4l2_pix_format pix;
+		struct v4l2_pix_format_mplane pix_mp;
+		struct v4l2_window win;
+		struct v4l2_vbi_format vbi;
+		struct v4l2_sliced_vbi_format sliced;
+		struct v4l2_sdr_format sdr;
+		struct v4l2_meta_format meta;
+		__u8 raw_data[200];
+	} fmt;
+};
+
+struct v4l2_clip {
+	struct v4l2_rect c;
+	struct v4l2_clip __attribute__((btf_type_tag("user"))) *next;
+};
+
+struct v4l2_exportbuffer {
+	__u32 type;
+	__u32 index;
+	__u32 plane;
+	__u32 flags;
+	__s32 fd;
+	__u32 reserved[11];
+};
+
+struct v4l2_create_buffers {
+	__u32 index;
+	__u32 count;
+	__u32 memory;
+	struct v4l2_format format;
+	__u32 capabilities;
+	__u32 flags;
+	__u32 reserved[6];
+};
+
+struct v4l2_framebuffer {
+	__u32 capability;
+	__u32 flags;
+	void *base;
+	struct {
+		__u32 width;
+		__u32 height;
+		__u32 pixelformat;
+		__u32 field;
+		__u32 bytesperline;
+		__u32 sizeimage;
+		__u32 colorspace;
+		__u32 priv;
+	} fmt;
+};
+
+struct v4l2_input {
+	__u32 index;
+	__u8 name[32];
+	__u32 type;
+	__u32 audioset;
+	__u32 tuner;
+	v4l2_std_id std;
+	__u32 status;
+	__u32 capabilities;
+	__u32 reserved[3];
+};
+
+struct v4l2_output {
+	__u32 index;
+	__u8 name[32];
+	__u32 type;
+	__u32 audioset;
+	__u32 modulator;
+	v4l2_std_id std;
+	__u32 capabilities;
+	__u32 reserved[3];
+};
+
+struct v4l2_queryctrl {
+	__u32 id;
+	__u32 type;
+	__u8 name[32];
+	__s32 minimum;
+	__s32 maximum;
+	__s32 step;
+	__s32 default_value;
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct v4l2_query_ext_ctrl {
+	__u32 id;
+	__u32 type;
+	char name[32];
+	__s64 minimum;
+	__s64 maximum;
+	__u64 step;
+	__s64 default_value;
+	__u32 flags;
+	__u32 elem_size;
+	__u32 elems;
+	__u32 nr_of_dims;
+	__u32 dims[4];
+	__u32 reserved[32];
+};
+
+struct v4l2_control {
+	__u32 id;
+	__s32 value;
+};
+
+struct v4l2_ext_control;
+
+struct v4l2_ext_controls {
+	union {
+		__u32 which;
+	};
+	__u32 count;
+	__u32 error_idx;
+	__s32 request_fd;
+	__u32 reserved[1];
+	struct v4l2_ext_control *controls;
+};
+
+struct v4l2_area;
+
+struct v4l2_ctrl_h264_sps;
+
+struct v4l2_ctrl_h264_pps;
+
+struct v4l2_ctrl_h264_scaling_matrix;
+
+struct v4l2_ctrl_h264_pred_weights;
+
+struct v4l2_ctrl_h264_slice_params;
+
+struct v4l2_ctrl_h264_decode_params;
+
+struct v4l2_ctrl_fwht_params;
+
+struct v4l2_ctrl_vp8_frame;
+
+struct v4l2_ctrl_mpeg2_sequence;
+
+struct v4l2_ctrl_mpeg2_picture;
+
+struct v4l2_ctrl_mpeg2_quantisation;
+
+struct v4l2_ctrl_vp9_compressed_hdr;
+
+struct v4l2_ctrl_vp9_frame;
+
+struct v4l2_ctrl_hevc_sps;
+
+struct v4l2_ctrl_hevc_pps;
+
+struct v4l2_ctrl_hevc_slice_params;
+
+struct v4l2_ctrl_hevc_scaling_matrix;
+
+struct v4l2_ctrl_hevc_decode_params;
+
+struct v4l2_ctrl_av1_sequence;
+
+struct v4l2_ctrl_av1_tile_group_entry;
+
+struct v4l2_ctrl_av1_frame;
+
+struct v4l2_ctrl_av1_film_grain;
+
+struct v4l2_ext_control {
+	__u32 id;
+	__u32 size;
+	__u32 reserved2[1];
+	union {
+		__s32 value;
+		__s64 value64;
+		char __attribute__((btf_type_tag("user"))) *string;
+		__u8 __attribute__((btf_type_tag("user"))) *p_u8;
+		__u16 __attribute__((btf_type_tag("user"))) *p_u16;
+		__u32 __attribute__((btf_type_tag("user"))) *p_u32;
+		__s32 __attribute__((btf_type_tag("user"))) *p_s32;
+		__s64 __attribute__((btf_type_tag("user"))) *p_s64;
+		struct v4l2_area __attribute__((btf_type_tag("user"))) *p_area;
+		struct v4l2_ctrl_h264_sps __attribute__((btf_type_tag("user"))) *p_h264_sps;
+		struct v4l2_ctrl_h264_pps *p_h264_pps;
+		struct v4l2_ctrl_h264_scaling_matrix __attribute__((btf_type_tag("user"))) *p_h264_scaling_matrix;
+		struct v4l2_ctrl_h264_pred_weights __attribute__((btf_type_tag("user"))) *p_h264_pred_weights;
+		struct v4l2_ctrl_h264_slice_params __attribute__((btf_type_tag("user"))) *p_h264_slice_params;
+		struct v4l2_ctrl_h264_decode_params __attribute__((btf_type_tag("user"))) *p_h264_decode_params;
+		struct v4l2_ctrl_fwht_params __attribute__((btf_type_tag("user"))) *p_fwht_params;
+		struct v4l2_ctrl_vp8_frame __attribute__((btf_type_tag("user"))) *p_vp8_frame;
+		struct v4l2_ctrl_mpeg2_sequence __attribute__((btf_type_tag("user"))) *p_mpeg2_sequence;
+		struct v4l2_ctrl_mpeg2_picture __attribute__((btf_type_tag("user"))) *p_mpeg2_picture;
+		struct v4l2_ctrl_mpeg2_quantisation __attribute__((btf_type_tag("user"))) *p_mpeg2_quantisation;
+		struct v4l2_ctrl_vp9_compressed_hdr __attribute__((btf_type_tag("user"))) *p_vp9_compressed_hdr_probs;
+		struct v4l2_ctrl_vp9_frame __attribute__((btf_type_tag("user"))) *p_vp9_frame;
+		struct v4l2_ctrl_hevc_sps __attribute__((btf_type_tag("user"))) *p_hevc_sps;
+		struct v4l2_ctrl_hevc_pps __attribute__((btf_type_tag("user"))) *p_hevc_pps;
+		struct v4l2_ctrl_hevc_slice_params __attribute__((btf_type_tag("user"))) *p_hevc_slice_params;
+		struct v4l2_ctrl_hevc_scaling_matrix __attribute__((btf_type_tag("user"))) *p_hevc_scaling_matrix;
+		struct v4l2_ctrl_hevc_decode_params __attribute__((btf_type_tag("user"))) *p_hevc_decode_params;
+		struct v4l2_ctrl_av1_sequence __attribute__((btf_type_tag("user"))) *p_av1_sequence;
+		struct v4l2_ctrl_av1_tile_group_entry __attribute__((btf_type_tag("user"))) *p_av1_tile_group_entry;
+		struct v4l2_ctrl_av1_frame __attribute__((btf_type_tag("user"))) *p_av1_frame;
+		struct v4l2_ctrl_av1_film_grain __attribute__((btf_type_tag("user"))) *p_av1_film_grain;
+		void __attribute__((btf_type_tag("user"))) *ptr;
+	};
+} __attribute__((packed));
+
+struct v4l2_area {
+	__u32 width;
+	__u32 height;
+};
+
+struct v4l2_ctrl_h264_sps {
+	__u8 profile_idc;
+	__u8 constraint_set_flags;
+	__u8 level_idc;
+	__u8 seq_parameter_set_id;
+	__u8 chroma_format_idc;
+	__u8 bit_depth_luma_minus8;
+	__u8 bit_depth_chroma_minus8;
+	__u8 log2_max_frame_num_minus4;
+	__u8 pic_order_cnt_type;
+	__u8 log2_max_pic_order_cnt_lsb_minus4;
+	__u8 max_num_ref_frames;
+	__u8 num_ref_frames_in_pic_order_cnt_cycle;
+	__s32 offset_for_ref_frame[255];
+	__s32 offset_for_non_ref_pic;
+	__s32 offset_for_top_to_bottom_field;
+	__u16 pic_width_in_mbs_minus1;
+	__u16 pic_height_in_map_units_minus1;
+	__u32 flags;
+};
+
+struct v4l2_ctrl_h264_pps {
+	__u8 pic_parameter_set_id;
+	__u8 seq_parameter_set_id;
+	__u8 num_slice_groups_minus1;
+	__u8 num_ref_idx_l0_default_active_minus1;
+	__u8 num_ref_idx_l1_default_active_minus1;
+	__u8 weighted_bipred_idc;
+	__s8 pic_init_qp_minus26;
+	__s8 pic_init_qs_minus26;
+	__s8 chroma_qp_index_offset;
+	__s8 second_chroma_qp_index_offset;
+	__u16 flags;
+};
+
+struct v4l2_ctrl_h264_scaling_matrix {
+	__u8 scaling_list_4x4[96];
+	__u8 scaling_list_8x8[384];
+};
+
+struct v4l2_h264_weight_factors {
+	__s16 luma_weight[32];
+	__s16 luma_offset[32];
+	__s16 chroma_weight[64];
+	__s16 chroma_offset[64];
+};
+
+struct v4l2_ctrl_h264_pred_weights {
+	__u16 luma_log2_weight_denom;
+	__u16 chroma_log2_weight_denom;
+	struct v4l2_h264_weight_factors weight_factors[2];
+};
+
+struct v4l2_h264_reference {
+	__u8 fields;
+	__u8 index;
+};
+
+struct v4l2_ctrl_h264_slice_params {
+	__u32 header_bit_size;
+	__u32 first_mb_in_slice;
+	__u8 slice_type;
+	__u8 colour_plane_id;
+	__u8 redundant_pic_cnt;
+	__u8 cabac_init_idc;
+	__s8 slice_qp_delta;
+	__s8 slice_qs_delta;
+	__u8 disable_deblocking_filter_idc;
+	__s8 slice_alpha_c0_offset_div2;
+	__s8 slice_beta_offset_div2;
+	__u8 num_ref_idx_l0_active_minus1;
+	__u8 num_ref_idx_l1_active_minus1;
+	__u8 reserved;
+	struct v4l2_h264_reference ref_pic_list0[32];
+	struct v4l2_h264_reference ref_pic_list1[32];
+	__u32 flags;
+};
+
+struct v4l2_h264_dpb_entry {
+	__u64 reference_ts;
+	__u32 pic_num;
+	__u16 frame_num;
+	__u8 fields;
+	__u8 reserved[5];
+	__s32 top_field_order_cnt;
+	__s32 bottom_field_order_cnt;
+	__u32 flags;
+};
+
+struct v4l2_ctrl_h264_decode_params {
+	struct v4l2_h264_dpb_entry dpb[16];
+	__u16 nal_ref_idc;
+	__u16 frame_num;
+	__s32 top_field_order_cnt;
+	__s32 bottom_field_order_cnt;
+	__u16 idr_pic_id;
+	__u16 pic_order_cnt_lsb;
+	__s32 delta_pic_order_cnt_bottom;
+	__s32 delta_pic_order_cnt0;
+	__s32 delta_pic_order_cnt1;
+	__u32 dec_ref_pic_marking_bit_size;
+	__u32 pic_order_cnt_bit_size;
+	__u32 slice_group_change_cycle;
+	__u32 reserved;
+	__u32 flags;
+};
+
+struct v4l2_ctrl_fwht_params {
+	__u64 backward_ref_ts;
+	__u32 version;
+	__u32 width;
+	__u32 height;
+	__u32 flags;
+	__u32 colorspace;
+	__u32 xfer_func;
+	__u32 ycbcr_enc;
+	__u32 quantization;
+};
+
+struct v4l2_vp8_segment {
+	__s8 quant_update[4];
+	__s8 lf_update[4];
+	__u8 segment_probs[3];
+	__u8 padding;
+	__u32 flags;
+};
+
+struct v4l2_vp8_loop_filter {
+	__s8 ref_frm_delta[4];
+	__s8 mb_mode_delta[4];
+	__u8 sharpness_level;
+	__u8 level;
+	__u16 padding;
+	__u32 flags;
+};
+
+struct v4l2_vp8_quantization {
+	__u8 y_ac_qi;
+	__s8 y_dc_delta;
+	__s8 y2_dc_delta;
+	__s8 y2_ac_delta;
+	__s8 uv_dc_delta;
+	__s8 uv_ac_delta;
+	__u16 padding;
+};
+
+struct v4l2_vp8_entropy {
+	__u8 coeff_probs[1056];
+	__u8 y_mode_probs[4];
+	__u8 uv_mode_probs[3];
+	__u8 mv_probs[38];
+	__u8 padding[3];
+};
+
+struct v4l2_vp8_entropy_coder_state {
+	__u8 range;
+	__u8 value;
+	__u8 bit_count;
+	__u8 padding;
+};
+
+struct v4l2_ctrl_vp8_frame {
+	struct v4l2_vp8_segment segment;
+	struct v4l2_vp8_loop_filter lf;
+	struct v4l2_vp8_quantization quant;
+	struct v4l2_vp8_entropy entropy;
+	struct v4l2_vp8_entropy_coder_state coder_state;
+	__u16 width;
+	__u16 height;
+	__u8 horizontal_scale;
+	__u8 vertical_scale;
+	__u8 version;
+	__u8 prob_skip_false;
+	__u8 prob_intra;
+	__u8 prob_last;
+	__u8 prob_gf;
+	__u8 num_dct_parts;
+	__u32 first_part_size;
+	__u32 first_part_header_bits;
+	__u32 dct_part_sizes[8];
+	__u64 last_frame_ts;
+	__u64 golden_frame_ts;
+	__u64 alt_frame_ts;
+	__u64 flags;
+};
+
+struct v4l2_ctrl_mpeg2_sequence {
+	__u16 horizontal_size;
+	__u16 vertical_size;
+	__u32 vbv_buffer_size;
+	__u16 profile_and_level_indication;
+	__u8 chroma_format;
+	__u8 flags;
+};
+
+struct v4l2_ctrl_mpeg2_picture {
+	__u64 backward_ref_ts;
+	__u64 forward_ref_ts;
+	__u32 flags;
+	__u8 f_code[4];
+	__u8 picture_coding_type;
+	__u8 picture_structure;
+	__u8 intra_dc_precision;
+	__u8 reserved[5];
+};
+
+struct v4l2_ctrl_mpeg2_quantisation {
+	__u8 intra_quantiser_matrix[64];
+	__u8 non_intra_quantiser_matrix[64];
+	__u8 chroma_intra_quantiser_matrix[64];
+	__u8 chroma_non_intra_quantiser_matrix[64];
+};
+
+struct v4l2_vp9_mv_probs {
+	__u8 joint[3];
+	__u8 sign[2];
+	__u8 classes[20];
+	__u8 class0_bit[2];
+	__u8 bits[20];
+	__u8 class0_fr[12];
+	__u8 fr[6];
+	__u8 class0_hp[2];
+	__u8 hp[2];
+};
+
+struct v4l2_ctrl_vp9_compressed_hdr {
+	__u8 tx_mode;
+	__u8 tx8[2];
+	__u8 tx16[4];
+	__u8 tx32[6];
+	__u8 coef[1728];
+	__u8 skip[3];
+	__u8 inter_mode[21];
+	__u8 interp_filter[8];
+	__u8 is_inter[4];
+	__u8 comp_mode[5];
+	__u8 single_ref[10];
+	__u8 comp_ref[5];
+	__u8 y_mode[36];
+	__u8 uv_mode[90];
+	__u8 partition[48];
+	struct v4l2_vp9_mv_probs mv;
+};
+
+struct v4l2_vp9_loop_filter {
+	__s8 ref_deltas[4];
+	__s8 mode_deltas[2];
+	__u8 level;
+	__u8 sharpness;
+	__u8 flags;
+	__u8 reserved[7];
+};
+
+struct v4l2_vp9_quantization {
+	__u8 base_q_idx;
+	__s8 delta_q_y_dc;
+	__s8 delta_q_uv_dc;
+	__s8 delta_q_uv_ac;
+	__u8 reserved[4];
+};
+
+struct v4l2_vp9_segmentation {
+	__s16 feature_data[32];
+	__u8 feature_enabled[8];
+	__u8 tree_probs[7];
+	__u8 pred_probs[3];
+	__u8 flags;
+	__u8 reserved[5];
+};
+
+struct v4l2_ctrl_vp9_frame {
+	struct v4l2_vp9_loop_filter lf;
+	struct v4l2_vp9_quantization quant;
+	struct v4l2_vp9_segmentation seg;
+	__u32 flags;
+	__u16 compressed_header_size;
+	__u16 uncompressed_header_size;
+	__u16 frame_width_minus_1;
+	__u16 frame_height_minus_1;
+	__u16 render_width_minus_1;
+	__u16 render_height_minus_1;
+	__u64 last_frame_ts;
+	__u64 golden_frame_ts;
+	__u64 alt_frame_ts;
+	__u8 ref_frame_sign_bias;
+	__u8 reset_frame_context;
+	__u8 frame_context_idx;
+	__u8 profile;
+	__u8 bit_depth;
+	__u8 interpolation_filter;
+	__u8 tile_cols_log2;
+	__u8 tile_rows_log2;
+	__u8 reference_mode;
+	__u8 reserved[7];
+};
+
+struct v4l2_ctrl_hevc_sps {
+	__u8 video_parameter_set_id;
+	__u8 seq_parameter_set_id;
+	__u16 pic_width_in_luma_samples;
+	__u16 pic_height_in_luma_samples;
+	__u8 bit_depth_luma_minus8;
+	__u8 bit_depth_chroma_minus8;
+	__u8 log2_max_pic_order_cnt_lsb_minus4;
+	__u8 sps_max_dec_pic_buffering_minus1;
+	__u8 sps_max_num_reorder_pics;
+	__u8 sps_max_latency_increase_plus1;
+	__u8 log2_min_luma_coding_block_size_minus3;
+	__u8 log2_diff_max_min_luma_coding_block_size;
+	__u8 log2_min_luma_transform_block_size_minus2;
+	__u8 log2_diff_max_min_luma_transform_block_size;
+	__u8 max_transform_hierarchy_depth_inter;
+	__u8 max_transform_hierarchy_depth_intra;
+	__u8 pcm_sample_bit_depth_luma_minus1;
+	__u8 pcm_sample_bit_depth_chroma_minus1;
+	__u8 log2_min_pcm_luma_coding_block_size_minus3;
+	__u8 log2_diff_max_min_pcm_luma_coding_block_size;
+	__u8 num_short_term_ref_pic_sets;
+	__u8 num_long_term_ref_pics_sps;
+	__u8 chroma_format_idc;
+	__u8 sps_max_sub_layers_minus1;
+	__u8 reserved[6];
+	__u64 flags;
+};
+
+struct v4l2_ctrl_hevc_pps {
+	__u8 pic_parameter_set_id;
+	__u8 num_extra_slice_header_bits;
+	__u8 num_ref_idx_l0_default_active_minus1;
+	__u8 num_ref_idx_l1_default_active_minus1;
+	__s8 init_qp_minus26;
+	__u8 diff_cu_qp_delta_depth;
+	__s8 pps_cb_qp_offset;
+	__s8 pps_cr_qp_offset;
+	__u8 num_tile_columns_minus1;
+	__u8 num_tile_rows_minus1;
+	__u8 column_width_minus1[20];
+	__u8 row_height_minus1[22];
+	__s8 pps_beta_offset_div2;
+	__s8 pps_tc_offset_div2;
+	__u8 log2_parallel_merge_level_minus2;
+	__u8 reserved;
+	__u64 flags;
+};
+
+struct v4l2_hevc_pred_weight_table {
+	__s8 delta_luma_weight_l0[16];
+	__s8 luma_offset_l0[16];
+	__s8 delta_chroma_weight_l0[32];
+	__s8 chroma_offset_l0[32];
+	__s8 delta_luma_weight_l1[16];
+	__s8 luma_offset_l1[16];
+	__s8 delta_chroma_weight_l1[32];
+	__s8 chroma_offset_l1[32];
+	__u8 luma_log2_weight_denom;
+	__s8 delta_chroma_log2_weight_denom;
+};
+
+struct v4l2_ctrl_hevc_slice_params {
+	__u32 bit_size;
+	__u32 data_byte_offset;
+	__u32 num_entry_point_offsets;
+	__u8 nal_unit_type;
+	__u8 nuh_temporal_id_plus1;
+	__u8 slice_type;
+	__u8 colour_plane_id;
+	__s32 slice_pic_order_cnt;
+	__u8 num_ref_idx_l0_active_minus1;
+	__u8 num_ref_idx_l1_active_minus1;
+	__u8 collocated_ref_idx;
+	__u8 five_minus_max_num_merge_cand;
+	__s8 slice_qp_delta;
+	__s8 slice_cb_qp_offset;
+	__s8 slice_cr_qp_offset;
+	__s8 slice_act_y_qp_offset;
+	__s8 slice_act_cb_qp_offset;
+	__s8 slice_act_cr_qp_offset;
+	__s8 slice_beta_offset_div2;
+	__s8 slice_tc_offset_div2;
+	__u8 pic_struct;
+	__u8 reserved0[3];
+	__u32 slice_segment_addr;
+	__u8 ref_idx_l0[16];
+	__u8 ref_idx_l1[16];
+	__u16 short_term_ref_pic_set_size;
+	__u16 long_term_ref_pic_set_size;
+	struct v4l2_hevc_pred_weight_table pred_weight_table;
+	__u8 reserved1[2];
+	__u64 flags;
+};
+
+struct v4l2_ctrl_hevc_scaling_matrix {
+	__u8 scaling_list_4x4[96];
+	__u8 scaling_list_8x8[384];
+	__u8 scaling_list_16x16[384];
+	__u8 scaling_list_32x32[128];
+	__u8 scaling_list_dc_coef_16x16[6];
+	__u8 scaling_list_dc_coef_32x32[2];
+};
+
+struct v4l2_hevc_dpb_entry {
+	__u64 timestamp;
+	__u8 flags;
+	__u8 field_pic;
+	__u16 reserved;
+	__s32 pic_order_cnt_val;
+};
+
+struct v4l2_ctrl_hevc_decode_params {
+	__s32 pic_order_cnt_val;
+	__u16 short_term_ref_pic_set_size;
+	__u16 long_term_ref_pic_set_size;
+	__u8 num_active_dpb_entries;
+	__u8 num_poc_st_curr_before;
+	__u8 num_poc_st_curr_after;
+	__u8 num_poc_lt_curr;
+	__u8 poc_st_curr_before[16];
+	__u8 poc_st_curr_after[16];
+	__u8 poc_lt_curr[16];
+	__u8 num_delta_pocs_of_ref_rps_idx;
+	__u8 reserved[3];
+	struct v4l2_hevc_dpb_entry dpb[16];
+	__u64 flags;
+};
+
+struct v4l2_ctrl_av1_sequence {
+	__u32 flags;
+	__u8 seq_profile;
+	__u8 order_hint_bits;
+	__u8 bit_depth;
+	__u8 reserved;
+	__u16 max_frame_width_minus_1;
+	__u16 max_frame_height_minus_1;
+};
+
+struct v4l2_ctrl_av1_tile_group_entry {
+	__u32 tile_offset;
+	__u32 tile_size;
+	__u32 tile_row;
+	__u32 tile_col;
+};
+
+struct v4l2_av1_tile_info {
+	__u8 flags;
+	__u8 context_update_tile_id;
+	__u8 tile_cols;
+	__u8 tile_rows;
+	__u32 mi_col_starts[65];
+	__u32 mi_row_starts[65];
+	__u32 width_in_sbs_minus_1[64];
+	__u32 height_in_sbs_minus_1[64];
+	__u8 tile_size_bytes;
+	__u8 reserved[3];
+};
+
+struct v4l2_av1_quantization {
+	__u8 flags;
+	__u8 base_q_idx;
+	__s8 delta_q_y_dc;
+	__s8 delta_q_u_dc;
+	__s8 delta_q_u_ac;
+	__s8 delta_q_v_dc;
+	__s8 delta_q_v_ac;
+	__u8 qm_y;
+	__u8 qm_u;
+	__u8 qm_v;
+	__u8 delta_q_res;
+};
+
+struct v4l2_av1_segmentation {
+	__u8 flags;
+	__u8 last_active_seg_id;
+	__u8 feature_enabled[8];
+	__s16 feature_data[64];
+};
+
+struct v4l2_av1_loop_filter {
+	__u8 flags;
+	__u8 level[4];
+	__u8 sharpness;
+	__s8 ref_deltas[8];
+	__s8 mode_deltas[2];
+	__u8 delta_lf_res;
+};
+
+struct v4l2_av1_cdef {
+	__u8 damping_minus_3;
+	__u8 bits;
+	__u8 y_pri_strength[8];
+	__u8 y_sec_strength[8];
+	__u8 uv_pri_strength[8];
+	__u8 uv_sec_strength[8];
+};
+
+enum v4l2_av1_frame_restoration_type {
+	V4L2_AV1_FRAME_RESTORE_NONE = 0,
+	V4L2_AV1_FRAME_RESTORE_WIENER = 1,
+	V4L2_AV1_FRAME_RESTORE_SGRPROJ = 2,
+	V4L2_AV1_FRAME_RESTORE_SWITCHABLE = 3,
+};
+
+struct v4l2_av1_loop_restoration {
+	__u8 flags;
+	__u8 lr_unit_shift;
+	__u8 lr_uv_shift;
+	__u8 reserved;
+	enum v4l2_av1_frame_restoration_type frame_restoration_type[3];
+	__u32 loop_restoration_size[3];
+};
+
+enum v4l2_av1_warp_model {
+	V4L2_AV1_WARP_MODEL_IDENTITY = 0,
+	V4L2_AV1_WARP_MODEL_TRANSLATION = 1,
+	V4L2_AV1_WARP_MODEL_ROTZOOM = 2,
+	V4L2_AV1_WARP_MODEL_AFFINE = 3,
+};
+
+struct v4l2_av1_global_motion {
+	__u8 flags[8];
+	enum v4l2_av1_warp_model type[8];
+	__s32 params[48];
+	__u8 invalid;
+	__u8 reserved[3];
+};
+
+enum v4l2_av1_frame_type {
+	V4L2_AV1_KEY_FRAME = 0,
+	V4L2_AV1_INTER_FRAME = 1,
+	V4L2_AV1_INTRA_ONLY_FRAME = 2,
+	V4L2_AV1_SWITCH_FRAME = 3,
+};
+
+enum v4l2_av1_interpolation_filter {
+	V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP = 0,
+	V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1,
+	V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2,
+	V4L2_AV1_INTERPOLATION_FILTER_BILINEAR = 3,
+	V4L2_AV1_INTERPOLATION_FILTER_SWITCHABLE = 4,
+};
+
+enum v4l2_av1_tx_mode {
+	V4L2_AV1_TX_MODE_ONLY_4X4 = 0,
+	V4L2_AV1_TX_MODE_LARGEST = 1,
+	V4L2_AV1_TX_MODE_SELECT = 2,
+};
+
+struct v4l2_ctrl_av1_frame {
+	struct v4l2_av1_tile_info tile_info;
+	struct v4l2_av1_quantization quantization;
+	__u8 superres_denom;
+	struct v4l2_av1_segmentation segmentation;
+	struct v4l2_av1_loop_filter loop_filter;
+	struct v4l2_av1_cdef cdef;
+	__u8 skip_mode_frame[2];
+	__u8 primary_ref_frame;
+	struct v4l2_av1_loop_restoration loop_restoration;
+	struct v4l2_av1_global_motion global_motion;
+	__u32 flags;
+	enum v4l2_av1_frame_type frame_type;
+	__u32 order_hint;
+	__u32 upscaled_width;
+	enum v4l2_av1_interpolation_filter interpolation_filter;
+	enum v4l2_av1_tx_mode tx_mode;
+	__u32 frame_width_minus_1;
+	__u32 frame_height_minus_1;
+	__u16 render_width_minus_1;
+	__u16 render_height_minus_1;
+	__u32 current_frame_id;
+	__u32 buffer_removal_time[32];
+	__u8 reserved[4];
+	__u32 order_hints[8];
+	__u64 reference_frame_ts[8];
+	__s8 ref_frame_idx[7];
+	__u8 refresh_frame_flags;
+};
+
+struct v4l2_ctrl_av1_film_grain {
+	__u8 flags;
+	__u8 cr_mult;
+	__u16 grain_seed;
+	__u8 film_grain_params_ref_idx;
+	__u8 num_y_points;
+	__u8 point_y_value[16];
+	__u8 point_y_scaling[16];
+	__u8 num_cb_points;
+	__u8 point_cb_value[16];
+	__u8 point_cb_scaling[16];
+	__u8 num_cr_points;
+	__u8 point_cr_value[16];
+	__u8 point_cr_scaling[16];
+	__u8 grain_scaling_minus_8;
+	__u8 ar_coeff_lag;
+	__u8 ar_coeffs_y_plus_128[25];
+	__u8 ar_coeffs_cb_plus_128[25];
+	__u8 ar_coeffs_cr_plus_128[25];
+	__u8 ar_coeff_shift_minus_6;
+	__u8 grain_scale_shift;
+	__u8 cb_mult;
+	__u8 cb_luma_mult;
+	__u8 cr_luma_mult;
+	__u16 cb_offset;
+	__u16 cr_offset;
+	__u8 reserved[4];
+};
+
+struct v4l2_querymenu {
+	__u32 id;
+	__u32 index;
+	union {
+		__u8 name[32];
+		__s64 value;
+	};
+	__u32 reserved;
+} __attribute__((packed));
+
+struct v4l2_audio {
+	__u32 index;
+	__u8 name[32];
+	__u32 capability;
+	__u32 mode;
+	__u32 reserved[2];
+};
+
+struct v4l2_audioout {
+	__u32 index;
+	__u8 name[32];
+	__u32 capability;
+	__u32 mode;
+	__u32 reserved[2];
+};
+
+struct v4l2_selection {
+	__u32 type;
+	__u32 target;
+	__u32 flags;
+	struct v4l2_rect r;
+	__u32 reserved[9];
+};
+
+struct v4l2_jpegcompression {
+	int quality;
+	int APPn;
+	int APP_len;
+	char APP_data[60];
+	int COM_len;
+	char COM_data[60];
+	__u32 jpeg_markers;
+};
+
+struct v4l2_enc_idx_entry {
+	__u64 offset;
+	__u64 pts;
+	__u32 length;
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct v4l2_enc_idx {
+	__u32 entries;
+	__u32 entries_cap;
+	__u32 reserved[4];
+	struct v4l2_enc_idx_entry entry[64];
+};
+
+struct v4l2_encoder_cmd {
+	__u32 cmd;
+	__u32 flags;
+	union {
+		struct {
+			__u32 data[8];
+		} raw;
+	};
+};
+
+struct v4l2_decoder_cmd {
+	__u32 cmd;
+	__u32 flags;
+	union {
+		struct {
+			__u64 pts;
+		} stop;
+		struct {
+			__s32 speed;
+			__u32 format;
+		} start;
+		struct {
+			__u32 data[16];
+		} raw;
+	};
+};
+
+struct v4l2_captureparm {
+	__u32 capability;
+	__u32 capturemode;
+	struct v4l2_fract timeperframe;
+	__u32 extendedmode;
+	__u32 readbuffers;
+	__u32 reserved[4];
+};
+
+struct v4l2_outputparm {
+	__u32 capability;
+	__u32 outputmode;
+	struct v4l2_fract timeperframe;
+	__u32 extendedmode;
+	__u32 writebuffers;
+	__u32 reserved[4];
+};
+
+struct v4l2_streamparm {
+	__u32 type;
+	union {
+		struct v4l2_captureparm capture;
+		struct v4l2_outputparm output;
+		__u8 raw_data[200];
+	} parm;
+};
+
+struct v4l2_hw_freq_seek {
+	__u32 tuner;
+	__u32 type;
+	__u32 seek_upward;
+	__u32 wrap_around;
+	__u32 spacing;
+	__u32 rangelow;
+	__u32 rangehigh;
+	__u32 reserved[5];
+};
+
+struct v4l2_frmsize_discrete {
+	__u32 width;
+	__u32 height;
+};
+
+struct v4l2_frmsize_stepwise {
+	__u32 min_width;
+	__u32 max_width;
+	__u32 step_width;
+	__u32 min_height;
+	__u32 max_height;
+	__u32 step_height;
+};
+
+struct v4l2_frmsizeenum {
+	__u32 index;
+	__u32 pixel_format;
+	__u32 type;
+	union {
+		struct v4l2_frmsize_discrete discrete;
+		struct v4l2_frmsize_stepwise stepwise;
+	};
+	__u32 reserved[2];
+};
+
+struct v4l2_frmival_stepwise {
+	struct v4l2_fract min;
+	struct v4l2_fract max;
+	struct v4l2_fract step;
+};
+
+struct v4l2_frmivalenum {
+	__u32 index;
+	__u32 pixel_format;
+	__u32 width;
+	__u32 height;
+	__u32 type;
+	union {
+		struct v4l2_fract discrete;
+		struct v4l2_frmival_stepwise stepwise;
+	};
+	__u32 reserved[2];
+};
+
+enum uvcg_format_type {
+	UVCG_UNCOMPRESSED = 0,
+	UVCG_MJPEG = 1,
+};
+
+enum v4l2_colorspace {
+	V4L2_COLORSPACE_DEFAULT = 0,
+	V4L2_COLORSPACE_SMPTE170M = 1,
+	V4L2_COLORSPACE_SMPTE240M = 2,
+	V4L2_COLORSPACE_REC709 = 3,
+	V4L2_COLORSPACE_BT878 = 4,
+	V4L2_COLORSPACE_470_SYSTEM_M = 5,
+	V4L2_COLORSPACE_470_SYSTEM_BG = 6,
+	V4L2_COLORSPACE_JPEG = 7,
+	V4L2_COLORSPACE_SRGB = 8,
+	V4L2_COLORSPACE_OPRGB = 9,
+	V4L2_COLORSPACE_BT2020 = 10,
+	V4L2_COLORSPACE_RAW = 11,
+	V4L2_COLORSPACE_DCI_P3 = 12,
+	V4L2_COLORSPACE_LAST = 13,
+};
+
+enum v4l2_frmsizetypes {
+	V4L2_FRMSIZE_TYPE_DISCRETE = 1,
+	V4L2_FRMSIZE_TYPE_CONTINUOUS = 2,
+	V4L2_FRMSIZE_TYPE_STEPWISE = 3,
+};
+
+enum v4l2_frmivaltypes {
+	V4L2_FRMIVAL_TYPE_DISCRETE = 1,
+	V4L2_FRMIVAL_TYPE_CONTINUOUS = 2,
+	V4L2_FRMIVAL_TYPE_STEPWISE = 3,
+};
+
+struct uvcg_format;
+
+struct uvcg_format_ptr {
+	struct uvcg_format *fmt;
+	struct list_head entry;
+};
+
+struct uvcg_color_matching;
+
+struct uvcg_format {
+	struct config_group group;
+	enum uvcg_format_type type;
+	unsigned int linked;
+	struct list_head frames;
+	unsigned int num_frames;
+	__u8 bmaControls[1];
+	struct uvcg_color_matching *color_matching;
+};
+
+struct uvc_color_matching_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bColorPrimaries;
+	__u8 bTransferCharacteristics;
+	__u8 bMatrixCoefficients;
+};
+
+struct uvcg_color_matching {
+	struct config_group group;
+	struct uvc_color_matching_descriptor desc;
+	unsigned int refcnt;
+};
+
+struct uvc_format_uncompressed {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bFormatIndex;
+	__u8 bNumFrameDescriptors;
+	__u8 guidFormat[16];
+	__u8 bBitsPerPixel;
+	__u8 bDefaultFrameIndex;
+	__u8 bAspectRatioX;
+	__u8 bAspectRatioY;
+	__u8 bmInterlaceFlags;
+	__u8 bCopyProtect;
+};
+
+struct uvcg_uncompressed {
+	struct uvcg_format fmt;
+	struct uvc_format_uncompressed desc;
+};
+
+struct uvcg_frame;
+
+struct uvcg_frame_ptr {
+	struct uvcg_frame *frm;
+	struct list_head entry;
+};
+
+struct uvcg_frame {
+	struct config_item item;
+	enum uvcg_format_type fmt_type;
+	struct {
+		u8 b_length;
+		u8 b_descriptor_type;
+		u8 b_descriptor_subtype;
+		u8 b_frame_index;
+		u8 bm_capabilities;
+		u16 w_width;
+		u16 w_height;
+		u32 dw_min_bit_rate;
+		u32 dw_max_bit_rate;
+		u32 dw_max_video_frame_buffer_size;
+		u32 dw_default_frame_interval;
+		u8 b_frame_interval_type;
+	} __attribute__((packed)) frame;
+	u32 *dw_frame_interval;
+};
+
+struct uvc_file_handle {
+	struct v4l2_fh vfh;
+	struct uvc_video *device;
+	bool is_uvc_app_handle;
+};
+
+struct uvc_format_desc {
+	u8 guid[16];
+	u32 fcc;
+};
+
+struct v4l2_subscribed_event;
+
+struct v4l2_subscribed_event_ops {
+	int (*add)(struct v4l2_subscribed_event *, unsigned int);
+	void (*del)(struct v4l2_subscribed_event *);
+	void (*replace)(struct v4l2_event *, const struct v4l2_event *);
+	void (*merge)(const struct v4l2_event *, struct v4l2_event *);
+};
+
+struct v4l2_kevent {
+	struct list_head list;
+	struct v4l2_subscribed_event *sev;
+	struct v4l2_event event;
+	u64 ts;
+};
+
+struct v4l2_subscribed_event {
+	struct list_head list;
+	u32 type;
+	u32 id;
+	u32 flags;
+	struct v4l2_fh *fh;
+	struct list_head node;
+	const struct v4l2_subscribed_event_ops *ops;
+	unsigned int elems;
+	unsigned int first;
+	unsigned int in_use;
+	struct v4l2_kevent events[0];
+};
+
+struct uvc_request {
+	struct usb_request *req;
+	u8 *req_buffer;
+	struct uvc_video *video;
+	struct sg_table sgt;
+	u8 header[12];
+	struct uvc_buffer *last_buf;
+	struct list_head list;
+};
+
+struct uvcg_config_group_type {
+	struct config_item_type type;
+	const char *name;
+	const struct uvcg_config_group_type **children;
+	int (*create_children)(struct config_group *);
+};
+
+enum uvc_color_primaries_values {
+	UVC_COLOR_PRIMARIES_UNSPECIFIED = 0,
+	UVC_COLOR_PRIMARIES_BT_709_SRGB = 1,
+	UVC_COLOR_PRIMARIES_BT_470_2_M = 2,
+	UVC_COLOR_PRIMARIES_BT_470_2_B_G = 3,
+	UVC_COLOR_PRIMARIES_SMPTE_170M = 4,
+	UVC_COLOR_PRIMARIES_SMPTE_240M = 5,
+};
+
+enum uvc_transfer_characteristics_values {
+	UVC_TRANSFER_CHARACTERISTICS_UNSPECIFIED = 0,
+	UVC_TRANSFER_CHARACTERISTICS_BT_709 = 1,
+	UVC_TRANSFER_CHARACTERISTICS_BT_470_2_M = 2,
+	UVC_TRANSFER_CHARACTERISTICS_BT_470_2_B_G = 3,
+	UVC_TRANSFER_CHARACTERISTICS_SMPTE_170M = 4,
+	UVC_TRANSFER_CHARACTERISTICS_SMPTE_240M = 5,
+	UVC_TRANSFER_CHARACTERISTICS_LINEAR = 6,
+	UVC_TRANSFER_CHARACTERISTICS_SRGB = 7,
+};
+
+enum uvc_matrix_coefficients {
+	UVC_MATRIX_COEFFICIENTS_UNSPECIFIED = 0,
+	UVC_MATRIX_COEFFICIENTS_BT_709 = 1,
+	UVC_MATRIX_COEFFICIENTS_FCC = 2,
+	UVC_MATRIX_COEFFICIENTS_BT_470_2_B_G = 3,
+	UVC_MATRIX_COEFFICIENTS_SMPTE_170M = 4,
+	UVC_MATRIX_COEFFICIENTS_SMPTE_240M = 5,
+};
+
+enum uvcg_strm_type {
+	UVCG_HEADER = 0,
+	UVCG_FORMAT = 1,
+	UVCG_FRAME = 2,
+	UVCG_COLOR_MATCHING = 3,
+};
+
+struct uvc_header_descriptor_1 {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdUVC;
+	__le16 wTotalLength;
+	__le32 dwClockFrequency;
+	__u8 bInCollection;
+	__u8 baInterfaceNr[1];
+} __attribute__((packed));
+
+struct uvcg_control_header {
+	struct config_item item;
+	struct uvc_header_descriptor_1 desc;
+	unsigned int linked;
+};
+
+struct uvcg_control_class_group {
+	struct config_group group;
+	const char *name;
+};
+
+struct uvc_format_mjpeg {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bFormatIndex;
+	__u8 bNumFrameDescriptors;
+	__u8 bmFlags;
+	__u8 bDefaultFrameIndex;
+	__u8 bAspectRatioX;
+	__u8 bAspectRatioY;
+	__u8 bmInterlaceFlags;
+	__u8 bCopyProtect;
+};
+
+struct uvcg_mjpeg {
+	struct uvcg_format fmt;
+	struct uvc_format_mjpeg desc;
+};
+
+struct uvcg_streaming_class_group {
+	struct config_group group;
+	const char *name;
+};
+
+struct snd_device;
+
+struct snd_device_ops {
+	int (*dev_free)(struct snd_device *);
+	int (*dev_register)(struct snd_device *);
+	int (*dev_disconnect)(struct snd_device *);
+	u64 android_kabi_reserved1;
+};
+
+enum snd_device_state {
+	SNDRV_DEV_BUILD = 0,
+	SNDRV_DEV_REGISTERED = 1,
+	SNDRV_DEV_DISCONNECTED = 2,
+};
+
+enum snd_device_type {
+	SNDRV_DEV_LOWLEVEL = 0,
+	SNDRV_DEV_INFO = 1,
+	SNDRV_DEV_BUS = 2,
+	SNDRV_DEV_CODEC = 3,
+	SNDRV_DEV_PCM = 4,
+	SNDRV_DEV_COMPRESS = 5,
+	SNDRV_DEV_RAWMIDI = 6,
+	SNDRV_DEV_TIMER = 7,
+	SNDRV_DEV_SEQUENCER = 8,
+	SNDRV_DEV_HWDEP = 9,
+	SNDRV_DEV_JACK = 10,
+	SNDRV_DEV_CONTROL = 11,
+};
+
+struct snd_device {
+	struct list_head list;
+	struct snd_card *card;
+	enum snd_device_state state;
+	enum snd_device_type type;
+	void *device_data;
+	const struct snd_device_ops *ops;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_info_buffer;
+
+struct snd_info_entry_text {
+	void (*read)(struct snd_info_entry *, struct snd_info_buffer *);
+	void (*write)(struct snd_info_entry *, struct snd_info_buffer *);
+};
+
+struct snd_info_entry_ops;
+
+struct snd_info_entry {
+	const char *name;
+	umode_t mode;
+	long size;
+	unsigned short content;
+	union {
+		struct snd_info_entry_text text;
+		const struct snd_info_entry_ops *ops;
+	} c;
+	struct snd_info_entry *parent;
+	struct module *module;
+	void *private_data;
+	void (*private_free)(struct snd_info_entry *);
+	struct proc_dir_entry *p;
+	struct mutex access;
+	struct list_head children;
+	struct list_head list;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_info_buffer {
+	char *buffer;
+	unsigned int curr;
+	unsigned int size;
+	unsigned int len;
+	int stop;
+	int error;
+};
+
+struct snd_info_entry_ops {
+	int (*open)(struct snd_info_entry *, unsigned short, void **);
+	int (*release)(struct snd_info_entry *, unsigned short, void *);
+	ssize_t (*read)(struct snd_info_entry *, void *, struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t);
+	ssize_t (*write)(struct snd_info_entry *, void *, struct file *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t);
+	loff_t (*llseek)(struct snd_info_entry *, void *, struct file *, loff_t, int);
+	__poll_t (*poll)(struct snd_info_entry *, void *, struct file *, poll_table *);
+	int (*ioctl)(struct snd_info_entry *, void *, struct file *, unsigned int, unsigned long);
+	int (*mmap)(struct snd_info_entry *, void *, struct inode *, struct file *, struct vm_area_struct *);
+	u64 android_kabi_reserved1;
+};
+
+struct snd_rawmidi_substream;
+
+struct snd_rawmidi_ops {
+	int (*open)(struct snd_rawmidi_substream *);
+	int (*close)(struct snd_rawmidi_substream *);
+	void (*trigger)(struct snd_rawmidi_substream *, int);
+	void (*drain)(struct snd_rawmidi_substream *);
+};
+
+struct snd_rawmidi;
+
+struct snd_rawmidi_str;
+
+struct snd_rawmidi_runtime;
+
+struct snd_rawmidi_substream {
+	struct list_head list;
+	int stream;
+	int number;
+	bool opened;
+	bool append;
+	bool active_sensing;
+	unsigned int framing;
+	unsigned int clock_type;
+	int use_count;
+	size_t bytes;
+	spinlock_t lock;
+	struct snd_rawmidi *rmidi;
+	struct snd_rawmidi_str *pstr;
+	char name[32];
+	struct snd_rawmidi_runtime *runtime;
+	struct pid *pid;
+	const struct snd_rawmidi_ops *ops;
+};
+
+struct snd_rawmidi_str {
+	unsigned int substream_count;
+	unsigned int substream_opened;
+	struct list_head substreams;
+};
+
+struct snd_rawmidi_global_ops;
+
+struct snd_rawmidi {
+	struct snd_card *card;
+	struct list_head list;
+	unsigned int device;
+	unsigned int info_flags;
+	char id[64];
+	char name[80];
+	const struct snd_rawmidi_global_ops *ops;
+	struct snd_rawmidi_str streams[2];
+	void *private_data;
+	void (*private_free)(struct snd_rawmidi *);
+	struct mutex open_mutex;
+	wait_queue_head_t open_wait;
+	struct device *dev;
+	struct snd_info_entry *proc_entry;
+};
+
+struct snd_seq_port_info;
+
+struct snd_rawmidi_global_ops {
+	int (*dev_register)(struct snd_rawmidi *);
+	int (*dev_unregister)(struct snd_rawmidi *);
+	void (*get_port_info)(struct snd_rawmidi *, int, struct snd_seq_port_info *);
+	long (*ioctl)(struct snd_rawmidi *, unsigned int, void __attribute__((btf_type_tag("user"))) *);
+	void (*proc_read)(struct snd_info_entry *, struct snd_info_buffer *);
+};
+
+struct snd_rawmidi_runtime {
+	struct snd_rawmidi_substream *substream;
+	unsigned int drain: 1;
+	unsigned int oss: 1;
+	unsigned char *buffer;
+	size_t buffer_size;
+	size_t appl_ptr;
+	size_t hw_ptr;
+	size_t avail_min;
+	size_t avail;
+	size_t xruns;
+	size_t align;
+	int buffer_ref;
+	wait_queue_head_t sleep;
+	void (*event)(struct snd_rawmidi_substream *);
+	struct work_struct event_work;
+	void *private_data;
+	void (*private_free)(struct snd_rawmidi_substream *);
+};
+
+struct uac1_ac_header_descriptor_1 {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 bcdADC;
+	__le16 wTotalLength;
+	__u8 bInCollection;
+	__u8 baInterfaceNr[1];
+} __attribute__((packed));
+
+struct usb_ms_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 bcdMSC;
+	__le16 wTotalLength;
+} __attribute__((packed));
+
+struct usb_ms_endpoint_descriptor_16 {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bNumEmbMIDIJack;
+	__u8 baAssocJackID[16];
+};
+
+enum {
+	STATE_INITIAL = 0,
+	STATE_1PARAM = 1,
+	STATE_2PARAM_1 = 2,
+	STATE_2PARAM_2 = 3,
+	STATE_SYSEX_0 = 4,
+	STATE_SYSEX_1 = 5,
+	STATE_SYSEX_2 = 6,
+	STATE_REAL_TIME = 7,
+	STATE_FINISHED = 8,
+};
+
+enum {
+	SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
+	SNDRV_RAWMIDI_STREAM_INPUT = 1,
+	SNDRV_RAWMIDI_STREAM_LAST = 1,
+};
+
+struct f_midi_info {
+	struct device *dev;
+	int card_number;
+	u32 rmidi_device;
+	bool configured;
+	spinlock_t lock;
+};
+
+struct f_midi_opts {
+	struct usb_function_instance func_inst;
+	int index;
+	char *id;
+	bool id_allocated;
+	unsigned int in_ports;
+	unsigned int out_ports;
+	unsigned int buflen;
+	unsigned int qlen;
+	struct mutex lock;
+	int refcnt;
+	struct f_midi_info android_midi_info;
+};
+
+struct gmidi_in_port {
+	struct snd_rawmidi_substream *substream;
+	int active;
+	uint8_t cable;
+	uint8_t state;
+	uint8_t data[2];
+};
+
+struct f_midi {
+	struct usb_function func;
+	struct usb_gadget *gadget;
+	struct usb_ep *in_ep;
+	struct usb_ep *out_ep;
+	struct snd_card *card;
+	struct snd_rawmidi *rmidi;
+	u8 ms_id;
+	struct snd_rawmidi_substream *out_substream[16];
+	unsigned long out_triggered;
+	struct work_struct work;
+	unsigned int in_ports;
+	unsigned int out_ports;
+	int index;
+	char *id;
+	unsigned int buflen;
+	unsigned int qlen;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct usb_request **type;
+			const struct usb_request **const_type;
+			char (*rectype)[0];
+			struct usb_request **ptr;
+			struct usb_request * const *ptr_const;
+		};
+		struct usb_request *buf[0];
+	} in_req_fifo;
+	spinlock_t transmit_lock;
+	unsigned int in_last_port;
+	unsigned char free_ref;
+	struct gmidi_in_port in_ports_array[0];
+};
+
+struct usb_midi_in_jack_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bJackType;
+	__u8 bJackID;
+	__u8 iJack;
+};
+
+struct usb_midi_source_pin {
+	__u8 baSourceID;
+	__u8 baSourcePin;
+};
+
+struct usb_midi_out_jack_descriptor_1 {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bJackType;
+	__u8 bJackID;
+	__u8 bNrInputPins;
+	struct usb_midi_source_pin pins[1];
+	__u8 iJack;
+};
+
+struct hid_class_descriptor {
+	__u8 bDescriptorType;
+	__le16 wDescriptorLength;
+} __attribute__((packed));
+
+struct hid_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdHID;
+	__u8 bCountryCode;
+	__u8 bNumDescriptors;
+	struct hid_class_descriptor desc[1];
+} __attribute__((packed));
+
+struct f_hid_opts {
+	struct usb_function_instance func_inst;
+	int minor;
+	unsigned char subclass;
+	unsigned char protocol;
+	unsigned char no_out_endpoint;
+	unsigned short report_length;
+	unsigned short report_desc_length;
+	unsigned char *report_desc;
+	bool report_desc_alloc;
+	struct mutex lock;
+	int refcnt;
+};
+
+struct f_hidg {
+	unsigned char bInterfaceSubClass;
+	unsigned char bInterfaceProtocol;
+	unsigned char protocol;
+	unsigned char idle;
+	unsigned short report_desc_length;
+	char *report_desc;
+	unsigned short report_length;
+	bool use_out_ep;
+	spinlock_t read_spinlock;
+	wait_queue_head_t read_queue;
+	struct list_head completed_out_req;
+	unsigned int qlen;
+	char *set_report_buf;
+	unsigned int set_report_length;
+	spinlock_t write_spinlock;
+	bool write_pending;
+	wait_queue_head_t write_queue;
+	struct usb_request *req;
+	struct device dev;
+	struct cdev cdev;
+	struct usb_function func;
+	struct usb_ep *in_ep;
+	struct usb_ep *out_ep;
+};
+
+struct f_hidg_req_list {
+	struct usb_request *req;
+	unsigned int pos;
+	struct list_head list;
+};
+
+struct acc_dev {
+	struct usb_function function;
+	struct usb_composite_dev *cdev;
+	spinlock_t lock;
+	struct kref kref;
+	struct usb_ep *ep_in;
+	struct usb_ep *ep_out;
+	bool online;
+	bool disconnected;
+	char manufacturer[256];
+	char model[256];
+	char description[256];
+	char version[256];
+	char uri[256];
+	char serial[256];
+	int string_index;
+	int start_requested;
+	int audio_mode;
+	struct list_head tx_idle;
+	wait_queue_head_t read_wq;
+	wait_queue_head_t write_wq;
+	struct usb_request *rx_req[2];
+	int rx_done;
+	struct delayed_work start_work;
+	struct work_struct getprotocol_work;
+	struct work_struct sendstring_work;
+	struct work_struct hid_work;
+	struct list_head hid_list;
+	struct list_head new_hid_list;
+	struct list_head dead_hid_list;
+};
+
+struct hid_device;
+
+struct hid_report;
+
+struct hid_ll_driver {
+	int (*start)(struct hid_device *);
+	void (*stop)(struct hid_device *);
+	int (*open)(struct hid_device *);
+	void (*close)(struct hid_device *);
+	int (*power)(struct hid_device *, int);
+	int (*parse)(struct hid_device *);
+	void (*request)(struct hid_device *, struct hid_report *, int);
+	int (*wait)(struct hid_device *);
+	int (*raw_request)(struct hid_device *, unsigned char, __u8 *, size_t, unsigned char, int);
+	int (*output_report)(struct hid_device *, __u8 *, size_t);
+	int (*idle)(struct hid_device *, int, int, int);
+	bool (*may_wakeup)(struct hid_device *);
+	unsigned int max_buffer_size;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum hid_type {
+	HID_TYPE_OTHER = 0,
+	HID_TYPE_USBMOUSE = 1,
+	HID_TYPE_USBNONE = 2,
+};
+
+struct hid_report_enum {
+	unsigned int numbered;
+	struct list_head report_list;
+	struct hid_report *report_id_hash[256];
+};
+
+enum hid_battery_status {
+	HID_BATTERY_UNKNOWN = 0,
+	HID_BATTERY_QUERIED = 1,
+	HID_BATTERY_REPORTED = 2,
+};
+
+struct hid_bpf_prog_list;
+
+struct hid_bpf {
+	u8 *device_data;
+	u32 allocated_data;
+	struct hid_bpf_prog_list __attribute__((btf_type_tag("rcu"))) *progs[2];
+	bool destroyed;
+	spinlock_t progs_lock;
+};
+
+struct hid_collection;
+
+struct hid_driver;
+
+struct hid_field;
+
+struct hid_usage;
+
+struct hid_device {
+	__u8 *dev_rdesc;
+	unsigned int dev_rsize;
+	__u8 *rdesc;
+	unsigned int rsize;
+	struct hid_collection *collection;
+	unsigned int collection_size;
+	unsigned int maxcollection;
+	unsigned int maxapplication;
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	enum hid_type type;
+	unsigned int country;
+	struct hid_report_enum report_enum[3];
+	struct work_struct led_work;
+	struct semaphore driver_input_lock;
+	struct device dev;
+	struct hid_driver *driver;
+	void *devres_group_id;
+	const struct hid_ll_driver *ll_driver;
+	struct mutex ll_open_lock;
+	unsigned int ll_open_count;
+	struct power_supply *battery;
+	__s32 battery_capacity;
+	__s32 battery_min;
+	__s32 battery_max;
+	__s32 battery_report_type;
+	__s32 battery_report_id;
+	__s32 battery_charge_status;
+	enum hid_battery_status battery_status;
+	bool battery_avoid_query;
+	ktime_t battery_ratelimit_time;
+	unsigned long status;
+	unsigned int claimed;
+	unsigned int quirks;
+	unsigned int initial_quirks;
+	bool io_started;
+	struct list_head inputs;
+	void *hiddev;
+	void *hidraw;
+	char name[128];
+	char phys[64];
+	char uniq[64];
+	void *driver_data;
+	int (*ff_init)(struct hid_device *);
+	int (*hiddev_connect)(struct hid_device *, unsigned int);
+	void (*hiddev_disconnect)(struct hid_device *);
+	void (*hiddev_hid_event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*hiddev_report_event)(struct hid_device *, struct hid_report *);
+	unsigned short debug;
+	struct dentry *debug_dir;
+	struct dentry *debug_rdesc;
+	struct dentry *debug_events;
+	struct list_head debug_list;
+	spinlock_t debug_list_lock;
+	wait_queue_head_t debug_wait;
+	struct kref ref;
+	unsigned int id;
+	struct hid_bpf bpf;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct hid_collection {
+	int parent_idx;
+	unsigned int type;
+	unsigned int usage;
+	unsigned int level;
+};
+
+enum hid_report_type {
+	HID_INPUT_REPORT = 0,
+	HID_OUTPUT_REPORT = 1,
+	HID_FEATURE_REPORT = 2,
+	HID_REPORT_TYPES = 3,
+};
+
+struct hid_field_entry;
+
+struct hid_report {
+	struct list_head list;
+	struct list_head hidinput_list;
+	struct list_head field_entry_list;
+	unsigned int id;
+	enum hid_report_type type;
+	unsigned int application;
+	struct hid_field *field[256];
+	struct hid_field_entry *field_entries;
+	unsigned int maxfield;
+	unsigned int size;
+	struct hid_device *device;
+	bool tool_active;
+	unsigned int tool;
+	u64 android_kabi_reserved1;
+};
+
+struct hid_input;
+
+struct hid_field {
+	unsigned int physical;
+	unsigned int logical;
+	unsigned int application;
+	struct hid_usage *usage;
+	unsigned int maxusage;
+	unsigned int flags;
+	unsigned int report_offset;
+	unsigned int report_size;
+	unsigned int report_count;
+	unsigned int report_type;
+	__s32 *value;
+	__s32 *new_value;
+	__s32 *usages_priorities;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	bool ignored;
+	struct hid_report *report;
+	unsigned int index;
+	struct hid_input *hidinput;
+	__u16 dpad;
+	unsigned int slot_idx;
+};
+
+struct hid_usage {
+	unsigned int hid;
+	unsigned int collection_index;
+	unsigned int usage_index;
+	__s8 resolution_multiplier;
+	__s8 wheel_factor;
+	__u16 code;
+	__u8 type;
+	__s8 hat_min;
+	__s8 hat_max;
+	__s8 hat_dir;
+	__s16 wheel_accumulated;
+};
+
+struct hid_input {
+	struct list_head list;
+	struct hid_report *report;
+	struct input_dev *input;
+	const char *name;
+	struct list_head reports;
+	unsigned int application;
+	bool registered;
+	u64 android_kabi_reserved1;
+};
+
+struct hid_field_entry {
+	struct list_head list;
+	struct hid_field *field;
+	unsigned int index;
+	__s32 priority;
+};
+
+struct hid_device_id;
+
+struct hid_report_id;
+
+struct hid_usage_id;
+
+struct hid_driver {
+	char *name;
+	const struct hid_device_id *id_table;
+	struct list_head dyn_list;
+	spinlock_t dyn_lock;
+	bool (*match)(struct hid_device *, bool);
+	int (*probe)(struct hid_device *, const struct hid_device_id *);
+	void (*remove)(struct hid_device *);
+	const struct hid_report_id *report_table;
+	int (*raw_event)(struct hid_device *, struct hid_report *, u8 *, int);
+	const struct hid_usage_id *usage_table;
+	int (*event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*report)(struct hid_device *, struct hid_report *);
+	__u8 * (*report_fixup)(struct hid_device *, __u8 *, unsigned int *);
+	int (*input_mapping)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, unsigned long **, int *);
+	int (*input_mapped)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, unsigned long **, int *);
+	int (*input_configured)(struct hid_device *, struct hid_input *);
+	void (*feature_mapping)(struct hid_device *, struct hid_field *, struct hid_usage *);
+	int (*suspend)(struct hid_device *, pm_message_t);
+	int (*resume)(struct hid_device *);
+	int (*reset_resume)(struct hid_device *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	struct device_driver driver;
+};
+
+struct hid_device_id {
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	kernel_ulong_t driver_data;
+};
+
+struct hid_report_id {
+	__u32 report_type;
+};
+
+struct hid_usage_id {
+	__u32 usage_hid;
+	__u32 usage_type;
+	__u32 usage_code;
+};
+
+struct hid_bpf_prog_list {
+	u16 prog_idx[64];
+	u8 prog_cnt;
+};
+
+struct acc_hid_dev {
+	struct list_head list;
+	struct hid_device *hid;
+	struct acc_dev *dev;
+	int id;
+	u8 *report_desc;
+	int report_desc_len;
+	int report_desc_offset;
+};
+
+struct acc_instance {
+	struct usb_function_instance func_inst;
+	const char *name;
+};
+
+enum typec_data_role {
+	TYPEC_DEVICE = 0,
+	TYPEC_HOST = 1,
+};
+
+enum typec_role {
+	TYPEC_SINK = 0,
+	TYPEC_SOURCE = 1,
+};
+
+enum typec_pwr_opmode {
+	TYPEC_PWR_MODE_USB = 0,
+	TYPEC_PWR_MODE_1_5A = 1,
+	TYPEC_PWR_MODE_3_0A = 2,
+	TYPEC_PWR_MODE_PD = 3,
+};
+
+enum typec_port_type {
+	TYPEC_PORT_SRC = 0,
+	TYPEC_PORT_SNK = 1,
+	TYPEC_PORT_DRP = 2,
+};
+
+enum typec_orientation {
+	TYPEC_ORIENTATION_NONE = 0,
+	TYPEC_ORIENTATION_NORMAL = 1,
+	TYPEC_ORIENTATION_REVERSE = 2,
+};
+
+enum typec_port_data {
+	TYPEC_PORT_DFP = 0,
+	TYPEC_PORT_UFP = 1,
+	TYPEC_PORT_DRD = 2,
+};
+
+enum usb_pd_svdm_ver {
+	SVDM_VER_1_0 = 0,
+	SVDM_VER_2_0 = 1,
+	SVDM_VER_MAX = 1,
+};
+
+enum typec_accessory {
+	TYPEC_ACCESSORY_NONE = 0,
+	TYPEC_ACCESSORY_AUDIO = 1,
+	TYPEC_ACCESSORY_DEBUG = 2,
+};
+
+enum typec_plug_index {
+	TYPEC_PLUG_SOP_P = 0,
+	TYPEC_PLUG_SOP_PP = 1,
+};
+
+enum typec_plug_type {
+	USB_PLUG_NONE = 0,
+	USB_PLUG_TYPE_A = 1,
+	USB_PLUG_TYPE_B = 2,
+	USB_PLUG_TYPE_C = 3,
+	USB_PLUG_CAPTIVE = 4,
+};
+
+struct usb_power_delivery;
+
+struct typec_switch;
+
+struct typec_mux;
+
+struct typec_retimer;
+
+struct typec_capability;
+
+struct typec_operations;
+
+struct typec_port {
+	unsigned int id;
+	struct device dev;
+	struct ida mode_ids;
+	struct usb_power_delivery *pd;
+	int prefer_role;
+	enum typec_data_role data_role;
+	enum typec_role pwr_role;
+	enum typec_role vconn_role;
+	enum typec_pwr_opmode pwr_opmode;
+	enum typec_port_type port_type;
+	struct mutex port_type_lock;
+	enum typec_orientation orientation;
+	struct typec_switch *sw;
+	struct typec_mux *mux;
+	struct typec_retimer *retimer;
+	const struct typec_capability *cap;
+	const struct typec_operations *ops;
+	u64 android_kabi_reserved1;
+};
+
+struct usb_power_delivery {
+	struct device dev;
+	int id;
+	u16 revision;
+	u16 version;
+};
+
+struct typec_capability {
+	enum typec_port_type type;
+	enum typec_port_data data;
+	u16 revision;
+	u16 pd_revision;
+	enum usb_pd_svdm_ver svdm_version;
+	int prefer_role;
+	enum typec_accessory accessory[3];
+	unsigned int orientation_aware: 1;
+	struct fwnode_handle *fwnode;
+	void *driver_data;
+	struct usb_power_delivery *pd;
+	const struct typec_operations *ops;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct typec_operations {
+	int (*try_role)(struct typec_port *, int);
+	int (*dr_set)(struct typec_port *, enum typec_data_role);
+	int (*pr_set)(struct typec_port *, enum typec_role);
+	int (*vconn_set)(struct typec_port *, enum typec_role);
+	int (*port_type_set)(struct typec_port *, enum typec_port_type);
+	struct usb_power_delivery ** (*pd_get)(struct typec_port *);
+	int (*pd_set)(struct typec_port *, struct usb_power_delivery *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct typec_altmode_ops;
+
+struct typec_altmode {
+	struct device dev;
+	u16 svid;
+	int mode;
+	u32 vdo;
+	unsigned int active: 1;
+	char *desc;
+	const struct typec_altmode_ops *ops;
+	u64 android_kabi_reserved1;
+};
+
+struct altmode {
+	unsigned int id;
+	struct typec_altmode adev;
+	struct typec_mux *mux;
+	struct typec_retimer *retimer;
+	enum typec_port_data roles;
+	struct attribute *attrs[5];
+	char group_name[8];
+	struct attribute_group group;
+	const struct attribute_group *groups[2];
+	struct altmode *partner;
+	struct altmode *plug[2];
+	u64 android_kabi_reserved1;
+};
+
+struct typec_altmode_ops {
+	int (*enter)(struct typec_altmode *, u32 *);
+	int (*exit)(struct typec_altmode *);
+	void (*attention)(struct typec_altmode *, u32);
+	int (*vdm)(struct typec_altmode *, const u32, const u32 *, int);
+	int (*notify)(struct typec_altmode *, unsigned long, void *);
+	int (*activate)(struct typec_altmode *, int);
+	u64 android_kabi_reserved1;
+};
+
+struct usb_pd_identity;
+
+struct typec_cable {
+	struct device dev;
+	enum typec_plug_type type;
+	struct usb_pd_identity *identity;
+	unsigned int active: 1;
+	u16 pd_revision;
+	u64 android_kabi_reserved1;
+};
+
+struct usb_pd_identity {
+	u32 id_header;
+	u32 cert_stat;
+	u32 product;
+	u32 vdo[3];
+};
+
+struct typec_partner {
+	struct device dev;
+	unsigned int usb_pd: 1;
+	struct usb_pd_identity *identity;
+	enum typec_accessory accessory;
+	struct ida mode_ids;
+	int num_altmodes;
+	u16 pd_revision;
+	enum usb_pd_svdm_ver svdm_version;
+	struct usb_power_delivery *pd;
+	u64 android_kabi_reserved1;
+};
+
+struct typec_plug {
+	struct device dev;
+	enum typec_plug_index index;
+	struct ida mode_ids;
+	int num_altmodes;
+	u64 android_kabi_reserved1;
+};
+
+struct typec_device_id {
+	__u16 svid;
+	__u8 mode;
+	kernel_ulong_t driver_data;
+};
+
+struct usb_power_delivery_desc {
+	u16 revision;
+	u16 version;
+};
+
+struct typec_mux_state {
+	struct typec_altmode *alt;
+	unsigned long mode;
+	void *data;
+};
+
+struct typec_altmode_desc {
+	u16 svid;
+	u8 mode;
+	u32 vdo;
+	enum typec_port_data roles;
+};
+
+struct typec_partner_desc {
+	unsigned int usb_pd: 1;
+	enum typec_accessory accessory;
+	struct usb_pd_identity *identity;
+	u16 pd_revision;
+};
+
+struct typec_plug_desc {
+	enum typec_plug_index index;
+};
+
+struct typec_cable_desc {
+	enum typec_plug_type type;
+	unsigned int active: 1;
+	struct usb_pd_identity *identity;
+	u16 pd_revision;
+};
+
+struct typec_switch_dev;
+
+typedef int (*typec_switch_set_fn_t)(struct typec_switch_dev *, enum typec_orientation);
+
+struct typec_switch_dev {
+	struct device dev;
+	typec_switch_set_fn_t set;
+	u64 android_kabi_reserved1;
+};
+
+struct typec_mux_dev;
+
+typedef int (*typec_mux_set_fn_t)(struct typec_mux_dev *, struct typec_mux_state *);
+
+struct typec_mux_dev {
+	struct device dev;
+	typec_mux_set_fn_t set;
+	u64 android_kabi_reserved1;
+};
+
+struct typec_switch {
+	struct typec_switch_dev *sw_devs[3];
+	unsigned int num_sw_devs;
+};
+
+struct typec_mux {
+	struct typec_mux_dev *mux_devs[3];
+	unsigned int num_mux_devs;
+};
+
+struct typec_switch_desc {
+	struct fwnode_handle *fwnode;
+	typec_switch_set_fn_t set;
+	const char *name;
+	void *drvdata;
+};
+
+struct typec_mux_desc {
+	struct fwnode_handle *fwnode;
+	typec_mux_set_fn_t set;
+	const char *name;
+	void *drvdata;
+};
+
+enum {
+	TYPEC_STATE_SAFE = 0,
+	TYPEC_STATE_USB = 1,
+	TYPEC_STATE_MODAL = 2,
+};
+
+struct typec_retimer_state;
+
+typedef int (*typec_retimer_set_fn_t)(struct typec_retimer *, struct typec_retimer_state *);
+
+struct typec_retimer {
+	struct device dev;
+	typec_retimer_set_fn_t set;
+};
+
+struct typec_retimer_state {
+	struct typec_altmode *alt;
+	unsigned long mode;
+	void *data;
+};
+
+struct typec_altmode_driver {
+	const struct typec_device_id *id_table;
+	int (*probe)(struct typec_altmode *);
+	void (*remove)(struct typec_altmode *);
+	struct device_driver driver;
+};
+
+enum pd_pdo_type {
+	PDO_TYPE_FIXED = 0,
+	PDO_TYPE_BATT = 1,
+	PDO_TYPE_VAR = 2,
+	PDO_TYPE_APDO = 3,
+};
+
+enum pd_apdo_type {
+	APDO_TYPE_PPS = 0,
+};
+
+struct usb_power_delivery_capabilities {
+	struct device dev;
+	struct usb_power_delivery *pd;
+	enum typec_role role;
+};
+
+struct pdo {
+	struct device dev;
+	int object_position;
+	u32 pdo;
+};
+
+struct usb_power_delivery_capabilities_desc {
+	u32 pdo[7];
+	enum typec_role role;
+};
+
+struct typec_retimer_desc {
+	struct fwnode_handle *fwnode;
+	typec_retimer_set_fn_t set;
+	const char *name;
+	void *drvdata;
+};
+
+enum dp_state {
+	DP_STATE_IDLE = 0,
+	DP_STATE_ENTER = 1,
+	DP_STATE_UPDATE = 2,
+	DP_STATE_CONFIGURE = 3,
+	DP_STATE_EXIT = 4,
+};
+
+enum {
+	DP_PIN_ASSIGN_A = 0,
+	DP_PIN_ASSIGN_B = 1,
+	DP_PIN_ASSIGN_C = 2,
+	DP_PIN_ASSIGN_D = 3,
+	DP_PIN_ASSIGN_E = 4,
+	DP_PIN_ASSIGN_F = 5,
+};
+
+enum {
+	DP_CONF_USB = 0,
+	DP_CONF_DFP_D = 1,
+	DP_CONF_UFP_D = 2,
+	DP_CONF_DUAL_D = 3,
+};
+
+struct typec_displayport_data {
+	u32 status;
+	u32 conf;
+};
+
+struct dp_altmode {
+	struct typec_displayport_data data;
+	enum dp_state state;
+	bool hpd;
+	bool pending_hpd;
+	struct mutex lock;
+	struct work_struct work;
+	struct typec_altmode *alt;
+	const struct typec_altmode *port;
+	struct fwnode_handle *connector_fwnode;
+};
+
+enum typec_cc_status {
+	TYPEC_CC_OPEN = 0,
+	TYPEC_CC_RA = 1,
+	TYPEC_CC_RD = 2,
+	TYPEC_CC_RP_DEF = 3,
+	TYPEC_CC_RP_1_5 = 4,
+	TYPEC_CC_RP_3_0 = 5,
+};
+
+enum typec_cc_polarity {
+	TYPEC_POLARITY_CC1 = 0,
+	TYPEC_POLARITY_CC2 = 1,
+};
+
+enum tcpm_transmit_type {
+	TCPC_TX_SOP = 0,
+	TCPC_TX_SOP_PRIME = 1,
+	TCPC_TX_SOP_PRIME_PRIME = 2,
+	TCPC_TX_SOP_DEBUG_PRIME = 3,
+	TCPC_TX_SOP_DEBUG_PRIME_PRIME = 4,
+	TCPC_TX_HARD_RESET = 5,
+	TCPC_TX_CABLE_RESET = 6,
+	TCPC_TX_BIST_MODE_2 = 7,
+};
+
+enum pd_msg_request {
+	PD_MSG_NONE = 0,
+	PD_MSG_CTRL_REJECT = 1,
+	PD_MSG_CTRL_WAIT = 2,
+	PD_MSG_CTRL_NOT_SUPP = 3,
+	PD_MSG_DATA_SINK_CAP = 4,
+	PD_MSG_DATA_SOURCE_CAP = 5,
+};
+
+enum tcpm_state {
+	INVALID_STATE = 0,
+	TOGGLING = 1,
+	CHECK_CONTAMINANT = 2,
+	SRC_UNATTACHED = 3,
+	SRC_ATTACH_WAIT = 4,
+	SRC_ATTACHED = 5,
+	SRC_STARTUP = 6,
+	SRC_SEND_CAPABILITIES = 7,
+	SRC_SEND_CAPABILITIES_TIMEOUT = 8,
+	SRC_NEGOTIATE_CAPABILITIES = 9,
+	SRC_TRANSITION_SUPPLY = 10,
+	SRC_READY = 11,
+	SRC_WAIT_NEW_CAPABILITIES = 12,
+	SNK_UNATTACHED = 13,
+	SNK_ATTACH_WAIT = 14,
+	SNK_DEBOUNCED = 15,
+	SNK_ATTACHED = 16,
+	SNK_STARTUP = 17,
+	SNK_DISCOVERY = 18,
+	SNK_DISCOVERY_DEBOUNCE = 19,
+	SNK_DISCOVERY_DEBOUNCE_DONE = 20,
+	SNK_WAIT_CAPABILITIES = 21,
+	SNK_NEGOTIATE_CAPABILITIES = 22,
+	SNK_NEGOTIATE_PPS_CAPABILITIES = 23,
+	SNK_TRANSITION_SINK = 24,
+	SNK_TRANSITION_SINK_VBUS = 25,
+	SNK_READY = 26,
+	ACC_UNATTACHED = 27,
+	DEBUG_ACC_ATTACHED = 28,
+	AUDIO_ACC_ATTACHED = 29,
+	AUDIO_ACC_DEBOUNCE = 30,
+	HARD_RESET_SEND = 31,
+	HARD_RESET_START = 32,
+	SRC_HARD_RESET_VBUS_OFF = 33,
+	SRC_HARD_RESET_VBUS_ON = 34,
+	SNK_HARD_RESET_SINK_OFF = 35,
+	SNK_HARD_RESET_WAIT_VBUS = 36,
+	SNK_HARD_RESET_SINK_ON = 37,
+	SOFT_RESET = 38,
+	SRC_SOFT_RESET_WAIT_SNK_TX = 39,
+	SNK_SOFT_RESET = 40,
+	SOFT_RESET_SEND = 41,
+	DR_SWAP_ACCEPT = 42,
+	DR_SWAP_SEND = 43,
+	DR_SWAP_SEND_TIMEOUT = 44,
+	DR_SWAP_CANCEL = 45,
+	DR_SWAP_CHANGE_DR = 46,
+	PR_SWAP_ACCEPT = 47,
+	PR_SWAP_SEND = 48,
+	PR_SWAP_SEND_TIMEOUT = 49,
+	PR_SWAP_CANCEL = 50,
+	PR_SWAP_START = 51,
+	PR_SWAP_SRC_SNK_TRANSITION_OFF = 52,
+	PR_SWAP_SRC_SNK_SOURCE_OFF = 53,
+	PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED = 54,
+	PR_SWAP_SRC_SNK_SINK_ON = 55,
+	PR_SWAP_SNK_SRC_SINK_OFF = 56,
+	PR_SWAP_SNK_SRC_SOURCE_ON = 57,
+	PR_SWAP_SNK_SRC_SOURCE_ON_VBUS_RAMPED_UP = 58,
+	VCONN_SWAP_ACCEPT = 59,
+	VCONN_SWAP_SEND = 60,
+	VCONN_SWAP_SEND_TIMEOUT = 61,
+	VCONN_SWAP_CANCEL = 62,
+	VCONN_SWAP_START = 63,
+	VCONN_SWAP_WAIT_FOR_VCONN = 64,
+	VCONN_SWAP_TURN_ON_VCONN = 65,
+	VCONN_SWAP_TURN_OFF_VCONN = 66,
+	FR_SWAP_SEND = 67,
+	FR_SWAP_SEND_TIMEOUT = 68,
+	FR_SWAP_SNK_SRC_TRANSITION_TO_OFF = 69,
+	FR_SWAP_SNK_SRC_NEW_SINK_READY = 70,
+	FR_SWAP_SNK_SRC_SOURCE_VBUS_APPLIED = 71,
+	FR_SWAP_CANCEL = 72,
+	SNK_TRY = 73,
+	SNK_TRY_WAIT = 74,
+	SNK_TRY_WAIT_DEBOUNCE = 75,
+	SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS = 76,
+	SRC_TRYWAIT = 77,
+	SRC_TRYWAIT_DEBOUNCE = 78,
+	SRC_TRYWAIT_UNATTACHED = 79,
+	SRC_TRY = 80,
+	SRC_TRY_WAIT = 81,
+	SRC_TRY_DEBOUNCE = 82,
+	SNK_TRYWAIT = 83,
+	SNK_TRYWAIT_DEBOUNCE = 84,
+	SNK_TRYWAIT_VBUS = 85,
+	BIST_RX = 86,
+	GET_STATUS_SEND = 87,
+	GET_STATUS_SEND_TIMEOUT = 88,
+	GET_PPS_STATUS_SEND = 89,
+	GET_PPS_STATUS_SEND_TIMEOUT = 90,
+	GET_SINK_CAP = 91,
+	GET_SINK_CAP_TIMEOUT = 92,
+	ERROR_RECOVERY = 93,
+	PORT_RESET = 94,
+	PORT_RESET_WAIT_OFF = 95,
+	AMS_START = 96,
+	CHUNK_NOT_SUPP = 97,
+};
+
+enum tcpm_transmit_status {
+	TCPC_TX_SUCCESS = 0,
+	TCPC_TX_DISCARDED = 1,
+	TCPC_TX_FAILED = 2,
+};
+
+enum vdm_states {
+	VDM_STATE_ERR_BUSY = -3,
+	VDM_STATE_ERR_SEND = -2,
+	VDM_STATE_ERR_TMOUT = -1,
+	VDM_STATE_DONE = 0,
+	VDM_STATE_READY = 1,
+	VDM_STATE_BUSY = 2,
+	VDM_STATE_WAIT_RSP_BUSY = 3,
+	VDM_STATE_SEND_MESSAGE = 4,
+};
+
+enum frs_typec_current {
+	FRS_NOT_SUPPORTED = 0,
+	FRS_DEFAULT_POWER = 1,
+	FRS_5V_1P5A = 2,
+	FRS_5V_3A = 3,
+};
+
+enum tcpm_ams {
+	NONE_AMS = 0,
+	POWER_NEGOTIATION = 1,
+	GOTOMIN = 2,
+	SOFT_RESET_AMS = 3,
+	HARD_RESET = 4,
+	CABLE_RESET = 5,
+	GET_SOURCE_CAPABILITIES = 6,
+	GET_SINK_CAPABILITIES = 7,
+	POWER_ROLE_SWAP = 8,
+	FAST_ROLE_SWAP = 9,
+	DATA_ROLE_SWAP = 10,
+	VCONN_SWAP = 11,
+	SOURCE_ALERT = 12,
+	GETTING_SOURCE_EXTENDED_CAPABILITIES = 13,
+	GETTING_SOURCE_SINK_STATUS = 14,
+	GETTING_BATTERY_CAPABILITIES = 15,
+	GETTING_BATTERY_STATUS = 16,
+	GETTING_MANUFACTURER_INFORMATION = 17,
+	SECURITY = 18,
+	FIRMWARE_UPDATE = 19,
+	DISCOVER_IDENTITY = 20,
+	SOURCE_STARTUP_CABLE_PLUG_DISCOVER_IDENTITY = 21,
+	DISCOVER_SVIDS = 22,
+	DISCOVER_MODES = 23,
+	DFP_TO_UFP_ENTER_MODE = 24,
+	DFP_TO_UFP_EXIT_MODE = 25,
+	DFP_TO_CABLE_PLUG_ENTER_MODE = 26,
+	DFP_TO_CABLE_PLUG_EXIT_MODE = 27,
+	ATTENTION = 28,
+	BIST = 29,
+	UNSTRUCTURED_VDMS = 30,
+	STRUCTURED_VDMS = 31,
+	COUNTRY_INFO = 32,
+	COUNTRY_CODES = 33,
+};
+
+enum pd_ctrl_msg_type {
+	PD_CTRL_GOOD_CRC = 1,
+	PD_CTRL_GOTO_MIN = 2,
+	PD_CTRL_ACCEPT = 3,
+	PD_CTRL_REJECT = 4,
+	PD_CTRL_PING = 5,
+	PD_CTRL_PS_RDY = 6,
+	PD_CTRL_GET_SOURCE_CAP = 7,
+	PD_CTRL_GET_SINK_CAP = 8,
+	PD_CTRL_DR_SWAP = 9,
+	PD_CTRL_PR_SWAP = 10,
+	PD_CTRL_VCONN_SWAP = 11,
+	PD_CTRL_WAIT = 12,
+	PD_CTRL_SOFT_RESET = 13,
+	PD_CTRL_NOT_SUPP = 16,
+	PD_CTRL_GET_SOURCE_CAP_EXT = 17,
+	PD_CTRL_GET_STATUS = 18,
+	PD_CTRL_FR_SWAP = 19,
+	PD_CTRL_GET_PPS_STATUS = 20,
+	PD_CTRL_GET_COUNTRY_CODES = 21,
+};
+
+enum pd_ext_msg_type {
+	PD_EXT_SOURCE_CAP_EXT = 1,
+	PD_EXT_STATUS = 2,
+	PD_EXT_GET_BATT_CAP = 3,
+	PD_EXT_GET_BATT_STATUS = 4,
+	PD_EXT_BATT_CAP = 5,
+	PD_EXT_GET_MANUFACTURER_INFO = 6,
+	PD_EXT_MANUFACTURER_INFO = 7,
+	PD_EXT_SECURITY_REQUEST = 8,
+	PD_EXT_SECURITY_RESPONSE = 9,
+	PD_EXT_FW_UPDATE_REQUEST = 10,
+	PD_EXT_FW_UPDATE_RESPONSE = 11,
+	PD_EXT_PPS_STATUS = 12,
+	PD_EXT_COUNTRY_INFO = 13,
+	PD_EXT_COUNTRY_CODES = 14,
+};
+
+enum pd_data_msg_type {
+	PD_DATA_SOURCE_CAP = 1,
+	PD_DATA_REQUEST = 2,
+	PD_DATA_BIST = 3,
+	PD_DATA_SINK_CAP = 4,
+	PD_DATA_BATT_STATUS = 5,
+	PD_DATA_ALERT = 6,
+	PD_DATA_GET_COUNTRY_INFO = 7,
+	PD_DATA_ENTER_USB = 8,
+	PD_DATA_VENDOR_DEF = 15,
+};
+
+enum pdo_err {
+	PDO_NO_ERR = 0,
+	PDO_ERR_NO_VSAFE5V = 1,
+	PDO_ERR_VSAFE5V_NOT_FIRST = 2,
+	PDO_ERR_PDO_TYPE_NOT_IN_ORDER = 3,
+	PDO_ERR_FIXED_NOT_SORTED = 4,
+	PDO_ERR_VARIABLE_BATT_NOT_SORTED = 5,
+	PDO_ERR_DUPE_PDO = 6,
+	PDO_ERR_PPS_APDO_NOT_SORTED = 7,
+	PDO_ERR_DUPE_PPS_APDO = 8,
+};
+
+enum adev_actions {
+	ADEV_NONE = 0,
+	ADEV_NOTIFY_USB_AND_QUEUE_VDM = 1,
+	ADEV_QUEUE_VDM = 2,
+	ADEV_QUEUE_VDM_SEND_EXIT_MODE_ON_FAIL = 3,
+	ADEV_ATTENTION = 4,
+};
+
+enum tcpm_psy_online_states {
+	TCPM_PSY_OFFLINE = 0,
+	TCPM_PSY_FIXED_ONLINE = 1,
+	TCPM_PSY_PROG_ONLINE = 2,
+};
+
+struct pd_chunked_ext_message_data {
+	__le16 header;
+	u8 data[26];
+};
+
+struct pd_message {
+	__le16 header;
+	union {
+		__le32 payload[7];
+		struct pd_chunked_ext_message_data ext_msg;
+	};
+} __attribute__((packed));
+
+struct tcpm_port;
+
+struct pd_rx_event {
+	struct kthread_work work;
+	struct tcpm_port *port;
+	struct pd_message msg;
+};
+
+struct pd_pps_data {
+	u32 min_volt;
+	u32 req_min_volt;
+	u32 max_volt;
+	u32 req_max_volt;
+	u32 max_curr;
+	u32 req_max_curr;
+	u32 req_out_volt;
+	u32 req_op_curr;
+	bool supported;
+	bool active;
+};
+
+struct pd_mode_data {
+	int svid_index;
+	int nsvids;
+	u16 svids[16];
+	int altmodes;
+	struct typec_altmode_desc altmode_desc[96];
+};
+
+struct tcpc_dev;
+
+struct pd_data;
+
+struct tcpm_port {
+	struct device *dev;
+	struct mutex lock;
+	struct kthread_worker *wq;
+	struct typec_capability typec_caps;
+	struct typec_port *typec_port;
+	struct tcpc_dev *tcpc;
+	struct usb_role_switch *role_sw;
+	enum typec_role vconn_role;
+	enum typec_role pwr_role;
+	enum typec_data_role data_role;
+	enum typec_pwr_opmode pwr_opmode;
+	struct usb_pd_identity partner_ident;
+	struct typec_partner_desc partner_desc;
+	struct typec_partner *partner;
+	enum typec_cc_status cc_req;
+	enum typec_cc_status src_rp;
+	enum typec_cc_status cc1;
+	enum typec_cc_status cc2;
+	enum typec_cc_polarity polarity;
+	bool attached;
+	bool connected;
+	bool registered;
+	bool pd_supported;
+	enum typec_port_type port_type;
+	bool vbus_present;
+	bool vbus_vsafe0v;
+	bool vbus_never_low;
+	bool vbus_source;
+	bool vbus_charge;
+	bool send_discover;
+	bool op_vsafe5v;
+	int try_role;
+	int try_snk_count;
+	int try_src_count;
+	enum pd_msg_request queued_message;
+	enum tcpm_state enter_state;
+	enum tcpm_state prev_state;
+	enum tcpm_state state;
+	enum tcpm_state delayed_state;
+	ktime_t delayed_runtime;
+	unsigned long delay_ms;
+	spinlock_t pd_event_lock;
+	u32 pd_events;
+	struct kthread_work event_work;
+	struct hrtimer state_machine_timer;
+	struct kthread_work state_machine;
+	struct hrtimer vdm_state_machine_timer;
+	struct kthread_work vdm_state_machine;
+	struct hrtimer enable_frs_timer;
+	struct kthread_work enable_frs;
+	struct hrtimer send_discover_timer;
+	struct kthread_work send_discover_work;
+	bool state_machine_running;
+	bool vdm_sm_running;
+	struct completion tx_complete;
+	enum tcpm_transmit_status tx_status;
+	struct mutex swap_lock;
+	bool swap_pending;
+	bool non_pd_role_swap;
+	struct completion swap_complete;
+	int swap_status;
+	unsigned int negotiated_rev;
+	unsigned int message_id;
+	unsigned int caps_count;
+	unsigned int hard_reset_count;
+	bool pd_capable;
+	bool explicit_contract;
+	unsigned int rx_msgid;
+	struct usb_power_delivery **pds;
+	struct pd_data **pd_list;
+	struct usb_power_delivery_capabilities *port_source_caps;
+	struct usb_power_delivery_capabilities *port_sink_caps;
+	struct usb_power_delivery *partner_pd;
+	struct usb_power_delivery_capabilities *partner_source_caps;
+	struct usb_power_delivery_capabilities *partner_sink_caps;
+	struct usb_power_delivery *selected_pd;
+	u32 sink_request;
+	u32 source_caps[7];
+	unsigned int nr_source_caps;
+	u32 sink_caps[7];
+	unsigned int nr_sink_caps;
+	unsigned int pd_count;
+	u32 src_pdo[7];
+	unsigned int nr_src_pdo;
+	u32 snk_pdo[7];
+	unsigned int nr_snk_pdo;
+	u32 snk_vdo_v1[6];
+	unsigned int nr_snk_vdo_v1;
+	u32 snk_vdo[6];
+	unsigned int nr_snk_vdo;
+	unsigned int operating_snk_mw;
+	bool update_sink_caps;
+	u32 req_current_limit;
+	u32 req_supply_voltage;
+	u32 current_limit;
+	u32 supply_voltage;
+	struct power_supply *psy;
+	struct power_supply_desc psy_desc;
+	enum power_supply_usb_type usb_type;
+	u32 bist_request;
+	enum vdm_states vdm_state;
+	u32 vdm_retries;
+	u32 vdo_data[7];
+	u8 vdo_count;
+	u32 vdo_retry;
+	struct pd_pps_data pps_data;
+	struct completion pps_complete;
+	bool pps_pending;
+	int pps_status;
+	struct pd_mode_data mode_data;
+	struct typec_altmode *partner_altmode[96];
+	struct typec_altmode *port_altmode[96];
+	unsigned long max_wait;
+	bool self_powered;
+	enum frs_typec_current new_source_frs_current;
+	bool sink_cap_done;
+	enum tcpm_state upcoming_state;
+	enum tcpm_ams ams;
+	enum tcpm_ams next_ams;
+	bool in_ams;
+	bool auto_vbus_discharge_enabled;
+	bool slow_charger_loop;
+	bool potential_contaminant;
+	struct dentry *dentry;
+	struct mutex logbuffer_lock;
+	int logbuffer_head;
+	int logbuffer_tail;
+	u8 *logbuffer[1024];
+};
+
+struct tcpc_dev {
+	struct fwnode_handle *fwnode;
+	int (*init)(struct tcpc_dev *);
+	int (*get_vbus)(struct tcpc_dev *);
+	int (*get_current_limit)(struct tcpc_dev *);
+	int (*set_cc)(struct tcpc_dev *, enum typec_cc_status);
+	int (*apply_rc)(struct tcpc_dev *, enum typec_cc_status, enum typec_cc_polarity);
+	int (*get_cc)(struct tcpc_dev *, enum typec_cc_status *, enum typec_cc_status *);
+	int (*set_polarity)(struct tcpc_dev *, enum typec_cc_polarity);
+	int (*set_vconn)(struct tcpc_dev *, bool);
+	int (*set_vbus)(struct tcpc_dev *, bool, bool);
+	int (*set_current_limit)(struct tcpc_dev *, u32, u32);
+	int (*set_pd_rx)(struct tcpc_dev *, bool);
+	int (*set_roles)(struct tcpc_dev *, bool, enum typec_role, enum typec_data_role);
+	int (*start_toggling)(struct tcpc_dev *, enum typec_port_type, enum typec_cc_status);
+	int (*try_role)(struct tcpc_dev *, int);
+	int (*pd_transmit)(struct tcpc_dev *, enum tcpm_transmit_type, const struct pd_message *, unsigned int);
+	int (*set_bist_data)(struct tcpc_dev *, bool);
+	int (*enable_frs)(struct tcpc_dev *, bool);
+	void (*frs_sourcing_vbus)(struct tcpc_dev *);
+	int (*enable_auto_vbus_discharge)(struct tcpc_dev *, bool);
+	int (*set_auto_vbus_discharge_threshold)(struct tcpc_dev *, enum typec_pwr_opmode, bool, u32);
+	bool (*is_vbus_vsafe0v)(struct tcpc_dev *);
+	void (*set_partner_usb_comm_capable)(struct tcpc_dev *, bool);
+	void (*check_contaminant)(struct tcpc_dev *);
+};
+
+struct pd_data {
+	struct usb_power_delivery *pd;
+	struct usb_power_delivery_capabilities *source_cap;
+	struct usb_power_delivery_capabilities_desc source_desc;
+	struct usb_power_delivery_capabilities *sink_cap;
+	struct usb_power_delivery_capabilities_desc sink_desc;
+	unsigned int operating_snk_mw;
+};
+
+struct power_supply_config {
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	void *drv_data;
+	const struct attribute_group **attr_grp;
+	char **supplied_to;
+	size_t num_supplicants;
+	u64 android_kabi_reserved1;
+};
+
+struct tcpci_data;
+
+struct tcpci {
+	struct device *dev;
+	struct tcpm_port *port;
+	struct regmap *regmap;
+	unsigned int alert_mask;
+	bool controls_vbus;
+	struct tcpc_dev tcpc;
+	struct tcpci_data *data;
+};
+
+struct tcpci_data {
+	struct regmap *regmap;
+	unsigned char TX_BUF_BYTE_x_hidden: 1;
+	unsigned char auto_discharge_disconnect: 1;
+	unsigned char vbus_vsafe0v: 1;
+	int (*init)(struct tcpci *, struct tcpci_data *);
+	int (*set_vconn)(struct tcpci *, struct tcpci_data *, bool);
+	int (*start_drp_toggling)(struct tcpci *, struct tcpci_data *, enum typec_cc_status);
+	int (*set_vbus)(struct tcpci *, struct tcpci_data *, bool, bool);
+	void (*frs_sourcing_vbus)(struct tcpci *, struct tcpci_data *);
+	void (*set_partner_usb_comm_capable)(struct tcpci *, struct tcpci_data *, bool);
+	void (*check_contaminant)(struct tcpci *, struct tcpci_data *);
+};
+
+struct tcpci_chip {
+	struct tcpci *tcpci;
+	struct tcpci_data data;
+};
+
+enum {
+	TYPEC_MODE_USB2 = 2,
+	TYPEC_MODE_USB3 = 3,
+	TYPEC_MODE_USB4 = 4,
+	TYPEC_MODE_AUDIO = 5,
+	TYPEC_MODE_DEBUG = 6,
+};
+
+struct ucsi_connector;
+
+struct ucsi_work {
+	struct delayed_work work;
+	struct list_head node;
+	unsigned long delay;
+	unsigned int count;
+	struct ucsi_connector *con;
+	int (*cb)(struct ucsi_connector *);
+};
+
+struct ucsi_connector_status {
+	u16 change;
+	u16 flags;
+	u32 request_data_obj;
+	u8 pwr_status;
+} __attribute__((packed));
+
+struct ucsi_connector_capability {
+	u8 op_mode;
+	u8 flags;
+};
+
+struct ucsi;
+
+struct ucsi_connector {
+	int num;
+	struct ucsi *ucsi;
+	struct mutex lock;
+	struct work_struct work;
+	struct completion complete;
+	struct workqueue_struct *wq;
+	struct list_head partner_tasks;
+	struct typec_port *port;
+	struct typec_partner *partner;
+	struct typec_altmode *port_altmode[30];
+	struct typec_altmode *partner_altmode[30];
+	struct typec_capability typec_cap;
+	struct ucsi_connector_status status;
+	struct ucsi_connector_capability cap;
+	struct power_supply *psy;
+	struct power_supply_desc psy_desc;
+	u32 rdo;
+	u32 src_pdos[7];
+	int num_pdos;
+	struct usb_power_delivery *pd;
+	struct usb_power_delivery_capabilities *port_source_caps;
+	struct usb_power_delivery_capabilities *port_sink_caps;
+	struct usb_power_delivery *partner_pd;
+	struct usb_power_delivery_capabilities *partner_source_caps;
+	struct usb_power_delivery_capabilities *partner_sink_caps;
+	struct usb_role_switch *usb_role_sw;
+};
+
+struct driver_data;
+
+struct ucsi_capability {
+	u32 attributes;
+	u8 num_connectors;
+	u8 features;
+	u16 reserved_1;
+	u8 num_alt_modes;
+	u8 reserved_2;
+	u16 bc_version;
+	u16 pd_version;
+	u16 typec_version;
+};
+
+struct ucsi_operations;
+
+struct ucsi_debugfs_entry;
+
+struct ucsi {
+	u16 version;
+	struct device *dev;
+	struct driver_data *driver_data;
+	const struct ucsi_operations *ops;
+	struct ucsi_capability cap;
+	struct ucsi_connector *connector;
+	struct ucsi_debugfs_entry *debugfs;
+	struct work_struct resume_work;
+	struct delayed_work work;
+	int work_count;
+	struct mutex ppm_lock;
+	u64 ntfy;
+	unsigned long flags;
+};
+
+struct ucsi_altmode;
+
+struct ucsi_operations {
+	int (*read)(struct ucsi *, unsigned int, void *, size_t);
+	int (*sync_write)(struct ucsi *, unsigned int, const void *, size_t);
+	int (*async_write)(struct ucsi *, unsigned int, const void *, size_t);
+	bool (*update_altmodes)(struct ucsi *, struct ucsi_altmode *, struct ucsi_altmode *);
+};
+
+struct ucsi_altmode {
+	u16 svid;
+	u32 mid;
+} __attribute__((packed));
+
+struct ucsi_data {
+	u64 low;
+	u64 high;
+};
+
+struct ucsi_debugfs_entry {
+	u64 command;
+	struct ucsi_data response;
+	u32 status;
+	struct dentry *dentry;
+};
+
+typedef void (*btf_trace_ucsi_run_command)(void *, u64, int);
+
+typedef void (*btf_trace_ucsi_reset_ppm)(void *, u64, int);
+
+typedef void (*btf_trace_ucsi_connector_change)(void *, int, struct ucsi_connector_status *);
+
+typedef void (*btf_trace_ucsi_register_port)(void *, int, struct ucsi_connector_status *);
+
+typedef void (*btf_trace_ucsi_register_altmode)(void *, u8, struct typec_altmode *);
+
+struct trace_event_raw_ucsi_log_command {
+	struct trace_entry ent;
+	u64 ctrl;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ucsi_log_connector_status {
+	struct trace_entry ent;
+	int port;
+	u16 change;
+	u8 opmode;
+	u8 connected;
+	u8 pwr_dir;
+	u8 partner_flags;
+	u8 partner_type;
+	u32 request_data_obj;
+	u8 bc_status;
+	char __data[0];
+};
+
+struct trace_event_raw_ucsi_log_register_altmode {
+	struct trace_entry ent;
+	u8 recipient;
+	u16 svid;
+	u8 mode;
+	u32 vdo;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ucsi_log_command {};
+
+struct trace_event_data_offsets_ucsi_log_connector_status {};
+
+struct trace_event_data_offsets_ucsi_log_register_altmode {};
+
+enum ucsi_psy_online_states {
+	UCSI_PSY_OFFLINE = 0,
+	UCSI_PSY_FIXED_ONLINE = 1,
+	UCSI_PSY_PROG_ONLINE = 2,
+};
+
+enum {
+	POWER_SUPPLY_SCOPE_UNKNOWN = 0,
+	POWER_SUPPLY_SCOPE_SYSTEM = 1,
+	POWER_SUPPLY_SCOPE_DEVICE = 2,
+};
+
+struct ucsi_dp {
+	struct typec_displayport_data data;
+	struct ucsi_connector *con;
+	struct typec_altmode *alt;
+	struct work_struct work;
+	int offset;
+	bool override;
+	bool initialized;
+	u32 header;
+	u32 *vdo_data;
+	u8 vdo_size;
+};
+
+struct usb_role_switch {
+	struct device dev;
+	struct mutex lock;
+	struct module *module;
+	enum usb_role role;
+	bool registered;
+	struct device *usb2_port;
+	struct device *usb3_port;
+	struct device *udc;
+	usb_role_switch_set_t set;
+	usb_role_switch_get_t get;
+	bool allow_userspace_control;
+};
+
+enum serio_event_type {
+	SERIO_RESCAN_PORT = 0,
+	SERIO_RECONNECT_PORT = 1,
+	SERIO_RECONNECT_SUBTREE = 2,
+	SERIO_REGISTER_PORT = 3,
+	SERIO_ATTACH_DRIVER = 4,
+};
+
+struct serio_device_id {
+	__u8 type;
+	__u8 extra;
+	__u8 id;
+	__u8 proto;
+};
+
+struct serio_driver;
+
+struct serio {
+	void *port_data;
+	char name[32];
+	char phys[32];
+	char firmware_id[128];
+	bool manual_bind;
+	struct serio_device_id id;
+	spinlock_t lock;
+	int (*write)(struct serio *, unsigned char);
+	int (*open)(struct serio *);
+	void (*close)(struct serio *);
+	int (*start)(struct serio *);
+	void (*stop)(struct serio *);
+	struct serio *parent;
+	struct list_head child_node;
+	struct list_head children;
+	unsigned int depth;
+	struct serio_driver *drv;
+	struct mutex drv_mutex;
+	struct device dev;
+	struct list_head node;
+	struct mutex *ps2_cmd_mutex;
+	u64 android_kabi_reserved1;
+};
+
+struct serio_driver {
+	const char *description;
+	const struct serio_device_id *id_table;
+	bool manual_bind;
+	void (*write_wakeup)(struct serio *);
+	irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);
+	int (*connect)(struct serio *, struct serio_driver *);
+	int (*reconnect)(struct serio *);
+	int (*fast_reconnect)(struct serio *);
+	void (*disconnect)(struct serio *);
+	void (*cleanup)(struct serio *);
+	struct device_driver driver;
+	u64 android_kabi_reserved1;
+};
+
+struct serio_event {
+	enum serio_event_type type;
+	void *object;
+	struct module *owner;
+	struct list_head node;
+};
+
+struct serport___2 {
+	struct tty_struct *tty;
+	wait_queue_head_t wait;
+	struct serio *serio;
+	struct serio_device_id id;
+	spinlock_t lock;
+	unsigned long flags;
+};
+
+enum ps2_disposition {
+	PS2_PROCESS = 0,
+	PS2_IGNORE = 1,
+	PS2_ERROR = 2,
+};
+
+struct ps2dev;
+
+typedef enum ps2_disposition (*ps2_pre_receive_handler_t)(struct ps2dev *, u8, unsigned int);
+
+typedef void (*ps2_receive_handler_t)(struct ps2dev *, u8);
+
+struct ps2dev {
+	struct serio *serio;
+	struct mutex cmd_mutex;
+	wait_queue_head_t wait;
+	unsigned long flags;
+	u8 cmdbuf[8];
+	u8 cmdcnt;
+	u8 nak;
+	ps2_pre_receive_handler_t pre_receive_handler;
+	ps2_receive_handler_t receive_handler;
+};
+
+enum input_clock_type {
+	INPUT_CLK_REAL = 0,
+	INPUT_CLK_MONO = 1,
+	INPUT_CLK_BOOT = 2,
+	INPUT_CLK_MAX = 3,
+};
+
+struct input_mt_slot {
+	int abs[14];
+	unsigned int frame;
+	unsigned int key;
+};
+
+struct input_mt {
+	int trkid;
+	int num_slots;
+	int slot;
+	unsigned int flags;
+	unsigned int frame;
+	int *red;
+	struct input_mt_slot slots[0];
+};
+
+union input_seq_state {
+	struct {
+		unsigned short pos;
+		bool mutex_acquired;
+	};
+	void *p;
+};
+
+struct input_devres {
+	struct input_dev *input;
+};
+
+struct ff_periodic_effect_compat {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+	struct ff_envelope envelope;
+	__u32 custom_len;
+	compat_uptr_t custom_data;
+};
+
+struct ff_effect_compat {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect_compat periodic;
+		struct ff_condition_effect condition[2];
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+struct input_event_compat {
+	compat_ulong_t sec;
+	compat_ulong_t usec;
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct input_event {
+	__kernel_ulong_t __sec;
+	__kernel_ulong_t __usec;
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct input_mt_pos {
+	s16 x;
+	s16 y;
+};
+
+struct input_dev_poller {
+	void (*poll)(struct input_dev *);
+	unsigned int poll_interval;
+	unsigned int poll_interval_max;
+	unsigned int poll_interval_min;
+	struct input_dev *input;
+	struct delayed_work work;
+};
+
+struct touchscreen_properties {
+	unsigned int max_x;
+	unsigned int max_y;
+	bool invert_x;
+	bool invert_y;
+	bool swap_x_y;
+};
+
+struct ml_effect_state {
+	struct ff_effect *effect;
+	unsigned long flags;
+	int count;
+	unsigned long play_at;
+	unsigned long stop_at;
+	unsigned long adj_at;
+};
+
+struct ml_device {
+	void *private;
+	struct ml_effect_state states[16];
+	int gain;
+	struct timer_list timer;
+	struct input_dev *dev;
+	int (*play_effect)(struct input_dev *, void *, struct ff_effect *);
+};
+
+struct vivaldi_data {
+	u32 function_row_physmap[24];
+	unsigned int num_function_row_keys;
+};
+
+struct input_led {
+	struct led_classdev cdev;
+	struct input_handle *handle;
+	unsigned int code;
+};
+
+struct input_leds {
+	struct input_handle handle;
+	unsigned int num_leds;
+	struct input_led leds[0];
+};
+
+struct evdev;
+
+struct evdev_client {
+	unsigned int head;
+	unsigned int tail;
+	unsigned int packet_head;
+	spinlock_t buffer_lock;
+	wait_queue_head_t wait;
+	struct fasync_struct *fasync;
+	struct evdev *evdev;
+	struct list_head node;
+	enum input_clock_type clk_type;
+	bool revoked;
+	unsigned long *evmasks[32];
+	unsigned int bufsize;
+	struct input_event buffer[0];
+};
+
+struct evdev {
+	int open;
+	struct input_handle handle;
+	struct evdev_client __attribute__((btf_type_tag("rcu"))) *grab;
+	struct list_head client_list;
+	spinlock_t client_lock;
+	struct mutex mutex;
+	struct device dev;
+	struct cdev cdev;
+	bool exist;
+};
+
+struct input_mask {
+	__u32 type;
+	__u32 codes_size;
+	__u64 codes_ptr;
+};
+
+struct atkbd {
+	struct ps2dev ps2dev;
+	struct input_dev *dev;
+	char name[64];
+	char phys[32];
+	unsigned short id;
+	unsigned short keycode[512];
+	unsigned long force_release_mask[8];
+	unsigned char set;
+	bool translated;
+	bool extra;
+	bool write;
+	bool softrepeat;
+	bool softraw;
+	bool scroll;
+	bool enabled;
+	unsigned char emul;
+	bool resend;
+	bool release;
+	unsigned long xl_bit;
+	unsigned int last;
+	unsigned long time;
+	unsigned long err_count;
+	struct delayed_work event_work;
+	unsigned long event_jiffies;
+	unsigned long event_mask;
+	struct mutex mutex;
+	struct vivaldi_data vdata;
+};
+
+struct gpio_keys_button {
+	unsigned int code;
+	int gpio;
+	int active_low;
+	const char *desc;
+	unsigned int type;
+	int wakeup;
+	int wakeup_event_action;
+	int debounce_interval;
+	bool can_disable;
+	int value;
+	unsigned int irq;
+};
+
+struct gpio_button_data {
+	const struct gpio_keys_button *button;
+	struct input_dev *input;
+	struct gpio_desc *gpiod;
+	unsigned short *code;
+	struct hrtimer release_timer;
+	unsigned int release_delay;
+	struct delayed_work work;
+	struct hrtimer debounce_timer;
+	unsigned int software_debounce;
+	unsigned int irq;
+	unsigned int wakeup_trigger_type;
+	spinlock_t lock;
+	bool disabled;
+	bool key_pressed;
+	bool suspended;
+	bool debounce_use_hrtimer;
+};
+
+struct gpio_keys_platform_data;
+
+struct gpio_keys_drvdata {
+	const struct gpio_keys_platform_data *pdata;
+	struct input_dev *input;
+	struct mutex disable_lock;
+	unsigned short *keymap;
+	struct gpio_button_data data[0];
+};
+
+struct gpio_keys_platform_data {
+	const struct gpio_keys_button *buttons;
+	int nbuttons;
+	unsigned int poll_interval;
+	unsigned int rep: 1;
+	int (*enable)(struct device *);
+	void (*disable)(struct device *);
+	const char *name;
+};
+
+struct xpad_device {
+	u16 idVendor;
+	u16 idProduct;
+	char *name;
+	u8 mapping;
+	u8 xtype;
+};
+
+struct xboxone_init_packet {
+	u16 idVendor;
+	u16 idProduct;
+	const u8 *data;
+	u8 len;
+};
+
+struct xpad_output_packet {
+	u8 data[64];
+	u8 len;
+	bool pending;
+};
+
+struct usb_xpad {
+	struct input_dev *dev;
+	struct input_dev __attribute__((btf_type_tag("rcu"))) *x360w_dev;
+	struct usb_device *udev;
+	struct usb_interface *intf;
+	bool pad_present;
+	bool input_created;
+	struct urb *irq_in;
+	unsigned char *idata;
+	dma_addr_t idata_dma;
+	struct urb *irq_out;
+	struct usb_anchor irq_out_anchor;
+	bool irq_out_active;
+	u8 odata_serial;
+	unsigned char *odata;
+	dma_addr_t odata_dma;
+	spinlock_t odata_lock;
+	struct xpad_output_packet out_packets[1];
+	int last_out_packet;
+	int init_seq;
+	char phys[64];
+	int mapping;
+	int xtype;
+	int packet_type;
+	int pad_nr;
+	const char *name;
+	struct work_struct work;
+	time64_t mode_btn_down_ts;
+};
+
+enum uinput_state {
+	UIST_NEW_DEVICE = 0,
+	UIST_SETUP_COMPLETE = 1,
+	UIST_CREATED = 2,
+};
+
+struct uinput_request;
+
+struct uinput_device {
+	struct input_dev *dev;
+	struct mutex mutex;
+	enum uinput_state state;
+	wait_queue_head_t waitq;
+	unsigned char ready;
+	unsigned char head;
+	unsigned char tail;
+	struct input_event buff[16];
+	unsigned int ff_effects_max;
+	struct uinput_request *requests[16];
+	wait_queue_head_t requests_waitq;
+	spinlock_t requests_lock;
+};
+
+struct uinput_request {
+	unsigned int id;
+	unsigned int code;
+	int retval;
+	struct completion done;
+	union {
+		unsigned int effect_id;
+		struct {
+			struct ff_effect *effect;
+			struct ff_effect *old;
+		} upload;
+	} u;
+};
+
+struct uinput_user_dev {
+	char name[80];
+	struct input_id id;
+	__u32 ff_effects_max;
+	__s32 absmax[64];
+	__s32 absmin[64];
+	__s32 absfuzz[64];
+	__s32 absflat[64];
+};
+
+struct uinput_ff_upload {
+	__u32 request_id;
+	__s32 retval;
+	struct ff_effect effect;
+	struct ff_effect old;
+};
+
+struct uinput_ff_erase {
+	__u32 request_id;
+	__s32 retval;
+	__u32 effect_id;
+};
+
+struct uinput_setup {
+	struct input_id id;
+	char name[80];
+	__u32 ff_effects_max;
+};
+
+struct uinput_ff_upload_compat {
+	__u32 request_id;
+	__s32 retval;
+	struct ff_effect_compat effect;
+	struct ff_effect_compat old;
+};
+
+struct uinput_abs_setup {
+	__u16 code;
+	struct input_absinfo absinfo;
+};
+
+typedef void (*btf_trace_rtc_set_time)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_read_time)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_set_alarm)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_read_alarm)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_irq_set_freq)(void *, int, int);
+
+typedef void (*btf_trace_rtc_irq_set_state)(void *, int, int);
+
+typedef void (*btf_trace_rtc_alarm_irq_enable)(void *, unsigned int, int);
+
+typedef void (*btf_trace_rtc_set_offset)(void *, long, int);
+
+typedef void (*btf_trace_rtc_read_offset)(void *, long, int);
+
+typedef void (*btf_trace_rtc_timer_enqueue)(void *, struct rtc_timer *);
+
+typedef void (*btf_trace_rtc_timer_dequeue)(void *, struct rtc_timer *);
+
+typedef void (*btf_trace_rtc_timer_fired)(void *, struct rtc_timer *);
+
+enum {
+	none = 0,
+	day = 1,
+	month = 2,
+	year = 3,
+};
+
+struct trace_event_raw_rtc_time_alarm_class {
+	struct trace_entry ent;
+	time64_t secs;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_irq_set_freq {
+	struct trace_entry ent;
+	int freq;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_irq_set_state {
+	struct trace_entry ent;
+	int enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_alarm_irq_enable {
+	struct trace_entry ent;
+	unsigned int enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_offset_class {
+	struct trace_entry ent;
+	long offset;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_timer_class {
+	struct trace_entry ent;
+	struct rtc_timer *timer;
+	ktime_t expires;
+	ktime_t period;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rtc_time_alarm_class {};
+
+struct trace_event_data_offsets_rtc_irq_set_freq {};
+
+struct trace_event_data_offsets_rtc_irq_set_state {};
+
+struct trace_event_data_offsets_rtc_alarm_irq_enable {};
+
+struct trace_event_data_offsets_rtc_offset_class {};
+
+struct trace_event_data_offsets_rtc_timer_class {};
+
+struct pl030_rtc {
+	struct rtc_device *rtc;
+	void *base;
+};
+
+struct pl031_vendor_data {
+	struct rtc_class_ops ops;
+	bool clockwatch;
+	bool st_weekday;
+	unsigned long irqflags;
+	time64_t range_min;
+	timeu64_t range_max;
+};
+
+struct pl031_local {
+	struct pl031_vendor_data *vendor;
+	struct rtc_device *rtc;
+	void *base;
+};
+
+struct i2c_devinfo {
+	struct list_head list;
+	int busnum;
+	struct i2c_board_info board_info;
+};
+
+typedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
+
+struct trace_event_raw_i2c_write {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_read {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_reply {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_result {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 nr_msgs;
+	__s16 ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_i2c_write {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_reply {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_read {};
+
+struct trace_event_data_offsets_i2c_result {};
+
+struct i2c_timings {
+	u32 bus_freq_hz;
+	u32 scl_rise_ns;
+	u32 scl_fall_ns;
+	u32 scl_int_delay_ns;
+	u32 sda_fall_ns;
+	u32 sda_hold_ns;
+	u32 digital_filter_width_ns;
+	u32 analog_filter_cutoff_freq_hz;
+};
+
+struct i2c_cmd_arg {
+	unsigned int cmd;
+	void *arg;
+};
+
+struct i2c_device_identity {
+	u16 manufacturer_id;
+	u16 part_id;
+	u8 die_revision;
+};
+
+typedef void (*btf_trace_smbus_write)(void *, const struct i2c_adapter *, u16, unsigned short, char, u8, int, const union i2c_smbus_data *);
+
+typedef void (*btf_trace_smbus_read)(void *, const struct i2c_adapter *, u16, unsigned short, char, u8, int);
+
+typedef void (*btf_trace_smbus_reply)(void *, const struct i2c_adapter *, u16, unsigned short, char, u8, int, const union i2c_smbus_data *, int);
+
+typedef void (*btf_trace_smbus_result)(void *, const struct i2c_adapter *, u16, unsigned short, char, u8, int, int);
+
+struct trace_event_raw_smbus_write {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 command;
+	__u8 len;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_read {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 flags;
+	__u16 addr;
+	__u8 command;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_reply {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 command;
+	__u8 len;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_result {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 read_write;
+	__u8 command;
+	__s16 res;
+	__u32 protocol;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_smbus_write {};
+
+struct trace_event_data_offsets_smbus_read {};
+
+struct trace_event_data_offsets_smbus_reply {};
+
+struct trace_event_data_offsets_smbus_result {};
+
+struct i2c_smbus_alert_setup {
+	int irq;
+};
+
+enum i3c_error_code {
+	I3C_ERROR_UNKNOWN = 0,
+	I3C_ERROR_M0 = 1,
+	I3C_ERROR_M1 = 2,
+	I3C_ERROR_M2 = 3,
+};
+
+enum i3c_bus_mode {
+	I3C_BUS_MODE_PURE = 0,
+	I3C_BUS_MODE_MIXED_FAST = 1,
+	I3C_BUS_MODE_MIXED_LIMITED = 2,
+	I3C_BUS_MODE_MIXED_SLOW = 3,
+};
+
+struct i3c_dev_desc;
+
+struct i3c_bus {
+	struct i3c_dev_desc *cur_master;
+	int id;
+	unsigned long addrslots[4];
+	enum i3c_bus_mode mode;
+	struct {
+		unsigned long i3c;
+		unsigned long i2c;
+	} scl_rate;
+	struct {
+		struct list_head i3c;
+		struct list_head i2c;
+	} devs;
+	struct rw_semaphore lock;
+};
+
+struct i3c_master_controller;
+
+struct i3c_i2c_dev_desc {
+	struct list_head node;
+	struct i3c_master_controller *master;
+	void *master_priv;
+};
+
+struct i3c_device_info {
+	u64 pid;
+	u8 bcr;
+	u8 dcr;
+	u8 static_addr;
+	u8 dyn_addr;
+	u8 hdr_cap;
+	u8 max_read_ds;
+	u8 max_write_ds;
+	u8 max_ibi_len;
+	u32 max_read_turnaround;
+	u16 max_read_len;
+	u16 max_write_len;
+};
+
+struct i3c_device_ibi_info;
+
+struct i3c_device;
+
+struct i3c_dev_boardinfo;
+
+struct i3c_dev_desc {
+	struct i3c_i2c_dev_desc common;
+	struct i3c_device_info info;
+	struct mutex ibi_lock;
+	struct i3c_device_ibi_info *ibi;
+	struct i3c_device *dev;
+	const struct i3c_dev_boardinfo *boardinfo;
+};
+
+struct i3c_master_controller_ops;
+
+struct i3c_master_controller {
+	struct device dev;
+	struct i3c_dev_desc *this;
+	struct i2c_adapter i2c;
+	const struct i3c_master_controller_ops *ops;
+	unsigned int secondary: 1;
+	unsigned int init_done: 1;
+	struct {
+		struct list_head i3c;
+		struct list_head i2c;
+	} boardinfo;
+	struct i3c_bus bus;
+	struct workqueue_struct *wq;
+};
+
+struct i3c_ccc_cmd;
+
+struct i3c_priv_xfer;
+
+struct i2c_dev_desc;
+
+struct i3c_ibi_setup;
+
+struct i3c_ibi_slot;
+
+struct i3c_master_controller_ops {
+	int (*bus_init)(struct i3c_master_controller *);
+	void (*bus_cleanup)(struct i3c_master_controller *);
+	int (*attach_i3c_dev)(struct i3c_dev_desc *);
+	int (*reattach_i3c_dev)(struct i3c_dev_desc *, u8);
+	void (*detach_i3c_dev)(struct i3c_dev_desc *);
+	int (*do_daa)(struct i3c_master_controller *);
+	bool (*supports_ccc_cmd)(struct i3c_master_controller *, const struct i3c_ccc_cmd *);
+	int (*send_ccc_cmd)(struct i3c_master_controller *, struct i3c_ccc_cmd *);
+	int (*priv_xfers)(struct i3c_dev_desc *, struct i3c_priv_xfer *, int);
+	int (*attach_i2c_dev)(struct i2c_dev_desc *);
+	void (*detach_i2c_dev)(struct i2c_dev_desc *);
+	int (*i2c_xfers)(struct i2c_dev_desc *, const struct i2c_msg *, int);
+	int (*request_ibi)(struct i3c_dev_desc *, const struct i3c_ibi_setup *);
+	void (*free_ibi)(struct i3c_dev_desc *);
+	int (*enable_ibi)(struct i3c_dev_desc *);
+	int (*disable_ibi)(struct i3c_dev_desc *);
+	void (*recycle_ibi_slot)(struct i3c_dev_desc *, struct i3c_ibi_slot *);
+};
+
+struct i3c_ccc_cmd_dest;
+
+struct i3c_ccc_cmd {
+	u8 rnw;
+	u8 id;
+	unsigned int ndests;
+	struct i3c_ccc_cmd_dest *dests;
+	enum i3c_error_code err;
+};
+
+struct i3c_ccc_cmd_payload {
+	u16 len;
+	void *data;
+};
+
+struct i3c_ccc_cmd_dest {
+	u8 addr;
+	struct i3c_ccc_cmd_payload payload;
+};
+
+struct i3c_priv_xfer {
+	u8 rnw;
+	u16 len;
+	union {
+		void *in;
+		const void *out;
+	} data;
+	enum i3c_error_code err;
+};
+
+struct i2c_dev_desc {
+	struct i3c_i2c_dev_desc common;
+	struct i2c_client *dev;
+	u16 addr;
+	u8 lvr;
+};
+
+struct i3c_ibi_payload;
+
+struct i3c_ibi_setup {
+	unsigned int max_payload_len;
+	unsigned int num_slots;
+	void (*handler)(struct i3c_device *, const struct i3c_ibi_payload *);
+};
+
+struct i3c_device {
+	struct device dev;
+	struct i3c_dev_desc *desc;
+	struct i3c_bus *bus;
+};
+
+struct i3c_ibi_payload {
+	unsigned int len;
+	const void *data;
+};
+
+struct i3c_ibi_slot {
+	struct work_struct work;
+	struct i3c_dev_desc *dev;
+	unsigned int len;
+	void *data;
+};
+
+struct i3c_device_ibi_info {
+	struct completion all_ibis_handled;
+	atomic_t pending_ibis;
+	unsigned int max_payload_len;
+	unsigned int num_slots;
+	unsigned int enabled;
+	void (*handler)(struct i3c_device *, const struct i3c_ibi_payload *);
+};
+
+struct i3c_dev_boardinfo {
+	struct list_head node;
+	u8 init_dyn_addr;
+	u8 static_addr;
+	u64 pid;
+	struct device_node *of_node;
+};
+
+struct i3c_device_id {
+	__u8 match_flags;
+	__u8 dcr;
+	__u16 manuf_id;
+	__u16 part_id;
+	__u16 extra_info;
+	const void *data;
+};
+
+struct i3c_driver {
+	struct device_driver driver;
+	int (*probe)(struct i3c_device *);
+	void (*remove)(struct i3c_device *);
+	const struct i3c_device_id *id_table;
+};
+
+enum i3c_addr_slot_status {
+	I3C_ADDR_SLOT_FREE = 0,
+	I3C_ADDR_SLOT_RSVD = 1,
+	I3C_ADDR_SLOT_I2C_DEV = 2,
+	I3C_ADDR_SLOT_I3C_DEV = 3,
+	I3C_ADDR_SLOT_STATUS_MASK = 3,
+};
+
+struct i3c_generic_ibi_slot {
+	struct list_head node;
+	struct i3c_ibi_slot base;
+};
+
+struct i2c_dev_boardinfo {
+	struct list_head node;
+	struct i2c_board_info base;
+	u8 lvr;
+};
+
+struct i3c_ccc_getpid {
+	u8 pid[6];
+};
+
+struct i3c_ccc_getbcr {
+	u8 bcr;
+};
+
+struct i3c_ccc_getdcr {
+	u8 dcr;
+};
+
+struct i3c_generic_ibi_pool {
+	spinlock_t lock;
+	unsigned int num_slots;
+	struct i3c_generic_ibi_slot *slots;
+	void *payload_buf;
+	struct list_head free_slots;
+	struct list_head pending;
+};
+
+struct i3c_ccc_events {
+	u8 events;
+};
+
+struct i3c_ccc_dev_desc {
+	u8 dyn_addr;
+	union {
+		u8 dcr;
+		u8 lvr;
+	};
+	u8 bcr;
+	u8 static_addr;
+};
+
+struct i3c_ccc_defslvs {
+	u8 count;
+	struct i3c_ccc_dev_desc master;
+	struct i3c_ccc_dev_desc slaves[0];
+};
+
+struct i3c_ccc_getmxds {
+	u8 maxwr;
+	u8 maxrd;
+	u8 maxrdturn[3];
+};
+
+struct i3c_ccc_mrl {
+	__be16 read_len;
+	u8 ibi_len;
+} __attribute__((packed));
+
+struct i3c_ccc_mwl {
+	__be16 len;
+};
+
+struct i3c_ccc_gethdrcap {
+	u8 modes;
+};
+
+struct i3c_ccc_setda {
+	u8 addr;
+};
+
+enum rc_proto {
+	RC_PROTO_UNKNOWN = 0,
+	RC_PROTO_OTHER = 1,
+	RC_PROTO_RC5 = 2,
+	RC_PROTO_RC5X_20 = 3,
+	RC_PROTO_RC5_SZ = 4,
+	RC_PROTO_JVC = 5,
+	RC_PROTO_SONY12 = 6,
+	RC_PROTO_SONY15 = 7,
+	RC_PROTO_SONY20 = 8,
+	RC_PROTO_NEC = 9,
+	RC_PROTO_NECX = 10,
+	RC_PROTO_NEC32 = 11,
+	RC_PROTO_SANYO = 12,
+	RC_PROTO_MCIR2_KBD = 13,
+	RC_PROTO_MCIR2_MSE = 14,
+	RC_PROTO_RC6_0 = 15,
+	RC_PROTO_RC6_6A_20 = 16,
+	RC_PROTO_RC6_6A_24 = 17,
+	RC_PROTO_RC6_6A_32 = 18,
+	RC_PROTO_RC6_MCE = 19,
+	RC_PROTO_SHARP = 20,
+	RC_PROTO_XMP = 21,
+	RC_PROTO_CEC = 22,
+	RC_PROTO_IMON = 23,
+	RC_PROTO_RCMM12 = 24,
+	RC_PROTO_RCMM24 = 25,
+	RC_PROTO_RCMM32 = 26,
+	RC_PROTO_XBOX_DVD = 27,
+	RC_PROTO_MAX = 27,
+};
+
+enum rc_driver_type {
+	RC_DRIVER_SCANCODE = 0,
+	RC_DRIVER_IR_RAW = 1,
+	RC_DRIVER_IR_RAW_TX = 2,
+};
+
+enum ir_kbd_get_key_fn {
+	IR_KBD_GET_KEY_CUSTOM = 0,
+	IR_KBD_GET_KEY_PIXELVIEW = 1,
+	IR_KBD_GET_KEY_HAUP = 2,
+	IR_KBD_GET_KEY_KNC1 = 3,
+	IR_KBD_GET_KEY_GENIATECH = 4,
+	IR_KBD_GET_KEY_FUSIONHDTV = 5,
+	IR_KBD_GET_KEY_HAUP_XVR = 6,
+	IR_KBD_GET_KEY_AVERMEDIA_CARDBUS = 7,
+};
+
+struct rc_dev;
+
+struct IR_i2c {
+	char *ir_codes;
+	struct i2c_client *c;
+	struct rc_dev *rc;
+	unsigned char old;
+	u32 polling_interval;
+	struct delayed_work work;
+	char phys[32];
+	int (*get_key)(struct IR_i2c *, enum rc_proto *, u32 *, u8 *);
+	struct i2c_client *tx_c;
+	struct mutex lock;
+	unsigned int carrier;
+	unsigned int duty_cycle;
+};
+
+struct rc_map_table;
+
+struct rc_map {
+	struct rc_map_table *scan;
+	unsigned int size;
+	unsigned int len;
+	unsigned int alloc;
+	enum rc_proto rc_proto;
+	const char *name;
+	spinlock_t lock;
+};
+
+struct rc_scancode_filter {
+	u32 data;
+	u32 mask;
+};
+
+struct ir_raw_event_ctrl;
+
+struct rc_dev {
+	struct device dev;
+	bool managed_alloc;
+	const struct attribute_group *sysfs_groups[5];
+	const char *device_name;
+	const char *input_phys;
+	struct input_id input_id;
+	const char *driver_name;
+	const char *map_name;
+	struct rc_map rc_map;
+	struct mutex lock;
+	unsigned int minor;
+	struct ir_raw_event_ctrl *raw;
+	struct input_dev *input_dev;
+	enum rc_driver_type driver_type;
+	bool idle;
+	bool encode_wakeup;
+	u64 allowed_protocols;
+	u64 enabled_protocols;
+	u64 allowed_wakeup_protocols;
+	enum rc_proto wakeup_protocol;
+	struct rc_scancode_filter scancode_filter;
+	struct rc_scancode_filter scancode_wakeup_filter;
+	u32 scancode_mask;
+	u32 users;
+	void *priv;
+	spinlock_t keylock;
+	bool keypressed;
+	unsigned long keyup_jiffies;
+	struct timer_list timer_keyup;
+	struct timer_list timer_repeat;
+	u32 last_keycode;
+	enum rc_proto last_protocol;
+	u64 last_scancode;
+	u8 last_toggle;
+	u32 timeout;
+	u32 min_timeout;
+	u32 max_timeout;
+	u32 rx_resolution;
+	u32 tx_resolution;
+	struct device lirc_dev;
+	struct cdev lirc_cdev;
+	ktime_t gap_start;
+	spinlock_t lirc_fh_lock;
+	struct list_head lirc_fh;
+	bool registered;
+	int (*change_protocol)(struct rc_dev *, u64 *);
+	int (*open)(struct rc_dev *);
+	void (*close)(struct rc_dev *);
+	int (*s_tx_mask)(struct rc_dev *, u32);
+	int (*s_tx_carrier)(struct rc_dev *, u32);
+	int (*s_tx_duty_cycle)(struct rc_dev *, u32);
+	int (*s_rx_carrier_range)(struct rc_dev *, u32, u32);
+	int (*tx_ir)(struct rc_dev *, unsigned int *, unsigned int);
+	void (*s_idle)(struct rc_dev *, bool);
+	int (*s_wideband_receiver)(struct rc_dev *, int);
+	int (*s_carrier_report)(struct rc_dev *, int);
+	int (*s_filter)(struct rc_dev *, struct rc_scancode_filter *);
+	int (*s_wakeup_filter)(struct rc_dev *, struct rc_scancode_filter *);
+	int (*s_timeout)(struct rc_dev *, unsigned int);
+};
+
+struct rc_map_table {
+	u64 scancode;
+	u32 keycode;
+};
+
+struct code_block {
+	u8 length;
+	u16 pulse[7];
+	u8 carrier_pulse;
+	u8 carrier_space;
+	u16 space[8];
+	u8 codes[61];
+	u8 csum[2];
+} __attribute__((packed));
+
+struct IR_i2c_init_data {
+	char *ir_codes;
+	const char *name;
+	u64 type;
+	u32 polling_interval;
+	int (*get_key)(struct IR_i2c *, enum rc_proto *, u32 *, u8 *);
+	enum ir_kbd_get_key_fn internal_get_key_func;
+	struct rc_dev *rc_dev;
+};
+
+struct media_ioctl_info {
+	unsigned int cmd;
+	unsigned short flags;
+	long (*fn)(struct media_device *, void *);
+	long (*arg_from_user)(void *, void __attribute__((btf_type_tag("user"))) *, unsigned int);
+	long (*arg_to_user)(void __attribute__((btf_type_tag("user"))) *, void *, unsigned int);
+};
+
+enum media_gobj_type {
+	MEDIA_GRAPH_ENTITY = 0,
+	MEDIA_GRAPH_PAD = 1,
+	MEDIA_GRAPH_LINK = 2,
+	MEDIA_GRAPH_INTF_DEVNODE = 3,
+};
+
+struct media_entity_notify {
+	struct list_head list;
+	void *notify_data;
+	void (*notify)(struct media_entity *, void *);
+};
+
+struct media_links_enum32 {
+	__u32 entity;
+	compat_uptr_t pads;
+	compat_uptr_t links;
+	__u32 reserved[4];
+};
+
+struct media_pad_desc;
+
+struct media_link_desc;
+
+struct media_links_enum {
+	__u32 entity;
+	struct media_pad_desc __attribute__((btf_type_tag("user"))) *pads;
+	struct media_link_desc __attribute__((btf_type_tag("user"))) *links;
+	__u32 reserved[4];
+};
+
+struct media_pad_desc {
+	__u32 entity;
+	__u16 index;
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct media_link_desc {
+	struct media_pad_desc source;
+	struct media_pad_desc sink;
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct media_device_info {
+	char driver[16];
+	char model[32];
+	char serial[40];
+	char bus_info[32];
+	__u32 media_version;
+	__u32 hw_revision;
+	__u32 driver_version;
+	__u32 reserved[31];
+};
+
+struct media_entity_desc {
+	__u32 id;
+	char name[32];
+	__u32 type;
+	__u32 revision;
+	__u32 flags;
+	__u32 group_id;
+	__u16 pads;
+	__u16 links;
+	__u32 reserved[4];
+	union {
+		struct {
+			__u32 major;
+			__u32 minor;
+		} dev;
+		__u8 raw[184];
+	};
+};
+
+struct media_v2_entity {
+	__u32 id;
+	char name[64];
+	__u32 function;
+	__u32 flags;
+	__u32 reserved[5];
+};
+
+struct media_v2_intf_devnode {
+	__u32 major;
+	__u32 minor;
+};
+
+struct media_v2_interface {
+	__u32 id;
+	__u32 intf_type;
+	__u32 flags;
+	__u32 reserved[9];
+	union {
+		struct media_v2_intf_devnode devnode;
+		__u32 raw[16];
+	};
+};
+
+struct media_v2_pad {
+	__u32 id;
+	__u32 entity_id;
+	__u32 flags;
+	__u32 index;
+	__u32 reserved[4];
+};
+
+struct media_v2_link {
+	__u32 id;
+	__u32 source_id;
+	__u32 sink_id;
+	__u32 flags;
+	__u32 reserved[6];
+};
+
+struct media_v2_topology {
+	__u64 topology_version;
+	__u32 num_entities;
+	__u32 reserved1;
+	__u64 ptr_entities;
+	__u32 num_interfaces;
+	__u32 reserved2;
+	__u64 ptr_interfaces;
+	__u32 num_pads;
+	__u32 reserved3;
+	__u64 ptr_pads;
+	__u32 num_links;
+	__u32 reserved4;
+	__u64 ptr_links;
+};
+
+struct media_pipeline_pad {
+	struct list_head list;
+	struct media_pipeline *pipe;
+	struct media_pad *pad;
+};
+
+struct media_pipeline_walk_entry;
+
+struct media_pipeline_walk {
+	struct media_device *mdev;
+	struct {
+		unsigned int size;
+		int top;
+		struct media_pipeline_walk_entry *entries;
+	} stack;
+};
+
+struct media_pipeline_walk_entry {
+	struct media_pad *pad;
+	struct list_head *links;
+};
+
+struct media_pipeline_pad_iter {
+	struct list_head *cursor;
+};
+
+struct media_pipeline_entity_iter {
+	struct media_entity_enum ent_enum;
+	struct list_head *cursor;
+};
+
+struct media_device_instance {
+	struct media_device mdev;
+	struct module *owner;
+	struct list_head list;
+	struct kref refcount;
+};
+
+struct v4l2_async_subdev_endpoint {
+	struct list_head async_subdev_endpoint_entry;
+	struct fwnode_handle *endpoint;
+};
+
+enum v4l2_fwnode_bus_type {
+	V4L2_FWNODE_BUS_TYPE_GUESS = 0,
+	V4L2_FWNODE_BUS_TYPE_CSI2_CPHY = 1,
+	V4L2_FWNODE_BUS_TYPE_CSI1 = 2,
+	V4L2_FWNODE_BUS_TYPE_CCP2 = 3,
+	V4L2_FWNODE_BUS_TYPE_CSI2_DPHY = 4,
+	V4L2_FWNODE_BUS_TYPE_PARALLEL = 5,
+	V4L2_FWNODE_BUS_TYPE_BT656 = 6,
+	V4L2_FWNODE_BUS_TYPE_DPI = 7,
+	NR_OF_V4L2_FWNODE_BUS_TYPE = 8,
+};
+
+struct v4l2_fwnode_bus_conv {
+	enum v4l2_fwnode_bus_type fwnode_bus_type;
+	enum v4l2_mbus_type mbus_type;
+	const char *name;
+};
+
+enum v4l2_connector_type {
+	V4L2_CONN_UNKNOWN = 0,
+	V4L2_CONN_COMPOSITE = 1,
+	V4L2_CONN_SVIDEO = 2,
+};
+
+struct v4l2_fwnode_connector_conv {
+	enum v4l2_connector_type type;
+	const char *compatible;
+};
+
+struct v4l2_fwnode_int_props {
+	const char *name;
+	const char * const *props;
+	unsigned int nprops;
+};
+
+enum v4l2_fwnode_orientation {
+	V4L2_FWNODE_ORIENTATION_FRONT = 0,
+	V4L2_FWNODE_ORIENTATION_BACK = 1,
+	V4L2_FWNODE_ORIENTATION_EXTERNAL = 2,
+};
+
+struct v4l2_fwnode_link {
+	struct fwnode_handle *local_node;
+	unsigned int local_port;
+	unsigned int local_id;
+	struct fwnode_handle *remote_node;
+	unsigned int remote_port;
+	unsigned int remote_id;
+};
+
+struct v4l2_connector_link {
+	struct list_head head;
+	struct v4l2_fwnode_link fwnode_link;
+};
+
+struct v4l2_fwnode_endpoint {
+	struct fwnode_endpoint base;
+	enum v4l2_mbus_type bus_type;
+	struct {
+		struct v4l2_mbus_config_parallel parallel;
+		struct v4l2_mbus_config_mipi_csi1 mipi_csi1;
+		struct v4l2_mbus_config_mipi_csi2 mipi_csi2;
+	} bus;
+	u64 *link_frequencies;
+	unsigned int nr_of_link_frequencies;
+};
+
+struct v4l2_fwnode_connector_analog {
+	v4l2_std_id sdtv_stds;
+};
+
+struct v4l2_fwnode_connector {
+	const char *name;
+	const char *label;
+	enum v4l2_connector_type type;
+	struct list_head links;
+	unsigned int nr_of_links;
+	union {
+		struct v4l2_fwnode_connector_analog analog;
+	} connector;
+};
+
+struct v4l2_fwnode_device_properties {
+	enum v4l2_fwnode_orientation orientation;
+	unsigned int rotation;
+};
+
+enum v4l2_video_device_flags {
+	V4L2_FL_REGISTERED = 0,
+	V4L2_FL_USES_V4L2_FH = 1,
+	V4L2_FL_QUIRK_INVERTED_CROP = 2,
+	V4L2_FL_SUBDEV_RO_DEVNODE = 3,
+};
+
+enum v4l2_m2m_entity_type {
+	MEM2MEM_ENT_TYPE_SOURCE = 0,
+	MEM2MEM_ENT_TYPE_SINK = 1,
+	MEM2MEM_ENT_TYPE_PROC = 2,
+};
+
+enum v4l2_memory {
+	V4L2_MEMORY_MMAP = 1,
+	V4L2_MEMORY_USERPTR = 2,
+	V4L2_MEMORY_OVERLAY = 3,
+	V4L2_MEMORY_DMABUF = 4,
+};
+
+struct v4l2_m2m_buffer {
+	struct vb2_v4l2_buffer vb;
+	struct list_head list;
+};
+
+struct v4l2_m2m_queue_ctx {
+	struct vb2_queue q;
+	struct list_head rdy_queue;
+	spinlock_t rdy_spinlock;
+	u8 num_rdy;
+	bool buffered;
+};
+
+struct v4l2_m2m_dev;
+
+struct v4l2_m2m_ctx {
+	struct mutex *q_lock;
+	bool new_frame;
+	bool is_draining;
+	struct vb2_v4l2_buffer *last_src_buf;
+	bool next_buf_last;
+	bool has_stopped;
+	struct v4l2_m2m_dev *m2m_dev;
+	struct v4l2_m2m_queue_ctx cap_q_ctx;
+	struct v4l2_m2m_queue_ctx out_q_ctx;
+	struct list_head queue;
+	unsigned long job_flags;
+	wait_queue_head_t finished;
+	void *priv;
+};
+
+struct v4l2_m2m_ops;
+
+struct v4l2_m2m_dev {
+	struct v4l2_m2m_ctx *curr_ctx;
+	struct media_entity *source;
+	struct media_pad source_pad;
+	struct media_entity sink;
+	struct media_pad sink_pad;
+	struct media_entity proc;
+	struct media_pad proc_pads[2];
+	struct media_intf_devnode *intf_devnode;
+	struct list_head job_queue;
+	spinlock_t job_spinlock;
+	struct work_struct job_work;
+	unsigned long job_queue_flags;
+	const struct v4l2_m2m_ops *m2m_ops;
+};
+
+struct v4l2_m2m_ops {
+	void (*device_run)(void *);
+	int (*job_ready)(void *);
+	void (*job_abort)(void *);
+};
+
+enum v4l2_ycbcr_encoding {
+	V4L2_YCBCR_ENC_DEFAULT = 0,
+	V4L2_YCBCR_ENC_601 = 1,
+	V4L2_YCBCR_ENC_709 = 2,
+	V4L2_YCBCR_ENC_XV601 = 3,
+	V4L2_YCBCR_ENC_XV709 = 4,
+	V4L2_YCBCR_ENC_BT2020 = 6,
+	V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
+	V4L2_YCBCR_ENC_SMPTE240M = 8,
+	V4L2_YCBCR_ENC_LAST = 9,
+};
+
+enum v4l2_quantization {
+	V4L2_QUANTIZATION_DEFAULT = 0,
+	V4L2_QUANTIZATION_FULL_RANGE = 1,
+	V4L2_QUANTIZATION_LIM_RANGE = 2,
+};
+
+enum v4l2_xfer_func {
+	V4L2_XFER_FUNC_DEFAULT = 0,
+	V4L2_XFER_FUNC_709 = 1,
+	V4L2_XFER_FUNC_SRGB = 2,
+	V4L2_XFER_FUNC_OPRGB = 3,
+	V4L2_XFER_FUNC_SMPTE240M = 4,
+	V4L2_XFER_FUNC_NONE = 5,
+	V4L2_XFER_FUNC_DCI_P3 = 6,
+	V4L2_XFER_FUNC_SMPTE2084 = 7,
+	V4L2_XFER_FUNC_LAST = 8,
+};
+
+struct v4l2_hdmi_colorimetry {
+	enum v4l2_colorspace colorspace;
+	enum v4l2_ycbcr_encoding ycbcr_enc;
+	enum v4l2_quantization quantization;
+	enum v4l2_xfer_func xfer_func;
+};
+
+typedef bool v4l2_check_dv_timings_fnc(const struct v4l2_dv_timings *, void *);
+
+struct std_descr {
+	v4l2_std_id std;
+	const char *descr;
+};
+
+struct v4l2_ioctl_info {
+	unsigned int ioctl;
+	u32 flags;
+	const char * const name;
+	int (*func)(const struct v4l2_ioctl_ops *, struct file *, void *, void *);
+	void (*debug)(const void *, bool);
+};
+
+struct v4l2_ctrl;
+
+typedef void (*v4l2_ctrl_notify_fnc)(struct v4l2_ctrl *, void *);
+
+struct v4l2_ctrl_ref;
+
+struct v4l2_ctrl_handler {
+	struct mutex _lock;
+	struct mutex *lock;
+	struct list_head ctrls;
+	struct list_head ctrl_refs;
+	struct v4l2_ctrl_ref *cached;
+	struct v4l2_ctrl_ref **buckets;
+	v4l2_ctrl_notify_fnc notify;
+	void *notify_priv;
+	u16 nr_of_buckets;
+	int error;
+	bool request_is_queued;
+	struct list_head requests;
+	struct list_head requests_queued;
+	struct media_request_object req_obj;
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_ctrl_hdr10_cll_info;
+
+struct v4l2_ctrl_hdr10_mastering_display;
+
+union v4l2_ctrl_ptr {
+	s32 *p_s32;
+	s64 *p_s64;
+	u8 *p_u8;
+	u16 *p_u16;
+	u32 *p_u32;
+	char *p_char;
+	struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
+	struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
+	struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quantisation;
+	struct v4l2_ctrl_fwht_params *p_fwht_params;
+	struct v4l2_ctrl_h264_sps *p_h264_sps;
+	struct v4l2_ctrl_h264_pps *p_h264_pps;
+	struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix;
+	struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
+	struct v4l2_ctrl_h264_decode_params *p_h264_decode_params;
+	struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights;
+	struct v4l2_ctrl_vp8_frame *p_vp8_frame;
+	struct v4l2_ctrl_hevc_sps *p_hevc_sps;
+	struct v4l2_ctrl_hevc_pps *p_hevc_pps;
+	struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
+	struct v4l2_ctrl_vp9_compressed_hdr *p_vp9_compressed_hdr_probs;
+	struct v4l2_ctrl_vp9_frame *p_vp9_frame;
+	struct v4l2_ctrl_hdr10_cll_info *p_hdr10_cll;
+	struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
+	struct v4l2_area *p_area;
+	struct v4l2_ctrl_av1_sequence *p_av1_sequence;
+	struct v4l2_ctrl_av1_tile_group_entry *p_av1_tile_group_entry;
+	struct v4l2_ctrl_av1_frame *p_av1_frame;
+	struct v4l2_ctrl_av1_film_grain *p_av1_film_grain;
+	void *p;
+	const void *p_const;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct v4l2_ctrl_helper;
+
+struct v4l2_ctrl_ref {
+	struct list_head node;
+	struct v4l2_ctrl_ref *next;
+	struct v4l2_ctrl *ctrl;
+	struct v4l2_ctrl_helper *helper;
+	bool from_other_dev;
+	bool req_done;
+	bool p_req_valid;
+	bool p_req_array_enomem;
+	u32 p_req_array_alloc_elems;
+	u32 p_req_elems;
+	union v4l2_ctrl_ptr p_req;
+	u64 android_kabi_reserved1;
+};
+
+enum v4l2_ctrl_type {
+	V4L2_CTRL_TYPE_INTEGER = 1,
+	V4L2_CTRL_TYPE_BOOLEAN = 2,
+	V4L2_CTRL_TYPE_MENU = 3,
+	V4L2_CTRL_TYPE_BUTTON = 4,
+	V4L2_CTRL_TYPE_INTEGER64 = 5,
+	V4L2_CTRL_TYPE_CTRL_CLASS = 6,
+	V4L2_CTRL_TYPE_STRING = 7,
+	V4L2_CTRL_TYPE_BITMASK = 8,
+	V4L2_CTRL_TYPE_INTEGER_MENU = 9,
+	V4L2_CTRL_COMPOUND_TYPES = 256,
+	V4L2_CTRL_TYPE_U8 = 256,
+	V4L2_CTRL_TYPE_U16 = 257,
+	V4L2_CTRL_TYPE_U32 = 258,
+	V4L2_CTRL_TYPE_AREA = 262,
+	V4L2_CTRL_TYPE_HDR10_CLL_INFO = 272,
+	V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY = 273,
+	V4L2_CTRL_TYPE_H264_SPS = 512,
+	V4L2_CTRL_TYPE_H264_PPS = 513,
+	V4L2_CTRL_TYPE_H264_SCALING_MATRIX = 514,
+	V4L2_CTRL_TYPE_H264_SLICE_PARAMS = 515,
+	V4L2_CTRL_TYPE_H264_DECODE_PARAMS = 516,
+	V4L2_CTRL_TYPE_H264_PRED_WEIGHTS = 517,
+	V4L2_CTRL_TYPE_FWHT_PARAMS = 544,
+	V4L2_CTRL_TYPE_VP8_FRAME = 576,
+	V4L2_CTRL_TYPE_MPEG2_QUANTISATION = 592,
+	V4L2_CTRL_TYPE_MPEG2_SEQUENCE = 593,
+	V4L2_CTRL_TYPE_MPEG2_PICTURE = 594,
+	V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR = 608,
+	V4L2_CTRL_TYPE_VP9_FRAME = 609,
+	V4L2_CTRL_TYPE_HEVC_SPS = 624,
+	V4L2_CTRL_TYPE_HEVC_PPS = 625,
+	V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS = 626,
+	V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX = 627,
+	V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS = 628,
+	V4L2_CTRL_TYPE_AV1_SEQUENCE = 640,
+	V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY = 641,
+	V4L2_CTRL_TYPE_AV1_FRAME = 642,
+	V4L2_CTRL_TYPE_AV1_FILM_GRAIN = 643,
+};
+
+struct v4l2_ctrl_ops;
+
+struct v4l2_ctrl_type_ops;
+
+struct v4l2_ctrl {
+	struct list_head node;
+	struct list_head ev_subs;
+	struct v4l2_ctrl_handler *handler;
+	struct v4l2_ctrl **cluster;
+	unsigned int ncontrols;
+	unsigned int done: 1;
+	unsigned int is_new: 1;
+	unsigned int has_changed: 1;
+	unsigned int is_private: 1;
+	unsigned int is_auto: 1;
+	unsigned int is_int: 1;
+	unsigned int is_string: 1;
+	unsigned int is_ptr: 1;
+	unsigned int is_array: 1;
+	unsigned int is_dyn_array: 1;
+	unsigned int has_volatiles: 1;
+	unsigned int call_notify: 1;
+	unsigned int manual_mode_value: 8;
+	const struct v4l2_ctrl_ops *ops;
+	const struct v4l2_ctrl_type_ops *type_ops;
+	u32 id;
+	const char *name;
+	enum v4l2_ctrl_type type;
+	s64 minimum;
+	s64 maximum;
+	s64 default_value;
+	u32 elems;
+	u32 elem_size;
+	u32 new_elems;
+	u32 dims[4];
+	u32 nr_of_dims;
+	union {
+		u64 step;
+		u64 menu_skip_mask;
+	};
+	union {
+		const char * const *qmenu;
+		const s64 *qmenu_int;
+	};
+	unsigned long flags;
+	void *priv;
+	void *p_array;
+	u32 p_array_alloc_elems;
+	s32 val;
+	struct {
+		s32 val;
+	} cur;
+	union v4l2_ctrl_ptr p_def;
+	union v4l2_ctrl_ptr p_new;
+	union v4l2_ctrl_ptr p_cur;
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_ctrl_ops {
+	int (*g_volatile_ctrl)(struct v4l2_ctrl *);
+	int (*try_ctrl)(struct v4l2_ctrl *);
+	int (*s_ctrl)(struct v4l2_ctrl *);
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_ctrl_type_ops {
+	bool (*equal)(const struct v4l2_ctrl *, union v4l2_ctrl_ptr, union v4l2_ctrl_ptr);
+	void (*init)(const struct v4l2_ctrl *, u32, union v4l2_ctrl_ptr);
+	void (*log)(const struct v4l2_ctrl *);
+	int (*validate)(const struct v4l2_ctrl *, union v4l2_ctrl_ptr);
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_ctrl_hdr10_cll_info {
+	__u16 max_content_light_level;
+	__u16 max_pic_average_light_level;
+};
+
+struct v4l2_ctrl_hdr10_mastering_display {
+	__u16 display_primaries_x[3];
+	__u16 display_primaries_y[3];
+	__u16 white_point_x;
+	__u16 white_point_y;
+	__u32 max_display_mastering_luminance;
+	__u32 min_display_mastering_luminance;
+};
+
+enum v4l2_hsv_encoding {
+	V4L2_HSV_ENC_180 = 128,
+	V4L2_HSV_ENC_256 = 129,
+};
+
+enum v4l2_tuner_type {
+	V4L2_TUNER_RADIO = 1,
+	V4L2_TUNER_ANALOG_TV = 2,
+	V4L2_TUNER_DIGITAL_TV = 3,
+	V4L2_TUNER_SDR = 4,
+	V4L2_TUNER_RF = 5,
+};
+
+struct v4l2_subdev_routing {
+	__u32 which;
+	__u32 num_routes;
+	__u64 routes;
+	__u32 reserved[6];
+};
+
+struct v4l2_standard {
+	__u32 index;
+	v4l2_std_id id;
+	__u8 name[24];
+	struct v4l2_fract frameperiod;
+	__u32 framelines;
+	__u32 reserved[4];
+};
+
+typedef long (*v4l2_kioctl)(struct file *, unsigned int, void *);
+
+struct v4l2_cropcap {
+	__u32 type;
+	struct v4l2_rect bounds;
+	struct v4l2_rect defrect;
+	struct v4l2_fract pixelaspect;
+};
+
+struct v4l2_crop {
+	__u32 type;
+	struct v4l2_rect c;
+};
+
+struct v4l2_dbg_match {
+	__u32 type;
+	union {
+		__u32 addr;
+		char name[32];
+	};
+};
+
+struct v4l2_dbg_register {
+	struct v4l2_dbg_match match;
+	__u32 size;
+	__u64 reg;
+	__u64 val;
+};
+
+struct v4l2_dbg_chip_info {
+	struct v4l2_dbg_match match;
+	char name[32];
+	__u32 flags;
+	__u32 reserved[32];
+};
+
+typedef bool (*v4l2_ctrl_filter)(const struct v4l2_ctrl *);
+
+enum v4l2_subdev_routing_restriction {
+	V4L2_SUBDEV_ROUTING_NO_1_TO_N = 1,
+	V4L2_SUBDEV_ROUTING_NO_N_TO_1 = 2,
+	V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX = 4,
+	V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX = 8,
+	V4L2_SUBDEV_ROUTING_NO_SINK_MULTIPLEXING = 16,
+	V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING = 32,
+	V4L2_SUBDEV_ROUTING_ONLY_1_TO_1 = 3,
+	V4L2_SUBDEV_ROUTING_NO_STREAM_MIX = 12,
+	V4L2_SUBDEV_ROUTING_NO_MULTIPLEXING = 48,
+};
+
+struct v4l2_subdev_crop {
+	__u32 which;
+	__u32 pad;
+	struct v4l2_rect rect;
+	__u32 stream;
+	__u32 reserved[7];
+};
+
+struct v4l2_subdev_client_capability {
+	__u64 capabilities;
+};
+
+struct v4l2_subdev_capability {
+	__u32 version;
+	__u32 capabilities;
+	__u32 reserved[14];
+};
+
+struct v4l2_format_info {
+	u32 format;
+	u8 pixel_enc;
+	u8 mem_planes;
+	u8 comp_planes;
+	u8 bpp[4];
+	u8 bpp_div[4];
+	u8 hdiv;
+	u8 vdiv;
+	u8 block_w[4];
+	u8 block_h[4];
+};
+
+struct v4l2_ctrl_config {
+	const struct v4l2_ctrl_ops *ops;
+	const struct v4l2_ctrl_type_ops *type_ops;
+	u32 id;
+	const char *name;
+	enum v4l2_ctrl_type type;
+	s64 min;
+	s64 max;
+	u64 step;
+	s64 def;
+	union v4l2_ctrl_ptr p_def;
+	u32 dims[4];
+	u32 elem_size;
+	u32 flags;
+	u64 menu_skip_mask;
+	const char * const *qmenu;
+	const s64 *qmenu_int;
+	unsigned int is_private: 1;
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_ctrl_helper {
+	struct v4l2_ctrl_ref *mref;
+	struct v4l2_ctrl_ref *ref;
+	u32 next;
+};
+
+struct v4l2_ext_controls32 {
+	__u32 which;
+	__u32 count;
+	__u32 error_idx;
+	__s32 request_fd;
+	__u32 reserved[1];
+	compat_caddr_t controls;
+};
+
+struct v4l2_input32 {
+	__u32 index;
+	__u8 name[32];
+	__u32 type;
+	__u32 audioset;
+	__u32 tuner;
+	compat_u64 std;
+	__u32 status;
+	__u32 capabilities;
+	__u32 reserved[3];
+};
+
+struct v4l2_standard32 {
+	__u32 index;
+	compat_u64 id;
+	__u8 name[24];
+	struct v4l2_fract frameperiod;
+	__u32 framelines;
+	__u32 reserved[4];
+};
+
+struct v4l2_buffer32_time32 {
+	__u32 index;
+	__u32 type;
+	__u32 bytesused;
+	__u32 flags;
+	__u32 field;
+	struct old_timeval32 timestamp;
+	struct v4l2_timecode timecode;
+	__u32 sequence;
+	__u32 memory;
+	union {
+		__u32 offset;
+		compat_long_t userptr;
+		compat_caddr_t planes;
+		__s32 fd;
+	} m;
+	__u32 length;
+	__u32 reserved2;
+	__s32 request_fd;
+};
+
+struct v4l2_framebuffer32 {
+	__u32 capability;
+	__u32 flags;
+	compat_caddr_t base;
+	struct {
+		__u32 width;
+		__u32 height;
+		__u32 pixelformat;
+		__u32 field;
+		__u32 bytesperline;
+		__u32 sizeimage;
+		__u32 colorspace;
+		__u32 priv;
+	} fmt;
+};
+
+struct v4l2_edid32 {
+	__u32 pad;
+	__u32 start_block;
+	__u32 blocks;
+	__u32 reserved[5];
+	compat_caddr_t edid;
+};
+
+struct v4l2_buffer32 {
+	__u32 index;
+	__u32 type;
+	__u32 bytesused;
+	__u32 flags;
+	__u32 field;
+	struct {
+		compat_s64 tv_sec;
+		compat_s64 tv_usec;
+	} timestamp;
+	struct v4l2_timecode timecode;
+	__u32 sequence;
+	__u32 memory;
+	union {
+		__u32 offset;
+		compat_long_t userptr;
+		compat_caddr_t planes;
+		__s32 fd;
+	} m;
+	__u32 length;
+	__u32 reserved2;
+	__s32 request_fd;
+};
+
+struct v4l2_window32 {
+	struct v4l2_rect w;
+	__u32 field;
+	__u32 chromakey;
+	compat_caddr_t clips;
+	__u32 clipcount;
+	compat_caddr_t bitmap;
+	__u8 global_alpha;
+};
+
+struct v4l2_format32 {
+	__u32 type;
+	union {
+		struct v4l2_pix_format pix;
+		struct v4l2_pix_format_mplane pix_mp;
+		struct v4l2_window32 win;
+		struct v4l2_vbi_format vbi;
+		struct v4l2_sliced_vbi_format sliced;
+		struct v4l2_sdr_format sdr;
+		struct v4l2_meta_format meta;
+		__u8 raw_data[200];
+	} fmt;
+};
+
+struct v4l2_create_buffers32 {
+	__u32 index;
+	__u32 count;
+	__u32 memory;
+	struct v4l2_format32 format;
+	__u32 capabilities;
+	__u32 flags;
+	__u32 reserved[6];
+};
+
+struct v4l2_event32_time32 {
+	__u32 type;
+	union {
+		compat_s64 value64;
+		__u8 data[64];
+	} u;
+	__u32 pending;
+	__u32 sequence;
+	struct old_timespec32 timestamp;
+	__u32 id;
+	__u32 reserved[8];
+};
+
+struct v4l2_plane32 {
+	__u32 bytesused;
+	__u32 length;
+	union {
+		__u32 mem_offset;
+		compat_long_t userptr;
+		__s32 fd;
+	} m;
+	__u32 data_offset;
+	__u32 reserved[11];
+};
+
+struct v4l2_ext_control32 {
+	__u32 id;
+	__u32 size;
+	__u32 reserved2[1];
+	union {
+		__s32 value;
+		__s64 value64;
+		compat_caddr_t string;
+	};
+} __attribute__((packed));
+
+typedef void (*btf_trace_v4l2_dqbuf)(void *, int, struct v4l2_buffer *);
+
+typedef void (*btf_trace_v4l2_qbuf)(void *, int, struct v4l2_buffer *);
+
+typedef void (*btf_trace_vb2_v4l2_buf_done)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_v4l2_buf_queue)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_v4l2_dqbuf)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_v4l2_qbuf)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+struct trace_event_raw_v4l2_event_class {
+	struct trace_entry ent;
+	int minor;
+	u32 index;
+	u32 type;
+	u32 bytesused;
+	u32 flags;
+	u32 field;
+	s64 timestamp;
+	u32 timecode_type;
+	u32 timecode_flags;
+	u8 timecode_frames;
+	u8 timecode_seconds;
+	u8 timecode_minutes;
+	u8 timecode_hours;
+	u8 timecode_userbits0;
+	u8 timecode_userbits1;
+	u8 timecode_userbits2;
+	u8 timecode_userbits3;
+	u32 sequence;
+	char __data[0];
+};
+
+struct trace_event_raw_vb2_v4l2_event_class {
+	struct trace_entry ent;
+	int minor;
+	u32 flags;
+	u32 field;
+	u64 timestamp;
+	u32 timecode_type;
+	u32 timecode_flags;
+	u8 timecode_frames;
+	u8 timecode_seconds;
+	u8 timecode_minutes;
+	u8 timecode_hours;
+	u8 timecode_userbits0;
+	u8 timecode_userbits1;
+	u8 timecode_userbits2;
+	u8 timecode_userbits3;
+	u32 sequence;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_v4l2_event_class {};
+
+struct trace_event_data_offsets_vb2_v4l2_event_class {};
+
+enum v4l2_i2c_tuner_type {
+	ADDRS_RADIO = 0,
+	ADDRS_DEMOD = 1,
+	ADDRS_TV = 2,
+	ADDRS_TV_WITH_DEMOD = 3,
+};
+
+enum rc_filter_type {
+	RC_FILTER_NORMAL = 0,
+	RC_FILTER_WAKEUP = 1,
+	RC_FILTER_MAX = 2,
+};
+
+struct rc_filter_attribute {
+	struct device_attribute attr;
+	enum rc_filter_type type;
+	bool mask;
+};
+
+struct rc_map_list {
+	struct list_head list;
+	struct rc_map map;
+};
+
+struct ir_raw_event {
+	union {
+		u32 duration;
+		u32 carrier;
+	};
+	u8 duty_cycle;
+	unsigned int pulse: 1;
+	unsigned int overflow: 1;
+	unsigned int timeout: 1;
+	unsigned int carrier_report: 1;
+};
+
+struct ir_raw_event_ctrl {
+	struct list_head list;
+	struct task_struct *thread;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct ir_raw_event *type;
+			const struct ir_raw_event *const_type;
+			char (*rectype)[0];
+			struct ir_raw_event *ptr;
+			const struct ir_raw_event *ptr_const;
+		};
+		struct ir_raw_event buf[512];
+	} kfifo;
+	ktime_t last_event;
+	struct rc_dev *dev;
+	spinlock_t edge_spinlock;
+	struct timer_list edge_handle;
+	struct ir_raw_event prev_ev;
+	struct ir_raw_event this_ev;
+	u32 bpf_sample;
+	struct bpf_prog_array __attribute__((btf_type_tag("rcu"))) *progs;
+};
+
+struct lirc_scancode {
+	__u64 timestamp;
+	__u16 flags;
+	__u16 rc_proto;
+	__u32 keycode;
+	__u64 scancode;
+};
+
+struct ir_raw_handler {
+	struct list_head list;
+	u64 protocols;
+	int (*decode)(struct rc_dev *, struct ir_raw_event);
+	int (*encode)(enum rc_proto, u32, struct ir_raw_event *, unsigned int);
+	u32 carrier;
+	u32 min_timeout;
+	int (*raw_register)(struct rc_dev *);
+	int (*raw_unregister)(struct rc_dev *);
+};
+
+struct ir_raw_timings_manchester {
+	unsigned int leader_pulse;
+	unsigned int leader_space;
+	unsigned int clock;
+	unsigned int invert: 1;
+	unsigned int trailer_space;
+};
+
+struct ir_raw_timings_pd {
+	unsigned int header_pulse;
+	unsigned int header_space;
+	unsigned int bit_pulse;
+	unsigned int bit_space[2];
+	unsigned int trailer_pulse;
+	unsigned int trailer_space;
+	unsigned int msb_first: 1;
+};
+
+struct ir_raw_timings_pl {
+	unsigned int header_pulse;
+	unsigned int bit_space;
+	unsigned int bit_pulse[2];
+	unsigned int trailer_space;
+	unsigned int msb_first: 1;
+};
+
+struct lirc_fh {
+	struct list_head list;
+	struct rc_dev *rc;
+	int carrier_low;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			unsigned int *type;
+			const unsigned int *const_type;
+			char (*rectype)[0];
+			unsigned int *ptr;
+			const unsigned int *ptr_const;
+		};
+		unsigned int buf[0];
+	} rawir;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct lirc_scancode *type;
+			const struct lirc_scancode *const_type;
+			char (*rectype)[0];
+			struct lirc_scancode *ptr;
+			const struct lirc_scancode *ptr_const;
+		};
+		struct lirc_scancode buf[0];
+	} scancodes;
+	wait_queue_head_t wait_poll;
+	u8 send_mode;
+	u8 rec_mode;
+};
+
+typedef u64 (*btf_bpf_rc_repeat)(u32 *);
+
+typedef u64 (*btf_bpf_rc_keydown)(u32 *, u32, u64, u32);
+
+typedef u64 (*btf_bpf_rc_pointer_rel)(u32 *, s32, s32);
+
+struct cec_devnode {
+	struct device dev;
+	struct cdev cdev;
+	int minor;
+	struct mutex lock;
+	bool registered;
+	bool unregistered;
+	struct mutex lock_fhs;
+	struct list_head fhs;
+};
+
+struct cec_log_addrs {
+	__u8 log_addr[4];
+	__u16 log_addr_mask;
+	__u8 cec_version;
+	__u8 num_log_addrs;
+	__u32 vendor_id;
+	__u32 flags;
+	char osd_name[15];
+	__u8 primary_device_type[4];
+	__u8 log_addr_type[4];
+	__u8 all_device_types[4];
+	__u8 features[48];
+};
+
+struct cec_drm_connector_info {
+	__u32 card_no;
+	__u32 connector_id;
+};
+
+struct cec_connector_info {
+	__u32 type;
+	union {
+		struct cec_drm_connector_info drm;
+		__u32 raw[16];
+	};
+};
+
+struct cec_data;
+
+struct cec_adap_ops;
+
+struct cec_fh;
+
+struct cec_notifier;
+
+struct cec_pin;
+
+struct cec_adapter {
+	struct module *owner;
+	char name[32];
+	struct cec_devnode devnode;
+	struct mutex lock;
+	struct rc_dev *rc;
+	struct list_head transmit_queue;
+	unsigned int transmit_queue_sz;
+	struct list_head wait_queue;
+	struct cec_data *transmitting;
+	bool transmit_in_progress;
+	bool transmit_in_progress_aborted;
+	unsigned int xfer_timeout_ms;
+	struct task_struct *kthread_config;
+	struct completion config_completion;
+	struct task_struct *kthread;
+	wait_queue_head_t kthread_waitq;
+	const struct cec_adap_ops *ops;
+	void *priv;
+	u32 capabilities;
+	u8 available_log_addrs;
+	u16 phys_addr;
+	bool needs_hpd;
+	bool is_enabled;
+	bool is_configuring;
+	bool must_reconfigure;
+	bool is_configured;
+	bool cec_pin_is_high;
+	bool adap_controls_phys_addr;
+	u8 last_initiator;
+	u32 monitor_all_cnt;
+	u32 monitor_pin_cnt;
+	u32 follower_cnt;
+	struct cec_fh *cec_follower;
+	struct cec_fh *cec_initiator;
+	bool passthrough;
+	struct cec_log_addrs log_addrs;
+	struct cec_connector_info conn_info;
+	u32 tx_timeouts;
+	struct cec_notifier *notifier;
+	struct cec_pin *pin;
+	struct dentry *cec_dir;
+	u32 sequence;
+	char input_phys[32];
+};
+
+struct cec_msg {
+	__u64 tx_ts;
+	__u64 rx_ts;
+	__u32 len;
+	__u32 timeout;
+	__u32 sequence;
+	__u32 flags;
+	__u8 msg[16];
+	__u8 reply;
+	__u8 rx_status;
+	__u8 tx_status;
+	__u8 tx_arb_lost_cnt;
+	__u8 tx_nack_cnt;
+	__u8 tx_low_drive_cnt;
+	__u8 tx_error_cnt;
+};
+
+struct cec_data {
+	struct list_head list;
+	struct list_head xfer_list;
+	struct cec_adapter *adap;
+	struct cec_msg msg;
+	struct cec_fh *fh;
+	struct delayed_work work;
+	struct completion c;
+	u8 attempts;
+	bool blocking;
+	bool completed;
+};
+
+struct cec_event_state_change {
+	__u16 phys_addr;
+	__u16 log_addr_mask;
+	__u16 have_conn_info;
+};
+
+struct cec_event_lost_msgs {
+	__u32 lost_msgs;
+};
+
+struct cec_event {
+	__u64 ts;
+	__u32 event;
+	__u32 flags;
+	union {
+		struct cec_event_state_change state_change;
+		struct cec_event_lost_msgs lost_msgs;
+		__u32 raw[16];
+	};
+};
+
+struct cec_event_entry {
+	struct list_head list;
+	struct cec_event ev;
+};
+
+struct cec_fh {
+	struct list_head list;
+	struct list_head xfer_list;
+	struct cec_adapter *adap;
+	u8 mode_initiator;
+	u8 mode_follower;
+	wait_queue_head_t wait;
+	struct mutex lock;
+	struct list_head events[8];
+	u16 queued_events[8];
+	unsigned int total_queued_events;
+	struct cec_event_entry core_events[2];
+	struct list_head msgs;
+	unsigned int queued_msgs;
+};
+
+struct cec_adap_ops {
+	int (*adap_enable)(struct cec_adapter *, bool);
+	int (*adap_monitor_all_enable)(struct cec_adapter *, bool);
+	int (*adap_monitor_pin_enable)(struct cec_adapter *, bool);
+	int (*adap_log_addr)(struct cec_adapter *, u8);
+	void (*adap_unconfigured)(struct cec_adapter *);
+	int (*adap_transmit)(struct cec_adapter *, u8, u32, struct cec_msg *);
+	void (*adap_nb_transmit_canceled)(struct cec_adapter *, const struct cec_msg *);
+	void (*adap_status)(struct cec_adapter *, struct seq_file *);
+	void (*adap_free)(struct cec_adapter *);
+	int (*error_inj_show)(struct cec_adapter *, struct seq_file *);
+	bool (*error_inj_parse_line)(struct cec_adapter *, char *);
+	void (*configured)(struct cec_adapter *);
+	int (*received)(struct cec_adapter *, struct cec_msg *);
+};
+
+struct cec_msg_entry {
+	struct list_head list;
+	struct cec_msg msg;
+};
+
+enum cec_pin_state {
+	CEC_ST_OFF = 0,
+	CEC_ST_IDLE = 1,
+	CEC_ST_TX_WAIT = 2,
+	CEC_ST_TX_WAIT_FOR_HIGH = 3,
+	CEC_ST_TX_START_BIT_LOW = 4,
+	CEC_ST_TX_START_BIT_HIGH = 5,
+	CEC_ST_TX_START_BIT_HIGH_SHORT = 6,
+	CEC_ST_TX_START_BIT_HIGH_LONG = 7,
+	CEC_ST_TX_START_BIT_LOW_CUSTOM = 8,
+	CEC_ST_TX_START_BIT_HIGH_CUSTOM = 9,
+	CEC_ST_TX_DATA_BIT_0_LOW = 10,
+	CEC_ST_TX_DATA_BIT_0_HIGH = 11,
+	CEC_ST_TX_DATA_BIT_0_HIGH_SHORT = 12,
+	CEC_ST_TX_DATA_BIT_0_HIGH_LONG = 13,
+	CEC_ST_TX_DATA_BIT_1_LOW = 14,
+	CEC_ST_TX_DATA_BIT_1_HIGH = 15,
+	CEC_ST_TX_DATA_BIT_1_HIGH_SHORT = 16,
+	CEC_ST_TX_DATA_BIT_1_HIGH_LONG = 17,
+	CEC_ST_TX_DATA_BIT_1_HIGH_PRE_SAMPLE = 18,
+	CEC_ST_TX_DATA_BIT_1_HIGH_POST_SAMPLE = 19,
+	CEC_ST_TX_DATA_BIT_1_HIGH_POST_SAMPLE_SHORT = 20,
+	CEC_ST_TX_DATA_BIT_1_HIGH_POST_SAMPLE_LONG = 21,
+	CEC_ST_TX_DATA_BIT_LOW_CUSTOM = 22,
+	CEC_ST_TX_DATA_BIT_HIGH_CUSTOM = 23,
+	CEC_ST_TX_PULSE_LOW_CUSTOM = 24,
+	CEC_ST_TX_PULSE_HIGH_CUSTOM = 25,
+	CEC_ST_TX_LOW_DRIVE = 26,
+	CEC_ST_RX_START_BIT_LOW = 27,
+	CEC_ST_RX_START_BIT_HIGH = 28,
+	CEC_ST_RX_DATA_SAMPLE = 29,
+	CEC_ST_RX_DATA_POST_SAMPLE = 30,
+	CEC_ST_RX_DATA_WAIT_FOR_LOW = 31,
+	CEC_ST_RX_ACK_LOW = 32,
+	CEC_ST_RX_ACK_LOW_POST = 33,
+	CEC_ST_RX_ACK_HIGH_POST = 34,
+	CEC_ST_RX_ACK_FINISH = 35,
+	CEC_ST_RX_LOW_DRIVE = 36,
+	CEC_ST_RX_IRQ = 37,
+	CEC_PIN_STATES = 38,
+};
+
+struct cec_pin_ops;
+
+struct cec_pin {
+	struct cec_adapter *adap;
+	const struct cec_pin_ops *ops;
+	struct task_struct *kthread;
+	wait_queue_head_t kthread_waitq;
+	struct hrtimer timer;
+	ktime_t ts;
+	unsigned int wait_usecs;
+	u16 la_mask;
+	bool monitor_all;
+	bool rx_eom;
+	bool enabled_irq;
+	bool enable_irq_failed;
+	enum cec_pin_state state;
+	struct cec_msg tx_msg;
+	u32 tx_bit;
+	bool tx_nacked;
+	u32 tx_signal_free_time;
+	bool tx_toggle;
+	struct cec_msg rx_msg;
+	u32 rx_bit;
+	bool rx_toggle;
+	u32 rx_start_bit_low_too_short_cnt;
+	u64 rx_start_bit_low_too_short_ts;
+	u32 rx_start_bit_low_too_short_delta;
+	u32 rx_start_bit_too_short_cnt;
+	u64 rx_start_bit_too_short_ts;
+	u32 rx_start_bit_too_short_delta;
+	u32 rx_start_bit_too_long_cnt;
+	u32 rx_data_bit_too_short_cnt;
+	u64 rx_data_bit_too_short_ts;
+	u32 rx_data_bit_too_short_delta;
+	u32 rx_data_bit_too_long_cnt;
+	u32 rx_low_drive_cnt;
+	struct cec_msg work_rx_msg;
+	u8 work_tx_status;
+	ktime_t work_tx_ts;
+	atomic_t work_irq_change;
+	atomic_t work_pin_num_events;
+	unsigned int work_pin_events_wr;
+	unsigned int work_pin_events_rd;
+	ktime_t work_pin_ts[128];
+	u8 work_pin_events[128];
+	bool work_pin_events_dropped;
+	u32 work_pin_events_dropped_cnt;
+	ktime_t timer_ts;
+	u32 timer_cnt;
+	u32 timer_100us_overruns;
+	u32 timer_300us_overruns;
+	u32 timer_max_overrun;
+	u32 timer_sum_overrun;
+	u32 tx_custom_low_usecs;
+	u32 tx_custom_high_usecs;
+	bool tx_ignore_nack_until_eom;
+	bool tx_custom_pulse;
+	bool tx_generated_poll;
+	bool tx_post_eom;
+	u8 tx_extra_bytes;
+	u32 tx_low_drive_cnt;
+};
+
+struct cec_pin_ops {
+	int (*read)(struct cec_adapter *);
+	void (*low)(struct cec_adapter *);
+	void (*high)(struct cec_adapter *);
+	bool (*enable_irq)(struct cec_adapter *);
+	void (*disable_irq)(struct cec_adapter *);
+	void (*free)(struct cec_adapter *);
+	void (*status)(struct cec_adapter *, struct seq_file *);
+	int (*read_hpd)(struct cec_adapter *);
+	int (*read_5v)(struct cec_adapter *);
+	int (*received)(struct cec_adapter *, struct cec_msg *);
+};
+
+struct cec_caps {
+	char driver[32];
+	char name[32];
+	__u32 available_log_addrs;
+	__u32 capabilities;
+	__u32 version;
+};
+
+struct cec_notifier {
+	struct mutex lock;
+	struct list_head head;
+	struct kref kref;
+	struct device *hdmi_dev;
+	struct cec_connector_info conn_info;
+	const char *port_name;
+	struct cec_adapter *cec_adap;
+	u16 phys_addr;
+};
+
+struct cec_state {
+	const char * const name;
+	unsigned int usecs;
+};
+
+enum vb2_memory {
+	VB2_MEMORY_UNKNOWN = 0,
+	VB2_MEMORY_MMAP = 1,
+	VB2_MEMORY_USERPTR = 2,
+	VB2_MEMORY_DMABUF = 4,
+};
+
+struct vb2_fileio_buf {
+	void *vaddr;
+	unsigned int size;
+	unsigned int pos;
+	unsigned int queued: 1;
+};
+
+struct vb2_fileio_data {
+	unsigned int count;
+	unsigned int type;
+	unsigned int memory;
+	struct vb2_fileio_buf bufs[64];
+	unsigned int cur_index;
+	unsigned int initial_index;
+	unsigned int q_count;
+	unsigned int dq_count;
+	unsigned int read_once: 1;
+	unsigned int write_immediately: 1;
+};
+
+typedef int (*vb2_thread_fnc)(struct vb2_buffer *, void *);
+
+struct vb2_threadio_data {
+	struct task_struct *thread;
+	vb2_thread_fnc fnc;
+	void *priv;
+	bool stop;
+};
+
+struct frame_vector {
+	unsigned int nr_allocated;
+	unsigned int nr_frames;
+	bool got_ref;
+	bool is_pfns;
+	void *ptrs[0];
+};
+
+typedef void (*btf_trace_vb2_buf_done)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_buf_queue)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_dqbuf)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_qbuf)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+struct trace_event_raw_vb2_event_class {
+	struct trace_entry ent;
+	void *owner;
+	u32 queued_count;
+	int owned_by_drv_count;
+	u32 index;
+	u32 type;
+	u32 bytesused;
+	u64 timestamp;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_vb2_event_class {};
+
+struct vb2_vmarea_handler {
+	refcount_t *refcount;
+	void (*put)(void *);
+	void *arg;
+};
+
+struct vb2_dc_buf {
+	struct device *dev;
+	void *vaddr;
+	unsigned long size;
+	void *cookie;
+	dma_addr_t dma_addr;
+	unsigned long attrs;
+	enum dma_data_direction dma_dir;
+	struct sg_table *dma_sgt;
+	struct frame_vector *vec;
+	struct vb2_vmarea_handler handler;
+	refcount_t refcount;
+	struct sg_table *sgt_base;
+	struct dma_buf_attachment *db_attach;
+	struct vb2_buffer *vb;
+	bool non_coherent_mem;
+};
+
+struct vb2_dc_attachment {
+	struct sg_table sgt;
+	enum dma_data_direction dma_dir;
+};
+
+struct vb2_dma_sg_buf {
+	struct device *dev;
+	void *vaddr;
+	struct page **pages;
+	struct frame_vector *vec;
+	int offset;
+	enum dma_data_direction dma_dir;
+	struct sg_table sg_table;
+	struct sg_table *dma_sgt;
+	size_t size;
+	unsigned int num_pages;
+	refcount_t refcount;
+	struct vb2_vmarea_handler handler;
+	struct dma_buf_attachment *db_attach;
+	struct vb2_buffer *vb;
+};
+
+struct vb2_dma_sg_attachment {
+	struct sg_table sgt;
+	enum dma_data_direction dma_dir;
+};
+
+struct vb2_vmalloc_buf {
+	void *vaddr;
+	struct frame_vector *vec;
+	enum dma_data_direction dma_dir;
+	unsigned long size;
+	refcount_t refcount;
+	struct vb2_vmarea_handler handler;
+	struct dma_buf *dbuf;
+};
+
+struct vb2_vmalloc_attachment {
+	struct sg_table sgt;
+	enum dma_data_direction dma_dir;
+};
+
+enum gspca_packet_type {
+	DISCARD_PACKET = 0,
+	FIRST_PACKET = 1,
+	INTER_PACKET = 2,
+	LAST_PACKET = 3,
+};
+
+struct gspca_buffer {
+	struct vb2_v4l2_buffer vb;
+	struct list_head list;
+};
+
+struct framerates;
+
+struct cam {
+	const struct v4l2_pix_format *cam_mode;
+	const struct framerates *mode_framerates;
+	u32 bulk_size;
+	u32 input_flags;
+	u8 nmodes;
+	u8 no_urb_create;
+	u8 bulk_nurbs;
+	u8 bulk;
+	u8 npkt;
+	u8 needs_full_bandwidth;
+};
+
+struct sd_desc;
+
+struct gspca_dev {
+	struct video_device vdev;
+	struct module *module;
+	struct v4l2_device v4l2_dev;
+	struct usb_device *dev;
+	struct input_dev *input_dev;
+	char phys[64];
+	struct cam cam;
+	const struct sd_desc *sd_desc;
+	struct v4l2_ctrl_handler ctrl_handler;
+	struct {
+		struct v4l2_ctrl *autogain;
+		struct v4l2_ctrl *exposure;
+		struct v4l2_ctrl *gain;
+		int exp_too_low_cnt;
+		int exp_too_high_cnt;
+	};
+	__u8 *usb_buf;
+	struct urb *urb[4];
+	struct urb *int_urb;
+	u8 *image;
+	u32 image_len;
+	__u8 last_packet_type;
+	__s8 empty_packet;
+	bool streaming;
+	__u8 curr_mode;
+	struct v4l2_pix_format pixfmt;
+	__u32 sequence;
+	struct vb2_queue queue;
+	spinlock_t qlock;
+	struct list_head buf_list;
+	wait_queue_head_t wq;
+	struct mutex usb_lock;
+	int usb_err;
+	u16 pkt_size;
+	char frozen;
+	bool present;
+	char memory;
+	__u8 iface;
+	__u8 alt;
+	int xfer_ep;
+	u8 audio;
+};
+
+struct framerates {
+	const u8 *rates;
+	int nrates;
+};
+
+typedef int (*cam_cf_op)(struct gspca_dev *, const struct usb_device_id *);
+
+typedef int (*cam_op)(struct gspca_dev *);
+
+typedef void (*cam_v_op)(struct gspca_dev *);
+
+typedef void (*cam_pkt_op)(struct gspca_dev *, u8 *, int);
+
+typedef int (*cam_get_jpg_op)(struct gspca_dev *, struct v4l2_jpegcompression *);
+
+typedef int (*cam_set_jpg_op)(struct gspca_dev *, const struct v4l2_jpegcompression *);
+
+typedef void (*cam_streamparm_op)(struct gspca_dev *, struct v4l2_streamparm *);
+
+typedef void (*cam_format_op)(struct gspca_dev *, struct v4l2_format *);
+
+typedef int (*cam_frmsize_op)(struct gspca_dev *, struct v4l2_frmsizeenum *);
+
+typedef int (*cam_int_pkt_op)(struct gspca_dev *, u8 *, int);
+
+struct sd_desc {
+	const char *name;
+	cam_cf_op config;
+	cam_op init;
+	cam_op init_controls;
+	cam_v_op probe_error;
+	cam_op start;
+	cam_pkt_op pkt_scan;
+	cam_op isoc_init;
+	cam_op isoc_nego;
+	cam_v_op stopN;
+	cam_v_op stop0;
+	cam_v_op dq_callback;
+	cam_get_jpg_op get_jcomp;
+	cam_set_jpg_op set_jcomp;
+	cam_streamparm_op get_streamparm;
+	cam_streamparm_op set_streamparm;
+	cam_format_op try_fmt;
+	cam_frmsize_op enum_framesizes;
+	cam_int_pkt_op int_pkt_scan;
+	u8 other_input;
+};
+
+struct ep_tb_s {
+	u32 alt;
+	u32 bandwidth;
+};
+
+struct uvc_driver {
+	struct usb_driver driver;
+};
+
+struct uvc_control_mapping;
+
+struct uvc_device_info {
+	u32 quirks;
+	u32 meta_format;
+	u16 uvc_version;
+	const struct uvc_control_mapping **mappings;
+};
+
+struct uvc_control_mapping {
+	struct list_head list;
+	struct list_head ev_subs;
+	u32 id;
+	char *name;
+	u8 entity[16];
+	u8 selector;
+	u8 size;
+	u8 offset;
+	enum v4l2_ctrl_type v4l2_type;
+	u32 data_type;
+	const u32 *menu_mapping;
+	const char (*menu_names)[32];
+	unsigned long menu_mask;
+	u32 master_id;
+	s32 master_manual;
+	u32 slave_ids[2];
+	s32 (*get)(struct uvc_control_mapping *, u8, const u8 *);
+	void (*set)(struct uvc_control_mapping *, s32, u8 *);
+};
+
+enum uvc_buffer_state___2 {
+	UVC_BUF_STATE_IDLE___2 = 0,
+	UVC_BUF_STATE_QUEUED___2 = 1,
+	UVC_BUF_STATE_ACTIVE___2 = 2,
+	UVC_BUF_STATE_READY = 3,
+	UVC_BUF_STATE_DONE___2 = 4,
+	UVC_BUF_STATE_ERROR___2 = 5,
+};
+
+enum uvc_handle_state {
+	UVC_HANDLE_PASSIVE = 0,
+	UVC_HANDLE_ACTIVE = 1,
+};
+
+struct uvc_device___2;
+
+struct uvc_control;
+
+struct uvc_entity {
+	struct list_head list;
+	struct list_head chain;
+	unsigned int flags;
+	u16 id;
+	u16 type;
+	char name[64];
+	u8 guid[16];
+	struct video_device *vdev;
+	struct v4l2_subdev subdev;
+	unsigned int num_pads;
+	unsigned int num_links;
+	struct media_pad *pads;
+	union {
+		struct {
+			u16 wObjectiveFocalLengthMin;
+			u16 wObjectiveFocalLengthMax;
+			u16 wOcularFocalLength;
+			u8 bControlSize;
+			u8 *bmControls;
+		} camera;
+		struct {
+			u8 bControlSize;
+			u8 *bmControls;
+			u8 bTransportModeSize;
+			u8 *bmTransportModes;
+		} media;
+		struct {} output;
+		struct {
+			u16 wMaxMultiplier;
+			u8 bControlSize;
+			u8 *bmControls;
+			u8 bmVideoStandards;
+		} processing;
+		struct {} selector;
+		struct {
+			u8 bNumControls;
+			u8 bControlSize;
+			u8 *bmControls;
+			u8 *bmControlsType;
+		} extension;
+		struct {
+			u8 bControlSize;
+			u8 *bmControls;
+			struct gpio_desc *gpio_privacy;
+			int irq;
+		} gpio;
+	};
+	u8 bNrInPins;
+	u8 *baSourceID;
+	int (*get_info)(struct uvc_device___2 *, struct uvc_entity *, u8, u8 *);
+	int (*get_cur)(struct uvc_device___2 *, struct uvc_entity *, u8, void *, u16);
+	unsigned int ncontrols;
+	struct uvc_control *controls;
+};
+
+struct uvc_video_chain;
+
+struct uvc_ctrl_work {
+	struct work_struct work;
+	struct urb *urb;
+	struct uvc_video_chain *chain;
+	struct uvc_control *ctrl;
+	const void *data;
+};
+
+struct uvc_status;
+
+struct uvc_device___2 {
+	struct usb_device *udev;
+	struct usb_interface *intf;
+	unsigned long warnings;
+	u32 quirks;
+	int intfnum;
+	char name[32];
+	const struct uvc_device_info *info;
+	struct mutex lock;
+	unsigned int users;
+	atomic_t nmappings;
+	struct media_device mdev;
+	struct v4l2_device vdev;
+	u16 uvc_version;
+	u32 clock_frequency;
+	struct list_head entities;
+	struct list_head chains;
+	struct list_head streams;
+	struct kref ref;
+	struct usb_host_endpoint *int_ep;
+	struct urb *int_urb;
+	struct uvc_status *status;
+	bool flush_status;
+	struct input_dev *input;
+	char input_phys[64];
+	struct uvc_ctrl_work async_ctrl;
+	struct uvc_entity *gpio_unit;
+};
+
+struct uvc_status_control {
+	u8 bSelector;
+	u8 bAttribute;
+	u8 bValue[11];
+};
+
+struct uvc_status_streaming {
+	u8 button;
+};
+
+struct uvc_status {
+	u8 bStatusType;
+	u8 bOriginator;
+	u8 bEvent;
+	union {
+		struct uvc_status_control control;
+		struct uvc_status_streaming streaming;
+	};
+};
+
+struct uvc_video_chain {
+	struct uvc_device___2 *dev;
+	struct list_head list;
+	struct list_head entities;
+	struct uvc_entity *processing;
+	struct uvc_entity *selector;
+	struct mutex ctrl_mutex;
+	struct v4l2_prio_state prio;
+	u32 caps;
+	u8 ctrl_class_bitmap;
+};
+
+struct uvc_control_info {
+	struct list_head mappings;
+	u8 entity[16];
+	u8 index;
+	u8 selector;
+	u16 size;
+	u32 flags;
+};
+
+struct uvc_fh;
+
+struct uvc_control {
+	struct uvc_entity *entity;
+	struct uvc_control_info info;
+	u8 index;
+	u8 dirty: 1;
+	u8 loaded: 1;
+	u8 modified: 1;
+	u8 cached: 1;
+	u8 initialized: 1;
+	u8 *uvc_data;
+	struct uvc_fh *handle;
+};
+
+struct uvc_streaming;
+
+struct uvc_fh {
+	struct v4l2_fh vfh;
+	struct uvc_video_chain *chain;
+	struct uvc_streaming *stream;
+	enum uvc_handle_state state;
+};
+
+struct uvc_video_queue___2 {
+	struct vb2_queue queue;
+	struct mutex mutex;
+	unsigned int flags;
+	unsigned int buf_used;
+	spinlock_t irqlock;
+	struct list_head irqqueue;
+};
+
+struct uvc_stats_frame {
+	unsigned int size;
+	unsigned int first_data;
+	unsigned int nb_packets;
+	unsigned int nb_empty;
+	unsigned int nb_invalid;
+	unsigned int nb_errors;
+	unsigned int nb_pts;
+	unsigned int nb_pts_diffs;
+	unsigned int last_pts_diff;
+	bool has_initial_pts;
+	bool has_early_pts;
+	u32 pts;
+	unsigned int nb_scr;
+	unsigned int nb_scr_diffs;
+	u16 scr_sof;
+	u32 scr_stc;
+};
+
+struct uvc_stats_stream {
+	ktime_t start_ts;
+	ktime_t stop_ts;
+	unsigned int nb_frames;
+	unsigned int nb_packets;
+	unsigned int nb_empty;
+	unsigned int nb_invalid;
+	unsigned int nb_errors;
+	unsigned int nb_pts_constant;
+	unsigned int nb_pts_early;
+	unsigned int nb_pts_initial;
+	unsigned int nb_scr_count_ok;
+	unsigned int nb_scr_diffs_ok;
+	unsigned int scr_sof_count;
+	unsigned int scr_sof;
+	unsigned int min_sof;
+	unsigned int max_sof;
+};
+
+struct uvc_streaming_header {
+	u8 bNumFormats;
+	u8 bEndpointAddress;
+	u8 bTerminalLink;
+	u8 bControlSize;
+	u8 *bmaControls;
+	u8 bmInfo;
+	u8 bStillCaptureMethod;
+	u8 bTriggerSupport;
+	u8 bTriggerUsage;
+};
+
+struct uvc_streaming_control {
+	__u16 bmHint;
+	__u8 bFormatIndex;
+	__u8 bFrameIndex;
+	__u32 dwFrameInterval;
+	__u16 wKeyFrameRate;
+	__u16 wPFrameRate;
+	__u16 wCompQuality;
+	__u16 wCompWindowSize;
+	__u16 wDelay;
+	__u32 dwMaxVideoFrameSize;
+	__u32 dwMaxPayloadTransferSize;
+	__u32 dwClockFrequency;
+	__u8 bmFramingInfo;
+	__u8 bPreferedVersion;
+	__u8 bMinVersion;
+	__u8 bMaxVersion;
+} __attribute__((packed));
+
+struct uvc_buffer___2;
+
+struct uvc_copy_op {
+	struct uvc_buffer___2 *buf;
+	void *dst;
+	const __u8 *src;
+	size_t len;
+};
+
+struct uvc_urb {
+	struct urb *urb;
+	struct uvc_streaming *stream;
+	char *buffer;
+	dma_addr_t dma;
+	struct sg_table *sgt;
+	unsigned int async_operations;
+	struct uvc_copy_op copy_operations[32];
+	struct work_struct work;
+};
+
+struct uvc_clock_sample;
+
+struct uvc_clock {
+	struct uvc_clock_sample *samples;
+	unsigned int head;
+	unsigned int count;
+	unsigned int size;
+	u16 last_sof;
+	u16 sof_offset;
+	u8 last_scr[6];
+	spinlock_t lock;
+};
+
+struct uvc_format;
+
+struct uvc_frame;
+
+struct uvc_streaming {
+	struct list_head list;
+	struct uvc_device___2 *dev;
+	struct video_device vdev;
+	struct uvc_video_chain *chain;
+	atomic_t active;
+	struct usb_interface *intf;
+	int intfnum;
+	u16 maxpsize;
+	struct uvc_streaming_header header;
+	enum v4l2_buf_type type;
+	unsigned int nformats;
+	const struct uvc_format *formats;
+	struct uvc_streaming_control ctrl;
+	const struct uvc_format *def_format;
+	const struct uvc_format *cur_format;
+	const struct uvc_frame *cur_frame;
+	struct mutex mutex;
+	unsigned int frozen: 1;
+	struct uvc_video_queue___2 queue;
+	struct workqueue_struct *async_wq;
+	void (*decode)(struct uvc_urb *, struct uvc_buffer___2 *, struct uvc_buffer___2 *);
+	struct {
+		struct video_device vdev;
+		struct uvc_video_queue___2 queue;
+		u32 format;
+	} meta;
+	struct {
+		u8 header[256];
+		unsigned int header_size;
+		int skip_payload;
+		u32 payload_size;
+		u32 max_payload_size;
+	} bulk;
+	struct uvc_urb uvc_urb[5];
+	unsigned int urb_size;
+	u32 sequence;
+	u8 last_fid;
+	struct dentry *debugfs_dir;
+	struct {
+		struct uvc_stats_frame frame;
+		struct uvc_stats_stream stream;
+	} stats;
+	struct uvc_clock clock;
+};
+
+struct uvc_format {
+	u8 type;
+	u8 index;
+	u8 bpp;
+	enum v4l2_colorspace colorspace;
+	enum v4l2_xfer_func xfer_func;
+	enum v4l2_ycbcr_encoding ycbcr_enc;
+	u32 fcc;
+	u32 flags;
+	unsigned int nframes;
+	const struct uvc_frame *frames;
+};
+
+struct uvc_frame {
+	u8 bFrameIndex;
+	u8 bmCapabilities;
+	u16 wWidth;
+	u16 wHeight;
+	u32 dwMinBitRate;
+	u32 dwMaxBitRate;
+	u32 dwMaxVideoFrameBufferSize;
+	u8 bFrameIntervalType;
+	u32 dwDefaultFrameInterval;
+	const u32 *dwFrameInterval;
+};
+
+struct uvc_buffer___2 {
+	struct vb2_v4l2_buffer buf;
+	struct list_head queue;
+	enum uvc_buffer_state___2 state;
+	unsigned int error;
+	void *mem;
+	unsigned int length;
+	unsigned int bytesused;
+	u32 pts;
+	struct kref ref;
+};
+
+struct uvc_clock_sample {
+	u32 dev_stc;
+	u16 dev_sof;
+	u16 host_sof;
+	ktime_t host_time;
+};
+
+struct uvc_xu_control_query {
+	__u8 unit;
+	__u8 selector;
+	__u8 query;
+	__u16 size;
+	__u8 __attribute__((btf_type_tag("user"))) *data;
+};
+
+struct uvc_menu_info;
+
+struct uvc_xu_control_mapping {
+	__u32 id;
+	__u8 name[32];
+	__u8 entity[16];
+	__u8 selector;
+	__u8 size;
+	__u8 offset;
+	__u32 v4l2_type;
+	__u32 data_type;
+	struct uvc_menu_info __attribute__((btf_type_tag("user"))) *menu_info;
+	__u32 menu_count;
+	__u32 reserved[4];
+};
+
+struct uvc_menu_info {
+	__u32 value;
+	__u8 name[32];
+};
+
+struct uvc_xu_control_mapping32 {
+	u32 id;
+	u8 name[32];
+	u8 entity[16];
+	u8 selector;
+	u8 size;
+	u8 offset;
+	u32 v4l2_type;
+	u32 data_type;
+	compat_caddr_t menu_info;
+	u32 menu_count;
+	u32 reserved[4];
+};
+
+struct uvc_xu_control_query32 {
+	u8 unit;
+	u8 selector;
+	u8 query;
+	u16 size;
+	compat_caddr_t data;
+};
+
+struct uvc_meta_buf {
+	__u64 ns;
+	__u16 sof;
+	__u8 length;
+	__u8 flags;
+	__u8 buf[0];
+} __attribute__((packed));
+
+struct uvc_ctrl_fixup {
+	struct usb_device_id id;
+	u8 entity;
+	u8 selector;
+	u8 flags;
+};
+
+struct uvc_ctrl_blacklist {
+	struct usb_device_id id;
+	u8 index;
+};
+
+struct uvc_debugfs_buffer {
+	size_t count;
+	char data[1024];
+};
+
+struct syscon_reboot_context {
+	struct regmap *map;
+	u32 offset;
+	u32 value;
+	u32 mask;
+	struct notifier_block restart_handler;
+};
+
+enum thermal_device_mode {
+	THERMAL_DEVICE_DISABLED = 0,
+	THERMAL_DEVICE_ENABLED = 1,
+};
+
+enum thermal_trend {
+	THERMAL_TREND_STABLE = 0,
+	THERMAL_TREND_RAISING = 1,
+	THERMAL_TREND_DROPPING = 2,
+};
+
+struct thermal_trip;
+
+struct thermal_zone_device_ops {
+	int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*get_temp)(struct thermal_zone_device *, int *);
+	int (*set_trips)(struct thermal_zone_device *, int, int);
+	int (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode);
+	int (*set_trip_temp)(struct thermal_zone_device *, int, int);
+	int (*set_trip_hyst)(struct thermal_zone_device *, int, int);
+	int (*get_crit_temp)(struct thermal_zone_device *, int *);
+	int (*set_emul_temp)(struct thermal_zone_device *, int);
+	int (*get_trend)(struct thermal_zone_device *, const struct thermal_trip *, enum thermal_trend *);
+	void (*hot)(struct thermal_zone_device *);
+	void (*critical)(struct thermal_zone_device *);
+	u64 android_kabi_reserved1;
+};
+
+enum thermal_notify_event {
+	THERMAL_EVENT_UNSPECIFIED = 0,
+	THERMAL_EVENT_TEMP_SAMPLE = 1,
+	THERMAL_TRIP_VIOLATED = 2,
+	THERMAL_TRIP_CHANGED = 3,
+	THERMAL_DEVICE_DOWN = 4,
+	THERMAL_DEVICE_UP = 5,
+	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,
+	THERMAL_TABLE_CHANGED = 7,
+	THERMAL_EVENT_KEEP_ALIVE = 8,
+};
+
+struct thermal_attr;
+
+struct thermal_zone_params;
+
+struct thermal_governor;
+
+struct thermal_zone_device {
+	int id;
+	char type[20];
+	struct device device;
+	struct attribute_group trips_attribute_group;
+	struct thermal_attr *trip_temp_attrs;
+	struct thermal_attr *trip_type_attrs;
+	struct thermal_attr *trip_hyst_attrs;
+	enum thermal_device_mode mode;
+	void *devdata;
+	struct thermal_trip *trips;
+	int num_trips;
+	unsigned long trips_disabled;
+	unsigned long passive_delay_jiffies;
+	unsigned long polling_delay_jiffies;
+	int temperature;
+	int last_temperature;
+	int emul_temperature;
+	int passive;
+	int prev_low_trip;
+	int prev_high_trip;
+	atomic_t need_update;
+	struct thermal_zone_device_ops *ops;
+	struct thermal_zone_params *tzp;
+	struct thermal_governor *governor;
+	void *governor_data;
+	struct list_head thermal_instances;
+	struct ida ida;
+	struct mutex lock;
+	struct list_head node;
+	struct delayed_work poll_queue;
+	enum thermal_notify_event notify_event;
+	bool suspended;
+	u64 android_kabi_reserved1;
+};
+
+enum thermal_trip_type {
+	THERMAL_TRIP_ACTIVE = 0,
+	THERMAL_TRIP_PASSIVE = 1,
+	THERMAL_TRIP_HOT = 2,
+	THERMAL_TRIP_CRITICAL = 3,
+};
+
+struct thermal_trip {
+	int temperature;
+	int hysteresis;
+	enum thermal_trip_type type;
+	void *priv;
+};
+
+struct thermal_zone_params {
+	char governor_name[20];
+	bool no_hwmon;
+	u32 sustainable_power;
+	s32 k_po;
+	s32 k_pu;
+	s32 k_i;
+	s32 k_d;
+	s32 integral_cutoff;
+	int slope;
+	int offset;
+	u64 android_kabi_reserved1;
+};
+
+struct thermal_governor {
+	char name[20];
+	int (*bind_to_tz)(struct thermal_zone_device *);
+	void (*unbind_from_tz)(struct thermal_zone_device *);
+	int (*throttle)(struct thermal_zone_device *, int);
+	struct list_head governor_list;
+	u64 android_kabi_reserved1;
+};
+
+struct thermal_cooling_device_ops;
+
+struct thermal_cooling_device {
+	int id;
+	char *type;
+	unsigned long max_state;
+	struct device device;
+	struct device_node *np;
+	void *devdata;
+	void *stats;
+	const struct thermal_cooling_device_ops *ops;
+	bool updated;
+	struct mutex lock;
+	struct list_head thermal_instances;
+	struct list_head node;
+	u64 android_kabi_reserved1;
+};
+
+struct thermal_cooling_device_ops {
+	int (*get_max_state)(struct thermal_cooling_device *, unsigned long *);
+	int (*get_cur_state)(struct thermal_cooling_device *, unsigned long *);
+	int (*set_cur_state)(struct thermal_cooling_device *, unsigned long);
+	int (*get_requested_power)(struct thermal_cooling_device *, u32 *);
+	int (*state2power)(struct thermal_cooling_device *, unsigned long, u32 *);
+	int (*power2state)(struct thermal_cooling_device *, u32, unsigned long *);
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
+	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
+	POWER_SUPPLY_TECHNOLOGY_LION = 2,
+	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
+	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
+	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
+	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
+};
+
+enum power_supply_notifier_events {
+	PSY_EVENT_PROP_CHANGED = 0,
+};
+
+struct match_device_node_array_param {
+	struct device_node *parent_of_node;
+	struct power_supply **psy;
+	ssize_t psy_size;
+	ssize_t psy_count;
+};
+
+struct psy_am_i_supplied_data {
+	struct power_supply *psy;
+	unsigned int count;
+};
+
+struct psy_get_supplier_prop_data {
+	struct power_supply *psy;
+	enum power_supply_property psp;
+	union power_supply_propval *val;
+};
+
+struct power_supply_attr {
+	const char *prop_name;
+	char attr_name[31];
+	struct device_attribute dev_attr;
+	const char * const *text_values;
+	int text_values_len;
+};
+
+enum power_supply_charge_behaviour {
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_AUTO = 0,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_INHIBIT_CHARGE = 1,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_FORCE_DISCHARGE = 2,
+};
+
+enum {
+	POWER_SUPPLY_STATUS_UNKNOWN = 0,
+	POWER_SUPPLY_STATUS_CHARGING = 1,
+	POWER_SUPPLY_STATUS_DISCHARGING = 2,
+	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
+	POWER_SUPPLY_STATUS_FULL = 4,
+};
+
+typedef void (*btf_trace_thermal_temperature)(void *, struct thermal_zone_device *);
+
+struct thermal_attr {
+	struct device_attribute attr;
+	char name[20];
+};
+
+typedef void (*btf_trace_cdev_update)(void *, struct thermal_cooling_device *, unsigned long);
+
+typedef void (*btf_trace_thermal_zone_trip)(void *, struct thermal_zone_device *, int, enum thermal_trip_type);
+
+typedef void (*btf_trace_thermal_power_cpu_get_power_simple)(void *, int, u32);
+
+typedef void (*btf_trace_thermal_power_cpu_limit)(void *, const struct cpumask *, unsigned int, unsigned long, u32);
+
+struct devfreq_dev_status;
+
+typedef void (*btf_trace_thermal_power_devfreq_get_power)(void *, struct thermal_cooling_device *, struct devfreq_dev_status *, unsigned long, u32);
+
+struct devfreq_dev_status {
+	unsigned long total_time;
+	unsigned long busy_time;
+	unsigned long current_frequency;
+	void *private_data;
+};
+
+typedef void (*btf_trace_thermal_power_devfreq_limit)(void *, struct thermal_cooling_device *, unsigned long, unsigned long, u32);
+
+struct thermal_instance {
+	int id;
+	char name[20];
+	struct thermal_zone_device *tz;
+	struct thermal_cooling_device *cdev;
+	const struct thermal_trip *trip;
+	bool initialized;
+	unsigned long upper;
+	unsigned long lower;
+	unsigned long target;
+	char attr_name[20];
+	struct device_attribute attr;
+	char weight_attr_name[20];
+	struct device_attribute weight_attr;
+	struct list_head tz_node;
+	struct list_head cdev_node;
+	unsigned int weight;
+	bool upper_no_limit;
+};
+
+struct trace_event_raw_thermal_temperature {
+	struct trace_entry ent;
+	u32 __data_loc_thermal_zone;
+	int id;
+	int temp_prev;
+	int temp;
+	char __data[0];
+};
+
+struct trace_event_raw_cdev_update {
+	struct trace_entry ent;
+	u32 __data_loc_type;
+	unsigned long target;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_zone_trip {
+	struct trace_entry ent;
+	u32 __data_loc_thermal_zone;
+	int id;
+	int trip;
+	enum thermal_trip_type trip_type;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_cpu_get_power_simple {
+	struct trace_entry ent;
+	int cpu;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_cpu_limit {
+	struct trace_entry ent;
+	u32 __data_loc_cpumask;
+	unsigned int freq;
+	unsigned long cdev_state;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_devfreq_get_power {
+	struct trace_entry ent;
+	u32 __data_loc_type;
+	unsigned long freq;
+	u32 busy_time;
+	u32 total_time;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_devfreq_limit {
+	struct trace_entry ent;
+	u32 __data_loc_type;
+	unsigned int freq;
+	unsigned long cdev_state;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_thermal_temperature {
+	u32 thermal_zone;
+};
+
+struct trace_event_data_offsets_cdev_update {
+	u32 type;
+};
+
+struct trace_event_data_offsets_thermal_zone_trip {
+	u32 thermal_zone;
+};
+
+struct trace_event_data_offsets_thermal_power_cpu_limit {
+	u32 cpumask;
+};
+
+struct trace_event_data_offsets_thermal_power_devfreq_get_power {
+	u32 type;
+};
+
+struct trace_event_data_offsets_thermal_power_devfreq_limit {
+	u32 type;
+};
+
+struct trace_event_data_offsets_thermal_power_cpu_get_power_simple {};
+
+struct cooling_dev_stats {
+	spinlock_t lock;
+	unsigned int total_trans;
+	unsigned long state;
+	ktime_t last_time;
+	ktime_t *time_in_state;
+	unsigned int *trans_table;
+};
+
+struct param;
+
+typedef int (*cb_t)(struct param *);
+
+struct thermal_genl_cpu_caps;
+
+struct param {
+	struct nlattr **attrs;
+	struct sk_buff *msg;
+	const char *name;
+	int tz_id;
+	int cdev_id;
+	int trip_id;
+	int trip_temp;
+	int trip_type;
+	int trip_hyst;
+	int temp;
+	int cdev_state;
+	int cdev_max_state;
+	struct thermal_genl_cpu_caps *cpu_capabilities;
+	int cpu_capabilities_count;
+};
+
+struct thermal_genl_cpu_caps {
+	int cpu;
+	int performance;
+	int efficiency;
+};
+
+enum thermal_genl_sampling {
+	THERMAL_GENL_SAMPLING_TEMP = 0,
+	__THERMAL_GENL_SAMPLING_MAX = 1,
+};
+
+enum thermal_genl_attr {
+	THERMAL_GENL_ATTR_UNSPEC = 0,
+	THERMAL_GENL_ATTR_TZ = 1,
+	THERMAL_GENL_ATTR_TZ_ID = 2,
+	THERMAL_GENL_ATTR_TZ_TEMP = 3,
+	THERMAL_GENL_ATTR_TZ_TRIP = 4,
+	THERMAL_GENL_ATTR_TZ_TRIP_ID = 5,
+	THERMAL_GENL_ATTR_TZ_TRIP_TYPE = 6,
+	THERMAL_GENL_ATTR_TZ_TRIP_TEMP = 7,
+	THERMAL_GENL_ATTR_TZ_TRIP_HYST = 8,
+	THERMAL_GENL_ATTR_TZ_MODE = 9,
+	THERMAL_GENL_ATTR_TZ_NAME = 10,
+	THERMAL_GENL_ATTR_TZ_CDEV_WEIGHT = 11,
+	THERMAL_GENL_ATTR_TZ_GOV = 12,
+	THERMAL_GENL_ATTR_TZ_GOV_NAME = 13,
+	THERMAL_GENL_ATTR_CDEV = 14,
+	THERMAL_GENL_ATTR_CDEV_ID = 15,
+	THERMAL_GENL_ATTR_CDEV_CUR_STATE = 16,
+	THERMAL_GENL_ATTR_CDEV_MAX_STATE = 17,
+	THERMAL_GENL_ATTR_CDEV_NAME = 18,
+	THERMAL_GENL_ATTR_GOV_NAME = 19,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY = 20,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_ID = 21,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_PERFORMANCE = 22,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_EFFICIENCY = 23,
+	__THERMAL_GENL_ATTR_MAX = 24,
+};
+
+enum thermal_genl_event {
+	THERMAL_GENL_EVENT_UNSPEC = 0,
+	THERMAL_GENL_EVENT_TZ_CREATE = 1,
+	THERMAL_GENL_EVENT_TZ_DELETE = 2,
+	THERMAL_GENL_EVENT_TZ_DISABLE = 3,
+	THERMAL_GENL_EVENT_TZ_ENABLE = 4,
+	THERMAL_GENL_EVENT_TZ_TRIP_UP = 5,
+	THERMAL_GENL_EVENT_TZ_TRIP_DOWN = 6,
+	THERMAL_GENL_EVENT_TZ_TRIP_CHANGE = 7,
+	THERMAL_GENL_EVENT_TZ_TRIP_ADD = 8,
+	THERMAL_GENL_EVENT_TZ_TRIP_DELETE = 9,
+	THERMAL_GENL_EVENT_CDEV_ADD = 10,
+	THERMAL_GENL_EVENT_CDEV_DELETE = 11,
+	THERMAL_GENL_EVENT_CDEV_STATE_UPDATE = 12,
+	THERMAL_GENL_EVENT_TZ_GOV_CHANGE = 13,
+	THERMAL_GENL_EVENT_CPU_CAPABILITY_CHANGE = 14,
+	__THERMAL_GENL_EVENT_MAX = 15,
+};
+
+typedef void (*btf_trace_thermal_power_allocator)(void *, struct thermal_zone_device *, u32 *, u32, u32 *, u32, size_t, u32, u32, int, s32);
+
+typedef void (*btf_trace_thermal_power_allocator_pid)(void *, struct thermal_zone_device *, s32, s32, s64, s64, s64, s32);
+
+struct trace_event_raw_thermal_power_allocator {
+	struct trace_entry ent;
+	int tz_id;
+	u32 __data_loc_req_power;
+	u32 total_req_power;
+	u32 __data_loc_granted_power;
+	u32 total_granted_power;
+	size_t num_actors;
+	u32 power_range;
+	u32 max_allocatable_power;
+	int current_temp;
+	s32 delta_temp;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_allocator_pid {
+	struct trace_entry ent;
+	int tz_id;
+	s32 err;
+	s32 err_integral;
+	s64 p;
+	s64 i;
+	s64 d;
+	s32 output;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_thermal_power_allocator {
+	u32 req_power;
+	u32 granted_power;
+};
+
+struct power_allocator_params {
+	bool allocated_tzp;
+	s64 err_integral;
+	s32 prev_err;
+	int trip_switch_on;
+	int trip_max_desired_temperature;
+	u32 sustainable_power;
+};
+
+struct trace_event_data_offsets_thermal_power_allocator_pid {};
+
+struct cpufreq_cooling_device {
+	u32 last_load;
+	unsigned int cpufreq_state;
+	unsigned int max_level;
+	struct em_perf_domain *em;
+	struct cpufreq_policy *policy;
+	struct thermal_cooling_device_ops cooling_ops;
+	struct freq_qos_request qos_req;
+};
+
+struct idle_inject_device;
+
+struct cpuidle_cooling_device {
+	struct idle_inject_device *ii_dev;
+	unsigned long state;
+};
+
+enum devfreq_timer {
+	DEVFREQ_TIMER_DEFERRABLE = 0,
+	DEVFREQ_TIMER_DELAYED = 1,
+	DEVFREQ_TIMER_NUM = 2,
+};
+
+struct devfreq;
+
+struct devfreq_cooling_power;
+
+struct devfreq_cooling_device {
+	struct thermal_cooling_device *cdev;
+	struct thermal_cooling_device_ops cooling_ops;
+	struct devfreq *devfreq;
+	unsigned long cooling_state;
+	u32 *freq_table;
+	size_t max_state;
+	struct devfreq_cooling_power *power_ops;
+	u32 res_util;
+	int capped_state;
+	struct dev_pm_qos_request req_max_freq;
+	struct em_perf_domain *em_pd;
+};
+
+struct devfreq_stats {
+	unsigned int total_trans;
+	unsigned int *trans_table;
+	u64 *time_in_state;
+	u64 last_update;
+};
+
+struct devfreq_dev_profile;
+
+struct devfreq_governor;
+
+struct devfreq {
+	struct list_head node;
+	struct mutex lock;
+	struct device dev;
+	struct devfreq_dev_profile *profile;
+	const struct devfreq_governor *governor;
+	struct opp_table *opp_table;
+	struct notifier_block nb;
+	struct delayed_work work;
+	unsigned long *freq_table;
+	unsigned int max_state;
+	unsigned long previous_freq;
+	struct devfreq_dev_status last_status;
+	void *data;
+	void *governor_data;
+	struct dev_pm_qos_request user_min_freq_req;
+	struct dev_pm_qos_request user_max_freq_req;
+	unsigned long scaling_min_freq;
+	unsigned long scaling_max_freq;
+	bool stop_polling;
+	unsigned long suspend_freq;
+	unsigned long resume_freq;
+	atomic_t suspend_count;
+	struct devfreq_stats stats;
+	struct srcu_notifier_head transition_notifier_list;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
+};
+
+struct devfreq_dev_profile {
+	unsigned long initial_freq;
+	unsigned int polling_ms;
+	enum devfreq_timer timer;
+	int (*target)(struct device *, unsigned long *, u32);
+	int (*get_dev_status)(struct device *, struct devfreq_dev_status *);
+	int (*get_cur_freq)(struct device *, unsigned long *);
+	void (*exit)(struct device *);
+	unsigned long *freq_table;
+	unsigned int max_state;
+	bool is_cooling_device;
+};
+
+struct devfreq_governor {
+	struct list_head node;
+	const char name[16];
+	const u64 attrs;
+	const u64 flags;
+	int (*get_target_freq)(struct devfreq *, unsigned long *);
+	int (*event_handler)(struct devfreq *, unsigned int, void *);
+};
+
+struct devfreq_cooling_power {
+	int (*get_real_power)(struct devfreq *, u32 *, unsigned long, unsigned long);
+};
+
+struct hisi_thermal_sensor;
+
+struct hisi_thermal_data;
+
+struct hisi_thermal_ops {
+	int (*get_temp)(struct hisi_thermal_sensor *);
+	int (*enable_sensor)(struct hisi_thermal_sensor *);
+	int (*disable_sensor)(struct hisi_thermal_sensor *);
+	int (*irq_handler)(struct hisi_thermal_sensor *);
+	int (*probe)(struct hisi_thermal_data *);
+};
+
+struct hisi_thermal_sensor {
+	struct hisi_thermal_data *data;
+	struct thermal_zone_device *tzd;
+	const char *irq_name;
+	uint32_t id;
+	uint32_t thres_temp;
+};
+
+struct hisi_thermal_data {
+	const struct hisi_thermal_ops *ops;
+	struct hisi_thermal_sensor *sensor;
+	struct platform_device *pdev;
+	struct clk *clk;
+	void *regs;
+	int nr_sensors;
+};
+
+struct watchdog_device;
+
+typedef void (*btf_trace_watchdog_start)(void *, struct watchdog_device *, int);
+
+struct watchdog_info;
+
+struct watchdog_ops;
+
+struct watchdog_governor;
+
+struct watchdog_core_data;
+
+struct watchdog_device {
+	int id;
+	struct device *parent;
+	const struct attribute_group **groups;
+	const struct watchdog_info *info;
+	const struct watchdog_ops *ops;
+	const struct watchdog_governor *gov;
+	unsigned int bootstatus;
+	unsigned int timeout;
+	unsigned int pretimeout;
+	unsigned int min_timeout;
+	unsigned int max_timeout;
+	unsigned int min_hw_heartbeat_ms;
+	unsigned int max_hw_heartbeat_ms;
+	struct notifier_block reboot_nb;
+	struct notifier_block restart_nb;
+	struct notifier_block pm_nb;
+	void *driver_data;
+	struct watchdog_core_data *wd_data;
+	unsigned long status;
+	struct list_head deferred;
+};
+
+struct watchdog_info {
+	__u32 options;
+	__u32 firmware_version;
+	__u8 identity[32];
+};
+
+struct watchdog_ops {
+	struct module *owner;
+	int (*start)(struct watchdog_device *);
+	int (*stop)(struct watchdog_device *);
+	int (*ping)(struct watchdog_device *);
+	unsigned int (*status)(struct watchdog_device *);
+	int (*set_timeout)(struct watchdog_device *, unsigned int);
+	int (*set_pretimeout)(struct watchdog_device *, unsigned int);
+	unsigned int (*get_timeleft)(struct watchdog_device *);
+	int (*restart)(struct watchdog_device *, unsigned long, void *);
+	long (*ioctl)(struct watchdog_device *, unsigned int, unsigned long);
+};
+
+struct watchdog_governor {
+	const char name[20];
+	void (*pretimeout)(struct watchdog_device *);
+};
+
+struct watchdog_core_data {
+	struct device dev;
+	struct cdev cdev;
+	struct watchdog_device *wdd;
+	struct mutex lock;
+	ktime_t last_keepalive;
+	ktime_t last_hw_keepalive;
+	ktime_t open_deadline;
+	struct hrtimer timer;
+	struct kthread_work work;
+	unsigned long status;
+};
+
+typedef void (*btf_trace_watchdog_ping)(void *, struct watchdog_device *, int);
+
+typedef void (*btf_trace_watchdog_stop)(void *, struct watchdog_device *, int);
+
+typedef void (*btf_trace_watchdog_set_timeout)(void *, struct watchdog_device *, unsigned int, int);
+
+struct trace_event_raw_watchdog_template {
+	struct trace_entry ent;
+	int id;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_watchdog_set_timeout {
+	struct trace_entry ent;
+	int id;
+	unsigned int timeout;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_watchdog_template {};
+
+struct trace_event_data_offsets_watchdog_set_timeout {};
+
+enum dm_uevent_type {
+	DM_UEVENT_PATH_FAILED = 0,
+	DM_UEVENT_PATH_REINSTATED = 1,
+};
+
+struct mapped_device;
+
+struct dm_uevent {
+	struct mapped_device *md;
+	enum kobject_action action;
+	struct kobj_uevent_env ku_env;
+	struct list_head elist;
+	char name[128];
+	char uuid[129];
+};
+
+struct dm_table;
+
+struct target_type;
+
+struct dm_target {
+	struct dm_table *table;
+	struct target_type *type;
+	sector_t begin;
+	sector_t len;
+	uint32_t max_io_len;
+	unsigned int num_flush_bios;
+	unsigned int num_discard_bios;
+	unsigned int num_secure_erase_bios;
+	unsigned int num_write_zeroes_bios;
+	unsigned int per_io_data_size;
+	void *private;
+	char *error;
+	bool flush_supported: 1;
+	bool discards_supported: 1;
+	bool max_discard_granularity: 1;
+	bool max_secure_erase_granularity: 1;
+	bool max_write_zeroes_granularity: 1;
+	bool limit_swap_bios: 1;
+	bool emulate_zone_append: 1;
+	bool accounts_remapped_io: 1;
+	bool needs_bio_set_dev: 1;
+	bool flush_bypasses_map: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef int (*dm_ctr_fn)(struct dm_target *, unsigned int, char **);
+
+typedef void (*dm_dtr_fn)(struct dm_target *);
+
+typedef int (*dm_map_fn)(struct dm_target *, struct bio *);
+
+union map_info___2;
+
+typedef int (*dm_clone_and_map_request_fn)(struct dm_target *, struct request *, union map_info___2 *, struct request **);
+
+typedef void (*dm_release_clone_request_fn)(struct request *, union map_info___2 *);
+
+typedef int (*dm_endio_fn)(struct dm_target *, struct bio *, blk_status_t *);
+
+typedef int (*dm_request_endio_fn)(struct dm_target *, struct request *, blk_status_t, union map_info___2 *);
+
+typedef void (*dm_presuspend_fn)(struct dm_target *);
+
+typedef void (*dm_presuspend_undo_fn)(struct dm_target *);
+
+typedef void (*dm_postsuspend_fn)(struct dm_target *);
+
+typedef int (*dm_preresume_fn)(struct dm_target *);
+
+typedef void (*dm_resume_fn)(struct dm_target *);
+
+typedef enum {
+	STATUSTYPE_INFO = 0,
+	STATUSTYPE_TABLE = 1,
+	STATUSTYPE_IMA = 2,
+} status_type_t;
+
+typedef void (*dm_status_fn)(struct dm_target *, status_type_t, unsigned int, char *, unsigned int);
+
+typedef int (*dm_message_fn)(struct dm_target *, unsigned int, char **, char *, unsigned int);
+
+typedef int (*dm_prepare_ioctl_fn)(struct dm_target *, struct block_device **);
+
+struct dm_report_zones_args;
+
+typedef int (*dm_report_zones_fn)(struct dm_target *, struct dm_report_zones_args *, unsigned int);
+
+typedef int (*dm_busy_fn)(struct dm_target *);
+
+struct dm_dev;
+
+typedef int (*iterate_devices_callout_fn)(struct dm_target *, struct dm_dev *, sector_t, sector_t, void *);
+
+typedef int (*dm_iterate_devices_fn)(struct dm_target *, iterate_devices_callout_fn, void *);
+
+typedef void (*dm_io_hints_fn)(struct dm_target *, struct queue_limits *);
+
+typedef long (*dm_dax_direct_access_fn)(struct dm_target *, unsigned long, long, enum dax_access_mode, void **, pfn_t *);
+
+typedef int (*dm_dax_zero_page_range_fn)(struct dm_target *, unsigned long, size_t);
+
+typedef size_t (*dm_dax_recovery_write_fn)(struct dm_target *, unsigned long, void *, size_t, struct iov_iter *);
+
+struct target_type {
+	uint64_t features;
+	const char *name;
+	struct module *module;
+	unsigned int version[3];
+	dm_ctr_fn ctr;
+	dm_dtr_fn dtr;
+	dm_map_fn map;
+	dm_clone_and_map_request_fn clone_and_map_rq;
+	dm_release_clone_request_fn release_clone_rq;
+	dm_endio_fn end_io;
+	dm_request_endio_fn rq_end_io;
+	dm_presuspend_fn presuspend;
+	dm_presuspend_undo_fn presuspend_undo;
+	dm_postsuspend_fn postsuspend;
+	dm_preresume_fn preresume;
+	dm_resume_fn resume;
+	dm_status_fn status;
+	dm_message_fn message;
+	dm_prepare_ioctl_fn prepare_ioctl;
+	dm_report_zones_fn report_zones;
+	dm_busy_fn busy;
+	dm_iterate_devices_fn iterate_devices;
+	dm_io_hints_fn io_hints;
+	dm_dax_direct_access_fn direct_access;
+	dm_dax_zero_page_range_fn dax_zero_page_range;
+	dm_dax_recovery_write_fn dax_recovery_write;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	struct list_head list;
+};
+
+union map_info___2 {
+	void *ptr;
+};
+
+struct dm_report_zones_args {
+	struct dm_target *tgt;
+	sector_t next_sector;
+	void *orig_data;
+	report_zones_cb orig_cb;
+	unsigned int zone_idx;
+	sector_t start;
+};
+
+struct dm_dev {
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	blk_mode_t mode;
+	char name[16];
+};
+
+enum dm_queue_mode {
+	DM_TYPE_NONE = 0,
+	DM_TYPE_BIO_BASED = 1,
+	DM_TYPE_REQUEST_BASED = 2,
+	DM_TYPE_DAX_BIO_BASED = 3,
+};
+
+struct dm_stats_last_position;
+
+struct dm_stats {
+	struct mutex mutex;
+	struct list_head list;
+	struct dm_stats_last_position __attribute__((btf_type_tag("percpu"))) *last;
+	bool precise_timestamps;
+};
+
+struct dm_kobject_holder {
+	struct kobject kobj;
+	struct completion completion;
+};
+
+struct dm_io;
+
+struct dm_md_mempools;
+
+struct mapped_device {
+	struct mutex suspend_lock;
+	struct mutex table_devices_lock;
+	struct list_head table_devices;
+	void __attribute__((btf_type_tag("rcu"))) *map;
+	unsigned long flags;
+	struct mutex type_lock;
+	enum dm_queue_mode type;
+	int numa_node_id;
+	struct request_queue *queue;
+	atomic_t holders;
+	atomic_t open_count;
+	struct dm_target *immutable_target;
+	struct target_type *immutable_target_type;
+	char name[16];
+	struct gendisk *disk;
+	struct dax_device *dax_dev;
+	wait_queue_head_t wait;
+	unsigned long __attribute__((btf_type_tag("percpu"))) *pending_io;
+	struct hd_geometry geometry;
+	struct workqueue_struct *wq;
+	struct work_struct work;
+	spinlock_t deferred_lock;
+	struct bio_list deferred;
+	struct work_struct requeue_work;
+	struct dm_io *requeue_list;
+	void *interface_ptr;
+	wait_queue_head_t eventq;
+	atomic_t event_nr;
+	atomic_t uevent_seq;
+	struct list_head uevent_list;
+	spinlock_t uevent_lock;
+	bool init_tio_pdu: 1;
+	struct blk_mq_tag_set *tag_set;
+	struct dm_stats stats;
+	unsigned int internal_suspend_count;
+	int swap_bios;
+	struct semaphore swap_bios_semaphore;
+	struct mutex swap_bios_lock;
+	struct dm_md_mempools *mempools;
+	struct dm_kobject_holder kobj_holder;
+	struct srcu_struct io_barrier;
+	unsigned int nr_zones;
+	unsigned int *zwp_offset;
+};
+
+struct dm_table {
+	struct mapped_device *md;
+	enum dm_queue_mode type;
+	unsigned int depth;
+	unsigned int counts[16];
+	sector_t *index[16];
+	unsigned int num_targets;
+	unsigned int num_allocated;
+	sector_t *highs;
+	struct dm_target *targets;
+	struct target_type *immutable_target_type;
+	bool integrity_supported: 1;
+	bool singleton: 1;
+	bool integrity_added: 1;
+	bool flush_bypasses_map: 1;
+	blk_mode_t mode;
+	struct list_head devices;
+	struct rw_semaphore devices_lock;
+	void (*event_fn)(void *);
+	void *event_context;
+	struct dm_md_mempools *mempools;
+	struct blk_crypto_profile *crypto_profile;
+};
+
+struct dm_md_mempools {
+	struct bio_set bs;
+	struct bio_set io_bs;
+};
+
+typedef u16 blk_short_t;
+
+struct dm_stats_aux {
+	bool merged;
+	unsigned long long duration_ns;
+};
+
+struct dm_target_io {
+	unsigned short magic;
+	blk_short_t flags;
+	unsigned int target_bio_nr;
+	struct dm_io *io;
+	struct dm_target *ti;
+	unsigned int *len_ptr;
+	sector_t old_sector;
+	struct bio clone;
+};
+
+struct dm_io {
+	unsigned short magic;
+	blk_short_t flags;
+	spinlock_t lock;
+	unsigned long start_time;
+	void *data;
+	struct dm_io *next;
+	struct dm_stats_aux stats_aux;
+	blk_status_t status;
+	atomic_t io_count;
+	struct mapped_device *md;
+	struct bio *orig_bio;
+	unsigned int sector_offset;
+	unsigned int sectors;
+	struct dm_target_io tio;
+};
+
+struct dm_stats_last_position {
+	sector_t last_sector;
+	unsigned int last_rw;
+};
+
+struct orig_bio_details {
+	enum req_op op;
+	unsigned int nr_sectors;
+};
+
+enum {
+	DM_TIO_INSIDE_DM_IO = 0,
+	DM_TIO_IS_DUPLICATE_BIO = 1,
+};
+
+enum {
+	DM_IO_ACCOUNTED = 0,
+	DM_IO_WAS_SPLIT = 1,
+	DM_IO_BLK_STAT = 2,
+};
+
+struct table_device {
+	struct list_head list;
+	refcount_t count;
+	struct dm_dev dm_dev;
+};
+
+struct dm_dev_internal {
+	struct list_head list;
+	refcount_t count;
+	struct dm_dev *dm_dev;
+};
+
+struct clone_info {
+	struct dm_table *map;
+	struct bio *bio;
+	struct dm_io *io;
+	sector_t sector;
+	unsigned int sector_count;
+	bool is_abnormal_io: 1;
+	bool submit_as_polled: 1;
+};
+
+struct dm_pr {
+	u64 old_key;
+	u64 new_key;
+	u32 flags;
+	bool abort;
+	bool fail_early;
+	int ret;
+	enum pr_type type;
+	struct pr_keys *read_keys;
+	struct pr_held_reservation *rsv;
+};
+
+enum suspend_mode {
+	PRESUSPEND = 0,
+	PRESUSPEND_UNDO = 1,
+	POSTSUSPEND = 2,
+};
+
+struct dm_crypto_profile {
+	struct blk_crypto_profile profile;
+	struct mapped_device *md;
+};
+
+struct dm_arg_set {
+	unsigned int argc;
+	char **argv;
+};
+
+struct dm_arg {
+	unsigned int min;
+	unsigned int max;
+	char *error;
+};
+
+struct dm_derive_sw_secret_args {
+	const u8 *eph_key;
+	size_t eph_key_size;
+	u8 *sw_secret;
+	int err;
+};
+
+struct linear_c {
+	struct dm_dev *dev;
+	sector_t start;
+};
+
+struct stripe {
+	struct dm_dev *dev;
+	sector_t physical_start;
+	atomic_t error_count;
+};
+
+struct stripe_c {
+	uint32_t stripes;
+	int stripes_shift;
+	sector_t stripe_width;
+	uint32_t chunk_size;
+	int chunk_size_shift;
+	struct dm_target *ti;
+	struct work_struct trigger_event;
+	struct stripe stripe[0];
+};
+
+struct dm_ioctl;
+
+typedef int (*ioctl_fn___2)(struct file *, struct dm_ioctl *, size_t);
+
+struct dm_ioctl {
+	__u32 version[3];
+	__u32 data_size;
+	__u32 data_start;
+	__u32 target_count;
+	__s32 open_count;
+	__u32 flags;
+	__u32 event_nr;
+	__u32 padding;
+	__u64 dev;
+	char name[128];
+	char uuid[129];
+	char data[7];
+};
+
+enum {
+	DM_VERSION_CMD = 0,
+	DM_REMOVE_ALL_CMD = 1,
+	DM_LIST_DEVICES_CMD = 2,
+	DM_DEV_CREATE_CMD = 3,
+	DM_DEV_REMOVE_CMD = 4,
+	DM_DEV_RENAME_CMD = 5,
+	DM_DEV_SUSPEND_CMD = 6,
+	DM_DEV_STATUS_CMD = 7,
+	DM_DEV_WAIT_CMD = 8,
+	DM_TABLE_LOAD_CMD = 9,
+	DM_TABLE_CLEAR_CMD = 10,
+	DM_TABLE_DEPS_CMD = 11,
+	DM_TABLE_STATUS_CMD = 12,
+	DM_LIST_VERSIONS_CMD = 13,
+	DM_TARGET_MSG_CMD = 14,
+	DM_DEV_SET_GEOMETRY_CMD = 15,
+	DM_DEV_ARM_POLL_CMD = 16,
+	DM_GET_TARGET_VERSION_CMD = 17,
+};
+
+struct hash_cell {
+	struct rb_node name_node;
+	struct rb_node uuid_node;
+	bool name_set;
+	bool uuid_set;
+	char *name;
+	char *uuid;
+	struct mapped_device *md;
+	struct dm_table *new_map;
+};
+
+struct dm_target_spec {
+	__u64 sector_start;
+	__u64 length;
+	__s32 status;
+	__u32 next;
+	char target_type[16];
+};
+
+struct dm_target_msg {
+	__u64 sector;
+	char message[0];
+};
+
+struct dm_target_deps {
+	__u32 count;
+	__u32 padding;
+	__u64 dev[0];
+};
+
+struct dm_target_versions;
+
+struct vers_iter {
+	size_t param_size;
+	struct dm_target_versions *vers;
+	struct dm_target_versions *old_vers;
+	char *end;
+	uint32_t flags;
+};
+
+struct dm_target_versions {
+	__u32 next;
+	__u32 version[3];
+	char name[0];
+};
+
+struct dm_file {
+	volatile unsigned int global_event_nr;
+};
+
+struct dm_name_list {
+	__u64 dev;
+	__u32 next;
+	char name[0];
+};
+
+enum dm_io_mem_type {
+	DM_IO_PAGE_LIST = 0,
+	DM_IO_BIO = 1,
+	DM_IO_VMA = 2,
+	DM_IO_KMEM = 3,
+};
+
+struct page_list;
+
+struct dm_io_memory {
+	enum dm_io_mem_type type;
+	unsigned int offset;
+	union {
+		struct page_list *pl;
+		struct bio *bio;
+		void *vma;
+		void *addr;
+	} ptr;
+};
+
+typedef void (*io_notify_fn)(unsigned long, void *);
+
+struct dm_io_notify {
+	io_notify_fn fn;
+	void *context;
+};
+
+struct dm_io_client;
+
+struct dm_io_request {
+	blk_opf_t bi_opf;
+	struct dm_io_memory mem;
+	struct dm_io_notify notify;
+	struct dm_io_client *client;
+};
+
+struct page_list {
+	struct page_list *next;
+	struct page *page;
+};
+
+struct dm_io_client {
+	mempool_t pool;
+	struct bio_set bios;
+};
+
+struct dpages {
+	void (*get_page)(struct dpages *, struct page **, unsigned long *, unsigned int *);
+	void (*next_page)(struct dpages *);
+	union {
+		unsigned int context_u;
+		struct bvec_iter context_bi;
+	};
+	void *context_ptr;
+	void *vma_invalidate_address;
+	unsigned long vma_invalidate_size;
+};
+
+struct dm_io_region {
+	struct block_device *bdev;
+	sector_t sector;
+	sector_t count;
+};
+
+struct io {
+	unsigned long error_bits;
+	atomic_t count;
+	struct dm_io_client *client;
+	io_notify_fn callback;
+	void *context;
+	void *vma_invalidate_address;
+	unsigned long vma_invalidate_size;
+	long: 64;
+};
+
+struct sync_io {
+	unsigned long error_bits;
+	struct completion wait;
+};
+
+struct dm_kcopyd_throttle;
+
+struct dm_kcopyd_client {
+	struct page_list *pages;
+	unsigned int nr_reserved_pages;
+	unsigned int nr_free_pages;
+	unsigned int sub_job_size;
+	struct dm_io_client *io_client;
+	wait_queue_head_t destroyq;
+	mempool_t job_pool;
+	struct workqueue_struct *kcopyd_wq;
+	struct work_struct kcopyd_work;
+	struct dm_kcopyd_throttle *throttle;
+	atomic_t nr_jobs;
+	spinlock_t job_lock;
+	struct list_head callback_jobs;
+	struct list_head complete_jobs;
+	struct list_head io_jobs;
+	struct list_head pages_jobs;
+};
+
+struct dm_kcopyd_throttle {
+	unsigned int throttle;
+	unsigned int num_io_jobs;
+	unsigned int io_period;
+	unsigned int total_period;
+	unsigned int last_jiffies;
+};
+
+typedef void (*dm_kcopyd_notify_fn)(int, unsigned long, void *);
+
+struct kcopyd_job {
+	struct dm_kcopyd_client *kc;
+	struct list_head list;
+	unsigned int flags;
+	int read_err;
+	unsigned long write_err;
+	enum req_op op;
+	struct dm_io_region source;
+	unsigned int num_dests;
+	struct dm_io_region dests[8];
+	struct page_list *pages;
+	dm_kcopyd_notify_fn fn;
+	void *context;
+	struct mutex lock;
+	atomic_t sub_jobs;
+	sector_t progress;
+	sector_t write_offset;
+	struct kcopyd_job *master_job;
+};
+
+struct dm_sysfs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct mapped_device *, char *);
+	ssize_t (*store)(struct mapped_device *, const char *, size_t);
+};
+
+struct dm_stat_percpu {
+	unsigned long long sectors[2];
+	unsigned long long ios[2];
+	unsigned long long merges[2];
+	unsigned long long ticks[2];
+	unsigned long long io_ticks[2];
+	unsigned long long io_ticks_total;
+	unsigned long long time_in_queue;
+	unsigned long long *histogram;
+};
+
+struct dm_stat_shared {
+	atomic_t in_flight[2];
+	unsigned long long stamp;
+	struct dm_stat_percpu tmp;
+};
+
+struct dm_stat {
+	struct list_head list_entry;
+	int id;
+	unsigned int stat_flags;
+	size_t n_entries;
+	sector_t start;
+	sector_t end;
+	sector_t step;
+	unsigned int n_histogram_entries;
+	unsigned long long *histogram_boundaries;
+	const char *program_id;
+	const char *aux_data;
+	struct callback_head callback_head;
+	size_t shared_alloc_size;
+	size_t percpu_alloc_size;
+	size_t histogram_alloc_size;
+	struct dm_stat_percpu *stat_percpu[32];
+	struct dm_stat_shared stat_shared[0];
+};
+
+struct dm_rq_target_io;
+
+struct dm_rq_clone_bio_info {
+	struct bio *orig;
+	struct dm_rq_target_io *tio;
+	struct bio clone;
+};
+
+struct dm_rq_target_io {
+	struct mapped_device *md;
+	struct dm_target *ti;
+	struct request *orig;
+	struct request *clone;
+	struct kthread_work work;
+	blk_status_t error;
+	union map_info___2 info;
+	struct dm_stats_aux stats_aux;
+	unsigned long duration_jiffies;
+	unsigned int n_sectors;
+	unsigned int completed;
+};
+
+enum new_flag {
+	NF_FRESH = 0,
+	NF_READ = 1,
+	NF_GET = 2,
+	NF_PREFETCH = 3,
+};
+
+enum evict_result {
+	ER_EVICT = 0,
+	ER_DONT_EVICT = 1,
+	ER_STOP = 2,
+};
+
+enum data_mode {
+	DATA_MODE_SLAB = 0,
+	DATA_MODE_GET_FREE_PAGES = 1,
+	DATA_MODE_VMALLOC = 2,
+	DATA_MODE_LIMIT = 3,
+};
+
+enum it_action {
+	IT_NEXT = 0,
+	IT_COMPLETE = 1,
+};
+
+struct lru_entry {
+	struct list_head list;
+	atomic_t referenced;
+};
+
+struct dm_bufio_client;
+
+struct dm_buffer {
+	struct rb_node node;
+	sector_t block;
+	void *data;
+	unsigned char data_mode;
+	atomic_t hold_count;
+	unsigned long last_accessed;
+	unsigned long state;
+	struct lru_entry lru;
+	unsigned char list_mode;
+	blk_status_t read_error;
+	blk_status_t write_error;
+	unsigned int dirty_start;
+	unsigned int dirty_end;
+	unsigned int write_start;
+	unsigned int write_end;
+	struct list_head write_list;
+	struct dm_bufio_client *c;
+	void (*end_io)(struct dm_buffer *, blk_status_t);
+};
+
+struct lru {
+	struct list_head *cursor;
+	unsigned long count;
+	struct list_head iterators;
+};
+
+struct buffer_tree {
+	union {
+		struct rw_semaphore lock;
+		rwlock_t spinlock;
+	} u;
+	struct rb_root root;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct dm_buffer_cache {
+	struct lru lru[2];
+	unsigned int num_locks;
+	bool no_sleep;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct buffer_tree trees[0];
+};
+
+struct dm_bufio_client {
+	struct block_device *bdev;
+	unsigned int block_size;
+	s8 sectors_per_block_bits;
+	bool no_sleep;
+	struct mutex lock;
+	spinlock_t spinlock;
+	int async_write_error;
+	void (*alloc_callback)(struct dm_buffer *);
+	void (*write_callback)(struct dm_buffer *);
+	struct kmem_cache *slab_buffer;
+	struct kmem_cache *slab_cache;
+	struct dm_io_client *dm_io;
+	struct list_head reserved_buffers;
+	unsigned int need_reserved_buffers;
+	unsigned int minimum_buffers;
+	sector_t start;
+	struct shrinker shrinker;
+	struct work_struct shrink_work;
+	atomic_long_t need_shrink;
+	wait_queue_head_t free_buffer_wait;
+	struct list_head client_list;
+	unsigned long oldest_buffer;
+	long: 64;
+	struct dm_buffer_cache cache;
+};
+
+struct lru_iter {
+	struct lru *lru;
+	struct list_head list;
+	struct lru_entry *stop;
+	struct lru_entry *e;
+};
+
+struct lock_history {
+	struct dm_buffer_cache *cache;
+	bool write;
+	unsigned int previous;
+	unsigned int no_previous;
+};
+
+typedef enum evict_result (*b_predicate)(struct dm_buffer *, void *);
+
+struct evict_wrapper {
+	struct lock_history *lh;
+	b_predicate pred;
+	void *context;
+};
+
+typedef bool (*iter_predicate)(struct lru_entry *, void *);
+
+typedef void (*b_release)(struct dm_buffer *);
+
+typedef enum it_action (*iter_fn)(struct dm_buffer *, void *);
+
+struct evict_params {
+	gfp_t gfp;
+	unsigned long age_hz;
+	unsigned long last_accessed;
+};
+
+struct write_context {
+	int no_wait;
+	struct list_head *write_list;
+};
+
+typedef enum evict_result (*le_predicate)(struct lru_entry *, void *);
+
+struct crypt_config;
+
+struct dm_crypt_request;
+
+struct crypt_iv_operations {
+	int (*ctr)(struct crypt_config *, struct dm_target *, const char *);
+	void (*dtr)(struct crypt_config *);
+	int (*init)(struct crypt_config *);
+	int (*wipe)(struct crypt_config *);
+	int (*generator)(struct crypt_config *, u8 *, struct dm_crypt_request *);
+	int (*post)(struct crypt_config *, u8 *, struct dm_crypt_request *);
+};
+
+struct iv_benbi_private {
+	int shift;
+};
+
+struct iv_lmk_private {
+	struct crypto_shash *hash_tfm;
+	u8 *seed;
+};
+
+struct iv_tcw_private {
+	struct crypto_shash *crc32_tfm;
+	u8 *iv_seed;
+	u8 *whitening;
+};
+
+struct iv_elephant_private {
+	struct crypto_skcipher *tfm;
+};
+
+struct crypt_config {
+	struct dm_dev *dev;
+	sector_t start;
+	struct percpu_counter n_allocated_pages;
+	struct workqueue_struct *io_queue;
+	struct workqueue_struct *crypt_queue;
+	spinlock_t write_thread_lock;
+	struct task_struct *write_thread;
+	struct rb_root write_tree;
+	char *cipher_string;
+	char *cipher_auth;
+	char *key_string;
+	const struct crypt_iv_operations *iv_gen_ops;
+	union {
+		struct iv_benbi_private benbi;
+		struct iv_lmk_private lmk;
+		struct iv_tcw_private tcw;
+		struct iv_elephant_private elephant;
+	} iv_gen_private;
+	u64 iv_offset;
+	unsigned int iv_size;
+	unsigned short sector_size;
+	unsigned char sector_shift;
+	union {
+		struct crypto_skcipher **tfms;
+		struct crypto_aead **tfms_aead;
+	} cipher_tfm;
+	unsigned int tfms_count;
+	unsigned long cipher_flags;
+	unsigned int dmreq_start;
+	unsigned int per_bio_data_size;
+	unsigned long flags;
+	unsigned int key_size;
+	unsigned int key_parts;
+	unsigned int key_extra_size;
+	unsigned int key_mac_size;
+	unsigned int integrity_tag_size;
+	unsigned int integrity_iv_size;
+	unsigned int on_disk_tag_size;
+	unsigned int tag_pool_max_sectors;
+	mempool_t tag_pool;
+	mempool_t req_pool;
+	mempool_t page_pool;
+	struct bio_set bs;
+	struct mutex bio_alloc_lock;
+	u8 *authenc_key;
+	u8 key[0];
+};
+
+struct convert_context;
+
+struct dm_crypt_request {
+	struct convert_context *ctx;
+	struct scatterlist sg_in[4];
+	struct scatterlist sg_out[4];
+	u64 iv_sector;
+};
+
+struct convert_context {
+	struct completion restart;
+	struct bio *bio_in;
+	struct bvec_iter iter_in;
+	struct bio *bio_out;
+	struct bvec_iter iter_out;
+	atomic_t cc_pending;
+	u64 cc_sector;
+	union {
+		struct skcipher_request *req;
+		struct aead_request *req_aead;
+	} r;
+	bool aead_recheck;
+	bool aead_failed;
+};
+
+enum flags {
+	DM_CRYPT_SUSPENDED = 0,
+	DM_CRYPT_KEY_VALID = 1,
+	DM_CRYPT_SAME_CPU = 2,
+	DM_CRYPT_NO_OFFLOAD = 3,
+	DM_CRYPT_NO_READ_WORKQUEUE = 4,
+	DM_CRYPT_NO_WRITE_WORKQUEUE = 5,
+	DM_CRYPT_WRITE_INLINE = 6,
+};
+
+enum cipher_flags {
+	CRYPT_MODE_INTEGRITY_AEAD = 0,
+	CRYPT_IV_LARGE_SECTORS = 1,
+	CRYPT_ENCRYPT_PREPROCESS = 2,
+};
+
+struct dm_crypt_io {
+	struct crypt_config *cc;
+	struct bio *base_bio;
+	u8 *integrity_metadata;
+	bool integrity_metadata_from_pool: 1;
+	struct work_struct work;
+	struct convert_context ctx;
+	atomic_t io_pending;
+	blk_status_t error;
+	sector_t sector;
+	struct bvec_iter saved_bi_iter;
+	struct rb_node rb_node;
+};
+
+struct dm_default_key_cipher {
+	const char *name;
+	enum blk_crypto_mode_num mode_num;
+	int key_size;
+};
+
+struct default_key_c {
+	struct dm_dev *dev;
+	sector_t start;
+	const char *cipher_string;
+	u64 iv_offset;
+	unsigned int sector_size;
+	unsigned int sector_bits;
+	struct blk_crypto_key key;
+	enum blk_crypto_key_type key_type;
+	u64 max_dun;
+};
+
+struct dm_exception_table {
+	uint32_t hash_mask;
+	unsigned int hash_shift;
+	struct hlist_bl_head *table;
+};
+
+typedef sector_t chunk_t;
+
+struct dm_exception_store;
+
+struct dm_snapshot {
+	struct rw_semaphore lock;
+	struct dm_dev *origin;
+	struct dm_dev *cow;
+	struct dm_target *ti;
+	struct list_head list;
+	int valid;
+	int snapshot_overflowed;
+	int active;
+	atomic_t pending_exceptions_count;
+	spinlock_t pe_allocation_lock;
+	sector_t exception_start_sequence;
+	sector_t exception_complete_sequence;
+	struct rb_root out_of_order_tree;
+	mempool_t pending_pool;
+	struct dm_exception_table pending;
+	struct dm_exception_table complete;
+	spinlock_t pe_lock;
+	spinlock_t tracked_chunk_lock;
+	struct hlist_head tracked_chunk_hash[16];
+	struct dm_exception_store *store;
+	unsigned int in_progress;
+	struct wait_queue_head in_progress_wait;
+	struct dm_kcopyd_client *kcopyd_client;
+	unsigned long state_bits;
+	chunk_t first_merging_chunk;
+	int num_merging_chunks;
+	bool merge_failed: 1;
+	bool discard_zeroes_cow: 1;
+	bool discard_passdown_origin: 1;
+	struct bio_list bios_queued_during_merge;
+};
+
+struct dm_exception_store_type;
+
+struct dm_exception_store {
+	struct dm_exception_store_type *type;
+	struct dm_snapshot *snap;
+	unsigned int chunk_size;
+	unsigned int chunk_mask;
+	unsigned int chunk_shift;
+	void *context;
+	bool userspace_supports_overflow;
+};
+
+struct dm_exception;
+
+struct dm_exception_store_type {
+	const char *name;
+	struct module *module;
+	int (*ctr)(struct dm_exception_store *, char *);
+	void (*dtr)(struct dm_exception_store *);
+	int (*read_metadata)(struct dm_exception_store *, int (*)(void *, chunk_t, chunk_t), void *);
+	int (*prepare_exception)(struct dm_exception_store *, struct dm_exception *);
+	void (*commit_exception)(struct dm_exception_store *, struct dm_exception *, int, void (*)(void *, int), void *);
+	int (*prepare_merge)(struct dm_exception_store *, chunk_t *, chunk_t *);
+	int (*commit_merge)(struct dm_exception_store *, int);
+	void (*drop_snapshot)(struct dm_exception_store *);
+	unsigned int (*status)(struct dm_exception_store *, status_type_t, char *, unsigned int);
+	void (*usage)(struct dm_exception_store *, sector_t *, sector_t *, sector_t *);
+	struct list_head list;
+};
+
+struct dm_exception {
+	struct hlist_bl_node hash_list;
+	chunk_t old_chunk;
+	chunk_t new_chunk;
+};
+
+struct origin {
+	struct block_device *bdev;
+	struct list_head hash_list;
+	struct list_head snapshots;
+};
+
+struct dm_snap_pending_exception {
+	struct dm_exception e;
+	struct bio_list origin_bios;
+	struct bio_list snapshot_bios;
+	struct dm_snapshot *snap;
+	int started;
+	int copy_error;
+	sector_t exception_sequence;
+	struct rb_node out_of_order_node;
+	struct bio *full_bio;
+	bio_end_io_t *full_bio_end_io;
+};
+
+struct dm_snap_tracked_chunk {
+	struct hlist_node node;
+	chunk_t chunk;
+};
+
+struct dm_origin {
+	struct dm_dev *dev;
+	struct dm_target *ti;
+	unsigned int split_boundary;
+	struct list_head hash_list;
+};
+
+struct dm_exception_table_lock {
+	struct hlist_bl_head *complete_slot;
+	struct hlist_bl_head *pending_slot;
+};
+
+struct transient_c {
+	sector_t next_free;
+};
+
+struct mdata_req {
+	struct dm_io_region *where;
+	struct dm_io_request *io_req;
+	struct work_struct work;
+	int result;
+};
+
+struct disk_exception {
+	__le64 old_chunk;
+	__le64 new_chunk;
+};
+
+struct commit_callback;
+
+struct pstore {
+	struct dm_exception_store *store;
+	int version;
+	int valid;
+	uint32_t exceptions_per_area;
+	void *area;
+	void *zero_area;
+	void *header_area;
+	chunk_t current_area;
+	chunk_t next_free;
+	uint32_t current_committed;
+	atomic_t pending_count;
+	uint32_t callback_count;
+	struct commit_callback *callbacks;
+	struct dm_io_client *io_client;
+	struct workqueue_struct *metadata_wq;
+};
+
+struct commit_callback {
+	void (*callback)(void *, int);
+	void *context;
+};
+
+struct disk_header {
+	__le32 magic;
+	__le32 valid;
+	__le32 version;
+	__le32 chunk_size;
+};
+
+struct core_exception {
+	uint64_t old_chunk;
+	uint64_t new_chunk;
+};
+
+enum verity_mode {
+	DM_VERITY_MODE_EIO = 0,
+	DM_VERITY_MODE_LOGGING = 1,
+	DM_VERITY_MODE_RESTART = 2,
+	DM_VERITY_MODE_PANIC = 3,
+};
+
+enum verity_block_type {
+	DM_VERITY_BLOCK_TYPE_DATA = 0,
+	DM_VERITY_BLOCK_TYPE_METADATA = 1,
+};
+
+struct dm_verity_fec_io {
+	struct rs_control *rs;
+	int erasures[253];
+	u8 *bufs[256];
+	unsigned int nbufs;
+	u8 *output;
+	unsigned int level;
+};
+
+struct dm_verity_fec;
+
+struct dm_verity {
+	struct dm_dev *data_dev;
+	struct dm_dev *hash_dev;
+	struct dm_target *ti;
+	struct dm_bufio_client *bufio;
+	char *alg_name;
+	struct crypto_ahash *ahash_tfm;
+	struct crypto_shash *shash_tfm;
+	u8 *root_digest;
+	u8 *salt;
+	u8 *initial_hashstate;
+	u8 *zero_digest;
+	unsigned int salt_size;
+	sector_t data_start;
+	sector_t hash_start;
+	sector_t data_blocks;
+	sector_t hash_blocks;
+	unsigned char data_dev_block_bits;
+	unsigned char hash_dev_block_bits;
+	unsigned char hash_per_block_bits;
+	unsigned char levels;
+	unsigned char version;
+	bool hash_failed: 1;
+	bool use_tasklet: 1;
+	unsigned char mb_max_msgs;
+	unsigned int digest_size;
+	unsigned int hash_reqsize;
+	enum verity_mode mode;
+	unsigned int corrupted_errs;
+	struct workqueue_struct *verify_wq;
+	sector_t hash_level_block[63];
+	struct dm_verity_fec *fec;
+	unsigned long *validated_blocks;
+	char *signature_key_desc;
+	struct dm_io_client *io;
+	mempool_t recheck_pool;
+};
+
+struct dm_verity_fec {
+	struct dm_dev *dev;
+	struct dm_bufio_client *data_bufio;
+	struct dm_bufio_client *bufio;
+	size_t io_size;
+	sector_t start;
+	sector_t blocks;
+	sector_t rounds;
+	sector_t hash_blocks;
+	unsigned char roots;
+	unsigned char rsn;
+	mempool_t rs_pool;
+	mempool_t prealloc_pool;
+	mempool_t extra_pool;
+	mempool_t output_pool;
+	struct kmem_cache *cache;
+};
+
+struct pending_block {
+	void *data;
+	sector_t blkno;
+	u8 want_digest[64];
+	u8 real_digest[64];
+};
+
+struct dm_verity_io {
+	struct dm_verity *v;
+	bio_end_io_t *orig_bi_end_io;
+	struct bvec_iter iter;
+	sector_t block;
+	unsigned int n_blocks;
+	bool in_tasklet;
+	struct work_struct work;
+	u8 tmp_digest[64];
+	int num_pending;
+	struct pending_block pending_blocks[2];
+};
+
+struct dm_verity_prefetch_work {
+	struct work_struct work;
+	struct dm_verity *v;
+	unsigned short ioprio;
+	sector_t block;
+	unsigned int n_blocks;
+};
+
+struct buffer_aux {
+	int hash_verified;
+};
+
+struct dm_verity_sig_opts {
+	unsigned int sig_size;
+	u8 *sig;
+};
+
+struct dm_user_message {
+	__u64 seq;
+	__u64 type;
+	__u64 flags;
+	__u64 sector;
+	__u64 len;
+	__u8 buf[0];
+};
+
+struct target;
+
+struct message {
+	struct dm_user_message msg;
+	struct bio *bio;
+	size_t posn_to_user;
+	size_t total_to_user;
+	size_t posn_from_user;
+	size_t total_from_user;
+	struct list_head from_user;
+	struct list_head to_user;
+	u64 return_type;
+	u64 return_flags;
+	struct delayed_work work;
+	bool delayed;
+	struct target *t;
+};
+
+struct target {
+	struct mutex lock;
+	struct wait_queue_head wq;
+	mempool_t message_pool;
+	u64 next_seq_to_map;
+	u64 next_seq_to_user;
+	struct list_head to_user;
+	struct miscdevice miscdev;
+	struct kref references;
+	int dm_destroyed;
+	bool daemon_terminated;
+};
+
+struct channel {
+	struct target *target;
+	struct mutex lock;
+	struct message *cur_to_user;
+	struct message *cur_from_user;
+	ssize_t to_user_error;
+	ssize_t from_user_error;
+	struct list_head from_user;
+	struct message scratch_message_from_user;
+};
+
+enum scrub_type {
+	SCRUB_UNKNOWN = 0,
+	SCRUB_NONE = 1,
+	SCRUB_SW_PROG = 2,
+	SCRUB_SW_SRC = 3,
+	SCRUB_SW_PROG_SRC = 4,
+	SCRUB_SW_TUNABLE = 5,
+	SCRUB_HW_PROG = 6,
+	SCRUB_HW_SRC = 7,
+	SCRUB_HW_PROG_SRC = 8,
+	SCRUB_HW_TUNABLE = 9,
+};
+
+enum edac_mc_layer_type {
+	EDAC_MC_LAYER_BRANCH = 0,
+	EDAC_MC_LAYER_CHANNEL = 1,
+	EDAC_MC_LAYER_SLOT = 2,
+	EDAC_MC_LAYER_CHIP_SELECT = 3,
+	EDAC_MC_LAYER_ALL_MEM = 4,
+};
+
+enum hw_event_mc_err_type {
+	HW_EVENT_ERR_CORRECTED = 0,
+	HW_EVENT_ERR_UNCORRECTED = 1,
+	HW_EVENT_ERR_DEFERRED = 2,
+	HW_EVENT_ERR_FATAL = 3,
+	HW_EVENT_ERR_INFO = 4,
+};
+
+enum dev_type {
+	DEV_UNKNOWN = 0,
+	DEV_X1 = 1,
+	DEV_X2 = 2,
+	DEV_X4 = 3,
+	DEV_X8 = 4,
+	DEV_X16 = 5,
+	DEV_X32 = 6,
+	DEV_X64 = 7,
+};
+
+enum mem_type___2 {
+	MEM_EMPTY = 0,
+	MEM_RESERVED = 1,
+	MEM_UNKNOWN = 2,
+	MEM_FPM = 3,
+	MEM_EDO = 4,
+	MEM_BEDO = 5,
+	MEM_SDR = 6,
+	MEM_RDR = 7,
+	MEM_DDR = 8,
+	MEM_RDDR = 9,
+	MEM_RMBS = 10,
+	MEM_DDR2 = 11,
+	MEM_FB_DDR2 = 12,
+	MEM_RDDR2 = 13,
+	MEM_XDR = 14,
+	MEM_DDR3 = 15,
+	MEM_RDDR3 = 16,
+	MEM_LRDDR3 = 17,
+	MEM_LPDDR3 = 18,
+	MEM_DDR4 = 19,
+	MEM_RDDR4 = 20,
+	MEM_LRDDR4 = 21,
+	MEM_LPDDR4 = 22,
+	MEM_DDR5 = 23,
+	MEM_RDDR5 = 24,
+	MEM_LRDDR5 = 25,
+	MEM_NVDIMM = 26,
+	MEM_WIO2 = 27,
+	MEM_HBM2 = 28,
+};
+
+enum edac_type {
+	EDAC_UNKNOWN = 0,
+	EDAC_NONE = 1,
+	EDAC_RESERVED = 2,
+	EDAC_PARITY = 3,
+	EDAC_EC = 4,
+	EDAC_SECDED = 5,
+	EDAC_S2ECD2ED = 6,
+	EDAC_S4ECD4ED = 7,
+	EDAC_S8ECD8ED = 8,
+	EDAC_S16ECD16ED = 9,
+};
+
+struct mcidev_sysfs_attribute;
+
+struct edac_raw_error_desc {
+	char location[256];
+	char label[296];
+	long grain;
+	u16 error_count;
+	enum hw_event_mc_err_type type;
+	int top_layer;
+	int mid_layer;
+	int low_layer;
+	unsigned long page_frame_number;
+	unsigned long offset_in_page;
+	unsigned long syndrome;
+	const char *msg;
+	const char *other_detail;
+};
+
+struct csrow_info;
+
+struct edac_mc_layer;
+
+struct dimm_info;
+
+struct mem_ctl_info {
+	struct device dev;
+	struct bus_type *bus;
+	struct list_head link;
+	struct module *owner;
+	unsigned long mtype_cap;
+	unsigned long edac_ctl_cap;
+	unsigned long edac_cap;
+	unsigned long scrub_cap;
+	enum scrub_type scrub_mode;
+	int (*set_sdram_scrub_rate)(struct mem_ctl_info *, u32);
+	int (*get_sdram_scrub_rate)(struct mem_ctl_info *);
+	void (*edac_check)(struct mem_ctl_info *);
+	unsigned long (*ctl_page_to_phys)(struct mem_ctl_info *, unsigned long);
+	int mc_idx;
+	struct csrow_info **csrows;
+	unsigned int nr_csrows;
+	unsigned int num_cschannel;
+	unsigned int n_layers;
+	struct edac_mc_layer *layers;
+	bool csbased;
+	unsigned int tot_dimms;
+	struct dimm_info **dimms;
+	struct device *pdev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	unsigned long start_time;
+	u32 ce_noinfo_count;
+	u32 ue_noinfo_count;
+	u32 ue_mc;
+	u32 ce_mc;
+	struct completion complete;
+	const struct mcidev_sysfs_attribute *mc_driver_sysfs_attributes;
+	struct delayed_work work;
+	struct edac_raw_error_desc error_desc;
+	int op_state;
+	struct dentry *debugfs;
+	u8 fake_inject_layer[3];
+	bool fake_inject_ue;
+	u16 fake_inject_count;
+};
+
+struct rank_info;
+
+struct csrow_info {
+	struct device dev;
+	unsigned long first_page;
+	unsigned long last_page;
+	unsigned long page_mask;
+	int csrow_idx;
+	u32 ue_count;
+	u32 ce_count;
+	struct mem_ctl_info *mci;
+	u32 nr_channels;
+	struct rank_info **channels;
+};
+
+struct rank_info {
+	int chan_idx;
+	struct csrow_info *csrow;
+	struct dimm_info *dimm;
+	u32 ce_count;
+};
+
+struct dimm_info {
+	struct device dev;
+	char label[32];
+	unsigned int location[3];
+	struct mem_ctl_info *mci;
+	unsigned int idx;
+	u32 grain;
+	enum dev_type dtype;
+	enum mem_type___2 mtype;
+	enum edac_type edac_mode;
+	u32 nr_pages;
+	unsigned int csrow;
+	unsigned int cschannel;
+	u16 smbios_handle;
+	u32 ce_count;
+	u32 ue_count;
+};
+
+struct edac_mc_layer {
+	enum edac_mc_layer_type type;
+	unsigned int size;
+	bool is_virt_csrow;
+};
+
+struct edac_device_counter {
+	u32 ue_count;
+	u32 ce_count;
+};
+
+struct edac_dev_sysfs_attribute;
+
+struct edac_device_instance;
+
+struct edac_device_block;
+
+struct edac_dev_sysfs_block_attribute;
+
+struct edac_device_ctl_info {
+	struct list_head link;
+	struct module *owner;
+	int dev_idx;
+	int log_ue;
+	int log_ce;
+	int panic_on_ue;
+	unsigned int poll_msec;
+	unsigned long delay;
+	struct edac_dev_sysfs_attribute *sysfs_attributes;
+	struct bus_type *edac_subsys;
+	int op_state;
+	struct delayed_work work;
+	void (*edac_check)(struct edac_device_ctl_info *);
+	struct device *dev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	unsigned long start_time;
+	struct completion removal_complete;
+	char name[32];
+	u32 nr_instances;
+	struct edac_device_instance *instances;
+	struct edac_device_block *blocks;
+	struct edac_dev_sysfs_block_attribute *attribs;
+	struct edac_device_counter counters;
+	struct kobject kobj;
+};
+
+struct edac_dev_sysfs_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_ctl_info *, char *);
+	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
+};
+
+struct edac_device_instance {
+	struct edac_device_ctl_info *ctl;
+	char name[35];
+	struct edac_device_counter counters;
+	u32 nr_blocks;
+	struct edac_device_block *blocks;
+	struct kobject kobj;
+};
+
+struct edac_device_block {
+	struct edac_device_instance *instance;
+	char name[32];
+	struct edac_device_counter counters;
+	int nr_attribs;
+	struct edac_dev_sysfs_block_attribute *block_attributes;
+	struct kobject kobj;
+};
+
+struct edac_dev_sysfs_block_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
+	struct edac_device_block *block;
+	unsigned int value;
+};
+
+struct dev_ch_attribute {
+	struct device_attribute attr;
+	unsigned int channel;
+};
+
+struct ctl_info_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_ctl_info *, char *);
+	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
+};
+
+struct instance_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_instance *, char *);
+	ssize_t (*store)(struct edac_device_instance *, const char *, size_t);
+};
+
+struct edac_pci_counter {
+	atomic_t pe_count;
+	atomic_t npe_count;
+};
+
+struct edac_pci_ctl_info {
+	struct list_head link;
+	int pci_idx;
+	struct bus_type *edac_subsys;
+	int op_state;
+	struct delayed_work work;
+	void (*edac_check)(struct edac_pci_ctl_info *);
+	struct device *dev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	unsigned long start_time;
+	struct completion complete;
+	char name[32];
+	struct edac_pci_counter counters;
+	struct kobject kobj;
+};
+
+struct edac_pci_gen_data {
+	int edac_idx;
+};
+
+struct edac_pci_dev_attribute {
+	struct attribute attr;
+	void *value;
+	ssize_t (*show)(void *, char *);
+	ssize_t (*store)(void *, const char *, size_t);
+};
+
+struct instance_attribute___2 {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_pci_ctl_info *, char *);
+	ssize_t (*store)(struct edac_pci_ctl_info *, const char *, size_t);
+};
+
+typedef void (*pci_parity_check_fn_t)(struct pci_dev *);
+
+enum opp_table_access {
+	OPP_TABLE_ACCESS_UNKNOWN = 0,
+	OPP_TABLE_ACCESS_EXCLUSIVE = 1,
+	OPP_TABLE_ACCESS_SHARED = 2,
+};
+
+enum dev_pm_opp_event {
+	OPP_EVENT_ADD = 0,
+	OPP_EVENT_REMOVE = 1,
+	OPP_EVENT_ENABLE = 2,
+	OPP_EVENT_DISABLE = 3,
+	OPP_EVENT_ADJUST_VOLTAGE = 4,
+};
+
+struct dev_pm_opp_supply;
+
+struct dev_pm_opp_icc_bw;
+
+struct dev_pm_opp {
+	struct list_head node;
+	struct kref kref;
+	bool available;
+	bool dynamic;
+	bool turbo;
+	bool suspend;
+	bool removed;
+	unsigned long *rates;
+	unsigned int level;
+	struct dev_pm_opp_supply *supplies;
+	struct dev_pm_opp_icc_bw *bandwidth;
+	unsigned long clock_latency_ns;
+	struct dev_pm_opp **required_opps;
+	struct opp_table *opp_table;
+	struct device_node *np;
+	struct dentry *dentry;
+	const char *of_name;
+};
+
+struct dev_pm_opp_supply {
+	unsigned long u_volt;
+	unsigned long u_volt_min;
+	unsigned long u_volt_max;
+	unsigned long u_amp;
+	unsigned long u_watt;
+};
+
+struct dev_pm_opp_icc_bw {
+	u32 avg;
+	u32 peak;
+};
+
+struct opp_table {
+	struct list_head node;
+	struct list_head lazy;
+	struct blocking_notifier_head head;
+	struct list_head dev_list;
+	struct list_head opp_list;
+	struct kref kref;
+	struct mutex lock;
+	struct device_node *np;
+	unsigned long clock_latency_ns_max;
+	unsigned int voltage_tolerance_v1;
+	unsigned int parsed_static_opps;
+	enum opp_table_access shared_opp;
+	unsigned long rate_clk_single;
+	struct dev_pm_opp *current_opp;
+	struct dev_pm_opp *suspend_opp;
+	struct mutex genpd_virt_dev_lock;
+	struct device **genpd_virt_devs;
+	struct opp_table **required_opp_tables;
+	unsigned int required_opp_count;
+	unsigned int *supported_hw;
+	unsigned int supported_hw_count;
+	const char *prop_name;
+	config_clks_t config_clks;
+	struct clk **clks;
+	struct clk *clk;
+	int clk_count;
+	config_regulators_t config_regulators;
+	struct regulator **regulators;
+	int regulator_count;
+	struct icc_path **paths;
+	unsigned int path_count;
+	bool enabled;
+	bool is_genpd;
+	int (*set_required_opps)(struct device *, struct opp_table *, struct dev_pm_opp *, bool);
+	struct dentry *dentry;
+	char dentry_name[255];
+};
+
+struct opp_device {
+	struct list_head node;
+	const struct device *dev;
+	struct dentry *dentry;
+};
+
+struct opp_config_data {
+	struct opp_table *opp_table;
+	unsigned int flags;
+};
+
+struct cpufreq_policy_data;
+
+struct freq_attr;
+
+struct cpufreq_driver {
+	char name[16];
+	u16 flags;
+	void *driver_data;
+	int (*init)(struct cpufreq_policy *);
+	int (*verify)(struct cpufreq_policy_data *);
+	int (*setpolicy)(struct cpufreq_policy *);
+	int (*target)(struct cpufreq_policy *, unsigned int, unsigned int);
+	int (*target_index)(struct cpufreq_policy *, unsigned int);
+	unsigned int (*fast_switch)(struct cpufreq_policy *, unsigned int);
+	void (*adjust_perf)(unsigned int, unsigned long, unsigned long, unsigned long);
+	unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
+	int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
+	unsigned int (*get)(unsigned int);
+	void (*update_limits)(unsigned int);
+	int (*bios_limit)(int, unsigned int *);
+	int (*online)(struct cpufreq_policy *);
+	int (*offline)(struct cpufreq_policy *);
+	int (*exit)(struct cpufreq_policy *);
+	int (*suspend)(struct cpufreq_policy *);
+	int (*resume)(struct cpufreq_policy *);
+	void (*ready)(struct cpufreq_policy *);
+	struct freq_attr **attr;
+	bool boost_enabled;
+	int (*set_boost)(struct cpufreq_policy *, int);
+	void (*register_em)(struct cpufreq_policy *);
+};
+
+struct cpufreq_policy_data {
+	struct cpufreq_cpuinfo cpuinfo;
+	struct cpufreq_frequency_table *freq_table;
+	unsigned int cpu;
+	unsigned int min;
+	unsigned int max;
+};
+
+struct freq_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpufreq_policy *, char *);
+	ssize_t (*store)(struct cpufreq_policy *, const char *, size_t);
+};
+
+struct cpufreq_freqs {
+	struct cpufreq_policy *policy;
+	unsigned int old;
+	unsigned int new;
+	u8 flags;
+};
+
+struct cpufreq_stats {
+	unsigned int total_trans;
+	unsigned long long last_time;
+	unsigned int max_state;
+	unsigned int state_num;
+	unsigned int last_index;
+	u64 *time_in_state;
+	unsigned int *freq_table;
+	unsigned int *trans_table;
+	unsigned int reset_pending;
+	unsigned long long reset_time;
+};
+
+struct cpu_freqs {
+	unsigned int offset;
+	unsigned int max_state;
+	unsigned int last_index;
+	unsigned int freq_table[0];
+};
+
+struct dbs_data;
+
+struct policy_dbs_info;
+
+struct dbs_governor {
+	struct cpufreq_governor gov;
+	struct kobj_type kobj_type;
+	struct dbs_data *gdbs_data;
+	unsigned int (*gov_dbs_update)(struct cpufreq_policy *);
+	struct policy_dbs_info * (*alloc)();
+	void (*free)(struct policy_dbs_info *);
+	int (*init)(struct dbs_data *);
+	void (*exit)(struct dbs_data *);
+	void (*start)(struct cpufreq_policy *);
+};
+
+struct dbs_data {
+	struct gov_attr_set attr_set;
+	struct dbs_governor *gov;
+	void *tuners;
+	unsigned int ignore_nice_load;
+	unsigned int sampling_rate;
+	unsigned int sampling_down_factor;
+	unsigned int up_threshold;
+	unsigned int io_is_busy;
+};
+
+struct policy_dbs_info {
+	struct cpufreq_policy *policy;
+	struct mutex update_mutex;
+	u64 last_sample_time;
+	s64 sample_delay_ns;
+	atomic_t work_count;
+	struct irq_work irq_work;
+	struct work_struct work;
+	struct dbs_data *dbs_data;
+	struct list_head list;
+	unsigned int rate_mult;
+	unsigned int idle_periods;
+	bool is_shared;
+	bool work_in_progress;
+};
+
+struct cs_policy_dbs_info {
+	struct policy_dbs_info policy_dbs;
+	unsigned int down_skip;
+	unsigned int requested_freq;
+};
+
+struct cs_dbs_tuners {
+	unsigned int down_threshold;
+	unsigned int freq_step;
+};
+
+struct cpu_dbs_info {
+	u64 prev_cpu_idle;
+	u64 prev_update_time;
+	u64 prev_cpu_nice;
+	unsigned int prev_load;
+	struct update_util_data update_util;
+	struct policy_dbs_info *policy_dbs;
+};
+
+struct scmi_data {
+	int domain_id;
+	int nr_opp;
+	struct device *cpu_dev;
+	cpumask_var_t opp_shared_cpus;
+};
+
+struct scpi_data {
+	struct clk *clk;
+	struct device *cpu_dev;
+};
+
+struct cpuidle_governor {
+	char name[16];
+	struct list_head governor_list;
+	unsigned int rating;
+	int (*enable)(struct cpuidle_driver *, struct cpuidle_device *);
+	void (*disable)(struct cpuidle_driver *, struct cpuidle_device *);
+	int (*select)(struct cpuidle_driver *, struct cpuidle_device *, bool *);
+	void (*reflect)(struct cpuidle_device *, int);
+};
+
+struct cpuidle_state_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpuidle_state *, struct cpuidle_state_usage *, char *);
+	ssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t);
+};
+
+struct cpuidle_state_kobj {
+	struct cpuidle_state *state;
+	struct cpuidle_state_usage *state_usage;
+	struct completion kobj_unregister;
+	struct kobject kobj;
+	struct cpuidle_device *device;
+};
+
+struct cpuidle_driver_kobj {
+	struct cpuidle_driver *drv;
+	struct completion kobj_unregister;
+	struct kobject kobj;
+};
+
+struct cpuidle_device_kobj {
+	struct cpuidle_device *dev;
+	struct completion kobj_unregister;
+	struct kobject kobj;
+};
+
+struct cpuidle_driver_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpuidle_driver *, char *);
+	ssize_t (*store)(struct cpuidle_driver *, const char *, size_t);
+};
+
+struct cpuidle_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpuidle_device *, char *);
+	ssize_t (*store)(struct cpuidle_device *, const char *, size_t);
+};
+
+struct menu_device {
+	int needs_update;
+	int tick_wakeup;
+	u64 next_timer_ns;
+	unsigned int bucket;
+	unsigned int correction_factor[12];
+	unsigned int intervals[8];
+	int interval_ptr;
+};
+
+struct teo_bin {
+	unsigned int intercepts;
+	unsigned int hits;
+	unsigned int recent;
+};
+
+struct teo_cpu {
+	s64 time_span_ns;
+	s64 sleep_length_ns;
+	struct teo_bin state_bins[10];
+	unsigned int total;
+	int next_recent_idx;
+	int recent_idx[9];
+	unsigned int tick_hits;
+	unsigned long util_threshold;
+};
+
+struct psci_cpuidle_data {
+	u32 *psci_states;
+	struct device *dev;
+};
+
+struct psci_pd_provider {
+	struct list_head link;
+	struct device_node *node;
+};
+
+struct mmc_host;
+
+struct mmc_request;
+
+typedef void (*btf_trace_mmc_request_start)(void *, struct mmc_host *, struct mmc_request *);
+
+typedef unsigned int mmc_pm_flag_t;
+
+struct mmc_ios {
+	unsigned int clock;
+	unsigned short vdd;
+	unsigned int power_delay_ms;
+	unsigned char bus_mode;
+	unsigned char chip_select;
+	unsigned char power_mode;
+	unsigned char bus_width;
+	unsigned char timing;
+	unsigned char signal_voltage;
+	unsigned char drv_type;
+	bool enhanced_strobe;
+};
+
+struct mmc_ctx {
+	struct task_struct *task;
+};
+
+struct mmc_slot {
+	int cd_irq;
+	bool cd_wake_enabled;
+	void *handler_priv;
+};
+
+struct mmc_supply {
+	struct regulator *vmmc;
+	struct regulator *vqmmc;
+};
+
+struct mmc_host_ops;
+
+struct mmc_pwrseq;
+
+struct mmc_card;
+
+struct mmc_bus_ops;
+
+struct mmc_cqe_ops;
+
+struct mmc_host {
+	struct device *parent;
+	struct device class_dev;
+	int index;
+	const struct mmc_host_ops *ops;
+	struct mmc_pwrseq *pwrseq;
+	unsigned int f_min;
+	unsigned int f_max;
+	unsigned int f_init;
+	u32 ocr_avail;
+	u32 ocr_avail_sdio;
+	u32 ocr_avail_sd;
+	u32 ocr_avail_mmc;
+	struct wakeup_source *ws;
+	u32 max_current_330;
+	u32 max_current_300;
+	u32 max_current_180;
+	u32 caps;
+	u32 caps2;
+	int fixed_drv_type;
+	mmc_pm_flag_t pm_caps;
+	unsigned int max_seg_size;
+	unsigned short max_segs;
+	unsigned short unused;
+	unsigned int max_req_size;
+	unsigned int max_blk_size;
+	unsigned int max_blk_count;
+	unsigned int max_busy_timeout;
+	spinlock_t lock;
+	struct mmc_ios ios;
+	unsigned int use_spi_crc: 1;
+	unsigned int claimed: 1;
+	unsigned int doing_init_tune: 1;
+	unsigned int can_retune: 1;
+	unsigned int doing_retune: 1;
+	unsigned int retune_now: 1;
+	unsigned int retune_paused: 1;
+	unsigned int retune_crc_disable: 1;
+	unsigned int can_dma_map_merge: 1;
+	unsigned int vqmmc_enabled: 1;
+	int rescan_disable;
+	int rescan_entered;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct timer_list retune_timer;
+	bool trigger_card_event;
+	struct mmc_card *card;
+	wait_queue_head_t wq;
+	struct mmc_ctx *claimer;
+	int claim_cnt;
+	struct mmc_ctx default_ctx;
+	struct delayed_work detect;
+	int detect_change;
+	struct mmc_slot slot;
+	const struct mmc_bus_ops *bus_ops;
+	unsigned int sdio_irqs;
+	struct task_struct *sdio_irq_thread;
+	struct work_struct sdio_irq_work;
+	bool sdio_irq_pending;
+	atomic_t sdio_irq_thread_abort;
+	mmc_pm_flag_t pm_flags;
+	struct led_trigger *led;
+	bool regulator_enabled;
+	struct mmc_supply supply;
+	struct dentry *debugfs_root;
+	struct mmc_request *ongoing_mrq;
+	unsigned int actual_clock;
+	unsigned int slotno;
+	int dsr_req;
+	u32 dsr;
+	const struct mmc_cqe_ops *cqe_ops;
+	void *cqe_private;
+	int cqe_qdepth;
+	bool cqe_enabled;
+	bool cqe_on;
+	bool cqe_recovery_reset_always;
+	struct blk_crypto_profile crypto_profile;
+	bool hsq_enabled;
+	int hsq_depth;
+	u32 err_stats[15];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long private[0];
+};
+
+struct mmc_host_ops {
+	void (*post_req)(struct mmc_host *, struct mmc_request *, int);
+	void (*pre_req)(struct mmc_host *, struct mmc_request *);
+	void (*request)(struct mmc_host *, struct mmc_request *);
+	int (*request_atomic)(struct mmc_host *, struct mmc_request *);
+	void (*set_ios)(struct mmc_host *, struct mmc_ios *);
+	int (*get_ro)(struct mmc_host *);
+	int (*get_cd)(struct mmc_host *);
+	void (*enable_sdio_irq)(struct mmc_host *, int);
+	void (*ack_sdio_irq)(struct mmc_host *);
+	void (*init_card)(struct mmc_host *, struct mmc_card *);
+	int (*start_signal_voltage_switch)(struct mmc_host *, struct mmc_ios *);
+	int (*card_busy)(struct mmc_host *);
+	int (*execute_tuning)(struct mmc_host *, u32);
+	int (*prepare_hs400_tuning)(struct mmc_host *, struct mmc_ios *);
+	int (*execute_hs400_tuning)(struct mmc_host *, struct mmc_card *);
+	int (*prepare_sd_hs_tuning)(struct mmc_host *, struct mmc_card *);
+	int (*execute_sd_hs_tuning)(struct mmc_host *, struct mmc_card *);
+	int (*hs400_prepare_ddr)(struct mmc_host *);
+	void (*hs400_downgrade)(struct mmc_host *);
+	void (*hs400_complete)(struct mmc_host *);
+	void (*hs400_enhanced_strobe)(struct mmc_host *, struct mmc_ios *);
+	int (*select_drive_strength)(struct mmc_card *, unsigned int, int, int, int *);
+	void (*card_hw_reset)(struct mmc_host *);
+	void (*card_event)(struct mmc_host *);
+	int (*multi_io_quirk)(struct mmc_card *, unsigned int, int);
+	int (*init_sd_express)(struct mmc_host *, struct mmc_ios *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct mmc_command;
+
+struct mmc_data;
+
+struct mmc_request {
+	struct mmc_command *sbc;
+	struct mmc_command *cmd;
+	struct mmc_data *data;
+	struct mmc_command *stop;
+	struct completion completion;
+	struct completion cmd_completion;
+	void (*done)(struct mmc_request *);
+	void (*recovery_notifier)(struct mmc_request *);
+	struct mmc_host *host;
+	bool cap_cmd_during_tfr;
+	int tag;
+	const struct bio_crypt_ctx *crypto_ctx;
+	int crypto_key_slot;
+};
+
+struct mmc_command {
+	u32 opcode;
+	u32 arg;
+	u32 resp[4];
+	unsigned int flags;
+	unsigned int retries;
+	int error;
+	unsigned int busy_timeout;
+	struct mmc_data *data;
+	struct mmc_request *mrq;
+};
+
+struct mmc_data {
+	unsigned int timeout_ns;
+	unsigned int timeout_clks;
+	unsigned int blksz;
+	unsigned int blocks;
+	unsigned int blk_addr;
+	int error;
+	unsigned int flags;
+	unsigned int bytes_xfered;
+	struct mmc_command *stop;
+	struct mmc_request *mrq;
+	unsigned int sg_len;
+	int sg_count;
+	struct scatterlist *sg;
+	s32 host_cookie;
+};
+
+struct mmc_cid {
+	unsigned int manfid;
+	char prod_name[8];
+	unsigned char prv;
+	unsigned int serial;
+	unsigned short oemid;
+	unsigned short year;
+	unsigned char hwrev;
+	unsigned char fwrev;
+	unsigned char month;
+};
+
+struct mmc_csd {
+	unsigned char structure;
+	unsigned char mmca_vsn;
+	unsigned short cmdclass;
+	unsigned short taac_clks;
+	unsigned int taac_ns;
+	unsigned int c_size;
+	unsigned int r2w_factor;
+	unsigned int max_dtr;
+	unsigned int erase_size;
+	unsigned int read_blkbits;
+	unsigned int write_blkbits;
+	unsigned int capacity;
+	unsigned int read_partial: 1;
+	unsigned int read_misalign: 1;
+	unsigned int write_partial: 1;
+	unsigned int write_misalign: 1;
+	unsigned int dsr_imp: 1;
+};
+
+struct mmc_ext_csd {
+	u8 rev;
+	u8 erase_group_def;
+	u8 sec_feature_support;
+	u8 rel_sectors;
+	u8 rel_param;
+	bool enhanced_rpmb_supported;
+	u8 part_config;
+	u8 cache_ctrl;
+	u8 rst_n_function;
+	u8 max_packed_writes;
+	u8 max_packed_reads;
+	u8 packed_event_en;
+	unsigned int part_time;
+	unsigned int sa_timeout;
+	unsigned int generic_cmd6_time;
+	unsigned int power_off_longtime;
+	u8 power_off_notification;
+	unsigned int hs_max_dtr;
+	unsigned int hs200_max_dtr;
+	unsigned int sectors;
+	unsigned int hc_erase_size;
+	unsigned int hc_erase_timeout;
+	unsigned int sec_trim_mult;
+	unsigned int sec_erase_mult;
+	unsigned int trim_timeout;
+	bool partition_setting_completed;
+	unsigned long long enhanced_area_offset;
+	unsigned int enhanced_area_size;
+	unsigned int cache_size;
+	bool hpi_en;
+	bool hpi;
+	unsigned int hpi_cmd;
+	bool bkops;
+	bool man_bkops_en;
+	bool auto_bkops_en;
+	unsigned int data_sector_size;
+	unsigned int data_tag_unit_size;
+	unsigned int boot_ro_lock;
+	bool boot_ro_lockable;
+	bool ffu_capable;
+	bool cmdq_en;
+	bool cmdq_support;
+	unsigned int cmdq_depth;
+	u8 fwrev[8];
+	u8 raw_exception_status;
+	u8 raw_partition_support;
+	u8 raw_rpmb_size_mult;
+	u8 raw_erased_mem_count;
+	u8 strobe_support;
+	u8 raw_ext_csd_structure;
+	u8 raw_card_type;
+	u8 raw_driver_strength;
+	u8 out_of_int_time;
+	u8 raw_pwr_cl_52_195;
+	u8 raw_pwr_cl_26_195;
+	u8 raw_pwr_cl_52_360;
+	u8 raw_pwr_cl_26_360;
+	u8 raw_s_a_timeout;
+	u8 raw_hc_erase_gap_size;
+	u8 raw_erase_timeout_mult;
+	u8 raw_hc_erase_grp_size;
+	u8 raw_boot_mult;
+	u8 raw_sec_trim_mult;
+	u8 raw_sec_erase_mult;
+	u8 raw_sec_feature_support;
+	u8 raw_trim_mult;
+	u8 raw_pwr_cl_200_195;
+	u8 raw_pwr_cl_200_360;
+	u8 raw_pwr_cl_ddr_52_195;
+	u8 raw_pwr_cl_ddr_52_360;
+	u8 raw_pwr_cl_ddr_200_360;
+	u8 raw_bkops_status;
+	u8 raw_sectors[4];
+	u8 pre_eol_info;
+	u8 device_life_time_est_typ_a;
+	u8 device_life_time_est_typ_b;
+	unsigned int feature_support;
+};
+
+struct sd_scr {
+	unsigned char sda_vsn;
+	unsigned char sda_spec3;
+	unsigned char sda_spec4;
+	unsigned char sda_specx;
+	unsigned char bus_widths;
+	unsigned char cmds;
+};
+
+struct sd_ssr {
+	unsigned int au;
+	unsigned int erase_timeout;
+	unsigned int erase_offset;
+};
+
+struct sd_switch_caps {
+	unsigned int hs_max_dtr;
+	unsigned int uhs_max_dtr;
+	unsigned int sd3_bus_mode;
+	unsigned int sd3_drv_type;
+	unsigned int sd3_curr_limit;
+};
+
+struct sd_ext_reg {
+	u8 fno;
+	u8 page;
+	u16 offset;
+	u8 rev;
+	u8 feature_enabled;
+	u8 feature_support;
+};
+
+struct sdio_cccr {
+	unsigned int sdio_vsn;
+	unsigned int sd_vsn;
+	unsigned int multi_block: 1;
+	unsigned int low_speed: 1;
+	unsigned int wide_bus: 1;
+	unsigned int high_power: 1;
+	unsigned int high_speed: 1;
+	unsigned int disable_cd: 1;
+	unsigned int enable_async_irq: 1;
+};
+
+struct sdio_cis {
+	unsigned short vendor;
+	unsigned short device;
+	unsigned short blksize;
+	unsigned int max_dtr;
+};
+
+struct mmc_part {
+	u64 size;
+	unsigned int part_cfg;
+	char name[20];
+	bool force_ro;
+	unsigned int area_type;
+	u64 android_kabi_reserved1;
+};
+
+struct sdio_func;
+
+struct sdio_func_tuple;
+
+struct mmc_card {
+	struct mmc_host *host;
+	struct device dev;
+	u32 ocr;
+	unsigned int rca;
+	unsigned int type;
+	unsigned int state;
+	unsigned int quirks;
+	unsigned int quirk_max_rate;
+	bool written_flag;
+	bool reenable_cmdq;
+	unsigned int erase_size;
+	unsigned int erase_shift;
+	unsigned int pref_erase;
+	unsigned int eg_boundary;
+	unsigned int erase_arg;
+	u8 erased_byte;
+	u32 raw_cid[4];
+	u32 raw_csd[4];
+	u32 raw_scr[2];
+	u32 raw_ssr[16];
+	struct mmc_cid cid;
+	struct mmc_csd csd;
+	struct mmc_ext_csd ext_csd;
+	struct sd_scr scr;
+	struct sd_ssr ssr;
+	struct sd_switch_caps sw_caps;
+	struct sd_ext_reg ext_power;
+	struct sd_ext_reg ext_perf;
+	unsigned int sdio_funcs;
+	atomic_t sdio_funcs_probed;
+	struct sdio_cccr cccr;
+	struct sdio_cis cis;
+	struct sdio_func *sdio_func[7];
+	struct sdio_func *sdio_single_irq;
+	u8 major_rev;
+	u8 minor_rev;
+	unsigned int num_info;
+	const char **info;
+	struct sdio_func_tuple *tuples;
+	unsigned int sd_bus_speed;
+	unsigned int mmc_avail_type;
+	unsigned int drive_strength;
+	struct dentry *debugfs_root;
+	struct mmc_part part[7];
+	unsigned int nr_parts;
+	struct workqueue_struct *complete_wq;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct mmc_pwrseq_ops;
+
+struct mmc_pwrseq {
+	const struct mmc_pwrseq_ops *ops;
+	struct device *dev;
+	struct list_head pwrseq_node;
+	struct module *owner;
+};
+
+struct mmc_pwrseq_ops {
+	void (*pre_power_on)(struct mmc_host *);
+	void (*post_power_on)(struct mmc_host *);
+	void (*power_off)(struct mmc_host *);
+	void (*reset)(struct mmc_host *);
+};
+
+struct mmc_bus_ops {
+	void (*remove)(struct mmc_host *);
+	void (*detect)(struct mmc_host *);
+	int (*pre_suspend)(struct mmc_host *);
+	int (*suspend)(struct mmc_host *);
+	int (*resume)(struct mmc_host *);
+	int (*runtime_suspend)(struct mmc_host *);
+	int (*runtime_resume)(struct mmc_host *);
+	int (*alive)(struct mmc_host *);
+	int (*shutdown)(struct mmc_host *);
+	int (*hw_reset)(struct mmc_host *);
+	int (*sw_reset)(struct mmc_host *);
+	bool (*cache_enabled)(struct mmc_host *);
+	int (*flush_cache)(struct mmc_host *);
+};
+
+struct mmc_cqe_ops {
+	int (*cqe_enable)(struct mmc_host *, struct mmc_card *);
+	void (*cqe_disable)(struct mmc_host *);
+	int (*cqe_request)(struct mmc_host *, struct mmc_request *);
+	void (*cqe_post_req)(struct mmc_host *, struct mmc_request *);
+	void (*cqe_off)(struct mmc_host *);
+	int (*cqe_wait_for_idle)(struct mmc_host *);
+	bool (*cqe_timeout)(struct mmc_host *, struct mmc_request *, bool *);
+	void (*cqe_recovery_start)(struct mmc_host *);
+	void (*cqe_recovery_finish)(struct mmc_host *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef void (*btf_trace_mmc_request_done)(void *, struct mmc_host *, struct mmc_request *);
+
+enum mmc_busy_cmd {
+	MMC_BUSY_CMD6 = 0,
+	MMC_BUSY_ERASE = 1,
+	MMC_BUSY_HPI = 2,
+	MMC_BUSY_EXTR_SINGLE = 3,
+	MMC_BUSY_IO = 4,
+};
+
+enum mmc_err_stat {
+	MMC_ERR_CMD_TIMEOUT = 0,
+	MMC_ERR_CMD_CRC = 1,
+	MMC_ERR_DAT_TIMEOUT = 2,
+	MMC_ERR_DAT_CRC = 3,
+	MMC_ERR_AUTO_CMD = 4,
+	MMC_ERR_ADMA = 5,
+	MMC_ERR_TUNING = 6,
+	MMC_ERR_CMDQ_RED = 7,
+	MMC_ERR_CMDQ_GCE = 8,
+	MMC_ERR_CMDQ_ICCE = 9,
+	MMC_ERR_REQ_TIMEOUT = 10,
+	MMC_ERR_CMDQ_REQ_TIMEOUT = 11,
+	MMC_ERR_ICE_CFG = 12,
+	MMC_ERR_CTRL_TIMEOUT = 13,
+	MMC_ERR_UNEXPECTED_IRQ = 14,
+	MMC_ERR_MAX = 15,
+};
+
+struct trace_event_raw_mmc_request_start {
+	struct trace_entry ent;
+	u32 cmd_opcode;
+	u32 cmd_arg;
+	unsigned int cmd_flags;
+	unsigned int cmd_retries;
+	u32 stop_opcode;
+	u32 stop_arg;
+	unsigned int stop_flags;
+	unsigned int stop_retries;
+	u32 sbc_opcode;
+	u32 sbc_arg;
+	unsigned int sbc_flags;
+	unsigned int sbc_retries;
+	unsigned int blocks;
+	unsigned int blk_addr;
+	unsigned int blksz;
+	unsigned int data_flags;
+	int tag;
+	unsigned int can_retune;
+	unsigned int doing_retune;
+	unsigned int retune_now;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct mmc_request *mrq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mmc_request_done {
+	struct trace_entry ent;
+	u32 cmd_opcode;
+	int cmd_err;
+	u32 cmd_resp[4];
+	unsigned int cmd_retries;
+	u32 stop_opcode;
+	int stop_err;
+	u32 stop_resp[4];
+	unsigned int stop_retries;
+	u32 sbc_opcode;
+	int sbc_err;
+	u32 sbc_resp[4];
+	unsigned int sbc_retries;
+	unsigned int bytes_xfered;
+	int data_err;
+	int tag;
+	unsigned int can_retune;
+	unsigned int doing_retune;
+	unsigned int retune_now;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct mmc_request *mrq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmc_request_start {
+	u32 name;
+};
+
+struct trace_event_data_offsets_mmc_request_done {
+	u32 name;
+};
+
+struct mmc_driver {
+	struct device_driver drv;
+	int (*probe)(struct mmc_card *);
+	void (*remove)(struct mmc_card *);
+	void (*shutdown)(struct mmc_card *);
+};
+
+struct mmc_clk_phase {
+	bool valid;
+	u16 in_deg;
+	u16 out_deg;
+};
+
+struct mmc_clk_phase_map {
+	struct mmc_clk_phase phase[11];
+};
+
+struct mmc_fixup {
+	const char *name;
+	u64 rev_start;
+	u64 rev_end;
+	unsigned int manfid;
+	unsigned short oemid;
+	unsigned short year;
+	unsigned char month;
+	u16 cis_vendor;
+	u16 cis_device;
+	unsigned int ext_csd_rev;
+	const char *of_compatible;
+	void (*vendor_fixup)(struct mmc_card *, int);
+	int data;
+};
+
+struct mmc_op_cond_busy_data {
+	struct mmc_host *host;
+	u32 ocr;
+	struct mmc_command *cmd;
+};
+
+struct mmc_busy_data {
+	struct mmc_card *card;
+	bool retry_crc_err;
+	enum mmc_busy_cmd busy_cmd;
+};
+
+struct sd_busy_data {
+	struct mmc_card *card;
+	u8 *reg_buf;
+};
+
+typedef void sdio_irq_handler_t(struct sdio_func *);
+
+struct sdio_func {
+	struct mmc_card *card;
+	struct device dev;
+	sdio_irq_handler_t *irq_handler;
+	unsigned int num;
+	unsigned char class;
+	unsigned short vendor;
+	unsigned short device;
+	unsigned int max_blksize;
+	unsigned int cur_blksize;
+	unsigned int enable_timeout;
+	unsigned int state;
+	u8 *tmpbuf;
+	u8 major_rev;
+	u8 minor_rev;
+	unsigned int num_info;
+	const char **info;
+	struct sdio_func_tuple *tuples;
+};
+
+struct sdio_func_tuple {
+	struct sdio_func_tuple *next;
+	unsigned char code;
+	unsigned char size;
+	unsigned char data[0];
+};
+
+struct sdio_device_id;
+
+struct sdio_driver {
+	char *name;
+	const struct sdio_device_id *id_table;
+	int (*probe)(struct sdio_func *, const struct sdio_device_id *);
+	void (*remove)(struct sdio_func *);
+	struct device_driver drv;
+};
+
+struct sdio_device_id {
+	__u8 class;
+	__u16 vendor;
+	__u16 device;
+	kernel_ulong_t driver_data;
+};
+
+typedef int tpl_parse_t(struct mmc_card *, struct sdio_func *, const unsigned char *, unsigned int);
+
+struct cis_tpl {
+	unsigned char code;
+	unsigned char min_size;
+	tpl_parse_t *parse;
+};
+
+struct mmc_gpio {
+	struct gpio_desc *ro_gpio;
+	struct gpio_desc *cd_gpio;
+	irqreturn_t (*cd_gpio_isr)(int, void *);
+	char *ro_label;
+	char *cd_label;
+	u32 cd_debounce_delay_ms;
+	int cd_irq;
+};
+
+enum mmc_drv_op {
+	MMC_DRV_OP_IOCTL = 0,
+	MMC_DRV_OP_IOCTL_RPMB = 1,
+	MMC_DRV_OP_BOOT_WP = 2,
+	MMC_DRV_OP_GET_CARD_STATUS = 3,
+	MMC_DRV_OP_GET_EXT_CSD = 4,
+};
+
+struct mmc_blk_request {
+	struct mmc_request mrq;
+	struct mmc_command sbc;
+	struct mmc_command cmd;
+	struct mmc_command stop;
+	struct mmc_data data;
+};
+
+struct mmc_queue_req {
+	struct mmc_blk_request brq;
+	struct scatterlist *sg;
+	enum mmc_drv_op drv_op;
+	int drv_op_result;
+	void *drv_op_data;
+	unsigned int ioc_count;
+	int retries;
+};
+
+enum mmc_issued {
+	MMC_REQ_STARTED = 0,
+	MMC_REQ_BUSY = 1,
+	MMC_REQ_FAILED_TO_START = 2,
+	MMC_REQ_FINISHED = 3,
+};
+
+enum mmc_issue_type {
+	MMC_ISSUE_SYNC = 0,
+	MMC_ISSUE_DCMD = 1,
+	MMC_ISSUE_ASYNC = 2,
+	MMC_ISSUE_MAX = 3,
+};
+
+struct mmc_blk_data;
+
+struct mmc_queue {
+	struct mmc_card *card;
+	struct mmc_ctx ctx;
+	struct blk_mq_tag_set tag_set;
+	struct mmc_blk_data *blkdata;
+	struct request_queue *queue;
+	spinlock_t lock;
+	int in_flight[3];
+	unsigned int cqe_busy;
+	bool busy;
+	bool recovery_needed;
+	bool in_recovery;
+	bool rw_wait;
+	bool waiting;
+	struct work_struct recovery_work;
+	wait_queue_head_t wait;
+	struct request *recovery_req;
+	struct request *complete_req;
+	struct mutex complete_lock;
+	struct work_struct complete_work;
+};
+
+struct mmc_blk_data {
+	struct device *parent;
+	struct gendisk *disk;
+	struct mmc_queue queue;
+	struct list_head part;
+	struct list_head rpmbs;
+	unsigned int flags;
+	struct kref kref;
+	unsigned int read_only;
+	unsigned int part_type;
+	unsigned int reset_done;
+	unsigned int part_curr;
+	int area_type;
+	struct dentry *status_dentry;
+	struct dentry *ext_csd_dentry;
+};
+
+struct mmc_ioc_cmd {
+	int write_flag;
+	int is_acmd;
+	__u32 opcode;
+	__u32 arg;
+	__u32 response[4];
+	unsigned int flags;
+	unsigned int blksz;
+	unsigned int blocks;
+	unsigned int postsleep_min_us;
+	unsigned int postsleep_max_us;
+	unsigned int data_timeout_ns;
+	unsigned int cmd_timeout_ms;
+	__u32 __pad;
+	__u64 data_ptr;
+};
+
+struct mmc_ioc_multi_cmd {
+	__u64 num_of_cmds;
+	struct mmc_ioc_cmd cmds[0];
+};
+
+struct mmc_rpmb_data {
+	struct device dev;
+	struct cdev chrdev;
+	int id;
+	unsigned int part_index;
+	struct mmc_blk_data *md;
+	struct list_head node;
+};
+
+struct mmc_blk_busy_data {
+	struct mmc_card *card;
+	u32 status;
+};
+
+struct mmc_blk_ioc_data {
+	struct mmc_ioc_cmd ic;
+	unsigned char *buf;
+	u64 buf_bytes;
+	unsigned int flags;
+	struct mmc_rpmb_data *rpmb;
+};
+
+enum sdhci_reset_reason {
+	SDHCI_RESET_FOR_INIT = 0,
+	SDHCI_RESET_FOR_REQUEST_ERROR = 1,
+	SDHCI_RESET_FOR_REQUEST_ERROR_DATA_ONLY = 2,
+	SDHCI_RESET_FOR_TUNING_ABORT = 3,
+	SDHCI_RESET_FOR_CARD_REMOVED = 4,
+	SDHCI_RESET_FOR_CQE_RECOVERY = 5,
+};
+
+enum sdhci_cookie {
+	COOKIE_UNMAPPED = 0,
+	COOKIE_PRE_MAPPED = 1,
+	COOKIE_MAPPED = 2,
+};
+
+struct sdhci_ops;
+
+struct sdhci_host {
+	const char *hw_name;
+	unsigned int quirks;
+	unsigned int quirks2;
+	int irq;
+	void *ioaddr;
+	phys_addr_t mapbase;
+	char *bounce_buffer;
+	dma_addr_t bounce_addr;
+	unsigned int bounce_buffer_size;
+	const struct sdhci_ops *ops;
+	struct mmc_host *mmc;
+	struct mmc_host_ops mmc_host_ops;
+	u64 dma_mask;
+	struct led_classdev led;
+	char led_name[32];
+	spinlock_t lock;
+	int flags;
+	unsigned int version;
+	unsigned int max_clk;
+	unsigned int timeout_clk;
+	u8 max_timeout_count;
+	unsigned int clk_mul;
+	unsigned int clock;
+	u8 pwr;
+	u8 drv_type;
+	bool reinit_uhs;
+	bool runtime_suspended;
+	bool bus_on;
+	bool preset_enabled;
+	bool pending_reset;
+	bool irq_wake_enabled;
+	bool v4_mode;
+	bool use_external_dma;
+	bool always_defer_done;
+	struct mmc_request *mrqs_done[2];
+	struct mmc_command *cmd;
+	struct mmc_command *data_cmd;
+	struct mmc_command *deferred_cmd;
+	struct mmc_data *data;
+	unsigned int data_early: 1;
+	struct sg_mapping_iter sg_miter;
+	unsigned int blocks;
+	int sg_count;
+	int max_adma;
+	void *adma_table;
+	void *align_buffer;
+	size_t adma_table_sz;
+	size_t align_buffer_sz;
+	dma_addr_t adma_addr;
+	dma_addr_t align_addr;
+	unsigned int desc_sz;
+	unsigned int alloc_desc_sz;
+	struct workqueue_struct *complete_wq;
+	struct work_struct complete_work;
+	struct timer_list timer;
+	struct timer_list data_timer;
+	u32 caps;
+	u32 caps1;
+	bool read_caps;
+	bool sdhci_core_to_disable_vqmmc;
+	unsigned int ocr_avail_sdio;
+	unsigned int ocr_avail_sd;
+	unsigned int ocr_avail_mmc;
+	u32 ocr_mask;
+	unsigned int timing;
+	u32 thread_isr;
+	u32 ier;
+	bool cqe_on;
+	u32 cqe_ier;
+	u32 cqe_err_ier;
+	wait_queue_head_t buf_ready_int;
+	unsigned int tuning_done;
+	unsigned int tuning_count;
+	unsigned int tuning_mode;
+	unsigned int tuning_err;
+	int tuning_delay;
+	int tuning_loop_count;
+	u32 sdma_boundary;
+	u32 adma_table_cnt;
+	u64 data_timeout;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long private[0];
+};
+
+struct sdhci_ops {
+	u32 (*read_l)(struct sdhci_host *, int);
+	u16 (*read_w)(struct sdhci_host *, int);
+	u8 (*read_b)(struct sdhci_host *, int);
+	void (*write_l)(struct sdhci_host *, u32, int);
+	void (*write_w)(struct sdhci_host *, u16, int);
+	void (*write_b)(struct sdhci_host *, u8, int);
+	void (*set_clock)(struct sdhci_host *, unsigned int);
+	void (*set_power)(struct sdhci_host *, unsigned char, unsigned short);
+	u32 (*irq)(struct sdhci_host *, u32);
+	int (*set_dma_mask)(struct sdhci_host *);
+	int (*enable_dma)(struct sdhci_host *);
+	unsigned int (*get_max_clock)(struct sdhci_host *);
+	unsigned int (*get_min_clock)(struct sdhci_host *);
+	unsigned int (*get_timeout_clock)(struct sdhci_host *);
+	unsigned int (*get_max_timeout_count)(struct sdhci_host *);
+	void (*set_timeout)(struct sdhci_host *, struct mmc_command *);
+	void (*set_bus_width)(struct sdhci_host *, int);
+	void (*platform_send_init_74_clocks)(struct sdhci_host *, u8);
+	unsigned int (*get_ro)(struct sdhci_host *);
+	void (*reset)(struct sdhci_host *, u8);
+	int (*platform_execute_tuning)(struct sdhci_host *, u32);
+	void (*set_uhs_signaling)(struct sdhci_host *, unsigned int);
+	void (*hw_reset)(struct sdhci_host *);
+	void (*adma_workaround)(struct sdhci_host *, u32);
+	void (*card_event)(struct sdhci_host *);
+	void (*voltage_switch)(struct sdhci_host *);
+	void (*adma_write_desc)(struct sdhci_host *, void **, dma_addr_t, int, unsigned int);
+	void (*copy_to_bounce_buffer)(struct sdhci_host *, struct mmc_data *, unsigned int);
+	void (*request_done)(struct sdhci_host *, struct mmc_request *);
+	void (*dump_vendor_regs)(struct sdhci_host *);
+	u64 android_kabi_reserved1;
+};
+
+struct sdhci_adma2_64_desc {
+	__le16 cmd;
+	__le16 len;
+	__le32 addr_lo;
+	__le32 addr_hi;
+};
+
+struct sdhci_pltfm_host {
+	struct clk *clk;
+	unsigned int clock;
+	u16 xfer_mode_shadow;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long private[0];
+};
+
+struct sdhci_pltfm_data {
+	const struct sdhci_ops *ops;
+	unsigned int quirks;
+	unsigned int quirks2;
+};
+
+typedef void (*btf_trace_ufshcd_clk_gating)(void *, const char *, int);
+
+typedef void (*btf_trace_ufshcd_clk_scaling)(void *, const char *, const char *, const char *, u32, u32);
+
+typedef void (*btf_trace_ufshcd_auto_bkops_state)(void *, const char *, const char *);
+
+typedef void (*btf_trace_ufshcd_profile_hibern8)(void *, const char *, const char *, s64, int);
+
+typedef void (*btf_trace_ufshcd_profile_clk_gating)(void *, const char *, const char *, s64, int);
+
+typedef void (*btf_trace_ufshcd_profile_clk_scaling)(void *, const char *, const char *, s64, int);
+
+typedef void (*btf_trace_ufshcd_system_suspend)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_system_resume)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_runtime_suspend)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_runtime_resume)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_init)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_wl_suspend)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_wl_resume)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_wl_runtime_suspend)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_wl_runtime_resume)(void *, const char *, int, s64, int, int);
+
+enum ufs_trace_str_t {
+	UFS_CMD_SEND = 0,
+	UFS_CMD_COMP = 1,
+	UFS_DEV_COMP = 2,
+	UFS_QUERY_SEND = 3,
+	UFS_QUERY_COMP = 4,
+	UFS_QUERY_ERR = 5,
+	UFS_TM_SEND = 6,
+	UFS_TM_COMP = 7,
+	UFS_TM_ERR = 8,
+};
+
+typedef void (*btf_trace_ufshcd_command)(void *, const char *, enum ufs_trace_str_t, unsigned int, u32, u32, int, u32, u64, u8, u8);
+
+typedef void (*btf_trace_ufshcd_uic_command)(void *, const char *, enum ufs_trace_str_t, u32, u32, u32, u32);
+
+enum ufs_trace_tsf_t {
+	UFS_TSF_CDB = 0,
+	UFS_TSF_OSF = 1,
+	UFS_TSF_TM_INPUT = 2,
+	UFS_TSF_TM_OUTPUT = 3,
+};
+
+typedef void (*btf_trace_ufshcd_upiu)(void *, const char *, enum ufs_trace_str_t, void *, void *, enum ufs_trace_tsf_t);
+
+typedef void (*btf_trace_ufshcd_exception_event)(void *, const char *, u16);
+
+enum ufs_dev_pwr_mode {
+	UFS_ACTIVE_PWR_MODE = 1,
+	UFS_SLEEP_PWR_MODE = 2,
+	UFS_POWERDOWN_PWR_MODE = 3,
+	UFS_DEEPSLEEP_PWR_MODE = 4,
+};
+
+enum uic_link_state {
+	UIC_LINK_OFF_STATE = 0,
+	UIC_LINK_ACTIVE_STATE = 1,
+	UIC_LINK_HIBERN8_STATE = 2,
+	UIC_LINK_BROKEN_STATE = 3,
+};
+
+struct ufs_pm_lvl_states {
+	enum ufs_dev_pwr_mode dev_state;
+	enum uic_link_state link_state;
+};
+
+struct ufs_dev_quirk {
+	u16 wmanufacturerid;
+	const u8 *model;
+	unsigned int quirk;
+};
+
+enum ufs_ref_clk_freq {
+	REF_CLK_FREQ_19_2_MHZ = 0,
+	REF_CLK_FREQ_26_MHZ = 1,
+	REF_CLK_FREQ_38_4_MHZ = 2,
+	REF_CLK_FREQ_52_MHZ = 3,
+	REF_CLK_FREQ_INVAL = -1,
+};
+
+struct ufs_ref_clk {
+	unsigned long freq_hz;
+	enum ufs_ref_clk_freq val;
+};
+
+struct devfreq_simple_ondemand_data {
+	unsigned int upthreshold;
+	unsigned int downdifferential;
+};
+
+struct ufs_hba_variant_params {
+	struct devfreq_dev_profile devfreq_profile;
+	struct devfreq_simple_ondemand_data ondemand_data;
+	u16 hba_enable_delay_us;
+	u32 wb_flush_threshold;
+};
+
+enum ufs_pm_level {
+	UFS_PM_LVL_0 = 0,
+	UFS_PM_LVL_1 = 1,
+	UFS_PM_LVL_2 = 2,
+	UFS_PM_LVL_3 = 3,
+	UFS_PM_LVL_4 = 4,
+	UFS_PM_LVL_5 = 5,
+	UFS_PM_LVL_6 = 6,
+	UFS_PM_LVL_MAX = 7,
+};
+
+enum ufs_notify_change_status {
+	PRE_CHANGE = 0,
+	POST_CHANGE = 1,
+};
+
+enum uic_cmd_dme {
+	UIC_CMD_DME_GET = 1,
+	UIC_CMD_DME_SET = 2,
+	UIC_CMD_DME_PEER_GET = 3,
+	UIC_CMD_DME_PEER_SET = 4,
+	UIC_CMD_DME_POWERON = 16,
+	UIC_CMD_DME_POWEROFF = 17,
+	UIC_CMD_DME_ENABLE = 18,
+	UIC_CMD_DME_RESET = 20,
+	UIC_CMD_DME_END_PT_RST = 21,
+	UIC_CMD_DME_LINK_STARTUP = 22,
+	UIC_CMD_DME_HIBER_ENTER = 23,
+	UIC_CMD_DME_HIBER_EXIT = 24,
+	UIC_CMD_DME_TEST_MODE = 26,
+};
+
+enum ufs_pm_op {
+	UFS_RUNTIME_PM = 0,
+	UFS_SYSTEM_PM = 1,
+	UFS_SHUTDOWN_PM = 2,
+};
+
+enum ufs_event_type {
+	UFS_EVT_PA_ERR = 0,
+	UFS_EVT_DL_ERR = 1,
+	UFS_EVT_NL_ERR = 2,
+	UFS_EVT_TL_ERR = 3,
+	UFS_EVT_DME_ERR = 4,
+	UFS_EVT_AUTO_HIBERN8_ERR = 5,
+	UFS_EVT_FATAL_ERR = 6,
+	UFS_EVT_LINK_STARTUP_FAIL = 7,
+	UFS_EVT_RESUME_ERR = 8,
+	UFS_EVT_SUSPEND_ERR = 9,
+	UFS_EVT_WL_SUSP_ERR = 10,
+	UFS_EVT_WL_RES_ERR = 11,
+	UFS_EVT_DEV_RESET = 12,
+	UFS_EVT_HOST_RESET = 13,
+	UFS_EVT_ABORT = 14,
+	UFS_EVT_CNT = 15,
+};
+
+enum ufshcd_state {
+	UFSHCD_STATE_RESET = 0,
+	UFSHCD_STATE_OPERATIONAL = 1,
+	UFSHCD_STATE_EH_SCHEDULED_NON_FATAL = 2,
+	UFSHCD_STATE_EH_SCHEDULED_FATAL = 3,
+	UFSHCD_STATE_ERROR = 4,
+};
+
+enum dev_cmd_type {
+	DEV_CMD_TYPE_NOP = 0,
+	DEV_CMD_TYPE_QUERY = 1,
+	DEV_CMD_TYPE_RPMB = 2,
+};
+
+enum clk_gating_state {
+	CLKS_OFF = 0,
+	CLKS_ON = 1,
+	REQ_CLKS_OFF = 2,
+	REQ_CLKS_ON = 3,
+};
+
+enum bkops_status {
+	BKOPS_STATUS_NO_OP = 0,
+	BKOPS_STATUS_NON_CRITICAL = 1,
+	BKOPS_STATUS_PERF_IMPACT = 2,
+	BKOPS_STATUS_CRITICAL = 3,
+	BKOPS_STATUS_MAX = 3,
+};
+
+enum {
+	REG_CONTROLLER_CAPABILITIES = 0,
+	REG_MCQCAP = 4,
+	REG_UFS_VERSION = 8,
+	REG_CONTROLLER_DEV_ID = 16,
+	REG_CONTROLLER_PROD_ID = 20,
+	REG_AUTO_HIBERNATE_IDLE_TIMER = 24,
+	REG_INTERRUPT_STATUS = 32,
+	REG_INTERRUPT_ENABLE = 36,
+	REG_CONTROLLER_STATUS = 48,
+	REG_CONTROLLER_ENABLE = 52,
+	REG_UIC_ERROR_CODE_PHY_ADAPTER_LAYER = 56,
+	REG_UIC_ERROR_CODE_DATA_LINK_LAYER = 60,
+	REG_UIC_ERROR_CODE_NETWORK_LAYER = 64,
+	REG_UIC_ERROR_CODE_TRANSPORT_LAYER = 68,
+	REG_UIC_ERROR_CODE_DME = 72,
+	REG_UTP_TRANSFER_REQ_INT_AGG_CONTROL = 76,
+	REG_UTP_TRANSFER_REQ_LIST_BASE_L = 80,
+	REG_UTP_TRANSFER_REQ_LIST_BASE_H = 84,
+	REG_UTP_TRANSFER_REQ_DOOR_BELL = 88,
+	REG_UTP_TRANSFER_REQ_LIST_CLEAR = 92,
+	REG_UTP_TRANSFER_REQ_LIST_RUN_STOP = 96,
+	REG_UTP_TASK_REQ_LIST_BASE_L = 112,
+	REG_UTP_TASK_REQ_LIST_BASE_H = 116,
+	REG_UTP_TASK_REQ_DOOR_BELL = 120,
+	REG_UTP_TASK_REQ_LIST_CLEAR = 124,
+	REG_UTP_TASK_REQ_LIST_RUN_STOP = 128,
+	REG_UIC_COMMAND = 144,
+	REG_UIC_COMMAND_ARG_1 = 148,
+	REG_UIC_COMMAND_ARG_2 = 152,
+	REG_UIC_COMMAND_ARG_3 = 156,
+	UFSHCI_REG_SPACE_SIZE = 160,
+	REG_UFS_CCAP = 256,
+	REG_UFS_CRYPTOCAP = 260,
+	REG_UFS_MEM_CFG = 768,
+	REG_UFS_MCQ_CFG = 896,
+	REG_UFS_ESILBA = 900,
+	REG_UFS_ESIUBA = 904,
+	UFSHCI_CRYPTO_REG_SPACE_SIZE = 1024,
+};
+
+enum ufs_unipro_ver {
+	UFS_UNIPRO_VER_RESERVED = 0,
+	UFS_UNIPRO_VER_1_40 = 1,
+	UFS_UNIPRO_VER_1_41 = 2,
+	UFS_UNIPRO_VER_1_6 = 3,
+	UFS_UNIPRO_VER_1_61 = 4,
+	UFS_UNIPRO_VER_1_8 = 5,
+	UFS_UNIPRO_VER_MAX = 6,
+	UFS_UNIPRO_VER_MASK = 15,
+};
+
+enum ufshcd_quirks {
+	UFSHCD_QUIRK_BROKEN_INTR_AGGR = 1,
+	UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS = 2,
+	UFSHCD_QUIRK_BROKEN_LCC = 4,
+	UFSHCD_QUIRK_BROKEN_PA_RXHSUNTERMCAP = 8,
+	UFSHCD_QUIRK_DME_PEER_ACCESS_AUTO_MODE = 16,
+	UFSHCD_QUIRK_BROKEN_UFS_HCI_VERSION = 32,
+	UFSHCI_QUIRK_BROKEN_REQ_LIST_CLR = 64,
+	UFSHCI_QUIRK_SKIP_RESET_INTR_AGGR = 128,
+	UFSHCI_QUIRK_BROKEN_HCE = 256,
+	UFSHCD_QUIRK_PRDT_BYTE_GRAN = 512,
+	UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR = 1024,
+	UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8 = 2048,
+	UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL = 4096,
+	UFSHCD_QUIRK_SKIP_DEF_UNIPRO_TIMEOUT_SETTING = 8192,
+	UFSHCD_QUIRK_BROKEN_UIC_CMD = 32768,
+	UFSHCD_QUIRK_SKIP_PH_CONFIGURATION = 65536,
+	UFSHCD_QUIRK_BROKEN_64BIT_ADDRESS = 131072,
+	UFSHCD_QUIRK_HIBERN_FASTAUTO = 262144,
+	UFSHCD_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH = 524288,
+	UFSHCD_QUIRK_MCQ_BROKEN_INTR = 1048576,
+	UFSHCD_QUIRK_MCQ_BROKEN_RTC = 2097152,
+};
+
+enum query_opcode {
+	UPIU_QUERY_OPCODE_NOP = 0,
+	UPIU_QUERY_OPCODE_READ_DESC = 1,
+	UPIU_QUERY_OPCODE_WRITE_DESC = 2,
+	UPIU_QUERY_OPCODE_READ_ATTR = 3,
+	UPIU_QUERY_OPCODE_WRITE_ATTR = 4,
+	UPIU_QUERY_OPCODE_READ_FLAG = 5,
+	UPIU_QUERY_OPCODE_SET_FLAG = 6,
+	UPIU_QUERY_OPCODE_CLEAR_FLAG = 7,
+	UPIU_QUERY_OPCODE_TOGGLE_FLAG = 8,
+};
+
+enum flag_idn {
+	QUERY_FLAG_IDN_FDEVICEINIT = 1,
+	QUERY_FLAG_IDN_PERMANENT_WPE = 2,
+	QUERY_FLAG_IDN_PWR_ON_WPE = 3,
+	QUERY_FLAG_IDN_BKOPS_EN = 4,
+	QUERY_FLAG_IDN_LIFE_SPAN_MODE_ENABLE = 5,
+	QUERY_FLAG_IDN_PURGE_ENABLE = 6,
+	QUERY_FLAG_IDN_RESERVED2 = 7,
+	QUERY_FLAG_IDN_FPHYRESOURCEREMOVAL = 8,
+	QUERY_FLAG_IDN_BUSY_RTC = 9,
+	QUERY_FLAG_IDN_RESERVED3 = 10,
+	QUERY_FLAG_IDN_PERMANENTLY_DISABLE_FW_UPDATE = 11,
+	QUERY_FLAG_IDN_WB_EN = 14,
+	QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN = 15,
+	QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8 = 16,
+	QUERY_FLAG_IDN_HPB_RESET = 17,
+	QUERY_FLAG_IDN_HPB_EN = 18,
+};
+
+enum {
+	UPIU_QUERY_FUNC_STANDARD_READ_REQUEST = 1,
+	UPIU_QUERY_FUNC_STANDARD_WRITE_REQUEST = 129,
+};
+
+enum attr_idn {
+	QUERY_ATTR_IDN_BOOT_LU_EN = 0,
+	QUERY_ATTR_IDN_MAX_HPB_SINGLE_CMD = 1,
+	QUERY_ATTR_IDN_POWER_MODE = 2,
+	QUERY_ATTR_IDN_ACTIVE_ICC_LVL = 3,
+	QUERY_ATTR_IDN_OOO_DATA_EN = 4,
+	QUERY_ATTR_IDN_BKOPS_STATUS = 5,
+	QUERY_ATTR_IDN_PURGE_STATUS = 6,
+	QUERY_ATTR_IDN_MAX_DATA_IN = 7,
+	QUERY_ATTR_IDN_MAX_DATA_OUT = 8,
+	QUERY_ATTR_IDN_DYN_CAP_NEEDED = 9,
+	QUERY_ATTR_IDN_REF_CLK_FREQ = 10,
+	QUERY_ATTR_IDN_CONF_DESC_LOCK = 11,
+	QUERY_ATTR_IDN_MAX_NUM_OF_RTT = 12,
+	QUERY_ATTR_IDN_EE_CONTROL = 13,
+	QUERY_ATTR_IDN_EE_STATUS = 14,
+	QUERY_ATTR_IDN_SECONDS_PASSED = 15,
+	QUERY_ATTR_IDN_CNTX_CONF = 16,
+	QUERY_ATTR_IDN_CORR_PRG_BLK_NUM = 17,
+	QUERY_ATTR_IDN_RESERVED2 = 18,
+	QUERY_ATTR_IDN_RESERVED3 = 19,
+	QUERY_ATTR_IDN_FFU_STATUS = 20,
+	QUERY_ATTR_IDN_PSA_STATE = 21,
+	QUERY_ATTR_IDN_PSA_DATA_SIZE = 22,
+	QUERY_ATTR_IDN_REF_CLK_GATING_WAIT_TIME = 23,
+	QUERY_ATTR_IDN_CASE_ROUGH_TEMP = 24,
+	QUERY_ATTR_IDN_HIGH_TEMP_BOUND = 25,
+	QUERY_ATTR_IDN_LOW_TEMP_BOUND = 26,
+	QUERY_ATTR_IDN_WB_FLUSH_STATUS = 28,
+	QUERY_ATTR_IDN_AVAIL_WB_BUFF_SIZE = 29,
+	QUERY_ATTR_IDN_WB_BUFF_LIFE_TIME_EST = 30,
+	QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE = 31,
+	QUERY_ATTR_IDN_EXT_IID_EN = 42,
+	QUERY_ATTR_IDN_TIMESTAMP = 48,
+};
+
+enum desc_idn {
+	QUERY_DESC_IDN_DEVICE = 0,
+	QUERY_DESC_IDN_CONFIGURATION = 1,
+	QUERY_DESC_IDN_UNIT = 2,
+	QUERY_DESC_IDN_RFU_0 = 3,
+	QUERY_DESC_IDN_INTERCONNECT = 4,
+	QUERY_DESC_IDN_STRING = 5,
+	QUERY_DESC_IDN_RFU_1 = 6,
+	QUERY_DESC_IDN_GEOMETRY = 7,
+	QUERY_DESC_IDN_POWER = 8,
+	QUERY_DESC_IDN_HEALTH = 9,
+	QUERY_DESC_IDN_MAX = 10,
+};
+
+enum desc_header_offset {
+	QUERY_DESC_LENGTH_OFFSET = 0,
+	QUERY_DESC_DESC_TYPE_OFFSET = 1,
+};
+
+enum ufs_hs_gear_tag {
+	UFS_HS_DONT_CHANGE = 0,
+	UFS_HS_G1 = 1,
+	UFS_HS_G2 = 2,
+	UFS_HS_G3 = 3,
+	UFS_HS_G4 = 4,
+	UFS_HS_G5 = 5,
+};
+
+enum {
+	FAST_MODE = 1,
+	SLOW_MODE = 2,
+	FASTAUTO_MODE = 4,
+	SLOWAUTO_MODE = 5,
+	UNCHANGED = 7,
+};
+
+enum {
+	UFSHCD_EH_IN_PROGRESS = 1,
+};
+
+enum utp_ocs {
+	OCS_SUCCESS = 0,
+	OCS_INVALID_CMD_TABLE_ATTR = 1,
+	OCS_INVALID_PRDT_ATTR = 2,
+	OCS_MISMATCH_DATA_BUF_SIZE = 3,
+	OCS_MISMATCH_RESP_UPIU_SIZE = 4,
+	OCS_PEER_COMM_FAILURE = 5,
+	OCS_ABORTED = 6,
+	OCS_FATAL_ERROR = 7,
+	OCS_DEVICE_FATAL_ERROR = 8,
+	OCS_INVALID_CRYPTO_CONFIG = 9,
+	OCS_GENERAL_CRYPTO_ERROR = 10,
+	OCS_INVALID_COMMAND_STATUS = 15,
+};
+
+enum {
+	UTP_CMD_TYPE_SCSI = 0,
+	UTP_CMD_TYPE_UFS = 1,
+	UTP_CMD_TYPE_DEV_MANAGE = 2,
+};
+
+enum {
+	UTP_CMD_TYPE_UFS_STORAGE = 1,
+};
+
+enum {
+	MASK_OCS = 15,
+};
+
+enum upiu_request_transaction {
+	UPIU_TRANSACTION_NOP_OUT = 0,
+	UPIU_TRANSACTION_COMMAND = 1,
+	UPIU_TRANSACTION_DATA_OUT = 2,
+	UPIU_TRANSACTION_TASK_REQ = 4,
+	UPIU_TRANSACTION_QUERY_REQ = 22,
+};
+
+enum {
+	UFS_UPIU_REPORT_LUNS_WLUN = 129,
+	UFS_UPIU_UFS_DEVICE_WLUN = 208,
+	UFS_UPIU_BOOT_WLUN = 176,
+	UFS_UPIU_RPMB_WLUN = 196,
+};
+
+enum {
+	MASK_TRANSFER_REQUESTS_SLOTS = 31,
+	MASK_TASK_MANAGEMENT_REQUEST_SLOTS = 458752,
+	MASK_EHSLUTRD_SUPPORTED = 4194304,
+	MASK_AUTO_HIBERN8_SUPPORT = 8388608,
+	MASK_64_ADDRESSING_SUPPORT = 16777216,
+	MASK_OUT_OF_ORDER_DATA_DELIVERY_SUPPORT = 33554432,
+	MASK_UIC_DME_TEST_MODE_SUPPORT = 67108864,
+	MASK_CRYPTO_SUPPORT = 268435456,
+	MASK_MCQ_SUPPORT = 1073741824,
+};
+
+enum {
+	UFS_ABORT_TASK = 1,
+	UFS_ABORT_TASK_SET = 2,
+	UFS_CLEAR_TASK_SET = 4,
+	UFS_LOGICAL_RESET = 8,
+	UFS_QUERY_TASK = 128,
+	UFS_QUERY_TASK_SET = 129,
+};
+
+enum {
+	UPIU_TASK_MANAGEMENT_FUNC_COMPL = 0,
+	UPIU_TASK_MANAGEMENT_FUNC_NOT_SUPPORTED = 4,
+	UPIU_TASK_MANAGEMENT_FUNC_SUCCEEDED = 8,
+	UPIU_TASK_MANAGEMENT_FUNC_FAILED = 5,
+	UPIU_INCORRECT_LOGICAL_UNIT_NO = 9,
+};
+
+enum {
+	UFSHCD_MAX_CHANNEL = 0,
+	UFSHCD_MAX_ID = 1,
+	UFSHCD_CMD_PER_LUN = 31,
+	UFSHCD_CAN_QUEUE = 31,
+};
+
+enum ufshcd_caps {
+	UFSHCD_CAP_CLK_GATING = 1,
+	UFSHCD_CAP_HIBERN8_WITH_CLK_GATING = 2,
+	UFSHCD_CAP_CLK_SCALING = 4,
+	UFSHCD_CAP_AUTO_BKOPS_SUSPEND = 8,
+	UFSHCD_CAP_INTR_AGGR = 16,
+	UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND = 32,
+	UFSHCD_CAP_RPM_AUTOSUSPEND = 64,
+	UFSHCD_CAP_WB_EN = 128,
+	UFSHCD_CAP_CRYPTO = 256,
+	UFSHCD_CAP_AGGR_POWER_COLLAPSE = 512,
+	UFSHCD_CAP_DEEPSLEEP = 1024,
+	UFSHCD_CAP_TEMP_NOTIF = 2048,
+	UFSHCD_CAP_WB_WITH_CLK_SCALING = 4096,
+};
+
+enum {
+	UIC_CMD_TIMEOUT_DEFAULT = 500,
+	UIC_CMD_TIMEOUT_MAX = 2000,
+};
+
+enum {
+	PWR_OK = 0,
+	PWR_LOCAL = 1,
+	PWR_REMOTE = 2,
+	PWR_BUSY = 3,
+	PWR_ERROR_CAP = 4,
+	PWR_FATAL_ERROR = 5,
+};
+
+enum {
+	INTERRUPT_MASK_ALL_VER_10 = 200703,
+	INTERRUPT_MASK_RW_VER_10 = 196608,
+	INTERRUPT_MASK_ALL_VER_11 = 204799,
+	INTERRUPT_MASK_ALL_VER_21 = 466943,
+};
+
+enum ufshcd_android_quirks {
+	UFSHCD_ANDROID_QUIRK_CUSTOM_CRYPTO_PROFILE = 1,
+	UFSHCD_ANDROID_QUIRK_BROKEN_CRYPTO_ENABLE = 2,
+	UFSHCD_ANDROID_QUIRK_KEYS_IN_PRDT = 4,
+};
+
+enum {
+	UPIU_RSP_FLAG_UNDERFLOW = 32,
+	UPIU_RSP_FLAG_OVERFLOW = 64,
+};
+
+enum upiu_response_transaction {
+	UPIU_TRANSACTION_NOP_IN = 32,
+	UPIU_TRANSACTION_RESPONSE = 33,
+	UPIU_TRANSACTION_DATA_IN = 34,
+	UPIU_TRANSACTION_TASK_RSP = 36,
+	UPIU_TRANSACTION_READY_XFER = 49,
+	UPIU_TRANSACTION_QUERY_RSP = 54,
+	UPIU_TRANSACTION_REJECT_UPIU = 63,
+};
+
+enum {
+	MASK_EE_STATUS = 65535,
+	MASK_EE_DYNCAP_EVENT = 1,
+	MASK_EE_SYSPOOL_EVENT = 2,
+	MASK_EE_URGENT_BKOPS = 4,
+	MASK_EE_TOO_HIGH_TEMP = 8,
+	MASK_EE_TOO_LOW_TEMP = 16,
+	MASK_EE_WRITEBOOSTER_EVENT = 32,
+	MASK_EE_PERFORMANCE_THROTTLING = 64,
+};
+
+enum {
+	WB_BUF_MODE_LU_DEDICATED = 0,
+	WB_BUF_MODE_SHARED = 1,
+};
+
+enum {
+	UFSHCD_POLL_FROM_INTERRUPT_CONTEXT = -1,
+};
+
+enum {
+	UFSHCD_UIC_DL_PA_INIT_ERROR = 1,
+	UFSHCD_UIC_DL_NAC_RECEIVED_ERROR = 2,
+	UFSHCD_UIC_DL_TCx_REPLAY_ERROR = 4,
+	UFSHCD_UIC_NL_ERROR = 8,
+	UFSHCD_UIC_TL_ERROR = 16,
+	UFSHCD_UIC_DME_ERROR = 32,
+	UFSHCD_UIC_PA_GENERIC_ERROR = 64,
+};
+
+enum utp_data_direction {
+	UTP_NO_DATA_TRANSFER = 0,
+	UTP_HOST_TO_DEVICE = 1,
+	UTP_DEVICE_TO_HOST = 2,
+};
+
+enum {
+	UPIU_CMD_FLAGS_NONE = 0,
+	UPIU_CMD_FLAGS_WRITE = 32,
+	UPIU_CMD_FLAGS_READ = 64,
+};
+
+enum {
+	MASK_TM_SERVICE_RESP = 255,
+};
+
+enum ufs_pwm_gear_tag {
+	UFS_PWM_DONT_CHANGE = 0,
+	UFS_PWM_G1 = 1,
+	UFS_PWM_G2 = 2,
+	UFS_PWM_G3 = 3,
+	UFS_PWM_G4 = 4,
+	UFS_PWM_G5 = 5,
+	UFS_PWM_G6 = 6,
+	UFS_PWM_G7 = 7,
+};
+
+enum ufs_lanes {
+	UFS_LANE_DONT_CHANGE = 0,
+	UFS_LANE_1 = 1,
+	UFS_LANE_2 = 2,
+};
+
+enum geometry_desc_param {
+	GEOMETRY_DESC_PARAM_LEN = 0,
+	GEOMETRY_DESC_PARAM_TYPE = 1,
+	GEOMETRY_DESC_PARAM_DEV_CAP = 4,
+	GEOMETRY_DESC_PARAM_MAX_NUM_LUN = 12,
+	GEOMETRY_DESC_PARAM_SEG_SIZE = 13,
+	GEOMETRY_DESC_PARAM_ALLOC_UNIT_SIZE = 17,
+	GEOMETRY_DESC_PARAM_MIN_BLK_SIZE = 18,
+	GEOMETRY_DESC_PARAM_OPT_RD_BLK_SIZE = 19,
+	GEOMETRY_DESC_PARAM_OPT_WR_BLK_SIZE = 20,
+	GEOMETRY_DESC_PARAM_MAX_IN_BUF_SIZE = 21,
+	GEOMETRY_DESC_PARAM_MAX_OUT_BUF_SIZE = 22,
+	GEOMETRY_DESC_PARAM_RPMB_RW_SIZE = 23,
+	GEOMETRY_DESC_PARAM_DYN_CAP_RSRC_PLC = 24,
+	GEOMETRY_DESC_PARAM_DATA_ORDER = 25,
+	GEOMETRY_DESC_PARAM_MAX_NUM_CTX = 26,
+	GEOMETRY_DESC_PARAM_TAG_UNIT_SIZE = 27,
+	GEOMETRY_DESC_PARAM_TAG_RSRC_SIZE = 28,
+	GEOMETRY_DESC_PARAM_SEC_RM_TYPES = 29,
+	GEOMETRY_DESC_PARAM_MEM_TYPES = 30,
+	GEOMETRY_DESC_PARAM_SCM_MAX_NUM_UNITS = 32,
+	GEOMETRY_DESC_PARAM_SCM_CAP_ADJ_FCTR = 36,
+	GEOMETRY_DESC_PARAM_NPM_MAX_NUM_UNITS = 38,
+	GEOMETRY_DESC_PARAM_NPM_CAP_ADJ_FCTR = 42,
+	GEOMETRY_DESC_PARAM_ENM1_MAX_NUM_UNITS = 44,
+	GEOMETRY_DESC_PARAM_ENM1_CAP_ADJ_FCTR = 48,
+	GEOMETRY_DESC_PARAM_ENM2_MAX_NUM_UNITS = 50,
+	GEOMETRY_DESC_PARAM_ENM2_CAP_ADJ_FCTR = 54,
+	GEOMETRY_DESC_PARAM_ENM3_MAX_NUM_UNITS = 56,
+	GEOMETRY_DESC_PARAM_ENM3_CAP_ADJ_FCTR = 60,
+	GEOMETRY_DESC_PARAM_ENM4_MAX_NUM_UNITS = 62,
+	GEOMETRY_DESC_PARAM_ENM4_CAP_ADJ_FCTR = 66,
+	GEOMETRY_DESC_PARAM_OPT_LOG_BLK_SIZE = 68,
+	GEOMETRY_DESC_PARAM_HPB_REGION_SIZE = 72,
+	GEOMETRY_DESC_PARAM_HPB_NUMBER_LU = 73,
+	GEOMETRY_DESC_PARAM_HPB_SUBREGION_SIZE = 74,
+	GEOMETRY_DESC_PARAM_HPB_MAX_ACTIVE_REGS = 75,
+	GEOMETRY_DESC_PARAM_WB_MAX_ALLOC_UNITS = 79,
+	GEOMETRY_DESC_PARAM_WB_MAX_WB_LUNS = 83,
+	GEOMETRY_DESC_PARAM_WB_BUFF_CAP_ADJ = 84,
+	GEOMETRY_DESC_PARAM_WB_SUP_RED_TYPE = 85,
+	GEOMETRY_DESC_PARAM_WB_SUP_WB_TYPE = 86,
+};
+
+enum device_desc_param {
+	DEVICE_DESC_PARAM_LEN = 0,
+	DEVICE_DESC_PARAM_TYPE = 1,
+	DEVICE_DESC_PARAM_DEVICE_TYPE = 2,
+	DEVICE_DESC_PARAM_DEVICE_CLASS = 3,
+	DEVICE_DESC_PARAM_DEVICE_SUB_CLASS = 4,
+	DEVICE_DESC_PARAM_PRTCL = 5,
+	DEVICE_DESC_PARAM_NUM_LU = 6,
+	DEVICE_DESC_PARAM_NUM_WLU = 7,
+	DEVICE_DESC_PARAM_BOOT_ENBL = 8,
+	DEVICE_DESC_PARAM_DESC_ACCSS_ENBL = 9,
+	DEVICE_DESC_PARAM_INIT_PWR_MODE = 10,
+	DEVICE_DESC_PARAM_HIGH_PR_LUN = 11,
+	DEVICE_DESC_PARAM_SEC_RMV_TYPE = 12,
+	DEVICE_DESC_PARAM_SEC_LU = 13,
+	DEVICE_DESC_PARAM_BKOP_TERM_LT = 14,
+	DEVICE_DESC_PARAM_ACTVE_ICC_LVL = 15,
+	DEVICE_DESC_PARAM_SPEC_VER = 16,
+	DEVICE_DESC_PARAM_MANF_DATE = 18,
+	DEVICE_DESC_PARAM_MANF_NAME = 20,
+	DEVICE_DESC_PARAM_PRDCT_NAME = 21,
+	DEVICE_DESC_PARAM_SN = 22,
+	DEVICE_DESC_PARAM_OEM_ID = 23,
+	DEVICE_DESC_PARAM_MANF_ID = 24,
+	DEVICE_DESC_PARAM_UD_OFFSET = 26,
+	DEVICE_DESC_PARAM_UD_LEN = 27,
+	DEVICE_DESC_PARAM_RTT_CAP = 28,
+	DEVICE_DESC_PARAM_FRQ_RTC = 29,
+	DEVICE_DESC_PARAM_UFS_FEAT = 31,
+	DEVICE_DESC_PARAM_FFU_TMT = 32,
+	DEVICE_DESC_PARAM_Q_DPTH = 33,
+	DEVICE_DESC_PARAM_DEV_VER = 34,
+	DEVICE_DESC_PARAM_NUM_SEC_WPA = 36,
+	DEVICE_DESC_PARAM_PSA_MAX_DATA = 37,
+	DEVICE_DESC_PARAM_PSA_TMT = 41,
+	DEVICE_DESC_PARAM_PRDCT_REV = 42,
+	DEVICE_DESC_PARAM_HPB_VER = 64,
+	DEVICE_DESC_PARAM_HPB_CONTROL = 66,
+	DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP = 79,
+	DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN = 83,
+	DEVICE_DESC_PARAM_WB_TYPE = 84,
+	DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS = 85,
+};
+
+enum {
+	UFS_DEV_LOW_TEMP_NOTIF = 16,
+	UFS_DEV_HIGH_TEMP_NOTIF = 32,
+	UFS_DEV_EXT_TEMP_NOTIF = 64,
+	UFS_DEV_HPB_SUPPORT = 128,
+	UFS_DEV_WRITE_BOOSTER_SUP = 256,
+	UFS_DEV_EXT_IID_SUP = 65536,
+};
+
+enum unit_desc_param {
+	UNIT_DESC_PARAM_LEN = 0,
+	UNIT_DESC_PARAM_TYPE = 1,
+	UNIT_DESC_PARAM_UNIT_INDEX = 2,
+	UNIT_DESC_PARAM_LU_ENABLE = 3,
+	UNIT_DESC_PARAM_BOOT_LUN_ID = 4,
+	UNIT_DESC_PARAM_LU_WR_PROTECT = 5,
+	UNIT_DESC_PARAM_LU_Q_DEPTH = 6,
+	UNIT_DESC_PARAM_PSA_SENSITIVE = 7,
+	UNIT_DESC_PARAM_MEM_TYPE = 8,
+	UNIT_DESC_PARAM_DATA_RELIABILITY = 9,
+	UNIT_DESC_PARAM_LOGICAL_BLK_SIZE = 10,
+	UNIT_DESC_PARAM_LOGICAL_BLK_COUNT = 11,
+	UNIT_DESC_PARAM_ERASE_BLK_SIZE = 19,
+	UNIT_DESC_PARAM_PROVISIONING_TYPE = 23,
+	UNIT_DESC_PARAM_PHY_MEM_RSRC_CNT = 24,
+	UNIT_DESC_PARAM_CTX_CAPABILITIES = 32,
+	UNIT_DESC_PARAM_LARGE_UNIT_SIZE_M1 = 34,
+	UNIT_DESC_PARAM_HPB_LU_MAX_ACTIVE_RGNS = 35,
+	UNIT_DESC_PARAM_HPB_PIN_RGN_START_OFF = 37,
+	UNIT_DESC_PARAM_HPB_NUM_PIN_RGNS = 39,
+	UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS = 41,
+};
+
+enum {
+	PA_HS_MODE_A = 1,
+	PA_HS_MODE_B = 2,
+};
+
+enum power_desc_param_offset {
+	PWR_DESC_LEN = 0,
+	PWR_DESC_TYPE = 1,
+	PWR_DESC_ACTIVE_LVLS_VCC_0 = 2,
+	PWR_DESC_ACTIVE_LVLS_VCCQ_0 = 34,
+	PWR_DESC_ACTIVE_LVLS_VCCQ2_0 = 66,
+};
+
+enum {
+	UFSHCD_NANO_AMP = 0,
+	UFSHCD_MICRO_AMP = 1,
+	UFSHCD_MILI_AMP = 2,
+	UFSHCD_AMP = 3,
+};
+
+enum {
+	UPIU_COMMAND_SET_TYPE_SCSI = 0,
+	UPIU_COMMAND_SET_TYPE_UFS = 1,
+	UPIU_COMMAND_SET_TYPE_QUERY = 2,
+};
+
+enum ufs_lu_wp_type {
+	UFS_LU_NO_WP = 0,
+	UFS_LU_POWER_ON_WP = 1,
+	UFS_LU_PERM_WP = 2,
+};
+
+enum rpmb_unit_desc_param {
+	RPMB_UNIT_DESC_PARAM_LEN = 0,
+	RPMB_UNIT_DESC_PARAM_TYPE = 1,
+	RPMB_UNIT_DESC_PARAM_UNIT_INDEX = 2,
+	RPMB_UNIT_DESC_PARAM_LU_ENABLE = 3,
+	RPMB_UNIT_DESC_PARAM_BOOT_LUN_ID = 4,
+	RPMB_UNIT_DESC_PARAM_LU_WR_PROTECT = 5,
+	RPMB_UNIT_DESC_PARAM_LU_Q_DEPTH = 6,
+	RPMB_UNIT_DESC_PARAM_PSA_SENSITIVE = 7,
+	RPMB_UNIT_DESC_PARAM_MEM_TYPE = 8,
+	RPMB_UNIT_DESC_PARAM_REGION_EN = 9,
+	RPMB_UNIT_DESC_PARAM_LOGICAL_BLK_SIZE = 10,
+	RPMB_UNIT_DESC_PARAM_LOGICAL_BLK_COUNT = 11,
+	RPMB_UNIT_DESC_PARAM_REGION0_SIZE = 19,
+	RPMB_UNIT_DESC_PARAM_REGION1_SIZE = 20,
+	RPMB_UNIT_DESC_PARAM_REGION2_SIZE = 21,
+	RPMB_UNIT_DESC_PARAM_REGION3_SIZE = 22,
+	RPMB_UNIT_DESC_PARAM_PROVISIONING_TYPE = 23,
+	RPMB_UNIT_DESC_PARAM_PHY_MEM_RSRC_CNT = 24,
+};
+
+enum {
+	MASK_EXT_IID_SUPPORT = 1024,
+};
+
+enum {
+	TASK_REQ_UPIU_SIZE_DWORDS = 8,
+	TASK_RSP_UPIU_SIZE_DWORDS = 8,
+	ALIGNED_UPIU_SIZE = 512,
+};
+
+struct trace_event_raw_ufshcd_clk_gating {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	int state;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_clk_scaling {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_state;
+	u32 __data_loc_clk;
+	u32 prev_state;
+	u32 curr_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_auto_bkops_state {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_profiling_template {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_profile_info;
+	s64 time_us;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_template {
+	struct trace_entry ent;
+	s64 usecs;
+	int err;
+	u32 __data_loc_dev_name;
+	int dev_state;
+	int link_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_command {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	enum ufs_trace_str_t str_t;
+	unsigned int tag;
+	u32 doorbell;
+	u32 hwq_id;
+	u32 intr;
+	u64 lba;
+	int transfer_len;
+	u8 opcode;
+	u8 group_id;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_uic_command {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	enum ufs_trace_str_t str_t;
+	u32 cmd;
+	u32 arg1;
+	u32 arg2;
+	u32 arg3;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_upiu {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	enum ufs_trace_str_t str_t;
+	unsigned char hdr[12];
+	unsigned char tsf[16];
+	enum ufs_trace_tsf_t tsf_t;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_exception_event {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u16 status;
+	char __data[0];
+};
+
+struct utp_upiu_cmd {
+	__be32 exp_data_transfer_len;
+	__u8 cdb[16];
+};
+
+struct utp_upiu_query {
+	__u8 opcode;
+	__u8 idn;
+	__u8 index;
+	__u8 selector;
+	__be16 reserved_osf;
+	__be16 length;
+	__be32 value;
+	__be32 reserved[2];
+};
+
+struct utp_upiu_header {
+	union {
+		struct {
+			__be32 dword_0;
+			__be32 dword_1;
+			__be32 dword_2;
+		};
+		struct {
+			__u8 transaction_code;
+			__u8 flags;
+			__u8 lun;
+			__u8 task_tag;
+			__u8 command_set_type: 4;
+			__u8 iid: 4;
+			union {
+				__u8 tm_function;
+				__u8 query_function;
+			};
+			__u8 response;
+			__u8 status;
+			__u8 ehs_length;
+			__u8 device_information;
+			__be16 data_segment_length;
+		};
+	};
+};
+
+struct utp_upiu_req {
+	struct utp_upiu_header header;
+	union {
+		struct utp_upiu_cmd sc;
+		struct utp_upiu_query qr;
+		struct utp_upiu_query uc;
+	};
+};
+
+struct ufs_clk_info {
+	struct list_head list;
+	struct clk *clk;
+	const char *name;
+	u32 max_freq;
+	u32 min_freq;
+	u32 curr_freq;
+	bool keep_link_active;
+	bool enabled;
+};
+
+struct utp_upiu_query_v4_0 {
+	__u8 opcode;
+	__u8 idn;
+	__u8 index;
+	__u8 selector;
+	__u8 osf3;
+	__u8 osf4;
+	__be16 osf5;
+	__be32 osf6;
+	__be32 osf7;
+	__be32 reserved;
+};
+
+struct utp_cmd_rsp {
+	__be32 residual_transfer_count;
+	__be32 reserved[4];
+	__be16 sense_data_len;
+	u8 sense_data[18];
+};
+
+struct utp_upiu_rsp {
+	struct utp_upiu_header header;
+	union {
+		struct utp_cmd_rsp sr;
+		struct utp_upiu_query qr;
+	};
+};
+
+struct ufshcd_sg_entry {
+	__le64 addr;
+	__le32 reserved;
+	__le32 size;
+};
+
+struct ufs_event_hist {
+	int pos;
+	u32 val[8];
+	u64 tstamp[8];
+	unsigned long long cnt;
+};
+
+struct ufs_stats {
+	u32 last_intr_status;
+	u64 last_intr_ts;
+	u32 hibern8_exit_cnt;
+	u64 last_hibern8_exit_tstamp;
+	struct ufs_event_hist event[15];
+};
+
+struct ufs_query_req {
+	u8 query_func;
+	struct utp_upiu_query upiu_req;
+};
+
+struct ufs_query_res {
+	struct utp_upiu_query upiu_res;
+};
+
+struct ufs_query {
+	struct ufs_query_req request;
+	u8 *descriptor;
+	struct ufs_query_res response;
+};
+
+struct ufs_dev_cmd {
+	enum dev_cmd_type type;
+	struct mutex lock;
+	struct completion *complete;
+	struct ufs_query query;
+};
+
+struct ufs_dev_info {
+	bool f_power_on_wp_en;
+	bool is_lu_power_on_wp;
+	u8 max_lu_supported;
+	u16 wmanufacturerid;
+	u8 *model;
+	u16 wspecversion;
+	u32 clk_gating_wait_us;
+	u8 bqueuedepth;
+	bool wb_enabled;
+	bool wb_buf_flush_enabled;
+	u8 wb_dedicated_lu;
+	u8 wb_buffer_type;
+	bool b_rpm_dev_flush_capable;
+	u8 b_presrv_uspc_en;
+	bool b_advanced_rpmb_en;
+	bool b_ext_iid_en;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct ufs_vreg;
+
+struct ufs_vreg_info {
+	struct ufs_vreg *vcc;
+	struct ufs_vreg *vccq;
+	struct ufs_vreg *vccq2;
+	struct ufs_vreg *vdd_hba;
+};
+
+struct ufs_pa_layer_attr {
+	u32 gear_rx;
+	u32 gear_tx;
+	u32 lane_rx;
+	u32 lane_tx;
+	u32 pwr_rx;
+	u32 pwr_tx;
+	u32 hs_rate;
+};
+
+struct ufs_pwr_mode_info {
+	bool is_valid;
+	struct ufs_pa_layer_attr info;
+};
+
+struct ufs_clk_gating {
+	struct delayed_work gate_work;
+	struct work_struct ungate_work;
+	enum clk_gating_state state;
+	unsigned long delay_ms;
+	bool is_suspended;
+	struct device_attribute delay_attr;
+	struct device_attribute enable_attr;
+	bool is_enabled;
+	bool is_initialized;
+	int active_reqs;
+	struct workqueue_struct *clk_gating_workq;
+	u64 android_kabi_reserved1;
+};
+
+struct ufs_clk_scaling {
+	int active_reqs;
+	unsigned long tot_busy_t;
+	ktime_t window_start_t;
+	ktime_t busy_start_t;
+	struct device_attribute enable_attr;
+	struct ufs_pa_layer_attr saved_pwr_info;
+	struct workqueue_struct *workq;
+	struct work_struct suspend_work;
+	struct work_struct resume_work;
+	u32 min_gear;
+	bool is_enabled;
+	bool is_allowed;
+	bool is_initialized;
+	bool is_busy_started;
+	bool is_suspended;
+	bool suspend_on_no_request;
+	u64 android_kabi_reserved1;
+};
+
+struct ufs_hba_monitor {
+	unsigned long chunk_size;
+	unsigned long nr_sec_rw[2];
+	ktime_t total_busy[2];
+	unsigned long nr_req[2];
+	ktime_t lat_sum[2];
+	ktime_t lat_max[2];
+	ktime_t lat_min[2];
+	u32 nr_queued[2];
+	ktime_t busy_start_ts[2];
+	ktime_t enabled_ts;
+	bool enabled;
+};
+
+union ufs_crypto_capabilities {
+	__le32 reg_val;
+	struct {
+		u8 num_crypto_cap;
+		u8 config_count;
+		u8 reserved;
+		u8 config_array_ptr;
+	};
+};
+
+struct ufshcd_res_info {
+	const char *name;
+	struct resource *resource;
+	void *base;
+};
+
+struct ufshcd_mcq_opr_info_t {
+	unsigned long offset;
+	unsigned long stride;
+	void *base;
+};
+
+struct utp_transfer_cmd_desc;
+
+struct utp_transfer_req_desc;
+
+struct utp_task_req_desc;
+
+struct ufshcd_lrb;
+
+struct ufs_hba_variant_ops;
+
+struct uic_command;
+
+union ufs_crypto_cap_entry;
+
+struct ufs_hw_queue;
+
+struct ufs_hba {
+	void *mmio_base;
+	struct utp_transfer_cmd_desc *ucdl_base_addr;
+	struct utp_transfer_req_desc *utrdl_base_addr;
+	struct utp_task_req_desc *utmrdl_base_addr;
+	dma_addr_t ucdl_dma_addr;
+	dma_addr_t utrdl_dma_addr;
+	dma_addr_t utmrdl_dma_addr;
+	struct Scsi_Host *host;
+	struct device *dev;
+	struct scsi_device *ufs_device_wlun;
+	enum ufs_dev_pwr_mode curr_dev_pwr_mode;
+	enum uic_link_state uic_link_state;
+	enum ufs_pm_level rpm_lvl;
+	enum ufs_pm_level spm_lvl;
+	int pm_op_in_progress;
+	u32 ahit;
+	struct ufshcd_lrb *lrb;
+	unsigned long outstanding_tasks;
+	spinlock_t outstanding_lock;
+	unsigned long outstanding_reqs;
+	u32 capabilities;
+	int nutrs;
+	u32 mcq_capabilities;
+	int nutmrs;
+	u32 reserved_slot;
+	u32 ufs_version;
+	const struct ufs_hba_variant_ops *vops;
+	struct ufs_hba_variant_params *vps;
+	void *priv;
+	size_t sg_entry_size;
+	unsigned int irq;
+	bool is_irq_enabled;
+	enum ufs_ref_clk_freq dev_ref_clk_freq;
+	unsigned int quirks;
+	unsigned int android_quirks;
+	unsigned int dev_quirks;
+	struct blk_mq_tag_set tmf_tag_set;
+	struct request_queue *tmf_queue;
+	struct request **tmf_rqs;
+	struct uic_command *active_uic_cmd;
+	struct mutex uic_cmd_mutex;
+	struct completion *uic_async_done;
+	enum ufshcd_state ufshcd_state;
+	u32 eh_flags;
+	u32 intr_mask;
+	u16 ee_ctrl_mask;
+	u16 ee_drv_mask;
+	u16 ee_usr_mask;
+	struct mutex ee_ctrl_mutex;
+	bool is_powered;
+	bool shutting_down;
+	struct semaphore host_sem;
+	struct workqueue_struct *eh_wq;
+	struct work_struct eh_work;
+	struct work_struct eeh_work;
+	u32 errors;
+	u32 uic_error;
+	u32 saved_err;
+	u32 saved_uic_err;
+	struct ufs_stats ufs_stats;
+	bool force_reset;
+	bool force_pmc;
+	bool silence_err_logs;
+	struct ufs_dev_cmd dev_cmd;
+	ktime_t last_dme_cmd_tstamp;
+	int nop_out_timeout;
+	struct ufs_dev_info dev_info;
+	bool auto_bkops_enabled;
+	struct ufs_vreg_info vreg_info;
+	struct list_head clk_list_head;
+	int req_abort_count;
+	u32 lanes_per_direction;
+	struct ufs_pa_layer_attr pwr_info;
+	struct ufs_pwr_mode_info max_pwr_info;
+	struct ufs_clk_gating clk_gating;
+	u32 caps;
+	struct devfreq *devfreq;
+	struct ufs_clk_scaling clk_scaling;
+	bool system_suspending;
+	bool is_sys_suspended;
+	enum bkops_status urgent_bkops_lvl;
+	bool is_urgent_bkops_lvl_checked;
+	struct mutex wb_mutex;
+	struct rw_semaphore clk_scaling_lock;
+	atomic_t scsi_block_reqs_cnt;
+	struct device bsg_dev;
+	struct request_queue *bsg_queue;
+	struct delayed_work rpm_dev_flush_recheck_work;
+	struct ufs_hba_monitor monitor;
+	union ufs_crypto_capabilities crypto_capabilities;
+	union ufs_crypto_cap_entry *crypto_cap_array;
+	u32 crypto_cfg_register;
+	struct blk_crypto_profile crypto_profile;
+	struct dentry *debugfs_root;
+	struct delayed_work debugfs_ee_work;
+	u32 debugfs_ee_rate_limit_ms;
+	u32 luns_avail;
+	unsigned int nr_hw_queues;
+	unsigned int nr_queues[3];
+	bool complete_put;
+	bool ext_iid_sup;
+	bool scsi_host_added;
+	bool mcq_sup;
+	bool mcq_enabled;
+	struct ufshcd_res_info res[7];
+	void *mcq_base;
+	struct ufs_hw_queue *uhq;
+	struct ufs_hw_queue *dev_cmd_queue;
+	struct ufshcd_mcq_opr_info_t mcq_opr[4];
+	u64 android_oem_data1;
+};
+
+struct utp_transfer_cmd_desc {
+	u8 command_upiu[512];
+	u8 response_upiu[512];
+	u8 prd_table[0];
+};
+
+struct request_desc_header {
+	u8 cci;
+	u8 ehs_length;
+	u8 reserved2: 7;
+	u8 enable_crypto: 1;
+	u8 interrupt: 1;
+	u8 data_direction: 2;
+	u8 reserved1: 1;
+	u8 command_type: 4;
+	__le32 dunl;
+	u8 ocs;
+	u8 cds;
+	__le16 ldbc;
+	__le32 dunu;
+};
+
+struct utp_transfer_req_desc {
+	struct request_desc_header header;
+	__le64 command_desc_base_addr;
+	__le16 response_upiu_length;
+	__le16 response_upiu_offset;
+	__le16 prd_table_length;
+	__le16 prd_table_offset;
+};
+
+struct utp_task_req_desc {
+	struct request_desc_header header;
+	struct {
+		struct utp_upiu_header req_header;
+		__be32 input_param1;
+		__be32 input_param2;
+		__be32 input_param3;
+		__be32 __reserved1[2];
+	} upiu_req;
+	struct {
+		struct utp_upiu_header rsp_header;
+		__be32 output_param1;
+		__be32 output_param2;
+		__be32 __reserved2[3];
+	} upiu_rsp;
+};
+
+struct ufshcd_lrb {
+	struct utp_transfer_req_desc *utr_descriptor_ptr;
+	struct utp_upiu_req *ucd_req_ptr;
+	struct utp_upiu_rsp *ucd_rsp_ptr;
+	struct ufshcd_sg_entry *ucd_prdt_ptr;
+	dma_addr_t utrd_dma_addr;
+	dma_addr_t ucd_req_dma_addr;
+	dma_addr_t ucd_rsp_dma_addr;
+	dma_addr_t ucd_prdt_dma_addr;
+	struct scsi_cmnd *cmd;
+	int scsi_status;
+	int command_type;
+	int task_tag;
+	u8 lun;
+	bool intr_cmd;
+	ktime_t issue_time_stamp;
+	u64 issue_time_stamp_local_clock;
+	ktime_t compl_time_stamp;
+	u64 compl_time_stamp_local_clock;
+	int crypto_key_slot;
+	u64 data_unit_num;
+	bool req_abort_skip;
+	u64 android_kabi_reserved1;
+};
+
+union ufs_crypto_cfg_entry;
+
+struct ufs_hba_variant_ops {
+	const char *name;
+	int (*init)(struct ufs_hba *);
+	void (*exit)(struct ufs_hba *);
+	u32 (*get_ufs_hci_version)(struct ufs_hba *);
+	int (*clk_scale_notify)(struct ufs_hba *, bool, enum ufs_notify_change_status);
+	int (*setup_clocks)(struct ufs_hba *, bool, enum ufs_notify_change_status);
+	int (*hce_enable_notify)(struct ufs_hba *, enum ufs_notify_change_status);
+	int (*link_startup_notify)(struct ufs_hba *, enum ufs_notify_change_status);
+	int (*pwr_change_notify)(struct ufs_hba *, enum ufs_notify_change_status, struct ufs_pa_layer_attr *, struct ufs_pa_layer_attr *);
+	void (*setup_xfer_req)(struct ufs_hba *, int, bool);
+	void (*setup_task_mgmt)(struct ufs_hba *, int, u8);
+	void (*hibern8_notify)(struct ufs_hba *, enum uic_cmd_dme, enum ufs_notify_change_status);
+	int (*apply_dev_quirks)(struct ufs_hba *);
+	void (*fixup_dev_quirks)(struct ufs_hba *);
+	int (*suspend)(struct ufs_hba *, enum ufs_pm_op, enum ufs_notify_change_status);
+	int (*resume)(struct ufs_hba *, enum ufs_pm_op);
+	void (*dbg_register_dump)(struct ufs_hba *);
+	int (*phy_initialization)(struct ufs_hba *);
+	int (*device_reset)(struct ufs_hba *);
+	void (*config_scaling_param)(struct ufs_hba *, struct devfreq_dev_profile *, struct devfreq_simple_ondemand_data *);
+	int (*program_key)(struct ufs_hba *, const union ufs_crypto_cfg_entry *, int);
+	void (*event_notify)(struct ufs_hba *, enum ufs_event_type, void *);
+	void (*reinit_notify)(struct ufs_hba *);
+	int (*mcq_config_resource)(struct ufs_hba *);
+	int (*get_hba_mac)(struct ufs_hba *);
+	int (*op_runtime_config)(struct ufs_hba *);
+	int (*get_outstanding_cqs)(struct ufs_hba *, unsigned long *);
+	int (*config_esi)(struct ufs_hba *);
+	void (*config_scsi_dev)(struct scsi_device *);
+};
+
+union ufs_crypto_cfg_entry {
+	__le32 reg_val[32];
+	struct {
+		u8 crypto_key[64];
+		u8 data_unit_size;
+		u8 crypto_cap_idx;
+		u8 reserved_1;
+		u8 config_enable;
+		u8 reserved_multi_host;
+		u8 reserved_2;
+		u8 vsb[2];
+		u8 reserved_3[56];
+	};
+};
+
+struct uic_command {
+	u32 command;
+	u32 argument1;
+	u32 argument2;
+	u32 argument3;
+	int cmd_active;
+	struct completion done;
+};
+
+struct ufs_vreg {
+	struct regulator *reg;
+	const char *name;
+	bool always_on;
+	bool enabled;
+	int max_uA;
+};
+
+union ufs_crypto_cap_entry {
+	__le32 reg_val;
+	struct {
+		u8 algorithm_id;
+		u8 sdus_mask;
+		u8 key_size;
+		u8 reserved;
+	};
+};
+
+struct cq_entry;
+
+struct ufs_hw_queue {
+	void *mcq_sq_head;
+	void *mcq_sq_tail;
+	void *mcq_cq_head;
+	void *mcq_cq_tail;
+	struct utp_transfer_req_desc *sqe_base_addr;
+	dma_addr_t sqe_dma_addr;
+	struct cq_entry *cqe_base_addr;
+	dma_addr_t cqe_dma_addr;
+	u32 max_entries;
+	u32 id;
+	u32 sq_tail_slot;
+	spinlock_t sq_lock;
+	u32 cq_tail_slot;
+	u32 cq_head_slot;
+	spinlock_t cq_lock;
+	struct mutex sq_mutex;
+};
+
+struct cq_entry {
+	__le64 command_desc_base_addr;
+	__le16 response_upiu_length;
+	__le16 response_upiu_offset;
+	__le16 prd_table_length;
+	__le16 prd_table_offset;
+	__le32 status;
+	__le32 reserved[3];
+};
+
+struct trace_event_data_offsets_ufshcd_clk_gating {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_template {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_command {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_uic_command {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_upiu {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_exception_event {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_clk_scaling {
+	u32 dev_name;
+	u32 state;
+	u32 clk;
+};
+
+struct trace_event_data_offsets_ufshcd_auto_bkops_state {
+	u32 dev_name;
+	u32 state;
+};
+
+struct trace_event_data_offsets_ufshcd_profiling_template {
+	u32 dev_name;
+	u32 profile_info;
+};
+
+struct uc_string_id {
+	u8 len;
+	u8 type;
+	wchar_t uc[0];
+};
+
+struct ufs_arpmb_meta {
+	__be16 req_resp_type;
+	__u8 nonce[16];
+	__be32 write_counter;
+	__be16 addr_lun;
+	__be16 block_count;
+	__be16 result;
+} __attribute__((packed));
+
+struct ufs_ehs {
+	__u8 length;
+	__u8 ehs_type;
+	__be16 ehssub_type;
+	struct ufs_arpmb_meta meta;
+	__u8 mac_key[32];
+};
+
+enum interconnect_desc_param {
+	INTERCONNECT_DESC_PARAM_LEN = 0,
+	INTERCONNECT_DESC_PARAM_TYPE = 1,
+	INTERCONNECT_DESC_PARAM_UNIPRO_VER = 2,
+	INTERCONNECT_DESC_PARAM_MPHY_VER = 4,
+};
+
+enum health_desc_param {
+	HEALTH_DESC_PARAM_LEN = 0,
+	HEALTH_DESC_PARAM_TYPE = 1,
+	HEALTH_DESC_PARAM_EOL_INFO = 2,
+	HEALTH_DESC_PARAM_LIFE_TIME_EST_A = 3,
+	HEALTH_DESC_PARAM_LIFE_TIME_EST_B = 4,
+};
+
+enum ufshcd_mcq_opr {
+	OPR_SQD = 0,
+	OPR_SQIS = 1,
+	OPR_CQD = 2,
+	OPR_CQIS = 3,
+	OPR_MAX = 4,
+};
+
+enum {
+	REG_CQIS = 0,
+	REG_CQIE = 4,
+};
+
+enum {
+	REG_SQATTR = 0,
+	REG_SQLBA = 4,
+	REG_SQUBA = 8,
+	REG_SQDAO = 12,
+	REG_SQISAO = 16,
+	REG_CQATTR = 32,
+	REG_CQLBA = 36,
+	REG_CQUBA = 40,
+	REG_CQDAO = 44,
+	REG_CQISAO = 48,
+};
+
+enum {
+	REG_SQHP = 0,
+	REG_SQTP = 4,
+	REG_SQRTC = 8,
+	REG_SQCTI = 12,
+	REG_SQRTS = 16,
+};
+
+enum {
+	REG_CQHP = 0,
+	REG_CQTP = 4,
+};
+
+enum {
+	SQ_START = 0,
+	SQ_STOP = 1,
+	SQ_ICU = 2,
+};
+
+enum {
+	SQ_STS = 1,
+	SQ_CUS = 2,
+};
+
+struct ufs_debugfs_attr {
+	const char *name;
+	mode_t mode;
+	const struct file_operations *fops;
+};
+
+enum ufs_bsg_msg_code {
+	UPIU_TRANSACTION_UIC_CMD = 31,
+	UPIU_TRANSACTION_ARPMB_CMD = 32,
+};
+
+enum ufs_rpmb_op_type {
+	UFS_RPMB_WRITE_KEY = 1,
+	UFS_RPMB_READ_CNT = 2,
+	UFS_RPMB_WRITE = 3,
+	UFS_RPMB_READ = 4,
+	UFS_RPMB_READ_RESP = 5,
+	UFS_RPMB_SEC_CONF_WRITE = 6,
+	UFS_RPMB_SEC_CONF_READ = 7,
+	UFS_RPMB_PURGE_ENABLE = 8,
+	UFS_RPMB_PURGE_STATUS_READ = 9,
+};
+
+struct ufs_bsg_request {
+	__u32 msgcode;
+	struct utp_upiu_req upiu_req;
+};
+
+struct ufs_rpmb_request {
+	struct ufs_bsg_request bsg_request;
+	struct ufs_ehs ehs_req;
+};
+
+struct ufs_bsg_reply {
+	int result;
+	__u32 reply_payload_rcv_len;
+	struct utp_upiu_req upiu_rsp;
+};
+
+struct ufs_rpmb_reply {
+	struct ufs_bsg_reply bsg_reply;
+	struct ufs_ehs ehs_rsp;
+};
+
+enum ufs_crypto_alg {
+	UFS_CRYPTO_ALG_AES_XTS = 0,
+	UFS_CRYPTO_ALG_BITLOCKER_AES_CBC = 1,
+	UFS_CRYPTO_ALG_AES_ECB = 2,
+	UFS_CRYPTO_ALG_ESSIV_AES_CBC = 3,
+};
+
+enum ufs_crypto_key_size {
+	UFS_CRYPTO_KEY_SIZE_INVALID = 0,
+	UFS_CRYPTO_KEY_SIZE_128 = 1,
+	UFS_CRYPTO_KEY_SIZE_192 = 2,
+	UFS_CRYPTO_KEY_SIZE_256 = 3,
+	UFS_CRYPTO_KEY_SIZE_512 = 4,
+};
+
+struct ufs_crypto_alg_entry {
+	enum ufs_crypto_alg ufs_alg;
+	enum ufs_crypto_key_size ufs_key_size;
+};
+
+struct ufshcd_dme_attr_val {
+	u32 attr_sel;
+	u32 mib_val;
+	u8 peer;
+};
+
+enum clk_div_values {
+	DWC_UFS_REG_HCLKDIV_DIV_62_5 = 62,
+	DWC_UFS_REG_HCLKDIV_DIV_125 = 125,
+	DWC_UFS_REG_HCLKDIV_DIV_200 = 200,
+};
+
+enum dwc_specific_registers {
+	DWC_UFS_REG_HCLKDIV = 252,
+};
+
+enum link_status {
+	UFSHCD_LINK_IS_DOWN = 1,
+	UFSHCD_LINK_IS_UP = 2,
+};
+
+enum intel_ufs_dsm_func_id {
+	INTEL_DSM_FNS = 0,
+	INTEL_DSM_RESET = 1,
+};
+
+struct ufs_host {
+	void (*late_init)(struct ufs_hba *);
+};
+
+struct intel_host {
+	struct ufs_host ufs_host;
+	u32 dsm_fns;
+	u32 active_ltr;
+	u32 idle_ltr;
+	struct dentry *debugfs_root;
+	struct gpio_desc *reset_gpio;
+};
+
+struct ufs_dev_params {
+	u32 pwm_rx_gear;
+	u32 pwm_tx_gear;
+	u32 hs_rx_gear;
+	u32 hs_tx_gear;
+	u32 rx_lanes;
+	u32 tx_lanes;
+	u32 rx_pwr_pwm;
+	u32 tx_pwr_pwm;
+	u32 rx_pwr_hs;
+	u32 tx_pwr_hs;
+	u32 hs_rate;
+	u32 desired_working_mode;
+};
+
+enum {
+	UFS_REG_OCPTHRTL = 192,
+	UFS_REG_OOCPR = 196,
+	UFS_REG_CDACFG = 208,
+	UFS_REG_CDATX1 = 212,
+	UFS_REG_CDATX2 = 216,
+	UFS_REG_CDARX1 = 220,
+	UFS_REG_CDARX2 = 224,
+	UFS_REG_CDASTA = 228,
+	UFS_REG_LBMCFG = 240,
+	UFS_REG_LBMSTA = 244,
+	UFS_REG_UFSMODE = 248,
+	UFS_REG_HCLKDIV = 252,
+};
+
+struct ufs_hisi_host {
+	struct ufs_hba *hba;
+	void *ufs_sys_ctrl;
+	struct reset_control *rst;
+	uint64_t caps;
+	bool in_suspend;
+};
+
+enum led_default_state {
+	LEDS_DEFSTATE_OFF = 0,
+	LEDS_DEFSTATE_ON = 1,
+	LEDS_DEFSTATE_KEEP = 2,
+};
+
+struct led_properties {
+	u32 color;
+	bool color_present;
+	const char *function;
+	u32 func_enum;
+	bool func_enum_present;
+	const char *label;
+};
+
+struct led_lookup_data {
+	struct list_head list;
+	const char *provider;
+	const char *dev_id;
+	const char *con_id;
+};
+
+struct led_flash_setting {
+	u32 min;
+	u32 max;
+	u32 step;
+	u32 val;
+};
+
+struct led_flash_ops;
+
+struct led_classdev_flash {
+	struct led_classdev led_cdev;
+	const struct led_flash_ops *ops;
+	struct led_flash_setting brightness;
+	struct led_flash_setting timeout;
+	const struct attribute_group *sysfs_groups[5];
+};
+
+struct led_flash_ops {
+	int (*flash_brightness_set)(struct led_classdev_flash *, u32);
+	int (*flash_brightness_get)(struct led_classdev_flash *, u32 *);
+	int (*strobe_set)(struct led_classdev_flash *, bool);
+	int (*strobe_get)(struct led_classdev_flash *, bool *);
+	int (*timeout_set)(struct led_classdev_flash *, u32);
+	int (*fault_get)(struct led_classdev_flash *, u32 *);
+};
+
+struct mc_subled;
+
+struct led_classdev_mc {
+	struct led_classdev led_cdev;
+	unsigned int num_colors;
+	struct mc_subled *subled_info;
+};
+
+struct mc_subled {
+	unsigned int color_index;
+	unsigned int brightness;
+	unsigned int intensity;
+	unsigned int channel;
+};
+
+struct transient_trig_data {
+	int activate;
+	int state;
+	int restore_state;
+	unsigned long duration;
+	struct timer_list timer;
+	struct led_classdev *led_cdev;
+};
+
+struct scpi_chan;
+
+struct scpi_drvinfo {
+	u32 protocol_version;
+	u32 firmware_version;
+	bool is_legacy;
+	int num_chans;
+	int *commands;
+	unsigned long cmd_priority[1];
+	atomic_t next_chan;
+	struct scpi_ops *scpi_ops;
+	struct scpi_chan *channels;
+	struct scpi_dvfs_info *dvfs[8];
+};
+
+struct scpi_xfer;
+
+struct scpi_chan {
+	struct mbox_client cl;
+	struct mbox_chan *chan;
+	void *tx_payload;
+	void *rx_payload;
+	struct list_head rx_pending;
+	struct list_head xfers_list;
+	struct scpi_xfer *xfers;
+	spinlock_t rx_lock;
+	struct mutex xfers_lock;
+	u8 token;
+};
+
+struct scpi_xfer {
+	u32 slot;
+	u32 cmd;
+	u32 status;
+	const void *tx_buf;
+	void *rx_buf;
+	unsigned int tx_len;
+	unsigned int rx_len;
+	struct list_head node;
+	struct completion done;
+};
+
+enum scpi_drv_cmds {
+	CMD_SCPI_CAPABILITIES = 0,
+	CMD_GET_CLOCK_INFO = 1,
+	CMD_GET_CLOCK_VALUE = 2,
+	CMD_SET_CLOCK_VALUE = 3,
+	CMD_GET_DVFS = 4,
+	CMD_SET_DVFS = 5,
+	CMD_GET_DVFS_INFO = 6,
+	CMD_SENSOR_CAPABILITIES = 7,
+	CMD_SENSOR_INFO = 8,
+	CMD_SENSOR_VALUE = 9,
+	CMD_SET_DEVICE_PWR_STATE = 10,
+	CMD_GET_DEVICE_PWR_STATE = 11,
+	CMD_MAX_COUNT = 12,
+};
+
+enum scpi_error_codes {
+	SCPI_SUCCESS = 0,
+	SCPI_ERR_PARAM = 1,
+	SCPI_ERR_ALIGN = 2,
+	SCPI_ERR_SIZE = 3,
+	SCPI_ERR_HANDLER = 4,
+	SCPI_ERR_ACCESS = 5,
+	SCPI_ERR_RANGE = 6,
+	SCPI_ERR_TIMEOUT = 7,
+	SCPI_ERR_NOMEM = 8,
+	SCPI_ERR_PWRSTATE = 9,
+	SCPI_ERR_SUPPORT = 10,
+	SCPI_ERR_DEVICE = 11,
+	SCPI_ERR_BUSY = 12,
+	SCPI_ERR_MAX = 13,
+};
+
+struct scpi_shared_mem {
+	__le32 command;
+	__le32 status;
+	u8 payload[0];
+};
+
+struct legacy_clk_set_value {
+	__le32 rate;
+	__le16 id;
+	__le16 reserved;
+};
+
+struct scp_capabilities {
+	__le32 protocol_version;
+	__le32 event_version;
+	__le32 platform_version;
+	__le32 commands[4];
+};
+
+struct legacy_scpi_shared_mem {
+	__le32 status;
+	u8 payload[0];
+};
+
+struct clk_get_info {
+	__le16 id;
+	__le16 flags;
+	__le32 min_rate;
+	__le32 max_rate;
+	u8 name[20];
+};
+
+struct clk_set_value {
+	__le16 id;
+	__le16 reserved;
+	__le32 rate;
+};
+
+struct dvfs_set {
+	u8 domain;
+	u8 index;
+};
+
+struct dvfs_info {
+	u8 domain;
+	u8 opp_count;
+	__le16 latency;
+	struct {
+		__le32 freq;
+		__le32 m_volt;
+	} opps[16];
+};
+
+struct _scpi_sensor_info {
+	__le16 sensor_id;
+	u8 class;
+	u8 trigger_type;
+	char name[20];
+};
+
+struct dev_pstate_set {
+	__le16 dev_id;
+	u8 pstate;
+} __attribute__((packed));
+
+struct scmi_requested_dev {
+	const struct scmi_device_id *id_table;
+	struct list_head node;
+};
+
+struct scmi_xfer;
+
+struct scmi_xfer_ops {
+	int (*version_get)(const struct scmi_protocol_handle *, u32 *);
+	int (*xfer_get_init)(const struct scmi_protocol_handle *, u8, size_t, size_t, struct scmi_xfer **);
+	void (*reset_rx_to_maxsz)(const struct scmi_protocol_handle *, struct scmi_xfer *);
+	int (*do_xfer)(const struct scmi_protocol_handle *, struct scmi_xfer *);
+	int (*do_xfer_with_response)(const struct scmi_protocol_handle *, struct scmi_xfer *);
+	void (*xfer_put)(const struct scmi_protocol_handle *, struct scmi_xfer *);
+};
+
+struct scmi_msg_hdr {
+	u8 id;
+	u8 protocol_id;
+	u8 type;
+	u16 seq;
+	u32 status;
+	bool poll_completion;
+};
+
+struct scmi_msg {
+	void *buf;
+	size_t len;
+};
+
+struct scmi_xfer {
+	int transfer_id;
+	struct scmi_msg_hdr hdr;
+	struct scmi_msg tx;
+	struct scmi_msg rx;
+	struct completion done;
+	struct completion *async_done;
+	bool pending;
+	struct hlist_node node;
+	refcount_t users;
+	atomic_t busy;
+	int state;
+	int flags;
+	spinlock_t lock;
+	void *priv;
+};
+
+struct scmi_iterator_ops;
+
+struct scmi_fc_db_info;
+
+struct scmi_proto_helpers_ops {
+	int (*extended_name_get)(const struct scmi_protocol_handle *, u8, u32, u32 *, char *, size_t);
+	void * (*iter_response_init)(const struct scmi_protocol_handle *, struct scmi_iterator_ops *, unsigned int, u8, size_t, void *);
+	int (*iter_response_run)(void *);
+	void (*fastchannel_init)(const struct scmi_protocol_handle *, u8, u32, u32, u32, void **, struct scmi_fc_db_info **);
+	void (*fastchannel_db_ring)(struct scmi_fc_db_info *);
+	int (*get_max_msg_size)(const struct scmi_protocol_handle *);
+};
+
+struct scmi_iterator_state;
+
+struct scmi_iterator_ops {
+	void (*prepare_message)(void *, unsigned int, const void *);
+	int (*update_state)(struct scmi_iterator_state *, const void *, void *);
+	int (*process_response)(const struct scmi_protocol_handle *, const void *, struct scmi_iterator_state *, void *);
+};
+
+struct scmi_iterator_state {
+	unsigned int desc_index;
+	unsigned int num_returned;
+	unsigned int num_remaining;
+	unsigned int max_resources;
+	unsigned int loop_idx;
+	size_t rx_len;
+	void *priv;
+};
+
+struct scmi_fc_db_info {
+	int width;
+	u64 set;
+	u64 mask;
+	void *addr;
+};
+
+typedef void (*btf_trace_scmi_fc_call)(void *, u8, u8, u32, u32, u32);
+
+typedef void (*btf_trace_scmi_xfer_begin)(void *, int, u8, u8, u16, bool);
+
+typedef void (*btf_trace_scmi_xfer_response_wait)(void *, int, u8, u8, u16, u32, bool);
+
+typedef void (*btf_trace_scmi_xfer_end)(void *, int, u8, u8, u16, int);
+
+typedef void (*btf_trace_scmi_rx_done)(void *, int, u8, u8, u16, u8);
+
+typedef void (*btf_trace_scmi_msg_dump)(void *, int, u8, u8, u8, unsigned char *, u16, int, void *, size_t);
+
+enum scmi_error_codes {
+	SCMI_SUCCESS = 0,
+	SCMI_ERR_SUPPORT = -1,
+	SCMI_ERR_PARAMS = -2,
+	SCMI_ERR_ACCESS = -3,
+	SCMI_ERR_ENTRY = -4,
+	SCMI_ERR_RANGE = -5,
+	SCMI_ERR_BUSY = -6,
+	SCMI_ERR_COMMS = -7,
+	SCMI_ERR_GENERIC = -8,
+	SCMI_ERR_HARDWARE = -9,
+	SCMI_ERR_PROTOCOL = -10,
+};
+
+enum scmi_common_cmd {
+	PROTOCOL_VERSION = 0,
+	PROTOCOL_ATTRIBUTES = 1,
+	PROTOCOL_MESSAGE_ATTRIBUTES = 2,
+};
+
+struct scmi_xfers_info {
+	unsigned long *xfer_alloc_table;
+	spinlock_t xfer_lock;
+	int max_msg;
+	struct hlist_head free_xfers;
+	struct hlist_head pending_xfers[512];
+};
+
+struct scmi_desc;
+
+struct scmi_debug_info;
+
+struct scmi_info {
+	int id;
+	struct device *dev;
+	const struct scmi_desc *desc;
+	struct scmi_revision_info version;
+	struct scmi_handle handle;
+	struct scmi_xfers_info tx_minfo;
+	struct scmi_xfers_info rx_minfo;
+	struct idr tx_idr;
+	struct idr rx_idr;
+	struct idr protocols;
+	struct mutex protocols_mtx;
+	u8 *protocols_imp;
+	struct idr active_protocols;
+	unsigned int atomic_threshold;
+	void *notify_priv;
+	struct list_head node;
+	int users;
+	struct notifier_block bus_nb;
+	struct notifier_block dev_req_nb;
+	struct mutex devreq_mtx;
+	struct scmi_debug_info *dbg;
+	void *raw;
+};
+
+struct scmi_transport_ops;
+
+struct scmi_desc {
+	int (*transport_init)();
+	void (*transport_exit)();
+	const struct scmi_transport_ops *ops;
+	int max_rx_timeout_ms;
+	int max_msg;
+	int max_msg_size;
+	const bool force_polling;
+	const bool sync_cmds_completed_on_ret;
+	const bool atomic_enabled;
+};
+
+struct scmi_chan_info;
+
+struct scmi_transport_ops {
+	int (*link_supplier)(struct device *);
+	bool (*chan_available)(struct device_node *, int);
+	int (*chan_setup)(struct scmi_chan_info *, struct device *, bool);
+	int (*chan_free)(int, void *, void *);
+	unsigned int (*get_max_msg)(struct scmi_chan_info *);
+	int (*send_message)(struct scmi_chan_info *, struct scmi_xfer *);
+	void (*mark_txdone)(struct scmi_chan_info *, int, struct scmi_xfer *);
+	void (*fetch_response)(struct scmi_chan_info *, struct scmi_xfer *);
+	void (*fetch_notification)(struct scmi_chan_info *, size_t, struct scmi_xfer *);
+	void (*clear_channel)(struct scmi_chan_info *);
+	bool (*poll_done)(struct scmi_chan_info *, struct scmi_xfer *);
+};
+
+struct scmi_chan_info {
+	int id;
+	struct device *dev;
+	unsigned int rx_timeout_ms;
+	struct scmi_handle *handle;
+	bool no_completion_irq;
+	void *transport_info;
+};
+
+struct scmi_debug_info {
+	struct dentry *top_dentry;
+	const char *name;
+	const char *type;
+	bool is_atomic;
+};
+
+struct scmi_protocol;
+
+struct scmi_protocol_instance {
+	const struct scmi_handle *handle;
+	const struct scmi_protocol *proto;
+	void *gid;
+	refcount_t users;
+	void *priv;
+	unsigned int version;
+	struct scmi_protocol_handle ph;
+};
+
+typedef int (*scmi_prot_init_ph_fn_t)(const struct scmi_protocol_handle *);
+
+struct scmi_protocol_events;
+
+struct scmi_protocol {
+	const u8 id;
+	struct module *owner;
+	const scmi_prot_init_ph_fn_t instance_init;
+	const scmi_prot_init_ph_fn_t instance_deinit;
+	const void *ops;
+	const struct scmi_protocol_events *events;
+	unsigned int supported_version;
+};
+
+struct scmi_event_ops;
+
+struct scmi_event;
+
+struct scmi_protocol_events {
+	size_t queue_sz;
+	const struct scmi_event_ops *ops;
+	const struct scmi_event *evts;
+	unsigned int num_events;
+	unsigned int num_sources;
+};
+
+struct scmi_event_ops {
+	int (*get_num_sources)(const struct scmi_protocol_handle *);
+	int (*set_notify_enabled)(const struct scmi_protocol_handle *, u8, u32, bool);
+	void * (*fill_custom_report)(const struct scmi_protocol_handle *, u8, ktime_t, const void *, size_t, void *, u32 *);
+};
+
+struct scmi_event {
+	u8 id;
+	size_t max_payld_sz;
+	size_t max_report_sz;
+};
+
+struct trace_event_raw_scmi_fc_call {
+	struct trace_entry ent;
+	u8 protocol_id;
+	u8 msg_id;
+	u32 res_id;
+	u32 val1;
+	u32 val2;
+	char __data[0];
+};
+
+struct trace_event_raw_scmi_xfer_begin {
+	struct trace_entry ent;
+	int transfer_id;
+	u8 msg_id;
+	u8 protocol_id;
+	u16 seq;
+	bool poll;
+	char __data[0];
+};
+
+struct trace_event_raw_scmi_xfer_response_wait {
+	struct trace_entry ent;
+	int transfer_id;
+	u8 msg_id;
+	u8 protocol_id;
+	u16 seq;
+	u32 timeout;
+	bool poll;
+	char __data[0];
+};
+
+struct trace_event_raw_scmi_xfer_end {
+	struct trace_entry ent;
+	int transfer_id;
+	u8 msg_id;
+	u8 protocol_id;
+	u16 seq;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_scmi_rx_done {
+	struct trace_entry ent;
+	int transfer_id;
+	u8 msg_id;
+	u8 protocol_id;
+	u16 seq;
+	u8 msg_type;
+	char __data[0];
+};
+
+struct trace_event_raw_scmi_msg_dump {
+	struct trace_entry ent;
+	int id;
+	u8 channel_id;
+	u8 protocol_id;
+	u8 msg_id;
+	char tag[5];
+	u16 seq;
+	int status;
+	size_t len;
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scmi_msg_dump {
+	u32 cmd;
+};
+
+struct scmi_protocol_devres {
+	const struct scmi_handle *handle;
+	u8 protocol_id;
+};
+
+struct trace_event_data_offsets_scmi_fc_call {};
+
+struct trace_event_data_offsets_scmi_xfer_begin {};
+
+struct trace_event_data_offsets_scmi_xfer_response_wait {};
+
+struct trace_event_data_offsets_scmi_xfer_end {};
+
+struct trace_event_data_offsets_scmi_rx_done {};
+
+struct scmi_msg_resp_domain_name_get {
+	__le32 flags;
+	u8 name[64];
+};
+
+struct scmi_iterator {
+	void *msg;
+	void *resp;
+	struct scmi_xfer *t;
+	const struct scmi_protocol_handle *ph;
+	struct scmi_iterator_ops *ops;
+	struct scmi_iterator_state state;
+	void *priv;
+};
+
+struct scmi_msg_resp_desc_fc {
+	__le32 attr;
+	__le32 rate_limit;
+	__le32 chan_addr_low;
+	__le32 chan_addr_high;
+	__le32 chan_size;
+	__le32 db_addr_low;
+	__le32 db_addr_high;
+	__le32 db_set_lmask;
+	__le32 db_set_hmask;
+	__le32 db_preserve_lmask;
+	__le32 db_preserve_hmask;
+};
+
+struct scmi_msg_get_fc_info {
+	__le32 domain;
+	__le32 message_id;
+};
+
+struct events_queue {
+	size_t sz;
+	struct kfifo kfifo;
+	struct work_struct notify_work;
+	struct workqueue_struct *wq;
+};
+
+struct scmi_notify_instance;
+
+struct scmi_event_header;
+
+struct scmi_registered_event;
+
+struct scmi_registered_events_desc {
+	u8 id;
+	const struct scmi_event_ops *ops;
+	struct events_queue equeue;
+	struct scmi_notify_instance *ni;
+	struct scmi_event_header *eh;
+	size_t eh_sz;
+	void *in_flight;
+	int num_events;
+	struct scmi_registered_event **registered_events;
+	struct mutex registered_mtx;
+	const struct scmi_protocol_handle *ph;
+	struct hlist_head registered_events_handlers[64];
+};
+
+struct scmi_notify_instance {
+	void *gid;
+	struct scmi_handle *handle;
+	struct work_struct init_work;
+	struct workqueue_struct *notify_wq;
+	struct mutex pending_mtx;
+	struct scmi_registered_events_desc **registered_protocols;
+	struct hlist_head pending_events_handlers[16];
+};
+
+struct scmi_event_header {
+	ktime_t timestamp;
+	size_t payld_sz;
+	unsigned char evt_id;
+	unsigned char payld[0];
+};
+
+struct scmi_registered_event {
+	struct scmi_registered_events_desc *proto;
+	const struct scmi_event *evt;
+	void *report;
+	u32 num_sources;
+	refcount_t *sources;
+	struct mutex sources_mtx;
+};
+
+struct scmi_event_handler {
+	u32 key;
+	refcount_t users;
+	struct scmi_registered_event *r_evt;
+	struct blocking_notifier_head chain;
+	struct hlist_node hash;
+	bool enabled;
+};
+
+struct scmi_notifier_devres {
+	const struct scmi_handle *handle;
+	u8 proto_id;
+	u8 evt_id;
+	u32 __src_id;
+	u32 *src_id;
+	struct notifier_block *nb;
+};
+
+enum scmi_base_protocol_cmd {
+	BASE_DISCOVER_VENDOR = 3,
+	BASE_DISCOVER_SUB_VENDOR = 4,
+	BASE_DISCOVER_IMPLEMENT_VERSION = 5,
+	BASE_DISCOVER_LIST_PROTOCOLS = 6,
+	BASE_DISCOVER_AGENT = 7,
+	BASE_NOTIFY_ERRORS = 8,
+	BASE_SET_DEVICE_PERMISSIONS = 9,
+	BASE_SET_PROTOCOL_PERMISSIONS = 10,
+	BASE_RESET_AGENT_CONFIGURATION = 11,
+};
+
+enum scmi_notification_events {
+	SCMI_EVENT_POWER_STATE_CHANGED = 0,
+	SCMI_EVENT_CLOCK_RATE_CHANGED = 0,
+	SCMI_EVENT_CLOCK_RATE_CHANGE_REQUESTED = 1,
+	SCMI_EVENT_PERFORMANCE_LIMITS_CHANGED = 0,
+	SCMI_EVENT_PERFORMANCE_LEVEL_CHANGED = 1,
+	SCMI_EVENT_SENSOR_TRIP_POINT_EVENT = 0,
+	SCMI_EVENT_SENSOR_UPDATE = 1,
+	SCMI_EVENT_RESET_ISSUED = 0,
+	SCMI_EVENT_BASE_ERROR_EVENT = 0,
+	SCMI_EVENT_SYSTEM_POWER_STATE_NOTIFIER = 0,
+	SCMI_EVENT_POWERCAP_CAP_CHANGED = 0,
+	SCMI_EVENT_POWERCAP_MEASUREMENTS_CHANGED = 1,
+};
+
+struct scmi_msg_resp_base_attributes {
+	u8 num_protocols;
+	u8 num_agents;
+	__le16 reserved;
+};
+
+struct scmi_msg_resp_base_discover_agent {
+	__le32 agent_id;
+	u8 name[16];
+};
+
+struct scmi_msg_base_error_notify {
+	__le32 event_control;
+};
+
+struct scmi_base_error_notify_payld {
+	__le32 agent_id;
+	__le32 error_status;
+	__le64 msg_reports[1024];
+};
+
+struct scmi_base_error_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	bool fatal;
+	unsigned int cmd_count;
+	unsigned long long reports[0];
+};
+
+struct scmi_clock_info;
+
+struct scmi_clk_proto_ops {
+	int (*count_get)(const struct scmi_protocol_handle *);
+	const struct scmi_clock_info * (*info_get)(const struct scmi_protocol_handle *, u32);
+	int (*rate_get)(const struct scmi_protocol_handle *, u32, u64 *);
+	int (*rate_set)(const struct scmi_protocol_handle *, u32, u64);
+	int (*enable)(const struct scmi_protocol_handle *, u32, bool);
+	int (*disable)(const struct scmi_protocol_handle *, u32, bool);
+	int (*state_get)(const struct scmi_protocol_handle *, u32, bool *, bool);
+	int (*config_oem_get)(const struct scmi_protocol_handle *, u32, u8, u32 *, u32 *, bool);
+	int (*config_oem_set)(const struct scmi_protocol_handle *, u32, u8, u32, bool);
+	int (*parent_get)(const struct scmi_protocol_handle *, u32, u32 *);
+	int (*parent_set)(const struct scmi_protocol_handle *, u32, u32);
+	u64 android_kabi_reserved1;
+};
+
+struct scmi_clock_info {
+	char name[64];
+	unsigned int enable_latency;
+	bool rate_discrete;
+	bool rate_changed_notifications;
+	bool rate_change_requested_notifications;
+	bool state_ctrl_forbidden;
+	bool rate_ctrl_forbidden;
+	bool parent_ctrl_forbidden;
+	union {
+		struct {
+			int num_rates;
+			u64 rates[16];
+		} list;
+		struct {
+			u64 min_rate;
+			u64 max_rate;
+			u64 step_size;
+		} range;
+	};
+	int num_parents;
+	u32 *parents;
+};
+
+enum scmi_clock_protocol_cmd {
+	CLOCK_ATTRIBUTES = 3,
+	CLOCK_DESCRIBE_RATES = 4,
+	CLOCK_RATE_SET = 5,
+	CLOCK_RATE_GET = 6,
+	CLOCK_CONFIG_SET = 7,
+	CLOCK_NAME_GET = 8,
+	CLOCK_RATE_NOTIFY = 9,
+	CLOCK_RATE_CHANGE_REQUESTED_NOTIFY = 10,
+	CLOCK_CONFIG_GET = 11,
+	CLOCK_POSSIBLE_PARENTS_GET = 12,
+	CLOCK_PARENT_SET = 13,
+	CLOCK_PARENT_GET = 14,
+	CLOCK_GET_PERMISSIONS = 15,
+};
+
+enum clk_state {
+	CLK_STATE_DISABLE = 0,
+	CLK_STATE_ENABLE = 1,
+	CLK_STATE_RESERVED = 2,
+	CLK_STATE_UNCHANGED = 3,
+};
+
+struct scmi_clk_ipriv {
+	struct device *dev;
+	u32 clk_id;
+	struct scmi_clock_info *clk;
+};
+
+struct clock_info {
+	u32 version;
+	int num_clocks;
+	int max_async_req;
+	atomic_t cur_async_req;
+	struct scmi_clock_info *clk;
+	int (*clock_config_set)(const struct scmi_protocol_handle *, u32, enum clk_state, u8, u32, bool);
+	int (*clock_config_get)(const struct scmi_protocol_handle *, u32, u8, u32 *, bool *, u32 *, bool);
+};
+
+struct scmi_msg_resp_clock_protocol_attributes {
+	__le16 num_clocks;
+	u8 max_async_req;
+	u8 reserved;
+};
+
+struct scmi_msg_resp_clock_attributes {
+	__le32 attributes;
+	u8 name[16];
+	__le32 clock_enable_latency;
+};
+
+struct scmi_msg_clock_rate_notify {
+	__le32 clk_id;
+	__le32 notify_enable;
+};
+
+struct scmi_msg_clock_config_set_v2 {
+	__le32 id;
+	__le32 attributes;
+	__le32 oem_config_val;
+};
+
+struct scmi_msg_clock_config_get {
+	__le32 id;
+	__le32 flags;
+};
+
+struct scmi_msg_resp_clock_config_get {
+	__le32 attributes;
+	__le32 config;
+	__le32 oem_config_val;
+};
+
+struct scmi_msg_clock_config_set {
+	__le32 id;
+	__le32 attributes;
+};
+
+struct scmi_msg_clock_possible_parents {
+	__le32 id;
+	__le32 skip_parents;
+};
+
+struct scmi_msg_resp_clock_possible_parents {
+	__le32 num_parent_flags;
+	__le32 possible_parents[0];
+};
+
+struct scmi_msg_clock_describe_rates {
+	__le32 id;
+	__le32 rate_index;
+};
+
+struct scmi_msg_resp_clock_describe_rates {
+	__le32 num_rates_flags;
+	struct {
+		__le32 value_low;
+		__le32 value_high;
+	} rate[0];
+};
+
+struct scmi_clock_set_rate {
+	__le32 flags;
+	__le32 id;
+	__le32 value_low;
+	__le32 value_high;
+};
+
+struct scmi_msg_resp_set_rate_complete {
+	__le32 id;
+	__le32 rate_low;
+	__le32 rate_high;
+};
+
+struct scmi_msg_clock_set_parent {
+	__le32 id;
+	__le32 parent_id;
+};
+
+struct scmi_clock_rate_notify_payld {
+	__le32 agent_id;
+	__le32 clock_id;
+	__le32 rate_low;
+	__le32 rate_high;
+};
+
+struct scmi_clock_rate_notif_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int clock_id;
+	unsigned long long rate;
+};
+
+enum scmi_performance_protocol_cmd {
+	PERF_DOMAIN_ATTRIBUTES = 3,
+	PERF_DESCRIBE_LEVELS = 4,
+	PERF_LIMITS_SET = 5,
+	PERF_LIMITS_GET = 6,
+	PERF_LEVEL_SET = 7,
+	PERF_LEVEL_GET = 8,
+	PERF_NOTIFY_LIMITS = 9,
+	PERF_NOTIFY_LEVEL = 10,
+	PERF_DESCRIBE_FASTCHANNEL = 11,
+	PERF_DOMAIN_NAME_GET = 12,
+};
+
+enum {
+	PERF_FC_LEVEL = 0,
+	PERF_FC_LIMIT = 1,
+	PERF_FC_MAX = 2,
+};
+
+struct scmi_opp {
+	u32 perf;
+	u32 power;
+	u32 trans_latency_us;
+	u32 indicative_freq;
+	u32 level_index;
+	struct hlist_node hash;
+};
+
+struct perf_dom_info;
+
+struct scmi_perf_info {
+	u32 version;
+	u16 num_domains;
+	enum scmi_power_scale power_scale;
+	u64 stats_addr;
+	u32 stats_size;
+	struct perf_dom_info *dom_info;
+};
+
+struct scmi_fc_info;
+
+struct perf_dom_info {
+	u32 id;
+	bool set_limits;
+	bool perf_limit_notify;
+	bool perf_level_notify;
+	bool perf_fastchannels;
+	bool level_indexing_mode;
+	u32 opp_count;
+	u32 sustained_freq_khz;
+	u32 sustained_perf_level;
+	unsigned long mult_factor;
+	struct scmi_perf_domain_info info;
+	struct scmi_opp opp[32];
+	struct scmi_fc_info *fc_info;
+	struct xarray opps_by_idx;
+	struct xarray opps_by_lvl;
+	struct hlist_head opps_by_freq[32];
+};
+
+struct scmi_fc_info {
+	void *set_addr;
+	void *get_addr;
+	struct scmi_fc_db_info *set_db;
+};
+
+struct scmi_msg_resp_perf_attributes {
+	__le16 num_domains;
+	__le16 flags;
+	__le32 stats_addr_low;
+	__le32 stats_addr_high;
+	__le32 stats_size;
+};
+
+struct scmi_msg_resp_perf_domain_attributes {
+	__le32 flags;
+	__le32 rate_limit_us;
+	__le32 sustained_freq_khz;
+	__le32 sustained_perf_level;
+	u8 name[16];
+};
+
+struct scmi_perf_ipriv {
+	u32 version;
+	struct perf_dom_info *perf_dom;
+};
+
+struct scmi_msg_resp_perf_describe_levels {
+	__le16 num_returned;
+	__le16 num_remaining;
+	struct {
+		__le32 perf_val;
+		__le32 power;
+		__le16 transition_latency_us;
+		__le16 reserved;
+	} opp[0];
+};
+
+struct scmi_msg_resp_perf_describe_levels_v4 {
+	__le16 num_returned;
+	__le16 num_remaining;
+	struct {
+		__le32 perf_val;
+		__le32 power;
+		__le16 transition_latency_us;
+		__le16 reserved;
+		__le32 indicative_freq;
+		__le32 level_index;
+	} opp[0];
+};
+
+struct scmi_perf_set_limits {
+	__le32 domain;
+	__le32 max_level;
+	__le32 min_level;
+};
+
+struct scmi_perf_get_limits {
+	__le32 max_level;
+	__le32 min_level;
+};
+
+struct scmi_perf_set_level {
+	__le32 domain;
+	__le32 level;
+};
+
+struct scmi_perf_notify_level_or_limits {
+	__le32 domain;
+	__le32 notify_enable;
+};
+
+struct scmi_msg_perf_describe_levels {
+	__le32 domain;
+	__le32 level_index;
+};
+
+struct scmi_perf_limits_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 range_max;
+	__le32 range_min;
+};
+
+struct scmi_perf_limits_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int range_max;
+	unsigned int range_min;
+};
+
+struct scmi_perf_level_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 performance_level;
+};
+
+struct scmi_perf_level_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int performance_level;
+};
+
+struct scmi_power_proto_ops {
+	int (*num_domains_get)(const struct scmi_protocol_handle *);
+	const char * (*name_get)(const struct scmi_protocol_handle *, u32);
+	int (*state_set)(const struct scmi_protocol_handle *, u32, u32);
+	int (*state_get)(const struct scmi_protocol_handle *, u32, u32 *);
+	u64 android_kabi_reserved1;
+};
+
+enum scmi_power_protocol_cmd {
+	POWER_DOMAIN_ATTRIBUTES = 3,
+	POWER_STATE_SET = 4,
+	POWER_STATE_GET = 5,
+	POWER_STATE_NOTIFY = 6,
+	POWER_DOMAIN_NAME_GET = 8,
+};
+
+struct power_dom_info;
+
+struct scmi_power_info {
+	u32 version;
+	int num_domains;
+	u64 stats_addr;
+	u32 stats_size;
+	struct power_dom_info *dom_info;
+};
+
+struct power_dom_info {
+	bool state_set_sync;
+	bool state_set_async;
+	bool state_set_notify;
+	char name[64];
+};
+
+struct scmi_msg_resp_power_attributes {
+	__le16 num_domains;
+	__le16 reserved;
+	__le32 stats_addr_low;
+	__le32 stats_addr_high;
+	__le32 stats_size;
+};
+
+struct scmi_msg_resp_power_domain_attributes {
+	__le32 flags;
+	u8 name[16];
+};
+
+struct scmi_power_state_notify {
+	__le32 domain;
+	__le32 notify_enable;
+};
+
+struct scmi_power_set_state {
+	__le32 flags;
+	__le32 domain;
+	__le32 state;
+};
+
+struct scmi_power_state_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 power_state;
+};
+
+struct scmi_power_state_changed_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int power_state;
+};
+
+enum scmi_reset_protocol_cmd {
+	RESET_DOMAIN_ATTRIBUTES = 3,
+	RESET = 4,
+	RESET_NOTIFY = 5,
+	RESET_DOMAIN_NAME_GET = 6,
+};
+
+struct reset_dom_info;
+
+struct scmi_reset_info {
+	u32 version;
+	int num_domains;
+	struct reset_dom_info *dom_info;
+};
+
+struct reset_dom_info {
+	bool async_reset;
+	bool reset_notify;
+	u32 latency_us;
+	char name[64];
+};
+
+struct scmi_msg_resp_reset_domain_attributes {
+	__le32 attributes;
+	__le32 latency;
+	u8 name[16];
+};
+
+struct scmi_msg_reset_domain_reset {
+	__le32 domain_id;
+	__le32 flags;
+	__le32 reset_state;
+};
+
+struct scmi_msg_reset_notify {
+	__le32 id;
+	__le32 event_control;
+};
+
+struct scmi_reset_issued_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 reset_state;
+};
+
+struct scmi_reset_issued_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int reset_state;
+};
+
+struct scmi_sensor_info;
+
+struct scmi_sensor_reading;
+
+struct scmi_sensor_proto_ops {
+	int (*count_get)(const struct scmi_protocol_handle *);
+	const struct scmi_sensor_info * (*info_get)(const struct scmi_protocol_handle *, u32);
+	int (*trip_point_config)(const struct scmi_protocol_handle *, u32, u8, u64);
+	int (*reading_get)(const struct scmi_protocol_handle *, u32, u64 *);
+	int (*reading_get_timestamped)(const struct scmi_protocol_handle *, u32, u8, struct scmi_sensor_reading *);
+	int (*config_get)(const struct scmi_protocol_handle *, u32, u32 *);
+	int (*config_set)(const struct scmi_protocol_handle *, u32, u32);
+	u64 android_kabi_reserved1;
+};
+
+struct scmi_sensor_intervals_info {
+	bool segmented;
+	unsigned int count;
+	unsigned int *desc;
+	unsigned int prealloc_pool[16];
+};
+
+struct scmi_range_attrs {
+	long long min_range;
+	long long max_range;
+};
+
+struct scmi_sensor_axis_info;
+
+struct scmi_sensor_info {
+	unsigned int id;
+	unsigned int type;
+	int scale;
+	unsigned int num_trip_points;
+	bool async;
+	bool update;
+	bool timestamped;
+	int tstamp_scale;
+	unsigned int num_axis;
+	struct scmi_sensor_axis_info *axis;
+	struct scmi_sensor_intervals_info intervals;
+	unsigned int sensor_config;
+	char name[64];
+	bool extended_scalar_attrs;
+	unsigned int sensor_power;
+	unsigned int resolution;
+	int exponent;
+	struct scmi_range_attrs scalar_attrs;
+	u64 android_kabi_reserved1;
+};
+
+struct scmi_sensor_axis_info {
+	unsigned int id;
+	unsigned int type;
+	int scale;
+	char name[64];
+	bool extended_attrs;
+	unsigned int resolution;
+	int exponent;
+	struct scmi_range_attrs attrs;
+};
+
+struct scmi_sensor_reading {
+	long long value;
+	unsigned long long timestamp;
+};
+
+enum scmi_sensor_protocol_cmd {
+	SENSOR_DESCRIPTION_GET = 3,
+	SENSOR_TRIP_POINT_NOTIFY = 4,
+	SENSOR_TRIP_POINT_CONFIG = 5,
+	SENSOR_READING_GET = 6,
+	SENSOR_AXIS_DESCRIPTION_GET = 7,
+	SENSOR_LIST_UPDATE_INTERVALS = 8,
+	SENSOR_CONFIG_GET = 9,
+	SENSOR_CONFIG_SET = 10,
+	SENSOR_CONTINUOUS_UPDATE_NOTIFY = 11,
+	SENSOR_NAME_GET = 12,
+	SENSOR_AXIS_NAME_GET = 13,
+};
+
+struct scmi_sens_ipriv {
+	void *priv;
+	struct device *dev;
+};
+
+struct sensors_info {
+	u32 version;
+	int num_sensors;
+	int max_requests;
+	u64 reg_addr;
+	u32 reg_size;
+	struct scmi_sensor_info *sensors;
+};
+
+struct scmi_msg_resp_sensor_attributes {
+	__le16 num_sensors;
+	u8 max_requests;
+	u8 reserved;
+	__le32 reg_addr_low;
+	__le32 reg_addr_high;
+	__le32 reg_size;
+};
+
+struct scmi_apriv {
+	bool any_axes_support_extended_names;
+	struct scmi_sensor_info *s;
+};
+
+struct scmi_msg_resp_attrs {
+	__le32 min_range_low;
+	__le32 min_range_high;
+	__le32 max_range_low;
+	__le32 max_range_high;
+};
+
+struct scmi_sensor_reading_resp {
+	__le32 sensor_value_low;
+	__le32 sensor_value_high;
+	__le32 timestamp_low;
+	__le32 timestamp_high;
+};
+
+struct scmi_msg_sensor_request_notify {
+	__le32 id;
+	__le32 event_control;
+};
+
+struct scmi_msg_sensor_description {
+	__le32 desc_index;
+};
+
+struct scmi_sensor_descriptor {
+	__le32 id;
+	__le32 attributes_low;
+	__le32 attributes_high;
+	u8 name[16];
+	__le32 power;
+	__le32 resolution;
+	struct scmi_msg_resp_attrs scalar_attrs;
+};
+
+struct scmi_msg_resp_sensor_description {
+	__le16 num_returned;
+	__le16 num_remaining;
+	struct scmi_sensor_descriptor desc[0];
+};
+
+struct scmi_msg_sensor_list_update_intervals {
+	__le32 id;
+	__le32 index;
+};
+
+struct scmi_msg_resp_sensor_list_update_intervals {
+	__le32 num_intervals_flags;
+	__le32 intervals[0];
+};
+
+struct scmi_msg_sensor_axis_description_get {
+	__le32 id;
+	__le32 axis_desc_index;
+};
+
+struct scmi_axis_descriptor {
+	__le32 id;
+	__le32 attributes_low;
+	__le32 attributes_high;
+	u8 name[16];
+	__le32 resolution;
+	struct scmi_msg_resp_attrs attrs;
+};
+
+struct scmi_msg_resp_sensor_axis_description {
+	__le32 num_axis_flags;
+	struct scmi_axis_descriptor desc[0];
+};
+
+struct scmi_sensor_axis_name_descriptor {
+	__le32 axis_id;
+	u8 name[64];
+};
+
+struct scmi_msg_resp_sensor_axis_names_description {
+	__le32 num_axis_flags;
+	struct scmi_sensor_axis_name_descriptor desc[0];
+};
+
+struct scmi_msg_set_sensor_trip_point {
+	__le32 id;
+	__le32 event_control;
+	__le32 value_low;
+	__le32 value_high;
+};
+
+struct scmi_msg_sensor_reading_get {
+	__le32 id;
+	__le32 flags;
+};
+
+struct scmi_resp_sensor_reading_complete {
+	__le32 id;
+	__le32 readings_low;
+	__le32 readings_high;
+};
+
+struct scmi_resp_sensor_reading_complete_v3 {
+	__le32 id;
+	struct scmi_sensor_reading_resp readings[0];
+};
+
+struct scmi_msg_sensor_config_set {
+	__le32 id;
+	__le32 sensor_config;
+};
+
+struct scmi_sensor_trip_notify_payld {
+	__le32 agent_id;
+	__le32 sensor_id;
+	__le32 trip_point_desc;
+};
+
+struct scmi_sensor_trip_point_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int sensor_id;
+	unsigned int trip_point_desc;
+};
+
+struct scmi_sensor_update_notify_payld {
+	__le32 agent_id;
+	__le32 sensor_id;
+	struct scmi_sensor_reading_resp readings[0];
+};
+
+struct scmi_sensor_update_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int sensor_id;
+	unsigned int readings_count;
+	struct scmi_sensor_reading readings[0];
+};
+
+enum scmi_system_protocol_cmd {
+	SYSTEM_POWER_STATE_NOTIFY = 5,
+};
+
+enum scmi_system_events {
+	SCMI_SYSTEM_SHUTDOWN = 0,
+	SCMI_SYSTEM_COLDRESET = 1,
+	SCMI_SYSTEM_WARMRESET = 2,
+	SCMI_SYSTEM_POWERUP = 3,
+	SCMI_SYSTEM_SUSPEND = 4,
+	SCMI_SYSTEM_MAX = 5,
+};
+
+struct scmi_system_power_state_notify {
+	__le32 notify_enable;
+};
+
+struct scmi_system_info {
+	u32 version;
+	bool graceful_timeout_supported;
+};
+
+struct scmi_system_power_state_notifier_payld {
+	__le32 agent_id;
+	__le32 flags;
+	__le32 system_state;
+	__le32 timeout;
+};
+
+struct scmi_system_power_state_notifier_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int flags;
+	unsigned int system_state;
+	unsigned int timeout;
+};
+
+enum scmi_voltage_level_mode {
+	SCMI_VOLTAGE_LEVEL_SET_AUTO = 0,
+	SCMI_VOLTAGE_LEVEL_SET_SYNC = 1,
+};
+
+struct scmi_voltage_info;
+
+struct scmi_voltage_proto_ops {
+	int (*num_domains_get)(const struct scmi_protocol_handle *);
+	const struct scmi_voltage_info * (*info_get)(const struct scmi_protocol_handle *, u32);
+	int (*config_set)(const struct scmi_protocol_handle *, u32, u32);
+	int (*config_get)(const struct scmi_protocol_handle *, u32, u32 *);
+	int (*level_set)(const struct scmi_protocol_handle *, u32, enum scmi_voltage_level_mode, s32);
+	int (*level_get)(const struct scmi_protocol_handle *, u32, s32 *);
+};
+
+struct scmi_voltage_info {
+	unsigned int id;
+	bool segmented;
+	bool negative_volts_allowed;
+	bool async_level_set;
+	char name[64];
+	unsigned int num_levels;
+	int *levels_uv;
+};
+
+enum scmi_voltage_protocol_cmd {
+	VOLTAGE_DOMAIN_ATTRIBUTES = 3,
+	VOLTAGE_DESCRIBE_LEVELS = 4,
+	VOLTAGE_CONFIG_SET = 5,
+	VOLTAGE_CONFIG_GET = 6,
+	VOLTAGE_LEVEL_SET = 7,
+	VOLTAGE_LEVEL_GET = 8,
+	VOLTAGE_DOMAIN_NAME_GET = 9,
+};
+
+struct voltage_info {
+	unsigned int version;
+	unsigned int num_domains;
+	struct scmi_voltage_info *domains;
+};
+
+struct scmi_msg_resp_domain_attributes {
+	__le32 attr;
+	u8 name[16];
+};
+
+struct scmi_volt_ipriv {
+	struct device *dev;
+	struct scmi_voltage_info *v;
+};
+
+struct scmi_msg_cmd_describe_levels {
+	__le32 domain_id;
+	__le32 level_index;
+};
+
+struct scmi_msg_resp_describe_levels {
+	__le32 flags;
+	__le32 voltage[0];
+};
+
+struct scmi_msg_cmd_config_set {
+	__le32 domain_id;
+	__le32 config;
+};
+
+struct scmi_msg_cmd_level_set {
+	__le32 domain_id;
+	__le32 flags;
+	__le32 voltage_level;
+};
+
+struct scmi_resp_voltage_level_set_complete {
+	__le32 domain_id;
+	__le32 voltage_level;
+};
+
+struct scmi_powercap_info;
+
+struct scmi_powercap_proto_ops {
+	int (*num_domains_get)(const struct scmi_protocol_handle *);
+	const struct scmi_powercap_info * (*info_get)(const struct scmi_protocol_handle *, u32);
+	int (*cap_get)(const struct scmi_protocol_handle *, u32, u32 *);
+	int (*cap_set)(const struct scmi_protocol_handle *, u32, u32, bool);
+	int (*cap_enable_set)(const struct scmi_protocol_handle *, u32, bool);
+	int (*cap_enable_get)(const struct scmi_protocol_handle *, u32, bool *);
+	int (*pai_get)(const struct scmi_protocol_handle *, u32, u32 *);
+	int (*pai_set)(const struct scmi_protocol_handle *, u32, u32);
+	int (*measurements_get)(const struct scmi_protocol_handle *, u32, u32 *, u32 *);
+	int (*measurements_threshold_set)(const struct scmi_protocol_handle *, u32, u32, u32);
+	int (*measurements_threshold_get)(const struct scmi_protocol_handle *, u32, u32 *, u32 *);
+};
+
+struct scmi_powercap_info {
+	unsigned int id;
+	bool notify_powercap_cap_change;
+	bool notify_powercap_measurement_change;
+	bool async_powercap_cap_set;
+	bool powercap_cap_config;
+	bool powercap_monitoring;
+	bool powercap_pai_config;
+	bool powercap_scale_mw;
+	bool powercap_scale_uw;
+	bool fastchannels;
+	char name[64];
+	unsigned int min_pai;
+	unsigned int max_pai;
+	unsigned int pai_step;
+	unsigned int min_power_cap;
+	unsigned int max_power_cap;
+	unsigned int power_cap_step;
+	unsigned int sustainable_power;
+	unsigned int accuracy;
+	unsigned int parent_id;
+	struct scmi_fc_info *fc_info;
+};
+
+enum scmi_powercap_protocol_cmd {
+	POWERCAP_DOMAIN_ATTRIBUTES = 3,
+	POWERCAP_CAP_GET = 4,
+	POWERCAP_CAP_SET = 5,
+	POWERCAP_PAI_GET = 6,
+	POWERCAP_PAI_SET = 7,
+	POWERCAP_DOMAIN_NAME_GET = 8,
+	POWERCAP_MEASUREMENTS_GET = 9,
+	POWERCAP_CAP_NOTIFY = 10,
+	POWERCAP_MEASUREMENTS_NOTIFY = 11,
+	POWERCAP_DESCRIBE_FASTCHANNEL = 12,
+};
+
+enum {
+	POWERCAP_FC_CAP = 0,
+	POWERCAP_FC_PAI = 1,
+	POWERCAP_FC_MAX = 2,
+};
+
+struct scmi_powercap_state;
+
+struct powercap_info {
+	u32 version;
+	int num_domains;
+	struct scmi_powercap_state *states;
+	struct scmi_powercap_info *powercaps;
+};
+
+struct scmi_powercap_state {
+	bool enabled;
+	u32 last_pcap;
+	bool meas_notif_enabled;
+	u64 thresholds;
+};
+
+struct scmi_msg_resp_powercap_domain_attributes {
+	__le32 attributes;
+	u8 name[16];
+	__le32 min_pai;
+	__le32 max_pai;
+	__le32 pai_step;
+	__le32 min_power_cap;
+	__le32 max_power_cap;
+	__le32 power_cap_step;
+	__le32 sustainable_power;
+	__le32 accuracy;
+	__le32 parent_id;
+};
+
+struct scmi_msg_powercap_set_cap_or_pai {
+	__le32 domain;
+	__le32 flags;
+	__le32 value;
+};
+
+struct scmi_msg_resp_powercap_cap_set_complete {
+	__le32 domain;
+	__le32 power_cap;
+};
+
+struct scmi_msg_resp_powercap_meas_get {
+	__le32 power;
+	__le32 pai;
+};
+
+struct scmi_msg_powercap_notify_cap {
+	__le32 domain;
+	__le32 notify_enable;
+};
+
+struct scmi_msg_powercap_notify_thresh {
+	__le32 domain;
+	__le32 notify_enable;
+	__le32 power_thresh_low;
+	__le32 power_thresh_high;
+};
+
+struct scmi_powercap_cap_changed_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 power_cap;
+	__le32 pai;
+};
+
+struct scmi_powercap_cap_changed_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int power_cap;
+	unsigned int pai;
+};
+
+struct scmi_powercap_meas_changed_notify_payld {
+	__le32 agent_id;
+	__le32 domain_id;
+	__le32 power;
+};
+
+struct scmi_powercap_meas_changed_report {
+	ktime_t timestamp;
+	unsigned int agent_id;
+	unsigned int domain_id;
+	unsigned int power;
+};
+
+enum scmi_pinctrl_selector_type {
+	PIN_TYPE = 0,
+	GROUP_TYPE = 1,
+	FUNCTION_TYPE = 2,
+};
+
+enum scmi_pinctrl_conf_type {
+	SCMI_PIN_DEFAULT = 0,
+	SCMI_PIN_BIAS_BUS_HOLD = 1,
+	SCMI_PIN_BIAS_DISABLE = 2,
+	SCMI_PIN_BIAS_HIGH_IMPEDANCE = 3,
+	SCMI_PIN_BIAS_PULL_UP = 4,
+	SCMI_PIN_BIAS_PULL_DEFAULT = 5,
+	SCMI_PIN_BIAS_PULL_DOWN = 6,
+	SCMI_PIN_DRIVE_OPEN_DRAIN = 7,
+	SCMI_PIN_DRIVE_OPEN_SOURCE = 8,
+	SCMI_PIN_DRIVE_PUSH_PULL = 9,
+	SCMI_PIN_DRIVE_STRENGTH = 10,
+	SCMI_PIN_INPUT_DEBOUNCE = 11,
+	SCMI_PIN_INPUT_MODE = 12,
+	SCMI_PIN_PULL_MODE = 13,
+	SCMI_PIN_INPUT_VALUE = 14,
+	SCMI_PIN_INPUT_SCHMITT = 15,
+	SCMI_PIN_LOW_POWER_MODE = 16,
+	SCMI_PIN_OUTPUT_MODE = 17,
+	SCMI_PIN_OUTPUT_VALUE = 18,
+	SCMI_PIN_POWER_SOURCE = 19,
+	SCMI_PIN_SLEW_RATE = 20,
+	SCMI_PIN_OEM_START = 192,
+	SCMI_PIN_OEM_END = 255,
+};
+
+struct scmi_pinctrl_proto_ops {
+	int (*count_get)(const struct scmi_protocol_handle *, enum scmi_pinctrl_selector_type);
+	int (*name_get)(const struct scmi_protocol_handle *, u32, enum scmi_pinctrl_selector_type, const char **);
+	int (*group_pins_get)(const struct scmi_protocol_handle *, u32, const unsigned int **, unsigned int *);
+	int (*function_groups_get)(const struct scmi_protocol_handle *, u32, unsigned int *, const unsigned int **);
+	int (*mux_set)(const struct scmi_protocol_handle *, u32, u32);
+	int (*settings_get_one)(const struct scmi_protocol_handle *, u32, enum scmi_pinctrl_selector_type, enum scmi_pinctrl_conf_type, u32 *);
+	int (*settings_get_all)(const struct scmi_protocol_handle *, u32, enum scmi_pinctrl_selector_type, unsigned int *, enum scmi_pinctrl_conf_type *, u32 *);
+	int (*settings_conf)(const struct scmi_protocol_handle *, u32, enum scmi_pinctrl_selector_type, unsigned int, enum scmi_pinctrl_conf_type *, u32 *);
+	int (*pin_request)(const struct scmi_protocol_handle *, u32);
+	int (*pin_free)(const struct scmi_protocol_handle *, u32);
+};
+
+enum scmi_pinctrl_protocol_cmd {
+	PINCTRL_ATTRIBUTES = 3,
+	PINCTRL_LIST_ASSOCIATIONS = 4,
+	PINCTRL_SETTINGS_GET = 5,
+	PINCTRL_SETTINGS_CONFIGURE = 6,
+	PINCTRL_REQUEST = 7,
+	PINCTRL_RELEASE = 8,
+	PINCTRL_NAME_GET = 9,
+	PINCTRL_SET_PERMISSIONS = 10,
+};
+
+struct scmi_group_info;
+
+struct scmi_function_info;
+
+struct scmi_pin_info;
+
+struct scmi_pinctrl_info {
+	u32 version;
+	int nr_groups;
+	int nr_functions;
+	int nr_pins;
+	struct scmi_group_info *groups;
+	struct scmi_function_info *functions;
+	struct scmi_pin_info *pins;
+};
+
+struct scmi_group_info {
+	char name[64];
+	bool present;
+	u32 *group_pins;
+	u32 nr_pins;
+};
+
+struct scmi_function_info {
+	char name[64];
+	bool present;
+	u32 *groups;
+	u32 nr_groups;
+};
+
+struct scmi_pin_info {
+	char name[64];
+	bool present;
+};
+
+struct scmi_msg_pinctrl_protocol_attributes {
+	__le32 attributes_low;
+	__le32 attributes_high;
+};
+
+struct scmi_msg_settings_conf {
+	__le32 identifier;
+	__le32 function_id;
+	__le32 attributes;
+	__le32 configs[0];
+};
+
+struct scmi_settings_get_ipriv {
+	u32 selector;
+	enum scmi_pinctrl_selector_type type;
+	bool get_all;
+	unsigned int *nr_configs;
+	enum scmi_pinctrl_conf_type *config_types;
+	u32 *config_values;
+};
+
+struct scmi_msg_request {
+	__le32 identifier;
+	__le32 flags;
+};
+
+struct scmi_pinctrl_ipriv {
+	u32 selector;
+	enum scmi_pinctrl_selector_type type;
+	u32 *array;
+};
+
+struct scmi_resp_pinctrl_attributes {
+	__le32 attributes;
+	u8 name[16];
+};
+
+struct scmi_msg_pinctrl_attributes {
+	__le32 identifier;
+	__le32 flags;
+};
+
+struct scmi_msg_pinctrl_list_assoc {
+	__le32 identifier;
+	__le32 flags;
+	__le32 index;
+};
+
+struct scmi_resp_pinctrl_list_assoc {
+	__le32 flags;
+	__le16 array[0];
+};
+
+struct scmi_msg_settings_get {
+	__le32 identifier;
+	__le32 attributes;
+};
+
+struct scmi_resp_settings_get {
+	__le32 function_selected;
+	__le32 num_configs;
+	__le32 configs[0];
+};
+
+struct scmi_shared_mem {
+	__le32 reserved;
+	__le32 channel_status;
+	__le32 reserved1[2];
+	__le32 flags;
+	__le32 length;
+	__le32 msg_header;
+	u8 msg_payload[0];
+};
+
+struct scmi_mailbox {
+	struct mbox_client cl;
+	struct mbox_chan *chan;
+	struct mbox_chan *chan_receiver;
+	struct mbox_chan *chan_platform_receiver;
+	struct scmi_chan_info *cinfo;
+	struct scmi_shared_mem *shmem;
+};
+
+struct scmi_smc {
+	int irq;
+	struct scmi_chan_info *cinfo;
+	struct scmi_shared_mem *shmem;
+	struct mutex shmem_lock;
+	atomic_t inflight;
+	u32 func_id;
+	u32 param_page;
+	u32 param_offset;
+};
+
+struct scmi_msg_payld {
+	__le32 msg_header;
+	__le32 msg_payload[0];
+};
+
+enum poll_states {
+	VIO_MSG_NOT_POLLED = 0,
+	VIO_MSG_POLL_TIMEOUT = 1,
+	VIO_MSG_POLLING = 2,
+	VIO_MSG_POLL_DONE = 3,
+};
+
+struct scmi_vio_channel {
+	struct virtqueue *vqueue;
+	struct scmi_chan_info *cinfo;
+	spinlock_t free_lock;
+	struct list_head free_list;
+	spinlock_t pending_lock;
+	struct list_head pending_cmds_list;
+	struct work_struct deferred_tx_work;
+	struct workqueue_struct *deferred_tx_wq;
+	bool is_rx;
+	unsigned int max_msg;
+	spinlock_t lock;
+	struct completion *shutdown_done;
+	refcount_t users;
+};
+
+struct scmi_vio_msg {
+	struct scmi_msg_payld *request;
+	struct scmi_msg_payld *input;
+	struct list_head list;
+	unsigned int rx_len;
+	unsigned int poll_idx;
+	enum poll_states poll_status;
+	spinlock_t poll_lock;
+	refcount_t users;
+};
+
+typedef struct {
+	u64 signature;
+	u32 revision;
+	u32 headersize;
+	u32 crc32;
+	u32 reserved;
+} efi_table_hdr_t;
+
+typedef struct {
+	u16 year;
+	u8 month;
+	u8 day;
+	u8 hour;
+	u8 minute;
+	u8 second;
+	u8 pad1;
+	u32 nanosecond;
+	s16 timezone;
+	u8 daylight;
+	u8 pad2;
+} efi_time_t;
+
+typedef struct {
+	u32 resolution;
+	u32 accuracy;
+	u8 sets_to_zero;
+} efi_time_cap_t;
+
+typedef efi_status_t efi_get_time_t(efi_time_t *, efi_time_cap_t *);
+
+typedef efi_status_t efi_set_time_t(efi_time_t *);
+
+typedef u8 efi_bool_t;
+
+typedef efi_status_t efi_get_wakeup_time_t(efi_bool_t *, efi_bool_t *, efi_time_t *);
+
+typedef efi_status_t efi_set_wakeup_time_t(efi_bool_t, efi_time_t *);
+
+typedef efi_status_t efi_set_virtual_address_map_t(unsigned long, unsigned long, u32, efi_memory_desc_t *);
+
+typedef u16 efi_char16_t;
+
+typedef efi_status_t efi_get_variable_t(efi_char16_t *, efi_guid_t *, u32 *, unsigned long *, void *);
+
+typedef efi_status_t efi_get_next_variable_t(unsigned long *, efi_char16_t *, efi_guid_t *);
+
+typedef efi_status_t efi_set_variable_t(efi_char16_t *, efi_guid_t *, u32, unsigned long, void *);
+
+typedef efi_status_t efi_get_next_high_mono_count_t(u32 *);
+
+typedef void efi_reset_system_t(int, efi_status_t, unsigned long, efi_char16_t *);
+
+typedef struct {
+	efi_guid_t guid;
+	u32 headersize;
+	u32 flags;
+	u32 imagesize;
+} efi_capsule_header_t;
+
+typedef efi_status_t efi_update_capsule_t(efi_capsule_header_t **, unsigned long, unsigned long);
+
+typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **, unsigned long, u64 *, int *);
+
+typedef efi_status_t efi_query_variable_info_t(u32, u64 *, u64 *, u64 *);
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u32 get_time;
+	u32 set_time;
+	u32 get_wakeup_time;
+	u32 set_wakeup_time;
+	u32 set_virtual_address_map;
+	u32 convert_pointer;
+	u32 get_variable;
+	u32 get_next_variable;
+	u32 set_variable;
+	u32 get_next_high_mono_count;
+	u32 reset_system;
+	u32 update_capsule;
+	u32 query_capsule_caps;
+	u32 query_variable_info;
+} efi_runtime_services_32_t;
+
+typedef union {
+	struct {
+		efi_table_hdr_t hdr;
+		efi_get_time_t *get_time;
+		efi_set_time_t *set_time;
+		efi_get_wakeup_time_t *get_wakeup_time;
+		efi_set_wakeup_time_t *set_wakeup_time;
+		efi_set_virtual_address_map_t *set_virtual_address_map;
+		void *convert_pointer;
+		efi_get_variable_t *get_variable;
+		efi_get_next_variable_t *get_next_variable;
+		efi_set_variable_t *set_variable;
+		efi_get_next_high_mono_count_t *get_next_high_mono_count;
+		efi_reset_system_t *reset_system;
+		efi_update_capsule_t *update_capsule;
+		efi_query_capsule_caps_t *query_capsule_caps;
+		efi_query_variable_info_t *query_variable_info;
+	};
+	efi_runtime_services_32_t mixed_mode;
+} efi_runtime_services_t;
+
+struct efi_memory_map {
+	phys_addr_t phys_map;
+	void *map;
+	void *map_end;
+	int nr_map;
+	unsigned long desc_version;
+	unsigned long desc_size;
+	unsigned long flags;
+};
+
+struct efi {
+	const efi_runtime_services_t *runtime;
+	unsigned int runtime_version;
+	unsigned int runtime_supported_mask;
+	unsigned long acpi;
+	unsigned long acpi20;
+	unsigned long smbios;
+	unsigned long smbios3;
+	unsigned long esrt;
+	unsigned long tpm_log;
+	unsigned long tpm_final_log;
+	unsigned long mokvar_table;
+	unsigned long coco_secret;
+	unsigned long unaccepted;
+	efi_get_time_t *get_time;
+	efi_set_time_t *set_time;
+	efi_get_wakeup_time_t *get_wakeup_time;
+	efi_set_wakeup_time_t *set_wakeup_time;
+	efi_get_variable_t *get_variable;
+	efi_get_next_variable_t *get_next_variable;
+	efi_set_variable_t *set_variable;
+	efi_set_variable_t *set_variable_nonblocking;
+	efi_query_variable_info_t *query_variable_info;
+	efi_query_variable_info_t *query_variable_info_nonblocking;
+	efi_update_capsule_t *update_capsule;
+	efi_query_capsule_caps_t *query_capsule_caps;
+	efi_get_next_high_mono_count_t *get_next_high_mono_count;
+	efi_reset_system_t *reset_system;
+	struct efi_memory_map memmap;
+	unsigned long flags;
+};
+
+struct linux_efi_memreserve {
+	int size;
+	atomic_t count;
+	phys_addr_t next;
+	struct {
+		phys_addr_t base;
+		phys_addr_t size;
+	} entry[0];
+};
+
+typedef efi_status_t efi_query_variable_store_t(u32, unsigned long, bool);
+
+struct efivar_operations {
+	efi_get_variable_t *get_variable;
+	efi_get_next_variable_t *get_next_variable;
+	efi_set_variable_t *set_variable;
+	efi_set_variable_t *set_variable_nonblocking;
+	efi_query_variable_store_t *query_variable_store;
+	efi_query_variable_info_t *query_variable_info;
+};
+
+struct efivars {
+	struct kset *kset;
+	const struct efivar_operations *ops;
+};
+
+typedef struct {
+	efi_guid_t guid;
+	unsigned long *ptr;
+	const char name[16];
+} efi_config_table_type_t;
+
+typedef struct {
+	efi_guid_t guid;
+	u32 table;
+} efi_config_table_32_t;
+
+typedef union {
+	struct {
+		efi_guid_t guid;
+		void *table;
+	};
+	efi_config_table_32_t mixed_mode;
+} efi_config_table_t;
+
+typedef struct {
+	efi_guid_t guid;
+	u64 table;
+} efi_config_table_64_t;
+
+struct linux_efi_random_seed {
+	u32 size;
+	u8 bits[0];
+};
+
+typedef struct {
+	u16 version;
+	u16 length;
+	u32 runtime_services_supported;
+} efi_rt_properties_table_t;
+
+struct linux_efi_initrd {
+	unsigned long base;
+	unsigned long size;
+};
+
+typedef struct {
+	u32 version;
+	u32 num_entries;
+	u32 desc_size;
+	u32 flags;
+	efi_memory_desc_t entry[0];
+} efi_memory_attributes_table_t;
+
+typedef int (*efi_memattr_perm_setter)(struct mm_struct *, efi_memory_desc_t *, bool);
+
+enum tcpa_event_types {
+	PREBOOT = 0,
+	POST_CODE = 1,
+	UNUSED = 2,
+	NO_ACTION = 3,
+	SEPARATOR = 4,
+	ACTION = 5,
+	EVENT_TAG = 6,
+	SCRTM_CONTENTS = 7,
+	SCRTM_VERSION = 8,
+	CPU_MICROCODE = 9,
+	PLATFORM_CONFIG_FLAGS = 10,
+	TABLE_OF_DEVICES = 11,
+	COMPACT_HASH = 12,
+	IPL = 13,
+	IPL_PARTITION_DATA = 14,
+	NONHOST_CODE = 15,
+	NONHOST_CONFIG = 16,
+	NONHOST_INFO = 17,
+};
+
+struct tpm_digest {
+	u16 alg_id;
+	u8 digest[64];
+};
+
+struct tcg_pcr_event2_head {
+	u32 pcr_idx;
+	u32 event_type;
+	u32 count;
+	struct tpm_digest digests[0];
+};
+
+struct tcg_efi_specid_event_algs {
+	u16 alg_id;
+	u16 digest_size;
+};
+
+struct tcg_efi_specid_event_head {
+	u8 signature[16];
+	u32 platform_class;
+	u8 spec_version_minor;
+	u8 spec_version_major;
+	u8 spec_errata;
+	u8 uintnsize;
+	u32 num_algs;
+	struct tcg_efi_specid_event_algs digest_sizes[0];
+};
+
+struct tcg_event_field {
+	u32 event_size;
+	u8 event[0];
+};
+
+struct tcg_pcr_event {
+	u32 pcr_idx;
+	u32 event_type;
+	u8 digest[20];
+	u32 event_size;
+	u8 event[0];
+};
+
+struct linux_efi_tpm_eventlog {
+	u32 size;
+	u32 final_events_preboot_size;
+	u8 version;
+	u8 log[0];
+};
+
+struct efi_tcg2_final_events_table {
+	u64 version;
+	u64 nr_events;
+	u8 events[0];
+};
+
+struct efi_memory_map_data {
+	phys_addr_t phys_map;
+	unsigned long size;
+	unsigned long desc_version;
+	unsigned long desc_size;
+	unsigned long flags;
+};
+
+struct efi_system_resource_table {
+	u32 fw_resource_count;
+	u32 fw_resource_count_max;
+	u64 fw_resource_version;
+	u8 entries[0];
+};
+
+struct esre_entry;
+
+struct esre_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct esre_entry *, char *);
+	ssize_t (*store)(struct esre_entry *, const char *, size_t);
+};
+
+struct efi_system_resource_entry_v1;
+
+struct esre_entry {
+	union {
+		struct efi_system_resource_entry_v1 *esre1;
+	} esre;
+	struct kobject kobj;
+	struct list_head list;
+};
+
+struct efi_system_resource_entry_v1 {
+	efi_guid_t fw_class;
+	u32 fw_type;
+	u32 fw_version;
+	u32 lowest_supported_fw_version;
+	u32 capsule_flags;
+	u32 last_attempt_version;
+	u32 last_attempt_status;
+};
+
+enum efi_rts_ids {
+	EFI_NONE = 0,
+	EFI_GET_TIME = 1,
+	EFI_SET_TIME = 2,
+	EFI_GET_WAKEUP_TIME = 3,
+	EFI_SET_WAKEUP_TIME = 4,
+	EFI_GET_VARIABLE = 5,
+	EFI_GET_NEXT_VARIABLE = 6,
+	EFI_SET_VARIABLE = 7,
+	EFI_QUERY_VARIABLE_INFO = 8,
+	EFI_GET_NEXT_HIGH_MONO_COUNT = 9,
+	EFI_RESET_SYSTEM = 10,
+	EFI_UPDATE_CAPSULE = 11,
+	EFI_QUERY_CAPSULE_CAPS = 12,
+	EFI_ACPI_PRM_HANDLER = 13,
+};
+
+union efi_rts_args;
+
+struct efi_runtime_work {
+	union efi_rts_args *args;
+	efi_status_t status;
+	struct work_struct work;
+	enum efi_rts_ids efi_rts_id;
+	struct completion efi_rts_comp;
+	const void *caller;
+};
+
+union efi_rts_args {
+	struct {
+		efi_time_t *time;
+		efi_time_cap_t *capabilities;
+	} GET_TIME;
+	struct {
+		efi_time_t *time;
+	} SET_TIME;
+	struct {
+		efi_bool_t *enabled;
+		efi_bool_t *pending;
+		efi_time_t *time;
+	} GET_WAKEUP_TIME;
+	struct {
+		efi_bool_t enable;
+		efi_time_t *time;
+	} SET_WAKEUP_TIME;
+	struct {
+		efi_char16_t *name;
+		efi_guid_t *vendor;
+		u32 *attr;
+		unsigned long *data_size;
+		void *data;
+	} GET_VARIABLE;
+	struct {
+		unsigned long *name_size;
+		efi_char16_t *name;
+		efi_guid_t *vendor;
+	} GET_NEXT_VARIABLE;
+	struct {
+		efi_char16_t *name;
+		efi_guid_t *vendor;
+		u32 attr;
+		unsigned long data_size;
+		void *data;
+	} SET_VARIABLE;
+	struct {
+		u32 attr;
+		u64 *storage_space;
+		u64 *remaining_space;
+		u64 *max_variable_size;
+	} QUERY_VARIABLE_INFO;
+	struct {
+		u32 *high_count;
+	} GET_NEXT_HIGH_MONO_COUNT;
+	struct {
+		efi_capsule_header_t **capsules;
+		unsigned long count;
+		unsigned long sg_list;
+	} UPDATE_CAPSULE;
+	struct {
+		efi_capsule_header_t **capsules;
+		unsigned long count;
+		u64 *max_size;
+		int *reset_type;
+	} QUERY_CAPSULE_CAPS;
+	struct {
+		efi_status_t (*acpi_prm_handler)(u64, void *);
+		u64 param_buffer_addr;
+		void *context;
+	} ACPI_PRM_HANDLER;
+};
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u32 fw_vendor;
+	u32 fw_revision;
+	u32 con_in_handle;
+	u32 con_in;
+	u32 con_out_handle;
+	u32 con_out;
+	u32 stderr_handle;
+	u32 stderr;
+	u32 runtime;
+	u32 boottime;
+	u32 nr_tables;
+	u32 tables;
+} efi_system_table_32_t;
+
+union efi_simple_text_input_protocol;
+
+typedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_t;
+
+union efi_simple_text_output_protocol;
+
+typedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;
+
+union efi_boot_services;
+
+typedef union efi_boot_services efi_boot_services_t;
+
+typedef union {
+	struct {
+		efi_table_hdr_t hdr;
+		unsigned long fw_vendor;
+		u32 fw_revision;
+		unsigned long con_in_handle;
+		efi_simple_text_input_protocol_t *con_in;
+		unsigned long con_out_handle;
+		efi_simple_text_output_protocol_t *con_out;
+		unsigned long stderr_handle;
+		unsigned long stderr;
+		efi_runtime_services_t *runtime;
+		efi_boot_services_t *boottime;
+		unsigned long nr_tables;
+		unsigned long tables;
+	};
+	efi_system_table_32_t mixed_mode;
+} efi_system_table_t;
+
+typedef struct {
+	u16 scan_code;
+	efi_char16_t unicode_char;
+} efi_input_key_t;
+
+typedef void *efi_event_t;
+
+union efi_simple_text_input_protocol {
+	struct {
+		void *reset;
+		efi_status_t (*read_keystroke)(efi_simple_text_input_protocol_t *, efi_input_key_t *);
+		efi_event_t wait_for_key;
+	};
+	struct {
+		u32 reset;
+		u32 read_keystroke;
+		u32 wait_for_key;
+	} mixed_mode;
+};
+
+union efi_simple_text_output_protocol {
+	struct {
+		void *reset;
+		efi_status_t (*output_string)(efi_simple_text_output_protocol_t *, efi_char16_t *);
+		void *test_string;
+	};
+	struct {
+		u32 reset;
+		u32 output_string;
+		u32 test_string;
+	} mixed_mode;
+};
+
+typedef u64 efi_physical_addr_t;
+
+typedef void (*efi_event_notify_t)(efi_event_t, void *);
+
+typedef enum {
+	EfiTimerCancel = 0,
+	EfiTimerPeriodic = 1,
+	EfiTimerRelative = 2,
+} EFI_TIMER_DELAY;
+
+typedef void *efi_handle_t;
+
+struct efi_generic_dev_path;
+
+typedef struct efi_generic_dev_path efi_device_path_protocol_t;
+
+union efi_boot_services {
+	struct {
+		efi_table_hdr_t hdr;
+		void *raise_tpl;
+		void *restore_tpl;
+		efi_status_t (*allocate_pages)(int, int, unsigned long, efi_physical_addr_t *);
+		efi_status_t (*free_pages)(efi_physical_addr_t, unsigned long);
+		efi_status_t (*get_memory_map)(unsigned long *, void *, unsigned long *, unsigned long *, u32 *);
+		efi_status_t (*allocate_pool)(int, unsigned long, void **);
+		efi_status_t (*free_pool)(void *);
+		efi_status_t (*create_event)(u32, unsigned long, efi_event_notify_t, void *, efi_event_t *);
+		efi_status_t (*set_timer)(efi_event_t, EFI_TIMER_DELAY, u64);
+		efi_status_t (*wait_for_event)(unsigned long, efi_event_t *, unsigned long *);
+		void *signal_event;
+		efi_status_t (*close_event)(efi_event_t);
+		void *check_event;
+		void *install_protocol_interface;
+		void *reinstall_protocol_interface;
+		void *uninstall_protocol_interface;
+		efi_status_t (*handle_protocol)(efi_handle_t, efi_guid_t *, void **);
+		void *__reserved;
+		void *register_protocol_notify;
+		efi_status_t (*locate_handle)(int, efi_guid_t *, void *, unsigned long *, efi_handle_t *);
+		efi_status_t (*locate_device_path)(efi_guid_t *, efi_device_path_protocol_t **, efi_handle_t *);
+		efi_status_t (*install_configuration_table)(efi_guid_t *, void *);
+		efi_status_t (*load_image)(bool, efi_handle_t, efi_device_path_protocol_t *, void *, unsigned long, efi_handle_t *);
+		efi_status_t (*start_image)(efi_handle_t, unsigned long *, efi_char16_t **);
+		efi_status_t (*exit)(efi_handle_t, efi_status_t, unsigned long, efi_char16_t *);
+		efi_status_t (*unload_image)(efi_handle_t);
+		efi_status_t (*exit_boot_services)(efi_handle_t, unsigned long);
+		void *get_next_monotonic_count;
+		efi_status_t (*stall)(unsigned long);
+		void *set_watchdog_timer;
+		void *connect_controller;
+		efi_status_t (*disconnect_controller)(efi_handle_t, efi_handle_t, efi_handle_t);
+		void *open_protocol;
+		void *close_protocol;
+		void *open_protocol_information;
+		void *protocols_per_handle;
+		void *locate_handle_buffer;
+		efi_status_t (*locate_protocol)(efi_guid_t *, void *, void **);
+		efi_status_t (*install_multiple_protocol_interfaces)(efi_handle_t *, ...);
+		efi_status_t (*uninstall_multiple_protocol_interfaces)(efi_handle_t, ...);
+		void *calculate_crc32;
+		void (*copy_mem)(void *, const void *, unsigned long);
+		void (*set_mem)(void *, unsigned long, unsigned char);
+		void *create_event_ex;
+	};
+	struct {
+		efi_table_hdr_t hdr;
+		u32 raise_tpl;
+		u32 restore_tpl;
+		u32 allocate_pages;
+		u32 free_pages;
+		u32 get_memory_map;
+		u32 allocate_pool;
+		u32 free_pool;
+		u32 create_event;
+		u32 set_timer;
+		u32 wait_for_event;
+		u32 signal_event;
+		u32 close_event;
+		u32 check_event;
+		u32 install_protocol_interface;
+		u32 reinstall_protocol_interface;
+		u32 uninstall_protocol_interface;
+		u32 handle_protocol;
+		u32 __reserved;
+		u32 register_protocol_notify;
+		u32 locate_handle;
+		u32 locate_device_path;
+		u32 install_configuration_table;
+		u32 load_image;
+		u32 start_image;
+		u32 exit;
+		u32 unload_image;
+		u32 exit_boot_services;
+		u32 get_next_monotonic_count;
+		u32 stall;
+		u32 set_watchdog_timer;
+		u32 connect_controller;
+		u32 disconnect_controller;
+		u32 open_protocol;
+		u32 close_protocol;
+		u32 open_protocol_information;
+		u32 protocols_per_handle;
+		u32 locate_handle_buffer;
+		u32 locate_protocol;
+		u32 install_multiple_protocol_interfaces;
+		u32 uninstall_multiple_protocol_interfaces;
+		u32 calculate_crc32;
+		u32 copy_mem;
+		u32 set_mem;
+		u32 create_event_ex;
+	} mixed_mode;
+};
+
+struct psci_operations {
+	u32 (*get_version)();
+	int (*cpu_suspend)(u32, unsigned long);
+	int (*cpu_off)(u32);
+	int (*cpu_on)(unsigned long, unsigned long);
+	int (*migrate)(unsigned long);
+	int (*affinity_info)(unsigned long, unsigned long);
+	int (*migrate_info_type)();
+};
+
+typedef unsigned long psci_fn(unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef int (*psci_initcall_t)(const struct device_node *);
+
+struct tegra_ivc {
+	struct device *peer;
+	struct {
+		struct iosys_map map;
+		unsigned int position;
+		dma_addr_t phys;
+	} rx;
+	struct {
+		struct iosys_map map;
+		unsigned int position;
+		dma_addr_t phys;
+	} tx;
+	void (*notify)(struct tegra_ivc *, void *);
+	void *notify_data;
+	unsigned int num_frames;
+	size_t frame_size;
+};
+
+typedef void (*tegra_bpmp_mrq_handler_t)(unsigned int, struct tegra_bpmp_channel *, void *);
+
+struct tegra_bpmp_mrq {
+	struct list_head list;
+	unsigned int mrq;
+	tegra_bpmp_mrq_handler_t handler;
+	void *data;
+};
+
+struct tegra_bpmp_mb_data {
+	u32 code;
+	u32 flags;
+	u8 data[120];
+};
+
+struct mrq_query_abi_request {
+	uint32_t mrq;
+};
+
+struct mrq_query_abi_response {
+	int32_t status;
+};
+
+struct mrq_query_tag_request {
+	uint32_t addr;
+};
+
+struct mrq_ping_request {
+	uint32_t challenge;
+};
+
+struct mrq_ping_response {
+	uint32_t reply;
+};
+
+struct mrq_query_fw_tag_response {
+	uint8_t tag[32];
+};
+
+struct tegra186_bpmp {
+	struct tegra_bpmp *parent;
+	struct {
+		struct gen_pool *pool;
+		union {
+			void *sram;
+			void *dram;
+		};
+		dma_addr_t phys;
+	} tx;
+	struct {
+		struct gen_pool *pool;
+		union {
+			void *sram;
+			void *dram;
+		};
+		dma_addr_t phys;
+	} rx;
+	struct {
+		struct mbox_client client;
+		struct mbox_chan *channel;
+	} mbox;
+};
+
+enum mrq_debug_commands {
+	CMD_DEBUG_OPEN_RO = 0,
+	CMD_DEBUG_OPEN_WO = 1,
+	CMD_DEBUG_READ = 2,
+	CMD_DEBUG_WRITE = 3,
+	CMD_DEBUG_CLOSE = 4,
+	CMD_DEBUG_MAX = 5,
+};
+
+enum mrq_debugfs_commands {
+	CMD_DEBUGFS_READ = 1,
+	CMD_DEBUGFS_WRITE = 2,
+	CMD_DEBUGFS_DUMPDIR = 3,
+	CMD_DEBUGFS_MAX = 4,
+};
+
+struct seqbuf {
+	char *buf;
+	size_t pos;
+	size_t size;
+};
+
+struct cmd_debugfs_fileop_response {
+	uint32_t reserved;
+	uint32_t nbytes;
+};
+
+struct cmd_debugfs_dumpdir_response {
+	uint32_t reserved;
+	uint32_t nbytes;
+};
+
+struct mrq_debugfs_response {
+	int32_t reserved;
+	union {
+		struct cmd_debugfs_fileop_response fop;
+		struct cmd_debugfs_dumpdir_response dumpdir;
+	};
+};
+
+struct cmd_debugfs_fileop_request {
+	uint32_t fnameaddr;
+	uint32_t fnamelen;
+	uint32_t dataaddr;
+	uint32_t datalen;
+};
+
+struct cmd_debugfs_dumpdir_request {
+	uint32_t dataaddr;
+	uint32_t datalen;
+};
+
+struct mrq_debugfs_request {
+	uint32_t cmd;
+	union {
+		struct cmd_debugfs_fileop_request fop;
+		struct cmd_debugfs_dumpdir_request dumpdir;
+	};
+};
+
+struct cmd_debug_fopen_request {
+	char name[116];
+};
+
+struct cmd_debug_fread_request {
+	uint32_t fd;
+};
+
+struct cmd_debug_fwrite_request {
+	uint32_t fd;
+	uint32_t datalen;
+	char data[108];
+};
+
+struct cmd_debug_fclose_request {
+	uint32_t fd;
+};
+
+struct mrq_debug_request {
+	uint32_t cmd;
+	union {
+		struct cmd_debug_fopen_request fop;
+		struct cmd_debug_fread_request frd;
+		struct cmd_debug_fwrite_request fwr;
+		struct cmd_debug_fclose_request fcl;
+	};
+};
+
+struct cmd_debug_fopen_response {
+	uint32_t fd;
+	uint32_t datalen;
+};
+
+struct cmd_debug_fread_response {
+	uint32_t readlen;
+	char data[116];
+};
+
+struct mrq_debug_response {
+	union {
+		struct cmd_debug_fopen_response fop;
+		struct cmd_debug_fread_response frd;
+	};
+};
+
+enum tegra_ivc_state {
+	TEGRA_IVC_STATE_ESTABLISHED = 0,
+	TEGRA_IVC_STATE_SYNC = 1,
+	TEGRA_IVC_STATE_ACK = 2,
+};
+
+struct tegra_ivc_header {
+	union {
+		struct {
+			u32 count;
+			u32 state;
+		};
+		u8 pad[64];
+	} tx;
+	union {
+		u32 count;
+		u8 pad[64];
+	} rx;
+};
+
+struct of_timer_base {
+	void *base;
+	const char *name;
+	int index;
+};
+
+struct of_timer_irq {
+	int irq;
+	int index;
+	int percpu;
+	const char *name;
+	unsigned long flags;
+	irq_handler_t handler;
+};
+
+struct of_timer_clk {
+	struct clk *clk;
+	const char *name;
+	int index;
+	unsigned long rate;
+	unsigned long period;
+};
+
+struct timer_of {
+	unsigned int flags;
+	struct device_node *np;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct clock_event_device clkevt;
+	struct of_timer_base of_base;
+	struct of_timer_irq of_irq;
+	struct of_timer_clk of_clk;
+	void *private_data;
+	long: 64;
+	long: 64;
+};
+
+typedef int (*of_init_fn_1_ret)(struct device_node *);
+
+struct clocksource_mmio {
+	void *reg;
+	struct clocksource clksrc;
+};
+
+enum arch_timer_erratum_match_type {
+	ate_match_dt = 0,
+	ate_match_local_cap_id = 1,
+	ate_match_acpi_oem_info = 2,
+};
+
+struct arch_timer_erratum_workaround {
+	enum arch_timer_erratum_match_type match_type;
+	const void *id;
+	const char *desc;
+	u64 (*read_cntpct_el0)();
+	u64 (*read_cntvct_el0)();
+	int (*set_next_event_phys)(unsigned long, struct clock_event_device *);
+	int (*set_next_event_virt)(unsigned long, struct clock_event_device *);
+	bool disable_compat_vdso;
+};
+
+struct ate_acpi_oem_info {
+	char oem_id[7];
+	char oem_table_id[9];
+	u32 oem_revision;
+};
+
+struct arch_timer {
+	void *base;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct clock_event_device evt;
+};
+
+enum arch_timer_ppi_nr {
+	ARCH_TIMER_PHYS_SECURE_PPI = 0,
+	ARCH_TIMER_PHYS_NONSECURE_PPI = 1,
+	ARCH_TIMER_VIRT_PPI = 2,
+	ARCH_TIMER_HYP_PPI = 3,
+	ARCH_TIMER_HYP_VIRT_PPI = 4,
+	ARCH_TIMER_MAX_TIMER_PPI = 5,
+};
+
+enum arch_timer_reg {
+	ARCH_TIMER_REG_CTRL = 0,
+	ARCH_TIMER_REG_CVAL = 1,
+};
+
+enum arch_timer_spi_nr {
+	ARCH_TIMER_PHYS_SPI = 0,
+	ARCH_TIMER_VIRT_SPI = 1,
+	ARCH_TIMER_MAX_TIMER_SPI = 2,
+};
+
+typedef bool (*ate_match_fn_t)(const struct arch_timer_erratum_workaround *, const void *);
+
+struct arch_timer_mem_frame {
+	bool valid;
+	phys_addr_t cntbase;
+	size_t size;
+	int phys_irq;
+	int virt_irq;
+};
+
+struct arch_timer_mem {
+	phys_addr_t cntctlbase;
+	size_t size;
+	struct arch_timer_mem_frame frame[8];
+};
+
+struct sp804_clkevt {
+	void *base;
+	void *load;
+	void *load_h;
+	void *value;
+	void *value_h;
+	void *ctrl;
+	void *intclr;
+	void *ris;
+	void *mis;
+	void *bgload;
+	void *bgload_h;
+	unsigned long reload;
+	int width;
+};
+
+struct sp804_timer {
+	int load;
+	int load_h;
+	int value;
+	int value_h;
+	int ctrl;
+	int intclr;
+	int ris;
+	int mis;
+	int bgload;
+	int bgload_h;
+	int timer_base[2];
+	int width;
+};
+
+struct hid_global {
+	unsigned int usage_page;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	unsigned int report_id;
+	unsigned int report_size;
+	unsigned int report_count;
+};
+
+struct hid_local {
+	unsigned int usage[12288];
+	u8 usage_size[12288];
+	unsigned int collection_index[12288];
+	unsigned int usage_index;
+	unsigned int usage_minimum;
+	unsigned int delimiter_depth;
+	unsigned int delimiter_branch;
+};
+
+struct hid_parser {
+	struct hid_global global;
+	struct hid_global global_stack[4];
+	unsigned int global_stack_ptr;
+	struct hid_local local;
+	unsigned int *collection_stack;
+	unsigned int collection_stack_ptr;
+	unsigned int collection_stack_size;
+	struct hid_device *device;
+	unsigned int scan_flags;
+	u64 android_kabi_reserved1;
+};
+
+struct hid_item {
+	unsigned int format;
+	__u8 size;
+	__u8 type;
+	__u8 tag;
+	union {
+		__u8 u8;
+		__s8 s8;
+		__u16 u16;
+		__s16 s16;
+		__u32 u32;
+		__s32 s32;
+		__u8 *longdata;
+	} data;
+};
+
+enum hid_class_request {
+	HID_REQ_GET_REPORT = 1,
+	HID_REQ_GET_IDLE = 2,
+	HID_REQ_GET_PROTOCOL = 3,
+	HID_REQ_SET_REPORT = 9,
+	HID_REQ_SET_IDLE = 10,
+	HID_REQ_SET_PROTOCOL = 11,
+};
+
+struct hiddev {
+	int minor;
+	int exist;
+	int open;
+	struct mutex existancelock;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct list_head list;
+	spinlock_t list_lock;
+	bool initialized;
+};
+
+struct hidraw {
+	unsigned int minor;
+	int exist;
+	int open;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct device *dev;
+	spinlock_t list_lock;
+	struct list_head list;
+};
+
+struct hid_dynid {
+	struct list_head list;
+	struct hid_device_id id;
+};
+
+struct usage_priority {
+	__u32 usage;
+	bool global;
+	unsigned int slot_overwrite;
+};
+
+typedef bool (*hid_usage_cmp_t)(struct hid_usage *, unsigned int, unsigned int);
+
+struct quirks_list_struct {
+	struct hid_device_id hid_bl_item;
+	struct list_head node;
+};
+
+struct hid_usage_entry {
+	unsigned int page;
+	unsigned int usage;
+	const char *description;
+};
+
+struct hid_debug_list {
+	struct {
+		union {
+			struct __kfifo kfifo;
+			char *type;
+			const char *const_type;
+			char (*rectype)[0];
+			char *ptr;
+			const char *ptr_const;
+		};
+		char buf[0];
+	} hid_debug_fifo;
+	struct fasync_struct *fasync;
+	struct hid_device *hdev;
+	struct list_head node;
+	struct mutex read_mutex;
+};
+
+struct hidraw_report {
+	__u8 *value;
+	int len;
+};
+
+struct hidraw_list {
+	struct hidraw_report buffer[64];
+	int head;
+	int tail;
+	struct fasync_struct *fasync;
+	struct hidraw *hidraw;
+	struct list_head node;
+	struct mutex read_mutex;
+};
+
+struct hidraw_devinfo {
+	__u32 bustype;
+	__s16 vendor;
+	__s16 product;
+};
+
+enum uhid_legacy_event_type {
+	UHID_CREATE = 0,
+	UHID_OUTPUT_EV = 7,
+	UHID_INPUT = 8,
+	UHID_FEATURE = 9,
+	UHID_FEATURE_ANSWER = 10,
+};
+
+enum uhid_event_type {
+	__UHID_LEGACY_CREATE = 0,
+	UHID_DESTROY = 1,
+	UHID_START = 2,
+	UHID_STOP = 3,
+	UHID_OPEN = 4,
+	UHID_CLOSE = 5,
+	UHID_OUTPUT = 6,
+	__UHID_LEGACY_OUTPUT_EV = 7,
+	__UHID_LEGACY_INPUT = 8,
+	UHID_GET_REPORT = 9,
+	UHID_GET_REPORT_REPLY = 10,
+	UHID_CREATE2 = 11,
+	UHID_INPUT2 = 12,
+	UHID_SET_REPORT = 13,
+	UHID_SET_REPORT_REPLY = 14,
+};
+
+enum uhid_dev_flag {
+	UHID_DEV_NUMBERED_FEATURE_REPORTS = 1,
+	UHID_DEV_NUMBERED_OUTPUT_REPORTS = 2,
+	UHID_DEV_NUMBERED_INPUT_REPORTS = 4,
+};
+
+enum uhid_report_type {
+	UHID_FEATURE_REPORT = 0,
+	UHID_OUTPUT_REPORT = 1,
+	UHID_INPUT_REPORT = 2,
+};
+
+struct uhid_create_req {
+	__u8 name[128];
+	__u8 phys[64];
+	__u8 uniq[64];
+	__u8 __attribute__((btf_type_tag("user"))) *rd_data;
+	__u16 rd_size;
+	__u16 bus;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	__u32 country;
+} __attribute__((packed));
+
+struct uhid_input_req {
+	__u8 data[4096];
+	__u16 size;
+};
+
+struct uhid_output_req {
+	__u8 data[4096];
+	__u16 size;
+	__u8 rtype;
+} __attribute__((packed));
+
+struct uhid_output_ev_req {
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct uhid_feature_req {
+	__u32 id;
+	__u8 rnum;
+	__u8 rtype;
+} __attribute__((packed));
+
+struct uhid_get_report_req {
+	__u32 id;
+	__u8 rnum;
+	__u8 rtype;
+} __attribute__((packed));
+
+struct uhid_feature_answer_req {
+	__u32 id;
+	__u16 err;
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_get_report_reply_req {
+	__u32 id;
+	__u16 err;
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_create2_req {
+	__u8 name[128];
+	__u8 phys[64];
+	__u8 uniq[64];
+	__u16 rd_size;
+	__u16 bus;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	__u32 country;
+	__u8 rd_data[4096];
+};
+
+struct uhid_input2_req {
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_set_report_req {
+	__u32 id;
+	__u8 rnum;
+	__u8 rtype;
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_set_report_reply_req {
+	__u32 id;
+	__u16 err;
+} __attribute__((packed));
+
+struct uhid_start_req {
+	__u64 dev_flags;
+};
+
+struct uhid_event {
+	__u32 type;
+	union {
+		struct uhid_create_req create;
+		struct uhid_input_req input;
+		struct uhid_output_req output;
+		struct uhid_output_ev_req output_ev;
+		struct uhid_feature_req feature;
+		struct uhid_get_report_req get_report;
+		struct uhid_feature_answer_req feature_answer;
+		struct uhid_get_report_reply_req get_report_reply;
+		struct uhid_create2_req create2;
+		struct uhid_input2_req input2;
+		struct uhid_set_report_req set_report;
+		struct uhid_set_report_reply_req set_report_reply;
+		struct uhid_start_req start;
+	} u;
+} __attribute__((packed));
+
+struct uhid_device {
+	struct mutex devlock;
+	bool running;
+	__u8 *rd_data;
+	uint rd_size;
+	struct hid_device *hid;
+	struct uhid_event input_buf;
+	wait_queue_head_t waitq;
+	spinlock_t qlock;
+	__u8 head;
+	__u8 tail;
+	struct uhid_event *outq[32];
+	struct mutex report_lock;
+	wait_queue_head_t report_wait;
+	bool report_running;
+	u32 report_id;
+	u32 report_type;
+	struct uhid_event report_buf;
+	struct work_struct worker;
+};
+
+struct uhid_create_req_compat {
+	__u8 name[128];
+	__u8 phys[64];
+	__u8 uniq[64];
+	compat_uptr_t rd_data;
+	__u16 rd_size;
+	__u16 bus;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	__u32 country;
+};
+
+struct apple_key_translation {
+	u16 from;
+	u16 to;
+	u8 flags;
+};
+
+struct apple_non_apple_keyboard {
+	char *name;
+};
+
+struct apple_sc_backlight;
+
+struct apple_sc {
+	struct hid_device *hdev;
+	unsigned long quirks;
+	unsigned int fn_on;
+	unsigned int fn_found;
+	unsigned long pressed_numlock[12];
+	struct timer_list battery_timer;
+	struct apple_sc_backlight *backlight;
+};
+
+struct apple_sc_backlight {
+	struct led_classdev cdev;
+	struct hid_device *hdev;
+	unsigned short backlight_off;
+	unsigned short backlight_on_min;
+	unsigned short backlight_on_max;
+};
+
+struct apple_backlight_config_report {
+	u8 report_id;
+	u8 version;
+	u16 backlight_off;
+	u16 backlight_on_min;
+	u16 backlight_on_max;
+};
+
+struct apple_backlight_set_report {
+	u8 report_id;
+	u8 version;
+	u16 backlight;
+	u16 rate;
+};
+
+struct lg_drv_data {
+	unsigned long quirks;
+	void *device_props;
+};
+
+enum lg_g15_model {
+	LG_G15 = 0,
+	LG_G15_V2 = 1,
+	LG_G510 = 2,
+	LG_G510_USB_AUDIO = 3,
+	LG_Z10 = 4,
+};
+
+enum lg_g15_led_type {
+	LG_G15_KBD_BRIGHTNESS = 0,
+	LG_G15_LCD_BRIGHTNESS = 1,
+	LG_G15_BRIGHTNESS_MAX = 2,
+	LG_G15_MACRO_PRESET1 = 2,
+	LG_G15_MACRO_PRESET2 = 3,
+	LG_G15_MACRO_PRESET3 = 4,
+	LG_G15_MACRO_RECORD = 5,
+	LG_G15_LED_MAX = 6,
+};
+
+struct lg_g15_led {
+	struct led_classdev cdev;
+	enum led_brightness brightness;
+	enum lg_g15_led_type led;
+	u8 red;
+	u8 green;
+	u8 blue;
+};
+
+struct lg_g15_data {
+	u8 transfer_buf[20];
+	struct mutex mutex;
+	struct work_struct work;
+	struct input_dev *input;
+	struct hid_device *hdev;
+	enum lg_g15_model model;
+	struct lg_g15_led leds[6];
+	bool game_mode_enabled;
+};
+
+enum recvr_type {
+	recvr_type_dj = 0,
+	recvr_type_hidpp = 1,
+	recvr_type_gaming_hidpp = 2,
+	recvr_type_mouse_only = 3,
+	recvr_type_27mhz = 4,
+	recvr_type_bluetooth = 5,
+	recvr_type_dinovo = 6,
+};
+
+struct dj_device;
+
+struct dj_receiver_dev {
+	struct hid_device *mouse;
+	struct hid_device *keyboard;
+	struct hid_device *hidpp;
+	struct dj_device *paired_dj_devices[8];
+	struct list_head list;
+	struct kref kref;
+	struct work_struct work;
+	struct kfifo notif_fifo;
+	unsigned long last_query;
+	bool ready;
+	enum recvr_type type;
+	unsigned int unnumbered_application;
+	spinlock_t lock;
+};
+
+struct dj_device {
+	struct hid_device *hdev;
+	struct dj_receiver_dev *dj_receiver_dev;
+	u64 reports_supported;
+	u8 device_index;
+};
+
+struct dj_report {
+	u8 report_id;
+	u8 device_index;
+	u8 report_type;
+	u8 report_params[12];
+};
+
+struct hidpp_event {
+	u8 report_id;
+	u8 device_index;
+	u8 sub_id;
+	u8 params[17];
+};
+
+struct dj_workitem {
+	u8 type;
+	u8 device_index;
+	u8 device_type;
+	u8 quad_id_msb;
+	u8 quad_id_lsb;
+	u64 reports_supported;
+};
+
+enum {
+	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
+	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
+	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
+	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
+	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
+	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
+};
+
+enum {
+	POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_CHARGE_TYPE_NONE = 1,
+	POWER_SUPPLY_CHARGE_TYPE_TRICKLE = 2,
+	POWER_SUPPLY_CHARGE_TYPE_FAST = 3,
+	POWER_SUPPLY_CHARGE_TYPE_STANDARD = 4,
+	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE = 5,
+	POWER_SUPPLY_CHARGE_TYPE_CUSTOM = 6,
+	POWER_SUPPLY_CHARGE_TYPE_LONGLIFE = 7,
+	POWER_SUPPLY_CHARGE_TYPE_BYPASS = 8,
+	POWER_SUPPLY_CHARGE_TYPE_TAPER_EXT = 50,
+};
+
+struct hidpp_battery {
+	u8 feature_index;
+	u8 solar_feature_index;
+	u8 voltage_feature_index;
+	u8 adc_measurement_feature_index;
+	struct power_supply_desc desc;
+	struct power_supply *ps;
+	char name[64];
+	int status;
+	int capacity;
+	int level;
+	int voltage;
+	int charge_type;
+	bool online;
+	u8 supported_levels_1004;
+};
+
+struct hidpp_scroll_counter {
+	int wheel_multiplier;
+	int remainder;
+	int direction;
+	unsigned long long last_time;
+};
+
+struct hidpp_device {
+	struct hid_device *hid_dev;
+	struct input_dev *input;
+	struct mutex send_mutex;
+	void *send_receive_buf;
+	char *name;
+	wait_queue_head_t wait;
+	int very_long_report_length;
+	bool answer_available;
+	u8 protocol_major;
+	u8 protocol_minor;
+	void *private_data;
+	struct work_struct work;
+	struct kfifo delayed_work_fifo;
+	atomic_t connected;
+	struct input_dev *delayed_input;
+	unsigned long quirks;
+	unsigned long capabilities;
+	u8 supported_reports;
+	struct hidpp_battery battery;
+	struct hidpp_scroll_counter vertical_wheel_counter;
+	u8 wireless_feature_index;
+};
+
+struct hidpp_ff_private_data;
+
+struct hidpp_ff_work_data {
+	struct work_struct work;
+	struct hidpp_ff_private_data *data;
+	int effect_id;
+	u8 command;
+	u8 params[20];
+	u8 size;
+};
+
+struct hidpp_ff_private_data {
+	struct hidpp_device *hidpp;
+	u8 feature_index;
+	u8 version;
+	u16 gain;
+	s16 range;
+	u8 slot_autocenter;
+	u8 num_effects;
+	int *effect_ids;
+	struct workqueue_struct *wq;
+	atomic_t workqueue_size;
+};
+
+struct fap {
+	u8 feature_index;
+	u8 funcindex_clientid;
+	u8 params[60];
+};
+
+struct rap {
+	u8 sub_id;
+	u8 reg_address;
+	u8 params[60];
+};
+
+struct hidpp_report {
+	u8 report_id;
+	u8 device_index;
+	union {
+		struct fap fap;
+		struct rap rap;
+		u8 rawbytes[62];
+	};
+};
+
+struct k400_private_data {
+	u8 feature_index;
+};
+
+struct wtp_data {
+	u16 x_size;
+	u16 y_size;
+	u8 finger_count;
+	u8 mt_feature_index;
+	u8 button_feature_index;
+	u8 maxcontacts;
+	bool flip_y;
+	unsigned int resolution;
+};
+
+struct hidpp_touchpad_raw_xy_finger {
+	u8 contact_type;
+	u8 contact_status;
+	u16 x;
+	u16 y;
+	u8 z;
+	u8 area;
+	u8 finger_id;
+};
+
+struct hidpp_touchpad_raw_xy {
+	u16 timestamp;
+	struct hidpp_touchpad_raw_xy_finger fingers[2];
+	u8 spurious_flag;
+	u8 end_of_frame;
+	u8 finger_count;
+	u8 button;
+};
+
+struct hidpp_touchpad_fw_items {
+	uint8_t presence;
+	uint8_t desired_state;
+	uint8_t state;
+	uint8_t persistent;
+};
+
+struct hidpp_touchpad_raw_info {
+	u16 x_size;
+	u16 y_size;
+	u8 z_range;
+	u8 area_range;
+	u8 timestamp_unit;
+	u8 maxcontacts;
+	u8 origin;
+	u16 res;
+};
+
+struct magicmouse_sc {
+	struct input_dev *input;
+	unsigned long quirks;
+	int ntouches;
+	int scroll_accel;
+	unsigned long scroll_jiffies;
+	struct {
+		short x;
+		short y;
+		short scroll_x;
+		short scroll_y;
+		short scroll_x_hr;
+		short scroll_y_hr;
+		u8 size;
+		bool scroll_x_active;
+		bool scroll_y_active;
+	} touches[16];
+	int tracking_ids[16];
+	struct hid_device *hdev;
+	struct delayed_work work;
+	struct timer_list battery_timer;
+};
+
+enum {
+	MAGNITUDE_STRONG = 2,
+	MAGNITUDE_WEAK = 3,
+	MAGNITUDE_NUM = 4,
+};
+
+struct ms_data {
+	unsigned long quirks;
+	struct hid_device *hdev;
+	struct work_struct ff_worker;
+	__u8 strong;
+	__u8 weak;
+	void *output_report_dmabuf;
+};
+
+struct xb1s_ff_report {
+	__u8 report_id;
+	__u8 enable;
+	__u8 magnitude[4];
+	__u8 duration_10ms;
+	__u8 start_delay_10ms;
+	__u8 loop_count;
+};
+
+struct mt_class {
+	__s32 name;
+	__s32 quirks;
+	__s32 sn_move;
+	__s32 sn_width;
+	__s32 sn_height;
+	__s32 sn_pressure;
+	__u8 maxcontacts;
+	bool is_indirect;
+	bool export_all_inputs;
+};
+
+enum latency_mode {
+	HID_LATENCY_NORMAL = 0,
+	HID_LATENCY_HIGH = 1,
+};
+
+struct mt_device {
+	struct mt_class mtclass;
+	struct timer_list release_timer;
+	struct hid_device *hdev;
+	unsigned long mt_io_flags;
+	__u8 inputmode_value;
+	__u8 maxcontacts;
+	bool is_buttonpad;
+	bool serial_maybe;
+	struct list_head applications;
+	struct list_head reports;
+};
+
+struct mt_application {
+	struct list_head list;
+	unsigned int application;
+	unsigned int report_id;
+	struct list_head mt_usages;
+	__s32 quirks;
+	__s32 *scantime;
+	__s32 scantime_logical_max;
+	__s32 *raw_cc;
+	int left_button_state;
+	unsigned int mt_flags;
+	unsigned long *pending_palm_slots;
+	__u8 num_received;
+	__u8 num_expected;
+	__u8 buttons_count;
+	__u8 touches_by_report;
+	__s32 dev_time;
+	unsigned long jiffies;
+	int timestamp;
+	int prev_scantime;
+	bool have_contact_count;
+};
+
+struct mt_report_data {
+	struct list_head list;
+	struct hid_report *report;
+	struct mt_application *application;
+	bool is_mt_collection;
+};
+
+struct mt_usages {
+	struct list_head list;
+	__s32 *x;
+	__s32 *y;
+	__s32 *cx;
+	__s32 *cy;
+	__s32 *p;
+	__s32 *w;
+	__s32 *h;
+	__s32 *a;
+	__s32 *contactid;
+	bool *tip_state;
+	bool *inrange_state;
+	bool *confidence_state;
+};
+
+enum joycon_ctlr_state {
+	JOYCON_CTLR_STATE_INIT = 0,
+	JOYCON_CTLR_STATE_READ = 1,
+	JOYCON_CTLR_STATE_REMOVED = 2,
+};
+
+enum joycon_ctlr_type {
+	JOYCON_CTLR_TYPE_JCL = 1,
+	JOYCON_CTLR_TYPE_JCR = 2,
+	JOYCON_CTLR_TYPE_PRO = 3,
+};
+
+enum joycon_msg_type {
+	JOYCON_MSG_TYPE_NONE = 0,
+	JOYCON_MSG_TYPE_USB = 1,
+	JOYCON_MSG_TYPE_SUBCMD = 2,
+};
+
+struct joycon_stick_cal {
+	s32 max;
+	s32 min;
+	s32 center;
+};
+
+struct joycon_imu_cal {
+	s16 offset[3];
+	s16 scale[3];
+};
+
+struct joycon_ctlr {
+	struct hid_device *hdev;
+	struct input_dev *input;
+	struct led_classdev leds[4];
+	struct led_classdev home_led;
+	enum joycon_ctlr_state ctlr_state;
+	spinlock_t lock;
+	u8 mac_addr[6];
+	char *mac_addr_str;
+	enum joycon_ctlr_type ctlr_type;
+	enum joycon_msg_type msg_type;
+	u8 subcmd_num;
+	struct mutex output_mutex;
+	u8 input_buf[84];
+	wait_queue_head_t wait;
+	bool received_resp;
+	u8 usb_ack_match;
+	u8 subcmd_ack_match;
+	bool received_input_report;
+	unsigned int last_input_report_msecs;
+	unsigned int last_subcmd_sent_msecs;
+	unsigned int consecutive_valid_report_deltas;
+	struct joycon_stick_cal left_stick_cal_x;
+	struct joycon_stick_cal left_stick_cal_y;
+	struct joycon_stick_cal right_stick_cal_x;
+	struct joycon_stick_cal right_stick_cal_y;
+	struct joycon_imu_cal accel_cal;
+	struct joycon_imu_cal gyro_cal;
+	s32 imu_cal_accel_divisor[3];
+	s32 imu_cal_gyro_divisor[3];
+	struct power_supply *battery;
+	struct power_supply_desc battery_desc;
+	u8 battery_capacity;
+	bool battery_charging;
+	bool host_powered;
+	u8 rumble_data[64];
+	int rumble_queue_head;
+	int rumble_queue_tail;
+	struct workqueue_struct *rumble_queue;
+	struct work_struct rumble_worker;
+	unsigned int rumble_msecs;
+	u16 rumble_ll_freq;
+	u16 rumble_lh_freq;
+	u16 rumble_rl_freq;
+	u16 rumble_rh_freq;
+	unsigned short rumble_zero_countdown;
+	struct input_dev *imu_input;
+	bool imu_first_packet_received;
+	unsigned int imu_timestamp_us;
+	unsigned int imu_last_pkt_ms;
+	unsigned int imu_delta_samples_count;
+	unsigned int imu_delta_samples_sum;
+	unsigned int imu_avg_delta_ms;
+};
+
+struct joycon_subcmd_request {
+	u8 output_id;
+	u8 packet_num;
+	u8 rumble_data[8];
+	u8 subcmd_id;
+	u8 data[0];
+};
+
+struct joycon_subcmd_reply {
+	u8 ack;
+	u8 id;
+	u8 data[0];
+};
+
+struct joycon_input_report {
+	u8 id;
+	u8 timer;
+	u8 bat_con;
+	u8 button_status[3];
+	u8 left_stick[3];
+	u8 right_stick[3];
+	u8 vibrator_report;
+	union {
+		struct joycon_subcmd_reply subcmd_reply;
+		u8 imu_raw_bytes[36];
+	};
+};
+
+struct joycon_imu_data {
+	s16 accel_x;
+	s16 accel_y;
+	s16 accel_z;
+	s16 gyro_x;
+	s16 gyro_y;
+	s16 gyro_z;
+};
+
+struct joycon_rumble_output {
+	u8 output_id;
+	u8 packet_num;
+	u8 rumble_data[8];
+};
+
+struct pcmidi_snd;
+
+struct pcmidi_sustain {
+	unsigned long in_use;
+	struct pcmidi_snd *pm;
+	struct timer_list timer;
+	unsigned char status;
+	unsigned char note;
+	unsigned char velocity;
+};
+
+struct pk_device;
+
+struct pcmidi_snd {
+	struct pk_device *pk;
+	unsigned short ifnum;
+	struct hid_report *pcmidi_report6;
+	struct input_dev *input_ep82;
+	unsigned short midi_mode;
+	unsigned short midi_sustain_mode;
+	unsigned short midi_sustain;
+	unsigned short midi_channel;
+	short midi_octave;
+	struct pcmidi_sustain sustained_notes[32];
+	unsigned short fn_state;
+	unsigned short last_key[24];
+	spinlock_t rawmidi_in_lock;
+	struct snd_card *card;
+	struct snd_rawmidi *rwmidi;
+	struct snd_rawmidi_substream *in_substream;
+	struct snd_rawmidi_substream *out_substream;
+	unsigned long in_triggered;
+	unsigned long out_active;
+};
+
+struct pk_device {
+	unsigned long quirks;
+	struct hid_device *hdev;
+	struct pcmidi_snd *pm;
+};
+
+struct picolcd_pending;
+
+struct picolcd_data {
+	struct hid_device *hdev;
+	struct dentry *debug_reset;
+	struct dentry *debug_eeprom;
+	struct dentry *debug_flash;
+	struct mutex mutex_flash;
+	int addr_sz;
+	u8 version[2];
+	unsigned short opmode_delay;
+	u8 pressed_keys[2];
+	struct input_dev *input_keys;
+	unsigned short keycode[17];
+	spinlock_t lock;
+	struct mutex mutex;
+	struct picolcd_pending *pending;
+	int status;
+};
+
+struct picolcd_pending {
+	struct hid_report *out_report;
+	struct hid_report *in_report;
+	struct completion ready;
+	int raw_size;
+	u8 raw_data[64];
+};
+
+struct plt_drv_data {
+	unsigned long device_type;
+	unsigned long last_volume_key_ts;
+	u32 quirks;
+};
+
+struct ps_led_info {
+	const char *name;
+	const char *color;
+	int max_brightness;
+	enum led_brightness (*brightness_get)(struct led_classdev *);
+	int (*brightness_set)(struct led_classdev *, enum led_brightness);
+	int (*blink_set)(struct led_classdev *, unsigned long *, unsigned long *);
+};
+
+enum dualshock4_dongle_state {
+	DONGLE_DISCONNECTED = 0,
+	DONGLE_CALIBRATING = 1,
+	DONGLE_CONNECTED = 2,
+	DONGLE_DISABLED = 3,
+};
+
+struct ps_device {
+	struct list_head list;
+	struct hid_device *hdev;
+	spinlock_t lock;
+	uint32_t player_id;
+	struct power_supply_desc battery_desc;
+	struct power_supply *battery;
+	uint8_t battery_capacity;
+	int battery_status;
+	const char *input_dev_name;
+	uint8_t mac_address[6];
+	uint32_t hw_version;
+	uint32_t fw_version;
+	int (*parse_report)(struct ps_device *, struct hid_report *, u8 *, int);
+	void (*remove)(struct ps_device *);
+};
+
+struct ps_calibration_data {
+	int abs_code;
+	short bias;
+	int sens_numer;
+	int sens_denom;
+};
+
+struct dualshock4 {
+	struct ps_device base;
+	struct input_dev *gamepad;
+	struct input_dev *sensors;
+	struct input_dev *touchpad;
+	struct ps_calibration_data accel_calib_data[3];
+	struct ps_calibration_data gyro_calib_data[3];
+	enum dualshock4_dongle_state dongle_state;
+	struct work_struct dongle_hotplug_worker;
+	bool sensor_timestamp_initialized;
+	uint32_t prev_sensor_timestamp;
+	uint32_t sensor_timestamp_us;
+	bool update_bt_poll_interval;
+	uint8_t bt_poll_interval;
+	bool update_rumble;
+	uint8_t motor_left;
+	uint8_t motor_right;
+	bool update_lightbar;
+	bool update_lightbar_blink;
+	bool lightbar_enabled;
+	uint8_t lightbar_red;
+	uint8_t lightbar_green;
+	uint8_t lightbar_blue;
+	uint8_t lightbar_blink_on;
+	uint8_t lightbar_blink_off;
+	struct led_classdev lightbar_leds[4];
+	struct work_struct output_worker;
+	bool output_worker_initialized;
+	void *output_report_dmabuf;
+};
+
+struct dualshock4_input_report_common {
+	uint8_t x;
+	uint8_t y;
+	uint8_t rx;
+	uint8_t ry;
+	uint8_t buttons[3];
+	uint8_t z;
+	uint8_t rz;
+	__le16 sensor_timestamp;
+	uint8_t sensor_temperature;
+	__le16 gyro[3];
+	__le16 accel[3];
+	uint8_t reserved2[5];
+	uint8_t status[2];
+	uint8_t reserved3;
+} __attribute__((packed));
+
+struct dualshock4_touch_point {
+	uint8_t contact;
+	uint8_t x_lo;
+	uint8_t x_hi: 4;
+	uint8_t y_lo: 4;
+	uint8_t y_hi;
+};
+
+struct dualshock4_touch_report {
+	uint8_t timestamp;
+	struct dualshock4_touch_point points[2];
+};
+
+struct dualshock4_input_report_usb {
+	uint8_t report_id;
+	struct dualshock4_input_report_common common;
+	uint8_t num_touch_reports;
+	struct dualshock4_touch_report touch_reports[3];
+	uint8_t reserved[3];
+};
+
+struct dualshock4_input_report_bt {
+	uint8_t report_id;
+	uint8_t reserved[2];
+	struct dualshock4_input_report_common common;
+	uint8_t num_touch_reports;
+	struct dualshock4_touch_report touch_reports[4];
+	uint8_t reserved2[2];
+	__le32 crc32;
+} __attribute__((packed));
+
+struct dualsense {
+	struct ps_device base;
+	struct input_dev *gamepad;
+	struct input_dev *sensors;
+	struct input_dev *touchpad;
+	uint16_t update_version;
+	struct ps_calibration_data accel_calib_data[3];
+	struct ps_calibration_data gyro_calib_data[3];
+	bool sensor_timestamp_initialized;
+	uint32_t prev_sensor_timestamp;
+	uint32_t sensor_timestamp_us;
+	bool use_vibration_v2;
+	bool update_rumble;
+	uint8_t motor_left;
+	uint8_t motor_right;
+	struct led_classdev_mc lightbar;
+	bool update_lightbar;
+	uint8_t lightbar_red;
+	uint8_t lightbar_green;
+	uint8_t lightbar_blue;
+	bool update_mic_mute;
+	bool mic_muted;
+	bool last_btn_mic_state;
+	bool update_player_leds;
+	uint8_t player_leds_state;
+	struct led_classdev player_leds[5];
+	struct work_struct output_worker;
+	bool output_worker_initialized;
+	void *output_report_dmabuf;
+	uint8_t output_seq;
+};
+
+struct dualsense_touch_point {
+	uint8_t contact;
+	uint8_t x_lo;
+	uint8_t x_hi: 4;
+	uint8_t y_lo: 4;
+	uint8_t y_hi;
+};
+
+struct dualsense_input_report {
+	uint8_t x;
+	uint8_t y;
+	uint8_t rx;
+	uint8_t ry;
+	uint8_t z;
+	uint8_t rz;
+	uint8_t seq_number;
+	uint8_t buttons[4];
+	uint8_t reserved[4];
+	__le16 gyro[3];
+	__le16 accel[3];
+	__le32 sensor_timestamp;
+	uint8_t reserved2;
+	struct dualsense_touch_point points[2];
+	uint8_t reserved3[12];
+	uint8_t status;
+	uint8_t reserved4[10];
+} __attribute__((packed));
+
+struct dualshock4_output_report_bt;
+
+struct dualshock4_output_report_usb;
+
+struct dualshock4_output_report_common;
+
+struct dualshock4_output_report {
+	uint8_t *data;
+	uint8_t len;
+	struct dualshock4_output_report_bt *bt;
+	struct dualshock4_output_report_usb *usb;
+	struct dualshock4_output_report_common *common;
+};
+
+struct dualshock4_output_report_common {
+	uint8_t valid_flag0;
+	uint8_t valid_flag1;
+	uint8_t reserved;
+	uint8_t motor_right;
+	uint8_t motor_left;
+	uint8_t lightbar_red;
+	uint8_t lightbar_green;
+	uint8_t lightbar_blue;
+	uint8_t lightbar_blink_on;
+	uint8_t lightbar_blink_off;
+};
+
+struct dualshock4_output_report_bt {
+	uint8_t report_id;
+	uint8_t hw_control;
+	uint8_t audio_control;
+	struct dualshock4_output_report_common common;
+	uint8_t reserved[61];
+	__le32 crc32;
+} __attribute__((packed));
+
+struct dualshock4_output_report_usb {
+	uint8_t report_id;
+	struct dualshock4_output_report_common common;
+	uint8_t reserved[21];
+};
+
+struct dualsense_output_report_bt;
+
+struct dualsense_output_report_usb;
+
+struct dualsense_output_report_common;
+
+struct dualsense_output_report {
+	uint8_t *data;
+	uint8_t len;
+	struct dualsense_output_report_bt *bt;
+	struct dualsense_output_report_usb *usb;
+	struct dualsense_output_report_common *common;
+};
+
+struct dualsense_output_report_common {
+	uint8_t valid_flag0;
+	uint8_t valid_flag1;
+	uint8_t motor_right;
+	uint8_t motor_left;
+	uint8_t reserved[4];
+	uint8_t mute_button_led;
+	uint8_t power_save_control;
+	uint8_t reserved2[28];
+	uint8_t valid_flag2;
+	uint8_t reserved3[2];
+	uint8_t lightbar_setup;
+	uint8_t led_brightness;
+	uint8_t player_leds;
+	uint8_t lightbar_red;
+	uint8_t lightbar_green;
+	uint8_t lightbar_blue;
+};
+
+struct dualsense_output_report_bt {
+	uint8_t report_id;
+	uint8_t seq_tag;
+	uint8_t tag;
+	struct dualsense_output_report_common common;
+	uint8_t reserved[24];
+	__le32 crc32;
+} __attribute__((packed));
+
+struct dualsense_output_report_usb {
+	uint8_t report_id;
+	struct dualsense_output_report_common common;
+	uint8_t reserved[15];
+};
+
+struct roccat_report {
+	uint8_t *value;
+};
+
+struct roccat_device {
+	unsigned int minor;
+	int report_size;
+	int open;
+	int exist;
+	wait_queue_head_t wait;
+	struct device *dev;
+	struct hid_device *hid;
+	struct list_head readers;
+	struct mutex readers_lock;
+	struct roccat_report cbuf[16];
+	int cbuf_end;
+	struct mutex cbuf_lock;
+};
+
+struct roccat_reader {
+	struct list_head node;
+	struct roccat_device *device;
+	int cbuf_start;
+};
+
+enum roccat_common2_commands {
+	ROCCAT_COMMON_COMMAND_CONTROL = 4,
+};
+
+enum roccat_common2_control_states {
+	ROCCAT_COMMON_CONTROL_STATUS_CRITICAL = 0,
+	ROCCAT_COMMON_CONTROL_STATUS_OK = 1,
+	ROCCAT_COMMON_CONTROL_STATUS_INVALID = 2,
+	ROCCAT_COMMON_CONTROL_STATUS_BUSY = 3,
+	ROCCAT_COMMON_CONTROL_STATUS_CRITICAL_NEW = 4,
+};
+
+struct roccat_common2_control {
+	uint8_t command;
+	uint8_t value;
+	uint8_t request;
+};
+
+struct roccat_common2_device {
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex lock;
+};
+
+enum arvo_commands {
+	ARVO_COMMAND_MODE_KEY = 3,
+	ARVO_COMMAND_BUTTON = 4,
+	ARVO_COMMAND_INFO = 5,
+	ARVO_COMMAND_KEY_MASK = 6,
+	ARVO_COMMAND_ACTUAL_PROFILE = 7,
+};
+
+enum arvo_special_report_event_masks {
+	ARVO_SPECIAL_REPORT_EVENT_MASK_ACTION = 240,
+	ARVO_SPECIAL_REPORT_EVENT_MASK_BUTTON = 15,
+};
+
+enum arvo_special_report_events {
+	ARVO_SPECIAL_REPORT_EVENT_ACTION_PRESS = 16,
+	ARVO_SPECIAL_REPORT_EVENT_ACTION_RELEASE = 0,
+};
+
+enum arvo_roccat_report_action {
+	ARVO_ROCCAT_REPORT_ACTION_RELEASE = 0,
+	ARVO_ROCCAT_REPORT_ACTION_PRESS = 1,
+};
+
+struct arvo_special_report {
+	uint8_t unknown1;
+	uint8_t event;
+	uint8_t unknown2;
+};
+
+struct arvo_device {
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex arvo_lock;
+	int actual_profile;
+};
+
+struct arvo_actual_profile {
+	uint8_t command;
+	uint8_t actual_profile;
+};
+
+struct arvo_roccat_report {
+	uint8_t profile;
+	uint8_t button;
+	uint8_t action;
+};
+
+struct arvo_mode_key {
+	uint8_t command;
+	uint8_t state;
+};
+
+struct arvo_key_mask {
+	uint8_t command;
+	uint8_t key_mask;
+};
+
+enum {
+	ISKU_PROFILE_NUM = 5,
+	ISKU_USB_INTERFACE_PROTOCOL = 0,
+};
+
+enum isku_commands {
+	ISKU_COMMAND_CONTROL = 4,
+	ISKU_COMMAND_ACTUAL_PROFILE = 5,
+	ISKU_COMMAND_KEY_MASK = 7,
+	ISKU_COMMAND_KEYS_FUNCTION = 8,
+	ISKU_COMMAND_KEYS_EASYZONE = 9,
+	ISKU_COMMAND_KEYS_MEDIA = 10,
+	ISKU_COMMAND_KEYS_THUMBSTER = 11,
+	ISKU_COMMAND_KEYS_MACRO = 13,
+	ISKU_COMMAND_MACRO = 14,
+	ISKU_COMMAND_INFO = 15,
+	ISKU_COMMAND_LIGHT = 16,
+	ISKU_COMMAND_RESET = 17,
+	ISKU_COMMAND_KEYS_CAPSLOCK = 19,
+	ISKU_COMMAND_LAST_SET = 20,
+	ISKU_COMMAND_15 = 21,
+	ISKU_COMMAND_TALK = 22,
+	ISKU_COMMAND_TALKFX = 23,
+	ISKU_COMMAND_FIRMWARE_WRITE = 27,
+	ISKU_COMMAND_FIRMWARE_WRITE_CONTROL = 28,
+};
+
+enum isku_report_numbers {
+	ISKU_REPORT_NUMBER_BUTTON = 3,
+};
+
+enum isku_report_button_events {
+	ISKU_REPORT_BUTTON_EVENT_PROFILE = 2,
+};
+
+enum {
+	ISKU_SIZE_CONTROL = 3,
+	ISKU_SIZE_INFO = 6,
+	ISKU_SIZE_KEY_MASK = 6,
+	ISKU_SIZE_KEYS_FUNCTION = 41,
+	ISKU_SIZE_KEYS_EASYZONE = 65,
+	ISKU_SIZE_KEYS_MEDIA = 29,
+	ISKU_SIZE_KEYS_THUMBSTER = 23,
+	ISKU_SIZE_KEYS_MACRO = 35,
+	ISKU_SIZE_KEYS_CAPSLOCK = 6,
+	ISKU_SIZE_LAST_SET = 20,
+	ISKU_SIZE_LIGHT = 16,
+	ISKU_SIZE_MACRO = 2083,
+	ISKU_SIZE_RESET = 3,
+	ISKU_SIZE_TALK = 16,
+	ISKU_SIZE_TALKFX = 16,
+};
+
+struct isku_report_button {
+	uint8_t number;
+	uint8_t zero;
+	uint8_t event;
+	uint8_t data1;
+	uint8_t data2;
+};
+
+struct isku_device {
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex isku_lock;
+	int actual_profile;
+};
+
+struct isku_actual_profile {
+	uint8_t command;
+	uint8_t size;
+	uint8_t actual_profile;
+};
+
+struct isku_roccat_report {
+	uint8_t event;
+	uint8_t data1;
+	uint8_t data2;
+	uint8_t profile;
+};
+
+enum kone_commands {
+	kone_command_profile = 90,
+	kone_command_settings = 346,
+	kone_command_firmware_version = 602,
+	kone_command_weight = 1114,
+	kone_command_calibrate = 1370,
+	kone_command_confirm_write = 1626,
+	kone_command_firmware = 3674,
+};
+
+enum kone_mouse_events {
+	kone_mouse_event_osd_dpi = 160,
+	kone_mouse_event_osd_profile = 176,
+	kone_mouse_event_calibration = 192,
+	kone_mouse_event_call_overlong_macro = 224,
+	kone_mouse_event_multimedia = 225,
+	kone_mouse_event_switch_dpi = 240,
+	kone_mouse_event_switch_profile = 241,
+};
+
+enum kone_keystroke_actions {
+	kone_keystroke_action_press = 0,
+	kone_keystroke_action_release = 1,
+};
+
+struct kone_mouse_event {
+	uint8_t report_number;
+	uint8_t button;
+	uint16_t x;
+	uint16_t y;
+	uint8_t wheel;
+	union {
+		struct {
+			uint8_t tilt;
+			uint8_t unknown;
+			uint8_t event;
+			uint8_t value;
+			uint8_t macro_key;
+		};
+		struct {
+			uint8_t tilt;
+			uint8_t unknown;
+			uint8_t event;
+			uint8_t value;
+			uint8_t macro_key;
+		} wipe;
+	};
+};
+
+struct kone_settings {
+	uint16_t size;
+	uint8_t startup_profile;
+	uint8_t unknown1;
+	uint8_t tcu;
+	uint8_t unknown2[23];
+	uint8_t calibration_data[4];
+	uint8_t unknown3[2];
+	uint16_t checksum;
+};
+
+struct kone_light_info {
+	uint8_t number;
+	uint8_t mod;
+	uint8_t red;
+	uint8_t green;
+	uint8_t blue;
+};
+
+struct kone_keystroke {
+	uint8_t key;
+	uint8_t action;
+	uint16_t period;
+};
+
+struct kone_button_info {
+	uint8_t number;
+	uint8_t type;
+	uint8_t macro_type;
+	uint8_t macro_set_name[16];
+	uint8_t macro_name[16];
+	uint8_t count;
+	struct kone_keystroke keystrokes[20];
+};
+
+struct kone_profile {
+	uint16_t size;
+	uint16_t unused;
+	uint8_t profile;
+	uint16_t main_sensitivity;
+	uint8_t xy_sensitivity_enabled;
+	uint16_t x_sensitivity;
+	uint16_t y_sensitivity;
+	uint8_t dpi_rate;
+	uint8_t startup_dpi;
+	uint8_t polling_rate;
+	uint8_t dcu_flag;
+	uint8_t light_effect_1;
+	uint8_t light_effect_2;
+	uint8_t light_effect_3;
+	uint8_t light_effect_speed;
+	struct kone_light_info light_infos[5];
+	struct kone_button_info button_infos[8];
+	uint16_t checksum;
+} __attribute__((packed));
+
+struct kone_device {
+	int actual_profile;
+	int actual_dpi;
+	struct kone_mouse_event last_mouse_event;
+	long: 0;
+	struct mutex kone_lock;
+	struct kone_profile profiles[5];
+	struct kone_settings settings;
+	long: 0;
+	int firmware_version;
+	int roccat_claimed;
+	int chrdev_minor;
+	long: 0;
+} __attribute__((packed));
+
+struct kone_roccat_report {
+	uint8_t event;
+	uint8_t value;
+	uint8_t key;
+};
+
+enum koneplus_commands {
+	KONEPLUS_COMMAND_ACTUAL_PROFILE = 5,
+	KONEPLUS_COMMAND_CONTROL = 4,
+	KONEPLUS_COMMAND_PROFILE_SETTINGS = 6,
+	KONEPLUS_COMMAND_PROFILE_BUTTONS = 7,
+	KONEPLUS_COMMAND_MACRO = 8,
+	KONEPLUS_COMMAND_INFO = 9,
+	KONEPLUS_COMMAND_TCU = 12,
+	KONEPLUS_COMMAND_TCU_IMAGE = 12,
+	KONEPLUS_COMMAND_E = 14,
+	KONEPLUS_COMMAND_SENSOR = 15,
+	KONEPLUS_COMMAND_TALK = 16,
+	KONEPLUS_COMMAND_FIRMWARE_WRITE = 27,
+	KONEPLUS_COMMAND_FIRMWARE_WRITE_CONTROL = 28,
+};
+
+enum {
+	KONEPLUS_SIZE_ACTUAL_PROFILE = 3,
+	KONEPLUS_SIZE_CONTROL = 3,
+	KONEPLUS_SIZE_FIRMWARE_WRITE = 1026,
+	KONEPLUS_SIZE_INFO = 6,
+	KONEPLUS_SIZE_MACRO = 2082,
+	KONEPLUS_SIZE_PROFILE_SETTINGS = 43,
+	KONEPLUS_SIZE_PROFILE_BUTTONS = 77,
+	KONEPLUS_SIZE_SENSOR = 6,
+	KONEPLUS_SIZE_TALK = 16,
+	KONEPLUS_SIZE_TCU = 4,
+	KONEPLUS_SIZE_TCU_IMAGE = 1028,
+};
+
+enum koneplus_mouse_report_numbers {
+	KONEPLUS_MOUSE_REPORT_NUMBER_HID = 1,
+	KONEPLUS_MOUSE_REPORT_NUMBER_AUDIO = 2,
+	KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON = 3,
+};
+
+enum koneplus_mouse_report_button_types {
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE = 32,
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_QUICKLAUNCH = 96,
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_TIMER = 128,
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI = 176,
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY = 192,
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_MULTIMEDIA = 240,
+	KONEPLUS_MOUSE_REPORT_TALK = 255,
+};
+
+enum koneplus_mouse_report_button_action {
+	KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_PRESS = 0,
+	KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_RELEASE = 1,
+};
+
+enum koneplus_control_requests {
+	KONEPLUS_CONTROL_REQUEST_PROFILE_SETTINGS = 128,
+	KONEPLUS_CONTROL_REQUEST_PROFILE_BUTTONS = 144,
+};
+
+struct koneplus_mouse_report_button {
+	uint8_t report_number;
+	uint8_t zero1;
+	uint8_t type;
+	uint8_t data1;
+	uint8_t data2;
+	uint8_t zero2;
+	uint8_t unknown[2];
+};
+
+struct koneplus_device {
+	int actual_profile;
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex koneplus_lock;
+};
+
+struct koneplus_actual_profile {
+	uint8_t command;
+	uint8_t size;
+	uint8_t actual_profile;
+};
+
+struct koneplus_roccat_report {
+	uint8_t type;
+	uint8_t data1;
+	uint8_t data2;
+	uint8_t profile;
+};
+
+struct koneplus_info {
+	uint8_t command;
+	uint8_t size;
+	uint8_t firmware_version;
+	uint8_t unknown[3];
+};
+
+enum {
+	KONEPURE_MOUSE_REPORT_NUMBER_BUTTON = 3,
+};
+
+enum kovaplus_control_requests {
+	KOVAPLUS_CONTROL_REQUEST_PROFILE_SETTINGS = 16,
+	KOVAPLUS_CONTROL_REQUEST_PROFILE_BUTTONS = 32,
+};
+
+enum kovaplus_commands {
+	KOVAPLUS_COMMAND_ACTUAL_PROFILE = 5,
+	KOVAPLUS_COMMAND_CONTROL = 4,
+	KOVAPLUS_COMMAND_PROFILE_SETTINGS = 6,
+	KOVAPLUS_COMMAND_PROFILE_BUTTONS = 7,
+	KOVAPLUS_COMMAND_INFO = 9,
+	KOVAPLUS_COMMAND_A = 10,
+};
+
+enum {
+	KOVAPLUS_SIZE_CONTROL = 3,
+	KOVAPLUS_SIZE_INFO = 6,
+	KOVAPLUS_SIZE_PROFILE_SETTINGS = 16,
+	KOVAPLUS_SIZE_PROFILE_BUTTONS = 23,
+};
+
+enum kovaplus_mouse_report_numbers {
+	KOVAPLUS_MOUSE_REPORT_NUMBER_MOUSE = 1,
+	KOVAPLUS_MOUSE_REPORT_NUMBER_AUDIO = 2,
+	KOVAPLUS_MOUSE_REPORT_NUMBER_BUTTON = 3,
+	KOVAPLUS_MOUSE_REPORT_NUMBER_KBD = 4,
+};
+
+enum kovaplus_mouse_report_button_types {
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE_1 = 32,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE_2 = 48,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_MACRO = 64,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_SHORTCUT = 80,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_QUICKLAUNCH = 96,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_TIMER = 128,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI = 176,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY = 192,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_MULTIMEDIA = 240,
+};
+
+struct kovaplus_mouse_report_button {
+	uint8_t report_number;
+	uint8_t unknown1;
+	uint8_t type;
+	uint8_t data1;
+	uint8_t data2;
+};
+
+struct kovaplus_profile_settings {
+	uint8_t command;
+	uint8_t size;
+	uint8_t profile_index;
+	uint8_t unknown1;
+	uint8_t sensitivity_x;
+	uint8_t sensitivity_y;
+	uint8_t cpi_levels_enabled;
+	uint8_t cpi_startup_level;
+	uint8_t data[8];
+};
+
+struct kovaplus_profile_buttons {
+	uint8_t command;
+	uint8_t size;
+	uint8_t profile_index;
+	uint8_t data[20];
+};
+
+struct kovaplus_device {
+	int actual_profile;
+	int actual_cpi;
+	int actual_x_sensitivity;
+	int actual_y_sensitivity;
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex kovaplus_lock;
+	struct kovaplus_profile_settings profile_settings[5];
+	struct kovaplus_profile_buttons profile_buttons[5];
+};
+
+struct kovaplus_actual_profile {
+	uint8_t command;
+	uint8_t size;
+	uint8_t actual_profile;
+};
+
+struct kovaplus_roccat_report {
+	uint8_t type;
+	uint8_t profile;
+	uint8_t button;
+	uint8_t data1;
+	uint8_t data2;
+};
+
+struct kovaplus_info {
+	uint8_t command;
+	uint8_t size;
+	uint8_t firmware_version;
+	uint8_t unknown[3];
+};
+
+enum {
+	LUA_SIZE_CONTROL = 8,
+};
+
+enum lua_commands {
+	LUA_COMMAND_CONTROL = 3,
+};
+
+struct lua_device {
+	struct mutex lua_lock;
+};
+
+enum pyra_commands {
+	PYRA_COMMAND_CONTROL = 4,
+	PYRA_COMMAND_SETTINGS = 5,
+	PYRA_COMMAND_PROFILE_SETTINGS = 6,
+	PYRA_COMMAND_PROFILE_BUTTONS = 7,
+	PYRA_COMMAND_INFO = 9,
+	PYRA_COMMAND_B = 11,
+};
+
+enum {
+	PYRA_SIZE_CONTROL = 3,
+	PYRA_SIZE_INFO = 6,
+	PYRA_SIZE_PROFILE_SETTINGS = 13,
+	PYRA_SIZE_PROFILE_BUTTONS = 19,
+	PYRA_SIZE_SETTINGS = 3,
+};
+
+enum pyra_control_requests {
+	PYRA_CONTROL_REQUEST_PROFILE_SETTINGS = 16,
+	PYRA_CONTROL_REQUEST_PROFILE_BUTTONS = 32,
+};
+
+enum pyra_mouse_report_numbers {
+	PYRA_MOUSE_REPORT_NUMBER_HID = 1,
+	PYRA_MOUSE_REPORT_NUMBER_AUDIO = 2,
+	PYRA_MOUSE_REPORT_NUMBER_BUTTON = 3,
+};
+
+enum pyra_mouse_event_button_types {
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_TILT = 16,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_PROFILE_1 = 32,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_PROFILE_2 = 48,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_MACRO = 64,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_SHORTCUT = 80,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_QUICKLAUNCH = 96,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_CPI = 176,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_SENSITIVITY = 192,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_MULTIMEDIA = 240,
+};
+
+enum {
+	PYRA_MOUSE_EVENT_BUTTON_PRESS = 0,
+	PYRA_MOUSE_EVENT_BUTTON_RELEASE = 1,
+};
+
+struct pyra_mouse_event_button {
+	uint8_t report_number;
+	uint8_t unknown;
+	uint8_t type;
+	uint8_t data1;
+	uint8_t data2;
+};
+
+struct pyra_settings {
+	uint8_t command;
+	uint8_t size;
+	uint8_t startup_profile;
+};
+
+struct pyra_profile_settings {
+	uint8_t command;
+	uint8_t size;
+	uint8_t number;
+	uint8_t xysync;
+	uint8_t x_sensitivity;
+	uint8_t y_sensitivity;
+	uint8_t x_cpi;
+	uint8_t y_cpi;
+	uint8_t lightswitch;
+	uint8_t light_effect;
+	uint8_t handedness;
+	uint16_t checksum;
+} __attribute__((packed));
+
+struct pyra_device {
+	int actual_profile;
+	int actual_cpi;
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex pyra_lock;
+	struct pyra_profile_settings profile_settings[5];
+};
+
+struct pyra_roccat_report {
+	uint8_t type;
+	uint8_t value;
+	uint8_t key;
+};
+
+struct pyra_info {
+	uint8_t command;
+	uint8_t size;
+	uint8_t firmware_version;
+	uint8_t unknown1;
+	uint8_t unknown2;
+	uint8_t unknown3;
+};
+
+enum {
+	RYOS_REPORT_NUMBER_SPECIAL = 3,
+	RYOS_USB_INTERFACE_PROTOCOL = 0,
+};
+
+enum {
+	SAVU_MOUSE_REPORT_NUMBER_SPECIAL = 3,
+};
+
+struct savu_mouse_report_special {
+	uint8_t report_number;
+	uint8_t zero;
+	uint8_t type;
+	uint8_t data[2];
+};
+
+struct savu_roccat_report {
+	uint8_t type;
+	uint8_t data[2];
+};
+
+struct sixaxis_rumble {
+	u8 padding;
+	u8 right_duration;
+	u8 right_motor_on;
+	u8 left_duration;
+	u8 left_motor_force;
+};
+
+struct sixaxis_led {
+	u8 time_enabled;
+	u8 duty_length;
+	u8 enabled;
+	u8 duty_off;
+	u8 duty_on;
+};
+
+struct sixaxis_output_report {
+	u8 report_id;
+	struct sixaxis_rumble rumble;
+	u8 padding[4];
+	u8 leds_bitmap;
+	struct sixaxis_led led[4];
+	struct sixaxis_led _reserved;
+};
+
+union sixaxis_output_report_01 {
+	struct sixaxis_output_report data;
+	u8 buf[36];
+};
+
+enum sony_worker {
+	SONY_WORKER_STATE = 0,
+};
+
+struct sony_sc {
+	spinlock_t lock;
+	struct list_head list_node;
+	struct hid_device *hdev;
+	struct input_dev *touchpad;
+	struct input_dev *sensor_dev;
+	struct led_classdev *leds[4];
+	unsigned long quirks;
+	struct work_struct state_worker;
+	void (*send_output_report)(struct sony_sc *);
+	struct power_supply *battery;
+	struct power_supply_desc battery_desc;
+	int device_id;
+	u8 *output_report_dmabuf;
+	u8 left;
+	u8 right;
+	u8 mac_address[6];
+	u8 state_worker_initialized;
+	u8 defer_initialization;
+	u8 battery_capacity;
+	int battery_status;
+	u8 led_state[4];
+	u8 led_delay_on[4];
+	u8 led_delay_off[4];
+	u8 led_count;
+	struct urb *ghl_urb;
+	struct timer_list ghl_poke_timer;
+};
+
+struct motion_output_report_02 {
+	u8 type;
+	u8 zero;
+	u8 r;
+	u8 g;
+	u8 b;
+	u8 zero2;
+	u8 rumble;
+};
+
+struct steam_device {
+	struct list_head list;
+	spinlock_t lock;
+	struct hid_device *hdev;
+	struct hid_device *client_hdev;
+	struct mutex mutex;
+	bool client_opened;
+	struct input_dev __attribute__((btf_type_tag("rcu"))) *input;
+	unsigned long quirks;
+	struct work_struct work_connect;
+	bool connected;
+	char serial_no[11];
+	struct power_supply_desc battery_desc;
+	struct power_supply __attribute__((btf_type_tag("rcu"))) *battery;
+	u8 battery_charge;
+	u16 voltage;
+	struct delayed_work heartbeat;
+	struct work_struct rumble_work;
+	u16 rumble_left;
+	u16 rumble_right;
+};
+
+enum uclogic_params_pen_inrange {
+	UCLOGIC_PARAMS_PEN_INRANGE_NORMAL = 0,
+	UCLOGIC_PARAMS_PEN_INRANGE_INVERTED = 1,
+	UCLOGIC_PARAMS_PEN_INRANGE_NONE = 2,
+};
+
+struct uclogic_params_pen_subreport {
+	__u8 value;
+	__u8 id;
+};
+
+struct uclogic_params_pen {
+	bool usage_invalid;
+	__u8 *desc_ptr;
+	unsigned int desc_size;
+	unsigned int id;
+	struct uclogic_params_pen_subreport subreport_list[3];
+	enum uclogic_params_pen_inrange inrange;
+	bool fragmented_hires;
+	bool tilt_y_flipped;
+};
+
+struct uclogic_params_frame {
+	__u8 *desc_ptr;
+	unsigned int desc_size;
+	unsigned int id;
+	const char *suffix;
+	unsigned int re_lsb;
+	unsigned int dev_id_byte;
+	unsigned int touch_byte;
+	__s8 touch_flip_at;
+	__s8 touch_max;
+	unsigned int bitmap_dial_byte;
+};
+
+struct uclogic_raw_event_hook;
+
+struct uclogic_params {
+	bool invalid;
+	__u8 *desc_ptr;
+	unsigned int desc_size;
+	struct uclogic_params_pen pen;
+	struct uclogic_params_frame frame_list[3];
+	struct uclogic_raw_event_hook *event_hooks;
+};
+
+struct uclogic_drvdata {
+	struct uclogic_params params;
+	__u8 *desc_ptr;
+	unsigned int desc_size;
+	struct input_dev *pen_input;
+	struct timer_list inrange_timer;
+	u8 re_state;
+	unsigned long quirks;
+};
+
+struct uclogic_raw_event_hook {
+	struct hid_device *hdev;
+	__u8 *event;
+	size_t size;
+	struct work_struct work;
+	struct list_head list;
+};
+
+enum uclogic_rdesc_ph_id {
+	UCLOGIC_RDESC_PEN_PH_ID_X_LM = 0,
+	UCLOGIC_RDESC_PEN_PH_ID_X_PM = 1,
+	UCLOGIC_RDESC_PEN_PH_ID_Y_LM = 2,
+	UCLOGIC_RDESC_PEN_PH_ID_Y_PM = 3,
+	UCLOGIC_RDESC_PEN_PH_ID_PRESSURE_LM = 4,
+	UCLOGIC_RDESC_FRAME_PH_ID_UM = 5,
+	UCLOGIC_RDESC_PH_ID_NUM = 6,
+};
+
+enum uclogic_params_frame_type {
+	UCLOGIC_PARAMS_FRAME_BUTTONS = 0,
+	UCLOGIC_PARAMS_FRAME_DIAL = 1,
+	UCLOGIC_PARAMS_FRAME_MOUSE = 2,
+};
+
+struct wacom_features {
+	const char *name;
+	int x_max;
+	int y_max;
+	int pressure_max;
+	int distance_max;
+	int type;
+	int x_resolution;
+	int y_resolution;
+	int numbered_buttons;
+	int offset_left;
+	int offset_right;
+	int offset_top;
+	int offset_bottom;
+	int device_type;
+	int x_phy;
+	int y_phy;
+	unsigned int unit;
+	int unitExpo;
+	int x_fuzz;
+	int y_fuzz;
+	int pressure_fuzz;
+	int distance_fuzz;
+	int tilt_fuzz;
+	unsigned int quirks;
+	unsigned int touch_max;
+	int oVid;
+	int oPid;
+	int pktlen;
+	bool check_for_hid_type;
+	int hid_type;
+};
+
+enum {
+	PENPARTNER = 0,
+	GRAPHIRE = 1,
+	GRAPHIRE_BT = 2,
+	WACOM_G4 = 3,
+	PTU = 4,
+	PL = 5,
+	DTU = 6,
+	DTUS = 7,
+	DTUSX = 8,
+	INTUOS = 9,
+	INTUOS3S = 10,
+	INTUOS3 = 11,
+	INTUOS3L = 12,
+	INTUOS4S = 13,
+	INTUOS4 = 14,
+	INTUOS4WL = 15,
+	INTUOS4L = 16,
+	INTUOS5S = 17,
+	INTUOS5 = 18,
+	INTUOS5L = 19,
+	INTUOSPS = 20,
+	INTUOSPM = 21,
+	INTUOSPL = 22,
+	INTUOSP2_BT = 23,
+	INTUOSP2S_BT = 24,
+	INTUOSHT3_BT = 25,
+	WACOM_21UX2 = 26,
+	WACOM_22HD = 27,
+	DTK = 28,
+	WACOM_24HD = 29,
+	WACOM_27QHD = 30,
+	CINTIQ_HYBRID = 31,
+	CINTIQ_COMPANION_2 = 32,
+	CINTIQ = 33,
+	WACOM_BEE = 34,
+	WACOM_13HD = 35,
+	WACOM_MO = 36,
+	BAMBOO_PEN = 37,
+	INTUOSHT = 38,
+	INTUOSHT2 = 39,
+	BAMBOO_TOUCH = 40,
+	BAMBOO_PT = 41,
+	WACOM_24HDT = 42,
+	WACOM_27QHDT = 43,
+	BAMBOO_PAD = 44,
+	WIRELESS = 45,
+	REMOTE = 46,
+	TABLETPC = 47,
+	TABLETPCE = 48,
+	TABLETPC2FG = 49,
+	MTSCREEN = 50,
+	MTTPC = 51,
+	MTTPC_B = 52,
+	HID_GENERIC = 53,
+	BOOTLOADER = 54,
+	MAX_TYPE = 55,
+};
+
+enum wacom_worker {
+	WACOM_WORKER_WIRELESS = 0,
+	WACOM_WORKER_BATTERY = 1,
+	WACOM_WORKER_REMOTE = 2,
+	WACOM_WORKER_MODE_CHANGE = 3,
+};
+
+struct hid_data {
+	__s16 inputmode;
+	__s16 inputmode_index;
+	bool sense_state;
+	bool inrange_state;
+	bool invert_state;
+	bool tipswitch;
+	bool barrelswitch;
+	bool barrelswitch2;
+	bool barrelswitch3;
+	bool serialhi;
+	bool confidence;
+	int x;
+	int y;
+	int pressure;
+	int width;
+	int height;
+	int id;
+	int cc_report;
+	int cc_index;
+	int cc_value_index;
+	int last_slot_field;
+	int num_expected;
+	int num_received;
+	int bat_status;
+	int battery_capacity;
+	int bat_charging;
+	int bat_connected;
+	int ps_connected;
+	bool pad_input_event_flag;
+	unsigned short sequence_number;
+	ktime_t time_delayed;
+};
+
+struct wacom_shared;
+
+struct kfifo_rec_ptr_2;
+
+struct wacom_wac {
+	char name[64];
+	char pen_name[64];
+	char touch_name[64];
+	char pad_name[64];
+	unsigned char data[361];
+	int tool[2];
+	int id[2];
+	__u64 serial[2];
+	bool probe_complete;
+	bool reporting_data;
+	struct wacom_features features;
+	struct wacom_shared *shared;
+	struct input_dev *pen_input;
+	struct input_dev *touch_input;
+	struct input_dev *pad_input;
+	struct kfifo_rec_ptr_2 *pen_fifo;
+	int pid;
+	int num_contacts_left;
+	u8 bt_features;
+	u8 bt_high_speed;
+	int mode_report;
+	int mode_value;
+	struct hid_data hid_data;
+	bool has_mute_touch_switch;
+	bool is_soft_touch_switch;
+	bool has_mode_change;
+	bool is_direct_mode;
+	bool is_invalid_bt_frame;
+};
+
+struct wacom_group_leds;
+
+struct wacom_leds {
+	struct wacom_group_leds *groups;
+	unsigned int count;
+	u8 llv;
+	u8 hlv;
+	u8 img_lum;
+	u8 max_llv;
+	u8 max_hlv;
+};
+
+struct wacom;
+
+struct wacom_battery {
+	struct wacom *wacom;
+	struct power_supply_desc bat_desc;
+	struct power_supply *battery;
+	char bat_name[64];
+	int bat_status;
+	int battery_capacity;
+	int bat_charging;
+	int bat_connected;
+	int ps_connected;
+};
+
+struct wacom_remote;
+
+struct wacom {
+	struct usb_device *usbdev;
+	struct usb_interface *intf;
+	struct wacom_wac wacom_wac;
+	struct hid_device *hdev;
+	struct mutex lock;
+	struct work_struct wireless_work;
+	struct work_struct battery_work;
+	struct work_struct remote_work;
+	struct delayed_work init_work;
+	struct wacom_remote *remote;
+	struct work_struct mode_change_work;
+	struct timer_list idleprox_timer;
+	bool generic_has_leds;
+	struct wacom_leds led;
+	struct wacom_battery battery;
+	bool resources;
+};
+
+struct wacom_shared {
+	bool stylus_in_proximity;
+	bool touch_down;
+	unsigned int touch_max;
+	int type;
+	struct input_dev *touch_input;
+	struct hid_device *pen;
+	struct hid_device *touch;
+	bool has_mute_touch_switch;
+	bool is_touch_on;
+};
+
+struct kfifo_rec_ptr_2 {
+	union {
+		struct __kfifo kfifo;
+		unsigned char *type;
+		const unsigned char *const_type;
+		char (*rectype)[2];
+		void *ptr;
+		const void *ptr_const;
+	};
+	unsigned char buf[0];
+};
+
+struct wacom_remote {
+	spinlock_t remote_lock;
+	struct kfifo remote_fifo;
+	struct kobject *remote_dir;
+	struct {
+		struct attribute_group group;
+		u32 serial;
+		struct input_dev *input;
+		bool registered;
+		struct wacom_battery battery;
+		ktime_t active_time;
+	} remotes[5];
+};
+
+struct wacom_led;
+
+struct wacom_group_leds {
+	u8 select;
+	struct wacom_led *leds;
+	unsigned int count;
+	struct device *dev;
+};
+
+struct wacom_led {
+	struct led_classdev cdev;
+	struct led_trigger trigger;
+	struct wacom *wacom;
+	unsigned int group;
+	unsigned int id;
+	u8 llv;
+	u8 hlv;
+	bool held;
+};
+
+struct wacom_remote_work_data {
+	struct {
+		u32 serial;
+	} remote[5];
+};
+
+struct wacom_hdev_data {
+	struct list_head list;
+	struct kref kref;
+	struct hid_device *dev;
+	struct wacom_shared shared;
+};
+
+struct wacom_sysfs_group_devres {
+	const struct attribute_group *group;
+	struct kobject *root;
+};
+
+struct wiimote_data;
+
+struct wiiproto_handler {
+	__u8 id;
+	size_t size;
+	void (*func)(struct wiimote_data *, const __u8 *);
+};
+
+struct wiimote_buf {
+	__u8 data[16384];
+	size_t size;
+};
+
+struct wiimote_queue {
+	spinlock_t lock;
+	struct work_struct worker;
+	__u8 head;
+	__u8 tail;
+	struct wiimote_buf outq[32];
+};
+
+struct wiimote_state {
+	spinlock_t lock;
+	__u32 flags;
+	__u8 accel_split[2];
+	__u8 drm;
+	__u8 devtype;
+	__u8 exttype;
+	__u8 mp;
+	struct mutex sync;
+	struct completion ready;
+	int cmd;
+	__u32 opt;
+	__u8 cmd_battery;
+	__u8 cmd_err;
+	__u8 *cmd_read_buf;
+	__u8 cmd_read_size;
+	__u16 calib_bboard[12];
+	__s16 calib_pro_sticks[4];
+	__u8 pressure_drums[7];
+	__u8 cache_rumble;
+};
+
+struct wiimote_debug;
+
+struct wiimote_data {
+	struct hid_device *hdev;
+	struct input_dev *input;
+	struct work_struct rumble_worker;
+	struct led_classdev *leds[4];
+	struct input_dev *accel;
+	struct input_dev *ir;
+	struct power_supply *battery;
+	struct power_supply_desc battery_desc;
+	struct input_dev *mp;
+	struct timer_list timer;
+	struct wiimote_debug *debug;
+	union {
+		struct input_dev *input;
+	} extension;
+	struct wiimote_queue queue;
+	struct wiimote_state state;
+	struct work_struct init_worker;
+};
+
+enum wiiproto_reqs {
+	WIIPROTO_REQ_NULL = 0,
+	WIIPROTO_REQ_RUMBLE = 16,
+	WIIPROTO_REQ_LED = 17,
+	WIIPROTO_REQ_DRM = 18,
+	WIIPROTO_REQ_IR1 = 19,
+	WIIPROTO_REQ_SREQ = 21,
+	WIIPROTO_REQ_WMEM = 22,
+	WIIPROTO_REQ_RMEM = 23,
+	WIIPROTO_REQ_IR2 = 26,
+	WIIPROTO_REQ_STATUS = 32,
+	WIIPROTO_REQ_DATA = 33,
+	WIIPROTO_REQ_RETURN = 34,
+	WIIPROTO_REQ_DRM_K = 48,
+	WIIPROTO_REQ_DRM_KA = 49,
+	WIIPROTO_REQ_DRM_KE = 50,
+	WIIPROTO_REQ_DRM_KAI = 51,
+	WIIPROTO_REQ_DRM_KEE = 52,
+	WIIPROTO_REQ_DRM_KAE = 53,
+	WIIPROTO_REQ_DRM_KIE = 54,
+	WIIPROTO_REQ_DRM_KAIE = 55,
+	WIIPROTO_REQ_DRM_E = 61,
+	WIIPROTO_REQ_DRM_SKAI1 = 62,
+	WIIPROTO_REQ_DRM_SKAI2 = 63,
+	WIIPROTO_REQ_MAX = 64,
+};
+
+enum wiimote_devtype {
+	WIIMOTE_DEV_PENDING = 0,
+	WIIMOTE_DEV_UNKNOWN = 1,
+	WIIMOTE_DEV_GENERIC = 2,
+	WIIMOTE_DEV_GEN10 = 3,
+	WIIMOTE_DEV_GEN20 = 4,
+	WIIMOTE_DEV_BALANCE_BOARD = 5,
+	WIIMOTE_DEV_PRO_CONTROLLER = 6,
+	WIIMOTE_DEV_NUM = 7,
+};
+
+enum wiimote_exttype {
+	WIIMOTE_EXT_NONE = 0,
+	WIIMOTE_EXT_UNKNOWN = 1,
+	WIIMOTE_EXT_NUNCHUK = 2,
+	WIIMOTE_EXT_CLASSIC_CONTROLLER = 3,
+	WIIMOTE_EXT_BALANCE_BOARD = 4,
+	WIIMOTE_EXT_PRO_CONTROLLER = 5,
+	WIIMOTE_EXT_DRUMS = 6,
+	WIIMOTE_EXT_GUITAR = 7,
+	WIIMOTE_EXT_TURNTABLE = 8,
+	WIIMOTE_EXT_NUM = 9,
+};
+
+enum wiimod_module {
+	WIIMOD_KEYS = 0,
+	WIIMOD_RUMBLE = 1,
+	WIIMOD_BATTERY = 2,
+	WIIMOD_LED1 = 3,
+	WIIMOD_LED2 = 4,
+	WIIMOD_LED3 = 5,
+	WIIMOD_LED4 = 6,
+	WIIMOD_ACCEL = 7,
+	WIIMOD_IR = 8,
+	WIIMOD_BUILTIN_MP = 9,
+	WIIMOD_NO_MP = 10,
+	WIIMOD_NUM = 11,
+	WIIMOD_NULL = 11,
+};
+
+enum wiimote_mptype {
+	WIIMOTE_MP_NONE = 0,
+	WIIMOTE_MP_UNKNOWN = 1,
+	WIIMOTE_MP_SINGLE = 2,
+	WIIMOTE_MP_PASSTHROUGH_NUNCHUK = 3,
+	WIIMOTE_MP_PASSTHROUGH_CLASSIC = 4,
+};
+
+struct wiimod_ops {
+	__u16 flags;
+	unsigned long arg;
+	int (*probe)(const struct wiimod_ops *, struct wiimote_data *);
+	void (*remove)(const struct wiimod_ops *, struct wiimote_data *);
+	void (*in_keys)(struct wiimote_data *, const __u8 *);
+	void (*in_accel)(struct wiimote_data *, const __u8 *);
+	void (*in_ir)(struct wiimote_data *, const __u8 *, bool, unsigned int);
+	void (*in_mp)(struct wiimote_data *, const __u8 *);
+	void (*in_ext)(struct wiimote_data *, const __u8 *);
+};
+
+enum wiiproto_keys {
+	WIIPROTO_KEY_LEFT = 0,
+	WIIPROTO_KEY_RIGHT = 1,
+	WIIPROTO_KEY_UP = 2,
+	WIIPROTO_KEY_DOWN = 3,
+	WIIPROTO_KEY_PLUS = 4,
+	WIIPROTO_KEY_MINUS = 5,
+	WIIPROTO_KEY_ONE = 6,
+	WIIPROTO_KEY_TWO = 7,
+	WIIPROTO_KEY_A = 8,
+	WIIPROTO_KEY_B = 9,
+	WIIPROTO_KEY_HOME = 10,
+	WIIPROTO_KEY_COUNT = 11,
+};
+
+enum wiimod_nunchuk_keys {
+	WIIMOD_NUNCHUK_KEY_C = 0,
+	WIIMOD_NUNCHUK_KEY_Z = 1,
+	WIIMOD_NUNCHUK_KEY_NUM = 2,
+};
+
+enum wiimod_classic_keys {
+	WIIMOD_CLASSIC_KEY_A = 0,
+	WIIMOD_CLASSIC_KEY_B = 1,
+	WIIMOD_CLASSIC_KEY_X = 2,
+	WIIMOD_CLASSIC_KEY_Y = 3,
+	WIIMOD_CLASSIC_KEY_ZL = 4,
+	WIIMOD_CLASSIC_KEY_ZR = 5,
+	WIIMOD_CLASSIC_KEY_PLUS = 6,
+	WIIMOD_CLASSIC_KEY_MINUS = 7,
+	WIIMOD_CLASSIC_KEY_HOME = 8,
+	WIIMOD_CLASSIC_KEY_LEFT = 9,
+	WIIMOD_CLASSIC_KEY_RIGHT = 10,
+	WIIMOD_CLASSIC_KEY_UP = 11,
+	WIIMOD_CLASSIC_KEY_DOWN = 12,
+	WIIMOD_CLASSIC_KEY_LT = 13,
+	WIIMOD_CLASSIC_KEY_RT = 14,
+	WIIMOD_CLASSIC_KEY_NUM = 15,
+};
+
+enum wiimod_pro_keys {
+	WIIMOD_PRO_KEY_A = 0,
+	WIIMOD_PRO_KEY_B = 1,
+	WIIMOD_PRO_KEY_X = 2,
+	WIIMOD_PRO_KEY_Y = 3,
+	WIIMOD_PRO_KEY_PLUS = 4,
+	WIIMOD_PRO_KEY_MINUS = 5,
+	WIIMOD_PRO_KEY_HOME = 6,
+	WIIMOD_PRO_KEY_LEFT = 7,
+	WIIMOD_PRO_KEY_RIGHT = 8,
+	WIIMOD_PRO_KEY_UP = 9,
+	WIIMOD_PRO_KEY_DOWN = 10,
+	WIIMOD_PRO_KEY_TL = 11,
+	WIIMOD_PRO_KEY_TR = 12,
+	WIIMOD_PRO_KEY_ZL = 13,
+	WIIMOD_PRO_KEY_ZR = 14,
+	WIIMOD_PRO_KEY_THUMBL = 15,
+	WIIMOD_PRO_KEY_THUMBR = 16,
+	WIIMOD_PRO_KEY_NUM = 17,
+};
+
+enum wiimod_guitar_keys {
+	WIIMOD_GUITAR_KEY_G = 0,
+	WIIMOD_GUITAR_KEY_R = 1,
+	WIIMOD_GUITAR_KEY_Y = 2,
+	WIIMOD_GUITAR_KEY_B = 3,
+	WIIMOD_GUITAR_KEY_O = 4,
+	WIIMOD_GUITAR_KEY_UP = 5,
+	WIIMOD_GUITAR_KEY_DOWN = 6,
+	WIIMOD_GUITAR_KEY_PLUS = 7,
+	WIIMOD_GUITAR_KEY_MINUS = 8,
+	WIIMOD_GUITAR_KEY_NUM = 9,
+};
+
+enum wiimod_turntable_keys {
+	WIIMOD_TURNTABLE_KEY_G_RIGHT = 0,
+	WIIMOD_TURNTABLE_KEY_R_RIGHT = 1,
+	WIIMOD_TURNTABLE_KEY_B_RIGHT = 2,
+	WIIMOD_TURNTABLE_KEY_G_LEFT = 3,
+	WIIMOD_TURNTABLE_KEY_R_LEFT = 4,
+	WIIMOD_TURNTABLE_KEY_B_LEFT = 5,
+	WIIMOD_TURNTABLE_KEY_EUPHORIA = 6,
+	WIIMOD_TURNTABLE_KEY_PLUS = 7,
+	WIIMOD_TURNTABLE_KEY_MINUS = 8,
+	WIIMOD_TURNTABLE_KEY_NUM = 9,
+};
+
+struct wiimote_debug {
+	struct wiimote_data *wdata;
+	struct dentry *eeprom;
+	struct dentry *drm;
+};
+
+struct hid_control_fifo {
+	unsigned char dir;
+	struct hid_report *report;
+	char *raw_report;
+};
+
+struct hid_output_fifo {
+	struct hid_report *report;
+	char *raw_report;
+};
+
+struct usbhid_device {
+	struct hid_device *hid;
+	struct usb_interface *intf;
+	int ifnum;
+	unsigned int bufsize;
+	struct urb *urbin;
+	char *inbuf;
+	dma_addr_t inbuf_dma;
+	struct urb *urbctrl;
+	struct usb_ctrlrequest *cr;
+	struct hid_control_fifo ctrl[256];
+	unsigned char ctrlhead;
+	unsigned char ctrltail;
+	char *ctrlbuf;
+	dma_addr_t ctrlbuf_dma;
+	unsigned long last_ctrl;
+	struct urb *urbout;
+	struct hid_output_fifo out[256];
+	unsigned char outhead;
+	unsigned char outtail;
+	char *outbuf;
+	dma_addr_t outbuf_dma;
+	unsigned long last_out;
+	struct mutex mutex;
+	spinlock_t lock;
+	unsigned long iofl;
+	struct timer_list io_retry;
+	unsigned long stop_retry;
+	unsigned int retry_delay;
+	struct work_struct reset_work;
+	wait_queue_head_t wait;
+};
+
+struct hiddev_usage_ref {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 field_index;
+	__u32 usage_index;
+	__u32 usage_code;
+	__s32 value;
+};
+
+struct hiddev_list {
+	struct hiddev_usage_ref buffer[2048];
+	int head;
+	int tail;
+	unsigned int flags;
+	struct fasync_struct *fasync;
+	struct hiddev *hiddev;
+	struct list_head node;
+	struct mutex thread_lock;
+};
+
+struct hiddev_report_info {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 num_fields;
+};
+
+struct hiddev_event {
+	unsigned int hid;
+	int value;
+};
+
+struct hiddev_collection_info {
+	__u32 index;
+	__u32 type;
+	__u32 usage;
+	__u32 level;
+};
+
+struct hiddev_field_info {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 field_index;
+	__u32 maxusage;
+	__u32 flags;
+	__u32 physical;
+	__u32 logical;
+	__u32 application;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__u32 unit_exponent;
+	__u32 unit;
+};
+
+struct hiddev_devinfo {
+	__u32 bustype;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 ifnum;
+	__s16 vendor;
+	__s16 product;
+	__s16 version;
+	__u32 num_applications;
+};
+
+struct hiddev_usage_ref_multi {
+	struct hiddev_usage_ref uref;
+	__u32 num_values;
+	__s32 values[1024];
+};
+
+struct alias_prop {
+	struct list_head link;
+	const char *alias;
+	struct device_node *np;
+	int id;
+	char stem[0];
+};
+
+struct supplier_bindings {
+	struct device_node * (*parse_prop)(struct device_node *, const char *, int);
+	struct device_node * (*get_con_dev)(struct device_node *);
+	bool optional;
+};
+
+struct of_bus___2 {
+	void (*count_cells)(const void *, int, int *, int *);
+	u64 (*map)(__be32 *, const __be32 *, int, int, int);
+	int (*translate)(__be32 *, u64, int);
+};
+
+struct of_bus {
+	const char *name;
+	const char *addresses;
+	int (*match)(struct device_node *);
+	void (*count_cells)(struct device_node *, int *, int *);
+	u64 (*map)(__be32 *, const __be32 *, int, int, int);
+	int (*translate)(__be32 *, u64, int);
+	bool has_flags;
+	unsigned int (*get_flags)(const __be32 *);
+};
+
+struct of_intc_desc {
+	struct list_head list;
+	of_irq_init_cb_t irq_init_cb;
+	struct device_node *dev;
+	struct device_node *interrupt_parent;
+};
+
+struct rmem_assigned_device {
+	struct device *dev;
+	struct reserved_mem *rmem;
+	struct list_head list;
+};
+
+typedef int (*reservedmem_of_init_fn)(struct reserved_mem *);
+
+struct vsock_sock;
+
+struct sockaddr_vm;
+
+struct vsock_transport_recv_notify_data;
+
+struct vsock_transport_send_notify_data;
+
+struct vsock_transport {
+	struct module *module;
+	int (*init)(struct vsock_sock *, struct vsock_sock *);
+	void (*destruct)(struct vsock_sock *);
+	void (*release)(struct vsock_sock *);
+	int (*cancel_pkt)(struct vsock_sock *);
+	int (*connect)(struct vsock_sock *);
+	int (*dgram_bind)(struct vsock_sock *, struct sockaddr_vm *);
+	int (*dgram_dequeue)(struct vsock_sock *, struct msghdr *, size_t, int);
+	int (*dgram_enqueue)(struct vsock_sock *, struct sockaddr_vm *, struct msghdr *, size_t);
+	bool (*dgram_allow)(u32, u32);
+	ssize_t (*stream_dequeue)(struct vsock_sock *, struct msghdr *, size_t, int);
+	ssize_t (*stream_enqueue)(struct vsock_sock *, struct msghdr *, size_t);
+	s64 (*stream_has_data)(struct vsock_sock *);
+	s64 (*stream_has_space)(struct vsock_sock *);
+	u64 (*stream_rcvhiwat)(struct vsock_sock *);
+	bool (*stream_is_active)(struct vsock_sock *);
+	bool (*stream_allow)(u32, u32);
+	ssize_t (*seqpacket_dequeue)(struct vsock_sock *, struct msghdr *, int);
+	int (*seqpacket_enqueue)(struct vsock_sock *, struct msghdr *, size_t);
+	bool (*seqpacket_allow)(u32);
+	u32 (*seqpacket_has_data)(struct vsock_sock *);
+	int (*notify_poll_in)(struct vsock_sock *, size_t, bool *);
+	int (*notify_poll_out)(struct vsock_sock *, size_t, bool *);
+	int (*notify_recv_init)(struct vsock_sock *, size_t, struct vsock_transport_recv_notify_data *);
+	int (*notify_recv_pre_block)(struct vsock_sock *, size_t, struct vsock_transport_recv_notify_data *);
+	int (*notify_recv_pre_dequeue)(struct vsock_sock *, size_t, struct vsock_transport_recv_notify_data *);
+	int (*notify_recv_post_dequeue)(struct vsock_sock *, size_t, ssize_t, bool, struct vsock_transport_recv_notify_data *);
+	int (*notify_send_init)(struct vsock_sock *, struct vsock_transport_send_notify_data *);
+	int (*notify_send_pre_block)(struct vsock_sock *, struct vsock_transport_send_notify_data *);
+	int (*notify_send_pre_enqueue)(struct vsock_sock *, struct vsock_transport_send_notify_data *);
+	int (*notify_send_post_enqueue)(struct vsock_sock *, ssize_t, struct vsock_transport_send_notify_data *);
+	void (*notify_buffer_size)(struct vsock_sock *, u64 *);
+	int (*notify_set_rcvlowat)(struct vsock_sock *, int);
+	int (*shutdown)(struct vsock_sock *, int);
+	u32 (*get_local_cid)();
+	int (*read_skb)(struct vsock_sock *, skb_read_actor_t);
+};
+
+struct virtio_transport {
+	struct vsock_transport transport;
+	int (*send_pkt)(struct sk_buff *);
+};
+
+struct sockaddr_vm {
+	__kernel_sa_family_t svm_family;
+	unsigned short svm_reserved1;
+	unsigned int svm_port;
+	unsigned int svm_cid;
+	__u8 svm_flags;
+	unsigned char svm_zero[3];
+};
+
+struct vsock_sock {
+	struct sock sk;
+	const struct vsock_transport *transport;
+	struct sockaddr_vm local_addr;
+	struct sockaddr_vm remote_addr;
+	struct list_head bound_table;
+	struct list_head connected_table;
+	bool trusted;
+	bool cached_peer_allow_dgram;
+	u32 cached_peer;
+	const struct cred *owner;
+	long connect_timeout;
+	struct sock *listener;
+	struct list_head pending_links;
+	struct list_head accept_queue;
+	bool rejected;
+	struct delayed_work connect_work;
+	struct delayed_work pending_work;
+	struct delayed_work close_work;
+	bool close_work_scheduled;
+	u32 peer_shutdown;
+	bool sent_request;
+	bool ignore_connecting_rst;
+	u64 buffer_size;
+	u64 buffer_min_size;
+	u64 buffer_max_size;
+	void *trans;
+};
+
+struct vsock_transport_recv_notify_data {
+	u64 data1;
+	u64 data2;
+	bool notify_on_block;
+};
+
+struct vsock_transport_send_notify_data {
+	u64 data1;
+	u64 data2;
+};
+
+enum {
+	VHOST_VSOCK_FEATURES = 13908312066ULL,
+};
+
+enum {
+	VHOST_VSOCK_BACKEND_FEATURES = 2,
+};
+
+enum {
+	VSOCK_VQ_RX = 0,
+	VSOCK_VQ_TX = 1,
+	VSOCK_VQ_EVENT = 2,
+	VSOCK_VQ_MAX = 3,
+};
+
+enum virtio_vsock_rw {
+	VIRTIO_VSOCK_SEQ_EOM = 1,
+	VIRTIO_VSOCK_SEQ_EOR = 2,
+};
+
+struct vhost_virtqueue;
+
+struct vhost_iotlb;
+
+struct vhost_iotlb_msg;
+
+struct vhost_dev {
+	struct mm_struct *mm;
+	struct mutex mutex;
+	struct vhost_virtqueue **vqs;
+	int nvqs;
+	struct eventfd_ctx *log_ctx;
+	struct vhost_iotlb *umem;
+	struct vhost_iotlb *iotlb;
+	spinlock_t iotlb_lock;
+	struct list_head read_list;
+	struct list_head pending_list;
+	wait_queue_head_t wait;
+	int iov_limit;
+	int weight;
+	int byte_weight;
+	struct xarray worker_xa;
+	bool use_worker;
+	int (*msg_handler)(struct vhost_dev *, u32, struct vhost_iotlb_msg *);
+};
+
+struct vhost_vring_call {
+	struct eventfd_ctx *ctx;
+	struct irq_bypass_producer producer;
+};
+
+struct vhost_work;
+
+typedef void (*vhost_work_fn_t)(struct vhost_work *);
+
+struct vhost_work {
+	struct llist_node node;
+	vhost_work_fn_t fn;
+	unsigned long flags;
+};
+
+struct vhost_poll {
+	poll_table table;
+	wait_queue_head_t *wqh;
+	wait_queue_entry_t wait;
+	struct vhost_work work;
+	__poll_t mask;
+	struct vhost_dev *dev;
+	struct vhost_virtqueue *vq;
+};
+
+struct vhost_worker;
+
+struct vhost_iotlb_map;
+
+struct vhost_log;
+
+struct vhost_virtqueue {
+	struct vhost_dev *dev;
+	struct vhost_worker __attribute__((btf_type_tag("rcu"))) *worker;
+	struct mutex mutex;
+	unsigned int num;
+	vring_desc_t __attribute__((btf_type_tag("user"))) *desc;
+	vring_avail_t __attribute__((btf_type_tag("user"))) *avail;
+	vring_used_t __attribute__((btf_type_tag("user"))) *used;
+	const struct vhost_iotlb_map *meta_iotlb[3];
+	struct file *kick;
+	struct vhost_vring_call call_ctx;
+	struct eventfd_ctx *error_ctx;
+	struct eventfd_ctx *log_ctx;
+	struct vhost_poll poll;
+	vhost_work_fn_t handle_kick;
+	u16 last_avail_idx;
+	u16 avail_idx;
+	u16 last_used_idx;
+	u16 used_flags;
+	u16 signalled_used;
+	bool signalled_used_valid;
+	bool log_used;
+	u64 log_addr;
+	struct iovec iov[1024];
+	struct iovec iotlb_iov[64];
+	struct iovec *indirect;
+	struct vring_used_elem *heads;
+	struct vhost_iotlb *umem;
+	struct vhost_iotlb *iotlb;
+	void *private_data;
+	u64 acked_features;
+	u64 acked_backend_features;
+	void __attribute__((btf_type_tag("user"))) *log_base;
+	struct vhost_log *log;
+	struct iovec log_iov[64];
+	bool is_le;
+	u32 busyloop_timeout;
+};
+
+struct vhost_vsock {
+	struct vhost_dev dev;
+	struct vhost_virtqueue vqs[2];
+	struct hlist_node hash;
+	struct vhost_work send_pkt_work;
+	struct sk_buff_head send_pkt_queue;
+	atomic_t queued_replies;
+	u32 guest_cid;
+	bool seqpacket_allow;
+};
+
+struct vhost_worker {
+	struct vhost_task *vtsk;
+	struct mutex mutex;
+	struct llist_head work_list;
+	u64 kcov_handle;
+	u32 id;
+	int attachment_cnt;
+};
+
+struct vhost_iotlb_map {
+	struct rb_node rb;
+	struct list_head link;
+	u64 start;
+	u64 last;
+	u64 size;
+	u64 addr;
+	u32 perm;
+	u32 flags_padding;
+	u64 __subtree_last;
+	void *opaque;
+};
+
+struct vhost_iotlb {
+	struct rb_root_cached root;
+	struct list_head list;
+	unsigned int limit;
+	unsigned int nmaps;
+	unsigned int flags;
+};
+
+struct vhost_log {
+	u64 addr;
+	u64 len;
+};
+
+struct vhost_iotlb_msg {
+	__u64 iova;
+	__u64 size;
+	__u64 uaddr;
+	__u8 perm;
+	__u8 type;
+};
+
+struct virtio_vsock_hdr {
+	__le64 src_cid;
+	__le64 dst_cid;
+	__le32 src_port;
+	__le32 dst_port;
+	__le32 len;
+	__le16 type;
+	__le16 op;
+	__le32 flags;
+	__le32 buf_alloc;
+	__le32 fwd_cnt;
+} __attribute__((packed));
+
+struct virtio_vsock_skb_cb {
+	bool reply;
+	bool tap_delivered;
+};
+
+enum vhost_uaddr_type {
+	VHOST_ADDR_DESC = 0,
+	VHOST_ADDR_AVAIL = 1,
+	VHOST_ADDR_USED = 2,
+	VHOST_NUM_ADDRS = 3,
+};
+
+struct vhost_msg {
+	int type;
+	union {
+		struct vhost_iotlb_msg iotlb;
+		__u8 padding[64];
+	};
+};
+
+struct vhost_msg_v2 {
+	__u32 type;
+	__u32 asid;
+	union {
+		struct vhost_iotlb_msg iotlb;
+		__u8 padding[64];
+	};
+};
+
+struct vhost_msg_node {
+	union {
+		struct vhost_msg msg;
+		struct vhost_msg_v2 msg_v2;
+	};
+	struct vhost_virtqueue *vq;
+	struct list_head node;
+};
+
+struct vhost_flush_struct {
+	struct vhost_work work;
+	struct completion wait_event;
+};
+
+struct vhost_worker_state {
+	unsigned int worker_id;
+};
+
+struct vhost_vring_addr {
+	unsigned int index;
+	unsigned int flags;
+	__u64 desc_user_addr;
+	__u64 used_user_addr;
+	__u64 avail_user_addr;
+	__u64 log_guest_addr;
+};
+
+struct vhost_vring_state {
+	unsigned int index;
+	unsigned int num;
+};
+
+struct vhost_memory_region {
+	__u64 guest_phys_addr;
+	__u64 memory_size;
+	__u64 userspace_addr;
+	__u64 flags_padding;
+};
+
+struct vhost_memory {
+	__u32 nregions;
+	__u32 padding;
+	struct vhost_memory_region regions[0];
+};
+
+struct vhost_vring_worker {
+	unsigned int index;
+	unsigned int worker_id;
+};
+
+struct vhost_vring_file {
+	unsigned int index;
+	int fd;
+};
+
+struct ashmem_area;
+
+struct ashmem_range {
+	struct list_head lru;
+	struct list_head unpinned;
+	struct ashmem_area *asma;
+	size_t pgstart;
+	size_t pgend;
+	unsigned int purged;
+};
+
+struct ashmem_area {
+	char name[267];
+	struct list_head unpinned_list;
+	struct file *file;
+	size_t size;
+	unsigned long prot_mask;
+};
+
+struct ashmem_pin {
+	__u32 offset;
+	__u32 len;
+};
+
+struct mbox_chan_ops;
+
+struct mbox_controller {
+	struct device *dev;
+	const struct mbox_chan_ops *ops;
+	struct mbox_chan *chans;
+	int num_chans;
+	bool txdone_irq;
+	bool txdone_poll;
+	unsigned int txpoll_period;
+	struct mbox_chan * (*of_xlate)(struct mbox_controller *, const struct of_phandle_args *);
+	struct hrtimer poll_hrt;
+	spinlock_t poll_hrt_lock;
+	struct list_head node;
+};
+
+struct mbox_chan_ops {
+	int (*send_data)(struct mbox_chan *, void *);
+	int (*flush)(struct mbox_chan *, unsigned long);
+	int (*startup)(struct mbox_chan *);
+	void (*shutdown)(struct mbox_chan *);
+	bool (*last_tx_done)(struct mbox_chan *);
+	bool (*peek_data)(struct mbox_chan *);
+};
+
+struct mbox_chan {
+	struct mbox_controller *mbox;
+	unsigned int txdone_method;
+	struct mbox_client *cl;
+	struct completion tx_complete;
+	void *active_req;
+	unsigned int msg_count;
+	unsigned int msg_free;
+	void *msg_data[20];
+	spinlock_t lock;
+	void *con_priv;
+};
+
+struct hi3660_chan_info {
+	unsigned int dst_irq;
+	unsigned int ack_irq;
+};
+
+struct hi3660_mbox {
+	struct device *dev;
+	void *base;
+	struct mbox_chan chan[32];
+	struct hi3660_chan_info mchan[32];
+	struct mbox_controller controller;
+};
+
+struct hi6220_mbox_chan;
+
+struct hi6220_mbox {
+	struct device *dev;
+	int irq;
+	bool tx_irq_mode;
+	void *ipc;
+	void *base;
+	unsigned int chan_num;
+	struct hi6220_mbox_chan *mchan;
+	void *irq_map_chan[32];
+	struct mbox_chan *chan;
+	struct mbox_controller controller;
+};
+
+struct hi6220_mbox_chan {
+	unsigned int dir;
+	unsigned int dst_irq;
+	unsigned int ack_irq;
+	unsigned int slot;
+	struct hi6220_mbox *parent;
+};
+
+struct tegra_hsp_channel;
+
+struct tegra_hsp_sm_ops {
+	void (*send)(struct tegra_hsp_channel *, void *);
+	void (*recv)(struct tegra_hsp_channel *);
+};
+
+struct tegra_hsp;
+
+struct tegra_hsp_channel {
+	struct tegra_hsp *hsp;
+	struct mbox_chan *chan;
+	void *regs;
+};
+
+struct tegra_hsp_soc;
+
+struct tegra_hsp_mailbox;
+
+struct tegra_hsp {
+	struct device *dev;
+	const struct tegra_hsp_soc *soc;
+	struct mbox_controller mbox_db;
+	struct mbox_controller mbox_sm;
+	void *regs;
+	unsigned int doorbell_irq;
+	unsigned int *shared_irqs;
+	unsigned int shared_irq;
+	unsigned int num_sm;
+	unsigned int num_as;
+	unsigned int num_ss;
+	unsigned int num_db;
+	unsigned int num_si;
+	spinlock_t lock;
+	struct lock_class_key lock_key;
+	struct list_head doorbells;
+	struct tegra_hsp_mailbox *mailboxes;
+	unsigned long mask;
+};
+
+struct tegra_hsp_db_map;
+
+struct tegra_hsp_soc {
+	const struct tegra_hsp_db_map *map;
+	bool has_per_mb_ie;
+	bool has_128_bit_mb;
+	unsigned int reg_stride;
+};
+
+struct tegra_hsp_db_map {
+	const char *name;
+	unsigned int master;
+	unsigned int index;
+};
+
+struct tegra_hsp_mailbox {
+	struct tegra_hsp_channel channel;
+	const struct tegra_hsp_sm_ops *ops;
+	unsigned int index;
+	bool producer;
+};
+
+struct tegra_hsp_doorbell {
+	struct tegra_hsp_channel channel;
+	struct list_head list;
+	const char *name;
+	unsigned int master;
+	unsigned int index;
+};
+
+struct sun6i_msgbox {
+	struct mbox_controller controller;
+	struct clk *clk;
+	spinlock_t lock;
+	void *regs;
+};
+
+struct hwspinlock_device;
+
+struct hwspinlock {
+	struct hwspinlock_device *bank;
+	spinlock_t lock;
+	void *priv;
+};
+
+struct hwspinlock_ops;
+
+struct hwspinlock_device {
+	struct device *dev;
+	const struct hwspinlock_ops *ops;
+	int base_id;
+	int num_locks;
+	struct hwspinlock lock[0];
+};
+
+struct hwspinlock_ops {
+	int (*trylock)(struct hwspinlock *);
+	void (*unlock)(struct hwspinlock *);
+	int (*bust)(struct hwspinlock *, unsigned int);
+	void (*relax)(struct hwspinlock *);
+};
+
+struct rproc;
+
+typedef int (*rproc_handle_resource_t)(struct rproc *, void *, int, int);
+
+enum rproc_dump_mechanism {
+	RPROC_COREDUMP_DISABLED = 0,
+	RPROC_COREDUMP_ENABLED = 1,
+	RPROC_COREDUMP_INLINE = 2,
+};
+
+struct rproc_ops;
+
+struct resource_table;
+
+struct rproc {
+	struct list_head node;
+	struct iommu_domain *domain;
+	const char *name;
+	const char *firmware;
+	void *priv;
+	struct rproc_ops *ops;
+	struct device dev;
+	atomic_t power;
+	unsigned int state;
+	enum rproc_dump_mechanism dump_conf;
+	struct mutex lock;
+	struct dentry *dbg_dir;
+	struct list_head traces;
+	int num_traces;
+	struct list_head carveouts;
+	struct list_head mappings;
+	u64 bootaddr;
+	struct list_head rvdevs;
+	struct list_head subdevs;
+	struct idr notifyids;
+	int index;
+	struct work_struct crash_handler;
+	unsigned int crash_cnt;
+	bool recovery_disabled;
+	int max_notifyid;
+	struct resource_table *table_ptr;
+	struct resource_table *clean_table;
+	struct resource_table *cached_table;
+	size_t table_sz;
+	bool has_iommu;
+	bool auto_boot;
+	bool sysfs_read_only;
+	struct list_head dump_segments;
+	int nb_vdev;
+	u8 elf_class;
+	u16 elf_machine;
+	struct cdev cdev;
+	bool cdev_put_on_release;
+	unsigned long features[1];
+};
+
+struct rproc_ops {
+	int (*prepare)(struct rproc *);
+	int (*unprepare)(struct rproc *);
+	int (*start)(struct rproc *);
+	int (*stop)(struct rproc *);
+	int (*attach)(struct rproc *);
+	int (*detach)(struct rproc *);
+	void (*kick)(struct rproc *, int);
+	void * (*da_to_va)(struct rproc *, u64, size_t, bool *);
+	int (*parse_fw)(struct rproc *, const struct firmware *);
+	int (*handle_rsc)(struct rproc *, u32, void *, int, int);
+	struct resource_table * (*find_loaded_rsc_table)(struct rproc *, const struct firmware *);
+	struct resource_table * (*get_loaded_rsc_table)(struct rproc *, size_t *);
+	int (*load)(struct rproc *, const struct firmware *);
+	int (*sanity_check)(struct rproc *, const struct firmware *);
+	u64 (*get_boot_addr)(struct rproc *, const struct firmware *);
+	unsigned long (*panic)(struct rproc *);
+	void (*coredump)(struct rproc *);
+};
+
+struct resource_table {
+	u32 ver;
+	u32 num;
+	u32 reserved[2];
+	u32 offset[0];
+};
+
+enum rproc_state {
+	RPROC_OFFLINE = 0,
+	RPROC_SUSPENDED = 1,
+	RPROC_RUNNING = 2,
+	RPROC_CRASHED = 3,
+	RPROC_DELETED = 4,
+	RPROC_ATTACHED = 5,
+	RPROC_DETACHED = 6,
+	RPROC_LAST = 7,
+};
+
+enum rproc_features {
+	RPROC_FEAT_ATTACH_ON_RECOVERY = 0,
+	RPROC_MAX_FEATURES = 1,
+};
+
+enum rproc_crash_type {
+	RPROC_MMUFAULT = 0,
+	RPROC_WATCHDOG = 1,
+	RPROC_FATAL_ERROR = 2,
+};
+
+enum fw_resource_type {
+	RSC_CARVEOUT = 0,
+	RSC_DEVMEM = 1,
+	RSC_TRACE = 2,
+	RSC_VDEV = 3,
+	RSC_LAST = 4,
+	RSC_VENDOR_START = 128,
+	RSC_VENDOR_END = 512,
+};
+
+enum rsc_handling_status {
+	RSC_HANDLED = 0,
+	RSC_IGNORED = 1,
+};
+
+struct rproc_mem_entry {
+	void *va;
+	bool is_iomem;
+	dma_addr_t dma;
+	size_t len;
+	u32 da;
+	void *priv;
+	char name[32];
+	struct list_head node;
+	u32 rsc_offset;
+	u32 flags;
+	u32 of_resm_idx;
+	int (*alloc)(struct rproc *, struct rproc_mem_entry *);
+	int (*release)(struct rproc *, struct rproc_mem_entry *);
+};
+
+struct rproc_debug_trace {
+	struct rproc *rproc;
+	struct dentry *tfile;
+	struct list_head node;
+	struct rproc_mem_entry trace_mem;
+};
+
+struct rproc_subdev {
+	struct list_head node;
+	int (*prepare)(struct rproc_subdev *);
+	int (*start)(struct rproc_subdev *);
+	void (*stop)(struct rproc_subdev *, bool);
+	void (*unprepare)(struct rproc_subdev *);
+};
+
+struct rproc_vdev;
+
+struct rproc_vring {
+	void *va;
+	int num;
+	u32 da;
+	u32 align;
+	int notifyid;
+	struct rproc_vdev *rvdev;
+	struct virtqueue *vq;
+};
+
+struct rproc_vdev {
+	struct rproc_subdev subdev;
+	struct platform_device *pdev;
+	unsigned int id;
+	struct list_head node;
+	struct rproc *rproc;
+	struct rproc_vring vring[2];
+	u32 rsc_offset;
+	u32 index;
+};
+
+struct fw_rsc_vdev_vring {
+	u32 da;
+	u32 align;
+	u32 num;
+	u32 notifyid;
+	u32 pa;
+};
+
+struct fw_rsc_vdev {
+	u32 id;
+	u32 notifyid;
+	u32 dfeatures;
+	u32 gfeatures;
+	u32 config_len;
+	u8 status;
+	u8 num_of_vrings;
+	u8 reserved[2];
+	struct fw_rsc_vdev_vring vring[0];
+};
+
+struct fw_rsc_hdr {
+	u32 type;
+	u8 data[0];
+};
+
+struct fw_rsc_carveout {
+	u32 da;
+	u32 pa;
+	u32 len;
+	u32 flags;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct fw_rsc_devmem {
+	u32 da;
+	u32 pa;
+	u32 len;
+	u32 flags;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct fw_rsc_trace {
+	u32 da;
+	u32 len;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct rproc_vdev_data {
+	u32 rsc_offset;
+	unsigned int id;
+	u32 index;
+	struct fw_rsc_vdev *rsc;
+};
+
+struct rproc_dump_segment {
+	struct list_head node;
+	dma_addr_t da;
+	size_t size;
+	void *priv;
+	void (*dump)(struct rproc *, struct rproc_dump_segment *, void *, size_t, size_t);
+	loff_t offset;
+};
+
+struct rproc_coredump_state {
+	struct rproc *rproc;
+	void *header;
+	struct completion dump_done;
+};
+
+struct rpmsg_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+struct rpmsg_endpoint;
+
+struct rpmsg_device_ops;
+
+struct rpmsg_device {
+	struct device dev;
+	struct rpmsg_device_id id;
+	const char *driver_override;
+	u32 src;
+	u32 dst;
+	struct rpmsg_endpoint *ept;
+	bool announce;
+	bool little_endian;
+	const struct rpmsg_device_ops *ops;
+};
+
+typedef int (*rpmsg_rx_cb_t)(struct rpmsg_device *, void *, int, void *, u32);
+
+typedef int (*rpmsg_flowcontrol_cb_t)(struct rpmsg_device *, void *, bool);
+
+struct rpmsg_endpoint_ops;
+
+struct rpmsg_endpoint {
+	struct rpmsg_device *rpdev;
+	struct kref refcount;
+	rpmsg_rx_cb_t cb;
+	rpmsg_flowcontrol_cb_t flow_cb;
+	struct mutex cb_lock;
+	u32 addr;
+	void *priv;
+	const struct rpmsg_endpoint_ops *ops;
+};
+
+struct rpmsg_endpoint_ops {
+	void (*destroy_ept)(struct rpmsg_endpoint *);
+	int (*send)(struct rpmsg_endpoint *, void *, int);
+	int (*sendto)(struct rpmsg_endpoint *, void *, int, u32);
+	int (*send_offchannel)(struct rpmsg_endpoint *, u32, u32, void *, int);
+	int (*trysend)(struct rpmsg_endpoint *, void *, int);
+	int (*trysendto)(struct rpmsg_endpoint *, void *, int, u32);
+	int (*trysend_offchannel)(struct rpmsg_endpoint *, u32, u32, void *, int);
+	__poll_t (*poll)(struct rpmsg_endpoint *, struct file *, poll_table *);
+	int (*set_flow_control)(struct rpmsg_endpoint *, bool, u32);
+	ssize_t (*get_mtu)(struct rpmsg_endpoint *);
+};
+
+struct rpmsg_channel_info;
+
+struct rpmsg_device_ops {
+	struct rpmsg_device * (*create_channel)(struct rpmsg_device *, struct rpmsg_channel_info *);
+	int (*release_channel)(struct rpmsg_device *, struct rpmsg_channel_info *);
+	struct rpmsg_endpoint * (*create_ept)(struct rpmsg_device *, rpmsg_rx_cb_t, void *, struct rpmsg_channel_info);
+	int (*announce_create)(struct rpmsg_device *);
+	int (*announce_destroy)(struct rpmsg_device *);
+};
+
+struct rpmsg_channel_info {
+	char name[32];
+	u32 src;
+	u32 dst;
+};
+
+struct rpmsg_driver {
+	struct device_driver drv;
+	const struct rpmsg_device_id *id_table;
+	int (*probe)(struct rpmsg_device *);
+	void (*remove)(struct rpmsg_device *);
+	int (*callback)(struct rpmsg_device *, void *, int, void *, u32);
+	int (*flowcontrol)(struct rpmsg_device *, void *, bool);
+};
+
+struct rpmsg_eptdev {
+	struct device dev;
+	struct cdev cdev;
+	struct rpmsg_device *rpdev;
+	struct rpmsg_channel_info chinfo;
+	struct mutex ept_lock;
+	struct rpmsg_endpoint *ept;
+	struct rpmsg_endpoint *default_ept;
+	spinlock_t queue_lock;
+	struct sk_buff_head queue;
+	wait_queue_head_t readq;
+	bool remote_flow_restricted;
+	bool remote_flow_updated;
+};
+
+enum gunyah_resource_type {
+	GUNYAH_RESOURCE_TYPE_BELL_TX = 0,
+	GUNYAH_RESOURCE_TYPE_BELL_RX = 1,
+	GUNYAH_RESOURCE_TYPE_MSGQ_TX = 2,
+	GUNYAH_RESOURCE_TYPE_MSGQ_RX = 3,
+	GUNYAH_RESOURCE_TYPE_VCPU = 4,
+	GUNYAH_RESOURCE_TYPE_MEM_EXTENT = 9,
+	GUNYAH_RESOURCE_TYPE_ADDR_SPACE = 10,
+};
+
+enum gunyah_rm_error {
+	GUNYAH_RM_ERROR_OK = 0,
+	GUNYAH_RM_ERROR_UNIMPLEMENTED = 4294967295,
+	GUNYAH_RM_ERROR_NOMEM = 1,
+	GUNYAH_RM_ERROR_NORESOURCE = 2,
+	GUNYAH_RM_ERROR_DENIED = 3,
+	GUNYAH_RM_ERROR_INVALID = 4,
+	GUNYAH_RM_ERROR_BUSY = 5,
+	GUNYAH_RM_ERROR_ARGUMENT_INVALID = 6,
+	GUNYAH_RM_ERROR_HANDLE_INVALID = 7,
+	GUNYAH_RM_ERROR_VALIDATE_FAILED = 8,
+	GUNYAH_RM_ERROR_MAP_FAILED = 9,
+	GUNYAH_RM_ERROR_MEM_INVALID = 10,
+	GUNYAH_RM_ERROR_MEM_INUSE = 11,
+	GUNYAH_RM_ERROR_MEM_RELEASED = 12,
+	GUNYAH_RM_ERROR_VMID_INVALID = 13,
+	GUNYAH_RM_ERROR_LOOKUP_FAILED = 14,
+	GUNYAH_RM_ERROR_IRQ_INVALID = 15,
+	GUNYAH_RM_ERROR_IRQ_INUSE = 16,
+	GUNYAH_RM_ERROR_IRQ_RELEASED = 17,
+};
+
+struct gunyah_rm_rpc_hdr {
+	u8 api;
+	u8 type;
+	__le16 seq;
+	__le32 msg_id;
+};
+
+struct gunyah_resource {
+	enum gunyah_resource_type type;
+	u64 capid;
+	unsigned int irq;
+	struct list_head list;
+	u32 rm_label;
+};
+
+struct gunyah_rm_message;
+
+struct gunyah_rm {
+	struct device *dev;
+	struct gunyah_resource tx_ghrsc;
+	struct gunyah_resource rx_ghrsc;
+	struct gunyah_rm_message *active_rx_message;
+	struct xarray call_xarray;
+	u32 next_seq;
+	unsigned char recv_msg[240];
+	unsigned char send_msg[240];
+	struct mutex send_lock;
+	struct completion send_ready;
+	struct blocking_notifier_head nh;
+	struct auxiliary_device adev;
+	struct miscdevice miscdev;
+	struct fwnode_handle *parent_fwnode;
+};
+
+struct gunyah_rm_message {
+	void *payload;
+	size_t size;
+	u32 msg_id;
+	u8 type;
+	u8 num_fragments;
+	u8 fragments_received;
+	struct {
+		int ret;
+		u16 seq;
+		enum gunyah_rm_error rm_error;
+		struct completion seq_done;
+	} reply;
+};
+
+struct gunyah_rm_rpc_reply_hdr {
+	struct gunyah_rm_rpc_hdr hdr;
+	__le32 err_code;
+};
+
+struct gunyah_rm_hyp_resource {
+	u8 type;
+	u8 reserved;
+	__le16 partner_vmid;
+	__le32 resource_handle;
+	__le32 resource_label;
+	__le64 cap_id;
+	__le32 virq_handle;
+	__le32 virq;
+	__le64 base;
+	__le64 size;
+} __attribute__((packed));
+
+enum gunyah_rm_mem_type {
+	GUNYAH_RM_MEM_TYPE_NORMAL = 0,
+	GUNYAH_RM_MEM_TYPE_IO = 1,
+};
+
+enum gunyah_rm_vm_auth_mechanism {
+	GUNYAH_RM_VM_AUTH_NONE = 0,
+	GUNYAH_RM_VM_AUTH_QCOM_PIL_ELF = 1,
+	GUNYAH_RM_VM_AUTH_QCOM_ANDROID_PVM = 2,
+};
+
+enum gunyah_rm_range_id {
+	GUNYAH_RM_RANGE_ID_IMAGE = 0,
+	GUNYAH_RM_RANGE_ID_FIRMWARE = 1,
+};
+
+struct gunyah_rm_mem_acl_entry;
+
+struct gunyah_rm_mem_entry;
+
+struct gunyah_rm_mem_parcel {
+	enum gunyah_rm_mem_type mem_type;
+	u32 label;
+	size_t n_acl_entries;
+	struct gunyah_rm_mem_acl_entry *acl_entries;
+	size_t n_mem_entries;
+	struct gunyah_rm_mem_entry *mem_entries;
+	u32 mem_handle;
+};
+
+struct gunyah_rm_mem_acl_entry {
+	__le16 vmid;
+	u8 perms;
+	u8 reserved;
+};
+
+struct gunyah_rm_mem_entry {
+	__le64 phys_addr;
+	__le64 size;
+};
+
+struct gunyah_rm_vm_common_vmid_req {
+	__le16 vmid;
+	__le16 _padding;
+};
+
+struct gunyah_rm_mem_share_req_header {
+	u8 mem_type;
+	u8 _padding0;
+	u8 flags;
+	u8 _padding1;
+	__le32 label;
+};
+
+struct gunyah_rm_mem_share_req_mem_section {
+	__le16 n_entries;
+	__le16 _padding;
+	struct gunyah_rm_mem_entry entries[0];
+} __attribute__((packed));
+
+struct gunyah_rm_mem_share_req_acl_section {
+	__le16 n_entries;
+	__le16 _padding;
+	struct gunyah_rm_mem_acl_entry entries[0];
+};
+
+struct gunyah_rm_mem_append_req_header {
+	__le32 mem_handle;
+	u8 flags;
+	u8 _padding0;
+	__le16 _padding1;
+};
+
+struct gunyah_rm_mem_release_req {
+	__le32 mem_handle;
+	u8 flags;
+	u8 _padding0;
+	__le16 _padding1;
+};
+
+struct gunyah_rm_vm_alloc_vmid_resp {
+	__le16 vmid;
+	__le16 _padding;
+};
+
+struct gunyah_rm_vm_stop_req {
+	__le16 vmid;
+	u8 flags;
+	u8 _padding;
+	__le32 stop_reason;
+};
+
+struct gunyah_rm_vm_config_image_req {
+	__le16 vmid;
+	__le16 auth_mech;
+	__le32 mem_handle;
+	__le64 image_offset;
+	__le64 image_size;
+	__le64 dtb_offset;
+	__le64 dtb_size;
+};
+
+struct gunyah_rm_vm_set_boot_context_req {
+	__le16 vmid;
+	u8 reg_set;
+	u8 reg_index;
+	__le32 _padding;
+	__le64 value;
+};
+
+struct gunyah_rm_hyp_resources {
+	__le32 n_entries;
+	struct gunyah_rm_hyp_resource entries[0];
+};
+
+struct gunyah_rm_vm_set_demand_paging_req {
+	__le16 vmid;
+	__le16 _padding;
+	__le32 range_count;
+	struct {
+		struct {} __empty_ranges;
+		struct gunyah_rm_mem_entry ranges[0];
+	};
+};
+
+struct gunyah_rm_vm_set_address_layout_req {
+	__le16 vmid;
+	__le16 _padding;
+	__le32 range_id;
+	__le64 range_base;
+	__le64 range_size;
+};
+
+struct gunyah_vm_set_firmware_mem_req {
+	__le16 vmid;
+	__le16 reserved;
+	__le32 mem_handle;
+	__le64 fw_offset;
+	__le64 fw_size;
+};
+
+enum gunyah_rm_vm_status {
+	GUNYAH_RM_VM_STATUS_NO_STATE = 0,
+	GUNYAH_RM_VM_STATUS_INIT = 1,
+	GUNYAH_RM_VM_STATUS_READY = 2,
+	GUNYAH_RM_VM_STATUS_RUNNING = 3,
+	GUNYAH_RM_VM_STATUS_PAUSED = 4,
+	GUNYAH_RM_VM_STATUS_LOAD = 5,
+	GUNYAH_RM_VM_STATUS_AUTH = 6,
+	GUNYAH_RM_VM_STATUS_INIT_FAILED = 8,
+	GUNYAH_RM_VM_STATUS_EXITED = 9,
+	GUNYAH_RM_VM_STATUS_RESETTING = 10,
+	GUNYAH_RM_VM_STATUS_RESET = 11,
+};
+
+enum gunyah_vm_mem_share_type {
+	VM_MEM_SHARE = 0,
+	VM_MEM_LEND = 1,
+};
+
+enum gunyah_map_flags {
+	GUNYAH_MEM_ALLOW_READ = 1,
+	GUNYAH_MEM_ALLOW_WRITE = 2,
+	GUNYAH_MEM_ALLOW_EXEC = 4,
+	GUNYAH_MEM_ALLOW_RWX = 7,
+	GUNYAH_MEM_DEFAULT_ACCESS = 0,
+	GUNYAH_MEM_FORCE_LEND = 16,
+	GUNYAH_MEM_FORCE_SHARE = 32,
+	GUNYAH_MEM_UNMAP = 256,
+};
+
+enum gunyah_rm_notification_id {
+	GUNYAH_RM_NOTIFICATION_VM_EXITED = 1443889153,
+	GUNYAH_RM_NOTIFICATION_VM_STATUS = 1443889160,
+};
+
+enum gunyah_vm_boot_context_reg {
+	REG_SET_X = 0,
+	REG_SET_PC = 1,
+	REG_SET_SP = 2,
+};
+
+struct gunyah_vm_resource_ticket {
+	struct list_head vm_list;
+	struct list_head resources;
+	enum gunyah_resource_type resource_type;
+	u32 label;
+	struct module *owner;
+	bool (*populate)(struct gunyah_vm_resource_ticket *, struct gunyah_resource *);
+	void (*unpopulate)(struct gunyah_vm_resource_ticket *, struct gunyah_resource *);
+};
+
+struct gunyah_vm_io_handler_ops;
+
+struct gunyah_vm_io_handler {
+	struct rb_node node;
+	u64 addr;
+	bool datamatch;
+	u8 len;
+	u64 data;
+	struct gunyah_vm_io_handler_ops *ops;
+};
+
+struct gunyah_vm_io_handler_ops {
+	int (*read)(struct gunyah_vm_io_handler *, u64, u32, u64);
+	int (*write)(struct gunyah_vm_io_handler *, u64, u32, u64);
+};
+
+struct gunyah_vm_dtb_config {
+	__u64 guest_phys_addr;
+	__u64 size;
+};
+
+struct gunyah_vm_firmware_config {
+	__u64 guest_phys_addr;
+	__u64 size;
+};
+
+struct gunyah_vm_exit_info {
+	__u16 type;
+	__u16 padding;
+	__u32 reason_size;
+	__u8 reason[8];
+};
+
+struct gunyah_vm {
+	u16 vmid;
+	struct maple_tree mm;
+	struct maple_tree bindings;
+	struct rw_semaphore bindings_lock;
+	struct mm_struct *mm_s;
+	struct gunyah_vm_resource_ticket addrspace_ticket;
+	struct gunyah_vm_resource_ticket host_private_extent_ticket;
+	struct gunyah_vm_resource_ticket host_shared_extent_ticket;
+	struct gunyah_vm_resource_ticket guest_private_extent_ticket;
+	struct gunyah_vm_resource_ticket guest_shared_extent_ticket;
+	struct rb_root mmio_handler_root;
+	struct rw_semaphore mmio_handler_lock;
+	struct gunyah_rm *rm;
+	struct notifier_block nb;
+	enum gunyah_rm_vm_status vm_status;
+	wait_queue_head_t vm_status_wait;
+	struct rw_semaphore status_lock;
+	struct gunyah_vm_exit_info exit_info;
+	struct kref kref;
+	struct mutex fn_lock;
+	struct list_head functions;
+	struct mutex resources_lock;
+	struct list_head resources;
+	struct list_head resource_tickets;
+	struct device *parent;
+	enum gunyah_rm_vm_auth_mechanism auth;
+	struct {
+		struct gunyah_vm_dtb_config config;
+		u64 parcel_start;
+		u64 parcel_pages;
+		struct gunyah_rm_mem_parcel parcel;
+	} dtb;
+	struct {
+		struct gunyah_vm_firmware_config config;
+		u64 parcel_start;
+		u64 parcel_pages;
+		struct gunyah_rm_mem_parcel parcel;
+	} fw;
+	struct xarray boot_context;
+};
+
+struct gunyah_vm_function;
+
+struct gunyah_vm_function_instance {
+	size_t arg_size;
+	void *argp;
+	struct gunyah_vm *ghvm;
+	struct gunyah_rm *rm;
+	struct gunyah_vm_function *fn;
+	void *data;
+	struct list_head vm_list;
+};
+
+struct gunyah_vm_function {
+	u32 type;
+	const char *name;
+	struct module *mod;
+	long (*bind)(struct gunyah_vm_function_instance *);
+	void (*unbind)(struct gunyah_vm_function_instance *);
+	bool (*compare)(const struct gunyah_vm_function_instance *, const void *, size_t);
+};
+
+struct gunyah_vm_gup_binding {
+	enum gunyah_vm_mem_share_type share_type;
+	u64 guest_phys_addr;
+	u64 userspace_addr;
+	u64 size;
+	u32 flags;
+};
+
+struct gunyah_fn_desc {
+	__u32 type;
+	__u32 arg_size;
+	__u64 arg;
+};
+
+struct gunyah_vm_boot_context {
+	__u32 reg;
+	__u32 reserved;
+	__u64 value;
+};
+
+struct gunyah_userspace_memory_region {
+	__u32 label;
+	__u32 flags;
+	__u64 guest_phys_addr;
+	__u64 memory_size;
+	__u64 userspace_addr;
+};
+
+struct gunyah_rm_vm_status_payload {
+	__le16 vmid;
+	u16 reserved;
+	u8 vm_status;
+	u8 os_status;
+	__le16 app_status;
+};
+
+struct gunyah_rm_vm_exited_payload {
+	__le16 vmid;
+	__le16 exit_type;
+	__le32 exit_reason_size;
+	u8 exit_reason[0];
+};
+
+enum gunyah_addrspace_map_flag_bits {
+	GUNYAH_ADDRSPACE_MAP_FLAG_PARTIAL = 0,
+	GUNYAH_ADDRSPACE_MAP_FLAG_PRIVATE = 1,
+	GUNYAH_ADDRSPACE_MAP_FLAG_VMMIO = 2,
+	GUNYAH_ADDRSPACE_MAP_FLAG_NOSYNC = 31,
+};
+
+enum gunyah_pagetable_access {
+	GUNYAH_PAGETABLE_ACCESS_NONE = 0,
+	GUNYAH_PAGETABLE_ACCESS_X = 1,
+	GUNYAH_PAGETABLE_ACCESS_W = 2,
+	GUNYAH_PAGETABLE_ACCESS_R = 4,
+	GUNYAH_PAGETABLE_ACCESS_RX = 5,
+	GUNYAH_PAGETABLE_ACCESS_RW = 6,
+	GUNYAH_PAGETABLE_ACCESS_RWX = 7,
+};
+
+enum arch_gunyah_memtype {
+	GUNYAH_MEMTYPE_DEVICE_nGnRnE = 0,
+	GUNYAH_DEVICE_nGnRE = 1,
+	GUNYAH_DEVICE_nGRE = 2,
+	GUNYAH_DEVICE_GRE = 3,
+	GUNYAH_NORMAL_NC = 5,
+	GUNYAH_NORMAL_ONC_IWT = 6,
+	GUNYAH_NORMAL_ONC_IWB = 7,
+	GUNYAH_NORMAL_OWT_INC = 9,
+	GUNYAH_NORMAL_WT = 10,
+	GUNYAH_NORMAL_OWT_IWB = 11,
+	GUNYAH_NORMAL_OWB_INC = 13,
+	GUNYAH_NORMAL_OWB_IWT = 14,
+	GUNYAH_NORMAL_WB = 15,
+};
+
+enum gunyah_memextent_donate_type {
+	GUNYAH_MEMEXTENT_DONATE_TO_CHILD = 0,
+	GUNYAH_MEMEXTENT_DONATE_TO_PARENT = 1,
+	GUNYAH_MEMEXTENT_DONATE_TO_SIBLING = 2,
+	GUNYAH_MEMEXTENT_DONATE_TO_PROTECTED = 3,
+	GUNYAH_MEMEXTENT_DONATE_FROM_PROTECTED = 4,
+};
+
+enum gunyah_vm_status {
+	GUNYAH_VM_STATUS_LOAD_FAILED = 1,
+	GUNYAH_VM_STATUS_EXITED = 2,
+	GUNYAH_VM_STATUS_CRASHED = 3,
+};
+
+struct gunyah_vcpu_run;
+
+struct gunyah_vcpu {
+	struct gunyah_vm_function_instance *f;
+	struct gunyah_resource *rsc;
+	struct mutex run_lock;
+	struct gunyah_vm *ghvm;
+	struct gunyah_vcpu_run *vcpu_run;
+	enum {
+		GUNYAH_VCPU_RUN_STATE_UNKNOWN = 0,
+		GUNYAH_VCPU_RUN_STATE_READY = 1,
+		GUNYAH_VCPU_RUN_STATE_MMIO_READ = 2,
+		GUNYAH_VCPU_RUN_STATE_MMIO_WRITE = 3,
+		GUNYAH_VCPU_RUN_STATE_SYSTEM_DOWN = 4,
+	} state;
+	u8 mmio_read_len;
+	u64 mmio_addr;
+	struct completion ready;
+	struct notifier_block nb;
+	struct gunyah_vm_resource_ticket ticket;
+	struct kref kref;
+};
+
+struct gunyah_vcpu_run {
+	__u8 immediate_exit;
+	__u8 padding[7];
+	__u32 exit_reason;
+	union {
+		struct {
+			__u64 phys_addr;
+			__u8 data[8];
+			__u32 len;
+			__u8 is_write;
+			__u8 resume_action;
+		} mmio;
+		struct {
+			enum gunyah_vm_status status;
+			struct gunyah_vm_exit_info exit_info;
+		} status;
+		struct {
+			__u64 phys_addr;
+			__s32 attempt;
+			__u8 resume_action;
+		} page_fault;
+	};
+};
+
+enum gunyah_vcpu_exit {
+	GUNYAH_VCPU_EXIT_UNKNOWN = 0,
+	GUNYAH_VCPU_EXIT_MMIO = 1,
+	GUNYAH_VCPU_EXIT_STATUS = 2,
+	GUNYAH_VCPU_EXIT_PAGE_FAULT = 3,
+};
+
+enum gunyah_vcpu_resume_action {
+	GUNYAH_VCPU_RESUME_HANDLED = 0,
+	GUNYAH_VCPU_RESUME_FAULT = 1,
+	GUNYAH_VCPU_RESUME_RETRY = 2,
+};
+
+enum {
+	GUNYAH_ADDRSPACE_VMMIO_ACTION_EMULATE = 0,
+	GUNYAH_ADDRSPACE_VMMIO_ACTION_RETRY = 1,
+	GUNYAH_ADDRSPACE_VMMIO_ACTION_FAULT = 2,
+};
+
+struct gunyah_fn_vcpu_arg {
+	__u32 id;
+};
+
+struct gunyah_rm_platform_ops {
+	int (*pre_mem_share)(struct gunyah_rm *, struct gunyah_rm_mem_parcel *);
+	int (*post_mem_reclaim)(struct gunyah_rm *, struct gunyah_rm_mem_parcel *);
+	int (*pre_demand_page)(struct gunyah_rm *, u16, enum gunyah_pagetable_access, struct folio *);
+	int (*release_demand_page)(struct gunyah_rm *, u16, enum gunyah_pagetable_access, struct folio *);
+};
+
+enum gunyah_irqfd_flags {
+	GUNYAH_IRQFD_FLAGS_LEVEL = 1,
+};
+
+struct gunyah_irqfd {
+	struct gunyah_resource *ghrsc;
+	struct gunyah_vm_resource_ticket ticket;
+	struct gunyah_vm_function_instance *f;
+	bool level;
+	struct eventfd_ctx *ctx;
+	wait_queue_entry_t wait;
+	poll_table pt;
+};
+
+struct gunyah_fn_irqfd_arg {
+	__u32 fd;
+	__u32 label;
+	__u32 flags;
+	__u32 padding;
+};
+
+enum gunyah_ioeventfd_flags {
+	GUNYAH_IOEVENTFD_FLAGS_DATAMATCH = 1,
+};
+
+struct gunyah_ioeventfd {
+	struct gunyah_vm_function_instance *f;
+	struct gunyah_vm_io_handler io_handler;
+	struct eventfd_ctx *ctx;
+};
+
+struct gunyah_fn_ioeventfd_arg {
+	__u64 datamatch;
+	__u64 addr;
+	__u32 len;
+	__s32 fd;
+	__u32 flags;
+	__u32 padding;
+};
+
+typedef void (*btf_trace_devfreq_frequency)(void *, struct devfreq *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_devfreq_monitor)(void *, struct devfreq *);
+
+enum devfreq_parent_dev_type {
+	DEVFREQ_PARENT_DEV = 0,
+	CPUFREQ_PARENT_DEV = 1,
+};
+
+struct trace_event_raw_devfreq_frequency {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	unsigned long freq;
+	unsigned long prev_freq;
+	unsigned long busy_time;
+	unsigned long total_time;
+	char __data[0];
+};
+
+struct trace_event_raw_devfreq_monitor {
+	struct trace_entry ent;
+	unsigned long freq;
+	unsigned long busy_time;
+	unsigned long total_time;
+	unsigned int polling_ms;
+	u32 __data_loc_dev_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devfreq_frequency {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_devfreq_monitor {
+	u32 dev_name;
+};
+
+struct devfreq_freqs {
+	unsigned long old;
+	unsigned long new;
+};
+
+struct devfreq_notifier_devres {
+	struct devfreq *devfreq;
+	struct notifier_block *nb;
+	unsigned int list;
+};
+
+struct devfreq_passive_data {
+	struct devfreq *parent;
+	int (*get_target_freq)(struct devfreq *, unsigned long *);
+	enum devfreq_parent_dev_type parent_type;
+	struct devfreq *this;
+	struct notifier_block nb;
+	struct list_head cpu_data_list;
+};
+
+struct devfreq_event_desc;
+
+struct devfreq_event_dev {
+	struct list_head node;
+	struct device dev;
+	struct mutex lock;
+	u32 enable_count;
+	const struct devfreq_event_desc *desc;
+};
+
+struct devfreq_event_ops;
+
+struct devfreq_event_desc {
+	const char *name;
+	u32 event_type;
+	void *driver_data;
+	const struct devfreq_event_ops *ops;
+};
+
+struct devfreq_event_data;
+
+struct devfreq_event_ops {
+	int (*enable)(struct devfreq_event_dev *);
+	int (*disable)(struct devfreq_event_dev *);
+	int (*reset)(struct devfreq_event_dev *);
+	int (*set_event)(struct devfreq_event_dev *);
+	int (*get_event)(struct devfreq_event_dev *, struct devfreq_event_data *);
+};
+
+struct devfreq_event_data {
+	unsigned long load_count;
+	unsigned long total_count;
+};
+
+struct userspace_data {
+	unsigned long user_frequency;
+	bool valid;
+};
+
+struct devfreq_cpu_data {
+	struct list_head node;
+	struct device *dev;
+	unsigned int first_cpu;
+	struct opp_table *opp_table;
+	unsigned int cur_freq;
+	unsigned int min_freq;
+	unsigned int max_freq;
+};
+
+struct __extcon_info {
+	unsigned int type;
+	unsigned int id;
+	const char *name;
+};
+
+struct extcon_cable;
+
+struct extcon_dev {
+	const char *name;
+	const unsigned int *supported_cable;
+	const u32 *mutually_exclusive;
+	struct device dev;
+	unsigned int id;
+	struct raw_notifier_head nh_all;
+	struct raw_notifier_head *nh;
+	struct list_head entry;
+	int max_supported;
+	spinlock_t lock;
+	u32 state;
+	struct device_type extcon_dev_type;
+	struct extcon_cable *cables;
+	struct attribute_group attr_g_muex;
+	struct attribute **attrs_muex;
+	struct device_attribute *d_attrs_muex;
+};
+
+union extcon_property_value {
+	int intval;
+};
+
+struct extcon_cable {
+	struct extcon_dev *edev;
+	int cable_index;
+	struct attribute_group attr_g;
+	struct device_attribute attr_name;
+	struct device_attribute attr_state;
+	struct attribute *attrs[3];
+	union extcon_property_value usb_propval[3];
+	union extcon_property_value chg_propval[1];
+	union extcon_property_value jack_propval[1];
+	union extcon_property_value disp_propval[2];
+	unsigned long usb_bits[1];
+	unsigned long chg_bits[1];
+	unsigned long jack_bits[1];
+	unsigned long disp_bits[1];
+};
+
+struct extcon_dev_notifier_devres {
+	struct extcon_dev *edev;
+	unsigned int id;
+	struct notifier_block *nb;
+};
+
+struct tegra_mc;
+
+struct tegra_mc_reset;
+
+struct tegra_mc_reset_ops {
+	int (*hotreset_assert)(struct tegra_mc *, const struct tegra_mc_reset *);
+	int (*hotreset_deassert)(struct tegra_mc *, const struct tegra_mc_reset *);
+	int (*block_dma)(struct tegra_mc *, const struct tegra_mc_reset *);
+	bool (*dma_idling)(struct tegra_mc *, const struct tegra_mc_reset *);
+	int (*unblock_dma)(struct tegra_mc *, const struct tegra_mc_reset *);
+	int (*reset_status)(struct tegra_mc *, const struct tegra_mc_reset *);
+};
+
+struct tegra_smmu;
+
+struct gart_device;
+
+struct icc_node;
+
+struct icc_node_data;
+
+struct icc_provider {
+	struct list_head provider_list;
+	struct list_head nodes;
+	int (*set)(struct icc_node *, struct icc_node *);
+	int (*aggregate)(struct icc_node *, u32, u32, u32, u32 *, u32 *);
+	void (*pre_aggregate)(struct icc_node *);
+	int (*get_bw)(struct icc_node *, u32 *, u32 *);
+	struct icc_node * (*xlate)(struct of_phandle_args *, void *);
+	struct icc_node_data * (*xlate_extended)(struct of_phandle_args *, void *);
+	struct device *dev;
+	int users;
+	bool inter_set;
+	void *data;
+};
+
+struct tegra_mc_soc;
+
+struct tegra_mc_timing;
+
+struct tegra_mc {
+	struct tegra_bpmp *bpmp;
+	struct device *dev;
+	struct tegra_smmu *smmu;
+	struct gart_device *gart;
+	void *regs;
+	void *bcast_ch_regs;
+	void **ch_regs;
+	struct clk *clk;
+	int irq;
+	const struct tegra_mc_soc *soc;
+	unsigned long tick;
+	struct tegra_mc_timing *timings;
+	unsigned int num_timings;
+	unsigned int num_channels;
+	bool bwmgr_mrq_supported;
+	struct reset_controller_dev reset;
+	struct icc_provider provider;
+	spinlock_t lock;
+	struct {
+		struct dentry *root;
+	} debugfs;
+};
+
+struct tegra_mc_client;
+
+struct tegra_smmu_soc;
+
+struct tegra_mc_icc_ops;
+
+struct tegra_mc_ops;
+
+struct tegra_mc_soc {
+	const struct tegra_mc_client *clients;
+	unsigned int num_clients;
+	const unsigned long *emem_regs;
+	unsigned int num_emem_regs;
+	unsigned int num_address_bits;
+	unsigned int atom_size;
+	unsigned int num_carveouts;
+	u16 client_id_mask;
+	u8 num_channels;
+	const struct tegra_smmu_soc *smmu;
+	u32 intmask;
+	u32 ch_intmask;
+	u32 global_intstatus_channel_shift;
+	bool has_addr_hi_reg;
+	const struct tegra_mc_reset_ops *reset_ops;
+	const struct tegra_mc_reset *resets;
+	unsigned int num_resets;
+	const struct tegra_mc_icc_ops *icc_ops;
+	const struct tegra_mc_ops *ops;
+};
+
+enum tegra_icc_client_type {
+	TEGRA_ICC_NONE = 0,
+	TEGRA_ICC_NISO = 1,
+	TEGRA_ICC_ISO_DISPLAY = 2,
+	TEGRA_ICC_ISO_VI = 3,
+	TEGRA_ICC_ISO_AUDIO = 4,
+	TEGRA_ICC_ISO_VIFAL = 5,
+};
+
+struct tegra_mc_client {
+	unsigned int id;
+	unsigned int bpmp_id;
+	enum tegra_icc_client_type type;
+	const char *name;
+	union {
+		unsigned int swgroup;
+		unsigned int sid;
+	};
+	unsigned int fifo_size;
+	struct {
+		struct {
+			unsigned int reg;
+			unsigned int bit;
+		} smmu;
+		struct {
+			unsigned int reg;
+			unsigned int shift;
+			unsigned int mask;
+			unsigned int def;
+		} la;
+		struct {
+			unsigned int override;
+			unsigned int security;
+		} sid;
+	} regs;
+};
+
+struct tegra_smmu_swgroup;
+
+struct tegra_smmu_group_soc;
+
+struct tegra_smmu_soc {
+	const struct tegra_mc_client *clients;
+	unsigned int num_clients;
+	const struct tegra_smmu_swgroup *swgroups;
+	unsigned int num_swgroups;
+	const struct tegra_smmu_group_soc *groups;
+	unsigned int num_groups;
+	bool supports_round_robin_arbitration;
+	bool supports_request_limit;
+	unsigned int num_tlb_lines;
+	unsigned int num_asids;
+};
+
+struct tegra_smmu_swgroup {
+	const char *name;
+	unsigned int swgroup;
+	unsigned int reg;
+};
+
+struct tegra_smmu_group_soc {
+	const char *name;
+	const unsigned int *swgroups;
+	unsigned int num_swgroups;
+};
+
+struct tegra_mc_reset {
+	const char *name;
+	unsigned long id;
+	unsigned int control;
+	unsigned int status;
+	unsigned int reset;
+	unsigned int bit;
+};
+
+struct tegra_mc_icc_ops {
+	int (*set)(struct icc_node *, struct icc_node *);
+	int (*aggregate)(struct icc_node *, u32, u32, u32, u32 *, u32 *);
+	struct icc_node * (*xlate)(struct of_phandle_args *, void *);
+	struct icc_node_data * (*xlate_extended)(struct of_phandle_args *, void *);
+	int (*get_bw)(struct icc_node *, u32 *, u32 *);
+};
+
+struct icc_node {
+	int id;
+	const char *name;
+	struct icc_node **links;
+	size_t num_links;
+	struct icc_provider *provider;
+	struct list_head node_list;
+	struct list_head search_list;
+	struct icc_node *reverse;
+	u8 is_traversed: 1;
+	struct hlist_head req_list;
+	u32 avg_bw;
+	u32 peak_bw;
+	u32 init_avg;
+	u32 init_peak;
+	void *data;
+};
+
+struct icc_node_data {
+	struct icc_node *node;
+	u32 tag;
+};
+
+struct tegra_mc_ops {
+	int (*probe)(struct tegra_mc *);
+	void (*remove)(struct tegra_mc *);
+	int (*suspend)(struct tegra_mc *);
+	int (*resume)(struct tegra_mc *);
+	irqreturn_t (*handle_irq)(int, void *);
+	int (*probe_device)(struct tegra_mc *, struct device *);
+};
+
+struct tegra_mc_timing {
+	unsigned long rate;
+	u32 *emem_data;
+};
+
+enum mrq_bwmgr_int_cmd {
+	CMD_BWMGR_INT_QUERY_ABI = 1,
+	CMD_BWMGR_INT_CALC_AND_SET = 2,
+	CMD_BWMGR_INT_CAP_SET = 3,
+};
+
+struct cmd_bwmgr_int_calc_and_set_response {
+	uint64_t rate;
+};
+
+struct mrq_bwmgr_int_response {
+	union {
+		struct cmd_bwmgr_int_calc_and_set_response bwmgr_calc_set_resp;
+	};
+};
+
+struct cmd_bwmgr_int_query_abi_request {
+	uint32_t type;
+};
+
+struct cmd_bwmgr_int_calc_and_set_request {
+	uint32_t client_id;
+	uint32_t niso_bw;
+	uint32_t iso_bw;
+	uint32_t mc_floor;
+	uint8_t floor_unit;
+} __attribute__((packed));
+
+struct cmd_bwmgr_int_cap_set_request {
+	uint64_t rate;
+};
+
+struct mrq_bwmgr_int_request {
+	uint32_t cmd;
+	union {
+		struct cmd_bwmgr_int_query_abi_request query_abi;
+		struct cmd_bwmgr_int_calc_and_set_request bwmgr_calc_set_req;
+		struct cmd_bwmgr_int_cap_set_request bwmgr_cap_set_req;
+	};
+} __attribute__((packed));
+
+struct tegra186_emc_dvfs;
+
+struct tegra186_emc {
+	struct tegra_bpmp *bpmp;
+	struct device *dev;
+	struct clk *clk;
+	struct tegra186_emc_dvfs *dvfs;
+	unsigned int num_dvfs;
+	struct {
+		struct dentry *root;
+		unsigned long min_rate;
+		unsigned long max_rate;
+	} debugfs;
+	struct icc_provider provider;
+};
+
+struct tegra186_emc_dvfs {
+	unsigned long latency;
+	unsigned long rate;
+};
+
+struct emc_dvfs_latency {
+	uint32_t freq;
+	uint32_t latency;
+};
+
+struct mrq_emc_dvfs_latency_response {
+	uint32_t num_pairs;
+	struct emc_dvfs_latency pairs[14];
+};
+
+struct iio_dev;
+
+struct iio_buffer_setup_ops {
+	int (*preenable)(struct iio_dev *);
+	int (*postenable)(struct iio_dev *);
+	int (*predisable)(struct iio_dev *);
+	int (*postdisable)(struct iio_dev *);
+	bool (*validate_scan_mask)(struct iio_dev *, const unsigned long *);
+};
+
+struct iio_buffer;
+
+struct iio_trigger;
+
+struct iio_poll_func;
+
+struct iio_chan_spec;
+
+struct iio_info;
+
+struct iio_dev {
+	int modes;
+	struct device dev;
+	struct iio_buffer *buffer;
+	int scan_bytes;
+	const unsigned long *available_scan_masks;
+	unsigned int masklength;
+	const unsigned long *active_scan_mask;
+	bool scan_timestamp;
+	struct iio_trigger *trig;
+	struct iio_poll_func *pollfunc;
+	struct iio_poll_func *pollfunc_event;
+	const struct iio_chan_spec *channels;
+	int num_channels;
+	const char *name;
+	const char *label;
+	const struct iio_info *info;
+	const struct iio_buffer_setup_ops *setup_ops;
+	void *priv;
+};
+
+enum iio_buffer_direction {
+	IIO_BUFFER_DIRECTION_IN = 0,
+	IIO_BUFFER_DIRECTION_OUT = 1,
+};
+
+struct iio_buffer_access_funcs;
+
+struct iio_dev_attr;
+
+struct iio_buffer {
+	unsigned int length;
+	unsigned long flags;
+	size_t bytes_per_datum;
+	enum iio_buffer_direction direction;
+	const struct iio_buffer_access_funcs *access;
+	long *scan_mask;
+	struct list_head demux_list;
+	wait_queue_head_t pollq;
+	unsigned int watermark;
+	bool scan_timestamp;
+	struct list_head buffer_attr_list;
+	struct attribute_group buffer_group;
+	const struct iio_dev_attr **attrs;
+	void *demux_bounce;
+	struct list_head attached_entry;
+	struct list_head buffer_list;
+	struct kref ref;
+};
+
+struct iio_buffer_access_funcs {
+	int (*store_to)(struct iio_buffer *, const void *);
+	int (*read)(struct iio_buffer *, size_t, char __attribute__((btf_type_tag("user"))) *);
+	size_t (*data_available)(struct iio_buffer *);
+	int (*remove_from)(struct iio_buffer *, void *);
+	int (*write)(struct iio_buffer *, size_t, const char __attribute__((btf_type_tag("user"))) *);
+	size_t (*space_available)(struct iio_buffer *);
+	int (*request_update)(struct iio_buffer *);
+	int (*set_bytes_per_datum)(struct iio_buffer *, size_t);
+	int (*set_length)(struct iio_buffer *, unsigned int);
+	int (*enable)(struct iio_buffer *, struct iio_dev *);
+	int (*disable)(struct iio_buffer *, struct iio_dev *);
+	void (*release)(struct iio_buffer *);
+	unsigned int modes;
+	unsigned int flags;
+};
+
+struct iio_dev_attr {
+	struct device_attribute dev_attr;
+	u64 address;
+	struct list_head l;
+	const struct iio_chan_spec *c;
+	struct iio_buffer *buffer;
+};
+
+enum iio_chan_type {
+	IIO_VOLTAGE = 0,
+	IIO_CURRENT = 1,
+	IIO_POWER = 2,
+	IIO_ACCEL = 3,
+	IIO_ANGL_VEL = 4,
+	IIO_MAGN = 5,
+	IIO_LIGHT = 6,
+	IIO_INTENSITY = 7,
+	IIO_PROXIMITY = 8,
+	IIO_TEMP = 9,
+	IIO_INCLI = 10,
+	IIO_ROT = 11,
+	IIO_ANGL = 12,
+	IIO_TIMESTAMP = 13,
+	IIO_CAPACITANCE = 14,
+	IIO_ALTVOLTAGE = 15,
+	IIO_CCT = 16,
+	IIO_PRESSURE = 17,
+	IIO_HUMIDITYRELATIVE = 18,
+	IIO_ACTIVITY = 19,
+	IIO_STEPS = 20,
+	IIO_ENERGY = 21,
+	IIO_DISTANCE = 22,
+	IIO_VELOCITY = 23,
+	IIO_CONCENTRATION = 24,
+	IIO_RESISTANCE = 25,
+	IIO_PH = 26,
+	IIO_UVINDEX = 27,
+	IIO_ELECTRICALCONDUCTIVITY = 28,
+	IIO_COUNT = 29,
+	IIO_INDEX = 30,
+	IIO_GRAVITY = 31,
+	IIO_POSITIONRELATIVE = 32,
+	IIO_PHASE = 33,
+	IIO_MASSCONCENTRATION = 34,
+};
+
+enum iio_endian {
+	IIO_CPU = 0,
+	IIO_BE = 1,
+	IIO_LE = 2,
+};
+
+struct iio_event_spec;
+
+struct iio_chan_spec_ext_info;
+
+struct iio_chan_spec {
+	enum iio_chan_type type;
+	int channel;
+	int channel2;
+	unsigned long address;
+	int scan_index;
+	struct {
+		char sign;
+		u8 realbits;
+		u8 storagebits;
+		u8 shift;
+		u8 repeat;
+		enum iio_endian endianness;
+	} scan_type;
+	long info_mask_separate;
+	long info_mask_separate_available;
+	long info_mask_shared_by_type;
+	long info_mask_shared_by_type_available;
+	long info_mask_shared_by_dir;
+	long info_mask_shared_by_dir_available;
+	long info_mask_shared_by_all;
+	long info_mask_shared_by_all_available;
+	const struct iio_event_spec *event_spec;
+	unsigned int num_event_specs;
+	const struct iio_chan_spec_ext_info *ext_info;
+	const char *extend_name;
+	const char *datasheet_name;
+	unsigned int modified: 1;
+	unsigned int indexed: 1;
+	unsigned int output: 1;
+	unsigned int differential: 1;
+};
+
+enum iio_event_type {
+	IIO_EV_TYPE_THRESH = 0,
+	IIO_EV_TYPE_MAG = 1,
+	IIO_EV_TYPE_ROC = 2,
+	IIO_EV_TYPE_THRESH_ADAPTIVE = 3,
+	IIO_EV_TYPE_MAG_ADAPTIVE = 4,
+	IIO_EV_TYPE_CHANGE = 5,
+	IIO_EV_TYPE_MAG_REFERENCED = 6,
+	IIO_EV_TYPE_GESTURE = 7,
+};
+
+enum iio_event_direction {
+	IIO_EV_DIR_EITHER = 0,
+	IIO_EV_DIR_RISING = 1,
+	IIO_EV_DIR_FALLING = 2,
+	IIO_EV_DIR_NONE = 3,
+	IIO_EV_DIR_SINGLETAP = 4,
+	IIO_EV_DIR_DOUBLETAP = 5,
+};
+
+struct iio_event_spec {
+	enum iio_event_type type;
+	enum iio_event_direction dir;
+	unsigned long mask_separate;
+	unsigned long mask_shared_by_type;
+	unsigned long mask_shared_by_dir;
+	unsigned long mask_shared_by_all;
+};
+
+enum iio_shared_by {
+	IIO_SEPARATE = 0,
+	IIO_SHARED_BY_TYPE = 1,
+	IIO_SHARED_BY_DIR = 2,
+	IIO_SHARED_BY_ALL = 3,
+};
+
+struct iio_chan_spec_ext_info {
+	const char *name;
+	enum iio_shared_by shared;
+	ssize_t (*read)(struct iio_dev *, uintptr_t, const struct iio_chan_spec *, char *);
+	ssize_t (*write)(struct iio_dev *, uintptr_t, const struct iio_chan_spec *, const char *, size_t);
+	uintptr_t private;
+};
+
+enum iio_event_info {
+	IIO_EV_INFO_ENABLE = 0,
+	IIO_EV_INFO_VALUE = 1,
+	IIO_EV_INFO_HYSTERESIS = 2,
+	IIO_EV_INFO_PERIOD = 3,
+	IIO_EV_INFO_HIGH_PASS_FILTER_3DB = 4,
+	IIO_EV_INFO_LOW_PASS_FILTER_3DB = 5,
+	IIO_EV_INFO_TIMEOUT = 6,
+	IIO_EV_INFO_RESET_TIMEOUT = 7,
+	IIO_EV_INFO_TAP2_MIN_DELAY = 8,
+	IIO_EV_INFO_RUNNING_PERIOD = 9,
+	IIO_EV_INFO_RUNNING_COUNT = 10,
+};
+
+struct iio_info {
+	const struct attribute_group *event_attrs;
+	const struct attribute_group *attrs;
+	int (*read_raw)(struct iio_dev *, const struct iio_chan_spec *, int *, int *, long);
+	int (*read_raw_multi)(struct iio_dev *, const struct iio_chan_spec *, int, int *, int *, long);
+	int (*read_avail)(struct iio_dev *, const struct iio_chan_spec *, const int **, int *, int *, long);
+	int (*write_raw)(struct iio_dev *, const struct iio_chan_spec *, int, int, long);
+	int (*read_label)(struct iio_dev *, const struct iio_chan_spec *, char *);
+	int (*write_raw_get_fmt)(struct iio_dev *, const struct iio_chan_spec *, long);
+	int (*read_event_config)(struct iio_dev *, const struct iio_chan_spec *, enum iio_event_type, enum iio_event_direction);
+	int (*write_event_config)(struct iio_dev *, const struct iio_chan_spec *, enum iio_event_type, enum iio_event_direction, int);
+	int (*read_event_value)(struct iio_dev *, const struct iio_chan_spec *, enum iio_event_type, enum iio_event_direction, enum iio_event_info, int *, int *);
+	int (*write_event_value)(struct iio_dev *, const struct iio_chan_spec *, enum iio_event_type, enum iio_event_direction, enum iio_event_info, int, int);
+	int (*validate_trigger)(struct iio_dev *, struct iio_trigger *);
+	int (*update_scan_mode)(struct iio_dev *, const unsigned long *);
+	int (*debugfs_reg_access)(struct iio_dev *, unsigned int, unsigned int, unsigned int *);
+	int (*fwnode_xlate)(struct iio_dev *, const struct fwnode_reference_args *);
+	int (*hwfifo_set_watermark)(struct iio_dev *, unsigned int);
+	int (*hwfifo_flush_to_buffer)(struct iio_dev *, unsigned int);
+};
+
+struct iio_mount_matrix {
+	const char *rotation[9];
+};
+
+enum iio_available_type {
+	IIO_AVAIL_LIST = 0,
+	IIO_AVAIL_RANGE = 1,
+};
+
+struct iio_event_interface;
+
+struct iio_ioctl_handler;
+
+struct iio_dev_opaque {
+	struct iio_dev indio_dev;
+	int currentmode;
+	int id;
+	struct module *driver_module;
+	struct mutex mlock;
+	struct lock_class_key mlock_key;
+	struct mutex info_exist_lock;
+	bool trig_readonly;
+	struct iio_event_interface *event_interface;
+	struct iio_buffer **attached_buffers;
+	unsigned int attached_buffers_cnt;
+	struct iio_ioctl_handler *buffer_ioctl_handler;
+	struct list_head buffer_list;
+	struct list_head channel_attr_list;
+	struct attribute_group chan_attr_group;
+	struct list_head ioctl_handlers;
+	const struct attribute_group **groups;
+	int groupcounter;
+	struct attribute_group legacy_scan_el_group;
+	struct attribute_group legacy_buffer_group;
+	void *bounce_buffer;
+	size_t bounce_buffer_size;
+	unsigned int scan_index_timestamp;
+	clockid_t clock_id;
+	struct cdev chrdev;
+	unsigned long flags;
+	struct dentry *debugfs_dentry;
+	unsigned int cached_reg_addr;
+	char read_buf[20];
+	unsigned int read_buf_len;
+};
+
+struct iio_ioctl_handler {
+	struct list_head entry;
+	long (*ioctl)(struct iio_dev *, struct file *, unsigned int, unsigned long);
+};
+
+struct iio_const_attr {
+	const char *string;
+	struct device_attribute dev_attr;
+};
+
+struct iio_enum {
+	const char * const *items;
+	unsigned int num_items;
+	int (*set)(struct iio_dev *, const struct iio_chan_spec *, unsigned int);
+	int (*get)(struct iio_dev *, const struct iio_chan_spec *);
+};
+
+typedef const struct iio_mount_matrix *iio_get_mount_matrix_t(const struct iio_dev *, const struct iio_chan_spec *);
+
+struct iio_event_data {
+	__u64 id;
+	__s64 timestamp;
+};
+
+struct iio_event_interface {
+	wait_queue_head_t wait;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct iio_event_data *type;
+			const struct iio_event_data *const_type;
+			char (*rectype)[0];
+			struct iio_event_data *ptr;
+			const struct iio_event_data *ptr_const;
+		};
+		struct iio_event_data buf[16];
+	} det_events;
+	struct list_head dev_attr_list;
+	unsigned long flags;
+	struct attribute_group group;
+	struct mutex read_lock;
+	struct iio_ioctl_handler ioctl_handler;
+};
+
+struct iio_dev_buffer_pair {
+	struct iio_dev *indio_dev;
+	struct iio_buffer *buffer;
+};
+
+enum iio_chan_info_enum {
+	IIO_CHAN_INFO_RAW = 0,
+	IIO_CHAN_INFO_PROCESSED = 1,
+	IIO_CHAN_INFO_SCALE = 2,
+	IIO_CHAN_INFO_OFFSET = 3,
+	IIO_CHAN_INFO_CALIBSCALE = 4,
+	IIO_CHAN_INFO_CALIBBIAS = 5,
+	IIO_CHAN_INFO_PEAK = 6,
+	IIO_CHAN_INFO_PEAK_SCALE = 7,
+	IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW = 8,
+	IIO_CHAN_INFO_AVERAGE_RAW = 9,
+	IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY = 10,
+	IIO_CHAN_INFO_HIGH_PASS_FILTER_3DB_FREQUENCY = 11,
+	IIO_CHAN_INFO_SAMP_FREQ = 12,
+	IIO_CHAN_INFO_FREQUENCY = 13,
+	IIO_CHAN_INFO_PHASE = 14,
+	IIO_CHAN_INFO_HARDWAREGAIN = 15,
+	IIO_CHAN_INFO_HYSTERESIS = 16,
+	IIO_CHAN_INFO_HYSTERESIS_RELATIVE = 17,
+	IIO_CHAN_INFO_INT_TIME = 18,
+	IIO_CHAN_INFO_ENABLE = 19,
+	IIO_CHAN_INFO_CALIBHEIGHT = 20,
+	IIO_CHAN_INFO_CALIBWEIGHT = 21,
+	IIO_CHAN_INFO_DEBOUNCE_COUNT = 22,
+	IIO_CHAN_INFO_DEBOUNCE_TIME = 23,
+	IIO_CHAN_INFO_CALIBEMISSIVITY = 24,
+	IIO_CHAN_INFO_OVERSAMPLING_RATIO = 25,
+	IIO_CHAN_INFO_THERMOCOUPLE_TYPE = 26,
+	IIO_CHAN_INFO_CALIBAMBIENT = 27,
+	IIO_CHAN_INFO_ZEROPOINT = 28,
+};
+
+struct iio_map;
+
+struct iio_map_internal {
+	struct iio_dev *indio_dev;
+	struct iio_map *map;
+	struct list_head l;
+};
+
+struct iio_map {
+	const char *adc_channel_label;
+	const char *consumer_dev_name;
+	const char *consumer_channel;
+	void *consumer_data;
+};
+
+struct iio_channel {
+	struct iio_dev *indio_dev;
+	const struct iio_chan_spec *channel;
+	void *data;
+};
+
+struct iio_demux_table {
+	unsigned int from;
+	unsigned int to;
+	unsigned int length;
+	struct list_head l;
+};
+
+struct iio_device_config {
+	unsigned int mode;
+	unsigned int watermark;
+	const unsigned long *scan_mask;
+	unsigned int scan_bytes;
+	bool scan_timestamp;
+};
+
+struct iio_subirq {
+	bool enabled;
+};
+
+struct iio_trigger_ops;
+
+struct iio_trigger {
+	const struct iio_trigger_ops *ops;
+	struct module *owner;
+	int id;
+	const char *name;
+	struct device dev;
+	struct list_head list;
+	struct list_head alloc_list;
+	atomic_t use_count;
+	struct irq_chip subirq_chip;
+	int subirq_base;
+	struct iio_subirq subirqs[2];
+	unsigned long pool[1];
+	struct mutex pool_lock;
+	bool attached_own_device;
+	struct work_struct reenable_work;
+};
+
+struct iio_trigger_ops {
+	int (*set_trigger_state)(struct iio_trigger *, bool);
+	void (*reenable)(struct iio_trigger *);
+	int (*validate_device)(struct iio_trigger *, struct iio_dev *);
+};
+
+struct iio_poll_func {
+	struct iio_dev *indio_dev;
+	irqreturn_t (*h)(int, void *);
+	irqreturn_t (*thread)(int, void *);
+	int type;
+	char *name;
+	int irq;
+	s64 timestamp;
+};
+
+struct dtpm;
+
+struct dtpm_subsys_ops {
+	const char *name;
+	int (*init)();
+	void (*exit)();
+	int (*setup)(struct dtpm *, struct device_node *);
+};
+
+struct powercap_zone_ops;
+
+struct powercap_zone_constraint;
+
+struct powercap_zone {
+	int id;
+	char *name;
+	void *control_type_inst;
+	const struct powercap_zone_ops *ops;
+	struct device dev;
+	int const_id_cnt;
+	struct idr idr;
+	struct idr *parent_idr;
+	void *private_data;
+	struct attribute **zone_dev_attrs;
+	int zone_attr_count;
+	struct attribute_group dev_zone_attr_group;
+	const struct attribute_group *dev_attr_groups[2];
+	bool allocated;
+	struct powercap_zone_constraint *constraints;
+};
+
+struct dtpm_ops;
+
+struct dtpm {
+	struct powercap_zone zone;
+	struct dtpm *parent;
+	struct list_head sibling;
+	struct list_head children;
+	struct dtpm_ops *ops;
+	unsigned long flags;
+	u64 power_limit;
+	u64 power_max;
+	u64 power_min;
+	int weight;
+};
+
+struct powercap_zone_ops {
+	int (*get_max_energy_range_uj)(struct powercap_zone *, u64 *);
+	int (*get_energy_uj)(struct powercap_zone *, u64 *);
+	int (*reset_energy_uj)(struct powercap_zone *);
+	int (*get_max_power_range_uw)(struct powercap_zone *, u64 *);
+	int (*get_power_uw)(struct powercap_zone *, u64 *);
+	int (*set_enable)(struct powercap_zone *, bool);
+	int (*get_enable)(struct powercap_zone *, bool *);
+	int (*release)(struct powercap_zone *);
+};
+
+struct powercap_zone_constraint_ops;
+
+struct powercap_zone_constraint {
+	int id;
+	struct powercap_zone *power_zone;
+	const struct powercap_zone_constraint_ops *ops;
+};
+
+struct powercap_zone_constraint_ops {
+	int (*set_power_limit_uw)(struct powercap_zone *, int, u64);
+	int (*get_power_limit_uw)(struct powercap_zone *, int, u64 *);
+	int (*set_time_window_us)(struct powercap_zone *, int, u64);
+	int (*get_time_window_us)(struct powercap_zone *, int, u64 *);
+	int (*get_max_power_uw)(struct powercap_zone *, int, u64 *);
+	int (*get_min_power_uw)(struct powercap_zone *, int, u64 *);
+	int (*get_max_time_window_us)(struct powercap_zone *, int, u64 *);
+	int (*get_min_time_window_us)(struct powercap_zone *, int, u64 *);
+	const char * (*get_name)(struct powercap_zone *, int);
+};
+
+struct dtpm_ops {
+	u64 (*set_power_uw)(struct dtpm *, u64);
+	u64 (*get_power_uw)(struct dtpm *);
+	int (*update_power_uw)(struct dtpm *);
+	void (*release)(struct dtpm *);
+};
+
+struct powercap_control_type_ops;
+
+struct powercap_control_type {
+	struct device dev;
+	struct idr idr;
+	int nr_zones;
+	const struct powercap_control_type_ops *ops;
+	struct mutex lock;
+	bool allocated;
+	struct list_head node;
+};
+
+struct powercap_control_type_ops {
+	int (*set_enable)(struct powercap_control_type *, bool);
+	int (*get_enable)(struct powercap_control_type *, bool *);
+	int (*release)(struct powercap_control_type *);
+};
+
+struct dtpm_node;
+
+typedef struct dtpm * (*dtpm_node_callback_t)(const struct dtpm_node *, struct dtpm *);
+
+enum DTPM_NODE_TYPE {
+	DTPM_NODE_VIRTUAL = 0,
+	DTPM_NODE_DT = 1,
+};
+
+struct dtpm_node {
+	enum DTPM_NODE_TYPE type;
+	const char *name;
+	struct dtpm_node *parent;
+};
+
+struct dtpm_cpu {
+	struct dtpm dtpm;
+	struct freq_qos_request qos_req;
+	int cpu;
+};
+
+struct dtpm_devfreq {
+	struct dtpm dtpm;
+	struct dev_pm_qos_request qos_req;
+	struct devfreq *devfreq;
+};
+
+struct powercap_constraint_attr {
+	struct device_attribute power_limit_attr;
+	struct device_attribute time_window_attr;
+	struct device_attribute max_power_attr;
+	struct device_attribute min_power_attr;
+	struct device_attribute max_time_window_attr;
+	struct device_attribute min_time_window_attr;
+	struct device_attribute name_attr;
+};
+
+struct idle_inject_thread {
+	struct task_struct *tsk;
+	int should_run;
+};
+
+struct idle_inject_device {
+	struct hrtimer timer;
+	unsigned int idle_duration_us;
+	unsigned int run_duration_us;
+	unsigned int latency_us;
+	bool (*update)();
+	unsigned long cpumask[0];
+};
+
+struct pmu_irq_ops {
+	void (*enable_pmuirq)(unsigned int);
+	void (*disable_pmuirq)(unsigned int);
+	void (*free_pmuirq)(unsigned int, int, void __attribute__((btf_type_tag("percpu"))) *);
+};
+
+enum armpmu_attr_groups {
+	ARMPMU_ATTR_GROUP_COMMON = 0,
+	ARMPMU_ATTR_GROUP_EVENTS = 1,
+	ARMPMU_ATTR_GROUP_FORMATS = 2,
+	ARMPMU_ATTR_GROUP_CAPS = 3,
+	ARMPMU_NR_ATTR_GROUPS = 4,
+};
+
+enum perf_hw_id {
+	PERF_COUNT_HW_CPU_CYCLES = 0,
+	PERF_COUNT_HW_INSTRUCTIONS = 1,
+	PERF_COUNT_HW_CACHE_REFERENCES = 2,
+	PERF_COUNT_HW_CACHE_MISSES = 3,
+	PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
+	PERF_COUNT_HW_BRANCH_MISSES = 5,
+	PERF_COUNT_HW_BUS_CYCLES = 6,
+	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
+	PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
+	PERF_COUNT_HW_REF_CPU_CYCLES = 9,
+	PERF_COUNT_HW_MAX = 10,
+};
+
+enum perf_hw_cache_id {
+	PERF_COUNT_HW_CACHE_L1D = 0,
+	PERF_COUNT_HW_CACHE_L1I = 1,
+	PERF_COUNT_HW_CACHE_LL = 2,
+	PERF_COUNT_HW_CACHE_DTLB = 3,
+	PERF_COUNT_HW_CACHE_ITLB = 4,
+	PERF_COUNT_HW_CACHE_BPU = 5,
+	PERF_COUNT_HW_CACHE_NODE = 6,
+	PERF_COUNT_HW_CACHE_MAX = 7,
+};
+
+enum perf_hw_cache_op_id {
+	PERF_COUNT_HW_CACHE_OP_READ = 0,
+	PERF_COUNT_HW_CACHE_OP_WRITE = 1,
+	PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
+	PERF_COUNT_HW_CACHE_OP_MAX = 3,
+};
+
+enum perf_hw_cache_op_result_id {
+	PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
+	PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
+	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
+};
+
+typedef int (*armpmu_init_fn)(struct arm_pmu *);
+
+struct pmu_probe_info {
+	unsigned int cpuid;
+	unsigned int mask;
+	armpmu_init_fn init;
+};
+
+struct armv8pmu_probe_info {
+	struct arm_pmu *pmu;
+	bool present;
+};
+
+typedef void (*btf_trace_mc_event)(void *, const unsigned int, const char *, const char *, const int, const u8, const s8, const s8, const s8, unsigned long, const u8, unsigned long, const char *);
+
+struct cper_sec_proc_arm;
+
+typedef void (*btf_trace_arm_event)(void *, const struct cper_sec_proc_arm *);
+
+struct cper_sec_proc_arm {
+	u32 validation_bits;
+	u16 err_info_num;
+	u16 context_info_num;
+	u32 section_length;
+	u8 affinity_level;
+	u8 reserved[3];
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+};
+
+typedef void (*btf_trace_non_standard_event)(void *, const guid_t *, const guid_t *, const char *, const u8, const u8 *, const u32);
+
+typedef void (*btf_trace_aer_event)(void *, const char *, const u32, const u8, const u8, struct aer_header_log_regs *);
+
+struct trace_event_raw_mc_event {
+	struct trace_entry ent;
+	unsigned int error_type;
+	u32 __data_loc_msg;
+	u32 __data_loc_label;
+	u16 error_count;
+	u8 mc_index;
+	s8 top_layer;
+	s8 middle_layer;
+	s8 lower_layer;
+	long address;
+	u8 grain_bits;
+	long syndrome;
+	u32 __data_loc_driver_detail;
+	char __data[0];
+};
+
+struct trace_event_raw_arm_event {
+	struct trace_entry ent;
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+	u8 affinity;
+	char __data[0];
+};
+
+struct trace_event_raw_non_standard_event {
+	struct trace_entry ent;
+	char sec_type[16];
+	char fru_id[16];
+	u32 __data_loc_fru_text;
+	u8 sev;
+	u32 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_aer_event {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 status;
+	u8 severity;
+	u8 tlp_header_valid;
+	u32 tlp_header[4];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_non_standard_event {
+	u32 fru_text;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_aer_event {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_mc_event {
+	u32 msg;
+	u32 label;
+	u32 driver_detail;
+};
+
+struct trace_event_data_offsets_arm_event {};
+
+struct binder_features {
+	bool oneway_spam_detection;
+	bool extended_error;
+};
+
+enum binderfs_stats_mode {
+	binderfs_stats_mode_unset = 0,
+	binderfs_stats_mode_global = 1,
+};
+
+enum binderfs_param {
+	Opt_max___2 = 0,
+	Opt_stats_mode = 1,
+};
+
+enum binder_work_type {
+	BINDER_WORK_TRANSACTION = 1,
+	BINDER_WORK_TRANSACTION_COMPLETE = 2,
+	BINDER_WORK_TRANSACTION_PENDING = 3,
+	BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT = 4,
+	BINDER_WORK_RETURN_ERROR = 5,
+	BINDER_WORK_NODE = 6,
+	BINDER_WORK_DEAD_BINDER = 7,
+	BINDER_WORK_DEAD_BINDER_AND_CLEAR = 8,
+	BINDER_WORK_CLEAR_DEATH_NOTIFICATION = 9,
+};
+
+struct binderfs_device {
+	char name[256];
+	__u32 major;
+	__u32 minor;
+};
+
+struct binderfs_mount_opts {
+	int max;
+	int stats_mode;
+};
+
+struct binderfs_info {
+	struct ipc_namespace *ipc_ns;
+	struct dentry *control_dentry;
+	kuid_t root_uid;
+	kgid_t root_gid;
+	struct binderfs_mount_opts mount_opts;
+	int device_count;
+	struct dentry *proc_log_dir;
+};
+
+struct binder_node;
+
+struct binder_context {
+	struct binder_node *binder_context_mgr_node;
+	struct mutex context_mgr_node_lock;
+	kuid_t binder_context_mgr_uid;
+	const char *name;
+};
+
+struct binder_device {
+	struct hlist_node hlist;
+	struct miscdevice miscdev;
+	struct binder_context context;
+	struct inode *binderfs_inode;
+	refcount_t ref;
+};
+
+struct binder_work {
+	struct list_head entry;
+	enum binder_work_type type;
+	u64 android_oem_data1;
+};
+
+typedef __u64 binder_uintptr_t;
+
+struct binder_proc;
+
+struct binder_node {
+	int debug_id;
+	spinlock_t lock;
+	struct binder_work work;
+	union {
+		struct rb_node rb_node;
+		struct hlist_node dead_node;
+	};
+	struct binder_proc *proc;
+	struct hlist_head refs;
+	int internal_strong_refs;
+	int local_weak_refs;
+	int local_strong_refs;
+	int tmp_refs;
+	binder_uintptr_t ptr;
+	binder_uintptr_t cookie;
+	struct {
+		u8 has_strong_ref: 1;
+		u8 pending_strong_ref: 1;
+		u8 has_weak_ref: 1;
+		u8 pending_weak_ref: 1;
+	};
+	struct {
+		u8 sched_policy: 2;
+		u8 inherit_rt: 1;
+		u8 accept_fds: 1;
+		u8 txn_security_ctx: 1;
+		u8 min_priority;
+	};
+	bool has_async_transaction;
+	struct list_head async_todo;
+};
+
+struct binder_stats {
+	atomic_t br[21];
+	atomic_t bc[19];
+	atomic_t obj_created[7];
+	atomic_t obj_deleted[7];
+};
+
+struct binder_priority {
+	unsigned int sched_policy;
+	int prio;
+};
+
+struct binder_lru_page;
+
+struct binder_alloc {
+	spinlock_t lock;
+	struct vm_area_struct *vma;
+	struct mm_struct *mm;
+	unsigned long buffer;
+	struct list_head buffers;
+	struct rb_root free_buffers;
+	struct rb_root allocated_buffers;
+	size_t free_async_space;
+	struct binder_lru_page *pages;
+	size_t buffer_size;
+	int pid;
+	size_t pages_high;
+	bool oneway_spam_detected;
+	u64 android_oem_data1;
+};
+
+struct binder_proc {
+	struct hlist_node proc_node;
+	struct rb_root threads;
+	struct rb_root nodes;
+	struct rb_root refs_by_desc;
+	struct rb_root refs_by_node;
+	struct list_head waiting_threads;
+	int pid;
+	struct task_struct *tsk;
+	const struct cred *cred;
+	struct hlist_node deferred_work_node;
+	int deferred_work;
+	int outstanding_txns;
+	bool is_dead;
+	bool is_frozen;
+	bool sync_recv;
+	bool async_recv;
+	wait_queue_head_t freeze_wait;
+	struct list_head todo;
+	struct binder_stats stats;
+	struct list_head delivered_death;
+	u32 max_threads;
+	int requested_threads;
+	int requested_threads_started;
+	int tmp_ref;
+	struct binder_priority default_priority;
+	struct dentry *debugfs_entry;
+	struct binder_alloc alloc;
+	struct binder_context *context;
+	spinlock_t inner_lock;
+	spinlock_t outer_lock;
+	struct dentry *binderfs_entry;
+	bool oneway_spam_detection_enabled;
+	u64 android_oem_data1;
+};
+
+struct binder_lru_page {
+	struct list_head lru;
+	struct page *page_ptr;
+	struct binder_alloc *alloc;
+};
+
+struct binder_debugfs_entry {
+	const char *name;
+	umode_t mode;
+	const struct file_operations *fops;
+	void *data;
+};
+
+typedef void (*btf_trace_binder_ioctl)(void *, unsigned int, unsigned long);
+
+typedef void (*btf_trace_binder_lock)(void *, const char *);
+
+typedef void (*btf_trace_binder_locked)(void *, const char *);
+
+typedef void (*btf_trace_binder_unlock)(void *, const char *);
+
+typedef void (*btf_trace_binder_ioctl_done)(void *, int);
+
+typedef void (*btf_trace_binder_write_done)(void *, int);
+
+typedef void (*btf_trace_binder_read_done)(void *, int);
+
+typedef void (*btf_trace_binder_set_priority)(void *, int, int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_binder_wait_for_work)(void *, bool, bool, bool);
+
+struct binder_transaction;
+
+typedef void (*btf_trace_binder_txn_latency_free)(void *, struct binder_transaction *, int, int, int, int);
+
+struct binder_thread;
+
+struct binder_buffer;
+
+struct binder_transaction {
+	int debug_id;
+	struct binder_work work;
+	struct binder_thread *from;
+	pid_t from_pid;
+	pid_t from_tid;
+	struct binder_transaction *from_parent;
+	struct binder_proc *to_proc;
+	struct binder_thread *to_thread;
+	struct binder_transaction *to_parent;
+	unsigned int need_reply: 1;
+	struct binder_buffer *buffer;
+	unsigned int code;
+	unsigned int flags;
+	struct binder_priority priority;
+	struct binder_priority saved_priority;
+	bool set_priority_called;
+	bool is_nested;
+	kuid_t sender_euid;
+	ktime_t start_time;
+	struct list_head fd_fixups;
+	binder_uintptr_t security_ctx;
+	spinlock_t lock;
+	u64 android_vendor_data1;
+	u64 android_oem_data1;
+};
+
+struct binder_error {
+	struct binder_work work;
+	uint32_t cmd;
+};
+
+struct binder_extended_error {
+	__u32 id;
+	__u32 command;
+	__s32 param;
+};
+
+enum binder_prio_state {
+	BINDER_PRIO_SET = 0,
+	BINDER_PRIO_PENDING = 1,
+	BINDER_PRIO_ABORT = 2,
+};
+
+struct binder_thread {
+	struct binder_proc *proc;
+	struct rb_node rb_node;
+	struct list_head waiting_thread_node;
+	int pid;
+	int looper;
+	bool looper_need_return;
+	struct binder_transaction *transaction_stack;
+	struct list_head todo;
+	bool process_todo;
+	struct binder_error return_error;
+	struct binder_error reply_error;
+	struct binder_extended_error ee;
+	wait_queue_head_t wait;
+	struct binder_stats stats;
+	atomic_t tmp_ref;
+	bool is_dead;
+	struct task_struct *task;
+	spinlock_t prio_lock;
+	struct binder_priority prio_next;
+	enum binder_prio_state prio_state;
+};
+
+struct binder_buffer {
+	struct list_head entry;
+	struct rb_node rb_node;
+	unsigned int free: 1;
+	unsigned int clear_on_free: 1;
+	unsigned int allow_user_free: 1;
+	unsigned int async_transaction: 1;
+	unsigned int oneway_spam_suspect: 1;
+	unsigned int debug_id: 27;
+	struct binder_transaction *transaction;
+	struct binder_node *target_node;
+	size_t data_size;
+	size_t offsets_size;
+	size_t extra_buffers_size;
+	unsigned long user_data;
+	int pid;
+};
+
+typedef void (*btf_trace_binder_transaction)(void *, bool, struct binder_transaction *, struct binder_node *);
+
+typedef void (*btf_trace_binder_transaction_received)(void *, struct binder_transaction *);
+
+struct binder_ref_data;
+
+typedef void (*btf_trace_binder_transaction_node_to_ref)(void *, struct binder_transaction *, struct binder_node *, struct binder_ref_data *);
+
+struct binder_ref_data {
+	int debug_id;
+	uint32_t desc;
+	int strong;
+	int weak;
+};
+
+typedef void (*btf_trace_binder_transaction_ref_to_node)(void *, struct binder_transaction *, struct binder_node *, struct binder_ref_data *);
+
+typedef void (*btf_trace_binder_transaction_ref_to_ref)(void *, struct binder_transaction *, struct binder_node *, struct binder_ref_data *, struct binder_ref_data *);
+
+typedef void (*btf_trace_binder_transaction_fd_send)(void *, struct binder_transaction *, int, size_t);
+
+typedef void (*btf_trace_binder_transaction_fd_recv)(void *, struct binder_transaction *, int, size_t);
+
+typedef void (*btf_trace_binder_transaction_alloc_buf)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_transaction_buffer_release)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_transaction_failed_buffer_release)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_transaction_update_buffer_release)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_update_page_range)(void *, struct binder_alloc *, bool, unsigned long, unsigned long);
+
+typedef void (*btf_trace_binder_alloc_lru_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_alloc_lru_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_free_lru_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_free_lru_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_alloc_page_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_alloc_page_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_user_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_user_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_kernel_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_kernel_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_command)(void *, uint32_t);
+
+typedef void (*btf_trace_binder_return)(void *, uint32_t);
+
+struct binder_transaction_log_entry {
+	int debug_id;
+	int debug_id_done;
+	int call_type;
+	int from_proc;
+	int from_thread;
+	int target_handle;
+	int to_proc;
+	int to_thread;
+	int to_node;
+	int data_size;
+	int offsets_size;
+	int return_error_line;
+	uint32_t return_error;
+	uint32_t return_error_param;
+	char context_name[256];
+};
+
+struct binder_transaction_log {
+	atomic_t cur;
+	bool full;
+	struct binder_transaction_log_entry entry[32];
+};
+
+enum {
+	BINDER_LOOPER_STATE_REGISTERED = 1,
+	BINDER_LOOPER_STATE_ENTERED = 2,
+	BINDER_LOOPER_STATE_EXITED = 4,
+	BINDER_LOOPER_STATE_INVALID = 8,
+	BINDER_LOOPER_STATE_WAITING = 16,
+	BINDER_LOOPER_STATE_POLL = 32,
+};
+
+enum binder_stat_types {
+	BINDER_STAT_PROC = 0,
+	BINDER_STAT_THREAD = 1,
+	BINDER_STAT_NODE = 2,
+	BINDER_STAT_REF = 3,
+	BINDER_STAT_DEATH = 4,
+	BINDER_STAT_TRANSACTION = 5,
+	BINDER_STAT_TRANSACTION_COMPLETE = 6,
+	BINDER_STAT_COUNT = 7,
+};
+
+enum binder_driver_return_protocol {
+	BR_ERROR = 2147774976,
+	BR_OK = 29185,
+	BR_TRANSACTION_SEC_CTX = 2152231426,
+	BR_TRANSACTION = 2151707138,
+	BR_REPLY = 2151707139,
+	BR_ACQUIRE_RESULT = 2147774980,
+	BR_DEAD_REPLY = 29189,
+	BR_TRANSACTION_COMPLETE = 29190,
+	BR_INCREFS = 2148561415,
+	BR_ACQUIRE = 2148561416,
+	BR_RELEASE = 2148561417,
+	BR_DECREFS = 2148561418,
+	BR_ATTEMPT_ACQUIRE = 2149085707,
+	BR_NOOP = 29196,
+	BR_SPAWN_LOOPER = 29197,
+	BR_FINISHED = 29198,
+	BR_DEAD_BINDER = 2148037135,
+	BR_CLEAR_DEATH_NOTIFICATION_DONE = 2148037136,
+	BR_FAILED_REPLY = 29201,
+	BR_FROZEN_REPLY = 29202,
+	BR_ONEWAY_SPAM_SUSPECT = 29203,
+	BR_TRANSACTION_PENDING_FROZEN = 29204,
+};
+
+enum {
+	BINDER_DEBUG_USER_ERROR = 1,
+	BINDER_DEBUG_FAILED_TRANSACTION = 2,
+	BINDER_DEBUG_DEAD_TRANSACTION = 4,
+	BINDER_DEBUG_OPEN_CLOSE = 8,
+	BINDER_DEBUG_DEAD_BINDER = 16,
+	BINDER_DEBUG_DEATH_NOTIFICATION = 32,
+	BINDER_DEBUG_READ_WRITE = 64,
+	BINDER_DEBUG_USER_REFS = 128,
+	BINDER_DEBUG_THREADS = 256,
+	BINDER_DEBUG_TRANSACTION = 512,
+	BINDER_DEBUG_TRANSACTION_COMPLETE = 1024,
+	BINDER_DEBUG_FREE_BUFFER = 2048,
+	BINDER_DEBUG_INTERNAL_REFS = 4096,
+	BINDER_DEBUG_PRIORITY_CAP = 8192,
+	BINDER_DEBUG_SPINLOCKS = 16384,
+};
+
+enum {
+	BINDER_WRITE_READ = 3224396289,
+	BINDER_SET_IDLE_TIMEOUT = 1074291203,
+	BINDER_SET_MAX_THREADS = 1074029061,
+	BINDER_SET_IDLE_PRIORITY = 1074029062,
+	BINDER_SET_CONTEXT_MGR = 1074029063,
+	BINDER_THREAD_EXIT = 1074029064,
+	BINDER_VERSION = 3221512713,
+	BINDER_GET_NODE_DEBUG_INFO = 3222823435,
+	BINDER_GET_NODE_INFO_FOR_REF = 3222823436,
+	BINDER_SET_CONTEXT_MGR_EXT = 1075339789,
+	BINDER_FREEZE = 1074553358,
+	BINDER_GET_FROZEN_INFO = 3222037007,
+	BINDER_ENABLE_ONEWAY_SPAM_DETECTION = 1074029072,
+	BINDER_GET_EXTENDED_ERROR = 3222037009,
+};
+
+enum binder_driver_command_protocol {
+	BC_TRANSACTION = 1077961472,
+	BC_REPLY = 1077961473,
+	BC_ACQUIRE_RESULT = 1074029314,
+	BC_FREE_BUFFER = 1074291459,
+	BC_INCREFS = 1074029316,
+	BC_ACQUIRE = 1074029317,
+	BC_RELEASE = 1074029318,
+	BC_DECREFS = 1074029319,
+	BC_INCREFS_DONE = 1074815752,
+	BC_ACQUIRE_DONE = 1074815753,
+	BC_ATTEMPT_ACQUIRE = 1074291466,
+	BC_REGISTER_LOOPER = 25355,
+	BC_ENTER_LOOPER = 25356,
+	BC_EXIT_LOOPER = 25357,
+	BC_REQUEST_DEATH_NOTIFICATION = 1074553614,
+	BC_CLEAR_DEATH_NOTIFICATION = 1074553615,
+	BC_DEAD_BINDER_DONE = 1074291472,
+	BC_TRANSACTION_SG = 1078485777,
+	BC_REPLY_SG = 1078485778,
+};
+
+enum {
+	BINDER_TYPE_BINDER = 1935813253,
+	BINDER_TYPE_WEAK_BINDER = 2002922117,
+	BINDER_TYPE_HANDLE = 1936206469,
+	BINDER_TYPE_WEAK_HANDLE = 2003315333,
+	BINDER_TYPE_FD = 1717840517,
+	BINDER_TYPE_FDA = 1717854597,
+	BINDER_TYPE_PTR = 1886661253,
+};
+
+enum transaction_flags {
+	TF_ONE_WAY = 1,
+	TF_ROOT_OBJECT = 4,
+	TF_STATUS_CODE = 8,
+	TF_ACCEPT_FDS = 16,
+	TF_CLEAR_BUF = 32,
+	TF_UPDATE_TXN = 64,
+};
+
+enum flat_binder_object_flags {
+	FLAT_BINDER_FLAG_PRIORITY_MASK = 255,
+	FLAT_BINDER_FLAG_ACCEPTS_FDS = 256,
+	FLAT_BINDER_FLAG_SCHED_POLICY_MASK = 1536,
+	FLAT_BINDER_FLAG_INHERIT_RT = 2048,
+	FLAT_BINDER_FLAG_TXN_SECURITY_CTX = 4096,
+};
+
+enum flat_binder_object_shifts {
+	FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT = 9,
+};
+
+enum {
+	BINDER_BUFFER_FLAG_HAS_PARENT = 1,
+};
+
+enum binder_deferred_state {
+	BINDER_DEFERRED_FLUSH = 1,
+	BINDER_DEFERRED_RELEASE = 2,
+};
+
+struct binder_ref_death {
+	struct binder_work work;
+	binder_uintptr_t cookie;
+};
+
+struct binder_ref {
+	struct binder_ref_data data;
+	struct rb_node rb_node_desc;
+	struct rb_node rb_node_node;
+	struct hlist_node node_entry;
+	struct binder_proc *proc;
+	struct binder_node *node;
+	struct binder_ref_death *death;
+};
+
+struct dbitmap {
+	unsigned int nbits;
+	unsigned long *map;
+};
+
+struct binder_proc_wrap {
+	struct binder_proc proc;
+	struct dbitmap dmap;
+};
+
+struct binder_object_header {
+	__u32 type;
+};
+
+struct flat_binder_object {
+	struct binder_object_header hdr;
+	__u32 flags;
+	union {
+		binder_uintptr_t binder;
+		__u32 handle;
+	};
+	binder_uintptr_t cookie;
+};
+
+typedef __u64 binder_size_t;
+
+struct binder_fd_array_object {
+	struct binder_object_header hdr;
+	__u32 pad;
+	binder_size_t num_fds;
+	binder_size_t parent;
+	binder_size_t parent_offset;
+};
+
+struct binder_task_work_cb {
+	struct callback_head twork;
+	struct file *file;
+};
+
+struct binder_fd_object {
+	struct binder_object_header hdr;
+	__u32 pad_flags;
+	union {
+		binder_uintptr_t pad_binder;
+		__u32 fd;
+	};
+	binder_uintptr_t cookie;
+};
+
+struct binder_buffer_object {
+	struct binder_object_header hdr;
+	__u32 flags;
+	binder_uintptr_t buffer;
+	binder_size_t length;
+	binder_size_t parent;
+	binder_size_t parent_offset;
+};
+
+struct binder_ptr_fixup {
+	binder_size_t offset;
+	size_t skip_size;
+	binder_uintptr_t fixup_data;
+	struct list_head node;
+};
+
+struct binder_sg_copy {
+	binder_size_t offset;
+	const void __attribute__((btf_type_tag("user"))) *sender_uaddr;
+	size_t length;
+	struct list_head node;
+};
+
+struct binder_txn_fd_fixup {
+	struct list_head fixup_entry;
+	struct file *file;
+	size_t offset;
+	int target_fd;
+};
+
+struct trace_event_raw_binder_ioctl {
+	struct trace_entry ent;
+	unsigned int cmd;
+	unsigned long arg;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_lock_class {
+	struct trace_entry ent;
+	const char *tag;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_function_return_class {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_set_priority {
+	struct trace_entry ent;
+	int proc;
+	int thread;
+	unsigned int old_prio;
+	unsigned int new_prio;
+	unsigned int desired_prio;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_wait_for_work {
+	struct trace_entry ent;
+	bool proc_work;
+	bool transaction_stack;
+	bool thread_todo;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_txn_latency_free {
+	struct trace_entry ent;
+	int debug_id;
+	int from_proc;
+	int from_thread;
+	int to_proc;
+	int to_thread;
+	unsigned int code;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction {
+	struct trace_entry ent;
+	int debug_id;
+	int target_node;
+	int to_proc;
+	int to_thread;
+	int reply;
+	unsigned int code;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_received {
+	struct trace_entry ent;
+	int debug_id;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_node_to_ref {
+	struct trace_entry ent;
+	int debug_id;
+	int node_debug_id;
+	binder_uintptr_t node_ptr;
+	int ref_debug_id;
+	uint32_t ref_desc;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_ref_to_node {
+	struct trace_entry ent;
+	int debug_id;
+	int ref_debug_id;
+	uint32_t ref_desc;
+	int node_debug_id;
+	binder_uintptr_t node_ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_ref_to_ref {
+	struct trace_entry ent;
+	int debug_id;
+	int node_debug_id;
+	int src_ref_debug_id;
+	uint32_t src_ref_desc;
+	int dest_ref_debug_id;
+	uint32_t dest_ref_desc;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_fd_send {
+	struct trace_entry ent;
+	int debug_id;
+	int fd;
+	size_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_fd_recv {
+	struct trace_entry ent;
+	int debug_id;
+	int fd;
+	size_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_buffer_class {
+	struct trace_entry ent;
+	int debug_id;
+	size_t data_size;
+	size_t offsets_size;
+	size_t extra_buffers_size;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_update_page_range {
+	struct trace_entry ent;
+	int proc;
+	bool allocate;
+	size_t offset;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_lru_page_class {
+	struct trace_entry ent;
+	int proc;
+	size_t page_index;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_command {
+	struct trace_entry ent;
+	uint32_t cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_return {
+	struct trace_entry ent;
+	uint32_t cmd;
+	char __data[0];
+};
+
+struct binder_freeze_info {
+	__u32 pid;
+	__u32 enable;
+	__u32 timeout_ms;
+};
+
+struct binder_transaction_data {
+	union {
+		__u32 handle;
+		binder_uintptr_t ptr;
+	} target;
+	binder_uintptr_t cookie;
+	__u32 code;
+	__u32 flags;
+	__kernel_pid_t sender_pid;
+	__kernel_uid32_t sender_euid;
+	binder_size_t data_size;
+	binder_size_t offsets_size;
+	union {
+		struct {
+			binder_uintptr_t buffer;
+			binder_uintptr_t offsets;
+		} ptr;
+		__u8 buf[8];
+	} data;
+};
+
+struct binder_transaction_data_sg {
+	struct binder_transaction_data transaction_data;
+	binder_size_t buffers_size;
+};
+
+struct binder_transaction_data_secctx {
+	struct binder_transaction_data transaction_data;
+	binder_uintptr_t secctx;
+};
+
+struct binder_object {
+	union {
+		struct binder_object_header hdr;
+		struct flat_binder_object fbo;
+		struct binder_fd_object fdo;
+		struct binder_buffer_object bbo;
+		struct binder_fd_array_object fdao;
+	};
+};
+
+struct binder_node_info_for_ref {
+	__u32 handle;
+	__u32 strong_count;
+	__u32 weak_count;
+	__u32 reserved1;
+	__u32 reserved2;
+	__u32 reserved3;
+};
+
+struct binder_node_debug_info {
+	binder_uintptr_t ptr;
+	binder_uintptr_t cookie;
+	__u32 has_strong_ref;
+	__u32 has_weak_ref;
+};
+
+struct binder_frozen_status_info {
+	__u32 pid;
+	__u32 sync_recv;
+	__u32 async_recv;
+};
+
+struct binder_version {
+	__s32 protocol_version;
+};
+
+struct trace_event_data_offsets_binder_ioctl {};
+
+struct trace_event_data_offsets_binder_lock_class {};
+
+struct trace_event_data_offsets_binder_function_return_class {};
+
+struct trace_event_data_offsets_binder_set_priority {};
+
+struct trace_event_data_offsets_binder_wait_for_work {};
+
+struct trace_event_data_offsets_binder_txn_latency_free {};
+
+struct trace_event_data_offsets_binder_transaction {};
+
+struct trace_event_data_offsets_binder_transaction_received {};
+
+struct trace_event_data_offsets_binder_transaction_node_to_ref {};
+
+struct trace_event_data_offsets_binder_transaction_ref_to_node {};
+
+struct trace_event_data_offsets_binder_transaction_ref_to_ref {};
+
+struct trace_event_data_offsets_binder_transaction_fd_send {};
+
+struct trace_event_data_offsets_binder_transaction_fd_recv {};
+
+struct trace_event_data_offsets_binder_buffer_class {};
+
+struct trace_event_data_offsets_binder_update_page_range {};
+
+struct trace_event_data_offsets_binder_lru_page_class {};
+
+struct trace_event_data_offsets_binder_command {};
+
+struct trace_event_data_offsets_binder_return {};
+
+struct binder_write_read {
+	binder_size_t write_size;
+	binder_size_t write_consumed;
+	binder_uintptr_t write_buffer;
+	binder_size_t read_size;
+	binder_size_t read_consumed;
+	binder_uintptr_t read_buffer;
+};
+
+enum {
+	BINDER_DEBUG_USER_ERROR___2 = 1,
+	BINDER_DEBUG_OPEN_CLOSE___2 = 2,
+	BINDER_DEBUG_BUFFER_ALLOC = 4,
+	BINDER_DEBUG_BUFFER_ALLOC_ASYNC = 8,
+};
+
+struct ads_entry {
+	char *name;
+	void *addr;
+};
+
+enum android_debug_symbol {
+	ADS_PER_CPU_START = 0,
+	ADS_PER_CPU_END = 1,
+	ADS_TEXT = 2,
+	ADS_SEND = 3,
+	ADS_MEM_BLOCK = 4,
+	ADS_INIT_MM = 5,
+	ADS_ITERATE_SUPERS = 6,
+	ADS_DROP_SLAB = 7,
+	ADS_FREE_PAGES = 8,
+	ADS_COMPACT_PAGES = 9,
+	ADS_SHOW_MEM = 10,
+	ADS_TOTAL_CMA = 11,
+	ADS_SLAB_CACHES = 12,
+	ADS_SLAB_MUTEX = 13,
+	ADS_END = 14,
+};
+
+enum android_debug_per_cpu_symbol {
+	ADS_IRQ_STACK_PTR = 0,
+	ADS_DEBUG_PER_CPU_END = 1,
+};
+
+struct packet_type {
+	__be16 type;
+	bool ignore_outgoing;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
+	bool (*id_match)(struct packet_type *, struct sock *);
+	struct net *af_packet_net;
+	void *af_packet_priv;
+	struct list_head list;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct gzvm_vcpu;
+
+struct kernel_info {
+	__u8 enabled_all;
+	__u8 enabled_base_relative;
+	__u8 enabled_absolute_percpu;
+	__u8 enabled_cfi_clang;
+	__u32 num_syms;
+	__u16 name_len;
+	__u16 bit_per_long;
+	__u16 module_name_len;
+	__u16 symbol_len;
+	__u64 _addresses_pa;
+	__u64 _relative_pa;
+	__u64 _stext_pa;
+	__u64 _etext_pa;
+	__u64 _sinittext_pa;
+	__u64 _einittext_pa;
+	__u64 _end_pa;
+	__u64 _offsets_pa;
+	__u64 _names_pa;
+	__u64 _token_table_pa;
+	__u64 _token_index_pa;
+	__u64 _markers_pa;
+	__u32 thread_size;
+	__u64 swapper_pg_dir_pa;
+	__u8 last_uts_release[64];
+	__u8 build_info[256];
+	__u32 enabled_modules_tree_lookup;
+	__u32 mod_mem_offset;
+	__u32 mod_kallsyms_offset;
+} __attribute__((packed));
+
+struct kernel_all_info {
+	__u32 magic_number;
+	__u32 combined_checksum;
+	struct kernel_info info;
+};
+
+enum {
+	NVMEM_ADD = 1,
+	NVMEM_REMOVE = 2,
+	NVMEM_CELL_ADD = 3,
+	NVMEM_CELL_REMOVE = 4,
+	NVMEM_LAYOUT_ADD = 5,
+	NVMEM_LAYOUT_REMOVE = 6,
+};
+
+struct nvmem_device {
+	struct module *owner;
+	struct device dev;
+	int stride;
+	int word_size;
+	int id;
+	struct kref refcnt;
+	size_t size;
+	bool read_only;
+	bool root_only;
+	int flags;
+	enum nvmem_type type;
+	struct bin_attribute eeprom;
+	struct device *base_dev;
+	struct list_head cells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	struct gpio_desc *wp_gpio;
+	struct nvmem_layout *layout;
+	void *priv;
+};
+
+struct nvmem_cell_table {
+	const char *nvmem_name;
+	const struct nvmem_cell_info *cells;
+	size_t ncells;
+	struct list_head node;
+};
+
+struct nvmem_cell_entry {
+	const char *name;
+	int offset;
+	size_t raw_len;
+	int bytes;
+	int bit_offset;
+	int nbits;
+	nvmem_cell_post_process_t read_post_process;
+	void *priv;
+	struct device_node *np;
+	struct nvmem_device *nvmem;
+	struct list_head node;
+};
+
+struct nvmem_cell {
+	struct nvmem_cell_entry *entry;
+	const char *id;
+	int index;
+};
+
+enum gnss_type {
+	GNSS_TYPE_NMEA = 0,
+	GNSS_TYPE_SIRF = 1,
+	GNSS_TYPE_UBX = 2,
+	GNSS_TYPE_MTK = 3,
+	GNSS_TYPE_COUNT = 4,
+};
+
+struct gnss_operations;
+
+struct gnss_device {
+	struct device dev;
+	struct cdev cdev;
+	int id;
+	enum gnss_type type;
+	unsigned long flags;
+	struct rw_semaphore rwsem;
+	const struct gnss_operations *ops;
+	unsigned int count;
+	unsigned int disconnected: 1;
+	struct mutex read_mutex;
+	struct kfifo read_fifo;
+	wait_queue_head_t read_queue;
+	struct mutex write_mutex;
+	char *write_buf;
+};
+
+struct gnss_operations {
+	int (*open)(struct gnss_device *);
+	void (*close)(struct gnss_device *);
+	int (*write_raw)(struct gnss_device *, const unsigned char *, size_t);
+};
+
+typedef void (*btf_trace_icc_set_bw)(void *, struct icc_path *, struct icc_node *, int, u32, u32);
+
+struct icc_req {
+	struct hlist_node req_node;
+	struct icc_node *node;
+	struct device *dev;
+	bool enabled;
+	u32 tag;
+	u32 avg_bw;
+	u32 peak_bw;
+};
+
+struct icc_path {
+	const char *name;
+	size_t num_nodes;
+	struct icc_req reqs[0];
+};
+
+typedef void (*btf_trace_icc_set_bw_end)(void *, struct icc_path *, int);
+
+struct trace_event_raw_icc_set_bw {
+	struct trace_entry ent;
+	u32 __data_loc_path_name;
+	u32 __data_loc_dev;
+	u32 __data_loc_node_name;
+	u32 avg_bw;
+	u32 peak_bw;
+	u32 node_avg_bw;
+	u32 node_peak_bw;
+	char __data[0];
+};
+
+struct trace_event_raw_icc_set_bw_end {
+	struct trace_entry ent;
+	u32 __data_loc_path_name;
+	u32 __data_loc_dev;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_icc_set_bw {
+	u32 path_name;
+	u32 dev;
+	u32 node_name;
+};
+
+struct trace_event_data_offsets_icc_set_bw_end {
+	u32 path_name;
+	u32 dev;
+};
+
+struct icc_onecell_data {
+	unsigned int num_nodes;
+	struct icc_node *nodes[0];
+};
+
+struct icc_bulk_data {
+	struct icc_path *path;
+	const char *name;
+	u32 avg_bw;
+	u32 peak_bw;
+};
+
+struct icc_bulk_devres {
+	struct icc_bulk_data *paths;
+	int num_paths;
+};
+
+struct debugfs_path {
+	const char *src;
+	const char *dst;
+	struct icc_path *path;
+	struct list_head list;
+};
+
+struct snd_minor {
+	int type;
+	int card;
+	int device;
+	const struct file_operations *f_ops;
+	void *private_data;
+	struct device *dev;
+	struct snd_card *card_ptr;
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	SNDRV_DEVICE_TYPE_CONTROL = 0,
+	SNDRV_DEVICE_TYPE_SEQUENCER = 1,
+	SNDRV_DEVICE_TYPE_TIMER = 2,
+	SNDRV_DEVICE_TYPE_HWDEP = 3,
+	SNDRV_DEVICE_TYPE_RAWMIDI = 4,
+	SNDRV_DEVICE_TYPE_PCM_PLAYBACK = 5,
+	SNDRV_DEVICE_TYPE_PCM_CAPTURE = 6,
+	SNDRV_DEVICE_TYPE_COMPRESS = 7,
+};
+
+struct snd_monitor_file {
+	struct file *file;
+	const struct file_operations *disconnected_f_op;
+	struct list_head shutdown_list;
+	struct list_head list;
+};
+
+struct snd_ctl_layer_ops {
+	struct snd_ctl_layer_ops *next;
+	const char *module_name;
+	void (*lregister)(struct snd_card *);
+	void (*ldisconnect)(struct snd_card *);
+	void (*lnotify)(struct snd_card *, unsigned int, struct snd_kcontrol *, unsigned int);
+};
+
+enum snd_ctl_add_mode {
+	CTL_ADD_EXCLUSIVE = 0,
+	CTL_REPLACE = 1,
+	CTL_ADD_ON_REPLACE = 2,
+};
+
+enum sndrv_ctl_event_type {
+	SNDRV_CTL_EVENT_ELEM = 0,
+	SNDRV_CTL_EVENT_LAST = 0,
+};
+
+enum {
+	SNDRV_CTL_TLV_OP_READ = 0,
+	SNDRV_CTL_TLV_OP_WRITE = 1,
+	SNDRV_CTL_TLV_OP_CMD = -1,
+};
+
+enum {
+	SNDRV_CTL_IOCTL_ELEM_LIST32 = 3225965840,
+	SNDRV_CTL_IOCTL_ELEM_INFO32 = 3239073041,
+	SNDRV_CTL_IOCTL_ELEM_READ32 = 3267908882,
+	SNDRV_CTL_IOCTL_ELEM_WRITE32 = 3267908883,
+	SNDRV_CTL_IOCTL_ELEM_ADD32 = 3239073047,
+	SNDRV_CTL_IOCTL_ELEM_REPLACE32 = 3239073048,
+};
+
+enum {
+	SND_CTL_SUBDEV_PCM = 0,
+	SND_CTL_SUBDEV_RAWMIDI = 1,
+	SND_CTL_SUBDEV_ITEMS = 2,
+};
+
+struct snd_kctl_event {
+	struct list_head list;
+	struct snd_ctl_elem_id id;
+	unsigned int mask;
+};
+
+typedef int (*snd_kctl_ioctl_func_t)(struct snd_card *, struct snd_ctl_file *, unsigned int, unsigned long);
+
+struct snd_kctl_ioctl {
+	struct list_head list;
+	snd_kctl_ioctl_func_t fioctl;
+};
+
+struct snd_ctl_elem_list {
+	unsigned int offset;
+	unsigned int space;
+	unsigned int used;
+	unsigned int count;
+	struct snd_ctl_elem_id __attribute__((btf_type_tag("user"))) *pids;
+	unsigned char reserved[50];
+};
+
+struct snd_ctl_card_info {
+	int card;
+	int pad;
+	unsigned char id[16];
+	unsigned char driver[16];
+	unsigned char name[32];
+	unsigned char longname[80];
+	unsigned char reserved_[16];
+	unsigned char mixername[80];
+	unsigned char components[128];
+};
+
+struct snd_ctl_elem_info32 {
+	struct snd_ctl_elem_id id;
+	s32 type;
+	u32 access;
+	u32 count;
+	s32 owner;
+	union {
+		struct {
+			s32 min;
+			s32 max;
+			s32 step;
+		} integer;
+		struct {
+			u64 min;
+			u64 max;
+			u64 step;
+		} integer64;
+		struct {
+			u32 items;
+			u32 item;
+			char name[64];
+			u64 names_ptr;
+			u32 names_length;
+		} enumerated;
+		unsigned char reserved[128];
+	} value;
+	unsigned char reserved[64];
+};
+
+struct snd_ctl_elem_value32 {
+	struct snd_ctl_elem_id id;
+	unsigned int indirect;
+	union {
+		s32 integer[128];
+		unsigned char data[512];
+		s64 integer64[64];
+	} value;
+	unsigned char reserved[128];
+};
+
+struct snd_ctl_elem_list32 {
+	u32 offset;
+	u32 space;
+	u32 used;
+	u32 count;
+	u32 pids;
+	unsigned char reserved[50];
+};
+
+struct user_element {
+	struct snd_ctl_elem_info info;
+	struct snd_card *card;
+	char *elem_data;
+	unsigned long elem_data_size;
+	void *tlv_data;
+	unsigned long tlv_data_size;
+	void *priv_data;
+};
+
+struct snd_ctl_event {
+	int type;
+	union {
+		struct {
+			unsigned int mask;
+			struct snd_ctl_elem_id id;
+		} elem;
+		unsigned char data8[60];
+	} data;
+};
+
+struct snd_ctl_tlv {
+	unsigned int numid;
+	unsigned int length;
+	unsigned int tlv[0];
+};
+
+struct snd_fasync {
+	struct fasync_struct *fasync;
+	int signal;
+	int poll;
+	int on;
+	struct list_head list;
+};
+
+struct snd_pci_quirk {
+	unsigned short subvendor;
+	unsigned short subdevice;
+	unsigned short subdevice_mask;
+	int value;
+};
+
+struct snd_info_private_data {
+	struct snd_info_buffer *rbuffer;
+	struct snd_info_buffer *wbuffer;
+	struct snd_info_entry *entry;
+	void *file_private_data;
+};
+
+struct link_ctl_info {
+	snd_ctl_elem_type_t type;
+	int count;
+	int min_val;
+	int max_val;
+};
+
+struct link_master;
+
+struct link_follower {
+	struct list_head list;
+	struct link_master *master;
+	struct link_ctl_info info;
+	int vals[2];
+	unsigned int flags;
+	struct snd_kcontrol *kctl;
+	struct snd_kcontrol follower;
+};
+
+struct link_master {
+	struct list_head followers;
+	struct link_ctl_info info;
+	int val;
+	unsigned int tlv[4];
+	void (*hook)(void *, int);
+	void *hook_private_data;
+};
+
+enum snd_jack_types {
+	SND_JACK_HEADPHONE = 1,
+	SND_JACK_MICROPHONE = 2,
+	SND_JACK_HEADSET = 3,
+	SND_JACK_LINEOUT = 4,
+	SND_JACK_MECHANICAL = 8,
+	SND_JACK_VIDEOOUT = 16,
+	SND_JACK_AVOUT = 20,
+	SND_JACK_LINEIN = 32,
+	SND_JACK_BTN_0 = 16384,
+	SND_JACK_BTN_1 = 8192,
+	SND_JACK_BTN_2 = 4096,
+	SND_JACK_BTN_3 = 2048,
+	SND_JACK_BTN_4 = 1024,
+	SND_JACK_BTN_5 = 512,
+};
+
+struct snd_jack;
+
+struct snd_jack_kctl {
+	struct snd_kcontrol *kctl;
+	struct list_head list;
+	unsigned int mask_bits;
+	struct snd_jack *jack;
+	bool sw_inject_enable;
+};
+
+struct snd_jack {
+	struct list_head kctl_list;
+	struct snd_card *card;
+	const char *id;
+	struct input_dev *input_dev;
+	struct mutex input_dev_lock;
+	int registered;
+	int type;
+	char name[100];
+	unsigned int key[6];
+	int hw_status_cache;
+	void *private_data;
+	void (*private_free)(struct snd_jack *);
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	SNDRV_HWDEP_IOCTL_DSP_LOAD32 = 1079003139,
+};
+
+struct snd_hwdep;
+
+struct snd_hwdep_dsp_status;
+
+struct snd_hwdep_dsp_image;
+
+struct snd_hwdep_ops {
+	long long (*llseek)(struct snd_hwdep *, struct file *, long long, int);
+	long (*read)(struct snd_hwdep *, char __attribute__((btf_type_tag("user"))) *, long, loff_t *);
+	long (*write)(struct snd_hwdep *, const char __attribute__((btf_type_tag("user"))) *, long, loff_t *);
+	int (*open)(struct snd_hwdep *, struct file *);
+	int (*release)(struct snd_hwdep *, struct file *);
+	__poll_t (*poll)(struct snd_hwdep *, struct file *, poll_table *);
+	int (*ioctl)(struct snd_hwdep *, struct file *, unsigned int, unsigned long);
+	int (*ioctl_compat)(struct snd_hwdep *, struct file *, unsigned int, unsigned long);
+	int (*mmap)(struct snd_hwdep *, struct file *, struct vm_area_struct *);
+	int (*dsp_status)(struct snd_hwdep *, struct snd_hwdep_dsp_status *);
+	int (*dsp_load)(struct snd_hwdep *, struct snd_hwdep_dsp_image *);
+	u64 android_kabi_reserved1;
+};
+
+struct snd_hwdep {
+	struct snd_card *card;
+	struct list_head list;
+	int device;
+	char id[32];
+	char name[80];
+	int iface;
+	struct snd_hwdep_ops ops;
+	wait_queue_head_t open_wait;
+	void *private_data;
+	void (*private_free)(struct snd_hwdep *);
+	struct device *dev;
+	struct mutex open_mutex;
+	int used;
+	unsigned int dsp_loaded;
+	unsigned int exclusive: 1;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_hwdep_dsp_status {
+	unsigned int version;
+	unsigned char id[32];
+	unsigned int num_dsps;
+	unsigned int dsp_loaded;
+	unsigned int chip_ready;
+	unsigned char reserved[16];
+};
+
+struct snd_hwdep_dsp_image {
+	unsigned int index;
+	unsigned char name[64];
+	unsigned char __attribute__((btf_type_tag("user"))) *image;
+	size_t length;
+	unsigned long driver_data;
+};
+
+struct snd_hwdep_info {
+	unsigned int device;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	int iface;
+	unsigned char reserved[64];
+};
+
+struct snd_hwdep_dsp_image32 {
+	u32 index;
+	unsigned char name[64];
+	u32 image;
+	u32 length;
+	u32 driver_data;
+};
+
+struct snd_timer_hardware {
+	unsigned int flags;
+	unsigned long resolution;
+	unsigned long resolution_min;
+	unsigned long resolution_max;
+	unsigned long ticks;
+	int (*open)(struct snd_timer *);
+	int (*close)(struct snd_timer *);
+	unsigned long (*c_resolution)(struct snd_timer *);
+	int (*start)(struct snd_timer *);
+	int (*stop)(struct snd_timer *);
+	int (*set_period)(struct snd_timer *, unsigned long, unsigned long);
+	int (*precise_resolution)(struct snd_timer *, unsigned long *, unsigned long *);
+	u64 android_kabi_reserved1;
+};
+
+struct snd_timer {
+	int tmr_class;
+	struct snd_card *card;
+	struct module *module;
+	int tmr_device;
+	int tmr_subdevice;
+	char id[64];
+	char name[80];
+	unsigned int flags;
+	int running;
+	unsigned long sticks;
+	void *private_data;
+	void (*private_free)(struct snd_timer *);
+	struct snd_timer_hardware hw;
+	spinlock_t lock;
+	struct list_head device_list;
+	struct list_head open_list_head;
+	struct list_head active_list_head;
+	struct list_head ack_list_head;
+	struct list_head sack_list_head;
+	struct work_struct task_work;
+	int max_instances;
+	int num_instances;
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	SNDRV_TIMER_CLASS_NONE = -1,
+	SNDRV_TIMER_CLASS_SLAVE = 0,
+	SNDRV_TIMER_CLASS_GLOBAL = 1,
+	SNDRV_TIMER_CLASS_CARD = 2,
+	SNDRV_TIMER_CLASS_PCM = 3,
+	SNDRV_TIMER_CLASS_LAST = 3,
+};
+
+enum {
+	SNDRV_TIMER_SCLASS_NONE = 0,
+	SNDRV_TIMER_SCLASS_APPLICATION = 1,
+	SNDRV_TIMER_SCLASS_SEQUENCER = 2,
+	SNDRV_TIMER_SCLASS_OSS_SEQUENCER = 3,
+	SNDRV_TIMER_SCLASS_LAST = 3,
+};
+
+enum {
+	SNDRV_TIMER_EVENT_RESOLUTION = 0,
+	SNDRV_TIMER_EVENT_TICK = 1,
+	SNDRV_TIMER_EVENT_START = 2,
+	SNDRV_TIMER_EVENT_STOP = 3,
+	SNDRV_TIMER_EVENT_CONTINUE = 4,
+	SNDRV_TIMER_EVENT_PAUSE = 5,
+	SNDRV_TIMER_EVENT_EARLY = 6,
+	SNDRV_TIMER_EVENT_SUSPEND = 7,
+	SNDRV_TIMER_EVENT_RESUME = 8,
+	SNDRV_TIMER_EVENT_MSTART = 12,
+	SNDRV_TIMER_EVENT_MSTOP = 13,
+	SNDRV_TIMER_EVENT_MCONTINUE = 14,
+	SNDRV_TIMER_EVENT_MPAUSE = 15,
+	SNDRV_TIMER_EVENT_MSUSPEND = 17,
+	SNDRV_TIMER_EVENT_MRESUME = 18,
+};
+
+enum timer_tread_format {
+	TREAD_FORMAT_NONE = 0,
+	TREAD_FORMAT_TIME64 = 1,
+	TREAD_FORMAT_TIME32 = 2,
+};
+
+enum {
+	SNDRV_TIMER_IOCTL_GPARAMS32 = 1077695492,
+	SNDRV_TIMER_IOCTL_INFO32 = 2162185233,
+	SNDRV_TIMER_IOCTL_STATUS_COMPAT32 = 1079530516,
+	SNDRV_TIMER_IOCTL_STATUS_COMPAT64 = 1080054804,
+};
+
+struct snd_timer_instance {
+	struct snd_timer *timer;
+	char *owner;
+	unsigned int flags;
+	void *private_data;
+	void (*private_free)(struct snd_timer_instance *);
+	void (*callback)(struct snd_timer_instance *, unsigned long, unsigned long);
+	void (*ccallback)(struct snd_timer_instance *, int, struct timespec64 *, unsigned long);
+	void (*disconnect)(struct snd_timer_instance *);
+	void *callback_data;
+	unsigned long ticks;
+	unsigned long cticks;
+	unsigned long pticks;
+	unsigned long resolution;
+	unsigned long lost;
+	int slave_class;
+	unsigned int slave_id;
+	struct list_head open_list;
+	struct list_head active_list;
+	struct list_head ack_list;
+	struct list_head slave_list_head;
+	struct list_head slave_active_head;
+	struct snd_timer_instance *master;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_timer_system_private {
+	struct timer_list tlist;
+	struct snd_timer *snd_timer;
+	unsigned long last_expires;
+	unsigned long last_jiffies;
+	unsigned long correction;
+};
+
+struct snd_timer_id {
+	int dev_class;
+	int dev_sclass;
+	int card;
+	int device;
+	int subdevice;
+};
+
+struct snd_timer_gparams32 {
+	struct snd_timer_id tid;
+	u32 period_num;
+	u32 period_den;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_gparams {
+	struct snd_timer_id tid;
+	unsigned long period_num;
+	unsigned long period_den;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_info32 {
+	u32 flags;
+	s32 card;
+	unsigned char id[64];
+	unsigned char name[80];
+	u32 reserved0;
+	u32 resolution;
+	unsigned char reserved[64];
+};
+
+struct snd_timer_read;
+
+struct snd_timer_tread64;
+
+struct snd_timer_user {
+	struct snd_timer_instance *timeri;
+	int tread;
+	unsigned long ticks;
+	unsigned long overrun;
+	int qhead;
+	int qtail;
+	int qused;
+	int queue_size;
+	bool disconnected;
+	struct snd_timer_read *queue;
+	struct snd_timer_tread64 *tqueue;
+	spinlock_t qlock;
+	unsigned long last_resolution;
+	unsigned int filter;
+	struct timespec64 tstamp;
+	wait_queue_head_t qchange_sleep;
+	struct snd_fasync *fasync;
+	struct mutex ioctl_lock;
+};
+
+struct snd_timer_read {
+	unsigned int resolution;
+	unsigned int ticks;
+};
+
+struct snd_timer_tread64 {
+	int event;
+	u8 pad1[4];
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	unsigned int val;
+	u8 pad2[4];
+};
+
+struct snd_timer_select {
+	struct snd_timer_id id;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_params {
+	unsigned int flags;
+	unsigned int ticks;
+	unsigned int queue_size;
+	unsigned int reserved0;
+	unsigned int filter;
+	unsigned char reserved[60];
+};
+
+struct snd_timer_ginfo {
+	struct snd_timer_id tid;
+	unsigned int flags;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	unsigned long reserved0;
+	unsigned long resolution;
+	unsigned long resolution_min;
+	unsigned long resolution_max;
+	unsigned int clients;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_info {
+	unsigned int flags;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	unsigned long reserved0;
+	unsigned long resolution;
+	unsigned char reserved[64];
+};
+
+struct snd_timer_gstatus {
+	struct snd_timer_id tid;
+	unsigned long resolution;
+	unsigned long resolution_num;
+	unsigned long resolution_den;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_tread32 {
+	int event;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	unsigned int val;
+};
+
+struct snd_timer_status32 {
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	unsigned int resolution;
+	unsigned int lost;
+	unsigned int overrun;
+	unsigned int queue;
+	unsigned char reserved[64];
+};
+
+struct snd_timer_status64 {
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	unsigned int resolution;
+	unsigned int lost;
+	unsigned int overrun;
+	unsigned int queue;
+	unsigned char reserved[64];
+};
+
+struct snd_hrtimer {
+	struct snd_timer *timer;
+	struct hrtimer hrt;
+	bool in_callback;
+};
+
+enum {
+	SNDRV_PCM_CLASS_GENERIC = 0,
+	SNDRV_PCM_CLASS_MULTI = 1,
+	SNDRV_PCM_CLASS_MODEM = 2,
+	SNDRV_PCM_CLASS_DIGITIZER = 3,
+	SNDRV_PCM_CLASS_LAST = 3,
+};
+
+struct snd_pcm_info {
+	unsigned int device;
+	unsigned int subdevice;
+	int stream;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	unsigned char subname[32];
+	int dev_class;
+	int dev_subclass;
+	unsigned int subdevices_count;
+	unsigned int subdevices_avail;
+	union snd_pcm_sync_id sync;
+	unsigned char reserved[64];
+};
+
+struct snd_pcm_hw_constraint_list {
+	const unsigned int *list;
+	unsigned int count;
+	unsigned int mask;
+};
+
+struct action_ops {
+	int (*pre_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+	int (*do_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+	void (*undo_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+	void (*post_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+};
+
+enum {
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = 5,
+};
+
+enum {
+	SNDRV_PCM_TSTAMP_NONE = 0,
+	SNDRV_PCM_TSTAMP_ENABLE = 1,
+	SNDRV_PCM_TSTAMP_LAST = 1,
+};
+
+enum {
+	SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0,
+	SNDRV_PCM_TSTAMP_TYPE_MONOTONIC = 1,
+	SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW = 2,
+	SNDRV_PCM_TSTAMP_TYPE_LAST = 2,
+};
+
+enum snd_dma_sync_mode {
+	SNDRV_DMA_SYNC_CPU = 0,
+	SNDRV_DMA_SYNC_DEVICE = 1,
+};
+
+enum {
+	SNDRV_PCM_IOCTL_HW_REFINE32 = 3260825872,
+	SNDRV_PCM_IOCTL_HW_PARAMS32 = 3260825873,
+	SNDRV_PCM_IOCTL_SW_PARAMS32 = 3228057875,
+	SNDRV_PCM_IOCTL_STATUS_COMPAT32 = 2154578208,
+	SNDRV_PCM_IOCTL_STATUS_EXT_COMPAT32 = 3228320036,
+	SNDRV_PCM_IOCTL_DELAY32 = 2147762465,
+	SNDRV_PCM_IOCTL_CHANNEL_INFO32 = 2148548914,
+	SNDRV_PCM_IOCTL_REWIND32 = 1074020678,
+	SNDRV_PCM_IOCTL_FORWARD32 = 1074020681,
+	SNDRV_PCM_IOCTL_WRITEI_FRAMES32 = 1074544976,
+	SNDRV_PCM_IOCTL_READI_FRAMES32 = 2148286801,
+	SNDRV_PCM_IOCTL_WRITEN_FRAMES32 = 1074544978,
+	SNDRV_PCM_IOCTL_READN_FRAMES32 = 2148286803,
+	SNDRV_PCM_IOCTL_STATUS_COMPAT64 = 2155888928,
+	SNDRV_PCM_IOCTL_STATUS_EXT_COMPAT64 = 3229630756,
+};
+
+enum {
+	SNDRV_PCM_MMAP_OFFSET_DATA = 0,
+	SNDRV_PCM_MMAP_OFFSET_STATUS_OLD = 2147483648,
+	SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD = 2164260864,
+	SNDRV_PCM_MMAP_OFFSET_STATUS_NEW = 2181038080,
+	SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW = 2197815296,
+	SNDRV_PCM_MMAP_OFFSET_STATUS = 2181038080,
+	SNDRV_PCM_MMAP_OFFSET_CONTROL = 2197815296,
+};
+
+typedef char __pad_before_u32[0];
+
+struct __snd_pcm_mmap_control64_buggy {
+	__pad_before_u32 __pad1;
+	__u32 appl_ptr;
+	__pad_before_u32 __pad2;
+	__pad_before_u32 __pad3;
+	__u32 avail_min;
+	__pad_after_uframe __pad4;
+};
+
+typedef u64 u_int64_t;
+
+struct snd_pcm_file {
+	struct snd_pcm_substream *substream;
+	int no_compat_mmap;
+	unsigned int user_pversion;
+};
+
+struct snd_pcm_status64 {
+	snd_pcm_state_t state;
+	u8 rsvd[4];
+	s64 trigger_tstamp_sec;
+	s64 trigger_tstamp_nsec;
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	snd_pcm_uframes_t appl_ptr;
+	snd_pcm_uframes_t hw_ptr;
+	snd_pcm_sframes_t delay;
+	snd_pcm_uframes_t avail;
+	snd_pcm_uframes_t avail_max;
+	snd_pcm_uframes_t overrange;
+	snd_pcm_state_t suspended_state;
+	__u32 audio_tstamp_data;
+	s64 audio_tstamp_sec;
+	s64 audio_tstamp_nsec;
+	s64 driver_tstamp_sec;
+	s64 driver_tstamp_nsec;
+	__u32 audio_tstamp_accuracy;
+	unsigned char reserved[20];
+};
+
+struct snd_pcm_sw_params {
+	int tstamp_mode;
+	unsigned int period_step;
+	unsigned int sleep_min;
+	snd_pcm_uframes_t avail_min;
+	snd_pcm_uframes_t xfer_align;
+	snd_pcm_uframes_t start_threshold;
+	snd_pcm_uframes_t stop_threshold;
+	snd_pcm_uframes_t silence_threshold;
+	snd_pcm_uframes_t silence_size;
+	snd_pcm_uframes_t boundary;
+	unsigned int proto;
+	unsigned int tstamp_type;
+	unsigned char reserved[56];
+};
+
+struct snd_pcm_status32 {
+	snd_pcm_state_t state;
+	s32 trigger_tstamp_sec;
+	s32 trigger_tstamp_nsec;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	u32 appl_ptr;
+	u32 hw_ptr;
+	s32 delay;
+	u32 avail;
+	u32 avail_max;
+	u32 overrange;
+	snd_pcm_state_t suspended_state;
+	u32 audio_tstamp_data;
+	s32 audio_tstamp_sec;
+	s32 audio_tstamp_nsec;
+	s32 driver_tstamp_sec;
+	s32 driver_tstamp_nsec;
+	u32 audio_tstamp_accuracy;
+	unsigned char reserved[36];
+};
+
+struct snd_pcm_channel_info {
+	unsigned int channel;
+	__kernel_off_t offset;
+	unsigned int first;
+	unsigned int step;
+};
+
+struct snd_pcm_mmap_status32 {
+	snd_pcm_state_t state;
+	s32 pad1;
+	u32 hw_ptr;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	snd_pcm_state_t suspended_state;
+	s32 audio_tstamp_sec;
+	s32 audio_tstamp_nsec;
+};
+
+struct snd_pcm_mmap_control32 {
+	u32 appl_ptr;
+	u32 avail_min;
+};
+
+struct snd_pcm_sync_ptr32 {
+	u32 flags;
+	union {
+		struct snd_pcm_mmap_status32 status;
+		unsigned char reserved[64];
+	} s;
+	union {
+		struct snd_pcm_mmap_control32 control;
+		unsigned char reserved[64];
+	} c;
+};
+
+struct snd_pcm_sync_ptr {
+	__u32 flags;
+	__u32 pad1;
+	union {
+		struct snd_pcm_mmap_status status;
+		unsigned char reserved[64];
+	} s;
+	union {
+		struct snd_pcm_mmap_control control;
+		unsigned char reserved[64];
+	} c;
+};
+
+struct snd_xferi {
+	snd_pcm_sframes_t result;
+	void __attribute__((btf_type_tag("user"))) *buf;
+	snd_pcm_uframes_t frames;
+};
+
+struct snd_xfern {
+	snd_pcm_sframes_t result;
+	void __attribute__((btf_type_tag("user"))) * __attribute__((btf_type_tag("user"))) *bufs;
+	snd_pcm_uframes_t frames;
+};
+
+struct snd_pcm_hw_params32 {
+	u32 flags;
+	struct snd_mask masks[3];
+	struct snd_mask mres[5];
+	struct snd_interval intervals[12];
+	struct snd_interval ires[9];
+	u32 rmask;
+	u32 cmask;
+	u32 info;
+	u32 msbits;
+	u32 rate_num;
+	u32 rate_den;
+	u32 fifo_size;
+	unsigned char reserved[64];
+};
+
+struct snd_pcm_sw_params32 {
+	s32 tstamp_mode;
+	u32 period_step;
+	u32 sleep_min;
+	u32 avail_min;
+	u32 xfer_align;
+	u32 start_threshold;
+	u32 stop_threshold;
+	u32 silence_threshold;
+	u32 silence_size;
+	u32 boundary;
+	u32 proto;
+	u32 tstamp_type;
+	unsigned char reserved[56];
+};
+
+struct snd_pcm_channel_info32 {
+	u32 channel;
+	u32 offset;
+	u32 first;
+	u32 step;
+};
+
+struct snd_xferi32 {
+	s32 result;
+	u32 buf;
+	u32 frames;
+};
+
+struct snd_xfern32 {
+	s32 result;
+	u32 bufs;
+	u32 frames;
+};
+
+struct compat_snd_pcm_status64 {
+	snd_pcm_state_t state;
+	u8 rsvd[4];
+	s64 trigger_tstamp_sec;
+	s64 trigger_tstamp_nsec;
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	u32 appl_ptr;
+	u32 hw_ptr;
+	s32 delay;
+	u32 avail;
+	u32 avail_max;
+	u32 overrange;
+	snd_pcm_state_t suspended_state;
+	u32 audio_tstamp_data;
+	s64 audio_tstamp_sec;
+	s64 audio_tstamp_nsec;
+	s64 driver_tstamp_sec;
+	s64 driver_tstamp_nsec;
+	u32 audio_tstamp_accuracy;
+	unsigned char reserved[20];
+};
+
+struct snd_pcm_chmap_elem {
+	unsigned char channels;
+	unsigned char map[15];
+};
+
+enum {
+	SNDRV_CHMAP_UNKNOWN = 0,
+	SNDRV_CHMAP_NA = 1,
+	SNDRV_CHMAP_MONO = 2,
+	SNDRV_CHMAP_FL = 3,
+	SNDRV_CHMAP_FR = 4,
+	SNDRV_CHMAP_RL = 5,
+	SNDRV_CHMAP_RR = 6,
+	SNDRV_CHMAP_FC = 7,
+	SNDRV_CHMAP_LFE = 8,
+	SNDRV_CHMAP_SL = 9,
+	SNDRV_CHMAP_SR = 10,
+	SNDRV_CHMAP_RC = 11,
+	SNDRV_CHMAP_FLC = 12,
+	SNDRV_CHMAP_FRC = 13,
+	SNDRV_CHMAP_RLC = 14,
+	SNDRV_CHMAP_RRC = 15,
+	SNDRV_CHMAP_FLW = 16,
+	SNDRV_CHMAP_FRW = 17,
+	SNDRV_CHMAP_FLH = 18,
+	SNDRV_CHMAP_FCH = 19,
+	SNDRV_CHMAP_FRH = 20,
+	SNDRV_CHMAP_TC = 21,
+	SNDRV_CHMAP_TFL = 22,
+	SNDRV_CHMAP_TFR = 23,
+	SNDRV_CHMAP_TFC = 24,
+	SNDRV_CHMAP_TRL = 25,
+	SNDRV_CHMAP_TRR = 26,
+	SNDRV_CHMAP_TRC = 27,
+	SNDRV_CHMAP_TFLC = 28,
+	SNDRV_CHMAP_TFRC = 29,
+	SNDRV_CHMAP_TSL = 30,
+	SNDRV_CHMAP_TSR = 31,
+	SNDRV_CHMAP_LLFE = 32,
+	SNDRV_CHMAP_RLFE = 33,
+	SNDRV_CHMAP_BC = 34,
+	SNDRV_CHMAP_BLC = 35,
+	SNDRV_CHMAP_BRC = 36,
+	SNDRV_CHMAP_LAST = 36,
+};
+
+typedef int (*pcm_transfer_f)(struct snd_pcm_substream *, int, unsigned long, struct iov_iter *, unsigned long);
+
+struct snd_ratden {
+	unsigned int num_min;
+	unsigned int num_max;
+	unsigned int num_step;
+	unsigned int den;
+};
+
+struct snd_pcm_chmap {
+	struct snd_pcm *pcm;
+	int stream;
+	struct snd_kcontrol *kctl;
+	const struct snd_pcm_chmap_elem *chmap;
+	unsigned int max_channels;
+	unsigned int channel_mask;
+	void *private_data;
+};
+
+struct snd_ratnum {
+	unsigned int num;
+	unsigned int den_min;
+	unsigned int den_max;
+	unsigned int den_step;
+};
+
+struct snd_pcm_hw_constraint_ranges {
+	unsigned int count;
+	const struct snd_interval *ranges;
+	unsigned int mask;
+};
+
+struct snd_pcm_hw_constraint_ratnums {
+	int nrats;
+	const struct snd_ratnum *rats;
+};
+
+struct snd_pcm_hw_constraint_ratdens {
+	int nrats;
+	const struct snd_ratden *rats;
+};
+
+typedef int (*pcm_copy_f)(struct snd_pcm_substream *, snd_pcm_uframes_t, void *, snd_pcm_uframes_t, snd_pcm_uframes_t, pcm_transfer_f, bool);
+
+struct pcm_format_data {
+	unsigned char width;
+	unsigned char phys;
+	signed char le;
+	signed char signd;
+	unsigned char silence[8];
+};
+
+struct snd_malloc_ops {
+	void * (*alloc)(struct snd_dma_buffer *, size_t);
+	void (*free)(struct snd_dma_buffer *);
+	dma_addr_t (*get_addr)(struct snd_dma_buffer *, size_t);
+	struct page * (*get_page)(struct snd_dma_buffer *, size_t);
+	unsigned int (*get_chunk_size)(struct snd_dma_buffer *, unsigned int, unsigned int);
+	int (*mmap)(struct snd_dma_buffer *, struct vm_area_struct *);
+	void (*sync)(struct snd_dma_buffer *, enum snd_dma_sync_mode);
+};
+
+struct dmaengine_pcm_runtime_data {
+	struct dma_chan *dma_chan;
+	dma_cookie_t cookie;
+	unsigned int pos;
+};
+
+struct snd_dmaengine_dai_dma_data {
+	dma_addr_t addr;
+	enum dma_slave_buswidth addr_width;
+	u32 maxburst;
+	void *filter_data;
+	const char *chan_name;
+	unsigned int fifo_size;
+	unsigned int flags;
+	void *peripheral_config;
+	size_t peripheral_size;
+};
+
+enum {
+	SNDRV_RAWMIDI_IOCTL_PARAMS32 = 3223344912,
+	SNDRV_RAWMIDI_IOCTL_STATUS_COMPAT32 = 3223607072,
+	SNDRV_RAWMIDI_IOCTL_STATUS_COMPAT64 = 3224393504,
+};
+
+struct snd_rawmidi_framing_tstamp {
+	__u8 frame_type;
+	__u8 length;
+	__u8 reserved[2];
+	__u32 tv_nsec;
+	__u64 tv_sec;
+	__u8 data[16];
+};
+
+struct snd_rawmidi_info {
+	unsigned int device;
+	unsigned int subdevice;
+	int stream;
+	int card;
+	unsigned int flags;
+	unsigned char id[64];
+	unsigned char name[80];
+	unsigned char subname[32];
+	unsigned int subdevices_count;
+	unsigned int subdevices_avail;
+	unsigned char reserved[64];
+};
+
+struct snd_rawmidi_file {
+	struct snd_rawmidi *rmidi;
+	struct snd_rawmidi_substream *input;
+	struct snd_rawmidi_substream *output;
+	unsigned int user_pversion;
+};
+
+struct snd_rawmidi_status64 {
+	int stream;
+	u8 rsvd[4];
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	size_t avail;
+	size_t xruns;
+	unsigned char reserved[16];
+};
+
+struct snd_rawmidi_params32 {
+	s32 stream;
+	u32 buffer_size;
+	u32 avail_min;
+	unsigned int no_active_sensing;
+	unsigned int mode;
+	unsigned char reserved[12];
+};
+
+struct snd_rawmidi_params {
+	int stream;
+	size_t buffer_size;
+	size_t avail_min;
+	unsigned int no_active_sensing: 1;
+	unsigned int mode;
+	unsigned char reserved[12];
+};
+
+struct compat_snd_rawmidi_status64 {
+	s32 stream;
+	u8 rsvd[4];
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	u32 avail;
+	u32 xruns;
+	unsigned char reserved[16];
+};
+
+struct snd_rawmidi_status32 {
+	s32 stream;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	u32 avail;
+	u32 xruns;
+	unsigned char reserved[16];
+};
+
+enum snd_compr_direction {
+	SND_COMPRESS_PLAYBACK = 0,
+	SND_COMPRESS_CAPTURE = 1,
+};
+
+struct snd_compr_tstamp {
+	__u32 byte_offset;
+	__u32 copied_total;
+	__u32 pcm_frames;
+	__u32 pcm_io_frames;
+	__u32 sampling_rate;
+};
+
+struct snd_compr_ops;
+
+struct snd_compr_runtime;
+
+struct snd_compr;
+
+struct snd_compr_stream {
+	const char *name;
+	struct snd_compr_ops *ops;
+	struct snd_compr_runtime *runtime;
+	struct snd_compr *device;
+	struct delayed_work error_work;
+	enum snd_compr_direction direction;
+	bool metadata_set;
+	bool next_track;
+	bool partial_drain;
+	bool pause_in_draining;
+	void *private_data;
+	struct snd_dma_buffer dma_buffer;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_compr_params;
+
+struct snd_codec;
+
+struct snd_compr_metadata;
+
+struct snd_compr_caps;
+
+struct snd_compr_codec_caps;
+
+struct snd_compr_ops {
+	int (*open)(struct snd_compr_stream *);
+	int (*free)(struct snd_compr_stream *);
+	int (*set_params)(struct snd_compr_stream *, struct snd_compr_params *);
+	int (*get_params)(struct snd_compr_stream *, struct snd_codec *);
+	int (*set_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *);
+	int (*get_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *);
+	int (*trigger)(struct snd_compr_stream *, int);
+	int (*pointer)(struct snd_compr_stream *, struct snd_compr_tstamp *);
+	int (*copy)(struct snd_compr_stream *, char __attribute__((btf_type_tag("user"))) *, size_t);
+	int (*mmap)(struct snd_compr_stream *, struct vm_area_struct *);
+	int (*ack)(struct snd_compr_stream *, size_t);
+	int (*get_caps)(struct snd_compr_stream *, struct snd_compr_caps *);
+	int (*get_codec_caps)(struct snd_compr_stream *, struct snd_compr_codec_caps *);
+	u64 android_kabi_reserved1;
+};
+
+struct snd_compressed_buffer {
+	__u32 fragment_size;
+	__u32 fragments;
+};
+
+struct snd_enc_wma {
+	__u32 super_block_align;
+};
+
+struct snd_enc_vorbis {
+	__s32 quality;
+	__u32 managed;
+	__u32 max_bit_rate;
+	__u32 min_bit_rate;
+	__u32 downmix;
+};
+
+struct snd_enc_real {
+	__u32 quant_bits;
+	__u32 start_region;
+	__u32 num_regions;
+};
+
+struct snd_enc_flac {
+	__u32 num;
+	__u32 gain;
+};
+
+struct snd_enc_generic {
+	__u32 bw;
+	__s32 reserved[15];
+};
+
+struct snd_dec_flac {
+	__u16 sample_size;
+	__u16 min_blk_size;
+	__u16 max_blk_size;
+	__u16 min_frame_size;
+	__u16 max_frame_size;
+	__u16 reserved;
+};
+
+struct snd_dec_wma {
+	__u32 encoder_option;
+	__u32 adv_encoder_option;
+	__u32 adv_encoder_option2;
+	__u32 reserved;
+};
+
+struct snd_dec_alac {
+	__u32 frame_length;
+	__u8 compatible_version;
+	__u8 pb;
+	__u8 mb;
+	__u8 kb;
+	__u32 max_run;
+	__u32 max_frame_bytes;
+};
+
+struct snd_dec_ape {
+	__u16 compatible_version;
+	__u16 compression_level;
+	__u32 format_flags;
+	__u32 blocks_per_frame;
+	__u32 final_frame_blocks;
+	__u32 total_frames;
+	__u32 seek_table_present;
+};
+
+union snd_codec_options {
+	struct snd_enc_wma wma;
+	struct snd_enc_vorbis vorbis;
+	struct snd_enc_real real;
+	struct snd_enc_flac flac;
+	struct snd_enc_generic generic;
+	struct snd_dec_flac flac_d;
+	struct snd_dec_wma wma_d;
+	struct snd_dec_alac alac_d;
+	struct snd_dec_ape ape_d;
+};
+
+struct snd_codec {
+	__u32 id;
+	__u32 ch_in;
+	__u32 ch_out;
+	__u32 sample_rate;
+	__u32 bit_rate;
+	__u32 rate_control;
+	__u32 profile;
+	__u32 level;
+	__u32 ch_mode;
+	__u32 format;
+	__u32 align;
+	union snd_codec_options options;
+	__u32 reserved[3];
+};
+
+struct snd_compr_params {
+	struct snd_compressed_buffer buffer;
+	struct snd_codec codec;
+	__u8 no_wake_mode;
+};
+
+struct snd_compr_metadata {
+	__u32 key;
+	__u32 value[8];
+};
+
+struct snd_compr_caps {
+	__u32 num_codecs;
+	__u32 direction;
+	__u32 min_fragment_size;
+	__u32 max_fragment_size;
+	__u32 min_fragments;
+	__u32 max_fragments;
+	__u32 codecs[32];
+	__u32 reserved[11];
+};
+
+struct snd_codec_desc {
+	__u32 max_ch;
+	__u32 sample_rates[32];
+	__u32 num_sample_rates;
+	__u32 bit_rate[32];
+	__u32 num_bitrates;
+	__u32 rate_control;
+	__u32 profiles;
+	__u32 modes;
+	__u32 formats;
+	__u32 min_buffer;
+	__u32 reserved[15];
+};
+
+struct snd_compr_codec_caps {
+	__u32 codec;
+	__u32 num_descriptors;
+	struct snd_codec_desc descriptor[32];
+};
+
+struct snd_compr_runtime {
+	snd_pcm_state_t state;
+	struct snd_compr_ops *ops;
+	void *buffer;
+	u64 buffer_size;
+	u32 fragment_size;
+	u32 fragments;
+	u64 total_bytes_available;
+	u64 total_bytes_transferred;
+	wait_queue_head_t sleep;
+	void *private_data;
+	unsigned char *dma_area;
+	dma_addr_t dma_addr;
+	size_t dma_bytes;
+	struct snd_dma_buffer *dma_buffer_p;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_compr {
+	const char *name;
+	struct device *dev;
+	struct snd_compr_ops *ops;
+	void *private_data;
+	struct snd_card *card;
+	unsigned int direction;
+	struct mutex lock;
+	int device;
+	bool use_pause_in_draining;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_compr_avail {
+	__u64 avail;
+	struct snd_compr_tstamp tstamp;
+} __attribute__((packed));
+
+struct snd_compr_file {
+	unsigned long caps;
+	struct snd_compr_stream stream;
+};
+
+struct snd_usb_audio;
+
+struct snd_usb_platform_ops {
+	void (*connect_cb)(struct snd_usb_audio *);
+	void (*disconnect_cb)(struct snd_usb_audio *);
+	void (*suspend_cb)(struct usb_interface *, pm_message_t);
+	void (*resume_cb)(struct usb_interface *);
+};
+
+struct snd_usb_audio {
+	int index;
+	struct usb_device *dev;
+	struct snd_card *card;
+	struct usb_interface *intf[16];
+	u32 usb_id;
+	uint16_t quirk_type;
+	struct mutex mutex;
+	unsigned int system_suspend;
+	atomic_t active;
+	atomic_t shutdown;
+	atomic_t usage_count;
+	wait_queue_head_t shutdown_wait;
+	unsigned int quirk_flags;
+	unsigned int need_delayed_register: 1;
+	int num_interfaces;
+	int last_iface;
+	int num_suspended_intf;
+	int sample_rate_read_error;
+	int badd_profile;
+	struct list_head pcm_list;
+	struct list_head ep_list;
+	struct list_head iface_ref_list;
+	struct list_head clock_ref_list;
+	int pcm_devs;
+	unsigned int num_rawmidis;
+	struct list_head midi_list;
+	struct list_head midi_v2_list;
+	struct list_head mixer_list;
+	int setup;
+	bool generic_implicit_fb;
+	bool autoclock;
+	bool lowlatency;
+	struct usb_host_interface *ctrl_intf;
+	struct media_device *media_dev;
+	struct media_intf_devnode *ctl_intf_media_devnode;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_audio_device_name {
+	u32 id;
+	const char *vendor_name;
+	const char *product_name;
+	const char *profile_name;
+};
+
+struct snd_usb_audio_quirk {
+	const char *vendor_name;
+	const char *product_name;
+	int16_t ifnum;
+	uint16_t type;
+	const void *data;
+};
+
+struct snd_usb_stream;
+
+struct audioformat;
+
+struct snd_usb_power_domain;
+
+struct snd_usb_endpoint;
+
+struct media_ctl;
+
+struct snd_usb_substream {
+	struct snd_usb_stream *stream;
+	struct usb_device *dev;
+	struct snd_pcm_substream *pcm_substream;
+	int direction;
+	int endpoint;
+	const struct audioformat *cur_audiofmt;
+	struct snd_usb_power_domain *str_pd;
+	unsigned int channels_max;
+	unsigned int txfr_quirk: 1;
+	unsigned int tx_length_quirk: 1;
+	unsigned int fmt_type;
+	unsigned int pkt_offset_adj;
+	unsigned int stream_offset_adj;
+	unsigned int running: 1;
+	unsigned int period_elapsed_pending;
+	unsigned int buffer_bytes;
+	unsigned int inflight_bytes;
+	unsigned int hwptr_done;
+	unsigned int transfer_done;
+	unsigned int frame_limit;
+	unsigned int ep_num;
+	struct snd_usb_endpoint *data_endpoint;
+	struct snd_usb_endpoint *sync_endpoint;
+	unsigned long flags;
+	unsigned int speed;
+	u64 formats;
+	unsigned int num_formats;
+	struct list_head fmt_list;
+	spinlock_t lock;
+	unsigned int last_frame_number;
+	struct {
+		int marker;
+		int channel;
+		int byte_idx;
+	} dsd_dop;
+	bool trigger_tstamp_pending_update;
+	bool lowlatency_playback;
+	struct media_ctl *media_ctl;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_usb_stream {
+	struct snd_usb_audio *chip;
+	struct snd_pcm *pcm;
+	int pcm_index;
+	unsigned int fmt_type;
+	struct snd_usb_substream substream[2];
+	struct list_head list;
+};
+
+struct audioformat {
+	struct list_head list;
+	u64 formats;
+	unsigned int channels;
+	unsigned int fmt_type;
+	unsigned int fmt_bits;
+	unsigned int frame_size;
+	unsigned char iface;
+	unsigned char altsetting;
+	unsigned char ep_idx;
+	unsigned char altset_idx;
+	unsigned char attributes;
+	unsigned char endpoint;
+	unsigned char ep_attr;
+	bool implicit_fb;
+	unsigned char sync_ep;
+	unsigned char sync_iface;
+	unsigned char sync_altsetting;
+	unsigned char sync_ep_idx;
+	unsigned char datainterval;
+	unsigned char protocol;
+	unsigned int maxpacksize;
+	unsigned int rates;
+	unsigned int rate_min;
+	unsigned int rate_max;
+	unsigned int nr_rates;
+	unsigned int *rate_table;
+	unsigned char clock;
+	struct snd_pcm_chmap_elem *chmap;
+	bool dsd_dop;
+	bool dsd_bitrev;
+	bool dsd_raw;
+};
+
+struct snd_usb_power_domain {
+	int pd_id;
+	int pd_d1d0_rec;
+	int pd_d2d0_rec;
+};
+
+struct snd_urb_ctx {
+	struct urb *urb;
+	unsigned int buffer_size;
+	struct snd_usb_substream *subs;
+	struct snd_usb_endpoint *ep;
+	int index;
+	int packets;
+	int queued;
+	int packet_size[48];
+	struct list_head ready_list;
+};
+
+struct snd_usb_packet_info {
+	uint32_t packet_size[48];
+	int packets;
+};
+
+struct snd_usb_iface_ref;
+
+struct snd_usb_clock_ref;
+
+struct snd_usb_endpoint {
+	struct snd_usb_audio *chip;
+	struct snd_usb_iface_ref *iface_ref;
+	struct snd_usb_clock_ref *clock_ref;
+	int opened;
+	atomic_t running;
+	int ep_num;
+	int type;
+	unsigned char iface;
+	unsigned char altsetting;
+	unsigned char ep_idx;
+	atomic_t state;
+	int (*prepare_data_urb)(struct snd_usb_substream *, struct urb *, bool);
+	void (*retire_data_urb)(struct snd_usb_substream *, struct urb *);
+	struct snd_usb_substream *data_subs;
+	struct snd_usb_endpoint *sync_source;
+	struct snd_usb_endpoint *sync_sink;
+	struct snd_urb_ctx urb[12];
+	struct snd_usb_packet_info next_packet[12];
+	unsigned int next_packet_head;
+	unsigned int next_packet_queued;
+	struct list_head ready_playback_urbs;
+	unsigned int nurbs;
+	unsigned long active_mask;
+	unsigned long unlink_mask;
+	atomic_t submitted_urbs;
+	char *syncbuf;
+	dma_addr_t sync_dma;
+	unsigned int pipe;
+	unsigned int packsize[2];
+	unsigned int sample_rem;
+	unsigned int sample_accum;
+	unsigned int pps;
+	unsigned int freqn;
+	unsigned int freqm;
+	int freqshift;
+	unsigned int freqmax;
+	unsigned int phase;
+	unsigned int maxpacksize;
+	unsigned int maxframesize;
+	unsigned int max_urb_frames;
+	unsigned int curpacksize;
+	unsigned int curframesize;
+	unsigned int syncmaxsize;
+	unsigned int fill_max: 1;
+	unsigned int tenor_fb_quirk: 1;
+	unsigned int datainterval;
+	unsigned int syncinterval;
+	unsigned char silence_value;
+	unsigned int stride;
+	int skip_packets;
+	bool implicit_fb_sync;
+	bool lowlatency_playback;
+	bool need_setup;
+	bool need_prepare;
+	bool fixed_rate;
+	const struct audioformat *cur_audiofmt;
+	unsigned int cur_rate;
+	snd_pcm_format_t cur_format;
+	unsigned int cur_channels;
+	unsigned int cur_frame_bytes;
+	unsigned int cur_period_frames;
+	unsigned int cur_period_bytes;
+	unsigned int cur_buffer_periods;
+	spinlock_t lock;
+	struct list_head list;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct media_ctl {
+	struct media_device *media_dev;
+	struct media_entity media_entity;
+	struct media_intf_devnode *intf_devnode;
+	struct media_link *intf_link;
+	struct media_pad media_pad;
+	struct media_pipeline media_pipe;
+};
+
+struct usb_mixer_elem_list;
+
+struct usbmix_connector_map;
+
+struct rc_config;
+
+struct media_mixer_ctl;
+
+struct usb_mixer_interface {
+	struct snd_usb_audio *chip;
+	struct usb_host_interface *hostif;
+	struct list_head list;
+	unsigned int ignore_ctl_error;
+	struct urb *urb;
+	struct usb_mixer_elem_list **id_elems;
+	int protocol;
+	const struct usbmix_connector_map *connector_map;
+	const struct rc_config *rc_cfg;
+	u32 rc_code;
+	wait_queue_head_t rc_waitq;
+	struct urb *rc_urb;
+	struct usb_ctrlrequest *rc_setup_packet;
+	u8 rc_buffer[6];
+	struct media_mixer_ctl *media_mixer_ctl;
+	bool disconnected;
+	void *private_data;
+	void (*private_free)(struct usb_mixer_interface *);
+	void (*private_suspend)(struct usb_mixer_interface *);
+};
+
+typedef void (*usb_mixer_elem_dump_func_t)(struct snd_info_buffer *, struct usb_mixer_elem_list *);
+
+typedef int (*usb_mixer_elem_resume_func_t)(struct usb_mixer_elem_list *);
+
+struct usb_mixer_elem_list {
+	struct usb_mixer_interface *mixer;
+	struct usb_mixer_elem_list *next_id_elem;
+	struct snd_kcontrol *kctl;
+	unsigned int id;
+	bool is_std_info;
+	usb_mixer_elem_dump_func_t dump;
+	usb_mixer_elem_resume_func_t resume;
+};
+
+struct usbmix_connector_map {
+	u8 id;
+	u8 delegated_id;
+	u8 control;
+	u8 channel;
+};
+
+struct rc_config {
+	u32 usb_id;
+	u8 offset;
+	u8 length;
+	u8 packet_length;
+	u8 min_packet_length;
+	u8 mute_mixer_id;
+	u32 mute_code;
+};
+
+struct media_mixer_ctl {
+	struct media_device *media_dev;
+	struct media_entity media_entity;
+	struct media_intf_devnode *intf_devnode;
+	struct media_link *intf_link;
+	struct media_pad media_pad[3];
+	struct media_pipeline media_pipe;
+};
+
+struct uac1_ac_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 bcdADC;
+	__le16 wTotalLength;
+	__u8 bInCollection;
+	__u8 baInterfaceNr[0];
+} __attribute__((packed));
+
+struct uac3_clock_source_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bmAttributes;
+	__le32 bmControls;
+	__u8 bReferenceTerminal;
+	__le16 wClockSourceStr;
+} __attribute__((packed));
+
+union uac23_clock_source_desc {
+	struct uac_clock_source_descriptor v2;
+	struct uac3_clock_source_descriptor v3;
+};
+
+struct uac_clock_selector_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bNrInPins;
+	__u8 baCSourceID[0];
+};
+
+struct uac3_clock_selector_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bNrInPins;
+	__u8 baCSourceID[0];
+};
+
+union uac23_clock_selector_desc {
+	struct uac_clock_selector_descriptor v2;
+	struct uac3_clock_selector_descriptor v3;
+};
+
+struct uac_clock_multiplier_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bCSourceID;
+	__u8 bmControls;
+	__u8 iClockMultiplier;
+};
+
+union uac23_clock_multiplier_desc {
+	struct uac_clock_multiplier_descriptor v2;
+	struct uac_clock_multiplier_descriptor v3;
+};
+
+enum {
+	EP_STATE_STOPPED = 0,
+	EP_STATE_RUNNING = 1,
+	EP_STATE_STOPPING = 2,
+};
+
+struct snd_usb_iface_ref {
+	unsigned char iface;
+	bool need_setup;
+	int opened;
+	int altset;
+	struct list_head list;
+};
+
+struct snd_usb_clock_ref {
+	unsigned char clock;
+	atomic_t locked;
+	int opened;
+	int rate;
+	bool need_setup;
+	struct list_head list;
+};
+
+struct uac_format_type_ii_ext_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__le16 wMaxBitRate;
+	__le16 wSamplesPerFrame;
+	__u8 bHeaderLength;
+	__u8 bSideBandProtocol;
+};
+
+struct uac_format_type_ii_discrete_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__le16 wMaxBitRate;
+	__le16 wSamplesPerFrame;
+	__u8 bSamFreqType;
+	__u8 tSamFreq[0];
+} __attribute__((packed));
+
+struct uac3_as_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalLink;
+	__le32 bmControls;
+	__le16 wClusterDescrID;
+	__le64 bmFormats;
+	__u8 bSubslotSize;
+	__u8 bBitResolution;
+	__le16 bmAuxProtocols;
+	__u8 bControlSize;
+} __attribute__((packed));
+
+struct uac_format_type_i_ext_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bSubslotSize;
+	__u8 bBitResolution;
+	__u8 bHeaderLength;
+	__u8 bControlSize;
+	__u8 bSideBandProtocol;
+};
+
+struct uac_format_type_i_discrete_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bNrChannels;
+	__u8 bSubframeSize;
+	__u8 bBitResolution;
+	__u8 bSamFreqType;
+	__u8 tSamFreq[0];
+};
+
+struct uac_format_type_i_continuous_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bNrChannels;
+	__u8 bSubframeSize;
+	__u8 bBitResolution;
+	__u8 bSamFreqType;
+	__u8 tLowerSamFreq[3];
+	__u8 tUpperSamFreq[3];
+};
+
+struct snd_usb_implicit_fb_match {
+	unsigned int id;
+	unsigned int iface_class;
+	unsigned int ep_num;
+	unsigned int iface;
+	int type;
+};
+
+enum {
+	IMPLICIT_FB_NONE = 0,
+	IMPLICIT_FB_GENERIC = 1,
+	IMPLICIT_FB_FIXED = 2,
+	IMPLICIT_FB_BOTH = 3,
+};
+
+struct usbmix_name_map;
+
+struct usbmix_selector_map;
+
+struct usbmix_ctl_map {
+	u32 id;
+	const struct usbmix_name_map *map;
+	const struct usbmix_selector_map *selector_map;
+	const struct usbmix_connector_map *connector_map;
+};
+
+struct usbmix_dB_map;
+
+struct usbmix_name_map {
+	int id;
+	const char *name;
+	int control;
+	const struct usbmix_dB_map *dB;
+};
+
+struct usbmix_dB_map {
+	int min;
+	int max;
+	bool min_mute;
+};
+
+struct usbmix_selector_map {
+	int id;
+	int count;
+	const char **names;
+};
+
+struct uac3_badd_profile {
+	int subclass;
+	const char *name;
+	int c_chmask;
+	int p_chmask;
+	int st_chmask;
+};
+
+struct iterm_name_combo {
+	int type;
+	char *name;
+};
+
+struct usb_feature_control_info {
+	int control;
+	const char *name;
+	int type;
+	int type_uac2;
+};
+
+struct procunit_value_info {
+	int control;
+	const char *suffix;
+	int val_type;
+	int min_value;
+};
+
+struct procunit_info {
+	int type;
+	char *name;
+	const struct procunit_value_info *values;
+};
+
+enum {
+	USB_MIXER_BOOLEAN = 0,
+	USB_MIXER_INV_BOOLEAN = 1,
+	USB_MIXER_S8 = 2,
+	USB_MIXER_U8 = 3,
+	USB_MIXER_S16 = 4,
+	USB_MIXER_U16 = 5,
+	USB_MIXER_S32 = 6,
+	USB_MIXER_U32 = 7,
+	USB_MIXER_BESPOKEN = 8,
+};
+
+enum {
+	USB_XU_CLOCK_RATE = 58113,
+	USB_XU_CLOCK_SOURCE = 58114,
+	USB_XU_DIGITAL_IO_STATUS = 58115,
+	USB_XU_DEVICE_OPTIONS = 58116,
+	USB_XU_DIRECT_MONITORING = 58117,
+	USB_XU_METERING = 58118,
+};
+
+struct usb_mixer_elem_info {
+	struct usb_mixer_elem_list head;
+	unsigned int control;
+	unsigned int cmask;
+	unsigned int idx_off;
+	unsigned int ch_readonly;
+	unsigned int master_readonly;
+	int channels;
+	int val_type;
+	int min;
+	int max;
+	int res;
+	int dBmin;
+	int dBmax;
+	int cached;
+	int cache_val[16];
+	u8 initialized;
+	u8 min_mute;
+	void *private_data;
+};
+
+struct usb_audio_term {
+	int id;
+	int type;
+	int channels;
+	unsigned int chconfig;
+	int name;
+};
+
+struct mixer_build {
+	struct snd_usb_audio *chip;
+	struct usb_mixer_interface *mixer;
+	unsigned char *buffer;
+	unsigned int buflen;
+	unsigned long unitbitmap[4];
+	unsigned long termbitmap[4];
+	struct usb_audio_term oterm;
+	const struct usbmix_name_map *map;
+	const struct usbmix_selector_map *selector_map;
+};
+
+struct uac3_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 bCSourceID;
+	__le32 bmControls;
+	__le16 wExTerminalDescrID;
+	__le16 wConnectorsDescrID;
+	__le16 wTerminalDescrStr;
+} __attribute__((packed));
+
+struct uac1_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uac_feature_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__u8 bControlSize;
+	__u8 bmaControls[0];
+};
+
+struct uac3_input_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bCSourceID;
+	__le32 bmControls;
+	__le16 wClusterDescrID;
+	__le16 wExTerminalDescrID;
+	__le16 wConnectorsDescrID;
+	__le16 wTerminalDescrStr;
+};
+
+struct uac_selector_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUintID;
+	__u8 bNrInPins;
+	__u8 baSourceID[0];
+};
+
+struct uac3_feature_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__u8 bmaControls[0];
+};
+
+struct uac_mixer_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bNrInPins;
+	__u8 baSourceID[0];
+};
+
+struct uac_processing_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__le16 wProcessType;
+	__u8 bNrInPins;
+	__u8 baSourceID[0];
+} __attribute__((packed));
+
+struct uac2_effect_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__le16 wEffectType;
+	__u8 bSourceID;
+	__u8 bmaControls[0];
+} __attribute__((packed));
+
+struct uac_input_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bNrChannels;
+	__le16 wChannelConfig;
+	__u8 iChannelNames;
+	__u8 iTerminal;
+};
+
+struct uac3_cluster_header_descriptor {
+	__le16 wLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 wDescriptorID;
+	__u8 bNrChannels;
+} __attribute__((packed));
+
+struct uac2_connectors_ctl_blk {
+	__u8 bNrChannels;
+	__le32 bmChannelConfig;
+	__u8 iChannelNames;
+} __attribute__((packed));
+
+struct uac3_insertion_ctl_blk {
+	__u8 bSize;
+	__u8 bmConInserted;
+};
+
+struct uac1_status_word {
+	__u8 bStatusType;
+	__u8 bOriginator;
+};
+
+struct sb_jack {
+	int unitid;
+	const char *name;
+};
+
+struct std_mono_table {
+	unsigned int unitid;
+	unsigned int control;
+	unsigned int cmask;
+	int val_type;
+	const char *name;
+	snd_kcontrol_tlv_rw_t *tlv_callback;
+};
+
+struct snd_djm_ctl;
+
+struct snd_djm_device {
+	const char *name;
+	const struct snd_djm_ctl *controls;
+	size_t ncontrols;
+};
+
+struct snd_djm_ctl {
+	const char *name;
+	const u16 *options;
+	size_t noptions;
+	u16 default_value;
+	u16 wIndex;
+};
+
+enum {
+	SNDRV_HWDEP_IFACE_OPL2 = 0,
+	SNDRV_HWDEP_IFACE_OPL3 = 1,
+	SNDRV_HWDEP_IFACE_OPL4 = 2,
+	SNDRV_HWDEP_IFACE_SB16CSP = 3,
+	SNDRV_HWDEP_IFACE_EMU10K1 = 4,
+	SNDRV_HWDEP_IFACE_YSS225 = 5,
+	SNDRV_HWDEP_IFACE_ICS2115 = 6,
+	SNDRV_HWDEP_IFACE_SSCAPE = 7,
+	SNDRV_HWDEP_IFACE_VX = 8,
+	SNDRV_HWDEP_IFACE_MIXART = 9,
+	SNDRV_HWDEP_IFACE_USX2Y = 10,
+	SNDRV_HWDEP_IFACE_EMUX_WAVETABLE = 11,
+	SNDRV_HWDEP_IFACE_BLUETOOTH = 12,
+	SNDRV_HWDEP_IFACE_USX2Y_PCM = 13,
+	SNDRV_HWDEP_IFACE_PCXHR = 14,
+	SNDRV_HWDEP_IFACE_SB_RC = 15,
+	SNDRV_HWDEP_IFACE_HDA = 16,
+	SNDRV_HWDEP_IFACE_USB_STREAM = 17,
+	SNDRV_HWDEP_IFACE_FW_DICE = 18,
+	SNDRV_HWDEP_IFACE_FW_FIREWORKS = 19,
+	SNDRV_HWDEP_IFACE_FW_BEBOB = 20,
+	SNDRV_HWDEP_IFACE_FW_OXFW = 21,
+	SNDRV_HWDEP_IFACE_FW_DIGI00X = 22,
+	SNDRV_HWDEP_IFACE_FW_TASCAM = 23,
+	SNDRV_HWDEP_IFACE_LINE6 = 24,
+	SNDRV_HWDEP_IFACE_FW_MOTU = 25,
+	SNDRV_HWDEP_IFACE_FW_FIREFACE = 26,
+	SNDRV_HWDEP_IFACE_LAST = 26,
+};
+
+enum snd_rme_domain {
+	SND_RME_DOMAIN_SYSTEM = 0,
+	SND_RME_DOMAIN_AES = 1,
+	SND_RME_DOMAIN_SPDIF = 2,
+};
+
+enum snd_rme_clock_status {
+	SND_RME_CLOCK_NOLOCK = 0,
+	SND_RME_CLOCK_LOCK = 1,
+	SND_RME_CLOCK_SYNC = 2,
+};
+
+enum {
+	SND_BBFPRO_CTL_REG1 = 0,
+	SND_BBFPRO_CTL_REG2 = 1,
+};
+
+struct scarlett_mixer_elem_enum_info {
+	int start;
+	int len;
+	int offsets[5];
+	const char * const *names;
+};
+
+struct scarlett_mixer_control {
+	unsigned char num;
+	unsigned char type;
+	const char *name;
+};
+
+struct scarlett_device_info {
+	int matrix_in;
+	int matrix_out;
+	int input_len;
+	int output_len;
+	struct scarlett_mixer_elem_enum_info opt_master;
+	struct scarlett_mixer_elem_enum_info opt_matrix;
+	int matrix_mux_init[18];
+	int num_controls;
+	const struct scarlett_mixer_control controls[10];
+};
+
+enum {
+	SCARLETT_OUTPUTS = 0,
+	SCARLETT_SWITCH_IMPEDANCE = 1,
+	SCARLETT_SWITCH_PAD = 2,
+	SCARLETT_SWITCH_GAIN = 3,
+};
+
+enum {
+	SCARLETT_OFFSET_PCM = 0,
+	SCARLETT_OFFSET_ANALOG = 1,
+	SCARLETT_OFFSET_SPDIF = 2,
+	SCARLETT_OFFSET_ADAT = 3,
+	SCARLETT_OFFSET_MIX = 4,
+};
+
+struct scarlett2_device_info;
+
+struct scarlett2_device_entry {
+	const u32 usb_id;
+	const struct scarlett2_device_info *info;
+	const char *series_name;
+};
+
+struct scarlett2_mux_entry {
+	u8 port_type;
+	u8 start;
+	u8 count;
+};
+
+struct scarlett2_device_info {
+	u8 has_msd_mode;
+	u8 config_set;
+	u8 line_out_hw_vol;
+	u8 has_speaker_switching;
+	u8 has_talkback;
+	u8 level_input_count;
+	u8 level_input_first;
+	u8 pad_input_count;
+	u8 air_input_count;
+	u8 phantom_count;
+	u8 inputs_per_phantom;
+	u8 direct_monitor;
+	u8 line_out_remap_enable;
+	u8 line_out_remap[10];
+	const char * const line_out_descrs[10];
+	const int port_count[12];
+	struct scarlett2_mux_entry mux_assignment[30];
+};
+
+struct scarlett2_config {
+	u8 offset;
+	u8 size;
+	u8 activate;
+};
+
+struct scarlett2_port {
+	u16 id;
+	const char * const src_descr;
+	int src_num_offset;
+	const char * const dst_descr;
+};
+
+enum {
+	SCARLETT2_PORT_TYPE_NONE = 0,
+	SCARLETT2_PORT_TYPE_ANALOGUE = 1,
+	SCARLETT2_PORT_TYPE_SPDIF = 2,
+	SCARLETT2_PORT_TYPE_ADAT = 3,
+	SCARLETT2_PORT_TYPE_MIX = 4,
+	SCARLETT2_PORT_TYPE_PCM = 5,
+	SCARLETT2_PORT_TYPE_COUNT = 6,
+};
+
+enum {
+	SCARLETT2_PORT_IN = 0,
+	SCARLETT2_PORT_OUT = 1,
+	SCARLETT2_PORT_DIRNS = 2,
+};
+
+enum {
+	SCARLETT2_CONFIG_DIM_MUTE = 0,
+	SCARLETT2_CONFIG_LINE_OUT_VOLUME = 1,
+	SCARLETT2_CONFIG_MUTE_SWITCH = 2,
+	SCARLETT2_CONFIG_SW_HW_SWITCH = 3,
+	SCARLETT2_CONFIG_LEVEL_SWITCH = 4,
+	SCARLETT2_CONFIG_PAD_SWITCH = 5,
+	SCARLETT2_CONFIG_MSD_SWITCH = 6,
+	SCARLETT2_CONFIG_AIR_SWITCH = 7,
+	SCARLETT2_CONFIG_STANDALONE_SWITCH = 8,
+	SCARLETT2_CONFIG_PHANTOM_SWITCH = 9,
+	SCARLETT2_CONFIG_PHANTOM_PERSISTENCE = 10,
+	SCARLETT2_CONFIG_DIRECT_MONITOR = 11,
+	SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH = 12,
+	SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE = 13,
+	SCARLETT2_CONFIG_TALKBACK_MAP = 14,
+	SCARLETT2_CONFIG_COUNT = 15,
+};
+
+enum {
+	SCARLETT2_CONFIG_SET_NO_MIXER = 0,
+	SCARLETT2_CONFIG_SET_GEN_2 = 1,
+	SCARLETT2_CONFIG_SET_GEN_3 = 2,
+	SCARLETT2_CONFIG_SET_CLARETT = 3,
+	SCARLETT2_CONFIG_SET_COUNT = 4,
+};
+
+enum {
+	SCARLETT2_BUTTON_MUTE = 0,
+	SCARLETT2_BUTTON_DIM = 1,
+	SCARLETT2_DIM_MUTE_COUNT = 2,
+};
+
+struct scarlett2_data {
+	struct usb_mixer_interface *mixer;
+	struct mutex usb_mutex;
+	struct mutex data_mutex;
+	struct delayed_work work;
+	const struct scarlett2_device_info *info;
+	const char *series_name;
+	__u8 bInterfaceNumber;
+	__u8 bEndpointAddress;
+	__u16 wMaxPacketSize;
+	__u8 bInterval;
+	int num_mux_srcs;
+	int num_mux_dsts;
+	u16 scarlett2_seq;
+	u8 sync_updated;
+	u8 vol_updated;
+	u8 input_other_updated;
+	u8 monitor_other_updated;
+	u8 mux_updated;
+	u8 speaker_switching_switched;
+	u8 sync;
+	u8 master_vol;
+	u8 vol[10];
+	u8 vol_sw_hw_switch[10];
+	u8 mute_switch[10];
+	u8 level_switch[2];
+	u8 pad_switch[8];
+	u8 dim_mute[2];
+	u8 air_switch[8];
+	u8 phantom_switch[2];
+	u8 phantom_persistence;
+	u8 direct_monitor_switch;
+	u8 speaker_switching_switch;
+	u8 talkback_switch;
+	u8 talkback_map[12];
+	u8 msd_switch;
+	u8 standalone_switch;
+	struct snd_kcontrol *sync_ctl;
+	struct snd_kcontrol *master_vol_ctl;
+	struct snd_kcontrol *vol_ctls[10];
+	struct snd_kcontrol *sw_hw_ctls[10];
+	struct snd_kcontrol *mute_ctls[10];
+	struct snd_kcontrol *dim_mute_ctls[2];
+	struct snd_kcontrol *level_ctls[2];
+	struct snd_kcontrol *pad_ctls[8];
+	struct snd_kcontrol *air_ctls[8];
+	struct snd_kcontrol *phantom_ctls[2];
+	struct snd_kcontrol *mux_ctls[77];
+	struct snd_kcontrol *direct_monitor_ctl;
+	struct snd_kcontrol *speaker_switching_ctl;
+	struct snd_kcontrol *talkback_ctl;
+	u8 mux[77];
+	u8 mix[300];
+};
+
+struct scarlett2_usb_volume_status {
+	u8 dim_mute[2];
+	u8 pad1;
+	s16 sw_vol[10];
+	s16 hw_vol[10];
+	u8 mute_switch[10];
+	u8 sw_hw_switch[10];
+	u8 pad3[6];
+	s16 master_vol;
+} __attribute__((packed));
+
+struct scarlett2_usb_packet {
+	__le32 cmd;
+	__le16 size;
+	__le16 seq;
+	__le32 error;
+	__le32 pad;
+	u8 data[0];
+};
+
+struct snd_us16x08_control_params {
+	const struct snd_kcontrol_new *kcontrol_new;
+	int control_id;
+	int type;
+	int num_channels;
+	const char *name;
+	int default_val;
+};
+
+struct snd_us16x08_comp_store {
+	u8 val[96];
+};
+
+struct snd_us16x08_eq_store {
+	u8 val[256];
+};
+
+struct snd_us16x08_meter_store {
+	int meter_level[16];
+	int master_level[2];
+	int comp_index;
+	int comp_active_index;
+	int comp_level[16];
+	struct snd_us16x08_comp_store *comp_store;
+};
+
+struct s1810c_ctl_packet {
+	u32 a;
+	u32 b;
+	u32 fixed1;
+	u32 fixed2;
+	u32 c;
+	u32 d;
+	u32 e;
+};
+
+struct s1810_mixer_state {
+	uint16_t seqnum;
+	struct mutex usb_mutex;
+	struct mutex data_mutex;
+};
+
+struct s1810c_state_packet {
+	u32 fields[63];
+};
+
+enum {
+	UAC3_PD_STATE_D0 = 0,
+	UAC3_PD_STATE_D1 = 1,
+	UAC3_PD_STATE_D2 = 2,
+};
+
+struct uac3_power_domain_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bPowerDomainID;
+	__le16 waRecoveryTime1;
+	__le16 waRecoveryTime2;
+	__u8 bNrEntities;
+	__u8 baEntityID[0];
+} __attribute__((packed));
+
+typedef int (*quirk_func_t)(struct snd_usb_audio *, struct usb_interface *, struct usb_driver *, const struct snd_usb_audio_quirk *);
+
+typedef s8 int8_t;
+
+struct snd_usb_midi_endpoint_info {
+	int8_t out_ep;
+	uint8_t out_interval;
+	int8_t in_ep;
+	uint8_t in_interval;
+	uint16_t out_cables;
+	uint16_t in_cables;
+	int16_t assoc_in_jacks[16];
+	int16_t assoc_out_jacks[16];
+};
+
+struct usb_audio_quirk_flags_table {
+	u32 id;
+	u32 flags;
+};
+
+enum quirk_type {
+	QUIRK_IGNORE_INTERFACE = 0,
+	QUIRK_COMPOSITE = 1,
+	QUIRK_AUTODETECT = 2,
+	QUIRK_MIDI_STANDARD_INTERFACE = 3,
+	QUIRK_MIDI_FIXED_ENDPOINT = 4,
+	QUIRK_MIDI_YAMAHA = 5,
+	QUIRK_MIDI_ROLAND = 6,
+	QUIRK_MIDI_MIDIMAN = 7,
+	QUIRK_MIDI_NOVATION = 8,
+	QUIRK_MIDI_RAW_BYTES = 9,
+	QUIRK_MIDI_EMAGIC = 10,
+	QUIRK_MIDI_CME = 11,
+	QUIRK_MIDI_AKAI = 12,
+	QUIRK_MIDI_US122L = 13,
+	QUIRK_MIDI_FTDI = 14,
+	QUIRK_MIDI_CH345 = 15,
+	QUIRK_AUDIO_STANDARD_INTERFACE = 16,
+	QUIRK_AUDIO_FIXED_ENDPOINT = 17,
+	QUIRK_AUDIO_EDIROL_UAXX = 18,
+	QUIRK_AUDIO_STANDARD_MIXER = 19,
+	QUIRK_TYPE_COUNT = 20,
+};
+
+enum {
+	EMU_QUIRK_SR_44100HZ = 0,
+	EMU_QUIRK_SR_48000HZ = 1,
+	EMU_QUIRK_SR_88200HZ = 2,
+	EMU_QUIRK_SR_96000HZ = 3,
+	EMU_QUIRK_SR_176400HZ = 4,
+	EMU_QUIRK_SR_192000HZ = 5,
+};
+
+struct usb_ms_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bNumEmbMIDIJack;
+	__u8 baAssocJackID[0];
+};
+
+struct uac1_as_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalLink;
+	__u8 bDelay;
+	__le16 wFormatTag;
+} __attribute__((packed));
+
+struct usb_midi_out_jack_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bJackType;
+	__u8 bJackID;
+	__u8 bNrInputPins;
+	struct usb_midi_source_pin pins[0];
+};
+
+struct uac3_iso_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le32 bmControls;
+	__u8 bLockDelayUnits;
+	__le16 wLockDelay;
+} __attribute__((packed));
+
+struct uac3_hc_descriptor_header {
+	__le16 wLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 wDescriptorID;
+};
+
+struct uac3_cluster_segment_descriptor {
+	__le16 wLength;
+	__u8 bSegmentType;
+} __attribute__((packed));
+
+struct uac3_cluster_information_segment_descriptor {
+	__le16 wLength;
+	__u8 bSegmentType;
+	__u8 bChPurpose;
+	__u8 bChRelationship;
+	__u8 bChGroupID;
+};
+
+struct uac_iso_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bmAttributes;
+	__u8 bLockDelayUnits;
+	__le16 wLockDelay;
+} __attribute__((packed));
+
+struct usb_desc_validator {
+	unsigned char protocol;
+	unsigned char type;
+	bool (*func)(const void *, const struct usb_desc_validator *);
+	size_t size;
+};
+
+struct snd_usb_midi_in_endpoint;
+
+struct snd_usb_midi_out_endpoint;
+
+struct usb_protocol_ops {
+	void (*input)(struct snd_usb_midi_in_endpoint *, uint8_t *, int);
+	void (*output)(struct snd_usb_midi_out_endpoint *, struct urb *);
+	void (*output_packet)(struct urb *, uint8_t, uint8_t, uint8_t, uint8_t);
+	void (*init_out_endpoint)(struct snd_usb_midi_out_endpoint *);
+	void (*finish_out_endpoint)(struct snd_usb_midi_out_endpoint *);
+};
+
+struct usbmidi_in_port {
+	struct snd_rawmidi_substream *substream;
+	u8 running_status_length;
+};
+
+struct snd_usb_midi;
+
+struct snd_usb_midi_in_endpoint {
+	struct snd_usb_midi *umidi;
+	struct urb *urbs[7];
+	struct usbmidi_in_port ports[16];
+	u8 seen_f5;
+	bool in_sysex;
+	u8 last_cin;
+	u8 error_resubmit;
+	int current_port;
+};
+
+struct snd_usb_midi_endpoint {
+	struct snd_usb_midi_out_endpoint *out;
+	struct snd_usb_midi_in_endpoint *in;
+};
+
+struct snd_usb_midi {
+	struct usb_device *dev;
+	struct snd_card *card;
+	struct usb_interface *iface;
+	const struct snd_usb_audio_quirk *quirk;
+	struct snd_rawmidi *rmidi;
+	const struct usb_protocol_ops *usb_protocol_ops;
+	struct list_head list;
+	struct timer_list error_timer;
+	spinlock_t disc_lock;
+	struct rw_semaphore disc_rwsem;
+	struct mutex mutex;
+	u32 usb_id;
+	int next_midi_device;
+	struct snd_usb_midi_endpoint endpoints[2];
+	unsigned long input_triggered;
+	unsigned int opened[2];
+	unsigned char disconnected;
+	unsigned char input_running;
+	struct snd_kcontrol *roland_load_ctl;
+};
+
+struct snd_seq_addr {
+	unsigned char client;
+	unsigned char port;
+};
+
+struct snd_seq_port_info {
+	struct snd_seq_addr addr;
+	char name[64];
+	unsigned int capability;
+	unsigned int type;
+	int midi_channels;
+	int midi_voices;
+	int synth_voices;
+	int read_use;
+	int write_use;
+	void *kernel;
+	unsigned int flags;
+	unsigned char time_queue;
+	unsigned char direction;
+	unsigned char ump_group;
+	char reserved[57];
+};
+
+struct out_urb_context {
+	struct urb *urb;
+	struct snd_usb_midi_out_endpoint *ep;
+};
+
+struct usbmidi_out_port {
+	struct snd_usb_midi_out_endpoint *ep;
+	struct snd_rawmidi_substream *substream;
+	int active;
+	uint8_t cable;
+	uint8_t state;
+	uint8_t data[2];
+};
+
+struct snd_usb_midi_out_endpoint {
+	struct snd_usb_midi *umidi;
+	struct out_urb_context urbs[7];
+	unsigned int active_urbs;
+	unsigned int drain_urbs;
+	int max_transfer;
+	struct work_struct work;
+	unsigned int next_urb;
+	spinlock_t buffer_lock;
+	struct usbmidi_out_port ports[16];
+	int current_port;
+	wait_queue_head_t drain_wait;
+};
+
+struct port_info {
+	u32 id;
+	short port;
+	short voices;
+	const char *name;
+	unsigned int seq_flags;
+};
+
+struct snd_soc_card;
+
+typedef void (*btf_trace_snd_soc_bias_level_start)(void *, struct snd_soc_card *, int);
+
+enum snd_soc_pcm_subclass {
+	SND_SOC_PCM_CLASS_PCM = 0,
+	SND_SOC_PCM_CLASS_BE = 1,
+};
+
+enum snd_soc_bias_level {
+	SND_SOC_BIAS_OFF = 0,
+	SND_SOC_BIAS_STANDBY = 1,
+	SND_SOC_BIAS_PREPARE = 2,
+	SND_SOC_BIAS_ON = 3,
+};
+
+struct snd_soc_component;
+
+struct snd_soc_dapm_widget;
+
+struct snd_soc_dapm_context {
+	enum snd_soc_bias_level bias_level;
+	unsigned int idle_bias_off: 1;
+	unsigned int suspend_bias_off: 1;
+	struct device *dev;
+	struct snd_soc_component *component;
+	struct snd_soc_card *card;
+	enum snd_soc_bias_level target_bias_level;
+	struct list_head list;
+	struct snd_soc_dapm_widget *wcache_sink;
+	struct snd_soc_dapm_widget *wcache_source;
+	struct dentry *debugfs_dapm;
+};
+
+struct snd_soc_dapm_stats {
+	int power_checks;
+	int path_checks;
+	int neighbour_checks;
+};
+
+struct snd_soc_dai_link;
+
+struct snd_soc_codec_conf;
+
+struct snd_soc_aux_dev;
+
+struct snd_soc_dapm_route;
+
+struct snd_soc_dapm_update;
+
+struct snd_soc_card {
+	const char *name;
+	const char *long_name;
+	const char *driver_name;
+	const char *components;
+	unsigned short pci_subsystem_vendor;
+	unsigned short pci_subsystem_device;
+	bool pci_subsystem_set;
+	char topology_shortname[32];
+	struct device *dev;
+	struct snd_card *snd_card;
+	struct module *owner;
+	struct mutex mutex;
+	struct mutex dapm_mutex;
+	struct mutex pcm_mutex;
+	enum snd_soc_pcm_subclass pcm_subclass;
+	int (*probe)(struct snd_soc_card *);
+	int (*late_probe)(struct snd_soc_card *);
+	void (*fixup_controls)(struct snd_soc_card *);
+	int (*remove)(struct snd_soc_card *);
+	int (*suspend_pre)(struct snd_soc_card *);
+	int (*suspend_post)(struct snd_soc_card *);
+	int (*resume_pre)(struct snd_soc_card *);
+	int (*resume_post)(struct snd_soc_card *);
+	int (*set_bias_level)(struct snd_soc_card *, struct snd_soc_dapm_context *, enum snd_soc_bias_level);
+	int (*set_bias_level_post)(struct snd_soc_card *, struct snd_soc_dapm_context *, enum snd_soc_bias_level);
+	int (*add_dai_link)(struct snd_soc_card *, struct snd_soc_dai_link *);
+	void (*remove_dai_link)(struct snd_soc_card *, struct snd_soc_dai_link *);
+	long pmdown_time;
+	struct snd_soc_dai_link *dai_link;
+	int num_links;
+	struct list_head rtd_list;
+	int num_rtd;
+	struct snd_soc_codec_conf *codec_conf;
+	int num_configs;
+	struct snd_soc_aux_dev *aux_dev;
+	int num_aux_devs;
+	struct list_head aux_comp_list;
+	const struct snd_kcontrol_new *controls;
+	int num_controls;
+	const struct snd_soc_dapm_widget *dapm_widgets;
+	int num_dapm_widgets;
+	const struct snd_soc_dapm_route *dapm_routes;
+	int num_dapm_routes;
+	const struct snd_soc_dapm_widget *of_dapm_widgets;
+	int num_of_dapm_widgets;
+	const struct snd_soc_dapm_route *of_dapm_routes;
+	int num_of_dapm_routes;
+	struct list_head component_dev_list;
+	struct list_head list;
+	struct list_head widgets;
+	struct list_head paths;
+	struct list_head dapm_list;
+	struct list_head dapm_dirty;
+	struct list_head dobj_list;
+	struct snd_soc_dapm_context dapm;
+	struct snd_soc_dapm_stats dapm_stats;
+	struct snd_soc_dapm_update *update;
+	struct dentry *debugfs_card_root;
+	struct work_struct deferred_resume_work;
+	u32 pop_time;
+	unsigned int instantiated: 1;
+	unsigned int topology_shortname_created: 1;
+	unsigned int fully_routed: 1;
+	unsigned int disable_route_checks: 1;
+	unsigned int probed: 1;
+	unsigned int component_chaining: 1;
+	void *drvdata;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct snd_soc_component_driver;
+
+struct snd_soc_component {
+	const char *name;
+	int id;
+	const char *name_prefix;
+	struct device *dev;
+	struct snd_soc_card *card;
+	unsigned int active;
+	unsigned int suspended: 1;
+	struct list_head list;
+	struct list_head card_aux_list;
+	struct list_head card_list;
+	const struct snd_soc_component_driver *driver;
+	struct list_head dai_list;
+	int num_dai;
+	struct regmap *regmap;
+	int val_bytes;
+	struct mutex io_mutex;
+	struct list_head dobj_list;
+	struct snd_soc_dapm_context dapm;
+	int (*init)(struct snd_soc_component *);
+	void *mark_module;
+	struct snd_pcm_substream *mark_open;
+	struct snd_pcm_substream *mark_hw_params;
+	struct snd_pcm_substream *mark_trigger;
+	struct snd_compr_stream *mark_compr_open;
+	void *mark_pm;
+	struct dentry *debugfs_root;
+	const char *debugfs_prefix;
+};
+
+enum snd_soc_dapm_type {
+	snd_soc_dapm_input = 0,
+	snd_soc_dapm_output = 1,
+	snd_soc_dapm_mux = 2,
+	snd_soc_dapm_demux = 3,
+	snd_soc_dapm_mixer = 4,
+	snd_soc_dapm_mixer_named_ctl = 5,
+	snd_soc_dapm_pga = 6,
+	snd_soc_dapm_out_drv = 7,
+	snd_soc_dapm_adc = 8,
+	snd_soc_dapm_dac = 9,
+	snd_soc_dapm_micbias = 10,
+	snd_soc_dapm_mic = 11,
+	snd_soc_dapm_hp = 12,
+	snd_soc_dapm_spk = 13,
+	snd_soc_dapm_line = 14,
+	snd_soc_dapm_switch = 15,
+	snd_soc_dapm_vmid = 16,
+	snd_soc_dapm_pre = 17,
+	snd_soc_dapm_post = 18,
+	snd_soc_dapm_supply = 19,
+	snd_soc_dapm_pinctrl = 20,
+	snd_soc_dapm_regulator_supply = 21,
+	snd_soc_dapm_clock_supply = 22,
+	snd_soc_dapm_aif_in = 23,
+	snd_soc_dapm_aif_out = 24,
+	snd_soc_dapm_siggen = 25,
+	snd_soc_dapm_sink = 26,
+	snd_soc_dapm_dai_in = 27,
+	snd_soc_dapm_dai_out = 28,
+	snd_soc_dapm_dai_link = 29,
+	snd_soc_dapm_kcontrol = 30,
+	snd_soc_dapm_buffer = 31,
+	snd_soc_dapm_scheduler = 32,
+	snd_soc_dapm_effect = 33,
+	snd_soc_dapm_src = 34,
+	snd_soc_dapm_asrc = 35,
+	snd_soc_dapm_encoder = 36,
+	snd_soc_dapm_decoder = 37,
+	SND_SOC_DAPM_TYPE_COUNT = 38,
+};
+
+enum snd_soc_trigger_order {
+	SND_SOC_TRIGGER_ORDER_DEFAULT = 0,
+	SND_SOC_TRIGGER_ORDER_LDC = 1,
+	SND_SOC_TRIGGER_ORDER_MAX = 2,
+};
+
+struct snd_soc_pcm_runtime;
+
+struct snd_soc_jack;
+
+struct snd_compress_ops;
+
+struct snd_soc_component_driver {
+	const char *name;
+	const struct snd_kcontrol_new *controls;
+	unsigned int num_controls;
+	const struct snd_soc_dapm_widget *dapm_widgets;
+	unsigned int num_dapm_widgets;
+	const struct snd_soc_dapm_route *dapm_routes;
+	unsigned int num_dapm_routes;
+	int (*probe)(struct snd_soc_component *);
+	void (*remove)(struct snd_soc_component *);
+	int (*suspend)(struct snd_soc_component *);
+	int (*resume)(struct snd_soc_component *);
+	unsigned int (*read)(struct snd_soc_component *, unsigned int);
+	int (*write)(struct snd_soc_component *, unsigned int, unsigned int);
+	int (*pcm_construct)(struct snd_soc_component *, struct snd_soc_pcm_runtime *);
+	void (*pcm_destruct)(struct snd_soc_component *, struct snd_pcm *);
+	int (*set_sysclk)(struct snd_soc_component *, int, int, unsigned int, int);
+	int (*set_pll)(struct snd_soc_component *, int, int, unsigned int, unsigned int);
+	int (*set_jack)(struct snd_soc_component *, struct snd_soc_jack *, void *);
+	int (*get_jack_type)(struct snd_soc_component *);
+	int (*of_xlate_dai_name)(struct snd_soc_component *, const struct of_phandle_args *, const char **);
+	int (*of_xlate_dai_id)(struct snd_soc_component *, struct device_node *);
+	void (*seq_notifier)(struct snd_soc_component *, enum snd_soc_dapm_type, int);
+	int (*stream_event)(struct snd_soc_component *, int);
+	int (*set_bias_level)(struct snd_soc_component *, enum snd_soc_bias_level);
+	int (*open)(struct snd_soc_component *, struct snd_pcm_substream *);
+	int (*close)(struct snd_soc_component *, struct snd_pcm_substream *);
+	int (*ioctl)(struct snd_soc_component *, struct snd_pcm_substream *, unsigned int, void *);
+	int (*hw_params)(struct snd_soc_component *, struct snd_pcm_substream *, struct snd_pcm_hw_params *);
+	int (*hw_free)(struct snd_soc_component *, struct snd_pcm_substream *);
+	int (*prepare)(struct snd_soc_component *, struct snd_pcm_substream *);
+	int (*trigger)(struct snd_soc_component *, struct snd_pcm_substream *, int);
+	int (*sync_stop)(struct snd_soc_component *, struct snd_pcm_substream *);
+	snd_pcm_uframes_t (*pointer)(struct snd_soc_component *, struct snd_pcm_substream *);
+	int (*get_time_info)(struct snd_soc_component *, struct snd_pcm_substream *, struct timespec64 *, struct timespec64 *, struct snd_pcm_audio_tstamp_config *, struct snd_pcm_audio_tstamp_report *);
+	int (*copy)(struct snd_soc_component *, struct snd_pcm_substream *, int, unsigned long, struct iov_iter *, unsigned long);
+	struct page * (*page)(struct snd_soc_component *, struct snd_pcm_substream *, unsigned long);
+	int (*mmap)(struct snd_soc_component *, struct snd_pcm_substream *, struct vm_area_struct *);
+	int (*ack)(struct snd_soc_component *, struct snd_pcm_substream *);
+	snd_pcm_sframes_t (*delay)(struct snd_soc_component *, struct snd_pcm_substream *);
+	const struct snd_compress_ops *compress_ops;
+	int probe_order;
+	int remove_order;
+	enum snd_soc_trigger_order trigger_start;
+	enum snd_soc_trigger_order trigger_stop;
+	unsigned int module_get_upon_open: 1;
+	unsigned int idle_bias_on: 1;
+	unsigned int suspend_bias_off: 1;
+	unsigned int use_pmdown_time: 1;
+	unsigned int endianness: 1;
+	unsigned int legacy_dai_naming: 1;
+	const char *ignore_machine;
+	const char *topology_name_prefix;
+	int (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *, struct snd_pcm_hw_params *);
+	bool use_dai_pcm_id;
+	int be_pcm_base;
+	const char *debugfs_prefix;
+};
+
+enum snd_soc_dobj_type {
+	SND_SOC_DOBJ_NONE = 0,
+	SND_SOC_DOBJ_MIXER = 1,
+	SND_SOC_DOBJ_BYTES = 2,
+	SND_SOC_DOBJ_ENUM = 3,
+	SND_SOC_DOBJ_GRAPH = 4,
+	SND_SOC_DOBJ_WIDGET = 5,
+	SND_SOC_DOBJ_DAI_LINK = 6,
+	SND_SOC_DOBJ_PCM = 7,
+	SND_SOC_DOBJ_CODEC_LINK = 8,
+	SND_SOC_DOBJ_BACKEND_LINK = 9,
+};
+
+struct snd_soc_dobj_control {
+	struct snd_kcontrol *kcontrol;
+	char **dtexts;
+	unsigned long *dvalues;
+};
+
+struct snd_soc_dobj_widget {
+	unsigned int *kcontrol_type;
+};
+
+struct snd_soc_dobj {
+	enum snd_soc_dobj_type type;
+	unsigned int index;
+	struct list_head list;
+	int (*unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	union {
+		struct snd_soc_dobj_control control;
+		struct snd_soc_dobj_widget widget;
+	};
+	void *private;
+};
+
+struct snd_soc_dapm_widget {
+	enum snd_soc_dapm_type id;
+	const char *name;
+	const char *sname;
+	struct list_head list;
+	struct snd_soc_dapm_context *dapm;
+	void *priv;
+	struct regulator *regulator;
+	struct pinctrl *pinctrl;
+	int reg;
+	unsigned char shift;
+	unsigned int mask;
+	unsigned int on_val;
+	unsigned int off_val;
+	unsigned char power: 1;
+	unsigned char active: 1;
+	unsigned char connected: 1;
+	unsigned char new: 1;
+	unsigned char force: 1;
+	unsigned char ignore_suspend: 1;
+	unsigned char new_power: 1;
+	unsigned char power_checked: 1;
+	unsigned char is_supply: 1;
+	unsigned char is_ep: 2;
+	unsigned char no_wname_in_kcontrol_name: 1;
+	int subseq;
+	int (*power_check)(struct snd_soc_dapm_widget *);
+	unsigned short event_flags;
+	int (*event)(struct snd_soc_dapm_widget *, struct snd_kcontrol *, int);
+	int num_kcontrols;
+	const struct snd_kcontrol_new *kcontrol_news;
+	struct snd_kcontrol **kcontrols;
+	struct snd_soc_dobj dobj;
+	struct list_head edges[2];
+	struct list_head work_list;
+	struct list_head power_list;
+	struct list_head dirty;
+	int endpoints[2];
+	struct clk *clk;
+	int channel;
+};
+
+struct snd_soc_dapm_route {
+	const char *sink;
+	const char *control;
+	const char *source;
+	int (*connected)(struct snd_soc_dapm_widget *, struct snd_soc_dapm_widget *);
+	struct snd_soc_dobj dobj;
+};
+
+enum snd_soc_dpcm_update {
+	SND_SOC_DPCM_UPDATE_NO = 0,
+	SND_SOC_DPCM_UPDATE_BE = 1,
+	SND_SOC_DPCM_UPDATE_FE = 2,
+};
+
+enum snd_soc_dpcm_state {
+	SND_SOC_DPCM_STATE_NEW = 0,
+	SND_SOC_DPCM_STATE_OPEN = 1,
+	SND_SOC_DPCM_STATE_HW_PARAMS = 2,
+	SND_SOC_DPCM_STATE_PREPARE = 3,
+	SND_SOC_DPCM_STATE_START = 4,
+	SND_SOC_DPCM_STATE_STOP = 5,
+	SND_SOC_DPCM_STATE_PAUSED = 6,
+	SND_SOC_DPCM_STATE_SUSPEND = 7,
+	SND_SOC_DPCM_STATE_HW_FREE = 8,
+	SND_SOC_DPCM_STATE_CLOSE = 9,
+};
+
+struct snd_soc_dpcm_runtime {
+	struct list_head be_clients;
+	struct list_head fe_clients;
+	int users;
+	struct snd_pcm_hw_params hw_params;
+	enum snd_soc_dpcm_update runtime_update;
+	enum snd_soc_dpcm_state state;
+	int trigger_pending;
+	int be_start;
+	int be_pause;
+	bool fe_pause;
+};
+
+struct snd_soc_dai;
+
+struct snd_soc_pcm_runtime {
+	struct device *dev;
+	struct snd_soc_card *card;
+	struct snd_soc_dai_link *dai_link;
+	struct snd_pcm_ops ops;
+	unsigned int c2c_params_select;
+	struct snd_soc_dpcm_runtime dpcm[2];
+	struct snd_soc_dapm_widget *c2c_widget[2];
+	long pmdown_time;
+	struct snd_pcm *pcm;
+	struct snd_compr *compr;
+	struct snd_soc_dai **dais;
+	struct delayed_work delayed_work;
+	void (*close_delayed_work_func)(struct snd_soc_pcm_runtime *);
+	struct dentry *debugfs_dpcm_root;
+	unsigned int num;
+	struct list_head list;
+	struct snd_pcm_substream *mark_startup;
+	struct snd_pcm_substream *mark_hw_params;
+	struct snd_pcm_substream *mark_trigger;
+	struct snd_compr_stream *mark_compr_startup;
+	unsigned int pop_wait: 1;
+	unsigned int fe_compr: 1;
+	bool initialized;
+	int num_components;
+	u64 android_kabi_reserved1;
+	struct snd_soc_component *components[0];
+};
+
+enum snd_soc_dpcm_trigger {
+	SND_SOC_DPCM_TRIGGER_PRE = 0,
+	SND_SOC_DPCM_TRIGGER_POST = 1,
+	SND_SOC_DPCM_TRIGGER_BESPOKE = 2,
+};
+
+struct snd_soc_dai_link_component;
+
+struct snd_soc_dai_link_codec_ch_map;
+
+struct snd_soc_pcm_stream;
+
+struct snd_soc_ops;
+
+struct snd_soc_compr_ops;
+
+struct snd_soc_dai_link {
+	const char *name;
+	const char *stream_name;
+	struct snd_soc_dai_link_component *cpus;
+	unsigned int num_cpus;
+	struct snd_soc_dai_link_component *codecs;
+	unsigned int num_codecs;
+	struct snd_soc_dai_link_codec_ch_map *codec_ch_maps;
+	struct snd_soc_dai_link_component *platforms;
+	unsigned int num_platforms;
+	int id;
+	const struct snd_soc_pcm_stream *c2c_params;
+	unsigned int num_c2c_params;
+	unsigned int dai_fmt;
+	enum snd_soc_dpcm_trigger trigger[2];
+	int (*init)(struct snd_soc_pcm_runtime *);
+	void (*exit)(struct snd_soc_pcm_runtime *);
+	int (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *, struct snd_pcm_hw_params *);
+	const struct snd_soc_ops *ops;
+	const struct snd_soc_compr_ops *compr_ops;
+	enum snd_soc_trigger_order trigger_start;
+	enum snd_soc_trigger_order trigger_stop;
+	unsigned int nonatomic: 1;
+	unsigned int playback_only: 1;
+	unsigned int capture_only: 1;
+	unsigned int ignore_suspend: 1;
+	unsigned int symmetric_rate: 1;
+	unsigned int symmetric_channels: 1;
+	unsigned int symmetric_sample_bits: 1;
+	unsigned int no_pcm: 1;
+	unsigned int dynamic: 1;
+	unsigned int dpcm_capture: 1;
+	unsigned int dpcm_playback: 1;
+	unsigned int dpcm_merged_format: 1;
+	unsigned int dpcm_merged_chan: 1;
+	unsigned int dpcm_merged_rate: 1;
+	unsigned int ignore_pmdown_time: 1;
+	unsigned int ignore: 1;
+	struct snd_soc_dobj dobj;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_soc_dai_link_component {
+	const char *name;
+	struct device_node *of_node;
+	const char *dai_name;
+	struct of_phandle_args *dai_args;
+};
+
+struct snd_soc_dai_link_codec_ch_map {
+	unsigned int connected_cpu_id;
+	unsigned int ch_mask;
+};
+
+struct snd_soc_pcm_stream {
+	const char *stream_name;
+	u64 formats;
+	unsigned int rates;
+	unsigned int rate_min;
+	unsigned int rate_max;
+	unsigned int channels_min;
+	unsigned int channels_max;
+	unsigned int sig_bits;
+};
+
+struct snd_soc_ops {
+	int (*startup)(struct snd_pcm_substream *);
+	void (*shutdown)(struct snd_pcm_substream *);
+	int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
+	int (*hw_free)(struct snd_pcm_substream *);
+	int (*prepare)(struct snd_pcm_substream *);
+	int (*trigger)(struct snd_pcm_substream *, int);
+};
+
+struct snd_soc_compr_ops {
+	int (*startup)(struct snd_compr_stream *);
+	void (*shutdown)(struct snd_compr_stream *);
+	int (*set_params)(struct snd_compr_stream *);
+};
+
+struct snd_soc_dai_stream {
+	struct snd_soc_dapm_widget *widget;
+	unsigned int active;
+	unsigned int tdm_mask;
+	void *dma_data;
+};
+
+struct snd_soc_dai_driver;
+
+struct snd_soc_dai {
+	const char *name;
+	int id;
+	struct device *dev;
+	struct snd_soc_dai_driver *driver;
+	struct snd_soc_dai_stream stream[2];
+	unsigned int rate;
+	unsigned int channels;
+	unsigned int sample_bits;
+	struct snd_soc_component *component;
+	struct list_head list;
+	struct snd_pcm_substream *mark_startup;
+	struct snd_pcm_substream *mark_hw_params;
+	struct snd_pcm_substream *mark_trigger;
+	struct snd_compr_stream *mark_compr_startup;
+	unsigned int probed: 1;
+};
+
+struct snd_soc_dai_ops;
+
+struct snd_soc_cdai_ops;
+
+struct snd_soc_dai_driver {
+	const char *name;
+	unsigned int id;
+	unsigned int base;
+	struct snd_soc_dobj dobj;
+	struct of_phandle_args *dai_args;
+	const struct snd_soc_dai_ops *ops;
+	const struct snd_soc_cdai_ops *cops;
+	struct snd_soc_pcm_stream capture;
+	struct snd_soc_pcm_stream playback;
+	unsigned int symmetric_rate: 1;
+	unsigned int symmetric_channels: 1;
+	unsigned int symmetric_sample_bits: 1;
+};
+
+struct snd_soc_dai_ops {
+	int (*probe)(struct snd_soc_dai *);
+	int (*remove)(struct snd_soc_dai *);
+	int (*compress_new)(struct snd_soc_pcm_runtime *, int);
+	int (*pcm_new)(struct snd_soc_pcm_runtime *, struct snd_soc_dai *);
+	int (*set_sysclk)(struct snd_soc_dai *, int, unsigned int, int);
+	int (*set_pll)(struct snd_soc_dai *, int, int, unsigned int, unsigned int);
+	int (*set_clkdiv)(struct snd_soc_dai *, int, int);
+	int (*set_bclk_ratio)(struct snd_soc_dai *, unsigned int);
+	int (*set_fmt)(struct snd_soc_dai *, unsigned int);
+	int (*xlate_tdm_slot_mask)(unsigned int, unsigned int *, unsigned int *);
+	int (*set_tdm_slot)(struct snd_soc_dai *, unsigned int, unsigned int, int, int);
+	int (*set_channel_map)(struct snd_soc_dai *, unsigned int, unsigned int *, unsigned int, unsigned int *);
+	int (*get_channel_map)(struct snd_soc_dai *, unsigned int *, unsigned int *, unsigned int *, unsigned int *);
+	int (*set_tristate)(struct snd_soc_dai *, int);
+	int (*set_stream)(struct snd_soc_dai *, void *, int);
+	void * (*get_stream)(struct snd_soc_dai *, int);
+	int (*mute_stream)(struct snd_soc_dai *, int, int);
+	int (*startup)(struct snd_pcm_substream *, struct snd_soc_dai *);
+	void (*shutdown)(struct snd_pcm_substream *, struct snd_soc_dai *);
+	int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *, struct snd_soc_dai *);
+	int (*hw_free)(struct snd_pcm_substream *, struct snd_soc_dai *);
+	int (*prepare)(struct snd_pcm_substream *, struct snd_soc_dai *);
+	int (*trigger)(struct snd_pcm_substream *, int, struct snd_soc_dai *);
+	int (*bespoke_trigger)(struct snd_pcm_substream *, int, struct snd_soc_dai *);
+	snd_pcm_sframes_t (*delay)(struct snd_pcm_substream *, struct snd_soc_dai *);
+	u64 *auto_selectable_formats;
+	int num_auto_selectable_formats;
+	int probe_order;
+	int remove_order;
+	unsigned int no_capture_mute: 1;
+	unsigned int mute_unmute_on_trigger: 1;
+};
+
+struct snd_soc_cdai_ops {
+	int (*startup)(struct snd_compr_stream *, struct snd_soc_dai *);
+	int (*shutdown)(struct snd_compr_stream *, struct snd_soc_dai *);
+	int (*set_params)(struct snd_compr_stream *, struct snd_compr_params *, struct snd_soc_dai *);
+	int (*get_params)(struct snd_compr_stream *, struct snd_codec *, struct snd_soc_dai *);
+	int (*set_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *, struct snd_soc_dai *);
+	int (*get_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *, struct snd_soc_dai *);
+	int (*trigger)(struct snd_compr_stream *, int, struct snd_soc_dai *);
+	int (*pointer)(struct snd_compr_stream *, struct snd_compr_tstamp *, struct snd_soc_dai *);
+	int (*ack)(struct snd_compr_stream *, size_t, struct snd_soc_dai *);
+};
+
+struct snd_soc_jack {
+	struct mutex mutex;
+	struct snd_jack *jack;
+	struct snd_soc_card *card;
+	struct list_head pins;
+	int status;
+	struct blocking_notifier_head notifier;
+	struct list_head jack_zones;
+};
+
+struct snd_compress_ops {
+	int (*open)(struct snd_soc_component *, struct snd_compr_stream *);
+	int (*free)(struct snd_soc_component *, struct snd_compr_stream *);
+	int (*set_params)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_params *);
+	int (*get_params)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_codec *);
+	int (*set_metadata)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_metadata *);
+	int (*get_metadata)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_metadata *);
+	int (*trigger)(struct snd_soc_component *, struct snd_compr_stream *, int);
+	int (*pointer)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_tstamp *);
+	int (*copy)(struct snd_soc_component *, struct snd_compr_stream *, char __attribute__((btf_type_tag("user"))) *, size_t);
+	int (*mmap)(struct snd_soc_component *, struct snd_compr_stream *, struct vm_area_struct *);
+	int (*ack)(struct snd_soc_component *, struct snd_compr_stream *, size_t);
+	int (*get_caps)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_caps *);
+	int (*get_codec_caps)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_codec_caps *);
+};
+
+struct snd_soc_codec_conf {
+	struct snd_soc_dai_link_component dlc;
+	const char *name_prefix;
+};
+
+struct snd_soc_aux_dev {
+	struct snd_soc_dai_link_component dlc;
+	int (*init)(struct snd_soc_component *);
+};
+
+struct snd_soc_dapm_update {
+	struct snd_kcontrol *kcontrol;
+	int reg;
+	int mask;
+	int val;
+	int reg2;
+	int mask2;
+	int val2;
+	bool has_second_set;
+};
+
+typedef void (*btf_trace_snd_soc_bias_level_done)(void *, struct snd_soc_card *, int);
+
+typedef void (*btf_trace_snd_soc_dapm_start)(void *, struct snd_soc_card *);
+
+typedef void (*btf_trace_snd_soc_dapm_done)(void *, struct snd_soc_card *);
+
+typedef void (*btf_trace_snd_soc_dapm_widget_power)(void *, struct snd_soc_dapm_widget *, int);
+
+typedef void (*btf_trace_snd_soc_dapm_widget_event_start)(void *, struct snd_soc_dapm_widget *, int);
+
+typedef void (*btf_trace_snd_soc_dapm_widget_event_done)(void *, struct snd_soc_dapm_widget *, int);
+
+typedef void (*btf_trace_snd_soc_dapm_walk_done)(void *, struct snd_soc_card *);
+
+enum snd_soc_dapm_direction {
+	SND_SOC_DAPM_DIR_IN = 0,
+	SND_SOC_DAPM_DIR_OUT = 1,
+};
+
+struct snd_soc_dapm_path;
+
+typedef void (*btf_trace_snd_soc_dapm_path)(void *, struct snd_soc_dapm_widget *, enum snd_soc_dapm_direction, struct snd_soc_dapm_path *);
+
+struct snd_soc_dapm_path {
+	const char *name;
+	union {
+		struct {
+			struct snd_soc_dapm_widget *source;
+			struct snd_soc_dapm_widget *sink;
+		};
+		struct snd_soc_dapm_widget *node[2];
+	};
+	u32 connect: 1;
+	u32 walking: 1;
+	u32 weak: 1;
+	u32 is_supply: 1;
+	int (*connected)(struct snd_soc_dapm_widget *, struct snd_soc_dapm_widget *);
+	struct list_head list_node[2];
+	struct list_head list_kcontrol;
+	struct list_head list;
+};
+
+typedef void (*btf_trace_snd_soc_dapm_connected)(void *, int, int);
+
+typedef void (*btf_trace_snd_soc_jack_irq)(void *, const char *);
+
+typedef void (*btf_trace_snd_soc_jack_report)(void *, struct snd_soc_jack *, int, int);
+
+typedef void (*btf_trace_snd_soc_jack_notify)(void *, struct snd_soc_jack *, int);
+
+struct trace_event_raw_snd_soc_card {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_dapm_basic {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_dapm_widget {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_dapm_walk_done {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int power_checks;
+	int path_checks;
+	int neighbour_checks;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_dapm_path {
+	struct trace_entry ent;
+	u32 __data_loc_wname;
+	u32 __data_loc_pname;
+	u32 __data_loc_pnname;
+	int path_node;
+	int path_connect;
+	int path_dir;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_dapm_connected {
+	struct trace_entry ent;
+	int paths;
+	int stream;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_jack_irq {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_jack_report {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int mask;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_jack_notify {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_snd_soc_card {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_dapm_basic {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_dapm_widget {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_dapm_walk_done {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_jack_irq {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_jack_report {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_jack_notify {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_dapm_path {
+	u32 wname;
+	u32 pname;
+	u32 pnname;
+};
+
+struct trace_event_data_offsets_snd_soc_dapm_connected {};
+
+struct soc_mixer_control {
+	int min;
+	int max;
+	int platform_max;
+	int reg;
+	int rreg;
+	unsigned int shift;
+	unsigned int rshift;
+	unsigned int sign_bit;
+	unsigned int invert: 1;
+	unsigned int autodisable: 1;
+	struct snd_soc_dobj dobj;
+	u64 android_kabi_reserved1;
+};
+
+struct soc_enum {
+	int reg;
+	unsigned char shift_l;
+	unsigned char shift_r;
+	unsigned int items;
+	unsigned int mask;
+	const char * const *texts;
+	const unsigned int *values;
+	unsigned int autodisable: 1;
+	struct snd_soc_dobj dobj;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_soc_dapm_widget_list {
+	int num_widgets;
+	struct snd_soc_dapm_widget *widgets[0];
+};
+
+struct dapm_kcontrol_data {
+	unsigned int value;
+	struct snd_soc_dapm_widget *widget;
+	struct list_head paths;
+	struct snd_soc_dapm_widget_list *wlist;
+};
+
+struct snd_soc_dapm_pinctrl_priv {
+	const char *active_state;
+	const char *sleep_state;
+};
+
+struct snd_soc_jack_pin {
+	struct list_head list;
+	const char *pin;
+	int mask;
+	bool invert;
+};
+
+struct snd_soc_jack_zone {
+	unsigned int min_mv;
+	unsigned int max_mv;
+	unsigned int jack_type;
+	unsigned int debounce_time;
+	struct list_head list;
+};
+
+struct snd_soc_jack_gpio {
+	unsigned int gpio;
+	unsigned int idx;
+	struct device *gpiod_dev;
+	const char *name;
+	int report;
+	int invert;
+	int debounce_time;
+	bool wake;
+	struct snd_soc_jack *jack;
+	struct delayed_work work;
+	struct notifier_block pm_notifier;
+	struct gpio_desc *desc;
+	void *data;
+	int (*jack_status_check)(void *);
+};
+
+struct jack_gpio_tbl {
+	int count;
+	struct snd_soc_jack *jack;
+	struct snd_soc_jack_gpio *gpios;
+};
+
+enum snd_soc_dpcm_link_state {
+	SND_SOC_DPCM_LINK_STATE_NEW = 0,
+	SND_SOC_DPCM_LINK_STATE_FREE = 1,
+};
+
+struct snd_soc_dpcm {
+	struct snd_soc_pcm_runtime *be;
+	struct snd_soc_pcm_runtime *fe;
+	enum snd_soc_dpcm_link_state state;
+	struct list_head list_be;
+	struct list_head list_fe;
+	struct dentry *debugfs_state;
+};
+
+struct snd_dmaengine_pcm_config {
+	int (*prepare_slave_config)(struct snd_pcm_substream *, struct snd_pcm_hw_params *, struct dma_slave_config *);
+	struct dma_chan * (*compat_request_channel)(struct snd_soc_pcm_runtime *, struct snd_pcm_substream *);
+	int (*process)(struct snd_pcm_substream *, int, unsigned long, unsigned long);
+	dma_filter_fn compat_filter_fn;
+	struct device *dma_dev;
+	const char *chan_names[2];
+	const struct snd_pcm_hardware *pcm_hardware;
+	unsigned int prealloc_buffer_size;
+};
+
+struct soc_mreg_control {
+	long min;
+	long max;
+	unsigned int regbase;
+	unsigned int regcount;
+	unsigned int nbits;
+	unsigned int invert;
+};
+
+struct soc_bytes {
+	int base;
+	int num_regs;
+	u32 mask;
+};
+
+struct soc_bytes_ext {
+	int max;
+	struct snd_soc_dobj dobj;
+	int (*get)(struct snd_kcontrol *, unsigned int __attribute__((btf_type_tag("user"))) *, unsigned int);
+	int (*put)(struct snd_kcontrol *, const unsigned int __attribute__((btf_type_tag("user"))) *, unsigned int);
+};
+
+struct snd_soc_tplg_kcontrol_ops {
+	u32 id;
+	int (*get)(struct snd_kcontrol *, struct snd_ctl_elem_value *);
+	int (*put)(struct snd_kcontrol *, struct snd_ctl_elem_value *);
+	int (*info)(struct snd_kcontrol *, struct snd_ctl_elem_info *);
+};
+
+struct soc_tplg_map {
+	int uid;
+	int kid;
+};
+
+struct snd_soc_tplg_hdr {
+	__le32 magic;
+	__le32 abi;
+	__le32 version;
+	__le32 type;
+	__le32 size;
+	__le32 vendor_type;
+	__le32 payload_size;
+	__le32 index;
+	__le32 count;
+};
+
+struct snd_soc_tplg_io_ops {
+	__le32 get;
+	__le32 put;
+	__le32 info;
+};
+
+struct snd_soc_tplg_tlv_dbscale {
+	__le32 min;
+	__le32 step;
+	__le32 mute;
+};
+
+struct snd_soc_tplg_ctl_tlv {
+	__le32 size;
+	__le32 type;
+	union {
+		__le32 data[32];
+		struct snd_soc_tplg_tlv_dbscale scale;
+	};
+};
+
+struct snd_soc_tplg_ctl_hdr {
+	__le32 size;
+	__le32 type;
+	char name[44];
+	__le32 access;
+	struct snd_soc_tplg_io_ops ops;
+	struct snd_soc_tplg_ctl_tlv tlv;
+};
+
+struct snd_soc_tplg_channel {
+	__le32 size;
+	__le32 reg;
+	__le32 shift;
+	__le32 id;
+};
+
+struct snd_soc_tplg_vendor_uuid_elem {
+	__le32 token;
+	char uuid[16];
+};
+
+struct snd_soc_tplg_vendor_value_elem {
+	__le32 token;
+	__le32 value;
+};
+
+struct snd_soc_tplg_vendor_string_elem {
+	__le32 token;
+	char string[44];
+};
+
+struct snd_soc_tplg_vendor_array {
+	__le32 size;
+	__le32 type;
+	__le32 num_elems;
+	union {
+		struct {
+			struct {} __empty_uuid;
+			struct snd_soc_tplg_vendor_uuid_elem uuid[0];
+		};
+		struct {
+			struct {} __empty_value;
+			struct snd_soc_tplg_vendor_value_elem value[0];
+		};
+		struct {
+			struct {} __empty_string;
+			struct snd_soc_tplg_vendor_string_elem string[0];
+		};
+	};
+};
+
+struct snd_soc_tplg_private {
+	__le32 size;
+	union {
+		struct {
+			struct {} __empty_data;
+			char data[0];
+		};
+		struct {
+			struct {} __empty_array;
+			struct snd_soc_tplg_vendor_array array[0];
+		};
+	};
+};
+
+struct snd_soc_tplg_mixer_control {
+	struct snd_soc_tplg_ctl_hdr hdr;
+	__le32 size;
+	__le32 min;
+	__le32 max;
+	__le32 platform_max;
+	__le32 invert;
+	__le32 num_channels;
+	struct snd_soc_tplg_channel channel[8];
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_bytes_control {
+	struct snd_soc_tplg_ctl_hdr hdr;
+	__le32 size;
+	__le32 max;
+	__le32 mask;
+	__le32 base;
+	__le32 num_regs;
+	struct snd_soc_tplg_io_ops ext_ops;
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_enum_control {
+	struct snd_soc_tplg_ctl_hdr hdr;
+	__le32 size;
+	__le32 num_channels;
+	struct snd_soc_tplg_channel channel[8];
+	__le32 items;
+	__le32 mask;
+	__le32 count;
+	char texts[704];
+	__le32 values[176];
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_dapm_graph_elem {
+	char sink[44];
+	char control[44];
+	char source[44];
+};
+
+struct snd_soc_tplg_dapm_widget {
+	__le32 size;
+	__le32 id;
+	char name[44];
+	char sname[44];
+	__le32 reg;
+	__le32 shift;
+	__le32 mask;
+	__le32 subseq;
+	__le32 invert;
+	__le32 ignore_suspend;
+	__le16 event_flags;
+	__le16 event_type;
+	__le32 num_kcontrols;
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_stream {
+	__le32 size;
+	char name[44];
+	__le64 format;
+	__le32 rate;
+	__le32 period_bytes;
+	__le32 buffer_bytes;
+	__le32 channels;
+};
+
+struct snd_soc_tplg_stream_caps {
+	__le32 size;
+	char name[44];
+	__le64 formats;
+	__le32 rates;
+	__le32 rate_min;
+	__le32 rate_max;
+	__le32 channels_min;
+	__le32 channels_max;
+	__le32 periods_min;
+	__le32 periods_max;
+	__le32 period_size_min;
+	__le32 period_size_max;
+	__le32 buffer_size_min;
+	__le32 buffer_size_max;
+	__le32 sig_bits;
+};
+
+struct snd_soc_tplg_pcm {
+	__le32 size;
+	char pcm_name[44];
+	char dai_name[44];
+	__le32 pcm_id;
+	__le32 dai_id;
+	__le32 playback;
+	__le32 capture;
+	__le32 compress;
+	struct snd_soc_tplg_stream stream[8];
+	__le32 num_streams;
+	struct snd_soc_tplg_stream_caps caps[2];
+	__le32 flag_mask;
+	__le32 flags;
+	struct snd_soc_tplg_private priv;
+} __attribute__((packed));
+
+struct snd_soc_tplg_stream_caps_v4 {
+	__le32 size;
+	char name[44];
+	__le64 formats;
+	__le32 rates;
+	__le32 rate_min;
+	__le32 rate_max;
+	__le32 channels_min;
+	__le32 channels_max;
+	__le32 periods_min;
+	__le32 periods_max;
+	__le32 period_size_min;
+	__le32 period_size_max;
+	__le32 buffer_size_min;
+	__le32 buffer_size_max;
+} __attribute__((packed));
+
+struct snd_soc_tplg_pcm_v4 {
+	__le32 size;
+	char pcm_name[44];
+	char dai_name[44];
+	__le32 pcm_id;
+	__le32 dai_id;
+	__le32 playback;
+	__le32 capture;
+	__le32 compress;
+	struct snd_soc_tplg_stream stream[8];
+	__le32 num_streams;
+	struct snd_soc_tplg_stream_caps_v4 caps[2];
+} __attribute__((packed));
+
+struct snd_soc_tplg_dai {
+	__le32 size;
+	char dai_name[44];
+	__le32 dai_id;
+	__le32 playback;
+	__le32 capture;
+	struct snd_soc_tplg_stream_caps caps[2];
+	__le32 flag_mask;
+	__le32 flags;
+	struct snd_soc_tplg_private priv;
+} __attribute__((packed));
+
+struct snd_soc_tplg_hw_config {
+	__le32 size;
+	__le32 id;
+	__le32 fmt;
+	__u8 clock_gated;
+	__u8 invert_bclk;
+	__u8 invert_fsync;
+	__u8 bclk_provider;
+	__u8 fsync_provider;
+	__u8 mclk_direction;
+	__le16 reserved;
+	__le32 mclk_rate;
+	__le32 bclk_rate;
+	__le32 fsync_rate;
+	__le32 tdm_slots;
+	__le32 tdm_slot_width;
+	__le32 tx_slots;
+	__le32 rx_slots;
+	__le32 tx_channels;
+	__le32 tx_chanmap[8];
+	__le32 rx_channels;
+	__le32 rx_chanmap[8];
+};
+
+struct snd_soc_tplg_link_config {
+	__le32 size;
+	__le32 id;
+	char name[44];
+	char stream_name[44];
+	struct snd_soc_tplg_stream stream[8];
+	__le32 num_streams;
+	struct snd_soc_tplg_hw_config hw_config[8];
+	__le32 num_hw_configs;
+	__le32 default_hw_config_id;
+	__le32 flag_mask;
+	__le32 flags;
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_link_config_v4 {
+	__le32 size;
+	__le32 id;
+	struct snd_soc_tplg_stream stream[8];
+	__le32 num_streams;
+} __attribute__((packed));
+
+struct snd_soc_tplg_manifest {
+	__le32 size;
+	__le32 control_elems;
+	__le32 widget_elems;
+	__le32 graph_elems;
+	__le32 pcm_elems;
+	__le32 dai_link_elems;
+	__le32 dai_elems;
+	__le32 reserved[20];
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_manifest_v4 {
+	__le32 size;
+	__le32 control_elems;
+	__le32 widget_elems;
+	__le32 graph_elems;
+	__le32 pcm_elems;
+	__le32 dai_link_elems;
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_bytes_ext_ops;
+
+struct snd_soc_tplg_ops;
+
+struct soc_tplg {
+	const struct firmware *fw;
+	const u8 *pos;
+	const u8 *hdr_pos;
+	unsigned int pass;
+	struct device *dev;
+	struct snd_soc_component *comp;
+	u32 index;
+	const struct snd_soc_tplg_kcontrol_ops *io_ops;
+	int io_ops_count;
+	const struct snd_soc_tplg_bytes_ext_ops *bytes_ext_ops;
+	int bytes_ext_ops_count;
+	struct snd_soc_tplg_ops *ops;
+};
+
+struct snd_soc_tplg_bytes_ext_ops {
+	u32 id;
+	int (*get)(struct snd_kcontrol *, unsigned int __attribute__((btf_type_tag("user"))) *, unsigned int);
+	int (*put)(struct snd_kcontrol *, const unsigned int __attribute__((btf_type_tag("user"))) *, unsigned int);
+};
+
+struct snd_soc_tplg_ops {
+	int (*control_load)(struct snd_soc_component *, int, struct snd_kcontrol_new *, struct snd_soc_tplg_ctl_hdr *);
+	int (*control_unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	int (*dapm_route_load)(struct snd_soc_component *, int, struct snd_soc_dapm_route *);
+	int (*dapm_route_unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	int (*widget_load)(struct snd_soc_component *, int, struct snd_soc_dapm_widget *, struct snd_soc_tplg_dapm_widget *);
+	int (*widget_ready)(struct snd_soc_component *, int, struct snd_soc_dapm_widget *, struct snd_soc_tplg_dapm_widget *);
+	int (*widget_unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	int (*dai_load)(struct snd_soc_component *, int, struct snd_soc_dai_driver *, struct snd_soc_tplg_pcm *, struct snd_soc_dai *);
+	int (*dai_unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	int (*link_load)(struct snd_soc_component *, int, struct snd_soc_dai_link *, struct snd_soc_tplg_link_config *);
+	int (*link_unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	int (*vendor_load)(struct snd_soc_component *, int, struct snd_soc_tplg_hdr *);
+	int (*vendor_unload)(struct snd_soc_component *, struct snd_soc_tplg_hdr *);
+	int (*complete)(struct snd_soc_component *);
+	int (*manifest)(struct snd_soc_component *, int, struct snd_soc_tplg_manifest *);
+	const struct snd_soc_tplg_kcontrol_ops *io_ops;
+	int io_ops_count;
+	const struct snd_soc_tplg_bytes_ext_ops *bytes_ext_ops;
+	int bytes_ext_ops_count;
+};
+
+struct snd_soc_tplg_widget_events {
+	u16 type;
+	int (*event_handler)(struct snd_soc_dapm_widget *, struct snd_kcontrol *, int);
+};
+
+struct dmaengine_pcm {
+	struct dma_chan *chan[2];
+	const struct snd_dmaengine_pcm_config *config;
+	struct snd_soc_component component;
+	unsigned int flags;
+};
+
+struct net_device_devres {
+	struct net_device *ndev;
+};
+
+struct net_proto_family {
+	int family;
+	int (*create)(struct net *, struct socket *, int, int);
+	struct module *owner;
+};
+
+struct iw_request_info {
+	__u16 cmd;
+	__u16 flags;
+};
+
+struct iw_point {
+	void __attribute__((btf_type_tag("user"))) *pointer;
+	__u16 length;
+	__u16 flags;
+};
+
+struct iw_param {
+	__s32 value;
+	__u8 fixed;
+	__u8 disabled;
+	__u16 flags;
+};
+
+struct iw_freq {
+	__s32 m;
+	__s16 e;
+	__u8 i;
+	__u8 flags;
+};
+
+struct iw_quality {
+	__u8 qual;
+	__u8 level;
+	__u8 noise;
+	__u8 updated;
+};
+
+union iwreq_data {
+	char name[16];
+	struct iw_point essid;
+	struct iw_param nwid;
+	struct iw_freq freq;
+	struct iw_param sens;
+	struct iw_param bitrate;
+	struct iw_param txpower;
+	struct iw_param rts;
+	struct iw_param frag;
+	__u32 mode;
+	struct iw_param retry;
+	struct iw_point encoding;
+	struct iw_param power;
+	struct iw_quality qual;
+	struct sockaddr ap_addr;
+	struct sockaddr addr;
+	struct iw_param param;
+	struct iw_point data;
+};
+
+struct iw_priv_args {
+	__u32 cmd;
+	__u16 set_args;
+	__u16 get_args;
+	char name[16];
+};
+
+struct iw_discarded {
+	__u32 nwid;
+	__u32 code;
+	__u32 fragment;
+	__u32 retries;
+	__u32 misc;
+};
+
+struct iw_missed {
+	__u32 beacon;
+};
+
+struct iw_statistics {
+	__u16 status;
+	struct iw_quality qual;
+	struct iw_discarded discard;
+	struct iw_missed miss;
+};
+
+struct libipw_device;
+
+struct iw_spy_data;
+
+struct iw_public_data {
+	struct iw_spy_data *spy_data;
+	struct libipw_device *libipw;
+};
+
+typedef unsigned char u_char;
+
+struct iw_spy_data {
+	int spy_number;
+	u_char spy_address[48];
+	struct iw_quality spy_stat[8];
+	struct iw_quality spy_thr_low;
+	struct iw_quality spy_thr_high;
+	u_char spy_thr_under[8];
+};
+
+enum {
+	SOF_TIMESTAMPING_TX_HARDWARE = 1,
+	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
+	SOF_TIMESTAMPING_RX_HARDWARE = 4,
+	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
+	SOF_TIMESTAMPING_SOFTWARE = 16,
+	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
+	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
+	SOF_TIMESTAMPING_OPT_ID = 128,
+	SOF_TIMESTAMPING_TX_SCHED = 256,
+	SOF_TIMESTAMPING_TX_ACK = 512,
+	SOF_TIMESTAMPING_OPT_CMSG = 1024,
+	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
+	SOF_TIMESTAMPING_OPT_STATS = 4096,
+	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
+	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
+	SOF_TIMESTAMPING_BIND_PHC = 32768,
+	SOF_TIMESTAMPING_OPT_ID_TCP = 65536,
+	SOF_TIMESTAMPING_LAST = 65536,
+	SOF_TIMESTAMPING_MASK = 131071,
+};
+
+enum {
+	SOCK_WAKE_IO = 0,
+	SOCK_WAKE_WAITD = 1,
+	SOCK_WAKE_SPACE = 2,
+	SOCK_WAKE_URG = 3,
+};
+
+enum sock_shutdown_cmd {
+	SHUT_RD = 0,
+	SHUT_WR = 1,
+	SHUT_RDWR = 2,
+};
+
+struct sock_ee_data_rfc4884 {
+	__u16 len;
+	__u8 flags;
+	__u8 reserved;
+};
+
+struct sock_extended_err {
+	__u32 ee_errno;
+	__u8 ee_origin;
+	__u8 ee_type;
+	__u8 ee_code;
+	__u8 ee_pad;
+	__u32 ee_info;
+	union {
+		__u32 ee_data;
+		struct sock_ee_data_rfc4884 ee_rfc4884;
+	};
+};
+
+struct sock_exterr_skb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	struct sock_extended_err ee;
+	u16 addr_offset;
+	__be16 port;
+	u8 opt_stats: 1;
+	u8 unused: 7;
+};
+
+struct compat_mmsghdr {
+	struct compat_msghdr msg_hdr;
+	compat_uint_t msg_len;
+};
+
+struct compat_ifmap {
+	compat_ulong_t mem_start;
+	compat_ulong_t mem_end;
+	unsigned short base_addr;
+	unsigned char irq;
+	unsigned char dma;
+	unsigned char port;
+};
+
+struct compat_if_settings {
+	unsigned int type;
+	unsigned int size;
+	compat_uptr_t ifs_ifsu;
+};
+
+struct compat_ifreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union {
+		struct sockaddr ifru_addr;
+		struct sockaddr ifru_dstaddr;
+		struct sockaddr ifru_broadaddr;
+		struct sockaddr ifru_netmask;
+		struct sockaddr ifru_hwaddr;
+		short ifru_flags;
+		compat_int_t ifru_ivalue;
+		compat_int_t ifru_mtu;
+		struct compat_ifmap ifru_map;
+		char ifru_slave[16];
+		char ifru_newname[16];
+		compat_caddr_t ifru_data;
+		struct compat_if_settings ifru_settings;
+	} ifr_ifru;
+};
+
+struct sock_skb_cb {
+	u32 dropcount;
+};
+
+struct mmsghdr {
+	struct user_msghdr msg_hdr;
+	unsigned int msg_len;
+};
+
+typedef __kernel_long_t __kernel_old_time_t;
+
+struct __kernel_old_timespec {
+	__kernel_old_time_t tv_sec;
+	long tv_nsec;
+};
+
+struct __kernel_sock_timeval {
+	__s64 tv_sec;
+	__s64 tv_usec;
+};
+
+struct scm_ts_pktinfo {
+	__u32 if_index;
+	__u32 pkt_length;
+	__u32 reserved[2];
+};
+
+struct scm_timestamping_internal {
+	struct timespec64 ts[3];
+};
+
+struct ifconf {
+	int ifc_len;
+	union {
+		char __attribute__((btf_type_tag("user"))) *ifcu_buf;
+		struct ifreq __attribute__((btf_type_tag("user"))) *ifcu_req;
+	} ifc_ifcu;
+};
+
+struct used_address {
+	struct __kernel_sockaddr_storage name;
+	unsigned int name_len;
+};
+
+struct netdev_name_node {
+	struct hlist_node hlist;
+	struct list_head list;
+	struct net_device *dev;
+	const char *name;
+};
+
+enum {
+	INET_FLAGS_PKTINFO = 0,
+	INET_FLAGS_TTL = 1,
+	INET_FLAGS_TOS = 2,
+	INET_FLAGS_RECVOPTS = 3,
+	INET_FLAGS_RETOPTS = 4,
+	INET_FLAGS_PASSSEC = 5,
+	INET_FLAGS_ORIGDSTADDR = 6,
+	INET_FLAGS_CHECKSUM = 7,
+	INET_FLAGS_RECVFRAGSIZE = 8,
+	INET_FLAGS_RECVERR = 9,
+	INET_FLAGS_RECVERR_RFC4884 = 10,
+	INET_FLAGS_FREEBIND = 11,
+	INET_FLAGS_HDRINCL = 12,
+	INET_FLAGS_MC_LOOP = 13,
+	INET_FLAGS_MC_ALL = 14,
+	INET_FLAGS_TRANSPARENT = 15,
+	INET_FLAGS_IS_ICSK = 16,
+	INET_FLAGS_NODEFRAG = 17,
+	INET_FLAGS_BIND_ADDRESS_NO_PORT = 18,
+	INET_FLAGS_DEFER_CONNECT = 19,
+};
+
+enum sk_pacing {
+	SK_PACING_NONE = 0,
+	SK_PACING_NEEDED = 1,
+	SK_PACING_FQ = 2,
+};
+
+enum txtime_flags {
+	SOF_TXTIME_DEADLINE_MODE = 1,
+	SOF_TXTIME_REPORT_ERRORS = 2,
+	SOF_TXTIME_FLAGS_LAST = 2,
+	SOF_TXTIME_FLAGS_MASK = 3,
+};
+
+enum {
+	SK_MEMINFO_RMEM_ALLOC = 0,
+	SK_MEMINFO_RCVBUF = 1,
+	SK_MEMINFO_WMEM_ALLOC = 2,
+	SK_MEMINFO_SNDBUF = 3,
+	SK_MEMINFO_FWD_ALLOC = 4,
+	SK_MEMINFO_WMEM_QUEUED = 5,
+	SK_MEMINFO_OPTMEM = 6,
+	SK_MEMINFO_BACKLOG = 7,
+	SK_MEMINFO_DROPS = 8,
+	SK_MEMINFO_VARS = 9,
+};
+
+enum sknetlink_groups {
+	SKNLGRP_NONE = 0,
+	SKNLGRP_INET_TCP_DESTROY = 1,
+	SKNLGRP_INET_UDP_DESTROY = 2,
+	SKNLGRP_INET6_TCP_DESTROY = 3,
+	SKNLGRP_INET6_UDP_DESTROY = 4,
+	__SKNLGRP_MAX = 5,
+};
+
+enum {
+	XFRM_POLICY_IN = 0,
+	XFRM_POLICY_OUT = 1,
+	XFRM_POLICY_FWD = 2,
+	XFRM_POLICY_MASK = 3,
+	XFRM_POLICY_MAX = 3,
+};
+
+struct fastopen_queue {
+	struct request_sock *rskq_rst_head;
+	struct request_sock *rskq_rst_tail;
+	spinlock_t lock;
+	int qlen;
+	int max_qlen;
+	struct tcp_fastopen_context __attribute__((btf_type_tag("rcu"))) *ctx;
+};
+
+struct request_sock_queue {
+	spinlock_t rskq_lock;
+	u8 rskq_defer_accept;
+	u32 synflood_warned;
+	atomic_t qlen;
+	atomic_t young;
+	struct request_sock *rskq_accept_head;
+	struct request_sock *rskq_accept_tail;
+	struct fastopen_queue fastopenq;
+};
+
+struct inet_bind_bucket;
+
+struct inet_bind2_bucket;
+
+struct inet_connection_sock_af_ops;
+
+struct tcp_ulp_ops;
+
+struct inet_connection_sock {
+	struct inet_sock icsk_inet;
+	struct request_sock_queue icsk_accept_queue;
+	struct inet_bind_bucket *icsk_bind_hash;
+	struct inet_bind2_bucket *icsk_bind2_hash;
+	unsigned long icsk_timeout;
+	struct timer_list icsk_retransmit_timer;
+	struct timer_list icsk_delack_timer;
+	__u32 icsk_rto;
+	__u32 icsk_rto_min;
+	__u32 icsk_delack_max;
+	__u32 icsk_pmtu_cookie;
+	const struct tcp_congestion_ops *icsk_ca_ops;
+	const struct inet_connection_sock_af_ops *icsk_af_ops;
+	const struct tcp_ulp_ops *icsk_ulp_ops;
+	void __attribute__((btf_type_tag("rcu"))) *icsk_ulp_data;
+	void (*icsk_clean_acked)(struct sock *, u32);
+	unsigned int (*icsk_sync_mss)(struct sock *, u32);
+	__u8 icsk_ca_state: 5;
+	__u8 icsk_ca_initialized: 1;
+	__u8 icsk_ca_setsockopt: 1;
+	__u8 icsk_ca_dst_locked: 1;
+	__u8 icsk_retransmits;
+	__u8 icsk_pending;
+	__u8 icsk_backoff;
+	__u8 icsk_syn_retries;
+	__u8 icsk_probes_out;
+	__u16 icsk_ext_hdr_len;
+	struct {
+		__u8 pending;
+		__u8 quick;
+		__u8 pingpong;
+		__u8 retry;
+		__u32 ato;
+		unsigned long timeout;
+		__u32 lrcvtime;
+		__u16 last_seg_size;
+		__u16 rcv_mss;
+	} icsk_ack;
+	struct {
+		int search_high;
+		int search_low;
+		u32 probe_size: 31;
+		u32 enabled: 1;
+		u32 probe_timestamp;
+	} icsk_mtup;
+	u32 icsk_probes_tstamp;
+	u32 icsk_user_timeout;
+	u64 android_kabi_reserved1;
+	u64 icsk_ca_priv[13];
+};
+
+struct tcp_rack {
+	u64 mstamp;
+	u32 rtt_us;
+	u32 end_seq;
+	u32 last_delivered;
+	u8 reo_wnd_steps;
+	u8 reo_wnd_persist: 5;
+	u8 dsack_seen: 1;
+	u8 advanced: 1;
+};
+
+struct minmax_sample {
+	u32 t;
+	u32 v;
+};
+
+struct minmax {
+	struct minmax_sample s[3];
+};
+
+struct tcp_options_received {
+	int ts_recent_stamp;
+	u32 ts_recent;
+	u32 rcv_tsval;
+	u32 rcv_tsecr;
+	u16 saw_tstamp: 1;
+	u16 tstamp_ok: 1;
+	u16 dsack: 1;
+	u16 wscale_ok: 1;
+	u16 sack_ok: 3;
+	u16 smc_ok: 1;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u8 saw_unknown: 1;
+	u8 unused: 7;
+	u8 num_sacks;
+	u16 user_mss;
+	u16 mss_clamp;
+};
+
+struct tcp_sack_block {
+	u32 start_seq;
+	u32 end_seq;
+};
+
+struct tcp_fastopen_request;
+
+struct tcp_sock {
+	struct inet_connection_sock inet_conn;
+	u16 tcp_header_len;
+	u16 gso_segs;
+	__be32 pred_flags;
+	u64 bytes_received;
+	u32 segs_in;
+	u32 data_segs_in;
+	u32 rcv_nxt;
+	u32 copied_seq;
+	u32 rcv_wup;
+	u32 snd_nxt;
+	u32 segs_out;
+	u32 data_segs_out;
+	u64 bytes_sent;
+	u64 bytes_acked;
+	u32 dsack_dups;
+	u32 snd_una;
+	u32 snd_sml;
+	u32 rcv_tstamp;
+	u32 lsndtime;
+	u32 last_oow_ack_time;
+	u32 compressed_ack_rcv_nxt;
+	u32 tsoffset;
+	struct list_head tsq_node;
+	struct list_head tsorted_sent_queue;
+	u32 snd_wl1;
+	u32 snd_wnd;
+	u32 max_window;
+	u32 mss_cache;
+	u32 window_clamp;
+	u32 rcv_ssthresh;
+	u8 scaling_ratio;
+	struct tcp_rack rack;
+	u16 advmss;
+	u8 compressed_ack;
+	u8 dup_ack_counter: 2;
+	u8 tlp_retrans: 1;
+	u8 unused: 5;
+	u32 chrono_start;
+	u32 chrono_stat[3];
+	u8 chrono_type: 2;
+	u8 rate_app_limited: 1;
+	u8 fastopen_connect: 1;
+	u8 fastopen_no_cookie: 1;
+	u8 is_sack_reneg: 1;
+	u8 fastopen_client_fail: 2;
+	u8 nonagle: 4;
+	u8 thin_lto: 1;
+	u8 recvmsg_inq: 1;
+	u8 repair: 1;
+	u8 frto: 1;
+	u8 repair_queue;
+	u8 save_syn: 2;
+	u8 syn_data: 1;
+	u8 syn_fastopen: 1;
+	u8 syn_fastopen_exp: 1;
+	u8 syn_fastopen_ch: 1;
+	u8 syn_data_acked: 1;
+	u8 is_cwnd_limited: 1;
+	u32 tlp_high_seq;
+	u32 tcp_tx_delay;
+	u64 tcp_wstamp_ns;
+	u64 tcp_clock_cache;
+	u64 tcp_mstamp;
+	u32 srtt_us;
+	u32 mdev_us;
+	u32 mdev_max_us;
+	u32 rttvar_us;
+	u32 rtt_seq;
+	struct minmax rtt_min;
+	u32 packets_out;
+	u32 retrans_out;
+	u32 max_packets_out;
+	u32 cwnd_usage_seq;
+	u16 urg_data;
+	u8 ecn_flags;
+	u8 keepalive_probes;
+	u32 reordering;
+	u32 reord_seen;
+	u32 snd_up;
+	struct tcp_options_received rx_opt;
+	u32 snd_ssthresh;
+	u32 snd_cwnd;
+	u32 snd_cwnd_cnt;
+	u32 snd_cwnd_clamp;
+	u32 snd_cwnd_used;
+	u32 snd_cwnd_stamp;
+	u32 prior_cwnd;
+	u32 prr_delivered;
+	u32 prr_out;
+	u32 delivered;
+	u32 delivered_ce;
+	u32 lost;
+	u32 app_limited;
+	u64 first_tx_mstamp;
+	u64 delivered_mstamp;
+	u32 rate_delivered;
+	u32 rate_interval_us;
+	u32 rcv_wnd;
+	u32 write_seq;
+	u32 notsent_lowat;
+	u32 pushed_seq;
+	u32 lost_out;
+	u32 sacked_out;
+	struct hrtimer pacing_timer;
+	struct hrtimer compressed_ack_timer;
+	struct sk_buff *lost_skb_hint;
+	struct sk_buff *retransmit_skb_hint;
+	struct rb_root out_of_order_queue;
+	struct sk_buff *ooo_last_skb;
+	struct tcp_sack_block duplicate_sack[1];
+	struct tcp_sack_block selective_acks[4];
+	struct tcp_sack_block recv_sack_cache[4];
+	struct sk_buff *highest_sack;
+	int lost_cnt_hint;
+	u32 prior_ssthresh;
+	u32 high_seq;
+	u32 retrans_stamp;
+	u32 undo_marker;
+	int undo_retrans;
+	u64 bytes_retrans;
+	u32 total_retrans;
+	u32 urg_seq;
+	unsigned int keepalive_time;
+	unsigned int keepalive_intvl;
+	int linger2;
+	u8 bpf_sock_ops_cb_flags;
+	u8 bpf_chg_cc_inprogress: 1;
+	u16 timeout_rehash;
+	u32 rcv_ooopack;
+	u32 rcv_rtt_last_tsecr;
+	struct {
+		u32 rtt_us;
+		u32 seq;
+		u64 time;
+	} rcv_rtt_est;
+	struct {
+		u32 space;
+		u32 seq;
+		u64 time;
+	} rcvq_space;
+	struct {
+		u32 probe_seq_start;
+		u32 probe_seq_end;
+	} mtu_probe;
+	u32 plb_rehash;
+	u32 mtu_info;
+	struct tcp_fastopen_request *fastopen_req;
+	struct request_sock __attribute__((btf_type_tag("rcu"))) *fastopen_rsk;
+	struct saved_syn *saved_syn;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+};
+
+struct inet_bind_bucket {
+	possible_net_t ib_net;
+	int l3mdev;
+	unsigned short port;
+	signed char fastreuse;
+	signed char fastreuseport;
+	kuid_t fastuid;
+	struct in6_addr fast_v6_rcv_saddr;
+	__be32 fast_rcv_saddr;
+	unsigned short fast_sk_family;
+	bool fast_ipv6_only;
+	struct hlist_node node;
+	struct hlist_head owners;
+};
+
+struct inet_bind2_bucket {
+	possible_net_t ib_net;
+	int l3mdev;
+	unsigned short port;
+	unsigned short family;
+	union {
+		struct in6_addr v6_rcv_saddr;
+		__be32 rcv_saddr;
+	};
+	struct hlist_node node;
+	struct hlist_head owners;
+	struct hlist_head deathrow;
+};
+
+struct inet_connection_sock_af_ops {
+	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
+	void (*send_check)(struct sock *, struct sk_buff *);
+	int (*rebuild_header)(struct sock *);
+	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
+	int (*conn_request)(struct sock *, struct sk_buff *);
+	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
+	u16 net_header_len;
+	u16 net_frag_header_len;
+	u16 sockaddr_len;
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char __attribute__((btf_type_tag("user"))) *, int __attribute__((btf_type_tag("user"))) *);
+	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
+	void (*mtu_reduced)(struct sock *);
+	u64 android_kabi_reserved1;
+};
+
+struct tcp_ulp_ops {
+	struct list_head list;
+	int (*init)(struct sock *);
+	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
+	void (*release)(struct sock *);
+	int (*get_info)(struct sock *, struct sk_buff *);
+	size_t (*get_info_size)(const struct sock *);
+	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
+	char name[16];
+	struct module *owner;
+};
+
+struct tcp_fastopen_cookie {
+	__le64 val[2];
+	s8 len;
+	bool exp;
+};
+
+struct tcp_fastopen_request {
+	struct tcp_fastopen_cookie cookie;
+	struct msghdr *data;
+	size_t size;
+	int copied;
+	struct ubuf_info *uarg;
+};
+
+struct cmsghdr {
+	__kernel_size_t cmsg_len;
+	int cmsg_level;
+	int cmsg_type;
+};
+
+struct net_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, u32);
+	unsigned int no_policy: 1;
+	unsigned int icmp_strict_tag_validation: 1;
+};
+
+struct udp_sock {
+	struct inet_sock inet;
+	unsigned long udp_flags;
+	int pending;
+	__u8 encap_type;
+	__u16 len;
+	__u16 gso_size;
+	__u16 pcslen;
+	__u16 pcrlen;
+	int (*encap_rcv)(struct sock *, struct sk_buff *);
+	void (*encap_err_rcv)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
+	void (*encap_destroy)(struct sock *);
+	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sock *, struct sk_buff *, int);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head reader_queue;
+	int forward_deficit;
+	int forward_threshold;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef void (*android_dst_ops_negative_advice_new_t)(struct sock *, struct dst_entry *);
+
+struct ucred {
+	__u32 pid;
+	__u32 uid;
+	__u32 gid;
+};
+
+struct linger {
+	int l_onoff;
+	int l_linger;
+};
+
+struct sock_txtime {
+	__kernel_clockid_t clockid;
+	__u32 flags;
+};
+
+struct so_timestamping {
+	int flags;
+	int bind_phc;
+};
+
+typedef unsigned short mifi_t;
+
+struct sioc_mif_req6 {
+	mifi_t mifi;
+	unsigned long icount;
+	unsigned long ocount;
+	unsigned long ibytes;
+	unsigned long obytes;
+};
+
+struct sioc_sg_req6 {
+	struct sockaddr_in6 src;
+	struct sockaddr_in6 grp;
+	unsigned long pktcnt;
+	unsigned long bytecnt;
+	unsigned long wrong_if;
+};
+
+struct sockcm_cookie {
+	u64 transmit_time;
+	u32 mark;
+	u32 tsflags;
+};
+
+struct inet_request_sock {
+	struct request_sock req;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u16 tstamp_ok: 1;
+	u16 sack_ok: 1;
+	u16 wscale_ok: 1;
+	u16 ecn_ok: 1;
+	u16 acked: 1;
+	u16 no_srccheck: 1;
+	u16 smc_ok: 1;
+	u32 ir_mark;
+	union {
+		struct ip_options_rcu __attribute__((btf_type_tag("rcu"))) *ireq_opt;
+		struct {
+			struct ipv6_txoptions *ipv6_opt;
+			struct sk_buff *pktopts;
+		};
+	};
+};
+
+struct tcp_request_sock_ops;
+
+struct tcp_request_sock {
+	struct inet_request_sock req;
+	const struct tcp_request_sock_ops *af_specific;
+	u64 snt_synack;
+	bool tfo_listener;
+	bool is_mptcp;
+	u32 txhash;
+	u32 rcv_isn;
+	u32 snt_isn;
+	u32 ts_off;
+	u32 last_oow_ack_time;
+	u32 rcv_nxt;
+	u8 syn_tos;
+};
+
+enum tcp_synack_type {
+	TCP_SYNACK_NORMAL = 0,
+	TCP_SYNACK_FASTOPEN = 1,
+	TCP_SYNACK_COOKIE = 2,
+};
+
+struct tcp_request_sock_ops {
+	u16 mss_clamp;
+	struct dst_entry * (*route_req)(const struct sock *, struct sk_buff *, struct flowi *, struct request_sock *);
+	u32 (*init_seq)(const struct sk_buff *);
+	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
+	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);
+};
+
+struct drop_reason_list {
+	const char * const *reasons;
+	size_t n_reasons;
+};
+
+struct skb_checksum_ops {
+	__wsum (*update)(const void *, int, __wsum);
+	__wsum (*combine)(__wsum, __wsum, int, int);
+};
+
+struct page_frag_1k {
+	void *va;
+	u16 offset;
+	bool pfmemalloc;
+};
+
+struct napi_alloc_cache {
+	struct page_frag_cache page;
+	struct page_frag_1k page_small;
+	unsigned int skb_count;
+	void *skb_cache[64];
+};
+
+enum skb_drop_reason_subsys {
+	SKB_DROP_REASON_SUBSYS_CORE = 0,
+	SKB_DROP_REASON_SUBSYS_MAC80211_UNUSABLE = 1,
+	SKB_DROP_REASON_SUBSYS_MAC80211_MONITOR = 2,
+	SKB_DROP_REASON_SUBSYS_OPENVSWITCH = 3,
+	SKB_DROP_REASON_SUBSYS_NUM = 4,
+};
+
+enum {
+	SKB_FCLONE_UNAVAILABLE = 0,
+	SKB_FCLONE_ORIG = 1,
+	SKB_FCLONE_CLONE = 2,
+};
+
+enum {
+	SCM_TSTAMP_SND = 0,
+	SCM_TSTAMP_SCHED = 1,
+	SCM_TSTAMP_ACK = 2,
+};
+
+enum skb_ext_id {
+	SKB_EXT_SEC_PATH = 0,
+	SKB_EXT_NUM = 1,
+};
+
+struct sk_buff_fclones {
+	struct sk_buff skb1;
+	struct sk_buff skb2;
+	refcount_t fclone_ref;
+};
+
+struct mmpin {
+	struct user_struct *user;
+	unsigned int num_pg;
+};
+
+struct ubuf_info_msgzc {
+	struct ubuf_info ubuf;
+	union {
+		struct {
+			unsigned long desc;
+			void *ctx;
+		};
+		struct {
+			u32 id;
+			u16 len;
+			u16 zerocopy: 1;
+			u32 bytelen;
+		};
+	};
+	struct mmpin mmp;
+};
+
+struct skb_seq_state {
+	__u32 lower_offset;
+	__u32 upper_offset;
+	__u32 frag_idx;
+	__u32 stepped_offset;
+	struct sk_buff *root_skb;
+	struct sk_buff *cur_skb;
+	__u8 *frag_data;
+	__u32 frag_off;
+};
+
+struct skb_gso_cb {
+	union {
+		int mac_offset;
+		int data_offset;
+	};
+	int encap_level;
+	__wsum csum;
+	__u16 csum_start;
+};
+
+struct sd_flow_limit;
+
+struct softnet_data {
+	struct list_head poll_list;
+	struct sk_buff_head process_queue;
+	unsigned int processed;
+	unsigned int time_squeeze;
+	struct softnet_data *rps_ipi_list;
+	bool in_net_rx_action;
+	bool in_napi_threaded_poll;
+	struct sd_flow_limit __attribute__((btf_type_tag("rcu"))) *flow_limit;
+	struct Qdisc *output_queue;
+	struct Qdisc **output_queue_tailp;
+	struct sk_buff *completion_queue;
+	struct {
+		u16 recursion;
+		u8 more;
+		u8 skip_txqueue;
+	} xmit;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int input_queue_head;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t csd;
+	struct softnet_data *rps_ipi_next;
+	unsigned int cpu;
+	unsigned int input_queue_tail;
+	unsigned int received_rps;
+	unsigned int dropped;
+	struct sk_buff_head input_pkt_queue;
+	struct napi_struct backlog;
+	spinlock_t defer_lock;
+	int defer_count;
+	int defer_ipi_scheduled;
+	struct sk_buff *defer_list;
+	long: 64;
+	call_single_data_t defer_csd;
+};
+
+struct sd_flow_limit {
+	u64 count;
+	unsigned int num_buckets;
+	unsigned int history_head;
+	u16 history[128];
+	u8 buckets[0];
+};
+
+struct ip_auth_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__be16 reserved;
+	__be32 spi;
+	__be32 seq_no;
+	__u8 auth_data[0];
+};
+
+struct frag_hdr {
+	__u8 nexthdr;
+	__u8 reserved;
+	__be16 frag_off;
+	__be32 identification;
+};
+
+struct vlan_ethhdr {
+	union {
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		};
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		} addrs;
+	};
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+struct mpls_shim_hdr {
+	__be32 label_stack_entry;
+};
+
+struct skb_free_array {
+	unsigned int skb_count;
+	void *skb_array[16];
+};
+
+struct xfrm_offload {
+	struct {
+		__u32 low;
+		__u32 hi;
+	} seq;
+	__u32 flags;
+	__u32 status;
+	__u8 proto;
+	__u8 inner_ipproto;
+};
+
+struct sec_path {
+	int len;
+	int olen;
+	int verified_cnt;
+	struct xfrm_state *xvec[6];
+	struct xfrm_offload ovec[1];
+};
+
+typedef int (*sendmsg_func)(struct sock *, struct msghdr *);
+
+struct scm_fp_list {
+	short count;
+	short max;
+	struct user_struct *user;
+	struct file *fp[253];
+};
+
+struct scm_cookie {
+	struct pid *pid;
+	struct scm_fp_list *fp;
+	struct scm_creds creds;
+	u32 secid;
+};
+
+struct scm_timestamping64 {
+	struct __kernel_timespec ts[3];
+};
+
+struct scm_timestamping {
+	struct __kernel_old_timespec ts[3];
+};
+
+enum {
+	TCA_STATS_UNSPEC = 0,
+	TCA_STATS_BASIC = 1,
+	TCA_STATS_RATE_EST = 2,
+	TCA_STATS_QUEUE = 3,
+	TCA_STATS_APP = 4,
+	TCA_STATS_RATE_EST64 = 5,
+	TCA_STATS_PAD = 6,
+	TCA_STATS_BASIC_HW = 7,
+	TCA_STATS_PKT64 = 8,
+	__TCA_STATS_MAX = 9,
+};
+
+struct gnet_stats_rate_est64 {
+	__u64 bps;
+	__u64 pps;
+};
+
+struct gnet_stats_basic {
+	__u64 bytes;
+	__u32 packets;
+};
+
+struct gnet_stats_rate_est {
+	__u32 bps;
+	__u32 pps;
+};
+
+struct gnet_estimator {
+	signed char interval;
+	unsigned char ewma_log;
+};
+
+struct pcpu_gen_cookie;
+
+struct gen_cookie {
+	struct pcpu_gen_cookie __attribute__((btf_type_tag("percpu"))) *local;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic64_t forward_last;
+	atomic64_t reverse_last;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct pcpu_gen_cookie {
+	local_t nesting;
+	u64 last;
+};
+
+enum rtnl_link_flags {
+	RTNL_FLAG_DOIT_UNLOCKED = 1,
+	RTNL_FLAG_BULK_DEL_SUPPORTED = 2,
+};
+
+enum rtnetlink_groups {
+	RTNLGRP_NONE = 0,
+	RTNLGRP_LINK = 1,
+	RTNLGRP_NOTIFY = 2,
+	RTNLGRP_NEIGH = 3,
+	RTNLGRP_TC = 4,
+	RTNLGRP_IPV4_IFADDR = 5,
+	RTNLGRP_IPV4_MROUTE = 6,
+	RTNLGRP_IPV4_ROUTE = 7,
+	RTNLGRP_IPV4_RULE = 8,
+	RTNLGRP_IPV6_IFADDR = 9,
+	RTNLGRP_IPV6_MROUTE = 10,
+	RTNLGRP_IPV6_ROUTE = 11,
+	RTNLGRP_IPV6_IFINFO = 12,
+	RTNLGRP_DECnet_IFADDR = 13,
+	RTNLGRP_NOP2 = 14,
+	RTNLGRP_DECnet_ROUTE = 15,
+	RTNLGRP_DECnet_RULE = 16,
+	RTNLGRP_NOP4 = 17,
+	RTNLGRP_IPV6_PREFIX = 18,
+	RTNLGRP_IPV6_RULE = 19,
+	RTNLGRP_ND_USEROPT = 20,
+	RTNLGRP_PHONET_IFADDR = 21,
+	RTNLGRP_PHONET_ROUTE = 22,
+	RTNLGRP_DCB = 23,
+	RTNLGRP_IPV4_NETCONF = 24,
+	RTNLGRP_IPV6_NETCONF = 25,
+	RTNLGRP_MDB = 26,
+	RTNLGRP_MPLS_ROUTE = 27,
+	RTNLGRP_NSID = 28,
+	RTNLGRP_MPLS_NETCONF = 29,
+	RTNLGRP_IPV4_MROUTE_R = 30,
+	RTNLGRP_IPV6_MROUTE_R = 31,
+	RTNLGRP_NEXTHOP = 32,
+	RTNLGRP_BRVLAN = 33,
+	RTNLGRP_MCTP_IFADDR = 34,
+	RTNLGRP_TUNNEL = 35,
+	RTNLGRP_STATS = 36,
+	__RTNLGRP_MAX = 37,
+};
+
+enum {
+	NETNSA_NONE = 0,
+	NETNSA_NSID = 1,
+	NETNSA_PID = 2,
+	NETNSA_FD = 3,
+	NETNSA_TARGET_NSID = 4,
+	NETNSA_CURRENT_NSID = 5,
+	__NETNSA_MAX = 6,
+};
+
+struct net_fill_args {
+	u32 portid;
+	u32 seq;
+	int flags;
+	int cmd;
+	int nsid;
+	bool add_ref;
+	int ref_nsid;
+};
+
+struct rtnl_net_dump_cb {
+	struct net *tgt_net;
+	struct net *ref_net;
+	struct sk_buff *skb;
+	struct net_fill_args fillargs;
+	int idx;
+	int s_idx;
+};
+
+typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);
+
+typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
+
+struct rtgenmsg {
+	unsigned char rtgen_family;
+};
+
+struct pppoe_tag {
+	__be16 tag_type;
+	__be16 tag_len;
+	char tag_data[0];
+};
+
+struct pppoe_hdr {
+	__u8 type: 4;
+	__u8 ver: 4;
+	__u8 code;
+	__be16 sid;
+	__be16 length;
+	struct pppoe_tag tag[0];
+};
+
+enum flow_dissector_key_id {
+	FLOW_DISSECTOR_KEY_CONTROL = 0,
+	FLOW_DISSECTOR_KEY_BASIC = 1,
+	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
+	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
+	FLOW_DISSECTOR_KEY_PORTS = 4,
+	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
+	FLOW_DISSECTOR_KEY_ICMP = 6,
+	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
+	FLOW_DISSECTOR_KEY_TIPC = 8,
+	FLOW_DISSECTOR_KEY_ARP = 9,
+	FLOW_DISSECTOR_KEY_VLAN = 10,
+	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
+	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
+	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
+	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
+	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
+	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
+	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
+	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
+	FLOW_DISSECTOR_KEY_MPLS = 19,
+	FLOW_DISSECTOR_KEY_TCP = 20,
+	FLOW_DISSECTOR_KEY_IP = 21,
+	FLOW_DISSECTOR_KEY_CVLAN = 22,
+	FLOW_DISSECTOR_KEY_ENC_IP = 23,
+	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
+	FLOW_DISSECTOR_KEY_META = 25,
+	FLOW_DISSECTOR_KEY_CT = 26,
+	FLOW_DISSECTOR_KEY_HASH = 27,
+	FLOW_DISSECTOR_KEY_NUM_OF_VLANS = 28,
+	FLOW_DISSECTOR_KEY_PPPOE = 29,
+	FLOW_DISSECTOR_KEY_L2TPV3 = 30,
+	FLOW_DISSECTOR_KEY_CFM = 31,
+	FLOW_DISSECTOR_KEY_IPSEC = 32,
+	FLOW_DISSECTOR_KEY_MAX = 33,
+};
+
+struct flow_dissector_key {
+	enum flow_dissector_key_id key_id;
+	size_t offset;
+};
+
+struct nf_conn;
+
+struct nf_ct_event {
+	struct nf_conn *ct;
+	u32 portid;
+	int report;
+};
+
+union nf_inet_addr {
+	__u32 all[4];
+	__be32 ip;
+	__be32 ip6[4];
+	struct in_addr in;
+	struct in6_addr in6;
+};
+
+union nf_conntrack_man_proto {
+	__be16 all;
+	struct {
+		__be16 port;
+	} tcp;
+	struct {
+		__be16 port;
+	} udp;
+	struct {
+		__be16 id;
+	} icmp;
+	struct {
+		__be16 port;
+	} dccp;
+	struct {
+		__be16 port;
+	} sctp;
+	struct {
+		__be16 key;
+	} gre;
+};
+
+typedef u16 u_int16_t;
+
+struct nf_conntrack_man {
+	union nf_inet_addr u3;
+	union nf_conntrack_man_proto u;
+	u_int16_t l3num;
+};
+
+struct nf_conntrack_tuple {
+	struct nf_conntrack_man src;
+	struct {
+		union nf_inet_addr u3;
+		union {
+			__be16 all;
+			struct {
+				__be16 port;
+			} tcp;
+			struct {
+				__be16 port;
+			} udp;
+			struct {
+				u_int8_t type;
+				u_int8_t code;
+			} icmp;
+			struct {
+				__be16 port;
+			} dccp;
+			struct {
+				__be16 port;
+			} sctp;
+			struct {
+				__be16 key;
+			} gre;
+		} u;
+		u_int8_t protonum;
+		struct {} __nfct_hash_offsetend;
+		u_int8_t dir;
+	} dst;
+};
+
+struct nf_conntrack_tuple_hash {
+	struct hlist_nulls_node hnnode;
+	struct nf_conntrack_tuple tuple;
+};
+
+struct nf_ct_dccp {
+	u_int8_t role[2];
+	u_int8_t state;
+	u_int8_t last_pkt;
+	u_int8_t last_dir;
+	u_int64_t handshake_seq;
+};
+
+enum sctp_conntrack {
+	SCTP_CONNTRACK_NONE = 0,
+	SCTP_CONNTRACK_CLOSED = 1,
+	SCTP_CONNTRACK_COOKIE_WAIT = 2,
+	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
+	SCTP_CONNTRACK_ESTABLISHED = 4,
+	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
+	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
+	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
+	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
+	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
+	SCTP_CONNTRACK_MAX = 10,
+};
+
+struct ip_ct_sctp {
+	enum sctp_conntrack state;
+	__be32 vtag[2];
+	u8 init[2];
+	u8 last_dir;
+	u8 flags;
+};
+
+struct ip_ct_tcp_state {
+	u_int32_t td_end;
+	u_int32_t td_maxend;
+	u_int32_t td_maxwin;
+	u_int32_t td_maxack;
+	u_int8_t td_scale;
+	u_int8_t flags;
+};
+
+struct ip_ct_tcp {
+	struct ip_ct_tcp_state seen[2];
+	u_int8_t state;
+	u_int8_t last_dir;
+	u_int8_t retrans;
+	u_int8_t last_index;
+	u_int32_t last_seq;
+	u_int32_t last_ack;
+	u_int32_t last_end;
+	u_int16_t last_win;
+	u_int8_t last_wscale;
+	u_int8_t last_flags;
+};
+
+struct nf_ct_udp {
+	unsigned long stream_ts;
+};
+
+struct nf_ct_gre {
+	unsigned int stream_timeout;
+	unsigned int timeout;
+};
+
+union nf_conntrack_proto {
+	struct nf_ct_dccp dccp;
+	struct ip_ct_sctp sctp;
+	struct ip_ct_tcp tcp;
+	struct nf_ct_udp udp;
+	struct nf_ct_gre gre;
+	unsigned int tmpl_padto;
+};
+
+struct nf_ct_ext;
+
+struct nf_conn {
+	struct nf_conntrack ct_general;
+	spinlock_t lock;
+	u32 timeout;
+	struct nf_conntrack_tuple_hash tuplehash[2];
+	unsigned long status;
+	possible_net_t ct_net;
+	struct hlist_node nat_bysource;
+	struct {} __nfct_init_offset;
+	struct nf_conn *master;
+	u_int32_t mark;
+	u_int32_t secmark;
+	struct nf_ct_ext *ext;
+	union nf_conntrack_proto proto;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_oem_data1;
+};
+
+struct nf_ct_ext {
+	u8 offset[5];
+	u8 len;
+	unsigned int gen_id;
+	long: 0;
+	char data[0];
+};
+
+struct nf_conntrack_expect;
+
+struct nf_exp_event {
+	struct nf_conntrack_expect *exp;
+	u32 portid;
+	int report;
+};
+
+struct nf_conntrack_tuple_mask {
+	struct {
+		union nf_inet_addr u3;
+		union nf_conntrack_man_proto u;
+	} src;
+};
+
+enum ip_conntrack_dir {
+	IP_CT_DIR_ORIGINAL = 0,
+	IP_CT_DIR_REPLY = 1,
+	IP_CT_DIR_MAX = 2,
+};
+
+struct nf_conntrack_helper;
+
+struct nf_conntrack_expect {
+	struct hlist_node lnode;
+	struct hlist_node hnode;
+	struct nf_conntrack_tuple tuple;
+	struct nf_conntrack_tuple_mask mask;
+	refcount_t use;
+	unsigned int flags;
+	unsigned int class;
+	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
+	struct nf_conntrack_helper *helper;
+	struct nf_conn *master;
+	struct timer_list timeout;
+	union nf_inet_addr saved_addr;
+	union nf_conntrack_man_proto saved_proto;
+	enum ip_conntrack_dir dir;
+	struct callback_head rcu;
+};
+
+struct tcf_walker {
+	int stop;
+	int skip;
+	int count;
+	bool nonempty;
+	unsigned long cookie;
+	int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
+};
+
+struct tc_action;
+
+struct tcf_exts_miss_cookie_node;
+
+struct tcf_exts {
+	__u32 type;
+	int nr_actions;
+	struct tc_action **actions;
+	struct net *net;
+	netns_tracker ns_tracker;
+	struct tcf_exts_miss_cookie_node *miss_cookie_node;
+	int action;
+	int police;
+};
+
+struct tcf_t {
+	__u64 install;
+	__u64 lastuse;
+	__u64 expires;
+	__u64 firstuse;
+};
+
+struct tc_action_ops;
+
+struct tcf_idrinfo;
+
+struct tc_cookie;
+
+struct tc_action {
+	const struct tc_action_ops *ops;
+	__u32 type;
+	struct tcf_idrinfo *idrinfo;
+	u32 tcfa_index;
+	refcount_t tcfa_refcnt;
+	atomic_t tcfa_bindcnt;
+	int tcfa_action;
+	struct tcf_t tcfa_tm;
+	long: 64;
+	struct gnet_stats_basic_sync tcfa_bstats;
+	struct gnet_stats_basic_sync tcfa_bstats_hw;
+	struct gnet_stats_queue tcfa_qstats;
+	struct net_rate_estimator __attribute__((btf_type_tag("rcu"))) *tcfa_rate_est;
+	spinlock_t tcfa_lock;
+	struct gnet_stats_basic_sync __attribute__((btf_type_tag("percpu"))) *cpu_bstats;
+	struct gnet_stats_basic_sync __attribute__((btf_type_tag("percpu"))) *cpu_bstats_hw;
+	struct gnet_stats_queue __attribute__((btf_type_tag("percpu"))) *cpu_qstats;
+	struct tc_cookie __attribute__((btf_type_tag("rcu"))) *user_cookie;
+	struct tcf_chain __attribute__((btf_type_tag("rcu"))) *goto_chain;
+	u32 tcfa_flags;
+	u8 hw_stats;
+	u8 used_hw_stats;
+	bool used_hw_stats_valid;
+	u32 in_hw_count;
+};
+
+enum tca_id {
+	TCA_ID_UNSPEC = 0,
+	TCA_ID_POLICE = 1,
+	TCA_ID_GACT = 5,
+	TCA_ID_IPT = 6,
+	TCA_ID_PEDIT = 7,
+	TCA_ID_MIRRED = 8,
+	TCA_ID_NAT = 9,
+	TCA_ID_XT = 10,
+	TCA_ID_SKBEDIT = 11,
+	TCA_ID_VLAN = 12,
+	TCA_ID_BPF = 13,
+	TCA_ID_CONNMARK = 14,
+	TCA_ID_SKBMOD = 15,
+	TCA_ID_CSUM = 16,
+	TCA_ID_TUNNEL_KEY = 17,
+	TCA_ID_SIMP = 22,
+	TCA_ID_IFE = 25,
+	TCA_ID_SAMPLE = 26,
+	TCA_ID_CTINFO = 27,
+	TCA_ID_MPLS = 28,
+	TCA_ID_CT = 29,
+	TCA_ID_GATE = 30,
+	__TCA_ID_MAX = 255,
+};
+
+typedef void (*tc_action_priv_destructor)(void *);
+
+struct psample_group;
+
+struct tc_action_ops {
+	struct list_head head;
+	char kind[16];
+	enum tca_id id;
+	unsigned int net_id;
+	size_t size;
+	struct module *owner;
+	int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);
+	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
+	void (*cleanup)(struct tc_action *);
+	int (*lookup)(struct net *, struct tc_action **, u32);
+	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, struct tcf_proto *, u32, struct netlink_ext_ack *);
+	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
+	void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);
+	size_t (*get_fill_size)(const struct tc_action *);
+	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
+	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
+	int (*offload_act_setup)(struct tc_action *, void *, u32 *, bool, struct netlink_ext_ack *);
+};
+
+struct tcf_idrinfo {
+	struct mutex lock;
+	struct idr action_idr;
+	struct net *net;
+};
+
+struct tc_cookie {
+	u8 *data;
+	u32 len;
+	struct callback_head rcu;
+};
+
+enum devlink_port_type {
+	DEVLINK_PORT_TYPE_NOTSET = 0,
+	DEVLINK_PORT_TYPE_AUTO = 1,
+	DEVLINK_PORT_TYPE_ETH = 2,
+	DEVLINK_PORT_TYPE_IB = 3,
+};
+
+enum devlink_port_flavour {
+	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
+	DEVLINK_PORT_FLAVOUR_CPU = 1,
+	DEVLINK_PORT_FLAVOUR_DSA = 2,
+	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
+	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
+	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
+	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
+	DEVLINK_PORT_FLAVOUR_PCI_SF = 7,
+};
+
+struct devlink_port_phys_attrs {
+	u32 port_number;
+	u32 split_subport_number;
+};
+
+struct devlink_port_pci_pf_attrs {
+	u32 controller;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_vf_attrs {
+	u32 controller;
+	u16 pf;
+	u16 vf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_sf_attrs {
+	u32 controller;
+	u32 sf;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_attrs {
+	u8 split: 1;
+	u8 splittable: 1;
+	u32 lanes;
+	enum devlink_port_flavour flavour;
+	struct netdev_phys_item_id switch_id;
+	union {
+		struct devlink_port_phys_attrs phys;
+		struct devlink_port_pci_pf_attrs pci_pf;
+		struct devlink_port_pci_vf_attrs pci_vf;
+		struct devlink_port_pci_sf_attrs pci_sf;
+	};
+};
+
+struct devlink;
+
+struct devlink_port_ops;
+
+struct ib_device;
+
+struct devlink_rate;
+
+struct devlink_linecard;
+
+struct devlink_port {
+	struct list_head list;
+	struct list_head region_list;
+	struct devlink *devlink;
+	const struct devlink_port_ops *ops;
+	unsigned int index;
+	spinlock_t type_lock;
+	enum devlink_port_type type;
+	enum devlink_port_type desired_type;
+	union {
+		struct {
+			struct net_device *netdev;
+			int ifindex;
+			char ifname[16];
+		} type_eth;
+		struct {
+			struct ib_device *ibdev;
+		} type_ib;
+	};
+	struct devlink_port_attrs attrs;
+	u8 attrs_set: 1;
+	u8 switch_port: 1;
+	u8 registered: 1;
+	u8 initialized: 1;
+	struct delayed_work type_warn_dw;
+	struct list_head reporter_list;
+	struct devlink_rate *devlink_rate;
+	struct devlink_linecard *linecard;
+};
+
+enum devlink_port_fn_state {
+	DEVLINK_PORT_FN_STATE_INACTIVE = 0,
+	DEVLINK_PORT_FN_STATE_ACTIVE = 1,
+};
+
+enum devlink_port_fn_opstate {
+	DEVLINK_PORT_FN_OPSTATE_DETACHED = 0,
+	DEVLINK_PORT_FN_OPSTATE_ATTACHED = 1,
+};
+
+struct devlink_port_ops {
+	int (*port_split)(struct devlink *, struct devlink_port *, unsigned int, struct netlink_ext_ack *);
+	int (*port_unsplit)(struct devlink *, struct devlink_port *, struct netlink_ext_ack *);
+	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
+	int (*port_del)(struct devlink *, struct devlink_port *, struct netlink_ext_ack *);
+	int (*port_fn_hw_addr_get)(struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
+	int (*port_fn_hw_addr_set)(struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
+	int (*port_fn_roce_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_roce_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+	int (*port_fn_migratable_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_migratable_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+	int (*port_fn_state_get)(struct devlink_port *, enum devlink_port_fn_state *, enum devlink_port_fn_opstate *, struct netlink_ext_ack *);
+	int (*port_fn_state_set)(struct devlink_port *, enum devlink_port_fn_state, struct netlink_ext_ack *);
+	int (*port_fn_ipsec_crypto_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_ipsec_crypto_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+	int (*port_fn_ipsec_packet_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_ipsec_packet_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+};
+
+enum devlink_rate_type {
+	DEVLINK_RATE_TYPE_LEAF = 0,
+	DEVLINK_RATE_TYPE_NODE = 1,
+};
+
+struct devlink_rate {
+	struct list_head list;
+	enum devlink_rate_type type;
+	struct devlink *devlink;
+	void *priv;
+	u64 tx_share;
+	u64 tx_max;
+	struct devlink_rate *parent;
+	union {
+		struct devlink_port *devlink_port;
+		struct {
+			char *name;
+			refcount_t refcnt;
+		};
+	};
+	u32 tx_priority;
+	u32 tx_weight;
+};
+
+enum ip_conntrack_info {
+	IP_CT_ESTABLISHED = 0,
+	IP_CT_RELATED = 1,
+	IP_CT_NEW = 2,
+	IP_CT_IS_REPLY = 3,
+	IP_CT_ESTABLISHED_REPLY = 3,
+	IP_CT_RELATED_REPLY = 4,
+	IP_CT_NUMBER = 5,
+	IP_CT_UNTRACKED = 7,
+};
+
+enum {
+	TCA_FLOWER_KEY_CT_FLAGS_NEW = 1,
+	TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 2,
+	TCA_FLOWER_KEY_CT_FLAGS_RELATED = 4,
+	TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 8,
+	TCA_FLOWER_KEY_CT_FLAGS_INVALID = 16,
+	TCA_FLOWER_KEY_CT_FLAGS_REPLY = 32,
+	__TCA_FLOWER_KEY_CT_FLAGS_MAX = 33,
+};
+
+enum flow_dissect_ret {
+	FLOW_DISSECT_RET_OUT_GOOD = 0,
+	FLOW_DISSECT_RET_OUT_BAD = 1,
+	FLOW_DISSECT_RET_PROTO_AGAIN = 2,
+	FLOW_DISSECT_RET_IPPROTO_AGAIN = 3,
+	FLOW_DISSECT_RET_CONTINUE = 4,
+};
+
+enum bpf_ret_code {
+	BPF_OK = 0,
+	BPF_DROP = 2,
+	BPF_REDIRECT = 7,
+	BPF_LWT_REROUTE = 128,
+	BPF_FLOW_DISSECTOR_CONTINUE = 129,
+};
+
+enum lwtunnel_encap_types {
+	LWTUNNEL_ENCAP_NONE = 0,
+	LWTUNNEL_ENCAP_MPLS = 1,
+	LWTUNNEL_ENCAP_IP = 2,
+	LWTUNNEL_ENCAP_ILA = 3,
+	LWTUNNEL_ENCAP_IP6 = 4,
+	LWTUNNEL_ENCAP_SEG6 = 5,
+	LWTUNNEL_ENCAP_BPF = 6,
+	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
+	LWTUNNEL_ENCAP_RPL = 8,
+	LWTUNNEL_ENCAP_IOAM6 = 9,
+	LWTUNNEL_ENCAP_XFRM = 10,
+	__LWTUNNEL_ENCAP_MAX = 11,
+};
+
+enum batadv_packettype {
+	BATADV_IV_OGM = 0,
+	BATADV_BCAST = 1,
+	BATADV_CODED = 2,
+	BATADV_ELP = 3,
+	BATADV_OGM2 = 4,
+	BATADV_MCAST = 5,
+	BATADV_UNICAST = 64,
+	BATADV_UNICAST_FRAG = 65,
+	BATADV_UNICAST_4ADDR = 66,
+	BATADV_ICMP = 67,
+	BATADV_UNICAST_TVLV = 68,
+};
+
+struct _flow_keys_digest_data {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+	__be32 ports;
+	__be32 src;
+	__be32 dst;
+};
+
+union tcp_word_hdr {
+	struct tcphdr hdr;
+	__be32 words[5];
+};
+
+struct mpls_label {
+	__be32 entry;
+};
+
+struct flow_dissector_mpls_lse {
+	u32 mpls_ttl: 8;
+	u32 mpls_bos: 1;
+	u32 mpls_tc: 3;
+	u32 mpls_label: 20;
+};
+
+struct flow_dissector_key_mpls {
+	struct flow_dissector_mpls_lse ls[7];
+	u8 used_lses;
+};
+
+struct flow_dissector_key_keyid {
+	__be32 keyid;
+};
+
+struct flow_dissector_key_ip {
+	__u8 tos;
+	__u8 ttl;
+};
+
+struct batadv_unicast_packet {
+	__u8 packet_type;
+	__u8 version;
+	__u8 ttl;
+	__u8 ttvn;
+	__u8 dest[6];
+};
+
+struct arphdr {
+	__be16 ar_hrd;
+	__be16 ar_pro;
+	unsigned char ar_hln;
+	unsigned char ar_pln;
+	__be16 ar_op;
+};
+
+struct flow_dissector_key_arp {
+	__u32 sip;
+	__u32 tip;
+	__u8 op;
+	unsigned char sha[6];
+	unsigned char tha[6];
+};
+
+struct flow_dissector_key_cfm {
+	u8 mdl_ver;
+	u8 opcode;
+};
+
+struct tipc_basic_hdr {
+	__be32 w[4];
+};
+
+struct flow_dissector_key_icmp {
+	struct {
+		u8 type;
+		u8 code;
+	};
+	u16 id;
+};
+
+struct icmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 checksum;
+	union {
+		struct {
+			__be16 id;
+			__be16 sequence;
+		} echo;
+		__be32 gateway;
+		struct {
+			__be16 __unused;
+			__be16 mtu;
+		} frag;
+		__u8 reserved[4];
+	} un;
+};
+
+struct gre_base_hdr {
+	__be16 flags;
+	__be16 protocol;
+};
+
+struct ip_esp_hdr {
+	__be32 spi;
+	__be32 seq_no;
+	__u8 enc_data[0];
+};
+
+struct flow_dissector_key_ipsec {
+	__be32 spi;
+};
+
+struct flow_dissector_key_tcp {
+	__be16 flags;
+};
+
+struct flow_dissector_key_l2tpv3 {
+	__be32 session_id;
+};
+
+struct flow_dissector_key_ports {
+	union {
+		__be32 ports;
+		struct {
+			__be16 src;
+			__be16 dst;
+		};
+	};
+};
+
+struct flow_dissector_key_ipv4_addrs {
+	__be32 src;
+	__be32 dst;
+};
+
+struct flow_dissector_key_ipv6_addrs {
+	struct in6_addr src;
+	struct in6_addr dst;
+};
+
+struct flow_dissector_key_tipc {
+	__be32 key;
+};
+
+struct flow_dissector_key_addrs {
+	union {
+		struct flow_dissector_key_ipv4_addrs v4addrs;
+		struct flow_dissector_key_ipv6_addrs v6addrs;
+		struct flow_dissector_key_tipc tipckey;
+	};
+};
+
+struct flow_dissector_key_tags {
+	u32 flow_label;
+};
+
+struct flow_dissector_key_vlan {
+	union {
+		struct {
+			u16 vlan_id: 12;
+			u16 vlan_dei: 1;
+			u16 vlan_priority: 3;
+		};
+		__be16 vlan_tci;
+	};
+	__be16 vlan_tpid;
+	__be16 vlan_eth_type;
+	u16 padding;
+};
+
+struct flow_keys {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+	struct flow_dissector_key_tags tags;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_vlan cvlan;
+	struct flow_dissector_key_keyid keyid;
+	struct flow_dissector_key_ports ports;
+	struct flow_dissector_key_icmp icmp;
+	struct flow_dissector_key_addrs addrs;
+	long: 0;
+};
+
+struct flow_dissector_key_meta {
+	int ingress_ifindex;
+	u16 ingress_iftype;
+	u8 l2_miss;
+};
+
+struct nf_conn_labels {
+	unsigned long bits[2];
+};
+
+struct flow_dissector_key_ct {
+	u16 ct_state;
+	u16 ct_zone;
+	u32 ct_mark;
+	u32 ct_labels[4];
+};
+
+struct flow_dissector_key_enc_opts {
+	u8 data[255];
+	u8 len;
+	__be16 dst_opt_type;
+};
+
+struct flow_dissector_key_hash {
+	u32 hash;
+};
+
+struct clock_identity {
+	u8 id[8];
+};
+
+struct port_identity {
+	struct clock_identity clock_identity;
+	__be16 port_number;
+};
+
+struct ptp_header {
+	u8 tsmt;
+	u8 ver;
+	__be16 message_length;
+	u8 domain_number;
+	u8 reserved1;
+	u8 flag_field[2];
+	__be64 correction;
+	__be32 reserved2;
+	struct port_identity source_port_identity;
+	__be16 sequence_id;
+	u8 control;
+	u8 log_message_interval;
+} __attribute__((packed));
+
+struct hsr_tag {
+	__be16 path_and_LSDU_size;
+	__be16 sequence_nr;
+	__be16 encap_proto;
+};
+
+struct flow_dissector_key_eth_addrs {
+	unsigned char dst[6];
+	unsigned char src[6];
+};
+
+struct flow_dissector_key_num_of_vlans {
+	u8 num_of_vlans;
+};
+
+struct flow_dissector_key_pppoe {
+	__be16 session_id;
+	__be16 ppp_proto;
+	__be16 type;
+};
+
+struct flow_keys_digest {
+	u8 data[16];
+};
+
+struct rps_map;
+
+struct rps_dev_flow_table;
+
+struct netdev_rx_queue {
+	struct xdp_rxq_info xdp_rxq;
+	struct rps_map __attribute__((btf_type_tag("rcu"))) *rps_map;
+	struct rps_dev_flow_table __attribute__((btf_type_tag("rcu"))) *rps_flow_table;
+	struct kobject kobj;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct xsk_buff_pool *pool;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rps_map {
+	unsigned int len;
+	struct callback_head rcu;
+	u16 cpus[0];
+};
+
+struct rps_dev_flow {
+	u16 cpu;
+	u16 filter;
+	unsigned int last_qtail;
+};
+
+struct rps_dev_flow_table {
+	unsigned int mask;
+	struct callback_head rcu;
+	struct rps_dev_flow flows[0];
+};
+
+struct bpf_xdp_link {
+	struct bpf_link link;
+	struct net_device *dev;
+	int flags;
+};
+
+enum xps_map_type {
+	XPS_CPUS = 0,
+	XPS_RXQS = 1,
+	XPS_MAPS_MAX = 2,
+};
+
+enum qdisc_state_t {
+	__QDISC_STATE_SCHED = 0,
+	__QDISC_STATE_DEACTIVATED = 1,
+	__QDISC_STATE_MISSED = 2,
+	__QDISC_STATE_DRAINING = 3,
+};
+
+enum {
+	NAPIF_STATE_SCHED = 1,
+	NAPIF_STATE_MISSED = 2,
+	NAPIF_STATE_DISABLE = 4,
+	NAPIF_STATE_NPSVC = 8,
+	NAPIF_STATE_LISTED = 16,
+	NAPIF_STATE_NO_BUSY_POLL = 32,
+	NAPIF_STATE_IN_BUSY_POLL = 64,
+	NAPIF_STATE_PREFER_BUSY_POLL = 128,
+	NAPIF_STATE_THREADED = 256,
+	NAPIF_STATE_SCHED_THREADED = 512,
+};
+
+enum {
+	LINUX_MIB_NUM = 0,
+	LINUX_MIB_SYNCOOKIESSENT = 1,
+	LINUX_MIB_SYNCOOKIESRECV = 2,
+	LINUX_MIB_SYNCOOKIESFAILED = 3,
+	LINUX_MIB_EMBRYONICRSTS = 4,
+	LINUX_MIB_PRUNECALLED = 5,
+	LINUX_MIB_RCVPRUNED = 6,
+	LINUX_MIB_OFOPRUNED = 7,
+	LINUX_MIB_OUTOFWINDOWICMPS = 8,
+	LINUX_MIB_LOCKDROPPEDICMPS = 9,
+	LINUX_MIB_ARPFILTER = 10,
+	LINUX_MIB_TIMEWAITED = 11,
+	LINUX_MIB_TIMEWAITRECYCLED = 12,
+	LINUX_MIB_TIMEWAITKILLED = 13,
+	LINUX_MIB_PAWSACTIVEREJECTED = 14,
+	LINUX_MIB_PAWSESTABREJECTED = 15,
+	LINUX_MIB_DELAYEDACKS = 16,
+	LINUX_MIB_DELAYEDACKLOCKED = 17,
+	LINUX_MIB_DELAYEDACKLOST = 18,
+	LINUX_MIB_LISTENOVERFLOWS = 19,
+	LINUX_MIB_LISTENDROPS = 20,
+	LINUX_MIB_TCPHPHITS = 21,
+	LINUX_MIB_TCPPUREACKS = 22,
+	LINUX_MIB_TCPHPACKS = 23,
+	LINUX_MIB_TCPRENORECOVERY = 24,
+	LINUX_MIB_TCPSACKRECOVERY = 25,
+	LINUX_MIB_TCPSACKRENEGING = 26,
+	LINUX_MIB_TCPSACKREORDER = 27,
+	LINUX_MIB_TCPRENOREORDER = 28,
+	LINUX_MIB_TCPTSREORDER = 29,
+	LINUX_MIB_TCPFULLUNDO = 30,
+	LINUX_MIB_TCPPARTIALUNDO = 31,
+	LINUX_MIB_TCPDSACKUNDO = 32,
+	LINUX_MIB_TCPLOSSUNDO = 33,
+	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
+	LINUX_MIB_TCPRENOFAILURES = 35,
+	LINUX_MIB_TCPSACKFAILURES = 36,
+	LINUX_MIB_TCPLOSSFAILURES = 37,
+	LINUX_MIB_TCPFASTRETRANS = 38,
+	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
+	LINUX_MIB_TCPTIMEOUTS = 40,
+	LINUX_MIB_TCPLOSSPROBES = 41,
+	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
+	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
+	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
+	LINUX_MIB_TCPRCVCOLLAPSED = 45,
+	LINUX_MIB_TCPDSACKOLDSENT = 46,
+	LINUX_MIB_TCPDSACKOFOSENT = 47,
+	LINUX_MIB_TCPDSACKRECV = 48,
+	LINUX_MIB_TCPDSACKOFORECV = 49,
+	LINUX_MIB_TCPABORTONDATA = 50,
+	LINUX_MIB_TCPABORTONCLOSE = 51,
+	LINUX_MIB_TCPABORTONMEMORY = 52,
+	LINUX_MIB_TCPABORTONTIMEOUT = 53,
+	LINUX_MIB_TCPABORTONLINGER = 54,
+	LINUX_MIB_TCPABORTFAILED = 55,
+	LINUX_MIB_TCPMEMORYPRESSURES = 56,
+	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
+	LINUX_MIB_TCPSACKDISCARD = 58,
+	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
+	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
+	LINUX_MIB_TCPSPURIOUSRTOS = 61,
+	LINUX_MIB_TCPMD5NOTFOUND = 62,
+	LINUX_MIB_TCPMD5UNEXPECTED = 63,
+	LINUX_MIB_TCPMD5FAILURE = 64,
+	LINUX_MIB_SACKSHIFTED = 65,
+	LINUX_MIB_SACKMERGED = 66,
+	LINUX_MIB_SACKSHIFTFALLBACK = 67,
+	LINUX_MIB_TCPBACKLOGDROP = 68,
+	LINUX_MIB_PFMEMALLOCDROP = 69,
+	LINUX_MIB_TCPMINTTLDROP = 70,
+	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
+	LINUX_MIB_IPRPFILTER = 72,
+	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
+	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
+	LINUX_MIB_TCPREQQFULLDROP = 75,
+	LINUX_MIB_TCPRETRANSFAIL = 76,
+	LINUX_MIB_TCPRCVCOALESCE = 77,
+	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
+	LINUX_MIB_TCPOFOQUEUE = 79,
+	LINUX_MIB_TCPOFODROP = 80,
+	LINUX_MIB_TCPOFOMERGE = 81,
+	LINUX_MIB_TCPCHALLENGEACK = 82,
+	LINUX_MIB_TCPSYNCHALLENGE = 83,
+	LINUX_MIB_TCPFASTOPENACTIVE = 84,
+	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
+	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
+	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
+	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
+	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
+	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
+	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
+	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
+	LINUX_MIB_TCPAUTOCORKING = 93,
+	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
+	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
+	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
+	LINUX_MIB_TCPSYNRETRANS = 97,
+	LINUX_MIB_TCPORIGDATASENT = 98,
+	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
+	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
+	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
+	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
+	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
+	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
+	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
+	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
+	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
+	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
+	LINUX_MIB_TCPWINPROBE = 109,
+	LINUX_MIB_TCPKEEPALIVE = 110,
+	LINUX_MIB_TCPMTUPFAIL = 111,
+	LINUX_MIB_TCPMTUPSUCCESS = 112,
+	LINUX_MIB_TCPDELIVERED = 113,
+	LINUX_MIB_TCPDELIVEREDCE = 114,
+	LINUX_MIB_TCPACKCOMPRESSED = 115,
+	LINUX_MIB_TCPZEROWINDOWDROP = 116,
+	LINUX_MIB_TCPRCVQDROP = 117,
+	LINUX_MIB_TCPWQUEUETOOBIG = 118,
+	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
+	LINUX_MIB_TCPTIMEOUTREHASH = 120,
+	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
+	LINUX_MIB_TCPDSACKRECVSEGS = 122,
+	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
+	LINUX_MIB_TCPMIGRATEREQSUCCESS = 124,
+	LINUX_MIB_TCPMIGRATEREQFAILURE = 125,
+	LINUX_MIB_TCPPLBREHASH = 126,
+	__LINUX_MIB_MAX = 127,
+};
+
+enum netdev_offload_xstats_type {
+	NETDEV_OFFLOAD_XSTATS_TYPE_L3 = 1,
+};
+
+enum bpf_xdp_mode {
+	XDP_MODE_SKB = 0,
+	XDP_MODE_DRV = 1,
+	XDP_MODE_HW = 2,
+	__MAX_XDP_MODE = 3,
+};
+
+enum {
+	IF_OPER_UNKNOWN = 0,
+	IF_OPER_NOTPRESENT = 1,
+	IF_OPER_DOWN = 2,
+	IF_OPER_LOWERLAYERDOWN = 3,
+	IF_OPER_TESTING = 4,
+	IF_OPER_DORMANT = 5,
+	IF_OPER_UP = 6,
+};
+
+enum {
+	NFPROTO_UNSPEC = 0,
+	NFPROTO_INET = 1,
+	NFPROTO_IPV4 = 2,
+	NFPROTO_ARP = 3,
+	NFPROTO_NETDEV = 5,
+	NFPROTO_BRIDGE = 7,
+	NFPROTO_IPV6 = 10,
+	NFPROTO_NUMPROTO = 11,
+};
+
+enum nf_dev_hooks {
+	NF_NETDEV_INGRESS = 0,
+	NF_NETDEV_EGRESS = 1,
+	NF_NETDEV_NUMHOOKS = 2,
+};
+
+enum tcx_action_base {
+	TCX_NEXT = -1,
+	TCX_PASS = 0,
+	TCX_DROP = 2,
+	TCX_REDIRECT = 7,
+};
+
+enum qdisc_state2_t {
+	__QDISC_STATE2_RUNNING = 0,
+};
+
+struct netdev_adjacent {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	bool master;
+	bool ignore;
+	u16 ref_nr;
+	void *private;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct dev_kfree_skb_cb {
+	enum skb_drop_reason reason;
+};
+
+struct tc_skb_cb {
+	struct qdisc_skb_cb qdisc_cb;
+	u16 mru;
+	u8 post_ct: 1;
+	u8 post_ct_snat: 1;
+	u8 post_ct_dnat: 1;
+	u16 zone;
+};
+
+struct netdev_net_notifier {
+	struct list_head list;
+	struct notifier_block *nb;
+};
+
+struct net_device_path_stack {
+	int num_paths;
+	struct net_device_path path[5];
+};
+
+struct netdev_nested_priv {
+	unsigned char flags;
+	void *data;
+};
+
+struct netdev_notifier_offload_xstats_rd;
+
+struct netdev_notifier_offload_xstats_ru;
+
+struct netdev_notifier_offload_xstats_info {
+	struct netdev_notifier_info info;
+	enum netdev_offload_xstats_type type;
+	union {
+		struct netdev_notifier_offload_xstats_rd *report_delta;
+		struct netdev_notifier_offload_xstats_ru *report_used;
+	};
+};
+
+struct netdev_notifier_offload_xstats_rd {
+	struct rtnl_hw_stats64 stats;
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_ru {
+	bool used;
+};
+
+struct netdev_notifier_pre_changeaddr_info {
+	struct netdev_notifier_info info;
+	const unsigned char *dev_addr;
+};
+
+typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
+
+struct netdev_notifier_change_info {
+	struct netdev_notifier_info info;
+	unsigned int flags_changed;
+};
+
+struct netdev_notifier_changeupper_info {
+	struct netdev_notifier_info info;
+	struct net_device *upper_dev;
+	bool master;
+	bool linking;
+	void *upper_info;
+};
+
+struct ifslave {
+	__s32 slave_id;
+	char slave_name[16];
+	__s8 link;
+	__s8 state;
+	__u32 link_failure_count;
+};
+
+typedef struct ifslave ifslave;
+
+struct ifbond {
+	__s32 bond_mode;
+	__s32 num_slaves;
+	__s32 miimon;
+};
+
+typedef struct ifbond ifbond;
+
+struct netdev_bonding_info {
+	ifslave slave;
+	ifbond master;
+};
+
+struct netdev_notifier_bonding_info {
+	struct netdev_notifier_info info;
+	struct netdev_bonding_info bonding_info;
+};
+
+struct netdev_notifier_changelowerstate_info {
+	struct netdev_notifier_info info;
+	void *lower_state_info;
+};
+
+struct netdev_notifier_info_ext {
+	struct netdev_notifier_info info;
+	union {
+		u32 mtu;
+	} ext;
+};
+
+struct netdev_hw_addr {
+	struct list_head list;
+	struct rb_node node;
+	unsigned char addr[32];
+	unsigned char type;
+	bool global_use;
+	int sync_cnt;
+	int refcount;
+	int synced;
+	struct callback_head callback_head;
+};
+
+struct xfrm_dst {
+	union {
+		struct dst_entry dst;
+		struct rtable rt;
+		struct rt6_info rt6;
+	} u;
+	struct dst_entry *route;
+	struct dst_entry *child;
+	struct dst_entry *path;
+	struct xfrm_policy *pols[2];
+	int num_pols;
+	int num_xfrms;
+	u32 xfrm_genid;
+	u32 policy_genid;
+	u32 route_mtu_cached;
+	u32 child_mtu_cached;
+	u32 route_cookie;
+	u32 path_cookie;
+};
+
+struct neigh_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table neigh_vars[22];
+};
+
+enum {
+	NEIGH_VAR_MCAST_PROBES = 0,
+	NEIGH_VAR_UCAST_PROBES = 1,
+	NEIGH_VAR_APP_PROBES = 2,
+	NEIGH_VAR_MCAST_REPROBES = 3,
+	NEIGH_VAR_RETRANS_TIME = 4,
+	NEIGH_VAR_BASE_REACHABLE_TIME = 5,
+	NEIGH_VAR_DELAY_PROBE_TIME = 6,
+	NEIGH_VAR_INTERVAL_PROBE_TIME_MS = 7,
+	NEIGH_VAR_GC_STALETIME = 8,
+	NEIGH_VAR_QUEUE_LEN_BYTES = 9,
+	NEIGH_VAR_PROXY_QLEN = 10,
+	NEIGH_VAR_ANYCAST_DELAY = 11,
+	NEIGH_VAR_PROXY_DELAY = 12,
+	NEIGH_VAR_LOCKTIME = 13,
+	NEIGH_VAR_QUEUE_LEN = 14,
+	NEIGH_VAR_RETRANS_TIME_MS = 15,
+	NEIGH_VAR_BASE_REACHABLE_TIME_MS = 16,
+	NEIGH_VAR_GC_INTERVAL = 17,
+	NEIGH_VAR_GC_THRESH1 = 18,
+	NEIGH_VAR_GC_THRESH2 = 19,
+	NEIGH_VAR_GC_THRESH3 = 20,
+	NEIGH_VAR_MAX = 21,
+};
+
+enum {
+	NEIGH_ARP_TABLE = 0,
+	NEIGH_ND_TABLE = 1,
+	NEIGH_DN_TABLE = 2,
+	NEIGH_NR_TABLES = 3,
+	NEIGH_LINK_TABLE = 3,
+};
+
+enum netevent_notif_type {
+	NETEVENT_NEIGH_UPDATE = 1,
+	NETEVENT_REDIRECT = 2,
+	NETEVENT_DELAY_PROBE_TIME_UPDATE = 3,
+	NETEVENT_IPV4_MPATH_HASH_UPDATE = 4,
+	NETEVENT_IPV6_MPATH_HASH_UPDATE = 5,
+	NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,
+};
+
+enum {
+	NDA_UNSPEC = 0,
+	NDA_DST = 1,
+	NDA_LLADDR = 2,
+	NDA_CACHEINFO = 3,
+	NDA_PROBES = 4,
+	NDA_VLAN = 5,
+	NDA_PORT = 6,
+	NDA_VNI = 7,
+	NDA_IFINDEX = 8,
+	NDA_MASTER = 9,
+	NDA_LINK_NETNSID = 10,
+	NDA_SRC_VNI = 11,
+	NDA_PROTOCOL = 12,
+	NDA_NH_ID = 13,
+	NDA_FDB_EXT_ATTRS = 14,
+	NDA_FLAGS_EXT = 15,
+	NDA_NDM_STATE_MASK = 16,
+	NDA_NDM_FLAGS_MASK = 17,
+	__NDA_MAX = 18,
+};
+
+enum {
+	RTN_UNSPEC = 0,
+	RTN_UNICAST = 1,
+	RTN_LOCAL = 2,
+	RTN_BROADCAST = 3,
+	RTN_ANYCAST = 4,
+	RTN_MULTICAST = 5,
+	RTN_BLACKHOLE = 6,
+	RTN_UNREACHABLE = 7,
+	RTN_PROHIBIT = 8,
+	RTN_THROW = 9,
+	RTN_NAT = 10,
+	RTN_XRESOLVE = 11,
+	__RTN_MAX = 12,
+};
+
+enum {
+	NDTA_UNSPEC = 0,
+	NDTA_NAME = 1,
+	NDTA_THRESH1 = 2,
+	NDTA_THRESH2 = 3,
+	NDTA_THRESH3 = 4,
+	NDTA_CONFIG = 5,
+	NDTA_PARMS = 6,
+	NDTA_STATS = 7,
+	NDTA_GC_INTERVAL = 8,
+	NDTA_PAD = 9,
+	__NDTA_MAX = 10,
+};
+
+enum {
+	NDTPA_UNSPEC = 0,
+	NDTPA_IFINDEX = 1,
+	NDTPA_REFCNT = 2,
+	NDTPA_REACHABLE_TIME = 3,
+	NDTPA_BASE_REACHABLE_TIME = 4,
+	NDTPA_RETRANS_TIME = 5,
+	NDTPA_GC_STALETIME = 6,
+	NDTPA_DELAY_PROBE_TIME = 7,
+	NDTPA_QUEUE_LEN = 8,
+	NDTPA_APP_PROBES = 9,
+	NDTPA_UCAST_PROBES = 10,
+	NDTPA_MCAST_PROBES = 11,
+	NDTPA_ANYCAST_DELAY = 12,
+	NDTPA_PROXY_DELAY = 13,
+	NDTPA_PROXY_QLEN = 14,
+	NDTPA_LOCKTIME = 15,
+	NDTPA_QUEUE_LENBYTES = 16,
+	NDTPA_MCAST_REPROBES = 17,
+	NDTPA_PAD = 18,
+	NDTPA_INTERVAL_PROBE_TIME_MS = 19,
+	__NDTPA_MAX = 20,
+};
+
+struct neighbour_cb {
+	unsigned long sched_next;
+	unsigned int flags;
+};
+
+struct neigh_seq_state {
+	struct seq_net_private p;
+	struct neigh_table *tbl;
+	struct neigh_hash_table *nht;
+	void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);
+	unsigned int bucket;
+	unsigned int flags;
+};
+
+struct neigh_dump_filter {
+	int master_idx;
+	int dev_idx;
+};
+
+struct ndtmsg {
+	__u8 ndtm_family;
+	__u8 ndtm_pad1;
+	__u16 ndtm_pad2;
+};
+
+struct ndt_config {
+	__u16 ndtc_key_len;
+	__u16 ndtc_entry_size;
+	__u32 ndtc_entries;
+	__u32 ndtc_last_flush;
+	__u32 ndtc_last_rand;
+	__u32 ndtc_hash_rnd;
+	__u32 ndtc_hash_mask;
+	__u32 ndtc_hash_chain_gc;
+	__u32 ndtc_proxy_qlen;
+};
+
+struct ndt_stats {
+	__u64 ndts_allocs;
+	__u64 ndts_destroys;
+	__u64 ndts_hash_grows;
+	__u64 ndts_res_failed;
+	__u64 ndts_lookups;
+	__u64 ndts_hits;
+	__u64 ndts_rcv_probes_mcast;
+	__u64 ndts_rcv_probes_ucast;
+	__u64 ndts_periodic_gc_runs;
+	__u64 ndts_forced_gc_runs;
+	__u64 ndts_table_fulls;
+};
+
+struct nda_cacheinfo {
+	__u32 ndm_confirmed;
+	__u32 ndm_used;
+	__u32 ndm_updated;
+	__u32 ndm_refcnt;
+};
+
+struct rtnl_link {
+	rtnl_doit_func doit;
+	rtnl_dumpit_func dumpit;
+	struct module *owner;
+	unsigned int flags;
+	struct callback_head rcu;
+};
+
+enum rtattr_type_t {
+	RTA_UNSPEC = 0,
+	RTA_DST = 1,
+	RTA_SRC = 2,
+	RTA_IIF = 3,
+	RTA_OIF = 4,
+	RTA_GATEWAY = 5,
+	RTA_PRIORITY = 6,
+	RTA_PREFSRC = 7,
+	RTA_METRICS = 8,
+	RTA_MULTIPATH = 9,
+	RTA_PROTOINFO = 10,
+	RTA_FLOW = 11,
+	RTA_CACHEINFO = 12,
+	RTA_SESSION = 13,
+	RTA_MP_ALGO = 14,
+	RTA_TABLE = 15,
+	RTA_MARK = 16,
+	RTA_MFC_STATS = 17,
+	RTA_VIA = 18,
+	RTA_NEWDST = 19,
+	RTA_PREF = 20,
+	RTA_ENCAP_TYPE = 21,
+	RTA_ENCAP = 22,
+	RTA_EXPIRES = 23,
+	RTA_PAD = 24,
+	RTA_UID = 25,
+	RTA_TTL_PROPAGATE = 26,
+	RTA_IP_PROTO = 27,
+	RTA_SPORT = 28,
+	RTA_DPORT = 29,
+	RTA_NH_ID = 30,
+	__RTA_MAX = 31,
+};
+
+enum {
+	IFLA_BRIDGE_FLAGS = 0,
+	IFLA_BRIDGE_MODE = 1,
+	IFLA_BRIDGE_VLAN_INFO = 2,
+	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
+	IFLA_BRIDGE_MRP = 4,
+	IFLA_BRIDGE_CFM = 5,
+	IFLA_BRIDGE_MST = 6,
+	__IFLA_BRIDGE_MAX = 7,
+};
+
+enum {
+	IFLA_BRPORT_UNSPEC = 0,
+	IFLA_BRPORT_STATE = 1,
+	IFLA_BRPORT_PRIORITY = 2,
+	IFLA_BRPORT_COST = 3,
+	IFLA_BRPORT_MODE = 4,
+	IFLA_BRPORT_GUARD = 5,
+	IFLA_BRPORT_PROTECT = 6,
+	IFLA_BRPORT_FAST_LEAVE = 7,
+	IFLA_BRPORT_LEARNING = 8,
+	IFLA_BRPORT_UNICAST_FLOOD = 9,
+	IFLA_BRPORT_PROXYARP = 10,
+	IFLA_BRPORT_LEARNING_SYNC = 11,
+	IFLA_BRPORT_PROXYARP_WIFI = 12,
+	IFLA_BRPORT_ROOT_ID = 13,
+	IFLA_BRPORT_BRIDGE_ID = 14,
+	IFLA_BRPORT_DESIGNATED_PORT = 15,
+	IFLA_BRPORT_DESIGNATED_COST = 16,
+	IFLA_BRPORT_ID = 17,
+	IFLA_BRPORT_NO = 18,
+	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,
+	IFLA_BRPORT_CONFIG_PENDING = 20,
+	IFLA_BRPORT_MESSAGE_AGE_TIMER = 21,
+	IFLA_BRPORT_FORWARD_DELAY_TIMER = 22,
+	IFLA_BRPORT_HOLD_TIMER = 23,
+	IFLA_BRPORT_FLUSH = 24,
+	IFLA_BRPORT_MULTICAST_ROUTER = 25,
+	IFLA_BRPORT_PAD = 26,
+	IFLA_BRPORT_MCAST_FLOOD = 27,
+	IFLA_BRPORT_MCAST_TO_UCAST = 28,
+	IFLA_BRPORT_VLAN_TUNNEL = 29,
+	IFLA_BRPORT_BCAST_FLOOD = 30,
+	IFLA_BRPORT_GROUP_FWD_MASK = 31,
+	IFLA_BRPORT_NEIGH_SUPPRESS = 32,
+	IFLA_BRPORT_ISOLATED = 33,
+	IFLA_BRPORT_BACKUP_PORT = 34,
+	IFLA_BRPORT_MRP_RING_OPEN = 35,
+	IFLA_BRPORT_MRP_IN_OPEN = 36,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT = 37,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT = 38,
+	IFLA_BRPORT_LOCKED = 39,
+	IFLA_BRPORT_MAB = 40,
+	IFLA_BRPORT_MCAST_N_GROUPS = 41,
+	IFLA_BRPORT_MCAST_MAX_GROUPS = 42,
+	IFLA_BRPORT_NEIGH_VLAN_SUPPRESS = 43,
+	IFLA_BRPORT_BACKUP_NHID = 44,
+	__IFLA_BRPORT_MAX = 45,
+};
+
+enum {
+	IFLA_STATS_UNSPEC = 0,
+	IFLA_STATS_LINK_64 = 1,
+	IFLA_STATS_LINK_XSTATS = 2,
+	IFLA_STATS_LINK_XSTATS_SLAVE = 3,
+	IFLA_STATS_LINK_OFFLOAD_XSTATS = 4,
+	IFLA_STATS_AF_SPEC = 5,
+	__IFLA_STATS_MAX = 6,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO = 2,
+	IFLA_OFFLOAD_XSTATS_L3_STATS = 3,
+	__IFLA_OFFLOAD_XSTATS_MAX = 4,
+};
+
+enum rtnl_kinds {
+	RTNL_KIND_NEW = 0,
+	RTNL_KIND_DEL = 1,
+	RTNL_KIND_GET = 2,
+	RTNL_KIND_SET = 3,
+};
+
+enum {
+	IFLA_EVENT_NONE = 0,
+	IFLA_EVENT_REBOOT = 1,
+	IFLA_EVENT_FEATURES = 2,
+	IFLA_EVENT_BONDING_FAILOVER = 3,
+	IFLA_EVENT_NOTIFY_PEERS = 4,
+	IFLA_EVENT_IGMP_RESEND = 5,
+	IFLA_EVENT_BONDING_OPTIONS = 6,
+};
+
+enum {
+	IFLA_PROTO_DOWN_REASON_UNSPEC = 0,
+	IFLA_PROTO_DOWN_REASON_MASK = 1,
+	IFLA_PROTO_DOWN_REASON_VALUE = 2,
+	__IFLA_PROTO_DOWN_REASON_CNT = 3,
+	IFLA_PROTO_DOWN_REASON_MAX = 2,
+};
+
+enum {
+	IFLA_VF_INFO_UNSPEC = 0,
+	IFLA_VF_INFO = 1,
+	__IFLA_VF_INFO_MAX = 2,
+};
+
+enum {
+	IFLA_VF_UNSPEC = 0,
+	IFLA_VF_MAC = 1,
+	IFLA_VF_VLAN = 2,
+	IFLA_VF_TX_RATE = 3,
+	IFLA_VF_SPOOFCHK = 4,
+	IFLA_VF_LINK_STATE = 5,
+	IFLA_VF_RATE = 6,
+	IFLA_VF_RSS_QUERY_EN = 7,
+	IFLA_VF_STATS = 8,
+	IFLA_VF_TRUST = 9,
+	IFLA_VF_IB_NODE_GUID = 10,
+	IFLA_VF_IB_PORT_GUID = 11,
+	IFLA_VF_VLAN_LIST = 12,
+	IFLA_VF_BROADCAST = 13,
+	__IFLA_VF_MAX = 14,
+};
+
+enum {
+	IFLA_VF_VLAN_INFO_UNSPEC = 0,
+	IFLA_VF_VLAN_INFO = 1,
+	__IFLA_VF_VLAN_INFO_MAX = 2,
+};
+
+enum {
+	IFLA_VF_STATS_RX_PACKETS = 0,
+	IFLA_VF_STATS_TX_PACKETS = 1,
+	IFLA_VF_STATS_RX_BYTES = 2,
+	IFLA_VF_STATS_TX_BYTES = 3,
+	IFLA_VF_STATS_BROADCAST = 4,
+	IFLA_VF_STATS_MULTICAST = 5,
+	IFLA_VF_STATS_PAD = 6,
+	IFLA_VF_STATS_RX_DROPPED = 7,
+	IFLA_VF_STATS_TX_DROPPED = 8,
+	__IFLA_VF_STATS_MAX = 9,
+};
+
+enum {
+	IFLA_VF_PORT_UNSPEC = 0,
+	IFLA_VF_PORT = 1,
+	__IFLA_VF_PORT_MAX = 2,
+};
+
+enum {
+	IFLA_PORT_UNSPEC = 0,
+	IFLA_PORT_VF = 1,
+	IFLA_PORT_PROFILE = 2,
+	IFLA_PORT_VSI_TYPE = 3,
+	IFLA_PORT_INSTANCE_UUID = 4,
+	IFLA_PORT_HOST_UUID = 5,
+	IFLA_PORT_REQUEST = 6,
+	IFLA_PORT_RESPONSE = 7,
+	__IFLA_PORT_MAX = 8,
+};
+
+enum {
+	XDP_ATTACHED_NONE = 0,
+	XDP_ATTACHED_DRV = 1,
+	XDP_ATTACHED_SKB = 2,
+	XDP_ATTACHED_HW = 3,
+	XDP_ATTACHED_MULTI = 4,
+};
+
+enum {
+	IFLA_XDP_UNSPEC = 0,
+	IFLA_XDP_FD = 1,
+	IFLA_XDP_ATTACHED = 2,
+	IFLA_XDP_FLAGS = 3,
+	IFLA_XDP_PROG_ID = 4,
+	IFLA_XDP_DRV_PROG_ID = 5,
+	IFLA_XDP_SKB_PROG_ID = 6,
+	IFLA_XDP_HW_PROG_ID = 7,
+	IFLA_XDP_EXPECTED_FD = 8,
+	__IFLA_XDP_MAX = 9,
+};
+
+enum {
+	IFLA_INFO_UNSPEC = 0,
+	IFLA_INFO_KIND = 1,
+	IFLA_INFO_DATA = 2,
+	IFLA_INFO_XSTATS = 3,
+	IFLA_INFO_SLAVE_KIND = 4,
+	IFLA_INFO_SLAVE_DATA = 5,
+	__IFLA_INFO_MAX = 6,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED = 2,
+	__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX = 3,
+};
+
+enum {
+	IFLA_STATS_GETSET_UNSPEC = 0,
+	IFLA_STATS_GET_FILTERS = 1,
+	IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS = 2,
+	__IFLA_STATS_GETSET_MAX = 3,
+};
+
+enum {
+	MDBA_SET_ENTRY_UNSPEC = 0,
+	MDBA_SET_ENTRY = 1,
+	MDBA_SET_ENTRY_ATTRS = 2,
+	__MDBA_SET_ENTRY_MAX = 3,
+};
+
+struct rtnl_af_ops {
+	struct list_head list;
+	int family;
+	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
+	size_t (*get_link_af_size)(const struct net_device *, u32);
+	int (*validate_link_af)(const struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*set_link_af)(struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
+	size_t (*get_stats_af_size)(const struct net_device *);
+};
+
+struct rtnl_offload_xstats_request_used {
+	bool request;
+	bool used;
+};
+
+struct rtnl_newlink_tbs {
+	struct nlattr *tb[65];
+	struct nlattr *attr[51];
+	struct nlattr *slave_attr[45];
+};
+
+struct if_stats_msg {
+	__u8 family;
+	__u8 pad1;
+	__u16 pad2;
+	__u32 ifindex;
+	__u32 filter_mask;
+};
+
+struct br_port_msg {
+	__u8 family;
+	__u32 ifindex;
+};
+
+struct rtnl_link_stats {
+	__u32 rx_packets;
+	__u32 tx_packets;
+	__u32 rx_bytes;
+	__u32 tx_bytes;
+	__u32 rx_errors;
+	__u32 tx_errors;
+	__u32 rx_dropped;
+	__u32 tx_dropped;
+	__u32 multicast;
+	__u32 collisions;
+	__u32 rx_length_errors;
+	__u32 rx_over_errors;
+	__u32 rx_crc_errors;
+	__u32 rx_frame_errors;
+	__u32 rx_fifo_errors;
+	__u32 rx_missed_errors;
+	__u32 tx_aborted_errors;
+	__u32 tx_carrier_errors;
+	__u32 tx_fifo_errors;
+	__u32 tx_heartbeat_errors;
+	__u32 tx_window_errors;
+	__u32 rx_compressed;
+	__u32 tx_compressed;
+	__u32 rx_nohandler;
+};
+
+struct netlink_dump_control {
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	struct netlink_ext_ack *extack;
+	void *data;
+	struct module *module;
+	u32 min_dump_alloc;
+};
+
+struct ifla_vf_mac {
+	__u32 vf;
+	__u8 mac[32];
+};
+
+struct ifla_vf_vlan {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+};
+
+struct ifla_vf_vlan_info {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+	__be16 vlan_proto;
+};
+
+struct ifla_vf_tx_rate {
+	__u32 vf;
+	__u32 rate;
+};
+
+struct ifla_vf_rate {
+	__u32 vf;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+};
+
+struct ifla_vf_spoofchk {
+	__u32 vf;
+	__u32 setting;
+};
+
+struct ifla_vf_link_state {
+	__u32 vf;
+	__u32 link_state;
+};
+
+struct ifla_vf_rss_query_en {
+	__u32 vf;
+	__u32 setting;
+};
+
+struct ifla_vf_trust {
+	__u32 vf;
+	__u32 setting;
+};
+
+struct rtnl_stats_dump_filters {
+	u32 mask[6];
+};
+
+struct rta_cacheinfo {
+	__u32 rta_clntref;
+	__u32 rta_lastuse;
+	__s32 rta_expires;
+	__u32 rta_error;
+	__u32 rta_used;
+	__u32 rta_id;
+	__u32 rta_ts;
+	__u32 rta_tsage;
+};
+
+struct rtnl_mdb_dump_ctx {
+	long idx;
+};
+
+struct rtnl_link_ifmap {
+	__u64 mem_start;
+	__u64 mem_end;
+	__u64 base_addr;
+	__u16 irq;
+	__u8 dma;
+	__u8 port;
+};
+
+struct ifla_vf_broadcast {
+	__u8 broadcast[32];
+};
+
+struct br_mdb_entry {
+	__u32 ifindex;
+	__u8 state;
+	__u8 flags;
+	__u16 vid;
+	struct {
+		union {
+			__be32 ip4;
+			struct in6_addr ip6;
+			unsigned char mac_addr[6];
+		} u;
+		__be16 proto;
+	} addr;
+};
+
+enum {
+	IF_LINK_MODE_DEFAULT = 0,
+	IF_LINK_MODE_DORMANT = 1,
+	IF_LINK_MODE_TESTING = 2,
+};
+
+enum lw_bits {
+	LW_URGENT = 0,
+};
+
+struct xdp_umem;
+
+struct xsk_queue;
+
+struct xdp_buff_xsk;
+
+struct xdp_desc;
+
+struct xsk_buff_pool {
+	struct device *dev;
+	struct net_device *netdev;
+	struct list_head xsk_tx_list;
+	spinlock_t xsk_tx_list_lock;
+	refcount_t users;
+	struct xdp_umem *umem;
+	struct work_struct work;
+	struct list_head free_list;
+	struct list_head xskb_list;
+	u32 heads_cnt;
+	u16 queue_id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *fq;
+	struct xsk_queue *cq;
+	dma_addr_t *dma_pages;
+	struct xdp_buff_xsk *heads;
+	struct xdp_desc *tx_descs;
+	u64 chunk_mask;
+	u64 addrs_cnt;
+	u32 free_list_cnt;
+	u32 dma_pages_cnt;
+	u32 free_heads_cnt;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunk_shift;
+	u32 frame_len;
+	u8 cached_need_wakeup;
+	bool uses_need_wakeup;
+	bool dma_need_sync;
+	bool unaligned;
+	void *addrs;
+	spinlock_t cq_lock;
+	struct xdp_buff_xsk *free_heads[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_umem {
+	void *addrs;
+	u64 size;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunks;
+	u32 npgs;
+	struct user_struct *user;
+	refcount_t users;
+	u8 flags;
+	bool zc;
+	struct page **pgs;
+	int id;
+	struct list_head xsk_dma_list;
+	struct work_struct work;
+};
+
+struct xdp_buff_xsk {
+	struct xdp_buff xdp;
+	u8 cb[24];
+	dma_addr_t dma;
+	dma_addr_t frame_dma;
+	struct xsk_buff_pool *pool;
+	u64 orig_addr;
+	struct list_head free_list_node;
+	struct list_head xskb_list_node;
+};
+
+struct xdp_desc {
+	__u64 addr;
+	__u32 len;
+	__u32 options;
+};
+
+struct seg6_pernet_data {
+	struct mutex lock;
+	struct in6_addr __attribute__((btf_type_tag("rcu"))) *tun_src;
+};
+
+struct ipv6_bpf_stub {
+	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
+	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
+	int (*ipv6_setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*ipv6_getsockopt)(struct sock *, int, int, sockptr_t, sockptr_t);
+	int (*ipv6_dev_get_saddr)(struct net *, const struct net_device *, const struct in6_addr *, unsigned int, struct in6_addr *);
+};
+
+struct bpf_scratchpad {
+	union {
+		__be32 diff[128];
+		u8 buff[512];
+	};
+};
+
+enum {
+	BPF_F_NEIGH = 2,
+	BPF_F_PEER = 4,
+	BPF_F_NEXTHOP = 8,
+};
+
+enum {
+	BPF_F_RECOMPUTE_CSUM = 1,
+	BPF_F_INVALIDATE_HASH = 2,
+};
+
+enum bpf_hdr_start_off {
+	BPF_HDR_START_MAC = 0,
+	BPF_HDR_START_NET = 1,
+};
+
+enum {
+	BPF_F_HDR_FIELD_MASK = 15,
+};
+
+enum {
+	BPF_F_PSEUDO_HDR = 16,
+	BPF_F_MARK_MANGLED_0 = 32,
+	BPF_F_MARK_ENFORCE = 64,
+};
+
+enum {
+	BPF_CSUM_LEVEL_QUERY = 0,
+	BPF_CSUM_LEVEL_INC = 1,
+	BPF_CSUM_LEVEL_DEC = 2,
+	BPF_CSUM_LEVEL_RESET = 3,
+};
+
+enum {
+	BPF_F_INGRESS = 1,
+};
+
+enum {
+	IPSTATS_MIB_NUM = 0,
+	IPSTATS_MIB_INPKTS = 1,
+	IPSTATS_MIB_INOCTETS = 2,
+	IPSTATS_MIB_INDELIVERS = 3,
+	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
+	IPSTATS_MIB_OUTREQUESTS = 5,
+	IPSTATS_MIB_OUTOCTETS = 6,
+	IPSTATS_MIB_INHDRERRORS = 7,
+	IPSTATS_MIB_INTOOBIGERRORS = 8,
+	IPSTATS_MIB_INNOROUTES = 9,
+	IPSTATS_MIB_INADDRERRORS = 10,
+	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
+	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
+	IPSTATS_MIB_INDISCARDS = 13,
+	IPSTATS_MIB_OUTDISCARDS = 14,
+	IPSTATS_MIB_OUTNOROUTES = 15,
+	IPSTATS_MIB_REASMTIMEOUT = 16,
+	IPSTATS_MIB_REASMREQDS = 17,
+	IPSTATS_MIB_REASMOKS = 18,
+	IPSTATS_MIB_REASMFAILS = 19,
+	IPSTATS_MIB_FRAGOKS = 20,
+	IPSTATS_MIB_FRAGFAILS = 21,
+	IPSTATS_MIB_FRAGCREATES = 22,
+	IPSTATS_MIB_INMCASTPKTS = 23,
+	IPSTATS_MIB_OUTMCASTPKTS = 24,
+	IPSTATS_MIB_INBCASTPKTS = 25,
+	IPSTATS_MIB_OUTBCASTPKTS = 26,
+	IPSTATS_MIB_INMCASTOCTETS = 27,
+	IPSTATS_MIB_OUTMCASTOCTETS = 28,
+	IPSTATS_MIB_INBCASTOCTETS = 29,
+	IPSTATS_MIB_OUTBCASTOCTETS = 30,
+	IPSTATS_MIB_CSUMERRORS = 31,
+	IPSTATS_MIB_NOECTPKTS = 32,
+	IPSTATS_MIB_ECT1PKTS = 33,
+	IPSTATS_MIB_ECT0PKTS = 34,
+	IPSTATS_MIB_CEPKTS = 35,
+	IPSTATS_MIB_REASM_OVERLAPS = 36,
+	IPSTATS_MIB_OUTPKTS = 37,
+	__IPSTATS_MIB_MAX = 38,
+};
+
+enum {
+	BPF_F_ADJ_ROOM_FIXED_GSO = 1,
+	BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 2,
+	BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 4,
+	BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,
+	BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,
+	BPF_F_ADJ_ROOM_NO_CSUM_RESET = 32,
+	BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 64,
+	BPF_F_ADJ_ROOM_DECAP_L3_IPV4 = 128,
+	BPF_F_ADJ_ROOM_DECAP_L3_IPV6 = 256,
+};
+
+enum {
+	BPF_ADJ_ROOM_ENCAP_L2_MASK = 255,
+	BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56,
+};
+
+enum bpf_adj_room_mode {
+	BPF_ADJ_ROOM_NET = 0,
+	BPF_ADJ_ROOM_MAC = 1,
+};
+
+struct xdp_sock {
+	struct sock sk;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *rx;
+	struct net_device *dev;
+	struct xdp_umem *umem;
+	struct list_head flush_node;
+	struct xsk_buff_pool *pool;
+	u16 queue_id;
+	bool zc;
+	bool sg;
+	enum {
+		XSK_READY = 0,
+		XSK_BOUND = 1,
+		XSK_UNBOUND = 2,
+	} state;
+	long: 64;
+	struct xsk_queue *tx;
+	struct list_head tx_list;
+	spinlock_t rx_lock;
+	u64 rx_dropped;
+	u64 rx_queue_full;
+	struct sk_buff *skb;
+	struct list_head map_list;
+	spinlock_t map_list_lock;
+	struct mutex mutex;
+	struct xsk_queue *fq_tmp;
+	struct xsk_queue *cq_tmp;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	BPF_F_TUNINFO_IPV6 = 1,
+};
+
+enum {
+	BPF_F_TUNINFO_FLAGS = 16,
+};
+
+enum {
+	BPF_F_ZERO_CSUM_TX = 2,
+	BPF_F_DONT_FRAGMENT = 4,
+	BPF_F_SEQ_NUMBER = 8,
+	BPF_F_NO_TUNNEL_KEY = 16,
+};
+
+enum {
+	TCP_BPF_IW = 1001,
+	TCP_BPF_SNDCWND_CLAMP = 1002,
+	TCP_BPF_DELACK_MAX = 1003,
+	TCP_BPF_RTO_MIN = 1004,
+	TCP_BPF_SYN = 1005,
+	TCP_BPF_SYN_IP = 1006,
+	TCP_BPF_SYN_MAC = 1007,
+};
+
+enum {
+	BPF_SOCK_OPS_RTO_CB_FLAG = 1,
+	BPF_SOCK_OPS_RETRANS_CB_FLAG = 2,
+	BPF_SOCK_OPS_STATE_CB_FLAG = 4,
+	BPF_SOCK_OPS_RTT_CB_FLAG = 8,
+	BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16,
+	BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64,
+	BPF_SOCK_OPS_ALL_CB_FLAGS = 127,
+};
+
+enum {
+	BPF_FIB_LOOKUP_DIRECT = 1,
+	BPF_FIB_LOOKUP_OUTPUT = 2,
+	BPF_FIB_LOOKUP_SKIP_NEIGH = 4,
+	BPF_FIB_LOOKUP_TBID = 8,
+	BPF_FIB_LOOKUP_SRC = 16,
+};
+
+enum {
+	BPF_FIB_LKUP_RET_SUCCESS = 0,
+	BPF_FIB_LKUP_RET_BLACKHOLE = 1,
+	BPF_FIB_LKUP_RET_UNREACHABLE = 2,
+	BPF_FIB_LKUP_RET_PROHIBIT = 3,
+	BPF_FIB_LKUP_RET_NOT_FWDED = 4,
+	BPF_FIB_LKUP_RET_FWD_DISABLED = 5,
+	BPF_FIB_LKUP_RET_UNSUPP_LWT = 6,
+	BPF_FIB_LKUP_RET_NO_NEIGH = 7,
+	BPF_FIB_LKUP_RET_FRAG_NEEDED = 8,
+	BPF_FIB_LKUP_RET_NO_SRC_ADDR = 9,
+};
+
+enum rt_class_t {
+	RT_TABLE_UNSPEC = 0,
+	RT_TABLE_COMPAT = 252,
+	RT_TABLE_DEFAULT = 253,
+	RT_TABLE_MAIN = 254,
+	RT_TABLE_LOCAL = 255,
+	RT_TABLE_MAX = 4294967295,
+};
+
+enum bpf_check_mtu_ret {
+	BPF_MTU_CHK_RET_SUCCESS = 0,
+	BPF_MTU_CHK_RET_FRAG_NEEDED = 1,
+	BPF_MTU_CHK_RET_SEGS_TOOBIG = 2,
+};
+
+enum bpf_check_mtu_flags {
+	BPF_MTU_CHK_SEGS = 1,
+};
+
+enum {
+	BPF_LOAD_HDR_OPT_TCP_SYN = 1,
+};
+
+enum {
+	BPF_SOCK_OPS_VOID = 0,
+	BPF_SOCK_OPS_TIMEOUT_INIT = 1,
+	BPF_SOCK_OPS_RWND_INIT = 2,
+	BPF_SOCK_OPS_TCP_CONNECT_CB = 3,
+	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,
+	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,
+	BPF_SOCK_OPS_NEEDS_ECN = 6,
+	BPF_SOCK_OPS_BASE_RTT = 7,
+	BPF_SOCK_OPS_RTO_CB = 8,
+	BPF_SOCK_OPS_RETRANS_CB = 9,
+	BPF_SOCK_OPS_STATE_CB = 10,
+	BPF_SOCK_OPS_TCP_LISTEN_CB = 11,
+	BPF_SOCK_OPS_RTT_CB = 12,
+	BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13,
+	BPF_SOCK_OPS_HDR_OPT_LEN_CB = 14,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15,
+};
+
+enum {
+	BPF_SKB_TSTAMP_UNSPEC = 0,
+	BPF_SKB_TSTAMP_DELIVERY_MONO = 1,
+};
+
+enum {
+	BPF_SK_LOOKUP_F_REPLACE = 1,
+	BPF_SK_LOOKUP_F_NO_REUSEPORT = 2,
+};
+
+typedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_get_nlattr_nest)(struct sk_buff *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_load_helper_8)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_8_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_16)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_16_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_32)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_32_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_store_bytes)(struct sk_buff *, u32, const void *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_load_bytes)(const struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_flow_dissector_load_bytes)(const struct bpf_flow_dissector *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_skb_load_bytes_relative)(const struct sk_buff *, u32, void *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_pull_data)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_sk_fullsock)(struct sock *);
+
+typedef u64 (*btf_sk_skb_pull_data)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_l3_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_l4_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_csum_diff)(__be32 *, u32, __be32 *, u32, __wsum);
+
+typedef u64 (*btf_bpf_csum_update)(struct sk_buff *, __wsum);
+
+typedef u64 (*btf_bpf_csum_level)(struct sk_buff *, u64);
+
+typedef u64 (*btf_bpf_clone_redirect)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_redirect)(u32, u64);
+
+typedef u64 (*btf_bpf_redirect_peer)(u32, u64);
+
+struct bpf_redir_neigh;
+
+typedef u64 (*btf_bpf_redirect_neigh)(u32, struct bpf_redir_neigh *, int, u64);
+
+struct bpf_redir_neigh {
+	__u32 nh_family;
+	union {
+		__be32 ipv4_nh;
+		__u32 ipv6_nh[4];
+	};
+};
+
+typedef u64 (*btf_bpf_msg_apply_bytes)(struct sk_msg *, u32);
+
+typedef u64 (*btf_bpf_msg_cork_bytes)(struct sk_msg *, u32);
+
+typedef u64 (*btf_bpf_msg_pull_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_msg_push_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_msg_pop_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_get_cgroup_classid)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_route_realm)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_hash_recalc)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_set_hash_invalid)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_set_hash)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_skb_vlan_push)(struct sk_buff *, __be16, u16);
+
+typedef u64 (*btf_bpf_skb_vlan_pop)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_change_proto)(struct sk_buff *, __be16, u64);
+
+typedef u64 (*btf_bpf_skb_change_type)(struct sk_buff *, u32);
+
+typedef u64 (*btf_sk_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
+
+typedef u64 (*btf_bpf_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
+
+typedef u64 (*btf_bpf_skb_change_tail)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_sk_skb_change_tail)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_change_head)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_get_buff_len)(struct xdp_buff *);
+
+typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_load_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_store_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_redirect)(u32, u64);
+
+typedef u64 (*btf_bpf_xdp_redirect_map)(struct bpf_map *, u64, u64);
+
+typedef u64 (*btf_bpf_skb_event_output)(struct sk_buff *, struct bpf_map *, u64, void *, u64);
+
+struct bpf_tunnel_key;
+
+typedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64);
+
+struct bpf_tunnel_key {
+	__u32 tunnel_id;
+	union {
+		__u32 remote_ipv4;
+		__u32 remote_ipv6[4];
+	};
+	__u8 tunnel_tos;
+	__u8 tunnel_ttl;
+	union {
+		__u16 tunnel_ext;
+		__be16 tunnel_flags;
+	};
+	__u32 tunnel_label;
+	union {
+		__u32 local_ipv4;
+		__u32 local_ipv6[4];
+	};
+};
+
+typedef u64 (*btf_bpf_skb_get_tunnel_opt)(struct sk_buff *, u8 *, u32);
+
+typedef u64 (*btf_bpf_skb_set_tunnel_key)(struct sk_buff *, const struct bpf_tunnel_key *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_set_tunnel_opt)(struct sk_buff *, const u8 *, u32);
+
+typedef u64 (*btf_bpf_skb_under_cgroup)(struct sk_buff *, struct bpf_map *, u32);
+
+typedef u64 (*btf_bpf_skb_cgroup_id)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_ancestor_cgroup_id)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_sk_cgroup_id)(struct sock *);
+
+typedef u64 (*btf_bpf_sk_ancestor_cgroup_id)(struct sock *, int);
+
+typedef u64 (*btf_bpf_xdp_event_output)(struct xdp_buff *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_socket_cookie)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock_addr)(struct bpf_sock_addr_kern *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_socket_ptr_cookie)(struct sock *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sk_msg)(struct sk_msg *);
+
+typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_setsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_getsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops_kern *, int);
+
+typedef u64 (*btf_bpf_bind)(struct bpf_sock_addr_kern *, struct sockaddr *, int);
+
+struct bpf_xfrm_state;
+
+typedef u64 (*btf_bpf_skb_get_xfrm_state)(struct sk_buff *, u32, struct bpf_xfrm_state *, u32, u64);
+
+struct bpf_xfrm_state {
+	__u32 reqid;
+	__u32 spi;
+	__u16 family;
+	__u16 ext;
+	union {
+		__u32 remote_ipv4;
+		__u32 remote_ipv6[4];
+	};
+};
+
+struct bpf_fib_lookup;
+
+typedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32);
+
+struct bpf_fib_lookup {
+	__u8 family;
+	__u8 l4_protocol;
+	__be16 sport;
+	__be16 dport;
+	union {
+		__u16 tot_len;
+		__u16 mtu_result;
+	};
+	__u32 ifindex;
+	union {
+		__u8 tos;
+		__be32 flowinfo;
+		__u32 rt_metric;
+	};
+	union {
+		__be32 ipv4_src;
+		__u32 ipv6_src[4];
+	};
+	union {
+		__be32 ipv4_dst;
+		__u32 ipv6_dst[4];
+	};
+	union {
+		struct {
+			__be16 h_vlan_proto;
+			__be16 h_vlan_TCI;
+		};
+		__u32 tbid;
+	};
+	__u8 smac[6];
+	__u8 dmac[6];
+};
+
+typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);
+
+typedef u64 (*btf_bpf_skb_check_mtu)(struct sk_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_xdp_check_mtu)(struct xdp_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);
+
+struct bpf_sock_tuple;
+
+typedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+struct bpf_sock_tuple {
+	union {
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+			__be16 sport;
+			__be16 dport;
+		} ipv4;
+		struct {
+			__be32 saddr[4];
+			__be32 daddr[4];
+			__be16 sport;
+			__be16 dport;
+		} ipv6;
+	};
+};
+
+typedef u64 (*btf_bpf_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_tc_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_tc_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_tc_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_release)(struct sock *);
+
+typedef u64 (*btf_bpf_xdp_sk_lookup_udp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_skc_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_sk_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_sock_addr_skc_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sock_addr_sk_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sock_addr_sk_lookup_udp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+struct bpf_tcp_sock {
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	__u32 dsack_dups;
+	__u32 delivered;
+	__u32 delivered_ce;
+	__u32 icsk_retransmits;
+};
+
+typedef u64 (*btf_bpf_tcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_listener_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skb_ecn_set_ce)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_tcp_check_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_gen_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_sk_assign)(struct sk_buff *, struct sock *, u64);
+
+typedef u64 (*btf_bpf_sock_ops_load_hdr_opt)(struct bpf_sock_ops_kern *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_ops_store_hdr_opt)(struct bpf_sock_ops_kern *, const void *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_set_tstamp)(struct sk_buff *, u64, u32);
+
+typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);
+
+typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);
+
+typedef u64 (*btf_sk_reuseport_load_bytes_relative)(const struct sk_reuseport_kern *, u32, void *, u32, u32);
+
+typedef u64 (*btf_bpf_sk_lookup_assign)(struct bpf_sk_lookup_kern *, struct sock *, u64);
+
+typedef u64 (*btf_bpf_skc_to_tcp6_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_timewait_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_request_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_unix_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_mptcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_sock_from_file)(struct file *);
+
+struct strp_msg {
+	int full_len;
+	int offset;
+};
+
+struct tls_strparser {
+	struct sock *sk;
+	u32 mark: 8;
+	u32 stopped: 1;
+	u32 copy_mode: 1;
+	u32 mixed_decrypted: 1;
+	bool msg_ready;
+	struct strp_msg stm;
+	struct sk_buff *anchor;
+	struct work_struct work;
+};
+
+struct tls_sw_context_rx {
+	struct crypto_aead *aead_recv;
+	struct crypto_wait async_wait;
+	struct sk_buff_head rx_list;
+	void (*saved_data_ready)(struct sock *);
+	u8 reader_present;
+	u8 async_capable: 1;
+	u8 zc_capable: 1;
+	u8 reader_contended: 1;
+	struct tls_strparser strp;
+	atomic_t decrypt_pending;
+	struct sk_buff_head async_hold;
+	struct wait_queue_head wq;
+	u64 android_kabi_reserved1;
+};
+
+struct tcp6_sock {
+	struct tcp_sock tcp;
+	struct ipv6_pinfo inet6;
+};
+
+struct inet_timewait_sock {
+	struct sock_common __tw_common;
+	__u32 tw_mark;
+	volatile unsigned char tw_substate;
+	unsigned char tw_rcv_wscale;
+	__be16 tw_sport;
+	unsigned int tw_transparent: 1;
+	unsigned int tw_flowlabel: 20;
+	unsigned int tw_pad: 3;
+	unsigned int tw_tos: 8;
+	u32 tw_txhash;
+	u32 tw_priority;
+	struct timer_list tw_timer;
+	struct inet_bind_bucket *tw_tb;
+	struct inet_bind2_bucket *tw_tb2;
+	struct hlist_node tw_bind2_node;
+};
+
+struct tcp_timewait_sock {
+	struct inet_timewait_sock tw_sk;
+	u32 tw_rcv_wnd;
+	u32 tw_ts_offset;
+	u32 tw_ts_recent;
+	u32 tw_last_oow_ack_time;
+	int tw_ts_recent_stamp;
+	u32 tw_tx_delay;
+};
+
+struct udp6_sock {
+	struct udp_sock udp;
+	struct ipv6_pinfo inet6;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct mptcp_sock {};
+
+struct tls_prot_info {
+	u16 version;
+	u16 cipher_type;
+	u16 prepend_size;
+	u16 tag_size;
+	u16 overhead_size;
+	u16 iv_size;
+	u16 salt_size;
+	u16 rec_seq_size;
+	u16 aad_size;
+	u16 tail_size;
+};
+
+struct cipher_context {
+	char *iv;
+	char *rec_seq;
+};
+
+struct tls_crypto_info {
+	__u16 version;
+	__u16 cipher_type;
+};
+
+struct tls12_crypto_info_aes_gcm_128 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_aes_gcm_256 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[32];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_chacha20_poly1305 {
+	struct tls_crypto_info info;
+	unsigned char iv[12];
+	unsigned char key[32];
+	unsigned char salt[0];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_gcm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_ccm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+union tls_crypto_context {
+	struct tls_crypto_info info;
+	union {
+		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
+		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
+		struct tls12_crypto_info_chacha20_poly1305 chacha20_poly1305;
+		struct tls12_crypto_info_sm4_gcm sm4_gcm;
+		struct tls12_crypto_info_sm4_ccm sm4_ccm;
+	};
+};
+
+struct tls_context {
+	struct tls_prot_info prot_info;
+	u8 tx_conf: 3;
+	u8 rx_conf: 3;
+	u8 zerocopy_sendfile: 1;
+	u8 rx_no_pad: 1;
+	int (*push_pending_record)(struct sock *, int);
+	void (*sk_write_space)(struct sock *);
+	void *priv_ctx_tx;
+	void *priv_ctx_rx;
+	struct net_device __attribute__((btf_type_tag("rcu"))) *netdev;
+	struct cipher_context tx;
+	struct cipher_context rx;
+	struct scatterlist *partially_sent_record;
+	u16 partially_sent_offset;
+	bool splicing_pages;
+	bool pending_open_record_frags;
+	struct mutex tx_lock;
+	unsigned long flags;
+	struct proto *sk_proto;
+	struct sock *sk;
+	void (*sk_destruct)(struct sock *);
+	union tls_crypto_context crypto_send;
+	union tls_crypto_context crypto_recv;
+	struct list_head list;
+	refcount_t refcount;
+	struct callback_head rcu;
+};
+
+struct fib_result {
+	__be32 prefix;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	u32 tclassid;
+	struct fib_nh_common *nhc;
+	struct fib_info *fi;
+	struct fib_table *table;
+	struct hlist_head *fa_head;
+};
+
+struct fib6_result {
+	struct fib6_nh *nh;
+	struct fib6_info *f6i;
+	u32 fib6_flags;
+	u8 fib6_type;
+	struct rt6_info *rt6;
+};
+
+struct sock_diag_handler {
+	__u8 family;
+	int (*dump)(struct sk_buff *, struct nlmsghdr *);
+	int (*get_info)(struct sk_buff *, struct sock *);
+	int (*destroy)(struct sk_buff *, struct nlmsghdr *);
+};
+
+struct broadcast_sk {
+	struct sock *sk;
+	struct work_struct work;
+};
+
+struct sock_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+};
+
+enum hwtstamp_tx_types {
+	HWTSTAMP_TX_OFF = 0,
+	HWTSTAMP_TX_ON = 1,
+	HWTSTAMP_TX_ONESTEP_SYNC = 2,
+	HWTSTAMP_TX_ONESTEP_P2P = 3,
+	__HWTSTAMP_TX_CNT = 4,
+};
+
+enum hwtstamp_rx_filters {
+	HWTSTAMP_FILTER_NONE = 0,
+	HWTSTAMP_FILTER_ALL = 1,
+	HWTSTAMP_FILTER_SOME = 2,
+	HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,
+	HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,
+	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,
+	HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,
+	HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,
+	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,
+	HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,
+	HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,
+	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,
+	HWTSTAMP_FILTER_PTP_V2_EVENT = 12,
+	HWTSTAMP_FILTER_PTP_V2_SYNC = 13,
+	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,
+	HWTSTAMP_FILTER_NTP_ALL = 15,
+	__HWTSTAMP_FILTER_CNT = 16,
+};
+
+enum hwtstamp_flags {
+	HWTSTAMP_FLAG_BONDED_PHC_INDEX = 1,
+	HWTSTAMP_FLAG_LAST = 1,
+	HWTSTAMP_FLAG_MASK = 1,
+};
+
+struct hwtstamp_config {
+	int flags;
+	int tx_type;
+	int rx_filter;
+};
+
+struct compat_ifconf {
+	compat_int_t ifc_len;
+	compat_caddr_t ifcbuf;
+};
+
+struct tso_t {
+	int next_frag_idx;
+	int size;
+	void *data;
+	u16 ip_id;
+	u8 tlen;
+	bool ipv6;
+	u32 tcp_seq;
+};
+
+enum fib_event_type {
+	FIB_EVENT_ENTRY_REPLACE = 0,
+	FIB_EVENT_ENTRY_APPEND = 1,
+	FIB_EVENT_ENTRY_ADD = 2,
+	FIB_EVENT_ENTRY_DEL = 3,
+	FIB_EVENT_RULE_ADD = 4,
+	FIB_EVENT_RULE_DEL = 5,
+	FIB_EVENT_NH_ADD = 6,
+	FIB_EVENT_NH_DEL = 7,
+	FIB_EVENT_VIF_ADD = 8,
+	FIB_EVENT_VIF_DEL = 9,
+};
+
+struct fib_notifier_net {
+	struct list_head fib_notifier_ops;
+	struct atomic_notifier_head fib_chain;
+};
+
+struct fib_notifier_info {
+	int family;
+	struct netlink_ext_ack *extack;
+};
+
+struct xdp_frame_bulk {
+	int count;
+	void *xa;
+	void *q[16];
+};
+
+struct xdp_attachment_info {
+	struct bpf_prog *prog;
+	u32 flags;
+};
+
+enum flow_action_id {
+	FLOW_ACTION_ACCEPT = 0,
+	FLOW_ACTION_DROP = 1,
+	FLOW_ACTION_TRAP = 2,
+	FLOW_ACTION_GOTO = 3,
+	FLOW_ACTION_REDIRECT = 4,
+	FLOW_ACTION_MIRRED = 5,
+	FLOW_ACTION_REDIRECT_INGRESS = 6,
+	FLOW_ACTION_MIRRED_INGRESS = 7,
+	FLOW_ACTION_VLAN_PUSH = 8,
+	FLOW_ACTION_VLAN_POP = 9,
+	FLOW_ACTION_VLAN_MANGLE = 10,
+	FLOW_ACTION_TUNNEL_ENCAP = 11,
+	FLOW_ACTION_TUNNEL_DECAP = 12,
+	FLOW_ACTION_MANGLE = 13,
+	FLOW_ACTION_ADD = 14,
+	FLOW_ACTION_CSUM = 15,
+	FLOW_ACTION_MARK = 16,
+	FLOW_ACTION_PTYPE = 17,
+	FLOW_ACTION_PRIORITY = 18,
+	FLOW_ACTION_RX_QUEUE_MAPPING = 19,
+	FLOW_ACTION_WAKE = 20,
+	FLOW_ACTION_QUEUE = 21,
+	FLOW_ACTION_SAMPLE = 22,
+	FLOW_ACTION_POLICE = 23,
+	FLOW_ACTION_CT = 24,
+	FLOW_ACTION_CT_METADATA = 25,
+	FLOW_ACTION_MPLS_PUSH = 26,
+	FLOW_ACTION_MPLS_POP = 27,
+	FLOW_ACTION_MPLS_MANGLE = 28,
+	FLOW_ACTION_GATE = 29,
+	FLOW_ACTION_PPPOE_PUSH = 30,
+	FLOW_ACTION_JUMP = 31,
+	FLOW_ACTION_PIPE = 32,
+	FLOW_ACTION_VLAN_PUSH_ETH = 33,
+	FLOW_ACTION_VLAN_POP_ETH = 34,
+	FLOW_ACTION_CONTINUE = 35,
+	NUM_FLOW_ACTIONS = 36,
+};
+
+enum flow_action_hw_stats {
+	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
+	FLOW_ACTION_HW_STATS_DELAYED = 2,
+	FLOW_ACTION_HW_STATS_ANY = 3,
+	FLOW_ACTION_HW_STATS_DISABLED = 4,
+	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
+};
+
+enum flow_action_mangle_base {
+	FLOW_ACT_MANGLE_UNSPEC = 0,
+	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
+	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
+	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
+};
+
+enum offload_act_command {
+	FLOW_ACT_REPLACE = 0,
+	FLOW_ACT_DESTROY = 1,
+	FLOW_ACT_STATS = 2,
+};
+
+enum flow_block_binder_type {
+	FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,
+	FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3,
+	FLOW_BLOCK_BINDER_TYPE_RED_MARK = 4,
+};
+
+enum flow_block_command {
+	FLOW_BLOCK_BIND = 0,
+	FLOW_BLOCK_UNBIND = 1,
+};
+
+struct flow_block_cb;
+
+struct flow_block_indr {
+	struct list_head list;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum flow_block_binder_type binder_type;
+	void *data;
+	void *cb_priv;
+	void (*cleanup)(struct flow_block_cb *);
+};
+
+struct flow_block_cb {
+	struct list_head driver_list;
+	struct list_head list;
+	flow_setup_cb_t *cb;
+	void *cb_ident;
+	void *cb_priv;
+	void (*release)(void *);
+	struct flow_block_indr indr;
+	unsigned int refcnt;
+};
+
+typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));
+
+struct flow_indr_dev {
+	struct list_head list;
+	flow_indr_block_bind_cb_t *cb;
+	void *cb_priv;
+	refcount_t refcnt;
+};
+
+struct flow_indir_dev_info {
+	void *data;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum tc_setup_type type;
+	void (*cleanup)(struct flow_block_cb *);
+	struct list_head list;
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	struct list_head *cb_list;
+};
+
+struct flow_block_offload {
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	bool block_shared;
+	bool unlocked_driver_cb;
+	struct net *net;
+	struct flow_block *block;
+	struct list_head cb_list;
+	struct list_head *driver_block_list;
+	struct netlink_ext_ack *extack;
+	struct Qdisc *sch;
+	struct list_head *cb_list_head;
+};
+
+struct flow_match {
+	struct flow_dissector *dissector;
+	void *mask;
+	void *key;
+};
+
+typedef void (*action_destr)(void *);
+
+struct nf_flowtable;
+
+struct action_gate_entry;
+
+struct flow_action_cookie;
+
+struct flow_action_entry {
+	enum flow_action_id id;
+	u32 hw_index;
+	unsigned long cookie;
+	u64 miss_cookie;
+	enum flow_action_hw_stats hw_stats;
+	action_destr destructor;
+	void *destructor_priv;
+	union {
+		u32 chain_index;
+		struct net_device *dev;
+		struct {
+			u16 vid;
+			__be16 proto;
+			u8 prio;
+		} vlan;
+		struct {
+			unsigned char dst[6];
+			unsigned char src[6];
+		} vlan_push_eth;
+		struct {
+			enum flow_action_mangle_base htype;
+			u32 offset;
+			u32 mask;
+			u32 val;
+		} mangle;
+		struct ip_tunnel_info *tunnel;
+		u32 csum_flags;
+		u32 mark;
+		u16 ptype;
+		u16 rx_queue;
+		u32 priority;
+		struct {
+			u32 ctx;
+			u32 index;
+			u8 vf;
+		} queue;
+		struct {
+			struct psample_group *psample_group;
+			u32 rate;
+			u32 trunc_size;
+			bool truncate;
+		} sample;
+		struct {
+			u32 burst;
+			u64 rate_bytes_ps;
+			u64 peakrate_bytes_ps;
+			u32 avrate;
+			u16 overhead;
+			u64 burst_pkt;
+			u64 rate_pkt_ps;
+			u32 mtu;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} exceed;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} notexceed;
+		} police;
+		struct {
+			int action;
+			u16 zone;
+			struct nf_flowtable *flow_table;
+		} ct;
+		struct {
+			unsigned long cookie;
+			u32 mark;
+			u32 labels[4];
+			bool orig_dir;
+		} ct_metadata;
+		struct {
+			u32 label;
+			__be16 proto;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_push;
+		struct {
+			__be16 proto;
+		} mpls_pop;
+		struct {
+			u32 label;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_mangle;
+		struct {
+			s32 prio;
+			u64 basetime;
+			u64 cycletime;
+			u64 cycletimeext;
+			u32 num_entries;
+			struct action_gate_entry *entries;
+		} gate;
+		struct {
+			u16 sid;
+		} pppoe;
+	};
+	struct flow_action_cookie *user_cookie;
+};
+
+struct flow_action {
+	unsigned int num_entries;
+	struct flow_action_entry entries[0];
+};
+
+struct flow_rule {
+	struct flow_match match;
+	struct flow_action action;
+};
+
+struct flow_action_cookie {
+	u32 cookie_len;
+	u8 cookie[0];
+};
+
+struct flow_stats {
+	u64 pkts;
+	u64 bytes;
+	u64 drops;
+	u64 lastused;
+	enum flow_action_hw_stats used_hw_stats;
+	bool used_hw_stats_valid;
+};
+
+struct flow_offload_action {
+	struct netlink_ext_ack *extack;
+	enum offload_act_command command;
+	enum flow_action_id id;
+	u32 index;
+	unsigned long cookie;
+	struct flow_stats stats;
+	struct flow_action action;
+};
+
+struct flow_match_meta {
+	struct flow_dissector_key_meta *key;
+	struct flow_dissector_key_meta *mask;
+};
+
+struct flow_match_basic {
+	struct flow_dissector_key_basic *key;
+	struct flow_dissector_key_basic *mask;
+};
+
+struct flow_match_control {
+	struct flow_dissector_key_control *key;
+	struct flow_dissector_key_control *mask;
+};
+
+struct flow_match_eth_addrs {
+	struct flow_dissector_key_eth_addrs *key;
+	struct flow_dissector_key_eth_addrs *mask;
+};
+
+struct flow_match_vlan {
+	struct flow_dissector_key_vlan *key;
+	struct flow_dissector_key_vlan *mask;
+};
+
+struct flow_match_arp {
+	struct flow_dissector_key_arp *key;
+	struct flow_dissector_key_arp *mask;
+};
+
+struct flow_match_ipv4_addrs {
+	struct flow_dissector_key_ipv4_addrs *key;
+	struct flow_dissector_key_ipv4_addrs *mask;
+};
+
+struct flow_match_ipv6_addrs {
+	struct flow_dissector_key_ipv6_addrs *key;
+	struct flow_dissector_key_ipv6_addrs *mask;
+};
+
+struct flow_match_ip {
+	struct flow_dissector_key_ip *key;
+	struct flow_dissector_key_ip *mask;
+};
+
+struct flow_match_ports {
+	struct flow_dissector_key_ports *key;
+	struct flow_dissector_key_ports *mask;
+};
+
+struct flow_dissector_key_ports_range;
+
+struct flow_match_ports_range {
+	struct flow_dissector_key_ports_range *key;
+	struct flow_dissector_key_ports_range *mask;
+};
+
+struct flow_dissector_key_ports_range {
+	union {
+		struct flow_dissector_key_ports tp;
+		struct {
+			struct flow_dissector_key_ports tp_min;
+			struct flow_dissector_key_ports tp_max;
+		};
+	};
+};
+
+struct flow_match_tcp {
+	struct flow_dissector_key_tcp *key;
+	struct flow_dissector_key_tcp *mask;
+};
+
+struct flow_match_ipsec {
+	struct flow_dissector_key_ipsec *key;
+	struct flow_dissector_key_ipsec *mask;
+};
+
+struct flow_match_icmp {
+	struct flow_dissector_key_icmp *key;
+	struct flow_dissector_key_icmp *mask;
+};
+
+struct flow_match_mpls {
+	struct flow_dissector_key_mpls *key;
+	struct flow_dissector_key_mpls *mask;
+};
+
+struct flow_match_enc_keyid {
+	struct flow_dissector_key_keyid *key;
+	struct flow_dissector_key_keyid *mask;
+};
+
+struct flow_match_enc_opts {
+	struct flow_dissector_key_enc_opts *key;
+	struct flow_dissector_key_enc_opts *mask;
+};
+
+struct flow_match_ct {
+	struct flow_dissector_key_ct *key;
+	struct flow_dissector_key_ct *mask;
+};
+
+struct flow_match_pppoe {
+	struct flow_dissector_key_pppoe *key;
+	struct flow_dissector_key_pppoe *mask;
+};
+
+struct flow_match_l2tpv3 {
+	struct flow_dissector_key_l2tpv3 *key;
+	struct flow_dissector_key_l2tpv3 *mask;
+};
+
+struct offload_callbacks {
+	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
+	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sk_buff *, int);
+};
+
+struct packet_offload {
+	__be16 type;
+	u16 priority;
+	struct offload_callbacks callbacks;
+	struct list_head list;
+};
+
+struct napi_gro_cb {
+	union {
+		struct {
+			void *frag0;
+			unsigned int frag0_len;
+		};
+		struct {
+			struct sk_buff *last;
+			unsigned long age;
+		};
+	};
+	int data_offset;
+	u16 flush;
+	u16 flush_id;
+	u16 count;
+	u16 proto;
+	union {
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		};
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		} zeroed;
+	};
+	__wsum csum;
+};
+
+enum {
+	NETDEV_A_DEV_IFINDEX = 1,
+	NETDEV_A_DEV_PAD = 2,
+	NETDEV_A_DEV_XDP_FEATURES = 3,
+	NETDEV_A_DEV_XDP_ZC_MAX_SEGS = 4,
+	__NETDEV_A_DEV_MAX = 5,
+	NETDEV_A_DEV_MAX = 4,
+};
+
+enum {
+	NETDEV_CMD_DEV_GET = 1,
+	NETDEV_CMD_DEV_ADD_NTF = 2,
+	NETDEV_CMD_DEV_DEL_NTF = 3,
+	NETDEV_CMD_DEV_CHANGE_NTF = 4,
+	__NETDEV_CMD_MAX = 5,
+	NETDEV_CMD_MAX = 4,
+};
+
+enum {
+	NETDEV_NLGRP_MGMT = 0,
+};
+
+struct rx_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_rx_queue *, char *);
+	ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);
+};
+
+struct netdev_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_queue *, char *);
+	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
+};
+
+enum {
+	FR_ACT_UNSPEC = 0,
+	FR_ACT_TO_TBL = 1,
+	FR_ACT_GOTO = 2,
+	FR_ACT_NOP = 3,
+	FR_ACT_RES3 = 4,
+	FR_ACT_RES4 = 5,
+	FR_ACT_BLACKHOLE = 6,
+	FR_ACT_UNREACHABLE = 7,
+	FR_ACT_PROHIBIT = 8,
+	__FR_ACT_MAX = 9,
+};
+
+enum {
+	FRA_UNSPEC = 0,
+	FRA_DST = 1,
+	FRA_SRC = 2,
+	FRA_IIFNAME = 3,
+	FRA_GOTO = 4,
+	FRA_UNUSED2 = 5,
+	FRA_PRIORITY = 6,
+	FRA_UNUSED3 = 7,
+	FRA_UNUSED4 = 8,
+	FRA_UNUSED5 = 9,
+	FRA_FWMARK = 10,
+	FRA_FLOW = 11,
+	FRA_TUN_ID = 12,
+	FRA_SUPPRESS_IFGROUP = 13,
+	FRA_SUPPRESS_PREFIXLEN = 14,
+	FRA_TABLE = 15,
+	FRA_FWMASK = 16,
+	FRA_OIFNAME = 17,
+	FRA_PAD = 18,
+	FRA_L3MDEV = 19,
+	FRA_UID_RANGE = 20,
+	FRA_PROTOCOL = 21,
+	FRA_IP_PROTO = 22,
+	FRA_SPORT_RANGE = 23,
+	FRA_DPORT_RANGE = 24,
+	__FRA_MAX = 25,
+};
+
+struct fib_rule_uid_range {
+	__u32 start;
+	__u32 end;
+};
+
+struct fib_rule_notifier_info {
+	struct fib_notifier_info info;
+	struct fib_rule *rule;
+};
+
+typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *, enum skb_drop_reason);
+
+typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *, void *);
+
+typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);
+
+typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);
+
+typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);
+
+typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);
+
+typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
+
+typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_exit)(void *, int);
+
+typedef void (*btf_trace_netif_rx_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
+
+typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);
+
+typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long, int);
+
+typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
+
+typedef void (*btf_trace_inet_sk_error_report)(void *, const struct sock *);
+
+typedef void (*btf_trace_sk_data_ready)(void *, const struct sock *);
+
+typedef void (*btf_trace_sock_send_length)(void *, struct sock *, int, int);
+
+typedef void (*btf_trace_sock_recv_length)(void *, struct sock *, int, int);
+
+typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);
+
+typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);
+
+typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_tcp_bad_csum)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_cong_state_set)(void *, struct sock *, const u8);
+
+typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);
+
+typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_enqueue)(void *, struct Qdisc *, const struct netdev_queue *, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32);
+
+typedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);
+
+struct net_bridge;
+
+struct net_bridge_port;
+
+typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);
+
+struct bridge_id {
+	unsigned char prio[2];
+	unsigned char addr[6];
+};
+
+typedef struct bridge_id bridge_id;
+
+struct bridge_mcast_other_query {
+	struct timer_list timer;
+	struct timer_list delay_timer;
+};
+
+struct bridge_mcast_own_query {
+	struct timer_list timer;
+	u32 startup_sent;
+};
+
+struct br_ip {
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+	} src;
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+		unsigned char mac_addr[6];
+	} dst;
+	__be16 proto;
+	__u16 vid;
+};
+
+struct bridge_mcast_querier {
+	struct br_ip addr;
+	int port_ifidx;
+	seqcount_spinlock_t seq;
+};
+
+struct net_bridge_vlan;
+
+struct net_bridge_mcast {
+	struct net_bridge *br;
+	struct net_bridge_vlan *vlan;
+	u32 multicast_last_member_count;
+	u32 multicast_startup_query_count;
+	u8 multicast_querier;
+	u8 multicast_igmp_version;
+	u8 multicast_router;
+	u8 multicast_mld_version;
+	unsigned long multicast_last_member_interval;
+	unsigned long multicast_membership_interval;
+	unsigned long multicast_querier_interval;
+	unsigned long multicast_query_interval;
+	unsigned long multicast_query_response_interval;
+	unsigned long multicast_startup_query_interval;
+	struct hlist_head ip4_mc_router_list;
+	struct timer_list ip4_mc_router_timer;
+	struct bridge_mcast_other_query ip4_other_query;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct bridge_mcast_querier ip4_querier;
+	struct hlist_head ip6_mc_router_list;
+	struct timer_list ip6_mc_router_timer;
+	struct bridge_mcast_other_query ip6_other_query;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct bridge_mcast_querier ip6_querier;
+};
+
+struct bridge_mcast_stats;
+
+struct net_bridge {
+	spinlock_t lock;
+	spinlock_t hash_lock;
+	struct hlist_head frame_type_list;
+	struct net_device *dev;
+	unsigned long options;
+	struct rhashtable fdb_hash_tbl;
+	struct list_head port_list;
+	u16 group_fwd_mask;
+	u16 group_fwd_mask_required;
+	bridge_id designated_root;
+	bridge_id bridge_id;
+	unsigned char topology_change;
+	unsigned char topology_change_detected;
+	u16 root_port;
+	unsigned long max_age;
+	unsigned long hello_time;
+	unsigned long forward_delay;
+	unsigned long ageing_time;
+	unsigned long bridge_max_age;
+	unsigned long bridge_hello_time;
+	unsigned long bridge_forward_delay;
+	unsigned long bridge_ageing_time;
+	u32 root_path_cost;
+	u8 group_addr[6];
+	enum {
+		BR_NO_STP = 0,
+		BR_KERNEL_STP = 1,
+		BR_USER_STP = 2,
+	} stp_enabled;
+	struct net_bridge_mcast multicast_ctx;
+	struct bridge_mcast_stats __attribute__((btf_type_tag("percpu"))) *mcast_stats;
+	u32 hash_max;
+	spinlock_t multicast_lock;
+	struct rhashtable mdb_hash_tbl;
+	struct rhashtable sg_port_tbl;
+	struct hlist_head mcast_gc_list;
+	struct hlist_head mdb_list;
+	struct work_struct mcast_gc_work;
+	struct timer_list hello_timer;
+	struct timer_list tcn_timer;
+	struct timer_list topology_change_timer;
+	struct delayed_work gc_work;
+	struct kobject *ifobj;
+	u32 auto_cnt;
+	struct hlist_head fdb_list;
+};
+
+struct net_bridge_mcast_port {
+	struct net_bridge_port *port;
+	struct net_bridge_vlan *vlan;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct timer_list ip4_mc_router_timer;
+	struct hlist_node ip4_rlist;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct timer_list ip6_mc_router_timer;
+	struct hlist_node ip6_rlist;
+	unsigned char multicast_router;
+	u32 mdb_n_entries;
+	u32 mdb_max_entries;
+};
+
+struct br_tunnel_info {
+	__be64 tunnel_id;
+	struct metadata_dst __attribute__((btf_type_tag("rcu"))) *tunnel_dst;
+};
+
+struct net_bridge_vlan {
+	struct rhash_head vnode;
+	struct rhash_head tnode;
+	u16 vid;
+	u16 flags;
+	u16 priv_flags;
+	u8 state;
+	struct pcpu_sw_netstats __attribute__((btf_type_tag("percpu"))) *stats;
+	union {
+		struct net_bridge *br;
+		struct net_bridge_port *port;
+	};
+	union {
+		refcount_t refcnt;
+		struct net_bridge_vlan *brvlan;
+	};
+	struct br_tunnel_info tinfo;
+	union {
+		struct net_bridge_mcast br_mcast_ctx;
+		struct net_bridge_mcast_port port_mcast_ctx;
+	};
+	u16 msti;
+	struct list_head vlist;
+	struct callback_head rcu;
+};
+
+typedef __u16 port_id;
+
+struct bridge_stp_xstats {
+	__u64 transition_blk;
+	__u64 transition_fwd;
+	__u64 rx_bpdu;
+	__u64 tx_bpdu;
+	__u64 rx_tcn;
+	__u64 tx_tcn;
+};
+
+struct net_bridge_port {
+	struct net_bridge *br;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	unsigned long flags;
+	struct net_bridge_port __attribute__((btf_type_tag("rcu"))) *backup_port;
+	u32 backup_nhid;
+	u8 priority;
+	u8 state;
+	u16 port_no;
+	unsigned char topology_change_ack;
+	unsigned char config_pending;
+	port_id port_id;
+	port_id designated_port;
+	bridge_id designated_root;
+	bridge_id designated_bridge;
+	u32 path_cost;
+	u32 designated_cost;
+	unsigned long designated_age;
+	struct timer_list forward_delay_timer;
+	struct timer_list hold_timer;
+	struct timer_list message_age_timer;
+	struct kobject kobj;
+	struct callback_head rcu;
+	struct net_bridge_mcast_port multicast_ctx;
+	struct bridge_mcast_stats __attribute__((btf_type_tag("percpu"))) *mcast_stats;
+	u32 multicast_eht_hosts_limit;
+	u32 multicast_eht_hosts_cnt;
+	struct hlist_head mglist;
+	char sysfs_name[16];
+	u16 group_fwd_mask;
+	u16 backup_redirected_cnt;
+	struct bridge_stp_xstats stp_xstats;
+};
+
+struct br_mcast_stats {
+	__u64 igmp_v1queries[2];
+	__u64 igmp_v2queries[2];
+	__u64 igmp_v3queries[2];
+	__u64 igmp_leaves[2];
+	__u64 igmp_v1reports[2];
+	__u64 igmp_v2reports[2];
+	__u64 igmp_v3reports[2];
+	__u64 igmp_parse_errors;
+	__u64 mld_v1queries[2];
+	__u64 mld_v2queries[2];
+	__u64 mld_leaves[2];
+	__u64 mld_v1reports[2];
+	__u64 mld_v2reports[2];
+	__u64 mld_parse_errors;
+	__u64 mcast_bytes[2];
+	__u64 mcast_packets[2];
+};
+
+struct bridge_mcast_stats {
+	struct br_mcast_stats mstats;
+	struct u64_stats_sync syncp;
+};
+
+struct net_bridge_fdb_entry;
+
+typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);
+
+struct mac_addr {
+	unsigned char addr[6];
+};
+
+typedef struct mac_addr mac_addr;
+
+struct net_bridge_fdb_key {
+	mac_addr addr;
+	u16 vlan_id;
+};
+
+struct net_bridge_fdb_entry {
+	struct rhash_head rhnode;
+	struct net_bridge_port *dst;
+	struct net_bridge_fdb_key key;
+	struct hlist_node fdb_node;
+	unsigned long flags;
+	long: 64;
+	long: 64;
+	unsigned long updated;
+	unsigned long used;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, unsigned long);
+
+typedef void (*btf_trace_br_mdb_full)(void *, const struct net_device *, const struct br_ip *);
+
+typedef void (*btf_trace_page_pool_release)(void *, const struct page_pool *, s32, u32, u32);
+
+typedef void (*btf_trace_page_pool_state_release)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_state_hold)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_update_nid)(void *, const struct page_pool *, int);
+
+typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);
+
+typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);
+
+typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
+
+enum tcp_ca_state {
+	TCP_CA_Open = 0,
+	TCP_CA_Disorder = 1,
+	TCP_CA_CWR = 2,
+	TCP_CA_Recovery = 3,
+	TCP_CA_Loss = 4,
+};
+
+struct trace_event_raw_kfree_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	void *location;
+	unsigned short protocol;
+	enum skb_drop_reason reason;
+	char __data[0];
+};
+
+struct trace_event_raw_consume_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	void *location;
+	char __data[0];
+};
+
+struct trace_event_raw_skb_copy_datagram_iovec {
+	struct trace_entry ent;
+	const void *skbaddr;
+	int len;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_start_xmit {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	unsigned int len;
+	unsigned int data_len;
+	int network_offset;
+	bool transport_offset_valid;
+	int transport_offset;
+	u8 tx_flags;
+	u16 gso_size;
+	u16 gso_segs;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	int rc;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit_timeout {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_driver;
+	int queue_index;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_template {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_verbose_template {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int napi_id;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	u32 hash;
+	bool l4_hash;
+	unsigned int len;
+	unsigned int data_len;
+	unsigned int truesize;
+	bool mac_header_valid;
+	int mac_header;
+	unsigned char nr_frags;
+	u16 gso_size;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_exit_template {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_napi_poll {
+	struct trace_entry ent;
+	struct napi_struct *napi;
+	u32 __data_loc_dev_name;
+	int work;
+	int budget;
+	char __data[0];
+};
+
+struct trace_event_raw_sock_rcvqueue_full {
+	struct trace_entry ent;
+	int rmem_alloc;
+	unsigned int truesize;
+	int sk_rcvbuf;
+	char __data[0];
+};
+
+struct trace_event_raw_sock_exceed_buf_limit {
+	struct trace_entry ent;
+	char name[32];
+	long sysctl_mem[3];
+	long allocated;
+	int sysctl_rmem;
+	int rmem_alloc;
+	int sysctl_wmem;
+	int wmem_alloc;
+	int wmem_queued;
+	int kind;
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sock_set_state {
+	struct trace_entry ent;
+	const void *skaddr;
+	int oldstate;
+	int newstate;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sk_error_report {
+	struct trace_entry ent;
+	int error;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_sk_data_ready {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 family;
+	__u16 protocol;
+	unsigned long ip;
+	char __data[0];
+};
+
+struct trace_event_raw_sock_msg_length {
+	struct trace_entry ent;
+	void *sk;
+	__u16 family;
+	__u16 protocol;
+	int ret;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_udp_fail_queue_rcv_skb {
+	struct trace_entry ent;
+	int rc;
+	__u16 lport;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_sk_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	const void *skaddr;
+	int state;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_sk {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_retransmit_synack {
+	struct trace_entry ent;
+	const void *skaddr;
+	const void *req;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_probe {
+	struct trace_entry ent;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u32 mark;
+	__u16 data_len;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 snd_cwnd;
+	__u32 ssthresh;
+	__u32 snd_wnd;
+	__u32 srtt;
+	__u32 rcv_wnd;
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_cong_state_set {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u8 cong_state;
+	char __data[0];
+};
+
+struct trace_event_raw_fib_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	u8 proto;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[4];
+	__u8 dst[4];
+	__u8 gw4[4];
+	__u8 gw6[16];
+	u16 sport;
+	u16 dport;
+	char name[16];
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_dequeue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	int packets;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	unsigned long txq_state;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_enqueue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_reset {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_destroy {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_create {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_add {
+	struct trace_entry ent;
+	u8 ndm_flags;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	u16 nlh_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_external_learn_add {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_fdb_delete {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_update {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	unsigned long flags;
+	char __data[0];
+};
+
+struct trace_event_raw_br_mdb_full {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	int af;
+	u16 vid;
+	__u8 src[16];
+	__u8 grp[16];
+	__u8 grpmac[6];
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	s32 inflight;
+	u32 hold;
+	u32 release;
+	u64 cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 release;
+	unsigned long pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_hold {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 hold;
+	unsigned long pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_update_nid {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	int pool_nid;
+	int new_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_neigh_create {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	int entries;
+	u8 created;
+	u8 gc_exempt;
+	u8 primary_key4[4];
+	u8 primary_key6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_neigh_update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	unsigned long confirmed;
+	unsigned long updated;
+	unsigned long used;
+	u8 new_lladdr[32];
+	u8 new_state;
+	u32 update_flags;
+	u32 pid;
+	char __data[0];
+};
+
+struct trace_event_raw_neigh__update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	unsigned long confirmed;
+	unsigned long updated;
+	unsigned long used;
+	u32 err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_net_dev_start_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_rx_verbose_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_napi_poll {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_br_fdb_add {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_mdb_full {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh_create {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh_update {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh__update {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_kfree_skb {};
+
+struct trace_event_data_offsets_consume_skb {};
+
+struct trace_event_data_offsets_skb_copy_datagram_iovec {};
+
+struct trace_event_data_offsets_net_dev_xmit_timeout {
+	u32 name;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_net_dev_rx_exit_template {};
+
+struct trace_event_data_offsets_sock_rcvqueue_full {};
+
+struct trace_event_data_offsets_sock_exceed_buf_limit {};
+
+struct trace_event_data_offsets_inet_sock_set_state {};
+
+struct trace_event_data_offsets_inet_sk_error_report {};
+
+struct trace_event_data_offsets_sk_data_ready {};
+
+struct trace_event_data_offsets_sock_msg_length {};
+
+struct trace_event_data_offsets_udp_fail_queue_rcv_skb {};
+
+struct trace_event_data_offsets_tcp_event_sk_skb {};
+
+struct trace_event_data_offsets_tcp_event_sk {};
+
+struct trace_event_data_offsets_tcp_retransmit_synack {};
+
+struct trace_event_data_offsets_tcp_probe {};
+
+struct trace_event_data_offsets_tcp_event_skb {};
+
+struct trace_event_data_offsets_tcp_cong_state_set {};
+
+struct trace_event_data_offsets_fib_table_lookup {};
+
+struct trace_event_data_offsets_qdisc_dequeue {};
+
+struct trace_event_data_offsets_qdisc_enqueue {};
+
+struct trace_event_data_offsets_qdisc_reset {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_destroy {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_create {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_br_fdb_external_learn_add {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_fdb_delete {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_fdb_update {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_page_pool_release {};
+
+struct trace_event_data_offsets_page_pool_state_release {};
+
+struct trace_event_data_offsets_page_pool_state_hold {};
+
+struct trace_event_data_offsets_page_pool_update_nid {};
+
+struct net_test {
+	char name[32];
+	int (*fn)(struct net_device *);
+};
+
+enum ethtool_test_flags {
+	ETH_TEST_FL_OFFLINE = 1,
+	ETH_TEST_FL_FAILED = 2,
+	ETH_TEST_FL_EXTERNAL_LB = 4,
+	ETH_TEST_FL_EXTERNAL_LB_DONE = 8,
+};
+
+struct netsfhdr {
+	__be32 version;
+	__be64 magic;
+	u8 id;
+} __attribute__((packed));
+
+struct net_packet_attrs {
+	const unsigned char *src;
+	const unsigned char *dst;
+	u32 ip_src;
+	u32 ip_dst;
+	bool tcp;
+	u16 sport;
+	u16 dport;
+	int timeout;
+	int size;
+	int max_size;
+	u8 id;
+	u16 queue_mapping;
+};
+
+struct net_test_priv {
+	struct net_packet_attrs *packet;
+	struct packet_type pt;
+	struct completion comp;
+	int double_vlan;
+	int vlan_id;
+	int ok;
+};
+
+struct gro_cell {
+	struct sk_buff_head napi_skbs;
+	struct napi_struct napi;
+};
+
+struct percpu_free_defer {
+	struct callback_head rcu;
+	void __attribute__((btf_type_tag("percpu"))) *ptr;
+};
+
+struct gro_cells {
+	struct gro_cell __attribute__((btf_type_tag("percpu"))) *cells;
+};
+
+enum __sk_action {
+	__SK_DROP = 0,
+	__SK_PASS = 1,
+	__SK_REDIRECT = 2,
+	__SK_NONE = 3,
+};
+
+enum sk_psock_state_bits {
+	SK_PSOCK_TX_ENABLED = 0,
+	SK_PSOCK_RX_STRP_ENABLED = 1,
+};
+
+struct sk_psock_link {
+	struct list_head list;
+	struct bpf_map *map;
+	void *link_raw;
+};
+
+typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
+
+struct bpf_stab {
+	struct bpf_map map;
+	struct sock **sks;
+	struct sk_psock_progs progs;
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_shtab_bucket;
+
+struct bpf_shtab {
+	struct bpf_map map;
+	struct bpf_shtab_bucket *buckets;
+	u32 buckets_num;
+	u32 elem_size;
+	struct sk_psock_progs progs;
+	atomic_t count;
+	long: 64;
+};
+
+struct bpf_shtab_bucket {
+	struct hlist_head head;
+	spinlock_t lock;
+};
+
+struct bpf_shtab_elem {
+	struct callback_head rcu;
+	u32 hash;
+	struct sock *sk;
+	struct hlist_node node;
+	u8 key[0];
+};
+
+struct sock_map_seq_info {
+	struct bpf_map *map;
+	struct sock *sk;
+	u32 index;
+};
+
+struct bpf_iter__sockmap {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		struct sock *sk;
+	};
+};
+
+struct sock_hash_seq_info {
+	struct bpf_map *map;
+	struct bpf_shtab *htab;
+	u32 bucket_id;
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_REQ_NONE = 0,
+	SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1,
+	__SK_DIAG_BPF_STORAGE_REQ_MAX = 2,
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_REP_NONE = 0,
+	SK_DIAG_BPF_STORAGE = 1,
+	__SK_DIAG_BPF_STORAGE_REP_MAX = 2,
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_NONE = 0,
+	SK_DIAG_BPF_STORAGE_PAD = 1,
+	SK_DIAG_BPF_STORAGE_MAP_ID = 2,
+	SK_DIAG_BPF_STORAGE_MAP_VALUE = 3,
+	__SK_DIAG_BPF_STORAGE_MAX = 4,
+};
+
+typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);
+
+typedef u64 (*btf_bpf_sk_storage_get_tracing)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete_tracing)(struct bpf_map *, struct sock *);
+
+struct bpf_sk_storage_diag {
+	u32 nr_maps;
+	struct bpf_map *maps[0];
+};
+
+struct bpf_iter_seq_sk_storage_map_info {
+	struct bpf_map *map;
+	unsigned int bucket_id;
+	unsigned int skip_elems;
+};
+
+struct bpf_iter__bpf_sk_storage_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		struct sock *sk;
+	};
+	union {
+		void *value;
+	};
+};
+
+struct compat_cmsghdr {
+	compat_size_t cmsg_len;
+	compat_int_t cmsg_level;
+	compat_int_t cmsg_type;
+};
+
+struct llc_addr {
+	unsigned char lsap;
+	unsigned char mac[6];
+};
+
+struct llc_sap {
+	unsigned char state;
+	unsigned char p_bit;
+	unsigned char f_bit;
+	refcount_t refcnt;
+	int (*rcv_func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	struct llc_addr laddr;
+	struct list_head node;
+	spinlock_t sk_lock;
+	int sk_count;
+	struct hlist_nulls_head sk_laddr_hash[64];
+	struct hlist_head sk_dev_hash[64];
+	struct callback_head rcu;
+};
+
+struct llc_pdu_un {
+	u8 dsap;
+	u8 ssap;
+	u8 ctrl_1;
+};
+
+struct llc_pdu_sn {
+	u8 dsap;
+	u8 ssap;
+	u8 ctrl_1;
+	u8 ctrl_2;
+};
+
+struct datalink_proto {
+	unsigned char type[8];
+	struct llc_sap *sap;
+	unsigned short header_length;
+	int (*rcvfunc)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	int (*request)(struct datalink_proto *, struct sk_buff *, const unsigned char *);
+	struct list_head node;
+};
+
+struct stp_proto {
+	unsigned char group_address[6];
+	void (*rcv)(const struct stp_proto *, struct sk_buff *, struct net_device *);
+	void *data;
+};
+
+enum {
+	TCA_UNSPEC = 0,
+	TCA_KIND = 1,
+	TCA_OPTIONS = 2,
+	TCA_STATS = 3,
+	TCA_XSTATS = 4,
+	TCA_RATE = 5,
+	TCA_FCNT = 6,
+	TCA_STATS2 = 7,
+	TCA_STAB = 8,
+	TCA_PAD = 9,
+	TCA_DUMP_INVISIBLE = 10,
+	TCA_CHAIN = 11,
+	TCA_HW_OFFLOAD = 12,
+	TCA_INGRESS_BLOCK = 13,
+	TCA_EGRESS_BLOCK = 14,
+	TCA_DUMP_FLAGS = 15,
+	TCA_EXT_WARN_MSG = 16,
+	__TCA_MAX = 17,
+};
+
+struct skb_array {
+	struct ptr_ring ring;
+};
+
+struct pfifo_fast_priv {
+	struct skb_array q[3];
+};
+
+struct tc_prio_qopt {
+	int bands;
+	__u8 priomap[16];
+};
+
+struct psched_ratecfg {
+	u64 rate_bytes_ps;
+	u32 mult;
+	u16 overhead;
+	u16 mpu;
+	u8 linklayer;
+	u8 shift;
+};
+
+struct tc_ratespec {
+	unsigned char cell_log;
+	__u8 linklayer;
+	unsigned short overhead;
+	short cell_align;
+	unsigned short mpu;
+	__u32 rate;
+};
+
+struct psched_pktrate {
+	u64 rate_pkts_ps;
+	u32 mult;
+	u8 shift;
+};
+
+struct mini_Qdisc_pair {
+	struct mini_Qdisc miniq1;
+	struct mini_Qdisc miniq2;
+	struct mini_Qdisc __attribute__((btf_type_tag("rcu"))) **p_miniq;
+};
+
+enum tc_mq_command {
+	TC_MQ_CREATE = 0,
+	TC_MQ_DESTROY = 1,
+	TC_MQ_STATS = 2,
+	TC_MQ_GRAFT = 3,
+};
+
+struct tc_qopt_offload_stats {
+	struct gnet_stats_basic_sync *bstats;
+	struct gnet_stats_queue *qstats;
+};
+
+struct tc_mq_opt_offload_graft_params {
+	unsigned long queue;
+	u32 child_handle;
+};
+
+struct tc_mq_qopt_offload {
+	enum tc_mq_command command;
+	u32 handle;
+	union {
+		struct tc_qopt_offload_stats stats;
+		struct tc_mq_opt_offload_graft_params graft_params;
+	};
+};
+
+struct mq_sched {
+	struct Qdisc **qdiscs;
+};
+
+struct sch_frag_data {
+	unsigned long dst;
+	struct qdisc_skb_cb cb;
+	__be16 inner_protocol;
+	u16 vlan_tci;
+	__be16 vlan_proto;
+	unsigned int l2_len;
+	u8 l2_data[18];
+	int (*xmit)(struct sk_buff *);
+};
+
+struct qdisc_rate_table {
+	struct tc_ratespec rate;
+	u32 data[256];
+	struct qdisc_rate_table *next;
+	int refcnt;
+};
+
+enum tc_link_layer {
+	TC_LINKLAYER_UNAWARE = 0,
+	TC_LINKLAYER_ETHERNET = 1,
+	TC_LINKLAYER_ATM = 2,
+};
+
+enum {
+	TCA_STAB_UNSPEC = 0,
+	TCA_STAB_BASE = 1,
+	TCA_STAB_DATA = 2,
+	__TCA_STAB_MAX = 3,
+};
+
+enum tc_root_command {
+	TC_ROOT_GRAFT = 0,
+};
+
+struct Qdisc_class_common {
+	u32 classid;
+	unsigned int filter_cnt;
+	struct hlist_node hnode;
+};
+
+struct qdisc_watchdog {
+	struct hrtimer timer;
+	struct Qdisc *qdisc;
+};
+
+struct check_loop_arg {
+	struct qdisc_walker w;
+	struct Qdisc *p;
+	int depth;
+};
+
+struct tc_bind_class_args {
+	struct qdisc_walker w;
+	unsigned long new_cl;
+	u32 portid;
+	u32 clid;
+};
+
+struct qdisc_dump_args {
+	struct qdisc_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+};
+
+struct tc_root_qopt_offload {
+	enum tc_root_command command;
+	u32 handle;
+	bool ingress;
+};
+
+struct Qdisc_class_hash {
+	struct hlist_head *hash;
+	unsigned int hashsize;
+	unsigned int hashmask;
+	unsigned int hashelems;
+};
+
+struct tc_query_caps_base {
+	enum tc_setup_type type;
+	void *caps;
+};
+
+struct tcf_bind_args {
+	struct tcf_walker w;
+	unsigned long base;
+	unsigned long cl;
+	u32 classid;
+};
+
+enum net_xmit_qdisc_t {
+	__NET_XMIT_STOLEN = 65536,
+	__NET_XMIT_BYPASS = 131072,
+};
+
+struct psample_group {
+	struct list_head list;
+	struct net *net;
+	u32 group_num;
+	u32 refcount;
+	u32 seq;
+	struct callback_head rcu;
+};
+
+struct tcf_exts_miss_cookie_node {
+	const struct tcf_chain *chain;
+	const struct tcf_proto *tp;
+	const struct tcf_exts *exts;
+	u32 chain_index;
+	u32 tp_prio;
+	u32 handle;
+	u32 miss_cookie_base;
+	struct callback_head rcu;
+};
+
+enum {
+	TCA_ACT_UNSPEC = 0,
+	TCA_ACT_KIND = 1,
+	TCA_ACT_OPTIONS = 2,
+	TCA_ACT_INDEX = 3,
+	TCA_ACT_STATS = 4,
+	TCA_ACT_PAD = 5,
+	TCA_ACT_COOKIE = 6,
+	TCA_ACT_FLAGS = 7,
+	TCA_ACT_HW_STATS = 8,
+	TCA_ACT_USED_HW_STATS = 9,
+	TCA_ACT_IN_HW_COUNT = 10,
+	__TCA_ACT_MAX = 11,
+};
+
+enum pedit_header_type {
+	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
+	__PEDIT_HDR_TYPE_MAX = 6,
+};
+
+enum pedit_cmd {
+	TCA_PEDIT_KEY_EX_CMD_SET = 0,
+	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
+	__PEDIT_CMD_MAX = 2,
+};
+
+enum qdisc_class_ops_flags {
+	QDISC_CLASS_OPS_DOIT_UNLOCKED = 1,
+};
+
+enum tcf_proto_ops_flags {
+	TCF_PROTO_OPS_DOIT_UNLOCKED = 1,
+};
+
+struct tcf_block_owner_item {
+	struct list_head list;
+	struct Qdisc *q;
+	enum flow_block_binder_type binder_type;
+};
+
+typedef void tcf_chain_head_change_t(struct tcf_proto *, void *);
+
+struct tcf_filter_chain_list_item {
+	struct list_head list;
+	tcf_chain_head_change_t *chain_head_change;
+	void *chain_head_change_priv;
+};
+
+struct tc_pedit_key;
+
+struct tcf_pedit_key_ex;
+
+struct tcf_pedit_parms {
+	struct tc_pedit_key *tcfp_keys;
+	struct tcf_pedit_key_ex *tcfp_keys_ex;
+	u32 tcfp_off_max_hint;
+	unsigned char tcfp_nkeys;
+	unsigned char tcfp_flags;
+	struct callback_head rcu;
+};
+
+struct tc_pedit_key {
+	__u32 mask;
+	__u32 val;
+	__u32 off;
+	__u32 at;
+	__u32 offmask;
+	__u32 shift;
+};
+
+struct tcf_pedit_key_ex {
+	enum pedit_header_type htype;
+	enum pedit_cmd cmd;
+};
+
+struct tcf_pedit {
+	struct tc_action common;
+	struct tcf_pedit_parms __attribute__((btf_type_tag("rcu"))) *parms;
+	long: 64;
+};
+
+struct tcf_block_ext_info {
+	enum flow_block_binder_type binder_type;
+	tcf_chain_head_change_t *chain_head_change;
+	void *chain_head_change_priv;
+	u32 block_index;
+};
+
+struct tcf_net {
+	spinlock_t idr_lock;
+	struct idr idr;
+};
+
+struct action_gate_entry {
+	u8 gate_state;
+	u32 interval;
+	s32 ipv;
+	s32 maxoctets;
+};
+
+struct tcf_chain_info {
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) **pprev;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *next;
+};
+
+struct tcf_dump_args {
+	struct tcf_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct tcf_block *block;
+	struct Qdisc *q;
+	u32 parent;
+	bool terse_dump;
+};
+
+struct tcf_qevent {
+	struct tcf_block *block;
+	struct tcf_block_ext_info info;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_chain;
+};
+
+enum {
+	TCA_ROOT_UNSPEC = 0,
+	TCA_ROOT_TAB = 1,
+	TCA_ROOT_FLAGS = 2,
+	TCA_ROOT_COUNT = 3,
+	TCA_ROOT_TIME_DELTA = 4,
+	TCA_ROOT_EXT_WARN_MSG = 5,
+	__TCA_ROOT_MAX = 6,
+};
+
+struct tc_act_pernet_id {
+	struct list_head list;
+	unsigned int id;
+};
+
+struct tcamsg {
+	unsigned char tca_family;
+	unsigned char tca__pad1;
+	unsigned short tca__pad2;
+};
+
+struct tc_action_net {
+	struct tcf_idrinfo *idrinfo;
+	const struct tc_action_ops *ops;
+};
+
+enum {
+	TCA_POLICE_UNSPEC = 0,
+	TCA_POLICE_TBF = 1,
+	TCA_POLICE_RATE = 2,
+	TCA_POLICE_PEAKRATE = 3,
+	TCA_POLICE_AVRATE = 4,
+	TCA_POLICE_RESULT = 5,
+	TCA_POLICE_TM = 6,
+	TCA_POLICE_PAD = 7,
+	TCA_POLICE_RATE64 = 8,
+	TCA_POLICE_PEAKRATE64 = 9,
+	TCA_POLICE_PKTRATE64 = 10,
+	TCA_POLICE_PKTBURST64 = 11,
+	__TCA_POLICE_MAX = 12,
+};
+
+struct tcf_police_params;
+
+struct tcf_police {
+	struct tc_action common;
+	struct tcf_police_params __attribute__((btf_type_tag("rcu"))) *params;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t tcfp_lock;
+	s64 tcfp_toks;
+	s64 tcfp_ptoks;
+	s64 tcfp_pkttoks;
+	s64 tcfp_t_c;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tcf_police_params {
+	int tcfp_result;
+	u32 tcfp_ewma_rate;
+	s64 tcfp_burst;
+	u32 tcfp_mtu;
+	s64 tcfp_mtu_ptoks;
+	s64 tcfp_pkt_burst;
+	struct psched_ratecfg rate;
+	bool rate_present;
+	struct psched_ratecfg peak;
+	bool peak_present;
+	struct psched_pktrate ppsrate;
+	bool pps_present;
+	struct callback_head rcu;
+};
+
+struct tc_police {
+	__u32 index;
+	int action;
+	__u32 limit;
+	__u32 burst;
+	__u32 mtu;
+	struct tc_ratespec rate;
+	struct tc_ratespec peakrate;
+	int refcnt;
+	int bindcnt;
+	__u32 capab;
+};
+
+enum {
+	TCA_GACT_UNSPEC = 0,
+	TCA_GACT_TM = 1,
+	TCA_GACT_PARMS = 2,
+	TCA_GACT_PROB = 3,
+	TCA_GACT_PAD = 4,
+	__TCA_GACT_MAX = 5,
+};
+
+struct tcf_gact {
+	struct tc_action common;
+};
+
+struct tc_gact {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+};
+
+enum {
+	TCA_MIRRED_UNSPEC = 0,
+	TCA_MIRRED_TM = 1,
+	TCA_MIRRED_PARMS = 2,
+	TCA_MIRRED_PAD = 3,
+	__TCA_MIRRED_MAX = 4,
+};
+
+struct tcf_mirred {
+	struct tc_action common;
+	int tcfm_eaction;
+	bool tcfm_mac_header_xmit;
+	struct net_device __attribute__((btf_type_tag("rcu"))) *tcfm_dev;
+	netdevice_tracker tcfm_dev_tracker;
+	struct list_head tcfm_list;
+};
+
+struct tc_mirred {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+	int eaction;
+	__u32 ifindex;
+};
+
+enum {
+	TCA_SKBEDIT_UNSPEC = 0,
+	TCA_SKBEDIT_TM = 1,
+	TCA_SKBEDIT_PARMS = 2,
+	TCA_SKBEDIT_PRIORITY = 3,
+	TCA_SKBEDIT_QUEUE_MAPPING = 4,
+	TCA_SKBEDIT_MARK = 5,
+	TCA_SKBEDIT_PAD = 6,
+	TCA_SKBEDIT_PTYPE = 7,
+	TCA_SKBEDIT_MASK = 8,
+	TCA_SKBEDIT_FLAGS = 9,
+	TCA_SKBEDIT_QUEUE_MAPPING_MAX = 10,
+	__TCA_SKBEDIT_MAX = 11,
+};
+
+struct tcf_skbedit_params;
+
+struct tcf_skbedit {
+	struct tc_action common;
+	struct tcf_skbedit_params __attribute__((btf_type_tag("rcu"))) *params;
+	long: 64;
+};
+
+struct tcf_skbedit_params {
+	u32 flags;
+	u32 priority;
+	u32 mark;
+	u32 mask;
+	u16 queue_mapping;
+	u16 mapping_mod;
+	u16 ptype;
+	struct callback_head rcu;
+};
+
+struct tc_skbedit {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+};
+
+enum {
+	TCA_ACT_BPF_UNSPEC = 0,
+	TCA_ACT_BPF_TM = 1,
+	TCA_ACT_BPF_PARMS = 2,
+	TCA_ACT_BPF_OPS_LEN = 3,
+	TCA_ACT_BPF_OPS = 4,
+	TCA_ACT_BPF_FD = 5,
+	TCA_ACT_BPF_NAME = 6,
+	TCA_ACT_BPF_PAD = 7,
+	TCA_ACT_BPF_TAG = 8,
+	TCA_ACT_BPF_ID = 9,
+	__TCA_ACT_BPF_MAX = 10,
+};
+
+struct tcf_bpf {
+	struct tc_action common;
+	struct bpf_prog __attribute__((btf_type_tag("rcu"))) *filter;
+	union {
+		u32 bpf_fd;
+		u16 bpf_num_ops;
+	};
+	struct sock_filter *bpf_ops;
+	const char *bpf_name;
+};
+
+struct tcf_bpf_cfg {
+	struct bpf_prog *filter;
+	struct sock_filter *bpf_ops;
+	const char *bpf_name;
+	u16 bpf_num_ops;
+	bool is_ebpf;
+};
+
+struct tc_act_bpf {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+};
+
+enum tc_fifo_command {
+	TC_FIFO_REPLACE = 0,
+	TC_FIFO_DESTROY = 1,
+	TC_FIFO_STATS = 2,
+};
+
+struct tc_fifo_qopt {
+	__u32 limit;
+};
+
+struct tc_fifo_qopt_offload {
+	enum tc_fifo_command command;
+	u32 handle;
+	u32 parent;
+	union {
+		struct tc_qopt_offload_stats stats;
+	};
+};
+
+enum tc_htb_command {
+	TC_HTB_CREATE = 0,
+	TC_HTB_DESTROY = 1,
+	TC_HTB_LEAF_ALLOC_QUEUE = 2,
+	TC_HTB_LEAF_TO_INNER = 3,
+	TC_HTB_LEAF_DEL = 4,
+	TC_HTB_LEAF_DEL_LAST = 5,
+	TC_HTB_LEAF_DEL_LAST_FORCE = 6,
+	TC_HTB_NODE_MODIFY = 7,
+	TC_HTB_LEAF_QUERY_QUEUE = 8,
+};
+
+enum htb_cmode {
+	HTB_CANT_SEND = 0,
+	HTB_MAY_BORROW = 1,
+	HTB_CAN_SEND = 2,
+};
+
+enum {
+	TCA_HTB_UNSPEC = 0,
+	TCA_HTB_PARMS = 1,
+	TCA_HTB_INIT = 2,
+	TCA_HTB_CTAB = 3,
+	TCA_HTB_RTAB = 4,
+	TCA_HTB_DIRECT_QLEN = 5,
+	TCA_HTB_RATE64 = 6,
+	TCA_HTB_CEIL64 = 7,
+	TCA_HTB_PAD = 8,
+	TCA_HTB_OFFLOAD = 9,
+	__TCA_HTB_MAX = 10,
+};
+
+struct htb_class_leaf {
+	int deficit[8];
+	struct Qdisc *q;
+	struct netdev_queue *offload_queue;
+};
+
+struct htb_prio {
+	union {
+		struct rb_root row;
+		struct rb_root feed;
+	};
+	struct rb_node *ptr;
+	u32 last_ptr_id;
+};
+
+struct htb_class_inner {
+	struct htb_prio clprio[8];
+};
+
+struct tc_htb_xstats {
+	__u32 lends;
+	__u32 borrows;
+	__u32 giants;
+	__s32 tokens;
+	__s32 ctokens;
+};
+
+struct htb_class {
+	struct Qdisc_class_common common;
+	struct psched_ratecfg rate;
+	struct psched_ratecfg ceil;
+	s64 buffer;
+	s64 cbuffer;
+	s64 mbuffer;
+	u32 prio;
+	int quantum;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	int level;
+	unsigned int children;
+	struct htb_class *parent;
+	struct net_rate_estimator __attribute__((btf_type_tag("rcu"))) *rate_est;
+	struct gnet_stats_basic_sync bstats;
+	struct gnet_stats_basic_sync bstats_bias;
+	struct tc_htb_xstats xstats;
+	s64 tokens;
+	s64 ctokens;
+	s64 t_c;
+	union {
+		struct htb_class_leaf leaf;
+		struct htb_class_inner inner;
+	};
+	s64 pq_key;
+	int prio_activity;
+	enum htb_cmode cmode;
+	struct rb_node pq_node;
+	struct rb_node node[8];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int drops;
+	unsigned int overlimits;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct htb_level {
+	struct rb_root wait_pq;
+	struct htb_prio hprio[8];
+};
+
+struct htb_sched {
+	struct Qdisc_class_hash clhash;
+	int defcls;
+	int rate2quantum;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	unsigned int warned;
+	int direct_qlen;
+	struct work_struct work;
+	struct qdisc_skb_head direct_queue;
+	u32 direct_pkts;
+	u32 overlimits;
+	struct qdisc_watchdog watchdog;
+	s64 now;
+	s64 near_ev_cache[8];
+	int row_mask[8];
+	struct htb_level hlevel[8];
+	struct Qdisc **direct_qdiscs;
+	unsigned int num_direct_qdiscs;
+	bool offload;
+};
+
+struct tc_htb_qopt_offload {
+	struct netlink_ext_ack *extack;
+	enum tc_htb_command command;
+	u32 parent_classid;
+	u16 classid;
+	u16 qid;
+	u32 quantum;
+	u64 rate;
+	u64 ceil;
+	u8 prio;
+};
+
+struct tc_htb_glob {
+	__u32 version;
+	__u32 rate2quantum;
+	__u32 defcls;
+	__u32 debug;
+	__u32 direct_pkts;
+};
+
+struct tc_htb_opt {
+	struct tc_ratespec rate;
+	struct tc_ratespec ceil;
+	__u32 buffer;
+	__u32 cbuffer;
+	__u32 quantum;
+	__u32 level;
+	__u32 prio;
+};
+
+struct ingress_sched_data {
+	struct tcf_block *block;
+	struct tcf_block_ext_info block_info;
+	struct mini_Qdisc_pair miniqp;
+};
+
+struct clsact_sched_data {
+	struct tcf_block *ingress_block;
+	struct tcf_block *egress_block;
+	struct tcf_block_ext_info ingress_block_info;
+	struct tcf_block_ext_info egress_block_info;
+	struct mini_Qdisc_pair miniqp_ingress;
+	struct mini_Qdisc_pair miniqp_egress;
+};
+
+enum {
+	RED_DONT_MARK = 0,
+	RED_PROB_MARK = 1,
+	RED_HARD_MARK = 2,
+};
+
+enum {
+	RED_BELOW_MIN_THRESH = 0,
+	RED_BETWEEN_TRESH = 1,
+	RED_ABOVE_MAX_TRESH = 2,
+};
+
+typedef u16 sfq_index;
+
+struct tc_sfqred_stats {
+	__u32 prob_drop;
+	__u32 forced_drop;
+	__u32 prob_mark;
+	__u32 forced_mark;
+	__u32 prob_mark_head;
+	__u32 forced_mark_head;
+};
+
+struct sfq_head {
+	sfq_index next;
+	sfq_index prev;
+};
+
+struct sfq_slot;
+
+struct red_parms;
+
+struct sfq_sched_data {
+	int limit;
+	unsigned int divisor;
+	u8 headdrop;
+	u8 maxdepth;
+	siphash_key_t perturbation;
+	u8 cur_depth;
+	u8 flags;
+	unsigned short scaled_quantum;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	sfq_index *ht;
+	struct sfq_slot *slots;
+	struct red_parms *red_parms;
+	struct tc_sfqred_stats stats;
+	struct sfq_slot *tail;
+	struct sfq_head dep[128];
+	unsigned int maxflows;
+	int perturb_period;
+	unsigned int quantum;
+	struct timer_list perturb_timer;
+	struct Qdisc *sch;
+};
+
+struct red_vars {
+	int qcount;
+	u32 qR;
+	unsigned long qavg;
+	ktime_t qidlestart;
+};
+
+struct sfq_slot {
+	struct sk_buff *skblist_next;
+	struct sk_buff *skblist_prev;
+	sfq_index qlen;
+	sfq_index next;
+	struct sfq_head dep;
+	unsigned short hash;
+	short allot;
+	unsigned int backlog;
+	struct red_vars vars;
+};
+
+struct red_parms {
+	u32 qth_min;
+	u32 qth_max;
+	u32 Scell_max;
+	u32 max_P;
+	struct reciprocal_value max_P_reciprocal;
+	u32 qth_delta;
+	u32 target_min;
+	u32 target_max;
+	u8 Scell_log;
+	u8 Wlog;
+	u8 Plog;
+	u8 Stab[256];
+};
+
+struct tc_sfq_qopt {
+	unsigned int quantum;
+	int perturb_period;
+	__u32 limit;
+	unsigned int divisor;
+	unsigned int flows;
+};
+
+struct tc_sfq_qopt_v1 {
+	struct tc_sfq_qopt v0;
+	unsigned int depth;
+	unsigned int headdrop;
+	__u32 limit;
+	__u32 qth_min;
+	__u32 qth_max;
+	unsigned char Wlog;
+	unsigned char Plog;
+	unsigned char Scell_log;
+	unsigned char flags;
+	__u32 max_P;
+	struct tc_sfqred_stats stats;
+};
+
+struct tc_sfq_xstats {
+	__s32 allot;
+};
+
+enum tc_tbf_command {
+	TC_TBF_REPLACE = 0,
+	TC_TBF_DESTROY = 1,
+	TC_TBF_STATS = 2,
+	TC_TBF_GRAFT = 3,
+};
+
+enum {
+	TCA_TBF_UNSPEC = 0,
+	TCA_TBF_PARMS = 1,
+	TCA_TBF_RTAB = 2,
+	TCA_TBF_PTAB = 3,
+	TCA_TBF_RATE64 = 4,
+	TCA_TBF_PRATE64 = 5,
+	TCA_TBF_BURST = 6,
+	TCA_TBF_PBURST = 7,
+	TCA_TBF_PAD = 8,
+	__TCA_TBF_MAX = 9,
+};
+
+struct tbf_sched_data {
+	u32 limit;
+	u32 max_size;
+	s64 buffer;
+	s64 mtu;
+	struct psched_ratecfg rate;
+	struct psched_ratecfg peak;
+	s64 tokens;
+	s64 ptokens;
+	s64 t_c;
+	struct Qdisc *qdisc;
+	struct qdisc_watchdog watchdog;
+};
+
+struct tc_tbf_qopt_offload_replace_params {
+	struct psched_ratecfg rate;
+	u32 max_size;
+	struct gnet_stats_queue *qstats;
+};
+
+struct tc_tbf_qopt_offload {
+	enum tc_tbf_command command;
+	u32 handle;
+	u32 parent;
+	union {
+		struct tc_tbf_qopt_offload_replace_params replace_params;
+		struct tc_qopt_offload_stats stats;
+		u32 child_handle;
+	};
+};
+
+struct tc_tbf_qopt {
+	struct tc_ratespec rate;
+	struct tc_ratespec peakrate;
+	__u32 limit;
+	__u32 buffer;
+	__u32 mtu;
+};
+
+enum tc_prio_command {
+	TC_PRIO_REPLACE = 0,
+	TC_PRIO_DESTROY = 1,
+	TC_PRIO_STATS = 2,
+	TC_PRIO_GRAFT = 3,
+};
+
+struct prio_sched_data {
+	int bands;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	u8 prio2band[16];
+	struct Qdisc *queues[16];
+};
+
+struct tc_prio_qopt_offload_params {
+	int bands;
+	u8 priomap[16];
+	struct gnet_stats_queue *qstats;
+};
+
+struct tc_prio_qopt_offload_graft_params {
+	u8 band;
+	u32 child_handle;
+};
+
+struct tc_prio_qopt_offload {
+	enum tc_prio_command command;
+	u32 handle;
+	u32 parent;
+	union {
+		struct tc_prio_qopt_offload_params replace_params;
+		struct tc_qopt_offload_stats stats;
+		struct tc_prio_qopt_offload_graft_params graft_params;
+	};
+};
+
+struct multiq_sched_data {
+	u16 bands;
+	u16 max_bands;
+	u16 curband;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	struct Qdisc **queues;
+};
+
+struct tc_multiq_qopt {
+	__u16 bands;
+	__u16 max_bands;
+};
+
+struct crndstate {
+	u32 last;
+	u32 rho;
+};
+
+struct prng {
+	u64 seed;
+	struct rnd_state prng_state;
+};
+
+struct clgstate {
+	u8 state;
+	u32 a1;
+	u32 a2;
+	u32 a3;
+	u32 a4;
+	u32 a5;
+};
+
+struct tc_netem_slot {
+	__s64 min_delay;
+	__s64 max_delay;
+	__s32 max_packets;
+	__s32 max_bytes;
+	__s64 dist_delay;
+	__s64 dist_jitter;
+};
+
+struct slotstate {
+	u64 slot_next;
+	s32 packets_left;
+	s32 bytes_left;
+};
+
+struct disttable;
+
+struct netem_sched_data {
+	struct rb_root t_root;
+	struct sk_buff *t_head;
+	struct sk_buff *t_tail;
+	struct Qdisc *qdisc;
+	struct qdisc_watchdog watchdog;
+	s64 latency;
+	s64 jitter;
+	u32 loss;
+	u32 ecn;
+	u32 limit;
+	u32 counter;
+	u32 gap;
+	u32 duplicate;
+	u32 reorder;
+	u32 corrupt;
+	u64 rate;
+	s32 packet_overhead;
+	u32 cell_size;
+	struct reciprocal_value cell_size_reciprocal;
+	s32 cell_overhead;
+	struct crndstate delay_cor;
+	struct crndstate loss_cor;
+	struct crndstate dup_cor;
+	struct crndstate reorder_cor;
+	struct crndstate corrupt_cor;
+	struct prng prng;
+	struct disttable *delay_dist;
+	enum {
+		CLG_RANDOM = 0,
+		CLG_4_STATES = 1,
+		CLG_GILB_ELL = 2,
+	} loss_model;
+	enum {
+		TX_IN_GAP_PERIOD = 1,
+		TX_IN_BURST_PERIOD = 2,
+		LOST_IN_GAP_PERIOD = 3,
+		LOST_IN_BURST_PERIOD = 4,
+	} _4_state_model;
+	enum {
+		GOOD_STATE = 1,
+		BAD_STATE = 2,
+	} GE_state_model;
+	struct clgstate clg;
+	struct tc_netem_slot slot_config;
+	struct slotstate slot;
+	struct disttable *slot_dist;
+};
+
+struct disttable {
+	u32 size;
+	s16 table[0];
+};
+
+enum {
+	TCA_NETEM_UNSPEC = 0,
+	TCA_NETEM_CORR = 1,
+	TCA_NETEM_DELAY_DIST = 2,
+	TCA_NETEM_REORDER = 3,
+	TCA_NETEM_CORRUPT = 4,
+	TCA_NETEM_LOSS = 5,
+	TCA_NETEM_RATE = 6,
+	TCA_NETEM_ECN = 7,
+	TCA_NETEM_RATE64 = 8,
+	TCA_NETEM_PAD = 9,
+	TCA_NETEM_LATENCY64 = 10,
+	TCA_NETEM_JITTER64 = 11,
+	TCA_NETEM_SLOT = 12,
+	TCA_NETEM_SLOT_DIST = 13,
+	TCA_NETEM_PRNG_SEED = 14,
+	__TCA_NETEM_MAX = 15,
+};
+
+enum {
+	NETEM_LOSS_UNSPEC = 0,
+	NETEM_LOSS_GI = 1,
+	NETEM_LOSS_GE = 2,
+	__NETEM_LOSS_MAX = 3,
+};
+
+struct netem_skb_cb {
+	u64 time_to_send;
+};
+
+typedef u64 psched_time_t;
+
+struct tc_netem_gemodel {
+	__u32 p;
+	__u32 r;
+	__u32 h;
+	__u32 k1;
+};
+
+struct tc_netem_gimodel {
+	__u32 p13;
+	__u32 p31;
+	__u32 p32;
+	__u32 p14;
+	__u32 p23;
+};
+
+struct tc_netem_corr {
+	__u32 delay_corr;
+	__u32 loss_corr;
+	__u32 dup_corr;
+};
+
+struct tc_netem_reorder {
+	__u32 probability;
+	__u32 correlation;
+};
+
+struct tc_netem_corrupt {
+	__u32 probability;
+	__u32 correlation;
+};
+
+struct tc_netem_rate {
+	__u32 rate;
+	__s32 packet_overhead;
+	__u32 cell_size;
+	__s32 cell_overhead;
+};
+
+struct tc_netem_qopt {
+	__u32 latency;
+	__u32 limit;
+	__u32 loss;
+	__u32 gap;
+	__u32 duplicate;
+	__u32 jitter;
+};
+
+enum {
+	TCA_CODEL_UNSPEC = 0,
+	TCA_CODEL_TARGET = 1,
+	TCA_CODEL_LIMIT = 2,
+	TCA_CODEL_INTERVAL = 3,
+	TCA_CODEL_ECN = 4,
+	TCA_CODEL_CE_THRESHOLD = 5,
+	__TCA_CODEL_MAX = 6,
+};
+
+typedef u32 codel_time_t;
+
+struct codel_skb_cb {
+	codel_time_t enqueue_time;
+	unsigned int mem_usage;
+};
+
+struct codel_vars {
+	u32 count;
+	u32 lastcount;
+	bool dropping;
+	u16 rec_inv_sqrt;
+	codel_time_t first_above_time;
+	codel_time_t drop_next;
+	codel_time_t ldelay;
+};
+
+struct codel_params {
+	codel_time_t target;
+	codel_time_t ce_threshold;
+	codel_time_t interval;
+	u32 mtu;
+	bool ecn;
+	u8 ce_threshold_selector;
+	u8 ce_threshold_mask;
+};
+
+struct codel_stats {
+	u32 maxpacket;
+	u32 drop_count;
+	u32 drop_len;
+	u32 ecn_mark;
+	u32 ce_mark;
+};
+
+typedef u32 (*codel_skb_len_t)(const struct sk_buff *);
+
+typedef codel_time_t (*codel_skb_time_t)(const struct sk_buff *);
+
+typedef void (*codel_skb_drop_t)(struct sk_buff *, void *);
+
+typedef struct sk_buff * (*codel_skb_dequeue_t)(struct codel_vars *, void *);
+
+struct codel_sched_data {
+	struct codel_params params;
+	struct codel_vars vars;
+	struct codel_stats stats;
+	u32 drop_overlimit;
+};
+
+struct tc_codel_xstats {
+	__u32 maxpacket;
+	__u32 count;
+	__u32 lastcount;
+	__u32 ldelay;
+	__s32 drop_next;
+	__u32 drop_overlimit;
+	__u32 ecn_mark;
+	__u32 dropping;
+	__u32 ce_mark;
+};
+
+typedef s32 codel_tdiff_t;
+
+enum {
+	TCA_FQ_CODEL_XSTATS_QDISC = 0,
+	TCA_FQ_CODEL_XSTATS_CLASS = 1,
+};
+
+enum {
+	TCA_FQ_CODEL_UNSPEC = 0,
+	TCA_FQ_CODEL_TARGET = 1,
+	TCA_FQ_CODEL_LIMIT = 2,
+	TCA_FQ_CODEL_INTERVAL = 3,
+	TCA_FQ_CODEL_ECN = 4,
+	TCA_FQ_CODEL_FLOWS = 5,
+	TCA_FQ_CODEL_QUANTUM = 6,
+	TCA_FQ_CODEL_CE_THRESHOLD = 7,
+	TCA_FQ_CODEL_DROP_BATCH_SIZE = 8,
+	TCA_FQ_CODEL_MEMORY_LIMIT = 9,
+	TCA_FQ_CODEL_CE_THRESHOLD_SELECTOR = 10,
+	TCA_FQ_CODEL_CE_THRESHOLD_MASK = 11,
+	__TCA_FQ_CODEL_MAX = 12,
+};
+
+struct fq_codel_flow {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	struct list_head flowchain;
+	int deficit;
+	struct codel_vars cvars;
+};
+
+struct fq_codel_sched_data {
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	struct fq_codel_flow *flows;
+	u32 *backlogs;
+	u32 flows_cnt;
+	u32 quantum;
+	u32 drop_batch_size;
+	u32 memory_limit;
+	struct codel_params cparams;
+	struct codel_stats cstats;
+	u32 memory_usage;
+	u32 drop_overmemory;
+	u32 drop_overlimit;
+	u32 new_flow_count;
+	struct list_head new_flows;
+	struct list_head old_flows;
+};
+
+struct tc_fq_codel_qd_stats {
+	__u32 maxpacket;
+	__u32 drop_overlimit;
+	__u32 ecn_mark;
+	__u32 new_flow_count;
+	__u32 new_flows_len;
+	__u32 old_flows_len;
+	__u32 ce_mark;
+	__u32 memory_usage;
+	__u32 drop_overmemory;
+};
+
+struct tc_fq_codel_cl_stats {
+	__s32 deficit;
+	__u32 ldelay;
+	__u32 count;
+	__u32 lastcount;
+	__u32 dropping;
+	__s32 drop_next;
+};
+
+struct tc_fq_codel_xstats {
+	__u32 type;
+	union {
+		struct tc_fq_codel_qd_stats qdisc_stats;
+		struct tc_fq_codel_cl_stats class_stats;
+	};
+};
+
+struct fq_flow {
+	struct rb_root t_root;
+	struct sk_buff *head;
+	union {
+		struct sk_buff *tail;
+		unsigned long age;
+	};
+	struct rb_node fq_node;
+	struct sock *sk;
+	u32 socket_hash;
+	int qlen;
+	int credit;
+	struct fq_flow *next;
+	struct rb_node rate_node;
+	u64 time_next_packet;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	TCA_FQ_UNSPEC = 0,
+	TCA_FQ_PLIMIT = 1,
+	TCA_FQ_FLOW_PLIMIT = 2,
+	TCA_FQ_QUANTUM = 3,
+	TCA_FQ_INITIAL_QUANTUM = 4,
+	TCA_FQ_RATE_ENABLE = 5,
+	TCA_FQ_FLOW_DEFAULT_RATE = 6,
+	TCA_FQ_FLOW_MAX_RATE = 7,
+	TCA_FQ_BUCKETS_LOG = 8,
+	TCA_FQ_FLOW_REFILL_DELAY = 9,
+	TCA_FQ_ORPHAN_MASK = 10,
+	TCA_FQ_LOW_RATE_THRESHOLD = 11,
+	TCA_FQ_CE_THRESHOLD = 12,
+	TCA_FQ_TIMER_SLACK = 13,
+	TCA_FQ_HORIZON = 14,
+	TCA_FQ_HORIZON_DROP = 15,
+	__TCA_FQ_MAX = 16,
+};
+
+struct fq_skb_cb {
+	u64 time_to_send;
+};
+
+struct fq_flow_head {
+	struct fq_flow *first;
+	struct fq_flow *last;
+};
+
+struct fq_sched_data {
+	struct fq_flow_head new_flows;
+	struct fq_flow_head old_flows;
+	struct rb_root delayed;
+	u64 time_next_delayed_flow;
+	u64 ktime_cache;
+	unsigned long unthrottle_latency_ns;
+	struct fq_flow internal;
+	u32 quantum;
+	u32 initial_quantum;
+	u32 flow_refill_delay;
+	u32 flow_plimit;
+	unsigned long flow_max_rate;
+	u64 ce_threshold;
+	u64 horizon;
+	u32 orphan_mask;
+	u32 low_rate_threshold;
+	struct rb_root *fq_root;
+	u8 rate_enable;
+	u8 fq_trees_log;
+	u8 horizon_drop;
+	u32 flows;
+	u32 inactive_flows;
+	u32 throttled_flows;
+	u64 stat_gc_flows;
+	u64 stat_internal_packets;
+	u64 stat_throttled;
+	u64 stat_ce_mark;
+	u64 stat_horizon_drops;
+	u64 stat_horizon_caps;
+	u64 stat_flows_plimit;
+	u64 stat_pkts_too_long;
+	u64 stat_allocation_errors;
+	u32 timer_slack;
+	struct qdisc_watchdog watchdog;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tc_fq_qd_stats {
+	__u64 gc_flows;
+	__u64 highprio_packets;
+	__u64 tcp_retrans;
+	__u64 throttled;
+	__u64 flows_plimit;
+	__u64 pkts_too_long;
+	__u64 allocation_errors;
+	__s64 time_next_delayed_flow;
+	__u32 flows;
+	__u32 inactive_flows;
+	__u32 throttled_flows;
+	__u32 unthrottle_latency_ns;
+	__u64 ce_mark;
+	__u64 horizon_drops;
+	__u64 horizon_caps;
+};
+
+enum tc_clsu32_command {
+	TC_CLSU32_NEW_KNODE = 0,
+	TC_CLSU32_REPLACE_KNODE = 1,
+	TC_CLSU32_DELETE_KNODE = 2,
+	TC_CLSU32_NEW_HNODE = 3,
+	TC_CLSU32_REPLACE_HNODE = 4,
+	TC_CLSU32_DELETE_HNODE = 5,
+};
+
+enum {
+	TCA_U32_UNSPEC = 0,
+	TCA_U32_CLASSID = 1,
+	TCA_U32_HASH = 2,
+	TCA_U32_LINK = 3,
+	TCA_U32_DIVISOR = 4,
+	TCA_U32_SEL = 5,
+	TCA_U32_POLICE = 6,
+	TCA_U32_ACT = 7,
+	TCA_U32_INDEV = 8,
+	TCA_U32_PCNT = 9,
+	TCA_U32_MARK = 10,
+	TCA_U32_FLAGS = 11,
+	TCA_U32_PAD = 12,
+	__TCA_U32_MAX = 13,
+};
+
+struct tc_u32_key {
+	__be32 mask;
+	__be32 val;
+	int off;
+	int offmask;
+};
+
+struct tc_u32_sel {
+	unsigned char flags;
+	unsigned char offshift;
+	unsigned char nkeys;
+	__be16 offmask;
+	__u16 off;
+	short offoff;
+	short hoff;
+	__be32 hmask;
+	struct tc_u32_key keys[0];
+};
+
+struct tc_u_hnode;
+
+struct tc_u_knode {
+	struct tc_u_knode __attribute__((btf_type_tag("rcu"))) *next;
+	u32 handle;
+	struct tc_u_hnode __attribute__((btf_type_tag("rcu"))) *ht_up;
+	struct tcf_exts exts;
+	int ifindex;
+	u8 fshift;
+	struct tcf_result res;
+	struct tc_u_hnode __attribute__((btf_type_tag("rcu"))) *ht_down;
+	u32 flags;
+	unsigned int in_hw_count;
+	u32 val;
+	u32 mask;
+	u32 __attribute__((btf_type_tag("percpu"))) *pcpu_success;
+	struct rcu_work rwork;
+	struct tc_u32_sel sel;
+};
+
+struct tc_u_hnode {
+	struct tc_u_hnode __attribute__((btf_type_tag("rcu"))) *next;
+	u32 handle;
+	u32 prio;
+	int refcnt;
+	unsigned int divisor;
+	struct idr handle_idr;
+	bool is_root;
+	struct callback_head rcu;
+	u32 flags;
+	struct tc_u_knode __attribute__((btf_type_tag("rcu"))) *ht[0];
+};
+
+struct tc_u_common {
+	struct tc_u_hnode __attribute__((btf_type_tag("rcu"))) *hlist;
+	void *ptr;
+	int refcnt;
+	struct idr handle_idr;
+	struct hlist_node hnode;
+	long knodes;
+};
+
+struct tc_cls_u32_knode {
+	struct tcf_exts *exts;
+	struct tcf_result *res;
+	struct tc_u32_sel *sel;
+	u32 handle;
+	u32 val;
+	u32 mask;
+	u32 link_handle;
+	u8 fshift;
+};
+
+struct tc_cls_u32_hnode {
+	u32 handle;
+	u32 prio;
+	unsigned int divisor;
+};
+
+struct flow_cls_common_offload {
+	u32 chain_index;
+	__be16 protocol;
+	u32 prio;
+	struct netlink_ext_ack *extack;
+};
+
+struct tc_cls_u32_offload {
+	struct flow_cls_common_offload common;
+	enum tc_clsu32_command command;
+	union {
+		struct tc_cls_u32_knode knode;
+		struct tc_cls_u32_hnode hnode;
+	};
+};
+
+struct tc_u32_mark {
+	__u32 val;
+	__u32 mask;
+	__u32 success;
+};
+
+enum {
+	TCA_FW_UNSPEC = 0,
+	TCA_FW_CLASSID = 1,
+	TCA_FW_POLICE = 2,
+	TCA_FW_INDEV = 3,
+	TCA_FW_ACT = 4,
+	TCA_FW_MASK = 5,
+	__TCA_FW_MAX = 6,
+};
+
+struct fw_filter {
+	struct fw_filter __attribute__((btf_type_tag("rcu"))) *next;
+	u32 id;
+	struct tcf_result res;
+	int ifindex;
+	struct tcf_exts exts;
+	struct tcf_proto *tp;
+	struct rcu_work rwork;
+};
+
+struct fw_head {
+	u32 mask;
+	struct fw_filter __attribute__((btf_type_tag("rcu"))) *ht[256];
+	struct callback_head rcu;
+};
+
+enum {
+	TCA_BASIC_UNSPEC = 0,
+	TCA_BASIC_CLASSID = 1,
+	TCA_BASIC_EMATCHES = 2,
+	TCA_BASIC_ACT = 3,
+	TCA_BASIC_POLICE = 4,
+	TCA_BASIC_PCNT = 5,
+	TCA_BASIC_PAD = 6,
+	__TCA_BASIC_MAX = 7,
+};
+
+struct tcf_ematch_tree_hdr {
+	__u16 nmatches;
+	__u16 progid;
+};
+
+struct tcf_ematch;
+
+struct tcf_ematch_tree {
+	struct tcf_ematch_tree_hdr hdr;
+	struct tcf_ematch *matches;
+};
+
+struct tc_basic_pcnt;
+
+struct basic_filter {
+	u32 handle;
+	struct tcf_exts exts;
+	struct tcf_ematch_tree ematches;
+	struct tcf_result res;
+	struct tcf_proto *tp;
+	struct list_head link;
+	struct tc_basic_pcnt __attribute__((btf_type_tag("percpu"))) *pf;
+	struct rcu_work rwork;
+};
+
+struct tcf_ematch_ops;
+
+struct tcf_ematch {
+	struct tcf_ematch_ops *ops;
+	unsigned long data;
+	unsigned int datalen;
+	u16 matchid;
+	u16 flags;
+	struct net *net;
+};
+
+struct tcf_pkt_info;
+
+struct tcf_ematch_ops {
+	int kind;
+	int datalen;
+	int (*change)(struct net *, void *, int, struct tcf_ematch *);
+	int (*match)(struct sk_buff *, struct tcf_ematch *, struct tcf_pkt_info *);
+	void (*destroy)(struct tcf_ematch *);
+	int (*dump)(struct sk_buff *, struct tcf_ematch *);
+	struct module *owner;
+	struct list_head link;
+};
+
+struct tcf_pkt_info {
+	unsigned char *ptr;
+	int nexthdr;
+};
+
+struct tc_basic_pcnt {
+	__u64 rcnt;
+	__u64 rhit;
+};
+
+struct basic_head {
+	struct list_head flist;
+	struct idr handle_idr;
+	struct callback_head rcu;
+};
+
+enum {
+	FLOW_KEY_SRC = 0,
+	FLOW_KEY_DST = 1,
+	FLOW_KEY_PROTO = 2,
+	FLOW_KEY_PROTO_SRC = 3,
+	FLOW_KEY_PROTO_DST = 4,
+	FLOW_KEY_IIF = 5,
+	FLOW_KEY_PRIORITY = 6,
+	FLOW_KEY_MARK = 7,
+	FLOW_KEY_NFCT = 8,
+	FLOW_KEY_NFCT_SRC = 9,
+	FLOW_KEY_NFCT_DST = 10,
+	FLOW_KEY_NFCT_PROTO_SRC = 11,
+	FLOW_KEY_NFCT_PROTO_DST = 12,
+	FLOW_KEY_RTCLASSID = 13,
+	FLOW_KEY_SKUID = 14,
+	FLOW_KEY_SKGID = 15,
+	FLOW_KEY_VLAN_TAG = 16,
+	FLOW_KEY_RXHASH = 17,
+	__FLOW_KEY_MAX = 18,
+};
+
+enum {
+	FLOW_MODE_MAP = 0,
+	FLOW_MODE_HASH = 1,
+};
+
+enum {
+	TCA_FLOW_UNSPEC = 0,
+	TCA_FLOW_KEYS = 1,
+	TCA_FLOW_MODE = 2,
+	TCA_FLOW_BASECLASS = 3,
+	TCA_FLOW_RSHIFT = 4,
+	TCA_FLOW_ADDEND = 5,
+	TCA_FLOW_MASK = 6,
+	TCA_FLOW_XOR = 7,
+	TCA_FLOW_DIVISOR = 8,
+	TCA_FLOW_ACT = 9,
+	TCA_FLOW_POLICE = 10,
+	TCA_FLOW_EMATCHES = 11,
+	TCA_FLOW_PERTURB = 12,
+	__TCA_FLOW_MAX = 13,
+};
+
+struct flow_filter {
+	struct list_head list;
+	struct tcf_exts exts;
+	struct tcf_ematch_tree ematches;
+	struct tcf_proto *tp;
+	struct timer_list perturb_timer;
+	u32 perturb_period;
+	u32 handle;
+	u32 nkeys;
+	u32 keymask;
+	u32 mode;
+	u32 mask;
+	u32 xor;
+	u32 rshift;
+	u32 addend;
+	u32 divisor;
+	u32 baseclass;
+	u32 hashrnd;
+	struct rcu_work rwork;
+};
+
+struct flow_head {
+	struct list_head filters;
+	struct callback_head rcu;
+};
+
+enum tc_clsbpf_command {
+	TC_CLSBPF_OFFLOAD = 0,
+	TC_CLSBPF_STATS = 1,
+};
+
+enum {
+	TCA_BPF_UNSPEC = 0,
+	TCA_BPF_ACT = 1,
+	TCA_BPF_POLICE = 2,
+	TCA_BPF_CLASSID = 3,
+	TCA_BPF_OPS_LEN = 4,
+	TCA_BPF_OPS = 5,
+	TCA_BPF_FD = 6,
+	TCA_BPF_NAME = 7,
+	TCA_BPF_FLAGS = 8,
+	TCA_BPF_FLAGS_GEN = 9,
+	TCA_BPF_TAG = 10,
+	TCA_BPF_ID = 11,
+	__TCA_BPF_MAX = 12,
+};
+
+struct cls_bpf_prog {
+	struct bpf_prog *filter;
+	struct list_head link;
+	struct tcf_result res;
+	bool exts_integrated;
+	u32 gen_flags;
+	unsigned int in_hw_count;
+	struct tcf_exts exts;
+	u32 handle;
+	u16 bpf_num_ops;
+	struct sock_filter *bpf_ops;
+	const char *bpf_name;
+	struct tcf_proto *tp;
+	struct rcu_work rwork;
+};
+
+struct tc_cls_bpf_offload {
+	struct flow_cls_common_offload common;
+	enum tc_clsbpf_command command;
+	struct tcf_exts *exts;
+	struct bpf_prog *prog;
+	struct bpf_prog *oldprog;
+	const char *name;
+	bool exts_integrated;
+};
+
+struct cls_bpf_head {
+	struct list_head plist;
+	struct idr handle_idr;
+	struct callback_head rcu;
+};
+
+enum tc_matchall_command {
+	TC_CLSMATCHALL_REPLACE = 0,
+	TC_CLSMATCHALL_DESTROY = 1,
+	TC_CLSMATCHALL_STATS = 2,
+};
+
+enum {
+	TCA_MATCHALL_UNSPEC = 0,
+	TCA_MATCHALL_CLASSID = 1,
+	TCA_MATCHALL_ACT = 2,
+	TCA_MATCHALL_FLAGS = 3,
+	TCA_MATCHALL_PCNT = 4,
+	TCA_MATCHALL_PAD = 5,
+	__TCA_MATCHALL_MAX = 6,
+};
+
+struct tc_matchall_pcnt;
+
+struct cls_mall_head {
+	struct tcf_exts exts;
+	struct tcf_result res;
+	u32 handle;
+	u32 flags;
+	unsigned int in_hw_count;
+	struct tc_matchall_pcnt __attribute__((btf_type_tag("percpu"))) *pf;
+	struct rcu_work rwork;
+	bool deleting;
+};
+
+struct tc_matchall_pcnt {
+	__u64 rhit;
+};
+
+struct tc_cls_matchall_offload {
+	struct flow_cls_common_offload common;
+	enum tc_matchall_command command;
+	struct flow_rule *rule;
+	struct flow_stats stats;
+	bool use_act_stats;
+	unsigned long cookie;
+};
+
+enum {
+	TCA_EMATCH_TREE_UNSPEC = 0,
+	TCA_EMATCH_TREE_HDR = 1,
+	TCA_EMATCH_TREE_LIST = 2,
+	__TCA_EMATCH_TREE_MAX = 3,
+};
+
+struct tcf_ematch_hdr {
+	__u16 matchid;
+	__u16 kind;
+	__u16 flags;
+	__u16 pad;
+};
+
+enum {
+	TCF_EM_ALIGN_U8 = 1,
+	TCF_EM_ALIGN_U16 = 2,
+	TCF_EM_ALIGN_U32 = 4,
+};
+
+enum {
+	TCF_EM_OPND_EQ = 0,
+	TCF_EM_OPND_GT = 1,
+	TCF_EM_OPND_LT = 2,
+};
+
+enum {
+	TCF_LAYER_LINK = 0,
+	TCF_LAYER_NETWORK = 1,
+	TCF_LAYER_TRANSPORT = 2,
+	__TCF_LAYER_MAX = 3,
+};
+
+struct tcf_em_cmp {
+	__u32 val;
+	__u32 mask;
+	__u16 off;
+	__u8 align: 4;
+	__u8 flags: 4;
+	__u8 layer: 4;
+	__u8 opnd: 4;
+};
+
+struct tcf_em_nbyte {
+	__u16 off;
+	__u16 len: 12;
+	__u8 layer: 4;
+};
+
+struct nbyte_data {
+	struct tcf_em_nbyte hdr;
+	char pattern[0];
+};
+
+struct meta_value;
+
+struct meta_obj;
+
+struct meta_ops {
+	void (*get)(struct sk_buff *, struct tcf_pkt_info *, struct meta_value *, struct meta_obj *, int *);
+};
+
+struct tcf_meta_val {
+	__u16 kind;
+	__u8 shift;
+	__u8 op;
+};
+
+struct meta_value {
+	struct tcf_meta_val hdr;
+	unsigned long val;
+	unsigned int len;
+};
+
+struct meta_obj {
+	unsigned long value;
+	unsigned int len;
+};
+
+struct meta_type_ops {
+	void (*destroy)(struct meta_value *);
+	int (*compare)(struct meta_obj *, struct meta_obj *);
+	int (*change)(struct meta_value *, struct nlattr *);
+	void (*apply_extras)(struct meta_value *, struct meta_obj *);
+	int (*dump)(struct sk_buff *, struct meta_value *, int);
+};
+
+enum {
+	TCA_EM_META_UNSPEC = 0,
+	TCA_EM_META_HDR = 1,
+	TCA_EM_META_LVALUE = 2,
+	TCA_EM_META_RVALUE = 3,
+	__TCA_EM_META_MAX = 4,
+};
+
+enum {
+	TCF_META_TYPE_VAR = 0,
+	TCF_META_TYPE_INT = 1,
+	__TCF_META_TYPE_MAX = 2,
+};
+
+enum {
+	TCF_META_ID_VALUE = 0,
+	TCF_META_ID_RANDOM = 1,
+	TCF_META_ID_LOADAVG_0 = 2,
+	TCF_META_ID_LOADAVG_1 = 3,
+	TCF_META_ID_LOADAVG_2 = 4,
+	TCF_META_ID_DEV = 5,
+	TCF_META_ID_PRIORITY = 6,
+	TCF_META_ID_PROTOCOL = 7,
+	TCF_META_ID_PKTTYPE = 8,
+	TCF_META_ID_PKTLEN = 9,
+	TCF_META_ID_DATALEN = 10,
+	TCF_META_ID_MACLEN = 11,
+	TCF_META_ID_NFMARK = 12,
+	TCF_META_ID_TCINDEX = 13,
+	TCF_META_ID_RTCLASSID = 14,
+	TCF_META_ID_RTIIF = 15,
+	TCF_META_ID_SK_FAMILY = 16,
+	TCF_META_ID_SK_STATE = 17,
+	TCF_META_ID_SK_REUSE = 18,
+	TCF_META_ID_SK_BOUND_IF = 19,
+	TCF_META_ID_SK_REFCNT = 20,
+	TCF_META_ID_SK_SHUTDOWN = 21,
+	TCF_META_ID_SK_PROTO = 22,
+	TCF_META_ID_SK_TYPE = 23,
+	TCF_META_ID_SK_RCVBUF = 24,
+	TCF_META_ID_SK_RMEM_ALLOC = 25,
+	TCF_META_ID_SK_WMEM_ALLOC = 26,
+	TCF_META_ID_SK_OMEM_ALLOC = 27,
+	TCF_META_ID_SK_WMEM_QUEUED = 28,
+	TCF_META_ID_SK_RCV_QLEN = 29,
+	TCF_META_ID_SK_SND_QLEN = 30,
+	TCF_META_ID_SK_ERR_QLEN = 31,
+	TCF_META_ID_SK_FORWARD_ALLOCS = 32,
+	TCF_META_ID_SK_SNDBUF = 33,
+	TCF_META_ID_SK_ALLOCS = 34,
+	__TCF_META_ID_SK_ROUTE_CAPS = 35,
+	TCF_META_ID_SK_HASH = 36,
+	TCF_META_ID_SK_LINGERTIME = 37,
+	TCF_META_ID_SK_ACK_BACKLOG = 38,
+	TCF_META_ID_SK_MAX_ACK_BACKLOG = 39,
+	TCF_META_ID_SK_PRIO = 40,
+	TCF_META_ID_SK_RCVLOWAT = 41,
+	TCF_META_ID_SK_RCVTIMEO = 42,
+	TCF_META_ID_SK_SNDTIMEO = 43,
+	TCF_META_ID_SK_SENDMSG_OFF = 44,
+	TCF_META_ID_SK_WRITE_PENDING = 45,
+	TCF_META_ID_VLAN_TAG = 46,
+	TCF_META_ID_RXHASH = 47,
+	__TCF_META_ID_MAX = 48,
+};
+
+struct meta_match {
+	struct meta_value lvalue;
+	struct meta_value rvalue;
+};
+
+struct tcf_meta_hdr {
+	struct tcf_meta_val left;
+	struct tcf_meta_val right;
+};
+
+struct text_match {
+	u16 from_offset;
+	u16 to_offset;
+	u8 from_layer;
+	u8 to_layer;
+	struct ts_config *config;
+};
+
+struct tcf_em_text {
+	char algo[16];
+	__u16 from_offset;
+	__u16 to_offset;
+	__u16 pattern_len;
+	__u8 from_layer: 4;
+	__u8 to_layer: 4;
+	__u8 pad;
+};
+
+typedef void (*btf_trace_netlink_extack)(void *, const char *);
+
+struct listeners;
+
+struct netlink_table {
+	struct rhashtable hash;
+	struct hlist_head mc_list;
+	struct listeners __attribute__((btf_type_tag("rcu"))) *listeners;
+	unsigned int flags;
+	unsigned int groups;
+	struct mutex *cb_mutex;
+	struct module *module;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	void (*release)(struct sock *, unsigned long *);
+	int registered;
+};
+
+struct listeners {
+	struct callback_head rcu;
+	unsigned long masks[0];
+};
+
+enum netlink_skb_flags {
+	NETLINK_SKB_DST = 8,
+};
+
+enum {
+	NETLINK_F_KERNEL_SOCKET = 0,
+	NETLINK_F_RECV_PKTINFO = 1,
+	NETLINK_F_BROADCAST_SEND_ERROR = 2,
+	NETLINK_F_RECV_NO_ENOBUFS = 3,
+	NETLINK_F_LISTEN_ALL_NSID = 4,
+	NETLINK_F_CAP_ACK = 5,
+	NETLINK_F_EXT_ACK = 6,
+	NETLINK_F_STRICT_CHK = 7,
+};
+
+enum {
+	NETLINK_UNCONNECTED = 0,
+	NETLINK_CONNECTED = 1,
+};
+
+enum nlmsgerr_attrs {
+	NLMSGERR_ATTR_UNUSED = 0,
+	NLMSGERR_ATTR_MSG = 1,
+	NLMSGERR_ATTR_OFFS = 2,
+	NLMSGERR_ATTR_COOKIE = 3,
+	NLMSGERR_ATTR_POLICY = 4,
+	NLMSGERR_ATTR_MISS_TYPE = 5,
+	NLMSGERR_ATTR_MISS_NEST = 6,
+	__NLMSGERR_ATTR_MAX = 7,
+	NLMSGERR_ATTR_MAX = 6,
+};
+
+struct trace_event_raw_netlink_extack {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct netlink_tap {
+	struct net_device *dev;
+	struct module *module;
+	struct list_head list;
+};
+
+struct netlink_sock {
+	struct sock sk;
+	unsigned long flags;
+	u32 portid;
+	u32 dst_portid;
+	u32 dst_group;
+	u32 subscriptions;
+	u32 ngroups;
+	unsigned long *groups;
+	unsigned long state;
+	size_t max_recvmsg_len;
+	wait_queue_head_t wait;
+	bool bound;
+	bool cb_running;
+	int dump_done_errno;
+	struct netlink_callback cb;
+	struct mutex *cb_mutex;
+	struct mutex cb_def_mutex;
+	void (*netlink_rcv)(struct sk_buff *);
+	int (*netlink_bind)(struct net *, int);
+	void (*netlink_unbind)(struct net *, int);
+	void (*netlink_release)(struct sock *, unsigned long *);
+	struct module *module;
+	struct rhash_head node;
+	struct callback_head rcu;
+	struct work_struct work;
+};
+
+struct sockaddr_nl {
+	__kernel_sa_family_t nl_family;
+	unsigned short nl_pad;
+	__u32 nl_pid;
+	__u32 nl_groups;
+};
+
+struct trace_event_data_offsets_netlink_extack {
+	u32 msg;
+};
+
+struct netlink_tap_net {
+	struct list_head netlink_tap_all;
+	struct mutex netlink_tap_lock;
+};
+
+struct netlink_broadcast_data {
+	struct sock *exclude_sk;
+	struct net *net;
+	u32 portid;
+	u32 group;
+	int failure;
+	int delivery_failure;
+	int congested;
+	int delivered;
+	gfp_t allocation;
+	struct sk_buff *skb;
+	struct sk_buff *skb2;
+	int (*tx_filter)(struct sock *, struct sk_buff *, void *);
+	void *tx_data;
+};
+
+struct netlink_set_err_data {
+	struct sock *exclude_sk;
+	u32 portid;
+	u32 group;
+	int code;
+};
+
+struct netlink_compare_arg {
+	possible_net_t pnet;
+	u32 portid;
+};
+
+struct nl_pktinfo {
+	__u32 group;
+};
+
+struct nl_seq_iter {
+	struct seq_net_private p;
+	struct rhashtable_iter hti;
+	int link;
+};
+
+struct bpf_iter__netlink {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct netlink_sock *sk;
+	};
+};
+
+struct nlmsgerr {
+	int error;
+	struct nlmsghdr msg;
+};
+
+struct netlink_notify {
+	struct net *net;
+	u32 portid;
+	int protocol;
+};
+
+enum {
+	CTRL_CMD_UNSPEC = 0,
+	CTRL_CMD_NEWFAMILY = 1,
+	CTRL_CMD_DELFAMILY = 2,
+	CTRL_CMD_GETFAMILY = 3,
+	CTRL_CMD_NEWOPS = 4,
+	CTRL_CMD_DELOPS = 5,
+	CTRL_CMD_GETOPS = 6,
+	CTRL_CMD_NEWMCAST_GRP = 7,
+	CTRL_CMD_DELMCAST_GRP = 8,
+	CTRL_CMD_GETMCAST_GRP = 9,
+	CTRL_CMD_GETPOLICY = 10,
+	__CTRL_CMD_MAX = 11,
+};
+
+enum genl_validate_flags {
+	GENL_DONT_VALIDATE_STRICT = 1,
+	GENL_DONT_VALIDATE_DUMP = 2,
+	GENL_DONT_VALIDATE_DUMP_STRICT = 4,
+};
+
+enum {
+	CTRL_ATTR_UNSPEC = 0,
+	CTRL_ATTR_FAMILY_ID = 1,
+	CTRL_ATTR_FAMILY_NAME = 2,
+	CTRL_ATTR_VERSION = 3,
+	CTRL_ATTR_HDRSIZE = 4,
+	CTRL_ATTR_MAXATTR = 5,
+	CTRL_ATTR_OPS = 6,
+	CTRL_ATTR_MCAST_GROUPS = 7,
+	CTRL_ATTR_POLICY = 8,
+	CTRL_ATTR_OP_POLICY = 9,
+	CTRL_ATTR_OP = 10,
+	__CTRL_ATTR_MAX = 11,
+};
+
+enum {
+	CTRL_ATTR_OP_UNSPEC = 0,
+	CTRL_ATTR_OP_ID = 1,
+	CTRL_ATTR_OP_FLAGS = 2,
+	__CTRL_ATTR_OP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_MCAST_GRP_UNSPEC = 0,
+	CTRL_ATTR_MCAST_GRP_NAME = 1,
+	CTRL_ATTR_MCAST_GRP_ID = 2,
+	__CTRL_ATTR_MCAST_GRP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_POLICY_UNSPEC = 0,
+	CTRL_ATTR_POLICY_DO = 1,
+	CTRL_ATTR_POLICY_DUMP = 2,
+	__CTRL_ATTR_POLICY_DUMP_MAX = 3,
+	CTRL_ATTR_POLICY_DUMP_MAX = 2,
+};
+
+struct genl_op_iter {
+	const struct genl_family *family;
+	struct genl_split_ops doit;
+	struct genl_split_ops dumpit;
+	int cmd_idx;
+	int entry_idx;
+	u32 cmd;
+	u8 flags;
+};
+
+struct netlink_policy_dump_state;
+
+struct ctrl_dump_policy_ctx {
+	struct netlink_policy_dump_state *state;
+	const struct genl_family *rt;
+	struct genl_op_iter *op_iter;
+	u32 op;
+	u16 fam_id;
+	u8 dump_map: 1;
+	u8 single_op: 1;
+};
+
+struct genl_start_context {
+	const struct genl_family *family;
+	struct nlmsghdr *nlh;
+	struct netlink_ext_ack *extack;
+	const struct genl_split_ops *ops;
+	int hdrlen;
+};
+
+enum netlink_attribute_type {
+	NL_ATTR_TYPE_INVALID = 0,
+	NL_ATTR_TYPE_FLAG = 1,
+	NL_ATTR_TYPE_U8 = 2,
+	NL_ATTR_TYPE_U16 = 3,
+	NL_ATTR_TYPE_U32 = 4,
+	NL_ATTR_TYPE_U64 = 5,
+	NL_ATTR_TYPE_S8 = 6,
+	NL_ATTR_TYPE_S16 = 7,
+	NL_ATTR_TYPE_S32 = 8,
+	NL_ATTR_TYPE_S64 = 9,
+	NL_ATTR_TYPE_BINARY = 10,
+	NL_ATTR_TYPE_STRING = 11,
+	NL_ATTR_TYPE_NUL_STRING = 12,
+	NL_ATTR_TYPE_NESTED = 13,
+	NL_ATTR_TYPE_NESTED_ARRAY = 14,
+	NL_ATTR_TYPE_BITFIELD32 = 15,
+};
+
+enum netlink_policy_type_attr {
+	NL_POLICY_TYPE_ATTR_UNSPEC = 0,
+	NL_POLICY_TYPE_ATTR_TYPE = 1,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5,
+	NL_POLICY_TYPE_ATTR_MIN_LENGTH = 6,
+	NL_POLICY_TYPE_ATTR_MAX_LENGTH = 7,
+	NL_POLICY_TYPE_ATTR_POLICY_IDX = 8,
+	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9,
+	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10,
+	NL_POLICY_TYPE_ATTR_PAD = 11,
+	NL_POLICY_TYPE_ATTR_MASK = 12,
+	__NL_POLICY_TYPE_ATTR_MAX = 13,
+	NL_POLICY_TYPE_ATTR_MAX = 12,
+};
+
+struct netlink_policy_dump_state {
+	unsigned int policy_idx;
+	unsigned int attr_idx;
+	unsigned int n_alloc;
+	struct {
+		const struct nla_policy *policy;
+		unsigned int maxtype;
+	} policies[0];
+};
+
+typedef void (*btf_trace_bpf_test_finish)(void *, int *);
+
+struct bpf_test_timer {
+	enum {
+		NO_PREEMPT = 0,
+		NO_MIGRATE = 1,
+	} mode;
+	u32 i;
+	u64 time_start;
+	u64 time_spent;
+};
+
+enum nf_inet_hooks {
+	NF_INET_PRE_ROUTING = 0,
+	NF_INET_LOCAL_IN = 1,
+	NF_INET_FORWARD = 2,
+	NF_INET_LOCAL_OUT = 3,
+	NF_INET_POST_ROUTING = 4,
+	NF_INET_NUMHOOKS = 5,
+	NF_INET_INGRESS = 5,
+};
+
+struct bpf_fentry_test_t {
+	struct bpf_fentry_test_t *a;
+};
+
+struct trace_event_raw_bpf_test_finish {
+	struct trace_entry ent;
+	int err;
+	char __data[0];
+};
+
+struct xdp_test_data {
+	struct xdp_buff *orig_ctx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xdp_rxq_info rxq;
+	struct net_device *dev;
+	struct page_pool *pp;
+	struct xdp_frame **frames;
+	struct sk_buff **skbs;
+	struct xdp_mem_info mem;
+	u32 batch_size;
+	u32 frame_cnt;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_page_head {
+	struct xdp_buff orig_ctx;
+	struct xdp_buff ctx;
+	union {
+		struct {
+			struct {} __empty_frame;
+			struct xdp_frame frame[0];
+		};
+		struct {
+			struct {} __empty_data;
+			u8 data[0];
+		};
+	};
+};
+
+struct trace_event_data_offsets_bpf_test_finish {};
+
+struct prog_test_member1 {
+	int a;
+};
+
+struct prog_test_member {
+	struct prog_test_member1 m;
+	int c;
+};
+
+struct prog_test_ref_kfunc {
+	int a;
+	int b;
+	struct prog_test_member memb;
+	struct prog_test_ref_kfunc *next;
+	refcount_t cnt;
+};
+
+struct bpf_raw_tp_test_run_info {
+	struct bpf_prog *prog;
+	void *ctx;
+	u32 retval;
+};
+
+struct bpf_dummy_ops_test_args {
+	u64 args[12];
+	struct bpf_dummy_ops_state state;
+};
+
+typedef int (*dummy_ops_test_ret_fn)(struct bpf_dummy_ops_state *, ...);
+
+enum ethtool_flags {
+	ETH_FLAG_TXVLAN = 128,
+	ETH_FLAG_RXVLAN = 256,
+	ETH_FLAG_LRO = 32768,
+	ETH_FLAG_NTUPLE = 134217728,
+	ETH_FLAG_RXHASH = 268435456,
+};
+
+enum ethtool_sfeatures_retval_bits {
+	ETHTOOL_F_UNSUPPORTED__BIT = 0,
+	ETHTOOL_F_WISH__BIT = 1,
+	ETHTOOL_F_COMPAT__BIT = 2,
+};
+
+enum tunable_id {
+	ETHTOOL_ID_UNSPEC = 0,
+	ETHTOOL_RX_COPYBREAK = 1,
+	ETHTOOL_TX_COPYBREAK = 2,
+	ETHTOOL_PFC_PREVENTION_TOUT = 3,
+	ETHTOOL_TX_COPYBREAK_BUF_SIZE = 4,
+	__ETHTOOL_TUNABLE_COUNT = 5,
+};
+
+enum tunable_type_id {
+	ETHTOOL_TUNABLE_UNSPEC = 0,
+	ETHTOOL_TUNABLE_U8 = 1,
+	ETHTOOL_TUNABLE_U16 = 2,
+	ETHTOOL_TUNABLE_U32 = 3,
+	ETHTOOL_TUNABLE_U64 = 4,
+	ETHTOOL_TUNABLE_STRING = 5,
+	ETHTOOL_TUNABLE_S8 = 6,
+	ETHTOOL_TUNABLE_S16 = 7,
+	ETHTOOL_TUNABLE_S32 = 8,
+	ETHTOOL_TUNABLE_S64 = 9,
+};
+
+enum phy_tunable_id {
+	ETHTOOL_PHY_ID_UNSPEC = 0,
+	ETHTOOL_PHY_DOWNSHIFT = 1,
+	ETHTOOL_PHY_FAST_LINK_DOWN = 2,
+	ETHTOOL_PHY_EDPD = 3,
+	__ETHTOOL_PHY_TUNABLE_COUNT = 4,
+};
+
+enum ethtool_fec_config_bits {
+	ETHTOOL_FEC_NONE_BIT = 0,
+	ETHTOOL_FEC_AUTO_BIT = 1,
+	ETHTOOL_FEC_OFF_BIT = 2,
+	ETHTOOL_FEC_RS_BIT = 3,
+	ETHTOOL_FEC_BASER_BIT = 4,
+	ETHTOOL_FEC_LLRS_BIT = 5,
+};
+
+struct ethtool_rx_flow_key {
+	struct flow_dissector_key_basic basic;
+	union {
+		struct flow_dissector_key_ipv4_addrs ipv4;
+		struct flow_dissector_key_ipv6_addrs ipv6;
+	};
+	struct flow_dissector_key_ports tp;
+	struct flow_dissector_key_ip ip;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_eth_addrs eth_addrs;
+};
+
+struct ethtool_rx_flow_match {
+	struct flow_dissector dissector;
+	struct ethtool_rx_flow_key key;
+	struct ethtool_rx_flow_key mask;
+};
+
+struct ethtool_devlink_compat {
+	struct devlink *devlink;
+	union {
+		struct ethtool_flash efl;
+		struct ethtool_drvinfo info;
+	};
+};
+
+struct ethtool_value {
+	__u32 cmd;
+	__u32 data;
+};
+
+struct ethtool_rx_flow_rule {
+	struct flow_rule *rule;
+	unsigned long priv[0];
+};
+
+struct ethtool_cmd {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertising;
+	__u16 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 transceiver;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u32 maxtxpkt;
+	__u32 maxrxpkt;
+	__u16 speed_hi;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__u32 lp_advertising;
+	__u32 reserved[2];
+};
+
+struct ethtool_link_usettings {
+	struct ethtool_link_settings base;
+	struct {
+		__u32 supported[4];
+		__u32 advertising[4];
+		__u32 lp_advertising[4];
+	} link_modes;
+};
+
+struct ethtool_rx_flow_spec_input {
+	const struct ethtool_rx_flow_spec *fs;
+	u32 rss_ctx;
+};
+
+struct ethtool_gstrings {
+	__u32 cmd;
+	__u32 string_set;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_perm_addr {
+	__u32 cmd;
+	__u32 size;
+	__u8 data[0];
+};
+
+struct ethtool_sset_info {
+	__u32 cmd;
+	__u32 reserved;
+	__u64 sset_mask;
+	__u32 data[0];
+};
+
+struct ethtool_rxfh {
+	__u32 cmd;
+	__u32 rss_context;
+	__u32 indir_size;
+	__u32 key_size;
+	__u8 hfunc;
+	__u8 rsvd8[3];
+	__u32 rsvd32;
+	__u32 rss_config[0];
+};
+
+struct ethtool_get_features_block {
+	__u32 available;
+	__u32 requested;
+	__u32 active;
+	__u32 never_changed;
+};
+
+struct ethtool_gfeatures {
+	__u32 cmd;
+	__u32 size;
+	struct ethtool_get_features_block features[0];
+};
+
+struct ethtool_set_features_block {
+	__u32 valid;
+	__u32 requested;
+};
+
+struct ethtool_sfeatures {
+	__u32 cmd;
+	__u32 size;
+	struct ethtool_set_features_block features[0];
+};
+
+struct ethtool_per_queue_op {
+	__u32 cmd;
+	__u32 sub_command;
+	__u32 queue_mask[128];
+	char data[0];
+};
+
+struct link_mode_info {
+	int speed;
+	u8 lanes;
+	u8 duplex;
+};
+
+typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);
+
+struct ethnl_req_info;
+
+struct ethnl_reply_data;
+
+struct ethnl_request_ops {
+	u8 request_cmd;
+	u8 reply_cmd;
+	u16 hdr_attr;
+	unsigned int req_info_size;
+	unsigned int reply_data_size;
+	bool allow_nodev_do;
+	u8 set_ntf_cmd;
+	int (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *);
+	int (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, const struct genl_info *);
+	int (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	int (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	void (*cleanup_data)(struct ethnl_reply_data *);
+	int (*set_validate)(struct ethnl_req_info *, struct genl_info *);
+	int (*set)(struct ethnl_req_info *, struct genl_info *);
+};
+
+struct ethnl_req_info {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+};
+
+struct ethnl_reply_data {
+	struct net_device *dev;
+};
+
+enum {
+	ETHTOOL_A_HEADER_UNSPEC = 0,
+	ETHTOOL_A_HEADER_DEV_INDEX = 1,
+	ETHTOOL_A_HEADER_DEV_NAME = 2,
+	ETHTOOL_A_HEADER_FLAGS = 3,
+	__ETHTOOL_A_HEADER_CNT = 4,
+	ETHTOOL_A_HEADER_MAX = 3,
+};
+
+enum ethtool_multicast_groups {
+	ETHNL_MCGRP_MONITOR = 0,
+};
+
+struct ethnl_dump_ctx {
+	const struct ethnl_request_ops *ops;
+	struct ethnl_req_info *req_info;
+	struct ethnl_reply_data *reply_data;
+	unsigned long pos_ifindex;
+};
+
+enum {
+	ETHTOOL_A_BITSET_UNSPEC = 0,
+	ETHTOOL_A_BITSET_NOMASK = 1,
+	ETHTOOL_A_BITSET_SIZE = 2,
+	ETHTOOL_A_BITSET_BITS = 3,
+	ETHTOOL_A_BITSET_VALUE = 4,
+	ETHTOOL_A_BITSET_MASK = 5,
+	__ETHTOOL_A_BITSET_CNT = 6,
+	ETHTOOL_A_BITSET_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_BITSET_BITS_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BITS_BIT = 1,
+	__ETHTOOL_A_BITSET_BITS_CNT = 2,
+	ETHTOOL_A_BITSET_BITS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_BITSET_BIT_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BIT_INDEX = 1,
+	ETHTOOL_A_BITSET_BIT_NAME = 2,
+	ETHTOOL_A_BITSET_BIT_VALUE = 3,
+	__ETHTOOL_A_BITSET_BIT_CNT = 4,
+	ETHTOOL_A_BITSET_BIT_MAX = 3,
+};
+
+typedef const char (* const ethnl_string_array_t)[32];
+
+struct strset_info {
+	bool per_dev;
+	bool free_strings;
+	unsigned int count;
+	const char (*strings)[32];
+};
+
+enum {
+	ETHTOOL_A_STRSET_UNSPEC = 0,
+	ETHTOOL_A_STRSET_HEADER = 1,
+	ETHTOOL_A_STRSET_STRINGSETS = 2,
+	ETHTOOL_A_STRSET_COUNTS_ONLY = 3,
+	__ETHTOOL_A_STRSET_CNT = 4,
+	ETHTOOL_A_STRSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STRINGSETS_UNSPEC = 0,
+	ETHTOOL_A_STRINGSETS_STRINGSET = 1,
+	__ETHTOOL_A_STRINGSETS_CNT = 2,
+	ETHTOOL_A_STRINGSETS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_STRINGSET_UNSPEC = 0,
+	ETHTOOL_A_STRINGSET_ID = 1,
+	ETHTOOL_A_STRINGSET_COUNT = 2,
+	ETHTOOL_A_STRINGSET_STRINGS = 3,
+	__ETHTOOL_A_STRINGSET_CNT = 4,
+	ETHTOOL_A_STRINGSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STRINGS_UNSPEC = 0,
+	ETHTOOL_A_STRINGS_STRING = 1,
+	__ETHTOOL_A_STRINGS_CNT = 2,
+	ETHTOOL_A_STRINGS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_STRING_UNSPEC = 0,
+	ETHTOOL_A_STRING_INDEX = 1,
+	ETHTOOL_A_STRING_VALUE = 2,
+	__ETHTOOL_A_STRING_CNT = 3,
+	ETHTOOL_A_STRING_MAX = 2,
+};
+
+struct strset_req_info {
+	struct ethnl_req_info base;
+	u32 req_ids;
+	bool counts_only;
+};
+
+struct strset_reply_data {
+	struct ethnl_reply_data base;
+	struct strset_info sets[21];
+};
+
+enum {
+	ETHTOOL_A_LINKINFO_UNSPEC = 0,
+	ETHTOOL_A_LINKINFO_HEADER = 1,
+	ETHTOOL_A_LINKINFO_PORT = 2,
+	ETHTOOL_A_LINKINFO_PHYADDR = 3,
+	ETHTOOL_A_LINKINFO_TP_MDIX = 4,
+	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5,
+	ETHTOOL_A_LINKINFO_TRANSCEIVER = 6,
+	__ETHTOOL_A_LINKINFO_CNT = 7,
+	ETHTOOL_A_LINKINFO_MAX = 6,
+};
+
+struct linkinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_link_ksettings ksettings;
+	struct ethtool_link_settings *lsettings;
+};
+
+enum {
+	ETHTOOL_A_LINKMODES_UNSPEC = 0,
+	ETHTOOL_A_LINKMODES_HEADER = 1,
+	ETHTOOL_A_LINKMODES_AUTONEG = 2,
+	ETHTOOL_A_LINKMODES_OURS = 3,
+	ETHTOOL_A_LINKMODES_PEER = 4,
+	ETHTOOL_A_LINKMODES_SPEED = 5,
+	ETHTOOL_A_LINKMODES_DUPLEX = 6,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,
+	ETHTOOL_A_LINKMODES_LANES = 9,
+	ETHTOOL_A_LINKMODES_RATE_MATCHING = 10,
+	__ETHTOOL_A_LINKMODES_CNT = 11,
+	ETHTOOL_A_LINKMODES_MAX = 10,
+};
+
+struct linkmodes_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_link_ksettings ksettings;
+	struct ethtool_link_settings *lsettings;
+	bool peer_empty;
+};
+
+enum {
+	ETHTOOL_A_RSS_UNSPEC = 0,
+	ETHTOOL_A_RSS_HEADER = 1,
+	ETHTOOL_A_RSS_CONTEXT = 2,
+	ETHTOOL_A_RSS_HFUNC = 3,
+	ETHTOOL_A_RSS_INDIR = 4,
+	ETHTOOL_A_RSS_HKEY = 5,
+	__ETHTOOL_A_RSS_CNT = 6,
+	ETHTOOL_A_RSS_MAX = 5,
+};
+
+struct rss_req_info {
+	struct ethnl_req_info base;
+	u32 rss_context;
+};
+
+struct rss_reply_data {
+	struct ethnl_reply_data base;
+	u32 indir_size;
+	u32 hkey_size;
+	u32 hfunc;
+	u32 *indir_table;
+	u8 *hkey;
+};
+
+enum {
+	ETHTOOL_A_LINKSTATE_UNSPEC = 0,
+	ETHTOOL_A_LINKSTATE_HEADER = 1,
+	ETHTOOL_A_LINKSTATE_LINK = 2,
+	ETHTOOL_A_LINKSTATE_SQI = 3,
+	ETHTOOL_A_LINKSTATE_SQI_MAX = 4,
+	ETHTOOL_A_LINKSTATE_EXT_STATE = 5,
+	ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6,
+	ETHTOOL_A_LINKSTATE_EXT_DOWN_CNT = 7,
+	__ETHTOOL_A_LINKSTATE_CNT = 8,
+	ETHTOOL_A_LINKSTATE_MAX = 7,
+};
+
+struct linkstate_reply_data {
+	struct ethnl_reply_data base;
+	int link;
+	int sqi;
+	int sqi_max;
+	struct ethtool_link_ext_stats link_stats;
+	bool link_ext_state_provided;
+	struct ethtool_link_ext_state_info ethtool_link_ext_state_info;
+};
+
+enum {
+	ETHTOOL_A_DEBUG_UNSPEC = 0,
+	ETHTOOL_A_DEBUG_HEADER = 1,
+	ETHTOOL_A_DEBUG_MSGMASK = 2,
+	__ETHTOOL_A_DEBUG_CNT = 3,
+	ETHTOOL_A_DEBUG_MAX = 2,
+};
+
+struct debug_reply_data {
+	struct ethnl_reply_data base;
+	u32 msg_mask;
+};
+
+enum {
+	ETHTOOL_A_WOL_UNSPEC = 0,
+	ETHTOOL_A_WOL_HEADER = 1,
+	ETHTOOL_A_WOL_MODES = 2,
+	ETHTOOL_A_WOL_SOPASS = 3,
+	__ETHTOOL_A_WOL_CNT = 4,
+	ETHTOOL_A_WOL_MAX = 3,
+};
+
+struct wol_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_wolinfo wol;
+	bool show_sopass;
+};
+
+enum {
+	ETHTOOL_A_FEATURES_UNSPEC = 0,
+	ETHTOOL_A_FEATURES_HEADER = 1,
+	ETHTOOL_A_FEATURES_HW = 2,
+	ETHTOOL_A_FEATURES_WANTED = 3,
+	ETHTOOL_A_FEATURES_ACTIVE = 4,
+	ETHTOOL_A_FEATURES_NOCHANGE = 5,
+	__ETHTOOL_A_FEATURES_CNT = 6,
+	ETHTOOL_A_FEATURES_MAX = 5,
+};
+
+struct features_reply_data {
+	struct ethnl_reply_data base;
+	u32 hw[2];
+	u32 wanted[2];
+	u32 active[2];
+	u32 nochange[2];
+	u32 all[2];
+};
+
+enum {
+	ETHTOOL_A_PRIVFLAGS_UNSPEC = 0,
+	ETHTOOL_A_PRIVFLAGS_HEADER = 1,
+	ETHTOOL_A_PRIVFLAGS_FLAGS = 2,
+	__ETHTOOL_A_PRIVFLAGS_CNT = 3,
+	ETHTOOL_A_PRIVFLAGS_MAX = 2,
+};
+
+struct privflags_reply_data {
+	struct ethnl_reply_data base;
+	const char (*priv_flag_names)[32];
+	unsigned int n_priv_flags;
+	u32 priv_flags;
+};
+
+enum {
+	ETHTOOL_TCP_DATA_SPLIT_UNKNOWN = 0,
+	ETHTOOL_TCP_DATA_SPLIT_DISABLED = 1,
+	ETHTOOL_TCP_DATA_SPLIT_ENABLED = 2,
+};
+
+enum {
+	ETHTOOL_A_RINGS_UNSPEC = 0,
+	ETHTOOL_A_RINGS_HEADER = 1,
+	ETHTOOL_A_RINGS_RX_MAX = 2,
+	ETHTOOL_A_RINGS_RX_MINI_MAX = 3,
+	ETHTOOL_A_RINGS_RX_JUMBO_MAX = 4,
+	ETHTOOL_A_RINGS_TX_MAX = 5,
+	ETHTOOL_A_RINGS_RX = 6,
+	ETHTOOL_A_RINGS_RX_MINI = 7,
+	ETHTOOL_A_RINGS_RX_JUMBO = 8,
+	ETHTOOL_A_RINGS_TX = 9,
+	ETHTOOL_A_RINGS_RX_BUF_LEN = 10,
+	ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 11,
+	ETHTOOL_A_RINGS_CQE_SIZE = 12,
+	ETHTOOL_A_RINGS_TX_PUSH = 13,
+	ETHTOOL_A_RINGS_RX_PUSH = 14,
+	ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN = 15,
+	ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX = 16,
+	__ETHTOOL_A_RINGS_CNT = 17,
+	ETHTOOL_A_RINGS_MAX = 16,
+};
+
+enum ethtool_supported_ring_param {
+	ETHTOOL_RING_USE_RX_BUF_LEN = 1,
+	ETHTOOL_RING_USE_CQE_SIZE = 2,
+	ETHTOOL_RING_USE_TX_PUSH = 4,
+	ETHTOOL_RING_USE_RX_PUSH = 8,
+	ETHTOOL_RING_USE_TX_PUSH_BUF_LEN = 16,
+};
+
+struct rings_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_ringparam ringparam;
+	struct kernel_ethtool_ringparam kernel_ringparam;
+	u32 supported_ring_params;
+};
+
+enum {
+	ETHTOOL_A_CHANNELS_UNSPEC = 0,
+	ETHTOOL_A_CHANNELS_HEADER = 1,
+	ETHTOOL_A_CHANNELS_RX_MAX = 2,
+	ETHTOOL_A_CHANNELS_TX_MAX = 3,
+	ETHTOOL_A_CHANNELS_OTHER_MAX = 4,
+	ETHTOOL_A_CHANNELS_COMBINED_MAX = 5,
+	ETHTOOL_A_CHANNELS_RX_COUNT = 6,
+	ETHTOOL_A_CHANNELS_TX_COUNT = 7,
+	ETHTOOL_A_CHANNELS_OTHER_COUNT = 8,
+	ETHTOOL_A_CHANNELS_COMBINED_COUNT = 9,
+	__ETHTOOL_A_CHANNELS_CNT = 10,
+	ETHTOOL_A_CHANNELS_MAX = 9,
+};
+
+struct channels_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_channels channels;
+};
+
+enum {
+	ETHTOOL_A_COALESCE_UNSPEC = 0,
+	ETHTOOL_A_COALESCE_HEADER = 1,
+	ETHTOOL_A_COALESCE_RX_USECS = 2,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3,
+	ETHTOOL_A_COALESCE_RX_USECS_IRQ = 4,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5,
+	ETHTOOL_A_COALESCE_TX_USECS = 6,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7,
+	ETHTOOL_A_COALESCE_TX_USECS_IRQ = 8,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9,
+	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12,
+	ETHTOOL_A_COALESCE_PKT_RATE_LOW = 13,
+	ETHTOOL_A_COALESCE_RX_USECS_LOW = 14,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15,
+	ETHTOOL_A_COALESCE_TX_USECS_LOW = 16,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17,
+	ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18,
+	ETHTOOL_A_COALESCE_RX_USECS_HIGH = 19,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20,
+	ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,
+	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 24,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 25,
+	ETHTOOL_A_COALESCE_TX_AGGR_MAX_BYTES = 26,
+	ETHTOOL_A_COALESCE_TX_AGGR_MAX_FRAMES = 27,
+	ETHTOOL_A_COALESCE_TX_AGGR_TIME_USECS = 28,
+	__ETHTOOL_A_COALESCE_CNT = 29,
+	ETHTOOL_A_COALESCE_MAX = 28,
+};
+
+struct coalesce_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_coalesce coalesce;
+	struct kernel_ethtool_coalesce kernel_coalesce;
+	u32 supported_params;
+};
+
+enum {
+	ETHTOOL_A_PAUSE_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_HEADER = 1,
+	ETHTOOL_A_PAUSE_AUTONEG = 2,
+	ETHTOOL_A_PAUSE_RX = 3,
+	ETHTOOL_A_PAUSE_TX = 4,
+	ETHTOOL_A_PAUSE_STATS = 5,
+	ETHTOOL_A_PAUSE_STATS_SRC = 6,
+	__ETHTOOL_A_PAUSE_CNT = 7,
+	ETHTOOL_A_PAUSE_MAX = 6,
+};
+
+enum {
+	ETHTOOL_A_PAUSE_STAT_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_STAT_PAD = 1,
+	ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2,
+	ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3,
+	__ETHTOOL_A_PAUSE_STAT_CNT = 4,
+	ETHTOOL_A_PAUSE_STAT_MAX = 3,
+};
+
+struct pause_req_info {
+	struct ethnl_req_info base;
+	enum ethtool_mac_stats_src src;
+};
+
+struct pause_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_pauseparam pauseparam;
+	struct ethtool_pause_stats pausestat;
+};
+
+enum {
+	ETHTOOL_A_EEE_UNSPEC = 0,
+	ETHTOOL_A_EEE_HEADER = 1,
+	ETHTOOL_A_EEE_MODES_OURS = 2,
+	ETHTOOL_A_EEE_MODES_PEER = 3,
+	ETHTOOL_A_EEE_ACTIVE = 4,
+	ETHTOOL_A_EEE_ENABLED = 5,
+	ETHTOOL_A_EEE_TX_LPI_ENABLED = 6,
+	ETHTOOL_A_EEE_TX_LPI_TIMER = 7,
+	__ETHTOOL_A_EEE_CNT = 8,
+	ETHTOOL_A_EEE_MAX = 7,
+};
+
+struct eee_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_eee eee;
+};
+
+enum {
+	ETHTOOL_A_TSINFO_UNSPEC = 0,
+	ETHTOOL_A_TSINFO_HEADER = 1,
+	ETHTOOL_A_TSINFO_TIMESTAMPING = 2,
+	ETHTOOL_A_TSINFO_TX_TYPES = 3,
+	ETHTOOL_A_TSINFO_RX_FILTERS = 4,
+	ETHTOOL_A_TSINFO_PHC_INDEX = 5,
+	__ETHTOOL_A_TSINFO_CNT = 6,
+	ETHTOOL_A_TSINFO_MAX = 5,
+};
+
+struct tsinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_ts_info ts_info;
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_HEADER = 1,
+	__ETHTOOL_A_CABLE_TEST_CNT = 2,
+	ETHTOOL_A_CABLE_TEST_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_NTF_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS = 2,
+	ETHTOOL_A_CABLE_TEST_NTF_NEST = 3,
+	__ETHTOOL_A_CABLE_TEST_NTF_CNT = 4,
+	ETHTOOL_A_CABLE_TEST_NTF_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 1,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_NEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_NEST_RESULT = 1,
+	ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 2,
+	__ETHTOOL_A_CABLE_NEST_CNT = 3,
+	ETHTOOL_A_CABLE_NEST_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_RESULT_UNSPEC = 0,
+	ETHTOOL_A_CABLE_RESULT_PAIR = 1,
+	ETHTOOL_A_CABLE_RESULT_CODE = 2,
+	__ETHTOOL_A_CABLE_RESULT_CNT = 3,
+	ETHTOOL_A_CABLE_RESULT_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 1,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 2,
+	__ETHTOOL_A_CABLE_FAULT_LENGTH_CNT = 3,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG = 2,
+	__ETHTOOL_A_CABLE_TEST_TDR_CNT = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TDR_NEST_STEP = 1,
+	ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 2,
+	ETHTOOL_A_CABLE_TDR_NEST_PULSE = 3,
+	__ETHTOOL_A_CABLE_TDR_NEST_CNT = 4,
+	ETHTOOL_A_CABLE_TDR_NEST_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 1,
+	ETHTOOL_A_CABLE_AMPLITUDE_mV = 2,
+	__ETHTOOL_A_CABLE_AMPLITUDE_CNT = 3,
+	ETHTOOL_A_CABLE_AMPLITUDE_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_PULSE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_PULSE_mV = 1,
+	__ETHTOOL_A_CABLE_PULSE_CNT = 2,
+	ETHTOOL_A_CABLE_PULSE_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_STEP_UNSPEC = 0,
+	ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 1,
+	ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 2,
+	ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 3,
+	__ETHTOOL_A_CABLE_STEP_CNT = 4,
+	ETHTOOL_A_CABLE_STEP_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 2,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 4,
+	__ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT = 5,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 4,
+};
+
+enum {
+	ETHTOOL_A_CABLE_PAIR_A = 0,
+	ETHTOOL_A_CABLE_PAIR_B = 1,
+	ETHTOOL_A_CABLE_PAIR_C = 2,
+	ETHTOOL_A_CABLE_PAIR_D = 3,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_INFO_HEADER = 1,
+	ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2,
+	__ETHTOOL_A_TUNNEL_INFO_CNT = 3,
+	ETHTOOL_A_TUNNEL_INFO_MAX = 2,
+};
+
+enum udp_tunnel_nic_info_flags {
+	UDP_TUNNEL_NIC_INFO_MAY_SLEEP = 1,
+	UDP_TUNNEL_NIC_INFO_OPEN_ONLY = 2,
+	UDP_TUNNEL_NIC_INFO_IPV4_ONLY = 4,
+	UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN = 8,
+};
+
+enum {
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0,
+	ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1,
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2,
+	__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_TABLE = 1,
+	__ETHTOOL_A_TUNNEL_UDP_CNT = 2,
+	ETHTOOL_A_TUNNEL_UDP_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 1,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 2,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 3,
+	__ETHTOOL_A_TUNNEL_UDP_TABLE_CNT = 4,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 1,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 2,
+	__ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT = 3,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 2,
+};
+
+struct ethnl_tunnel_info_dump_ctx {
+	struct ethnl_req_info req_info;
+	unsigned long ifindex;
+};
+
+enum {
+	ETHTOOL_A_FEC_UNSPEC = 0,
+	ETHTOOL_A_FEC_HEADER = 1,
+	ETHTOOL_A_FEC_MODES = 2,
+	ETHTOOL_A_FEC_AUTO = 3,
+	ETHTOOL_A_FEC_ACTIVE = 4,
+	ETHTOOL_A_FEC_STATS = 5,
+	__ETHTOOL_A_FEC_CNT = 6,
+	ETHTOOL_A_FEC_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_FEC_STAT_UNSPEC = 0,
+	ETHTOOL_A_FEC_STAT_PAD = 1,
+	ETHTOOL_A_FEC_STAT_CORRECTED = 2,
+	ETHTOOL_A_FEC_STAT_UNCORR = 3,
+	ETHTOOL_A_FEC_STAT_CORR_BITS = 4,
+	__ETHTOOL_A_FEC_STAT_CNT = 5,
+	ETHTOOL_A_FEC_STAT_MAX = 4,
+};
+
+struct fec_stat_grp {
+	u64 stats[9];
+	u8 cnt;
+};
+
+struct fec_reply_data {
+	struct ethnl_reply_data base;
+	unsigned long fec_link_modes[2];
+	u32 active_fec;
+	u8 fec_auto;
+	struct fec_stat_grp corr;
+	struct fec_stat_grp uncorr;
+	struct fec_stat_grp corr_bits;
+};
+
+enum {
+	ETHTOOL_A_MODULE_EEPROM_UNSPEC = 0,
+	ETHTOOL_A_MODULE_EEPROM_HEADER = 1,
+	ETHTOOL_A_MODULE_EEPROM_OFFSET = 2,
+	ETHTOOL_A_MODULE_EEPROM_LENGTH = 3,
+	ETHTOOL_A_MODULE_EEPROM_PAGE = 4,
+	ETHTOOL_A_MODULE_EEPROM_BANK = 5,
+	ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS = 6,
+	ETHTOOL_A_MODULE_EEPROM_DATA = 7,
+	__ETHTOOL_A_MODULE_EEPROM_CNT = 8,
+	ETHTOOL_A_MODULE_EEPROM_MAX = 7,
+};
+
+struct eeprom_req_info {
+	struct ethnl_req_info base;
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+};
+
+struct eeprom_reply_data {
+	struct ethnl_reply_data base;
+	u32 length;
+	u8 *data;
+};
+
+enum {
+	ETHTOOL_STATS_ETH_PHY = 0,
+	ETHTOOL_STATS_ETH_MAC = 1,
+	ETHTOOL_STATS_ETH_CTRL = 2,
+	ETHTOOL_STATS_RMON = 3,
+	__ETHTOOL_STATS_CNT = 4,
+};
+
+enum {
+	ETHTOOL_A_STATS_UNSPEC = 0,
+	ETHTOOL_A_STATS_PAD = 1,
+	ETHTOOL_A_STATS_HEADER = 2,
+	ETHTOOL_A_STATS_GROUPS = 3,
+	ETHTOOL_A_STATS_GRP = 4,
+	ETHTOOL_A_STATS_SRC = 5,
+	__ETHTOOL_A_STATS_CNT = 6,
+	ETHTOOL_A_STATS_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_STATS_GRP_UNSPEC = 0,
+	ETHTOOL_A_STATS_GRP_PAD = 1,
+	ETHTOOL_A_STATS_GRP_ID = 2,
+	ETHTOOL_A_STATS_GRP_SS_ID = 3,
+	ETHTOOL_A_STATS_GRP_STAT = 4,
+	ETHTOOL_A_STATS_GRP_HIST_RX = 5,
+	ETHTOOL_A_STATS_GRP_HIST_TX = 6,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_LOW = 7,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_HI = 8,
+	ETHTOOL_A_STATS_GRP_HIST_VAL = 9,
+	__ETHTOOL_A_STATS_GRP_CNT = 10,
+	ETHTOOL_A_STATS_GRP_MAX = 9,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_PHY_5_SYM_ERR = 0,
+	__ETHTOOL_A_STATS_ETH_PHY_CNT = 1,
+	ETHTOOL_A_STATS_ETH_PHY_MAX = 0,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_MAC_2_TX_PKT = 0,
+	ETHTOOL_A_STATS_ETH_MAC_3_SINGLE_COL = 1,
+	ETHTOOL_A_STATS_ETH_MAC_4_MULTI_COL = 2,
+	ETHTOOL_A_STATS_ETH_MAC_5_RX_PKT = 3,
+	ETHTOOL_A_STATS_ETH_MAC_6_FCS_ERR = 4,
+	ETHTOOL_A_STATS_ETH_MAC_7_ALIGN_ERR = 5,
+	ETHTOOL_A_STATS_ETH_MAC_8_TX_BYTES = 6,
+	ETHTOOL_A_STATS_ETH_MAC_9_TX_DEFER = 7,
+	ETHTOOL_A_STATS_ETH_MAC_10_LATE_COL = 8,
+	ETHTOOL_A_STATS_ETH_MAC_11_XS_COL = 9,
+	ETHTOOL_A_STATS_ETH_MAC_12_TX_INT_ERR = 10,
+	ETHTOOL_A_STATS_ETH_MAC_13_CS_ERR = 11,
+	ETHTOOL_A_STATS_ETH_MAC_14_RX_BYTES = 12,
+	ETHTOOL_A_STATS_ETH_MAC_15_RX_INT_ERR = 13,
+	ETHTOOL_A_STATS_ETH_MAC_18_TX_MCAST = 14,
+	ETHTOOL_A_STATS_ETH_MAC_19_TX_BCAST = 15,
+	ETHTOOL_A_STATS_ETH_MAC_20_XS_DEFER = 16,
+	ETHTOOL_A_STATS_ETH_MAC_21_RX_MCAST = 17,
+	ETHTOOL_A_STATS_ETH_MAC_22_RX_BCAST = 18,
+	ETHTOOL_A_STATS_ETH_MAC_23_IR_LEN_ERR = 19,
+	ETHTOOL_A_STATS_ETH_MAC_24_OOR_LEN = 20,
+	ETHTOOL_A_STATS_ETH_MAC_25_TOO_LONG_ERR = 21,
+	__ETHTOOL_A_STATS_ETH_MAC_CNT = 22,
+	ETHTOOL_A_STATS_ETH_MAC_MAX = 21,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_CTRL_3_TX = 0,
+	ETHTOOL_A_STATS_ETH_CTRL_4_RX = 1,
+	ETHTOOL_A_STATS_ETH_CTRL_5_RX_UNSUP = 2,
+	__ETHTOOL_A_STATS_ETH_CTRL_CNT = 3,
+	ETHTOOL_A_STATS_ETH_CTRL_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_STATS_RMON_UNDERSIZE = 0,
+	ETHTOOL_A_STATS_RMON_OVERSIZE = 1,
+	ETHTOOL_A_STATS_RMON_FRAG = 2,
+	ETHTOOL_A_STATS_RMON_JABBER = 3,
+	__ETHTOOL_A_STATS_RMON_CNT = 4,
+	ETHTOOL_A_STATS_RMON_MAX = 3,
+};
+
+struct stats_req_info {
+	struct ethnl_req_info base;
+	unsigned long stat_mask[1];
+	enum ethtool_mac_stats_src src;
+};
+
+struct stats_reply_data {
+	struct ethnl_reply_data base;
+	union {
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		};
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		} stats;
+	};
+	const struct ethtool_rmon_hist_range *rmon_ranges;
+};
+
+enum {
+	ETHTOOL_A_PHC_VCLOCKS_UNSPEC = 0,
+	ETHTOOL_A_PHC_VCLOCKS_HEADER = 1,
+	ETHTOOL_A_PHC_VCLOCKS_NUM = 2,
+	ETHTOOL_A_PHC_VCLOCKS_INDEX = 3,
+	__ETHTOOL_A_PHC_VCLOCKS_CNT = 4,
+	ETHTOOL_A_PHC_VCLOCKS_MAX = 3,
+};
+
+struct phc_vclocks_reply_data {
+	struct ethnl_reply_data base;
+	int num;
+	int *index;
+};
+
+enum {
+	ETHTOOL_A_MM_STAT_UNSPEC = 0,
+	ETHTOOL_A_MM_STAT_PAD = 1,
+	ETHTOOL_A_MM_STAT_REASSEMBLY_ERRORS = 2,
+	ETHTOOL_A_MM_STAT_SMD_ERRORS = 3,
+	ETHTOOL_A_MM_STAT_REASSEMBLY_OK = 4,
+	ETHTOOL_A_MM_STAT_RX_FRAG_COUNT = 5,
+	ETHTOOL_A_MM_STAT_TX_FRAG_COUNT = 6,
+	ETHTOOL_A_MM_STAT_HOLD_COUNT = 7,
+	__ETHTOOL_A_MM_STAT_CNT = 8,
+	ETHTOOL_A_MM_STAT_MAX = 7,
+};
+
+enum {
+	ETHTOOL_A_MM_UNSPEC = 0,
+	ETHTOOL_A_MM_HEADER = 1,
+	ETHTOOL_A_MM_PMAC_ENABLED = 2,
+	ETHTOOL_A_MM_TX_ENABLED = 3,
+	ETHTOOL_A_MM_TX_ACTIVE = 4,
+	ETHTOOL_A_MM_TX_MIN_FRAG_SIZE = 5,
+	ETHTOOL_A_MM_RX_MIN_FRAG_SIZE = 6,
+	ETHTOOL_A_MM_VERIFY_ENABLED = 7,
+	ETHTOOL_A_MM_VERIFY_STATUS = 8,
+	ETHTOOL_A_MM_VERIFY_TIME = 9,
+	ETHTOOL_A_MM_MAX_VERIFY_TIME = 10,
+	ETHTOOL_A_MM_STATS = 11,
+	__ETHTOOL_A_MM_CNT = 12,
+	ETHTOOL_A_MM_MAX = 11,
+};
+
+struct mm_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_mm_state state;
+	struct ethtool_mm_stats stats;
+};
+
+enum {
+	ETHTOOL_A_MODULE_UNSPEC = 0,
+	ETHTOOL_A_MODULE_HEADER = 1,
+	ETHTOOL_A_MODULE_POWER_MODE_POLICY = 2,
+	ETHTOOL_A_MODULE_POWER_MODE = 3,
+	__ETHTOOL_A_MODULE_CNT = 4,
+	ETHTOOL_A_MODULE_MAX = 3,
+};
+
+struct module_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_module_power_mode_params power;
+};
+
+enum ethtool_podl_pse_admin_state {
+	ETHTOOL_PODL_PSE_ADMIN_STATE_UNKNOWN = 1,
+	ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED = 2,
+	ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED = 3,
+};
+
+enum ethtool_podl_pse_pw_d_status {
+	ETHTOOL_PODL_PSE_PW_D_STATUS_UNKNOWN = 1,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_DISABLED = 2,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_SEARCHING = 3,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_DELIVERING = 4,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_SLEEP = 5,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_IDLE = 6,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR = 7,
+};
+
+enum {
+	ETHTOOL_A_PSE_UNSPEC = 0,
+	ETHTOOL_A_PSE_HEADER = 1,
+	ETHTOOL_A_PODL_PSE_ADMIN_STATE = 2,
+	ETHTOOL_A_PODL_PSE_ADMIN_CONTROL = 3,
+	ETHTOOL_A_PODL_PSE_PW_D_STATUS = 4,
+	__ETHTOOL_A_PSE_CNT = 5,
+	ETHTOOL_A_PSE_MAX = 4,
+};
+
+struct pse_control_status {
+	enum ethtool_podl_pse_admin_state podl_admin_state;
+	enum ethtool_podl_pse_pw_d_status podl_pw_status;
+};
+
+struct pse_reply_data {
+	struct ethnl_reply_data base;
+	struct pse_control_status status;
+};
+
+struct pse_control_config {
+	enum ethtool_podl_pse_admin_state admin_cotrol;
+};
+
+enum {
+	ETHTOOL_A_PLCA_UNSPEC = 0,
+	ETHTOOL_A_PLCA_HEADER = 1,
+	ETHTOOL_A_PLCA_VERSION = 2,
+	ETHTOOL_A_PLCA_ENABLED = 3,
+	ETHTOOL_A_PLCA_STATUS = 4,
+	ETHTOOL_A_PLCA_NODE_CNT = 5,
+	ETHTOOL_A_PLCA_NODE_ID = 6,
+	ETHTOOL_A_PLCA_TO_TMR = 7,
+	ETHTOOL_A_PLCA_BURST_CNT = 8,
+	ETHTOOL_A_PLCA_BURST_TMR = 9,
+	__ETHTOOL_A_PLCA_CNT = 10,
+	ETHTOOL_A_PLCA_MAX = 9,
+};
+
+struct plca_reply_data {
+	struct ethnl_reply_data base;
+	struct phy_plca_cfg plca_cfg;
+	struct phy_plca_status plca_st;
+};
+
+struct nf_conntrack_zone {
+	u16 id;
+	u8 flags;
+	u8 dir;
+};
+
+struct nf_queue_entry;
+
+struct nf_ipv6_ops {
+	void (*route_input)(struct sk_buff *);
+	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	int (*reroute)(struct sk_buff *, const struct nf_queue_entry *);
+	u64 android_kabi_reserved1;
+};
+
+struct nf_queue_entry {
+	struct list_head list;
+	struct sk_buff *skb;
+	unsigned int id;
+	unsigned int hook_index;
+	struct nf_hook_state state;
+	u16 size;
+};
+
+struct nfnl_ct_hook {
+	size_t (*build_size)(const struct nf_conn *);
+	int (*build)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, u_int16_t, u_int16_t);
+	int (*parse)(const struct nlattr *, struct nf_conn *);
+	int (*attach_expect)(const struct nlattr *, struct nf_conn *, u32, u32);
+	void (*seq_adjust)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, s32);
+	u64 android_kabi_reserved1;
+};
+
+struct nf_ct_hook {
+	int (*update)(struct net *, struct sk_buff *);
+	void (*destroy)(struct nf_conntrack *);
+	bool (*get_tuple_skb)(struct nf_conntrack_tuple *, const struct sk_buff *);
+	void (*attach)(struct sk_buff *, const struct sk_buff *);
+	void (*set_closing)(struct nf_conntrack *);
+	int (*confirm)(struct sk_buff *);
+};
+
+struct nf_defrag_hook {
+	struct module *owner;
+	int (*enable)(struct net *);
+	void (*disable)(struct net *);
+};
+
+enum nf_nat_manip_type {
+	NF_NAT_MANIP_SRC = 0,
+	NF_NAT_MANIP_DST = 1,
+};
+
+struct nf_nat_hook {
+	int (*parse_nat_setup)(struct nf_conn *, enum nf_nat_manip_type, const struct nlattr *);
+	void (*decode_session)(struct sk_buff *, struct flowi *);
+	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn *, enum nf_nat_manip_type, enum ip_conntrack_dir);
+	void (*remove_nat_bysrc)(struct nf_conn *);
+	u64 android_kabi_reserved1;
+};
+
+struct nf_hook_entries_rcu_head {
+	struct callback_head head;
+	void *allocation;
+};
+
+struct nf_loginfo {
+	u_int8_t type;
+	union {
+		struct {
+			u_int32_t copy_len;
+			u_int16_t group;
+			u_int16_t qthreshold;
+			u_int16_t flags;
+		} ulog;
+		struct {
+			u_int8_t level;
+			u_int8_t logflags;
+		} log;
+	} u;
+};
+
+struct nf_log_buf {
+	unsigned int count;
+	char buf[1020];
+};
+
+struct nf_queue_handler {
+	int (*outfn)(struct nf_queue_entry *, unsigned int);
+	void (*nf_hook_drop)(struct net *);
+};
+
+struct ip_rt_info {
+	__be32 daddr;
+	__be32 saddr;
+	u_int8_t tos;
+	u_int32_t mark;
+};
+
+struct ip6_rt_info {
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	u_int32_t mark;
+};
+
+struct nf_sockopt_ops {
+	struct list_head list;
+	u_int8_t pf;
+	int set_optmin;
+	int set_optmax;
+	int (*set)(struct sock *, int, sockptr_t, unsigned int);
+	int get_optmin;
+	int get_optmax;
+	int (*get)(struct sock *, int, void __attribute__((btf_type_tag("user"))) *, int *);
+	struct module *owner;
+	u64 android_kabi_reserved1;
+};
+
+enum nf_ip_hook_priorities {
+	NF_IP_PRI_FIRST = -2147483648,
+	NF_IP_PRI_RAW_BEFORE_DEFRAG = -450,
+	NF_IP_PRI_CONNTRACK_DEFRAG = -400,
+	NF_IP_PRI_RAW = -300,
+	NF_IP_PRI_SELINUX_FIRST = -225,
+	NF_IP_PRI_CONNTRACK = -200,
+	NF_IP_PRI_MANGLE = -150,
+	NF_IP_PRI_NAT_DST = -100,
+	NF_IP_PRI_FILTER = 0,
+	NF_IP_PRI_SECURITY = 50,
+	NF_IP_PRI_NAT_SRC = 100,
+	NF_IP_PRI_SELINUX_LAST = 225,
+	NF_IP_PRI_CONNTRACK_HELPER = 300,
+	NF_IP_PRI_CONNTRACK_CONFIRM = 2147483647,
+	NF_IP_PRI_LAST = 2147483647,
+};
+
+struct bpf_nf_link {
+	struct bpf_link link;
+	struct nf_hook_ops hook_ops;
+	struct net *net;
+	u32 dead;
+	const struct nf_defrag_hook *defrag_hook;
+};
+
+enum nfnl_abort_action {
+	NFNL_ABORT_NONE = 0,
+	NFNL_ABORT_AUTOLOAD = 1,
+	NFNL_ABORT_VALIDATE = 2,
+};
+
+struct nfnl_callback;
+
+struct nfnetlink_subsystem {
+	const char *name;
+	__u8 subsys_id;
+	__u8 cb_count;
+	const struct nfnl_callback *cb;
+	struct module *owner;
+	int (*commit)(struct net *, struct sk_buff *);
+	int (*abort)(struct net *, struct sk_buff *, enum nfnl_abort_action);
+	bool (*valid_genid)(struct net *, u32);
+	u64 android_kabi_reserved1;
+};
+
+enum nfnl_callback_type {
+	NFNL_CB_UNSPEC = 0,
+	NFNL_CB_MUTEX = 1,
+	NFNL_CB_RCU = 2,
+	NFNL_CB_BATCH = 3,
+};
+
+struct nfnl_info;
+
+struct nfnl_callback {
+	int (*call)(struct sk_buff *, const struct nfnl_info *, const struct nlattr * const *);
+	const struct nla_policy *policy;
+	enum nfnl_callback_type type;
+	__u16 attr_count;
+	u64 android_kabi_reserved1;
+};
+
+struct nfgenmsg;
+
+struct nfnl_info {
+	struct net *net;
+	struct sock *sk;
+	const struct nlmsghdr *nlh;
+	const struct nfgenmsg *nfmsg;
+	struct netlink_ext_ack *extack;
+};
+
+struct nfgenmsg {
+	__u8 nfgen_family;
+	__u8 version;
+	__be16 res_id;
+};
+
+enum nfnl_batch_attributes {
+	NFNL_BATCH_UNSPEC = 0,
+	NFNL_BATCH_GENID = 1,
+	__NFNL_BATCH_MAX = 2,
+};
+
+enum {
+	NFNL_BATCH_FAILURE = 1,
+	NFNL_BATCH_DONE = 2,
+	NFNL_BATCH_REPLAY = 4,
+};
+
+enum nfnetlink_groups {
+	NFNLGRP_NONE = 0,
+	NFNLGRP_CONNTRACK_NEW = 1,
+	NFNLGRP_CONNTRACK_UPDATE = 2,
+	NFNLGRP_CONNTRACK_DESTROY = 3,
+	NFNLGRP_CONNTRACK_EXP_NEW = 4,
+	NFNLGRP_CONNTRACK_EXP_UPDATE = 5,
+	NFNLGRP_CONNTRACK_EXP_DESTROY = 6,
+	NFNLGRP_NFTABLES = 7,
+	NFNLGRP_ACCT_QUOTA = 8,
+	NFNLGRP_NFTRACE = 9,
+	__NFNLGRP_MAX = 10,
+};
+
+struct nfnl_err {
+	struct list_head head;
+	struct nlmsghdr *nlh;
+	int err;
+	struct netlink_ext_ack extack;
+};
+
+struct nfnl_net {
+	struct sock *nfnl;
+};
+
+enum nfqnl_attr_type {
+	NFQA_UNSPEC = 0,
+	NFQA_PACKET_HDR = 1,
+	NFQA_VERDICT_HDR = 2,
+	NFQA_MARK = 3,
+	NFQA_TIMESTAMP = 4,
+	NFQA_IFINDEX_INDEV = 5,
+	NFQA_IFINDEX_OUTDEV = 6,
+	NFQA_IFINDEX_PHYSINDEV = 7,
+	NFQA_IFINDEX_PHYSOUTDEV = 8,
+	NFQA_HWADDR = 9,
+	NFQA_PAYLOAD = 10,
+	NFQA_CT = 11,
+	NFQA_CT_INFO = 12,
+	NFQA_CAP_LEN = 13,
+	NFQA_SKB_INFO = 14,
+	NFQA_EXP = 15,
+	NFQA_UID = 16,
+	NFQA_GID = 17,
+	NFQA_SECCTX = 18,
+	NFQA_VLAN = 19,
+	NFQA_L2HDR = 20,
+	NFQA_PRIORITY = 21,
+	NFQA_CGROUP_CLASSID = 22,
+	__NFQA_MAX = 23,
+};
+
+enum nfqnl_vlan_attr {
+	NFQA_VLAN_UNSPEC = 0,
+	NFQA_VLAN_PROTO = 1,
+	NFQA_VLAN_TCI = 2,
+	__NFQA_VLAN_MAX = 3,
+};
+
+enum nfqnl_attr_config {
+	NFQA_CFG_UNSPEC = 0,
+	NFQA_CFG_CMD = 1,
+	NFQA_CFG_PARAMS = 2,
+	NFQA_CFG_QUEUE_MAXLEN = 3,
+	NFQA_CFG_MASK = 4,
+	NFQA_CFG_FLAGS = 5,
+	__NFQA_CFG_MAX = 6,
+};
+
+enum nfqnl_msg_config_cmds {
+	NFQNL_CFG_CMD_NONE = 0,
+	NFQNL_CFG_CMD_BIND = 1,
+	NFQNL_CFG_CMD_UNBIND = 2,
+	NFQNL_CFG_CMD_PF_BIND = 3,
+	NFQNL_CFG_CMD_PF_UNBIND = 4,
+};
+
+enum nfqnl_config_mode {
+	NFQNL_COPY_NONE = 0,
+	NFQNL_COPY_META = 1,
+	NFQNL_COPY_PACKET = 2,
+};
+
+enum nfqnl_msg_types {
+	NFQNL_MSG_PACKET = 0,
+	NFQNL_MSG_VERDICT = 1,
+	NFQNL_MSG_CONFIG = 2,
+	NFQNL_MSG_VERDICT_BATCH = 3,
+	NFQNL_MSG_MAX = 4,
+};
+
+enum ip_conntrack_status {
+	IPS_EXPECTED_BIT = 0,
+	IPS_EXPECTED = 1,
+	IPS_SEEN_REPLY_BIT = 1,
+	IPS_SEEN_REPLY = 2,
+	IPS_ASSURED_BIT = 2,
+	IPS_ASSURED = 4,
+	IPS_CONFIRMED_BIT = 3,
+	IPS_CONFIRMED = 8,
+	IPS_SRC_NAT_BIT = 4,
+	IPS_SRC_NAT = 16,
+	IPS_DST_NAT_BIT = 5,
+	IPS_DST_NAT = 32,
+	IPS_NAT_MASK = 48,
+	IPS_SEQ_ADJUST_BIT = 6,
+	IPS_SEQ_ADJUST = 64,
+	IPS_SRC_NAT_DONE_BIT = 7,
+	IPS_SRC_NAT_DONE = 128,
+	IPS_DST_NAT_DONE_BIT = 8,
+	IPS_DST_NAT_DONE = 256,
+	IPS_NAT_DONE_MASK = 384,
+	IPS_DYING_BIT = 9,
+	IPS_DYING = 512,
+	IPS_FIXED_TIMEOUT_BIT = 10,
+	IPS_FIXED_TIMEOUT = 1024,
+	IPS_TEMPLATE_BIT = 11,
+	IPS_TEMPLATE = 2048,
+	IPS_UNTRACKED_BIT = 12,
+	IPS_UNTRACKED = 4096,
+	IPS_NAT_CLASH_BIT = 12,
+	IPS_NAT_CLASH = 4096,
+	IPS_HELPER_BIT = 13,
+	IPS_HELPER = 8192,
+	IPS_OFFLOAD_BIT = 14,
+	IPS_OFFLOAD = 16384,
+	IPS_HW_OFFLOAD_BIT = 15,
+	IPS_HW_OFFLOAD = 32768,
+	IPS_UNCHANGEABLE_MASK = 56313,
+	__IPS_MAX_BIT = 16,
+};
+
+struct nfqnl_instance {
+	struct hlist_node hlist;
+	struct callback_head rcu;
+	u32 peer_portid;
+	unsigned int queue_maxlen;
+	unsigned int copy_range;
+	unsigned int queue_dropped;
+	unsigned int queue_user_dropped;
+	u_int16_t queue_num;
+	u_int8_t copy_mode;
+	u_int32_t flags;
+	long: 0;
+	spinlock_t lock;
+	unsigned int queue_total;
+	unsigned int id_sequence;
+	struct list_head queue_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct nfnl_queue_net {
+	spinlock_t instances_lock;
+	struct hlist_head instance_table[16];
+};
+
+typedef int (*nfqnl_cmpfn)(struct nf_queue_entry *, unsigned long);
+
+struct nfqnl_msg_verdict_hdr {
+	__be32 verdict;
+	__be32 id;
+};
+
+struct iter_state {
+	struct seq_net_private p;
+	unsigned int bucket;
+};
+
+struct nfqnl_msg_packet_hdr {
+	__be32 packet_id;
+	__be16 hw_protocol;
+	__u8 hook;
+} __attribute__((packed));
+
+struct nfqnl_msg_packet_hw {
+	__be16 hw_addrlen;
+	__u16 _pad;
+	__u8 hw_addr[8];
+};
+
+struct nfqnl_msg_packet_timestamp {
+	__be64 sec;
+	__be64 usec;
+};
+
+struct nfqnl_msg_config_cmd {
+	__u8 command;
+	__u8 _pad;
+	__be16 pf;
+};
+
+struct nfqnl_msg_config_params {
+	__be32 copy_range;
+	__u8 copy_mode;
+} __attribute__((packed));
+
+enum nfulnl_attr_config {
+	NFULA_CFG_UNSPEC = 0,
+	NFULA_CFG_CMD = 1,
+	NFULA_CFG_MODE = 2,
+	NFULA_CFG_NLBUFSIZ = 3,
+	NFULA_CFG_TIMEOUT = 4,
+	NFULA_CFG_QTHRESH = 5,
+	NFULA_CFG_FLAGS = 6,
+	__NFULA_CFG_MAX = 7,
+};
+
+enum nfulnl_msg_config_cmds {
+	NFULNL_CFG_CMD_NONE = 0,
+	NFULNL_CFG_CMD_BIND = 1,
+	NFULNL_CFG_CMD_UNBIND = 2,
+	NFULNL_CFG_CMD_PF_BIND = 3,
+	NFULNL_CFG_CMD_PF_UNBIND = 4,
+};
+
+enum nfulnl_msg_types {
+	NFULNL_MSG_PACKET = 0,
+	NFULNL_MSG_CONFIG = 1,
+	NFULNL_MSG_MAX = 2,
+};
+
+enum nfulnl_attr_type {
+	NFULA_UNSPEC = 0,
+	NFULA_PACKET_HDR = 1,
+	NFULA_MARK = 2,
+	NFULA_TIMESTAMP = 3,
+	NFULA_IFINDEX_INDEV = 4,
+	NFULA_IFINDEX_OUTDEV = 5,
+	NFULA_IFINDEX_PHYSINDEV = 6,
+	NFULA_IFINDEX_PHYSOUTDEV = 7,
+	NFULA_HWADDR = 8,
+	NFULA_PAYLOAD = 9,
+	NFULA_PREFIX = 10,
+	NFULA_UID = 11,
+	NFULA_SEQ = 12,
+	NFULA_SEQ_GLOBAL = 13,
+	NFULA_GID = 14,
+	NFULA_HWTYPE = 15,
+	NFULA_HWHEADER = 16,
+	NFULA_HWLEN = 17,
+	NFULA_CT = 18,
+	NFULA_CT_INFO = 19,
+	NFULA_VLAN = 20,
+	NFULA_L2HDR = 21,
+	__NFULA_MAX = 22,
+};
+
+enum nfulnl_vlan_attr {
+	NFULA_VLAN_UNSPEC = 0,
+	NFULA_VLAN_PROTO = 1,
+	NFULA_VLAN_TCI = 2,
+	__NFULA_VLAN_MAX = 3,
+};
+
+struct nfulnl_instance {
+	struct hlist_node hlist;
+	spinlock_t lock;
+	refcount_t use;
+	unsigned int qlen;
+	struct sk_buff *skb;
+	struct timer_list timer;
+	struct net *net;
+	netns_tracker ns_tracker;
+	struct user_namespace *peer_user_ns;
+	u32 peer_portid;
+	unsigned int flushtimeout;
+	unsigned int nlbufsiz;
+	unsigned int qthreshold;
+	u_int32_t copy_range;
+	u_int32_t seq;
+	u_int16_t group_num;
+	u_int16_t flags;
+	u_int8_t copy_mode;
+	struct callback_head rcu;
+};
+
+struct nfnl_log_net {
+	spinlock_t instances_lock;
+	struct hlist_head instance_table[16];
+	atomic_t global_seq;
+};
+
+struct nfulnl_msg_packet_hdr {
+	__be16 hw_protocol;
+	__u8 hook;
+	__u8 _pad;
+};
+
+struct nfulnl_msg_packet_hw {
+	__be16 hw_addrlen;
+	__u16 _pad;
+	__u8 hw_addr[8];
+};
+
+struct nfulnl_msg_packet_timestamp {
+	__be64 sec;
+	__be64 usec;
+};
+
+struct nfulnl_msg_config_cmd {
+	__u8 command;
+};
+
+struct nfulnl_msg_config_mode {
+	__be32 copy_range;
+	__u8 copy_mode;
+	__u8 _pad;
+} __attribute__((packed));
+
+struct conntrack_gc_work {
+	struct delayed_work dwork;
+	u32 next_bucket;
+	u32 avg_timeout;
+	u32 count;
+	u32 start_time;
+	bool exiting;
+	bool early_drop;
+};
+
+struct nf_conntrack_expect_policy;
+
+struct nf_conntrack_helper {
+	struct hlist_node hnode;
+	char name[16];
+	refcount_t refcnt;
+	struct module *me;
+	const struct nf_conntrack_expect_policy *expect_policy;
+	struct nf_conntrack_tuple tuple;
+	int (*help)(struct sk_buff *, unsigned int, struct nf_conn *, enum ip_conntrack_info);
+	void (*destroy)(struct nf_conn *);
+	int (*from_nlattr)(struct nlattr *, struct nf_conn *);
+	int (*to_nlattr)(struct sk_buff *, const struct nf_conn *);
+	unsigned int expect_class_max;
+	unsigned int flags;
+	unsigned int queue_num;
+	u16 data_len;
+	char nat_mod_name[16];
+};
+
+struct nf_conntrack_expect_policy {
+	unsigned int max_expected;
+	unsigned int timeout;
+	char name[16];
+};
+
+enum ip_conntrack_events {
+	IPCT_NEW = 0,
+	IPCT_RELATED = 1,
+	IPCT_DESTROY = 2,
+	IPCT_REPLY = 3,
+	IPCT_ASSURED = 4,
+	IPCT_PROTOINFO = 5,
+	IPCT_HELPER = 6,
+	IPCT_MARK = 7,
+	IPCT_SEQADJ = 8,
+	IPCT_NATSEQADJ = 8,
+	IPCT_SECMARK = 9,
+	IPCT_LABEL = 10,
+	IPCT_SYNPROXY = 11,
+	__IPCT_MAX = 12,
+};
+
+enum nf_ct_ecache_state {
+	NFCT_ECACHE_DESTROY_FAIL = 0,
+	NFCT_ECACHE_DESTROY_SENT = 1,
+};
+
+enum ctattr_l4proto {
+	CTA_PROTO_UNSPEC = 0,
+	CTA_PROTO_NUM = 1,
+	CTA_PROTO_SRC_PORT = 2,
+	CTA_PROTO_DST_PORT = 3,
+	CTA_PROTO_ICMP_ID = 4,
+	CTA_PROTO_ICMP_TYPE = 5,
+	CTA_PROTO_ICMP_CODE = 6,
+	CTA_PROTO_ICMPV6_ID = 7,
+	CTA_PROTO_ICMPV6_TYPE = 8,
+	CTA_PROTO_ICMPV6_CODE = 9,
+	__CTA_PROTO_MAX = 10,
+};
+
+enum nf_ct_ext_id {
+	NF_CT_EXT_HELPER = 0,
+	NF_CT_EXT_NAT = 1,
+	NF_CT_EXT_SEQADJ = 2,
+	NF_CT_EXT_ACCT = 3,
+	NF_CT_EXT_ECACHE = 4,
+	NF_CT_EXT_NUM = 5,
+};
+
+enum nf_ct_helper_flags {
+	NF_CT_HELPER_F_USERSPACE = 1,
+	NF_CT_HELPER_F_CONFIGURED = 2,
+};
+
+struct nf_conntrack_l4proto;
+
+struct nf_ct_timeout {
+	__u16 l3num;
+	const struct nf_conntrack_l4proto *l4proto;
+	char data[0];
+};
+
+struct nf_conntrack_l4proto {
+	u_int8_t l4proto;
+	bool allow_clash;
+	u16 nlattr_size;
+	bool (*can_early_drop)(const struct nf_conn *);
+	int (*to_nlattr)(struct sk_buff *, struct nlattr *, struct nf_conn *, bool);
+	int (*from_nlattr)(struct nlattr **, struct nf_conn *);
+	int (*tuple_to_nlattr)(struct sk_buff *, const struct nf_conntrack_tuple *);
+	unsigned int (*nlattr_tuple_size)();
+	int (*nlattr_to_tuple)(struct nlattr **, struct nf_conntrack_tuple *, u_int32_t);
+	const struct nla_policy *nla_policy;
+	struct {
+		int (*nlattr_to_obj)(struct nlattr **, struct net *, void *);
+		int (*obj_to_nlattr)(struct sk_buff *, const void *);
+		u16 obj_size;
+		u16 nlattr_max;
+		const struct nla_policy *nla_policy;
+	} ctnl_timeout;
+	void (*print_conntrack)(struct seq_file *, struct nf_conn *);
+};
+
+struct nf_conntrack_net_ecache {
+	struct delayed_work dwork;
+	spinlock_t dying_lock;
+	struct hlist_nulls_head dying_list;
+};
+
+struct nf_conntrack_net {
+	atomic_t count;
+	unsigned int expect_count;
+	unsigned int users4;
+	unsigned int users6;
+	unsigned int users_bridge;
+	struct ctl_table_header *sysctl_header;
+	struct nf_conntrack_net_ecache ecache;
+};
+
+struct nf_conn_counter {
+	atomic64_t packets;
+	atomic64_t bytes;
+};
+
+struct nf_conn_acct {
+	struct nf_conn_counter counter[2];
+};
+
+struct nf_conn_tstamp {
+	u_int64_t start;
+	u_int64_t stop;
+};
+
+struct nf_conn_help {
+	struct nf_conntrack_helper __attribute__((btf_type_tag("rcu"))) *helper;
+	struct hlist_head expectations;
+	u8 expecting[4];
+	long: 0;
+	char data[32];
+};
+
+struct nf_conntrack_ecache {
+	unsigned long cache;
+	u16 ctmask;
+	u16 expmask;
+	u32 missed;
+	u32 portid;
+};
+
+struct nf_ct_iter_data {
+	struct net *net;
+	void *data;
+	u32 portid;
+	int report;
+};
+
+struct nf_conn_timeout {
+	struct nf_ct_timeout __attribute__((btf_type_tag("rcu"))) *timeout;
+};
+
+enum nf_ct_sysctl_index {
+	NF_SYSCTL_CT_MAX = 0,
+	NF_SYSCTL_CT_COUNT = 1,
+	NF_SYSCTL_CT_BUCKETS = 2,
+	NF_SYSCTL_CT_CHECKSUM = 3,
+	NF_SYSCTL_CT_LOG_INVALID = 4,
+	NF_SYSCTL_CT_EXPECT_MAX = 5,
+	NF_SYSCTL_CT_ACCT = 6,
+	NF_SYSCTL_CT_EVENTS = 7,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_GENERIC = 8,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_SYN_SENT = 9,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_SYN_RECV = 10,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_ESTABLISHED = 11,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_FIN_WAIT = 12,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_CLOSE_WAIT = 13,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_LAST_ACK = 14,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_TIME_WAIT = 15,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_CLOSE = 16,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_RETRANS = 17,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_UNACK = 18,
+	NF_SYSCTL_CT_PROTO_TCP_LOOSE = 19,
+	NF_SYSCTL_CT_PROTO_TCP_LIBERAL = 20,
+	NF_SYSCTL_CT_PROTO_TCP_IGNORE_INVALID_RST = 21,
+	NF_SYSCTL_CT_PROTO_TCP_MAX_RETRANS = 22,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_UDP = 23,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_UDP_STREAM = 24,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_ICMP = 25,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_ICMPV6 = 26,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_CLOSED = 27,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_COOKIE_WAIT = 28,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_COOKIE_ECHOED = 29,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_ESTABLISHED = 30,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_SENT = 31,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_RECD = 32,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_ACK_SENT = 33,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_HEARTBEAT_SENT = 34,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_REQUEST = 35,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_RESPOND = 36,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_PARTOPEN = 37,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_OPEN = 38,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_CLOSEREQ = 39,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_CLOSING = 40,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_TIMEWAIT = 41,
+	NF_SYSCTL_CT_PROTO_DCCP_LOOSE = 42,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_GRE = 43,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_GRE_STREAM = 44,
+	__NF_SYSCTL_CT_LAST_SYSCTL = 45,
+};
+
+enum udp_conntrack {
+	UDP_CT_UNREPLIED = 0,
+	UDP_CT_REPLIED = 1,
+	UDP_CT_MAX = 2,
+};
+
+enum tcp_conntrack {
+	TCP_CONNTRACK_NONE = 0,
+	TCP_CONNTRACK_SYN_SENT = 1,
+	TCP_CONNTRACK_SYN_RECV = 2,
+	TCP_CONNTRACK_ESTABLISHED = 3,
+	TCP_CONNTRACK_FIN_WAIT = 4,
+	TCP_CONNTRACK_CLOSE_WAIT = 5,
+	TCP_CONNTRACK_LAST_ACK = 6,
+	TCP_CONNTRACK_TIME_WAIT = 7,
+	TCP_CONNTRACK_CLOSE = 8,
+	TCP_CONNTRACK_LISTEN = 9,
+	TCP_CONNTRACK_MAX = 10,
+	TCP_CONNTRACK_IGNORE = 11,
+	TCP_CONNTRACK_RETRANS = 12,
+	TCP_CONNTRACK_UNACK = 13,
+	TCP_CONNTRACK_TIMEOUT_MAX = 14,
+};
+
+enum ct_dccp_states {
+	CT_DCCP_NONE = 0,
+	CT_DCCP_REQUEST = 1,
+	CT_DCCP_RESPOND = 2,
+	CT_DCCP_PARTOPEN = 3,
+	CT_DCCP_OPEN = 4,
+	CT_DCCP_CLOSEREQ = 5,
+	CT_DCCP_CLOSING = 6,
+	CT_DCCP_TIMEWAIT = 7,
+	CT_DCCP_IGNORE = 8,
+	CT_DCCP_INVALID = 9,
+	__CT_DCCP_MAX = 10,
+};
+
+enum gre_conntrack {
+	GRE_CT_UNREPLIED = 0,
+	GRE_CT_REPLIED = 1,
+	GRE_CT_MAX = 2,
+};
+
+struct ct_iter_state {
+	struct seq_net_private p;
+	struct hlist_nulls_head *hash;
+	unsigned int htable_size;
+	unsigned int bucket;
+	u_int64_t time_now;
+};
+
+enum ip_conntrack_expect_events {
+	IPEXP_NEW = 0,
+	IPEXP_DESTROY = 1,
+};
+
+struct ct_expect_iter_state {
+	struct seq_net_private p;
+	unsigned int bucket;
+};
+
+struct nf_ct_helper_expectfn {
+	struct list_head head;
+	const char *name;
+	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
+};
+
+struct nf_conntrack_nat_helper {
+	struct list_head list;
+	char mod_name[16];
+	struct module *module;
+};
+
+struct nf_ct_bridge_info {
+	struct nf_hook_ops *ops;
+	unsigned int ops_size;
+	struct module *me;
+};
+
+enum nf_ct_tcp_action {
+	NFCT_TCP_IGNORE = 0,
+	NFCT_TCP_INVALID = 1,
+	NFCT_TCP_ACCEPT = 2,
+};
+
+enum tcp_bit_set {
+	TCP_SYN_SET = 0,
+	TCP_SYNACK_SET = 1,
+	TCP_FIN_SET = 2,
+	TCP_ACK_SET = 3,
+	TCP_RST_SET = 4,
+	TCP_NONE_SET = 5,
+};
+
+enum {
+	TCP_FLAG_CWR = 32768,
+	TCP_FLAG_ECE = 16384,
+	TCP_FLAG_URG = 8192,
+	TCP_FLAG_ACK = 4096,
+	TCP_FLAG_PSH = 2048,
+	TCP_FLAG_RST = 1024,
+	TCP_FLAG_SYN = 512,
+	TCP_FLAG_FIN = 256,
+	TCP_RESERVED_BITS = 15,
+	TCP_DATA_OFFSET = 240,
+};
+
+enum ctattr_protoinfo {
+	CTA_PROTOINFO_UNSPEC = 0,
+	CTA_PROTOINFO_TCP = 1,
+	CTA_PROTOINFO_DCCP = 2,
+	CTA_PROTOINFO_SCTP = 3,
+	__CTA_PROTOINFO_MAX = 4,
+};
+
+enum ctattr_protoinfo_tcp {
+	CTA_PROTOINFO_TCP_UNSPEC = 0,
+	CTA_PROTOINFO_TCP_STATE = 1,
+	CTA_PROTOINFO_TCP_WSCALE_ORIGINAL = 2,
+	CTA_PROTOINFO_TCP_WSCALE_REPLY = 3,
+	CTA_PROTOINFO_TCP_FLAGS_ORIGINAL = 4,
+	CTA_PROTOINFO_TCP_FLAGS_REPLY = 5,
+	__CTA_PROTOINFO_TCP_MAX = 6,
+};
+
+struct nf_ct_tcp_flags {
+	__u8 flags;
+	__u8 mask;
+};
+
+struct nf_ct_seqadj {
+	u32 correction_pos;
+	s32 offset_before;
+	s32 offset_after;
+};
+
+struct nf_conn_seqadj {
+	struct nf_ct_seqadj seq[2];
+};
+
+struct tcp_sack_block_wire {
+	__be32 start_seq;
+	__be32 end_seq;
+};
+
+struct icmpv6_echo {
+	__be16 identifier;
+	__be16 sequence;
+};
+
+struct icmpv6_nd_advt {
+	__u32 reserved: 5;
+	__u32 override: 1;
+	__u32 solicited: 1;
+	__u32 router: 1;
+	__u32 reserved2: 24;
+};
+
+struct icmpv6_nd_ra {
+	__u8 hop_limit;
+	__u8 reserved: 3;
+	__u8 router_pref: 2;
+	__u8 home_agent: 1;
+	__u8 other: 1;
+	__u8 managed: 1;
+	__be16 rt_lifetime;
+};
+
+struct icmp6hdr {
+	__u8 icmp6_type;
+	__u8 icmp6_code;
+	__sum16 icmp6_cksum;
+	union {
+		__be32 un_data32[1];
+		__be16 un_data16[2];
+		__u8 un_data8[4];
+		struct icmpv6_echo u_echo;
+		struct icmpv6_nd_advt u_nd_advt;
+		struct icmpv6_nd_ra u_nd_ra;
+	} icmp6_dataun;
+};
+
+struct rd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	struct in6_addr dest;
+	__u8 opt[0];
+};
+
+enum {
+	__ND_OPT_PREFIX_INFO_END = 0,
+	ND_OPT_SOURCE_LL_ADDR = 1,
+	ND_OPT_TARGET_LL_ADDR = 2,
+	ND_OPT_PREFIX_INFO = 3,
+	ND_OPT_REDIRECT_HDR = 4,
+	ND_OPT_MTU = 5,
+	ND_OPT_NONCE = 14,
+	__ND_OPT_ARRAY_MAX = 15,
+	ND_OPT_ROUTE_INFO = 24,
+	ND_OPT_RDNSS = 25,
+	ND_OPT_DNSSL = 31,
+	ND_OPT_6CO = 34,
+	ND_OPT_CAPTIVE_PORTAL = 37,
+	ND_OPT_PREF64 = 38,
+	__ND_OPT_MAX = 39,
+};
+
+enum retry_state {
+	STATE_CONGESTED = 0,
+	STATE_RESTART = 1,
+	STATE_DONE = 2,
+};
+
+enum ct_dccp_roles {
+	CT_DCCP_ROLE_CLIENT = 0,
+	CT_DCCP_ROLE_SERVER = 1,
+	__CT_DCCP_ROLE_MAX = 2,
+};
+
+enum dccp_pkt_type {
+	DCCP_PKT_REQUEST = 0,
+	DCCP_PKT_RESPONSE = 1,
+	DCCP_PKT_DATA = 2,
+	DCCP_PKT_ACK = 3,
+	DCCP_PKT_DATAACK = 4,
+	DCCP_PKT_CLOSEREQ = 5,
+	DCCP_PKT_CLOSE = 6,
+	DCCP_PKT_RESET = 7,
+	DCCP_PKT_SYNC = 8,
+	DCCP_PKT_SYNCACK = 9,
+	DCCP_PKT_INVALID = 10,
+};
+
+enum ctattr_protoinfo_dccp {
+	CTA_PROTOINFO_DCCP_UNSPEC = 0,
+	CTA_PROTOINFO_DCCP_STATE = 1,
+	CTA_PROTOINFO_DCCP_ROLE = 2,
+	CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ = 3,
+	CTA_PROTOINFO_DCCP_PAD = 4,
+	__CTA_PROTOINFO_DCCP_MAX = 5,
+};
+
+struct dccp_hdr_ext {
+	__be32 dccph_seq_low;
+};
+
+struct dccp_hdr_ack_bits {
+	__be16 dccph_reserved1;
+	__be16 dccph_ack_nr_high;
+	__be32 dccph_ack_nr_low;
+};
+
+struct dccp_hdr_request {
+	__be32 dccph_req_service;
+};
+
+struct dccp_hdr_response {
+	struct dccp_hdr_ack_bits dccph_resp_ack;
+	__be32 dccph_resp_service;
+};
+
+struct dccp_hdr_reset {
+	struct dccp_hdr_ack_bits dccph_reset_ack;
+	__u8 dccph_reset_code;
+	__u8 dccph_reset_data[3];
+};
+
+struct nf_conntrack_dccp_buf {
+	struct dccp_hdr dh;
+	struct dccp_hdr_ext ext;
+	union {
+		struct dccp_hdr_ack_bits ack;
+		struct dccp_hdr_request req;
+		struct dccp_hdr_response response;
+		struct dccp_hdr_reset rst;
+	} u;
+};
+
+enum sctp_cid {
+	SCTP_CID_DATA = 0,
+	SCTP_CID_INIT = 1,
+	SCTP_CID_INIT_ACK = 2,
+	SCTP_CID_SACK = 3,
+	SCTP_CID_HEARTBEAT = 4,
+	SCTP_CID_HEARTBEAT_ACK = 5,
+	SCTP_CID_ABORT = 6,
+	SCTP_CID_SHUTDOWN = 7,
+	SCTP_CID_SHUTDOWN_ACK = 8,
+	SCTP_CID_ERROR = 9,
+	SCTP_CID_COOKIE_ECHO = 10,
+	SCTP_CID_COOKIE_ACK = 11,
+	SCTP_CID_ECN_ECNE = 12,
+	SCTP_CID_ECN_CWR = 13,
+	SCTP_CID_SHUTDOWN_COMPLETE = 14,
+	SCTP_CID_AUTH = 15,
+	SCTP_CID_I_DATA = 64,
+	SCTP_CID_FWD_TSN = 192,
+	SCTP_CID_ASCONF = 193,
+	SCTP_CID_I_FWD_TSN = 194,
+	SCTP_CID_ASCONF_ACK = 128,
+	SCTP_CID_RECONF = 130,
+	SCTP_CID_PAD = 132,
+};
+
+enum {
+	SCTP_CHUNK_FLAG_T = 1,
+};
+
+enum ctattr_protoinfo_sctp {
+	CTA_PROTOINFO_SCTP_UNSPEC = 0,
+	CTA_PROTOINFO_SCTP_STATE = 1,
+	CTA_PROTOINFO_SCTP_VTAG_ORIGINAL = 2,
+	CTA_PROTOINFO_SCTP_VTAG_REPLY = 3,
+	__CTA_PROTOINFO_SCTP_MAX = 4,
+};
+
+enum pptp_ctrlsess_state {
+	PPTP_SESSION_NONE = 0,
+	PPTP_SESSION_ERROR = 1,
+	PPTP_SESSION_STOPREQ = 2,
+	PPTP_SESSION_REQUESTED = 3,
+	PPTP_SESSION_CONFIRMED = 4,
+};
+
+enum pptp_ctrlcall_state {
+	PPTP_CALL_NONE = 0,
+	PPTP_CALL_ERROR = 1,
+	PPTP_CALL_OUT_REQ = 2,
+	PPTP_CALL_OUT_CONF = 3,
+	PPTP_CALL_IN_REQ = 4,
+	PPTP_CALL_IN_REP = 5,
+	PPTP_CALL_IN_CONF = 6,
+	PPTP_CALL_CLEAR_REQ = 7,
+};
+
+struct nf_ct_gre_keymap {
+	struct list_head list;
+	struct nf_conntrack_tuple tuple;
+	struct callback_head rcu;
+};
+
+struct nf_ct_pptp_master {
+	enum pptp_ctrlsess_state sstate;
+	enum pptp_ctrlcall_state cstate;
+	__be16 pac_call_id;
+	__be16 pns_call_id;
+	struct nf_ct_gre_keymap *keymap[2];
+};
+
+struct pptp_gre_header {
+	struct gre_base_hdr gre_hd;
+	__be16 payload_len;
+	__be16 call_id;
+	__be32 seq;
+	__be32 ack;
+};
+
+enum {
+	NF_BPF_CT_OPTS_SZ = 12,
+};
+
+enum {
+	BPF_F_CURRENT_NETNS = -1,
+};
+
+struct nf_conn___init {
+	struct nf_conn ct;
+};
+
+struct bpf_ct_opts {
+	s32 netns_id;
+	s32 error;
+	u8 l4proto;
+	u8 dir;
+	u8 reserved[2];
+};
+
+enum cntl_msg_types {
+	IPCTNL_MSG_CT_NEW = 0,
+	IPCTNL_MSG_CT_GET = 1,
+	IPCTNL_MSG_CT_DELETE = 2,
+	IPCTNL_MSG_CT_GET_CTRZERO = 3,
+	IPCTNL_MSG_CT_GET_STATS_CPU = 4,
+	IPCTNL_MSG_CT_GET_STATS = 5,
+	IPCTNL_MSG_CT_GET_DYING = 6,
+	IPCTNL_MSG_CT_GET_UNCONFIRMED = 7,
+	IPCTNL_MSG_MAX = 8,
+};
+
+enum ctattr_type {
+	CTA_UNSPEC = 0,
+	CTA_TUPLE_ORIG = 1,
+	CTA_TUPLE_REPLY = 2,
+	CTA_STATUS = 3,
+	CTA_PROTOINFO = 4,
+	CTA_HELP = 5,
+	CTA_NAT_SRC = 6,
+	CTA_TIMEOUT = 7,
+	CTA_MARK = 8,
+	CTA_COUNTERS_ORIG = 9,
+	CTA_COUNTERS_REPLY = 10,
+	CTA_USE = 11,
+	CTA_ID = 12,
+	CTA_NAT_DST = 13,
+	CTA_TUPLE_MASTER = 14,
+	CTA_SEQ_ADJ_ORIG = 15,
+	CTA_NAT_SEQ_ADJ_ORIG = 15,
+	CTA_SEQ_ADJ_REPLY = 16,
+	CTA_NAT_SEQ_ADJ_REPLY = 16,
+	CTA_SECMARK = 17,
+	CTA_ZONE = 18,
+	CTA_SECCTX = 19,
+	CTA_TIMESTAMP = 20,
+	CTA_MARK_MASK = 21,
+	CTA_LABELS = 22,
+	CTA_LABELS_MASK = 23,
+	CTA_SYNPROXY = 24,
+	CTA_FILTER = 25,
+	CTA_STATUS_MASK = 26,
+	__CTA_MAX = 27,
+};
+
+enum ctattr_tuple {
+	CTA_TUPLE_UNSPEC = 0,
+	CTA_TUPLE_IP = 1,
+	CTA_TUPLE_PROTO = 2,
+	CTA_TUPLE_ZONE = 3,
+	__CTA_TUPLE_MAX = 4,
+};
+
+enum ctattr_ip {
+	CTA_IP_UNSPEC = 0,
+	CTA_IP_V4_SRC = 1,
+	CTA_IP_V4_DST = 2,
+	CTA_IP_V6_SRC = 3,
+	CTA_IP_V6_DST = 4,
+	__CTA_IP_MAX = 5,
+};
+
+enum ctattr_counters {
+	CTA_COUNTERS_UNSPEC = 0,
+	CTA_COUNTERS_PACKETS = 1,
+	CTA_COUNTERS_BYTES = 2,
+	CTA_COUNTERS32_PACKETS = 3,
+	CTA_COUNTERS32_BYTES = 4,
+	CTA_COUNTERS_PAD = 5,
+	__CTA_COUNTERS_MAX = 6,
+};
+
+enum ctattr_tstamp {
+	CTA_TIMESTAMP_UNSPEC = 0,
+	CTA_TIMESTAMP_START = 1,
+	CTA_TIMESTAMP_STOP = 2,
+	CTA_TIMESTAMP_PAD = 3,
+	__CTA_TIMESTAMP_MAX = 4,
+};
+
+enum ctattr_help {
+	CTA_HELP_UNSPEC = 0,
+	CTA_HELP_NAME = 1,
+	CTA_HELP_INFO = 2,
+	__CTA_HELP_MAX = 3,
+};
+
+enum ctattr_secctx {
+	CTA_SECCTX_UNSPEC = 0,
+	CTA_SECCTX_NAME = 1,
+	__CTA_SECCTX_MAX = 2,
+};
+
+enum ctattr_seqadj {
+	CTA_SEQADJ_UNSPEC = 0,
+	CTA_SEQADJ_CORRECTION_POS = 1,
+	CTA_SEQADJ_OFFSET_BEFORE = 2,
+	CTA_SEQADJ_OFFSET_AFTER = 3,
+	__CTA_SEQADJ_MAX = 4,
+};
+
+enum ctattr_synproxy {
+	CTA_SYNPROXY_UNSPEC = 0,
+	CTA_SYNPROXY_ISN = 1,
+	CTA_SYNPROXY_ITS = 2,
+	CTA_SYNPROXY_TSOFF = 3,
+	__CTA_SYNPROXY_MAX = 4,
+};
+
+enum ctnl_exp_msg_types {
+	IPCTNL_MSG_EXP_NEW = 0,
+	IPCTNL_MSG_EXP_GET = 1,
+	IPCTNL_MSG_EXP_DELETE = 2,
+	IPCTNL_MSG_EXP_GET_STATS_CPU = 3,
+	IPCTNL_MSG_EXP_MAX = 4,
+};
+
+enum ctattr_expect {
+	CTA_EXPECT_UNSPEC = 0,
+	CTA_EXPECT_MASTER = 1,
+	CTA_EXPECT_TUPLE = 2,
+	CTA_EXPECT_MASK = 3,
+	CTA_EXPECT_TIMEOUT = 4,
+	CTA_EXPECT_ID = 5,
+	CTA_EXPECT_HELP_NAME = 6,
+	CTA_EXPECT_ZONE = 7,
+	CTA_EXPECT_FLAGS = 8,
+	CTA_EXPECT_CLASS = 9,
+	CTA_EXPECT_NAT = 10,
+	CTA_EXPECT_FN = 11,
+	__CTA_EXPECT_MAX = 12,
+};
+
+enum ctattr_expect_nat {
+	CTA_EXPECT_NAT_UNSPEC = 0,
+	CTA_EXPECT_NAT_DIR = 1,
+	CTA_EXPECT_NAT_TUPLE = 2,
+	__CTA_EXPECT_NAT_MAX = 3,
+};
+
+enum ctattr_expect_stats {
+	CTA_STATS_EXP_UNSPEC = 0,
+	CTA_STATS_EXP_NEW = 1,
+	CTA_STATS_EXP_CREATE = 2,
+	CTA_STATS_EXP_DELETE = 3,
+	__CTA_STATS_EXP_MAX = 4,
+};
+
+enum ctattr_filter {
+	CTA_FILTER_UNSPEC = 0,
+	CTA_FILTER_ORIG_FLAGS = 1,
+	CTA_FILTER_REPLY_FLAGS = 2,
+	__CTA_FILTER_MAX = 3,
+};
+
+enum ctattr_stats_cpu {
+	CTA_STATS_UNSPEC = 0,
+	CTA_STATS_SEARCHED = 1,
+	CTA_STATS_FOUND = 2,
+	CTA_STATS_NEW = 3,
+	CTA_STATS_INVALID = 4,
+	CTA_STATS_IGNORE = 5,
+	CTA_STATS_DELETE = 6,
+	CTA_STATS_DELETE_LIST = 7,
+	CTA_STATS_INSERT = 8,
+	CTA_STATS_INSERT_FAILED = 9,
+	CTA_STATS_DROP = 10,
+	CTA_STATS_EARLY_DROP = 11,
+	CTA_STATS_ERROR = 12,
+	CTA_STATS_SEARCH_RESTART = 13,
+	CTA_STATS_CLASH_RESOLVE = 14,
+	CTA_STATS_CHAIN_TOOLONG = 15,
+	__CTA_STATS_MAX = 16,
+};
+
+enum ctattr_stats_global {
+	CTA_STATS_GLOBAL_UNSPEC = 0,
+	CTA_STATS_GLOBAL_ENTRIES = 1,
+	CTA_STATS_GLOBAL_MAX_ENTRIES = 2,
+	__CTA_STATS_GLOBAL_MAX = 3,
+};
+
+struct ctnetlink_filter_u32 {
+	u32 val;
+	u32 mask;
+};
+
+struct ctnetlink_filter {
+	u8 family;
+	u_int32_t orig_flags;
+	u_int32_t reply_flags;
+	struct nf_conntrack_tuple orig;
+	struct nf_conntrack_tuple reply;
+	struct nf_conntrack_zone zone;
+	struct ctnetlink_filter_u32 mark;
+	struct ctnetlink_filter_u32 status;
+};
+
+struct ctnetlink_list_dump_ctx {
+	struct nf_conn *last;
+	unsigned int cpu;
+	bool done;
+};
+
+enum amanda_strings {
+	SEARCH_CONNECT = 0,
+	SEARCH_NEWLINE = 1,
+	SEARCH_DATA = 2,
+	SEARCH_MESG = 3,
+	SEARCH_INDEX = 4,
+	SEARCH_STATE = 5,
+};
+
+enum nf_ct_ftp_type {
+	NF_CT_FTP_PORT = 0,
+	NF_CT_FTP_PASV = 1,
+	NF_CT_FTP_EPRT = 2,
+	NF_CT_FTP_EPSV = 3,
+};
+
+struct ftp_search {
+	const char *pattern;
+	size_t plen;
+	char skip;
+	char term;
+	enum nf_ct_ftp_type ftptype;
+	int (*getnum)(const char *, size_t, struct nf_conntrack_man *, char, unsigned int *);
+};
+
+struct nf_ct_ftp_master {
+	u_int32_t seq_aft_nl[4];
+	u_int16_t seq_aft_nl_num[2];
+	u_int16_t flags[2];
+};
+
+struct H245_TransportAddress;
+
+typedef struct H245_TransportAddress H245_TransportAddress;
+
+struct TransportAddress;
+
+typedef struct TransportAddress TransportAddress;
+
+struct nfct_h323_nat_hooks {
+	int (*set_h245_addr)(struct sk_buff *, unsigned int, unsigned char **, int, H245_TransportAddress *, union nf_inet_addr *, __be16);
+	int (*set_h225_addr)(struct sk_buff *, unsigned int, unsigned char **, int, TransportAddress *, union nf_inet_addr *, __be16);
+	int (*set_sig_addr)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, TransportAddress *, int);
+	int (*set_ras_addr)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, TransportAddress *, int);
+	int (*nat_rtp_rtcp)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, int, H245_TransportAddress *, __be16, __be16, struct nf_conntrack_expect *, struct nf_conntrack_expect *);
+	int (*nat_t120)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, int, H245_TransportAddress *, __be16, struct nf_conntrack_expect *);
+	int (*nat_h245)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, int, TransportAddress *, __be16, struct nf_conntrack_expect *);
+	int (*nat_callforwarding)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, int, TransportAddress *, __be16, struct nf_conntrack_expect *);
+	int (*nat_q931)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, TransportAddress *, int, __be16, struct nf_conntrack_expect *);
+};
+
+struct UnicastAddress_iPAddress {
+	int options;
+	unsigned int network;
+};
+
+typedef struct UnicastAddress_iPAddress UnicastAddress_iPAddress;
+
+struct UnicastAddress_iP6Address {
+	int options;
+	unsigned int network;
+};
+
+typedef struct UnicastAddress_iP6Address UnicastAddress_iP6Address;
+
+struct UnicastAddress {
+	enum {
+		eUnicastAddress_iPAddress = 0,
+		eUnicastAddress_iPXAddress = 1,
+		eUnicastAddress_iP6Address = 2,
+		eUnicastAddress_netBios = 3,
+		eUnicastAddress_iPSourceRouteAddress = 4,
+		eUnicastAddress_nsap = 5,
+		eUnicastAddress_nonStandardAddress = 6,
+	} choice;
+	union {
+		UnicastAddress_iPAddress iPAddress;
+		UnicastAddress_iP6Address iP6Address;
+	};
+};
+
+typedef struct UnicastAddress UnicastAddress;
+
+struct H245_TransportAddress {
+	enum {
+		eH245_TransportAddress_unicastAddress = 0,
+		eH245_TransportAddress_multicastAddress = 1,
+	} choice;
+	union {
+		UnicastAddress unicastAddress;
+	};
+};
+
+struct TransportAddress_ipAddress {
+	int options;
+	unsigned int ip;
+};
+
+typedef struct TransportAddress_ipAddress TransportAddress_ipAddress;
+
+struct TransportAddress_ip6Address {
+	int options;
+	unsigned int ip;
+};
+
+typedef struct TransportAddress_ip6Address TransportAddress_ip6Address;
+
+struct TransportAddress {
+	enum {
+		eTransportAddress_ipAddress = 0,
+		eTransportAddress_ipSourceRoute = 1,
+		eTransportAddress_ipxAddress = 2,
+		eTransportAddress_ip6Address = 3,
+		eTransportAddress_netBios = 4,
+		eTransportAddress_nsap = 5,
+		eTransportAddress_nonStandardAddress = 6,
+	} choice;
+	union {
+		TransportAddress_ipAddress ipAddress;
+		TransportAddress_ip6Address ip6Address;
+	};
+};
+
+struct GatekeeperRequest {
+	enum {
+		eGatekeeperRequest_nonStandardData = -2147483648,
+		eGatekeeperRequest_gatekeeperIdentifier = 1073741824,
+		eGatekeeperRequest_callServices = 536870912,
+		eGatekeeperRequest_endpointAlias = 268435456,
+		eGatekeeperRequest_alternateEndpoints = 134217728,
+		eGatekeeperRequest_tokens = 67108864,
+		eGatekeeperRequest_cryptoTokens = 33554432,
+		eGatekeeperRequest_authenticationCapability = 16777216,
+		eGatekeeperRequest_algorithmOIDs = 8388608,
+		eGatekeeperRequest_integrity = 4194304,
+		eGatekeeperRequest_integrityCheckValue = 2097152,
+		eGatekeeperRequest_supportsAltGK = 1048576,
+		eGatekeeperRequest_featureSet = 524288,
+		eGatekeeperRequest_genericData = 262144,
+	} options;
+	TransportAddress rasAddress;
+};
+
+typedef struct GatekeeperRequest GatekeeperRequest;
+
+struct GatekeeperConfirm {
+	enum {
+		eGatekeeperConfirm_nonStandardData = -2147483648,
+		eGatekeeperConfirm_gatekeeperIdentifier = 1073741824,
+		eGatekeeperConfirm_alternateGatekeeper = 536870912,
+		eGatekeeperConfirm_authenticationMode = 268435456,
+		eGatekeeperConfirm_tokens = 134217728,
+		eGatekeeperConfirm_cryptoTokens = 67108864,
+		eGatekeeperConfirm_algorithmOID = 33554432,
+		eGatekeeperConfirm_integrity = 16777216,
+		eGatekeeperConfirm_integrityCheckValue = 8388608,
+		eGatekeeperConfirm_featureSet = 4194304,
+		eGatekeeperConfirm_genericData = 2097152,
+	} options;
+	TransportAddress rasAddress;
+};
+
+typedef struct GatekeeperConfirm GatekeeperConfirm;
+
+struct RegistrationRequest_callSignalAddress {
+	int count;
+	TransportAddress item[10];
+};
+
+typedef struct RegistrationRequest_callSignalAddress RegistrationRequest_callSignalAddress;
+
+struct RegistrationRequest_rasAddress {
+	int count;
+	TransportAddress item[10];
+};
+
+typedef struct RegistrationRequest_rasAddress RegistrationRequest_rasAddress;
+
+struct RegistrationRequest {
+	enum {
+		eRegistrationRequest_nonStandardData = -2147483648,
+		eRegistrationRequest_terminalAlias = 1073741824,
+		eRegistrationRequest_gatekeeperIdentifier = 536870912,
+		eRegistrationRequest_alternateEndpoints = 268435456,
+		eRegistrationRequest_timeToLive = 134217728,
+		eRegistrationRequest_tokens = 67108864,
+		eRegistrationRequest_cryptoTokens = 33554432,
+		eRegistrationRequest_integrityCheckValue = 16777216,
+		eRegistrationRequest_keepAlive = 8388608,
+		eRegistrationRequest_endpointIdentifier = 4194304,
+		eRegistrationRequest_willSupplyUUIEs = 2097152,
+		eRegistrationRequest_maintainConnection = 1048576,
+		eRegistrationRequest_alternateTransportAddresses = 524288,
+		eRegistrationRequest_additiveRegistration = 262144,
+		eRegistrationRequest_terminalAliasPattern = 131072,
+		eRegistrationRequest_supportsAltGK = 65536,
+		eRegistrationRequest_usageReportingCapability = 32768,
+		eRegistrationRequest_multipleCalls = 16384,
+		eRegistrationRequest_supportedH248Packages = 8192,
+		eRegistrationRequest_callCreditCapability = 4096,
+		eRegistrationRequest_capacityReportingCapability = 2048,
+		eRegistrationRequest_capacity = 1024,
+		eRegistrationRequest_featureSet = 512,
+		eRegistrationRequest_genericData = 256,
+	} options;
+	RegistrationRequest_callSignalAddress callSignalAddress;
+	RegistrationRequest_rasAddress rasAddress;
+	unsigned int timeToLive;
+};
+
+typedef struct RegistrationRequest RegistrationRequest;
+
+struct RegistrationConfirm_callSignalAddress {
+	int count;
+	TransportAddress item[10];
+};
+
+typedef struct RegistrationConfirm_callSignalAddress RegistrationConfirm_callSignalAddress;
+
+struct RegistrationConfirm {
+	enum {
+		eRegistrationConfirm_nonStandardData = -2147483648,
+		eRegistrationConfirm_terminalAlias = 1073741824,
+		eRegistrationConfirm_gatekeeperIdentifier = 536870912,
+		eRegistrationConfirm_alternateGatekeeper = 268435456,
+		eRegistrationConfirm_timeToLive = 134217728,
+		eRegistrationConfirm_tokens = 67108864,
+		eRegistrationConfirm_cryptoTokens = 33554432,
+		eRegistrationConfirm_integrityCheckValue = 16777216,
+		eRegistrationConfirm_willRespondToIRR = 8388608,
+		eRegistrationConfirm_preGrantedARQ = 4194304,
+		eRegistrationConfirm_maintainConnection = 2097152,
+		eRegistrationConfirm_serviceControl = 1048576,
+		eRegistrationConfirm_supportsAdditiveRegistration = 524288,
+		eRegistrationConfirm_terminalAliasPattern = 262144,
+		eRegistrationConfirm_supportedPrefixes = 131072,
+		eRegistrationConfirm_usageSpec = 65536,
+		eRegistrationConfirm_featureServerAlias = 32768,
+		eRegistrationConfirm_capacityReportingSpec = 16384,
+		eRegistrationConfirm_featureSet = 8192,
+		eRegistrationConfirm_genericData = 4096,
+	} options;
+	RegistrationConfirm_callSignalAddress callSignalAddress;
+	unsigned int timeToLive;
+};
+
+typedef struct RegistrationConfirm RegistrationConfirm;
+
+struct UnregistrationRequest_callSignalAddress {
+	int count;
+	TransportAddress item[10];
+};
+
+typedef struct UnregistrationRequest_callSignalAddress UnregistrationRequest_callSignalAddress;
+
+struct UnregistrationRequest {
+	enum {
+		eUnregistrationRequest_endpointAlias = -2147483648,
+		eUnregistrationRequest_nonStandardData = 1073741824,
+		eUnregistrationRequest_endpointIdentifier = 536870912,
+		eUnregistrationRequest_alternateEndpoints = 268435456,
+		eUnregistrationRequest_gatekeeperIdentifier = 134217728,
+		eUnregistrationRequest_tokens = 67108864,
+		eUnregistrationRequest_cryptoTokens = 33554432,
+		eUnregistrationRequest_integrityCheckValue = 16777216,
+		eUnregistrationRequest_reason = 8388608,
+		eUnregistrationRequest_endpointAliasPattern = 4194304,
+		eUnregistrationRequest_supportedPrefixes = 2097152,
+		eUnregistrationRequest_alternateGatekeeper = 1048576,
+		eUnregistrationRequest_genericData = 524288,
+	} options;
+	UnregistrationRequest_callSignalAddress callSignalAddress;
+};
+
+typedef struct UnregistrationRequest UnregistrationRequest;
+
+struct AdmissionRequest {
+	enum {
+		eAdmissionRequest_callModel = -2147483648,
+		eAdmissionRequest_destinationInfo = 1073741824,
+		eAdmissionRequest_destCallSignalAddress = 536870912,
+		eAdmissionRequest_destExtraCallInfo = 268435456,
+		eAdmissionRequest_srcCallSignalAddress = 134217728,
+		eAdmissionRequest_nonStandardData = 67108864,
+		eAdmissionRequest_callServices = 33554432,
+		eAdmissionRequest_canMapAlias = 16777216,
+		eAdmissionRequest_callIdentifier = 8388608,
+		eAdmissionRequest_srcAlternatives = 4194304,
+		eAdmissionRequest_destAlternatives = 2097152,
+		eAdmissionRequest_gatekeeperIdentifier = 1048576,
+		eAdmissionRequest_tokens = 524288,
+		eAdmissionRequest_cryptoTokens = 262144,
+		eAdmissionRequest_integrityCheckValue = 131072,
+		eAdmissionRequest_transportQOS = 65536,
+		eAdmissionRequest_willSupplyUUIEs = 32768,
+		eAdmissionRequest_callLinkage = 16384,
+		eAdmissionRequest_gatewayDataRate = 8192,
+		eAdmissionRequest_capacity = 4096,
+		eAdmissionRequest_circuitInfo = 2048,
+		eAdmissionRequest_desiredProtocols = 1024,
+		eAdmissionRequest_desiredTunnelledProtocol = 512,
+		eAdmissionRequest_featureSet = 256,
+		eAdmissionRequest_genericData = 128,
+	} options;
+	TransportAddress destCallSignalAddress;
+	TransportAddress srcCallSignalAddress;
+};
+
+typedef struct AdmissionRequest AdmissionRequest;
+
+struct AdmissionConfirm {
+	enum {
+		eAdmissionConfirm_irrFrequency = -2147483648,
+		eAdmissionConfirm_nonStandardData = 1073741824,
+		eAdmissionConfirm_destinationInfo = 536870912,
+		eAdmissionConfirm_destExtraCallInfo = 268435456,
+		eAdmissionConfirm_destinationType = 134217728,
+		eAdmissionConfirm_remoteExtensionAddress = 67108864,
+		eAdmissionConfirm_alternateEndpoints = 33554432,
+		eAdmissionConfirm_tokens = 16777216,
+		eAdmissionConfirm_cryptoTokens = 8388608,
+		eAdmissionConfirm_integrityCheckValue = 4194304,
+		eAdmissionConfirm_transportQOS = 2097152,
+		eAdmissionConfirm_willRespondToIRR = 1048576,
+		eAdmissionConfirm_uuiesRequested = 524288,
+		eAdmissionConfirm_language = 262144,
+		eAdmissionConfirm_alternateTransportAddresses = 131072,
+		eAdmissionConfirm_useSpecifiedTransport = 65536,
+		eAdmissionConfirm_circuitInfo = 32768,
+		eAdmissionConfirm_usageSpec = 16384,
+		eAdmissionConfirm_supportedProtocols = 8192,
+		eAdmissionConfirm_serviceControl = 4096,
+		eAdmissionConfirm_multipleCalls = 2048,
+		eAdmissionConfirm_featureSet = 1024,
+		eAdmissionConfirm_genericData = 512,
+	} options;
+	TransportAddress destCallSignalAddress;
+};
+
+typedef struct AdmissionConfirm AdmissionConfirm;
+
+struct LocationRequest {
+	enum {
+		eLocationRequest_endpointIdentifier = -2147483648,
+		eLocationRequest_nonStandardData = 1073741824,
+		eLocationRequest_sourceInfo = 536870912,
+		eLocationRequest_canMapAlias = 268435456,
+		eLocationRequest_gatekeeperIdentifier = 134217728,
+		eLocationRequest_tokens = 67108864,
+		eLocationRequest_cryptoTokens = 33554432,
+		eLocationRequest_integrityCheckValue = 16777216,
+		eLocationRequest_desiredProtocols = 8388608,
+		eLocationRequest_desiredTunnelledProtocol = 4194304,
+		eLocationRequest_featureSet = 2097152,
+		eLocationRequest_genericData = 1048576,
+		eLocationRequest_hopCount = 524288,
+		eLocationRequest_circuitInfo = 262144,
+	} options;
+	TransportAddress replyAddress;
+};
+
+typedef struct LocationRequest LocationRequest;
+
+struct LocationConfirm {
+	enum {
+		eLocationConfirm_nonStandardData = -2147483648,
+		eLocationConfirm_destinationInfo = 1073741824,
+		eLocationConfirm_destExtraCallInfo = 536870912,
+		eLocationConfirm_destinationType = 268435456,
+		eLocationConfirm_remoteExtensionAddress = 134217728,
+		eLocationConfirm_alternateEndpoints = 67108864,
+		eLocationConfirm_tokens = 33554432,
+		eLocationConfirm_cryptoTokens = 16777216,
+		eLocationConfirm_integrityCheckValue = 8388608,
+		eLocationConfirm_alternateTransportAddresses = 4194304,
+		eLocationConfirm_supportedProtocols = 2097152,
+		eLocationConfirm_multipleCalls = 1048576,
+		eLocationConfirm_featureSet = 524288,
+		eLocationConfirm_genericData = 262144,
+		eLocationConfirm_circuitInfo = 131072,
+		eLocationConfirm_serviceControl = 65536,
+	} options;
+	TransportAddress callSignalAddress;
+	TransportAddress rasAddress;
+};
+
+typedef struct LocationConfirm LocationConfirm;
+
+struct InfoRequestResponse_callSignalAddress {
+	int count;
+	TransportAddress item[10];
+};
+
+typedef struct InfoRequestResponse_callSignalAddress InfoRequestResponse_callSignalAddress;
+
+struct InfoRequestResponse {
+	enum {
+		eInfoRequestResponse_nonStandardData = -2147483648,
+		eInfoRequestResponse_endpointAlias = 1073741824,
+		eInfoRequestResponse_perCallInfo = 536870912,
+		eInfoRequestResponse_tokens = 268435456,
+		eInfoRequestResponse_cryptoTokens = 134217728,
+		eInfoRequestResponse_integrityCheckValue = 67108864,
+		eInfoRequestResponse_needResponse = 33554432,
+		eInfoRequestResponse_capacity = 16777216,
+		eInfoRequestResponse_irrStatus = 8388608,
+		eInfoRequestResponse_unsolicited = 4194304,
+		eInfoRequestResponse_genericData = 2097152,
+	} options;
+	TransportAddress rasAddress;
+	InfoRequestResponse_callSignalAddress callSignalAddress;
+};
+
+typedef struct InfoRequestResponse InfoRequestResponse;
+
+struct RasMessage {
+	enum {
+		eRasMessage_gatekeeperRequest = 0,
+		eRasMessage_gatekeeperConfirm = 1,
+		eRasMessage_gatekeeperReject = 2,
+		eRasMessage_registrationRequest = 3,
+		eRasMessage_registrationConfirm = 4,
+		eRasMessage_registrationReject = 5,
+		eRasMessage_unregistrationRequest = 6,
+		eRasMessage_unregistrationConfirm = 7,
+		eRasMessage_unregistrationReject = 8,
+		eRasMessage_admissionRequest = 9,
+		eRasMessage_admissionConfirm = 10,
+		eRasMessage_admissionReject = 11,
+		eRasMessage_bandwidthRequest = 12,
+		eRasMessage_bandwidthConfirm = 13,
+		eRasMessage_bandwidthReject = 14,
+		eRasMessage_disengageRequest = 15,
+		eRasMessage_disengageConfirm = 16,
+		eRasMessage_disengageReject = 17,
+		eRasMessage_locationRequest = 18,
+		eRasMessage_locationConfirm = 19,
+		eRasMessage_locationReject = 20,
+		eRasMessage_infoRequest = 21,
+		eRasMessage_infoRequestResponse = 22,
+		eRasMessage_nonStandardMessage = 23,
+		eRasMessage_unknownMessageResponse = 24,
+		eRasMessage_requestInProgress = 25,
+		eRasMessage_resourcesAvailableIndicate = 26,
+		eRasMessage_resourcesAvailableConfirm = 27,
+		eRasMessage_infoRequestAck = 28,
+		eRasMessage_infoRequestNak = 29,
+		eRasMessage_serviceControlIndication = 30,
+		eRasMessage_serviceControlResponse = 31,
+	} choice;
+	union {
+		GatekeeperRequest gatekeeperRequest;
+		GatekeeperConfirm gatekeeperConfirm;
+		RegistrationRequest registrationRequest;
+		RegistrationConfirm registrationConfirm;
+		UnregistrationRequest unregistrationRequest;
+		AdmissionRequest admissionRequest;
+		AdmissionConfirm admissionConfirm;
+		LocationRequest locationRequest;
+		LocationConfirm locationConfirm;
+		InfoRequestResponse infoRequestResponse;
+	};
+};
+
+typedef struct RasMessage RasMessage;
+
+struct DataProtocolCapability {
+	enum {
+		eDataProtocolCapability_nonStandard = 0,
+		eDataProtocolCapability_v14buffered = 1,
+		eDataProtocolCapability_v42lapm = 2,
+		eDataProtocolCapability_hdlcFrameTunnelling = 3,
+		eDataProtocolCapability_h310SeparateVCStack = 4,
+		eDataProtocolCapability_h310SingleVCStack = 5,
+		eDataProtocolCapability_transparent = 6,
+		eDataProtocolCapability_segmentationAndReassembly = 7,
+		eDataProtocolCapability_hdlcFrameTunnelingwSAR = 8,
+		eDataProtocolCapability_v120 = 9,
+		eDataProtocolCapability_separateLANStack = 10,
+		eDataProtocolCapability_v76wCompression = 11,
+		eDataProtocolCapability_tcp = 12,
+		eDataProtocolCapability_udp = 13,
+	} choice;
+};
+
+typedef struct DataProtocolCapability DataProtocolCapability;
+
+struct DataApplicationCapability_application {
+	enum {
+		eDataApplicationCapability_application_nonStandard = 0,
+		eDataApplicationCapability_application_t120 = 1,
+		eDataApplicationCapability_application_dsm_cc = 2,
+		eDataApplicationCapability_application_userData = 3,
+		eDataApplicationCapability_application_t84 = 4,
+		eDataApplicationCapability_application_t434 = 5,
+		eDataApplicationCapability_application_h224 = 6,
+		eDataApplicationCapability_application_nlpid = 7,
+		eDataApplicationCapability_application_dsvdControl = 8,
+		eDataApplicationCapability_application_h222DataPartitioning = 9,
+		eDataApplicationCapability_application_t30fax = 10,
+		eDataApplicationCapability_application_t140 = 11,
+		eDataApplicationCapability_application_t38fax = 12,
+		eDataApplicationCapability_application_genericDataCapability = 13,
+	} choice;
+	union {
+		DataProtocolCapability t120;
+	};
+};
+
+typedef struct DataApplicationCapability_application DataApplicationCapability_application;
+
+struct DataApplicationCapability {
+	int options;
+	DataApplicationCapability_application application;
+};
+
+typedef struct DataApplicationCapability DataApplicationCapability;
+
+struct DataType {
+	enum {
+		eDataType_nonStandard = 0,
+		eDataType_nullData = 1,
+		eDataType_videoData = 2,
+		eDataType_audioData = 3,
+		eDataType_data = 4,
+		eDataType_encryptionData = 5,
+		eDataType_h235Control = 6,
+		eDataType_h235Media = 7,
+		eDataType_multiplexedStream = 8,
+	} choice;
+	union {
+		DataApplicationCapability data;
+	};
+};
+
+typedef struct DataType DataType;
+
+struct H2250LogicalChannelParameters {
+	enum {
+		eH2250LogicalChannelParameters_nonStandard = -2147483648,
+		eH2250LogicalChannelParameters_associatedSessionID = 1073741824,
+		eH2250LogicalChannelParameters_mediaChannel = 536870912,
+		eH2250LogicalChannelParameters_mediaGuaranteedDelivery = 268435456,
+		eH2250LogicalChannelParameters_mediaControlChannel = 134217728,
+		eH2250LogicalChannelParameters_mediaControlGuaranteedDelivery = 67108864,
+		eH2250LogicalChannelParameters_silenceSuppression = 33554432,
+		eH2250LogicalChannelParameters_destination = 16777216,
+		eH2250LogicalChannelParameters_dynamicRTPPayloadType = 8388608,
+		eH2250LogicalChannelParameters_mediaPacketization = 4194304,
+		eH2250LogicalChannelParameters_transportCapability = 2097152,
+		eH2250LogicalChannelParameters_redundancyEncoding = 1048576,
+		eH2250LogicalChannelParameters_source = 524288,
+	} options;
+	H245_TransportAddress mediaChannel;
+	H245_TransportAddress mediaControlChannel;
+};
+
+typedef struct H2250LogicalChannelParameters H2250LogicalChannelParameters;
+
+struct OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters {
+	enum {
+		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h222LogicalChannelParameters = 0,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h223LogicalChannelParameters = 1,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_v76LogicalChannelParameters = 2,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters = 3,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_none = 4,
+	} choice;
+	union {
+		H2250LogicalChannelParameters h2250LogicalChannelParameters;
+	};
+};
+
+typedef struct OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters;
+
+struct OpenLogicalChannel_forwardLogicalChannelParameters {
+	enum {
+		eOpenLogicalChannel_forwardLogicalChannelParameters_portNumber = -2147483648,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_forwardLogicalChannelDependency = 1073741824,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_replacementFor = 536870912,
+	} options;
+	DataType dataType;
+	OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters multiplexParameters;
+};
+
+typedef struct OpenLogicalChannel_forwardLogicalChannelParameters OpenLogicalChannel_forwardLogicalChannelParameters;
+
+struct OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters {
+	enum {
+		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h223LogicalChannelParameters = 0,
+		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_v76LogicalChannelParameters = 1,
+		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters = 2,
+	} choice;
+	union {
+		H2250LogicalChannelParameters h2250LogicalChannelParameters;
+	};
+};
+
+typedef struct OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters;
+
+struct OpenLogicalChannel_reverseLogicalChannelParameters {
+	enum {
+		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters = -2147483648,
+		eOpenLogicalChannel_reverseLogicalChannelParameters_reverseLogicalChannelDependency = 1073741824,
+		eOpenLogicalChannel_reverseLogicalChannelParameters_replacementFor = 536870912,
+	} options;
+	OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters multiplexParameters;
+};
+
+typedef struct OpenLogicalChannel_reverseLogicalChannelParameters OpenLogicalChannel_reverseLogicalChannelParameters;
+
+struct NetworkAccessParameters_networkAddress {
+	enum {
+		eNetworkAccessParameters_networkAddress_q2931Address = 0,
+		eNetworkAccessParameters_networkAddress_e164Address = 1,
+		eNetworkAccessParameters_networkAddress_localAreaAddress = 2,
+	} choice;
+	union {
+		H245_TransportAddress localAreaAddress;
+	};
+};
+
+typedef struct NetworkAccessParameters_networkAddress NetworkAccessParameters_networkAddress;
+
+struct NetworkAccessParameters {
+	enum {
+		eNetworkAccessParameters_distribution = -2147483648,
+		eNetworkAccessParameters_externalReference = 1073741824,
+		eNetworkAccessParameters_t120SetupProcedure = 536870912,
+	} options;
+	NetworkAccessParameters_networkAddress networkAddress;
+};
+
+typedef struct NetworkAccessParameters NetworkAccessParameters;
+
+struct OpenLogicalChannel {
+	enum {
+		eOpenLogicalChannel_reverseLogicalChannelParameters = -2147483648,
+		eOpenLogicalChannel_separateStack = 1073741824,
+		eOpenLogicalChannel_encryptionSync = 536870912,
+	} options;
+	OpenLogicalChannel_forwardLogicalChannelParameters forwardLogicalChannelParameters;
+	OpenLogicalChannel_reverseLogicalChannelParameters reverseLogicalChannelParameters;
+	NetworkAccessParameters separateStack;
+};
+
+typedef struct OpenLogicalChannel OpenLogicalChannel;
+
+struct Setup_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct Setup_UUIE_fastStart Setup_UUIE_fastStart;
+
+struct Setup_UUIE {
+	enum {
+		eSetup_UUIE_h245Address = -2147483648,
+		eSetup_UUIE_sourceAddress = 1073741824,
+		eSetup_UUIE_destinationAddress = 536870912,
+		eSetup_UUIE_destCallSignalAddress = 268435456,
+		eSetup_UUIE_destExtraCallInfo = 134217728,
+		eSetup_UUIE_destExtraCRV = 67108864,
+		eSetup_UUIE_callServices = 33554432,
+		eSetup_UUIE_sourceCallSignalAddress = 16777216,
+		eSetup_UUIE_remoteExtensionAddress = 8388608,
+		eSetup_UUIE_callIdentifier = 4194304,
+		eSetup_UUIE_h245SecurityCapability = 2097152,
+		eSetup_UUIE_tokens = 1048576,
+		eSetup_UUIE_cryptoTokens = 524288,
+		eSetup_UUIE_fastStart = 262144,
+		eSetup_UUIE_mediaWaitForConnect = 131072,
+		eSetup_UUIE_canOverlapSend = 65536,
+		eSetup_UUIE_endpointIdentifier = 32768,
+		eSetup_UUIE_multipleCalls = 16384,
+		eSetup_UUIE_maintainConnection = 8192,
+		eSetup_UUIE_connectionParameters = 4096,
+		eSetup_UUIE_language = 2048,
+		eSetup_UUIE_presentationIndicator = 1024,
+		eSetup_UUIE_screeningIndicator = 512,
+		eSetup_UUIE_serviceControl = 256,
+		eSetup_UUIE_symmetricOperationRequired = 128,
+		eSetup_UUIE_capacity = 64,
+		eSetup_UUIE_circuitInfo = 32,
+		eSetup_UUIE_desiredProtocols = 16,
+		eSetup_UUIE_neededFeatures = 8,
+		eSetup_UUIE_desiredFeatures = 4,
+		eSetup_UUIE_supportedFeatures = 2,
+		eSetup_UUIE_parallelH245Control = 1,
+	} options;
+	TransportAddress h245Address;
+	TransportAddress destCallSignalAddress;
+	TransportAddress sourceCallSignalAddress;
+	Setup_UUIE_fastStart fastStart;
+};
+
+typedef struct Setup_UUIE Setup_UUIE;
+
+struct CallProceeding_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct CallProceeding_UUIE_fastStart CallProceeding_UUIE_fastStart;
+
+struct CallProceeding_UUIE {
+	enum {
+		eCallProceeding_UUIE_h245Address = -2147483648,
+		eCallProceeding_UUIE_callIdentifier = 1073741824,
+		eCallProceeding_UUIE_h245SecurityMode = 536870912,
+		eCallProceeding_UUIE_tokens = 268435456,
+		eCallProceeding_UUIE_cryptoTokens = 134217728,
+		eCallProceeding_UUIE_fastStart = 67108864,
+		eCallProceeding_UUIE_multipleCalls = 33554432,
+		eCallProceeding_UUIE_maintainConnection = 16777216,
+		eCallProceeding_UUIE_fastConnectRefused = 8388608,
+		eCallProceeding_UUIE_featureSet = 4194304,
+	} options;
+	TransportAddress h245Address;
+	CallProceeding_UUIE_fastStart fastStart;
+};
+
+typedef struct CallProceeding_UUIE CallProceeding_UUIE;
+
+struct Connect_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct Connect_UUIE_fastStart Connect_UUIE_fastStart;
+
+struct Connect_UUIE {
+	enum {
+		eConnect_UUIE_h245Address = -2147483648,
+		eConnect_UUIE_callIdentifier = 1073741824,
+		eConnect_UUIE_h245SecurityMode = 536870912,
+		eConnect_UUIE_tokens = 268435456,
+		eConnect_UUIE_cryptoTokens = 134217728,
+		eConnect_UUIE_fastStart = 67108864,
+		eConnect_UUIE_multipleCalls = 33554432,
+		eConnect_UUIE_maintainConnection = 16777216,
+		eConnect_UUIE_language = 8388608,
+		eConnect_UUIE_connectedAddress = 4194304,
+		eConnect_UUIE_presentationIndicator = 2097152,
+		eConnect_UUIE_screeningIndicator = 1048576,
+		eConnect_UUIE_fastConnectRefused = 524288,
+		eConnect_UUIE_serviceControl = 262144,
+		eConnect_UUIE_capacity = 131072,
+		eConnect_UUIE_featureSet = 65536,
+	} options;
+	TransportAddress h245Address;
+	Connect_UUIE_fastStart fastStart;
+};
+
+typedef struct Connect_UUIE Connect_UUIE;
+
+struct Alerting_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct Alerting_UUIE_fastStart Alerting_UUIE_fastStart;
+
+struct Alerting_UUIE {
+	enum {
+		eAlerting_UUIE_h245Address = -2147483648,
+		eAlerting_UUIE_callIdentifier = 1073741824,
+		eAlerting_UUIE_h245SecurityMode = 536870912,
+		eAlerting_UUIE_tokens = 268435456,
+		eAlerting_UUIE_cryptoTokens = 134217728,
+		eAlerting_UUIE_fastStart = 67108864,
+		eAlerting_UUIE_multipleCalls = 33554432,
+		eAlerting_UUIE_maintainConnection = 16777216,
+		eAlerting_UUIE_alertingAddress = 8388608,
+		eAlerting_UUIE_presentationIndicator = 4194304,
+		eAlerting_UUIE_screeningIndicator = 2097152,
+		eAlerting_UUIE_fastConnectRefused = 1048576,
+		eAlerting_UUIE_serviceControl = 524288,
+		eAlerting_UUIE_capacity = 262144,
+		eAlerting_UUIE_featureSet = 131072,
+	} options;
+	TransportAddress h245Address;
+	Alerting_UUIE_fastStart fastStart;
+};
+
+typedef struct Alerting_UUIE Alerting_UUIE;
+
+struct FacilityReason {
+	enum {
+		eFacilityReason_routeCallToGatekeeper = 0,
+		eFacilityReason_callForwarded = 1,
+		eFacilityReason_routeCallToMC = 2,
+		eFacilityReason_undefinedReason = 3,
+		eFacilityReason_conferenceListChoice = 4,
+		eFacilityReason_startH245 = 5,
+		eFacilityReason_noH245 = 6,
+		eFacilityReason_newTokens = 7,
+		eFacilityReason_featureSetUpdate = 8,
+		eFacilityReason_forwardedElements = 9,
+		eFacilityReason_transportedInformation = 10,
+	} choice;
+};
+
+typedef struct FacilityReason FacilityReason;
+
+struct Facility_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct Facility_UUIE_fastStart Facility_UUIE_fastStart;
+
+struct Facility_UUIE {
+	enum {
+		eFacility_UUIE_alternativeAddress = -2147483648,
+		eFacility_UUIE_alternativeAliasAddress = 1073741824,
+		eFacility_UUIE_conferenceID = 536870912,
+		eFacility_UUIE_callIdentifier = 268435456,
+		eFacility_UUIE_destExtraCallInfo = 134217728,
+		eFacility_UUIE_remoteExtensionAddress = 67108864,
+		eFacility_UUIE_tokens = 33554432,
+		eFacility_UUIE_cryptoTokens = 16777216,
+		eFacility_UUIE_conferences = 8388608,
+		eFacility_UUIE_h245Address = 4194304,
+		eFacility_UUIE_fastStart = 2097152,
+		eFacility_UUIE_multipleCalls = 1048576,
+		eFacility_UUIE_maintainConnection = 524288,
+		eFacility_UUIE_fastConnectRefused = 262144,
+		eFacility_UUIE_serviceControl = 131072,
+		eFacility_UUIE_circuitInfo = 65536,
+		eFacility_UUIE_featureSet = 32768,
+		eFacility_UUIE_destinationInfo = 16384,
+		eFacility_UUIE_h245SecurityMode = 8192,
+	} options;
+	TransportAddress alternativeAddress;
+	FacilityReason reason;
+	TransportAddress h245Address;
+	Facility_UUIE_fastStart fastStart;
+};
+
+typedef struct Facility_UUIE Facility_UUIE;
+
+struct Progress_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct Progress_UUIE_fastStart Progress_UUIE_fastStart;
+
+struct Progress_UUIE {
+	enum {
+		eProgress_UUIE_h245Address = -2147483648,
+		eProgress_UUIE_h245SecurityMode = 1073741824,
+		eProgress_UUIE_tokens = 536870912,
+		eProgress_UUIE_cryptoTokens = 268435456,
+		eProgress_UUIE_fastStart = 134217728,
+		eProgress_UUIE_multipleCalls = 67108864,
+		eProgress_UUIE_maintainConnection = 33554432,
+		eProgress_UUIE_fastConnectRefused = 16777216,
+	} options;
+	TransportAddress h245Address;
+	Progress_UUIE_fastStart fastStart;
+};
+
+typedef struct Progress_UUIE Progress_UUIE;
+
+struct H323_UU_PDU_h323_message_body {
+	enum {
+		eH323_UU_PDU_h323_message_body_setup = 0,
+		eH323_UU_PDU_h323_message_body_callProceeding = 1,
+		eH323_UU_PDU_h323_message_body_connect = 2,
+		eH323_UU_PDU_h323_message_body_alerting = 3,
+		eH323_UU_PDU_h323_message_body_information = 4,
+		eH323_UU_PDU_h323_message_body_releaseComplete = 5,
+		eH323_UU_PDU_h323_message_body_facility = 6,
+		eH323_UU_PDU_h323_message_body_progress = 7,
+		eH323_UU_PDU_h323_message_body_empty = 8,
+		eH323_UU_PDU_h323_message_body_status = 9,
+		eH323_UU_PDU_h323_message_body_statusInquiry = 10,
+		eH323_UU_PDU_h323_message_body_setupAcknowledge = 11,
+		eH323_UU_PDU_h323_message_body_notify = 12,
+	} choice;
+	union {
+		Setup_UUIE setup;
+		CallProceeding_UUIE callProceeding;
+		Connect_UUIE connect;
+		Alerting_UUIE alerting;
+		Facility_UUIE facility;
+		Progress_UUIE progress;
+	};
+};
+
+typedef struct H323_UU_PDU_h323_message_body H323_UU_PDU_h323_message_body;
+
+struct RequestMessage {
+	enum {
+		eRequestMessage_nonStandard = 0,
+		eRequestMessage_masterSlaveDetermination = 1,
+		eRequestMessage_terminalCapabilitySet = 2,
+		eRequestMessage_openLogicalChannel = 3,
+		eRequestMessage_closeLogicalChannel = 4,
+		eRequestMessage_requestChannelClose = 5,
+		eRequestMessage_multiplexEntrySend = 6,
+		eRequestMessage_requestMultiplexEntry = 7,
+		eRequestMessage_requestMode = 8,
+		eRequestMessage_roundTripDelayRequest = 9,
+		eRequestMessage_maintenanceLoopRequest = 10,
+		eRequestMessage_communicationModeRequest = 11,
+		eRequestMessage_conferenceRequest = 12,
+		eRequestMessage_multilinkRequest = 13,
+		eRequestMessage_logicalChannelRateRequest = 14,
+	} choice;
+	union {
+		OpenLogicalChannel openLogicalChannel;
+	};
+};
+
+typedef struct RequestMessage RequestMessage;
+
+struct OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters {
+	enum {
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_h222LogicalChannelParameters = 0,
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters = 1,
+	} choice;
+	union {
+		H2250LogicalChannelParameters h2250LogicalChannelParameters;
+	};
+};
+
+typedef struct OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters;
+
+struct OpenLogicalChannelAck_reverseLogicalChannelParameters {
+	enum {
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters_portNumber = -2147483648,
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters = 1073741824,
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters_replacementFor = 536870912,
+	} options;
+	OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters multiplexParameters;
+};
+
+typedef struct OpenLogicalChannelAck_reverseLogicalChannelParameters OpenLogicalChannelAck_reverseLogicalChannelParameters;
+
+struct H2250LogicalChannelAckParameters {
+	enum {
+		eH2250LogicalChannelAckParameters_nonStandard = -2147483648,
+		eH2250LogicalChannelAckParameters_sessionID = 1073741824,
+		eH2250LogicalChannelAckParameters_mediaChannel = 536870912,
+		eH2250LogicalChannelAckParameters_mediaControlChannel = 268435456,
+		eH2250LogicalChannelAckParameters_dynamicRTPPayloadType = 134217728,
+		eH2250LogicalChannelAckParameters_flowControlToZero = 67108864,
+		eH2250LogicalChannelAckParameters_portNumber = 33554432,
+	} options;
+	H245_TransportAddress mediaChannel;
+	H245_TransportAddress mediaControlChannel;
+};
+
+typedef struct H2250LogicalChannelAckParameters H2250LogicalChannelAckParameters;
+
+struct OpenLogicalChannelAck_forwardMultiplexAckParameters {
+	enum {
+		eOpenLogicalChannelAck_forwardMultiplexAckParameters_h2250LogicalChannelAckParameters = 0,
+	} choice;
+	union {
+		H2250LogicalChannelAckParameters h2250LogicalChannelAckParameters;
+	};
+};
+
+typedef struct OpenLogicalChannelAck_forwardMultiplexAckParameters OpenLogicalChannelAck_forwardMultiplexAckParameters;
+
+struct OpenLogicalChannelAck {
+	enum {
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters = -2147483648,
+		eOpenLogicalChannelAck_separateStack = 1073741824,
+		eOpenLogicalChannelAck_forwardMultiplexAckParameters = 536870912,
+		eOpenLogicalChannelAck_encryptionSync = 268435456,
+	} options;
+	OpenLogicalChannelAck_reverseLogicalChannelParameters reverseLogicalChannelParameters;
+	NetworkAccessParameters separateStack;
+	OpenLogicalChannelAck_forwardMultiplexAckParameters forwardMultiplexAckParameters;
+};
+
+typedef struct OpenLogicalChannelAck OpenLogicalChannelAck;
+
+struct ResponseMessage {
+	enum {
+		eResponseMessage_nonStandard = 0,
+		eResponseMessage_masterSlaveDeterminationAck = 1,
+		eResponseMessage_masterSlaveDeterminationReject = 2,
+		eResponseMessage_terminalCapabilitySetAck = 3,
+		eResponseMessage_terminalCapabilitySetReject = 4,
+		eResponseMessage_openLogicalChannelAck = 5,
+		eResponseMessage_openLogicalChannelReject = 6,
+		eResponseMessage_closeLogicalChannelAck = 7,
+		eResponseMessage_requestChannelCloseAck = 8,
+		eResponseMessage_requestChannelCloseReject = 9,
+		eResponseMessage_multiplexEntrySendAck = 10,
+		eResponseMessage_multiplexEntrySendReject = 11,
+		eResponseMessage_requestMultiplexEntryAck = 12,
+		eResponseMessage_requestMultiplexEntryReject = 13,
+		eResponseMessage_requestModeAck = 14,
+		eResponseMessage_requestModeReject = 15,
+		eResponseMessage_roundTripDelayResponse = 16,
+		eResponseMessage_maintenanceLoopAck = 17,
+		eResponseMessage_maintenanceLoopReject = 18,
+		eResponseMessage_communicationModeResponse = 19,
+		eResponseMessage_conferenceResponse = 20,
+		eResponseMessage_multilinkResponse = 21,
+		eResponseMessage_logicalChannelRateAcknowledge = 22,
+		eResponseMessage_logicalChannelRateReject = 23,
+	} choice;
+	union {
+		OpenLogicalChannelAck openLogicalChannelAck;
+	};
+};
+
+typedef struct ResponseMessage ResponseMessage;
+
+struct MultimediaSystemControlMessage {
+	enum {
+		eMultimediaSystemControlMessage_request = 0,
+		eMultimediaSystemControlMessage_response = 1,
+		eMultimediaSystemControlMessage_command = 2,
+		eMultimediaSystemControlMessage_indication = 3,
+	} choice;
+	union {
+		RequestMessage request;
+		ResponseMessage response;
+	};
+};
+
+typedef struct MultimediaSystemControlMessage MultimediaSystemControlMessage;
+
+struct H323_UU_PDU_h245Control {
+	int count;
+	MultimediaSystemControlMessage item[4];
+};
+
+typedef struct H323_UU_PDU_h245Control H323_UU_PDU_h245Control;
+
+struct H323_UU_PDU {
+	enum {
+		eH323_UU_PDU_nonStandardData = -2147483648,
+		eH323_UU_PDU_h4501SupplementaryService = 1073741824,
+		eH323_UU_PDU_h245Tunneling = 536870912,
+		eH323_UU_PDU_h245Control = 268435456,
+		eH323_UU_PDU_nonStandardControl = 134217728,
+		eH323_UU_PDU_callLinkage = 67108864,
+		eH323_UU_PDU_tunnelledSignallingMessage = 33554432,
+		eH323_UU_PDU_provisionalRespToH245Tunneling = 16777216,
+		eH323_UU_PDU_stimulusControl = 8388608,
+		eH323_UU_PDU_genericData = 4194304,
+	} options;
+	H323_UU_PDU_h323_message_body h323_message_body;
+	H323_UU_PDU_h245Control h245Control;
+};
+
+typedef struct H323_UU_PDU H323_UU_PDU;
+
+struct H323_UserInformation {
+	enum {
+		eH323_UserInformation_user_data = -2147483648,
+	} options;
+	H323_UU_PDU h323_uu_pdu;
+};
+
+typedef struct H323_UserInformation H323_UserInformation;
+
+typedef struct {
+	enum {
+		Q931_NationalEscape = 0,
+		Q931_Alerting = 1,
+		Q931_CallProceeding = 2,
+		Q931_Connect = 7,
+		Q931_ConnectAck = 15,
+		Q931_Progress = 3,
+		Q931_Setup = 5,
+		Q931_SetupAck = 13,
+		Q931_Resume = 38,
+		Q931_ResumeAck = 46,
+		Q931_ResumeReject = 34,
+		Q931_Suspend = 37,
+		Q931_SuspendAck = 45,
+		Q931_SuspendReject = 33,
+		Q931_UserInformation = 32,
+		Q931_Disconnect = 69,
+		Q931_Release = 77,
+		Q931_ReleaseComplete = 90,
+		Q931_Restart = 70,
+		Q931_RestartAck = 78,
+		Q931_Segment = 96,
+		Q931_CongestionCtrl = 121,
+		Q931_Information = 123,
+		Q931_Notify = 110,
+		Q931_Status = 125,
+		Q931_StatusEnquiry = 117,
+		Q931_Facility = 98,
+	} MessageType;
+	H323_UserInformation UUIE;
+} Q931;
+
+struct nf_ct_h323_master {
+	__be16 sig_port[2];
+	__be16 rtp_port[8];
+	union {
+		u_int32_t timeout;
+		u_int16_t tpkt_len[2];
+	};
+};
+
+struct field_t {
+	unsigned char type;
+	unsigned char sz;
+	unsigned char lb;
+	unsigned char ub;
+	unsigned short attr;
+	unsigned short offset;
+	const struct field_t *fields;
+};
+
+struct bitstr;
+
+typedef int (*decoder_t)(struct bitstr *, const struct field_t *, char *, int);
+
+struct bitstr {
+	unsigned char *buf;
+	unsigned char *beg;
+	unsigned char *end;
+	unsigned char *cur;
+	unsigned int bit;
+};
+
+struct PptpControlHeader;
+
+union pptp_ctrl_union;
+
+struct nf_nat_pptp_hook {
+	int (*outbound)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, struct PptpControlHeader *, union pptp_ctrl_union *);
+	int (*inbound)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, struct PptpControlHeader *, union pptp_ctrl_union *);
+	void (*exp_gre)(struct nf_conntrack_expect *, struct nf_conntrack_expect *);
+	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
+};
+
+struct PptpControlHeader {
+	__be16 messageType;
+	__u16 reserved;
+};
+
+struct PptpStartSessionRequest {
+	__be16 protocolVersion;
+	__u16 reserved1;
+	__be32 framingCapability;
+	__be32 bearerCapability;
+	__be16 maxChannels;
+	__be16 firmwareRevision;
+	__u8 hostName[64];
+	__u8 vendorString[64];
+};
+
+struct PptpStartSessionReply {
+	__be16 protocolVersion;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be32 framingCapability;
+	__be32 bearerCapability;
+	__be16 maxChannels;
+	__be16 firmwareRevision;
+	__u8 hostName[64];
+	__u8 vendorString[64];
+};
+
+struct PptpStopSessionRequest {
+	__u8 reason;
+	__u8 reserved1;
+	__u16 reserved2;
+};
+
+struct PptpStopSessionReply {
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__u16 reserved1;
+};
+
+struct PptpOutCallRequest {
+	__be16 callID;
+	__be16 callSerialNumber;
+	__be32 minBPS;
+	__be32 maxBPS;
+	__be32 bearerType;
+	__be32 framingType;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__be16 phoneNumberLength;
+	__u16 reserved1;
+	__u8 phoneNumber[64];
+	__u8 subAddress[64];
+};
+
+struct PptpOutCallReply {
+	__be16 callID;
+	__be16 peersCallID;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be16 causeCode;
+	__be32 connectSpeed;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__be32 physChannelID;
+};
+
+struct PptpInCallRequest {
+	__be16 callID;
+	__be16 callSerialNumber;
+	__be32 callBearerType;
+	__be32 physChannelID;
+	__be16 dialedNumberLength;
+	__be16 dialingNumberLength;
+	__u8 dialedNumber[64];
+	__u8 dialingNumber[64];
+	__u8 subAddress[64];
+};
+
+struct PptpInCallReply {
+	__be16 callID;
+	__be16 peersCallID;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__u16 reserved;
+};
+
+struct PptpInCallConnected {
+	__be16 peersCallID;
+	__u16 reserved;
+	__be32 connectSpeed;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__be32 callFramingType;
+};
+
+struct PptpClearCallRequest {
+	__be16 callID;
+	__u16 reserved;
+};
+
+struct PptpCallDisconnectNotify {
+	__be16 callID;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be16 causeCode;
+	__u16 reserved;
+	__u8 callStatistics[128];
+};
+
+struct PptpWanErrorNotify {
+	__be16 peersCallID;
+	__u16 reserved;
+	__be32 crcErrors;
+	__be32 framingErrors;
+	__be32 hardwareOverRuns;
+	__be32 bufferOverRuns;
+	__be32 timeoutErrors;
+	__be32 alignmentErrors;
+};
+
+struct PptpSetLinkInfo {
+	__be16 peersCallID;
+	__u16 reserved;
+	__be32 sendAccm;
+	__be32 recvAccm;
+};
+
+union pptp_ctrl_union {
+	struct PptpStartSessionRequest sreq;
+	struct PptpStartSessionReply srep;
+	struct PptpStopSessionRequest streq;
+	struct PptpStopSessionReply strep;
+	struct PptpOutCallRequest ocreq;
+	struct PptpOutCallReply ocack;
+	struct PptpInCallRequest icreq;
+	struct PptpInCallReply icack;
+	struct PptpInCallConnected iccon;
+	struct PptpClearCallRequest clrreq;
+	struct PptpCallDisconnectNotify disc;
+	struct PptpWanErrorNotify wanerr;
+	struct PptpSetLinkInfo setlink;
+};
+
+struct pptp_pkt_hdr {
+	__u16 packetLength;
+	__be16 packetType;
+	__be32 magicCookie;
+};
+
+enum sane_state {
+	SANE_STATE_NORMAL = 0,
+	SANE_STATE_START_REQUESTED = 1,
+};
+
+struct sane_request {
+	__be32 RPC_code;
+	__be32 handle;
+};
+
+struct sane_reply_net_start {
+	__be32 status;
+	__be16 zero;
+	__be16 port;
+};
+
+struct nf_ct_sane_master {
+	enum sane_state state;
+};
+
+struct tftphdr {
+	__be16 opcode;
+};
+
+enum ctattr_nat {
+	CTA_NAT_UNSPEC = 0,
+	CTA_NAT_V4_MINIP = 1,
+	CTA_NAT_V4_MAXIP = 2,
+	CTA_NAT_PROTO = 3,
+	CTA_NAT_V6_MINIP = 4,
+	CTA_NAT_V6_MAXIP = 5,
+	__CTA_NAT_MAX = 6,
+};
+
+enum ctattr_protonat {
+	CTA_PROTONAT_UNSPEC = 0,
+	CTA_PROTONAT_PORT_MIN = 1,
+	CTA_PROTONAT_PORT_MAX = 2,
+	__CTA_PROTONAT_MAX = 3,
+};
+
+struct nf_nat_pptp {
+	__be16 pns_call_id;
+	__be16 pac_call_id;
+};
+
+union nf_conntrack_nat_help {
+	struct nf_nat_pptp nat_pptp_info;
+};
+
+struct nf_conn_nat {
+	union nf_conntrack_nat_help help;
+	int masq_index;
+};
+
+struct nf_nat_range2 {
+	unsigned int flags;
+	union nf_inet_addr min_addr;
+	union nf_inet_addr max_addr;
+	union nf_conntrack_man_proto min_proto;
+	union nf_conntrack_man_proto max_proto;
+	union nf_conntrack_man_proto base_proto;
+};
+
+struct nf_nat_proto_clean {
+	u8 l3proto;
+	u8 l4proto;
+};
+
+struct nf_nat_lookup_hook_priv {
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *entries;
+	struct callback_head callback_head;
+};
+
+struct nf_nat_hooks_net {
+	struct nf_hook_ops *nat_hook_ops;
+	unsigned int users;
+};
+
+struct nat_net {
+	struct nf_nat_hooks_net nat_proto_net[11];
+};
+
+struct inet6_ifaddr {
+	struct in6_addr addr;
+	__u32 prefix_len;
+	__u32 rt_priority;
+	__u32 valid_lft;
+	__u32 prefered_lft;
+	refcount_t refcnt;
+	spinlock_t lock;
+	int state;
+	__u32 flags;
+	__u8 dad_probes;
+	__u8 stable_privacy_retry;
+	__u16 scope;
+	__u64 dad_nonce;
+	unsigned long cstamp;
+	unsigned long tstamp;
+	struct delayed_work dad_work;
+	struct inet6_dev *idev;
+	struct fib6_info *rt;
+	struct hlist_node addr_lst;
+	struct list_head if_list;
+	struct list_head if_list_aux;
+	struct list_head tmp_list;
+	struct inet6_ifaddr *ifpub;
+	int regen_count;
+	bool tokenized;
+	u8 ifa_proto;
+	struct callback_head rcu;
+	struct in6_addr peer_addr;
+};
+
+struct masq_dev_work {
+	struct work_struct work;
+	struct net *net;
+	netns_tracker ns_tracker;
+	union nf_inet_addr addr;
+	int ifindex;
+	int (*iter)(struct nf_conn *, void *);
+};
+
+struct nf_conncount_tuple {
+	struct list_head node;
+	struct nf_conntrack_tuple tuple;
+	struct nf_conntrack_zone zone;
+	int cpu;
+	u32 jiffies32;
+};
+
+struct nf_conncount_list {
+	spinlock_t list_lock;
+	u32 last_gc;
+	struct list_head head;
+	unsigned int count;
+};
+
+struct nf_conncount_rb {
+	struct rb_node node;
+	struct nf_conncount_list list;
+	u32 key[5];
+	struct callback_head callback_head;
+};
+
+struct nf_conncount_data {
+	unsigned int keylen;
+	struct rb_root root[256];
+	struct net *net;
+	struct work_struct gc_work;
+	unsigned long pending_trees[4];
+	unsigned int gc_tree;
+};
+
+struct xt_af {
+	struct mutex mutex;
+	struct list_head match;
+	struct list_head target;
+};
+
+enum {
+	MTTG_TRAV_INIT = 0,
+	MTTG_TRAV_NFP_UNSPEC = 1,
+	MTTG_TRAV_NFP_SPEC = 2,
+	MTTG_TRAV_DONE = 3,
+};
+
+struct xt_action_param;
+
+struct xt_mtchk_param;
+
+struct xt_mtdtor_param;
+
+struct xt_match {
+	struct list_head list;
+	const char name[29];
+	u_int8_t revision;
+	bool (*match)(const struct sk_buff *, struct xt_action_param *);
+	int (*checkentry)(const struct xt_mtchk_param *);
+	void (*destroy)(const struct xt_mtdtor_param *);
+	struct module *me;
+	const char *table;
+	unsigned int matchsize;
+	unsigned int usersize;
+	unsigned int hooks;
+	unsigned short proto;
+	unsigned short family;
+};
+
+struct xt_target;
+
+struct xt_action_param {
+	union {
+		const struct xt_match *match;
+		const struct xt_target *target;
+	};
+	union {
+		const void *matchinfo;
+		const void *targinfo;
+	};
+	const struct nf_hook_state *state;
+	unsigned int thoff;
+	u16 fragoff;
+	bool hotdrop;
+};
+
+struct xt_tgchk_param;
+
+struct xt_tgdtor_param;
+
+struct xt_target {
+	struct list_head list;
+	const char name[29];
+	u_int8_t revision;
+	unsigned int (*target)(struct sk_buff *, const struct xt_action_param *);
+	int (*checkentry)(const struct xt_tgchk_param *);
+	void (*destroy)(const struct xt_tgdtor_param *);
+	struct module *me;
+	const char *table;
+	unsigned int targetsize;
+	unsigned int usersize;
+	unsigned int hooks;
+	unsigned short proto;
+	unsigned short family;
+};
+
+struct xt_tgchk_param {
+	struct net *net;
+	const char *table;
+	const void *entryinfo;
+	const struct xt_target *target;
+	void *targinfo;
+	unsigned int hook_mask;
+	u_int8_t family;
+	bool nft_compat;
+};
+
+struct xt_tgdtor_param {
+	struct net *net;
+	const struct xt_target *target;
+	void *targinfo;
+	u_int8_t family;
+};
+
+struct xt_mtchk_param {
+	struct net *net;
+	const char *table;
+	const void *entryinfo;
+	const struct xt_match *match;
+	void *matchinfo;
+	unsigned int hook_mask;
+	u_int8_t family;
+	bool nft_compat;
+};
+
+struct xt_mtdtor_param {
+	struct net *net;
+	const struct xt_match *match;
+	void *matchinfo;
+	u_int8_t family;
+};
+
+struct xt_table_info;
+
+struct xt_table {
+	struct list_head list;
+	unsigned int valid_hooks;
+	struct xt_table_info *private;
+	struct nf_hook_ops *ops;
+	struct module *me;
+	u_int8_t af;
+	int priority;
+	const char name[32];
+};
+
+struct xt_table_info {
+	unsigned int size;
+	unsigned int number;
+	unsigned int initial_entries;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int stacksize;
+	void ***jumpstack;
+	unsigned char entries[0];
+};
+
+struct xt_template {
+	struct list_head list;
+	int (*table_init)(struct net *);
+	struct module *me;
+	char name[32];
+};
+
+struct xt_entry_match {
+	union {
+		struct {
+			__u16 match_size;
+			char name[29];
+			__u8 revision;
+		} user;
+		struct {
+			__u16 match_size;
+			struct xt_match *match;
+		} kernel;
+		__u16 match_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct nf_mttg_trav {
+	struct list_head *head;
+	struct list_head *curr;
+	uint8_t class;
+};
+
+struct xt_counters {
+	__u64 pcnt;
+	__u64 bcnt;
+};
+
+struct xt_entry_target {
+	union {
+		struct {
+			__u16 target_size;
+			char name[29];
+			__u8 revision;
+		} user;
+		struct {
+			__u16 target_size;
+			struct xt_target *target;
+		} kernel;
+		__u16 target_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct xt_error_target {
+	struct xt_entry_target target;
+	char errorname[30];
+};
+
+struct xt_standard_target {
+	struct xt_entry_target target;
+	int verdict;
+};
+
+struct xt_counters_info {
+	char name[32];
+	unsigned int num_counters;
+	struct xt_counters counters[0];
+};
+
+struct xt_pernet {
+	struct list_head tables[11];
+};
+
+struct xt_percpu_counter_alloc_state {
+	unsigned int off;
+	const char __attribute__((btf_type_tag("percpu"))) *mem;
+};
+
+struct xt_tcp {
+	__u16 spts[2];
+	__u16 dpts[2];
+	__u8 option;
+	__u8 flg_mask;
+	__u8 flg_cmp;
+	__u8 invflags;
+};
+
+struct xt_udp {
+	__u16 spts[2];
+	__u16 dpts[2];
+	__u8 invflags;
+};
+
+struct ipt_icmp {
+	__u8 type;
+	__u8 code[2];
+	__u8 invflags;
+};
+
+struct ip6t_icmp {
+	__u8 type;
+	__u8 code[2];
+	__u8 invflags;
+};
+
+struct xt_mark_mtinfo1 {
+	__u32 mark;
+	__u32 mask;
+	__u8 invert;
+};
+
+struct xt_mark_tginfo2 {
+	__u32 mark;
+	__u32 mask;
+};
+
+enum {
+	XT_CONNMARK_SET = 0,
+	XT_CONNMARK_SAVE = 1,
+	XT_CONNMARK_RESTORE = 2,
+};
+
+enum {
+	D_SHIFT_LEFT = 0,
+	D_SHIFT_RIGHT = 1,
+};
+
+struct xt_connmark_mtinfo1 {
+	__u32 mark;
+	__u32 mask;
+	__u8 invert;
+};
+
+struct xt_connmark_tginfo1 {
+	__u32 ctmark;
+	__u32 ctmask;
+	__u32 nfmask;
+	__u8 mode;
+};
+
+struct xt_connmark_tginfo2 {
+	__u32 ctmark;
+	__u32 ctmask;
+	__u32 nfmask;
+	__u8 shift_dir;
+	__u8 shift_bits;
+	__u8 mode;
+};
+
+struct nf_nat_ipv4_range {
+	unsigned int flags;
+	__be32 min_ip;
+	__be32 max_ip;
+	union nf_conntrack_man_proto min;
+	union nf_conntrack_man_proto max;
+};
+
+struct nf_nat_ipv4_multi_range_compat {
+	unsigned int rangesize;
+	struct nf_nat_ipv4_range range[1];
+};
+
+struct nf_nat_range {
+	unsigned int flags;
+	union nf_inet_addr min_addr;
+	union nf_inet_addr max_addr;
+	union nf_conntrack_man_proto min_proto;
+	union nf_conntrack_man_proto max_proto;
+};
+
+struct xt_classify_target_info {
+	__u32 priority;
+};
+
+enum {
+	CONNSECMARK_SAVE = 1,
+	CONNSECMARK_RESTORE = 2,
+};
+
+struct xt_connsecmark_target_info {
+	__u8 mode;
+};
+
+enum {
+	XT_CT_NOTRACK = 1,
+	XT_CT_NOTRACK_ALIAS = 2,
+	XT_CT_ZONE_DIR_ORIG = 4,
+	XT_CT_ZONE_DIR_REPL = 8,
+	XT_CT_ZONE_MARK = 16,
+	XT_CT_MASK = 31,
+};
+
+struct xt_ct_target_info_v1 {
+	__u16 flags;
+	__u16 zone;
+	__u32 ct_events;
+	__u32 exp_events;
+	char helper[16];
+	char timeout[32];
+	struct nf_conn *ct;
+};
+
+struct ipt_ip {
+	struct in_addr src;
+	struct in_addr dst;
+	struct in_addr smsk;
+	struct in_addr dmsk;
+	char iniface[16];
+	char outiface[16];
+	unsigned char iniface_mask[16];
+	unsigned char outiface_mask[16];
+	__u16 proto;
+	__u8 flags;
+	__u8 invflags;
+};
+
+struct ipt_entry {
+	struct ipt_ip ip;
+	unsigned int nfcache;
+	__u16 target_offset;
+	__u16 next_offset;
+	unsigned int comefrom;
+	struct xt_counters counters;
+	unsigned char elems[0];
+};
+
+struct ip6t_ip6 {
+	struct in6_addr src;
+	struct in6_addr dst;
+	struct in6_addr smsk;
+	struct in6_addr dmsk;
+	char iniface[16];
+	char outiface[16];
+	unsigned char iniface_mask[16];
+	unsigned char outiface_mask[16];
+	__u16 proto;
+	__u8 tos;
+	__u8 flags;
+	__u8 invflags;
+};
+
+struct ip6t_entry {
+	struct ip6t_ip6 ipv6;
+	unsigned int nfcache;
+	__u16 target_offset;
+	__u16 next_offset;
+	unsigned int comefrom;
+	struct xt_counters counters;
+	unsigned char elems[0];
+};
+
+struct xt_ct_target_info {
+	__u16 flags;
+	__u16 zone;
+	__u32 ct_events;
+	__u32 exp_events;
+	char helper[16];
+	struct nf_conn *ct;
+};
+
+struct xt_DSCP_info {
+	__u8 dscp;
+};
+
+struct xt_tos_target_info {
+	__u8 tos_value;
+	__u8 tos_mask;
+};
+
+struct xt_nflog_info {
+	__u32 len;
+	__u16 group;
+	__u16 threshold;
+	__u16 flags;
+	__u16 pad;
+	char prefix[64];
+};
+
+struct xt_NFQ_info_v1 {
+	__u16 queuenum;
+	__u16 queues_total;
+};
+
+struct xt_NFQ_info {
+	__u16 queuenum;
+};
+
+struct xt_NFQ_info_v3 {
+	__u16 queuenum;
+	__u16 queues_total;
+	__u16 flags;
+};
+
+struct xt_NFQ_info_v2 {
+	__u16 queuenum;
+	__u16 queues_total;
+	__u16 bypass;
+};
+
+struct xt_secmark_target_info_v1 {
+	__u8 mode;
+	char secctx[256];
+	__u32 secid;
+};
+
+struct xt_secmark_target_info {
+	__u8 mode;
+	__u32 secid;
+	char secctx[256];
+};
+
+enum nf_tproxy_lookup_t {
+	NF_TPROXY_LOOKUP_LISTENER = 0,
+	NF_TPROXY_LOOKUP_ESTABLISHED = 1,
+};
+
+struct xt_tproxy_target_info {
+	__u32 mark_mask;
+	__u32 mark_value;
+	__be32 laddr;
+	__be16 lport;
+};
+
+struct xt_tproxy_target_info_v1 {
+	__u32 mark_mask;
+	__u32 mark_value;
+	union nf_inet_addr laddr;
+	__be16 lport;
+};
+
+struct xt_tcpmss_info {
+	__u16 mss;
+};
+
+struct xt_tee_tginfo;
+
+struct xt_tee_priv {
+	struct list_head list;
+	struct xt_tee_tginfo *tginfo;
+	int oif;
+};
+
+struct xt_tee_tginfo {
+	union nf_inet_addr gw;
+	char oif[16];
+	struct xt_tee_priv *priv;
+};
+
+struct tee_net {
+	struct list_head priv_list;
+	struct mutex lock;
+};
+
+struct idletimer_tg {
+	struct list_head entry;
+	struct alarm alarm;
+	struct timer_list timer;
+	struct work_struct work;
+	struct kobject *kobj;
+	struct device_attribute attr;
+	struct timespec64 delayed_timer_trigger;
+	struct timespec64 last_modified_timer;
+	struct timespec64 last_suspend_time;
+	struct notifier_block pm_nb;
+	int timeout;
+	unsigned int refcnt;
+	u8 timer_type;
+	bool work_pending;
+	bool send_nl_msg;
+	bool active;
+	uid_t uid;
+	bool suspend_time_valid;
+};
+
+struct idletimer_tg_info {
+	__u32 timeout;
+	char label[28];
+	struct idletimer_tg *timer;
+};
+
+struct idletimer_tg_info_v1 {
+	__u32 timeout;
+	char label[28];
+	__u8 send_nl_msg;
+	__u8 timer_type;
+	struct idletimer_tg *timer;
+};
+
+enum xt_bpf_modes {
+	XT_BPF_MODE_BYTECODE = 0,
+	XT_BPF_MODE_FD_PINNED = 1,
+	XT_BPF_MODE_FD_ELF = 2,
+};
+
+struct xt_bpf_info {
+	__u16 bpf_program_num_elem;
+	struct sock_filter bpf_program[64];
+	struct bpf_prog *filter;
+};
+
+struct xt_bpf_info_v1 {
+	__u16 mode;
+	__u16 bpf_program_num_elem;
+	__s32 fd;
+	union {
+		struct sock_filter bpf_program[64];
+		char path[512];
+	};
+	struct bpf_prog *filter;
+};
+
+enum xt_connbytes_what {
+	XT_CONNBYTES_PKTS = 0,
+	XT_CONNBYTES_BYTES = 1,
+	XT_CONNBYTES_AVGPKT = 2,
+};
+
+enum xt_connbytes_direction {
+	XT_CONNBYTES_DIR_ORIGINAL = 0,
+	XT_CONNBYTES_DIR_REPLY = 1,
+	XT_CONNBYTES_DIR_BOTH = 2,
+};
+
+struct xt_connbytes_info {
+	struct {
+		__u64 from;
+		__u64 to;
+	} count;
+	__u8 what;
+	__u8 direction;
+};
+
+enum {
+	XT_CONNLIMIT_INVERT = 1,
+	XT_CONNLIMIT_DADDR = 2,
+};
+
+struct xt_connlimit_info {
+	union {
+		union nf_inet_addr mask;
+	};
+	unsigned int limit;
+	__u32 flags;
+	struct nf_conncount_data *data;
+};
+
+enum {
+	XT_CONNTRACK_STATE = 1,
+	XT_CONNTRACK_PROTO = 2,
+	XT_CONNTRACK_ORIGSRC = 4,
+	XT_CONNTRACK_ORIGDST = 8,
+	XT_CONNTRACK_REPLSRC = 16,
+	XT_CONNTRACK_REPLDST = 32,
+	XT_CONNTRACK_STATUS = 64,
+	XT_CONNTRACK_EXPIRES = 128,
+	XT_CONNTRACK_ORIGSRC_PORT = 256,
+	XT_CONNTRACK_ORIGDST_PORT = 512,
+	XT_CONNTRACK_REPLSRC_PORT = 1024,
+	XT_CONNTRACK_REPLDST_PORT = 2048,
+	XT_CONNTRACK_DIRECTION = 4096,
+	XT_CONNTRACK_STATE_ALIAS = 8192,
+};
+
+struct xt_conntrack_mtinfo2 {
+	union nf_inet_addr origsrc_addr;
+	union nf_inet_addr origsrc_mask;
+	union nf_inet_addr origdst_addr;
+	union nf_inet_addr origdst_mask;
+	union nf_inet_addr replsrc_addr;
+	union nf_inet_addr replsrc_mask;
+	union nf_inet_addr repldst_addr;
+	union nf_inet_addr repldst_mask;
+	__u32 expires_min;
+	__u32 expires_max;
+	__u16 l4proto;
+	__be16 origsrc_port;
+	__be16 origdst_port;
+	__be16 replsrc_port;
+	__be16 repldst_port;
+	__u16 match_flags;
+	__u16 invert_flags;
+	__u16 state_mask;
+	__u16 status_mask;
+};
+
+struct xt_conntrack_mtinfo3 {
+	union nf_inet_addr origsrc_addr;
+	union nf_inet_addr origsrc_mask;
+	union nf_inet_addr origdst_addr;
+	union nf_inet_addr origdst_mask;
+	union nf_inet_addr replsrc_addr;
+	union nf_inet_addr replsrc_mask;
+	union nf_inet_addr repldst_addr;
+	union nf_inet_addr repldst_mask;
+	__u32 expires_min;
+	__u32 expires_max;
+	__u16 l4proto;
+	__u16 origsrc_port;
+	__u16 origdst_port;
+	__u16 replsrc_port;
+	__u16 repldst_port;
+	__u16 match_flags;
+	__u16 invert_flags;
+	__u16 state_mask;
+	__u16 status_mask;
+	__u16 origsrc_port_high;
+	__u16 origdst_port_high;
+	__u16 replsrc_port_high;
+	__u16 repldst_port_high;
+};
+
+struct xt_conntrack_mtinfo1 {
+	union nf_inet_addr origsrc_addr;
+	union nf_inet_addr origsrc_mask;
+	union nf_inet_addr origdst_addr;
+	union nf_inet_addr origdst_mask;
+	union nf_inet_addr replsrc_addr;
+	union nf_inet_addr replsrc_mask;
+	union nf_inet_addr repldst_addr;
+	union nf_inet_addr repldst_mask;
+	__u32 expires_min;
+	__u32 expires_max;
+	__u16 l4proto;
+	__be16 origsrc_port;
+	__be16 origdst_port;
+	__be16 replsrc_port;
+	__be16 repldst_port;
+	__u16 match_flags;
+	__u16 invert_flags;
+	__u8 state_mask;
+	__u8 status_mask;
+};
+
+struct xt_dscp_info {
+	__u8 dscp;
+	__u8 invert;
+};
+
+struct xt_tos_match_info {
+	__u8 tos_mask;
+	__u8 tos_value;
+	__u8 invert;
+};
+
+struct xt_ecn_info {
+	__u8 operation;
+	__u8 invert;
+	__u8 ip_ect;
+	union {
+		struct {
+			__u8 ect;
+		} tcp;
+	} proto;
+};
+
+struct xt_esp {
+	__u32 spis[2];
+	__u8 invflags;
+};
+
+enum {
+	XT_HASHLIMIT_HASH_DIP = 1,
+	XT_HASHLIMIT_HASH_DPT = 2,
+	XT_HASHLIMIT_HASH_SIP = 4,
+	XT_HASHLIMIT_HASH_SPT = 8,
+	XT_HASHLIMIT_INVERT = 16,
+	XT_HASHLIMIT_BYTES = 32,
+	XT_HASHLIMIT_RATE_MATCH = 64,
+};
+
+struct hashlimit_cfg1 {
+	__u32 mode;
+	__u32 avg;
+	__u32 burst;
+	__u32 size;
+	__u32 max;
+	__u32 gc_interval;
+	__u32 expire;
+	__u8 srcmask;
+	__u8 dstmask;
+};
+
+struct hashlimit_cfg2 {
+	__u64 avg;
+	__u64 burst;
+	__u32 mode;
+	__u32 size;
+	__u32 max;
+	__u32 gc_interval;
+	__u32 expire;
+	__u8 srcmask;
+	__u8 dstmask;
+};
+
+struct dsthash_dst {
+	union {
+		struct {
+			__be32 src;
+			__be32 dst;
+		} ip;
+		struct {
+			__be32 src[4];
+			__be32 dst[4];
+		} ip6;
+	};
+	__be16 src_port;
+	__be16 dst_port;
+};
+
+struct dsthash_ent {
+	struct hlist_node node;
+	struct dsthash_dst dst;
+	spinlock_t lock;
+	unsigned long expires;
+	struct {
+		unsigned long prev;
+		union {
+			struct {
+				u_int64_t credit;
+				u_int64_t credit_cap;
+				u_int64_t cost;
+			};
+			struct {
+				u_int32_t interval;
+				u_int32_t prev_window;
+				u_int64_t current_rate;
+				u_int64_t rate;
+				int64_t burst;
+			};
+		};
+	} rateinfo;
+	struct callback_head rcu;
+};
+
+struct hashlimit_cfg3 {
+	__u64 avg;
+	__u64 burst;
+	__u32 mode;
+	__u32 size;
+	__u32 max;
+	__u32 gc_interval;
+	__u32 expire;
+	__u32 interval;
+	__u8 srcmask;
+	__u8 dstmask;
+};
+
+struct xt_hashlimit_htable {
+	struct hlist_node node;
+	refcount_t use;
+	u_int8_t family;
+	bool rnd_initialized;
+	struct hashlimit_cfg3 cfg;
+	spinlock_t lock;
+	u_int32_t rnd;
+	unsigned int count;
+	struct delayed_work gc_work;
+	struct proc_dir_entry *pde;
+	const char *name;
+	struct net *net;
+	struct hlist_head hash[0];
+};
+
+struct hashlimit_net {
+	struct hlist_head htables;
+	struct proc_dir_entry *ipt_hashlimit;
+	struct proc_dir_entry *ip6t_hashlimit;
+};
+
+struct xt_hashlimit_mtinfo1 {
+	char name[16];
+	struct hashlimit_cfg1 cfg;
+	struct xt_hashlimit_htable *hinfo;
+};
+
+struct xt_hashlimit_mtinfo2 {
+	char name[255];
+	struct hashlimit_cfg2 cfg;
+	struct xt_hashlimit_htable *hinfo;
+};
+
+struct xt_hashlimit_mtinfo3 {
+	char name[255];
+	struct hashlimit_cfg3 cfg;
+	struct xt_hashlimit_htable *hinfo;
+};
+
+struct xt_helper_info {
+	int invert;
+	char name[30];
+};
+
+enum {
+	IPT_TTL_EQ = 0,
+	IPT_TTL_NE = 1,
+	IPT_TTL_LT = 2,
+	IPT_TTL_GT = 3,
+};
+
+enum {
+	IP6T_HL_EQ = 0,
+	IP6T_HL_NE = 1,
+	IP6T_HL_LT = 2,
+	IP6T_HL_GT = 3,
+};
+
+struct ipt_ttl_info {
+	__u8 mode;
+	__u8 ttl;
+};
+
+struct ip6t_hl_info {
+	__u8 mode;
+	__u8 hop_limit;
+};
+
+enum {
+	IPRANGE_SRC = 1,
+	IPRANGE_DST = 2,
+	IPRANGE_SRC_INV = 16,
+	IPRANGE_DST_INV = 32,
+};
+
+struct xt_iprange_mtinfo {
+	union nf_inet_addr src_min;
+	union nf_inet_addr src_max;
+	union nf_inet_addr dst_min;
+	union nf_inet_addr dst_max;
+	__u8 flags;
+};
+
+enum xt_l2tp_type {
+	XT_L2TP_TYPE_CONTROL = 0,
+	XT_L2TP_TYPE_DATA = 1,
+};
+
+enum {
+	XT_L2TP_TID = 1,
+	XT_L2TP_SID = 2,
+	XT_L2TP_VERSION = 4,
+	XT_L2TP_TYPE = 8,
+};
+
+struct xt_l2tp_info {
+	__u32 tid;
+	__u32 sid;
+	__u8 version;
+	__u8 type;
+	__u8 flags;
+};
+
+struct l2tp_data {
+	u32 tid;
+	u32 sid;
+	u8 type;
+	u8 version;
+};
+
+union l2tp_val {
+	__be16 val16[2];
+	__be32 val32;
+};
+
+struct xt_length_info {
+	__u16 min;
+	__u16 max;
+	__u8 invert;
+};
+
+struct xt_limit_priv;
+
+struct xt_rateinfo {
+	__u32 avg;
+	__u32 burst;
+	unsigned long prev;
+	__u32 credit;
+	__u32 credit_cap;
+	__u32 cost;
+	struct xt_limit_priv *master;
+};
+
+struct xt_limit_priv {
+	unsigned long prev;
+	u32 credit;
+};
+
+struct xt_mac_info {
+	unsigned char srcaddr[6];
+	int invert;
+};
+
+enum xt_multiport_flags {
+	XT_MULTIPORT_SOURCE = 0,
+	XT_MULTIPORT_DESTINATION = 1,
+	XT_MULTIPORT_EITHER = 2,
+};
+
+struct xt_multiport_v1 {
+	__u8 flags;
+	__u8 count;
+	__u16 ports[15];
+	__u8 pflags[15];
+	__u8 invert;
+};
+
+enum {
+	XT_OWNER_UID = 1,
+	XT_OWNER_GID = 2,
+	XT_OWNER_SOCKET = 4,
+	XT_OWNER_SUPPL_GROUPS = 8,
+};
+
+struct xt_owner_match_info {
+	__u32 uid_min;
+	__u32 uid_max;
+	__u32 gid_min;
+	__u32 gid_max;
+	__u8 match;
+	__u8 invert;
+};
+
+struct xt_pkttype_info {
+	int pkttype;
+	int invert;
+};
+
+enum xt_policy_flags {
+	XT_POLICY_MATCH_IN = 1,
+	XT_POLICY_MATCH_OUT = 2,
+	XT_POLICY_MATCH_NONE = 4,
+	XT_POLICY_MATCH_STRICT = 8,
+};
+
+struct xt_policy_spec {
+	__u8 saddr: 1;
+	__u8 daddr: 1;
+	__u8 proto: 1;
+	__u8 mode: 1;
+	__u8 spi: 1;
+	__u8 reqid: 1;
+};
+
+struct xt_policy_elem {
+	union {
+		struct {
+			union nf_inet_addr saddr;
+			union nf_inet_addr smask;
+			union nf_inet_addr daddr;
+			union nf_inet_addr dmask;
+		};
+	};
+	__be32 spi;
+	__u32 reqid;
+	__u8 proto;
+	__u8 mode;
+	struct xt_policy_spec match;
+	struct xt_policy_spec invert;
+};
+
+struct xt_policy_info {
+	struct xt_policy_elem pol[4];
+	__u16 flags;
+	__u16 len;
+};
+
+enum xt_quota_flags {
+	XT_QUOTA_INVERT = 1,
+};
+
+struct xt_quota_priv {
+	spinlock_t lock;
+	uint64_t quota;
+};
+
+struct xt_quota_info {
+	__u32 flags;
+	__u32 pad;
+	__u64 quota;
+	struct xt_quota_priv *master;
+};
+
+enum xt_quota_flags___2 {
+	XT_QUOTA_INVERT___2 = 1,
+	XT_QUOTA_GROW = 2,
+	XT_QUOTA_PACKET = 4,
+	XT_QUOTA_NO_CHANGE = 8,
+	XT_QUOTA_MASK = 15,
+};
+
+struct xt_quota_counter {
+	u_int64_t quota;
+	spinlock_t lock;
+	struct list_head list;
+	atomic_t ref;
+	char name[15];
+	struct proc_dir_entry *procfs_entry;
+};
+
+struct ulog_packet_msg {
+	unsigned long mark;
+	long timestamp_sec;
+	long timestamp_usec;
+	unsigned int hook;
+	char indev_name[16];
+	char outdev_name[16];
+	size_t data_len;
+	char prefix[32];
+	unsigned char mac_len;
+	unsigned char mac[80];
+	unsigned char payload[0];
+};
+
+typedef struct ulog_packet_msg ulog_packet_msg_t;
+
+struct xt_quota_mtinfo2 {
+	char name[15];
+	u_int8_t flags;
+	__u64 quota;
+	struct xt_quota_counter *master;
+};
+
+struct xt_socket_mtinfo1 {
+	__u8 flags;
+};
+
+enum {
+	XT_SOCKET_TRANSPARENT = 1,
+	XT_SOCKET_NOWILDCARD = 2,
+	XT_SOCKET_RESTORESKMARK = 4,
+};
+
+struct xt_socket_mtinfo2 {
+	__u8 flags;
+};
+
+struct xt_socket_mtinfo3 {
+	__u8 flags;
+};
+
+struct xt_state_info {
+	unsigned int statemask;
+};
+
+enum xt_statistic_flags {
+	XT_STATISTIC_INVERT = 1,
+};
+
+enum xt_statistic_mode {
+	XT_STATISTIC_MODE_RANDOM = 0,
+	XT_STATISTIC_MODE_NTH = 1,
+	__XT_STATISTIC_MODE_MAX = 2,
+};
+
+struct xt_statistic_priv;
+
+struct xt_statistic_info {
+	__u16 mode;
+	__u16 flags;
+	union {
+		struct {
+			__u32 probability;
+		} random;
+		struct {
+			__u32 every;
+			__u32 packet;
+			__u32 count;
+		} nth;
+	} u;
+	struct xt_statistic_priv *master;
+};
+
+struct xt_statistic_priv {
+	atomic_t count;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	XT_STRING_FLAG_INVERT = 1,
+	XT_STRING_FLAG_IGNORECASE = 2,
+};
+
+struct xt_string_info {
+	__u16 from_offset;
+	__u16 to_offset;
+	char algo[16];
+	char pattern[128];
+	__u8 patlen;
+	union {
+		struct {
+			__u8 invert;
+		} v0;
+		struct {
+			__u8 flags;
+		} v1;
+	} u;
+	struct ts_config *config;
+};
+
+enum {
+	XT_TIME_LOCAL_TZ = 1,
+	XT_TIME_CONTIGUOUS = 2,
+	XT_TIME_ALL_MONTHDAYS = 4294967294,
+	XT_TIME_ALL_WEEKDAYS = 254,
+	XT_TIME_MIN_DAYTIME = 0,
+	XT_TIME_MAX_DAYTIME = 86399,
+};
+
+enum {
+	DSE_FIRST = 2039,
+	SECONDS_PER_DAY = 86400,
+};
+
+struct xtm {
+	u_int8_t month;
+	u_int8_t monthday;
+	u_int8_t weekday;
+	u_int8_t hour;
+	u_int8_t minute;
+	u_int8_t second;
+	unsigned int dse;
+};
+
+struct xt_time_info {
+	__u32 date_start;
+	__u32 date_stop;
+	__u32 daytime_start;
+	__u32 daytime_stop;
+	__u32 monthdays_match;
+	__u8 weekdays_match;
+	__u8 flags;
+};
+
+enum xt_u32_ops {
+	XT_U32_AND = 0,
+	XT_U32_LEFTSH = 1,
+	XT_U32_RIGHTSH = 2,
+	XT_U32_AT = 3,
+};
+
+struct xt_u32_location_element {
+	__u32 number;
+	__u8 nextop;
+};
+
+struct xt_u32_value_element {
+	__u32 min;
+	__u32 max;
+};
+
+struct xt_u32_test {
+	struct xt_u32_location_element location[11];
+	struct xt_u32_value_element value[11];
+	__u8 nnums;
+	__u8 nvalues;
+};
+
+struct xt_u32 {
+	struct xt_u32_test tests[11];
+	__u8 ntests;
+	__u8 invert;
+};
+
+struct uncached_list {
+	spinlock_t lock;
+	struct list_head head;
+	struct list_head quarantine;
+};
+
+struct ip_sf_list {
+	struct ip_sf_list *sf_next;
+	unsigned long sf_count[2];
+	__be32 sf_inaddr;
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+};
+
+struct rt_cache_stat {
+	unsigned int in_slow_tot;
+	unsigned int in_slow_mc;
+	unsigned int in_no_route;
+	unsigned int in_brd;
+	unsigned int in_martian_dst;
+	unsigned int in_martian_src;
+	unsigned int out_slow_tot;
+	unsigned int out_slow_mc;
+};
+
+struct ip_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	__be32 sl_addr[0];
+};
+
+typedef u8 dscp_t;
+
+struct fib_alias {
+	struct hlist_node fa_list;
+	struct fib_info *fa_info;
+	dscp_t fa_dscp;
+	u8 fa_type;
+	u8 fa_state;
+	u8 fa_slen;
+	u32 tb_id;
+	s16 fa_default;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	struct callback_head rcu;
+};
+
+struct ipv4_addr_key {
+	__be32 addr;
+	int vif;
+};
+
+struct inetpeer_addr {
+	union {
+		struct ipv4_addr_key a4;
+		struct in6_addr a6;
+		u32 key[4];
+	};
+	__u16 family;
+};
+
+struct inet_peer {
+	struct rb_node rb_node;
+	struct inetpeer_addr daddr;
+	u32 metrics[17];
+	u32 rate_tokens;
+	u32 n_redirects;
+	unsigned long rate_last;
+	union {
+		struct {
+			atomic_t rid;
+		};
+		struct callback_head rcu;
+	};
+	__u32 dtime;
+	refcount_t refcnt;
+};
+
+struct rtmsg {
+	unsigned char rtm_family;
+	unsigned char rtm_dst_len;
+	unsigned char rtm_src_len;
+	unsigned char rtm_tos;
+	unsigned char rtm_table;
+	unsigned char rtm_protocol;
+	unsigned char rtm_scope;
+	unsigned char rtm_type;
+	unsigned int rtm_flags;
+};
+
+struct fib_rt_info {
+	struct fib_info *fi;
+	u32 tb_id;
+	__be32 dst;
+	int dst_len;
+	dscp_t dscp;
+	u8 type;
+	u8 offload: 1;
+	u8 trap: 1;
+	u8 offload_failed: 1;
+	u8 unused: 5;
+};
+
+struct rtvia {
+	__kernel_sa_family_t rtvia_family;
+	__u8 rtvia_addr[0];
+};
+
+struct net_offload {
+	struct offload_callbacks callbacks;
+	unsigned int flags;
+};
+
+struct raw_hashinfo {
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct hlist_head ht[256];
+};
+
+enum ip_defrag_users {
+	IP_DEFRAG_LOCAL_DELIVER = 0,
+	IP_DEFRAG_CALL_RA_CHAIN = 1,
+	IP_DEFRAG_CONNTRACK_IN = 2,
+	__IP_DEFRAG_CONNTRACK_IN_END = 65537,
+	IP_DEFRAG_CONNTRACK_OUT = 65538,
+	__IP_DEFRAG_CONNTRACK_OUT_END = 131073,
+	IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,
+	__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,
+	IP_DEFRAG_VS_IN = 196610,
+	IP_DEFRAG_VS_OUT = 196611,
+	IP_DEFRAG_VS_FWD = 196612,
+	IP_DEFRAG_AF_PACKET = 196613,
+	IP_DEFRAG_MACVLAN = 196614,
+};
+
+enum {
+	XFRM_DEV_OFFLOAD_UNSPECIFIED = 0,
+	XFRM_DEV_OFFLOAD_CRYPTO = 1,
+	XFRM_DEV_OFFLOAD_PACKET = 2,
+};
+
+enum {
+	INET_FRAG_FIRST_IN = 1,
+	INET_FRAG_LAST_IN = 2,
+	INET_FRAG_COMPLETE = 4,
+	INET_FRAG_HASH_DEAD = 8,
+	INET_FRAG_DROP = 16,
+};
+
+struct ipq {
+	struct inet_frag_queue q;
+	u8 ecn;
+	u16 max_df_size;
+	int iif;
+	unsigned int rid;
+	struct inet_peer *peer;
+};
+
+enum pkt_hash_types {
+	PKT_HASH_TYPE_NONE = 0,
+	PKT_HASH_TYPE_L2 = 1,
+	PKT_HASH_TYPE_L3 = 2,
+	PKT_HASH_TYPE_L4 = 3,
+};
+
+enum {
+	LWTUNNEL_XMIT_DONE = 0,
+	LWTUNNEL_XMIT_CONTINUE = 256,
+};
+
+struct ip_frag_state {
+	bool DF;
+	unsigned int hlen;
+	unsigned int ll_rs;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	__be16 not_last_frag;
+};
+
+struct ip_fraglist_iter {
+	struct sk_buff *frag;
+	struct iphdr *iph;
+	int offset;
+	unsigned int hlen;
+};
+
+struct ipcm_cookie {
+	struct sockcm_cookie sockc;
+	__be32 addr;
+	int oif;
+	struct ip_options_rcu *opt;
+	__u8 protocol;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+	u64 android_kabi_reserved1;
+};
+
+struct ip_reply_arg {
+	struct kvec iov[1];
+	int flags;
+	__wsum csum;
+	int csumoffset;
+	int bound_dev_if;
+	u8 tos;
+	kuid_t uid;
+};
+
+struct ip_options_data {
+	struct ip_options_rcu opt;
+	char data[40];
+};
+
+struct in_pktinfo {
+	int ipi_ifindex;
+	struct in_addr ipi_spec_dst;
+	struct in_addr ipi_addr;
+};
+
+struct ip_mreq_source {
+	__be32 imr_multiaddr;
+	__be32 imr_interface;
+	__be32 imr_sourceaddr;
+};
+
+struct ip_msfilter {
+	__be32 imsf_multiaddr;
+	__be32 imsf_interface;
+	__u32 imsf_fmode;
+	__u32 imsf_numsrc;
+	union {
+		__be32 imsf_slist[1];
+		struct {
+			struct {} __empty_imsf_slist_flex;
+			__be32 imsf_slist_flex[0];
+		};
+	};
+};
+
+struct group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+};
+
+struct compat_group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+} __attribute__((packed));
+
+struct group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		};
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		};
+	};
+};
+
+struct compat_group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+} __attribute__((packed));
+
+struct group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+};
+
+struct compat_group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		} __attribute__((packed));
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		} __attribute__((packed));
+	};
+};
+
+typedef u32 inet_ehashfn_t(const struct net *, const __be32, const __u16, const __be32, const __be16);
+
+struct tcpvegas_info {
+	__u32 tcpv_enabled;
+	__u32 tcpv_rttcnt;
+	__u32 tcpv_rtt;
+	__u32 tcpv_minrtt;
+};
+
+struct tcp_dctcp_info {
+	__u16 dctcp_enabled;
+	__u16 dctcp_ce_state;
+	__u32 dctcp_alpha;
+	__u32 dctcp_ab_ecn;
+	__u32 dctcp_ab_tot;
+};
+
+struct tcp_bbr_info {
+	__u32 bbr_bw_lo;
+	__u32 bbr_bw_hi;
+	__u32 bbr_min_rtt;
+	__u32 bbr_pacing_gain;
+	__u32 bbr_cwnd_gain;
+};
+
+union tcp_cc_info {
+	struct tcpvegas_info vegas;
+	struct tcp_dctcp_info dctcp;
+	struct tcp_bbr_info bbr;
+};
+
+enum tsq_enum {
+	TSQ_THROTTLED = 0,
+	TSQ_QUEUED = 1,
+	TCP_TSQ_DEFERRED = 2,
+	TCP_WRITE_TIMER_DEFERRED = 3,
+	TCP_DELACK_TIMER_DEFERRED = 4,
+	TCP_MTU_REDUCED_DEFERRED = 5,
+};
+
+enum tcp_chrono {
+	TCP_CHRONO_UNSPEC = 0,
+	TCP_CHRONO_BUSY = 1,
+	TCP_CHRONO_RWND_LIMITED = 2,
+	TCP_CHRONO_SNDBUF_LIMITED = 3,
+	__TCP_CHRONO_MAX = 4,
+};
+
+enum {
+	TCP_NO_QUEUE = 0,
+	TCP_RECV_QUEUE = 1,
+	TCP_SEND_QUEUE = 2,
+	TCP_QUEUES_NR = 3,
+};
+
+enum inet_csk_ack_state_t {
+	ICSK_ACK_SCHED = 1,
+	ICSK_ACK_TIMER = 2,
+	ICSK_ACK_PUSHED = 4,
+	ICSK_ACK_PUSHED2 = 8,
+	ICSK_ACK_NOW = 16,
+	ICSK_ACK_NOMEM = 32,
+};
+
+enum {
+	TCP_CMSG_INQ = 1,
+	TCP_CMSG_TS = 2,
+};
+
+enum {
+	BPF_TCP_ESTABLISHED = 1,
+	BPF_TCP_SYN_SENT = 2,
+	BPF_TCP_SYN_RECV = 3,
+	BPF_TCP_FIN_WAIT1 = 4,
+	BPF_TCP_FIN_WAIT2 = 5,
+	BPF_TCP_TIME_WAIT = 6,
+	BPF_TCP_CLOSE = 7,
+	BPF_TCP_CLOSE_WAIT = 8,
+	BPF_TCP_LAST_ACK = 9,
+	BPF_TCP_LISTEN = 10,
+	BPF_TCP_CLOSING = 11,
+	BPF_TCP_NEW_SYN_RECV = 12,
+	BPF_TCP_MAX_STATES = 13,
+};
+
+enum {
+	TCP_MIB_NUM = 0,
+	TCP_MIB_RTOALGORITHM = 1,
+	TCP_MIB_RTOMIN = 2,
+	TCP_MIB_RTOMAX = 3,
+	TCP_MIB_MAXCONN = 4,
+	TCP_MIB_ACTIVEOPENS = 5,
+	TCP_MIB_PASSIVEOPENS = 6,
+	TCP_MIB_ATTEMPTFAILS = 7,
+	TCP_MIB_ESTABRESETS = 8,
+	TCP_MIB_CURRESTAB = 9,
+	TCP_MIB_INSEGS = 10,
+	TCP_MIB_OUTSEGS = 11,
+	TCP_MIB_RETRANSSEGS = 12,
+	TCP_MIB_INERRS = 13,
+	TCP_MIB_OUTRSTS = 14,
+	TCP_MIB_CSUMERRORS = 15,
+	__TCP_MIB_MAX = 16,
+};
+
+enum {
+	TCP_NLA_PAD = 0,
+	TCP_NLA_BUSY = 1,
+	TCP_NLA_RWND_LIMITED = 2,
+	TCP_NLA_SNDBUF_LIMITED = 3,
+	TCP_NLA_DATA_SEGS_OUT = 4,
+	TCP_NLA_TOTAL_RETRANS = 5,
+	TCP_NLA_PACING_RATE = 6,
+	TCP_NLA_DELIVERY_RATE = 7,
+	TCP_NLA_SND_CWND = 8,
+	TCP_NLA_REORDERING = 9,
+	TCP_NLA_MIN_RTT = 10,
+	TCP_NLA_RECUR_RETRANS = 11,
+	TCP_NLA_DELIVERY_RATE_APP_LMT = 12,
+	TCP_NLA_SNDQ_SIZE = 13,
+	TCP_NLA_CA_STATE = 14,
+	TCP_NLA_SND_SSTHRESH = 15,
+	TCP_NLA_DELIVERED = 16,
+	TCP_NLA_DELIVERED_CE = 17,
+	TCP_NLA_BYTES_SENT = 18,
+	TCP_NLA_BYTES_RETRANS = 19,
+	TCP_NLA_DSACK_DUPS = 20,
+	TCP_NLA_REORD_SEEN = 21,
+	TCP_NLA_SRTT = 22,
+	TCP_NLA_TIMEOUT_REHASH = 23,
+	TCP_NLA_BYTES_NOTSENT = 24,
+	TCP_NLA_EDT = 25,
+	TCP_NLA_TTL = 26,
+	TCP_NLA_REHASH = 27,
+};
+
+struct tcp_skb_cb {
+	__u32 seq;
+	__u32 end_seq;
+	union {
+		__u32 tcp_tw_isn;
+		struct {
+			u16 tcp_gso_segs;
+			u16 tcp_gso_size;
+		};
+	};
+	__u8 tcp_flags;
+	__u8 sacked;
+	__u8 ip_dsfield;
+	__u8 txstamp_ack: 1;
+	__u8 eor: 1;
+	__u8 has_rxtstamp: 1;
+	__u8 unused: 5;
+	__u32 ack_seq;
+	union {
+		struct {
+			__u32 is_app_limited: 1;
+			__u32 delivered_ce: 20;
+			__u32 unused: 11;
+			__u32 delivered;
+			u64 first_tx_mstamp;
+			u64 delivered_mstamp;
+		} tx;
+		union {
+			struct inet_skb_parm h4;
+			struct inet6_skb_parm h6;
+		} header;
+	};
+};
+
+struct tcp_splice_state {
+	struct pipe_inode_info *pipe;
+	size_t len;
+	unsigned int flags;
+};
+
+struct tcp_info {
+	__u8 tcpi_state;
+	__u8 tcpi_ca_state;
+	__u8 tcpi_retransmits;
+	__u8 tcpi_probes;
+	__u8 tcpi_backoff;
+	__u8 tcpi_options;
+	__u8 tcpi_snd_wscale: 4;
+	__u8 tcpi_rcv_wscale: 4;
+	__u8 tcpi_delivery_rate_app_limited: 1;
+	__u8 tcpi_fastopen_client_fail: 2;
+	__u32 tcpi_rto;
+	__u32 tcpi_ato;
+	__u32 tcpi_snd_mss;
+	__u32 tcpi_rcv_mss;
+	__u32 tcpi_unacked;
+	__u32 tcpi_sacked;
+	__u32 tcpi_lost;
+	__u32 tcpi_retrans;
+	__u32 tcpi_fackets;
+	__u32 tcpi_last_data_sent;
+	__u32 tcpi_last_ack_sent;
+	__u32 tcpi_last_data_recv;
+	__u32 tcpi_last_ack_recv;
+	__u32 tcpi_pmtu;
+	__u32 tcpi_rcv_ssthresh;
+	__u32 tcpi_rtt;
+	__u32 tcpi_rttvar;
+	__u32 tcpi_snd_ssthresh;
+	__u32 tcpi_snd_cwnd;
+	__u32 tcpi_advmss;
+	__u32 tcpi_reordering;
+	__u32 tcpi_rcv_rtt;
+	__u32 tcpi_rcv_space;
+	__u32 tcpi_total_retrans;
+	__u64 tcpi_pacing_rate;
+	__u64 tcpi_max_pacing_rate;
+	__u64 tcpi_bytes_acked;
+	__u64 tcpi_bytes_received;
+	__u32 tcpi_segs_out;
+	__u32 tcpi_segs_in;
+	__u32 tcpi_notsent_bytes;
+	__u32 tcpi_min_rtt;
+	__u32 tcpi_data_segs_in;
+	__u32 tcpi_data_segs_out;
+	__u64 tcpi_delivery_rate;
+	__u64 tcpi_busy_time;
+	__u64 tcpi_rwnd_limited;
+	__u64 tcpi_sndbuf_limited;
+	__u32 tcpi_delivered;
+	__u32 tcpi_delivered_ce;
+	__u64 tcpi_bytes_sent;
+	__u64 tcpi_bytes_retrans;
+	__u32 tcpi_dsack_dups;
+	__u32 tcpi_reord_seen;
+	__u32 tcpi_rcv_ooopack;
+	__u32 tcpi_snd_wnd;
+	__u32 tcpi_rcv_wnd;
+	__u32 tcpi_rehash;
+};
+
+struct tcp_zerocopy_receive {
+	__u64 address;
+	__u32 length;
+	__u32 recv_skip_hint;
+	__u32 inq;
+	__s32 err;
+	__u64 copybuf_address;
+	__s32 copybuf_len;
+	__u32 flags;
+	__u64 msg_control;
+	__u64 msg_controllen;
+	__u32 msg_flags;
+	__u32 reserved;
+};
+
+struct tcp_repair_opt {
+	__u32 opt_code;
+	__u32 opt_val;
+};
+
+struct tcp_repair_window {
+	__u32 snd_wl1;
+	__u32 snd_wnd;
+	__u32 max_window;
+	__u32 rcv_wnd;
+	__u32 rcv_wup;
+};
+
+enum tcp_ca_ack_event_flags {
+	CA_ACK_SLOWPATH = 1,
+	CA_ACK_WIN_UPDATE = 2,
+	CA_ACK_ECE = 4,
+};
+
+enum tcp_queue {
+	TCP_FRAG_IN_WRITE_QUEUE = 0,
+	TCP_FRAG_IN_RTX_QUEUE = 1,
+};
+
+enum tcp_fastopen_client_fail {
+	TFO_STATUS_UNSPEC = 0,
+	TFO_COOKIE_UNAVAILABLE = 1,
+	TFO_DATA_NOT_ACKED = 2,
+	TFO_SYN_RETRANSMITTED = 3,
+};
+
+struct tcp_sacktag_state {
+	u64 first_sackt;
+	u64 last_sackt;
+	u32 reord;
+	u32 sack_delivered;
+	int flag;
+	unsigned int mss_now;
+	struct rate_sample *rate;
+};
+
+struct tsq_tasklet {
+	struct tasklet_struct tasklet;
+	struct list_head head;
+};
+
+enum tsq_flags {
+	TSQF_THROTTLED = 1,
+	TSQF_QUEUED = 2,
+	TCPF_TSQ_DEFERRED = 4,
+	TCPF_WRITE_TIMER_DEFERRED = 8,
+	TCPF_DELACK_TIMER_DEFERRED = 16,
+	TCPF_MTU_REDUCED_DEFERRED = 32,
+};
+
+enum {
+	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
+	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
+};
+
+struct mptcp_out_options {};
+
+struct tcp_out_options {
+	u16 options;
+	u16 mss;
+	u8 ws;
+	u8 num_sack_blocks;
+	u8 hash_size;
+	u8 bpf_opt_len;
+	__u8 *hash_location;
+	__u32 tsval;
+	__u32 tsecr;
+	struct tcp_fastopen_cookie *fastopen_cookie;
+	struct mptcp_out_options mptcp;
+};
+
+union tcp_md5_addr {
+	struct in_addr a4;
+	struct in6_addr a6;
+};
+
+struct tcp_md5sig_key {
+	struct hlist_node node;
+	u8 keylen;
+	u8 family;
+	u8 prefixlen;
+	u8 flags;
+	union tcp_md5_addr addr;
+	int l3index;
+	u8 key[80];
+	struct callback_head rcu;
+};
+
+struct tcp_seq_afinfo {
+	sa_family_t family;
+};
+
+enum {
+	ICMP_MIB_NUM = 0,
+	ICMP_MIB_INMSGS = 1,
+	ICMP_MIB_INERRORS = 2,
+	ICMP_MIB_INDESTUNREACHS = 3,
+	ICMP_MIB_INTIMEEXCDS = 4,
+	ICMP_MIB_INPARMPROBS = 5,
+	ICMP_MIB_INSRCQUENCHS = 6,
+	ICMP_MIB_INREDIRECTS = 7,
+	ICMP_MIB_INECHOS = 8,
+	ICMP_MIB_INECHOREPS = 9,
+	ICMP_MIB_INTIMESTAMPS = 10,
+	ICMP_MIB_INTIMESTAMPREPS = 11,
+	ICMP_MIB_INADDRMASKS = 12,
+	ICMP_MIB_INADDRMASKREPS = 13,
+	ICMP_MIB_OUTMSGS = 14,
+	ICMP_MIB_OUTERRORS = 15,
+	ICMP_MIB_OUTDESTUNREACHS = 16,
+	ICMP_MIB_OUTTIMEEXCDS = 17,
+	ICMP_MIB_OUTPARMPROBS = 18,
+	ICMP_MIB_OUTSRCQUENCHS = 19,
+	ICMP_MIB_OUTREDIRECTS = 20,
+	ICMP_MIB_OUTECHOS = 21,
+	ICMP_MIB_OUTECHOREPS = 22,
+	ICMP_MIB_OUTTIMESTAMPS = 23,
+	ICMP_MIB_OUTTIMESTAMPREPS = 24,
+	ICMP_MIB_OUTADDRMASKS = 25,
+	ICMP_MIB_OUTADDRMASKREPS = 26,
+	ICMP_MIB_CSUMERRORS = 27,
+	ICMP_MIB_RATELIMITGLOBAL = 28,
+	ICMP_MIB_RATELIMITHOST = 29,
+	__ICMP_MIB_MAX = 30,
+};
+
+enum tcp_tw_status {
+	TCP_TW_SUCCESS = 0,
+	TCP_TW_RST = 1,
+	TCP_TW_ACK = 2,
+	TCP_TW_SYN = 3,
+};
+
+enum tcp_seq_states {
+	TCP_SEQ_STATE_LISTENING = 0,
+	TCP_SEQ_STATE_ESTABLISHED = 1,
+};
+
+struct tcp_iter_state {
+	struct seq_net_private p;
+	enum tcp_seq_states state;
+	struct sock *syn_wait_sk;
+	int bucket;
+	int offset;
+	int sbucket;
+	int num;
+	loff_t last_pos;
+};
+
+struct bpf_iter__tcp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct sock_common *sk_common;
+	};
+	uid_t uid;
+};
+
+struct bpf_tcp_iter_state {
+	struct tcp_iter_state state;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct tcp_metrics_block;
+
+struct tcpm_hash_bucket {
+	struct tcp_metrics_block __attribute__((btf_type_tag("rcu"))) *chain;
+};
+
+struct tcp_fastopen_metrics {
+	u16 mss;
+	u16 syn_loss: 10;
+	u16 try_exp: 2;
+	unsigned long last_syn_loss;
+	struct tcp_fastopen_cookie cookie;
+};
+
+struct tcp_metrics_block {
+	struct tcp_metrics_block __attribute__((btf_type_tag("rcu"))) *tcpm_next;
+	struct net *tcpm_net;
+	struct inetpeer_addr tcpm_saddr;
+	struct inetpeer_addr tcpm_daddr;
+	unsigned long tcpm_stamp;
+	u32 tcpm_lock;
+	u32 tcpm_vals[5];
+	struct tcp_fastopen_metrics tcpm_fastopen;
+	struct callback_head callback_head;
+};
+
+enum tcp_metric_index {
+	TCP_METRIC_RTT = 0,
+	TCP_METRIC_RTTVAR = 1,
+	TCP_METRIC_SSTHRESH = 2,
+	TCP_METRIC_CWND = 3,
+	TCP_METRIC_REORDERING = 4,
+	TCP_METRIC_RTT_US = 5,
+	TCP_METRIC_RTTVAR_US = 6,
+	__TCP_METRIC_MAX = 7,
+};
+
+enum {
+	TCP_METRICS_ATTR_UNSPEC = 0,
+	TCP_METRICS_ATTR_ADDR_IPV4 = 1,
+	TCP_METRICS_ATTR_ADDR_IPV6 = 2,
+	TCP_METRICS_ATTR_AGE = 3,
+	TCP_METRICS_ATTR_TW_TSVAL = 4,
+	TCP_METRICS_ATTR_TW_TS_STAMP = 5,
+	TCP_METRICS_ATTR_VALS = 6,
+	TCP_METRICS_ATTR_FOPEN_MSS = 7,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,
+	TCP_METRICS_ATTR_FOPEN_COOKIE = 10,
+	TCP_METRICS_ATTR_SADDR_IPV4 = 11,
+	TCP_METRICS_ATTR_SADDR_IPV6 = 12,
+	TCP_METRICS_ATTR_PAD = 13,
+	__TCP_METRICS_ATTR_MAX = 14,
+};
+
+enum {
+	TCP_METRICS_CMD_UNSPEC = 0,
+	TCP_METRICS_CMD_GET = 1,
+	TCP_METRICS_CMD_DEL = 2,
+	__TCP_METRICS_CMD_MAX = 3,
+};
+
+struct tcp_plb_state {
+	u8 consec_cong_rounds: 5;
+	u8 unused: 3;
+	u32 pause_until;
+};
+
+struct icmp_filter {
+	__u32 data;
+};
+
+struct raw_sock {
+	struct inet_sock inet;
+	struct icmp_filter filter;
+	u32 ipmr_table;
+};
+
+struct raw_frag_vec {
+	struct msghdr *msg;
+	union {
+		struct icmphdr icmph;
+		char c[1];
+	} hdr;
+	int hlen;
+};
+
+struct raw_iter_state {
+	struct seq_net_private p;
+	int bucket;
+};
+
+struct udp_seq_afinfo {
+	sa_family_t family;
+	struct udp_table *udp_table;
+};
+
+enum {
+	UDP_FLAGS_CORK = 0,
+	UDP_FLAGS_NO_CHECK6_TX = 1,
+	UDP_FLAGS_NO_CHECK6_RX = 2,
+	UDP_FLAGS_GRO_ENABLED = 3,
+	UDP_FLAGS_ACCEPT_FRAGLIST = 4,
+	UDP_FLAGS_ACCEPT_L4 = 5,
+	UDP_FLAGS_ENCAP_ENABLED = 6,
+	UDP_FLAGS_UDPLITE_SEND_CC = 7,
+	UDP_FLAGS_UDPLITE_RECV_CC = 8,
+};
+
+enum {
+	UDP_MIB_NUM = 0,
+	UDP_MIB_INDATAGRAMS = 1,
+	UDP_MIB_NOPORTS = 2,
+	UDP_MIB_INERRORS = 3,
+	UDP_MIB_OUTDATAGRAMS = 4,
+	UDP_MIB_RCVBUFERRORS = 5,
+	UDP_MIB_SNDBUFERRORS = 6,
+	UDP_MIB_CSUMERRORS = 7,
+	UDP_MIB_IGNOREDMULTI = 8,
+	UDP_MIB_MEMERRORS = 9,
+	__UDP_MIB_MAX = 10,
+};
+
+struct udp_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	__u16 cscov;
+	__u8 partial_cov;
+};
+
+struct ip_tunnel_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);
+	int (*err_handler)(struct sk_buff *, u32);
+};
+
+struct udp_dev_scratch {
+	u32 _tsize_state;
+	u16 len;
+	bool is_linear;
+	bool csum_unnecessary;
+};
+
+struct bpf_iter__udp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct udp_sock *udp_sk;
+	};
+	uid_t uid;
+	long: 0;
+	int bucket;
+};
+
+struct udp_iter_state {
+	struct seq_net_private p;
+	int bucket;
+};
+
+struct bpf_udp_iter_state {
+	struct udp_iter_state state;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	int offset;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct inet_protosw {
+	struct list_head list;
+	unsigned short type;
+	unsigned short protocol;
+	struct proto *prot;
+	const struct proto_ops *ops;
+	unsigned char flags;
+};
+
+typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
+
+typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
+
+typedef struct sock * (*udp_lookup_t)(const struct sk_buff *, __be16, __be16);
+
+struct arpreq {
+	struct sockaddr arp_pa;
+	struct sockaddr arp_ha;
+	int arp_flags;
+	struct sockaddr arp_netmask;
+	char arp_dev[16];
+};
+
+struct icmp_err {
+	int errno;
+	unsigned int fatal: 1;
+};
+
+struct icmp_control {
+	enum skb_drop_reason (*handler)(struct sk_buff *);
+	short error;
+};
+
+enum {
+	XFRM_LOOKUP_ICMP = 1,
+	XFRM_LOOKUP_QUEUE = 2,
+	XFRM_LOOKUP_KEEP_DST_REF = 4,
+};
+
+struct icmp_bxm {
+	struct sk_buff *skb;
+	int offset;
+	int data_len;
+	struct {
+		struct icmphdr icmph;
+		__be32 times[3];
+	} data;
+	int head_len;
+	struct ip_options_data replyopts;
+};
+
+struct icmp_extobj_hdr {
+	__be16 length;
+	__u8 class_num;
+	__u8 class_type;
+};
+
+struct icmp_ext_hdr {
+	__u8 reserved1: 4;
+	__u8 version: 4;
+	__u8 reserved2;
+	__sum16 checksum;
+};
+
+struct icmp_ext_echo_ctype3_hdr {
+	__be16 afi;
+	__u8 addrlen;
+	__u8 reserved;
+};
+
+struct icmp_ext_echo_iio {
+	struct icmp_extobj_hdr extobj_hdr;
+	union {
+		char name[16];
+		__be32 ifindex;
+		struct {
+			struct icmp_ext_echo_ctype3_hdr ctype3_hdr;
+			union {
+				__be32 ipv4_addr;
+				struct in6_addr ipv6_addr;
+			} ip_addr;
+		} addr;
+	} ident;
+};
+
+struct devinet_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table devinet_vars[34];
+};
+
+enum {
+	IFA_UNSPEC = 0,
+	IFA_ADDRESS = 1,
+	IFA_LOCAL = 2,
+	IFA_LABEL = 3,
+	IFA_BROADCAST = 4,
+	IFA_ANYCAST = 5,
+	IFA_CACHEINFO = 6,
+	IFA_MULTICAST = 7,
+	IFA_FLAGS = 8,
+	IFA_RT_PRIORITY = 9,
+	IFA_TARGET_NETNSID = 10,
+	IFA_PROTO = 11,
+	__IFA_MAX = 12,
+};
+
+enum {
+	NETCONFA_UNSPEC = 0,
+	NETCONFA_IFINDEX = 1,
+	NETCONFA_FORWARDING = 2,
+	NETCONFA_RP_FILTER = 3,
+	NETCONFA_MC_FORWARDING = 4,
+	NETCONFA_PROXY_NEIGH = 5,
+	NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,
+	NETCONFA_INPUT = 7,
+	NETCONFA_BC_FORWARDING = 8,
+	__NETCONFA_MAX = 9,
+};
+
+enum {
+	IFLA_INET_UNSPEC = 0,
+	IFLA_INET_CONF = 1,
+	__IFLA_INET_MAX = 2,
+};
+
+struct ifaddrmsg {
+	__u8 ifa_family;
+	__u8 ifa_prefixlen;
+	__u8 ifa_flags;
+	__u8 ifa_scope;
+	__u32 ifa_index;
+};
+
+struct ifa_cacheinfo {
+	__u32 ifa_prefered;
+	__u32 ifa_valid;
+	__u32 cstamp;
+	__u32 tstamp;
+};
+
+struct inet_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+};
+
+struct netconfmsg {
+	__u8 ncm_family;
+};
+
+struct in_validator_info {
+	__be32 ivi_addr;
+	struct in_device *ivi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct rtentry {
+	unsigned long rt_pad1;
+	struct sockaddr rt_dst;
+	struct sockaddr rt_gateway;
+	struct sockaddr rt_genmask;
+	unsigned short rt_flags;
+	short rt_pad2;
+	unsigned long rt_pad3;
+	void *rt_pad4;
+	short rt_metric;
+	char __attribute__((btf_type_tag("user"))) *rt_dev;
+	unsigned long rt_mtu;
+	unsigned long rt_window;
+	unsigned short rt_irtt;
+};
+
+struct compat_rtentry {
+	u32 rt_pad1;
+	struct sockaddr rt_dst;
+	struct sockaddr rt_gateway;
+	struct sockaddr rt_genmask;
+	unsigned short rt_flags;
+	short rt_pad2;
+	u32 rt_pad3;
+	unsigned char rt_tos;
+	unsigned char rt_class;
+	short rt_pad4;
+	short rt_metric;
+	compat_uptr_t rt_dev;
+	u32 rt_mtu;
+	u32 rt_window;
+	unsigned short rt_irtt;
+};
+
+struct igmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+};
+
+struct igmpv3_query {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+	__u8 qrv: 3;
+	__u8 suppress: 1;
+	__u8 resv: 4;
+	__u8 qqic;
+	__be16 nsrcs;
+	__be32 srcs[0];
+};
+
+struct igmpv3_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	__be32 grec_mca;
+	__be32 grec_src[0];
+};
+
+struct igmpv3_report {
+	__u8 type;
+	__u8 resv1;
+	__sum16 csum;
+	__be16 resv2;
+	__be16 ngrec;
+	struct igmpv3_grec grec[0];
+};
+
+struct igmp_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *in_dev;
+};
+
+struct igmp_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *idev;
+	struct ip_mc_list *im;
+};
+
+struct nl_info {
+	struct nlmsghdr *nlh;
+	struct net *nl_net;
+	u32 portid;
+	u8 skip_notify: 1;
+	u8 skip_notify_kernel: 1;
+};
+
+struct rtnexthop;
+
+struct fib_config {
+	u8 fc_dst_len;
+	dscp_t fc_dscp;
+	u8 fc_protocol;
+	u8 fc_scope;
+	u8 fc_type;
+	u8 fc_gw_family;
+	u32 fc_table;
+	__be32 fc_dst;
+	union {
+		__be32 fc_gw4;
+		struct in6_addr fc_gw6;
+	};
+	int fc_oif;
+	u32 fc_flags;
+	u32 fc_priority;
+	__be32 fc_prefsrc;
+	u32 fc_nh_id;
+	struct nlattr *fc_mx;
+	struct rtnexthop *fc_mp;
+	int fc_mx_len;
+	int fc_mp_len;
+	u32 fc_flow;
+	u32 fc_nlflags;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+};
+
+struct rtnexthop {
+	unsigned short rtnh_len;
+	unsigned char rtnh_flags;
+	unsigned char rtnh_hops;
+	int rtnh_ifindex;
+};
+
+struct fib_dump_filter {
+	u32 table_id;
+	bool filter_set;
+	bool dump_routes;
+	bool dump_exceptions;
+	unsigned char protocol;
+	unsigned char rt_type;
+	unsigned int flags;
+	struct net_device *dev;
+};
+
+struct fib_result_nl {
+	__be32 fl_addr;
+	u32 fl_mark;
+	unsigned char fl_tos;
+	unsigned char fl_scope;
+	unsigned char tb_id_in;
+	unsigned char tb_id;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	int err;
+};
+
+struct fib_prop {
+	int error;
+	u8 scope;
+};
+
+struct fib6_config {
+	u32 fc_table;
+	u32 fc_metric;
+	int fc_dst_len;
+	int fc_src_len;
+	int fc_ifindex;
+	u32 fc_flags;
+	u32 fc_protocol;
+	u16 fc_type;
+	u16 fc_delete_all_nh: 1;
+	u16 fc_ignore_dev_down: 1;
+	u16 __unused: 14;
+	u32 fc_nh_id;
+	struct in6_addr fc_dst;
+	struct in6_addr fc_src;
+	struct in6_addr fc_prefsrc;
+	struct in6_addr fc_gateway;
+	unsigned long fc_expires;
+	struct nlattr *fc_mx;
+	int fc_mx_len;
+	int fc_mp_len;
+	struct nlattr *fc_mp;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+	bool fc_is_fdb;
+	u64 android_kabi_reserved1;
+};
+
+struct fib_nh_notifier_info {
+	struct fib_notifier_info info;
+	struct fib_nh *fib_nh;
+};
+
+typedef unsigned int t_key;
+
+struct key_vector {
+	t_key key;
+	unsigned char pos;
+	unsigned char bits;
+	unsigned char slen;
+	union {
+		struct hlist_head leaf;
+		struct {
+			struct {} __empty_tnode;
+			struct key_vector __attribute__((btf_type_tag("rcu"))) *tnode[0];
+		};
+	};
+};
+
+struct trie {
+	struct key_vector kv[1];
+};
+
+struct tnode {
+	struct callback_head rcu;
+	t_key empty_children;
+	t_key full_children;
+	struct key_vector __attribute__((btf_type_tag("rcu"))) *parent;
+	struct key_vector kv[1];
+};
+
+struct fib_entry_notifier_info {
+	struct fib_notifier_info info;
+	u32 dst;
+	int dst_len;
+	struct fib_info *fi;
+	dscp_t dscp;
+	u8 type;
+	u32 tb_id;
+};
+
+struct trie_stat {
+	unsigned int totdepth;
+	unsigned int maxdepth;
+	unsigned int tnodes;
+	unsigned int leaves;
+	unsigned int nullpointers;
+	unsigned int prefixes;
+	unsigned int nodesizes[32];
+};
+
+struct fib_trie_iter {
+	struct seq_net_private p;
+	struct fib_table *tb;
+	struct key_vector *tnode;
+	unsigned int index;
+	unsigned int depth;
+};
+
+struct fib_route_iter {
+	struct seq_net_private p;
+	struct fib_table *main_tb;
+	struct key_vector *tnode;
+	loff_t pos;
+	t_key key;
+};
+
+struct ipfrag_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	};
+	struct sk_buff *next_frag;
+	int frag_run_len;
+	int ip_defrag_offset;
+};
+
+struct ping_table {
+	struct hlist_head hash[64];
+	spinlock_t lock;
+};
+
+struct pingv6_ops {
+	int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);
+	void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	int (*icmpv6_err_convert)(u8, u8, int *);
+	void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+	int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);
+};
+
+struct ping_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	sa_family_t family;
+};
+
+struct pingfakehdr {
+	struct icmphdr icmph;
+	struct msghdr *msg;
+	sa_family_t family;
+	__wsum wcheck;
+};
+
+struct ip6_tnl_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+};
+
+struct lwtunnel_encap_ops {
+	int (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);
+	void (*destroy_state)(struct lwtunnel_state *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*input)(struct sk_buff *);
+	int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);
+	int (*get_encap_size)(struct lwtunnel_state *);
+	int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);
+	int (*xmit)(struct sk_buff *);
+	struct module *owner;
+};
+
+enum {
+	IFLA_IPTUN_UNSPEC = 0,
+	IFLA_IPTUN_LINK = 1,
+	IFLA_IPTUN_LOCAL = 2,
+	IFLA_IPTUN_REMOTE = 3,
+	IFLA_IPTUN_TTL = 4,
+	IFLA_IPTUN_TOS = 5,
+	IFLA_IPTUN_ENCAP_LIMIT = 6,
+	IFLA_IPTUN_FLOWINFO = 7,
+	IFLA_IPTUN_FLAGS = 8,
+	IFLA_IPTUN_PROTO = 9,
+	IFLA_IPTUN_PMTUDISC = 10,
+	IFLA_IPTUN_6RD_PREFIX = 11,
+	IFLA_IPTUN_6RD_RELAY_PREFIX = 12,
+	IFLA_IPTUN_6RD_PREFIXLEN = 13,
+	IFLA_IPTUN_6RD_RELAY_PREFIXLEN = 14,
+	IFLA_IPTUN_ENCAP_TYPE = 15,
+	IFLA_IPTUN_ENCAP_FLAGS = 16,
+	IFLA_IPTUN_ENCAP_SPORT = 17,
+	IFLA_IPTUN_ENCAP_DPORT = 18,
+	IFLA_IPTUN_COLLECT_METADATA = 19,
+	IFLA_IPTUN_FWMARK = 20,
+	__IFLA_IPTUN_MAX = 21,
+};
+
+enum lwtunnel_ip_t {
+	LWTUNNEL_IP_UNSPEC = 0,
+	LWTUNNEL_IP_ID = 1,
+	LWTUNNEL_IP_DST = 2,
+	LWTUNNEL_IP_SRC = 3,
+	LWTUNNEL_IP_TTL = 4,
+	LWTUNNEL_IP_TOS = 5,
+	LWTUNNEL_IP_FLAGS = 6,
+	LWTUNNEL_IP_PAD = 7,
+	LWTUNNEL_IP_OPTS = 8,
+	__LWTUNNEL_IP_MAX = 9,
+};
+
+enum {
+	LWTUNNEL_IP_OPTS_UNSPEC = 0,
+	LWTUNNEL_IP_OPTS_GENEVE = 1,
+	LWTUNNEL_IP_OPTS_VXLAN = 2,
+	LWTUNNEL_IP_OPTS_ERSPAN = 3,
+	__LWTUNNEL_IP_OPTS_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_GENEVE_CLASS = 1,
+	LWTUNNEL_IP_OPT_GENEVE_TYPE = 2,
+	LWTUNNEL_IP_OPT_GENEVE_DATA = 3,
+	__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_VXLAN_GBP = 1,
+	__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_ERSPAN_VER = 1,
+	LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,
+	LWTUNNEL_IP_OPT_ERSPAN_DIR = 3,
+	LWTUNNEL_IP_OPT_ERSPAN_HWID = 4,
+	__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,
+};
+
+enum lwtunnel_ip6_t {
+	LWTUNNEL_IP6_UNSPEC = 0,
+	LWTUNNEL_IP6_ID = 1,
+	LWTUNNEL_IP6_DST = 2,
+	LWTUNNEL_IP6_SRC = 3,
+	LWTUNNEL_IP6_HOPLIMIT = 4,
+	LWTUNNEL_IP6_TC = 5,
+	LWTUNNEL_IP6_FLAGS = 6,
+	LWTUNNEL_IP6_PAD = 7,
+	LWTUNNEL_IP6_OPTS = 8,
+	__LWTUNNEL_IP6_MAX = 9,
+};
+
+enum nexthop_event_type {
+	NEXTHOP_EVENT_DEL = 0,
+	NEXTHOP_EVENT_REPLACE = 1,
+	NEXTHOP_EVENT_RES_TABLE_PRE_REPLACE = 2,
+	NEXTHOP_EVENT_BUCKET_REPLACE = 3,
+};
+
+enum nh_notifier_info_type {
+	NH_NOTIFIER_INFO_TYPE_SINGLE = 0,
+	NH_NOTIFIER_INFO_TYPE_GRP = 1,
+	NH_NOTIFIER_INFO_TYPE_RES_TABLE = 2,
+	NH_NOTIFIER_INFO_TYPE_RES_BUCKET = 3,
+};
+
+enum {
+	NHA_UNSPEC = 0,
+	NHA_ID = 1,
+	NHA_GROUP = 2,
+	NHA_GROUP_TYPE = 3,
+	NHA_BLACKHOLE = 4,
+	NHA_OIF = 5,
+	NHA_GATEWAY = 6,
+	NHA_ENCAP_TYPE = 7,
+	NHA_ENCAP = 8,
+	NHA_GROUPS = 9,
+	NHA_MASTER = 10,
+	NHA_FDB = 11,
+	NHA_RES_GROUP = 12,
+	NHA_RES_BUCKET = 13,
+	__NHA_MAX = 14,
+};
+
+enum {
+	NEXTHOP_GRP_TYPE_MPATH = 0,
+	NEXTHOP_GRP_TYPE_RES = 1,
+	__NEXTHOP_GRP_TYPE_MAX = 2,
+};
+
+enum {
+	NHA_RES_GROUP_UNSPEC = 0,
+	NHA_RES_GROUP_PAD = 0,
+	NHA_RES_GROUP_BUCKETS = 1,
+	NHA_RES_GROUP_IDLE_TIMER = 2,
+	NHA_RES_GROUP_UNBALANCED_TIMER = 3,
+	NHA_RES_GROUP_UNBALANCED_TIME = 4,
+	__NHA_RES_GROUP_MAX = 5,
+};
+
+enum {
+	NHA_RES_BUCKET_UNSPEC = 0,
+	NHA_RES_BUCKET_PAD = 0,
+	NHA_RES_BUCKET_INDEX = 1,
+	NHA_RES_BUCKET_IDLE_TIME = 2,
+	NHA_RES_BUCKET_NH_ID = 3,
+	__NHA_RES_BUCKET_MAX = 4,
+};
+
+struct nh_notifier_single_info;
+
+struct nh_notifier_grp_info;
+
+struct nh_notifier_res_table_info;
+
+struct nh_notifier_res_bucket_info;
+
+struct nh_notifier_info {
+	struct net *net;
+	struct netlink_ext_ack *extack;
+	u32 id;
+	enum nh_notifier_info_type type;
+	union {
+		struct nh_notifier_single_info *nh;
+		struct nh_notifier_grp_info *nh_grp;
+		struct nh_notifier_res_table_info *nh_res_table;
+		struct nh_notifier_res_bucket_info *nh_res_bucket;
+	};
+};
+
+struct nh_notifier_single_info {
+	struct net_device *dev;
+	u8 gw_family;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	};
+	u8 is_reject: 1;
+	u8 is_fdb: 1;
+	u8 has_encap: 1;
+};
+
+struct nh_notifier_grp_entry_info {
+	u8 weight;
+	u32 id;
+	struct nh_notifier_single_info nh;
+};
+
+struct nh_notifier_grp_info {
+	u16 num_nh;
+	bool is_fdb;
+	struct nh_notifier_grp_entry_info nh_entries[0];
+};
+
+struct nh_notifier_res_table_info {
+	u16 num_nh_buckets;
+	struct nh_notifier_single_info nhs[0];
+};
+
+struct nh_notifier_res_bucket_info {
+	u16 bucket_index;
+	unsigned int idle_timer_ms;
+	bool force;
+	struct nh_notifier_single_info old_nh;
+	struct nh_notifier_single_info new_nh;
+};
+
+struct nh_config {
+	u32 nh_id;
+	u8 nh_family;
+	u8 nh_protocol;
+	u8 nh_blackhole;
+	u8 nh_fdb;
+	u32 nh_flags;
+	int nh_ifindex;
+	struct net_device *dev;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} gw;
+	struct nlattr *nh_grp;
+	u16 nh_grp_type;
+	u16 nh_grp_res_num_buckets;
+	unsigned long nh_grp_res_idle_timer;
+	unsigned long nh_grp_res_unbalanced_timer;
+	bool nh_grp_res_has_num_buckets;
+	bool nh_grp_res_has_idle_timer;
+	bool nh_grp_res_has_unbalanced_timer;
+	struct nlattr *nh_encap;
+	u16 nh_encap_type;
+	u32 nlflags;
+	struct nl_info nlinfo;
+};
+
+struct nhmsg {
+	unsigned char nh_family;
+	unsigned char nh_scope;
+	unsigned char nh_protocol;
+	unsigned char resvd;
+	unsigned int nh_flags;
+};
+
+struct nexthop_grp {
+	__u32 id;
+	__u8 weight;
+	__u8 resvd1;
+	__u16 resvd2;
+};
+
+struct nh_dump_filter {
+	u32 nh_id;
+	int dev_idx;
+	int master_idx;
+	bool group_filter;
+	bool fdb_filter;
+	u32 res_bucket_nh_id;
+};
+
+struct rtm_dump_nh_ctx {
+	u32 idx;
+};
+
+struct rtm_dump_res_bucket_ctx {
+	struct rtm_dump_nh_ctx nh;
+	u16 bucket_index;
+};
+
+struct rtm_dump_nexthop_bucket_data {
+	struct rtm_dump_res_bucket_ctx *ctx;
+	struct nh_dump_filter filter;
+};
+
+struct udp_tunnel_nic_ops {
+	void (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	void (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8);
+	void (*add_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*del_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*reset_ntf)(struct net_device *);
+	size_t (*dump_size)(struct net_device *, unsigned int);
+	int (*dump_write)(struct net_device *, unsigned int, struct sk_buff *);
+};
+
+enum tunnel_encap_types {
+	TUNNEL_ENCAP_NONE = 0,
+	TUNNEL_ENCAP_FOU = 1,
+	TUNNEL_ENCAP_GUE = 2,
+	TUNNEL_ENCAP_MPLS = 3,
+};
+
+struct ip_tunnel_prl_entry;
+
+struct ip_tunnel {
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *next;
+	struct hlist_node hash_node;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	unsigned long err_time;
+	int err_count;
+	u32 i_seqno;
+	atomic_t o_seqno;
+	int tun_hlen;
+	u32 index;
+	u8 erspan_ver;
+	u8 dir;
+	u16 hwid;
+	struct dst_cache dst_cache;
+	struct ip_tunnel_parm parms;
+	int mlink;
+	int encap_hlen;
+	int hlen;
+	struct ip_tunnel_encap encap;
+	struct ip_tunnel_prl_entry __attribute__((btf_type_tag("rcu"))) *prl;
+	unsigned int prl_count;
+	unsigned int ip_tnl_net_id;
+	struct gro_cells gro_cells;
+	__u32 fwmark;
+	bool collect_md;
+	bool ignore_df;
+};
+
+struct ip_tunnel_prl_entry {
+	struct ip_tunnel_prl_entry __attribute__((btf_type_tag("rcu"))) *next;
+	__be32 addr;
+	u16 flags;
+	struct callback_head callback_head;
+};
+
+struct ip_tunnel_net {
+	struct net_device *fb_tunnel_dev;
+	struct rtnl_link_ops *rtnl_link_ops;
+	struct hlist_head tunnels[128];
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *collect_md_tun;
+	int type;
+};
+
+struct tnl_ptk_info {
+	__be16 flags;
+	__be16 proto;
+	__be32 key;
+	__be32 seq;
+	int hdr_len;
+};
+
+struct snmp_mib {
+	const char *name;
+	int entry;
+};
+
+struct fib4_rule {
+	struct fib_rule common;
+	u8 dst_len;
+	u8 src_len;
+	dscp_t dscp;
+	__be32 src;
+	__be32 srcmask;
+	__be32 dst;
+	__be32 dstmask;
+};
+
+enum {
+	MFC_STATIC = 1,
+	MFC_OFFLOAD = 2,
+};
+
+struct mr_mfc {
+	struct rhlist_head mnode;
+	unsigned short mfc_parent;
+	int mfc_flags;
+	union {
+		struct {
+			unsigned long expires;
+			struct sk_buff_head unresolved;
+		} unres;
+		struct {
+			unsigned long last_assert;
+			int minvif;
+			int maxvif;
+			unsigned long bytes;
+			unsigned long pkt;
+			unsigned long wrong_if;
+			unsigned long lastuse;
+			unsigned char ttls[32];
+			refcount_t refcount;
+		} res;
+	} mfc_un;
+	struct list_head list;
+	struct callback_head rcu;
+	void (*free)(struct callback_head *);
+};
+
+struct mr_table_ops {
+	const struct rhashtable_params *rht_params;
+	void *cmparg_any;
+};
+
+struct vif_device {
+	struct net_device __attribute__((btf_type_tag("rcu"))) *dev;
+	netdevice_tracker dev_tracker;
+	unsigned long bytes_in;
+	unsigned long bytes_out;
+	unsigned long pkt_in;
+	unsigned long pkt_out;
+	unsigned long rate_limit;
+	unsigned char threshold;
+	unsigned short flags;
+	int link;
+	struct netdev_phys_item_id dev_parent_id;
+	__be32 local;
+	__be32 remote;
+};
+
+struct mr_table {
+	struct list_head list;
+	possible_net_t net;
+	struct mr_table_ops ops;
+	u32 id;
+	struct sock __attribute__((btf_type_tag("rcu"))) *mroute_sk;
+	struct timer_list ipmr_expire_timer;
+	struct list_head mfc_unres_queue;
+	struct vif_device vif_table[32];
+	struct rhltable mfc_hash;
+	struct list_head mfc_cache_list;
+	int maxvif;
+	atomic_t cache_resolve_queue_len;
+	bool mroute_do_assert;
+	bool mroute_do_pim;
+	bool mroute_do_wrvifwhole;
+	int mroute_reg_vif_num;
+};
+
+struct mr_vif_iter {
+	struct seq_net_private p;
+	struct mr_table *mrt;
+	int ct;
+};
+
+struct mr_mfc_iter {
+	struct seq_net_private p;
+	struct mr_table *mrt;
+	struct list_head *cache;
+	spinlock_t *lock;
+};
+
+struct vif_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct net_device *dev;
+	unsigned short vif_index;
+	unsigned short vif_flags;
+	u32 tb_id;
+};
+
+struct mfc_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct mr_mfc *mfc;
+	u32 tb_id;
+};
+
+struct rta_mfc_stats {
+	__u64 mfcs_packets;
+	__u64 mfcs_bytes;
+	__u64 mfcs_wrong_if;
+};
+
+struct xfrm_tunnel {
+	int (*handler)(struct sk_buff *);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm_tunnel __attribute__((btf_type_tag("rcu"))) *next;
+	int priority;
+};
+
+struct gre_protocol {
+	int (*handler)(struct sk_buff *);
+	void (*err_handler)(struct sk_buff *, u32);
+};
+
+struct erspan_base_hdr {
+	__u8 vlan_upper: 4;
+	__u8 ver: 4;
+	__u8 vlan: 8;
+	__u8 session_id_upper: 2;
+	__u8 t: 1;
+	__u8 en: 2;
+	__u8 cos: 3;
+	__u8 session_id: 8;
+};
+
+enum {
+	IFLA_GRE_UNSPEC = 0,
+	IFLA_GRE_LINK = 1,
+	IFLA_GRE_IFLAGS = 2,
+	IFLA_GRE_OFLAGS = 3,
+	IFLA_GRE_IKEY = 4,
+	IFLA_GRE_OKEY = 5,
+	IFLA_GRE_LOCAL = 6,
+	IFLA_GRE_REMOTE = 7,
+	IFLA_GRE_TTL = 8,
+	IFLA_GRE_TOS = 9,
+	IFLA_GRE_PMTUDISC = 10,
+	IFLA_GRE_ENCAP_LIMIT = 11,
+	IFLA_GRE_FLOWINFO = 12,
+	IFLA_GRE_FLAGS = 13,
+	IFLA_GRE_ENCAP_TYPE = 14,
+	IFLA_GRE_ENCAP_FLAGS = 15,
+	IFLA_GRE_ENCAP_SPORT = 16,
+	IFLA_GRE_ENCAP_DPORT = 17,
+	IFLA_GRE_COLLECT_METADATA = 18,
+	IFLA_GRE_IGNORE_DF = 19,
+	IFLA_GRE_FWMARK = 20,
+	IFLA_GRE_ERSPAN_INDEX = 21,
+	IFLA_GRE_ERSPAN_VER = 22,
+	IFLA_GRE_ERSPAN_DIR = 23,
+	IFLA_GRE_ERSPAN_HWID = 24,
+	__IFLA_GRE_MAX = 25,
+};
+
+enum erspan_encap_type {
+	ERSPAN_ENCAP_NOVLAN = 0,
+	ERSPAN_ENCAP_ISL = 1,
+	ERSPAN_ENCAP_8021Q = 2,
+	ERSPAN_ENCAP_INFRAME = 3,
+};
+
+enum erspan_bso {
+	BSO_NOERROR = 0,
+	BSO_SHORT = 1,
+	BSO_OVERSIZED = 2,
+	BSO_BAD = 3,
+};
+
+struct qtag_prefix {
+	__be16 eth_type;
+	__be16 tci;
+};
+
+struct erspan_md2 {
+	__be32 timestamp;
+	__be16 sgt;
+	__u8 hwid_upper: 2;
+	__u8 ft: 5;
+	__u8 p: 1;
+	__u8 o: 1;
+	__u8 gra: 2;
+	__u8 dir: 1;
+	__u8 hwid: 4;
+};
+
+struct erspan_metadata {
+	int version;
+	union {
+		__be32 index;
+		struct erspan_md2 md2;
+	} u;
+};
+
+struct udp_tunnel_nic_table_entry;
+
+struct udp_tunnel_nic {
+	struct work_struct work;
+	struct net_device *dev;
+	u8 need_sync: 1;
+	u8 need_replay: 1;
+	u8 work_pending: 1;
+	unsigned int n_tables;
+	unsigned long missed;
+	struct udp_tunnel_nic_table_entry **entries;
+};
+
+struct udp_tunnel_nic_table_entry {
+	__be16 port;
+	u8 type;
+	u8 flags;
+	u16 use_cnt;
+	u8 hw_priv;
+};
+
+enum udp_parsable_tunnel_type {
+	UDP_TUNNEL_TYPE_VXLAN = 1,
+	UDP_TUNNEL_TYPE_GENEVE = 2,
+	UDP_TUNNEL_TYPE_VXLAN_GPE = 4,
+};
+
+enum udp_tunnel_nic_table_entry_flags {
+	UDP_TUNNEL_NIC_ENTRY_ADD = 1,
+	UDP_TUNNEL_NIC_ENTRY_DEL = 2,
+	UDP_TUNNEL_NIC_ENTRY_OP_FAIL = 4,
+	UDP_TUNNEL_NIC_ENTRY_FROZEN = 8,
+};
+
+struct udp_tunnel_nic_shared_node {
+	struct net_device *dev;
+	struct list_head list;
+};
+
+struct xfrm4_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm4_protocol __attribute__((btf_type_tag("rcu"))) *next;
+	int priority;
+};
+
+enum {
+	IFLA_VTI_UNSPEC = 0,
+	IFLA_VTI_LINK = 1,
+	IFLA_VTI_IKEY = 2,
+	IFLA_VTI_OKEY = 3,
+	IFLA_VTI_LOCAL = 4,
+	IFLA_VTI_REMOTE = 5,
+	IFLA_VTI_FWMARK = 6,
+	__IFLA_VTI_MAX = 7,
+};
+
+enum {
+	LINUX_MIB_XFRMNUM = 0,
+	LINUX_MIB_XFRMINERROR = 1,
+	LINUX_MIB_XFRMINBUFFERERROR = 2,
+	LINUX_MIB_XFRMINHDRERROR = 3,
+	LINUX_MIB_XFRMINNOSTATES = 4,
+	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
+	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
+	LINUX_MIB_XFRMINSTATESEQERROR = 7,
+	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
+	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
+	LINUX_MIB_XFRMINSTATEINVALID = 10,
+	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
+	LINUX_MIB_XFRMINNOPOLS = 12,
+	LINUX_MIB_XFRMINPOLBLOCK = 13,
+	LINUX_MIB_XFRMINPOLERROR = 14,
+	LINUX_MIB_XFRMOUTERROR = 15,
+	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
+	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
+	LINUX_MIB_XFRMOUTNOSTATES = 18,
+	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
+	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
+	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
+	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
+	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
+	LINUX_MIB_XFRMOUTPOLDEAD = 24,
+	LINUX_MIB_XFRMOUTPOLERROR = 25,
+	LINUX_MIB_XFRMFWDHDRERROR = 26,
+	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
+	LINUX_MIB_XFRMACQUIREERROR = 28,
+	__LINUX_MIB_XFRMMAX = 29,
+};
+
+struct ip6_tnl;
+
+struct xfrm_tunnel_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	union {
+		struct ip_tunnel *ip4;
+		struct ip6_tnl *ip6;
+	} tunnel;
+};
+
+struct xfrm_spi_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	unsigned int daddroff;
+	unsigned int family;
+	__be32 seq;
+};
+
+struct xfrm_mode_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	__be16 id;
+	__be16 frag_off;
+	u8 ihl;
+	u8 tos;
+	u8 ttl;
+	u8 protocol;
+	u8 optlen;
+	u8 flow_lbl[3];
+};
+
+struct ip_comp_hdr {
+	__u8 nexthdr;
+	__u8 flags;
+	__be16 cpi;
+};
+
+struct xfrm_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	union {
+		struct {
+			__u32 low;
+			__u32 hi;
+		} output;
+		struct {
+			__be32 low;
+			__be32 hi;
+		} input;
+	} seq;
+};
+
+struct esp_skb_cb {
+	struct xfrm_skb_cb xfrm;
+	void *tmp;
+};
+
+struct esp_info {
+	struct ip_esp_hdr *esph;
+	__be64 seqno;
+	int tfclen;
+	int tailen;
+	int plen;
+	int clen;
+	int len;
+	int nfrags;
+	__u8 proto;
+	bool inplace;
+};
+
+struct esp_output_extra {
+	__be32 seqhi;
+	u32 esphoff;
+};
+
+struct xfrm_algo_aead_info {
+	char *geniv;
+	u16 icv_truncbits;
+};
+
+struct xfrm_algo_auth_info {
+	u16 icv_truncbits;
+	u16 icv_fullbits;
+};
+
+struct xfrm_algo_encr_info {
+	char *geniv;
+	u16 blockbits;
+	u16 defkeybits;
+};
+
+struct xfrm_algo_comp_info {
+	u16 threshold;
+};
+
+struct sadb_alg {
+	__u8 sadb_alg_id;
+	__u8 sadb_alg_ivlen;
+	__u16 sadb_alg_minbits;
+	__u16 sadb_alg_maxbits;
+	__u16 sadb_alg_reserved;
+};
+
+struct xfrm_algo_desc {
+	char *name;
+	char *compat;
+	u8 available: 1;
+	u8 pfkey_supported: 1;
+	union {
+		struct xfrm_algo_aead_info aead;
+		struct xfrm_algo_auth_info auth;
+		struct xfrm_algo_encr_info encr;
+		struct xfrm_algo_comp_info comp;
+	} uinfo;
+	struct sadb_alg desc;
+};
+
+enum nf_ip_trace_comments {
+	NF_IP_TRACE_COMMENT_RULE = 0,
+	NF_IP_TRACE_COMMENT_RETURN = 1,
+	NF_IP_TRACE_COMMENT_POLICY = 2,
+};
+
+struct ipt_error {
+	struct ipt_entry entry;
+	struct xt_error_target target;
+};
+
+struct ipt_replace {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int num_entries;
+	unsigned int size;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_counters;
+	struct xt_counters __attribute__((btf_type_tag("user"))) *counters;
+	struct ipt_entry entries[0];
+};
+
+struct ipt_standard {
+	struct ipt_entry entry;
+	struct xt_standard_target target;
+};
+
+struct ipt_getinfo {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_entries;
+	unsigned int size;
+};
+
+struct ipt_get_entries {
+	char name[32];
+	unsigned int size;
+	struct ipt_entry entrytable[0];
+};
+
+struct xt_get_revision {
+	char name[29];
+	__u8 revision;
+};
+
+struct iptable_nat_pernet {
+	struct nf_hook_ops *nf_nat_ops;
+};
+
+enum ipt_reject_with {
+	IPT_ICMP_NET_UNREACHABLE = 0,
+	IPT_ICMP_HOST_UNREACHABLE = 1,
+	IPT_ICMP_PROT_UNREACHABLE = 2,
+	IPT_ICMP_PORT_UNREACHABLE = 3,
+	IPT_ICMP_ECHOREPLY = 4,
+	IPT_ICMP_NET_PROHIBITED = 5,
+	IPT_ICMP_HOST_PROHIBITED = 6,
+	IPT_TCP_RESET = 7,
+	IPT_ICMP_ADMIN_PROHIBITED = 8,
+};
+
+struct ipt_reject_info {
+	enum ipt_reject_with with;
+};
+
+struct arpt_devaddr_info {
+	char addr[16];
+	char mask[16];
+};
+
+struct arpt_arp {
+	struct in_addr src;
+	struct in_addr tgt;
+	struct in_addr smsk;
+	struct in_addr tmsk;
+	__u8 arhln;
+	__u8 arhln_mask;
+	struct arpt_devaddr_info src_devaddr;
+	struct arpt_devaddr_info tgt_devaddr;
+	__be16 arpop;
+	__be16 arpop_mask;
+	__be16 arhrd;
+	__be16 arhrd_mask;
+	__be16 arpro;
+	__be16 arpro_mask;
+	char iniface[16];
+	char outiface[16];
+	unsigned char iniface_mask[16];
+	unsigned char outiface_mask[16];
+	__u8 flags;
+	__u16 invflags;
+};
+
+struct arpt_entry {
+	struct arpt_arp arp;
+	__u16 target_offset;
+	__u16 next_offset;
+	unsigned int comefrom;
+	struct xt_counters counters;
+	unsigned char elems[0];
+};
+
+struct arpt_error {
+	struct arpt_entry entry;
+	struct xt_error_target target;
+};
+
+struct arpt_replace {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int num_entries;
+	unsigned int size;
+	unsigned int hook_entry[3];
+	unsigned int underflow[3];
+	unsigned int num_counters;
+	struct xt_counters __attribute__((btf_type_tag("user"))) *counters;
+	struct arpt_entry entries[0];
+};
+
+struct arpt_standard {
+	struct arpt_entry entry;
+	struct xt_standard_target target;
+};
+
+struct arpt_getinfo {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int hook_entry[3];
+	unsigned int underflow[3];
+	unsigned int num_entries;
+	unsigned int size;
+};
+
+struct arpt_get_entries {
+	char name[32];
+	unsigned int size;
+	struct arpt_entry entrytable[0];
+};
+
+struct arpt_mangle {
+	char src_devaddr[16];
+	char tgt_devaddr[16];
+	union {
+		struct in_addr src_ip;
+	} u_s;
+	union {
+		struct in_addr tgt_ip;
+	} u_t;
+	__u8 flags;
+	int target;
+};
+
+struct inet_diag_req_v2;
+
+struct inet_diag_msg;
+
+struct inet_diag_handler {
+	void (*dump)(struct sk_buff *, struct netlink_callback *, const struct inet_diag_req_v2 *);
+	int (*dump_one)(struct netlink_callback *, const struct inet_diag_req_v2 *);
+	void (*idiag_get_info)(struct sock *, struct inet_diag_msg *, void *);
+	int (*idiag_get_aux)(struct sock *, bool, struct sk_buff *);
+	size_t (*idiag_get_aux_size)(struct sock *, bool);
+	int (*destroy)(struct sk_buff *, const struct inet_diag_req_v2 *);
+	__u16 idiag_type;
+	__u16 idiag_info_size;
+};
+
+struct inet_diag_sockid {
+	__be16 idiag_sport;
+	__be16 idiag_dport;
+	__be32 idiag_src[4];
+	__be32 idiag_dst[4];
+	__u32 idiag_if;
+	__u32 idiag_cookie[2];
+};
+
+struct inet_diag_req_v2 {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u8 idiag_ext;
+	__u8 pad;
+	__u32 idiag_states;
+	struct inet_diag_sockid id;
+};
+
+struct inet_diag_msg {
+	__u8 idiag_family;
+	__u8 idiag_state;
+	__u8 idiag_timer;
+	__u8 idiag_retrans;
+	struct inet_diag_sockid id;
+	__u32 idiag_expires;
+	__u32 idiag_rqueue;
+	__u32 idiag_wqueue;
+	__u32 idiag_uid;
+	__u32 idiag_inode;
+};
+
+enum {
+	INET_DIAG_NONE = 0,
+	INET_DIAG_MEMINFO = 1,
+	INET_DIAG_INFO = 2,
+	INET_DIAG_VEGASINFO = 3,
+	INET_DIAG_CONG = 4,
+	INET_DIAG_TOS = 5,
+	INET_DIAG_TCLASS = 6,
+	INET_DIAG_SKMEMINFO = 7,
+	INET_DIAG_SHUTDOWN = 8,
+	INET_DIAG_DCTCPINFO = 9,
+	INET_DIAG_PROTOCOL = 10,
+	INET_DIAG_SKV6ONLY = 11,
+	INET_DIAG_LOCALS = 12,
+	INET_DIAG_PEERS = 13,
+	INET_DIAG_PAD = 14,
+	INET_DIAG_MARK = 15,
+	INET_DIAG_BBRINFO = 16,
+	INET_DIAG_CLASS_ID = 17,
+	INET_DIAG_MD5SIG = 18,
+	INET_DIAG_ULP_INFO = 19,
+	INET_DIAG_SK_BPF_STORAGES = 20,
+	INET_DIAG_CGROUP_ID = 21,
+	INET_DIAG_SOCKOPT = 22,
+	__INET_DIAG_MAX = 23,
+};
+
+enum {
+	INET_DIAG_REQ_NONE = 0,
+	INET_DIAG_REQ_BYTECODE = 1,
+	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
+	INET_DIAG_REQ_PROTOCOL = 3,
+	__INET_DIAG_REQ_MAX = 4,
+};
+
+enum {
+	INET_DIAG_BC_NOP = 0,
+	INET_DIAG_BC_JMP = 1,
+	INET_DIAG_BC_S_GE = 2,
+	INET_DIAG_BC_S_LE = 3,
+	INET_DIAG_BC_D_GE = 4,
+	INET_DIAG_BC_D_LE = 5,
+	INET_DIAG_BC_AUTO = 6,
+	INET_DIAG_BC_S_COND = 7,
+	INET_DIAG_BC_D_COND = 8,
+	INET_DIAG_BC_DEV_COND = 9,
+	INET_DIAG_BC_MARK_COND = 10,
+	INET_DIAG_BC_S_EQ = 11,
+	INET_DIAG_BC_D_EQ = 12,
+	INET_DIAG_BC_CGROUP_COND = 13,
+};
+
+struct inet_diag_hostcond {
+	__u8 family;
+	__u8 prefix_len;
+	int port;
+	__be32 addr[0];
+};
+
+struct inet_diag_markcond {
+	__u32 mark;
+	__u32 mask;
+};
+
+struct inet_diag_dump_data {
+	struct nlattr *req_nlas[4];
+	struct bpf_sk_storage_diag *bpf_stg_diag;
+};
+
+struct inet_diag_entry {
+	const __be32 *saddr;
+	const __be32 *daddr;
+	u16 sport;
+	u16 dport;
+	u16 family;
+	u16 userlocks;
+	u32 ifindex;
+	u32 mark;
+	u64 cgroup_id;
+};
+
+struct inet_diag_bc_op {
+	unsigned char code;
+	unsigned char yes;
+	unsigned short no;
+};
+
+struct inet_diag_req {
+	__u8 idiag_family;
+	__u8 idiag_src_len;
+	__u8 idiag_dst_len;
+	__u8 idiag_ext;
+	struct inet_diag_sockid id;
+	__u32 idiag_states;
+	__u32 idiag_dbs;
+};
+
+struct inet_diag_sockopt {
+	__u8 recverr: 1;
+	__u8 is_icsk: 1;
+	__u8 freebind: 1;
+	__u8 hdrincl: 1;
+	__u8 mc_loop: 1;
+	__u8 transparent: 1;
+	__u8 mc_all: 1;
+	__u8 nodefrag: 1;
+	__u8 bind_address_no_port: 1;
+	__u8 recverr_rfc4884: 1;
+	__u8 defer_connect: 1;
+	__u8 unused: 5;
+};
+
+struct inet_diag_meminfo {
+	__u32 idiag_rmem;
+	__u32 idiag_wmem;
+	__u32 idiag_fmem;
+	__u32 idiag_tmem;
+};
+
+enum {
+	INET_ULP_INFO_UNSPEC = 0,
+	INET_ULP_INFO_NAME = 1,
+	INET_ULP_INFO_TLS = 2,
+	INET_ULP_INFO_MPTCP = 3,
+	__INET_ULP_INFO_MAX = 4,
+};
+
+struct bictcp {
+	u32 cnt;
+	u32 last_max_cwnd;
+	u32 last_cwnd;
+	u32 last_time;
+	u32 bic_origin_point;
+	u32 bic_K;
+	u32 delay_min;
+	u32 epoch_start;
+	u32 ack_cnt;
+	u32 tcp_cwnd;
+	u16 unused;
+	u8 sample_cnt;
+	u8 found;
+	u32 round_start;
+	u32 end_seq;
+	u32 last_ack;
+	u32 curr_rtt;
+};
+
+enum {
+	TCP_BPF_IPV4 = 0,
+	TCP_BPF_IPV6 = 1,
+	TCP_BPF_NUM_PROTS = 2,
+};
+
+enum {
+	TCP_BPF_BASE = 0,
+	TCP_BPF_TX = 1,
+	TCP_BPF_RX = 2,
+	TCP_BPF_TXRX = 3,
+	TCP_BPF_NUM_CFGS = 4,
+};
+
+struct tx_work {
+	struct delayed_work work;
+	struct sock *sk;
+};
+
+struct tls_rec;
+
+struct tls_sw_context_tx {
+	struct crypto_aead *aead_send;
+	struct crypto_wait async_wait;
+	struct tx_work tx_work;
+	struct tls_rec *open_rec;
+	struct list_head tx_list;
+	atomic_t encrypt_pending;
+	u8 async_capable: 1;
+	unsigned long tx_bitmask;
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	UDP_BPF_IPV4 = 0,
+	UDP_BPF_IPV6 = 1,
+	UDP_BPF_NUM_PROTS = 2,
+};
+
+struct xfrm_policy_afinfo {
+	struct dst_ops *dst_ops;
+	struct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);
+	int (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);
+	int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
+	struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
+};
+
+struct xfrm_state_afinfo {
+	u8 family;
+	u8 proto;
+	const struct xfrm_type_offload *type_offload_esp;
+	const struct xfrm_type *type_esp;
+	const struct xfrm_type *type_ipip;
+	const struct xfrm_type *type_ipip6;
+	const struct xfrm_type *type_comp;
+	const struct xfrm_type *type_ah;
+	const struct xfrm_type *type_routing;
+	const struct xfrm_type *type_dstopts;
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*transport_finish)(struct sk_buff *, int);
+	void (*local_error)(struct sk_buff *, u32);
+};
+
+struct xfrm_input_afinfo {
+	u8 family;
+	bool is_ipip;
+	int (*callback)(struct sk_buff *, u8, int);
+};
+
+typedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32);
+
+struct xfrm_if_decode_session_result;
+
+struct xfrm_if_cb {
+	bool (*decode_session)(struct sk_buff *, unsigned short, struct xfrm_if_decode_session_result *);
+};
+
+struct xfrm_if_decode_session_result {
+	struct net *net;
+	u32 if_id;
+};
+
+enum {
+	XFRM_POLICY_TYPE_MAIN = 0,
+	XFRM_POLICY_TYPE_SUB = 1,
+	XFRM_POLICY_TYPE_MAX = 2,
+	XFRM_POLICY_TYPE_ANY = 255,
+};
+
+enum xfrm_pol_inexact_candidate_type {
+	XFRM_POL_CAND_BOTH = 0,
+	XFRM_POL_CAND_SADDR = 1,
+	XFRM_POL_CAND_DADDR = 2,
+	XFRM_POL_CAND_ANY = 3,
+	XFRM_POL_CAND_MAX = 4,
+};
+
+enum {
+	XFRM_STATE_VOID = 0,
+	XFRM_STATE_ACQ = 1,
+	XFRM_STATE_VALID = 2,
+	XFRM_STATE_ERROR = 3,
+	XFRM_STATE_EXPIRED = 4,
+	XFRM_STATE_DEAD = 5,
+};
+
+struct xfrm_pol_inexact_node {
+	struct rb_node node;
+	union {
+		xfrm_address_t addr;
+		struct callback_head rcu;
+	};
+	u8 prefixlen;
+	struct rb_root root;
+	struct hlist_head hhead;
+};
+
+struct xfrm_pol_inexact_key {
+	possible_net_t net;
+	u32 if_id;
+	u16 family;
+	u8 dir;
+	u8 type;
+};
+
+struct xfrm_pol_inexact_bin {
+	struct xfrm_pol_inexact_key k;
+	struct rhash_head head;
+	struct hlist_head hhead;
+	seqcount_spinlock_t count;
+	struct rb_root root_d;
+	struct rb_root root_s;
+	struct list_head inexact_bins;
+	struct callback_head rcu;
+};
+
+struct ip6_mh {
+	__u8 ip6mh_proto;
+	__u8 ip6mh_hdrlen;
+	__u8 ip6mh_type;
+	__u8 ip6mh_reserved;
+	__u16 ip6mh_cksum;
+	__u8 data[0];
+};
+
+struct xfrm_flo {
+	struct dst_entry *dst_orig;
+	u8 flags;
+};
+
+struct xfrm_pol_inexact_candidates {
+	struct hlist_head *res[4];
+};
+
+struct xfrm_migrate {
+	xfrm_address_t old_daddr;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_daddr;
+	xfrm_address_t new_saddr;
+	u8 proto;
+	u8 mode;
+	u16 reserved;
+	u32 reqid;
+	u16 old_family;
+	u16 new_family;
+};
+
+struct xfrm_kmaddress {
+	xfrm_address_t local;
+	xfrm_address_t remote;
+	u32 reserved;
+	u16 family;
+};
+
+struct xfrmk_spdinfo {
+	u32 incnt;
+	u32 outcnt;
+	u32 fwdcnt;
+	u32 inscnt;
+	u32 outscnt;
+	u32 fwdscnt;
+	u32 spdhcnt;
+	u32 spdhmcnt;
+};
+
+struct xfrm_policy_walk {
+	struct xfrm_policy_walk_entry walk;
+	u8 type;
+	u32 seq;
+};
+
+enum {
+	XFRM_MSG_BASE = 16,
+	XFRM_MSG_NEWSA = 16,
+	XFRM_MSG_DELSA = 17,
+	XFRM_MSG_GETSA = 18,
+	XFRM_MSG_NEWPOLICY = 19,
+	XFRM_MSG_DELPOLICY = 20,
+	XFRM_MSG_GETPOLICY = 21,
+	XFRM_MSG_ALLOCSPI = 22,
+	XFRM_MSG_ACQUIRE = 23,
+	XFRM_MSG_EXPIRE = 24,
+	XFRM_MSG_UPDPOLICY = 25,
+	XFRM_MSG_UPDSA = 26,
+	XFRM_MSG_POLEXPIRE = 27,
+	XFRM_MSG_FLUSHSA = 28,
+	XFRM_MSG_FLUSHPOLICY = 29,
+	XFRM_MSG_NEWAE = 30,
+	XFRM_MSG_GETAE = 31,
+	XFRM_MSG_REPORT = 32,
+	XFRM_MSG_MIGRATE = 33,
+	XFRM_MSG_NEWSADINFO = 34,
+	XFRM_MSG_GETSADINFO = 35,
+	XFRM_MSG_NEWSPDINFO = 36,
+	XFRM_MSG_GETSPDINFO = 37,
+	XFRM_MSG_MAPPING = 38,
+	XFRM_MSG_SETDEFAULT = 39,
+	XFRM_MSG_GETDEFAULT = 40,
+	__XFRM_MSG_MAX = 41,
+};
+
+enum {
+	XFRM_MODE_FLAG_TUNNEL = 1,
+};
+
+enum xfrm_attr_type_t {
+	XFRMA_UNSPEC = 0,
+	XFRMA_ALG_AUTH = 1,
+	XFRMA_ALG_CRYPT = 2,
+	XFRMA_ALG_COMP = 3,
+	XFRMA_ENCAP = 4,
+	XFRMA_TMPL = 5,
+	XFRMA_SA = 6,
+	XFRMA_POLICY = 7,
+	XFRMA_SEC_CTX = 8,
+	XFRMA_LTIME_VAL = 9,
+	XFRMA_REPLAY_VAL = 10,
+	XFRMA_REPLAY_THRESH = 11,
+	XFRMA_ETIMER_THRESH = 12,
+	XFRMA_SRCADDR = 13,
+	XFRMA_COADDR = 14,
+	XFRMA_LASTUSED = 15,
+	XFRMA_POLICY_TYPE = 16,
+	XFRMA_MIGRATE = 17,
+	XFRMA_ALG_AEAD = 18,
+	XFRMA_KMADDRESS = 19,
+	XFRMA_ALG_AUTH_TRUNC = 20,
+	XFRMA_MARK = 21,
+	XFRMA_TFCPAD = 22,
+	XFRMA_REPLAY_ESN_VAL = 23,
+	XFRMA_SA_EXTRA_FLAGS = 24,
+	XFRMA_PROTO = 25,
+	XFRMA_ADDRESS_FILTER = 26,
+	XFRMA_PAD = 27,
+	XFRMA_OFFLOAD_DEV = 28,
+	XFRMA_SET_MARK = 29,
+	XFRMA_SET_MARK_MASK = 30,
+	XFRMA_IF_ID = 31,
+	XFRMA_MTIMER_THRESH = 32,
+	__XFRMA_MAX = 33,
+};
+
+enum xfrm_ae_ftype_t {
+	XFRM_AE_UNSPEC = 0,
+	XFRM_AE_RTHR = 1,
+	XFRM_AE_RVAL = 2,
+	XFRM_AE_LVAL = 4,
+	XFRM_AE_ETHR = 8,
+	XFRM_AE_CR = 16,
+	XFRM_AE_CE = 32,
+	XFRM_AE_CU = 64,
+	__XFRM_AE_MAX = 65,
+};
+
+enum xfrm_nlgroups {
+	XFRMNLGRP_NONE = 0,
+	XFRMNLGRP_ACQUIRE = 1,
+	XFRMNLGRP_EXPIRE = 2,
+	XFRMNLGRP_SA = 3,
+	XFRMNLGRP_POLICY = 4,
+	XFRMNLGRP_AEVENTS = 5,
+	XFRMNLGRP_REPORT = 6,
+	XFRMNLGRP_MIGRATE = 7,
+	XFRMNLGRP_MAPPING = 8,
+	__XFRMNLGRP_MAX = 9,
+};
+
+struct km_event;
+
+struct xfrm_mgr {
+	struct list_head list;
+	int (*notify)(struct xfrm_state *, const struct km_event *);
+	int (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);
+	struct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);
+	int (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);
+	int (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);
+	int (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);
+	int (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);
+	bool (*is_alive)(const struct km_event *);
+};
+
+struct km_event {
+	union {
+		u32 hard;
+		u32 proto;
+		u32 byid;
+		u32 aevent;
+		u32 type;
+	} data;
+	u32 seq;
+	u32 portid;
+	u32 event;
+	struct net *net;
+};
+
+struct xfrm_user_sec_ctx {
+	__u16 len;
+	__u16 exttype;
+	__u8 ctx_alg;
+	__u8 ctx_doi;
+	__u16 ctx_len;
+};
+
+struct xfrmk_sadinfo {
+	u32 sadhcnt;
+	u32 sadhmcnt;
+	u32 sadcnt;
+};
+
+struct xfrm_trans_tasklet {
+	struct work_struct work;
+	spinlock_t queue_lock;
+	struct sk_buff_head queue;
+};
+
+struct __ip6_tnl_parm {
+	char name[16];
+	int link;
+	__u8 proto;
+	__u8 encap_limit;
+	__u8 hop_limit;
+	bool collect_md;
+	__be32 flowinfo;
+	__u32 flags;
+	struct in6_addr laddr;
+	struct in6_addr raddr;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	__u32 fwmark;
+	__u32 index;
+	__u8 erspan_ver;
+	__u8 dir;
+	__u16 hwid;
+};
+
+struct ip6_tnl {
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *next;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	struct __ip6_tnl_parm parms;
+	struct flowi fl;
+	struct dst_cache dst_cache;
+	struct gro_cells gro_cells;
+	int err_count;
+	unsigned long err_time;
+	__u32 i_seqno;
+	atomic_t o_seqno;
+	int hlen;
+	int tun_hlen;
+	int encap_hlen;
+	struct ip_tunnel_encap encap;
+	int mlink;
+};
+
+struct xfrm_trans_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	int (*finish)(struct net *, struct sock *, struct sk_buff *);
+	struct net *net;
+};
+
+struct ip_beet_phdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 padlen;
+	__u8 reserved;
+};
+
+struct xfrm_algo_list {
+	struct xfrm_algo_desc *algs;
+	int entries;
+	u32 type;
+	u32 mask;
+};
+
+struct xfrm_aead_name {
+	const char *name;
+	int icvbits;
+};
+
+struct xfrm_link {
+	int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **, struct netlink_ext_ack *);
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *nla_pol;
+	int nla_max;
+};
+
+enum {
+	XFRM_DEV_OFFLOAD_IN = 1,
+	XFRM_DEV_OFFLOAD_OUT = 2,
+	XFRM_DEV_OFFLOAD_FWD = 3,
+};
+
+enum {
+	XFRM_SHARE_ANY = 0,
+	XFRM_SHARE_SESSION = 1,
+	XFRM_SHARE_USER = 2,
+	XFRM_SHARE_UNIQUE = 3,
+};
+
+enum xfrm_sadattr_type_t {
+	XFRMA_SAD_UNSPEC = 0,
+	XFRMA_SAD_CNT = 1,
+	XFRMA_SAD_HINFO = 2,
+	__XFRMA_SAD_MAX = 3,
+};
+
+enum xfrm_spdattr_type_t {
+	XFRMA_SPD_UNSPEC = 0,
+	XFRMA_SPD_INFO = 1,
+	XFRMA_SPD_HINFO = 2,
+	XFRMA_SPD_IPV4_HTHRESH = 3,
+	XFRMA_SPD_IPV6_HTHRESH = 4,
+	__XFRMA_SPD_MAX = 5,
+};
+
+struct xfrm_userpolicy_info {
+	struct xfrm_selector sel;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	__u32 priority;
+	__u32 index;
+	__u8 dir;
+	__u8 action;
+	__u8 flags;
+	__u8 share;
+};
+
+struct xfrm_user_tmpl {
+	struct xfrm_id id;
+	__u16 family;
+	xfrm_address_t saddr;
+	__u32 reqid;
+	__u8 mode;
+	__u8 share;
+	__u8 optional;
+	__u32 aalgos;
+	__u32 ealgos;
+	__u32 calgos;
+};
+
+struct xfrm_usersa_info {
+	struct xfrm_selector sel;
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_stats stats;
+	__u32 seq;
+	__u32 reqid;
+	__u16 family;
+	__u8 mode;
+	__u8 replay_window;
+	__u8 flags;
+};
+
+struct xfrm_usersa_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u16 family;
+	__u8 proto;
+};
+
+struct xfrm_usersa_flush {
+	__u8 proto;
+};
+
+struct xfrm_user_expire {
+	struct xfrm_usersa_info state;
+	__u8 hard;
+};
+
+struct xfrm_translator {
+	int (*alloc_compat)(struct sk_buff *, const struct nlmsghdr *);
+	struct nlmsghdr * (*rcv_msg_compat)(const struct nlmsghdr *, int, const struct nla_policy *, struct netlink_ext_ack *);
+	int (*xlate_user_policy_sockptr)(u8 **, int);
+	struct module *owner;
+};
+
+struct xfrm_user_acquire {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_selector sel;
+	struct xfrm_userpolicy_info policy;
+	__u32 aalgos;
+	__u32 ealgos;
+	__u32 calgos;
+	__u32 seq;
+};
+
+struct xfrm_user_offload {
+	int ifindex;
+	__u8 flags;
+};
+
+struct xfrm_user_mapping {
+	struct xfrm_usersa_id id;
+	__u32 reqid;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_saddr;
+	__be16 old_sport;
+	__be16 new_sport;
+};
+
+struct xfrm_userpolicy_id {
+	struct xfrm_selector sel;
+	__u32 index;
+	__u8 dir;
+};
+
+struct xfrm_user_polexpire {
+	struct xfrm_userpolicy_info pol;
+	__u8 hard;
+};
+
+struct xfrm_user_report {
+	__u8 proto;
+	struct xfrm_selector sel;
+};
+
+struct xfrm_user_kmaddress {
+	xfrm_address_t local;
+	xfrm_address_t remote;
+	__u32 reserved;
+	__u16 family;
+};
+
+struct xfrm_user_migrate {
+	xfrm_address_t old_daddr;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_daddr;
+	xfrm_address_t new_saddr;
+	__u8 proto;
+	__u8 mode;
+	__u16 reserved;
+	__u32 reqid;
+	__u16 old_family;
+	__u16 new_family;
+};
+
+struct xfrm_userpolicy_type {
+	__u8 type;
+	__u16 reserved1;
+	__u8 reserved2;
+};
+
+struct xfrm_dump_info {
+	struct sk_buff *in_skb;
+	struct sk_buff *out_skb;
+	u32 nlmsg_seq;
+	u16 nlmsg_flags;
+};
+
+struct xfrmu_sadhinfo {
+	__u32 sadhcnt;
+	__u32 sadhmcnt;
+};
+
+struct xfrmu_spdinfo {
+	__u32 incnt;
+	__u32 outcnt;
+	__u32 fwdcnt;
+	__u32 inscnt;
+	__u32 outscnt;
+	__u32 fwdscnt;
+};
+
+struct xfrmu_spdhinfo {
+	__u32 spdhcnt;
+	__u32 spdhmcnt;
+};
+
+struct xfrmu_spdhthresh {
+	__u8 lbits;
+	__u8 rbits;
+};
+
+struct xfrm_userpolicy_default {
+	__u8 in;
+	__u8 fwd;
+	__u8 out;
+};
+
+struct xfrm_aevent_id {
+	struct xfrm_usersa_id sa_id;
+	xfrm_address_t saddr;
+	__u32 flags;
+	__u32 reqid;
+};
+
+struct xfrm_userspi_info {
+	struct xfrm_usersa_info info;
+	__u32 min;
+	__u32 max;
+};
+
+struct ipcomp_tfms {
+	struct list_head list;
+	struct crypto_comp * __attribute__((btf_type_tag("percpu"))) *tfms;
+	int users;
+};
+
+struct ipcomp_data {
+	u16 threshold;
+	struct crypto_comp * __attribute__((btf_type_tag("percpu"))) *tfms;
+};
+
+struct xfrm6_tunnel {
+	int (*handler)(struct sk_buff *);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	struct xfrm6_tunnel __attribute__((btf_type_tag("rcu"))) *next;
+	int priority;
+};
+
+struct xfrm6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	struct xfrm6_protocol __attribute__((btf_type_tag("rcu"))) *next;
+	int priority;
+};
+
+enum {
+	LWT_XFRM_UNSPEC = 0,
+	LWT_XFRM_IF_ID = 1,
+	LWT_XFRM_LINK = 2,
+	__LWT_XFRM_MAX = 3,
+};
+
+enum {
+	IFLA_XFRM_UNSPEC = 0,
+	IFLA_XFRM_LINK = 1,
+	IFLA_XFRM_IF_ID = 2,
+	IFLA_XFRM_COLLECT_METADATA = 3,
+	__IFLA_XFRM_MAX = 4,
+};
+
+struct xfrm_if_parms {
+	int link;
+	u32 if_id;
+	bool collect_md;
+};
+
+struct xfrm_if {
+	struct xfrm_if __attribute__((btf_type_tag("rcu"))) *next;
+	struct net_device *dev;
+	struct net *net;
+	struct xfrm_if_parms p;
+	struct gro_cells gro_cells;
+};
+
+struct xfrmi_net {
+	struct xfrm_if __attribute__((btf_type_tag("rcu"))) *xfrmi[256];
+	struct xfrm_if __attribute__((btf_type_tag("rcu"))) *collect_md_xfrmi;
+};
+
+struct bpf_xfrm_info {
+	u32 if_id;
+	int link;
+};
+
+enum unix_socket_lock_class {
+	U_LOCK_NORMAL = 0,
+	U_LOCK_SECOND = 1,
+	U_LOCK_DIAG = 2,
+	U_LOCK_GC_LISTENER = 3,
+};
+
+struct unix_skb_parms {
+	struct pid *pid;
+	kuid_t uid;
+	kgid_t gid;
+	struct scm_fp_list *fp;
+	u32 secid;
+	u32 consumed;
+};
+
+struct bpf_iter__unix {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct unix_sock *unix_sk;
+	};
+	uid_t uid;
+};
+
+struct bpf_unix_iter_state {
+	struct seq_net_private p;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct unix_stream_read_state {
+	int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);
+	struct socket *socket;
+	struct msghdr *msg;
+	struct pipe_inode_info *pipe;
+	size_t size;
+	int flags;
+	unsigned int splice_flags;
+};
+
+struct ipv6_params {
+	__s32 disable_ipv6;
+	__s32 autoconf;
+};
+
+struct ioam6_pernet_data {
+	struct mutex lock;
+	struct rhashtable namespaces;
+	struct rhashtable schemas;
+};
+
+struct ipv6_stub {
+	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
+	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
+	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
+	int (*ipv6_route_input)(struct sk_buff *);
+	struct fib6_table * (*fib6_get_table)(struct net *, u32);
+	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
+	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
+	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
+	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
+	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
+	void (*fib6_nh_release)(struct fib6_nh *);
+	void (*fib6_nh_release_dsts)(struct fib6_nh *);
+	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
+	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
+	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
+	void (*udpv6_encap_enable)();
+	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
+	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
+	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
+	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
+	struct neigh_table *nd_tbl;
+	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	struct net_device * (*ipv6_dev_find)(struct net *, const struct in6_addr *, struct net_device *);
+};
+
+enum flowlabel_reflect {
+	FLOWLABEL_REFLECT_ESTABLISHED = 1,
+	FLOWLABEL_REFLECT_TCP_RESET = 2,
+	FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
+};
+
+struct in6_rtmsg {
+	struct in6_addr rtmsg_dst;
+	struct in6_addr rtmsg_src;
+	struct in6_addr rtmsg_gateway;
+	__u32 rtmsg_type;
+	__u16 rtmsg_dst_len;
+	__u16 rtmsg_src_len;
+	__u32 rtmsg_metric;
+	unsigned long rtmsg_info;
+	__u32 rtmsg_flags;
+	int rtmsg_ifindex;
+};
+
+struct compat_in6_rtmsg {
+	struct in6_addr rtmsg_dst;
+	struct in6_addr rtmsg_src;
+	struct in6_addr rtmsg_gateway;
+	u32 rtmsg_type;
+	u16 rtmsg_dst_len;
+	u16 rtmsg_src_len;
+	u32 rtmsg_metric;
+	u32 rtmsg_info;
+	u32 rtmsg_flags;
+	s32 rtmsg_ifindex;
+};
+
+struct ac6_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+enum {
+	ICMP6_MIB_NUM = 0,
+	ICMP6_MIB_INMSGS = 1,
+	ICMP6_MIB_INERRORS = 2,
+	ICMP6_MIB_OUTMSGS = 3,
+	ICMP6_MIB_OUTERRORS = 4,
+	ICMP6_MIB_CSUMERRORS = 5,
+	ICMP6_MIB_RATELIMITHOST = 6,
+	__ICMP6_MIB_MAX = 7,
+};
+
+struct ip6_frag_state {
+	u8 *prevhdr;
+	unsigned int hlen;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	int hroom;
+	int troom;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct ip6_fraglist_iter {
+	struct ipv6hdr *tmp_hdr;
+	struct sk_buff *frag;
+	int offset;
+	unsigned int hlen;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct hop_jumbo_hdr {
+	u8 nexthdr;
+	u8 hdrlen;
+	u8 tlv_type;
+	u8 tlv_len;
+	__be32 jumbo_payload_len;
+};
+
+struct ip6_ra_chain {
+	struct ip6_ra_chain *next;
+	struct sock *sk;
+	int sel;
+	void (*destructor)(struct sock *);
+};
+
+struct ipcm6_cookie {
+	struct sockcm_cookie sockc;
+	__s16 hlimit;
+	__s16 tclass;
+	__u16 gso_size;
+	__s8 dontfrag;
+	struct ipv6_txoptions *opt;
+};
+
+struct inet6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	unsigned int flags;
+};
+
+enum {
+	INET6_IFADDR_STATE_PREDAD = 0,
+	INET6_IFADDR_STATE_DAD = 1,
+	INET6_IFADDR_STATE_POSTDAD = 2,
+	INET6_IFADDR_STATE_ERRDAD = 3,
+	INET6_IFADDR_STATE_DEAD = 4,
+};
+
+enum {
+	IPV6_SADDR_RULE_INIT = 0,
+	IPV6_SADDR_RULE_LOCAL = 1,
+	IPV6_SADDR_RULE_SCOPE = 2,
+	IPV6_SADDR_RULE_PREFERRED = 3,
+	IPV6_SADDR_RULE_HOA = 4,
+	IPV6_SADDR_RULE_OIF = 5,
+	IPV6_SADDR_RULE_LABEL = 6,
+	IPV6_SADDR_RULE_PRIVACY = 7,
+	IPV6_SADDR_RULE_ORCHID = 8,
+	IPV6_SADDR_RULE_PREFIX = 9,
+	IPV6_SADDR_RULE_NOT_OPTIMISTIC = 10,
+	IPV6_SADDR_RULE_MAX = 11,
+};
+
+enum {
+	DAD_PROCESS = 0,
+	DAD_BEGIN = 1,
+	DAD_ABORT = 2,
+};
+
+enum cleanup_prefix_rt_t {
+	CLEANUP_PREFIX_RT_NOP = 0,
+	CLEANUP_PREFIX_RT_DEL = 1,
+	CLEANUP_PREFIX_RT_EXPIRE = 2,
+};
+
+enum {
+	DEVCONF_FORWARDING = 0,
+	DEVCONF_HOPLIMIT = 1,
+	DEVCONF_MTU6 = 2,
+	DEVCONF_ACCEPT_RA = 3,
+	DEVCONF_ACCEPT_REDIRECTS = 4,
+	DEVCONF_AUTOCONF = 5,
+	DEVCONF_DAD_TRANSMITS = 6,
+	DEVCONF_RTR_SOLICITS = 7,
+	DEVCONF_RTR_SOLICIT_INTERVAL = 8,
+	DEVCONF_RTR_SOLICIT_DELAY = 9,
+	DEVCONF_USE_TEMPADDR = 10,
+	DEVCONF_TEMP_VALID_LFT = 11,
+	DEVCONF_TEMP_PREFERED_LFT = 12,
+	DEVCONF_REGEN_MAX_RETRY = 13,
+	DEVCONF_MAX_DESYNC_FACTOR = 14,
+	DEVCONF_MAX_ADDRESSES = 15,
+	DEVCONF_FORCE_MLD_VERSION = 16,
+	DEVCONF_ACCEPT_RA_DEFRTR = 17,
+	DEVCONF_ACCEPT_RA_PINFO = 18,
+	DEVCONF_ACCEPT_RA_RTR_PREF = 19,
+	DEVCONF_RTR_PROBE_INTERVAL = 20,
+	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,
+	DEVCONF_PROXY_NDP = 22,
+	DEVCONF_OPTIMISTIC_DAD = 23,
+	DEVCONF_ACCEPT_SOURCE_ROUTE = 24,
+	DEVCONF_MC_FORWARDING = 25,
+	DEVCONF_DISABLE_IPV6 = 26,
+	DEVCONF_ACCEPT_DAD = 27,
+	DEVCONF_FORCE_TLLAO = 28,
+	DEVCONF_NDISC_NOTIFY = 29,
+	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,
+	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,
+	DEVCONF_SUPPRESS_FRAG_NDISC = 32,
+	DEVCONF_ACCEPT_RA_FROM_LOCAL = 33,
+	DEVCONF_USE_OPTIMISTIC = 34,
+	DEVCONF_ACCEPT_RA_MTU = 35,
+	DEVCONF_STABLE_SECRET = 36,
+	DEVCONF_USE_OIF_ADDRS_ONLY = 37,
+	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,
+	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,
+	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,
+	DEVCONF_DROP_UNSOLICITED_NA = 41,
+	DEVCONF_KEEP_ADDR_ON_DOWN = 42,
+	DEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,
+	DEVCONF_SEG6_ENABLED = 44,
+	DEVCONF_SEG6_REQUIRE_HMAC = 45,
+	DEVCONF_ENHANCED_DAD = 46,
+	DEVCONF_ADDR_GEN_MODE = 47,
+	DEVCONF_DISABLE_POLICY = 48,
+	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
+	DEVCONF_NDISC_TCLASS = 50,
+	DEVCONF_RPL_SEG_ENABLED = 51,
+	DEVCONF_RA_DEFRTR_METRIC = 52,
+	DEVCONF_IOAM6_ENABLED = 53,
+	DEVCONF_IOAM6_ID = 54,
+	DEVCONF_IOAM6_ID_WIDE = 55,
+	DEVCONF_NDISC_EVICT_NOCARRIER = 56,
+	DEVCONF_ACCEPT_UNTRACKED_NA = 57,
+	DEVCONF_ACCEPT_RA_MIN_LFT = 58,
+	DEVCONF_MAX = 59,
+};
+
+enum {
+	IFLA_INET6_UNSPEC = 0,
+	IFLA_INET6_FLAGS = 1,
+	IFLA_INET6_CONF = 2,
+	IFLA_INET6_STATS = 3,
+	IFLA_INET6_MCAST = 4,
+	IFLA_INET6_CACHEINFO = 5,
+	IFLA_INET6_ICMP6STATS = 6,
+	IFLA_INET6_TOKEN = 7,
+	IFLA_INET6_ADDR_GEN_MODE = 8,
+	IFLA_INET6_RA_MTU = 9,
+	__IFLA_INET6_MAX = 10,
+};
+
+enum {
+	PREFIX_UNSPEC = 0,
+	PREFIX_ADDRESS = 1,
+	PREFIX_CACHEINFO = 2,
+	__PREFIX_MAX = 3,
+};
+
+enum addr_type_t {
+	UNICAST_ADDR = 0,
+	MULTICAST_ADDR = 1,
+	ANYCAST_ADDR = 2,
+};
+
+union fwnet_hwaddr {
+	u8 u[16];
+	struct {
+		__be64 uniq_id;
+		u8 max_rec;
+		u8 sspd;
+		u8 fifo[6];
+	} uc;
+};
+
+struct prefix_cacheinfo {
+	__u32 preferred_time;
+	__u32 valid_time;
+};
+
+struct prefixmsg {
+	unsigned char prefix_family;
+	unsigned char prefix_pad1;
+	unsigned short prefix_pad2;
+	int prefix_ifindex;
+	unsigned char prefix_type;
+	unsigned char prefix_len;
+	unsigned char prefix_flags;
+	unsigned char prefix_pad3;
+};
+
+struct in6_ifreq {
+	struct in6_addr ifr6_addr;
+	__u32 ifr6_prefixlen;
+	int ifr6_ifindex;
+};
+
+struct if6_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	int offset;
+};
+
+struct inet6_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+	enum addr_type_t type;
+};
+
+struct ipv6_saddr_score {
+	int rule;
+	int addr_type;
+	struct inet6_ifaddr *ifa;
+	unsigned long scorebits[1];
+	int scopedist;
+	int matchlen;
+};
+
+struct ipv6_saddr_dst {
+	const struct in6_addr *addr;
+	int ifindex;
+	int scope;
+	int label;
+	unsigned int prefs;
+};
+
+struct ifa6_config {
+	const struct in6_addr *pfx;
+	unsigned int plen;
+	u8 ifa_proto;
+	const struct in6_addr *peer_pfx;
+	u32 rt_priority;
+	u32 ifa_flags;
+	u32 preferred_lft;
+	u32 valid_lft;
+	u16 scope;
+};
+
+struct in6_validator_info {
+	struct in6_addr i6vi_addr;
+	struct inet6_dev *i6vi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct ifla_cacheinfo {
+	__u32 max_reasm_len;
+	__u32 tstamp;
+	__u32 reachable_time;
+	__u32 retrans_time;
+};
+
+struct ip6addrlbl_init_table {
+	const struct in6_addr *prefix;
+	int prefixlen;
+	u32 label;
+};
+
+enum {
+	IFAL_ADDRESS = 1,
+	IFAL_LABEL = 2,
+	__IFAL_MAX = 3,
+};
+
+struct ip6addrlbl_entry {
+	struct in6_addr prefix;
+	int prefixlen;
+	int ifindex;
+	int addrtype;
+	u32 label;
+	struct hlist_node list;
+	struct callback_head rcu;
+};
+
+struct ifaddrlblmsg {
+	__u8 ifal_family;
+	__u8 __ifal_reserved;
+	__u8 ifal_prefixlen;
+	__u8 ifal_flags;
+	__u32 ifal_index;
+	__u32 ifal_seq;
+};
+
+typedef void (*btf_trace_fib6_table_lookup)(void *, const struct net *, const struct fib6_result *, struct fib6_table *, const struct flowi6 *);
+
+enum rt6_nud_state {
+	RT6_NUD_FAIL_HARD = -3,
+	RT6_NUD_FAIL_PROBE = -2,
+	RT6_NUD_FAIL_DO_RR = -1,
+	RT6_NUD_SUCCEED = 1,
+};
+
+struct route_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	__u8 reserved_l: 3;
+	__u8 route_pref: 2;
+	__u8 reserved_h: 3;
+	__be32 lifetime;
+	__u8 prefix[0];
+};
+
+struct rt6_rtnl_dump_arg {
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct net *net;
+	struct fib_dump_filter filter;
+};
+
+struct trace_event_raw_fib6_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[16];
+	__u8 dst[16];
+	u16 sport;
+	u16 dport;
+	u8 proto;
+	u8 rt_type;
+	char name[16];
+	__u8 gw[16];
+	char __data[0];
+};
+
+struct rt6_exception {
+	struct hlist_node hlist;
+	struct rt6_info *rt6i;
+	unsigned long stamp;
+	struct callback_head rcu;
+};
+
+struct __rt6_probe_work {
+	struct work_struct work;
+	struct in6_addr target;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+};
+
+struct ip6rd_flowi {
+	struct flowi6 fl6;
+	struct in6_addr gateway;
+};
+
+struct arg_dev_net_ip {
+	struct net *net;
+	struct in6_addr *addr;
+};
+
+struct rt6_mtu_change_arg {
+	struct net_device *dev;
+	unsigned int mtu;
+	struct fib6_info *f6i;
+};
+
+struct rt6_nh {
+	struct fib6_info *fib6_info;
+	struct fib6_config r_cfg;
+	struct list_head next;
+};
+
+typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
+
+struct fib6_nh_dm_arg {
+	struct net *net;
+	const struct in6_addr *saddr;
+	int oif;
+	int flags;
+	struct fib6_nh *nh;
+};
+
+struct fib6_gc_args {
+	int timeout;
+	int more;
+};
+
+struct fib6_nh_match_arg {
+	const struct net_device *dev;
+	const struct in6_addr *gw;
+	struct fib6_nh *match;
+};
+
+struct fib6_nh_del_cached_rt_arg {
+	struct fib6_config *cfg;
+	struct fib6_info *f6i;
+};
+
+struct arg_netdev_event {
+	const struct net_device *dev;
+	union {
+		unsigned char nh_flags;
+		unsigned long event;
+	};
+};
+
+struct trace_event_data_offsets_fib6_table_lookup {};
+
+struct fib6_nh_age_excptn_arg {
+	struct fib6_gc_args *gc_args;
+	unsigned long now;
+};
+
+struct netevent_redirect {
+	struct dst_entry *old;
+	struct dst_entry *new;
+	struct neighbour *neigh;
+	const void *daddr;
+};
+
+struct fib6_nh_exception_dump_walker {
+	struct rt6_rtnl_dump_arg *dump;
+	struct fib6_info *rt;
+	unsigned int flags;
+	unsigned int skip;
+	unsigned int count;
+};
+
+struct fib6_nh_frl_arg {
+	u32 flags;
+	int oif;
+	int strict;
+	int *mpri;
+	bool *do_rr;
+	struct fib6_nh *nh;
+};
+
+struct fib6_nh_rd_arg {
+	struct fib6_result *res;
+	struct flowi6 *fl6;
+	const struct in6_addr *gw;
+	struct rt6_info **ret;
+};
+
+struct fib6_nh_excptn_arg {
+	struct rt6_info *rt;
+	int plen;
+};
+
+enum fib6_walk_state {
+	FWS_L = 0,
+	FWS_R = 1,
+	FWS_C = 2,
+	FWS_U = 3,
+};
+
+enum {
+	FIB6_NO_SERNUM_CHANGE = 0,
+};
+
+struct fib6_walker {
+	struct list_head lh;
+	struct fib6_node *root;
+	struct fib6_node *node;
+	struct fib6_info *leaf;
+	enum fib6_walk_state state;
+	unsigned int skip;
+	unsigned int count;
+	unsigned int skip_in_node;
+	int (*func)(struct fib6_walker *);
+	void *args;
+};
+
+struct fib6_cleaner {
+	struct fib6_walker w;
+	struct net *net;
+	int (*func)(struct fib6_info *, void *);
+	int sernum;
+	void *arg;
+	bool skip_notify;
+};
+
+struct fib6_dump_arg {
+	struct net *net;
+	struct notifier_block *nb;
+	struct netlink_ext_ack *extack;
+};
+
+struct fib6_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct fib6_info *rt;
+	unsigned int nsiblings;
+};
+
+struct lookup_args {
+	int offset;
+	const struct in6_addr *addr;
+};
+
+struct bpf_iter__ipv6_route {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct fib6_info *rt;
+	};
+};
+
+struct ipv6_route_iter {
+	struct seq_net_private p;
+	struct fib6_walker w;
+	loff_t skip;
+	struct fib6_table *tbl;
+	int sernum;
+};
+
+struct fib6_nh_pcpu_arg {
+	struct fib6_info *from;
+	const struct fib6_table *table;
+};
+
+struct ipv6_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u8 first_segment;
+	__u8 flags;
+	__u16 tag;
+	struct in6_addr segments[0];
+};
+
+struct in6_flowlabel_req {
+	struct in6_addr flr_dst;
+	__be32 flr_label;
+	__u8 flr_action;
+	__u8 flr_share;
+	__u16 flr_flags;
+	__u16 flr_expires;
+	__u16 flr_linger;
+	__u32 __flr_pad;
+};
+
+struct ipv6_mreq {
+	struct in6_addr ipv6mr_multiaddr;
+	int ipv6mr_ifindex;
+};
+
+struct ip6_mtuinfo {
+	struct sockaddr_in6 ip6m_addr;
+	__u32 ip6m_mtu;
+};
+
+enum {
+	NDUSEROPT_UNSPEC = 0,
+	NDUSEROPT_SRCADDR = 1,
+	__NDUSEROPT_MAX = 2,
+};
+
+struct nd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	__u8 opt[0];
+};
+
+struct rs_msg {
+	struct icmp6hdr icmph;
+	__u8 opt[0];
+};
+
+struct ra_msg {
+	struct icmp6hdr icmph;
+	__be32 reachable_time;
+	__be32 retrans_timer;
+};
+
+struct nduseroptmsg {
+	unsigned char nduseropt_family;
+	unsigned char nduseropt_pad1;
+	unsigned short nduseropt_opts_len;
+	int nduseropt_ifindex;
+	__u8 nduseropt_icmp_type;
+	__u8 nduseropt_icmp_code;
+	unsigned short nduseropt_pad2;
+	unsigned int nduseropt_pad3;
+};
+
+typedef u32 inet6_ehashfn_t(const struct net *, const struct in6_addr *, const u16, const struct in6_addr *, const __be16);
+
+typedef int mh_filter_t(struct sock *, struct sk_buff *);
+
+struct icmp6_filter {
+	__u32 data[8];
+};
+
+struct raw6_sock {
+	struct inet_sock inet;
+	__u32 checksum;
+	__u32 offset;
+	struct icmp6_filter filter;
+	__u32 ip6mr_table;
+	struct ipv6_pinfo inet6;
+};
+
+struct raw6_frag_vec {
+	struct msghdr *msg;
+	int hlen;
+	char c[4];
+};
+
+struct icmp6_err {
+	int err;
+	int fatal;
+};
+
+struct ipv6_destopt_hao {
+	__u8 type;
+	__u8 length;
+	struct in6_addr addr;
+} __attribute__((packed));
+
+struct icmpv6_msg {
+	struct sk_buff *skb;
+	int offset;
+	uint8_t type;
+};
+
+struct mld2_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	struct in6_addr grec_mca;
+	struct in6_addr grec_src[0];
+};
+
+struct mld2_report {
+	struct icmp6hdr mld2r_hdr;
+	struct mld2_grec mld2r_grec[0];
+};
+
+struct mld_msg {
+	struct icmp6hdr mld_hdr;
+	struct in6_addr mld_mca;
+};
+
+struct mld2_query {
+	struct icmp6hdr mld2q_hdr;
+	struct in6_addr mld2q_mca;
+	__u8 mld2q_qrv: 3;
+	__u8 mld2q_suppress: 1;
+	__u8 mld2q_resv2: 4;
+	__u8 mld2q_qqic;
+	__be16 mld2q_nsrcs;
+	struct in6_addr mld2q_srcs[0];
+};
+
+struct igmp6_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+struct igmp6_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 *im;
+};
+
+enum ip6_defrag_users {
+	IP6_DEFRAG_LOCAL_DELIVER = 0,
+	IP6_DEFRAG_CONNTRACK_IN = 1,
+	__IP6_DEFRAG_CONNTRACK_IN = 65536,
+	IP6_DEFRAG_CONNTRACK_OUT = 65537,
+	__IP6_DEFRAG_CONNTRACK_OUT = 131072,
+	IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 131073,
+	__IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 196608,
+};
+
+struct frag_queue {
+	struct inet_frag_queue q;
+	int iif;
+	__u16 nhoffset;
+	u8 ecn;
+};
+
+struct rt0_hdr {
+	struct ipv6_rt_hdr rt_hdr;
+	__u32 reserved;
+	struct in6_addr addr[0];
+};
+
+struct ipv6_rpl_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u32 cmpre: 4;
+	__u32 cmpri: 4;
+	__u32 reserved: 4;
+	__u32 pad: 4;
+	__u32 reserved1: 16;
+	union {
+		struct {
+			struct {} __empty_addr;
+			struct in6_addr addr[0];
+		};
+		struct {
+			struct {} __empty_data;
+			__u8 data[0];
+		};
+	} segments;
+};
+
+struct ioam6_hdr {
+	__u8 opt_type;
+	__u8 opt_len;
+	char: 8;
+	__u8 type;
+};
+
+struct ioam6_trace_hdr {
+	__be16 namespace_id;
+	char: 2;
+	__u8 overflow: 1;
+	__u8 nodelen: 5;
+	__u8 remlen: 7;
+	union {
+		__be32 type_be32;
+		struct {
+			__u32 bit7: 1;
+			__u32 bit6: 1;
+			__u32 bit5: 1;
+			__u32 bit4: 1;
+			__u32 bit3: 1;
+			__u32 bit2: 1;
+			__u32 bit1: 1;
+			__u32 bit0: 1;
+			__u32 bit15: 1;
+			__u32 bit14: 1;
+			__u32 bit13: 1;
+			__u32 bit12: 1;
+			__u32 bit11: 1;
+			__u32 bit10: 1;
+			__u32 bit9: 1;
+			__u32 bit8: 1;
+			__u32 bit23: 1;
+			__u32 bit22: 1;
+			__u32 bit21: 1;
+			__u32 bit20: 1;
+			__u32 bit19: 1;
+			__u32 bit18: 1;
+			__u32 bit17: 1;
+			__u32 bit16: 1;
+		} type;
+	};
+	__u8 data[0];
+};
+
+struct ioam6_schema;
+
+struct ioam6_namespace {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_schema __attribute__((btf_type_tag("rcu"))) *schema;
+	__be16 id;
+	__be32 data;
+	__be64 data_wide;
+};
+
+struct ioam6_schema {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_namespace __attribute__((btf_type_tag("rcu"))) *ns;
+	u32 id;
+	int len;
+	__be32 hdr;
+	u8 data[0];
+};
+
+struct static_key_false_deferred {
+	struct static_key_false key;
+	unsigned long timeout;
+	struct delayed_work work;
+};
+
+struct ip6fl_iter_state {
+	struct seq_net_private p;
+	struct pid_namespace *pid_ns;
+	int bucket;
+};
+
+enum {
+	SEG6_ATTR_UNSPEC = 0,
+	SEG6_ATTR_DST = 1,
+	SEG6_ATTR_DSTLEN = 2,
+	SEG6_ATTR_HMACKEYID = 3,
+	SEG6_ATTR_SECRET = 4,
+	SEG6_ATTR_SECRETLEN = 5,
+	SEG6_ATTR_ALGID = 6,
+	SEG6_ATTR_HMACINFO = 7,
+	__SEG6_ATTR_MAX = 8,
+};
+
+enum {
+	SEG6_CMD_UNSPEC = 0,
+	SEG6_CMD_SETHMAC = 1,
+	SEG6_CMD_DUMPHMAC = 2,
+	SEG6_CMD_SET_TUNSRC = 3,
+	SEG6_CMD_GET_TUNSRC = 4,
+	__SEG6_CMD_MAX = 5,
+};
+
+struct sr6_tlv {
+	__u8 type;
+	__u8 len;
+	__u8 data[0];
+};
+
+enum {
+	IOAM6_ATTR_UNSPEC = 0,
+	IOAM6_ATTR_NS_ID = 1,
+	IOAM6_ATTR_NS_DATA = 2,
+	IOAM6_ATTR_NS_DATA_WIDE = 3,
+	IOAM6_ATTR_SC_ID = 4,
+	IOAM6_ATTR_SC_DATA = 5,
+	IOAM6_ATTR_SC_NONE = 6,
+	IOAM6_ATTR_PAD = 7,
+	__IOAM6_ATTR_MAX = 8,
+};
+
+enum {
+	IOAM6_CMD_UNSPEC = 0,
+	IOAM6_CMD_ADD_NAMESPACE = 1,
+	IOAM6_CMD_DEL_NAMESPACE = 2,
+	IOAM6_CMD_DUMP_NAMESPACES = 3,
+	IOAM6_CMD_ADD_SCHEMA = 4,
+	IOAM6_CMD_DEL_SCHEMA = 5,
+	IOAM6_CMD_DUMP_SCHEMAS = 6,
+	IOAM6_CMD_NS_SET_SCHEMA = 7,
+	__IOAM6_CMD_MAX = 8,
+};
+
+struct mfc6_cache_cmp_arg {
+	struct in6_addr mf6c_mcastgrp;
+	struct in6_addr mf6c_origin;
+};
+
+enum {
+	IP6MRA_CREPORT_UNSPEC = 0,
+	IP6MRA_CREPORT_MSGTYPE = 1,
+	IP6MRA_CREPORT_MIF_ID = 2,
+	IP6MRA_CREPORT_SRC_ADDR = 3,
+	IP6MRA_CREPORT_DST_ADDR = 4,
+	IP6MRA_CREPORT_PKT = 5,
+	__IP6MRA_CREPORT_MAX = 6,
+};
+
+struct mfc6_cache {
+	struct mr_mfc _c;
+	union {
+		struct {
+			struct in6_addr mf6c_mcastgrp;
+			struct in6_addr mf6c_origin;
+		};
+		struct mfc6_cache_cmp_arg cmparg;
+	};
+};
+
+struct mrt6msg {
+	__u8 im6_mbz;
+	__u8 im6_msgtype;
+	__u16 im6_mif;
+	__u32 im6_pad;
+	struct in6_addr im6_src;
+	struct in6_addr im6_dst;
+};
+
+struct ip6mr_result {
+	struct mr_table *mrt;
+};
+
+typedef __u32 if_mask;
+
+struct if_set {
+	if_mask ifs_bits[8];
+};
+
+struct mf6cctl {
+	struct sockaddr_in6 mf6cc_origin;
+	struct sockaddr_in6 mf6cc_mcastgrp;
+	mifi_t mf6cc_parent;
+	struct if_set mf6cc_ifset;
+};
+
+struct mif6ctl {
+	mifi_t mif6c_mifi;
+	unsigned char mif6c_flags;
+	unsigned char vifc_threshold;
+	__u16 mif6c_pifi;
+	unsigned int vifc_rate_limit;
+};
+
+struct compat_sioc_sg_req6 {
+	struct sockaddr_in6 src;
+	struct sockaddr_in6 grp;
+	compat_ulong_t pktcnt;
+	compat_ulong_t bytecnt;
+	compat_ulong_t wrong_if;
+};
+
+struct compat_sioc_mif_req6 {
+	mifi_t mifi;
+	compat_ulong_t icount;
+	compat_ulong_t ocount;
+	compat_ulong_t ibytes;
+	compat_ulong_t obytes;
+};
+
+struct br_input_skb_cb {
+	struct net_device *brdev;
+	u16 frag_max_size;
+	u8 igmp;
+	u8 mrouters_only: 1;
+	u8 proxyarp_replied: 1;
+	u8 src_port_isolated: 1;
+	u8 promisc: 1;
+	u32 backup_nhid;
+};
+
+struct nf_bridge_frag_data;
+
+struct fib6_rule {
+	struct fib_rule common;
+	struct rt6key src;
+	struct rt6key dst;
+	dscp_t dscp;
+};
+
+struct xfrm6_tunnel_spi {
+	struct hlist_node list_byaddr;
+	struct hlist_node list_byspi;
+	xfrm_address_t addr;
+	u32 spi;
+	refcount_t refcnt;
+	struct callback_head callback_head;
+};
+
+struct xfrm6_tunnel_net {
+	struct hlist_head spi_byaddr[256];
+	struct hlist_head spi_byspi[256];
+	u32 spi;
+};
+
+struct mip6_report_rate_limiter {
+	spinlock_t lock;
+	ktime_t stamp;
+	int iif;
+	struct in6_addr src;
+	struct in6_addr dst;
+};
+
+struct rt2_hdr {
+	struct ipv6_rt_hdr rt_hdr;
+	__u32 reserved;
+	struct in6_addr addr;
+};
+
+enum nf_ip_trace_comments___2 {
+	NF_IP6_TRACE_COMMENT_RULE = 0,
+	NF_IP6_TRACE_COMMENT_RETURN = 1,
+	NF_IP6_TRACE_COMMENT_POLICY = 2,
+};
+
+struct ip6t_error {
+	struct ip6t_entry entry;
+	struct xt_error_target target;
+};
+
+struct ip6t_replace {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int num_entries;
+	unsigned int size;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_counters;
+	struct xt_counters __attribute__((btf_type_tag("user"))) *counters;
+	struct ip6t_entry entries[0];
+};
+
+struct ip6t_standard {
+	struct ip6t_entry entry;
+	struct xt_standard_target target;
+};
+
+struct ip6t_getinfo {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_entries;
+	unsigned int size;
+};
+
+struct ip6t_get_entries {
+	char name[32];
+	unsigned int size;
+	struct ip6t_entry entrytable[0];
+};
+
+struct nft_ct_frag6_pernet {
+	struct ctl_table_header *nf_frag_frags_hdr;
+	struct fqdir *fqdir;
+};
+
+enum {
+	XT_RPFILTER_LOOSE = 1,
+	XT_RPFILTER_VALID_MARK = 2,
+	XT_RPFILTER_ACCEPT_LOCAL = 4,
+	XT_RPFILTER_INVERT = 8,
+	XT_RPFILTER_OPTION_MASK = 15,
+};
+
+struct xt_rpfilter_info {
+	__u8 flags;
+};
+
+enum ip6t_reject_with {
+	IP6T_ICMP6_NO_ROUTE = 0,
+	IP6T_ICMP6_ADM_PROHIBITED = 1,
+	IP6T_ICMP6_NOT_NEIGHBOUR = 2,
+	IP6T_ICMP6_ADDR_UNREACH = 3,
+	IP6T_ICMP6_PORT_UNREACH = 4,
+	IP6T_ICMP6_ECHOREPLY = 5,
+	IP6T_TCP_RESET = 6,
+	IP6T_ICMP6_POLICY_FAIL = 7,
+	IP6T_ICMP6_REJECT_ROUTE = 8,
+};
+
+struct ip6t_reject_info {
+	__u32 with;
+};
+
+struct vti6_net {
+	struct net_device *fb_tnl_dev;
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *tnls_r_l[32];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *tnls_wc[1];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) **tnls[2];
+};
+
+struct ip6_tnl_parm2 {
+	char name[16];
+	int link;
+	__u8 proto;
+	__u8 encap_limit;
+	__u8 hop_limit;
+	__be32 flowinfo;
+	__u32 flags;
+	struct in6_addr laddr;
+	struct in6_addr raddr;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+};
+
+struct sit_net {
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *tunnels_r_l[16];
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *tunnels_r[16];
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *tunnels_l[16];
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *tunnels_wc[1];
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) **tunnels[4];
+	struct net_device *fb_tunnel_dev;
+};
+
+struct ip_tunnel_prl {
+	__be32 addr;
+	__u16 flags;
+	__u16 __reserved;
+	__u32 datalen;
+	__u32 __reserved2;
+};
+
+struct ipv6_tlv_tnl_enc_lim {
+	__u8 type;
+	__u8 length;
+	__u8 encap_limit;
+};
+
+struct ipv6_tel_txoption {
+	struct ipv6_txoptions ops;
+	__u8 dst_opt[8];
+};
+
+struct ip6_tnl_net {
+	struct net_device *fb_tnl_dev;
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *tnls_r_l[32];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *tnls_wc[1];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) **tnls[2];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *collect_md_tun;
+};
+
+struct ip6_tnl_parm {
+	char name[16];
+	int link;
+	__u8 proto;
+	__u8 encap_limit;
+	__u8 hop_limit;
+	__be32 flowinfo;
+	__u32 flags;
+	struct in6_addr laddr;
+	struct in6_addr raddr;
+};
+
+struct ip6gre_net {
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *tunnels[128];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *collect_md_tun;
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *collect_md_tun_erspan;
+	struct net_device *fb_tunnel_dev;
+};
+
+enum {
+	IP6_FH_F_FRAG = 1,
+	IP6_FH_F_AUTH = 2,
+	IP6_FH_F_SKIP_RH = 4,
+};
+
+enum tpacket_versions {
+	TPACKET_V1 = 0,
+	TPACKET_V2 = 1,
+	TPACKET_V3 = 2,
+};
+
+enum packet_sock_flags {
+	PACKET_SOCK_ORIGDEV = 0,
+	PACKET_SOCK_AUXDATA = 1,
+	PACKET_SOCK_TX_HAS_OFF = 2,
+	PACKET_SOCK_TP_LOSS = 3,
+	PACKET_SOCK_RUNNING = 4,
+	PACKET_SOCK_PRESSURE = 5,
+	PACKET_SOCK_QDISC_BYPASS = 6,
+};
+
+struct tpacket_stats {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+};
+
+struct tpacket_stats_v3 {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+	unsigned int tp_freeze_q_cnt;
+};
+
+union tpacket_stats_u {
+	struct tpacket_stats stats1;
+	struct tpacket_stats_v3 stats3;
+};
+
+struct pgv;
+
+struct tpacket_kbdq_core {
+	struct pgv *pkbdq;
+	unsigned int feature_req_word;
+	unsigned int hdrlen;
+	unsigned char reset_pending_on_curr_blk;
+	unsigned char delete_blk_timer;
+	unsigned short kactive_blk_num;
+	unsigned short blk_sizeof_priv;
+	unsigned short last_kactive_blk_num;
+	char *pkblk_start;
+	char *pkblk_end;
+	int kblk_size;
+	unsigned int max_frame_len;
+	unsigned int knum_blocks;
+	uint64_t knxt_seq_num;
+	char *prev;
+	char *nxt_offset;
+	struct sk_buff *skb;
+	rwlock_t blk_fill_in_prog_lock;
+	unsigned short retire_blk_tov;
+	unsigned short version;
+	unsigned long tov_in_jiffies;
+	struct timer_list retire_blk_timer;
+};
+
+struct packet_ring_buffer {
+	struct pgv *pg_vec;
+	unsigned int head;
+	unsigned int frames_per_block;
+	unsigned int frame_size;
+	unsigned int frame_max;
+	unsigned int pg_vec_order;
+	unsigned int pg_vec_pages;
+	unsigned int pg_vec_len;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *pending_refcnt;
+	union {
+		unsigned long *rx_owner_map;
+		struct tpacket_kbdq_core prb_bdqc;
+	};
+};
+
+struct packet_fanout;
+
+struct packet_rollover;
+
+struct packet_mclist;
+
+struct packet_sock {
+	struct sock sk;
+	struct packet_fanout *fanout;
+	union tpacket_stats_u stats;
+	struct packet_ring_buffer rx_ring;
+	struct packet_ring_buffer tx_ring;
+	int copy_thresh;
+	spinlock_t bind_lock;
+	struct mutex pg_vec_lock;
+	unsigned long flags;
+	int ifindex;
+	u8 vnet_hdr_sz;
+	__be16 num;
+	struct packet_rollover *rollover;
+	struct packet_mclist *mclist;
+	atomic_long_t mapped;
+	enum tpacket_versions tp_version;
+	unsigned int tp_hdrlen;
+	unsigned int tp_reserve;
+	unsigned int tp_tstamp;
+	struct completion skb_completion;
+	struct net_device __attribute__((btf_type_tag("rcu"))) *cached_dev;
+	long: 64;
+	struct packet_type prot_hook;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_t tp_drops;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct packet_fanout {
+	possible_net_t net;
+	unsigned int num_members;
+	u32 max_num_members;
+	u16 id;
+	u8 type;
+	u8 flags;
+	union {
+		atomic_t rr_cur;
+		struct bpf_prog __attribute__((btf_type_tag("rcu"))) *bpf_prog;
+	};
+	struct list_head list;
+	spinlock_t lock;
+	refcount_t sk_ref;
+	long: 64;
+	struct packet_type prot_hook;
+	struct sock __attribute__((btf_type_tag("rcu"))) *arr[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct pgv {
+	char *buffer;
+};
+
+struct packet_rollover {
+	int sock;
+	atomic_long_t num;
+	atomic_long_t num_huge;
+	atomic_long_t num_failed;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 history[16];
+};
+
+struct packet_mclist {
+	struct packet_mclist *next;
+	int ifindex;
+	int count;
+	unsigned short type;
+	unsigned short alen;
+	unsigned char addr[32];
+};
+
+struct tpacket_bd_ts {
+	unsigned int ts_sec;
+	union {
+		unsigned int ts_usec;
+		unsigned int ts_nsec;
+	};
+};
+
+struct tpacket_hdr_v1 {
+	__u32 block_status;
+	__u32 num_pkts;
+	__u32 offset_to_first_pkt;
+	__u32 blk_len;
+	__u64 seq_num;
+	struct tpacket_bd_ts ts_first_pkt;
+	struct tpacket_bd_ts ts_last_pkt;
+};
+
+union tpacket_bd_header_u {
+	struct tpacket_hdr_v1 bh1;
+};
+
+struct tpacket_block_desc {
+	__u32 version;
+	__u32 offset_to_priv;
+	union tpacket_bd_header_u hdr;
+};
+
+struct tpacket_hdr_variant1 {
+	__u32 tp_rxhash;
+	__u32 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u16 tp_padding;
+};
+
+struct tpacket3_hdr {
+	__u32 tp_next_offset;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u32 tp_snaplen;
+	__u32 tp_len;
+	__u32 tp_status;
+	__u16 tp_mac;
+	__u16 tp_net;
+	union {
+		struct tpacket_hdr_variant1 hv1;
+	};
+	__u8 tp_padding[8];
+};
+
+struct sockaddr_ll {
+	unsigned short sll_family;
+	__be16 sll_protocol;
+	int sll_ifindex;
+	unsigned short sll_hatype;
+	unsigned char sll_pkttype;
+	unsigned char sll_halen;
+	unsigned char sll_addr[8];
+};
+
+struct sockaddr_pkt {
+	unsigned short spkt_family;
+	unsigned char spkt_device[14];
+	__be16 spkt_protocol;
+};
+
+struct packet_skb_cb {
+	union {
+		struct sockaddr_pkt pkt;
+		union {
+			unsigned int origlen;
+			struct sockaddr_ll ll;
+		};
+	} sa;
+};
+
+struct tpacket_hdr;
+
+struct tpacket2_hdr;
+
+union tpacket_uhdr {
+	struct tpacket_hdr *h1;
+	struct tpacket2_hdr *h2;
+	struct tpacket3_hdr *h3;
+	void *raw;
+};
+
+struct tpacket_hdr {
+	unsigned long tp_status;
+	unsigned int tp_len;
+	unsigned int tp_snaplen;
+	unsigned short tp_mac;
+	unsigned short tp_net;
+	unsigned int tp_sec;
+	unsigned int tp_usec;
+};
+
+struct tpacket2_hdr {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u8 tp_padding[4];
+};
+
+struct virtio_net_hdr_mrg_rxbuf {
+	struct virtio_net_hdr hdr;
+	__virtio16 num_buffers;
+};
+
+struct tpacket_req {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+};
+
+struct tpacket_req3 {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+	unsigned int tp_retire_blk_tov;
+	unsigned int tp_sizeof_priv;
+	unsigned int tp_feature_req_word;
+};
+
+union tpacket_req_u {
+	struct tpacket_req req;
+	struct tpacket_req3 req3;
+};
+
+struct fanout_args {
+	__u16 id;
+	__u16 type_flags;
+	__u32 max_num_members;
+};
+
+struct packet_mreq_max {
+	int mr_ifindex;
+	unsigned short mr_type;
+	unsigned short mr_alen;
+	unsigned char mr_address[32];
+};
+
+struct tpacket_rollover_stats {
+	__u64 tp_all;
+	__u64 tp_huge;
+	__u64 tp_failed;
+};
+
+struct tpacket_auxdata {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+};
+
+struct sadb_msg;
+
+typedef int (*pfkey_handler)(struct sock *, struct sk_buff *, const struct sadb_msg *, void * const *);
+
+struct sadb_msg {
+	__u8 sadb_msg_version;
+	__u8 sadb_msg_type;
+	__u8 sadb_msg_errno;
+	__u8 sadb_msg_satype;
+	__u16 sadb_msg_len;
+	__u16 sadb_msg_reserved;
+	__u32 sadb_msg_seq;
+	__u32 sadb_msg_pid;
+};
+
+enum {
+	IPSEC_MODE_ANY = 0,
+	IPSEC_MODE_TRANSPORT = 1,
+	IPSEC_MODE_TUNNEL = 2,
+	IPSEC_MODE_BEET = 3,
+};
+
+enum {
+	IPSEC_POLICY_DISCARD = 0,
+	IPSEC_POLICY_NONE = 1,
+	IPSEC_POLICY_IPSEC = 2,
+	IPSEC_POLICY_ENTRUST = 3,
+	IPSEC_POLICY_BYPASS = 4,
+};
+
+enum {
+	IPSEC_DIR_ANY = 0,
+	IPSEC_DIR_INBOUND = 1,
+	IPSEC_DIR_OUTBOUND = 2,
+	IPSEC_DIR_FWD = 3,
+	IPSEC_DIR_MAX = 4,
+	IPSEC_DIR_INVALID = 5,
+};
+
+enum {
+	IPSEC_LEVEL_DEFAULT = 0,
+	IPSEC_LEVEL_USE = 1,
+	IPSEC_LEVEL_REQUIRE = 2,
+	IPSEC_LEVEL_UNIQUE = 3,
+};
+
+struct pfkey_sock {
+	struct sock sk;
+	int registered;
+	int promisc;
+	struct {
+		uint8_t msg_version;
+		uint32_t msg_portid;
+		int (*dump)(struct pfkey_sock *);
+		void (*done)(struct pfkey_sock *);
+		union {
+			struct xfrm_policy_walk policy;
+			struct xfrm_state_walk state;
+		} u;
+		struct sk_buff *skb;
+	} dump;
+	struct mutex dump_lock;
+};
+
+struct sadb_x_policy {
+	__u16 sadb_x_policy_len;
+	__u16 sadb_x_policy_exttype;
+	__u16 sadb_x_policy_type;
+	__u8 sadb_x_policy_dir;
+	__u8 sadb_x_policy_reserved;
+	__u32 sadb_x_policy_id;
+	__u32 sadb_x_policy_priority;
+};
+
+struct sadb_x_sec_ctx {
+	__u16 sadb_x_sec_len;
+	__u16 sadb_x_sec_exttype;
+	__u8 sadb_x_ctx_alg;
+	__u8 sadb_x_ctx_doi;
+	__u16 sadb_x_ctx_len;
+};
+
+struct sadb_ext {
+	__u16 sadb_ext_len;
+	__u16 sadb_ext_type;
+};
+
+struct sadb_key {
+	__u16 sadb_key_len;
+	__u16 sadb_key_exttype;
+	__u16 sadb_key_bits;
+	__u16 sadb_key_reserved;
+};
+
+struct sadb_address {
+	__u16 sadb_address_len;
+	__u16 sadb_address_exttype;
+	__u8 sadb_address_proto;
+	__u8 sadb_address_prefixlen;
+	__u16 sadb_address_reserved;
+};
+
+struct sadb_prop {
+	__u16 sadb_prop_len;
+	__u16 sadb_prop_exttype;
+	__u8 sadb_prop_replay;
+	__u8 sadb_prop_reserved[3];
+};
+
+struct sadb_comb {
+	__u8 sadb_comb_auth;
+	__u8 sadb_comb_encrypt;
+	__u16 sadb_comb_flags;
+	__u16 sadb_comb_auth_minbits;
+	__u16 sadb_comb_auth_maxbits;
+	__u16 sadb_comb_encrypt_minbits;
+	__u16 sadb_comb_encrypt_maxbits;
+	__u32 sadb_comb_reserved;
+	__u32 sadb_comb_soft_allocations;
+	__u32 sadb_comb_hard_allocations;
+	__u64 sadb_comb_soft_bytes;
+	__u64 sadb_comb_hard_bytes;
+	__u64 sadb_comb_soft_addtime;
+	__u64 sadb_comb_hard_addtime;
+	__u64 sadb_comb_soft_usetime;
+	__u64 sadb_comb_hard_usetime;
+};
+
+struct sadb_x_ipsecrequest {
+	__u16 sadb_x_ipsecrequest_len;
+	__u16 sadb_x_ipsecrequest_proto;
+	__u8 sadb_x_ipsecrequest_mode;
+	__u8 sadb_x_ipsecrequest_level;
+	__u16 sadb_x_ipsecrequest_reserved1;
+	__u32 sadb_x_ipsecrequest_reqid;
+	__u32 sadb_x_ipsecrequest_reserved2;
+};
+
+struct netns_pfkey {
+	struct hlist_head table;
+	atomic_t socks_nr;
+};
+
+struct sadb_sa {
+	__u16 sadb_sa_len;
+	__u16 sadb_sa_exttype;
+	__be32 sadb_sa_spi;
+	__u8 sadb_sa_replay;
+	__u8 sadb_sa_state;
+	__u8 sadb_sa_auth;
+	__u8 sadb_sa_encrypt;
+	__u32 sadb_sa_flags;
+};
+
+struct sadb_lifetime {
+	__u16 sadb_lifetime_len;
+	__u16 sadb_lifetime_exttype;
+	__u32 sadb_lifetime_allocations;
+	__u64 sadb_lifetime_bytes;
+	__u64 sadb_lifetime_addtime;
+	__u64 sadb_lifetime_usetime;
+};
+
+struct sadb_x_sa2 {
+	__u16 sadb_x_sa2_len;
+	__u16 sadb_x_sa2_exttype;
+	__u8 sadb_x_sa2_mode;
+	__u8 sadb_x_sa2_reserved1;
+	__u16 sadb_x_sa2_reserved2;
+	__u32 sadb_x_sa2_sequence;
+	__u32 sadb_x_sa2_reqid;
+};
+
+struct sadb_x_nat_t_type {
+	__u16 sadb_x_nat_t_type_len;
+	__u16 sadb_x_nat_t_type_exttype;
+	__u8 sadb_x_nat_t_type_type;
+	__u8 sadb_x_nat_t_type_reserved[3];
+};
+
+struct sadb_x_nat_t_port {
+	__u16 sadb_x_nat_t_port_len;
+	__u16 sadb_x_nat_t_port_exttype;
+	__be16 sadb_x_nat_t_port_port;
+	__u16 sadb_x_nat_t_port_reserved;
+};
+
+struct sadb_supported {
+	__u16 sadb_supported_len;
+	__u16 sadb_supported_exttype;
+	__u32 sadb_supported_reserved;
+};
+
+struct sadb_spirange {
+	__u16 sadb_spirange_len;
+	__u16 sadb_spirange_exttype;
+	__u32 sadb_spirange_min;
+	__u32 sadb_spirange_max;
+	__u32 sadb_spirange_reserved;
+};
+
+struct sadb_x_filter {
+	__u16 sadb_x_filter_len;
+	__u16 sadb_x_filter_exttype;
+	__u32 sadb_x_filter_saddr[4];
+	__u32 sadb_x_filter_daddr[4];
+	__u16 sadb_x_filter_family;
+	__u8 sadb_x_filter_splen;
+	__u8 sadb_x_filter_dplen;
+};
+
+enum br_boolopt_id {
+	BR_BOOLOPT_NO_LL_LEARN = 0,
+	BR_BOOLOPT_MCAST_VLAN_SNOOPING = 1,
+	BR_BOOLOPT_MST_ENABLE = 2,
+	BR_BOOLOPT_MAX = 3,
+};
+
+enum net_bridge_opts {
+	BROPT_VLAN_ENABLED = 0,
+	BROPT_VLAN_STATS_ENABLED = 1,
+	BROPT_NF_CALL_IPTABLES = 2,
+	BROPT_NF_CALL_IP6TABLES = 3,
+	BROPT_NF_CALL_ARPTABLES = 4,
+	BROPT_GROUP_ADDR_SET = 5,
+	BROPT_MULTICAST_ENABLED = 6,
+	BROPT_MULTICAST_QUERY_USE_IFADDR = 7,
+	BROPT_MULTICAST_STATS_ENABLED = 8,
+	BROPT_HAS_IPV6_ADDR = 9,
+	BROPT_NEIGH_SUPPRESS_ENABLED = 10,
+	BROPT_MTU_SET_BY_USER = 11,
+	BROPT_VLAN_STATS_PER_PORT = 12,
+	BROPT_NO_LL_LEARN = 13,
+	BROPT_VLAN_BRIDGE_BINDING = 14,
+	BROPT_MCAST_VLAN_SNOOPING_ENABLED = 15,
+	BROPT_MST_ENABLED = 16,
+};
+
+enum switchdev_notifier_type {
+	SWITCHDEV_FDB_ADD_TO_BRIDGE = 1,
+	SWITCHDEV_FDB_DEL_TO_BRIDGE = 2,
+	SWITCHDEV_FDB_ADD_TO_DEVICE = 3,
+	SWITCHDEV_FDB_DEL_TO_DEVICE = 4,
+	SWITCHDEV_FDB_OFFLOADED = 5,
+	SWITCHDEV_FDB_FLUSH_TO_BRIDGE = 6,
+	SWITCHDEV_PORT_OBJ_ADD = 7,
+	SWITCHDEV_PORT_OBJ_DEL = 8,
+	SWITCHDEV_PORT_ATTR_SET = 9,
+	SWITCHDEV_VXLAN_FDB_ADD_TO_BRIDGE = 10,
+	SWITCHDEV_VXLAN_FDB_DEL_TO_BRIDGE = 11,
+	SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE = 12,
+	SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE = 13,
+	SWITCHDEV_VXLAN_FDB_OFFLOADED = 14,
+	SWITCHDEV_BRPORT_OFFLOADED = 15,
+	SWITCHDEV_BRPORT_UNOFFLOADED = 16,
+	SWITCHDEV_BRPORT_REPLAY = 17,
+};
+
+struct br_boolopt_multi {
+	__u32 optval;
+	__u32 optmask;
+};
+
+struct nf_br_ops {
+	int (*br_dev_xmit_hook)(struct sk_buff *);
+};
+
+enum br_pkt_type {
+	BR_PKT_UNICAST = 0,
+	BR_PKT_MULTICAST = 1,
+	BR_PKT_BROADCAST = 2,
+};
+
+struct net_bridge_mcast_gc {
+	struct hlist_node gc_node;
+	void (*destroy)(struct net_bridge_mcast_gc *);
+};
+
+struct net_bridge_port_group;
+
+struct net_bridge_mdb_entry {
+	struct rhash_head rhnode;
+	struct net_bridge *br;
+	struct net_bridge_port_group __attribute__((btf_type_tag("rcu"))) *ports;
+	struct br_ip addr;
+	bool host_joined;
+	struct timer_list timer;
+	struct hlist_node mdb_node;
+	struct net_bridge_mcast_gc mcast_gc;
+	struct callback_head rcu;
+};
+
+struct net_bridge_port_group_sg_key {
+	struct net_bridge_port *port;
+	struct br_ip addr;
+};
+
+struct net_bridge_port_group {
+	struct net_bridge_port_group __attribute__((btf_type_tag("rcu"))) *next;
+	struct net_bridge_port_group_sg_key key;
+	unsigned char eth_addr[6];
+	unsigned char flags;
+	unsigned char filter_mode;
+	unsigned char grp_query_rexmit_cnt;
+	unsigned char rt_protocol;
+	struct hlist_head src_list;
+	unsigned int src_ents;
+	struct timer_list timer;
+	struct timer_list rexmit_timer;
+	struct hlist_node mglist;
+	struct rb_root eht_set_tree;
+	struct rb_root eht_host_tree;
+	struct rhash_head rhnode;
+	struct net_bridge_mcast_gc mcast_gc;
+	struct callback_head rcu;
+};
+
+enum {
+	BR_FDB_LOCAL = 0,
+	BR_FDB_STATIC = 1,
+	BR_FDB_STICKY = 2,
+	BR_FDB_ADDED_BY_USER = 3,
+	BR_FDB_ADDED_BY_EXT_LEARN = 4,
+	BR_FDB_OFFLOADED = 5,
+	BR_FDB_NOTIFY = 6,
+	BR_FDB_NOTIFY_INACTIVE = 7,
+	BR_FDB_LOCKED = 8,
+};
+
+enum {
+	NFEA_UNSPEC = 0,
+	NFEA_ACTIVITY_NOTIFY = 1,
+	NFEA_DONT_REFRESH = 2,
+	__NFEA_MAX = 3,
+};
+
+enum {
+	FDB_NOTIFY_BIT = 1,
+	FDB_NOTIFY_INACTIVE_BIT = 2,
+};
+
+struct net_bridge_vlan_group {
+	struct rhashtable vlan_hash;
+	struct rhashtable tunnel_hash;
+	struct list_head vlan_list;
+	u16 num_vlans;
+	u16 pvid;
+	u8 pvid_state;
+};
+
+struct net_bridge_fdb_flush_desc {
+	unsigned long flags;
+	unsigned long flags_mask;
+	int port_ifindex;
+	u16 vlan_id;
+};
+
+struct __fdb_entry {
+	__u8 mac_addr[6];
+	__u8 port_no;
+	__u8 is_local;
+	__u32 ageing_timer_value;
+	__u8 port_hi;
+	__u8 pad0;
+	__u16 unused;
+};
+
+enum {
+	BR_MCAST_DIR_RX = 0,
+	BR_MCAST_DIR_TX = 1,
+	BR_MCAST_DIR_SIZE = 2,
+};
+
+enum {
+	MDB_RTR_TYPE_DISABLED = 0,
+	MDB_RTR_TYPE_TEMP_QUERY = 1,
+	MDB_RTR_TYPE_PERM = 2,
+	MDB_RTR_TYPE_TEMP = 3,
+};
+
+struct br_frame_type {
+	__be16 type;
+	int (*frame_handler)(struct net_bridge_port *, struct sk_buff *);
+	struct hlist_node list;
+};
+
+struct __port_info {
+	__u64 designated_root;
+	__u64 designated_bridge;
+	__u16 port_id;
+	__u16 designated_port;
+	__u32 path_cost;
+	__u32 designated_cost;
+	__u8 state;
+	__u8 top_change_ack;
+	__u8 config_pending;
+	__u8 unused0;
+	__u32 message_age_timer_value;
+	__u32 forward_delay_timer_value;
+	__u32 hold_timer_value;
+};
+
+struct __bridge_info {
+	__u64 designated_root;
+	__u64 bridge_id;
+	__u32 root_path_cost;
+	__u32 max_age;
+	__u32 hello_time;
+	__u32 forward_delay;
+	__u32 bridge_max_age;
+	__u32 bridge_hello_time;
+	__u32 bridge_forward_delay;
+	__u8 topology_change;
+	__u8 topology_change_detected;
+	__u8 root_port;
+	__u8 stp_enabled;
+	__u32 ageing_time;
+	__u32 gc_interval;
+	__u32 hello_timer_value;
+	__u32 tcn_timer_value;
+	__u32 topology_change_timer_value;
+	__u32 gc_timer_value;
+};
+
+enum switchdev_attr_id {
+	SWITCHDEV_ATTR_ID_UNDEFINED = 0,
+	SWITCHDEV_ATTR_ID_PORT_STP_STATE = 1,
+	SWITCHDEV_ATTR_ID_PORT_MST_STATE = 2,
+	SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS = 3,
+	SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS = 4,
+	SWITCHDEV_ATTR_ID_PORT_MROUTER = 5,
+	SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME = 6,
+	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING = 7,
+	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL = 8,
+	SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED = 9,
+	SWITCHDEV_ATTR_ID_BRIDGE_MROUTER = 10,
+	SWITCHDEV_ATTR_ID_BRIDGE_MST = 11,
+	SWITCHDEV_ATTR_ID_MRP_PORT_ROLE = 12,
+	SWITCHDEV_ATTR_ID_VLAN_MSTI = 13,
+};
+
+struct switchdev_mst_state {
+	u16 msti;
+	u8 state;
+};
+
+struct switchdev_brport_flags {
+	unsigned long val;
+	unsigned long mask;
+};
+
+struct switchdev_vlan_msti {
+	u16 vid;
+	u16 msti;
+};
+
+struct switchdev_attr {
+	struct net_device *orig_dev;
+	enum switchdev_attr_id id;
+	u32 flags;
+	void *complete_priv;
+	void (*complete)(struct net_device *, int, void *);
+	union {
+		u8 stp_state;
+		struct switchdev_mst_state mst_state;
+		struct switchdev_brport_flags brport_flags;
+		bool mrouter;
+		clock_t ageing_time;
+		bool vlan_filtering;
+		u16 vlan_protocol;
+		bool mst;
+		bool mc_disabled;
+		u8 mrp_port_role;
+		struct switchdev_vlan_msti vlan_msti;
+	} u;
+};
+
+struct br_config_bpdu {
+	unsigned int topology_change: 1;
+	unsigned int topology_change_ack: 1;
+	bridge_id root;
+	int root_path_cost;
+	bridge_id bridge_id;
+	port_id port_id;
+	int message_age;
+	int max_age;
+	int hello_time;
+	int forward_delay;
+};
+
+enum {
+	BR_GROUPFWD_STP = 1,
+	BR_GROUPFWD_MACPAUSE = 2,
+	BR_GROUPFWD_LACP = 4,
+};
+
+enum {
+	IFLA_BR_UNSPEC = 0,
+	IFLA_BR_FORWARD_DELAY = 1,
+	IFLA_BR_HELLO_TIME = 2,
+	IFLA_BR_MAX_AGE = 3,
+	IFLA_BR_AGEING_TIME = 4,
+	IFLA_BR_STP_STATE = 5,
+	IFLA_BR_PRIORITY = 6,
+	IFLA_BR_VLAN_FILTERING = 7,
+	IFLA_BR_VLAN_PROTOCOL = 8,
+	IFLA_BR_GROUP_FWD_MASK = 9,
+	IFLA_BR_ROOT_ID = 10,
+	IFLA_BR_BRIDGE_ID = 11,
+	IFLA_BR_ROOT_PORT = 12,
+	IFLA_BR_ROOT_PATH_COST = 13,
+	IFLA_BR_TOPOLOGY_CHANGE = 14,
+	IFLA_BR_TOPOLOGY_CHANGE_DETECTED = 15,
+	IFLA_BR_HELLO_TIMER = 16,
+	IFLA_BR_TCN_TIMER = 17,
+	IFLA_BR_TOPOLOGY_CHANGE_TIMER = 18,
+	IFLA_BR_GC_TIMER = 19,
+	IFLA_BR_GROUP_ADDR = 20,
+	IFLA_BR_FDB_FLUSH = 21,
+	IFLA_BR_MCAST_ROUTER = 22,
+	IFLA_BR_MCAST_SNOOPING = 23,
+	IFLA_BR_MCAST_QUERY_USE_IFADDR = 24,
+	IFLA_BR_MCAST_QUERIER = 25,
+	IFLA_BR_MCAST_HASH_ELASTICITY = 26,
+	IFLA_BR_MCAST_HASH_MAX = 27,
+	IFLA_BR_MCAST_LAST_MEMBER_CNT = 28,
+	IFLA_BR_MCAST_STARTUP_QUERY_CNT = 29,
+	IFLA_BR_MCAST_LAST_MEMBER_INTVL = 30,
+	IFLA_BR_MCAST_MEMBERSHIP_INTVL = 31,
+	IFLA_BR_MCAST_QUERIER_INTVL = 32,
+	IFLA_BR_MCAST_QUERY_INTVL = 33,
+	IFLA_BR_MCAST_QUERY_RESPONSE_INTVL = 34,
+	IFLA_BR_MCAST_STARTUP_QUERY_INTVL = 35,
+	IFLA_BR_NF_CALL_IPTABLES = 36,
+	IFLA_BR_NF_CALL_IP6TABLES = 37,
+	IFLA_BR_NF_CALL_ARPTABLES = 38,
+	IFLA_BR_VLAN_DEFAULT_PVID = 39,
+	IFLA_BR_PAD = 40,
+	IFLA_BR_VLAN_STATS_ENABLED = 41,
+	IFLA_BR_MCAST_STATS_ENABLED = 42,
+	IFLA_BR_MCAST_IGMP_VERSION = 43,
+	IFLA_BR_MCAST_MLD_VERSION = 44,
+	IFLA_BR_VLAN_STATS_PER_PORT = 45,
+	IFLA_BR_MULTI_BOOLOPT = 46,
+	IFLA_BR_MCAST_QUERIER_STATE = 47,
+	__IFLA_BR_MAX = 48,
+};
+
+enum {
+	LINK_XSTATS_TYPE_UNSPEC = 0,
+	LINK_XSTATS_TYPE_BRIDGE = 1,
+	LINK_XSTATS_TYPE_BOND = 2,
+	__LINK_XSTATS_TYPE_MAX = 3,
+};
+
+enum {
+	BRIDGE_XSTATS_UNSPEC = 0,
+	BRIDGE_XSTATS_VLAN = 1,
+	BRIDGE_XSTATS_MCAST = 2,
+	BRIDGE_XSTATS_PAD = 3,
+	BRIDGE_XSTATS_STP = 4,
+	__BRIDGE_XSTATS_MAX = 5,
+};
+
+struct bridge_vlan_info {
+	__u16 flags;
+	__u16 vid;
+};
+
+struct vtunnel_info {
+	u32 tunid;
+	u16 vid;
+	u16 flags;
+};
+
+enum {
+	IFLA_BRIDGE_VLAN_TUNNEL_UNSPEC = 0,
+	IFLA_BRIDGE_VLAN_TUNNEL_ID = 1,
+	IFLA_BRIDGE_VLAN_TUNNEL_VID = 2,
+	IFLA_BRIDGE_VLAN_TUNNEL_FLAGS = 3,
+	__IFLA_BRIDGE_VLAN_TUNNEL_MAX = 4,
+};
+
+enum {
+	BR_VLFLAG_PER_PORT_STATS = 1,
+	BR_VLFLAG_ADDED_BY_SWITCHDEV = 2,
+	BR_VLFLAG_MCAST_ENABLED = 4,
+	BR_VLFLAG_GLOBAL_MCAST_ENABLED = 8,
+	BR_VLFLAG_NEIGH_SUPPRESS_ENABLED = 16,
+};
+
+struct brport_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct net_bridge_port *, char *);
+	int (*store)(struct net_bridge_port *, unsigned long);
+	int (*store_raw)(struct net_bridge_port *, char *);
+};
+
+enum {
+	BRIDGE_QUERIER_UNSPEC = 0,
+	BRIDGE_QUERIER_IP_ADDRESS = 1,
+	BRIDGE_QUERIER_IP_PORT = 2,
+	BRIDGE_QUERIER_IP_OTHER_TIMER = 3,
+	BRIDGE_QUERIER_PAD = 4,
+	BRIDGE_QUERIER_IPV6_ADDRESS = 5,
+	BRIDGE_QUERIER_IPV6_PORT = 6,
+	BRIDGE_QUERIER_IPV6_OTHER_TIMER = 7,
+	__BRIDGE_QUERIER_MAX = 8,
+};
+
+enum {
+	PIM_TYPE_HELLO = 0,
+	PIM_TYPE_REGISTER = 1,
+	PIM_TYPE_REGISTER_STOP = 2,
+	PIM_TYPE_JOIN_PRUNE = 3,
+	PIM_TYPE_BOOTSTRAP = 4,
+	PIM_TYPE_ASSERT = 5,
+	PIM_TYPE_GRAFT = 6,
+	PIM_TYPE_GRAFT_ACK = 7,
+	PIM_TYPE_CANDIDATE_RP_ADV = 8,
+};
+
+struct net_bridge_group_src {
+	struct hlist_node node;
+	struct br_ip addr;
+	struct net_bridge_port_group *pg;
+	u8 flags;
+	u8 src_query_rexmit_cnt;
+	struct timer_list timer;
+	struct net_bridge *br;
+	struct net_bridge_mcast_gc mcast_gc;
+	struct callback_head rcu;
+};
+
+struct pimhdr {
+	__u8 type;
+	__u8 reserved;
+	__be16 csum;
+};
+
+struct br_ip_list {
+	struct list_head list;
+	struct br_ip addr;
+};
+
+enum {
+	MDBA_UNSPEC = 0,
+	MDBA_MDB = 1,
+	MDBA_ROUTER = 2,
+	__MDBA_MAX = 3,
+};
+
+enum {
+	MDBA_ROUTER_UNSPEC = 0,
+	MDBA_ROUTER_PORT = 1,
+	__MDBA_ROUTER_MAX = 2,
+};
+
+enum {
+	MDBA_ROUTER_PATTR_UNSPEC = 0,
+	MDBA_ROUTER_PATTR_TIMER = 1,
+	MDBA_ROUTER_PATTR_TYPE = 2,
+	MDBA_ROUTER_PATTR_INET_TIMER = 3,
+	MDBA_ROUTER_PATTR_INET6_TIMER = 4,
+	MDBA_ROUTER_PATTR_VID = 5,
+	__MDBA_ROUTER_PATTR_MAX = 6,
+};
+
+enum {
+	MDBA_MDB_UNSPEC = 0,
+	MDBA_MDB_ENTRY = 1,
+	__MDBA_MDB_MAX = 2,
+};
+
+enum {
+	MDBA_MDB_ENTRY_UNSPEC = 0,
+	MDBA_MDB_ENTRY_INFO = 1,
+	__MDBA_MDB_ENTRY_MAX = 2,
+};
+
+enum {
+	MDBA_MDB_EATTR_UNSPEC = 0,
+	MDBA_MDB_EATTR_TIMER = 1,
+	MDBA_MDB_EATTR_SRC_LIST = 2,
+	MDBA_MDB_EATTR_GROUP_MODE = 3,
+	MDBA_MDB_EATTR_SOURCE = 4,
+	MDBA_MDB_EATTR_RTPROT = 5,
+	MDBA_MDB_EATTR_DST = 6,
+	MDBA_MDB_EATTR_DST_PORT = 7,
+	MDBA_MDB_EATTR_VNI = 8,
+	MDBA_MDB_EATTR_IFINDEX = 9,
+	MDBA_MDB_EATTR_SRC_VNI = 10,
+	__MDBA_MDB_EATTR_MAX = 11,
+};
+
+enum {
+	MDBA_MDB_SRCLIST_UNSPEC = 0,
+	MDBA_MDB_SRCLIST_ENTRY = 1,
+	__MDBA_MDB_SRCLIST_MAX = 2,
+};
+
+enum {
+	MDBA_MDB_SRCATTR_UNSPEC = 0,
+	MDBA_MDB_SRCATTR_ADDRESS = 1,
+	MDBA_MDB_SRCATTR_TIMER = 2,
+	__MDBA_MDB_SRCATTR_MAX = 3,
+};
+
+enum {
+	MDBE_ATTR_UNSPEC = 0,
+	MDBE_ATTR_SOURCE = 1,
+	MDBE_ATTR_SRC_LIST = 2,
+	MDBE_ATTR_GROUP_MODE = 3,
+	MDBE_ATTR_RTPROT = 4,
+	MDBE_ATTR_DST = 5,
+	MDBE_ATTR_DST_PORT = 6,
+	MDBE_ATTR_VNI = 7,
+	MDBE_ATTR_IFINDEX = 8,
+	MDBE_ATTR_SRC_VNI = 9,
+	__MDBE_ATTR_MAX = 10,
+};
+
+enum {
+	MDBE_SRCATTR_UNSPEC = 0,
+	MDBE_SRCATTR_ADDRESS = 1,
+	__MDBE_SRCATTR_MAX = 2,
+};
+
+struct br_mdb_src_entry;
+
+struct br_mdb_config {
+	struct net_bridge *br;
+	struct net_bridge_port *p;
+	struct br_mdb_entry *entry;
+	struct br_ip group;
+	bool src_entry;
+	u8 filter_mode;
+	u16 nlflags;
+	struct br_mdb_src_entry *src_entries;
+	int num_src_entries;
+	u8 rt_protocol;
+};
+
+struct br_mdb_src_entry {
+	struct br_ip addr;
+};
+
+union net_bridge_eht_addr {
+	__be32 ip4;
+	struct in6_addr ip6;
+};
+
+struct net_bridge_group_eht_set {
+	struct rb_node rb_node;
+	union net_bridge_eht_addr src_addr;
+	struct rb_root entry_tree;
+	struct timer_list timer;
+	struct net_bridge_port_group *pg;
+	struct net_bridge *br;
+	struct net_bridge_mcast_gc mcast_gc;
+};
+
+struct net_bridge_group_eht_host;
+
+struct net_bridge_group_eht_set_entry {
+	struct rb_node rb_node;
+	struct hlist_node host_list;
+	union net_bridge_eht_addr h_addr;
+	struct timer_list timer;
+	struct net_bridge *br;
+	struct net_bridge_group_eht_set *eht_set;
+	struct net_bridge_group_eht_host *h_parent;
+	struct net_bridge_mcast_gc mcast_gc;
+};
+
+struct net_bridge_group_eht_host {
+	struct rb_node rb_node;
+	union net_bridge_eht_addr h_addr;
+	struct hlist_head set_entries;
+	unsigned int num_entries;
+	unsigned char filter_mode;
+	struct net_bridge_port_group *pg;
+};
+
+struct devlink_dev_stats {
+	u32 reload_stats[6];
+	u32 remote_reload_stats[6];
+};
+
+struct devlink_dpipe_headers;
+
+struct devlink_ops;
+
+struct devlink {
+	u32 index;
+	struct xarray ports;
+	struct list_head rate_list;
+	struct list_head sb_list;
+	struct list_head dpipe_table_list;
+	struct list_head resource_list;
+	struct xarray params;
+	struct list_head region_list;
+	struct list_head reporter_list;
+	struct devlink_dpipe_headers *dpipe_headers;
+	struct list_head trap_list;
+	struct list_head trap_group_list;
+	struct list_head trap_policer_list;
+	struct list_head linecard_list;
+	const struct devlink_ops *ops;
+	struct xarray snapshot_ids;
+	struct devlink_dev_stats stats;
+	struct device *dev;
+	possible_net_t _net;
+	struct mutex lock;
+	struct lock_class_key lock_key;
+	u8 reload_failed: 1;
+	refcount_t refcount;
+	struct rcu_work rwork;
+	long: 64;
+	long: 64;
+	long: 64;
+	char priv[0];
+};
+
+struct devlink_dpipe_header;
+
+struct devlink_dpipe_headers {
+	struct devlink_dpipe_header **headers;
+	unsigned int headers_count;
+};
+
+struct devlink_dpipe_field;
+
+struct devlink_dpipe_header {
+	const char *name;
+	unsigned int id;
+	struct devlink_dpipe_field *fields;
+	unsigned int fields_count;
+	bool global;
+};
+
+enum devlink_dpipe_field_mapping_type {
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
+};
+
+struct devlink_dpipe_field {
+	const char *name;
+	unsigned int id;
+	unsigned int bitwidth;
+	enum devlink_dpipe_field_mapping_type mapping_type;
+};
+
+enum devlink_reload_action {
+	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
+	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
+	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
+	__DEVLINK_RELOAD_ACTION_MAX = 3,
+	DEVLINK_RELOAD_ACTION_MAX = 2,
+};
+
+enum devlink_reload_limit {
+	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
+	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
+	__DEVLINK_RELOAD_LIMIT_MAX = 2,
+	DEVLINK_RELOAD_LIMIT_MAX = 1,
+};
+
+enum devlink_sb_threshold_type {
+	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
+	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
+};
+
+enum devlink_sb_pool_type {
+	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
+	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
+};
+
+enum devlink_eswitch_encap_mode {
+	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
+	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
+};
+
+enum devlink_trap_action {
+	DEVLINK_TRAP_ACTION_DROP = 0,
+	DEVLINK_TRAP_ACTION_TRAP = 1,
+	DEVLINK_TRAP_ACTION_MIRROR = 2,
+};
+
+enum devlink_selftest_status {
+	DEVLINK_SELFTEST_STATUS_SKIP = 0,
+	DEVLINK_SELFTEST_STATUS_PASS = 1,
+	DEVLINK_SELFTEST_STATUS_FAIL = 2,
+};
+
+struct devlink_sb_pool_info;
+
+struct devlink_info_req;
+
+struct devlink_flash_update_params;
+
+struct devlink_trap;
+
+struct devlink_trap_group;
+
+struct devlink_trap_policer;
+
+struct devlink_port_new_attrs;
+
+struct devlink_ops {
+	u32 supported_flash_update_params;
+	unsigned long reload_actions;
+	unsigned long reload_limits;
+	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
+	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
+	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
+	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
+	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
+	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
+	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
+	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
+	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
+	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
+	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
+	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
+	int (*eswitch_mode_get)(struct devlink *, u16 *);
+	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
+	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
+	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
+	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
+	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
+	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
+	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
+	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
+	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
+	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
+	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
+	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_drop_counter_get)(struct devlink *, const struct devlink_trap *, u64 *);
+	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
+	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
+	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
+	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
+	int (*port_new)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, struct devlink_port **);
+	int (*rate_leaf_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_priority_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_weight_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_priority_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_tx_weight_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_new)(struct devlink_rate *, void **, struct netlink_ext_ack *);
+	int (*rate_node_del)(struct devlink_rate *, void *, struct netlink_ext_ack *);
+	int (*rate_leaf_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	int (*rate_node_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	bool (*selftest_check)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	enum devlink_selftest_status (*selftest_run)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+};
+
+struct devlink_sb_pool_info {
+	enum devlink_sb_pool_type pool_type;
+	u32 size;
+	enum devlink_sb_threshold_type threshold_type;
+	u32 cell_size;
+};
+
+struct devlink_flash_update_params {
+	const struct firmware *fw;
+	const char *component;
+	u32 overwrite_mask;
+};
+
+enum devlink_trap_type {
+	DEVLINK_TRAP_TYPE_DROP = 0,
+	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
+	DEVLINK_TRAP_TYPE_CONTROL = 2,
+};
+
+struct devlink_trap {
+	enum devlink_trap_type type;
+	enum devlink_trap_action init_action;
+	bool generic;
+	u16 id;
+	const char *name;
+	u16 init_group_id;
+	u32 metadata_cap;
+};
+
+struct devlink_trap_group {
+	const char *name;
+	u16 id;
+	bool generic;
+	u32 init_policer_id;
+};
+
+struct devlink_trap_policer {
+	u32 id;
+	u64 init_rate;
+	u64 init_burst;
+	u64 max_rate;
+	u64 min_rate;
+	u64 max_burst;
+	u64 min_burst;
+};
+
+struct devlink_port_new_attrs {
+	enum devlink_port_flavour flavour;
+	unsigned int port_index;
+	u32 controller;
+	u32 sfnum;
+	u16 pfnum;
+	u8 port_index_valid: 1;
+	u8 controller_valid: 1;
+	u8 sfnum_valid: 1;
+};
+
+struct ib_core_device {
+	struct device dev;
+	possible_net_t rdma_net;
+	struct kobject *ports_kobj;
+	struct list_head port_list;
+	struct ib_device *owner;
+};
+
+enum rdma_driver_id {
+	RDMA_DRIVER_UNKNOWN = 0,
+	RDMA_DRIVER_MLX5 = 1,
+	RDMA_DRIVER_MLX4 = 2,
+	RDMA_DRIVER_CXGB3 = 3,
+	RDMA_DRIVER_CXGB4 = 4,
+	RDMA_DRIVER_MTHCA = 5,
+	RDMA_DRIVER_BNXT_RE = 6,
+	RDMA_DRIVER_OCRDMA = 7,
+	RDMA_DRIVER_NES = 8,
+	RDMA_DRIVER_I40IW = 9,
+	RDMA_DRIVER_IRDMA = 9,
+	RDMA_DRIVER_VMW_PVRDMA = 10,
+	RDMA_DRIVER_QEDR = 11,
+	RDMA_DRIVER_HNS = 12,
+	RDMA_DRIVER_USNIC = 13,
+	RDMA_DRIVER_RXE = 14,
+	RDMA_DRIVER_HFI1 = 15,
+	RDMA_DRIVER_QIB = 16,
+	RDMA_DRIVER_EFA = 17,
+	RDMA_DRIVER_SIW = 18,
+	RDMA_DRIVER_ERDMA = 19,
+	RDMA_DRIVER_MANA = 20,
+};
+
+enum ib_cq_notify_flags {
+	IB_CQ_SOLICITED = 1,
+	IB_CQ_NEXT_COMP = 2,
+	IB_CQ_SOLICITED_MASK = 3,
+	IB_CQ_REPORT_MISSED_EVENTS = 4,
+};
+
+struct ib_mad;
+
+enum rdma_link_layer {
+	IB_LINK_LAYER_UNSPECIFIED = 0,
+	IB_LINK_LAYER_INFINIBAND = 1,
+	IB_LINK_LAYER_ETHERNET = 2,
+};
+
+enum rdma_netdev_t {
+	RDMA_NETDEV_OPA_VNIC = 0,
+	RDMA_NETDEV_IPOIB = 1,
+};
+
+enum ib_srq_attr_mask {
+	IB_SRQ_MAX_WR = 1,
+	IB_SRQ_LIMIT = 2,
+};
+
+enum ib_mr_type {
+	IB_MR_TYPE_MEM_REG = 0,
+	IB_MR_TYPE_SG_GAPS = 1,
+	IB_MR_TYPE_DM = 2,
+	IB_MR_TYPE_USER = 3,
+	IB_MR_TYPE_DMA = 4,
+	IB_MR_TYPE_INTEGRITY = 5,
+};
+
+enum ib_uverbs_advise_mr_advice {
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH = 0,
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE = 1,
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_NO_FAULT = 2,
+};
+
+struct uverbs_attr_bundle;
+
+struct rdma_cm_id;
+
+struct iw_cm_id;
+
+struct iw_cm_conn_param;
+
+struct ib_qp;
+
+struct ib_send_wr;
+
+struct ib_recv_wr;
+
+struct ib_cq;
+
+struct ib_wc;
+
+struct ib_srq;
+
+struct ib_grh;
+
+struct ib_device_attr;
+
+struct ib_udata;
+
+struct ib_device_modify;
+
+struct ib_port_attr;
+
+struct ib_port_modify;
+
+struct ib_port_immutable;
+
+struct rdma_netdev_alloc_params;
+
+union ib_gid;
+
+struct ib_gid_attr;
+
+struct ib_ucontext;
+
+struct rdma_user_mmap_entry;
+
+struct ib_pd;
+
+struct ib_ah;
+
+struct rdma_ah_init_attr;
+
+struct rdma_ah_attr;
+
+struct ib_srq_init_attr;
+
+struct ib_srq_attr;
+
+struct ib_qp_init_attr;
+
+struct ib_qp_attr;
+
+struct ib_cq_init_attr;
+
+struct ib_mr;
+
+struct ib_sge;
+
+struct ib_mr_status;
+
+struct ib_mw;
+
+struct ib_xrcd;
+
+struct ib_flow;
+
+struct ib_flow_attr;
+
+struct ib_flow_action;
+
+struct ib_wq;
+
+struct ib_wq_init_attr;
+
+struct ib_wq_attr;
+
+struct ib_rwq_ind_table;
+
+struct ib_rwq_ind_table_init_attr;
+
+struct ib_dm;
+
+struct ib_dm_alloc_attr;
+
+struct ib_dm_mr_attr;
+
+struct ib_counters;
+
+struct ib_counters_read_attr;
+
+struct rdma_hw_stats;
+
+struct rdma_counter;
+
+struct ib_device_ops {
+	struct module *owner;
+	enum rdma_driver_id driver_id;
+	u32 uverbs_abi_ver;
+	unsigned int uverbs_no_driver_id_binding: 1;
+	const struct attribute_group *device_group;
+	const struct attribute_group **port_groups;
+	int (*post_send)(struct ib_qp *, const struct ib_send_wr *, const struct ib_send_wr **);
+	int (*post_recv)(struct ib_qp *, const struct ib_recv_wr *, const struct ib_recv_wr **);
+	void (*drain_rq)(struct ib_qp *);
+	void (*drain_sq)(struct ib_qp *);
+	int (*poll_cq)(struct ib_cq *, int, struct ib_wc *);
+	int (*peek_cq)(struct ib_cq *, int);
+	int (*req_notify_cq)(struct ib_cq *, enum ib_cq_notify_flags);
+	int (*post_srq_recv)(struct ib_srq *, const struct ib_recv_wr *, const struct ib_recv_wr **);
+	int (*process_mad)(struct ib_device *, int, u32, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
+	int (*query_device)(struct ib_device *, struct ib_device_attr *, struct ib_udata *);
+	int (*modify_device)(struct ib_device *, int, struct ib_device_modify *);
+	void (*get_dev_fw_str)(struct ib_device *, char *);
+	const struct cpumask * (*get_vector_affinity)(struct ib_device *, int);
+	int (*query_port)(struct ib_device *, u32, struct ib_port_attr *);
+	int (*modify_port)(struct ib_device *, u32, int, struct ib_port_modify *);
+	int (*get_port_immutable)(struct ib_device *, u32, struct ib_port_immutable *);
+	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u32);
+	struct net_device * (*get_netdev)(struct ib_device *, u32);
+	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u32, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
+	int (*rdma_netdev_get_params)(struct ib_device *, u32, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
+	int (*query_gid)(struct ib_device *, u32, int, union ib_gid *);
+	int (*add_gid)(const struct ib_gid_attr *, void **);
+	int (*del_gid)(const struct ib_gid_attr *, void **);
+	int (*query_pkey)(struct ib_device *, u32, u16, u16 *);
+	int (*alloc_ucontext)(struct ib_ucontext *, struct ib_udata *);
+	void (*dealloc_ucontext)(struct ib_ucontext *);
+	int (*mmap)(struct ib_ucontext *, struct vm_area_struct *);
+	void (*mmap_free)(struct rdma_user_mmap_entry *);
+	void (*disassociate_ucontext)(struct ib_ucontext *);
+	int (*alloc_pd)(struct ib_pd *, struct ib_udata *);
+	int (*dealloc_pd)(struct ib_pd *, struct ib_udata *);
+	int (*create_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*create_user_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*modify_ah)(struct ib_ah *, struct rdma_ah_attr *);
+	int (*query_ah)(struct ib_ah *, struct rdma_ah_attr *);
+	int (*destroy_ah)(struct ib_ah *, u32);
+	int (*create_srq)(struct ib_srq *, struct ib_srq_init_attr *, struct ib_udata *);
+	int (*modify_srq)(struct ib_srq *, struct ib_srq_attr *, enum ib_srq_attr_mask, struct ib_udata *);
+	int (*query_srq)(struct ib_srq *, struct ib_srq_attr *);
+	int (*destroy_srq)(struct ib_srq *, struct ib_udata *);
+	int (*create_qp)(struct ib_qp *, struct ib_qp_init_attr *, struct ib_udata *);
+	int (*modify_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);
+	int (*query_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_qp_init_attr *);
+	int (*destroy_qp)(struct ib_qp *, struct ib_udata *);
+	int (*create_cq)(struct ib_cq *, const struct ib_cq_init_attr *, struct ib_udata *);
+	int (*modify_cq)(struct ib_cq *, u16, u16);
+	int (*destroy_cq)(struct ib_cq *, struct ib_udata *);
+	int (*resize_cq)(struct ib_cq *, int, struct ib_udata *);
+	struct ib_mr * (*get_dma_mr)(struct ib_pd *, int);
+	struct ib_mr * (*reg_user_mr)(struct ib_pd *, u64, u64, u64, int, struct ib_udata *);
+	struct ib_mr * (*reg_user_mr_dmabuf)(struct ib_pd *, u64, u64, u64, int, int, struct ib_udata *);
+	struct ib_mr * (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
+	int (*dereg_mr)(struct ib_mr *, struct ib_udata *);
+	struct ib_mr * (*alloc_mr)(struct ib_pd *, enum ib_mr_type, u32);
+	struct ib_mr * (*alloc_mr_integrity)(struct ib_pd *, u32, u32);
+	int (*advise_mr)(struct ib_pd *, enum ib_uverbs_advise_mr_advice, u32, struct ib_sge *, u32, struct uverbs_attr_bundle *);
+	int (*map_mr_sg)(struct ib_mr *, struct scatterlist *, int, unsigned int *);
+	int (*check_mr_status)(struct ib_mr *, u32, struct ib_mr_status *);
+	int (*alloc_mw)(struct ib_mw *, struct ib_udata *);
+	int (*dealloc_mw)(struct ib_mw *);
+	int (*attach_mcast)(struct ib_qp *, union ib_gid *, u16);
+	int (*detach_mcast)(struct ib_qp *, union ib_gid *, u16);
+	int (*alloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
+	int (*dealloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
+	struct ib_flow * (*create_flow)(struct ib_qp *, struct ib_flow_attr *, struct ib_udata *);
+	int (*destroy_flow)(struct ib_flow *);
+	int (*destroy_flow_action)(struct ib_flow_action *);
+	int (*set_vf_link_state)(struct ib_device *, int, u32, int);
+	int (*get_vf_config)(struct ib_device *, int, u32, struct ifla_vf_info *);
+	int (*get_vf_stats)(struct ib_device *, int, u32, struct ifla_vf_stats *);
+	int (*get_vf_guid)(struct ib_device *, int, u32, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*set_vf_guid)(struct ib_device *, int, u32, u64, int);
+	struct ib_wq * (*create_wq)(struct ib_pd *, struct ib_wq_init_attr *, struct ib_udata *);
+	int (*destroy_wq)(struct ib_wq *, struct ib_udata *);
+	int (*modify_wq)(struct ib_wq *, struct ib_wq_attr *, u32, struct ib_udata *);
+	int (*create_rwq_ind_table)(struct ib_rwq_ind_table *, struct ib_rwq_ind_table_init_attr *, struct ib_udata *);
+	int (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *);
+	struct ib_dm * (*alloc_dm)(struct ib_device *, struct ib_ucontext *, struct ib_dm_alloc_attr *, struct uverbs_attr_bundle *);
+	int (*dealloc_dm)(struct ib_dm *, struct uverbs_attr_bundle *);
+	struct ib_mr * (*reg_dm_mr)(struct ib_pd *, struct ib_dm *, struct ib_dm_mr_attr *, struct uverbs_attr_bundle *);
+	int (*create_counters)(struct ib_counters *, struct uverbs_attr_bundle *);
+	int (*destroy_counters)(struct ib_counters *);
+	int (*read_counters)(struct ib_counters *, struct ib_counters_read_attr *, struct uverbs_attr_bundle *);
+	int (*map_mr_sg_pi)(struct ib_mr *, struct scatterlist *, int, unsigned int *, struct scatterlist *, int, unsigned int *);
+	struct rdma_hw_stats * (*alloc_hw_device_stats)(struct ib_device *);
+	struct rdma_hw_stats * (*alloc_hw_port_stats)(struct ib_device *, u32);
+	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u32, int);
+	int (*modify_hw_stat)(struct ib_device *, u32, unsigned int, bool);
+	int (*fill_res_mr_entry)(struct sk_buff *, struct ib_mr *);
+	int (*fill_res_mr_entry_raw)(struct sk_buff *, struct ib_mr *);
+	int (*fill_res_cq_entry)(struct sk_buff *, struct ib_cq *);
+	int (*fill_res_cq_entry_raw)(struct sk_buff *, struct ib_cq *);
+	int (*fill_res_qp_entry)(struct sk_buff *, struct ib_qp *);
+	int (*fill_res_qp_entry_raw)(struct sk_buff *, struct ib_qp *);
+	int (*fill_res_cm_id_entry)(struct sk_buff *, struct rdma_cm_id *);
+	int (*enable_driver)(struct ib_device *);
+	void (*dealloc_driver)(struct ib_device *);
+	void (*iw_add_ref)(struct ib_qp *);
+	void (*iw_rem_ref)(struct ib_qp *);
+	struct ib_qp * (*iw_get_qp)(struct ib_device *, int);
+	int (*iw_connect)(struct iw_cm_id *, struct iw_cm_conn_param *);
+	int (*iw_accept)(struct iw_cm_id *, struct iw_cm_conn_param *);
+	int (*iw_reject)(struct iw_cm_id *, const void *, u8);
+	int (*iw_create_listen)(struct iw_cm_id *, int);
+	int (*iw_destroy_listen)(struct iw_cm_id *);
+	int (*counter_bind_qp)(struct rdma_counter *, struct ib_qp *);
+	int (*counter_unbind_qp)(struct ib_qp *);
+	int (*counter_dealloc)(struct rdma_counter *);
+	struct rdma_hw_stats * (*counter_alloc_stats)(struct rdma_counter *);
+	int (*counter_update_stats)(struct rdma_counter *);
+	int (*fill_stat_mr_entry)(struct sk_buff *, struct ib_mr *);
+	int (*query_ucontext)(struct ib_ucontext *, struct uverbs_attr_bundle *);
+	int (*get_numa_node)(struct ib_device *);
+	size_t size_ib_ah;
+	size_t size_ib_counters;
+	size_t size_ib_cq;
+	size_t size_ib_mw;
+	size_t size_ib_pd;
+	size_t size_ib_qp;
+	size_t size_ib_rwq_ind_table;
+	size_t size_ib_srq;
+	size_t size_ib_ucontext;
+	size_t size_ib_xrcd;
+};
+
+enum ib_atomic_cap {
+	IB_ATOMIC_NONE = 0,
+	IB_ATOMIC_HCA = 1,
+	IB_ATOMIC_GLOB = 2,
+};
+
+struct ib_odp_caps {
+	uint64_t general_caps;
+	struct {
+		uint32_t rc_odp_caps;
+		uint32_t uc_odp_caps;
+		uint32_t ud_odp_caps;
+		uint32_t xrc_odp_caps;
+	} per_transport_caps;
+};
+
+struct ib_rss_caps {
+	u32 supported_qpts;
+	u32 max_rwq_indirection_tables;
+	u32 max_rwq_indirection_table_size;
+};
+
+struct ib_tm_caps {
+	u32 max_rndv_hdr_size;
+	u32 max_num_tags;
+	u32 flags;
+	u32 max_ops;
+	u32 max_sge;
+};
+
+struct ib_cq_caps {
+	u16 max_cq_moderation_count;
+	u16 max_cq_moderation_period;
+};
+
+struct ib_device_attr {
+	u64 fw_ver;
+	__be64 sys_image_guid;
+	u64 max_mr_size;
+	u64 page_size_cap;
+	u32 vendor_id;
+	u32 vendor_part_id;
+	u32 hw_ver;
+	int max_qp;
+	int max_qp_wr;
+	u64 device_cap_flags;
+	u64 kernel_cap_flags;
+	int max_send_sge;
+	int max_recv_sge;
+	int max_sge_rd;
+	int max_cq;
+	int max_cqe;
+	int max_mr;
+	int max_pd;
+	int max_qp_rd_atom;
+	int max_ee_rd_atom;
+	int max_res_rd_atom;
+	int max_qp_init_rd_atom;
+	int max_ee_init_rd_atom;
+	enum ib_atomic_cap atomic_cap;
+	enum ib_atomic_cap masked_atomic_cap;
+	int max_ee;
+	int max_rdd;
+	int max_mw;
+	int max_raw_ipv6_qp;
+	int max_raw_ethy_qp;
+	int max_mcast_grp;
+	int max_mcast_qp_attach;
+	int max_total_mcast_qp_attach;
+	int max_ah;
+	int max_srq;
+	int max_srq_wr;
+	int max_srq_sge;
+	unsigned int max_fast_reg_page_list_len;
+	unsigned int max_pi_fast_reg_page_list_len;
+	u16 max_pkeys;
+	u8 local_ca_ack_delay;
+	int sig_prot_cap;
+	int sig_guard_cap;
+	struct ib_odp_caps odp_caps;
+	uint64_t timestamp_mask;
+	uint64_t hca_core_clock;
+	struct ib_rss_caps rss_caps;
+	u32 max_wq_type_rq;
+	u32 raw_packet_caps;
+	struct ib_tm_caps tm_caps;
+	struct ib_cq_caps cq_caps;
+	u64 max_dm_size;
+	u32 max_sgl_rd;
+};
+
+struct hw_stats_device_data;
+
+struct rdma_restrack_root;
+
+struct uapi_definition;
+
+struct ib_port_data;
+
+struct rdma_link_ops;
+
+struct ib_device {
+	struct device *dma_device;
+	struct ib_device_ops ops;
+	char name[64];
+	struct callback_head callback_head;
+	struct list_head event_handler_list;
+	struct rw_semaphore event_handler_rwsem;
+	spinlock_t qp_open_list_lock;
+	struct rw_semaphore client_data_rwsem;
+	struct xarray client_data;
+	struct mutex unregistration_lock;
+	rwlock_t cache_lock;
+	struct ib_port_data *port_data;
+	int num_comp_vectors;
+	union {
+		struct device dev;
+		struct ib_core_device coredev;
+	};
+	const struct attribute_group *groups[4];
+	u64 uverbs_cmd_mask;
+	char node_desc[64];
+	__be64 node_guid;
+	u32 local_dma_lkey;
+	u16 is_switch: 1;
+	u16 kverbs_provider: 1;
+	u16 use_cq_dim: 1;
+	u8 node_type;
+	u32 phys_port_cnt;
+	struct ib_device_attr attrs;
+	struct hw_stats_device_data *hw_stats_data;
+	u32 index;
+	spinlock_t cq_pools_lock;
+	struct list_head cq_pools[3];
+	struct rdma_restrack_root *res;
+	const struct uapi_definition *driver_def;
+	refcount_t refcount;
+	struct completion unreg_completion;
+	struct work_struct unregistration_work;
+	const struct rdma_link_ops *link_ops;
+	struct mutex compat_devs_mutex;
+	struct xarray compat_devs;
+	char iw_ifname[16];
+	u32 iw_driver_flags;
+	u32 lag_flags;
+};
+
+struct ib_uqp_object;
+
+enum ib_qp_type {
+	IB_QPT_SMI = 0,
+	IB_QPT_GSI = 1,
+	IB_QPT_RC = 2,
+	IB_QPT_UC = 3,
+	IB_QPT_UD = 4,
+	IB_QPT_RAW_IPV6 = 5,
+	IB_QPT_RAW_ETHERTYPE = 6,
+	IB_QPT_RAW_PACKET = 8,
+	IB_QPT_XRC_INI = 9,
+	IB_QPT_XRC_TGT = 10,
+	IB_QPT_MAX = 11,
+	IB_QPT_DRIVER = 255,
+	IB_QPT_RESERVED1 = 4096,
+	IB_QPT_RESERVED2 = 4097,
+	IB_QPT_RESERVED3 = 4098,
+	IB_QPT_RESERVED4 = 4099,
+	IB_QPT_RESERVED5 = 4100,
+	IB_QPT_RESERVED6 = 4101,
+	IB_QPT_RESERVED7 = 4102,
+	IB_QPT_RESERVED8 = 4103,
+	IB_QPT_RESERVED9 = 4104,
+	IB_QPT_RESERVED10 = 4105,
+};
+
+enum rdma_restrack_type {
+	RDMA_RESTRACK_PD = 0,
+	RDMA_RESTRACK_CQ = 1,
+	RDMA_RESTRACK_QP = 2,
+	RDMA_RESTRACK_CM_ID = 3,
+	RDMA_RESTRACK_MR = 4,
+	RDMA_RESTRACK_CTX = 5,
+	RDMA_RESTRACK_COUNTER = 6,
+	RDMA_RESTRACK_SRQ = 7,
+	RDMA_RESTRACK_MAX = 8,
+};
+
+struct rdma_restrack_entry {
+	bool valid;
+	u8 no_track: 1;
+	struct kref kref;
+	struct completion comp;
+	struct task_struct *task;
+	const char *kern_name;
+	enum rdma_restrack_type type;
+	bool user;
+	u32 id;
+};
+
+struct ib_event;
+
+struct ib_qp_security;
+
+struct ib_qp {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_cq *send_cq;
+	struct ib_cq *recv_cq;
+	spinlock_t mr_lock;
+	int mrs_used;
+	struct list_head rdma_mrs;
+	struct list_head sig_mrs;
+	struct ib_srq *srq;
+	struct ib_xrcd *xrcd;
+	struct list_head xrcd_list;
+	atomic_t usecnt;
+	struct list_head open_list;
+	struct ib_qp *real_qp;
+	struct ib_uqp_object *uobject;
+	void (*event_handler)(struct ib_event *, void *);
+	void *qp_context;
+	const struct ib_gid_attr *av_sgid_attr;
+	const struct ib_gid_attr *alt_path_sgid_attr;
+	u32 qp_num;
+	u32 max_write_sge;
+	u32 max_read_sge;
+	enum ib_qp_type qp_type;
+	struct ib_rwq_ind_table *rwq_ind_tbl;
+	struct ib_qp_security *qp_sec;
+	u32 port;
+	bool integrity_en;
+	struct rdma_restrack_entry res;
+	struct rdma_counter *counter;
+};
+
+struct ib_uobject;
+
+struct ib_pd {
+	u32 local_dma_lkey;
+	u32 flags;
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+	u32 unsafe_global_rkey;
+	struct ib_mr *__internal_mr;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_uverbs_file;
+
+struct ib_rdmacg_object {};
+
+struct uverbs_api_object;
+
+struct ib_uobject {
+	u64 user_handle;
+	struct ib_uverbs_file *ufile;
+	struct ib_ucontext *context;
+	void *object;
+	struct list_head list;
+	struct ib_rdmacg_object cg_obj;
+	int id;
+	struct kref ref;
+	atomic_t usecnt;
+	struct callback_head rcu;
+	const struct uverbs_api_object *uapi_object;
+};
+
+struct ib_ucontext {
+	struct ib_device *device;
+	struct ib_uverbs_file *ufile;
+	struct ib_rdmacg_object cg_obj;
+	struct rdma_restrack_entry res;
+	struct xarray mmap_xa;
+};
+
+struct ib_sig_attrs;
+
+struct ib_mr {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	u32 lkey;
+	u32 rkey;
+	u64 iova;
+	u64 length;
+	unsigned int page_size;
+	enum ib_mr_type type;
+	bool need_inval;
+	union {
+		struct ib_uobject *uobject;
+		struct list_head qp_entry;
+	};
+	struct ib_dm *dm;
+	struct ib_sig_attrs *sig_attrs;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_dm {
+	struct ib_device *device;
+	u32 length;
+	u32 flags;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+};
+
+enum ib_signature_type {
+	IB_SIG_TYPE_NONE = 0,
+	IB_SIG_TYPE_T10_DIF = 1,
+};
+
+enum ib_t10_dif_bg_type {
+	IB_T10DIF_CRC = 0,
+	IB_T10DIF_CSUM = 1,
+};
+
+struct ib_t10_dif_domain {
+	enum ib_t10_dif_bg_type bg_type;
+	u16 pi_interval;
+	u16 bg;
+	u16 app_tag;
+	u32 ref_tag;
+	bool ref_remap;
+	bool app_escape;
+	bool ref_escape;
+	u16 apptag_check_mask;
+};
+
+struct ib_sig_domain {
+	enum ib_signature_type sig_type;
+	union {
+		struct ib_t10_dif_domain dif;
+	} sig;
+};
+
+struct ib_sig_attrs {
+	u8 check_mask;
+	struct ib_sig_domain mem;
+	struct ib_sig_domain wire;
+	int meta_length;
+};
+
+struct irq_poll;
+
+typedef int irq_poll_fn(struct irq_poll *, int);
+
+struct irq_poll {
+	struct list_head list;
+	unsigned long state;
+	int weight;
+	irq_poll_fn *poll;
+};
+
+struct ib_ucq_object;
+
+typedef void (*ib_comp_handler)(struct ib_cq *, void *);
+
+enum ib_poll_context {
+	IB_POLL_SOFTIRQ = 0,
+	IB_POLL_WORKQUEUE = 1,
+	IB_POLL_UNBOUND_WORKQUEUE = 2,
+	IB_POLL_LAST_POOL_TYPE = 2,
+	IB_POLL_DIRECT = 3,
+};
+
+struct dim;
+
+struct ib_cq {
+	struct ib_device *device;
+	struct ib_ucq_object *uobject;
+	ib_comp_handler comp_handler;
+	void (*event_handler)(struct ib_event *, void *);
+	void *cq_context;
+	int cqe;
+	unsigned int cqe_used;
+	atomic_t usecnt;
+	enum ib_poll_context poll_ctx;
+	struct ib_wc *wc;
+	struct list_head pool_entry;
+	union {
+		struct irq_poll iop;
+		struct work_struct work;
+	};
+	struct workqueue_struct *comp_wq;
+	struct dim *dim;
+	ktime_t timestamp;
+	u8 interrupt: 1;
+	u8 shared: 1;
+	unsigned int comp_vector;
+	struct rdma_restrack_entry res;
+};
+
+enum ib_event_type {
+	IB_EVENT_CQ_ERR = 0,
+	IB_EVENT_QP_FATAL = 1,
+	IB_EVENT_QP_REQ_ERR = 2,
+	IB_EVENT_QP_ACCESS_ERR = 3,
+	IB_EVENT_COMM_EST = 4,
+	IB_EVENT_SQ_DRAINED = 5,
+	IB_EVENT_PATH_MIG = 6,
+	IB_EVENT_PATH_MIG_ERR = 7,
+	IB_EVENT_DEVICE_FATAL = 8,
+	IB_EVENT_PORT_ACTIVE = 9,
+	IB_EVENT_PORT_ERR = 10,
+	IB_EVENT_LID_CHANGE = 11,
+	IB_EVENT_PKEY_CHANGE = 12,
+	IB_EVENT_SM_CHANGE = 13,
+	IB_EVENT_SRQ_ERR = 14,
+	IB_EVENT_SRQ_LIMIT_REACHED = 15,
+	IB_EVENT_QP_LAST_WQE_REACHED = 16,
+	IB_EVENT_CLIENT_REREGISTER = 17,
+	IB_EVENT_GID_CHANGE = 18,
+	IB_EVENT_WQ_FATAL = 19,
+};
+
+struct ib_event {
+	struct ib_device *device;
+	union {
+		struct ib_cq *cq;
+		struct ib_qp *qp;
+		struct ib_srq *srq;
+		struct ib_wq *wq;
+		u32 port_num;
+	} element;
+	enum ib_event_type event;
+};
+
+struct ib_usrq_object;
+
+enum ib_srq_type {
+	IB_SRQT_BASIC = 0,
+	IB_SRQT_XRC = 1,
+	IB_SRQT_TM = 2,
+};
+
+struct ib_srq {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_usrq_object *uobject;
+	void (*event_handler)(struct ib_event *, void *);
+	void *srq_context;
+	enum ib_srq_type srq_type;
+	atomic_t usecnt;
+	struct {
+		struct ib_cq *cq;
+		union {
+			struct {
+				struct ib_xrcd *xrcd;
+				u32 srq_num;
+			} xrc;
+		};
+	} ext;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_xrcd {
+	struct ib_device *device;
+	atomic_t usecnt;
+	struct inode *inode;
+	struct rw_semaphore tgt_qps_rwsem;
+	struct xarray tgt_qps;
+};
+
+struct ib_uwq_object;
+
+enum ib_wq_state {
+	IB_WQS_RESET = 0,
+	IB_WQS_RDY = 1,
+	IB_WQS_ERR = 2,
+};
+
+enum ib_wq_type {
+	IB_WQT_RQ = 0,
+};
+
+struct ib_wq {
+	struct ib_device *device;
+	struct ib_uwq_object *uobject;
+	void *wq_context;
+	void (*event_handler)(struct ib_event *, void *);
+	struct ib_pd *pd;
+	struct ib_cq *cq;
+	u32 wq_num;
+	enum ib_wq_state state;
+	enum ib_wq_type wq_type;
+	atomic_t usecnt;
+};
+
+enum ib_wc_status {
+	IB_WC_SUCCESS = 0,
+	IB_WC_LOC_LEN_ERR = 1,
+	IB_WC_LOC_QP_OP_ERR = 2,
+	IB_WC_LOC_EEC_OP_ERR = 3,
+	IB_WC_LOC_PROT_ERR = 4,
+	IB_WC_WR_FLUSH_ERR = 5,
+	IB_WC_MW_BIND_ERR = 6,
+	IB_WC_BAD_RESP_ERR = 7,
+	IB_WC_LOC_ACCESS_ERR = 8,
+	IB_WC_REM_INV_REQ_ERR = 9,
+	IB_WC_REM_ACCESS_ERR = 10,
+	IB_WC_REM_OP_ERR = 11,
+	IB_WC_RETRY_EXC_ERR = 12,
+	IB_WC_RNR_RETRY_EXC_ERR = 13,
+	IB_WC_LOC_RDD_VIOL_ERR = 14,
+	IB_WC_REM_INV_RD_REQ_ERR = 15,
+	IB_WC_REM_ABORT_ERR = 16,
+	IB_WC_INV_EECN_ERR = 17,
+	IB_WC_INV_EEC_STATE_ERR = 18,
+	IB_WC_FATAL_ERR = 19,
+	IB_WC_RESP_TIMEOUT_ERR = 20,
+	IB_WC_GENERAL_ERR = 21,
+};
+
+enum ib_wc_opcode {
+	IB_WC_SEND = 0,
+	IB_WC_RDMA_WRITE = 1,
+	IB_WC_RDMA_READ = 2,
+	IB_WC_COMP_SWAP = 3,
+	IB_WC_FETCH_ADD = 4,
+	IB_WC_BIND_MW = 5,
+	IB_WC_LOCAL_INV = 6,
+	IB_WC_LSO = 7,
+	IB_WC_ATOMIC_WRITE = 9,
+	IB_WC_REG_MR = 10,
+	IB_WC_MASKED_COMP_SWAP = 11,
+	IB_WC_MASKED_FETCH_ADD = 12,
+	IB_WC_FLUSH = 8,
+	IB_WC_RECV = 128,
+	IB_WC_RECV_RDMA_WITH_IMM = 129,
+};
+
+struct ib_cqe;
+
+struct ib_wc {
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	enum ib_wc_status status;
+	enum ib_wc_opcode opcode;
+	u32 vendor_err;
+	u32 byte_len;
+	struct ib_qp *qp;
+	union {
+		__be32 imm_data;
+		u32 invalidate_rkey;
+	} ex;
+	u32 src_qp;
+	u32 slid;
+	int wc_flags;
+	u16 pkey_index;
+	u8 sl;
+	u8 dlid_path_bits;
+	u32 port_num;
+	u8 smac[6];
+	u16 vlan_id;
+	u8 network_hdr_type;
+};
+
+struct ib_cqe {
+	void (*done)(struct ib_cq *, struct ib_wc *);
+};
+
+struct dim_stats {
+	int ppms;
+	int bpms;
+	int epms;
+	int cpms;
+	int cpe_ratio;
+};
+
+struct dim_sample {
+	ktime_t time;
+	u32 pkt_ctr;
+	u32 byte_ctr;
+	u16 event_ctr;
+	u32 comp_ctr;
+};
+
+struct dim {
+	u8 state;
+	struct dim_stats prev_stats;
+	struct dim_sample start_sample;
+	struct dim_sample measuring_sample;
+	struct work_struct work;
+	void *priv;
+	u8 profile_ix;
+	u8 mode;
+	u8 tune_state;
+	u8 steps_right;
+	u8 steps_left;
+	u8 tired;
+};
+
+union ib_gid {
+	u8 raw[16];
+	struct {
+		__be64 subnet_prefix;
+		__be64 interface_id;
+	} global;
+};
+
+enum ib_gid_type {
+	IB_GID_TYPE_IB = 0,
+	IB_GID_TYPE_ROCE = 1,
+	IB_GID_TYPE_ROCE_UDP_ENCAP = 2,
+	IB_GID_TYPE_SIZE = 3,
+};
+
+struct ib_gid_attr {
+	struct net_device __attribute__((btf_type_tag("rcu"))) *ndev;
+	struct ib_device *device;
+	union ib_gid gid;
+	enum ib_gid_type gid_type;
+	u16 index;
+	u32 port_num;
+};
+
+struct ib_rwq_ind_table {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+	u32 ind_tbl_num;
+	u32 log_ind_tbl_size;
+	struct ib_wq **ind_tbl;
+};
+
+struct ib_ports_pkeys;
+
+struct ib_qp_security {
+	struct ib_qp *qp;
+	struct ib_device *dev;
+	struct mutex mutex;
+	struct ib_ports_pkeys *ports_pkeys;
+	struct list_head shared_qp_list;
+	void *security;
+	bool destroying;
+	atomic_t error_list_count;
+	struct completion error_complete;
+	int error_comps_pending;
+};
+
+enum port_pkey_state {
+	IB_PORT_PKEY_NOT_VALID = 0,
+	IB_PORT_PKEY_VALID = 1,
+	IB_PORT_PKEY_LISTED = 2,
+};
+
+struct ib_port_pkey {
+	enum port_pkey_state state;
+	u16 pkey_index;
+	u32 port_num;
+	struct list_head qp_list;
+	struct list_head to_error_list;
+	struct ib_qp_security *sec;
+};
+
+struct ib_ports_pkeys {
+	struct ib_port_pkey main;
+	struct ib_port_pkey alt;
+};
+
+enum rdma_nl_counter_mode {
+	RDMA_COUNTER_MODE_NONE = 0,
+	RDMA_COUNTER_MODE_AUTO = 1,
+	RDMA_COUNTER_MODE_MANUAL = 2,
+	RDMA_COUNTER_MODE_MAX = 3,
+};
+
+enum rdma_nl_counter_mask {
+	RDMA_COUNTER_MASK_QP_TYPE = 1,
+	RDMA_COUNTER_MASK_PID = 2,
+};
+
+struct auto_mode_param {
+	int qp_type;
+};
+
+struct rdma_counter_mode {
+	enum rdma_nl_counter_mode mode;
+	enum rdma_nl_counter_mask mask;
+	struct auto_mode_param param;
+};
+
+struct rdma_counter {
+	struct rdma_restrack_entry res;
+	struct ib_device *device;
+	uint32_t id;
+	struct kref kref;
+	struct rdma_counter_mode mode;
+	struct mutex lock;
+	struct rdma_hw_stats *stats;
+	u32 port;
+};
+
+struct rdma_stat_desc;
+
+struct rdma_hw_stats {
+	struct mutex lock;
+	unsigned long timestamp;
+	unsigned long lifespan;
+	const struct rdma_stat_desc *descs;
+	unsigned long *is_disabled;
+	int num_counters;
+	u64 value[0];
+};
+
+struct rdma_stat_desc {
+	const char *name;
+	unsigned int flags;
+	const void *priv;
+};
+
+enum ib_wr_opcode {
+	IB_WR_RDMA_WRITE = 0,
+	IB_WR_RDMA_WRITE_WITH_IMM = 1,
+	IB_WR_SEND = 2,
+	IB_WR_SEND_WITH_IMM = 3,
+	IB_WR_RDMA_READ = 4,
+	IB_WR_ATOMIC_CMP_AND_SWP = 5,
+	IB_WR_ATOMIC_FETCH_AND_ADD = 6,
+	IB_WR_BIND_MW = 8,
+	IB_WR_LSO = 10,
+	IB_WR_SEND_WITH_INV = 9,
+	IB_WR_RDMA_READ_WITH_INV = 11,
+	IB_WR_LOCAL_INV = 7,
+	IB_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
+	IB_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
+	IB_WR_FLUSH = 14,
+	IB_WR_ATOMIC_WRITE = 15,
+	IB_WR_REG_MR = 32,
+	IB_WR_REG_MR_INTEGRITY = 33,
+	IB_WR_RESERVED1 = 240,
+	IB_WR_RESERVED2 = 241,
+	IB_WR_RESERVED3 = 242,
+	IB_WR_RESERVED4 = 243,
+	IB_WR_RESERVED5 = 244,
+	IB_WR_RESERVED6 = 245,
+	IB_WR_RESERVED7 = 246,
+	IB_WR_RESERVED8 = 247,
+	IB_WR_RESERVED9 = 248,
+	IB_WR_RESERVED10 = 249,
+};
+
+struct ib_send_wr {
+	struct ib_send_wr *next;
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	struct ib_sge *sg_list;
+	int num_sge;
+	enum ib_wr_opcode opcode;
+	int send_flags;
+	union {
+		__be32 imm_data;
+		u32 invalidate_rkey;
+	} ex;
+};
+
+struct ib_sge {
+	u64 addr;
+	u32 length;
+	u32 lkey;
+};
+
+struct ib_recv_wr {
+	struct ib_recv_wr *next;
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	struct ib_sge *sg_list;
+	int num_sge;
+};
+
+struct ib_grh {
+	__be32 version_tclass_flow;
+	__be16 paylen;
+	u8 next_hdr;
+	u8 hop_limit;
+	union ib_gid sgid;
+	union ib_gid dgid;
+};
+
+struct ib_udata {
+	const void __attribute__((btf_type_tag("user"))) *inbuf;
+	void __attribute__((btf_type_tag("user"))) *outbuf;
+	size_t inlen;
+	size_t outlen;
+};
+
+struct ib_device_modify {
+	u64 sys_image_guid;
+	char node_desc[64];
+};
+
+enum ib_port_state {
+	IB_PORT_NOP = 0,
+	IB_PORT_DOWN = 1,
+	IB_PORT_INIT = 2,
+	IB_PORT_ARMED = 3,
+	IB_PORT_ACTIVE = 4,
+	IB_PORT_ACTIVE_DEFER = 5,
+};
+
+enum ib_mtu {
+	IB_MTU_256 = 1,
+	IB_MTU_512 = 2,
+	IB_MTU_1024 = 3,
+	IB_MTU_2048 = 4,
+	IB_MTU_4096 = 5,
+};
+
+struct ib_port_attr {
+	u64 subnet_prefix;
+	enum ib_port_state state;
+	enum ib_mtu max_mtu;
+	enum ib_mtu active_mtu;
+	u32 phys_mtu;
+	int gid_tbl_len;
+	unsigned int ip_gids: 1;
+	u32 port_cap_flags;
+	u32 max_msg_sz;
+	u32 bad_pkey_cntr;
+	u32 qkey_viol_cntr;
+	u16 pkey_tbl_len;
+	u32 sm_lid;
+	u32 lid;
+	u8 lmc;
+	u8 max_vl_num;
+	u8 sm_sl;
+	u8 subnet_timeout;
+	u8 init_type_reply;
+	u8 active_width;
+	u16 active_speed;
+	u8 phys_state;
+	u16 port_cap_flags2;
+};
+
+struct ib_port_modify {
+	u32 set_port_cap_mask;
+	u32 clr_port_cap_mask;
+	u8 init_type;
+};
+
+struct ib_port_immutable {
+	int pkey_tbl_len;
+	int gid_tbl_len;
+	u32 core_cap_flags;
+	u32 max_mad_size;
+};
+
+struct rdma_netdev_alloc_params {
+	size_t sizeof_priv;
+	unsigned int txqs;
+	unsigned int rxqs;
+	void *param;
+	int (*initialize_rdma_netdev)(struct ib_device *, u32, struct net_device *, void *);
+};
+
+struct rdma_user_mmap_entry {
+	struct kref ref;
+	struct ib_ucontext *ucontext;
+	unsigned long start_pgoff;
+	size_t npages;
+	bool driver_removed;
+};
+
+enum rdma_ah_attr_type {
+	RDMA_AH_ATTR_TYPE_UNDEFINED = 0,
+	RDMA_AH_ATTR_TYPE_IB = 1,
+	RDMA_AH_ATTR_TYPE_ROCE = 2,
+	RDMA_AH_ATTR_TYPE_OPA = 3,
+};
+
+struct ib_ah {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_uobject *uobject;
+	const struct ib_gid_attr *sgid_attr;
+	enum rdma_ah_attr_type type;
+};
+
+struct rdma_ah_init_attr {
+	struct rdma_ah_attr *ah_attr;
+	u32 flags;
+	struct net_device *xmit_slave;
+};
+
+struct ib_ah_attr {
+	u16 dlid;
+	u8 src_path_bits;
+};
+
+struct roce_ah_attr {
+	u8 dmac[6];
+};
+
+struct opa_ah_attr {
+	u32 dlid;
+	u8 src_path_bits;
+	bool make_grd;
+};
+
+struct ib_global_route {
+	const struct ib_gid_attr *sgid_attr;
+	union ib_gid dgid;
+	u32 flow_label;
+	u8 sgid_index;
+	u8 hop_limit;
+	u8 traffic_class;
+};
+
+struct rdma_ah_attr {
+	struct ib_global_route grh;
+	u8 sl;
+	u8 static_rate;
+	u32 port_num;
+	u8 ah_flags;
+	enum rdma_ah_attr_type type;
+	union {
+		struct ib_ah_attr ib;
+		struct roce_ah_attr roce;
+		struct opa_ah_attr opa;
+	};
+};
+
+struct ib_srq_attr {
+	u32 max_wr;
+	u32 max_sge;
+	u32 srq_limit;
+};
+
+struct ib_srq_init_attr {
+	void (*event_handler)(struct ib_event *, void *);
+	void *srq_context;
+	struct ib_srq_attr attr;
+	enum ib_srq_type srq_type;
+	struct {
+		struct ib_cq *cq;
+		union {
+			struct {
+				struct ib_xrcd *xrcd;
+			} xrc;
+			struct {
+				u32 max_num_tags;
+			} tag_matching;
+		};
+	} ext;
+};
+
+struct ib_qp_cap {
+	u32 max_send_wr;
+	u32 max_recv_wr;
+	u32 max_send_sge;
+	u32 max_recv_sge;
+	u32 max_inline_data;
+	u32 max_rdma_ctxs;
+};
+
+enum ib_sig_type {
+	IB_SIGNAL_ALL_WR = 0,
+	IB_SIGNAL_REQ_WR = 1,
+};
+
+struct ib_qp_init_attr {
+	void (*event_handler)(struct ib_event *, void *);
+	void *qp_context;
+	struct ib_cq *send_cq;
+	struct ib_cq *recv_cq;
+	struct ib_srq *srq;
+	struct ib_xrcd *xrcd;
+	struct ib_qp_cap cap;
+	enum ib_sig_type sq_sig_type;
+	enum ib_qp_type qp_type;
+	u32 create_flags;
+	u32 port_num;
+	struct ib_rwq_ind_table *rwq_ind_tbl;
+	u32 source_qpn;
+};
+
+enum ib_qp_state {
+	IB_QPS_RESET = 0,
+	IB_QPS_INIT = 1,
+	IB_QPS_RTR = 2,
+	IB_QPS_RTS = 3,
+	IB_QPS_SQD = 4,
+	IB_QPS_SQE = 5,
+	IB_QPS_ERR = 6,
+};
+
+enum ib_mig_state {
+	IB_MIG_MIGRATED = 0,
+	IB_MIG_REARM = 1,
+	IB_MIG_ARMED = 2,
+};
+
+struct ib_qp_attr {
+	enum ib_qp_state qp_state;
+	enum ib_qp_state cur_qp_state;
+	enum ib_mtu path_mtu;
+	enum ib_mig_state path_mig_state;
+	u32 qkey;
+	u32 rq_psn;
+	u32 sq_psn;
+	u32 dest_qp_num;
+	int qp_access_flags;
+	struct ib_qp_cap cap;
+	struct rdma_ah_attr ah_attr;
+	struct rdma_ah_attr alt_ah_attr;
+	u16 pkey_index;
+	u16 alt_pkey_index;
+	u8 en_sqd_async_notify;
+	u8 sq_draining;
+	u8 max_rd_atomic;
+	u8 max_dest_rd_atomic;
+	u8 min_rnr_timer;
+	u32 port_num;
+	u8 timeout;
+	u8 retry_cnt;
+	u8 rnr_retry;
+	u32 alt_port_num;
+	u8 alt_timeout;
+	u32 rate_limit;
+	struct net_device *xmit_slave;
+};
+
+struct ib_cq_init_attr {
+	unsigned int cqe;
+	u32 comp_vector;
+	u32 flags;
+};
+
+enum ib_sig_err_type {
+	IB_SIG_BAD_GUARD = 0,
+	IB_SIG_BAD_REFTAG = 1,
+	IB_SIG_BAD_APPTAG = 2,
+};
+
+struct ib_sig_err {
+	enum ib_sig_err_type err_type;
+	u32 expected;
+	u32 actual;
+	u64 sig_err_offset;
+	u32 key;
+};
+
+struct ib_mr_status {
+	u32 fail_status;
+	struct ib_sig_err sig_err;
+};
+
+enum ib_mw_type {
+	IB_MW_TYPE_1 = 1,
+	IB_MW_TYPE_2 = 2,
+};
+
+struct ib_mw {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_uobject *uobject;
+	u32 rkey;
+	enum ib_mw_type type;
+};
+
+struct ib_flow {
+	struct ib_qp *qp;
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+};
+
+enum ib_flow_attr_type {
+	IB_FLOW_ATTR_NORMAL = 0,
+	IB_FLOW_ATTR_ALL_DEFAULT = 1,
+	IB_FLOW_ATTR_MC_DEFAULT = 2,
+	IB_FLOW_ATTR_SNIFFER = 3,
+};
+
+struct ib_flow_eth_filter {
+	u8 dst_mac[6];
+	u8 src_mac[6];
+	__be16 ether_type;
+	__be16 vlan_tag;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_eth {
+	u32 type;
+	u16 size;
+	struct ib_flow_eth_filter val;
+	struct ib_flow_eth_filter mask;
+};
+
+struct ib_flow_ib_filter {
+	__be16 dlid;
+	__u8 sl;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ib {
+	u32 type;
+	u16 size;
+	struct ib_flow_ib_filter val;
+	struct ib_flow_ib_filter mask;
+};
+
+struct ib_flow_ipv4_filter {
+	__be32 src_ip;
+	__be32 dst_ip;
+	u8 proto;
+	u8 tos;
+	u8 ttl;
+	u8 flags;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ipv4 {
+	u32 type;
+	u16 size;
+	struct ib_flow_ipv4_filter val;
+	struct ib_flow_ipv4_filter mask;
+};
+
+struct ib_flow_tcp_udp_filter {
+	__be16 dst_port;
+	__be16 src_port;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_tcp_udp {
+	u32 type;
+	u16 size;
+	struct ib_flow_tcp_udp_filter val;
+	struct ib_flow_tcp_udp_filter mask;
+};
+
+struct ib_flow_ipv6_filter {
+	u8 src_ip[16];
+	u8 dst_ip[16];
+	__be32 flow_label;
+	u8 next_hdr;
+	u8 traffic_class;
+	u8 hop_limit;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ipv6 {
+	u32 type;
+	u16 size;
+	struct ib_flow_ipv6_filter val;
+	struct ib_flow_ipv6_filter mask;
+};
+
+struct ib_flow_tunnel_filter {
+	__be32 tunnel_id;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_tunnel {
+	u32 type;
+	u16 size;
+	struct ib_flow_tunnel_filter val;
+	struct ib_flow_tunnel_filter mask;
+};
+
+struct ib_flow_esp_filter {
+	__be32 spi;
+	__be32 seq;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_esp {
+	u32 type;
+	u16 size;
+	struct ib_flow_esp_filter val;
+	struct ib_flow_esp_filter mask;
+};
+
+struct ib_flow_gre_filter {
+	__be16 c_ks_res0_ver;
+	__be16 protocol;
+	__be32 key;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_gre {
+	u32 type;
+	u16 size;
+	struct ib_flow_gre_filter val;
+	struct ib_flow_gre_filter mask;
+};
+
+struct ib_flow_mpls_filter {
+	__be32 tag;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_mpls {
+	u32 type;
+	u16 size;
+	struct ib_flow_mpls_filter val;
+	struct ib_flow_mpls_filter mask;
+};
+
+enum ib_flow_spec_type {
+	IB_FLOW_SPEC_ETH = 32,
+	IB_FLOW_SPEC_IB = 34,
+	IB_FLOW_SPEC_IPV4 = 48,
+	IB_FLOW_SPEC_IPV6 = 49,
+	IB_FLOW_SPEC_ESP = 52,
+	IB_FLOW_SPEC_TCP = 64,
+	IB_FLOW_SPEC_UDP = 65,
+	IB_FLOW_SPEC_VXLAN_TUNNEL = 80,
+	IB_FLOW_SPEC_GRE = 81,
+	IB_FLOW_SPEC_MPLS = 96,
+	IB_FLOW_SPEC_INNER = 256,
+	IB_FLOW_SPEC_ACTION_TAG = 4096,
+	IB_FLOW_SPEC_ACTION_DROP = 4097,
+	IB_FLOW_SPEC_ACTION_HANDLE = 4098,
+	IB_FLOW_SPEC_ACTION_COUNT = 4099,
+};
+
+struct ib_flow_spec_action_tag {
+	enum ib_flow_spec_type type;
+	u16 size;
+	u32 tag_id;
+};
+
+struct ib_flow_spec_action_drop {
+	enum ib_flow_spec_type type;
+	u16 size;
+};
+
+struct ib_flow_spec_action_handle {
+	enum ib_flow_spec_type type;
+	u16 size;
+	struct ib_flow_action *act;
+};
+
+struct ib_flow_spec_action_count {
+	enum ib_flow_spec_type type;
+	u16 size;
+	struct ib_counters *counters;
+};
+
+union ib_flow_spec {
+	struct {
+		u32 type;
+		u16 size;
+	};
+	struct ib_flow_spec_eth eth;
+	struct ib_flow_spec_ib ib;
+	struct ib_flow_spec_ipv4 ipv4;
+	struct ib_flow_spec_tcp_udp tcp_udp;
+	struct ib_flow_spec_ipv6 ipv6;
+	struct ib_flow_spec_tunnel tunnel;
+	struct ib_flow_spec_esp esp;
+	struct ib_flow_spec_gre gre;
+	struct ib_flow_spec_mpls mpls;
+	struct ib_flow_spec_action_tag flow_tag;
+	struct ib_flow_spec_action_drop drop;
+	struct ib_flow_spec_action_handle action;
+	struct ib_flow_spec_action_count flow_count;
+};
+
+struct ib_flow_attr {
+	enum ib_flow_attr_type type;
+	u16 size;
+	u16 priority;
+	u32 flags;
+	u8 num_of_specs;
+	u32 port;
+	union ib_flow_spec flows[0];
+};
+
+enum ib_flow_action_type {
+	IB_FLOW_ACTION_UNSPECIFIED = 0,
+	IB_FLOW_ACTION_ESP = 1,
+};
+
+struct ib_flow_action {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	enum ib_flow_action_type type;
+	atomic_t usecnt;
+};
+
+struct ib_counters {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+};
+
+struct ib_wq_init_attr {
+	void *wq_context;
+	enum ib_wq_type wq_type;
+	u32 max_wr;
+	u32 max_sge;
+	struct ib_cq *cq;
+	void (*event_handler)(struct ib_event *, void *);
+	u32 create_flags;
+};
+
+struct ib_wq_attr {
+	enum ib_wq_state wq_state;
+	enum ib_wq_state curr_wq_state;
+	u32 flags;
+	u32 flags_mask;
+};
+
+struct ib_rwq_ind_table_init_attr {
+	u32 log_ind_tbl_size;
+	struct ib_wq **ind_tbl;
+};
+
+struct ib_dm_alloc_attr {
+	u64 length;
+	u32 alignment;
+	u32 flags;
+};
+
+struct ib_dm_mr_attr {
+	u64 length;
+	u64 offset;
+	u32 access_flags;
+};
+
+struct ib_counters_read_attr {
+	u64 *counters_buff;
+	u32 ncounters;
+	u32 flags;
+};
+
+struct ib_pkey_cache;
+
+struct ib_gid_table;
+
+struct ib_port_cache {
+	u64 subnet_prefix;
+	struct ib_pkey_cache *pkey;
+	struct ib_gid_table *gid;
+	u8 lmc;
+	enum ib_port_state port_state;
+};
+
+struct rdma_port_counter {
+	struct rdma_counter_mode mode;
+	struct rdma_hw_stats *hstats;
+	unsigned int num_counters;
+	struct mutex lock;
+};
+
+struct ib_port;
+
+struct ib_port_data {
+	struct ib_device *ib_dev;
+	struct ib_port_immutable immutable;
+	spinlock_t pkey_list_lock;
+	spinlock_t netdev_lock;
+	struct list_head pkey_list;
+	struct ib_port_cache cache;
+	struct net_device __attribute__((btf_type_tag("rcu"))) *netdev;
+	netdevice_tracker netdev_tracker;
+	struct hlist_node ndev_hash_link;
+	struct rdma_port_counter port_counter;
+	struct ib_port *sysfs;
+};
+
+struct rdma_link_ops {
+	struct list_head list;
+	const char *type;
+	int (*newlink)(const char *, struct net_device *);
+};
+
+enum devlink_linecard_state {
+	DEVLINK_LINECARD_STATE_UNSPEC = 0,
+	DEVLINK_LINECARD_STATE_UNPROVISIONED = 1,
+	DEVLINK_LINECARD_STATE_UNPROVISIONING = 2,
+	DEVLINK_LINECARD_STATE_PROVISIONING = 3,
+	DEVLINK_LINECARD_STATE_PROVISIONING_FAILED = 4,
+	DEVLINK_LINECARD_STATE_PROVISIONED = 5,
+	DEVLINK_LINECARD_STATE_ACTIVE = 6,
+	__DEVLINK_LINECARD_STATE_MAX = 7,
+	DEVLINK_LINECARD_STATE_MAX = 6,
+};
+
+struct devlink_linecard_ops;
+
+struct devlink_linecard_type;
+
+struct devlink_linecard {
+	struct list_head list;
+	struct devlink *devlink;
+	unsigned int index;
+	const struct devlink_linecard_ops *ops;
+	void *priv;
+	enum devlink_linecard_state state;
+	struct mutex state_lock;
+	const char *type;
+	struct devlink_linecard_type *types;
+	unsigned int types_count;
+	struct devlink *nested_devlink;
+};
+
+struct devlink_linecard_ops {
+	int (*provision)(struct devlink_linecard *, void *, const char *, const void *, struct netlink_ext_ack *);
+	int (*unprovision)(struct devlink_linecard *, void *, struct netlink_ext_ack *);
+	bool (*same_provision)(struct devlink_linecard *, void *, const char *, const void *);
+	unsigned int (*types_count)(struct devlink_linecard *, void *);
+	void (*types_get)(struct devlink_linecard *, void *, unsigned int, const char **, const void **);
+};
+
+typedef void (*btf_trace_devlink_hwmsg)(void *, const struct devlink *, bool, unsigned long, const u8 *, size_t);
+
+typedef void (*btf_trace_devlink_hwerr)(void *, const struct devlink *, int, const char *);
+
+typedef void (*btf_trace_devlink_health_report)(void *, const struct devlink *, const char *, const char *);
+
+typedef void (*btf_trace_devlink_health_recover_aborted)(void *, const struct devlink *, const char *, bool, u64);
+
+typedef void (*btf_trace_devlink_health_reporter_state_update)(void *, const struct devlink *, const char *, bool);
+
+struct devlink_trap_metadata;
+
+typedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
+
+struct devlink_trap_metadata {
+	const char *trap_name;
+	const char *trap_group_name;
+	struct net_device *input_dev;
+	netdevice_tracker dev_tracker;
+	const struct flow_action_cookie *fa_cookie;
+	enum devlink_trap_type trap_type;
+};
+
+struct trace_event_raw_devlink_hwmsg {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	bool incoming;
+	unsigned long type;
+	u32 __data_loc_buf;
+	size_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_hwerr {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	int err;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_recover_aborted {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	bool health_state;
+	u64 time_since_last_recover;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_reporter_state_update {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u8 new_state;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_trap_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_trap_name;
+	u32 __data_loc_trap_group_name;
+	char input_dev_name[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devlink_hwmsg {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_devlink_hwerr {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_recover_aborted {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_health_reporter_state_update {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_trap_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 trap_name;
+	u32 trap_group_name;
+};
+
+enum devlink_attr {
+	DEVLINK_ATTR_UNSPEC = 0,
+	DEVLINK_ATTR_BUS_NAME = 1,
+	DEVLINK_ATTR_DEV_NAME = 2,
+	DEVLINK_ATTR_PORT_INDEX = 3,
+	DEVLINK_ATTR_PORT_TYPE = 4,
+	DEVLINK_ATTR_PORT_DESIRED_TYPE = 5,
+	DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 6,
+	DEVLINK_ATTR_PORT_NETDEV_NAME = 7,
+	DEVLINK_ATTR_PORT_IBDEV_NAME = 8,
+	DEVLINK_ATTR_PORT_SPLIT_COUNT = 9,
+	DEVLINK_ATTR_PORT_SPLIT_GROUP = 10,
+	DEVLINK_ATTR_SB_INDEX = 11,
+	DEVLINK_ATTR_SB_SIZE = 12,
+	DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 13,
+	DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 14,
+	DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 15,
+	DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 16,
+	DEVLINK_ATTR_SB_POOL_INDEX = 17,
+	DEVLINK_ATTR_SB_POOL_TYPE = 18,
+	DEVLINK_ATTR_SB_POOL_SIZE = 19,
+	DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 20,
+	DEVLINK_ATTR_SB_THRESHOLD = 21,
+	DEVLINK_ATTR_SB_TC_INDEX = 22,
+	DEVLINK_ATTR_SB_OCC_CUR = 23,
+	DEVLINK_ATTR_SB_OCC_MAX = 24,
+	DEVLINK_ATTR_ESWITCH_MODE = 25,
+	DEVLINK_ATTR_ESWITCH_INLINE_MODE = 26,
+	DEVLINK_ATTR_DPIPE_TABLES = 27,
+	DEVLINK_ATTR_DPIPE_TABLE = 28,
+	DEVLINK_ATTR_DPIPE_TABLE_NAME = 29,
+	DEVLINK_ATTR_DPIPE_TABLE_SIZE = 30,
+	DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 31,
+	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 32,
+	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 33,
+	DEVLINK_ATTR_DPIPE_ENTRIES = 34,
+	DEVLINK_ATTR_DPIPE_ENTRY = 35,
+	DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 36,
+	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 37,
+	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 38,
+	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 39,
+	DEVLINK_ATTR_DPIPE_MATCH = 40,
+	DEVLINK_ATTR_DPIPE_MATCH_VALUE = 41,
+	DEVLINK_ATTR_DPIPE_MATCH_TYPE = 42,
+	DEVLINK_ATTR_DPIPE_ACTION = 43,
+	DEVLINK_ATTR_DPIPE_ACTION_VALUE = 44,
+	DEVLINK_ATTR_DPIPE_ACTION_TYPE = 45,
+	DEVLINK_ATTR_DPIPE_VALUE = 46,
+	DEVLINK_ATTR_DPIPE_VALUE_MASK = 47,
+	DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 48,
+	DEVLINK_ATTR_DPIPE_HEADERS = 49,
+	DEVLINK_ATTR_DPIPE_HEADER = 50,
+	DEVLINK_ATTR_DPIPE_HEADER_NAME = 51,
+	DEVLINK_ATTR_DPIPE_HEADER_ID = 52,
+	DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 53,
+	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 54,
+	DEVLINK_ATTR_DPIPE_HEADER_INDEX = 55,
+	DEVLINK_ATTR_DPIPE_FIELD = 56,
+	DEVLINK_ATTR_DPIPE_FIELD_NAME = 57,
+	DEVLINK_ATTR_DPIPE_FIELD_ID = 58,
+	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 59,
+	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 60,
+	DEVLINK_ATTR_PAD = 61,
+	DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 62,
+	DEVLINK_ATTR_RESOURCE_LIST = 63,
+	DEVLINK_ATTR_RESOURCE = 64,
+	DEVLINK_ATTR_RESOURCE_NAME = 65,
+	DEVLINK_ATTR_RESOURCE_ID = 66,
+	DEVLINK_ATTR_RESOURCE_SIZE = 67,
+	DEVLINK_ATTR_RESOURCE_SIZE_NEW = 68,
+	DEVLINK_ATTR_RESOURCE_SIZE_VALID = 69,
+	DEVLINK_ATTR_RESOURCE_SIZE_MIN = 70,
+	DEVLINK_ATTR_RESOURCE_SIZE_MAX = 71,
+	DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 72,
+	DEVLINK_ATTR_RESOURCE_UNIT = 73,
+	DEVLINK_ATTR_RESOURCE_OCC = 74,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 75,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76,
+	DEVLINK_ATTR_PORT_FLAVOUR = 77,
+	DEVLINK_ATTR_PORT_NUMBER = 78,
+	DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 79,
+	DEVLINK_ATTR_PARAM = 80,
+	DEVLINK_ATTR_PARAM_NAME = 81,
+	DEVLINK_ATTR_PARAM_GENERIC = 82,
+	DEVLINK_ATTR_PARAM_TYPE = 83,
+	DEVLINK_ATTR_PARAM_VALUES_LIST = 84,
+	DEVLINK_ATTR_PARAM_VALUE = 85,
+	DEVLINK_ATTR_PARAM_VALUE_DATA = 86,
+	DEVLINK_ATTR_PARAM_VALUE_CMODE = 87,
+	DEVLINK_ATTR_REGION_NAME = 88,
+	DEVLINK_ATTR_REGION_SIZE = 89,
+	DEVLINK_ATTR_REGION_SNAPSHOTS = 90,
+	DEVLINK_ATTR_REGION_SNAPSHOT = 91,
+	DEVLINK_ATTR_REGION_SNAPSHOT_ID = 92,
+	DEVLINK_ATTR_REGION_CHUNKS = 93,
+	DEVLINK_ATTR_REGION_CHUNK = 94,
+	DEVLINK_ATTR_REGION_CHUNK_DATA = 95,
+	DEVLINK_ATTR_REGION_CHUNK_ADDR = 96,
+	DEVLINK_ATTR_REGION_CHUNK_LEN = 97,
+	DEVLINK_ATTR_INFO_DRIVER_NAME = 98,
+	DEVLINK_ATTR_INFO_SERIAL_NUMBER = 99,
+	DEVLINK_ATTR_INFO_VERSION_FIXED = 100,
+	DEVLINK_ATTR_INFO_VERSION_RUNNING = 101,
+	DEVLINK_ATTR_INFO_VERSION_STORED = 102,
+	DEVLINK_ATTR_INFO_VERSION_NAME = 103,
+	DEVLINK_ATTR_INFO_VERSION_VALUE = 104,
+	DEVLINK_ATTR_SB_POOL_CELL_SIZE = 105,
+	DEVLINK_ATTR_FMSG = 106,
+	DEVLINK_ATTR_FMSG_OBJ_NEST_START = 107,
+	DEVLINK_ATTR_FMSG_PAIR_NEST_START = 108,
+	DEVLINK_ATTR_FMSG_ARR_NEST_START = 109,
+	DEVLINK_ATTR_FMSG_NEST_END = 110,
+	DEVLINK_ATTR_FMSG_OBJ_NAME = 111,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 112,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 113,
+	DEVLINK_ATTR_HEALTH_REPORTER = 114,
+	DEVLINK_ATTR_HEALTH_REPORTER_NAME = 115,
+	DEVLINK_ATTR_HEALTH_REPORTER_STATE = 116,
+	DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 117,
+	DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 118,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 119,
+	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 120,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 121,
+	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 122,
+	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 123,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 124,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 125,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 126,
+	DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 127,
+	DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 128,
+	DEVLINK_ATTR_STATS = 129,
+	DEVLINK_ATTR_TRAP_NAME = 130,
+	DEVLINK_ATTR_TRAP_ACTION = 131,
+	DEVLINK_ATTR_TRAP_TYPE = 132,
+	DEVLINK_ATTR_TRAP_GENERIC = 133,
+	DEVLINK_ATTR_TRAP_METADATA = 134,
+	DEVLINK_ATTR_TRAP_GROUP_NAME = 135,
+	DEVLINK_ATTR_RELOAD_FAILED = 136,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 137,
+	DEVLINK_ATTR_NETNS_FD = 138,
+	DEVLINK_ATTR_NETNS_PID = 139,
+	DEVLINK_ATTR_NETNS_ID = 140,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 141,
+	DEVLINK_ATTR_TRAP_POLICER_ID = 142,
+	DEVLINK_ATTR_TRAP_POLICER_RATE = 143,
+	DEVLINK_ATTR_TRAP_POLICER_BURST = 144,
+	DEVLINK_ATTR_PORT_FUNCTION = 145,
+	DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 146,
+	DEVLINK_ATTR_PORT_LANES = 147,
+	DEVLINK_ATTR_PORT_SPLITTABLE = 148,
+	DEVLINK_ATTR_PORT_EXTERNAL = 149,
+	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 151,
+	DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 152,
+	DEVLINK_ATTR_RELOAD_ACTION = 153,
+	DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 154,
+	DEVLINK_ATTR_RELOAD_LIMITS = 155,
+	DEVLINK_ATTR_DEV_STATS = 156,
+	DEVLINK_ATTR_RELOAD_STATS = 157,
+	DEVLINK_ATTR_RELOAD_STATS_ENTRY = 158,
+	DEVLINK_ATTR_RELOAD_STATS_LIMIT = 159,
+	DEVLINK_ATTR_RELOAD_STATS_VALUE = 160,
+	DEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,
+	DEVLINK_ATTR_RELOAD_ACTION_INFO = 162,
+	DEVLINK_ATTR_RELOAD_ACTION_STATS = 163,
+	DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 164,
+	DEVLINK_ATTR_RATE_TYPE = 165,
+	DEVLINK_ATTR_RATE_TX_SHARE = 166,
+	DEVLINK_ATTR_RATE_TX_MAX = 167,
+	DEVLINK_ATTR_RATE_NODE_NAME = 168,
+	DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 169,
+	DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 170,
+	DEVLINK_ATTR_LINECARD_INDEX = 171,
+	DEVLINK_ATTR_LINECARD_STATE = 172,
+	DEVLINK_ATTR_LINECARD_TYPE = 173,
+	DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 174,
+	DEVLINK_ATTR_NESTED_DEVLINK = 175,
+	DEVLINK_ATTR_SELFTESTS = 176,
+	DEVLINK_ATTR_RATE_TX_PRIORITY = 177,
+	DEVLINK_ATTR_RATE_TX_WEIGHT = 178,
+	DEVLINK_ATTR_REGION_DIRECT = 179,
+	__DEVLINK_ATTR_MAX = 180,
+	DEVLINK_ATTR_MAX = 179,
+};
+
+struct devlink_nl_dump_state {
+	unsigned long instance;
+	int idx;
+	union {
+		struct {
+			u64 start_offset;
+		};
+		struct {
+			u64 dump_ts;
+		};
+	};
+};
+
+typedef int devlink_nl_dump_one_func_t(struct sk_buff *, struct devlink *, struct netlink_callback *, int);
+
+struct devlink_reload_combination {
+	enum devlink_reload_action action;
+	enum devlink_reload_limit limit;
+};
+
+enum devlink_info_version_type {
+	DEVLINK_INFO_VERSION_TYPE_NONE = 0,
+	DEVLINK_INFO_VERSION_TYPE_COMPONENT = 1,
+};
+
+struct devlink_info_req {
+	struct sk_buff *msg;
+	void (*version_cb)(const char *, enum devlink_info_version_type, void *);
+	void *version_cb_priv;
+};
+
+enum devlink_command {
+	DEVLINK_CMD_UNSPEC = 0,
+	DEVLINK_CMD_GET = 1,
+	DEVLINK_CMD_SET = 2,
+	DEVLINK_CMD_NEW = 3,
+	DEVLINK_CMD_DEL = 4,
+	DEVLINK_CMD_PORT_GET = 5,
+	DEVLINK_CMD_PORT_SET = 6,
+	DEVLINK_CMD_PORT_NEW = 7,
+	DEVLINK_CMD_PORT_DEL = 8,
+	DEVLINK_CMD_PORT_SPLIT = 9,
+	DEVLINK_CMD_PORT_UNSPLIT = 10,
+	DEVLINK_CMD_SB_GET = 11,
+	DEVLINK_CMD_SB_SET = 12,
+	DEVLINK_CMD_SB_NEW = 13,
+	DEVLINK_CMD_SB_DEL = 14,
+	DEVLINK_CMD_SB_POOL_GET = 15,
+	DEVLINK_CMD_SB_POOL_SET = 16,
+	DEVLINK_CMD_SB_POOL_NEW = 17,
+	DEVLINK_CMD_SB_POOL_DEL = 18,
+	DEVLINK_CMD_SB_PORT_POOL_GET = 19,
+	DEVLINK_CMD_SB_PORT_POOL_SET = 20,
+	DEVLINK_CMD_SB_PORT_POOL_NEW = 21,
+	DEVLINK_CMD_SB_PORT_POOL_DEL = 22,
+	DEVLINK_CMD_SB_TC_POOL_BIND_GET = 23,
+	DEVLINK_CMD_SB_TC_POOL_BIND_SET = 24,
+	DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25,
+	DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26,
+	DEVLINK_CMD_SB_OCC_SNAPSHOT = 27,
+	DEVLINK_CMD_SB_OCC_MAX_CLEAR = 28,
+	DEVLINK_CMD_ESWITCH_GET = 29,
+	DEVLINK_CMD_ESWITCH_SET = 30,
+	DEVLINK_CMD_DPIPE_TABLE_GET = 31,
+	DEVLINK_CMD_DPIPE_ENTRIES_GET = 32,
+	DEVLINK_CMD_DPIPE_HEADERS_GET = 33,
+	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34,
+	DEVLINK_CMD_RESOURCE_SET = 35,
+	DEVLINK_CMD_RESOURCE_DUMP = 36,
+	DEVLINK_CMD_RELOAD = 37,
+	DEVLINK_CMD_PARAM_GET = 38,
+	DEVLINK_CMD_PARAM_SET = 39,
+	DEVLINK_CMD_PARAM_NEW = 40,
+	DEVLINK_CMD_PARAM_DEL = 41,
+	DEVLINK_CMD_REGION_GET = 42,
+	DEVLINK_CMD_REGION_SET = 43,
+	DEVLINK_CMD_REGION_NEW = 44,
+	DEVLINK_CMD_REGION_DEL = 45,
+	DEVLINK_CMD_REGION_READ = 46,
+	DEVLINK_CMD_PORT_PARAM_GET = 47,
+	DEVLINK_CMD_PORT_PARAM_SET = 48,
+	DEVLINK_CMD_PORT_PARAM_NEW = 49,
+	DEVLINK_CMD_PORT_PARAM_DEL = 50,
+	DEVLINK_CMD_INFO_GET = 51,
+	DEVLINK_CMD_HEALTH_REPORTER_GET = 52,
+	DEVLINK_CMD_HEALTH_REPORTER_SET = 53,
+	DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54,
+	DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57,
+	DEVLINK_CMD_FLASH_UPDATE = 58,
+	DEVLINK_CMD_FLASH_UPDATE_END = 59,
+	DEVLINK_CMD_FLASH_UPDATE_STATUS = 60,
+	DEVLINK_CMD_TRAP_GET = 61,
+	DEVLINK_CMD_TRAP_SET = 62,
+	DEVLINK_CMD_TRAP_NEW = 63,
+	DEVLINK_CMD_TRAP_DEL = 64,
+	DEVLINK_CMD_TRAP_GROUP_GET = 65,
+	DEVLINK_CMD_TRAP_GROUP_SET = 66,
+	DEVLINK_CMD_TRAP_GROUP_NEW = 67,
+	DEVLINK_CMD_TRAP_GROUP_DEL = 68,
+	DEVLINK_CMD_TRAP_POLICER_GET = 69,
+	DEVLINK_CMD_TRAP_POLICER_SET = 70,
+	DEVLINK_CMD_TRAP_POLICER_NEW = 71,
+	DEVLINK_CMD_TRAP_POLICER_DEL = 72,
+	DEVLINK_CMD_HEALTH_REPORTER_TEST = 73,
+	DEVLINK_CMD_RATE_GET = 74,
+	DEVLINK_CMD_RATE_SET = 75,
+	DEVLINK_CMD_RATE_NEW = 76,
+	DEVLINK_CMD_RATE_DEL = 77,
+	DEVLINK_CMD_LINECARD_GET = 78,
+	DEVLINK_CMD_LINECARD_SET = 79,
+	DEVLINK_CMD_LINECARD_NEW = 80,
+	DEVLINK_CMD_LINECARD_DEL = 81,
+	DEVLINK_CMD_SELFTESTS_GET = 82,
+	DEVLINK_CMD_SELFTESTS_RUN = 83,
+	__DEVLINK_CMD_MAX = 84,
+	DEVLINK_CMD_MAX = 83,
+};
+
+enum devlink_attr_selftest_id {
+	DEVLINK_ATTR_SELFTEST_ID_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_ID_FLASH = 1,
+	__DEVLINK_ATTR_SELFTEST_ID_MAX = 2,
+	DEVLINK_ATTR_SELFTEST_ID_MAX = 1,
+};
+
+enum devlink_multicast_groups {
+	DEVLINK_MCGRP_CONFIG = 0,
+};
+
+enum devlink_attr_selftest_result {
+	DEVLINK_ATTR_SELFTEST_RESULT_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_RESULT = 1,
+	DEVLINK_ATTR_SELFTEST_RESULT_ID = 2,
+	DEVLINK_ATTR_SELFTEST_RESULT_STATUS = 3,
+	__DEVLINK_ATTR_SELFTEST_RESULT_MAX = 4,
+	DEVLINK_ATTR_SELFTEST_RESULT_MAX = 3,
+};
+
+struct devlink_flash_notify {
+	const char *status_msg;
+	const char *component;
+	unsigned long done;
+	unsigned long total;
+	unsigned long timeout;
+};
+
+struct devlink_flash_component_lookup_ctx {
+	const char *lookup_name;
+	bool lookup_name_found;
+};
+
+enum devlink_port_function_attr {
+	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,
+	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,
+	DEVLINK_PORT_FN_ATTR_STATE = 2,
+	DEVLINK_PORT_FN_ATTR_OPSTATE = 3,
+	DEVLINK_PORT_FN_ATTR_CAPS = 4,
+	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 5,
+	DEVLINK_PORT_FUNCTION_ATTR_MAX = 4,
+};
+
+enum devlink_port_fn_attr_cap {
+	DEVLINK_PORT_FN_ATTR_CAP_ROCE_BIT = 0,
+	DEVLINK_PORT_FN_ATTR_CAP_MIGRATABLE_BIT = 1,
+	DEVLINK_PORT_FN_ATTR_CAP_IPSEC_CRYPTO_BIT = 2,
+	DEVLINK_PORT_FN_ATTR_CAP_IPSEC_PACKET_BIT = 3,
+	__DEVLINK_PORT_FN_ATTR_CAPS_MAX = 4,
+};
+
+struct devlink_sb {
+	struct list_head list;
+	unsigned int index;
+	u32 size;
+	u16 ingress_pools_count;
+	u16 egress_pools_count;
+	u16 ingress_tc_count;
+	u16 egress_tc_count;
+};
+
+enum devlink_dpipe_match_type {
+	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0,
+};
+
+enum devlink_dpipe_action_type {
+	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0,
+};
+
+struct devlink_dpipe_table_ops;
+
+struct devlink_dpipe_table {
+	void *priv;
+	struct list_head list;
+	const char *name;
+	bool counters_enabled;
+	bool counter_control_extern;
+	bool resource_valid;
+	u64 resource_id;
+	u64 resource_units;
+	struct devlink_dpipe_table_ops *table_ops;
+	struct callback_head rcu;
+};
+
+struct devlink_dpipe_dump_ctx;
+
+struct devlink_dpipe_table_ops {
+	int (*actions_dump)(void *, struct sk_buff *);
+	int (*matches_dump)(void *, struct sk_buff *);
+	int (*entries_dump)(void *, bool, struct devlink_dpipe_dump_ctx *);
+	int (*counters_set_update)(void *, bool);
+	u64 (*size_get)(void *);
+};
+
+struct devlink_dpipe_dump_ctx {
+	struct genl_info *info;
+	enum devlink_command cmd;
+	struct sk_buff *skb;
+	struct nlattr *nest;
+	void *hdr;
+};
+
+struct devlink_dpipe_value;
+
+struct devlink_dpipe_entry {
+	u64 index;
+	struct devlink_dpipe_value *match_values;
+	unsigned int match_values_count;
+	struct devlink_dpipe_value *action_values;
+	unsigned int action_values_count;
+	u64 counter;
+	bool counter_valid;
+};
+
+struct devlink_dpipe_action;
+
+struct devlink_dpipe_match;
+
+struct devlink_dpipe_value {
+	union {
+		struct devlink_dpipe_action *action;
+		struct devlink_dpipe_match *match;
+	};
+	unsigned int mapping_value;
+	bool mapping_valid;
+	unsigned int value_size;
+	void *value;
+	void *mask;
+};
+
+struct devlink_dpipe_action {
+	enum devlink_dpipe_action_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+struct devlink_dpipe_match {
+	enum devlink_dpipe_match_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+enum devlink_resource_unit {
+	DEVLINK_RESOURCE_UNIT_ENTRY = 0,
+};
+
+struct devlink_resource_size_params {
+	u64 size_min;
+	u64 size_max;
+	u64 size_granularity;
+	enum devlink_resource_unit unit;
+};
+
+typedef u64 devlink_resource_occ_get_t(void *);
+
+struct devlink_resource {
+	const char *name;
+	u64 id;
+	u64 size;
+	u64 size_new;
+	bool size_valid;
+	struct devlink_resource *parent;
+	struct devlink_resource_size_params size_params;
+	struct list_head list;
+	struct list_head resource_list;
+	devlink_resource_occ_get_t *occ_get;
+	void *occ_get_priv;
+};
+
+enum devlink_param_type {
+	DEVLINK_PARAM_TYPE_U8 = 0,
+	DEVLINK_PARAM_TYPE_U16 = 1,
+	DEVLINK_PARAM_TYPE_U32 = 2,
+	DEVLINK_PARAM_TYPE_STRING = 3,
+	DEVLINK_PARAM_TYPE_BOOL = 4,
+};
+
+struct devlink_param_gset_ctx;
+
+union devlink_param_value;
+
+struct devlink_param {
+	u32 id;
+	const char *name;
+	bool generic;
+	enum devlink_param_type type;
+	unsigned long supported_cmodes;
+	int (*get)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*set)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*validate)(struct devlink *, u32, union devlink_param_value, struct netlink_ext_ack *);
+};
+
+union devlink_param_value {
+	u8 vu8;
+	u16 vu16;
+	u32 vu32;
+	char vstr[32];
+	bool vbool;
+};
+
+enum devlink_param_cmode {
+	DEVLINK_PARAM_CMODE_RUNTIME = 0,
+	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
+	DEVLINK_PARAM_CMODE_PERMANENT = 2,
+	__DEVLINK_PARAM_CMODE_MAX = 3,
+	DEVLINK_PARAM_CMODE_MAX = 2,
+};
+
+struct devlink_param_gset_ctx {
+	union devlink_param_value val;
+	enum devlink_param_cmode cmode;
+};
+
+enum devlink_param_generic_id {
+	DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET = 0,
+	DEVLINK_PARAM_GENERIC_ID_MAX_MACS = 1,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV = 2,
+	DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT = 3,
+	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI = 4,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX = 5,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN = 6,
+	DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY = 7,
+	DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH = 11,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA = 12,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET = 13,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_IWARP = 14,
+	DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE = 15,
+	DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE = 16,
+	__DEVLINK_PARAM_GENERIC_ID_MAX = 17,
+	DEVLINK_PARAM_GENERIC_ID_MAX = 16,
+};
+
+struct devlink_param_item {
+	struct list_head list;
+	const struct devlink_param *param;
+	union devlink_param_value driverinit_value;
+	bool driverinit_value_valid;
+	union devlink_param_value driverinit_value_new;
+	bool driverinit_value_new_valid;
+};
+
+struct devlink_region_ops;
+
+struct devlink_port_region_ops;
+
+struct devlink_region {
+	struct devlink *devlink;
+	struct devlink_port *port;
+	struct list_head list;
+	union {
+		const struct devlink_region_ops *ops;
+		const struct devlink_port_region_ops *port_ops;
+	};
+	struct mutex snapshot_lock;
+	struct list_head snapshot_list;
+	u32 max_snapshots;
+	u32 cur_snapshots;
+	u64 size;
+};
+
+struct devlink_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u8 **);
+	int (*read)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u64, u32, u8 *);
+	void *priv;
+};
+
+struct devlink_port_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u8 **);
+	int (*read)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u64, u32, u8 *);
+	void *priv;
+};
+
+struct devlink_snapshot {
+	struct list_head list;
+	struct devlink_region *region;
+	u8 *data;
+	u32 id;
+};
+
+typedef int devlink_chunk_fill_t(void *, u8 *, u32, u64, struct netlink_ext_ack *);
+
+enum devlink_health_reporter_state {
+	DEVLINK_HEALTH_REPORTER_STATE_HEALTHY = 0,
+	DEVLINK_HEALTH_REPORTER_STATE_ERROR = 1,
+};
+
+struct devlink_health_reporter_ops;
+
+struct devlink_fmsg;
+
+struct devlink_health_reporter {
+	struct list_head list;
+	void *priv;
+	const struct devlink_health_reporter_ops *ops;
+	struct devlink *devlink;
+	struct devlink_port *devlink_port;
+	struct devlink_fmsg *dump_fmsg;
+	u64 graceful_period;
+	bool auto_recover;
+	bool auto_dump;
+	u8 health_state;
+	u64 dump_ts;
+	u64 dump_real_ts;
+	u64 error_count;
+	u64 recovery_count;
+	u64 last_recovery_ts;
+};
+
+struct devlink_health_reporter_ops {
+	char *name;
+	int (*recover)(struct devlink_health_reporter *, void *, struct netlink_ext_ack *);
+	int (*dump)(struct devlink_health_reporter *, struct devlink_fmsg *, void *, struct netlink_ext_ack *);
+	int (*diagnose)(struct devlink_health_reporter *, struct devlink_fmsg *, struct netlink_ext_ack *);
+	int (*test)(struct devlink_health_reporter *, struct netlink_ext_ack *);
+};
+
+struct devlink_fmsg {
+	struct list_head item_list;
+	bool putting_binary;
+};
+
+struct devlink_fmsg_item {
+	struct list_head list;
+	int attrtype;
+	u8 nla_type;
+	u16 len;
+	int value[0];
+};
+
+enum {
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,
+};
+
+enum {
+	DEVLINK_ATTR_STATS_RX_PACKETS = 0,
+	DEVLINK_ATTR_STATS_RX_BYTES = 1,
+	DEVLINK_ATTR_STATS_RX_DROPPED = 2,
+	__DEVLINK_ATTR_STATS_MAX = 3,
+	DEVLINK_ATTR_STATS_MAX = 2,
+};
+
+enum devlink_trap_generic_id {
+	DEVLINK_TRAP_GENERIC_ID_SMAC_MC = 0,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_TAG_MISMATCH = 1,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER = 2,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_STP_FILTER = 3,
+	DEVLINK_TRAP_GENERIC_ID_EMPTY_TX_LIST = 4,
+	DEVLINK_TRAP_GENERIC_ID_PORT_LOOPBACK_FILTER = 5,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_ROUTE = 6,
+	DEVLINK_TRAP_GENERIC_ID_TTL_ERROR = 7,
+	DEVLINK_TRAP_GENERIC_ID_TAIL_DROP = 8,
+	DEVLINK_TRAP_GENERIC_ID_NON_IP_PACKET = 9,
+	DEVLINK_TRAP_GENERIC_ID_UC_DIP_MC_DMAC = 10,
+	DEVLINK_TRAP_GENERIC_ID_DIP_LB = 11,
+	DEVLINK_TRAP_GENERIC_ID_SIP_MC = 12,
+	DEVLINK_TRAP_GENERIC_ID_SIP_LB = 13,
+	DEVLINK_TRAP_GENERIC_ID_CORRUPTED_IP_HDR = 14,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_SIP_BC = 15,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_RESERVED_SCOPE = 16,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_INTERFACE_LOCAL_SCOPE = 17,
+	DEVLINK_TRAP_GENERIC_ID_MTU_ERROR = 18,
+	DEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH = 19,
+	DEVLINK_TRAP_GENERIC_ID_RPF = 20,
+	DEVLINK_TRAP_GENERIC_ID_REJECT_ROUTE = 21,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS = 22,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS = 23,
+	DEVLINK_TRAP_GENERIC_ID_NON_ROUTABLE = 24,
+	DEVLINK_TRAP_GENERIC_ID_DECAP_ERROR = 25,
+	DEVLINK_TRAP_GENERIC_ID_OVERLAY_SMAC_MC = 26,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_FLOW_ACTION_DROP = 27,
+	DEVLINK_TRAP_GENERIC_ID_EGRESS_FLOW_ACTION_DROP = 28,
+	DEVLINK_TRAP_GENERIC_ID_STP = 29,
+	DEVLINK_TRAP_GENERIC_ID_LACP = 30,
+	DEVLINK_TRAP_GENERIC_ID_LLDP = 31,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_QUERY = 32,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V1_REPORT = 33,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_REPORT = 34,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V3_REPORT = 35,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_LEAVE = 36,
+	DEVLINK_TRAP_GENERIC_ID_MLD_QUERY = 37,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_REPORT = 38,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V2_REPORT = 39,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_DONE = 40,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_DHCP = 41,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DHCP = 42,
+	DEVLINK_TRAP_GENERIC_ID_ARP_REQUEST = 43,
+	DEVLINK_TRAP_GENERIC_ID_ARP_RESPONSE = 44,
+	DEVLINK_TRAP_GENERIC_ID_ARP_OVERLAY = 45,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_SOLICIT = 46,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_ADVERT = 47,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BFD = 48,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BFD = 49,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_OSPF = 50,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_OSPF = 51,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BGP = 52,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BGP = 53,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_VRRP = 54,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_VRRP = 55,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_PIM = 56,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_PIM = 57,
+	DEVLINK_TRAP_GENERIC_ID_UC_LB = 58,
+	DEVLINK_TRAP_GENERIC_ID_LOCAL_ROUTE = 59,
+	DEVLINK_TRAP_GENERIC_ID_EXTERNAL_ROUTE = 60,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_UC_DIP_LINK_LOCAL_SCOPE = 61,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_NODES = 62,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_ROUTERS = 63,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_SOLICIT = 64,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ADVERT = 65,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_REDIRECT = 66,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_ROUTER_ALERT = 67,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ALERT = 68,
+	DEVLINK_TRAP_GENERIC_ID_PTP_EVENT = 69,
+	DEVLINK_TRAP_GENERIC_ID_PTP_GENERAL = 70,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_SAMPLE = 71,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_TRAP = 72,
+	DEVLINK_TRAP_GENERIC_ID_EARLY_DROP = 73,
+	DEVLINK_TRAP_GENERIC_ID_VXLAN_PARSING = 74,
+	DEVLINK_TRAP_GENERIC_ID_LLC_SNAP_PARSING = 75,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_PARSING = 76,
+	DEVLINK_TRAP_GENERIC_ID_PPPOE_PPP_PARSING = 77,
+	DEVLINK_TRAP_GENERIC_ID_MPLS_PARSING = 78,
+	DEVLINK_TRAP_GENERIC_ID_ARP_PARSING = 79,
+	DEVLINK_TRAP_GENERIC_ID_IP_1_PARSING = 80,
+	DEVLINK_TRAP_GENERIC_ID_IP_N_PARSING = 81,
+	DEVLINK_TRAP_GENERIC_ID_GRE_PARSING = 82,
+	DEVLINK_TRAP_GENERIC_ID_UDP_PARSING = 83,
+	DEVLINK_TRAP_GENERIC_ID_TCP_PARSING = 84,
+	DEVLINK_TRAP_GENERIC_ID_IPSEC_PARSING = 85,
+	DEVLINK_TRAP_GENERIC_ID_SCTP_PARSING = 86,
+	DEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,
+	DEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,
+	DEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_NEXTHOP = 90,
+	DEVLINK_TRAP_GENERIC_ID_DMAC_FILTER = 91,
+	DEVLINK_TRAP_GENERIC_ID_EAPOL = 92,
+	DEVLINK_TRAP_GENERIC_ID_LOCKED_PORT = 93,
+	__DEVLINK_TRAP_GENERIC_ID_MAX = 94,
+	DEVLINK_TRAP_GENERIC_ID_MAX = 93,
+};
+
+enum devlink_trap_group_generic_id {
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L2_DROPS = 0,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_DROPS = 1,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_EXCEPTIONS = 2,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BUFFER_DROPS = 3,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_TUNNEL_DROPS = 4,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_DROPS = 5,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_STP = 6,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LACP = 7,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LLDP = 8,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MC_SNOOPING = 9,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_DHCP = 10,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_NEIGH_DISCOVERY = 11,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BFD = 12,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_OSPF = 13,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BGP = 14,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_VRRP = 15,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PIM = 16,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_UC_LB = 17,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LOCAL_DELIVERY = 18,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_EXTERNAL_DELIVERY = 19,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_IPV6 = 20,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_EVENT = 21,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_GENERAL = 22,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE = 23,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP = 24,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS = 25,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_EAPOL = 26,
+	__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 27,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 26,
+};
+
+struct devlink_trap_policer_item;
+
+struct devlink_stats;
+
+struct devlink_trap_group_item {
+	const struct devlink_trap_group *group;
+	struct devlink_trap_policer_item *policer_item;
+	struct list_head list;
+	struct devlink_stats __attribute__((btf_type_tag("percpu"))) *stats;
+};
+
+struct devlink_trap_policer_item {
+	const struct devlink_trap_policer *policer;
+	u64 rate;
+	u64 burst;
+	struct list_head list;
+};
+
+struct devlink_stats {
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_packets;
+	struct u64_stats_sync syncp;
+};
+
+struct devlink_trap_item {
+	const struct devlink_trap *trap;
+	struct devlink_trap_group_item *group_item;
+	struct list_head list;
+	enum devlink_trap_action action;
+	struct devlink_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	void *priv;
+};
+
+struct devlink_linecard_type {
+	const char *type;
+	const void *priv;
+};
+
+enum vlan_flags {
+	VLAN_FLAG_REORDER_HDR = 1,
+	VLAN_FLAG_GVRP = 2,
+	VLAN_FLAG_LOOSE_BINDING = 4,
+	VLAN_FLAG_MVRP = 8,
+	VLAN_FLAG_BRIDGE_BINDING = 16,
+};
+
+enum vlan_protos {
+	VLAN_PROTO_8021Q = 0,
+	VLAN_PROTO_8021AD = 1,
+	VLAN_PROTO_NUM = 2,
+};
+
+struct vlan_pcpu_stats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_multicast;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+	u32 rx_errors;
+	u32 tx_dropped;
+};
+
+struct vlan_vid_info {
+	struct list_head list;
+	__be16 proto;
+	u16 vid;
+	int refcount;
+};
+
+struct vlan_priority_tci_mapping;
+
+struct vlan_dev_priv {
+	unsigned int nr_ingress_mappings;
+	u32 ingress_priority_map[8];
+	unsigned int nr_egress_mappings;
+	struct vlan_priority_tci_mapping *egress_priority_map[16];
+	__be16 vlan_proto;
+	u16 vlan_id;
+	u16 flags;
+	struct net_device *real_dev;
+	netdevice_tracker dev_tracker;
+	unsigned char real_dev_addr[6];
+	struct proc_dir_entry *dent;
+	struct vlan_pcpu_stats __attribute__((btf_type_tag("percpu"))) *vlan_pcpu_stats;
+};
+
+struct vlan_priority_tci_mapping {
+	u32 priority;
+	u16 vlan_qos;
+	struct vlan_priority_tci_mapping *next;
+};
+
+enum nl80211_chan_width {
+	NL80211_CHAN_WIDTH_20_NOHT = 0,
+	NL80211_CHAN_WIDTH_20 = 1,
+	NL80211_CHAN_WIDTH_40 = 2,
+	NL80211_CHAN_WIDTH_80 = 3,
+	NL80211_CHAN_WIDTH_80P80 = 4,
+	NL80211_CHAN_WIDTH_160 = 5,
+	NL80211_CHAN_WIDTH_5 = 6,
+	NL80211_CHAN_WIDTH_10 = 7,
+	NL80211_CHAN_WIDTH_1 = 8,
+	NL80211_CHAN_WIDTH_2 = 9,
+	NL80211_CHAN_WIDTH_4 = 10,
+	NL80211_CHAN_WIDTH_8 = 11,
+	NL80211_CHAN_WIDTH_16 = 12,
+	NL80211_CHAN_WIDTH_320 = 13,
+};
+
+enum ieee80211_edmg_bw_config {
+	IEEE80211_EDMG_BW_CONFIG_4 = 4,
+	IEEE80211_EDMG_BW_CONFIG_5 = 5,
+	IEEE80211_EDMG_BW_CONFIG_6 = 6,
+	IEEE80211_EDMG_BW_CONFIG_7 = 7,
+	IEEE80211_EDMG_BW_CONFIG_8 = 8,
+	IEEE80211_EDMG_BW_CONFIG_9 = 9,
+	IEEE80211_EDMG_BW_CONFIG_10 = 10,
+	IEEE80211_EDMG_BW_CONFIG_11 = 11,
+	IEEE80211_EDMG_BW_CONFIG_12 = 12,
+	IEEE80211_EDMG_BW_CONFIG_13 = 13,
+	IEEE80211_EDMG_BW_CONFIG_14 = 14,
+	IEEE80211_EDMG_BW_CONFIG_15 = 15,
+};
+
+struct ieee80211_edmg {
+	u8 channels;
+	enum ieee80211_edmg_bw_config bw_config;
+};
+
+struct ieee80211_channel;
+
+struct cfg80211_chan_def {
+	struct ieee80211_channel *chan;
+	enum nl80211_chan_width width;
+	u32 center_freq1;
+	u32 center_freq2;
+	struct ieee80211_edmg edmg;
+	u16 freq1_offset;
+};
+
+struct cfg80211_internal_bss;
+
+enum nl80211_iftype {
+	NL80211_IFTYPE_UNSPECIFIED = 0,
+	NL80211_IFTYPE_ADHOC = 1,
+	NL80211_IFTYPE_STATION = 2,
+	NL80211_IFTYPE_AP = 3,
+	NL80211_IFTYPE_AP_VLAN = 4,
+	NL80211_IFTYPE_WDS = 5,
+	NL80211_IFTYPE_MONITOR = 6,
+	NL80211_IFTYPE_MESH_POINT = 7,
+	NL80211_IFTYPE_P2P_CLIENT = 8,
+	NL80211_IFTYPE_P2P_GO = 9,
+	NL80211_IFTYPE_P2P_DEVICE = 10,
+	NL80211_IFTYPE_OCB = 11,
+	NL80211_IFTYPE_NAN = 12,
+	NUM_NL80211_IFTYPES = 13,
+	NL80211_IFTYPE_MAX = 12,
+};
+
+struct cfg80211_conn;
+
+struct cfg80211_cached_keys;
+
+enum ieee80211_bss_type {
+	IEEE80211_BSS_TYPE_ESS = 0,
+	IEEE80211_BSS_TYPE_PBSS = 1,
+	IEEE80211_BSS_TYPE_IBSS = 2,
+	IEEE80211_BSS_TYPE_MBSS = 3,
+	IEEE80211_BSS_TYPE_ANY = 4,
+};
+
+struct wiphy;
+
+struct wiphy_work;
+
+typedef void (*wiphy_work_func_t)(struct wiphy *, struct wiphy_work *);
+
+struct wiphy_work {
+	struct list_head entry;
+	wiphy_work_func_t func;
+};
+
+struct cfg80211_cqm_config;
+
+struct wireless_dev {
+	struct wiphy *wiphy;
+	enum nl80211_iftype iftype;
+	struct list_head list;
+	struct net_device *netdev;
+	u32 identifier;
+	struct list_head mgmt_registrations;
+	u8 mgmt_registrations_need_update: 1;
+	struct mutex mtx;
+	bool use_4addr;
+	bool is_running;
+	bool registered;
+	bool registering;
+	u8 address[6];
+	struct cfg80211_conn *conn;
+	struct cfg80211_cached_keys *connect_keys;
+	enum ieee80211_bss_type conn_bss_type;
+	u32 conn_owner_nlportid;
+	struct work_struct disconnect_wk;
+	u8 disconnect_bssid[6];
+	struct list_head event_list;
+	spinlock_t event_lock;
+	u8 connected: 1;
+	bool ps;
+	int ps_timeout;
+	u32 ap_unexpected_nlportid;
+	u32 owner_nlportid;
+	bool nl_owner_dead;
+	bool cac_started;
+	unsigned long cac_start_time;
+	unsigned int cac_time_ms;
+	struct wiphy_work cqm_rssi_work;
+	struct cfg80211_cqm_config __attribute__((btf_type_tag("rcu"))) *cqm_config;
+	struct list_head pmsr_list;
+	spinlock_t pmsr_lock;
+	struct work_struct pmsr_free_wk;
+	unsigned long unprot_beacon_reported;
+	union {
+		struct {
+			u8 connected_addr[6];
+			u8 ssid[32];
+			u8 ssid_len;
+			long: 0;
+		} client;
+		struct {
+			int beacon_interval;
+			struct cfg80211_chan_def preset_chandef;
+			struct cfg80211_chan_def chandef;
+			u8 id[32];
+			u8 id_len;
+			u8 id_up_len;
+		} mesh;
+		struct {
+			struct cfg80211_chan_def preset_chandef;
+			u8 ssid[32];
+			u8 ssid_len;
+		} ap;
+		struct {
+			struct cfg80211_internal_bss *current_bss;
+			struct cfg80211_chan_def chandef;
+			int beacon_interval;
+			u8 ssid[32];
+			u8 ssid_len;
+		} ibss;
+		struct {
+			struct cfg80211_chan_def chandef;
+		} ocb;
+	} u;
+	struct {
+		u8 addr[6];
+		union {
+			struct {
+				unsigned int beacon_interval;
+				struct cfg80211_chan_def chandef;
+			} ap;
+			struct {
+				struct cfg80211_internal_bss *current_bss;
+			} client;
+		};
+	} links[15];
+	u16 valid_links;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum cfg80211_signal_type {
+	CFG80211_SIGNAL_TYPE_NONE = 0,
+	CFG80211_SIGNAL_TYPE_MBM = 1,
+	CFG80211_SIGNAL_TYPE_UNSPEC = 2,
+};
+
+struct rfkill;
+
+struct mac_address;
+
+struct ieee80211_txrx_stypes;
+
+struct ieee80211_iface_combination;
+
+struct wiphy_iftype_akm_suites;
+
+struct wiphy_wowlan_support;
+
+struct cfg80211_wowlan;
+
+struct wiphy_iftype_ext_capab;
+
+struct ieee80211_supported_band;
+
+struct regulatory_request;
+
+struct ieee80211_regdomain;
+
+struct ieee80211_ht_cap;
+
+struct ieee80211_vht_cap;
+
+struct wiphy_coalesce_support;
+
+struct wiphy_vendor_command;
+
+struct nl80211_vendor_cmd_info;
+
+struct cfg80211_pmsr_capabilities;
+
+struct cfg80211_sar_capa;
+
+struct wiphy {
+	struct mutex mtx;
+	u8 perm_addr[6];
+	u8 addr_mask[6];
+	struct mac_address *addresses;
+	const struct ieee80211_txrx_stypes *mgmt_stypes;
+	const struct ieee80211_iface_combination *iface_combinations;
+	int n_iface_combinations;
+	u16 software_iftypes;
+	u16 n_addresses;
+	u16 interface_modes;
+	u16 max_acl_mac_addrs;
+	u32 flags;
+	u32 regulatory_flags;
+	u32 features;
+	u8 ext_features[9];
+	u32 ap_sme_capa;
+	enum cfg80211_signal_type signal_type;
+	int bss_priv_size;
+	u8 max_scan_ssids;
+	u8 max_sched_scan_reqs;
+	u8 max_sched_scan_ssids;
+	u8 max_match_sets;
+	u16 max_scan_ie_len;
+	u16 max_sched_scan_ie_len;
+	u32 max_sched_scan_plans;
+	u32 max_sched_scan_plan_interval;
+	u32 max_sched_scan_plan_iterations;
+	int n_cipher_suites;
+	const u32 *cipher_suites;
+	int n_akm_suites;
+	const u32 *akm_suites;
+	const struct wiphy_iftype_akm_suites *iftype_akm_suites;
+	unsigned int num_iftype_akm_suites;
+	u8 retry_short;
+	u8 retry_long;
+	u32 frag_threshold;
+	u32 rts_threshold;
+	u8 coverage_class;
+	char fw_version[32];
+	u32 hw_version;
+	const struct wiphy_wowlan_support *wowlan;
+	struct cfg80211_wowlan *wowlan_config;
+	u16 max_remain_on_channel_duration;
+	u8 max_num_pmkids;
+	u32 available_antennas_tx;
+	u32 available_antennas_rx;
+	u32 probe_resp_offload;
+	const u8 *extended_capabilities;
+	const u8 *extended_capabilities_mask;
+	u8 extended_capabilities_len;
+	const struct wiphy_iftype_ext_capab *iftype_ext_capab;
+	unsigned int num_iftype_ext_capab;
+	const void *privid;
+	struct ieee80211_supported_band *bands[6];
+	void (*reg_notifier)(struct wiphy *, struct regulatory_request *);
+	const struct ieee80211_regdomain __attribute__((btf_type_tag("rcu"))) *regd;
+	struct device dev;
+	bool registered;
+	struct dentry *debugfsdir;
+	const struct ieee80211_ht_cap *ht_capa_mod_mask;
+	const struct ieee80211_vht_cap *vht_capa_mod_mask;
+	struct list_head wdev_list;
+	possible_net_t _net;
+	const struct wiphy_coalesce_support *coalesce;
+	const struct wiphy_vendor_command *vendor_commands;
+	const struct nl80211_vendor_cmd_info *vendor_events;
+	int n_vendor_commands;
+	int n_vendor_events;
+	u16 max_ap_assoc_sta;
+	u8 max_num_csa_counters;
+	u32 bss_select_support;
+	u8 nan_supported_bands;
+	u32 txq_limit;
+	u32 txq_memory_limit;
+	u32 txq_quantum;
+	unsigned long tx_queue_len;
+	u8 support_mbssid: 1;
+	u8 support_only_he_mbssid: 1;
+	const struct cfg80211_pmsr_capabilities *pmsr_capa;
+	struct {
+		u64 peer;
+		u64 vif;
+		u8 max_retry;
+	} tid_config_support;
+	u8 max_data_retry_count;
+	const struct cfg80211_sar_capa *sar_capa;
+	struct rfkill *rfkill;
+	u8 mbssid_max_interfaces;
+	u8 ema_max_profile_periodicity;
+	u16 max_num_akm_suites;
+	u16 hw_timestamp_max_peers;
+	u64 android_kabi_reserved1;
+	long: 64;
+	char priv[0];
+};
+
+struct mac_address {
+	u8 addr[6];
+};
+
+struct ieee80211_txrx_stypes {
+	u16 tx;
+	u16 rx;
+};
+
+struct ieee80211_iface_limit;
+
+struct ieee80211_iface_combination {
+	const struct ieee80211_iface_limit *limits;
+	u32 num_different_channels;
+	u16 max_interfaces;
+	u8 n_limits;
+	bool beacon_int_infra_match;
+	u8 radar_detect_widths;
+	u8 radar_detect_regions;
+	u32 beacon_int_min_gcd;
+};
+
+struct ieee80211_iface_limit {
+	u16 max;
+	u16 types;
+};
+
+struct wiphy_iftype_akm_suites {
+	u16 iftypes_mask;
+	const u32 *akm_suites;
+	int n_akm_suites;
+};
+
+struct wiphy_wowlan_tcp_support;
+
+struct wiphy_wowlan_support {
+	u32 flags;
+	int n_patterns;
+	int pattern_max_len;
+	int pattern_min_len;
+	int max_pkt_offset;
+	int max_nd_match_sets;
+	const struct wiphy_wowlan_tcp_support *tcp;
+};
+
+struct nl80211_wowlan_tcp_data_token_feature;
+
+struct wiphy_wowlan_tcp_support {
+	const struct nl80211_wowlan_tcp_data_token_feature *tok;
+	u32 data_payload_max;
+	u32 data_interval_max;
+	u32 wake_payload_max;
+	bool seq;
+};
+
+struct nl80211_wowlan_tcp_data_token_feature {
+	__u32 min_len;
+	__u32 max_len;
+	__u32 bufsize;
+};
+
+struct cfg80211_pkt_pattern;
+
+struct cfg80211_wowlan_tcp;
+
+struct cfg80211_sched_scan_request;
+
+struct cfg80211_wowlan {
+	bool any;
+	bool disconnect;
+	bool magic_pkt;
+	bool gtk_rekey_failure;
+	bool eap_identity_req;
+	bool four_way_handshake;
+	bool rfkill_release;
+	struct cfg80211_pkt_pattern *patterns;
+	struct cfg80211_wowlan_tcp *tcp;
+	int n_patterns;
+	struct cfg80211_sched_scan_request *nd_config;
+};
+
+struct cfg80211_pkt_pattern {
+	const u8 *mask;
+	const u8 *pattern;
+	int pattern_len;
+	int pkt_offset;
+};
+
+struct nl80211_wowlan_tcp_data_seq {
+	__u32 start;
+	__u32 offset;
+	__u32 len;
+};
+
+struct nl80211_wowlan_tcp_data_token {
+	__u32 offset;
+	__u32 len;
+	__u8 token_stream[0];
+};
+
+struct cfg80211_wowlan_tcp {
+	struct socket *sock;
+	__be32 src;
+	__be32 dst;
+	u16 src_port;
+	u16 dst_port;
+	u8 dst_mac[6];
+	int payload_len;
+	const u8 *payload;
+	struct nl80211_wowlan_tcp_data_seq payload_seq;
+	u32 data_interval;
+	u32 wake_len;
+	const u8 *wake_data;
+	const u8 *wake_mask;
+	u32 tokens_size;
+	struct nl80211_wowlan_tcp_data_token payload_tok;
+};
+
+enum nl80211_band {
+	NL80211_BAND_2GHZ = 0,
+	NL80211_BAND_5GHZ = 1,
+	NL80211_BAND_60GHZ = 2,
+	NL80211_BAND_6GHZ = 3,
+	NL80211_BAND_S1GHZ = 4,
+	NL80211_BAND_LC = 5,
+	NUM_NL80211_BANDS = 6,
+};
+
+struct cfg80211_bss_select_adjust {
+	enum nl80211_band band;
+	s8 delta;
+};
+
+struct cfg80211_ssid;
+
+struct cfg80211_match_set;
+
+struct cfg80211_sched_scan_plan;
+
+struct cfg80211_sched_scan_request {
+	u64 reqid;
+	struct cfg80211_ssid *ssids;
+	int n_ssids;
+	u32 n_channels;
+	const u8 *ie;
+	size_t ie_len;
+	u32 flags;
+	struct cfg80211_match_set *match_sets;
+	int n_match_sets;
+	s32 min_rssi_thold;
+	u32 delay;
+	struct cfg80211_sched_scan_plan *scan_plans;
+	int n_scan_plans;
+	u8 mac_addr[6];
+	u8 mac_addr_mask[6];
+	bool relative_rssi_set;
+	s8 relative_rssi;
+	struct cfg80211_bss_select_adjust rssi_adjust;
+	struct wiphy *wiphy;
+	struct net_device *dev;
+	unsigned long scan_start;
+	bool report_results;
+	struct callback_head callback_head;
+	u32 owner_nlportid;
+	bool nl_owner_dead;
+	struct list_head list;
+	u64 android_kabi_reserved1;
+	struct ieee80211_channel *channels[0];
+};
+
+struct cfg80211_ssid {
+	u8 ssid[32];
+	u8 ssid_len;
+};
+
+struct cfg80211_match_set {
+	struct cfg80211_ssid ssid;
+	u8 bssid[6];
+	s32 rssi_thold;
+	s32 per_band_rssi_thold[6];
+};
+
+struct cfg80211_sched_scan_plan {
+	u32 interval;
+	u32 iterations;
+};
+
+enum nl80211_dfs_state {
+	NL80211_DFS_USABLE = 0,
+	NL80211_DFS_UNAVAILABLE = 1,
+	NL80211_DFS_AVAILABLE = 2,
+};
+
+struct ieee80211_channel {
+	enum nl80211_band band;
+	u32 center_freq;
+	u16 freq_offset;
+	u16 hw_value;
+	u32 flags;
+	int max_antenna_gain;
+	int max_power;
+	int max_reg_power;
+	bool beacon_found;
+	u32 orig_flags;
+	int orig_mag;
+	int orig_mpwr;
+	enum nl80211_dfs_state dfs_state;
+	unsigned long dfs_state_entered;
+	unsigned int dfs_cac_ms;
+	s8 psd;
+};
+
+struct wiphy_iftype_ext_capab {
+	enum nl80211_iftype iftype;
+	const u8 *extended_capabilities;
+	const u8 *extended_capabilities_mask;
+	u8 extended_capabilities_len;
+	u16 eml_capabilities;
+	u16 mld_capa_and_ops;
+};
+
+struct ieee80211_mcs_info {
+	u8 rx_mask[10];
+	__le16 rx_highest;
+	u8 tx_params;
+	u8 reserved[3];
+};
+
+struct ieee80211_sta_ht_cap {
+	u16 cap;
+	bool ht_supported;
+	u8 ampdu_factor;
+	u8 ampdu_density;
+	struct ieee80211_mcs_info mcs;
+	short: 0;
+} __attribute__((packed));
+
+struct ieee80211_vht_mcs_info {
+	__le16 rx_mcs_map;
+	__le16 rx_highest;
+	__le16 tx_mcs_map;
+	__le16 tx_highest;
+};
+
+struct ieee80211_sta_vht_cap {
+	bool vht_supported;
+	u32 cap;
+	struct ieee80211_vht_mcs_info vht_mcs;
+};
+
+struct ieee80211_sta_s1g_cap {
+	bool s1g;
+	u8 cap[10];
+	u8 nss_mcs[5];
+};
+
+struct ieee80211_rate;
+
+struct ieee80211_sband_iftype_data;
+
+struct ieee80211_supported_band {
+	struct ieee80211_channel *channels;
+	struct ieee80211_rate *bitrates;
+	enum nl80211_band band;
+	int n_channels;
+	int n_bitrates;
+	struct ieee80211_sta_ht_cap ht_cap;
+	struct ieee80211_sta_vht_cap vht_cap;
+	struct ieee80211_sta_s1g_cap s1g_cap;
+	struct ieee80211_edmg edmg_cap;
+	u16 n_iftype_data;
+	const struct ieee80211_sband_iftype_data *iftype_data;
+};
+
+struct ieee80211_rate {
+	u32 flags;
+	u16 bitrate;
+	u16 hw_value;
+	u16 hw_value_short;
+};
+
+struct ieee80211_he_cap_elem {
+	u8 mac_cap_info[6];
+	u8 phy_cap_info[11];
+};
+
+struct ieee80211_he_mcs_nss_supp {
+	__le16 rx_mcs_80;
+	__le16 tx_mcs_80;
+	__le16 rx_mcs_160;
+	__le16 tx_mcs_160;
+	__le16 rx_mcs_80p80;
+	__le16 tx_mcs_80p80;
+};
+
+struct ieee80211_sta_he_cap {
+	bool has_he;
+	struct ieee80211_he_cap_elem he_cap_elem;
+	struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;
+	u8 ppe_thres[25];
+} __attribute__((packed));
+
+struct ieee80211_he_6ghz_capa {
+	__le16 capa;
+};
+
+struct ieee80211_eht_cap_elem_fixed {
+	u8 mac_cap_info[2];
+	u8 phy_cap_info[9];
+};
+
+struct ieee80211_eht_mcs_nss_supp_20mhz_only {
+	union {
+		struct {
+			u8 rx_tx_mcs7_max_nss;
+			u8 rx_tx_mcs9_max_nss;
+			u8 rx_tx_mcs11_max_nss;
+			u8 rx_tx_mcs13_max_nss;
+		};
+		u8 rx_tx_max_nss[4];
+	};
+};
+
+struct ieee80211_eht_mcs_nss_supp_bw {
+	union {
+		struct {
+			u8 rx_tx_mcs9_max_nss;
+			u8 rx_tx_mcs11_max_nss;
+			u8 rx_tx_mcs13_max_nss;
+		};
+		u8 rx_tx_max_nss[3];
+	};
+};
+
+struct ieee80211_eht_mcs_nss_supp {
+	union {
+		struct ieee80211_eht_mcs_nss_supp_20mhz_only only_20mhz;
+		struct {
+			struct ieee80211_eht_mcs_nss_supp_bw _80;
+			struct ieee80211_eht_mcs_nss_supp_bw _160;
+			struct ieee80211_eht_mcs_nss_supp_bw _320;
+		} bw;
+	};
+};
+
+struct ieee80211_sta_eht_cap {
+	bool has_eht;
+	struct ieee80211_eht_cap_elem_fixed eht_cap_elem;
+	struct ieee80211_eht_mcs_nss_supp eht_mcs_nss_supp;
+	u8 eht_ppe_thres[32];
+};
+
+struct ieee80211_sband_iftype_data {
+	u16 types_mask;
+	struct ieee80211_sta_he_cap he_cap;
+	struct ieee80211_he_6ghz_capa he_6ghz_capa;
+	struct ieee80211_sta_eht_cap eht_cap;
+	struct {
+		const u8 *data;
+		unsigned int len;
+	} vendor_elems;
+} __attribute__((packed));
+
+enum nl80211_reg_initiator {
+	NL80211_REGDOM_SET_BY_CORE = 0,
+	NL80211_REGDOM_SET_BY_USER = 1,
+	NL80211_REGDOM_SET_BY_DRIVER = 2,
+	NL80211_REGDOM_SET_BY_COUNTRY_IE = 3,
+};
+
+enum nl80211_user_reg_hint_type {
+	NL80211_USER_REG_HINT_USER = 0,
+	NL80211_USER_REG_HINT_CELL_BASE = 1,
+	NL80211_USER_REG_HINT_INDOOR = 2,
+};
+
+enum nl80211_dfs_regions {
+	NL80211_DFS_UNSET = 0,
+	NL80211_DFS_FCC = 1,
+	NL80211_DFS_ETSI = 2,
+	NL80211_DFS_JP = 3,
+};
+
+enum environment_cap {
+	ENVIRON_ANY = 0,
+	ENVIRON_INDOOR = 1,
+	ENVIRON_OUTDOOR = 2,
+};
+
+struct regulatory_request {
+	struct callback_head callback_head;
+	int wiphy_idx;
+	enum nl80211_reg_initiator initiator;
+	enum nl80211_user_reg_hint_type user_reg_hint_type;
+	char alpha2[3];
+	enum nl80211_dfs_regions dfs_region;
+	bool intersect;
+	bool processed;
+	enum environment_cap country_ie_env;
+	struct list_head list;
+};
+
+struct ieee80211_freq_range {
+	u32 start_freq_khz;
+	u32 end_freq_khz;
+	u32 max_bandwidth_khz;
+};
+
+struct ieee80211_power_rule {
+	u32 max_antenna_gain;
+	u32 max_eirp;
+};
+
+struct ieee80211_wmm_ac {
+	u16 cw_min;
+	u16 cw_max;
+	u16 cot;
+	u8 aifsn;
+};
+
+struct ieee80211_wmm_rule {
+	struct ieee80211_wmm_ac client[4];
+	struct ieee80211_wmm_ac ap[4];
+};
+
+struct ieee80211_reg_rule {
+	struct ieee80211_freq_range freq_range;
+	struct ieee80211_power_rule power_rule;
+	struct ieee80211_wmm_rule wmm_rule;
+	u32 flags;
+	u32 dfs_cac_ms;
+	bool has_wmm;
+	s8 psd;
+};
+
+struct ieee80211_regdomain {
+	struct callback_head callback_head;
+	u32 n_reg_rules;
+	char alpha2[3];
+	enum nl80211_dfs_regions dfs_region;
+	struct ieee80211_reg_rule reg_rules[0];
+};
+
+struct ieee80211_ht_cap {
+	__le16 cap_info;
+	u8 ampdu_params_info;
+	struct ieee80211_mcs_info mcs;
+	__le16 extended_ht_cap_info;
+	__le32 tx_BF_cap_info;
+	u8 antenna_selection_info;
+} __attribute__((packed));
+
+struct ieee80211_vht_cap {
+	__le32 vht_cap_info;
+	struct ieee80211_vht_mcs_info supp_mcs;
+};
+
+struct wiphy_coalesce_support {
+	int n_rules;
+	int max_delay;
+	int n_patterns;
+	int pattern_max_len;
+	int pattern_min_len;
+	int max_pkt_offset;
+};
+
+struct nl80211_vendor_cmd_info {
+	__u32 vendor_id;
+	__u32 subcmd;
+};
+
+struct wiphy_vendor_command {
+	struct nl80211_vendor_cmd_info info;
+	u32 flags;
+	int (*doit)(struct wiphy *, struct wireless_dev *, const void *, int);
+	int (*dumpit)(struct wiphy *, struct wireless_dev *, struct sk_buff *, const void *, int, unsigned long *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u64 android_kabi_reserved1;
+};
+
+struct cfg80211_pmsr_capabilities {
+	unsigned int max_peers;
+	u8 report_ap_tsf: 1;
+	u8 randomize_mac_addr: 1;
+	struct {
+		u32 preambles;
+		u32 bandwidths;
+		s8 max_bursts_exponent;
+		u8 max_ftms_per_burst;
+		u8 supported: 1;
+		u8 asap: 1;
+		u8 non_asap: 1;
+		u8 request_lci: 1;
+		u8 request_civicloc: 1;
+		u8 trigger_based: 1;
+		u8 non_trigger_based: 1;
+	} ftm;
+};
+
+enum nl80211_sar_type {
+	NL80211_SAR_TYPE_POWER = 0,
+	NUM_NL80211_SAR_TYPE = 1,
+};
+
+struct cfg80211_sar_freq_ranges;
+
+struct cfg80211_sar_capa {
+	enum nl80211_sar_type type;
+	u32 num_freq_ranges;
+	const struct cfg80211_sar_freq_ranges *freq_ranges;
+};
+
+struct cfg80211_sar_freq_ranges {
+	u32 start_freq;
+	u32 end_freq;
+};
+
+struct iw_ioctl_description {
+	__u8 header_type;
+	__u8 token_type;
+	__u16 token_size;
+	__u16 min_tokens;
+	__u16 max_tokens;
+	__u32 flags;
+};
+
+struct compat_iw_point {
+	compat_caddr_t pointer;
+	__u16 length;
+	__u16 flags;
+};
+
+struct iwreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union iwreq_data u;
+};
+
+typedef int (*wext_ioctl_func)(struct net_device *, struct iwreq *, unsigned int, struct iw_request_info *, iw_handler);
+
+struct __compat_iw_event {
+	__u16 len;
+	__u16 cmd;
+	union {
+		compat_caddr_t pointer;
+		struct {
+			struct {} __empty_ptr_bytes;
+			__u8 ptr_bytes[0];
+		};
+	};
+};
+
+struct iw_event {
+	__u16 len;
+	__u16 cmd;
+	union iwreq_data u;
+};
+
+struct iw_encode_ext {
+	__u32 ext_flags;
+	__u8 tx_seq[8];
+	__u8 rx_seq[8];
+	struct sockaddr addr;
+	__u16 alg;
+	__u16 key_len;
+	__u8 key[0];
+};
+
+struct iw_thrspy {
+	struct sockaddr addr;
+	struct iw_quality qual;
+	struct iw_quality low;
+	struct iw_quality high;
+};
+
+struct vsock_tap {
+	struct net_device *dev;
+	struct module *module;
+	struct list_head list;
+};
+
+struct vsock_diag_msg {
+	__u8 vdiag_family;
+	__u8 vdiag_type;
+	__u8 vdiag_state;
+	__u8 vdiag_shutdown;
+	__u32 vdiag_src_cid;
+	__u32 vdiag_src_port;
+	__u32 vdiag_dst_cid;
+	__u32 vdiag_dst_port;
+	__u32 vdiag_ino;
+	__u32 vdiag_cookie[2];
+};
+
+struct vsock_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u16 pad;
+	__u32 vdiag_states;
+	__u32 vdiag_ino;
+	__u32 vdiag_show;
+	__u32 vdiag_cookie[2];
+};
+
+typedef void (*btf_trace_virtio_transport_alloc_pkt)(void *, __u32, __u32, __u32, __u32, __u32, __u16, __u16, __u32);
+
+typedef void (*btf_trace_virtio_transport_recv_pkt)(void *, __u32, __u32, __u32, __u32, __u32, __u16, __u16, __u32, __u32, __u32);
+
+enum virtio_vsock_op {
+	VIRTIO_VSOCK_OP_INVALID = 0,
+	VIRTIO_VSOCK_OP_REQUEST = 1,
+	VIRTIO_VSOCK_OP_RESPONSE = 2,
+	VIRTIO_VSOCK_OP_RST = 3,
+	VIRTIO_VSOCK_OP_SHUTDOWN = 4,
+	VIRTIO_VSOCK_OP_RW = 5,
+	VIRTIO_VSOCK_OP_CREDIT_UPDATE = 6,
+	VIRTIO_VSOCK_OP_CREDIT_REQUEST = 7,
+};
+
+enum virtio_vsock_shutdown {
+	VIRTIO_VSOCK_SHUTDOWN_RCV = 1,
+	VIRTIO_VSOCK_SHUTDOWN_SEND = 2,
+};
+
+enum af_vsockmon_transport {
+	AF_VSOCK_TRANSPORT_UNKNOWN = 0,
+	AF_VSOCK_TRANSPORT_NO_INFO = 1,
+	AF_VSOCK_TRANSPORT_VIRTIO = 2,
+};
+
+enum af_vsockmon_op {
+	AF_VSOCK_OP_UNKNOWN = 0,
+	AF_VSOCK_OP_CONNECT = 1,
+	AF_VSOCK_OP_DISCONNECT = 2,
+	AF_VSOCK_OP_CONTROL = 3,
+	AF_VSOCK_OP_PAYLOAD = 4,
+};
+
+enum virtio_vsock_type {
+	VIRTIO_VSOCK_TYPE_STREAM = 1,
+	VIRTIO_VSOCK_TYPE_SEQPACKET = 2,
+};
+
+struct trace_event_raw_virtio_transport_alloc_pkt {
+	struct trace_entry ent;
+	__u32 src_cid;
+	__u32 src_port;
+	__u32 dst_cid;
+	__u32 dst_port;
+	__u32 len;
+	__u16 type;
+	__u16 op;
+	__u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_virtio_transport_recv_pkt {
+	struct trace_entry ent;
+	__u32 src_cid;
+	__u32 src_port;
+	__u32 dst_cid;
+	__u32 dst_port;
+	__u32 len;
+	__u16 type;
+	__u16 op;
+	__u32 flags;
+	__u32 buf_alloc;
+	__u32 fwd_cnt;
+	char __data[0];
+};
+
+struct virtio_vsock_sock {
+	struct vsock_sock *vsk;
+	spinlock_t tx_lock;
+	spinlock_t rx_lock;
+	u32 tx_cnt;
+	u32 peer_fwd_cnt;
+	u32 peer_buf_alloc;
+	u32 fwd_cnt;
+	u32 last_fwd_cnt;
+	u32 rx_bytes;
+	u32 buf_alloc;
+	struct sk_buff_head rx_queue;
+	u32 msg_count;
+};
+
+struct virtio_vsock_pkt_info {
+	u32 remote_cid;
+	u32 remote_port;
+	struct vsock_sock *vsk;
+	struct msghdr *msg;
+	u32 pkt_len;
+	u16 type;
+	u16 op;
+	u32 flags;
+	bool reply;
+};
+
+struct trace_event_data_offsets_virtio_transport_alloc_pkt {};
+
+struct trace_event_data_offsets_virtio_transport_recv_pkt {};
+
+struct af_vsockmon_hdr {
+	__le64 src_cid;
+	__le64 dst_cid;
+	__le32 src_port;
+	__le32 dst_port;
+	__le16 op;
+	__le16 transport;
+	__le16 len;
+	__u8 reserved[2];
+};
+
+struct vsock_loopback {
+	struct workqueue_struct *workqueue;
+	struct sk_buff_head pkt_queue;
+	struct work_struct pkt_work;
+};
+
+struct xdp_ring;
+
+struct xsk_queue {
+	u32 ring_mask;
+	u32 nentries;
+	u32 cached_prod;
+	u32 cached_cons;
+	struct xdp_ring *ring;
+	u64 invalid_descs;
+	u64 queue_empty_descs;
+	size_t ring_vmalloc_size;
+};
+
+struct xdp_ring {
+	u32 producer;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 consumer;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad2;
+	u32 flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad3;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_rxtx_ring {
+	struct xdp_ring ptrs;
+	struct xdp_desc desc[0];
+};
+
+struct xdp_umem_ring {
+	struct xdp_ring ptrs;
+	u64 desc[0];
+};
+
+struct xsk_map;
+
+struct xsk_map_node {
+	struct list_head node;
+	struct xsk_map *map;
+	struct xdp_sock __attribute__((btf_type_tag("rcu"))) **map_entry;
+};
+
+struct xsk_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	atomic_t count;
+	struct xdp_sock __attribute__((btf_type_tag("rcu"))) *xsk_map[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sockaddr_xdp {
+	__u16 sxdp_family;
+	__u16 sxdp_flags;
+	__u32 sxdp_ifindex;
+	__u32 sxdp_queue_id;
+	__u32 sxdp_shared_umem_fd;
+};
+
+struct xdp_ring_offset_v1 {
+	__u64 producer;
+	__u64 consumer;
+	__u64 desc;
+};
+
+struct parsed_desc {
+	u32 mb;
+	u32 valid;
+};
+
+struct xdp_umem_reg {
+	__u64 addr;
+	__u64 len;
+	__u32 chunk_size;
+	__u32 headroom;
+	__u32 flags;
+};
+
+struct xdp_ring_offset {
+	__u64 producer;
+	__u64 consumer;
+	__u64 desc;
+	__u64 flags;
+};
+
+struct xdp_mmap_offsets {
+	struct xdp_ring_offset rx;
+	struct xdp_ring_offset tx;
+	struct xdp_ring_offset fr;
+	struct xdp_ring_offset cr;
+};
+
+struct xdp_options {
+	__u32 flags;
+};
+
+struct xdp_mmap_offsets_v1 {
+	struct xdp_ring_offset_v1 rx;
+	struct xdp_ring_offset_v1 tx;
+	struct xdp_ring_offset_v1 fr;
+	struct xdp_ring_offset_v1 cr;
+};
+
+struct xdp_statistics {
+	__u64 rx_dropped;
+	__u64 rx_invalid_descs;
+	__u64 tx_invalid_descs;
+	__u64 rx_ring_full;
+	__u64 rx_fill_ring_empty_descs;
+	__u64 tx_ring_empty_descs;
+};
+
+struct xsk_dma_map {
+	dma_addr_t *dma_pages;
+	struct device *dev;
+	struct net_device *netdev;
+	refcount_t users;
+	struct list_head list;
+	u32 dma_pages_cnt;
+	bool dma_need_sync;
+};
+
+typedef unsigned long cycles_t;
+
+typedef struct elf32_hdr Elf32_Ehdr;
+
+typedef struct elf32_phdr Elf32_Phdr;
+
+typedef struct elf64_phdr Elf64_Phdr;
+
+typedef struct elf32_note Elf32_Nhdr;
+
+struct compress_format {
+	unsigned char magic[2];
+	const char *name;
+	decompress_fn decompressor;
+};
+
+enum cpio_fields {
+	C_MAGIC = 0,
+	C_INO = 1,
+	C_MODE = 2,
+	C_UID = 3,
+	C_GID = 4,
+	C_NLINK = 5,
+	C_MTIME = 6,
+	C_FILESIZE = 7,
+	C_MAJ = 8,
+	C_MIN = 9,
+	C_RMAJ = 10,
+	C_RMIN = 11,
+	C_NAMESIZE = 12,
+	C_CHKSUM = 13,
+	C_NFIELDS = 14,
+};
+
+struct cpio_data {
+	void *data;
+	size_t size;
+	char name[18];
+};
+
+struct fdt_errtabent {
+	const char *str;
+};
+
+struct fprop_local_single {
+	unsigned long events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+struct ida_bitmap {
+	unsigned long bitmap[16];
+};
+
+struct klist_waiter {
+	struct list_head list;
+	struct klist_node *node;
+	struct task_struct *process;
+	int woken;
+};
+
+struct uevent_sock {
+	struct list_head list;
+	struct sock *sk;
+};
+
+typedef void (*btf_trace_ma_op)(void *, const char *, struct ma_state *);
+
+typedef void (*btf_trace_ma_read)(void *, const char *, struct ma_state *);
+
+typedef void (*btf_trace_ma_write)(void *, const char *, struct ma_state *, unsigned long, void *);
+
+enum maple_type {
+	maple_dense = 0,
+	maple_leaf_64 = 1,
+	maple_range_64 = 2,
+	maple_arange_64 = 3,
+};
+
+struct maple_pnode;
+
+struct maple_metadata {
+	unsigned char end;
+	unsigned char gap;
+};
+
+struct maple_range_64 {
+	struct maple_pnode *parent;
+	unsigned long pivot[15];
+	union {
+		void __attribute__((btf_type_tag("rcu"))) *slot[16];
+		struct {
+			void __attribute__((btf_type_tag("rcu"))) *pad[15];
+			struct maple_metadata meta;
+		};
+	};
+};
+
+struct maple_arange_64 {
+	struct maple_pnode *parent;
+	unsigned long pivot[9];
+	void __attribute__((btf_type_tag("rcu"))) *slot[10];
+	unsigned long gap[10];
+	struct maple_metadata meta;
+};
+
+struct maple_node {
+	union {
+		struct {
+			struct maple_pnode *parent;
+			void __attribute__((btf_type_tag("rcu"))) *slot[31];
+		};
+		struct {
+			void *pad;
+			struct callback_head rcu;
+			struct maple_enode *piv_parent;
+			unsigned char parent_slot;
+			enum maple_type type;
+			unsigned char slot_len;
+			unsigned int ma_flags;
+		};
+		struct maple_range_64 mr64;
+		struct maple_arange_64 ma64;
+		struct maple_alloc alloc;
+	};
+};
+
+struct trace_event_raw_ma_op {
+	struct trace_entry ent;
+	const char *fn;
+	unsigned long min;
+	unsigned long max;
+	unsigned long index;
+	unsigned long last;
+	void *node;
+	char __data[0];
+};
+
+struct trace_event_raw_ma_read {
+	struct trace_entry ent;
+	const char *fn;
+	unsigned long min;
+	unsigned long max;
+	unsigned long index;
+	unsigned long last;
+	void *node;
+	char __data[0];
+};
+
+struct trace_event_raw_ma_write {
+	struct trace_entry ent;
+	const char *fn;
+	unsigned long min;
+	unsigned long max;
+	unsigned long index;
+	unsigned long last;
+	unsigned long piv;
+	void *val;
+	void *node;
+	char __data[0];
+};
+
+struct maple_topiary {
+	struct maple_pnode *parent;
+	struct maple_enode *next;
+};
+
+struct ma_wr_state {
+	struct ma_state *mas;
+	struct maple_node *node;
+	unsigned long r_min;
+	unsigned long r_max;
+	enum maple_type type;
+	unsigned char offset_end;
+	unsigned char node_end;
+	unsigned long *pivots;
+	unsigned long end_piv;
+	void __attribute__((btf_type_tag("rcu"))) **slots;
+	void *entry;
+	void *content;
+};
+
+struct maple_big_node {
+	struct maple_pnode *parent;
+	unsigned long pivot[33];
+	union {
+		struct maple_enode *slot[34];
+		struct {
+			unsigned long padding[21];
+			unsigned long gap[21];
+		};
+	};
+	unsigned char b_end;
+	enum maple_type type;
+};
+
+struct ma_topiary;
+
+struct maple_subtree_state {
+	struct ma_state *orig_l;
+	struct ma_state *orig_r;
+	struct ma_state *l;
+	struct ma_state *m;
+	struct ma_state *r;
+	struct ma_topiary *free;
+	struct ma_topiary *destroy;
+	struct maple_big_node *bn;
+};
+
+struct ma_topiary {
+	struct maple_enode *head;
+	struct maple_enode *tail;
+	struct maple_tree *mtree;
+};
+
+struct trace_event_data_offsets_ma_op {};
+
+struct trace_event_data_offsets_ma_read {};
+
+struct trace_event_data_offsets_ma_write {};
+
+struct radix_tree_preload {
+	local_lock_t lock;
+	unsigned int nr;
+	struct xa_node *nodes;
+};
+
+struct printf_spec {
+	unsigned int type: 8;
+	int field_width: 24;
+	unsigned int flags: 8;
+	unsigned int base: 8;
+	int precision: 16;
+};
+
+struct page_flags_fields {
+	int width;
+	int shift;
+	int mask;
+	const struct printf_spec *spec;
+	const char *name;
+};
+
+enum format_type {
+	FORMAT_TYPE_NONE = 0,
+	FORMAT_TYPE_WIDTH = 1,
+	FORMAT_TYPE_PRECISION = 2,
+	FORMAT_TYPE_CHAR = 3,
+	FORMAT_TYPE_STR = 4,
+	FORMAT_TYPE_PTR = 5,
+	FORMAT_TYPE_PERCENT_CHAR = 6,
+	FORMAT_TYPE_INVALID = 7,
+	FORMAT_TYPE_LONG_LONG = 8,
+	FORMAT_TYPE_ULONG = 9,
+	FORMAT_TYPE_LONG = 10,
+	FORMAT_TYPE_UBYTE = 11,
+	FORMAT_TYPE_BYTE = 12,
+	FORMAT_TYPE_USHORT = 13,
+	FORMAT_TYPE_SHORT = 14,
+	FORMAT_TYPE_UINT = 15,
+	FORMAT_TYPE_INT = 16,
+	FORMAT_TYPE_SIZE_T = 17,
+	FORMAT_TYPE_PTRDIFF = 18,
+};
+
+struct efi_generic_dev_path {
+	u8 type;
+	u8 sub_type;
+	u16 length;
+};
+
+typedef union {
+	struct {
+		u32 revision;
+		efi_handle_t parent_handle;
+		efi_system_table_t *system_table;
+		efi_handle_t device_handle;
+		void *file_path;
+		void *reserved;
+		u32 load_options_size;
+		void *load_options;
+		void *image_base;
+		__u64 image_size;
+		unsigned int image_code_type;
+		unsigned int image_data_type;
+		efi_status_t (*unload)(efi_handle_t);
+	};
+	struct {
+		u32 revision;
+		u32 parent_handle;
+		u32 system_table;
+		u32 device_handle;
+		u32 file_path;
+		u32 reserved;
+		u32 load_options_size;
+		u32 load_options;
+		u32 image_base;
+		__u64 image_size;
+		u32 image_code_type;
+		u32 image_data_type;
+		u32 unload;
+	} mixed_mode;
+} efi_loaded_image_t;
+
+struct efi_vendor_dev_path {
+	struct efi_generic_dev_path header;
+	efi_guid_t vendorguid;
+	u8 vendordata[0];
+};
+
+enum efistub_event {
+	EFISTUB_EVT_INITRD = 0,
+	EFISTUB_EVT_LOAD_OPTIONS = 1,
+	EFISTUB_EVT_COUNT = 2,
+};
+
+struct efi_tcg2_event {
+	u32 event_size;
+	struct {
+		u32 header_size;
+		u16 header_version;
+		u32 pcr_index;
+		u32 event_type;
+	} __attribute__((packed)) event_header;
+} __attribute__((packed));
+
+typedef struct efi_tcg2_event efi_tcg2_event_t;
+
+struct efi_tcg2_tagged_event {
+	u32 tagged_event_id;
+	u32 tagged_event_data_size;
+};
+
+typedef struct efi_tcg2_tagged_event efi_tcg2_tagged_event_t;
+
+struct efi_measured_event {
+	efi_tcg2_event_t event_data;
+	efi_tcg2_tagged_event_t tagged_event;
+	u8 tagged_event_data[0];
+} __attribute__((packed));
+
+struct efi_boot_memmap {
+	unsigned long map_size;
+	unsigned long desc_size;
+	u32 desc_ver;
+	unsigned long map_key;
+	unsigned long buff_size;
+	efi_memory_desc_t map[0];
+};
+
+union efi_load_file_protocol;
+
+typedef union efi_load_file_protocol efi_load_file_protocol_t;
+
+union efi_load_file_protocol {
+	struct {
+		efi_status_t (*load_file)(efi_load_file_protocol_t *, efi_device_path_protocol_t *, bool, unsigned long *, void *);
+	};
+	struct {
+		u32 load_file;
+	} mixed_mode;
+};
+
+typedef union efi_load_file_protocol efi_load_file2_protocol_t;
+
+typedef struct {
+	u32 attributes;
+	u16 file_path_list_length;
+	const efi_char16_t *description;
+	const efi_device_path_protocol_t *file_path_list;
+	u32 optional_data_size;
+	const void *optional_data;
+} efi_load_option_unpacked_t;
+
+typedef struct {
+	u32 attributes;
+	u16 file_path_list_length;
+	u8 variable_data[0];
+} __attribute__((packed)) efi_load_option_t;
+
+typedef u32 efi_tcg2_event_log_format;
+
+union efi_tcg2_protocol;
+
+typedef union efi_tcg2_protocol efi_tcg2_protocol_t;
+
+union efi_tcg2_protocol {
+	struct {
+		void *get_capability;
+		efi_status_t (*get_event_log)(efi_tcg2_protocol_t *, efi_tcg2_event_log_format, efi_physical_addr_t *, efi_physical_addr_t *, efi_bool_t *);
+		efi_status_t (*hash_log_extend_event)(efi_tcg2_protocol_t *, u64, efi_physical_addr_t, u64, const efi_tcg2_event_t *);
+		void *submit_command;
+		void *get_active_pcr_banks;
+		void *set_active_pcr_banks;
+		void *get_result_of_set_active_pcr_banks;
+	};
+	struct {
+		u32 get_capability;
+		u32 get_event_log;
+		u32 hash_log_extend_event;
+		u32 submit_command;
+		u32 get_active_pcr_banks;
+		u32 set_active_pcr_banks;
+		u32 get_result_of_set_active_pcr_banks;
+	} mixed_mode;
+};
+
+typedef efi_status_t (*efi_exit_boot_map_processing)(struct efi_boot_memmap *, void *);
+
+union efi_memory_attribute_protocol;
+
+typedef union efi_memory_attribute_protocol efi_memory_attribute_protocol_t;
+
+union efi_memory_attribute_protocol {
+	struct {
+		efi_status_t (*get_memory_attributes)(efi_memory_attribute_protocol_t *, efi_physical_addr_t, u64, u64 *);
+		efi_status_t (*set_memory_attributes)(efi_memory_attribute_protocol_t *, efi_physical_addr_t, u64, u64);
+		efi_status_t (*clear_memory_attributes)(efi_memory_attribute_protocol_t *, efi_physical_addr_t, u64, u64);
+	};
+	struct {
+		u32 get_memory_attributes;
+		u32 set_memory_attributes;
+		u32 clear_memory_attributes;
+	} mixed_mode;
+};
+
+struct exit_boot_struct {
+	struct efi_boot_memmap *boot_memmap;
+	efi_memory_desc_t *runtime_map;
+	int runtime_entry_count;
+	void *new_fdt_addr;
+};
+
+union efi_device_path_from_text_protocol {
+	struct {
+		efi_device_path_protocol_t * (*convert_text_to_device_node)(const efi_char16_t *);
+		efi_device_path_protocol_t * (*convert_text_to_device_path)(const efi_char16_t *);
+	};
+	struct {
+		u32 convert_text_to_device_node;
+		u32 convert_text_to_device_path;
+	} mixed_mode;
+};
+
+typedef union efi_device_path_from_text_protocol efi_device_path_from_text_protocol_t;
+
+struct efi_file_path_dev_path {
+	struct efi_generic_dev_path header;
+	efi_char16_t filename[0];
+};
+
+union efi_file_protocol;
+
+typedef union efi_file_protocol efi_file_protocol_t;
+
+union efi_file_protocol {
+	struct {
+		u64 revision;
+		efi_status_t (*open)(efi_file_protocol_t *, efi_file_protocol_t **, efi_char16_t *, u64, u64);
+		efi_status_t (*close)(efi_file_protocol_t *);
+		efi_status_t (*delete)(efi_file_protocol_t *);
+		efi_status_t (*read)(efi_file_protocol_t *, unsigned long *, void *);
+		efi_status_t (*write)(efi_file_protocol_t *, unsigned long, void *);
+		efi_status_t (*get_position)(efi_file_protocol_t *, u64 *);
+		efi_status_t (*set_position)(efi_file_protocol_t *, u64);
+		efi_status_t (*get_info)(efi_file_protocol_t *, efi_guid_t *, unsigned long *, void *);
+		efi_status_t (*set_info)(efi_file_protocol_t *, efi_guid_t *, unsigned long, void *);
+		efi_status_t (*flush)(efi_file_protocol_t *);
+	};
+	struct {
+		u64 revision;
+		u32 open;
+		u32 close;
+		u32 delete;
+		u32 read;
+		u32 write;
+		u32 get_position;
+		u32 set_position;
+		u32 get_info;
+		u32 set_info;
+		u32 flush;
+	} mixed_mode;
+};
+
+typedef struct {
+	u64 size;
+	u64 file_size;
+	u64 phys_size;
+	efi_time_t create_time;
+	efi_time_t last_access_time;
+	efi_time_t modification_time;
+	__u64 attribute;
+	efi_char16_t filename[0];
+} efi_file_info_t;
+
+struct finfo {
+	efi_file_info_t info;
+	efi_char16_t filename[256];
+};
+
+union efi_simple_file_system_protocol;
+
+typedef union efi_simple_file_system_protocol efi_simple_file_system_protocol_t;
+
+union efi_simple_file_system_protocol {
+	struct {
+		u64 revision;
+		efi_status_t (*open_volume)(efi_simple_file_system_protocol_t *, efi_file_protocol_t **);
+	};
+	struct {
+		u64 revision;
+		u32 open_volume;
+	} mixed_mode;
+};
+
+enum efi_cmdline_option {
+	EFI_CMDLINE_NONE = 0,
+	EFI_CMDLINE_MODE_NUM = 1,
+	EFI_CMDLINE_RES = 2,
+	EFI_CMDLINE_AUTO = 3,
+	EFI_CMDLINE_LIST = 4,
+};
+
+typedef struct {
+	u32 red_mask;
+	u32 green_mask;
+	u32 blue_mask;
+	u32 reserved_mask;
+} efi_pixel_bitmask_t;
+
+typedef struct {
+	u32 version;
+	u32 horizontal_resolution;
+	u32 vertical_resolution;
+	int pixel_format;
+	efi_pixel_bitmask_t pixel_information;
+	u32 pixels_per_scan_line;
+} efi_graphics_output_mode_info_t;
+
+union efi_graphics_output_protocol;
+
+typedef union efi_graphics_output_protocol efi_graphics_output_protocol_t;
+
+union efi_graphics_output_protocol_mode;
+
+typedef union efi_graphics_output_protocol_mode efi_graphics_output_protocol_mode_t;
+
+union efi_graphics_output_protocol {
+	struct {
+		efi_status_t (*query_mode)(efi_graphics_output_protocol_t *, u32, unsigned long *, efi_graphics_output_mode_info_t **);
+		efi_status_t (*set_mode)(efi_graphics_output_protocol_t *, u32);
+		void *blt;
+		efi_graphics_output_protocol_mode_t *mode;
+	};
+	struct {
+		u32 query_mode;
+		u32 set_mode;
+		u32 blt;
+		u32 mode;
+	} mixed_mode;
+};
+
+union efi_graphics_output_protocol_mode {
+	struct {
+		u32 max_mode;
+		u32 mode;
+		efi_graphics_output_mode_info_t *info;
+		unsigned long size_of_info;
+		efi_physical_addr_t frame_buffer_base;
+		unsigned long frame_buffer_size;
+	};
+	struct {
+		u32 max_mode;
+		u32 mode;
+		u32 info;
+		u32 size_of_info;
+		u64 frame_buffer_base;
+		u32 frame_buffer_size;
+	} mixed_mode;
+};
+
+typedef struct {
+	void *read;
+	void *write;
+} efi_pci_io_protocol_access_t;
+
+typedef enum {
+	EfiPciIoWidthUint8 = 0,
+	EfiPciIoWidthUint16 = 1,
+	EfiPciIoWidthUint32 = 2,
+	EfiPciIoWidthUint64 = 3,
+	EfiPciIoWidthFifoUint8 = 4,
+	EfiPciIoWidthFifoUint16 = 5,
+	EfiPciIoWidthFifoUint32 = 6,
+	EfiPciIoWidthFifoUint64 = 7,
+	EfiPciIoWidthFillUint8 = 8,
+	EfiPciIoWidthFillUint16 = 9,
+	EfiPciIoWidthFillUint32 = 10,
+	EfiPciIoWidthFillUint64 = 11,
+	EfiPciIoWidthMaximum = 12,
+} EFI_PCI_IO_PROTOCOL_WIDTH;
+
+union efi_pci_io_protocol;
+
+typedef union efi_pci_io_protocol efi_pci_io_protocol_t;
+
+typedef efi_status_t (*efi_pci_io_protocol_cfg_t)(efi_pci_io_protocol_t *, EFI_PCI_IO_PROTOCOL_WIDTH, u32, unsigned long, void *);
+
+typedef struct {
+	efi_pci_io_protocol_cfg_t read;
+	efi_pci_io_protocol_cfg_t write;
+} efi_pci_io_protocol_config_access_t;
+
+typedef struct {
+	u32 read;
+	u32 write;
+} efi_pci_io_protocol_access_32_t;
+
+union efi_pci_io_protocol {
+	struct {
+		void *poll_mem;
+		void *poll_io;
+		efi_pci_io_protocol_access_t mem;
+		efi_pci_io_protocol_access_t io;
+		efi_pci_io_protocol_config_access_t pci;
+		void *copy_mem;
+		void *map;
+		void *unmap;
+		void *allocate_buffer;
+		void *free_buffer;
+		void *flush;
+		efi_status_t (*get_location)(efi_pci_io_protocol_t *, unsigned long *, unsigned long *, unsigned long *, unsigned long *);
+		void *attributes;
+		void *get_bar_attributes;
+		void *set_bar_attributes;
+		uint64_t romsize;
+		void *romimage;
+	};
+	struct {
+		u32 poll_mem;
+		u32 poll_io;
+		efi_pci_io_protocol_access_32_t mem;
+		efi_pci_io_protocol_access_32_t io;
+		efi_pci_io_protocol_access_32_t pci;
+		u32 copy_mem;
+		u32 map;
+		u32 unmap;
+		u32 allocate_buffer;
+		u32 free_buffer;
+		u32 flush;
+		u32 get_location;
+		u32 attributes;
+		u32 get_bar_attributes;
+		u32 set_bar_attributes;
+		u64 romsize;
+		u32 romimage;
+	} mixed_mode;
+};
+
+union efi_rng_protocol;
+
+typedef union efi_rng_protocol efi_rng_protocol_t;
+
+union efi_rng_protocol {
+	struct {
+		efi_status_t (*get_info)(efi_rng_protocol_t *, unsigned long *, efi_guid_t *);
+		efi_status_t (*get_rng)(efi_rng_protocol_t *, efi_guid_t *, unsigned long, u8 *);
+	};
+	struct {
+		u32 get_info;
+		u32 get_rng;
+	} mixed_mode;
+};
+
+struct tcpa_event {
+	u32 pcr_index;
+	u32 event_type;
+	u8 pcr_value[20];
+	u32 event_size;
+	u8 event_data[0];
+};
+
+#ifndef BPF_NO_PRESERVE_ACCESS_INDEX
+#pragma clang attribute pop
+#endif
+
+#endif /* __VMLINUX_H__ */
diff --git a/include/vmlinux/android15_6.6/x86_64/vmlinux.h b/include/vmlinux/android15_6.6/x86_64/vmlinux.h
new file mode 100644
index 0000000..65116b6
--- /dev/null
+++ b/include/vmlinux/android15_6.6/x86_64/vmlinux.h
@@ -0,0 +1,153061 @@
+#ifndef __VMLINUX_H__
+#define __VMLINUX_H__
+
+#ifndef BPF_NO_PRESERVE_ACCESS_INDEX
+#pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)
+#endif
+
+typedef struct {
+	int counter;
+} atomic_t;
+
+struct jump_entry;
+
+struct static_key_mod;
+
+struct static_key {
+	atomic_t enabled;
+	union {
+		unsigned long type;
+		struct jump_entry *entries;
+		struct static_key_mod *next;
+	};
+};
+
+struct static_call_key;
+
+struct tracepoint_func;
+
+struct tracepoint {
+	const char *name;
+	struct static_key key;
+	struct static_call_key *static_call_key;
+	void *static_call_tramp;
+	void *iterator;
+	void *probestub;
+	int (*regfunc)();
+	void (*unregfunc)();
+	struct tracepoint_func __attribute__((btf_type_tag("rcu"))) *funcs;
+};
+
+typedef int __s32;
+
+typedef __s32 s32;
+
+struct jump_entry {
+	s32 code;
+	s32 target;
+	long key;
+};
+
+struct static_call_mod;
+
+struct static_call_site;
+
+struct static_call_key {
+	void *func;
+	union {
+		unsigned long type;
+		struct static_call_mod *mods;
+		struct static_call_site *sites;
+	};
+};
+
+struct module;
+
+struct static_call_mod {
+	struct static_call_mod *next;
+	struct module *mod;
+	struct static_call_site *sites;
+};
+
+enum module_state {
+	MODULE_STATE_LIVE = 0,
+	MODULE_STATE_COMING = 1,
+	MODULE_STATE_GOING = 2,
+	MODULE_STATE_UNFORMED = 3,
+};
+
+struct list_head {
+	struct list_head *next;
+	struct list_head *prev;
+};
+
+struct refcount_struct {
+	atomic_t refs;
+};
+
+typedef struct refcount_struct refcount_t;
+
+struct kref {
+	refcount_t refcount;
+};
+
+typedef unsigned long long __u64;
+
+typedef __u64 u64;
+
+struct kset;
+
+struct kobj_type;
+
+struct kernfs_node;
+
+struct kobject {
+	const char *name;
+	struct list_head entry;
+	struct kobject *parent;
+	struct kset *kset;
+	const struct kobj_type *ktype;
+	struct kernfs_node *sd;
+	struct kref kref;
+	unsigned int state_initialized: 1;
+	unsigned int state_in_sysfs: 1;
+	unsigned int state_add_uevent_sent: 1;
+	unsigned int state_remove_uevent_sent: 1;
+	unsigned int uevent_suppress: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct module_param_attrs;
+
+struct completion;
+
+struct module_kobject {
+	struct kobject kobj;
+	struct module *mod;
+	struct kobject *drivers_dir;
+	struct module_param_attrs *mp;
+	struct completion *kobj_completion;
+};
+
+typedef long long __s64;
+
+typedef __s64 s64;
+
+typedef struct {
+	s64 counter;
+} atomic64_t;
+
+typedef atomic64_t atomic_long_t;
+
+typedef unsigned char __u8;
+
+typedef __u8 u8;
+
+typedef unsigned short __u16;
+
+typedef __u16 u16;
+
+struct qspinlock {
+	union {
+		atomic_t val;
+		struct {
+			u8 locked;
+			u8 pending;
+		};
+		struct {
+			u16 locked_pending;
+			u16 tail;
+		};
+	};
+};
+
+typedef struct qspinlock arch_spinlock_t;
+
+struct raw_spinlock {
+	arch_spinlock_t raw_lock;
+};
+
+typedef struct raw_spinlock raw_spinlock_t;
+
+struct optimistic_spin_queue {
+	atomic_t tail;
+};
+
+struct mutex {
+	atomic_long_t owner;
+	raw_spinlock_t wait_lock;
+	struct optimistic_spin_queue osq;
+	struct list_head wait_list;
+	u64 android_oem_data1[2];
+};
+
+typedef _Bool bool;
+
+struct rb_node {
+	unsigned long __rb_parent_color;
+	struct rb_node *rb_right;
+	struct rb_node *rb_left;
+};
+
+struct latch_tree_node {
+	struct rb_node node[2];
+};
+
+struct mod_tree_node {
+	struct module *mod;
+	struct latch_tree_node node;
+};
+
+struct module_memory {
+	void *base;
+	unsigned int size;
+	struct mod_tree_node mtn;
+};
+
+struct mod_arch_specific {};
+
+struct elf64_sym;
+
+typedef struct elf64_sym Elf64_Sym;
+
+struct mod_kallsyms {
+	Elf64_Sym *symtab;
+	unsigned int num_symtab;
+	char *strtab;
+	char *typetab;
+};
+
+typedef const int tracepoint_ptr_t;
+
+struct _ddebug;
+
+struct ddebug_class_map;
+
+struct _ddebug_info {
+	struct _ddebug *descs;
+	struct ddebug_class_map *classes;
+	unsigned int num_descs;
+	unsigned int num_classes;
+};
+
+struct module_attribute;
+
+struct kernel_symbol;
+
+struct kernel_param;
+
+struct exception_table_entry;
+
+struct bug_entry;
+
+struct module_sect_attrs;
+
+struct module_notes_attrs;
+
+struct srcu_struct;
+
+struct bpf_raw_event_map;
+
+struct trace_event_call;
+
+struct trace_eval_map;
+
+struct kunit_suite;
+
+struct module {
+	enum module_state state;
+	struct list_head list;
+	char name[56];
+	unsigned char build_id[20];
+	struct module_kobject mkobj;
+	struct module_attribute *modinfo_attrs;
+	const char *version;
+	const char *srcversion;
+	const char *scmversion;
+	struct kobject *holders_dir;
+	const struct kernel_symbol *syms;
+	const s32 *crcs;
+	unsigned int num_syms;
+	s32 *kcfi_traps;
+	s32 *kcfi_traps_end;
+	struct mutex param_lock;
+	struct kernel_param *kp;
+	unsigned int num_kp;
+	unsigned int num_gpl_syms;
+	const struct kernel_symbol *gpl_syms;
+	const s32 *gpl_crcs;
+	bool using_gplonly_symbols;
+	bool sig_ok;
+	bool async_probe_requested;
+	unsigned int num_exentries;
+	struct exception_table_entry *extable;
+	int (*init)();
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct module_memory mem[7];
+	struct mod_arch_specific arch;
+	unsigned long taints;
+	unsigned int num_bugs;
+	struct list_head bug_list;
+	struct bug_entry *bug_table;
+	struct mod_kallsyms __attribute__((btf_type_tag("rcu"))) *kallsyms;
+	struct mod_kallsyms core_kallsyms;
+	struct module_sect_attrs *sect_attrs;
+	struct module_notes_attrs *notes_attrs;
+	char *args;
+	void __attribute__((btf_type_tag("percpu"))) *percpu;
+	unsigned int percpu_size;
+	void *noinstr_text_start;
+	unsigned int noinstr_text_size;
+	unsigned int num_tracepoints;
+	tracepoint_ptr_t *tracepoints_ptrs;
+	unsigned int num_srcu_structs;
+	struct srcu_struct **srcu_struct_ptrs;
+	unsigned int num_bpf_raw_events;
+	struct bpf_raw_event_map *bpf_raw_events;
+	unsigned int btf_data_size;
+	void *btf_data;
+	struct jump_entry *jump_entries;
+	unsigned int num_jump_entries;
+	unsigned int num_trace_bprintk_fmt;
+	const char **trace_bprintk_fmt_start;
+	struct trace_event_call **trace_events;
+	unsigned int num_trace_events;
+	struct trace_eval_map **trace_evals;
+	unsigned int num_trace_evals;
+	void *kprobes_text_start;
+	unsigned int kprobes_text_size;
+	unsigned long *kprobe_blacklist;
+	unsigned int num_kprobe_blacklist;
+	int num_static_call_sites;
+	struct static_call_site *static_call_sites;
+	int num_kunit_suites;
+	struct kunit_suite **kunit_suites;
+	struct list_head source_list;
+	struct list_head target_list;
+	void (*exit)();
+	atomic_t refcnt;
+	struct _ddebug_info dyndbg_info;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct spinlock {
+	union {
+		struct raw_spinlock rlock;
+	};
+};
+
+typedef struct spinlock spinlock_t;
+
+struct kset_uevent_ops;
+
+struct kset {
+	struct list_head list;
+	spinlock_t list_lock;
+	struct kobject kobj;
+	const struct kset_uevent_ops *uevent_ops;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct kobj_uevent_env;
+
+struct kset_uevent_ops {
+	int (* const filter)(const struct kobject *);
+	const char * (* const name)(const struct kobject *);
+	int (* const uevent)(const struct kobject *, struct kobj_uevent_env *);
+};
+
+struct kobj_uevent_env {
+	char *argv[3];
+	char *envp[64];
+	int envp_idx;
+	char buf[2048];
+	int buflen;
+};
+
+typedef unsigned int __kernel_uid32_t;
+
+typedef __kernel_uid32_t uid_t;
+
+typedef struct {
+	uid_t val;
+} kuid_t;
+
+typedef unsigned int __kernel_gid32_t;
+
+typedef __kernel_gid32_t gid_t;
+
+typedef struct {
+	gid_t val;
+} kgid_t;
+
+struct sysfs_ops;
+
+struct attribute_group;
+
+struct kobj_ns_type_operations;
+
+struct kobj_type {
+	void (*release)(struct kobject *);
+	const struct sysfs_ops *sysfs_ops;
+	const struct attribute_group **default_groups;
+	const struct kobj_ns_type_operations * (*child_ns_type)(const struct kobject *);
+	const void * (*namespace)(const struct kobject *);
+	void (*get_ownership)(const struct kobject *, kuid_t *, kgid_t *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef long __kernel_long_t;
+
+typedef __kernel_long_t __kernel_ssize_t;
+
+typedef __kernel_ssize_t ssize_t;
+
+typedef unsigned long __kernel_ulong_t;
+
+typedef __kernel_ulong_t __kernel_size_t;
+
+typedef __kernel_size_t size_t;
+
+struct attribute;
+
+struct sysfs_ops {
+	ssize_t (*show)(struct kobject *, struct attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
+};
+
+typedef unsigned short umode_t;
+
+struct attribute {
+	const char *name;
+	umode_t mode;
+};
+
+struct bin_attribute;
+
+struct attribute_group {
+	const char *name;
+	umode_t (*is_visible)(struct kobject *, struct attribute *, int);
+	umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);
+	struct attribute **attrs;
+	struct bin_attribute **bin_attrs;
+};
+
+typedef long long __kernel_loff_t;
+
+typedef __kernel_loff_t loff_t;
+
+struct address_space;
+
+struct file;
+
+struct vm_area_struct;
+
+struct bin_attribute {
+	struct attribute attr;
+	size_t size;
+	void *private;
+	struct address_space * (*f_mapping)();
+	ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
+	ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);
+	int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);
+};
+
+typedef unsigned int gfp_t;
+
+struct xarray {
+	spinlock_t xa_lock;
+	gfp_t xa_flags;
+	void __attribute__((btf_type_tag("rcu"))) *xa_head;
+};
+
+struct rw_semaphore {
+	atomic_long_t count;
+	atomic_long_t owner;
+	struct optimistic_spin_queue osq;
+	raw_spinlock_t wait_lock;
+	struct list_head wait_list;
+	u64 android_vendor_data1;
+	u64 android_oem_data1[2];
+};
+
+struct rb_root {
+	struct rb_node *rb_node;
+};
+
+struct rb_root_cached {
+	struct rb_root rb_root;
+	struct rb_node *rb_leftmost;
+};
+
+typedef unsigned int __u32;
+
+typedef __u32 u32;
+
+typedef u32 errseq_t;
+
+struct inode;
+
+struct address_space_operations;
+
+struct address_space {
+	struct inode *host;
+	struct xarray i_pages;
+	struct rw_semaphore invalidate_lock;
+	gfp_t gfp_mask;
+	atomic_t i_mmap_writable;
+	struct rb_root_cached i_mmap;
+	unsigned long nrpages;
+	unsigned long writeback_index;
+	const struct address_space_operations *a_ops;
+	unsigned long flags;
+	struct rw_semaphore i_mmap_rwsem;
+	errseq_t wb_err;
+	spinlock_t private_lock;
+	struct list_head private_list;
+	void *private_data;
+};
+
+struct hlist_node;
+
+struct hlist_head {
+	struct hlist_node *first;
+};
+
+struct callback_head {
+	struct callback_head *next;
+	void (*func)(struct callback_head *);
+};
+
+typedef u32 __kernel_dev_t;
+
+typedef __kernel_dev_t dev_t;
+
+typedef __s64 time64_t;
+
+struct timespec64 {
+	time64_t tv_sec;
+	long tv_nsec;
+};
+
+enum rw_hint {
+	WRITE_LIFE_NOT_SET = 0,
+	WRITE_LIFE_NONE = 1,
+	WRITE_LIFE_SHORT = 2,
+	WRITE_LIFE_MEDIUM = 3,
+	WRITE_LIFE_LONG = 4,
+	WRITE_LIFE_EXTREME = 5,
+} __attribute__((mode(byte)));
+
+typedef u64 blkcnt_t;
+
+struct hlist_node {
+	struct hlist_node *next;
+	struct hlist_node **pprev;
+};
+
+struct posix_acl;
+
+struct inode_operations;
+
+struct super_block;
+
+struct bdi_writeback;
+
+struct file_operations;
+
+struct file_lock_context;
+
+struct pipe_inode_info;
+
+struct cdev;
+
+struct fsnotify_mark_connector;
+
+struct fscrypt_inode_info;
+
+struct fsverity_info;
+
+struct inode {
+	umode_t i_mode;
+	unsigned short i_opflags;
+	kuid_t i_uid;
+	kgid_t i_gid;
+	unsigned int i_flags;
+	struct posix_acl *i_acl;
+	struct posix_acl *i_default_acl;
+	const struct inode_operations *i_op;
+	struct super_block *i_sb;
+	struct address_space *i_mapping;
+	void *i_security;
+	unsigned long i_ino;
+	union {
+		const unsigned int i_nlink;
+		unsigned int __i_nlink;
+	};
+	dev_t i_rdev;
+	loff_t i_size;
+	struct timespec64 i_atime;
+	struct timespec64 i_mtime;
+	struct timespec64 __i_ctime;
+	spinlock_t i_lock;
+	unsigned short i_bytes;
+	u8 i_blkbits;
+	enum rw_hint i_write_hint;
+	blkcnt_t i_blocks;
+	unsigned long i_state;
+	struct rw_semaphore i_rwsem;
+	unsigned long dirtied_when;
+	unsigned long dirtied_time_when;
+	struct hlist_node i_hash;
+	struct list_head i_io_list;
+	struct bdi_writeback *i_wb;
+	int i_wb_frn_winner;
+	u16 i_wb_frn_avg_time;
+	u16 i_wb_frn_history;
+	struct list_head i_lru;
+	struct list_head i_sb_list;
+	struct list_head i_wb_list;
+	union {
+		struct hlist_head i_dentry;
+		struct callback_head i_rcu;
+	};
+	atomic64_t i_version;
+	atomic64_t i_sequence;
+	atomic_t i_count;
+	atomic_t i_dio_count;
+	atomic_t i_writecount;
+	atomic_t i_readcount;
+	union {
+		const struct file_operations *i_fop;
+		void (*free_inode)(struct inode *);
+	};
+	struct file_lock_context *i_flctx;
+	struct address_space i_data;
+	struct list_head i_devices;
+	union {
+		struct pipe_inode_info *i_pipe;
+		struct cdev *i_cdev;
+		char *i_link;
+		unsigned int i_dir_seq;
+	};
+	__u32 i_generation;
+	__u32 i_fsnotify_mask;
+	struct fsnotify_mark_connector __attribute__((btf_type_tag("rcu"))) *i_fsnotify_marks;
+	struct fscrypt_inode_info *i_crypt_info;
+	struct fsverity_info *i_verity_info;
+	void *i_private;
+};
+
+struct dentry;
+
+struct delayed_call;
+
+struct mnt_idmap;
+
+struct iattr;
+
+struct path;
+
+struct kstat;
+
+struct fiemap_extent_info;
+
+struct fileattr;
+
+struct offset_ctx;
+
+struct inode_operations {
+	struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);
+	const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);
+	int (*permission)(struct mnt_idmap *, struct inode *, int);
+	struct posix_acl * (*get_inode_acl)(struct inode *, int, bool);
+	int (*readlink)(struct dentry *, char __attribute__((btf_type_tag("user"))) *, int);
+	int (*create)(struct mnt_idmap *, struct inode *, struct dentry *, umode_t, bool);
+	int (*link)(struct dentry *, struct inode *, struct dentry *);
+	int (*unlink)(struct inode *, struct dentry *);
+	int (*symlink)(struct mnt_idmap *, struct inode *, struct dentry *, const char *);
+	int (*mkdir)(struct mnt_idmap *, struct inode *, struct dentry *, umode_t);
+	int (*rmdir)(struct inode *, struct dentry *);
+	int (*mknod)(struct mnt_idmap *, struct inode *, struct dentry *, umode_t, dev_t);
+	int (*rename)(struct mnt_idmap *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
+	int (*setattr)(struct mnt_idmap *, struct dentry *, struct iattr *);
+	int (*getattr)(struct mnt_idmap *, const struct path *, struct kstat *, u32, unsigned int);
+	ssize_t (*listxattr)(struct dentry *, char *, size_t);
+	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64, u64);
+	int (*update_time)(struct inode *, int);
+	int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t);
+	int (*tmpfile)(struct mnt_idmap *, struct inode *, struct file *, umode_t);
+	struct posix_acl * (*get_acl)(struct mnt_idmap *, struct dentry *, int);
+	int (*set_acl)(struct mnt_idmap *, struct dentry *, struct posix_acl *, int);
+	int (*fileattr_set)(struct mnt_idmap *, struct dentry *, struct fileattr *);
+	int (*fileattr_get)(struct dentry *, struct fileattr *);
+	struct offset_ctx * (*get_offset_ctx)(struct inode *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct hlist_bl_node {
+	struct hlist_bl_node *next;
+	struct hlist_bl_node **pprev;
+};
+
+struct seqcount {
+	unsigned int sequence;
+};
+
+typedef struct seqcount seqcount_t;
+
+struct seqcount_spinlock {
+	seqcount_t seqcount;
+};
+
+typedef struct seqcount_spinlock seqcount_spinlock_t;
+
+struct qstr {
+	union {
+		struct {
+			u32 hash;
+			u32 len;
+		};
+		u64 hash_len;
+	};
+	const unsigned char *name;
+};
+
+struct lockref {
+	union {
+		__u64 lock_count;
+		struct {
+			spinlock_t lock;
+			int count;
+		};
+	};
+};
+
+struct dentry_operations;
+
+struct wait_queue_head;
+
+typedef struct wait_queue_head wait_queue_head_t;
+
+struct dentry {
+	unsigned int d_flags;
+	seqcount_spinlock_t d_seq;
+	struct hlist_bl_node d_hash;
+	struct dentry *d_parent;
+	struct qstr d_name;
+	struct inode *d_inode;
+	unsigned char d_iname[32];
+	struct lockref d_lockref;
+	const struct dentry_operations *d_op;
+	struct super_block *d_sb;
+	unsigned long d_time;
+	void *d_fsdata;
+	union {
+		struct list_head d_lru;
+		wait_queue_head_t *d_wait;
+	};
+	struct list_head d_child;
+	struct list_head d_subdirs;
+	union {
+		struct hlist_node d_alias;
+		struct hlist_bl_node d_in_lookup_hash;
+		struct callback_head d_rcu;
+	} d_u;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct vfsmount;
+
+struct dentry_operations {
+	int (*d_revalidate)(struct dentry *, unsigned int);
+	int (*d_weak_revalidate)(struct dentry *, unsigned int);
+	int (*d_hash)(const struct dentry *, struct qstr *);
+	int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *);
+	int (*d_delete)(const struct dentry *);
+	int (*d_init)(struct dentry *);
+	void (*d_release)(struct dentry *);
+	void (*d_prune)(struct dentry *);
+	void (*d_iput)(struct dentry *, struct inode *);
+	char * (*d_dname)(struct dentry *, char *, int);
+	struct vfsmount * (*d_automount)(struct path *);
+	int (*d_manage)(const struct path *, bool);
+	struct dentry * (*d_real)(struct dentry *, const struct inode *);
+	int (*d_canonical_path)(const struct path *, struct path *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct vfsmount {
+	struct dentry *mnt_root;
+	struct super_block *mnt_sb;
+	int mnt_flags;
+	struct mnt_idmap *mnt_idmap;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct hlist_bl_head {
+	struct hlist_bl_node *first;
+};
+
+struct mtd_info;
+
+typedef long long qsize_t;
+
+struct quota_format_type;
+
+struct mem_dqinfo {
+	struct quota_format_type *dqi_format;
+	int dqi_fmt_id;
+	struct list_head dqi_dirty_list;
+	unsigned long dqi_flags;
+	unsigned int dqi_bgrace;
+	unsigned int dqi_igrace;
+	qsize_t dqi_max_spc_limit;
+	qsize_t dqi_max_ino_limit;
+	void *dqi_priv;
+};
+
+struct quota_format_ops;
+
+struct quota_info {
+	unsigned int flags;
+	struct rw_semaphore dqio_sem;
+	struct inode *files[3];
+	struct mem_dqinfo info[3];
+	const struct quota_format_ops *ops[3];
+};
+
+struct wait_queue_head {
+	spinlock_t lock;
+	struct list_head head;
+};
+
+struct rcu_sync {
+	int gp_state;
+	int gp_count;
+	wait_queue_head_t gp_wait;
+	struct callback_head cb_head;
+};
+
+struct task_struct;
+
+struct rcuwait {
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *task;
+};
+
+struct percpu_rw_semaphore {
+	struct rcu_sync rss;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *read_count;
+	struct rcuwait writer;
+	wait_queue_head_t waiters;
+	atomic_t block;
+	u64 android_oem_data1;
+};
+
+struct sb_writers {
+	unsigned short frozen;
+	unsigned short freeze_holders;
+	struct percpu_rw_semaphore rw_sem[3];
+};
+
+typedef struct {
+	__u8 b[16];
+} uuid_t;
+
+struct shrink_control;
+
+struct shrinker {
+	unsigned long (*count_objects)(struct shrinker *, struct shrink_control *);
+	unsigned long (*scan_objects)(struct shrinker *, struct shrink_control *);
+	long batch;
+	int seeks;
+	unsigned int flags;
+	struct list_head list;
+	int id;
+	atomic_long_t *nr_deferred;
+};
+
+struct list_lru_node;
+
+struct list_lru {
+	struct list_lru_node *node;
+	struct list_head list;
+	int shrinker_id;
+	bool memcg_aware;
+	struct xarray xa;
+};
+
+struct work_struct;
+
+typedef void (*work_func_t)(struct work_struct *);
+
+struct work_struct {
+	atomic_long_t data;
+	struct list_head entry;
+	work_func_t func;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct file_system_type;
+
+struct super_operations;
+
+struct dquot_operations;
+
+struct quotactl_ops;
+
+struct export_operations;
+
+struct xattr_handler;
+
+struct fscrypt_operations;
+
+struct fscrypt_keyring;
+
+struct fsverity_operations;
+
+struct unicode_map;
+
+struct block_device;
+
+struct backing_dev_info;
+
+struct workqueue_struct;
+
+struct user_namespace;
+
+struct super_block {
+	struct list_head s_list;
+	dev_t s_dev;
+	unsigned char s_blocksize_bits;
+	unsigned long s_blocksize;
+	loff_t s_maxbytes;
+	struct file_system_type *s_type;
+	const struct super_operations *s_op;
+	const struct dquot_operations *dq_op;
+	const struct quotactl_ops *s_qcop;
+	const struct export_operations *s_export_op;
+	unsigned long s_flags;
+	unsigned long s_iflags;
+	unsigned long s_magic;
+	struct dentry *s_root;
+	struct rw_semaphore s_umount;
+	int s_count;
+	atomic_t s_active;
+	void *s_security;
+	const struct xattr_handler **s_xattr;
+	const struct fscrypt_operations *s_cop;
+	struct fscrypt_keyring *s_master_keys;
+	const struct fsverity_operations *s_vop;
+	struct unicode_map *s_encoding;
+	__u16 s_encoding_flags;
+	struct hlist_bl_head s_roots;
+	struct list_head s_mounts;
+	struct block_device *s_bdev;
+	struct backing_dev_info *s_bdi;
+	struct mtd_info *s_mtd;
+	struct hlist_node s_instances;
+	unsigned int s_quota_types;
+	struct quota_info s_dquot;
+	struct sb_writers s_writers;
+	void *s_fs_info;
+	u32 s_time_gran;
+	time64_t s_time_min;
+	time64_t s_time_max;
+	__u32 s_fsnotify_mask;
+	struct fsnotify_mark_connector __attribute__((btf_type_tag("rcu"))) *s_fsnotify_marks;
+	char s_id[32];
+	uuid_t s_uuid;
+	unsigned int s_max_links;
+	struct mutex s_vfs_rename_mutex;
+	const char *s_subtype;
+	const struct dentry_operations *s_d_op;
+	int cleancache_poolid;
+	struct shrinker s_shrink;
+	atomic_long_t s_remove_count;
+	atomic_long_t s_fsnotify_connectors;
+	int s_readonly_remount;
+	errseq_t s_wb_err;
+	struct workqueue_struct *s_dio_done_wq;
+	struct hlist_head s_pins;
+	struct user_namespace *s_user_ns;
+	struct list_lru s_dentry_lru;
+	struct list_lru s_inode_lru;
+	struct callback_head rcu;
+	struct work_struct destroy_work;
+	struct mutex s_sync_lock;
+	int s_stack_depth;
+	long: 0;
+	spinlock_t s_inode_list_lock;
+	struct list_head s_inodes;
+	spinlock_t s_inode_wblist_lock;
+	struct list_head s_inodes_wb;
+	long: 64;
+	long: 64;
+};
+
+struct lock_class_key {};
+
+struct fs_context;
+
+struct fs_parameter_spec;
+
+struct file_system_type {
+	const char *name;
+	int fs_flags;
+	int (*init_fs_context)(struct fs_context *);
+	const struct fs_parameter_spec *parameters;
+	struct dentry * (*mount)(struct file_system_type *, int, const char *, void *);
+	void (*kill_sb)(struct super_block *);
+	struct module *owner;
+	struct file_system_type *next;
+	struct hlist_head fs_supers;
+	struct lock_class_key s_lock_key;
+	struct lock_class_key s_umount_key;
+	struct lock_class_key s_vfs_rename_key;
+	struct lock_class_key s_writers_key[3];
+	struct lock_class_key i_lock_key;
+	struct lock_class_key i_mutex_key;
+	struct lock_class_key invalidate_lock_key;
+	struct lock_class_key i_mutex_dir_key;
+};
+
+struct fc_log;
+
+struct p_log {
+	const char *prefix;
+	struct fc_log *log;
+};
+
+enum fs_context_purpose {
+	FS_CONTEXT_FOR_MOUNT = 0,
+	FS_CONTEXT_FOR_SUBMOUNT = 1,
+	FS_CONTEXT_FOR_RECONFIGURE = 2,
+};
+
+enum fs_context_phase {
+	FS_CONTEXT_CREATE_PARAMS = 0,
+	FS_CONTEXT_CREATING = 1,
+	FS_CONTEXT_AWAITING_MOUNT = 2,
+	FS_CONTEXT_AWAITING_RECONF = 3,
+	FS_CONTEXT_RECONF_PARAMS = 4,
+	FS_CONTEXT_RECONFIGURING = 5,
+	FS_CONTEXT_FAILED = 6,
+};
+
+struct fs_context_operations;
+
+struct net;
+
+struct cred;
+
+struct fs_context {
+	const struct fs_context_operations *ops;
+	struct mutex uapi_mutex;
+	struct file_system_type *fs_type;
+	void *fs_private;
+	void *sget_key;
+	struct dentry *root;
+	struct user_namespace *user_ns;
+	struct net *net_ns;
+	const struct cred *cred;
+	struct p_log log;
+	const char *source;
+	void *security;
+	void *s_fs_info;
+	unsigned int sb_flags;
+	unsigned int sb_flags_mask;
+	unsigned int s_iflags;
+	enum fs_context_purpose purpose: 8;
+	enum fs_context_phase phase: 8;
+	bool need_free: 1;
+	bool global: 1;
+	bool oldapi: 1;
+	bool exclusive: 1;
+};
+
+struct fs_parameter;
+
+struct fs_context_operations {
+	void (*free)(struct fs_context *);
+	int (*dup)(struct fs_context *, struct fs_context *);
+	int (*parse_param)(struct fs_context *, struct fs_parameter *);
+	int (*parse_monolithic)(struct fs_context *, void *);
+	int (*get_tree)(struct fs_context *);
+	int (*reconfigure)(struct fs_context *);
+};
+
+enum fs_value_type {
+	fs_value_is_undefined = 0,
+	fs_value_is_flag = 1,
+	fs_value_is_string = 2,
+	fs_value_is_blob = 3,
+	fs_value_is_filename = 4,
+	fs_value_is_file = 5,
+};
+
+struct filename;
+
+struct fs_parameter {
+	const char *key;
+	enum fs_value_type type: 8;
+	union {
+		char *string;
+		void *blob;
+		struct filename *name;
+		struct file *file;
+	};
+	size_t size;
+	int dirfd;
+};
+
+struct audit_names;
+
+struct filename {
+	const char *name;
+	const char __attribute__((btf_type_tag("user"))) *uptr;
+	atomic_t refcnt;
+	struct audit_names *aname;
+	const char iname[0];
+};
+
+struct llist_node {
+	struct llist_node *next;
+};
+
+typedef unsigned int fmode_t;
+
+struct qrwlock {
+	union {
+		atomic_t cnts;
+		struct {
+			u8 wlocked;
+			u8 __lstate[3];
+		};
+	};
+	arch_spinlock_t wait_lock;
+};
+
+typedef struct qrwlock arch_rwlock_t;
+
+typedef struct {
+	arch_rwlock_t raw_lock;
+} rwlock_t;
+
+enum pid_type {
+	PIDTYPE_PID = 0,
+	PIDTYPE_TGID = 1,
+	PIDTYPE_PGID = 2,
+	PIDTYPE_SID = 3,
+	PIDTYPE_MAX = 4,
+};
+
+struct pid;
+
+struct fown_struct {
+	rwlock_t lock;
+	struct pid *pid;
+	enum pid_type pid_type;
+	kuid_t uid;
+	kuid_t euid;
+	int signum;
+};
+
+struct file_ra_state {
+	unsigned long start;
+	unsigned int size;
+	unsigned int async_size;
+	unsigned int ra_pages;
+	unsigned int mmap_miss;
+	loff_t prev_pos;
+};
+
+struct path {
+	struct vfsmount *mnt;
+	struct dentry *dentry;
+};
+
+struct file {
+	union {
+		struct llist_node f_llist;
+		struct callback_head f_rcuhead;
+		unsigned int f_iocb_flags;
+	};
+	spinlock_t f_lock;
+	fmode_t f_mode;
+	atomic_long_t f_count;
+	struct mutex f_pos_lock;
+	loff_t f_pos;
+	unsigned int f_flags;
+	struct fown_struct f_owner;
+	const struct cred *f_cred;
+	struct file_ra_state f_ra;
+	struct path f_path;
+	struct inode *f_inode;
+	const struct file_operations *f_op;
+	u64 f_version;
+	void *f_security;
+	void *private_data;
+	struct hlist_head *f_ep;
+	struct address_space *f_mapping;
+	errseq_t f_wb_err;
+	errseq_t f_sb_err;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct pid_namespace;
+
+struct upid {
+	int nr;
+	struct pid_namespace *ns;
+};
+
+struct pid {
+	refcount_t count;
+	unsigned int level;
+	spinlock_t lock;
+	struct hlist_head tasks[4];
+	struct hlist_head inodes;
+	wait_queue_head_t wait_pidfd;
+	struct callback_head rcu;
+	struct upid numbers[0];
+};
+
+struct idr {
+	struct xarray idr_rt;
+	unsigned int idr_base;
+	unsigned int idr_next;
+};
+
+struct proc_ns_operations;
+
+struct ns_common {
+	atomic_long_t stashed;
+	const struct proc_ns_operations *ops;
+	unsigned int inum;
+	refcount_t count;
+};
+
+struct kmem_cache;
+
+struct ucounts;
+
+struct pid_namespace {
+	struct idr idr;
+	struct callback_head rcu;
+	unsigned int pid_allocated;
+	struct task_struct *child_reaper;
+	struct kmem_cache *pid_cachep;
+	unsigned int level;
+	struct pid_namespace *parent;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	int reboot;
+	struct ns_common ns;
+	int memfd_noexec_scope;
+};
+
+struct thread_info {
+	unsigned long flags;
+	unsigned long syscall_work;
+	u32 status;
+	u32 cpu;
+};
+
+struct __call_single_node {
+	struct llist_node llist;
+	union {
+		unsigned int u_flags;
+		atomic_t a_flags;
+	};
+	u16 src;
+	u16 dst;
+};
+
+struct load_weight {
+	unsigned long weight;
+	u32 inv_weight;
+};
+
+struct sched_avg {
+	u64 last_update_time;
+	u64 load_sum;
+	u64 runnable_sum;
+	u32 util_sum;
+	u32 period_contrib;
+	unsigned long load_avg;
+	unsigned long runnable_avg;
+	unsigned long util_avg;
+	unsigned int util_est;
+	u32 reserved;
+};
+
+struct cfs_rq;
+
+struct sched_entity {
+	struct load_weight load;
+	struct rb_node run_node;
+	u64 deadline;
+	u64 min_vruntime;
+	struct list_head group_node;
+	unsigned int on_rq;
+	u64 exec_start;
+	u64 sum_exec_runtime;
+	u64 prev_sum_exec_runtime;
+	u64 vruntime;
+	s64 vlag;
+	u64 slice;
+	u64 nr_migrations;
+	int depth;
+	struct sched_entity *parent;
+	struct cfs_rq *cfs_rq;
+	struct cfs_rq *my_q;
+	unsigned long runnable_weight;
+	long: 64;
+	long: 64;
+	struct sched_avg avg;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sched_rt_entity {
+	struct list_head run_list;
+	unsigned long timeout;
+	unsigned long watchdog_stamp;
+	unsigned int time_slice;
+	unsigned short on_rq;
+	unsigned short on_list;
+	struct sched_rt_entity *back;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef s64 ktime_t;
+
+struct timerqueue_node {
+	struct rb_node node;
+	ktime_t expires;
+};
+
+enum hrtimer_restart {
+	HRTIMER_NORESTART = 0,
+	HRTIMER_RESTART = 1,
+};
+
+struct hrtimer_clock_base;
+
+struct hrtimer {
+	struct timerqueue_node node;
+	ktime_t _softexpires;
+	enum hrtimer_restart (*function)(struct hrtimer *);
+	struct hrtimer_clock_base *base;
+	u8 state;
+	u8 is_rel;
+	u8 is_soft;
+	u8 is_hard;
+	u64 android_kabi_reserved1;
+};
+
+struct sched_dl_entity {
+	struct rb_node rb_node;
+	u64 dl_runtime;
+	u64 dl_deadline;
+	u64 dl_period;
+	u64 dl_bw;
+	u64 dl_density;
+	s64 runtime;
+	u64 deadline;
+	unsigned int flags;
+	unsigned int dl_throttled: 1;
+	unsigned int dl_yielded: 1;
+	unsigned int dl_non_contending: 1;
+	unsigned int dl_overrun: 1;
+	struct hrtimer dl_timer;
+	struct hrtimer inactive_timer;
+	struct sched_dl_entity *pi_se;
+};
+
+struct uclamp_se {
+	unsigned int value: 11;
+	unsigned int bucket_id: 5;
+	unsigned int active: 1;
+	unsigned int user_defined: 1;
+};
+
+struct sched_statistics {
+	u64 wait_start;
+	u64 wait_max;
+	u64 wait_count;
+	u64 wait_sum;
+	u64 iowait_count;
+	u64 iowait_sum;
+	u64 sleep_start;
+	u64 sleep_max;
+	s64 sum_sleep_runtime;
+	u64 block_start;
+	u64 block_max;
+	s64 sum_block_runtime;
+	u64 exec_max;
+	u64 slice_max;
+	u64 nr_migrations_cold;
+	u64 nr_failed_migrations_affine;
+	u64 nr_failed_migrations_running;
+	u64 nr_failed_migrations_hot;
+	u64 nr_forced_migrations;
+	u64 nr_wakeups;
+	u64 nr_wakeups_sync;
+	u64 nr_wakeups_migrate;
+	u64 nr_wakeups_local;
+	u64 nr_wakeups_remote;
+	u64 nr_wakeups_affine;
+	u64 nr_wakeups_affine_attempts;
+	u64 nr_wakeups_passive;
+	u64 nr_wakeups_idle;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct cpumask {
+	unsigned long bits[1];
+};
+
+typedef struct cpumask cpumask_t;
+
+union rcu_special {
+	struct {
+		u8 blocked;
+		u8 need_qs;
+		u8 exp_hint;
+		u8 need_mb;
+	} b;
+	u32 s;
+};
+
+struct sched_info {
+	unsigned long pcount;
+	unsigned long long run_delay;
+	unsigned long long last_arrival;
+	unsigned long long last_queued;
+};
+
+struct plist_node {
+	int prio;
+	struct list_head prio_list;
+	struct list_head node_list;
+};
+
+typedef int __kernel_clockid_t;
+
+typedef __kernel_clockid_t clockid_t;
+
+enum timespec_type {
+	TT_NONE = 0,
+	TT_NATIVE = 1,
+	TT_COMPAT = 2,
+};
+
+struct __kernel_timespec;
+
+struct old_timespec32;
+
+struct pollfd;
+
+struct restart_block {
+	unsigned long arch_data;
+	long (*fn)(struct restart_block *);
+	union {
+		struct {
+			u32 __attribute__((btf_type_tag("user"))) *uaddr;
+			u32 val;
+			u32 flags;
+			u32 bitset;
+			u64 time;
+			u32 __attribute__((btf_type_tag("user"))) *uaddr2;
+		} futex;
+		struct {
+			clockid_t clockid;
+			enum timespec_type type;
+			union {
+				struct __kernel_timespec __attribute__((btf_type_tag("user"))) *rmtp;
+				struct old_timespec32 __attribute__((btf_type_tag("user"))) *compat_rmtp;
+			};
+			u64 expires;
+		} nanosleep;
+		struct {
+			struct pollfd __attribute__((btf_type_tag("user"))) *ufds;
+			int nfds;
+			int has_timeout;
+			unsigned long tv_sec;
+			unsigned long tv_nsec;
+		} poll;
+	};
+};
+
+typedef int __kernel_pid_t;
+
+typedef __kernel_pid_t pid_t;
+
+struct prev_cputime {
+	u64 utime;
+	u64 stime;
+	raw_spinlock_t lock;
+};
+
+struct timerqueue_head {
+	struct rb_root_cached rb_root;
+};
+
+struct posix_cputimer_base {
+	u64 nextevt;
+	struct timerqueue_head tqhead;
+};
+
+struct posix_cputimers {
+	struct posix_cputimer_base bases[3];
+	unsigned int timers_active;
+	unsigned int expiry_active;
+};
+
+struct posix_cputimers_work {
+	struct callback_head work;
+	struct mutex mutex;
+	unsigned int scheduled;
+};
+
+typedef struct {
+	unsigned long sig[1];
+} sigset_t;
+
+struct sigpending {
+	struct list_head list;
+	sigset_t signal;
+};
+
+struct seccomp_filter;
+
+struct seccomp {
+	int mode;
+	atomic_t filter_count;
+	struct seccomp_filter *filter;
+};
+
+struct syscall_user_dispatch {
+	char __attribute__((btf_type_tag("user"))) *selector;
+	unsigned long offset;
+	unsigned long len;
+	bool on_dispatch;
+};
+
+struct wake_q_node {
+	struct wake_q_node *next;
+};
+
+struct task_io_accounting {
+	u64 rchar;
+	u64 wchar;
+	u64 syscr;
+	u64 syscw;
+	u64 syscfs;
+	u64 read_bytes;
+	u64 write_bytes;
+	u64 cancelled_write_bytes;
+};
+
+typedef struct {
+	unsigned long bits[1];
+} nodemask_t;
+
+struct arch_tlbflush_unmap_batch {
+	struct cpumask cpumask;
+};
+
+struct tlbflush_unmap_batch {
+	struct arch_tlbflush_unmap_batch arch;
+	bool flush_required;
+	bool writable;
+};
+
+struct page;
+
+struct page_frag {
+	struct page *page;
+	__u32 offset;
+	__u32 size;
+};
+
+struct kmap_ctrl {};
+
+struct timer_list {
+	struct hlist_node entry;
+	unsigned long expires;
+	void (*function)(struct timer_list *);
+	u32 flags;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct llist_head {
+	struct llist_node *first;
+};
+
+struct desc_struct {
+	u16 limit0;
+	u16 base0;
+	u16 base1: 8;
+	u16 type: 4;
+	u16 s: 1;
+	u16 dpl: 2;
+	u16 p: 1;
+	u16 limit1: 4;
+	u16 avl: 1;
+	u16 l: 1;
+	u16 d: 1;
+	u16 g: 1;
+	u16 base2: 8;
+};
+
+struct fpu_state_perm {
+	u64 __state_perm;
+	unsigned int __state_size;
+	unsigned int __user_state_size;
+};
+
+struct fregs_state {
+	u32 cwd;
+	u32 swd;
+	u32 twd;
+	u32 fip;
+	u32 fcs;
+	u32 foo;
+	u32 fos;
+	u32 st_space[20];
+	u32 status;
+};
+
+struct fxregs_state {
+	u16 cwd;
+	u16 swd;
+	u16 twd;
+	u16 fop;
+	union {
+		struct {
+			u64 rip;
+			u64 rdp;
+		};
+		struct {
+			u32 fip;
+			u32 fcs;
+			u32 foo;
+			u32 fos;
+		};
+	};
+	u32 mxcsr;
+	u32 mxcsr_mask;
+	u32 st_space[32];
+	u32 xmm_space[64];
+	u32 padding[12];
+	union {
+		u32 padding1[12];
+		u32 sw_reserved[12];
+	};
+};
+
+struct math_emu_info;
+
+struct swregs_state {
+	u32 cwd;
+	u32 swd;
+	u32 twd;
+	u32 fip;
+	u32 fcs;
+	u32 foo;
+	u32 fos;
+	u32 st_space[20];
+	u8 ftop;
+	u8 changed;
+	u8 lookahead;
+	u8 no_update;
+	u8 rm;
+	u8 alimit;
+	struct math_emu_info *info;
+	u32 entry_eip;
+};
+
+struct xstate_header {
+	u64 xfeatures;
+	u64 xcomp_bv;
+	u64 reserved[6];
+};
+
+struct xregs_state {
+	struct fxregs_state i387;
+	struct xstate_header header;
+	u8 extended_state_area[0];
+};
+
+union fpregs_state {
+	struct fregs_state fsave;
+	struct fxregs_state fxsave;
+	struct swregs_state soft;
+	struct xregs_state xsave;
+	u8 __padding[4096];
+};
+
+struct fpstate {
+	unsigned int size;
+	unsigned int user_size;
+	u64 xfeatures;
+	u64 user_xfeatures;
+	u64 xfd;
+	unsigned int is_valloc: 1;
+	unsigned int is_guest: 1;
+	unsigned int is_confidential: 1;
+	unsigned int in_use: 1;
+	long: 64;
+	long: 64;
+	long: 64;
+	union fpregs_state regs;
+};
+
+struct fpu {
+	unsigned int last_cpu;
+	unsigned long avx512_timestamp;
+	struct fpstate *fpstate;
+	struct fpstate *__task_fpstate;
+	struct fpu_state_perm perm;
+	struct fpu_state_perm guest_perm;
+	struct fpstate __fpstate;
+};
+
+struct perf_event;
+
+struct io_bitmap;
+
+struct thread_struct {
+	struct desc_struct tls_array[3];
+	unsigned long sp;
+	unsigned short es;
+	unsigned short ds;
+	unsigned short fsindex;
+	unsigned short gsindex;
+	unsigned long fsbase;
+	unsigned long gsbase;
+	struct perf_event *ptrace_bps[4];
+	unsigned long virtual_dr6;
+	unsigned long ptrace_dr7;
+	unsigned long cr2;
+	unsigned long trap_nr;
+	unsigned long error_code;
+	struct io_bitmap *io_bitmap;
+	unsigned long iopl_emul;
+	unsigned int iopl_warn: 1;
+	unsigned int sig_on_uaccess_err: 1;
+	u32 pkru;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct fpu fpu;
+};
+
+struct sched_class;
+
+struct task_group;
+
+struct rcu_node;
+
+struct mm_struct;
+
+struct key;
+
+struct nameidata;
+
+struct fs_struct;
+
+struct files_struct;
+
+struct io_uring_task;
+
+struct nsproxy;
+
+struct signal_struct;
+
+struct sighand_struct;
+
+struct audit_context;
+
+struct rt_mutex_waiter;
+
+struct bio_list;
+
+struct blk_plug;
+
+struct reclaim_state;
+
+struct io_context;
+
+struct capture_control;
+
+struct kernel_siginfo;
+
+typedef struct kernel_siginfo kernel_siginfo_t;
+
+struct css_set;
+
+struct robust_list_head;
+
+struct compat_robust_list_head;
+
+struct futex_pi_state;
+
+struct perf_event_context;
+
+struct task_delay_info;
+
+struct kunit;
+
+struct mem_cgroup;
+
+struct gendisk;
+
+struct uprobe_task;
+
+struct vm_struct;
+
+struct bpf_local_storage;
+
+struct bpf_run_ctx;
+
+struct task_struct {
+	struct thread_info thread_info;
+	unsigned int __state;
+	unsigned int saved_state;
+	void *stack;
+	refcount_t usage;
+	unsigned int flags;
+	unsigned int ptrace;
+	int on_cpu;
+	struct __call_single_node wake_entry;
+	unsigned int wakee_flips;
+	unsigned long wakee_flip_decay_ts;
+	struct task_struct *last_wakee;
+	int recent_used_cpu;
+	int wake_cpu;
+	int on_rq;
+	int prio;
+	int static_prio;
+	int normal_prio;
+	unsigned int rt_priority;
+	struct sched_entity se;
+	struct sched_rt_entity rt;
+	struct sched_dl_entity dl;
+	const struct sched_class *sched_class;
+	struct task_group *sched_task_group;
+	struct uclamp_se uclamp_req[2];
+	struct uclamp_se uclamp[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_statistics stats;
+	struct hlist_head preempt_notifiers;
+	unsigned int policy;
+	int nr_cpus_allowed;
+	const cpumask_t *cpus_ptr;
+	cpumask_t *user_cpus_ptr;
+	cpumask_t cpus_mask;
+	void *migration_pending;
+	unsigned short migration_disabled;
+	unsigned short migration_flags;
+	int rcu_read_lock_nesting;
+	union rcu_special rcu_read_unlock_special;
+	struct list_head rcu_node_entry;
+	struct rcu_node *rcu_blocked_node;
+	unsigned long rcu_tasks_nvcsw;
+	u8 rcu_tasks_holdout;
+	u8 rcu_tasks_idx;
+	int rcu_tasks_idle_cpu;
+	struct list_head rcu_tasks_holdout_list;
+	int trc_reader_nesting;
+	int trc_ipi_to_cpu;
+	union rcu_special trc_reader_special;
+	struct list_head trc_holdout_list;
+	struct list_head trc_blkd_node;
+	int trc_blkd_cpu;
+	struct sched_info sched_info;
+	struct list_head tasks;
+	struct plist_node pushable_tasks;
+	struct rb_node pushable_dl_tasks;
+	struct mm_struct *mm;
+	struct mm_struct *active_mm;
+	int exit_state;
+	int exit_code;
+	int exit_signal;
+	int pdeath_signal;
+	unsigned long jobctl;
+	unsigned int personality;
+	unsigned int sched_reset_on_fork: 1;
+	unsigned int sched_contributes_to_load: 1;
+	unsigned int sched_migrated: 1;
+	long: 29;
+	unsigned int sched_remote_wakeup: 1;
+	unsigned int in_execve: 1;
+	unsigned int in_iowait: 1;
+	unsigned int restore_sigmask: 1;
+	unsigned int in_user_fault: 1;
+	unsigned int in_lru_fault: 1;
+	unsigned int no_cgroup_migration: 1;
+	unsigned int frozen: 1;
+	unsigned int use_memdelay: 1;
+	unsigned int in_memstall: 1;
+	unsigned int in_page_owner: 1;
+	unsigned int in_eventfd: 1;
+	unsigned int reported_split_lock: 1;
+	unsigned int in_thrashing: 1;
+	unsigned long atomic_flags;
+	struct restart_block restart_block;
+	pid_t pid;
+	pid_t tgid;
+	unsigned long stack_canary;
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *real_parent;
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *parent;
+	struct list_head children;
+	struct list_head sibling;
+	struct task_struct *group_leader;
+	struct list_head ptraced;
+	struct list_head ptrace_entry;
+	struct pid *thread_pid;
+	struct hlist_node pid_links[4];
+	struct list_head thread_group;
+	struct list_head thread_node;
+	struct completion *vfork_done;
+	int __attribute__((btf_type_tag("user"))) *set_child_tid;
+	int __attribute__((btf_type_tag("user"))) *clear_child_tid;
+	void *worker_private;
+	u64 utime;
+	u64 stime;
+	u64 gtime;
+	u64 *time_in_state;
+	unsigned int max_state;
+	struct prev_cputime prev_cputime;
+	unsigned long nvcsw;
+	unsigned long nivcsw;
+	u64 start_time;
+	u64 start_boottime;
+	unsigned long min_flt;
+	unsigned long maj_flt;
+	struct posix_cputimers posix_cputimers;
+	struct posix_cputimers_work posix_cputimers_work;
+	const struct cred __attribute__((btf_type_tag("rcu"))) *ptracer_cred;
+	const struct cred __attribute__((btf_type_tag("rcu"))) *real_cred;
+	const struct cred __attribute__((btf_type_tag("rcu"))) *cred;
+	struct key *cached_requested_key;
+	char comm[16];
+	struct nameidata *nameidata;
+	unsigned long last_switch_count;
+	unsigned long last_switch_time;
+	struct fs_struct *fs;
+	struct files_struct *files;
+	struct io_uring_task *io_uring;
+	struct nsproxy *nsproxy;
+	struct signal_struct *signal;
+	struct sighand_struct __attribute__((btf_type_tag("rcu"))) *sighand;
+	sigset_t blocked;
+	sigset_t real_blocked;
+	sigset_t saved_sigmask;
+	struct sigpending pending;
+	unsigned long sas_ss_sp;
+	size_t sas_ss_size;
+	unsigned int sas_ss_flags;
+	struct callback_head *task_works;
+	struct audit_context *audit_context;
+	kuid_t loginuid;
+	unsigned int sessionid;
+	struct seccomp seccomp;
+	struct syscall_user_dispatch syscall_dispatch;
+	u64 parent_exec_id;
+	u64 self_exec_id;
+	spinlock_t alloc_lock;
+	raw_spinlock_t pi_lock;
+	struct wake_q_node wake_q;
+	int wake_q_count;
+	struct rb_root_cached pi_waiters;
+	struct task_struct *pi_top_task;
+	struct rt_mutex_waiter *pi_blocked_on;
+	void *journal_info;
+	struct bio_list *bio_list;
+	struct blk_plug *plug;
+	struct reclaim_state *reclaim_state;
+	struct io_context *io_context;
+	struct capture_control *capture_control;
+	unsigned long ptrace_message;
+	kernel_siginfo_t *last_siginfo;
+	struct task_io_accounting ioac;
+	unsigned int psi_flags;
+	u64 acct_rss_mem1;
+	u64 acct_vm_mem1;
+	u64 acct_timexpd;
+	nodemask_t mems_allowed;
+	seqcount_spinlock_t mems_allowed_seq;
+	int cpuset_mem_spread_rotor;
+	int cpuset_slab_spread_rotor;
+	struct css_set __attribute__((btf_type_tag("rcu"))) *cgroups;
+	struct list_head cg_list;
+	struct robust_list_head __attribute__((btf_type_tag("user"))) *robust_list;
+	struct compat_robust_list_head __attribute__((btf_type_tag("user"))) *compat_robust_list;
+	struct list_head pi_state_list;
+	struct futex_pi_state *pi_state_cache;
+	struct mutex futex_exit_mutex;
+	unsigned int futex_state;
+	struct perf_event_context *perf_event_ctxp;
+	struct mutex perf_event_mutex;
+	struct list_head perf_event_list;
+	struct tlbflush_unmap_batch tlb_ubc;
+	struct pipe_inode_info *splice_pipe;
+	struct page_frag task_frag;
+	struct task_delay_info *delays;
+	int nr_dirtied;
+	int nr_dirtied_pause;
+	unsigned long dirty_paused_when;
+	u64 timer_slack_ns;
+	u64 default_timer_slack_ns;
+	struct kunit *kunit_test;
+	unsigned long trace_recursion;
+	struct mem_cgroup *memcg_in_oom;
+	gfp_t memcg_oom_gfp_mask;
+	int memcg_oom_order;
+	unsigned int memcg_nr_pages_over_high;
+	struct mem_cgroup *active_memcg;
+	struct gendisk *throttle_disk;
+	struct uprobe_task *utask;
+	struct kmap_ctrl kmap_ctrl;
+	struct callback_head rcu;
+	refcount_t rcu_users;
+	int pagefault_disabled;
+	struct task_struct *oom_reaper_list;
+	struct timer_list oom_reaper_timer;
+	struct vm_struct *stack_vm_area;
+	refcount_t stack_refcount;
+	void *security;
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) *bpf_storage;
+	struct bpf_run_ctx *bpf_ctx;
+	u64 android_vendor_data1[64];
+	u64 android_oem_data1[6];
+	struct llist_head kretprobe_instances;
+	struct llist_head rethooks;
+	struct callback_head l1d_flush_kill;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+	long: 64;
+	struct thread_struct thread;
+};
+
+struct seqcount_raw_spinlock {
+	seqcount_t seqcount;
+};
+
+typedef struct seqcount_raw_spinlock seqcount_raw_spinlock_t;
+
+struct hrtimer_cpu_base;
+
+struct hrtimer_clock_base {
+	struct hrtimer_cpu_base *cpu_base;
+	unsigned int index;
+	clockid_t clockid;
+	seqcount_raw_spinlock_t seq;
+	struct hrtimer *running;
+	struct timerqueue_head active;
+	ktime_t (*get_time)();
+	ktime_t offset;
+};
+
+struct hrtimer_cpu_base {
+	raw_spinlock_t lock;
+	unsigned int cpu;
+	unsigned int active_bases;
+	unsigned int clock_was_set_seq;
+	unsigned int hres_active: 1;
+	unsigned int in_hrtirq: 1;
+	unsigned int hang_detected: 1;
+	unsigned int softirq_activated: 1;
+	unsigned int online: 1;
+	unsigned int nr_events;
+	unsigned short nr_retries;
+	unsigned short nr_hangs;
+	unsigned int max_hang_time;
+	ktime_t expires_next;
+	struct hrtimer *next_timer;
+	ktime_t softirq_expires_next;
+	struct hrtimer *softirq_next_timer;
+	struct hrtimer_clock_base clock_base[8];
+};
+
+struct rq;
+
+struct rq_flags;
+
+struct affinity_context;
+
+struct sched_class {
+	int uclamp_enabled;
+	void (*enqueue_task)(struct rq *, struct task_struct *, int);
+	void (*dequeue_task)(struct rq *, struct task_struct *, int);
+	void (*yield_task)(struct rq *);
+	bool (*yield_to_task)(struct rq *, struct task_struct *);
+	void (*check_preempt_curr)(struct rq *, struct task_struct *, int);
+	struct task_struct * (*pick_next_task)(struct rq *);
+	void (*put_prev_task)(struct rq *, struct task_struct *);
+	void (*set_next_task)(struct rq *, struct task_struct *, bool);
+	int (*balance)(struct rq *, struct task_struct *, struct rq_flags *);
+	int (*select_task_rq)(struct task_struct *, int, int);
+	struct task_struct * (*pick_task)(struct rq *);
+	void (*migrate_task_rq)(struct task_struct *, int);
+	void (*task_woken)(struct rq *, struct task_struct *);
+	void (*set_cpus_allowed)(struct task_struct *, struct affinity_context *);
+	void (*rq_online)(struct rq *);
+	void (*rq_offline)(struct rq *);
+	struct rq * (*find_lock_rq)(struct task_struct *, struct rq *);
+	void (*task_tick)(struct rq *, struct task_struct *, int);
+	void (*task_fork)(struct task_struct *);
+	void (*task_dead)(struct task_struct *);
+	void (*switched_from)(struct rq *, struct task_struct *);
+	void (*switched_to)(struct rq *, struct task_struct *);
+	void (*prio_changed)(struct rq *, struct task_struct *, int);
+	unsigned int (*get_rr_interval)(struct rq *, struct task_struct *);
+	void (*update_curr)(struct rq *);
+	void (*task_change_group)(struct task_struct *);
+};
+
+typedef struct {} lockdep_map_p;
+
+struct maple_tree {
+	union {
+		spinlock_t ma_lock;
+		lockdep_map_p ma_external_lock;
+	};
+	unsigned int ma_flags;
+	void __attribute__((btf_type_tag("rcu"))) *ma_root;
+};
+
+typedef unsigned long pgdval_t;
+
+typedef struct {
+	pgdval_t pgd;
+} pgd_t;
+
+struct percpu_counter {
+	raw_spinlock_t lock;
+	s64 count;
+	struct list_head list;
+	s32 __attribute__((btf_type_tag("percpu"))) *counters;
+};
+
+typedef short __s16;
+
+typedef __s16 s16;
+
+struct ldt_struct;
+
+struct vdso_image;
+
+typedef struct {
+	u64 ctx_id;
+	atomic64_t tlb_gen;
+	struct rw_semaphore ldt_usr_sem;
+	struct ldt_struct *ldt;
+	unsigned long flags;
+	struct mutex lock;
+	void __attribute__((btf_type_tag("user"))) *vdso;
+	const struct vdso_image *vdso_image;
+	atomic_t perf_rdpmc_allowed;
+	u16 pkey_allocation_map;
+	s16 execute_only_pkey;
+} mm_context_t;
+
+struct xol_area;
+
+struct uprobes_state {
+	struct xol_area *xol_area;
+};
+
+struct linux_binfmt;
+
+struct kioctx_table;
+
+struct mmu_notifier_subscriptions;
+
+struct mm_struct {
+	struct {
+		struct {
+			atomic_t mm_count;
+			long: 64;
+			long: 64;
+			long: 64;
+			long: 64;
+			long: 64;
+			long: 64;
+			long: 64;
+		};
+		struct maple_tree mm_mt;
+		unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+		unsigned long mmap_base;
+		unsigned long mmap_legacy_base;
+		unsigned long mmap_compat_base;
+		unsigned long mmap_compat_legacy_base;
+		unsigned long task_size;
+		pgd_t *pgd;
+		atomic_t membarrier_state;
+		atomic_t mm_users;
+		atomic_long_t pgtables_bytes;
+		int map_count;
+		spinlock_t page_table_lock;
+		struct rw_semaphore mmap_lock;
+		struct list_head mmlist;
+		int mm_lock_seq;
+		unsigned long hiwater_rss;
+		unsigned long hiwater_vm;
+		unsigned long total_vm;
+		unsigned long locked_vm;
+		atomic64_t pinned_vm;
+		unsigned long data_vm;
+		unsigned long exec_vm;
+		unsigned long stack_vm;
+		unsigned long def_flags;
+		seqcount_t write_protect_seq;
+		spinlock_t arg_lock;
+		unsigned long start_code;
+		unsigned long end_code;
+		unsigned long start_data;
+		unsigned long end_data;
+		unsigned long start_brk;
+		unsigned long brk;
+		unsigned long start_stack;
+		unsigned long arg_start;
+		unsigned long arg_end;
+		unsigned long env_start;
+		unsigned long env_end;
+		unsigned long saved_auxv[52];
+		struct percpu_counter rss_stat[4];
+		struct linux_binfmt *binfmt;
+		mm_context_t context;
+		unsigned long flags;
+		spinlock_t ioctx_lock;
+		struct kioctx_table __attribute__((btf_type_tag("rcu"))) *ioctx_table;
+		struct task_struct __attribute__((btf_type_tag("rcu"))) *owner;
+		struct user_namespace *user_ns;
+		struct file __attribute__((btf_type_tag("rcu"))) *exe_file;
+		struct mmu_notifier_subscriptions *notifier_subscriptions;
+		atomic_t tlb_flush_pending;
+		atomic_t tlb_flush_batched;
+		struct uprobes_state uprobes_state;
+		struct work_struct async_put_work;
+		struct {
+			struct list_head list;
+			unsigned long bitmap;
+			struct mem_cgroup *memcg;
+		} lru_gen;
+		u64 android_kabi_reserved1;
+		u64 android_backport_reserved1;
+		long: 64;
+	};
+	unsigned long cpu_bitmap[0];
+};
+
+struct linux_binprm;
+
+struct coredump_params;
+
+struct linux_binfmt {
+	struct list_head lh;
+	struct module *module;
+	int (*load_binary)(struct linux_binprm *);
+	int (*load_shlib)(struct file *);
+	int (*core_dump)(struct coredump_params *);
+	unsigned long min_coredump;
+};
+
+struct rlimit {
+	__kernel_ulong_t rlim_cur;
+	__kernel_ulong_t rlim_max;
+};
+
+struct linux_binprm {
+	struct vm_area_struct *vma;
+	unsigned long vma_pages;
+	struct mm_struct *mm;
+	unsigned long p;
+	unsigned long argmin;
+	unsigned int have_execfd: 1;
+	unsigned int execfd_creds: 1;
+	unsigned int secureexec: 1;
+	unsigned int point_of_no_return: 1;
+	struct file *executable;
+	struct file *interpreter;
+	struct file *file;
+	struct cred *cred;
+	int unsafe;
+	unsigned int per_clear;
+	int argc;
+	int envc;
+	const char *filename;
+	const char *interp;
+	const char *fdpath;
+	unsigned int interp_flags;
+	int execfd;
+	unsigned long loader;
+	unsigned long exec;
+	struct rlimit rlim_stack;
+	char buf[256];
+};
+
+typedef unsigned long vm_flags_t;
+
+typedef unsigned long pgprotval_t;
+
+struct pgprot {
+	pgprotval_t pgprot;
+};
+
+typedef struct pgprot pgprot_t;
+
+struct userfaultfd_ctx;
+
+struct vm_userfaultfd_ctx {
+	struct userfaultfd_ctx *ctx;
+};
+
+struct vma_lock;
+
+struct anon_vma;
+
+struct vm_operations_struct;
+
+struct anon_vma_name;
+
+struct vm_area_struct {
+	union {
+		struct {
+			unsigned long vm_start;
+			unsigned long vm_end;
+		};
+		struct callback_head vm_rcu;
+	};
+	struct mm_struct *vm_mm;
+	pgprot_t vm_page_prot;
+	union {
+		const vm_flags_t vm_flags;
+		vm_flags_t __vm_flags;
+	};
+	bool detached;
+	int vm_lock_seq;
+	struct vma_lock *vm_lock;
+	struct {
+		struct rb_node rb;
+		unsigned long rb_subtree_last;
+	} shared;
+	struct list_head anon_vma_chain;
+	struct anon_vma *anon_vma;
+	const struct vm_operations_struct *vm_ops;
+	unsigned long vm_pgoff;
+	struct file *vm_file;
+	void *vm_private_data;
+	struct anon_vma_name *anon_name;
+	atomic_long_t swap_readahead_info;
+	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct vma_lock {
+	struct rw_semaphore lock;
+};
+
+struct anon_vma {
+	struct anon_vma *root;
+	struct rw_semaphore rwsem;
+	atomic_t refcount;
+	unsigned long num_children;
+	unsigned long num_active_vmas;
+	struct anon_vma *parent;
+	struct rb_root_cached rb_root;
+};
+
+typedef unsigned int vm_fault_t;
+
+struct vm_fault;
+
+struct vm_operations_struct {
+	void (*open)(struct vm_area_struct *);
+	void (*close)(struct vm_area_struct *);
+	int (*may_split)(struct vm_area_struct *, unsigned long);
+	int (*mremap)(struct vm_area_struct *);
+	int (*mprotect)(struct vm_area_struct *, unsigned long, unsigned long, unsigned long);
+	vm_fault_t (*fault)(struct vm_fault *);
+	vm_fault_t (*huge_fault)(struct vm_fault *, unsigned int);
+	vm_fault_t (*map_pages)(struct vm_fault *, unsigned long, unsigned long);
+	unsigned long (*pagesize)(struct vm_area_struct *);
+	vm_fault_t (*page_mkwrite)(struct vm_fault *);
+	vm_fault_t (*pfn_mkwrite)(struct vm_fault *);
+	int (*access)(struct vm_area_struct *, unsigned long, void *, int, int);
+	const char * (*name)(struct vm_area_struct *);
+	struct page * (*find_special_page)(struct vm_area_struct *, unsigned long);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef unsigned long pteval_t;
+
+typedef struct {
+	pteval_t pte;
+} pte_t;
+
+typedef unsigned long pmdval_t;
+
+typedef struct {
+	pmdval_t pmd;
+} pmd_t;
+
+enum fault_flag {
+	FAULT_FLAG_WRITE = 1,
+	FAULT_FLAG_MKWRITE = 2,
+	FAULT_FLAG_ALLOW_RETRY = 4,
+	FAULT_FLAG_RETRY_NOWAIT = 8,
+	FAULT_FLAG_KILLABLE = 16,
+	FAULT_FLAG_TRIED = 32,
+	FAULT_FLAG_USER = 64,
+	FAULT_FLAG_REMOTE = 128,
+	FAULT_FLAG_INSTRUCTION = 256,
+	FAULT_FLAG_INTERRUPTIBLE = 512,
+	FAULT_FLAG_UNSHARE = 1024,
+	FAULT_FLAG_ORIG_PTE_VALID = 2048,
+	FAULT_FLAG_VMA_LOCK = 4096,
+};
+
+typedef unsigned long pudval_t;
+
+typedef struct {
+	pudval_t pud;
+} pud_t;
+
+typedef struct page *pgtable_t;
+
+struct vm_fault {
+	struct {
+		struct vm_area_struct *vma;
+		gfp_t gfp_mask;
+		unsigned long pgoff;
+		unsigned long address;
+		unsigned long real_address;
+	};
+	enum fault_flag flags;
+	pmd_t *pmd;
+	pud_t *pud;
+	union {
+		pte_t orig_pte;
+		pmd_t orig_pmd;
+	};
+	struct page *cow_page;
+	struct page *page;
+	pte_t *pte;
+	spinlock_t *ptl;
+	pgtable_t prealloc_pte;
+};
+
+struct page_pool;
+
+struct dev_pagemap;
+
+struct page {
+	unsigned long flags;
+	union {
+		struct {
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+				struct list_head buddy_list;
+				struct list_head pcp_list;
+			};
+			struct address_space *mapping;
+			union {
+				unsigned long index;
+				unsigned long share;
+			};
+			unsigned long private;
+		};
+		struct {
+			unsigned long pp_magic;
+			struct page_pool *pp;
+			unsigned long _pp_mapping_pad;
+			unsigned long dma_addr;
+			union {
+				unsigned long dma_addr_upper;
+				atomic_long_t pp_frag_count;
+			};
+		};
+		struct {
+			unsigned long compound_head;
+		};
+		struct {
+			struct dev_pagemap *pgmap;
+			void *zone_device_data;
+		};
+		struct callback_head callback_head;
+	};
+	union {
+		atomic_t _mapcount;
+		unsigned int page_type;
+	};
+	atomic_t _refcount;
+	unsigned long memcg_data;
+};
+
+struct range {
+	u64 start;
+	u64 end;
+};
+
+struct vmem_altmap {
+	unsigned long base_pfn;
+	const unsigned long end_pfn;
+	const unsigned long reserve;
+	unsigned long free;
+	unsigned long align;
+	unsigned long alloc;
+};
+
+struct percpu_ref_data;
+
+struct percpu_ref {
+	unsigned long percpu_count_ptr;
+	struct percpu_ref_data *data;
+};
+
+struct swait_queue_head {
+	raw_spinlock_t lock;
+	struct list_head task_list;
+};
+
+struct completion {
+	unsigned int done;
+	struct swait_queue_head wait;
+};
+
+enum memory_type {
+	MEMORY_DEVICE_PRIVATE = 1,
+	MEMORY_DEVICE_COHERENT = 2,
+	MEMORY_DEVICE_FS_DAX = 3,
+	MEMORY_DEVICE_GENERIC = 4,
+	MEMORY_DEVICE_PCI_P2PDMA = 5,
+};
+
+struct dev_pagemap_ops;
+
+struct dev_pagemap {
+	struct vmem_altmap altmap;
+	struct percpu_ref ref;
+	struct completion done;
+	enum memory_type type;
+	unsigned int flags;
+	unsigned long vmemmap_shift;
+	const struct dev_pagemap_ops *ops;
+	void *owner;
+	int nr_range;
+	union {
+		struct range range;
+		struct {
+			struct {} __empty_ranges;
+			struct range ranges[0];
+		};
+	};
+};
+
+typedef void percpu_ref_func_t(struct percpu_ref *);
+
+struct percpu_ref_data {
+	atomic_long_t count;
+	percpu_ref_func_t *release;
+	percpu_ref_func_t *confirm_switch;
+	bool force_atomic: 1;
+	bool allow_reinit: 1;
+	struct callback_head rcu;
+	struct percpu_ref *ref;
+};
+
+struct dev_pagemap_ops {
+	void (*page_free)(struct page *);
+	vm_fault_t (*migrate_to_ram)(struct vm_fault *);
+	int (*memory_failure)(struct dev_pagemap *, unsigned long, unsigned long, int);
+};
+
+struct anon_vma_name {
+	struct kref kref;
+	char name[0];
+};
+
+struct userfaultfd_ctx {
+	wait_queue_head_t fault_pending_wqh;
+	wait_queue_head_t fault_wqh;
+	wait_queue_head_t fd_wqh;
+	wait_queue_head_t event_wqh;
+	seqcount_spinlock_t refile_seq;
+	refcount_t refcount;
+	unsigned int flags;
+	unsigned int features;
+	bool released;
+	struct rw_semaphore map_changing_lock;
+	atomic_t mmap_changing;
+	struct mm_struct *mm;
+};
+
+typedef struct {
+	u64 val;
+} kernel_cap_t;
+
+struct user_struct;
+
+struct group_info;
+
+struct cred {
+	atomic_long_t usage;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t suid;
+	kgid_t sgid;
+	kuid_t euid;
+	kgid_t egid;
+	kuid_t fsuid;
+	kgid_t fsgid;
+	unsigned int securebits;
+	kernel_cap_t cap_inheritable;
+	kernel_cap_t cap_permitted;
+	kernel_cap_t cap_effective;
+	kernel_cap_t cap_bset;
+	kernel_cap_t cap_ambient;
+	unsigned char jit_keyring;
+	struct key *session_keyring;
+	struct key *process_keyring;
+	struct key *thread_keyring;
+	struct key *request_key_auth;
+	void *security;
+	struct user_struct *user;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct group_info *group_info;
+	union {
+		int non_rcu;
+		struct callback_head rcu;
+	};
+};
+
+struct key_type;
+
+struct key_tag;
+
+struct keyring_index_key {
+	unsigned long hash;
+	union {
+		struct {
+			u16 desc_len;
+			char desc[6];
+		};
+		unsigned long x;
+	};
+	struct key_type *type;
+	struct key_tag *domain_tag;
+	const char *description;
+};
+
+struct assoc_array_ptr;
+
+struct assoc_array {
+	struct assoc_array_ptr *root;
+	unsigned long nr_leaves_on_tree;
+};
+
+union key_payload {
+	void __attribute__((btf_type_tag("rcu"))) *rcu_data0;
+	void *data[4];
+};
+
+typedef s32 int32_t;
+
+typedef int32_t key_serial_t;
+
+typedef u32 uint32_t;
+
+typedef uint32_t key_perm_t;
+
+struct key_user;
+
+struct key_restriction;
+
+struct key {
+	refcount_t usage;
+	key_serial_t serial;
+	union {
+		struct list_head graveyard_link;
+		struct rb_node serial_node;
+	};
+	struct rw_semaphore sem;
+	struct key_user *user;
+	void *security;
+	union {
+		time64_t expiry;
+		time64_t revoked_at;
+	};
+	time64_t last_used_at;
+	kuid_t uid;
+	kgid_t gid;
+	key_perm_t perm;
+	unsigned short quotalen;
+	unsigned short datalen;
+	short state;
+	unsigned long flags;
+	union {
+		struct keyring_index_key index_key;
+		struct {
+			unsigned long hash;
+			unsigned long len_desc;
+			struct key_type *type;
+			struct key_tag *domain_tag;
+			char *description;
+		};
+	};
+	union {
+		union key_payload payload;
+		struct {
+			struct list_head name_link;
+			struct assoc_array keys;
+		};
+	};
+	struct key_restriction *restrict_link;
+};
+
+struct key_tag {
+	struct callback_head rcu;
+	refcount_t usage;
+	bool removed;
+};
+
+typedef int (*key_restrict_link_func_t)(struct key *, const struct key_type *, const union key_payload *, struct key *);
+
+struct key_restriction {
+	key_restrict_link_func_t check;
+	struct key *key;
+	struct key_type *keytype;
+};
+
+typedef int (*request_key_actor_t)(struct key *, void *);
+
+struct key_preparsed_payload;
+
+struct key_match_data;
+
+struct seq_file;
+
+struct kernel_pkey_params;
+
+struct kernel_pkey_query;
+
+struct key_type {
+	const char *name;
+	size_t def_datalen;
+	unsigned int flags;
+	int (*vet_description)(const char *);
+	int (*preparse)(struct key_preparsed_payload *);
+	void (*free_preparse)(struct key_preparsed_payload *);
+	int (*instantiate)(struct key *, struct key_preparsed_payload *);
+	int (*update)(struct key *, struct key_preparsed_payload *);
+	int (*match_preparse)(struct key_match_data *);
+	void (*match_free)(struct key_match_data *);
+	void (*revoke)(struct key *);
+	void (*destroy)(struct key *);
+	void (*describe)(const struct key *, struct seq_file *);
+	long (*read)(const struct key *, char *, size_t);
+	request_key_actor_t request_key;
+	struct key_restriction * (*lookup_restriction)(const char *);
+	int (*asym_query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
+	int (*asym_eds_op)(struct kernel_pkey_params *, const void *, void *);
+	int (*asym_verify_signature)(struct kernel_pkey_params *, const void *, const void *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	struct list_head link;
+	struct lock_class_key lock_class;
+};
+
+struct ratelimit_state {
+	raw_spinlock_t lock;
+	int interval;
+	int burst;
+	int printed;
+	int missed;
+	unsigned long begin;
+	unsigned long flags;
+};
+
+struct user_struct {
+	refcount_t __count;
+	struct percpu_counter epoll_watches;
+	unsigned long unix_inflight;
+	atomic_long_t pipe_bufs;
+	struct hlist_node uidhash_node;
+	kuid_t uid;
+	atomic_long_t locked_vm;
+	struct ratelimit_state ratelimit;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_oem_data1[2];
+};
+
+struct uid_gid_extent {
+	u32 first;
+	u32 lower_first;
+	u32 count;
+};
+
+struct uid_gid_map {
+	u32 nr_extents;
+	union {
+		struct uid_gid_extent extent[5];
+		struct {
+			struct uid_gid_extent *forward;
+			struct uid_gid_extent *reverse;
+		};
+	};
+};
+
+struct ctl_table;
+
+struct ctl_table_root;
+
+struct ctl_table_set;
+
+struct ctl_dir;
+
+struct ctl_node;
+
+struct ctl_table_header {
+	union {
+		struct {
+			struct ctl_table *ctl_table;
+			int ctl_table_size;
+			int used;
+			int count;
+			int nreg;
+		};
+		struct callback_head rcu;
+	};
+	struct completion *unregistering;
+	struct ctl_table *ctl_table_arg;
+	struct ctl_table_root *root;
+	struct ctl_table_set *set;
+	struct ctl_dir *parent;
+	struct ctl_node *node;
+	struct hlist_head inodes;
+};
+
+struct ctl_dir {
+	struct ctl_table_header header;
+	struct rb_root root;
+};
+
+struct ctl_table_set {
+	int (*is_seen)(struct ctl_table_set *);
+	struct ctl_dir dir;
+};
+
+struct user_namespace {
+	struct uid_gid_map uid_map;
+	struct uid_gid_map gid_map;
+	struct uid_gid_map projid_map;
+	struct user_namespace *parent;
+	int level;
+	kuid_t owner;
+	kgid_t group;
+	struct ns_common ns;
+	unsigned long flags;
+	bool parent_could_setfcap;
+	struct list_head keyring_name_list;
+	struct key *user_keyring_register;
+	struct rw_semaphore keyring_sem;
+	struct work_struct work;
+	struct ctl_table_set set;
+	struct ctl_table_header *sysctls;
+	struct ucounts *ucounts;
+	long ucount_max[10];
+	long rlimit_max[4];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct nsset;
+
+struct proc_ns_operations {
+	const char *name;
+	const char *real_ns_name;
+	int type;
+	struct ns_common * (*get)(struct task_struct *);
+	void (*put)(struct ns_common *);
+	int (*install)(struct nsset *, struct ns_common *);
+	struct user_namespace * (*owner)(struct ns_common *);
+	struct ns_common * (*get_parent)(struct ns_common *);
+};
+
+struct nsset {
+	unsigned int flags;
+	struct nsproxy *nsproxy;
+	struct fs_struct *fs;
+	const struct cred *cred;
+};
+
+struct uts_namespace;
+
+struct ipc_namespace;
+
+struct mnt_namespace;
+
+struct time_namespace;
+
+struct cgroup_namespace;
+
+struct nsproxy {
+	refcount_t count;
+	struct uts_namespace *uts_ns;
+	struct ipc_namespace *ipc_ns;
+	struct mnt_namespace *mnt_ns;
+	struct pid_namespace *pid_ns_for_children;
+	struct net *net_ns;
+	struct time_namespace *time_ns;
+	struct time_namespace *time_ns_for_children;
+	struct cgroup_namespace *cgroup_ns;
+};
+
+struct new_utsname {
+	char sysname[65];
+	char nodename[65];
+	char release[65];
+	char version[65];
+	char machine[65];
+	char domainname[65];
+};
+
+struct uts_namespace {
+	struct new_utsname name;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+};
+
+struct ucounts {
+	struct hlist_node node;
+	struct user_namespace *ns;
+	kuid_t uid;
+	atomic_t count;
+	atomic_long_t ucount[10];
+	atomic_long_t rlimit[4];
+};
+
+struct ref_tracker_dir {};
+
+struct notifier_block;
+
+struct raw_notifier_head {
+	struct notifier_block __attribute__((btf_type_tag("rcu"))) *head;
+};
+
+struct prot_inuse;
+
+struct netns_core {
+	struct ctl_table_header *sysctl_hdr;
+	int sysctl_somaxconn;
+	u8 sysctl_txrehash;
+	struct prot_inuse __attribute__((btf_type_tag("percpu"))) *prot_inuse;
+	struct cpumask *rps_default_mask;
+};
+
+struct ipstats_mib;
+
+struct tcp_mib;
+
+struct linux_mib;
+
+struct udp_mib;
+
+struct linux_xfrm_mib;
+
+struct icmp_mib;
+
+struct icmpmsg_mib;
+
+struct icmpv6_mib;
+
+struct icmpv6msg_mib;
+
+struct proc_dir_entry;
+
+struct netns_mib {
+	struct ipstats_mib __attribute__((btf_type_tag("percpu"))) *ip_statistics;
+	struct ipstats_mib __attribute__((btf_type_tag("percpu"))) *ipv6_statistics;
+	struct tcp_mib __attribute__((btf_type_tag("percpu"))) *tcp_statistics;
+	struct linux_mib __attribute__((btf_type_tag("percpu"))) *net_statistics;
+	struct udp_mib __attribute__((btf_type_tag("percpu"))) *udp_statistics;
+	struct udp_mib __attribute__((btf_type_tag("percpu"))) *udp_stats_in6;
+	struct linux_xfrm_mib __attribute__((btf_type_tag("percpu"))) *xfrm_statistics;
+	struct udp_mib __attribute__((btf_type_tag("percpu"))) *udplite_statistics;
+	struct udp_mib __attribute__((btf_type_tag("percpu"))) *udplite_stats_in6;
+	struct icmp_mib __attribute__((btf_type_tag("percpu"))) *icmp_statistics;
+	struct icmpmsg_mib *icmpmsg_statistics;
+	struct icmpv6_mib __attribute__((btf_type_tag("percpu"))) *icmpv6_statistics;
+	struct icmpv6msg_mib *icmpv6msg_statistics;
+	struct proc_dir_entry *proc_net_devsnmp6;
+};
+
+struct netns_packet {
+	struct mutex sklist_lock;
+	struct hlist_head sklist;
+};
+
+struct unix_table {
+	spinlock_t *locks;
+	struct hlist_head *buckets;
+};
+
+struct netns_unix {
+	struct unix_table table;
+	int sysctl_max_dgram_qlen;
+	struct ctl_table_header *ctl;
+};
+
+struct blocking_notifier_head {
+	struct rw_semaphore rwsem;
+	struct notifier_block __attribute__((btf_type_tag("rcu"))) *head;
+};
+
+struct netns_nexthop {
+	struct rb_root rb_root;
+	struct hlist_head *devhash;
+	unsigned int seq;
+	u32 last_id_allocated;
+	struct blocking_notifier_head notifier_chain;
+};
+
+struct inet_hashinfo;
+
+struct inet_timewait_death_row {
+	refcount_t tw_refcount;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct inet_hashinfo *hashinfo;
+	int sysctl_max_tw_buckets;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef struct {
+	seqcount_spinlock_t seqcount;
+	spinlock_t lock;
+} seqlock_t;
+
+struct local_ports {
+	seqlock_t lock;
+	int range[2];
+	bool warned;
+};
+
+struct ping_group_range {
+	seqlock_t lock;
+	kgid_t range[2];
+};
+
+typedef struct {
+	u64 key[2];
+} siphash_key_t;
+
+struct udp_table;
+
+struct ipv4_devconf;
+
+struct ip_ra_chain;
+
+struct fib_rules_ops;
+
+struct fib_table;
+
+struct sock;
+
+struct inet_peer_base;
+
+struct fqdir;
+
+struct tcp_congestion_ops;
+
+struct tcp_fastopen_context;
+
+struct fib_notifier_ops;
+
+struct netns_ipv4 {
+	struct inet_timewait_death_row tcp_death_row;
+	struct udp_table *udp_table;
+	struct ctl_table_header *forw_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *ipv4_hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *xfrm4_hdr;
+	struct ipv4_devconf *devconf_all;
+	struct ipv4_devconf *devconf_dflt;
+	struct ip_ra_chain __attribute__((btf_type_tag("rcu"))) *ra_chain;
+	struct mutex ra_mutex;
+	struct fib_rules_ops *rules_ops;
+	struct fib_table __attribute__((btf_type_tag("rcu"))) *fib_main;
+	struct fib_table __attribute__((btf_type_tag("rcu"))) *fib_default;
+	unsigned int fib_rules_require_fldissect;
+	bool fib_has_custom_rules;
+	bool fib_has_custom_local_routes;
+	bool fib_offload_disabled;
+	u8 sysctl_tcp_shrink_window;
+	struct hlist_head *fib_table_hash;
+	struct sock *fibnl;
+	struct sock *mc_autojoin_sk;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	u8 sysctl_icmp_echo_ignore_all;
+	u8 sysctl_icmp_echo_enable_probe;
+	u8 sysctl_icmp_echo_ignore_broadcasts;
+	u8 sysctl_icmp_ignore_bogus_error_responses;
+	u8 sysctl_icmp_errors_use_inbound_ifaddr;
+	int sysctl_icmp_ratelimit;
+	int sysctl_icmp_ratemask;
+	u32 ip_rt_min_pmtu;
+	int ip_rt_mtu_expires;
+	int ip_rt_min_advmss;
+	struct local_ports ip_local_ports;
+	u8 sysctl_tcp_ecn;
+	u8 sysctl_tcp_ecn_fallback;
+	u8 sysctl_ip_default_ttl;
+	u8 sysctl_ip_no_pmtu_disc;
+	u8 sysctl_ip_fwd_use_pmtu;
+	u8 sysctl_ip_fwd_update_priority;
+	u8 sysctl_ip_nonlocal_bind;
+	u8 sysctl_ip_autobind_reuse;
+	u8 sysctl_ip_dynaddr;
+	u8 sysctl_ip_early_demux;
+	u8 sysctl_tcp_early_demux;
+	u8 sysctl_udp_early_demux;
+	u8 sysctl_nexthop_compat_mode;
+	u8 sysctl_fwmark_reflect;
+	u8 sysctl_tcp_fwmark_accept;
+	u8 sysctl_tcp_mtu_probing;
+	int sysctl_tcp_mtu_probe_floor;
+	int sysctl_tcp_base_mss;
+	int sysctl_tcp_min_snd_mss;
+	int sysctl_tcp_probe_threshold;
+	u32 sysctl_tcp_probe_interval;
+	int sysctl_tcp_keepalive_time;
+	int sysctl_tcp_keepalive_intvl;
+	u8 sysctl_tcp_keepalive_probes;
+	u8 sysctl_tcp_syn_retries;
+	u8 sysctl_tcp_synack_retries;
+	u8 sysctl_tcp_syncookies;
+	u8 sysctl_tcp_migrate_req;
+	u8 sysctl_tcp_comp_sack_nr;
+	int sysctl_tcp_reordering;
+	u8 sysctl_tcp_retries1;
+	u8 sysctl_tcp_retries2;
+	u8 sysctl_tcp_orphan_retries;
+	u8 sysctl_tcp_tw_reuse;
+	int sysctl_tcp_fin_timeout;
+	unsigned int sysctl_tcp_notsent_lowat;
+	u8 sysctl_tcp_sack;
+	u8 sysctl_tcp_window_scaling;
+	u8 sysctl_tcp_timestamps;
+	u8 sysctl_tcp_early_retrans;
+	u8 sysctl_tcp_recovery;
+	u8 sysctl_tcp_thin_linear_timeouts;
+	u8 sysctl_tcp_slow_start_after_idle;
+	u8 sysctl_tcp_retrans_collapse;
+	u8 sysctl_tcp_stdurg;
+	u8 sysctl_tcp_rfc1337;
+	u8 sysctl_tcp_abort_on_overflow;
+	u8 sysctl_tcp_fack;
+	int sysctl_tcp_max_reordering;
+	int sysctl_tcp_adv_win_scale;
+	u8 sysctl_tcp_dsack;
+	u8 sysctl_tcp_app_win;
+	u8 sysctl_tcp_frto;
+	u8 sysctl_tcp_nometrics_save;
+	u8 sysctl_tcp_no_ssthresh_metrics_save;
+	u8 sysctl_tcp_moderate_rcvbuf;
+	u8 sysctl_tcp_tso_win_divisor;
+	u8 sysctl_tcp_workaround_signed_windows;
+	int sysctl_tcp_limit_output_bytes;
+	int sysctl_tcp_challenge_ack_limit;
+	int sysctl_tcp_min_rtt_wlen;
+	u8 sysctl_tcp_min_tso_segs;
+	u8 sysctl_tcp_tso_rtt_log;
+	u8 sysctl_tcp_autocorking;
+	u8 sysctl_tcp_reflect_tos;
+	int sysctl_tcp_invalid_ratelimit;
+	int sysctl_tcp_pacing_ss_ratio;
+	int sysctl_tcp_pacing_ca_ratio;
+	int sysctl_tcp_wmem[3];
+	int sysctl_tcp_rmem[3];
+	unsigned int sysctl_tcp_child_ehash_entries;
+	unsigned long sysctl_tcp_comp_sack_delay_ns;
+	unsigned long sysctl_tcp_comp_sack_slack_ns;
+	int sysctl_max_syn_backlog;
+	int sysctl_tcp_fastopen;
+	const struct tcp_congestion_ops __attribute__((btf_type_tag("rcu"))) *tcp_congestion_control;
+	struct tcp_fastopen_context __attribute__((btf_type_tag("rcu"))) *tcp_fastopen_ctx;
+	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
+	atomic_t tfo_active_disable_times;
+	unsigned long tfo_active_disable_stamp;
+	u32 tcp_challenge_timestamp;
+	u32 tcp_challenge_count;
+	u8 sysctl_tcp_plb_enabled;
+	u8 sysctl_tcp_plb_idle_rehash_rounds;
+	u8 sysctl_tcp_plb_rehash_rounds;
+	u8 sysctl_tcp_plb_suspend_rto_sec;
+	int sysctl_tcp_plb_cong_thresh;
+	int sysctl_udp_wmem_min;
+	int sysctl_udp_rmem_min;
+	u8 sysctl_fib_notify_on_flag_change;
+	u8 sysctl_tcp_syn_linear_timeouts;
+	u8 sysctl_igmp_llm_reports;
+	int sysctl_igmp_max_memberships;
+	int sysctl_igmp_max_msf;
+	int sysctl_igmp_qrv;
+	struct ping_group_range ping_group_range;
+	atomic_t dev_addr_genid;
+	unsigned int sysctl_udp_child_hash_entries;
+	unsigned long *sysctl_local_reserved_ports;
+	int sysctl_ip_prot_sock;
+	struct fib_notifier_ops *notifier_ops;
+	unsigned int fib_seq;
+	struct fib_notifier_ops *ipmr_notifier_ops;
+	unsigned int ipmr_seq;
+	atomic_t rt_genid;
+	siphash_key_t ip_id_key;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct dst_entry;
+
+struct net_device;
+
+struct sk_buff;
+
+struct neighbour;
+
+struct dst_ops {
+	unsigned short family;
+	unsigned int gc_thresh;
+	void (*gc)(struct dst_ops *);
+	struct dst_entry * (*check)(struct dst_entry *, __u32);
+	unsigned int (*default_advmss)(const struct dst_entry *);
+	unsigned int (*mtu)(const struct dst_entry *);
+	u32 * (*cow_metrics)(struct dst_entry *, unsigned long);
+	void (*destroy)(struct dst_entry *);
+	void (*ifdown)(struct dst_entry *, struct net_device *);
+	struct dst_entry * (*negative_advice)(struct dst_entry *);
+	void (*link_failure)(struct sk_buff *);
+	void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);
+	void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);
+	int (*local_out)(struct net *, struct sock *, struct sk_buff *);
+	struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);
+	void (*confirm_neigh)(const struct dst_entry *, const void *);
+	struct kmem_cache *kmem_cachep;
+	struct percpu_counter pcpuc_entries;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_ipv6 {
+	struct ctl_table_header *hdr;
+	struct ctl_table_header *route_hdr;
+	struct ctl_table_header *icmp_hdr;
+	struct ctl_table_header *frags_hdr;
+	struct ctl_table_header *xfrm6_hdr;
+	int flush_delay;
+	int ip6_rt_max_size;
+	int ip6_rt_gc_min_interval;
+	int ip6_rt_gc_timeout;
+	int ip6_rt_gc_interval;
+	int ip6_rt_gc_elasticity;
+	int ip6_rt_mtu_expires;
+	int ip6_rt_min_advmss;
+	u32 multipath_hash_fields;
+	u8 multipath_hash_policy;
+	u8 bindv6only;
+	u8 flowlabel_consistency;
+	u8 auto_flowlabels;
+	int icmpv6_time;
+	u8 icmpv6_echo_ignore_all;
+	u8 icmpv6_echo_ignore_multicast;
+	u8 icmpv6_echo_ignore_anycast;
+	unsigned long icmpv6_ratemask[4];
+	unsigned long *icmpv6_ratemask_ptr;
+	u8 anycast_src_echo_reply;
+	u8 ip_nonlocal_bind;
+	u8 fwmark_reflect;
+	u8 flowlabel_state_ranges;
+	int idgen_retries;
+	int idgen_delay;
+	int flowlabel_reflect;
+	int max_dst_opts_cnt;
+	int max_hbh_opts_cnt;
+	int max_dst_opts_len;
+	int max_hbh_opts_len;
+	int seg6_flowlabel;
+	u32 ioam6_id;
+	u64 ioam6_id_wide;
+	u8 skip_notify_on_dev_down;
+	u8 fib_notify_on_flag_change;
+	u8 icmpv6_error_anycast_as_unicast;
+	u64 android_kabi_reserved1;
+};
+
+struct delayed_work {
+	struct work_struct work;
+	struct timer_list timer;
+	struct workqueue_struct *wq;
+	int cpu;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct ipv6_devconf;
+
+struct fib6_info;
+
+struct rt6_info;
+
+struct rt6_statistics;
+
+struct fib6_table;
+
+struct seg6_pernet_data;
+
+struct ioam6_pernet_data;
+
+struct netns_ipv6 {
+	struct dst_ops ip6_dst_ops;
+	struct netns_sysctl_ipv6 sysctl;
+	struct ipv6_devconf *devconf_all;
+	struct ipv6_devconf *devconf_dflt;
+	struct inet_peer_base *peers;
+	struct fqdir *fqdir;
+	struct fib6_info *fib6_null_entry;
+	struct rt6_info *ip6_null_entry;
+	struct rt6_statistics *rt6_stats;
+	struct timer_list ip6_fib_timer;
+	struct hlist_head *fib_table_hash;
+	struct fib6_table *fib6_main_tbl;
+	struct list_head fib6_walkers;
+	rwlock_t fib6_walker_lock;
+	spinlock_t fib6_gc_lock;
+	atomic_t ip6_rt_gc_expire;
+	unsigned long ip6_rt_last_gc;
+	unsigned char flowlabel_has_excl;
+	bool fib6_has_custom_rules;
+	unsigned int fib6_rules_require_fldissect;
+	struct rt6_info *ip6_prohibit_entry;
+	struct rt6_info *ip6_blk_hole_entry;
+	struct fib6_table *fib6_local_tbl;
+	struct fib_rules_ops *fib6_rules_ops;
+	struct sock *ndisc_sk;
+	struct sock *tcp_sk;
+	struct sock *igmp_sk;
+	struct sock *mc_autojoin_sk;
+	struct hlist_head *inet6_addr_lst;
+	spinlock_t addrconf_hash_lock;
+	struct delayed_work addr_chk_work;
+	struct list_head mr6_tables;
+	struct fib_rules_ops *mr6_rules_ops;
+	atomic_t dev_addr_genid;
+	atomic_t fib6_sernum;
+	struct seg6_pernet_data *seg6_data;
+	struct fib_notifier_ops *notifier_ops;
+	struct fib_notifier_ops *ip6mr_notifier_ops;
+	unsigned int ipmr_seq;
+	struct {
+		struct hlist_head head;
+		spinlock_t lock;
+		u32 seq;
+	} ip6addrlbl_table;
+	struct ioam6_pernet_data *ioam6_data;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct netns_sysctl_lowpan {
+	struct ctl_table_header *frags_hdr;
+};
+
+struct netns_ieee802154_lowpan {
+	struct netns_sysctl_lowpan sysctl;
+	struct fqdir *fqdir;
+};
+
+struct nf_logger;
+
+struct nf_hook_entries;
+
+struct netns_nf {
+	struct proc_dir_entry *proc_netfilter;
+	const struct nf_logger __attribute__((btf_type_tag("rcu"))) *nf_loggers[11];
+	struct ctl_table_header *nf_log_dir_header;
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *hooks_ipv4[5];
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *hooks_ipv6[5];
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *hooks_arp[3];
+	unsigned int defrag_ipv4_users;
+	unsigned int defrag_ipv6_users;
+	u64 android_kabi_reserved1;
+};
+
+struct nf_generic_net {
+	unsigned int timeout;
+};
+
+struct nf_tcp_net {
+	unsigned int timeouts[14];
+	u8 tcp_loose;
+	u8 tcp_be_liberal;
+	u8 tcp_max_retrans;
+	u8 tcp_ignore_invalid_rst;
+};
+
+struct nf_udp_net {
+	unsigned int timeouts[2];
+};
+
+struct nf_icmp_net {
+	unsigned int timeout;
+};
+
+struct nf_dccp_net {
+	u8 dccp_loose;
+	unsigned int dccp_timeout[10];
+};
+
+struct nf_sctp_net {
+	unsigned int timeouts[10];
+};
+
+struct nf_gre_net {
+	struct list_head keymap_list;
+	unsigned int timeouts[2];
+};
+
+struct nf_ip_net {
+	struct nf_generic_net generic;
+	struct nf_tcp_net tcp;
+	struct nf_udp_net udp;
+	struct nf_icmp_net icmp;
+	struct nf_icmp_net icmpv6;
+	struct nf_dccp_net dccp;
+	struct nf_sctp_net sctp;
+	struct nf_gre_net gre;
+};
+
+struct ip_conntrack_stat;
+
+struct nf_ct_event_notifier;
+
+struct netns_ct {
+	bool ecache_dwork_pending;
+	u8 sysctl_log_invalid;
+	u8 sysctl_events;
+	u8 sysctl_acct;
+	u8 sysctl_tstamp;
+	u8 sysctl_checksum;
+	struct ip_conntrack_stat __attribute__((btf_type_tag("percpu"))) *stat;
+	struct nf_ct_event_notifier __attribute__((btf_type_tag("rcu"))) *nf_conntrack_event_cb;
+	struct nf_ip_net nf_ct_proto;
+};
+
+struct sk_buff_list {
+	struct sk_buff *next;
+	struct sk_buff *prev;
+};
+
+struct sk_buff_head {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+		};
+		struct sk_buff_list list;
+	};
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+struct bpf_prog_array;
+
+struct bpf_prog;
+
+struct netns_bpf {
+	struct bpf_prog_array __attribute__((btf_type_tag("rcu"))) *run_array[2];
+	struct bpf_prog *progs[2];
+	struct list_head links[2];
+};
+
+struct xfrm_policy_hash {
+	struct hlist_head __attribute__((btf_type_tag("rcu"))) *table;
+	unsigned int hmask;
+	u8 dbits4;
+	u8 sbits4;
+	u8 dbits6;
+	u8 sbits6;
+};
+
+struct xfrm_policy_hthresh {
+	struct work_struct work;
+	seqlock_t lock;
+	u8 lbits4;
+	u8 rbits4;
+	u8 lbits6;
+	u8 rbits6;
+};
+
+struct netns_xfrm {
+	struct list_head state_all;
+	struct hlist_head __attribute__((btf_type_tag("rcu"))) *state_bydst;
+	struct hlist_head __attribute__((btf_type_tag("rcu"))) *state_bysrc;
+	struct hlist_head __attribute__((btf_type_tag("rcu"))) *state_byspi;
+	struct hlist_head __attribute__((btf_type_tag("rcu"))) *state_byseq;
+	unsigned int state_hmask;
+	unsigned int state_num;
+	struct work_struct state_hash_work;
+	struct list_head policy_all;
+	struct hlist_head *policy_byidx;
+	unsigned int policy_idx_hmask;
+	unsigned int idx_generator;
+	struct hlist_head policy_inexact[3];
+	struct xfrm_policy_hash policy_bydst[3];
+	unsigned int policy_count[6];
+	struct work_struct policy_hash_work;
+	struct xfrm_policy_hthresh policy_hthresh;
+	struct list_head inexact_bins;
+	struct sock *nlsk;
+	struct sock *nlsk_stash;
+	u32 sysctl_aevent_etime;
+	u32 sysctl_aevent_rseqth;
+	int sysctl_larval_drop;
+	u32 sysctl_acq_expires;
+	u8 policy_default[3];
+	struct ctl_table_header *sysctl_hdr;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dst_ops xfrm4_dst_ops;
+	struct dst_ops xfrm6_dst_ops;
+	spinlock_t xfrm_state_lock;
+	seqcount_spinlock_t xfrm_state_hash_generation;
+	seqcount_spinlock_t xfrm_policy_hash_generation;
+	spinlock_t xfrm_policy_lock;
+	struct mutex xfrm_cfg_mutex;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct can_dev_rcv_lists;
+
+struct can_pkg_stats;
+
+struct can_rcv_lists_stats;
+
+struct netns_can {
+	struct proc_dir_entry *proc_dir;
+	struct proc_dir_entry *pde_stats;
+	struct proc_dir_entry *pde_reset_stats;
+	struct proc_dir_entry *pde_rcvlist_all;
+	struct proc_dir_entry *pde_rcvlist_fil;
+	struct proc_dir_entry *pde_rcvlist_inv;
+	struct proc_dir_entry *pde_rcvlist_sff;
+	struct proc_dir_entry *pde_rcvlist_eff;
+	struct proc_dir_entry *pde_rcvlist_err;
+	struct proc_dir_entry *bcmproc_dir;
+	struct can_dev_rcv_lists *rx_alldev_list;
+	spinlock_t rcvlists_lock;
+	struct timer_list stattimer;
+	struct can_pkg_stats *pkg_stats;
+	struct can_rcv_lists_stats *rcv_lists_stats;
+	struct hlist_head cgw_list;
+	u64 android_kabi_reserved1;
+};
+
+struct netns_xdp {
+	struct mutex lock;
+	struct hlist_head list;
+};
+
+struct uevent_sock;
+
+struct net_generic;
+
+struct net {
+	refcount_t passive;
+	spinlock_t rules_mod_lock;
+	atomic_t dev_unreg_count;
+	unsigned int dev_base_seq;
+	u32 ifindex;
+	spinlock_t nsid_lock;
+	atomic_t fnhe_genid;
+	struct list_head list;
+	struct list_head exit_list;
+	struct llist_node cleanup_list;
+	struct key_tag *key_domain;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct idr netns_ids;
+	struct ns_common ns;
+	struct ref_tracker_dir refcnt_tracker;
+	struct ref_tracker_dir notrefcnt_tracker;
+	struct list_head dev_base_head;
+	struct proc_dir_entry *proc_net;
+	struct proc_dir_entry *proc_net_stat;
+	struct ctl_table_set sysctls;
+	struct sock *rtnl;
+	struct sock *genl_sock;
+	struct uevent_sock *uevent_sock;
+	struct hlist_head *dev_name_head;
+	struct hlist_head *dev_index_head;
+	struct xarray dev_by_index;
+	struct raw_notifier_head netdev_chain;
+	u32 hash_mix;
+	struct net_device *loopback_dev;
+	struct list_head rules_ops;
+	struct netns_core core;
+	struct netns_mib mib;
+	struct netns_packet packet;
+	struct netns_unix unx;
+	struct netns_nexthop nexthop;
+	long: 64;
+	struct netns_ipv4 ipv4;
+	struct netns_ipv6 ipv6;
+	struct netns_ieee802154_lowpan ieee802154_lowpan;
+	struct netns_nf nf;
+	struct netns_ct ct;
+	struct sk_buff_head wext_nlevents;
+	struct net_generic __attribute__((btf_type_tag("rcu"))) *gen;
+	struct netns_bpf bpf;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netns_xfrm xfrm;
+	u64 net_cookie;
+	struct netns_can can;
+	struct netns_xdp xdp;
+	struct sock *diag_nlsk;
+};
+
+typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);
+
+struct ctl_table_poll;
+
+struct ctl_table {
+	const char *procname;
+	void *data;
+	int maxlen;
+	umode_t mode;
+	enum {
+		SYSCTL_TABLE_TYPE_DEFAULT = 0,
+		SYSCTL_TABLE_TYPE_PERMANENTLY_EMPTY = 1,
+	} type;
+	proc_handler *proc_handler;
+	struct ctl_table_poll *poll;
+	void *extra1;
+	void *extra2;
+};
+
+struct ctl_table_poll {
+	atomic_t event;
+	wait_queue_head_t wait;
+};
+
+struct ctl_table_root {
+	struct ctl_table_set default_set;
+	struct ctl_table_set * (*lookup)(struct ctl_table_root *);
+	void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);
+	int (*permissions)(struct ctl_table_header *, struct ctl_table *);
+};
+
+struct ctl_node {
+	struct rb_node node;
+	struct ctl_table_header *header;
+};
+
+typedef int (*notifier_fn_t)(struct notifier_block *, unsigned long, void *);
+
+struct notifier_block {
+	notifier_fn_t notifier_call;
+	struct notifier_block __attribute__((btf_type_tag("rcu"))) *next;
+	int priority;
+};
+
+struct prot_inuse {
+	int all;
+	int val[64];
+};
+
+struct u64_stats_sync {};
+
+struct ipstats_mib {
+	u64 mibs[38];
+	struct u64_stats_sync syncp;
+};
+
+struct tcp_mib {
+	unsigned long mibs[16];
+};
+
+struct linux_mib {
+	unsigned long mibs[127];
+};
+
+struct udp_mib {
+	unsigned long mibs[10];
+};
+
+struct linux_xfrm_mib {
+	unsigned long mibs[29];
+};
+
+struct icmp_mib {
+	unsigned long mibs[30];
+};
+
+struct icmpmsg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct icmpv6_mib {
+	unsigned long mibs[7];
+};
+
+struct icmpv6msg_mib {
+	atomic_long_t mibs[512];
+};
+
+struct ip_ra_chain {
+	struct ip_ra_chain __attribute__((btf_type_tag("rcu"))) *next;
+	struct sock *sk;
+	union {
+		void (*destructor)(struct sock *);
+		struct sock *saved_sk;
+	};
+	struct callback_head rcu;
+};
+
+struct fib_table {
+	struct hlist_node tb_hlist;
+	u32 tb_id;
+	int tb_num_default;
+	struct callback_head rcu;
+	unsigned long *tb_data;
+	unsigned long __data[0];
+};
+
+typedef u32 (*rht_hashfn_t)(const void *, u32, u32);
+
+typedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32);
+
+struct rhashtable_compare_arg;
+
+typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *, const void *);
+
+struct rhashtable_params {
+	u16 nelem_hint;
+	u16 key_len;
+	u16 key_offset;
+	u16 head_offset;
+	unsigned int max_size;
+	u16 min_size;
+	bool automatic_shrinking;
+	rht_hashfn_t hashfn;
+	rht_obj_hashfn_t obj_hashfn;
+	rht_obj_cmpfn_t obj_cmpfn;
+};
+
+struct bucket_table;
+
+struct rhashtable {
+	struct bucket_table __attribute__((btf_type_tag("rcu"))) *tbl;
+	unsigned int key_len;
+	unsigned int max_elems;
+	struct rhashtable_params p;
+	bool rhlist;
+	struct work_struct run_work;
+	struct mutex mutex;
+	spinlock_t lock;
+	atomic_t nelems;
+};
+
+struct inet_frags;
+
+struct fqdir {
+	long high_thresh;
+	long low_thresh;
+	int timeout;
+	int max_dist;
+	struct inet_frags *f;
+	struct net *net;
+	bool dead;
+	long: 64;
+	long: 64;
+	struct rhashtable rhashtable;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t mem;
+	struct work_struct destroy_work;
+	struct llist_node free_list;
+};
+
+struct inet_frag_queue;
+
+struct inet_frags {
+	unsigned int qsize;
+	void (*constructor)(struct inet_frag_queue *, const void *);
+	void (*destructor)(struct inet_frag_queue *);
+	void (*frag_expire)(struct timer_list *);
+	struct kmem_cache *frags_cachep;
+	const char *frags_cache_name;
+	struct rhashtable_params rhash_params;
+	refcount_t refcnt;
+	struct completion completion;
+};
+
+typedef __u32 __be32;
+
+typedef __u16 __be16;
+
+struct frag_v4_compare_key {
+	__be32 saddr;
+	__be32 daddr;
+	u32 user;
+	u32 vif;
+	__be16 id;
+	u16 protocol;
+};
+
+struct in6_addr {
+	union {
+		__u8 u6_addr8[16];
+		__be16 u6_addr16[8];
+		__be32 u6_addr32[4];
+	} in6_u;
+};
+
+struct frag_v6_compare_key {
+	struct in6_addr saddr;
+	struct in6_addr daddr;
+	u32 user;
+	__be32 id;
+	u32 iif;
+};
+
+struct rhash_head {
+	struct rhash_head __attribute__((btf_type_tag("rcu"))) *next;
+};
+
+struct inet_frag_queue {
+	struct rhash_head node;
+	union {
+		struct frag_v4_compare_key v4;
+		struct frag_v6_compare_key v6;
+	} key;
+	struct timer_list timer;
+	spinlock_t lock;
+	refcount_t refcnt;
+	struct rb_root rb_fragments;
+	struct sk_buff *fragments_tail;
+	struct sk_buff *last_run_head;
+	ktime_t stamp;
+	int len;
+	int meat;
+	u8 mono_delivery_time;
+	__u8 flags;
+	u16 max_size;
+	struct fqdir *fqdir;
+	struct callback_head rcu;
+};
+
+typedef __u32 __wsum;
+
+typedef unsigned int sk_buff_data_t;
+
+struct skb_ext;
+
+struct sk_buff {
+	union {
+		struct {
+			struct sk_buff *next;
+			struct sk_buff *prev;
+			union {
+				struct net_device *dev;
+				unsigned long dev_scratch;
+			};
+		};
+		struct rb_node rbnode;
+		struct list_head list;
+		struct llist_node ll_node;
+	};
+	struct sock *sk;
+	union {
+		ktime_t tstamp;
+		u64 skb_mstamp_ns;
+	};
+	char cb[48];
+	union {
+		struct {
+			unsigned long _skb_refdst;
+			void (*destructor)(struct sk_buff *);
+		};
+		struct list_head tcp_tsorted_anchor;
+		unsigned long _sk_redir;
+	};
+	unsigned long _nfct;
+	unsigned int len;
+	unsigned int data_len;
+	__u16 mac_len;
+	__u16 hdr_len;
+	__u16 queue_mapping;
+	__u8 __cloned_offset[0];
+	__u8 cloned: 1;
+	__u8 nohdr: 1;
+	__u8 fclone: 2;
+	__u8 peeked: 1;
+	__u8 head_frag: 1;
+	__u8 pfmemalloc: 1;
+	__u8 pp_recycle: 1;
+	__u8 active_extensions;
+	union {
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 dst_pending_confirm: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 __mono_tc_offset[0];
+			__u8 mono_delivery_time: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 remcsum_offload: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 inner_protocol_type: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 nf_trace: 1;
+			__u8 redirected: 1;
+			__u8 from_ingress: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 slow_gro: 1;
+			__u16 tc_index;
+			u16 alloc_cpu;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			union {
+				u32 vlan_all;
+				struct {
+					__be16 vlan_proto;
+					__u16 vlan_tci;
+				};
+			};
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			__u32 secmark;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+			u64 android_kabi_reserved1;
+			u64 android_kabi_reserved2;
+		};
+		struct {
+			__u8 __pkt_type_offset[0];
+			__u8 pkt_type: 3;
+			__u8 ignore_df: 1;
+			__u8 dst_pending_confirm: 1;
+			__u8 ip_summed: 2;
+			__u8 ooo_okay: 1;
+			__u8 __mono_tc_offset[0];
+			__u8 mono_delivery_time: 1;
+			__u8 tc_at_ingress: 1;
+			__u8 tc_skip_classify: 1;
+			__u8 remcsum_offload: 1;
+			__u8 csum_complete_sw: 1;
+			__u8 csum_level: 2;
+			__u8 inner_protocol_type: 1;
+			__u8 l4_hash: 1;
+			__u8 sw_hash: 1;
+			__u8 wifi_acked_valid: 1;
+			__u8 wifi_acked: 1;
+			__u8 no_fcs: 1;
+			__u8 encapsulation: 1;
+			__u8 encap_hdr_csum: 1;
+			__u8 csum_valid: 1;
+			__u8 ndisc_nodetype: 2;
+			__u8 nf_trace: 1;
+			__u8 redirected: 1;
+			__u8 from_ingress: 1;
+			__u8 nf_skip_egress: 1;
+			__u8 slow_gro: 1;
+			__u16 tc_index;
+			u16 alloc_cpu;
+			union {
+				__wsum csum;
+				struct {
+					__u16 csum_start;
+					__u16 csum_offset;
+				};
+			};
+			__u32 priority;
+			int skb_iif;
+			__u32 hash;
+			union {
+				u32 vlan_all;
+				struct {
+					__be16 vlan_proto;
+					__u16 vlan_tci;
+				};
+			};
+			union {
+				unsigned int napi_id;
+				unsigned int sender_cpu;
+			};
+			__u32 secmark;
+			union {
+				__u32 mark;
+				__u32 reserved_tailroom;
+			};
+			union {
+				__be16 inner_protocol;
+				__u8 inner_ipproto;
+			};
+			__u16 inner_transport_header;
+			__u16 inner_network_header;
+			__u16 inner_mac_header;
+			__be16 protocol;
+			__u16 transport_header;
+			__u16 network_header;
+			__u16 mac_header;
+			u64 android_kabi_reserved1;
+			u64 android_kabi_reserved2;
+		} headers;
+	};
+	sk_buff_data_t tail;
+	sk_buff_data_t end;
+	unsigned char *head;
+	unsigned char *data;
+	unsigned int truesize;
+	refcount_t users;
+	struct skb_ext *extensions;
+};
+
+struct skb_ext {
+	refcount_t refcnt;
+	u8 offset[1];
+	u8 chunks;
+	long: 0;
+	char data[0];
+};
+
+struct rhashtable_compare_arg {
+	struct rhashtable *ht;
+	const void *key;
+};
+
+struct lockdep_map {};
+
+struct rhash_lock_head;
+
+struct bucket_table {
+	unsigned int size;
+	unsigned int nest;
+	u32 hash_rnd;
+	struct list_head walkers;
+	struct callback_head rcu;
+	struct bucket_table __attribute__((btf_type_tag("rcu"))) *future_tbl;
+	struct lockdep_map dep_map;
+	long: 64;
+	struct rhash_lock_head __attribute__((btf_type_tag("rcu"))) *buckets[0];
+};
+
+enum tcp_ca_event {
+	CA_EVENT_TX_START = 0,
+	CA_EVENT_CWND_RESTART = 1,
+	CA_EVENT_COMPLETE_CWR = 2,
+	CA_EVENT_LOSS = 3,
+	CA_EVENT_ECN_NO_CE = 4,
+	CA_EVENT_ECN_IS_CE = 5,
+};
+
+struct ack_sample;
+
+struct rate_sample;
+
+union tcp_cc_info;
+
+struct tcp_congestion_ops {
+	u32 (*ssthresh)(struct sock *);
+	void (*cong_avoid)(struct sock *, u32, u32);
+	void (*set_state)(struct sock *, u8);
+	void (*cwnd_event)(struct sock *, enum tcp_ca_event);
+	void (*in_ack_event)(struct sock *, u32);
+	void (*pkts_acked)(struct sock *, const struct ack_sample *);
+	u32 (*min_tso_segs)(struct sock *);
+	void (*cong_control)(struct sock *, const struct rate_sample *);
+	u32 (*undo_cwnd)(struct sock *);
+	u32 (*sndbuf_expand)(struct sock *);
+	size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);
+	char name[16];
+	struct module *owner;
+	struct list_head list;
+	u32 key;
+	u32 flags;
+	void (*init)(struct sock *);
+	void (*release)(struct sock *);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tcp_fastopen_context {
+	siphash_key_t key[2];
+	int num;
+	struct callback_head rcu;
+};
+
+typedef struct {
+	atomic_t refcnt;
+} rcuref_t;
+
+typedef struct {} netdevice_tracker;
+
+struct xfrm_state;
+
+struct uncached_list;
+
+struct lwtunnel_state;
+
+struct dst_entry {
+	struct net_device *dev;
+	struct dst_ops *ops;
+	unsigned long _metrics;
+	unsigned long expires;
+	struct xfrm_state *xfrm;
+	int (*input)(struct sk_buff *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	unsigned short flags;
+	short obsolete;
+	unsigned short header_len;
+	unsigned short trailer_len;
+	rcuref_t __rcuref;
+	int __use;
+	unsigned long lastuse;
+	struct callback_head callback_head;
+	short error;
+	short __pad;
+	__u32 tclassid;
+	netdevice_tracker dev_tracker;
+	struct list_head rt_uncached;
+	struct uncached_list *rt_uncached_list;
+	struct lwtunnel_state *lwtstate;
+};
+
+enum nf_log_type {
+	NF_LOG_TYPE_LOG = 0,
+	NF_LOG_TYPE_ULOG = 1,
+	NF_LOG_TYPE_MAX = 2,
+};
+
+typedef u8 u_int8_t;
+
+struct nf_loginfo;
+
+typedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);
+
+struct nf_logger {
+	char *name;
+	enum nf_log_type type;
+	nf_logfn *logfn;
+	struct module *me;
+};
+
+struct nf_hook_state;
+
+typedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);
+
+struct nf_hook_entry {
+	nf_hookfn *hook;
+	void *priv;
+};
+
+struct nf_hook_entries {
+	u16 num_hook_entries;
+	struct nf_hook_entry hooks[0];
+};
+
+struct ip_conntrack_stat {
+	unsigned int found;
+	unsigned int invalid;
+	unsigned int insert;
+	unsigned int insert_failed;
+	unsigned int clash_resolve;
+	unsigned int drop;
+	unsigned int early_drop;
+	unsigned int error;
+	unsigned int expect_new;
+	unsigned int expect_create;
+	unsigned int expect_delete;
+	unsigned int search_restart;
+	unsigned int chaintoolong;
+};
+
+struct nf_ct_event;
+
+struct nf_exp_event;
+
+struct nf_ct_event_notifier {
+	int (*ct_event)(unsigned int, const struct nf_ct_event *);
+	int (*exp_event)(unsigned int, const struct nf_exp_event *);
+};
+
+struct net_generic {
+	union {
+		struct {
+			unsigned int len;
+			struct callback_head rcu;
+		} s;
+		struct {
+			struct {} __empty_ptr;
+			void *ptr[0];
+		};
+	};
+};
+
+struct bpf_cgroup_storage;
+
+struct bpf_prog_array_item {
+	struct bpf_prog *prog;
+	union {
+		struct bpf_cgroup_storage *cgroup_storage[2];
+		u64 bpf_cookie;
+	};
+};
+
+struct bpf_prog_array {
+	struct callback_head rcu;
+	struct bpf_prog_array_item items[0];
+};
+
+struct cgroup_namespace {
+	struct ns_common ns;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct css_set *root_cset;
+};
+
+struct cgroup_subsys_state;
+
+struct cgroup;
+
+struct css_set {
+	struct cgroup_subsys_state *subsys[7];
+	refcount_t refcount;
+	struct css_set *dom_cset;
+	struct cgroup *dfl_cgrp;
+	int nr_tasks;
+	struct list_head tasks;
+	struct list_head mg_tasks;
+	struct list_head dying_tasks;
+	struct list_head task_iters;
+	struct list_head e_cset_node[7];
+	struct list_head threaded_csets;
+	struct list_head threaded_csets_node;
+	struct hlist_node hlist;
+	struct list_head cgrp_links;
+	struct list_head mg_src_preload_node;
+	struct list_head mg_dst_preload_node;
+	struct list_head mg_node;
+	struct cgroup *mg_src_cgrp;
+	struct cgroup *mg_dst_cgrp;
+	struct css_set *mg_dst_cset;
+	bool dead;
+	struct callback_head callback_head;
+};
+
+struct rcu_work {
+	struct work_struct work;
+	struct callback_head rcu;
+	struct workqueue_struct *wq;
+};
+
+struct cgroup_subsys;
+
+struct cgroup_subsys_state {
+	struct cgroup *cgroup;
+	struct cgroup_subsys *ss;
+	struct percpu_ref refcnt;
+	struct list_head sibling;
+	struct list_head children;
+	struct list_head rstat_css_node;
+	int id;
+	unsigned int flags;
+	u64 serial_nr;
+	atomic_t online_cnt;
+	struct work_struct destroy_work;
+	struct rcu_work destroy_rwork;
+	struct cgroup_subsys_state *parent;
+};
+
+struct cgroup_file {
+	struct kernfs_node *kn;
+	unsigned long notified_at;
+	struct timer_list notify_timer;
+};
+
+struct cacheline_padding {
+	char x[0];
+};
+
+struct task_cputime {
+	u64 stime;
+	u64 utime;
+	unsigned long long sum_exec_runtime;
+};
+
+struct cgroup_base_stat {
+	struct task_cputime cputime;
+};
+
+struct cgroup_bpf {
+	struct bpf_prog_array __attribute__((btf_type_tag("rcu"))) *effective[33];
+	struct hlist_head progs[33];
+	u8 flags[33];
+	struct list_head storages;
+	struct bpf_prog_array *inactive;
+	struct percpu_ref refcnt;
+	struct work_struct release_work;
+};
+
+struct cgroup_freezer_state {
+	bool freeze;
+	int e_freeze;
+	int nr_frozen_descendants;
+	int nr_frozen_tasks;
+};
+
+struct cgroup_root;
+
+struct cgroup_rstat_cpu;
+
+struct psi_group;
+
+struct cgroup {
+	struct cgroup_subsys_state self;
+	unsigned long flags;
+	int level;
+	int max_depth;
+	int nr_descendants;
+	int nr_dying_descendants;
+	int max_descendants;
+	int nr_populated_csets;
+	int nr_populated_domain_children;
+	int nr_populated_threaded_children;
+	int nr_threaded_children;
+	struct kernfs_node *kn;
+	struct cgroup_file procs_file;
+	struct cgroup_file events_file;
+	struct cgroup_file psi_files[4];
+	u16 subtree_control;
+	u16 subtree_ss_mask;
+	u16 old_subtree_control;
+	u16 old_subtree_ss_mask;
+	struct cgroup_subsys_state __attribute__((btf_type_tag("rcu"))) *subsys[7];
+	struct cgroup_root *root;
+	struct list_head cset_links;
+	struct list_head e_csets[7];
+	struct cgroup *dom_cgrp;
+	struct cgroup *old_dom_cgrp;
+	struct cgroup_rstat_cpu __attribute__((btf_type_tag("percpu"))) *rstat_cpu;
+	struct list_head rstat_css_list;
+	struct cacheline_padding _pad_;
+	struct cgroup *rstat_flush_next;
+	struct cgroup_base_stat last_bstat;
+	struct cgroup_base_stat bstat;
+	struct prev_cputime prev_cputime;
+	struct list_head pidlists;
+	struct mutex pidlist_mutex;
+	wait_queue_head_t offline_waitq;
+	struct work_struct release_agent_work;
+	struct psi_group *psi;
+	struct cgroup_bpf bpf;
+	atomic_t congestion_count;
+	struct cgroup_freezer_state freezer;
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) *bpf_cgrp_storage;
+	u64 android_backport_reserved1;
+	struct cgroup *ancestors[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kernfs_root;
+
+struct kernfs_elem_dir {
+	unsigned long subdirs;
+	struct rb_root children;
+	struct kernfs_root *root;
+	unsigned long rev;
+};
+
+struct kernfs_elem_symlink {
+	struct kernfs_node *target_kn;
+};
+
+struct kernfs_ops;
+
+struct kernfs_open_node;
+
+struct kernfs_elem_attr {
+	const struct kernfs_ops *ops;
+	struct kernfs_open_node __attribute__((btf_type_tag("rcu"))) *open;
+	loff_t size;
+	struct kernfs_node *notify_next;
+};
+
+struct kernfs_iattrs;
+
+struct kernfs_node {
+	atomic_t count;
+	atomic_t active;
+	struct kernfs_node *parent;
+	const char *name;
+	struct rb_node rb;
+	const void *ns;
+	unsigned int hash;
+	union {
+		struct kernfs_elem_dir dir;
+		struct kernfs_elem_symlink symlink;
+		struct kernfs_elem_attr attr;
+	};
+	void *priv;
+	u64 id;
+	unsigned short flags;
+	umode_t mode;
+	struct kernfs_iattrs *iattr;
+	struct callback_head rcu;
+	u64 android_kabi_reserved1;
+};
+
+typedef unsigned int __poll_t;
+
+struct kernfs_open_file;
+
+struct poll_table_struct;
+
+struct kernfs_ops {
+	int (*open)(struct kernfs_open_file *);
+	void (*release)(struct kernfs_open_file *);
+	int (*seq_show)(struct seq_file *, void *);
+	void * (*seq_start)(struct seq_file *, loff_t *);
+	void * (*seq_next)(struct seq_file *, void *, loff_t *);
+	void (*seq_stop)(struct seq_file *, void *);
+	ssize_t (*read)(struct kernfs_open_file *, char *, size_t, loff_t);
+	size_t atomic_write_len;
+	bool prealloc;
+	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
+	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
+	int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct kernfs_open_file {
+	struct kernfs_node *kn;
+	struct file *file;
+	struct seq_file *seq_file;
+	void *priv;
+	struct mutex mutex;
+	struct mutex prealloc_mutex;
+	int event;
+	struct list_head list;
+	char *prealloc_buf;
+	size_t atomic_write_len;
+	bool mmapped: 1;
+	bool released: 1;
+	const struct vm_operations_struct *vm_ops;
+	u64 android_kabi_reserved1;
+};
+
+struct seq_operations;
+
+struct seq_file {
+	char *buf;
+	size_t size;
+	size_t from;
+	size_t count;
+	size_t pad_until;
+	loff_t index;
+	loff_t read_pos;
+	struct mutex lock;
+	const struct seq_operations *op;
+	int poll_event;
+	const struct file *file;
+	void *private;
+};
+
+struct seq_operations {
+	void * (*start)(struct seq_file *, loff_t *);
+	void (*stop)(struct seq_file *, void *);
+	void * (*next)(struct seq_file *, void *, loff_t *);
+	int (*show)(struct seq_file *, void *);
+};
+
+typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
+
+struct poll_table_struct {
+	poll_queue_proc _qproc;
+	__poll_t _key;
+};
+
+struct kernfs_open_node {
+	struct callback_head callback_head;
+	atomic_t event;
+	wait_queue_head_t poll;
+	struct list_head files;
+	unsigned int nr_mmapped;
+	unsigned int nr_to_release;
+};
+
+struct cgroup_root {
+	struct kernfs_root *kf_root;
+	unsigned int subsys_mask;
+	int hierarchy_id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cgroup cgrp;
+	struct cgroup *cgrp_ancestor_storage;
+	atomic_t nr_cgrps;
+	struct list_head root_list;
+	unsigned int flags;
+	char release_agent_path[4096];
+	char name[64];
+	long: 0;
+	u8 android_backport_reserved1[28];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct cgroup_rstat_cpu {
+	struct u64_stats_sync bsync;
+	struct cgroup_base_stat bstat;
+	struct cgroup_base_stat last_bstat;
+	struct cgroup_base_stat subtree_bstat;
+	struct cgroup_base_stat last_subtree_bstat;
+	struct cgroup *updated_children;
+	struct cgroup *updated_next;
+};
+
+struct psi_group_cpu;
+
+struct psi_group {
+	struct psi_group *parent;
+	bool enabled;
+	struct mutex avgs_lock;
+	struct psi_group_cpu __attribute__((btf_type_tag("percpu"))) *pcpu;
+	u64 avg_total[7];
+	u64 avg_last_update;
+	u64 avg_next_update;
+	struct delayed_work avgs_work;
+	struct list_head avg_triggers;
+	u32 avg_nr_triggers[7];
+	u64 total[14];
+	unsigned long avg[21];
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *rtpoll_task;
+	struct timer_list rtpoll_timer;
+	wait_queue_head_t rtpoll_wait;
+	atomic_t rtpoll_wakeup;
+	atomic_t rtpoll_scheduled;
+	struct mutex rtpoll_trigger_lock;
+	struct list_head rtpoll_triggers;
+	u32 rtpoll_nr_triggers[7];
+	u32 rtpoll_states;
+	u64 rtpoll_min_period;
+	u64 rtpoll_total[7];
+	u64 rtpoll_next_update;
+	u64 rtpoll_until;
+};
+
+struct psi_group_cpu {
+	seqcount_t seq;
+	unsigned int tasks[4];
+	u32 state_mask;
+	u32 times[8];
+	u64 state_start;
+	u32 times_prev[16];
+};
+
+struct bpf_local_storage_data;
+
+struct bpf_local_storage_map;
+
+struct bpf_local_storage {
+	struct bpf_local_storage_data __attribute__((btf_type_tag("rcu"))) *cache[16];
+	struct bpf_local_storage_map __attribute__((btf_type_tag("rcu"))) *smap;
+	struct hlist_head list;
+	void *owner;
+	struct callback_head rcu;
+	raw_spinlock_t lock;
+};
+
+struct cgroup_taskset;
+
+struct cftype;
+
+struct cgroup_subsys {
+	struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *);
+	int (*css_online)(struct cgroup_subsys_state *);
+	void (*css_offline)(struct cgroup_subsys_state *);
+	void (*css_released)(struct cgroup_subsys_state *);
+	void (*css_free)(struct cgroup_subsys_state *);
+	void (*css_reset)(struct cgroup_subsys_state *);
+	void (*css_rstat_flush)(struct cgroup_subsys_state *, int);
+	int (*css_extra_stat_show)(struct seq_file *, struct cgroup_subsys_state *);
+	int (*css_local_stat_show)(struct seq_file *, struct cgroup_subsys_state *);
+	int (*can_attach)(struct cgroup_taskset *);
+	void (*cancel_attach)(struct cgroup_taskset *);
+	void (*attach)(struct cgroup_taskset *);
+	void (*post_attach)();
+	int (*can_fork)(struct task_struct *, struct css_set *);
+	void (*cancel_fork)(struct task_struct *, struct css_set *);
+	void (*fork)(struct task_struct *);
+	void (*exit)(struct task_struct *);
+	void (*release)(struct task_struct *);
+	void (*bind)(struct cgroup_subsys_state *);
+	bool early_init: 1;
+	bool implicit_on_dfl: 1;
+	bool threaded: 1;
+	int id;
+	const char *name;
+	const char *legacy_name;
+	struct cgroup_root *root;
+	struct idr css_idr;
+	struct list_head cfts;
+	struct cftype *dfl_cftypes;
+	struct cftype *legacy_cftypes;
+	unsigned int depends_on;
+};
+
+struct cftype {
+	char name[64];
+	unsigned long private;
+	size_t max_write_len;
+	unsigned int flags;
+	unsigned int file_offset;
+	struct cgroup_subsys *ss;
+	struct list_head node;
+	struct kernfs_ops *kf_ops;
+	int (*open)(struct kernfs_open_file *);
+	void (*release)(struct kernfs_open_file *);
+	u64 (*read_u64)(struct cgroup_subsys_state *, struct cftype *);
+	s64 (*read_s64)(struct cgroup_subsys_state *, struct cftype *);
+	int (*seq_show)(struct seq_file *, void *);
+	void * (*seq_start)(struct seq_file *, loff_t *);
+	void * (*seq_next)(struct seq_file *, void *, loff_t *);
+	void (*seq_stop)(struct seq_file *, void *);
+	int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64);
+	int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64);
+	ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);
+	__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);
+};
+
+struct group_info {
+	atomic_t usage;
+	int ngroups;
+	kgid_t gid[0];
+};
+
+struct ldt_struct {
+	struct desc_struct *entries;
+	unsigned int nr_entries;
+	int slot;
+};
+
+struct vdso_image {
+	void *data;
+	unsigned long size;
+	unsigned long alt;
+	unsigned long alt_len;
+	unsigned long extable_base;
+	unsigned long extable_len;
+	const void *extable;
+	long sym_vvar_start;
+	long sym_vvar_page;
+	long sym_pvclock_page;
+	long sym_hvclock_page;
+	long sym_timens_page;
+	long sym_VDSO32_NOTE_MASK;
+	long sym___kernel_sigreturn;
+	long sym___kernel_rt_sigreturn;
+	long sym___kernel_vsyscall;
+	long sym_int80_landing_pad;
+	long sym_vdso32_sigreturn_landing_pad;
+	long sym_vdso32_rt_sigreturn_landing_pad;
+};
+
+struct kioctx;
+
+struct kioctx_table {
+	struct callback_head rcu;
+	unsigned int nr;
+	struct kioctx __attribute__((btf_type_tag("rcu"))) *table[0];
+};
+
+struct page_counter {
+	atomic_long_t usage;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	unsigned long emin;
+	atomic_long_t min_usage;
+	atomic_long_t children_min_usage;
+	unsigned long elow;
+	atomic_long_t low_usage;
+	atomic_long_t children_low_usage;
+	unsigned long watermark;
+	unsigned long failcnt;
+	struct cacheline_padding _pad2_;
+	unsigned long min;
+	unsigned long low;
+	unsigned long high;
+	unsigned long max;
+	struct page_counter *parent;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct mem_cgroup_id {
+	int id;
+	refcount_t ref;
+};
+
+struct vmpressure {
+	unsigned long scanned;
+	unsigned long reclaimed;
+	unsigned long tree_scanned;
+	unsigned long tree_reclaimed;
+	spinlock_t sr_lock;
+	struct list_head events;
+	struct mutex events_lock;
+	struct work_struct work;
+};
+
+struct mem_cgroup_threshold_ary;
+
+struct mem_cgroup_thresholds {
+	struct mem_cgroup_threshold_ary *primary;
+	struct mem_cgroup_threshold_ary *spare;
+};
+
+struct fprop_global {
+	struct percpu_counter events;
+	unsigned int period;
+	seqcount_t sequence;
+};
+
+struct wb_domain {
+	spinlock_t lock;
+	struct fprop_global completions;
+	struct timer_list period_timer;
+	unsigned long period_time;
+	unsigned long dirty_limit_tstamp;
+	unsigned long dirty_limit;
+};
+
+struct wb_completion {
+	atomic_t cnt;
+	wait_queue_head_t *waitq;
+};
+
+struct memcg_cgwb_frn {
+	u64 bdi_id;
+	int memcg_id;
+	u64 at;
+	struct wb_completion done;
+};
+
+struct deferred_split {
+	spinlock_t split_queue_lock;
+	struct list_head split_queue;
+	unsigned long split_queue_len;
+};
+
+struct lru_gen_mm_list {
+	struct list_head fifo;
+	spinlock_t lock;
+};
+
+struct memcg_vmstats;
+
+struct obj_cgroup;
+
+struct memcg_vmstats_percpu;
+
+struct mem_cgroup_per_node;
+
+struct mem_cgroup {
+	struct cgroup_subsys_state css;
+	struct mem_cgroup_id id;
+	long: 64;
+	long: 64;
+	struct page_counter memory;
+	union {
+		struct page_counter swap;
+		struct page_counter memsw;
+	};
+	struct page_counter kmem;
+	struct page_counter tcpmem;
+	struct work_struct high_work;
+	unsigned long soft_limit;
+	struct vmpressure vmpressure;
+	bool oom_group;
+	bool oom_lock;
+	int under_oom;
+	int swappiness;
+	int oom_kill_disable;
+	struct cgroup_file events_file;
+	struct cgroup_file events_local_file;
+	struct cgroup_file swap_events_file;
+	struct mutex thresholds_lock;
+	struct mem_cgroup_thresholds thresholds;
+	struct mem_cgroup_thresholds memsw_thresholds;
+	struct list_head oom_notify;
+	unsigned long move_charge_at_immigrate;
+	spinlock_t move_lock;
+	unsigned long move_lock_flags;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct memcg_vmstats *vmstats;
+	atomic_long_t memory_events[9];
+	atomic_long_t memory_events_local[9];
+	unsigned long socket_pressure;
+	bool tcpmem_active;
+	int tcpmem_pressure;
+	int kmemcg_id;
+	struct obj_cgroup __attribute__((btf_type_tag("rcu"))) *objcg;
+	struct list_head objcg_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	atomic_t moving_account;
+	struct task_struct *move_lock_task;
+	struct memcg_vmstats_percpu __attribute__((btf_type_tag("percpu"))) *vmstats_percpu;
+	struct list_head cgwb_list;
+	struct wb_domain cgwb_domain;
+	struct memcg_cgwb_frn cgwb_frn[4];
+	struct list_head event_list;
+	spinlock_t event_list_lock;
+	struct deferred_split deferred_split_queue;
+	struct lru_gen_mm_list mm_list;
+	u64 android_backport_reserved1;
+	u64 android_backport_reserved2;
+	u64 android_oem_data1[2];
+	struct mem_cgroup_per_node *nodeinfo[0];
+};
+
+struct eventfd_ctx;
+
+struct mem_cgroup_threshold {
+	struct eventfd_ctx *eventfd;
+	unsigned long threshold;
+};
+
+struct mem_cgroup_threshold_ary {
+	int current_threshold;
+	unsigned int size;
+	struct mem_cgroup_threshold entries[0];
+};
+
+struct obj_cgroup {
+	struct percpu_ref refcnt;
+	struct mem_cgroup *memcg;
+	atomic_t nr_charged_bytes;
+	union {
+		struct list_head list;
+		struct callback_head rcu;
+	};
+};
+
+struct memcg_vmstats_percpu {
+	unsigned int stats_updates;
+	struct memcg_vmstats_percpu *parent;
+	struct memcg_vmstats *vmstats;
+	long state[48];
+	unsigned long events[17];
+	long state_prev[48];
+	unsigned long events_prev[17];
+	unsigned long nr_page_events;
+	unsigned long targets[2];
+};
+
+struct hlist_nulls_node {
+	struct hlist_nulls_node *next;
+	struct hlist_nulls_node **pprev;
+};
+
+struct lru_gen_folio {
+	unsigned long max_seq;
+	unsigned long min_seq[2];
+	unsigned long timestamps[4];
+	struct list_head folios[40];
+	long nr_pages[40];
+	unsigned long avg_refaulted[8];
+	unsigned long avg_total[8];
+	unsigned long protected[6];
+	atomic_long_t evicted[8];
+	atomic_long_t refaulted[8];
+	bool enabled;
+	u8 gen;
+	u8 seg;
+	struct hlist_nulls_node list;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct lru_gen_mm_state {
+	unsigned long seq;
+	struct list_head *head;
+	struct list_head *tail;
+	unsigned long *filters[2];
+	unsigned long stats[6];
+	u64 android_kabi_reserved1;
+};
+
+struct pglist_data;
+
+struct lruvec {
+	struct list_head lists[5];
+	spinlock_t lru_lock;
+	unsigned long anon_cost;
+	unsigned long file_cost;
+	atomic_long_t nonresident_age;
+	unsigned long refaults[2];
+	unsigned long flags;
+	struct lru_gen_folio lrugen;
+	struct lru_gen_mm_state mm_state;
+	struct pglist_data *pgdat;
+};
+
+struct lruvec_stats {
+	long state[41];
+	long state_local[41];
+	long state_pending[41];
+};
+
+struct mem_cgroup_reclaim_iter {
+	struct mem_cgroup *position;
+	unsigned int generation;
+};
+
+struct lruvec_stats_percpu;
+
+struct shrinker_info;
+
+struct mem_cgroup_per_node {
+	struct lruvec lruvec;
+	struct lruvec_stats_percpu __attribute__((btf_type_tag("percpu"))) *lruvec_stats_percpu;
+	struct lruvec_stats lruvec_stats;
+	unsigned long lru_zone_size[25];
+	struct mem_cgroup_reclaim_iter iter;
+	struct shrinker_info __attribute__((btf_type_tag("rcu"))) *shrinker_info;
+	struct rb_node tree_node;
+	unsigned long usage_in_excess;
+	bool on_tree;
+	struct mem_cgroup *memcg;
+	u64 android_backport_reserved1;
+};
+
+struct free_area {
+	struct list_head free_list[6];
+	unsigned long nr_free;
+};
+
+struct per_cpu_pages;
+
+struct per_cpu_zonestat;
+
+struct zone {
+	unsigned long _watermark[4];
+	unsigned long watermark_boost;
+	unsigned long nr_reserved_highatomic;
+	long lowmem_reserve[5];
+	struct pglist_data *zone_pgdat;
+	struct per_cpu_pages __attribute__((btf_type_tag("percpu"))) *per_cpu_pageset;
+	struct per_cpu_zonestat __attribute__((btf_type_tag("percpu"))) *per_cpu_zonestats;
+	int pageset_high;
+	int pageset_batch;
+	unsigned long zone_start_pfn;
+	atomic_long_t managed_pages;
+	unsigned long spanned_pages;
+	unsigned long present_pages;
+	unsigned long present_early_pages;
+	unsigned long cma_pages;
+	const char *name;
+	unsigned long nr_isolate_pageblock;
+	seqlock_t span_seqlock;
+	int order;
+	int initialized;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct free_area free_area[11];
+	unsigned long flags;
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	unsigned long percpu_drift_mark;
+	unsigned long compact_cached_free_pfn;
+	unsigned long compact_cached_migrate_pfn[2];
+	unsigned long compact_init_migrate_pfn;
+	unsigned long compact_init_free_pfn;
+	unsigned int compact_considered;
+	unsigned int compact_defer_shift;
+	int compact_order_failed;
+	bool compact_blockskip_flush;
+	bool contiguous;
+	long: 0;
+	struct cacheline_padding _pad3_;
+	atomic_long_t vm_stat[11];
+	atomic_long_t vm_numa_event[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct zoneref {
+	struct zone *zone;
+	int zone_idx;
+};
+
+struct zonelist {
+	struct zoneref _zonerefs[6];
+};
+
+enum zone_type {
+	ZONE_DMA32 = 0,
+	ZONE_NORMAL = 1,
+	ZONE_MOVABLE = 2,
+	ZONE_NOSPLIT = 3,
+	ZONE_NOMERGE = 4,
+	__MAX_NR_ZONES = 5,
+	LAST_PHYS_ZONE = 1,
+	LAST_VIRT_ZONE = 4,
+};
+
+struct lru_gen_mm_walk {
+	struct lruvec *lruvec;
+	unsigned long max_seq;
+	unsigned long next_addr;
+	int nr_pages[40];
+	int mm_stats[6];
+	int batched;
+	bool can_swap;
+	bool force_scan;
+	u64 android_kabi_reserved1;
+};
+
+struct hlist_nulls_head {
+	struct hlist_nulls_node *first;
+};
+
+struct lru_gen_memcg {
+	unsigned long seq;
+	unsigned long nr_memcgs[3];
+	struct hlist_nulls_head fifo[24];
+	spinlock_t lock;
+};
+
+struct per_cpu_nodestat;
+
+struct pglist_data {
+	struct zone node_zones[5];
+	struct zonelist node_zonelists[1];
+	int nr_zones;
+	spinlock_t node_size_lock;
+	unsigned long node_start_pfn;
+	unsigned long node_present_pages;
+	unsigned long node_spanned_pages;
+	int node_id;
+	wait_queue_head_t kswapd_wait;
+	wait_queue_head_t pfmemalloc_wait;
+	wait_queue_head_t reclaim_wait[4];
+	atomic_t nr_writeback_throttled;
+	unsigned long nr_reclaim_start;
+	struct mutex kswapd_lock;
+	struct task_struct *kswapd;
+	int kswapd_order;
+	enum zone_type kswapd_highest_zoneidx;
+	int kswapd_failures;
+	u64 android_oem_data1;
+	int kcompactd_max_order;
+	enum zone_type kcompactd_highest_zoneidx;
+	wait_queue_head_t kcompactd_wait;
+	struct task_struct *kcompactd;
+	bool proactive_compact_trigger;
+	unsigned long totalreserve_pages;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad1_;
+	struct deferred_split deferred_split_queue;
+	struct lruvec __lruvec;
+	unsigned long flags;
+	struct lru_gen_mm_walk mm_walk;
+	struct lru_gen_memcg memcg_lru;
+	long: 64;
+	long: 64;
+	struct cacheline_padding _pad2_;
+	struct per_cpu_nodestat __attribute__((btf_type_tag("percpu"))) *per_cpu_nodestats;
+	atomic_long_t vm_stat[41];
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct per_cpu_pages {
+	spinlock_t lock;
+	int count;
+	int high;
+	int batch;
+	short free_factor;
+	struct list_head lists[17];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef signed char __s8;
+
+typedef __s8 s8;
+
+struct per_cpu_zonestat {
+	s8 vm_stat_diff[11];
+	s8 stat_threshold;
+};
+
+struct per_cpu_nodestat {
+	s8 stat_threshold;
+	s8 vm_node_stat_diff[41];
+};
+
+struct lruvec_stats_percpu {
+	long state[41];
+	long state_prev[41];
+};
+
+struct shrinker_info {
+	struct callback_head rcu;
+	atomic_long_t *nr_deferred;
+	unsigned long *map;
+	int map_nr_max;
+};
+
+typedef long long __kernel_time64_t;
+
+struct __kernel_timespec {
+	__kernel_time64_t tv_sec;
+	long long tv_nsec;
+};
+
+typedef s32 old_time32_t;
+
+struct old_timespec32 {
+	old_time32_t tv_sec;
+	s32 tv_nsec;
+};
+
+struct pollfd {
+	int fd;
+	short events;
+	short revents;
+};
+
+struct cpu_itimer {
+	u64 expires;
+	u64 incr;
+};
+
+struct task_cputime_atomic {
+	atomic64_t utime;
+	atomic64_t stime;
+	atomic64_t sum_exec_runtime;
+};
+
+struct thread_group_cputimer {
+	struct task_cputime_atomic cputime_atomic;
+};
+
+struct core_state;
+
+struct tty_struct;
+
+struct taskstats;
+
+struct tty_audit_buf;
+
+struct signal_struct {
+	refcount_t sigcnt;
+	atomic_t live;
+	int nr_threads;
+	int quick_threads;
+	struct list_head thread_head;
+	wait_queue_head_t wait_chldexit;
+	struct task_struct *curr_target;
+	struct sigpending shared_pending;
+	struct hlist_head multiprocess;
+	int group_exit_code;
+	int notify_count;
+	struct task_struct *group_exec_task;
+	int group_stop_count;
+	unsigned int flags;
+	struct core_state *core_state;
+	unsigned int is_child_subreaper: 1;
+	unsigned int has_child_subreaper: 1;
+	unsigned int next_posix_timer_id;
+	struct list_head posix_timers;
+	struct hrtimer real_timer;
+	ktime_t it_real_incr;
+	struct cpu_itimer it[2];
+	struct thread_group_cputimer cputimer;
+	struct posix_cputimers posix_cputimers;
+	struct pid *pids[4];
+	struct pid *tty_old_pgrp;
+	int leader;
+	struct tty_struct *tty;
+	seqlock_t stats_lock;
+	u64 utime;
+	u64 stime;
+	u64 cutime;
+	u64 cstime;
+	u64 gtime;
+	u64 cgtime;
+	struct prev_cputime prev_cputime;
+	unsigned long nvcsw;
+	unsigned long nivcsw;
+	unsigned long cnvcsw;
+	unsigned long cnivcsw;
+	unsigned long min_flt;
+	unsigned long maj_flt;
+	unsigned long cmin_flt;
+	unsigned long cmaj_flt;
+	unsigned long inblock;
+	unsigned long oublock;
+	unsigned long cinblock;
+	unsigned long coublock;
+	unsigned long maxrss;
+	unsigned long cmaxrss;
+	struct task_io_accounting ioac;
+	unsigned long long sum_sched_runtime;
+	struct rlimit rlim[16];
+	struct taskstats *stats;
+	unsigned int audit_tty;
+	struct tty_audit_buf *tty_audit_buf;
+	bool oom_flag_origin;
+	short oom_score_adj;
+	short oom_score_adj_min;
+	struct mm_struct *oom_mm;
+	struct mutex cred_guard_mutex;
+	struct rw_semaphore exec_update_lock;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_oem_data1;
+};
+
+struct core_thread {
+	struct task_struct *task;
+	struct core_thread *next;
+};
+
+struct core_state {
+	atomic_t nr_threads;
+	struct core_thread dumper;
+	struct completion startup;
+};
+
+struct taskstats {
+	__u16 version;
+	__u32 ac_exitcode;
+	__u8 ac_flag;
+	__u8 ac_nice;
+	__u64 cpu_count;
+	__u64 cpu_delay_total;
+	__u64 blkio_count;
+	__u64 blkio_delay_total;
+	__u64 swapin_count;
+	__u64 swapin_delay_total;
+	__u64 cpu_run_real_total;
+	__u64 cpu_run_virtual_total;
+	char ac_comm[32];
+	__u8 ac_sched;
+	__u8 ac_pad[3];
+	long: 0;
+	__u32 ac_uid;
+	__u32 ac_gid;
+	__u32 ac_pid;
+	__u32 ac_ppid;
+	__u32 ac_btime;
+	__u64 ac_etime;
+	__u64 ac_utime;
+	__u64 ac_stime;
+	__u64 ac_minflt;
+	__u64 ac_majflt;
+	__u64 coremem;
+	__u64 virtmem;
+	__u64 hiwater_rss;
+	__u64 hiwater_vm;
+	__u64 read_char;
+	__u64 write_char;
+	__u64 read_syscalls;
+	__u64 write_syscalls;
+	__u64 read_bytes;
+	__u64 write_bytes;
+	__u64 cancelled_write_bytes;
+	__u64 nvcsw;
+	__u64 nivcsw;
+	__u64 ac_utimescaled;
+	__u64 ac_stimescaled;
+	__u64 cpu_scaled_run_real_total;
+	__u64 freepages_count;
+	__u64 freepages_delay_total;
+	__u64 thrashing_count;
+	__u64 thrashing_delay_total;
+	__u64 ac_btime64;
+	__u64 compact_count;
+	__u64 compact_delay_total;
+	__u32 ac_tgid;
+	__u64 ac_tgetime;
+	__u64 ac_exe_dev;
+	__u64 ac_exe_inode;
+	__u64 wpcopy_count;
+	__u64 wpcopy_delay_total;
+	__u64 irq_count;
+	__u64 irq_delay_total;
+};
+
+typedef void __signalfn_t(int);
+
+typedef __signalfn_t __attribute__((btf_type_tag("user"))) *__sighandler_t;
+
+typedef void __restorefn_t();
+
+typedef __restorefn_t __attribute__((btf_type_tag("user"))) *__sigrestore_t;
+
+struct sigaction {
+	__sighandler_t sa_handler;
+	unsigned long sa_flags;
+	__sigrestore_t sa_restorer;
+	sigset_t sa_mask;
+};
+
+struct k_sigaction {
+	struct sigaction sa;
+};
+
+struct sighand_struct {
+	spinlock_t siglock;
+	refcount_t count;
+	wait_queue_head_t signalfd_wqh;
+	struct k_sigaction action[64];
+};
+
+struct bio;
+
+struct bio_list {
+	struct bio *head;
+	struct bio *tail;
+};
+
+typedef __u32 blk_opf_t;
+
+typedef u8 blk_status_t;
+
+typedef u64 sector_t;
+
+struct bvec_iter {
+	sector_t bi_sector;
+	unsigned int bi_size;
+	unsigned int bi_idx;
+	unsigned int bi_bvec_done;
+} __attribute__((packed));
+
+typedef unsigned int blk_qc_t;
+
+typedef void bio_end_io_t(struct bio *);
+
+struct bio_issue {
+	u64 value;
+};
+
+struct bio_vec {
+	struct page *bv_page;
+	unsigned int bv_len;
+	unsigned int bv_offset;
+};
+
+struct blkcg_gq;
+
+struct bio_crypt_ctx;
+
+struct bio_set;
+
+struct bio {
+	struct bio *bi_next;
+	struct block_device *bi_bdev;
+	blk_opf_t bi_opf;
+	unsigned short bi_flags;
+	unsigned short bi_ioprio;
+	enum rw_hint bi_write_hint;
+	blk_status_t bi_status;
+	atomic_t __bi_remaining;
+	struct bvec_iter bi_iter;
+	blk_qc_t bi_cookie;
+	bio_end_io_t *bi_end_io;
+	void *bi_private;
+	struct blkcg_gq *bi_blkg;
+	struct bio_issue bi_issue;
+	u64 bi_iocost_cost;
+	struct bio_crypt_ctx *bi_crypt_context;
+	bool bi_skip_dm_default_key;
+	union {};
+	unsigned short bi_vcnt;
+	unsigned short bi_max_vecs;
+	atomic_t __bi_cnt;
+	struct bio_vec *bi_io_vec;
+	struct bio_set *bi_pool;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	struct bio_vec bi_inline_vecs[0];
+};
+
+enum dl_dev_state {
+	DL_DEV_NO_DRIVER = 0,
+	DL_DEV_PROBING = 1,
+	DL_DEV_DRIVER_BOUND = 2,
+	DL_DEV_UNBINDING = 3,
+};
+
+struct dev_links_info {
+	struct list_head suppliers;
+	struct list_head consumers;
+	struct list_head defer_sync;
+	enum dl_dev_state status;
+};
+
+struct pm_message {
+	int event;
+};
+
+typedef struct pm_message pm_message_t;
+
+enum rpm_request {
+	RPM_REQ_NONE = 0,
+	RPM_REQ_IDLE = 1,
+	RPM_REQ_SUSPEND = 2,
+	RPM_REQ_AUTOSUSPEND = 3,
+	RPM_REQ_RESUME = 4,
+};
+
+enum rpm_status {
+	RPM_INVALID = -1,
+	RPM_ACTIVE = 0,
+	RPM_RESUMING = 1,
+	RPM_SUSPENDED = 2,
+	RPM_SUSPENDING = 3,
+};
+
+struct wakeup_source;
+
+struct wake_irq;
+
+struct pm_subsys_data;
+
+struct device;
+
+struct dev_pm_qos;
+
+struct dev_pm_info {
+	pm_message_t power_state;
+	unsigned int can_wakeup: 1;
+	unsigned int async_suspend: 1;
+	bool in_dpm_list: 1;
+	bool is_prepared: 1;
+	bool is_suspended: 1;
+	bool is_noirq_suspended: 1;
+	bool is_late_suspended: 1;
+	bool no_pm: 1;
+	bool early_init: 1;
+	bool direct_complete: 1;
+	u32 driver_flags;
+	spinlock_t lock;
+	struct list_head entry;
+	struct completion completion;
+	struct wakeup_source *wakeup;
+	bool wakeup_path: 1;
+	bool syscore: 1;
+	bool no_pm_callbacks: 1;
+	unsigned int must_resume: 1;
+	unsigned int may_skip_resume: 1;
+	struct hrtimer suspend_timer;
+	u64 timer_expires;
+	struct work_struct work;
+	wait_queue_head_t wait_queue;
+	struct wake_irq *wakeirq;
+	atomic_t usage_count;
+	atomic_t child_count;
+	unsigned int disable_depth: 3;
+	unsigned int idle_notification: 1;
+	unsigned int request_pending: 1;
+	unsigned int deferred_resume: 1;
+	unsigned int needs_force_resume: 1;
+	unsigned int runtime_auto: 1;
+	bool ignore_children: 1;
+	unsigned int no_callbacks: 1;
+	unsigned int irq_safe: 1;
+	unsigned int use_autosuspend: 1;
+	unsigned int timer_autosuspends: 1;
+	unsigned int memalloc_noio: 1;
+	unsigned int links_count;
+	enum rpm_request request;
+	enum rpm_status runtime_status;
+	enum rpm_status last_status;
+	int runtime_error;
+	int autosuspend_delay;
+	u64 last_busy;
+	u64 active_time;
+	u64 suspended_time;
+	u64 accounting_timestamp;
+	struct pm_subsys_data *subsys_data;
+	void (*set_latency_tolerance)(struct device *, s32);
+	struct dev_pm_qos *qos;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct irq_domain;
+
+struct msi_device_data;
+
+struct dev_msi_info {
+	struct irq_domain *domain;
+	struct msi_device_data *data;
+};
+
+struct dev_archdata {};
+
+enum device_removable {
+	DEVICE_REMOVABLE_NOT_SUPPORTED = 0,
+	DEVICE_REMOVABLE_UNKNOWN = 1,
+	DEVICE_FIXED = 2,
+	DEVICE_REMOVABLE = 3,
+};
+
+struct device_private;
+
+struct device_type;
+
+struct bus_type;
+
+struct device_driver;
+
+struct dev_pm_domain;
+
+struct dma_map_ops;
+
+struct bus_dma_region;
+
+struct device_dma_parameters;
+
+struct cma;
+
+struct io_tlb_mem;
+
+struct device_node;
+
+struct fwnode_handle;
+
+struct class;
+
+struct iommu_group;
+
+struct dev_iommu;
+
+struct device_physical_location;
+
+struct device {
+	struct kobject kobj;
+	struct device *parent;
+	struct device_private *p;
+	const char *init_name;
+	const struct device_type *type;
+	const struct bus_type *bus;
+	struct device_driver *driver;
+	void *platform_data;
+	void *driver_data;
+	struct mutex mutex;
+	struct dev_links_info links;
+	struct dev_pm_info power;
+	struct dev_pm_domain *pm_domain;
+	struct dev_msi_info msi;
+	const struct dma_map_ops *dma_ops;
+	u64 *dma_mask;
+	u64 coherent_dma_mask;
+	u64 bus_dma_limit;
+	const struct bus_dma_region *dma_range_map;
+	struct device_dma_parameters *dma_parms;
+	struct list_head dma_pools;
+	struct cma *cma_area;
+	struct io_tlb_mem *dma_io_tlb_mem;
+	struct list_head dma_io_tlb_pools;
+	spinlock_t dma_io_tlb_lock;
+	bool dma_uses_io_tlb;
+	struct dev_archdata archdata;
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	dev_t devt;
+	u32 id;
+	spinlock_t devres_lock;
+	struct list_head devres_head;
+	const struct class *class;
+	const struct attribute_group **groups;
+	void (*release)(struct device *);
+	struct iommu_group *iommu_group;
+	struct dev_iommu *iommu;
+	struct device_physical_location *physical_location;
+	enum device_removable removable;
+	bool offline_disabled: 1;
+	bool offline: 1;
+	bool of_node_reused: 1;
+	bool state_synced: 1;
+	bool can_match: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+};
+
+struct request_queue;
+
+struct disk_stats;
+
+struct blk_holder_ops;
+
+struct partition_meta_info;
+
+struct block_device {
+	sector_t bd_start_sect;
+	sector_t bd_nr_sectors;
+	struct gendisk *bd_disk;
+	struct request_queue *bd_queue;
+	struct disk_stats __attribute__((btf_type_tag("percpu"))) *bd_stats;
+	unsigned long bd_stamp;
+	bool bd_read_only;
+	u8 bd_partno;
+	bool bd_write_holder;
+	bool bd_has_submit_bio;
+	dev_t bd_dev;
+	atomic_t bd_openers;
+	spinlock_t bd_size_lock;
+	struct inode *bd_inode;
+	void *bd_claiming;
+	void *bd_holder;
+	const struct blk_holder_ops *bd_holder_ops;
+	struct mutex bd_holder_lock;
+	int bd_fsfreeze_count;
+	int bd_holders;
+	struct kobject *bd_holder_dir;
+	struct mutex bd_fsfreeze_mutex;
+	struct super_block *bd_fsfreeze_sb;
+	struct partition_meta_info *bd_meta_info;
+	bool bd_ro_warned;
+	struct device bd_device;
+};
+
+typedef void *mempool_alloc_t(gfp_t, void *);
+
+typedef void mempool_free_t(void *, void *);
+
+struct mempool_s {
+	spinlock_t lock;
+	int min_nr;
+	int curr_nr;
+	void **elements;
+	void *pool_data;
+	mempool_alloc_t *alloc;
+	mempool_free_t *free;
+	wait_queue_head_t wait;
+};
+
+typedef struct mempool_s mempool_t;
+
+struct bio_alloc_cache;
+
+struct bio_set {
+	struct kmem_cache *bio_slab;
+	unsigned int front_pad;
+	struct bio_alloc_cache __attribute__((btf_type_tag("percpu"))) *cache;
+	mempool_t bio_pool;
+	mempool_t bvec_pool;
+	unsigned int back_pad;
+	spinlock_t rescue_lock;
+	struct bio_list rescue_list;
+	struct work_struct rescue_work;
+	struct workqueue_struct *rescue_workqueue;
+	struct hlist_node cpuhp_dead;
+};
+
+typedef unsigned int blk_mode_t;
+
+struct block_device_operations;
+
+struct timer_rand_state;
+
+struct disk_events;
+
+struct badblocks;
+
+struct blk_independent_access_ranges;
+
+struct gendisk {
+	int major;
+	int first_minor;
+	int minors;
+	char disk_name[32];
+	unsigned short events;
+	unsigned short event_flags;
+	struct xarray part_tbl;
+	struct block_device *part0;
+	const struct block_device_operations *fops;
+	struct request_queue *queue;
+	void *private_data;
+	struct bio_set bio_split;
+	int flags;
+	unsigned long state;
+	struct mutex open_mutex;
+	unsigned int open_partitions;
+	struct backing_dev_info *bdi;
+	struct kobject queue_kobj;
+	struct kobject *slave_dir;
+	struct list_head slave_bdevs;
+	struct timer_rand_state *random;
+	atomic_t sync_io;
+	struct disk_events *ev;
+	unsigned int nr_zones;
+	unsigned int max_open_zones;
+	unsigned int max_active_zones;
+	unsigned long *conv_zones_bitmap;
+	unsigned long *seq_zones_wlock;
+	int node_id;
+	struct badblocks *bb;
+	struct lockdep_map lockdep_map;
+	u64 diskseq;
+	blk_mode_t open_mode;
+	struct blk_independent_access_ranges *ia_ranges;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct blk_zone;
+
+typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);
+
+enum blk_unique_id {
+	BLK_UID_T10 = 1,
+	BLK_UID_EUI64 = 2,
+	BLK_UID_NAA = 3,
+};
+
+struct io_comp_batch;
+
+struct hd_geometry;
+
+struct pr_ops;
+
+struct block_device_operations {
+	void (*submit_bio)(struct bio *);
+	int (*poll_bio)(struct bio *, struct io_comp_batch *, unsigned int);
+	int (*open)(struct gendisk *, blk_mode_t);
+	void (*release)(struct gendisk *);
+	int (*ioctl)(struct block_device *, blk_mode_t, unsigned int, unsigned long);
+	int (*compat_ioctl)(struct block_device *, blk_mode_t, unsigned int, unsigned long);
+	unsigned int (*check_events)(struct gendisk *, unsigned int);
+	void (*unlock_native_capacity)(struct gendisk *);
+	int (*getgeo)(struct block_device *, struct hd_geometry *);
+	int (*set_read_only)(struct block_device *, bool);
+	void (*free_disk)(struct gendisk *);
+	void (*swap_slot_free_notify)(struct block_device *, unsigned long);
+	int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);
+	char * (*devnode)(struct gendisk *, umode_t *);
+	int (*get_unique_id)(struct gendisk *, u8 *, enum blk_unique_id);
+	struct module *owner;
+	const struct pr_ops *pr_ops;
+	int (*alternative_gpt_sector)(struct gendisk *, sector_t *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct request;
+
+struct io_comp_batch {
+	struct request *req_list;
+	bool need_ts;
+	void (*complete)(struct io_comp_batch *);
+};
+
+struct blk_zone {
+	__u64 start;
+	__u64 len;
+	__u64 wp;
+	__u8 type;
+	__u8 cond;
+	__u8 non_seq;
+	__u8 reset;
+	__u8 resv[4];
+	__u64 capacity;
+	__u8 reserved[24];
+};
+
+enum pr_type {
+	PR_WRITE_EXCLUSIVE = 1,
+	PR_EXCLUSIVE_ACCESS = 2,
+	PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
+	PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
+	PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
+	PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
+};
+
+struct pr_keys;
+
+struct pr_held_reservation;
+
+struct pr_ops {
+	int (*pr_register)(struct block_device *, u64, u64, u32);
+	int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);
+	int (*pr_release)(struct block_device *, u64, enum pr_type);
+	int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);
+	int (*pr_clear)(struct block_device *, u64);
+	int (*pr_read_keys)(struct block_device *, struct pr_keys *);
+	int (*pr_read_reservation)(struct block_device *, struct pr_held_reservation *);
+};
+
+enum blk_bounce {
+	BLK_BOUNCE_NONE = 0,
+	BLK_BOUNCE_HIGH = 1,
+};
+
+enum blk_zoned_model {
+	BLK_ZONED_NONE = 0,
+	BLK_ZONED_HA = 1,
+	BLK_ZONED_HM = 2,
+};
+
+struct queue_limits {
+	enum blk_bounce bounce;
+	unsigned long seg_boundary_mask;
+	unsigned long virt_boundary_mask;
+	unsigned int max_hw_sectors;
+	unsigned int max_dev_sectors;
+	unsigned int chunk_sectors;
+	unsigned int max_sectors;
+	unsigned int max_user_sectors;
+	unsigned int max_segment_size;
+	unsigned int physical_block_size;
+	unsigned int logical_block_size;
+	unsigned int alignment_offset;
+	unsigned int io_min;
+	unsigned int io_opt;
+	unsigned int max_discard_sectors;
+	unsigned int max_hw_discard_sectors;
+	unsigned int max_secure_erase_sectors;
+	unsigned int max_write_zeroes_sectors;
+	unsigned int max_zone_append_sectors;
+	unsigned int discard_granularity;
+	unsigned int discard_alignment;
+	unsigned int zone_write_granularity;
+	unsigned short max_segments;
+	unsigned short max_integrity_segments;
+	unsigned short max_discard_segments;
+	unsigned char misaligned;
+	unsigned char discard_misaligned;
+	unsigned char raid_partial_stripes_expensive;
+	bool sub_page_limits;
+	enum blk_zoned_model zoned;
+	unsigned int dma_alignment;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+};
+
+struct elevator_queue;
+
+struct blk_queue_stats;
+
+struct rq_qos;
+
+struct blk_mq_ops;
+
+struct blk_mq_ctx;
+
+struct blk_crypto_profile;
+
+struct blk_mq_tags;
+
+struct blk_flush_queue;
+
+struct throtl_data;
+
+struct blk_mq_tag_set;
+
+struct request_queue {
+	struct request *last_merge;
+	struct elevator_queue *elevator;
+	struct percpu_ref q_usage_counter;
+	struct blk_queue_stats *stats;
+	struct rq_qos *rq_qos;
+	struct mutex rq_qos_mutex;
+	const struct blk_mq_ops *mq_ops;
+	struct blk_mq_ctx __attribute__((btf_type_tag("percpu"))) *queue_ctx;
+	unsigned int queue_depth;
+	struct xarray hctx_table;
+	unsigned int nr_hw_queues;
+	void *queuedata;
+	unsigned long queue_flags;
+	atomic_t pm_only;
+	int id;
+	spinlock_t queue_lock;
+	struct gendisk *disk;
+	refcount_t refs;
+	struct kobject *mq_kobj;
+	struct device *dev;
+	enum rpm_status rpm_status;
+	unsigned long nr_requests;
+	unsigned int dma_pad_mask;
+	struct blk_crypto_profile *crypto_profile;
+	struct kobject *crypto_kobject;
+	unsigned int rq_timeout;
+	struct timer_list timeout;
+	struct work_struct timeout_work;
+	atomic_t nr_active_requests_shared_tags;
+	struct blk_mq_tags *sched_shared_tags;
+	struct list_head icq_list;
+	unsigned long blkcg_pols[1];
+	struct blkcg_gq *root_blkg;
+	struct list_head blkg_list;
+	struct mutex blkcg_mutex;
+	struct queue_limits limits;
+	unsigned int required_elevator_features;
+	int node;
+	struct blk_flush_queue *fq;
+	struct list_head flush_list;
+	struct list_head requeue_list;
+	spinlock_t requeue_lock;
+	struct delayed_work requeue_work;
+	struct mutex sysfs_lock;
+	struct mutex sysfs_dir_lock;
+	struct list_head unused_hctx_list;
+	spinlock_t unused_hctx_lock;
+	int mq_freeze_depth;
+	struct throtl_data *td;
+	struct callback_head callback_head;
+	wait_queue_head_t mq_freeze_wq;
+	struct mutex mq_freeze_lock;
+	int quiesce_depth;
+	struct blk_mq_tag_set *tag_set;
+	struct list_head tag_set_list;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct dentry *rqos_debugfs_dir;
+	struct mutex debugfs_mutex;
+	bool mq_sysfs_init_done;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum blk_eh_timer_return {
+	BLK_EH_DONE = 0,
+	BLK_EH_RESET_TIMER = 1,
+};
+
+struct blk_mq_hw_ctx;
+
+struct blk_mq_queue_data;
+
+struct blk_mq_ops {
+	blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
+	void (*commit_rqs)(struct blk_mq_hw_ctx *);
+	void (*queue_rqs)(struct request **);
+	int (*get_budget)(struct request_queue *);
+	void (*put_budget)(struct request_queue *, int);
+	void (*set_rq_budget_token)(struct request *, int);
+	int (*get_rq_budget_token)(struct request *);
+	enum blk_eh_timer_return (*timeout)(struct request *);
+	int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
+	void (*complete)(struct request *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
+	void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
+	void (*cleanup_rq)(struct request *);
+	bool (*busy)(struct request_queue *);
+	void (*map_queues)(struct blk_mq_tag_set *);
+	void (*show_rq)(struct seq_file *, struct request *);
+	u64 android_kabi_reserved1;
+};
+
+struct blk_mq_ctxs;
+
+struct blk_mq_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head rq_lists[3];
+		long: 64;
+	};
+	unsigned int cpu;
+	unsigned short index_hw[3];
+	struct blk_mq_hw_ctx *hctxs[3];
+	struct request_queue *queue;
+	struct blk_mq_ctxs *ctxs;
+	struct kobject kobj;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct dev_pm_ops;
+
+struct device_type {
+	const char *name;
+	const struct attribute_group **groups;
+	int (*uevent)(const struct device *, struct kobj_uevent_env *);
+	char * (*devnode)(const struct device *, umode_t *, kuid_t *, kgid_t *);
+	void (*release)(struct device *);
+	const struct dev_pm_ops *pm;
+};
+
+struct dev_pm_ops {
+	int (*prepare)(struct device *);
+	void (*complete)(struct device *);
+	int (*suspend)(struct device *);
+	int (*resume)(struct device *);
+	int (*freeze)(struct device *);
+	int (*thaw)(struct device *);
+	int (*poweroff)(struct device *);
+	int (*restore)(struct device *);
+	int (*suspend_late)(struct device *);
+	int (*resume_early)(struct device *);
+	int (*freeze_late)(struct device *);
+	int (*thaw_early)(struct device *);
+	int (*poweroff_late)(struct device *);
+	int (*restore_early)(struct device *);
+	int (*suspend_noirq)(struct device *);
+	int (*resume_noirq)(struct device *);
+	int (*freeze_noirq)(struct device *);
+	int (*thaw_noirq)(struct device *);
+	int (*poweroff_noirq)(struct device *);
+	int (*restore_noirq)(struct device *);
+	int (*runtime_suspend)(struct device *);
+	int (*runtime_resume)(struct device *);
+	int (*runtime_idle)(struct device *);
+	u64 android_kabi_reserved1;
+};
+
+struct iommu_ops;
+
+struct bus_type {
+	const char *name;
+	const char *dev_name;
+	const struct attribute_group **bus_groups;
+	const struct attribute_group **dev_groups;
+	const struct attribute_group **drv_groups;
+	int (*match)(struct device *, struct device_driver *);
+	int (*uevent)(const struct device *, struct kobj_uevent_env *);
+	int (*probe)(struct device *);
+	void (*sync_state)(struct device *);
+	void (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+	int (*online)(struct device *);
+	int (*offline)(struct device *);
+	int (*suspend)(struct device *, pm_message_t);
+	int (*resume)(struct device *);
+	int (*num_vf)(struct device *);
+	int (*dma_configure)(struct device *);
+	void (*dma_cleanup)(struct device *);
+	const struct dev_pm_ops *pm;
+	const struct iommu_ops *iommu_ops;
+	bool need_parent_lock;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum probe_type {
+	PROBE_DEFAULT_STRATEGY = 0,
+	PROBE_PREFER_ASYNCHRONOUS = 1,
+	PROBE_FORCE_SYNCHRONOUS = 2,
+};
+
+struct of_device_id;
+
+struct acpi_device_id;
+
+struct driver_private;
+
+struct device_driver {
+	const char *name;
+	const struct bus_type *bus;
+	struct module *owner;
+	const char *mod_name;
+	bool suppress_bind_attrs;
+	enum probe_type probe_type;
+	const struct of_device_id *of_match_table;
+	const struct acpi_device_id *acpi_match_table;
+	int (*probe)(struct device *);
+	void (*sync_state)(struct device *);
+	int (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+	int (*suspend)(struct device *, pm_message_t);
+	int (*resume)(struct device *);
+	const struct attribute_group **groups;
+	const struct attribute_group **dev_groups;
+	const struct dev_pm_ops *pm;
+	void (*coredump)(struct device *);
+	struct driver_private *p;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct of_device_id {
+	char name[32];
+	char type[32];
+	char compatible[128];
+	const void *data;
+};
+
+typedef unsigned long kernel_ulong_t;
+
+struct acpi_device_id {
+	__u8 id[16];
+	kernel_ulong_t driver_data;
+	__u32 cls;
+	__u32 cls_msk;
+};
+
+enum iommu_cap {
+	IOMMU_CAP_CACHE_COHERENCY = 0,
+	IOMMU_CAP_NOEXEC = 1,
+	IOMMU_CAP_PRE_BOOT_PROTECTION = 2,
+	IOMMU_CAP_ENFORCE_CACHE_COHERENCY = 3,
+	IOMMU_CAP_DEFERRED_FLUSH = 4,
+};
+
+enum iommu_dev_features {
+	IOMMU_DEV_FEAT_SVA = 0,
+	IOMMU_DEV_FEAT_IOPF = 1,
+};
+
+typedef unsigned int ioasid_t;
+
+struct iommu_domain;
+
+struct iommu_device;
+
+struct of_phandle_args;
+
+struct iommu_fault_event;
+
+struct iommu_page_response;
+
+struct iommu_domain_ops;
+
+struct iommu_ops {
+	bool (*capable)(struct device *, enum iommu_cap);
+	void * (*hw_info)(struct device *, u32 *, u32 *);
+	struct iommu_domain * (*domain_alloc)(unsigned int);
+	struct iommu_device * (*probe_device)(struct device *);
+	void (*release_device)(struct device *);
+	void (*probe_finalize)(struct device *);
+	void (*set_platform_dma_ops)(struct device *);
+	struct iommu_group * (*device_group)(struct device *);
+	void (*get_resv_regions)(struct device *, struct list_head *);
+	int (*of_xlate)(struct device *, struct of_phandle_args *);
+	bool (*is_attach_deferred)(struct device *);
+	int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
+	int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
+	int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
+	int (*def_domain_type)(struct device *);
+	void (*remove_dev_pasid)(struct device *, ioasid_t);
+	const struct iommu_domain_ops *default_domain_ops;
+	unsigned long pgsize_bitmap;
+	struct module *owner;
+};
+
+struct wakeup_source {
+	const char *name;
+	int id;
+	struct list_head entry;
+	spinlock_t lock;
+	struct wake_irq *wakeirq;
+	struct timer_list timer;
+	unsigned long timer_expires;
+	ktime_t total_time;
+	ktime_t max_time;
+	ktime_t last_time;
+	ktime_t start_prevent_time;
+	ktime_t prevent_sleep_time;
+	unsigned long event_count;
+	unsigned long active_count;
+	unsigned long relax_count;
+	unsigned long expire_count;
+	unsigned long wakeup_count;
+	struct device *dev;
+	bool active: 1;
+	bool autosleep_enabled: 1;
+};
+
+struct pm_subsys_data {
+	spinlock_t lock;
+	unsigned int refcount;
+};
+
+struct dev_pm_domain {
+	struct dev_pm_ops ops;
+	int (*start)(struct device *);
+	void (*detach)(struct device *, bool);
+	int (*activate)(struct device *);
+	void (*sync)(struct device *);
+	void (*dismiss)(struct device *);
+	int (*set_performance_state)(struct device *, unsigned int);
+	u64 android_kabi_reserved1;
+};
+
+typedef u64 dma_addr_t;
+
+enum dma_data_direction {
+	DMA_BIDIRECTIONAL = 0,
+	DMA_TO_DEVICE = 1,
+	DMA_FROM_DEVICE = 2,
+	DMA_NONE = 3,
+};
+
+typedef u64 phys_addr_t;
+
+struct sg_table;
+
+struct scatterlist;
+
+struct dma_map_ops {
+	unsigned int flags;
+	void * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, unsigned long);
+	void (*free)(struct device *, size_t, void *, dma_addr_t, unsigned long);
+	struct page * (*alloc_pages)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);
+	void (*free_pages)(struct device *, size_t, struct page *, dma_addr_t, enum dma_data_direction);
+	struct sg_table * (*alloc_noncontiguous)(struct device *, size_t, enum dma_data_direction, gfp_t, unsigned long);
+	void (*free_noncontiguous)(struct device *, size_t, struct sg_table *, enum dma_data_direction);
+	int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, unsigned long);
+	int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, unsigned long);
+	dma_addr_t (*map_page)(struct device *, struct page *, unsigned long, size_t, enum dma_data_direction, unsigned long);
+	void (*unmap_page)(struct device *, dma_addr_t, size_t, enum dma_data_direction, unsigned long);
+	int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, unsigned long);
+	void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, unsigned long);
+	dma_addr_t (*map_resource)(struct device *, phys_addr_t, size_t, enum dma_data_direction, unsigned long);
+	void (*unmap_resource)(struct device *, dma_addr_t, size_t, enum dma_data_direction, unsigned long);
+	void (*sync_single_for_cpu)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
+	void (*sync_single_for_device)(struct device *, dma_addr_t, size_t, enum dma_data_direction);
+	void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction);
+	void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction);
+	void (*cache_sync)(struct device *, void *, size_t, enum dma_data_direction);
+	int (*dma_supported)(struct device *, u64);
+	u64 (*get_required_mask)(struct device *);
+	size_t (*max_mapping_size)(struct device *);
+	size_t (*opt_mapping_size)();
+	unsigned long (*get_merge_boundary)(struct device *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct bus_dma_region {
+	phys_addr_t cpu_start;
+	dma_addr_t dma_start;
+	u64 size;
+	u64 offset;
+};
+
+struct device_dma_parameters {
+	unsigned int max_segment_size;
+	unsigned int min_align_mask;
+	unsigned long segment_boundary_mask;
+};
+
+typedef u32 phandle;
+
+struct fwnode_operations;
+
+struct fwnode_handle {
+	struct fwnode_handle *secondary;
+	const struct fwnode_operations *ops;
+	struct device *dev;
+	struct list_head suppliers;
+	struct list_head consumers;
+	u8 flags;
+	u64 android_kabi_reserved1;
+};
+
+struct property;
+
+struct device_node {
+	const char *name;
+	phandle phandle;
+	const char *full_name;
+	struct fwnode_handle fwnode;
+	struct property *properties;
+	struct property *deadprops;
+	struct device_node *parent;
+	struct device_node *child;
+	struct device_node *sibling;
+	struct kobject kobj;
+	unsigned long _flags;
+	void *data;
+};
+
+enum dev_dma_attr {
+	DEV_DMA_NOT_SUPPORTED = 0,
+	DEV_DMA_NON_COHERENT = 1,
+	DEV_DMA_COHERENT = 2,
+};
+
+struct fwnode_reference_args;
+
+struct fwnode_endpoint;
+
+struct fwnode_operations {
+	struct fwnode_handle * (*get)(struct fwnode_handle *);
+	void (*put)(struct fwnode_handle *);
+	bool (*device_is_available)(const struct fwnode_handle *);
+	const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);
+	bool (*device_dma_supported)(const struct fwnode_handle *);
+	enum dev_dma_attr (*device_get_dma_attr)(const struct fwnode_handle *);
+	bool (*property_present)(const struct fwnode_handle *, const char *);
+	int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);
+	int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);
+	const char * (*get_name)(const struct fwnode_handle *);
+	const char * (*get_name_prefix)(const struct fwnode_handle *);
+	struct fwnode_handle * (*get_parent)(const struct fwnode_handle *);
+	struct fwnode_handle * (*get_next_child_node)(const struct fwnode_handle *, struct fwnode_handle *);
+	struct fwnode_handle * (*get_named_child_node)(const struct fwnode_handle *, const char *);
+	int (*get_reference_args)(const struct fwnode_handle *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args *);
+	struct fwnode_handle * (*graph_get_next_endpoint)(const struct fwnode_handle *, struct fwnode_handle *);
+	struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);
+	struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);
+	int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);
+	void * (*iomap)(struct fwnode_handle *, int);
+	int (*irq_get)(const struct fwnode_handle *, unsigned int);
+	int (*add_links)(struct fwnode_handle *);
+};
+
+struct fwnode_reference_args {
+	struct fwnode_handle *fwnode;
+	unsigned int nargs;
+	u64 args[8];
+};
+
+struct fwnode_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct fwnode_handle *local_fwnode;
+};
+
+struct property {
+	char *name;
+	int length;
+	void *value;
+	struct property *next;
+	struct bin_attribute attr;
+};
+
+struct class {
+	const char *name;
+	const struct attribute_group **class_groups;
+	const struct attribute_group **dev_groups;
+	int (*dev_uevent)(const struct device *, struct kobj_uevent_env *);
+	char * (*devnode)(const struct device *, umode_t *);
+	void (*class_release)(const struct class *);
+	void (*dev_release)(struct device *);
+	int (*shutdown_pre)(struct device *);
+	const struct kobj_ns_type_operations *ns_type;
+	const void * (*namespace)(const struct device *);
+	void (*get_ownership)(const struct device *, kuid_t *, kgid_t *);
+	const struct dev_pm_ops *pm;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum kobj_ns_type {
+	KOBJ_NS_TYPE_NONE = 0,
+	KOBJ_NS_TYPE_NET = 1,
+	KOBJ_NS_TYPES = 2,
+};
+
+struct kobj_ns_type_operations {
+	enum kobj_ns_type type;
+	bool (*current_may_mount)();
+	void * (*grab_current_ns)();
+	const void * (*netlink_ns)(struct sock *);
+	const void * (*initial_ns)();
+	void (*drop_ns)(void *);
+};
+
+enum device_physical_location_panel {
+	DEVICE_PANEL_TOP = 0,
+	DEVICE_PANEL_BOTTOM = 1,
+	DEVICE_PANEL_LEFT = 2,
+	DEVICE_PANEL_RIGHT = 3,
+	DEVICE_PANEL_FRONT = 4,
+	DEVICE_PANEL_BACK = 5,
+	DEVICE_PANEL_UNKNOWN = 6,
+};
+
+enum device_physical_location_vertical_position {
+	DEVICE_VERT_POS_UPPER = 0,
+	DEVICE_VERT_POS_CENTER = 1,
+	DEVICE_VERT_POS_LOWER = 2,
+};
+
+enum device_physical_location_horizontal_position {
+	DEVICE_HORI_POS_LEFT = 0,
+	DEVICE_HORI_POS_CENTER = 1,
+	DEVICE_HORI_POS_RIGHT = 2,
+};
+
+struct device_physical_location {
+	enum device_physical_location_panel panel;
+	enum device_physical_location_vertical_position vertical_position;
+	enum device_physical_location_horizontal_position horizontal_position;
+	bool dock;
+	bool lid;
+};
+
+struct bio_alloc_cache {
+	struct bio *free_list;
+	struct bio *free_list_irq;
+	unsigned int nr;
+	unsigned int nr_irq;
+};
+
+struct fprop_local_percpu {
+	struct percpu_counter events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+enum wb_reason {
+	WB_REASON_BACKGROUND = 0,
+	WB_REASON_VMSCAN = 1,
+	WB_REASON_SYNC = 2,
+	WB_REASON_PERIODIC = 3,
+	WB_REASON_LAPTOP_TIMER = 4,
+	WB_REASON_FS_FREE_SPACE = 5,
+	WB_REASON_FORKER_THREAD = 6,
+	WB_REASON_FOREIGN_FLUSH = 7,
+	WB_REASON_MAX = 8,
+};
+
+struct bdi_writeback {
+	struct backing_dev_info *bdi;
+	unsigned long state;
+	unsigned long last_old_flush;
+	struct list_head b_dirty;
+	struct list_head b_io;
+	struct list_head b_more_io;
+	struct list_head b_dirty_time;
+	spinlock_t list_lock;
+	atomic_t writeback_inodes;
+	struct percpu_counter stat[4];
+	unsigned long bw_time_stamp;
+	unsigned long dirtied_stamp;
+	unsigned long written_stamp;
+	unsigned long write_bandwidth;
+	unsigned long avg_write_bandwidth;
+	unsigned long dirty_ratelimit;
+	unsigned long balanced_dirty_ratelimit;
+	struct fprop_local_percpu completions;
+	int dirty_exceeded;
+	enum wb_reason start_all_reason;
+	spinlock_t work_lock;
+	struct list_head work_list;
+	struct delayed_work dwork;
+	struct delayed_work bw_dwork;
+	struct list_head bdi_node;
+	struct percpu_ref refcnt;
+	struct fprop_local_percpu memcg_completions;
+	struct cgroup_subsys_state *memcg_css;
+	struct cgroup_subsys_state *blkcg_css;
+	struct list_head memcg_node;
+	struct list_head blkcg_node;
+	struct list_head b_attached;
+	struct list_head offline_node;
+	union {
+		struct work_struct release_work;
+		struct callback_head rcu;
+	};
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_oem_data1[2];
+};
+
+struct backing_dev_info {
+	u64 id;
+	struct rb_node rb_node;
+	struct list_head bdi_list;
+	unsigned long ra_pages;
+	unsigned long io_pages;
+	struct kref refcnt;
+	unsigned int capabilities;
+	unsigned int min_ratio;
+	unsigned int max_ratio;
+	unsigned int max_prop_frac;
+	atomic_long_t tot_write_bandwidth;
+	unsigned long last_bdp_sleep;
+	struct bdi_writeback wb;
+	struct list_head wb_list;
+	struct xarray cgwb_tree;
+	struct mutex cgwb_release_mutex;
+	struct rw_semaphore wb_switch_rwsem;
+	wait_queue_head_t wb_waitq;
+	struct device *dev;
+	char dev_name[64];
+	struct device *owner;
+	struct timer_list laptop_mode_wb_timer;
+	struct dentry *debug_dir;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct blk_independent_access_range {
+	struct kobject kobj;
+	sector_t sector;
+	sector_t nr_sectors;
+};
+
+struct blk_independent_access_ranges {
+	struct kobject kobj;
+	bool sysfs_registered;
+	unsigned int nr_ia_ranges;
+	struct blk_independent_access_range ia_range[0];
+};
+
+typedef struct {
+	atomic_long_t a;
+} local_t;
+
+struct disk_stats {
+	u64 nsecs[4];
+	unsigned long sectors[4];
+	unsigned long ios[4];
+	unsigned long merges[4];
+	unsigned long io_ticks;
+	local_t in_flight[2];
+};
+
+struct blk_holder_ops {
+	void (*mark_dead)(struct block_device *, bool);
+	void (*sync)(struct block_device *);
+};
+
+struct partition_meta_info {
+	char uuid[37];
+	u8 volname[64];
+};
+
+struct blk_plug {
+	struct request *mq_list;
+	struct request *cached_rq;
+	unsigned short nr_ios;
+	unsigned short rq_count;
+	bool multiple_queues;
+	bool has_elevator;
+	struct list_head cb_list;
+};
+
+struct reclaim_state {
+	unsigned long reclaimed;
+	struct lru_gen_mm_walk *mm_walk;
+};
+
+struct io_cq;
+
+struct io_context {
+	atomic_long_t refcount;
+	atomic_t active_ref;
+	unsigned short ioprio;
+	spinlock_t lock;
+	struct xarray icq_tree;
+	struct io_cq __attribute__((btf_type_tag("rcu"))) *icq_hint;
+	struct hlist_head icq_list;
+	struct work_struct release_work;
+};
+
+struct io_cq {
+	struct request_queue *q;
+	struct io_context *ioc;
+	union {
+		struct list_head q_node;
+		struct kmem_cache *__rcu_icq_cache;
+	};
+	union {
+		struct hlist_node ioc_node;
+		struct callback_head __rcu_head;
+	};
+	unsigned int flags;
+};
+
+typedef int __kernel_timer_t;
+
+union sigval {
+	int sival_int;
+	void __attribute__((btf_type_tag("user"))) *sival_ptr;
+};
+
+typedef union sigval sigval_t;
+
+typedef __kernel_long_t __kernel_clock_t;
+
+union __sifields {
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+	} _kill;
+	struct {
+		__kernel_timer_t _tid;
+		int _overrun;
+		sigval_t _sigval;
+		int _sys_private;
+	} _timer;
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+		sigval_t _sigval;
+	} _rt;
+	struct {
+		__kernel_pid_t _pid;
+		__kernel_uid32_t _uid;
+		int _status;
+		__kernel_clock_t _utime;
+		__kernel_clock_t _stime;
+	} _sigchld;
+	struct {
+		void __attribute__((btf_type_tag("user"))) *_addr;
+		union {
+			int _trapno;
+			short _addr_lsb;
+			struct {
+				char _dummy_bnd[8];
+				void __attribute__((btf_type_tag("user"))) *_lower;
+				void __attribute__((btf_type_tag("user"))) *_upper;
+			} _addr_bnd;
+			struct {
+				char _dummy_pkey[8];
+				__u32 _pkey;
+			} _addr_pkey;
+			struct {
+				unsigned long _data;
+				__u32 _type;
+				__u32 _flags;
+			} _perf;
+		};
+	} _sigfault;
+	struct {
+		long _band;
+		int _fd;
+	} _sigpoll;
+	struct {
+		void __attribute__((btf_type_tag("user"))) *_call_addr;
+		int _syscall;
+		unsigned int _arch;
+	} _sigsys;
+};
+
+struct kernel_siginfo {
+	struct {
+		int si_signo;
+		int si_errno;
+		int si_code;
+		union __sifields _sifields;
+	};
+};
+
+struct robust_list {
+	struct robust_list __attribute__((btf_type_tag("user"))) *next;
+};
+
+struct robust_list_head {
+	struct robust_list list;
+	long futex_offset;
+	struct robust_list __attribute__((btf_type_tag("user"))) *list_op_pending;
+};
+
+typedef u32 compat_uptr_t;
+
+struct compat_robust_list {
+	compat_uptr_t next;
+};
+
+typedef s32 compat_long_t;
+
+struct compat_robust_list_head {
+	struct compat_robust_list list;
+	compat_long_t futex_offset;
+	compat_uptr_t list_op_pending;
+};
+
+struct perf_event_groups {
+	struct rb_root tree;
+	u64 index;
+};
+
+struct perf_event_context {
+	raw_spinlock_t lock;
+	struct mutex mutex;
+	struct list_head pmu_ctx_list;
+	struct perf_event_groups pinned_groups;
+	struct perf_event_groups flexible_groups;
+	struct list_head event_list;
+	int nr_events;
+	int nr_user;
+	int is_active;
+	int nr_task_data;
+	int nr_stat;
+	int nr_freq;
+	int rotate_disable;
+	refcount_t refcount;
+	struct task_struct *task;
+	u64 time;
+	u64 timestamp;
+	u64 timeoffset;
+	struct perf_event_context *parent_ctx;
+	u64 parent_gen;
+	u64 generation;
+	int pin_count;
+	struct callback_head callback_head;
+	local_t nr_pending;
+};
+
+struct task_delay_info {
+	raw_spinlock_t lock;
+	u64 blkio_start;
+	u64 blkio_delay;
+	u64 swapin_start;
+	u64 swapin_delay;
+	u32 blkio_count;
+	u32 swapin_count;
+	u64 freepages_start;
+	u64 freepages_delay;
+	u64 thrashing_start;
+	u64 thrashing_delay;
+	u64 compact_start;
+	u64 compact_delay;
+	u64 wpcopy_start;
+	u64 wpcopy_delay;
+	u64 irq_delay;
+	u32 freepages_count;
+	u32 thrashing_count;
+	u32 compact_count;
+	u32 wpcopy_count;
+	u32 irq_count;
+};
+
+typedef void (*kunit_try_catch_func_t)(void *);
+
+struct kunit_try_catch {
+	struct kunit *test;
+	struct completion *try_completion;
+	int try_result;
+	kunit_try_catch_func_t try;
+	kunit_try_catch_func_t catch;
+	void *context;
+};
+
+enum kunit_status {
+	KUNIT_SUCCESS = 0,
+	KUNIT_FAILURE = 1,
+	KUNIT_SKIPPED = 2,
+};
+
+struct kunit {
+	void *priv;
+	const char *name;
+	char *log;
+	struct kunit_try_catch try_catch;
+	const void *param_value;
+	int param_index;
+	spinlock_t lock;
+	enum kunit_status status;
+	struct list_head resources;
+	char status_comment[256];
+};
+
+struct arch_uprobe_task {
+	unsigned long saved_scratch_register;
+	unsigned int saved_trap_nr;
+	unsigned int saved_tf;
+};
+
+enum uprobe_task_state {
+	UTASK_RUNNING = 0,
+	UTASK_SSTEP = 1,
+	UTASK_SSTEP_ACK = 2,
+	UTASK_SSTEP_TRAPPED = 3,
+};
+
+struct uprobe;
+
+struct return_instance;
+
+struct uprobe_task {
+	enum uprobe_task_state state;
+	union {
+		struct {
+			struct arch_uprobe_task autask;
+			unsigned long vaddr;
+		};
+		struct {
+			struct callback_head dup_xol_work;
+			unsigned long dup_xol_addr;
+		};
+	};
+	struct uprobe *active_uprobe;
+	unsigned long xol_vaddr;
+	struct return_instance *return_instances;
+	unsigned int depth;
+};
+
+struct return_instance {
+	struct uprobe *uprobe;
+	unsigned long func;
+	unsigned long stack;
+	unsigned long orig_ret_vaddr;
+	bool chained;
+	struct return_instance *next;
+};
+
+struct vm_struct {
+	struct vm_struct *next;
+	void *addr;
+	unsigned long size;
+	unsigned long flags;
+	struct page **pages;
+	unsigned int page_order;
+	unsigned int nr_pages;
+	phys_addr_t phys_addr;
+	const void *caller;
+	u64 android_oem_data1;
+};
+
+enum perf_event_state {
+	PERF_EVENT_STATE_DEAD = -4,
+	PERF_EVENT_STATE_EXIT = -3,
+	PERF_EVENT_STATE_ERROR = -2,
+	PERF_EVENT_STATE_OFF = -1,
+	PERF_EVENT_STATE_INACTIVE = 0,
+	PERF_EVENT_STATE_ACTIVE = 1,
+};
+
+typedef struct {
+	local_t a;
+} local64_t;
+
+struct perf_event_attr {
+	__u32 type;
+	__u32 size;
+	__u64 config;
+	union {
+		__u64 sample_period;
+		__u64 sample_freq;
+	};
+	__u64 sample_type;
+	__u64 read_format;
+	__u64 disabled: 1;
+	__u64 inherit: 1;
+	__u64 pinned: 1;
+	__u64 exclusive: 1;
+	__u64 exclude_user: 1;
+	__u64 exclude_kernel: 1;
+	__u64 exclude_hv: 1;
+	__u64 exclude_idle: 1;
+	__u64 mmap: 1;
+	__u64 comm: 1;
+	__u64 freq: 1;
+	__u64 inherit_stat: 1;
+	__u64 enable_on_exec: 1;
+	__u64 task: 1;
+	__u64 watermark: 1;
+	__u64 precise_ip: 2;
+	__u64 mmap_data: 1;
+	__u64 sample_id_all: 1;
+	__u64 exclude_host: 1;
+	__u64 exclude_guest: 1;
+	__u64 exclude_callchain_kernel: 1;
+	__u64 exclude_callchain_user: 1;
+	__u64 mmap2: 1;
+	__u64 comm_exec: 1;
+	__u64 use_clockid: 1;
+	__u64 context_switch: 1;
+	__u64 write_backward: 1;
+	__u64 namespaces: 1;
+	__u64 ksymbol: 1;
+	__u64 bpf_event: 1;
+	__u64 aux_output: 1;
+	__u64 cgroup: 1;
+	__u64 text_poke: 1;
+	__u64 build_id: 1;
+	__u64 inherit_thread: 1;
+	__u64 remove_on_exec: 1;
+	__u64 sigtrap: 1;
+	__u64 __reserved_1: 26;
+	union {
+		__u32 wakeup_events;
+		__u32 wakeup_watermark;
+	};
+	__u32 bp_type;
+	union {
+		__u64 bp_addr;
+		__u64 kprobe_func;
+		__u64 uprobe_path;
+		__u64 config1;
+	};
+	union {
+		__u64 bp_len;
+		__u64 kprobe_addr;
+		__u64 probe_offset;
+		__u64 config2;
+	};
+	__u64 branch_sample_type;
+	__u64 sample_regs_user;
+	__u32 sample_stack_user;
+	__s32 clockid;
+	__u64 sample_regs_intr;
+	__u32 aux_watermark;
+	__u16 sample_max_stack;
+	__u16 __reserved_2;
+	__u32 aux_sample_size;
+	__u32 __reserved_3;
+	__u64 sig_data;
+	__u64 config3;
+};
+
+struct hw_perf_event_extra {
+	u64 config;
+	unsigned int reg;
+	int alloc;
+	int idx;
+};
+
+struct arch_hw_breakpoint {
+	unsigned long address;
+	unsigned long mask;
+	u8 len;
+	u8 type;
+};
+
+struct rhlist_head {
+	struct rhash_head rhead;
+	struct rhlist_head __attribute__((btf_type_tag("rcu"))) *next;
+};
+
+struct hw_perf_event {
+	union {
+		struct {
+			u64 config;
+			u64 last_tag;
+			unsigned long config_base;
+			unsigned long event_base;
+			int event_base_rdpmc;
+			int idx;
+			int last_cpu;
+			int flags;
+			struct hw_perf_event_extra extra_reg;
+			struct hw_perf_event_extra branch_reg;
+		};
+		struct {
+			struct hrtimer hrtimer;
+		};
+		struct {
+			struct list_head tp_list;
+		};
+		struct {
+			u64 pwr_acc;
+			u64 ptsc;
+		};
+		struct {
+			struct arch_hw_breakpoint info;
+			struct rhlist_head bp_list;
+		};
+		struct {
+			u8 iommu_bank;
+			u8 iommu_cntr;
+			u16 padding;
+			u64 conf;
+			u64 conf1;
+		};
+	};
+	struct task_struct *target;
+	void *addr_filters;
+	unsigned long addr_filters_gen;
+	int state;
+	local64_t prev_count;
+	u64 sample_period;
+	union {
+		struct {
+			u64 last_period;
+			local64_t period_left;
+		};
+		struct {
+			u64 saved_metric;
+			u64 saved_slots;
+		};
+	};
+	u64 interrupts_seq;
+	u64 interrupts;
+	u64 freq_time_stamp;
+	u64 freq_count_stamp;
+};
+
+struct irq_work {
+	struct __call_single_node node;
+	void (*func)(struct irq_work *);
+	struct rcuwait irqwait;
+};
+
+struct perf_addr_filters_head {
+	struct list_head list;
+	raw_spinlock_t lock;
+	unsigned int nr_file_filters;
+};
+
+struct perf_sample_data;
+
+struct pt_regs;
+
+typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);
+
+struct pmu;
+
+struct perf_event_pmu_context;
+
+struct perf_buffer;
+
+struct fasync_struct;
+
+struct perf_addr_filter_range;
+
+struct event_filter;
+
+struct perf_event {
+	struct list_head event_entry;
+	struct list_head sibling_list;
+	struct list_head active_list;
+	struct rb_node group_node;
+	u64 group_index;
+	struct list_head migrate_entry;
+	struct hlist_node hlist_entry;
+	struct list_head active_entry;
+	int nr_siblings;
+	int event_caps;
+	int group_caps;
+	unsigned int group_generation;
+	struct perf_event *group_leader;
+	struct pmu *pmu;
+	void *pmu_private;
+	enum perf_event_state state;
+	unsigned int attach_state;
+	local64_t count;
+	atomic64_t child_count;
+	u64 total_time_enabled;
+	u64 total_time_running;
+	u64 tstamp;
+	struct perf_event_attr attr;
+	u16 header_size;
+	u16 id_header_size;
+	u16 read_size;
+	struct hw_perf_event hw;
+	struct perf_event_context *ctx;
+	struct perf_event_pmu_context *pmu_ctx;
+	atomic_long_t refcount;
+	atomic64_t child_total_time_enabled;
+	atomic64_t child_total_time_running;
+	struct mutex child_mutex;
+	struct list_head child_list;
+	struct perf_event *parent;
+	int oncpu;
+	int cpu;
+	struct list_head owner_entry;
+	struct task_struct *owner;
+	struct mutex mmap_mutex;
+	atomic_t mmap_count;
+	struct perf_buffer *rb;
+	struct list_head rb_entry;
+	unsigned long rcu_batches;
+	int rcu_pending;
+	wait_queue_head_t waitq;
+	struct fasync_struct *fasync;
+	unsigned int pending_wakeup;
+	unsigned int pending_kill;
+	unsigned int pending_disable;
+	unsigned int pending_sigtrap;
+	unsigned long pending_addr;
+	struct irq_work pending_irq;
+	struct callback_head pending_task;
+	unsigned int pending_work;
+	atomic_t event_limit;
+	struct perf_addr_filters_head addr_filters;
+	struct perf_addr_filter_range *addr_filter_ranges;
+	unsigned long addr_filters_gen;
+	struct perf_event *aux_event;
+	void (*destroy)(struct perf_event *);
+	struct callback_head callback_head;
+	struct pid_namespace *ns;
+	u64 id;
+	atomic64_t lost_samples;
+	u64 (*clock)();
+	perf_overflow_handler_t overflow_handler;
+	void *overflow_handler_context;
+	perf_overflow_handler_t orig_overflow_handler;
+	struct bpf_prog *prog;
+	u64 bpf_cookie;
+	struct trace_event_call *tp_event;
+	struct event_filter *filter;
+	void *security;
+	struct list_head sb_list;
+	__u32 orig_type;
+};
+
+struct perf_cpu_pmu_context;
+
+struct perf_output_handle;
+
+struct pmu {
+	struct list_head entry;
+	struct module *module;
+	struct device *dev;
+	struct device *parent;
+	const struct attribute_group **attr_groups;
+	const struct attribute_group **attr_update;
+	const char *name;
+	int type;
+	int capabilities;
+	int __attribute__((btf_type_tag("percpu"))) *pmu_disable_count;
+	struct perf_cpu_pmu_context __attribute__((btf_type_tag("percpu"))) *cpu_pmu_context;
+	atomic_t exclusive_cnt;
+	int task_ctx_nr;
+	int hrtimer_interval_ms;
+	unsigned int nr_addr_filters;
+	void (*pmu_enable)(struct pmu *);
+	void (*pmu_disable)(struct pmu *);
+	int (*event_init)(struct perf_event *);
+	void (*event_mapped)(struct perf_event *, struct mm_struct *);
+	void (*event_unmapped)(struct perf_event *, struct mm_struct *);
+	int (*add)(struct perf_event *, int);
+	void (*del)(struct perf_event *, int);
+	void (*start)(struct perf_event *, int);
+	void (*stop)(struct perf_event *, int);
+	void (*read)(struct perf_event *);
+	void (*start_txn)(struct pmu *, unsigned int);
+	int (*commit_txn)(struct pmu *);
+	void (*cancel_txn)(struct pmu *);
+	int (*event_idx)(struct perf_event *);
+	void (*sched_task)(struct perf_event_pmu_context *, bool);
+	struct kmem_cache *task_ctx_cache;
+	void (*swap_task_ctx)(struct perf_event_pmu_context *, struct perf_event_pmu_context *);
+	void * (*setup_aux)(struct perf_event *, void **, int, bool);
+	void (*free_aux)(void *);
+	long (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, unsigned long);
+	int (*addr_filters_validate)(struct list_head *);
+	void (*addr_filters_sync)(struct perf_event *);
+	int (*aux_output_match)(struct perf_event *);
+	bool (*filter)(struct pmu *, int);
+	int (*check_period)(struct perf_event *, u64);
+};
+
+struct perf_event_pmu_context {
+	struct pmu *pmu;
+	struct perf_event_context *ctx;
+	struct list_head pmu_ctx_entry;
+	struct list_head pinned_active;
+	struct list_head flexible_active;
+	unsigned int embedded: 1;
+	unsigned int nr_events;
+	unsigned int nr_cgroups;
+	atomic_t refcount;
+	struct callback_head callback_head;
+	void *task_ctx_data;
+	int rotate_necessary;
+};
+
+struct perf_cpu_pmu_context {
+	struct perf_event_pmu_context epc;
+	struct perf_event_pmu_context *task_epc;
+	struct list_head sched_cb_entry;
+	int sched_cb_usage;
+	int active_oncpu;
+	int exclusive;
+	raw_spinlock_t hrtimer_lock;
+	struct hrtimer hrtimer;
+	ktime_t hrtimer_interval;
+	unsigned int hrtimer_active;
+};
+
+struct perf_output_handle {
+	struct perf_event *event;
+	struct perf_buffer *rb;
+	unsigned long wakeup;
+	unsigned long size;
+	u64 aux_flags;
+	union {
+		void *addr;
+		unsigned long head;
+	};
+	int page;
+};
+
+struct fasync_struct {
+	rwlock_t fa_lock;
+	int magic;
+	int fa_fd;
+	struct fasync_struct *fa_next;
+	struct file *fa_file;
+	struct callback_head fa_rcu;
+};
+
+struct perf_addr_filter_range {
+	unsigned long start;
+	unsigned long size;
+};
+
+union perf_sample_weight {
+	__u64 full;
+	struct {
+		__u32 var1_dw;
+		__u16 var2_w;
+		__u16 var3_w;
+	};
+};
+
+union perf_mem_data_src {
+	__u64 val;
+	struct {
+		__u64 mem_op: 5;
+		__u64 mem_lvl: 14;
+		__u64 mem_snoop: 5;
+		__u64 mem_lock: 2;
+		__u64 mem_dtlb: 7;
+		__u64 mem_lvl_num: 4;
+		__u64 mem_remote: 1;
+		__u64 mem_snoopx: 2;
+		__u64 mem_blk: 3;
+		__u64 mem_hops: 3;
+		__u64 mem_rsvd: 18;
+	};
+};
+
+struct perf_regs {
+	__u64 abi;
+	struct pt_regs *regs;
+};
+
+struct perf_callchain_entry;
+
+struct perf_raw_record;
+
+struct perf_branch_stack;
+
+struct perf_sample_data {
+	u64 sample_flags;
+	u64 period;
+	u64 dyn_size;
+	u64 type;
+	struct {
+		u32 pid;
+		u32 tid;
+	} tid_entry;
+	u64 time;
+	u64 id;
+	struct {
+		u32 cpu;
+		u32 reserved;
+	} cpu_entry;
+	u64 ip;
+	struct perf_callchain_entry *callchain;
+	struct perf_raw_record *raw;
+	struct perf_branch_stack *br_stack;
+	union perf_sample_weight weight;
+	union perf_mem_data_src data_src;
+	u64 txn;
+	struct perf_regs regs_user;
+	struct perf_regs regs_intr;
+	u64 stack_user_size;
+	u64 stream_id;
+	u64 cgroup;
+	u64 addr;
+	u64 phys_addr;
+	u64 data_page_size;
+	u64 code_page_size;
+	u64 aux_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct perf_callchain_entry {
+	__u64 nr;
+	__u64 ip[0];
+};
+
+typedef unsigned long (*perf_copy_f)(void *, const void *, unsigned long, unsigned long);
+
+struct perf_raw_frag {
+	union {
+		struct perf_raw_frag *next;
+		unsigned long pad;
+	};
+	perf_copy_f copy;
+	void *data;
+	u32 size;
+} __attribute__((packed));
+
+struct perf_raw_record {
+	struct perf_raw_frag frag;
+	u32 size;
+};
+
+struct perf_branch_entry {
+	__u64 from;
+	__u64 to;
+	__u64 mispred: 1;
+	__u64 predicted: 1;
+	__u64 in_tx: 1;
+	__u64 abort: 1;
+	__u64 cycles: 16;
+	__u64 type: 4;
+	__u64 spec: 2;
+	__u64 new_type: 4;
+	__u64 priv: 3;
+	__u64 reserved: 31;
+};
+
+struct perf_branch_stack {
+	__u64 nr;
+	__u64 hw_idx;
+	struct perf_branch_entry entries[0];
+};
+
+struct pt_regs {
+	unsigned long r15;
+	unsigned long r14;
+	unsigned long r13;
+	unsigned long r12;
+	unsigned long bp;
+	unsigned long bx;
+	unsigned long r11;
+	unsigned long r10;
+	unsigned long r9;
+	unsigned long r8;
+	unsigned long ax;
+	unsigned long cx;
+	unsigned long dx;
+	unsigned long si;
+	unsigned long di;
+	unsigned long orig_ax;
+	unsigned long ip;
+	unsigned long cs;
+	unsigned long flags;
+	unsigned long sp;
+	unsigned long ss;
+};
+
+struct trace_event_functions;
+
+struct trace_event {
+	struct hlist_node node;
+	int type;
+	struct trace_event_functions *funcs;
+};
+
+struct trace_event_class;
+
+struct trace_event_call {
+	struct list_head list;
+	struct trace_event_class *class;
+	union {
+		char *name;
+		struct tracepoint *tp;
+	};
+	struct trace_event event;
+	char *print_fmt;
+	struct event_filter *filter;
+	union {
+		void *module;
+		atomic_t refcnt;
+	};
+	void *data;
+	int flags;
+	int perf_refcount;
+	struct hlist_head __attribute__((btf_type_tag("percpu"))) *perf_events;
+	struct bpf_prog_array __attribute__((btf_type_tag("rcu"))) *prog_array;
+	int (*perf_perm)(struct trace_event_call *, struct perf_event *);
+};
+
+enum trace_reg {
+	TRACE_REG_REGISTER = 0,
+	TRACE_REG_UNREGISTER = 1,
+	TRACE_REG_PERF_REGISTER = 2,
+	TRACE_REG_PERF_UNREGISTER = 3,
+	TRACE_REG_PERF_OPEN = 4,
+	TRACE_REG_PERF_CLOSE = 5,
+	TRACE_REG_PERF_ADD = 6,
+	TRACE_REG_PERF_DEL = 7,
+};
+
+struct trace_event_fields;
+
+struct trace_event_class {
+	const char *system;
+	void *probe;
+	void *perf_probe;
+	int (*reg)(struct trace_event_call *, enum trace_reg, void *);
+	struct trace_event_fields *fields_array;
+	struct list_head * (*get_fields)(struct trace_event_call *);
+	struct list_head fields;
+	int (*raw_init)(struct trace_event_call *);
+};
+
+struct trace_event_fields {
+	const char *type;
+	union {
+		struct {
+			const char *name;
+			const int size;
+			const int align;
+			const int is_signed;
+			const int filter_type;
+			const int len;
+		};
+		int (*define_fields)(struct trace_event_call *);
+	};
+};
+
+enum print_line_t {
+	TRACE_TYPE_PARTIAL_LINE = 0,
+	TRACE_TYPE_HANDLED = 1,
+	TRACE_TYPE_UNHANDLED = 2,
+	TRACE_TYPE_NO_CONSUME = 3,
+};
+
+struct trace_iterator;
+
+typedef enum print_line_t (*trace_print_func)(struct trace_iterator *, int, struct trace_event *);
+
+struct trace_event_functions {
+	trace_print_func trace;
+	trace_print_func raw;
+	trace_print_func hex;
+	trace_print_func binary;
+};
+
+struct seq_buf {
+	char *buffer;
+	size_t size;
+	size_t len;
+	loff_t readpos;
+};
+
+struct trace_seq {
+	char buffer[4096];
+	struct seq_buf seq;
+	int full;
+};
+
+typedef struct cpumask cpumask_var_t[1];
+
+struct trace_array;
+
+struct tracer;
+
+struct array_buffer;
+
+struct ring_buffer_iter;
+
+struct trace_entry;
+
+struct trace_iterator {
+	struct trace_array *tr;
+	struct tracer *trace;
+	struct array_buffer *array_buffer;
+	void *private;
+	int cpu_file;
+	struct mutex mutex;
+	struct ring_buffer_iter **buffer_iter;
+	unsigned long iter_flags;
+	void *temp;
+	unsigned int temp_size;
+	char *fmt;
+	unsigned int fmt_size;
+	long wait_index;
+	struct trace_seq tmp_seq;
+	cpumask_var_t started;
+	bool snapshot;
+	struct trace_seq seq;
+	struct trace_entry *ent;
+	unsigned long lost_events;
+	int leftover;
+	int ent_size;
+	int cpu;
+	u64 ts;
+	loff_t pos;
+	long idx;
+};
+
+struct trace_entry {
+	unsigned short type;
+	unsigned char flags;
+	unsigned char preempt_count;
+	int pid;
+};
+
+struct math_emu_info {
+	long ___orig_eip;
+	struct pt_regs *regs;
+};
+
+typedef void *fl_owner_t;
+
+struct kiocb;
+
+struct iov_iter;
+
+struct dir_context;
+
+struct file_lock;
+
+struct io_uring_cmd;
+
+struct file_operations {
+	struct module *owner;
+	loff_t (*llseek)(struct file *, loff_t, int);
+	ssize_t (*read)(struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*write)(struct file *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*write_iter)(struct kiocb *, struct iov_iter *);
+	int (*iopoll)(struct kiocb *, struct io_comp_batch *, unsigned int);
+	int (*iterate_shared)(struct file *, struct dir_context *);
+	__poll_t (*poll)(struct file *, struct poll_table_struct *);
+	long (*unlocked_ioctl)(struct file *, unsigned int, unsigned long);
+	long (*compat_ioctl)(struct file *, unsigned int, unsigned long);
+	int (*mmap)(struct file *, struct vm_area_struct *);
+	unsigned long mmap_supported_flags;
+	int (*open)(struct inode *, struct file *);
+	int (*flush)(struct file *, fl_owner_t);
+	int (*release)(struct inode *, struct file *);
+	int (*fsync)(struct file *, loff_t, loff_t, int);
+	int (*fasync)(int, struct file *, int);
+	int (*lock)(struct file *, int, struct file_lock *);
+	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+	int (*check_flags)(int);
+	int (*flock)(struct file *, int, struct file_lock *);
+	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
+	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	void (*splice_eof)(struct file *);
+	int (*setlease)(struct file *, int, struct file_lock **, void **);
+	long (*fallocate)(struct file *, int, loff_t, loff_t);
+	void (*show_fdinfo)(struct seq_file *, struct file *);
+	ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int);
+	loff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int);
+	int (*fadvise)(struct file *, loff_t, loff_t, int);
+	int (*uring_cmd)(struct io_uring_cmd *, unsigned int);
+	int (*uring_cmd_iopoll)(struct io_uring_cmd *, struct io_comp_batch *, unsigned int);
+};
+
+struct wait_page_queue;
+
+struct kiocb {
+	struct file *ki_filp;
+	loff_t ki_pos;
+	void (*ki_complete)(struct kiocb *, long);
+	void *private;
+	int ki_flags;
+	u16 ki_ioprio;
+	union {
+		struct wait_page_queue *ki_waitq;
+		ssize_t (*dio_complete)(void *);
+	};
+};
+
+struct wait_queue_entry;
+
+typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);
+
+struct wait_queue_entry {
+	unsigned int flags;
+	void *private;
+	wait_queue_func_t func;
+	struct list_head entry;
+};
+
+typedef struct wait_queue_entry wait_queue_entry_t;
+
+struct folio;
+
+struct wait_page_queue {
+	struct folio *folio;
+	int bit_nr;
+	wait_queue_entry_t wait;
+};
+
+typedef struct {
+	unsigned long val;
+} swp_entry_t;
+
+struct folio {
+	union {
+		struct {
+			unsigned long flags;
+			union {
+				struct list_head lru;
+				struct {
+					void *__filler;
+					unsigned int mlock_count;
+				};
+			};
+			struct address_space *mapping;
+			unsigned long index;
+			union {
+				void *private;
+				swp_entry_t swap;
+			};
+			atomic_t _mapcount;
+			atomic_t _refcount;
+			unsigned long memcg_data;
+		};
+		struct page page;
+	};
+	union {
+		struct {
+			unsigned long _flags_1;
+			unsigned long _head_1;
+			atomic_t _entire_mapcount;
+			atomic_t _nr_pages_mapped;
+			atomic_t _pincount;
+			unsigned int __padding;
+			unsigned int _folio_nr_pages;
+			union {
+				unsigned long _private_1;
+				unsigned long *_dst_ul;
+				struct page **_dst_pp;
+			};
+		};
+		struct page __page_1;
+	};
+	union {
+		struct {
+			unsigned long _flags_2;
+			unsigned long _head_2;
+			void *_hugetlb_subpool;
+			void *_hugetlb_cgroup;
+			void *_hugetlb_cgroup_rsvd;
+			void *_hugetlb_hwpoison;
+		};
+		struct {
+			unsigned long _flags_2a;
+			unsigned long _head_2a;
+			struct list_head _deferred_list;
+		};
+		struct page __page_2;
+	};
+};
+
+struct iovec {
+	void __attribute__((btf_type_tag("user"))) *iov_base;
+	__kernel_size_t iov_len;
+};
+
+struct kvec;
+
+struct iov_iter {
+	u8 iter_type;
+	bool copy_mc;
+	bool nofault;
+	bool data_source;
+	bool user_backed;
+	union {
+		size_t iov_offset;
+		int last_offset;
+	};
+	union {
+		struct iovec __ubuf_iovec;
+		struct {
+			union {
+				const struct iovec *__iov;
+				const struct kvec *kvec;
+				const struct bio_vec *bvec;
+				struct xarray *xarray;
+				void __attribute__((btf_type_tag("user"))) *ubuf;
+			};
+			size_t count;
+		};
+	};
+	union {
+		unsigned long nr_segs;
+		loff_t xarray_start;
+	};
+};
+
+struct kvec {
+	void *iov_base;
+	size_t iov_len;
+};
+
+typedef bool (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, unsigned int);
+
+struct dir_context {
+	filldir_t actor;
+	loff_t pos;
+};
+
+struct fc_log {
+	refcount_t usage;
+	u8 head;
+	u8 tail;
+	u8 need_free;
+	struct module *owner;
+	char *buffer[8];
+};
+
+struct fs_parse_result;
+
+typedef int fs_param_type(struct p_log *, const struct fs_parameter_spec *, struct fs_parameter *, struct fs_parse_result *);
+
+struct fs_parameter_spec {
+	const char *name;
+	fs_param_type *type;
+	u8 opt;
+	unsigned short flags;
+	const void *data;
+};
+
+struct fs_parse_result {
+	bool negated;
+	union {
+		bool boolean;
+		int int_32;
+		unsigned int uint_32;
+		u64 uint_64;
+	};
+};
+
+enum freeze_holder {
+	FREEZE_HOLDER_KERNEL = 1,
+	FREEZE_HOLDER_USERSPACE = 2,
+};
+
+struct writeback_control;
+
+struct kstatfs;
+
+struct dquot;
+
+struct super_operations {
+	struct inode * (*alloc_inode)(struct super_block *);
+	void (*destroy_inode)(struct inode *);
+	void (*free_inode)(struct inode *);
+	void (*dirty_inode)(struct inode *, int);
+	int (*write_inode)(struct inode *, struct writeback_control *);
+	int (*drop_inode)(struct inode *);
+	void (*evict_inode)(struct inode *);
+	void (*put_super)(struct super_block *);
+	int (*sync_fs)(struct super_block *, int);
+	int (*freeze_super)(struct super_block *, enum freeze_holder);
+	int (*freeze_fs)(struct super_block *);
+	int (*thaw_super)(struct super_block *, enum freeze_holder);
+	int (*unfreeze_fs)(struct super_block *);
+	int (*statfs)(struct dentry *, struct kstatfs *);
+	int (*remount_fs)(struct super_block *, int *, char *);
+	void (*umount_begin)(struct super_block *);
+	int (*show_options)(struct seq_file *, struct dentry *);
+	int (*show_devname)(struct seq_file *, struct dentry *);
+	int (*show_path)(struct seq_file *, struct dentry *);
+	int (*show_stats)(struct seq_file *, struct dentry *);
+	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
+	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
+	struct dquot __attribute__((btf_type_tag("rcu"))) ** (*get_dquots)(struct inode *);
+	long (*nr_cached_objects)(struct super_block *, struct shrink_control *);
+	long (*free_cached_objects)(struct super_block *, struct shrink_control *);
+	void (*shutdown)(struct super_block *);
+};
+
+enum writeback_sync_modes {
+	WB_SYNC_NONE = 0,
+	WB_SYNC_ALL = 1,
+};
+
+struct swap_iocb;
+
+struct writeback_control {
+	long nr_to_write;
+	long pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	enum writeback_sync_modes sync_mode;
+	unsigned int for_kupdate: 1;
+	unsigned int for_background: 1;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_reclaim: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_sync: 1;
+	unsigned int unpinned_fscache_wb: 1;
+	unsigned int no_cgroup_owner: 1;
+	struct swap_iocb **swap_plug;
+	struct bdi_writeback *wb;
+	struct inode *inode;
+	int wb_id;
+	int wb_lcand_id;
+	int wb_tcand_id;
+	size_t wb_bytes;
+	size_t wb_lcand_bytes;
+	size_t wb_tcand_bytes;
+};
+
+typedef __kernel_uid32_t projid_t;
+
+typedef struct {
+	projid_t val;
+} kprojid_t;
+
+enum quota_type {
+	USRQUOTA = 0,
+	GRPQUOTA = 1,
+	PRJQUOTA = 2,
+};
+
+struct kqid {
+	union {
+		kuid_t uid;
+		kgid_t gid;
+		kprojid_t projid;
+	};
+	enum quota_type type;
+};
+
+struct mem_dqblk {
+	qsize_t dqb_bhardlimit;
+	qsize_t dqb_bsoftlimit;
+	qsize_t dqb_curspace;
+	qsize_t dqb_rsvspace;
+	qsize_t dqb_ihardlimit;
+	qsize_t dqb_isoftlimit;
+	qsize_t dqb_curinodes;
+	time64_t dqb_btime;
+	time64_t dqb_itime;
+};
+
+struct dquot {
+	struct hlist_node dq_hash;
+	struct list_head dq_inuse;
+	struct list_head dq_free;
+	struct list_head dq_dirty;
+	struct mutex dq_lock;
+	spinlock_t dq_dqb_lock;
+	atomic_t dq_count;
+	struct super_block *dq_sb;
+	struct kqid dq_id;
+	loff_t dq_off;
+	unsigned long dq_flags;
+	struct mem_dqblk dq_dqb;
+};
+
+struct shrink_control {
+	gfp_t gfp_mask;
+	int nid;
+	unsigned long nr_to_scan;
+	unsigned long nr_scanned;
+	struct mem_cgroup *memcg;
+};
+
+struct dquot_operations {
+	int (*write_dquot)(struct dquot *);
+	struct dquot * (*alloc_dquot)(struct super_block *, int);
+	void (*destroy_dquot)(struct dquot *);
+	int (*acquire_dquot)(struct dquot *);
+	int (*release_dquot)(struct dquot *);
+	int (*mark_dirty)(struct dquot *);
+	int (*write_info)(struct super_block *, int);
+	qsize_t * (*get_reserved_space)(struct inode *);
+	int (*get_projid)(struct inode *, kprojid_t *);
+	int (*get_inode_usage)(struct inode *, qsize_t *);
+	int (*get_next_id)(struct super_block *, struct kqid *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct qc_info;
+
+struct qc_dqblk;
+
+struct qc_state;
+
+struct quotactl_ops {
+	int (*quota_on)(struct super_block *, int, int, const struct path *);
+	int (*quota_off)(struct super_block *, int);
+	int (*quota_enable)(struct super_block *, unsigned int);
+	int (*quota_disable)(struct super_block *, unsigned int);
+	int (*quota_sync)(struct super_block *, int);
+	int (*set_info)(struct super_block *, int, struct qc_info *);
+	int (*get_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
+	int (*get_nextdqblk)(struct super_block *, struct kqid *, struct qc_dqblk *);
+	int (*set_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
+	int (*get_state)(struct super_block *, struct qc_state *);
+	int (*rm_xquota)(struct super_block *, unsigned int);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct qc_info {
+	int i_fieldmask;
+	unsigned int i_flags;
+	unsigned int i_spc_timelimit;
+	unsigned int i_ino_timelimit;
+	unsigned int i_rt_spc_timelimit;
+	unsigned int i_spc_warnlimit;
+	unsigned int i_ino_warnlimit;
+	unsigned int i_rt_spc_warnlimit;
+};
+
+struct qc_dqblk {
+	int d_fieldmask;
+	u64 d_spc_hardlimit;
+	u64 d_spc_softlimit;
+	u64 d_ino_hardlimit;
+	u64 d_ino_softlimit;
+	u64 d_space;
+	u64 d_ino_count;
+	s64 d_ino_timer;
+	s64 d_spc_timer;
+	int d_ino_warns;
+	int d_spc_warns;
+	u64 d_rt_spc_hardlimit;
+	u64 d_rt_spc_softlimit;
+	u64 d_rt_space;
+	s64 d_rt_spc_timer;
+	int d_rt_spc_warns;
+};
+
+struct qc_type_state {
+	unsigned int flags;
+	unsigned int spc_timelimit;
+	unsigned int ino_timelimit;
+	unsigned int rt_spc_timelimit;
+	unsigned int spc_warnlimit;
+	unsigned int ino_warnlimit;
+	unsigned int rt_spc_warnlimit;
+	unsigned long long ino;
+	blkcnt_t blocks;
+	blkcnt_t nextents;
+};
+
+struct qc_state {
+	unsigned int s_incoredqs;
+	struct qc_type_state s_state[3];
+};
+
+struct fid;
+
+struct iomap;
+
+struct export_operations {
+	int (*encode_fh)(struct inode *, __u32 *, int *, struct inode *);
+	struct dentry * (*fh_to_dentry)(struct super_block *, struct fid *, int, int);
+	struct dentry * (*fh_to_parent)(struct super_block *, struct fid *, int, int);
+	int (*get_name)(struct dentry *, char *, struct dentry *);
+	struct dentry * (*get_parent)(struct dentry *);
+	int (*commit_metadata)(struct inode *);
+	int (*get_uuid)(struct super_block *, u8 *, u32 *, u64 *);
+	int (*map_blocks)(struct inode *, loff_t, u64, struct iomap *, bool, u32 *);
+	int (*commit_blocks)(struct inode *, struct iomap *, int, struct iattr *);
+	unsigned long flags;
+};
+
+struct xattr_handler {
+	const char *name;
+	const char *prefix;
+	int flags;
+	bool (*list)(struct dentry *);
+	int (*get)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, void *, size_t);
+	int (*set)(const struct xattr_handler *, struct mnt_idmap *, struct dentry *, struct inode *, const char *, const void *, size_t, int);
+};
+
+union fscrypt_policy;
+
+struct fscrypt_operations {
+	unsigned int needs_bounce_pages: 1;
+	unsigned int has_32bit_inodes: 1;
+	unsigned int supports_subblock_data_units: 1;
+	const char *legacy_key_prefix;
+	int (*get_context)(struct inode *, void *, size_t);
+	int (*set_context)(struct inode *, const void *, size_t, void *);
+	const union fscrypt_policy * (*get_dummy_policy)(struct super_block *);
+	bool (*empty_dir)(struct inode *);
+	bool (*has_stable_inodes)(struct super_block *);
+	struct block_device ** (*get_devices)(struct super_block *, unsigned int *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_oem_data1[4];
+};
+
+struct fsverity_operations {
+	int (*begin_enable_verity)(struct file *);
+	int (*end_enable_verity)(struct file *, const void *, size_t, u64);
+	int (*get_verity_descriptor)(struct inode *, void *, size_t);
+	struct page * (*read_merkle_tree_page)(struct inode *, unsigned long, unsigned long);
+	int (*write_merkle_tree_block)(struct inode *, const void *, u64, unsigned int);
+};
+
+struct quota_format_type {
+	int qf_fmt_id;
+	const struct quota_format_ops *qf_ops;
+	struct module *qf_owner;
+	struct quota_format_type *qf_next;
+};
+
+struct quota_format_ops {
+	int (*check_quota_file)(struct super_block *, int);
+	int (*read_file_info)(struct super_block *, int);
+	int (*write_file_info)(struct super_block *, int);
+	int (*free_file_info)(struct super_block *, int);
+	int (*read_dqblk)(struct dquot *);
+	int (*commit_dqblk)(struct dquot *);
+	int (*release_dqblk)(struct dquot *);
+	int (*get_next_id)(struct super_block *, struct kqid *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef struct {
+	int val[2];
+} __kernel_fsid_t;
+
+typedef struct fsnotify_mark_connector __attribute__((btf_type_tag("rcu"))) *fsnotify_connp_t;
+
+struct fsnotify_mark_connector {
+	spinlock_t lock;
+	unsigned short type;
+	unsigned short flags;
+	__kernel_fsid_t fsid;
+	union {
+		fsnotify_connp_t *obj;
+		struct fsnotify_mark_connector *destroy_next;
+	};
+	struct hlist_head list;
+};
+
+struct list_lru_one {
+	struct list_head list;
+	long nr_items;
+};
+
+struct list_lru_node {
+	spinlock_t lock;
+	struct list_lru_one lru;
+	long nr_items;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct delayed_call {
+	void (*fn)(void *);
+	void *arg;
+};
+
+typedef struct {
+	uid_t val;
+} vfsuid_t;
+
+typedef struct {
+	gid_t val;
+} vfsgid_t;
+
+struct iattr {
+	unsigned int ia_valid;
+	umode_t ia_mode;
+	union {
+		kuid_t ia_uid;
+		vfsuid_t ia_vfsuid;
+	};
+	union {
+		kgid_t ia_gid;
+		vfsgid_t ia_vfsgid;
+	};
+	loff_t ia_size;
+	struct timespec64 ia_atime;
+	struct timespec64 ia_mtime;
+	struct timespec64 ia_ctime;
+	struct file *ia_file;
+};
+
+struct kstat {
+	u32 result_mask;
+	umode_t mode;
+	unsigned int nlink;
+	uint32_t blksize;
+	u64 attributes;
+	u64 attributes_mask;
+	u64 ino;
+	dev_t dev;
+	dev_t rdev;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 ctime;
+	struct timespec64 btime;
+	u64 blocks;
+	u64 mnt_id;
+	u32 dio_mem_align;
+	u32 dio_offset_align;
+	u64 change_cookie;
+};
+
+struct offset_ctx {
+	struct xarray xa;
+	u32 next_offset;
+};
+
+struct cdev {
+	struct kobject kobj;
+	struct module *owner;
+	const struct file_operations *ops;
+	struct list_head list;
+	dev_t dev;
+	unsigned int count;
+};
+
+enum migrate_mode {
+	MIGRATE_ASYNC = 0,
+	MIGRATE_SYNC_LIGHT = 1,
+	MIGRATE_SYNC = 2,
+	MIGRATE_SYNC_NO_COPY = 3,
+};
+
+struct readahead_control;
+
+struct swap_info_struct;
+
+struct address_space_operations {
+	int (*writepage)(struct page *, struct writeback_control *);
+	int (*read_folio)(struct file *, struct folio *);
+	int (*writepages)(struct address_space *, struct writeback_control *);
+	bool (*dirty_folio)(struct address_space *, struct folio *);
+	void (*readahead)(struct readahead_control *);
+	int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, struct page **, void **);
+	int (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page *, void *);
+	sector_t (*bmap)(struct address_space *, sector_t);
+	void (*invalidate_folio)(struct folio *, size_t, size_t);
+	bool (*release_folio)(struct folio *, gfp_t);
+	void (*free_folio)(struct folio *);
+	ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *);
+	int (*migrate_folio)(struct address_space *, struct folio *, struct folio *, enum migrate_mode);
+	int (*launder_folio)(struct folio *);
+	bool (*is_partially_uptodate)(struct folio *, size_t, size_t);
+	void (*is_dirty_writeback)(struct folio *, bool *, bool *);
+	int (*error_remove_page)(struct address_space *, struct page *);
+	int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);
+	void (*swap_deactivate)(struct file *);
+	int (*swap_rw)(struct kiocb *, struct iov_iter *);
+};
+
+struct readahead_control {
+	struct file *file;
+	struct address_space *mapping;
+	struct file_ra_state *ra;
+	unsigned long _index;
+	unsigned int _nr_pages;
+	unsigned int _batch_count;
+	bool _workingset;
+	unsigned long _pflags;
+	u64 android_oem_data1;
+};
+
+struct swap_cluster_info;
+
+struct percpu_cluster;
+
+struct swap_info_struct {
+	struct percpu_ref users;
+	unsigned long flags;
+	short prio;
+	struct plist_node list;
+	signed char type;
+	unsigned int max;
+	unsigned char *swap_map;
+	struct swap_cluster_info *cluster_info;
+	struct list_head free_clusters;
+	struct list_head nonfull_clusters[10];
+	unsigned int lowest_bit;
+	unsigned int highest_bit;
+	unsigned int pages;
+	unsigned int inuse_pages;
+	unsigned int cluster_next;
+	unsigned int cluster_nr;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *cluster_next_cpu;
+	struct percpu_cluster __attribute__((btf_type_tag("percpu"))) *percpu_cluster;
+	struct rb_root swap_extent_root;
+	struct block_device *bdev;
+	struct file *swap_file;
+	unsigned int old_block_size;
+	struct completion comp;
+	spinlock_t lock;
+	spinlock_t cont_lock;
+	struct work_struct discard_work;
+	struct list_head discard_clusters;
+	struct plist_node avail_lists[0];
+};
+
+struct swap_cluster_info {
+	spinlock_t lock;
+	unsigned int count: 12;
+	unsigned int state: 3;
+	unsigned int order: 4;
+	unsigned int reserved: 1;
+	unsigned int flags: 4;
+	struct list_head list;
+};
+
+struct percpu_cluster {
+	unsigned int next[10];
+};
+
+struct module_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *);
+	ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t);
+	void (*setup)(struct module *, const char *);
+	int (*test)(struct module *);
+	void (*free)(struct module *);
+};
+
+struct kernel_symbol {
+	int value_offset;
+	int name_offset;
+	int namespace_offset;
+};
+
+struct kernel_param_ops;
+
+struct kparam_string;
+
+struct kparam_array;
+
+struct kernel_param {
+	const char *name;
+	struct module *mod;
+	const struct kernel_param_ops *ops;
+	const u16 perm;
+	s8 level;
+	u8 flags;
+	union {
+		void *arg;
+		const struct kparam_string *str;
+		const struct kparam_array *arr;
+	};
+};
+
+struct kernel_param_ops {
+	unsigned int flags;
+	int (*set)(const char *, const struct kernel_param *);
+	int (*get)(char *, const struct kernel_param *);
+	void (*free)(void *);
+};
+
+struct kparam_string {
+	unsigned int maxlen;
+	char *string;
+};
+
+struct kparam_array {
+	unsigned int max;
+	unsigned int elemsize;
+	unsigned int *num;
+	const struct kernel_param_ops *ops;
+	void *elem;
+};
+
+struct exception_table_entry {
+	int insn;
+	int fixup;
+	int data;
+};
+
+struct bug_entry {
+	int bug_addr_disp;
+	int file_disp;
+	unsigned short line;
+	unsigned short flags;
+};
+
+typedef __u32 Elf64_Word;
+
+typedef __u16 Elf64_Half;
+
+typedef __u64 Elf64_Addr;
+
+typedef __u64 Elf64_Xword;
+
+struct elf64_sym {
+	Elf64_Word st_name;
+	unsigned char st_info;
+	unsigned char st_other;
+	Elf64_Half st_shndx;
+	Elf64_Addr st_value;
+	Elf64_Xword st_size;
+};
+
+struct srcu_data;
+
+struct srcu_usage;
+
+struct srcu_struct {
+	unsigned int srcu_idx;
+	struct srcu_data __attribute__((btf_type_tag("percpu"))) *sda;
+	struct lockdep_map dep_map;
+	struct srcu_usage *srcu_sup;
+};
+
+struct rcu_segcblist {
+	struct callback_head *head;
+	struct callback_head **tails[4];
+	unsigned long gp_seq[4];
+	atomic_long_t len;
+	long seglen[4];
+	u8 flags;
+};
+
+struct srcu_node;
+
+struct srcu_data {
+	atomic_long_t srcu_lock_count[2];
+	atomic_long_t srcu_unlock_count[2];
+	int srcu_nmi_safety;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t lock;
+	struct rcu_segcblist srcu_cblist;
+	unsigned long srcu_gp_seq_needed;
+	unsigned long srcu_gp_seq_needed_exp;
+	bool srcu_cblist_invoking;
+	struct timer_list delay_work;
+	struct work_struct work;
+	struct callback_head srcu_barrier_head;
+	struct srcu_node *mynode;
+	unsigned long grpmask;
+	int cpu;
+	struct srcu_struct *ssp;
+	long: 64;
+	long: 64;
+};
+
+struct srcu_node {
+	spinlock_t lock;
+	unsigned long srcu_have_cbs[4];
+	unsigned long srcu_data_have_cbs[4];
+	unsigned long srcu_gp_seq_needed_exp;
+	struct srcu_node *srcu_parent;
+	int grplo;
+	int grphi;
+};
+
+struct srcu_usage {
+	struct srcu_node *node;
+	struct srcu_node *level[3];
+	int srcu_size_state;
+	struct mutex srcu_cb_mutex;
+	spinlock_t lock;
+	struct mutex srcu_gp_mutex;
+	unsigned long srcu_gp_seq;
+	unsigned long srcu_gp_seq_needed;
+	unsigned long srcu_gp_seq_needed_exp;
+	unsigned long srcu_gp_start;
+	unsigned long srcu_last_gp_end;
+	unsigned long srcu_size_jiffies;
+	unsigned long srcu_n_lock_retries;
+	unsigned long srcu_n_exp_nodelay;
+	bool sda_is_static;
+	unsigned long srcu_barrier_seq;
+	struct mutex srcu_barrier_mutex;
+	struct completion srcu_barrier_completion;
+	atomic_t srcu_barrier_cpu_cnt;
+	unsigned long reschedule_jiffies;
+	unsigned long reschedule_count;
+	struct delayed_work work;
+	struct srcu_struct *srcu_ssp;
+};
+
+struct bpf_raw_event_map {
+	struct tracepoint *tp;
+	void *bpf_func;
+	u32 num_args;
+	u32 writable_size;
+	long: 64;
+};
+
+struct trace_eval_map {
+	const char *system;
+	const char *eval_string;
+	unsigned long eval_value;
+};
+
+struct static_call_site {
+	s32 addr;
+	s32 key;
+};
+
+enum kunit_speed {
+	KUNIT_SPEED_UNSET = 0,
+	KUNIT_SPEED_VERY_SLOW = 1,
+	KUNIT_SPEED_SLOW = 2,
+	KUNIT_SPEED_NORMAL = 3,
+	KUNIT_SPEED_MAX = 3,
+};
+
+struct kunit_attributes {
+	enum kunit_speed speed;
+};
+
+struct kunit_case;
+
+struct kunit_suite {
+	const char name[256];
+	int (*suite_init)(struct kunit_suite *);
+	void (*suite_exit)(struct kunit_suite *);
+	int (*init)(struct kunit *);
+	void (*exit)(struct kunit *);
+	struct kunit_case *test_cases;
+	struct kunit_attributes attr;
+	char status_comment[256];
+	struct dentry *debugfs;
+	char *log;
+	int suite_init_err;
+};
+
+struct kunit_case {
+	void (*run_case)(struct kunit *);
+	const char *name;
+	const void * (*generate_params)(const void *, char *);
+	struct kunit_attributes attr;
+	enum kunit_status status;
+	char *module_name;
+	char *log;
+};
+
+struct static_key_true {
+	struct static_key key;
+};
+
+struct static_key_false {
+	struct static_key key;
+};
+
+struct _ddebug {
+	const char *modname;
+	const char *function;
+	const char *filename;
+	const char *format;
+	unsigned int lineno: 18;
+	unsigned int class_id: 6;
+	unsigned int flags: 8;
+	union {
+		struct static_key_true dd_key_true;
+		struct static_key_false dd_key_false;
+	} key;
+};
+
+enum class_map_type {
+	DD_CLASS_TYPE_DISJOINT_BITS = 0,
+	DD_CLASS_TYPE_LEVEL_NUM = 1,
+	DD_CLASS_TYPE_DISJOINT_NAMES = 2,
+	DD_CLASS_TYPE_LEVEL_NAMES = 3,
+};
+
+struct ddebug_class_map {
+	struct list_head link;
+	struct module *mod;
+	const char *mod_name;
+	const char **class_names;
+	const int length;
+	const int base;
+	enum class_map_type map_type;
+};
+
+struct tracepoint_func {
+	void *func;
+	void *data;
+	int prio;
+};
+
+typedef void (*btf_trace_initcall_level)(void *, const char *);
+
+typedef int (*initcall_t)();
+
+typedef void (*btf_trace_initcall_start)(void *, initcall_t);
+
+typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);
+
+struct obs_kernel_param {
+	const char *str;
+	int (*setup_func)(char *);
+	int early;
+};
+
+enum system_states {
+	SYSTEM_BOOTING = 0,
+	SYSTEM_SCHEDULING = 1,
+	SYSTEM_FREEING_INITMEM = 2,
+	SYSTEM_RUNNING = 3,
+	SYSTEM_HALT = 4,
+	SYSTEM_POWER_OFF = 5,
+	SYSTEM_RESTART = 6,
+	SYSTEM_SUSPEND = 7,
+};
+
+typedef int initcall_entry_t;
+
+enum cpuhp_state {
+	CPUHP_INVALID = -1,
+	CPUHP_OFFLINE = 0,
+	CPUHP_CREATE_THREADS = 1,
+	CPUHP_PERF_PREPARE = 2,
+	CPUHP_PERF_X86_PREPARE = 3,
+	CPUHP_PERF_X86_AMD_UNCORE_PREP = 4,
+	CPUHP_PERF_POWER = 5,
+	CPUHP_PERF_SUPERH = 6,
+	CPUHP_X86_HPET_DEAD = 7,
+	CPUHP_X86_APB_DEAD = 8,
+	CPUHP_X86_MCE_DEAD = 9,
+	CPUHP_VIRT_NET_DEAD = 10,
+	CPUHP_IBMVNIC_DEAD = 11,
+	CPUHP_SLUB_DEAD = 12,
+	CPUHP_DEBUG_OBJ_DEAD = 13,
+	CPUHP_MM_WRITEBACK_DEAD = 14,
+	CPUHP_MM_DEMOTION_DEAD = 15,
+	CPUHP_MM_VMSTAT_DEAD = 16,
+	CPUHP_SOFTIRQ_DEAD = 17,
+	CPUHP_NET_MVNETA_DEAD = 18,
+	CPUHP_CPUIDLE_DEAD = 19,
+	CPUHP_ARM64_FPSIMD_DEAD = 20,
+	CPUHP_ARM_OMAP_WAKE_DEAD = 21,
+	CPUHP_IRQ_POLL_DEAD = 22,
+	CPUHP_BLOCK_SOFTIRQ_DEAD = 23,
+	CPUHP_BIO_DEAD = 24,
+	CPUHP_ACPI_CPUDRV_DEAD = 25,
+	CPUHP_S390_PFAULT_DEAD = 26,
+	CPUHP_BLK_MQ_DEAD = 27,
+	CPUHP_FS_BUFF_DEAD = 28,
+	CPUHP_PRINTK_DEAD = 29,
+	CPUHP_MM_MEMCQ_DEAD = 30,
+	CPUHP_PERCPU_CNT_DEAD = 31,
+	CPUHP_RADIX_DEAD = 32,
+	CPUHP_PAGE_ALLOC = 33,
+	CPUHP_NET_DEV_DEAD = 34,
+	CPUHP_PCI_XGENE_DEAD = 35,
+	CPUHP_IOMMU_IOVA_DEAD = 36,
+	CPUHP_LUSTRE_CFS_DEAD = 37,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 38,
+	CPUHP_PADATA_DEAD = 39,
+	CPUHP_AP_DTPM_CPU_DEAD = 40,
+	CPUHP_RANDOM_PREPARE = 41,
+	CPUHP_WORKQUEUE_PREP = 42,
+	CPUHP_POWER_NUMA_PREPARE = 43,
+	CPUHP_HRTIMERS_PREPARE = 44,
+	CPUHP_PROFILE_PREPARE = 45,
+	CPUHP_X2APIC_PREPARE = 46,
+	CPUHP_SMPCFD_PREPARE = 47,
+	CPUHP_RELAY_PREPARE = 48,
+	CPUHP_SLAB_PREPARE = 49,
+	CPUHP_MD_RAID5_PREPARE = 50,
+	CPUHP_RCUTREE_PREP = 51,
+	CPUHP_CPUIDLE_COUPLED_PREPARE = 52,
+	CPUHP_POWERPC_PMAC_PREPARE = 53,
+	CPUHP_POWERPC_MMU_CTX_PREPARE = 54,
+	CPUHP_XEN_PREPARE = 55,
+	CPUHP_XEN_EVTCHN_PREPARE = 56,
+	CPUHP_ARM_SHMOBILE_SCU_PREPARE = 57,
+	CPUHP_SH_SH3X_PREPARE = 58,
+	CPUHP_NET_FLOW_PREPARE = 59,
+	CPUHP_TOPOLOGY_PREPARE = 60,
+	CPUHP_NET_IUCV_PREPARE = 61,
+	CPUHP_ARM_BL_PREPARE = 62,
+	CPUHP_TRACE_RB_PREPARE = 63,
+	CPUHP_MM_ZS_PREPARE = 64,
+	CPUHP_MM_ZSWP_MEM_PREPARE = 65,
+	CPUHP_MM_ZSWP_POOL_PREPARE = 66,
+	CPUHP_KVM_PPC_BOOK3S_PREPARE = 67,
+	CPUHP_ZCOMP_PREPARE = 68,
+	CPUHP_TIMERS_PREPARE = 69,
+	CPUHP_MIPS_SOC_PREPARE = 70,
+	CPUHP_BP_PREPARE_DYN = 71,
+	CPUHP_BP_PREPARE_DYN_END = 91,
+	CPUHP_BP_KICK_AP = 92,
+	CPUHP_BRINGUP_CPU = 93,
+	CPUHP_AP_IDLE_DEAD = 94,
+	CPUHP_AP_OFFLINE = 95,
+	CPUHP_AP_CACHECTRL_STARTING = 96,
+	CPUHP_AP_SCHED_STARTING = 97,
+	CPUHP_AP_RCUTREE_DYING = 98,
+	CPUHP_AP_CPU_PM_STARTING = 99,
+	CPUHP_AP_IRQ_GIC_STARTING = 100,
+	CPUHP_AP_IRQ_HIP04_STARTING = 101,
+	CPUHP_AP_IRQ_APPLE_AIC_STARTING = 102,
+	CPUHP_AP_IRQ_ARMADA_XP_STARTING = 103,
+	CPUHP_AP_IRQ_BCM2836_STARTING = 104,
+	CPUHP_AP_IRQ_MIPS_GIC_STARTING = 105,
+	CPUHP_AP_IRQ_RISCV_STARTING = 106,
+	CPUHP_AP_IRQ_LOONGARCH_STARTING = 107,
+	CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 108,
+	CPUHP_AP_ARM_MVEBU_COHERENCY = 109,
+	CPUHP_AP_MICROCODE_LOADER = 110,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 111,
+	CPUHP_AP_PERF_X86_STARTING = 112,
+	CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 113,
+	CPUHP_AP_PERF_X86_CQM_STARTING = 114,
+	CPUHP_AP_PERF_X86_CSTATE_STARTING = 115,
+	CPUHP_AP_PERF_XTENSA_STARTING = 116,
+	CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 117,
+	CPUHP_AP_ARM_VFP_STARTING = 118,
+	CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 119,
+	CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 120,
+	CPUHP_AP_PERF_ARM_ACPI_STARTING = 121,
+	CPUHP_AP_PERF_ARM_STARTING = 122,
+	CPUHP_AP_PERF_RISCV_STARTING = 123,
+	CPUHP_AP_ARM_L2X0_STARTING = 124,
+	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 125,
+	CPUHP_AP_ARM_ARCH_TIMER_STARTING = 126,
+	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 127,
+	CPUHP_AP_JCORE_TIMER_STARTING = 128,
+	CPUHP_AP_ARM_TWD_STARTING = 129,
+	CPUHP_AP_QCOM_TIMER_STARTING = 130,
+	CPUHP_AP_TEGRA_TIMER_STARTING = 131,
+	CPUHP_AP_ARMADA_TIMER_STARTING = 132,
+	CPUHP_AP_MARCO_TIMER_STARTING = 133,
+	CPUHP_AP_MIPS_GIC_TIMER_STARTING = 134,
+	CPUHP_AP_ARC_TIMER_STARTING = 135,
+	CPUHP_AP_RISCV_TIMER_STARTING = 136,
+	CPUHP_AP_CLINT_TIMER_STARTING = 137,
+	CPUHP_AP_CSKY_TIMER_STARTING = 138,
+	CPUHP_AP_TI_GP_TIMER_STARTING = 139,
+	CPUHP_AP_HYPERV_TIMER_STARTING = 140,
+	CPUHP_AP_DUMMY_TIMER_STARTING = 141,
+	CPUHP_AP_ARM_XEN_STARTING = 142,
+	CPUHP_AP_ARM_XEN_RUNSTATE_STARTING = 143,
+	CPUHP_AP_ARM_CORESIGHT_STARTING = 144,
+	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 145,
+	CPUHP_AP_ARM64_ISNDEP_STARTING = 146,
+	CPUHP_AP_SMPCFD_DYING = 147,
+	CPUHP_AP_HRTIMERS_DYING = 148,
+	CPUHP_AP_X86_TBOOT_DYING = 149,
+	CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 150,
+	CPUHP_AP_ONLINE = 151,
+	CPUHP_TEARDOWN_CPU = 152,
+	CPUHP_AP_ONLINE_IDLE = 153,
+	CPUHP_AP_HYPERV_ONLINE = 154,
+	CPUHP_AP_KVM_ONLINE = 155,
+	CPUHP_AP_SCHED_WAIT_EMPTY = 156,
+	CPUHP_AP_SMPBOOT_THREADS = 157,
+	CPUHP_AP_X86_VDSO_VMA_ONLINE = 158,
+	CPUHP_AP_IRQ_AFFINITY_ONLINE = 159,
+	CPUHP_AP_BLK_MQ_ONLINE = 160,
+	CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 161,
+	CPUHP_AP_X86_INTEL_EPB_ONLINE = 162,
+	CPUHP_AP_PERF_ONLINE = 163,
+	CPUHP_AP_PERF_X86_ONLINE = 164,
+	CPUHP_AP_PERF_X86_UNCORE_ONLINE = 165,
+	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 166,
+	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 167,
+	CPUHP_AP_PERF_X86_RAPL_ONLINE = 168,
+	CPUHP_AP_PERF_X86_CQM_ONLINE = 169,
+	CPUHP_AP_PERF_X86_CSTATE_ONLINE = 170,
+	CPUHP_AP_PERF_X86_IDXD_ONLINE = 171,
+	CPUHP_AP_PERF_S390_CF_ONLINE = 172,
+	CPUHP_AP_PERF_S390_SF_ONLINE = 173,
+	CPUHP_AP_PERF_ARM_CCI_ONLINE = 174,
+	CPUHP_AP_PERF_ARM_CCN_ONLINE = 175,
+	CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE = 176,
+	CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 177,
+	CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 178,
+	CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 179,
+	CPUHP_AP_PERF_ARM_HISI_PA_ONLINE = 180,
+	CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE = 181,
+	CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE = 182,
+	CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE = 183,
+	CPUHP_AP_PERF_ARM_L2X0_ONLINE = 184,
+	CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 185,
+	CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 186,
+	CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 187,
+	CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 188,
+	CPUHP_AP_PERF_ARM_MARVELL_CN10K_DDR_ONLINE = 189,
+	CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 190,
+	CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 191,
+	CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 192,
+	CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 193,
+	CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 194,
+	CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 195,
+	CPUHP_AP_PERF_CSKY_ONLINE = 196,
+	CPUHP_AP_WATCHDOG_ONLINE = 197,
+	CPUHP_AP_WORKQUEUE_ONLINE = 198,
+	CPUHP_AP_RANDOM_ONLINE = 199,
+	CPUHP_AP_RCUTREE_ONLINE = 200,
+	CPUHP_AP_BASE_CACHEINFO_ONLINE = 201,
+	CPUHP_AP_ONLINE_DYN = 202,
+	CPUHP_AP_ONLINE_DYN_END = 232,
+	CPUHP_AP_MM_DEMOTION_ONLINE = 233,
+	CPUHP_AP_X86_HPET_ONLINE = 234,
+	CPUHP_AP_X86_KVM_CLK_ONLINE = 235,
+	CPUHP_AP_ACTIVE = 236,
+	CPUHP_ONLINE = 237,
+};
+
+enum {
+	false = 0,
+	true = 1,
+};
+
+enum {
+	EVENT_FILE_FL_ENABLED = 1,
+	EVENT_FILE_FL_RECORDED_CMD = 2,
+	EVENT_FILE_FL_RECORDED_TGID = 4,
+	EVENT_FILE_FL_FILTERED = 8,
+	EVENT_FILE_FL_NO_SET_FILTER = 16,
+	EVENT_FILE_FL_SOFT_MODE = 32,
+	EVENT_FILE_FL_SOFT_DISABLED = 64,
+	EVENT_FILE_FL_TRIGGER_MODE = 128,
+	EVENT_FILE_FL_TRIGGER_COND = 256,
+	EVENT_FILE_FL_PID_FILTER = 512,
+	EVENT_FILE_FL_WAS_ENABLED = 1024,
+	EVENT_FILE_FL_FREED = 2048,
+};
+
+enum node_states {
+	N_POSSIBLE = 0,
+	N_ONLINE = 1,
+	N_NORMAL_MEMORY = 2,
+	N_HIGH_MEMORY = 2,
+	N_MEMORY = 3,
+	N_CPU = 4,
+	N_GENERIC_INITIATOR = 5,
+	NR_NODE_STATES = 6,
+};
+
+enum refcount_saturation_type {
+	REFCOUNT_ADD_NOT_ZERO_OVF = 0,
+	REFCOUNT_ADD_OVF = 1,
+	REFCOUNT_ADD_UAF = 2,
+	REFCOUNT_SUB_UAF = 3,
+	REFCOUNT_DEC_LEAK = 4,
+};
+
+enum kmalloc_cache_type {
+	KMALLOC_NORMAL = 0,
+	KMALLOC_DMA = 0,
+	KMALLOC_RANDOM_START = 0,
+	KMALLOC_RANDOM_END = 0,
+	KMALLOC_RECLAIM = 1,
+	KMALLOC_CGROUP = 2,
+	NR_KMALLOC_TYPES = 3,
+};
+
+struct trace_event_raw_initcall_level {
+	struct trace_entry ent;
+	u32 __data_loc_level;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_start {
+	struct trace_entry ent;
+	initcall_t func;
+	char __data[0];
+};
+
+struct trace_event_raw_initcall_finish {
+	struct trace_entry ent;
+	initcall_t func;
+	int ret;
+	char __data[0];
+};
+
+typedef __u32 __le32;
+
+typedef unsigned long uintptr_t;
+
+struct blacklist_entry {
+	struct list_head next;
+	char *buf;
+};
+
+struct eventfs_inode;
+
+struct trace_subsystem_dir;
+
+struct trace_event_file {
+	struct list_head list;
+	struct trace_event_call *event_call;
+	struct event_filter __attribute__((btf_type_tag("rcu"))) *filter;
+	struct eventfs_inode *ei;
+	struct trace_array *tr;
+	struct trace_subsystem_dir *system;
+	struct list_head triggers;
+	unsigned long flags;
+	atomic_t ref;
+	atomic_t sm_ref;
+	atomic_t tm_ref;
+};
+
+struct prog_entry;
+
+struct event_filter {
+	struct prog_entry __attribute__((btf_type_tag("rcu"))) *prog;
+	char *filter_string;
+};
+
+struct trace_event_data_offsets_initcall_level {
+	u32 level;
+};
+
+struct trace_buffer;
+
+struct ring_buffer_event;
+
+struct trace_event_buffer {
+	struct trace_buffer *buffer;
+	struct ring_buffer_event *event;
+	struct trace_event_file *trace_file;
+	void *entry;
+	unsigned int trace_ctx;
+	struct pt_regs *regs;
+};
+
+struct ring_buffer_event {
+	u32 type_len: 5;
+	u32 time_delta: 27;
+	u32 array[0];
+};
+
+typedef u16 uint16_t;
+
+struct xbc_node {
+	uint16_t next;
+	uint16_t child;
+	uint16_t parent;
+	uint16_t data;
+};
+
+struct trace_event_data_offsets_initcall_start {};
+
+struct trace_event_data_offsets_initcall_finish {};
+
+typedef __u32 Elf32_Word;
+
+struct elf32_note {
+	Elf32_Word n_namesz;
+	Elf32_Word n_descsz;
+	Elf32_Word n_type;
+};
+
+struct posix_acl_entry {
+	short e_tag;
+	unsigned short e_perm;
+	union {
+		kuid_t e_uid;
+		kgid_t e_gid;
+	};
+};
+
+struct posix_acl {
+	refcount_t a_refcount;
+	struct callback_head a_rcu;
+	unsigned int a_count;
+	struct posix_acl_entry a_entries[0];
+};
+
+typedef __u64 __addrpair;
+
+typedef __u32 __portpair;
+
+typedef struct {
+	struct net *net;
+} possible_net_t;
+
+struct proto;
+
+struct sock_common {
+	union {
+		__addrpair skc_addrpair;
+		struct {
+			__be32 skc_daddr;
+			__be32 skc_rcv_saddr;
+		};
+	};
+	union {
+		unsigned int skc_hash;
+		__u16 skc_u16hashes[2];
+	};
+	union {
+		__portpair skc_portpair;
+		struct {
+			__be16 skc_dport;
+			__u16 skc_num;
+		};
+	};
+	unsigned short skc_family;
+	volatile unsigned char skc_state;
+	unsigned char skc_reuse: 4;
+	unsigned char skc_reuseport: 1;
+	unsigned char skc_ipv6only: 1;
+	unsigned char skc_net_refcnt: 1;
+	int skc_bound_dev_if;
+	union {
+		struct hlist_node skc_bind_node;
+		struct hlist_node skc_portaddr_node;
+	};
+	struct proto *skc_prot;
+	possible_net_t skc_net;
+	struct in6_addr skc_v6_daddr;
+	struct in6_addr skc_v6_rcv_saddr;
+	atomic64_t skc_cookie;
+	union {
+		unsigned long skc_flags;
+		struct sock *skc_listener;
+		struct inet_timewait_death_row *skc_tw_dr;
+	};
+	int skc_dontcopy_begin[0];
+	union {
+		struct hlist_node skc_node;
+		struct hlist_nulls_node skc_nulls_node;
+	};
+	unsigned short skc_tx_queue_mapping;
+	unsigned short skc_rx_queue_mapping;
+	union {
+		int skc_incoming_cpu;
+		u32 skc_rcv_wnd;
+		u32 skc_tw_rcv_nxt;
+	};
+	refcount_t skc_refcnt;
+	int skc_dontcopy_end[0];
+	union {
+		u32 skc_rxhash;
+		u32 skc_window_clamp;
+		u32 skc_tw_snd_nxt;
+	};
+};
+
+typedef struct {
+	spinlock_t slock;
+	int owned;
+	wait_queue_head_t wq;
+} socket_lock_t;
+
+typedef u64 netdev_features_t;
+
+struct sock_cgroup_data {
+	struct cgroup *cgroup;
+	u16 prioidx;
+};
+
+typedef struct {} netns_tracker;
+
+struct sk_filter;
+
+struct socket_wq;
+
+struct xfrm_policy;
+
+struct socket;
+
+struct sock_reuseport;
+
+struct sock {
+	struct sock_common __sk_common;
+	struct dst_entry __attribute__((btf_type_tag("rcu"))) *sk_rx_dst;
+	int sk_rx_dst_ifindex;
+	u32 sk_rx_dst_cookie;
+	socket_lock_t sk_lock;
+	atomic_t sk_drops;
+	int sk_rcvlowat;
+	struct sk_buff_head sk_error_queue;
+	struct sk_buff_head sk_receive_queue;
+	struct {
+		atomic_t rmem_alloc;
+		int len;
+		struct sk_buff *head;
+		struct sk_buff *tail;
+	} sk_backlog;
+	int sk_forward_alloc;
+	u32 sk_reserved_mem;
+	unsigned int sk_ll_usec;
+	unsigned int sk_napi_id;
+	int sk_rcvbuf;
+	int sk_disconnects;
+	struct sk_filter __attribute__((btf_type_tag("rcu"))) *sk_filter;
+	union {
+		struct socket_wq __attribute__((btf_type_tag("rcu"))) *sk_wq;
+		struct socket_wq *sk_wq_raw;
+	};
+	struct xfrm_policy __attribute__((btf_type_tag("rcu"))) *sk_policy[2];
+	struct dst_entry __attribute__((btf_type_tag("rcu"))) *sk_dst_cache;
+	atomic_t sk_omem_alloc;
+	int sk_sndbuf;
+	int sk_wmem_queued;
+	refcount_t sk_wmem_alloc;
+	unsigned long sk_tsq_flags;
+	union {
+		struct sk_buff *sk_send_head;
+		struct rb_root tcp_rtx_queue;
+	};
+	struct sk_buff_head sk_write_queue;
+	__s32 sk_peek_off;
+	int sk_write_pending;
+	__u32 sk_dst_pending_confirm;
+	u32 sk_pacing_status;
+	long sk_sndtimeo;
+	struct timer_list sk_timer;
+	__u32 sk_priority;
+	__u32 sk_mark;
+	unsigned long sk_pacing_rate;
+	unsigned long sk_max_pacing_rate;
+	struct page_frag sk_frag;
+	netdev_features_t sk_route_caps;
+	int sk_gso_type;
+	unsigned int sk_gso_max_size;
+	gfp_t sk_allocation;
+	__u32 sk_txhash;
+	u8 sk_gso_disabled: 1;
+	u8 sk_kern_sock: 1;
+	u8 sk_no_check_tx: 1;
+	u8 sk_no_check_rx: 1;
+	u8 sk_userlocks: 4;
+	u8 sk_pacing_shift;
+	u16 sk_type;
+	u16 sk_protocol;
+	u16 sk_gso_max_segs;
+	unsigned long sk_lingertime;
+	struct proto *sk_prot_creator;
+	rwlock_t sk_callback_lock;
+	int sk_err;
+	int sk_err_soft;
+	u32 sk_ack_backlog;
+	u32 sk_max_ack_backlog;
+	kuid_t sk_uid;
+	u8 sk_txrehash;
+	u8 sk_prefer_busy_poll;
+	u16 sk_busy_poll_budget;
+	spinlock_t sk_peer_lock;
+	int sk_bind_phc;
+	struct pid *sk_peer_pid;
+	const struct cred *sk_peer_cred;
+	long sk_rcvtimeo;
+	ktime_t sk_stamp;
+	atomic_t sk_tskey;
+	atomic_t sk_zckey;
+	u32 sk_tsflags;
+	u8 sk_shutdown;
+	u8 sk_clockid;
+	u8 sk_txtime_deadline_mode: 1;
+	u8 sk_txtime_report_errors: 1;
+	u8 sk_txtime_unused: 6;
+	bool sk_use_task_frag;
+	struct socket *sk_socket;
+	void *sk_user_data;
+	void *sk_security;
+	struct sock_cgroup_data sk_cgrp_data;
+	struct mem_cgroup *sk_memcg;
+	void (*sk_state_change)(struct sock *);
+	void (*sk_data_ready)(struct sock *);
+	void (*sk_write_space)(struct sock *);
+	void (*sk_error_report)(struct sock *);
+	int (*sk_backlog_rcv)(struct sock *, struct sk_buff *);
+	void (*sk_destruct)(struct sock *);
+	struct sock_reuseport __attribute__((btf_type_tag("rcu"))) *sk_reuseport_cb;
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) *sk_bpf_storage;
+	struct callback_head sk_rcu;
+	netns_tracker ns_tracker;
+	struct hlist_node sk_bind2_node;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+	u64 android_oem_data1;
+};
+
+struct smc_hashinfo;
+
+typedef struct {
+	union {
+		void *kernel;
+		void __attribute__((btf_type_tag("user"))) *user;
+	};
+	bool is_kernel: 1;
+} sockptr_t;
+
+typedef unsigned int slab_flags_t;
+
+struct sockaddr;
+
+struct msghdr;
+
+struct sk_psock;
+
+struct request_sock_ops;
+
+struct timewait_sock_ops;
+
+struct raw_hashinfo;
+
+struct proto {
+	void (*close)(struct sock *, long);
+	int (*pre_connect)(struct sock *, struct sockaddr *, int);
+	int (*connect)(struct sock *, struct sockaddr *, int);
+	int (*disconnect)(struct sock *, int);
+	struct sock * (*accept)(struct sock *, int, int *, bool);
+	int (*ioctl)(struct sock *, int, int *);
+	int (*init)(struct sock *);
+	void (*destroy)(struct sock *);
+	void (*shutdown)(struct sock *, int);
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char __attribute__((btf_type_tag("user"))) *, int __attribute__((btf_type_tag("user"))) *);
+	void (*keepalive)(struct sock *, int);
+	int (*compat_ioctl)(struct sock *, unsigned int, unsigned long);
+	int (*sendmsg)(struct sock *, struct msghdr *, size_t);
+	int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int *);
+	void (*splice_eof)(struct socket *);
+	int (*bind)(struct sock *, struct sockaddr *, int);
+	int (*bind_add)(struct sock *, struct sockaddr *, int);
+	int (*backlog_rcv)(struct sock *, struct sk_buff *);
+	bool (*bpf_bypass_getsockopt)(int, int);
+	void (*release_cb)(struct sock *);
+	int (*hash)(struct sock *);
+	void (*unhash)(struct sock *);
+	void (*rehash)(struct sock *);
+	int (*get_port)(struct sock *, unsigned short);
+	void (*put_port)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	unsigned int inuse_idx;
+	bool (*stream_memory_free)(const struct sock *, int);
+	bool (*sock_is_readable)(struct sock *);
+	void (*enter_memory_pressure)(struct sock *);
+	void (*leave_memory_pressure)(struct sock *);
+	atomic_long_t *memory_allocated;
+	int __attribute__((btf_type_tag("percpu"))) *per_cpu_fw_alloc;
+	struct percpu_counter *sockets_allocated;
+	unsigned long *memory_pressure;
+	long *sysctl_mem;
+	int *sysctl_wmem;
+	int *sysctl_rmem;
+	u32 sysctl_wmem_offset;
+	u32 sysctl_rmem_offset;
+	int max_header;
+	bool no_autobind;
+	struct kmem_cache *slab;
+	unsigned int obj_size;
+	unsigned int ipv6_pinfo_offset;
+	slab_flags_t slab_flags;
+	unsigned int useroffset;
+	unsigned int usersize;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *orphan_count;
+	struct request_sock_ops *rsk_prot;
+	struct timewait_sock_ops *twsk_prot;
+	union {
+		struct inet_hashinfo *hashinfo;
+		struct udp_table *udp_table;
+		struct raw_hashinfo *raw_hash;
+		struct smc_hashinfo *smc_hash;
+	} h;
+	struct module *owner;
+	char name[32];
+	struct list_head node;
+	int (*diag_destroy)(struct sock *, int);
+};
+
+typedef unsigned short __kernel_sa_family_t;
+
+typedef __kernel_sa_family_t sa_family_t;
+
+struct sockaddr {
+	sa_family_t sa_family;
+	union {
+		char sa_data_min[14];
+		struct {
+			struct {} __empty_sa_data;
+			char sa_data[0];
+		};
+	};
+};
+
+struct ubuf_info;
+
+struct msghdr {
+	void *msg_name;
+	int msg_namelen;
+	int msg_inq;
+	struct iov_iter msg_iter;
+	union {
+		void *msg_control;
+		void __attribute__((btf_type_tag("user"))) *msg_control_user;
+	};
+	bool msg_control_is_user: 1;
+	bool msg_get_inq: 1;
+	unsigned int msg_flags;
+	__kernel_size_t msg_controllen;
+	struct kiocb *msg_iocb;
+	struct ubuf_info *msg_ubuf;
+	int (*sg_from_iter)(struct sock *, struct sk_buff *, struct iov_iter *, size_t);
+};
+
+struct ubuf_info {
+	void (*callback)(struct sk_buff *, struct ubuf_info *, bool);
+	refcount_t refcnt;
+	u8 flags;
+};
+
+typedef u32 xdp_features_t;
+
+struct net_device_stats {
+	union {
+		unsigned long rx_packets;
+		atomic_long_t __rx_packets;
+	};
+	union {
+		unsigned long tx_packets;
+		atomic_long_t __tx_packets;
+	};
+	union {
+		unsigned long rx_bytes;
+		atomic_long_t __rx_bytes;
+	};
+	union {
+		unsigned long tx_bytes;
+		atomic_long_t __tx_bytes;
+	};
+	union {
+		unsigned long rx_errors;
+		atomic_long_t __rx_errors;
+	};
+	union {
+		unsigned long tx_errors;
+		atomic_long_t __tx_errors;
+	};
+	union {
+		unsigned long rx_dropped;
+		atomic_long_t __rx_dropped;
+	};
+	union {
+		unsigned long tx_dropped;
+		atomic_long_t __tx_dropped;
+	};
+	union {
+		unsigned long multicast;
+		atomic_long_t __multicast;
+	};
+	union {
+		unsigned long collisions;
+		atomic_long_t __collisions;
+	};
+	union {
+		unsigned long rx_length_errors;
+		atomic_long_t __rx_length_errors;
+	};
+	union {
+		unsigned long rx_over_errors;
+		atomic_long_t __rx_over_errors;
+	};
+	union {
+		unsigned long rx_crc_errors;
+		atomic_long_t __rx_crc_errors;
+	};
+	union {
+		unsigned long rx_frame_errors;
+		atomic_long_t __rx_frame_errors;
+	};
+	union {
+		unsigned long rx_fifo_errors;
+		atomic_long_t __rx_fifo_errors;
+	};
+	union {
+		unsigned long rx_missed_errors;
+		atomic_long_t __rx_missed_errors;
+	};
+	union {
+		unsigned long tx_aborted_errors;
+		atomic_long_t __tx_aborted_errors;
+	};
+	union {
+		unsigned long tx_carrier_errors;
+		atomic_long_t __tx_carrier_errors;
+	};
+	union {
+		unsigned long tx_fifo_errors;
+		atomic_long_t __tx_fifo_errors;
+	};
+	union {
+		unsigned long tx_heartbeat_errors;
+		atomic_long_t __tx_heartbeat_errors;
+	};
+	union {
+		unsigned long tx_window_errors;
+		atomic_long_t __tx_window_errors;
+	};
+	union {
+		unsigned long rx_compressed;
+		atomic_long_t __rx_compressed;
+	};
+	union {
+		unsigned long tx_compressed;
+		atomic_long_t __tx_compressed;
+	};
+};
+
+struct netdev_hw_addr_list {
+	struct list_head list;
+	int count;
+	struct rb_root tree;
+};
+
+struct tipc_bearer;
+
+enum rx_handler_result {
+	RX_HANDLER_CONSUMED = 0,
+	RX_HANDLER_ANOTHER = 1,
+	RX_HANDLER_EXACT = 2,
+	RX_HANDLER_PASS = 3,
+};
+
+typedef enum rx_handler_result rx_handler_result_t;
+
+typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);
+
+enum netdev_ml_priv_type {
+	ML_PRIV_NONE = 0,
+	ML_PRIV_CAN = 1,
+};
+
+enum netdev_stat_type {
+	NETDEV_PCPU_STAT_NONE = 0,
+	NETDEV_PCPU_STAT_LSTATS = 1,
+	NETDEV_PCPU_STAT_TSTATS = 2,
+	NETDEV_PCPU_STAT_DSTATS = 3,
+};
+
+struct netdev_tc_txq {
+	u16 count;
+	u16 offset;
+};
+
+struct sfp_bus;
+
+struct bpf_xdp_link;
+
+struct bpf_xdp_entity {
+	struct bpf_prog *prog;
+	struct bpf_xdp_link *link;
+};
+
+struct netdev_name_node;
+
+struct dev_ifalias;
+
+struct net_device_ops;
+
+struct xdp_metadata_ops;
+
+struct net_device_core_stats;
+
+struct iw_handler_def;
+
+struct iw_public_data;
+
+struct ethtool_ops;
+
+struct ndisc_ops;
+
+struct header_ops;
+
+struct in_device;
+
+struct inet6_dev;
+
+struct vlan_info;
+
+struct wireless_dev;
+
+struct wpan_dev;
+
+struct netdev_rx_queue;
+
+struct bpf_mprog_entry;
+
+struct netdev_queue;
+
+struct cpu_rmap;
+
+struct Qdisc;
+
+struct xdp_dev_bulk_queue;
+
+struct xps_dev_maps;
+
+struct pcpu_lstats;
+
+struct pcpu_sw_netstats;
+
+struct pcpu_dstats;
+
+struct rtnl_link_ops;
+
+struct netprio_map;
+
+struct phy_device;
+
+struct macsec_ops;
+
+struct udp_tunnel_nic_info;
+
+struct udp_tunnel_nic;
+
+struct rtnl_hw_stats64;
+
+struct devlink_port;
+
+struct net_device {
+	char name[16];
+	struct netdev_name_node *name_node;
+	struct dev_ifalias __attribute__((btf_type_tag("rcu"))) *ifalias;
+	unsigned long mem_end;
+	unsigned long mem_start;
+	unsigned long base_addr;
+	unsigned long state;
+	struct list_head dev_list;
+	struct list_head napi_list;
+	struct list_head unreg_list;
+	struct list_head close_list;
+	struct list_head ptype_all;
+	struct list_head ptype_specific;
+	struct {
+		struct list_head upper;
+		struct list_head lower;
+	} adj_list;
+	unsigned int flags;
+	xdp_features_t xdp_features;
+	unsigned long long priv_flags;
+	const struct net_device_ops *netdev_ops;
+	const struct xdp_metadata_ops *xdp_metadata_ops;
+	int ifindex;
+	unsigned short gflags;
+	unsigned short hard_header_len;
+	unsigned int mtu;
+	unsigned short needed_headroom;
+	unsigned short needed_tailroom;
+	netdev_features_t features;
+	netdev_features_t hw_features;
+	netdev_features_t wanted_features;
+	netdev_features_t vlan_features;
+	netdev_features_t hw_enc_features;
+	netdev_features_t mpls_features;
+	netdev_features_t gso_partial_features;
+	unsigned int min_mtu;
+	unsigned int max_mtu;
+	unsigned short type;
+	unsigned char min_header_len;
+	unsigned char name_assign_type;
+	int group;
+	struct net_device_stats stats;
+	struct net_device_core_stats __attribute__((btf_type_tag("percpu"))) *core_stats;
+	atomic_t carrier_up_count;
+	atomic_t carrier_down_count;
+	const struct iw_handler_def *wireless_handlers;
+	struct iw_public_data *wireless_data;
+	const struct ethtool_ops *ethtool_ops;
+	const struct ndisc_ops *ndisc_ops;
+	const struct header_ops *header_ops;
+	unsigned char operstate;
+	unsigned char link_mode;
+	unsigned char if_port;
+	unsigned char dma;
+	unsigned char perm_addr[32];
+	unsigned char addr_assign_type;
+	unsigned char addr_len;
+	unsigned char upper_level;
+	unsigned char lower_level;
+	unsigned short neigh_priv_len;
+	unsigned short dev_id;
+	unsigned short dev_port;
+	unsigned short padded;
+	spinlock_t addr_list_lock;
+	int irq;
+	struct netdev_hw_addr_list uc;
+	struct netdev_hw_addr_list mc;
+	struct netdev_hw_addr_list dev_addrs;
+	struct kset *queues_kset;
+	unsigned int promiscuity;
+	unsigned int allmulti;
+	bool uc_promisc;
+	struct in_device __attribute__((btf_type_tag("rcu"))) *ip_ptr;
+	struct inet6_dev __attribute__((btf_type_tag("rcu"))) *ip6_ptr;
+	struct vlan_info __attribute__((btf_type_tag("rcu"))) *vlan_info;
+	struct tipc_bearer __attribute__((btf_type_tag("rcu"))) *tipc_ptr;
+	struct wireless_dev *ieee80211_ptr;
+	struct wpan_dev *ieee802154_ptr;
+	const unsigned char *dev_addr;
+	struct netdev_rx_queue *_rx;
+	unsigned int num_rx_queues;
+	unsigned int real_num_rx_queues;
+	struct bpf_prog __attribute__((btf_type_tag("rcu"))) *xdp_prog;
+	unsigned long gro_flush_timeout;
+	int napi_defer_hard_irqs;
+	unsigned int gro_max_size;
+	unsigned int gro_ipv4_max_size;
+	unsigned int xdp_zc_max_segs;
+	rx_handler_func_t __attribute__((btf_type_tag("rcu"))) *rx_handler;
+	void __attribute__((btf_type_tag("rcu"))) *rx_handler_data;
+	struct bpf_mprog_entry __attribute__((btf_type_tag("rcu"))) *tcx_ingress;
+	struct netdev_queue __attribute__((btf_type_tag("rcu"))) *ingress_queue;
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *nf_hooks_ingress;
+	unsigned char broadcast[32];
+	struct cpu_rmap *rx_cpu_rmap;
+	struct hlist_node index_hlist;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct netdev_queue *_tx;
+	unsigned int num_tx_queues;
+	unsigned int real_num_tx_queues;
+	struct Qdisc __attribute__((btf_type_tag("rcu"))) *qdisc;
+	unsigned int tx_queue_len;
+	spinlock_t tx_global_lock;
+	struct xdp_dev_bulk_queue __attribute__((btf_type_tag("percpu"))) *xdp_bulkq;
+	struct xps_dev_maps __attribute__((btf_type_tag("rcu"))) *xps_maps[2];
+	struct bpf_mprog_entry __attribute__((btf_type_tag("rcu"))) *tcx_egress;
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *nf_hooks_egress;
+	struct hlist_head qdisc_hash[16];
+	struct timer_list watchdog_timer;
+	int watchdog_timeo;
+	u32 proto_down_reason;
+	struct list_head todo_list;
+	int __attribute__((btf_type_tag("percpu"))) *pcpu_refcnt;
+	struct ref_tracker_dir refcnt_tracker;
+	struct list_head link_watch_list;
+	enum {
+		NETREG_UNINITIALIZED = 0,
+		NETREG_REGISTERED = 1,
+		NETREG_UNREGISTERING = 2,
+		NETREG_UNREGISTERED = 3,
+		NETREG_RELEASED = 4,
+		NETREG_DUMMY = 5,
+	} reg_state: 8;
+	bool dismantle;
+	enum {
+		RTNL_LINK_INITIALIZED = 0,
+		RTNL_LINK_INITIALIZING = 1,
+	} rtnl_link_state: 16;
+	bool needs_free_netdev;
+	void (*priv_destructor)(struct net_device *);
+	possible_net_t nd_net;
+	void *ml_priv;
+	enum netdev_ml_priv_type ml_priv_type;
+	enum netdev_stat_type pcpu_stat_type: 8;
+	union {
+		struct pcpu_lstats __attribute__((btf_type_tag("percpu"))) *lstats;
+		struct pcpu_sw_netstats __attribute__((btf_type_tag("percpu"))) *tstats;
+		struct pcpu_dstats __attribute__((btf_type_tag("percpu"))) *dstats;
+	};
+	struct device dev;
+	const struct attribute_group *sysfs_groups[4];
+	const struct attribute_group *sysfs_rx_queue_group;
+	const struct rtnl_link_ops *rtnl_link_ops;
+	unsigned int gso_max_size;
+	unsigned int tso_max_size;
+	u16 gso_max_segs;
+	u16 tso_max_segs;
+	unsigned int gso_ipv4_max_size;
+	s16 num_tc;
+	struct netdev_tc_txq tc_to_txq[16];
+	u8 prio_tc_map[16];
+	struct netprio_map __attribute__((btf_type_tag("rcu"))) *priomap;
+	struct phy_device *phydev;
+	struct sfp_bus *sfp_bus;
+	struct lock_class_key *qdisc_tx_busylock;
+	bool proto_down;
+	unsigned int wol_enabled: 1;
+	unsigned int threaded: 1;
+	struct list_head net_notifier_list;
+	const struct macsec_ops *macsec_ops;
+	const struct udp_tunnel_nic_info *udp_tunnel_nic_info;
+	struct udp_tunnel_nic *udp_tunnel_nic;
+	struct bpf_xdp_entity xdp_state[3];
+	u8 dev_addr_shadow[32];
+	netdevice_tracker linkwatch_dev_tracker;
+	netdevice_tracker watchdog_dev_tracker;
+	netdevice_tracker dev_registered_tracker;
+	struct rtnl_hw_stats64 *offload_xstats_l3;
+	struct devlink_port *devlink_port;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+	long: 64;
+};
+
+struct dev_ifalias {
+	struct callback_head rcuhead;
+	char ifalias[0];
+};
+
+enum netdev_tx {
+	__NETDEV_TX_MIN = -2147483648,
+	NETDEV_TX_OK = 0,
+	NETDEV_TX_BUSY = 16,
+};
+
+typedef enum netdev_tx netdev_tx_t;
+
+enum tc_setup_type {
+	TC_QUERY_CAPS = 0,
+	TC_SETUP_QDISC_MQPRIO = 1,
+	TC_SETUP_CLSU32 = 2,
+	TC_SETUP_CLSFLOWER = 3,
+	TC_SETUP_CLSMATCHALL = 4,
+	TC_SETUP_CLSBPF = 5,
+	TC_SETUP_BLOCK = 6,
+	TC_SETUP_QDISC_CBS = 7,
+	TC_SETUP_QDISC_RED = 8,
+	TC_SETUP_QDISC_PRIO = 9,
+	TC_SETUP_QDISC_MQ = 10,
+	TC_SETUP_QDISC_ETF = 11,
+	TC_SETUP_ROOT_QDISC = 12,
+	TC_SETUP_QDISC_GRED = 13,
+	TC_SETUP_QDISC_TAPRIO = 14,
+	TC_SETUP_FT = 15,
+	TC_SETUP_QDISC_ETS = 16,
+	TC_SETUP_QDISC_TBF = 17,
+	TC_SETUP_QDISC_FIFO = 18,
+	TC_SETUP_QDISC_HTB = 19,
+	TC_SETUP_ACT = 20,
+};
+
+struct ifreq;
+
+struct if_settings;
+
+struct ifmap;
+
+struct neigh_parms;
+
+struct rtnl_link_stats64;
+
+struct ifla_vf_info;
+
+struct ifla_vf_stats;
+
+struct nlattr;
+
+struct ifla_vf_guid;
+
+struct netlink_ext_ack;
+
+struct ndmsg;
+
+struct netlink_callback;
+
+struct nlmsghdr;
+
+struct netdev_phys_item_id;
+
+struct netdev_bpf;
+
+struct xdp_frame;
+
+struct xdp_buff;
+
+struct ip_tunnel_parm;
+
+struct net_device_path_ctx;
+
+struct net_device_path;
+
+struct skb_shared_hwtstamps;
+
+struct kernel_hwtstamp_config;
+
+struct net_device_ops {
+	int (*ndo_init)(struct net_device *);
+	void (*ndo_uninit)(struct net_device *);
+	int (*ndo_open)(struct net_device *);
+	int (*ndo_stop)(struct net_device *);
+	netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);
+	netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);
+	u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);
+	void (*ndo_change_rx_flags)(struct net_device *, int);
+	void (*ndo_set_rx_mode)(struct net_device *);
+	int (*ndo_set_mac_address)(struct net_device *, void *);
+	int (*ndo_validate_addr)(struct net_device *);
+	int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocbond)(struct net_device *, struct ifreq *, int);
+	int (*ndo_siocwandev)(struct net_device *, struct if_settings *);
+	int (*ndo_siocdevprivate)(struct net_device *, struct ifreq *, void __attribute__((btf_type_tag("user"))) *, int);
+	int (*ndo_set_config)(struct net_device *, struct ifmap *);
+	int (*ndo_change_mtu)(struct net_device *, int);
+	int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);
+	void (*ndo_tx_timeout)(struct net_device *, unsigned int);
+	void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);
+	bool (*ndo_has_offload_stats)(const struct net_device *, int);
+	int (*ndo_get_offload_stats)(int, const struct net_device *, void *);
+	struct net_device_stats * (*ndo_get_stats)(struct net_device *);
+	int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);
+	int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);
+	int (*ndo_set_vf_mac)(struct net_device *, int, u8 *);
+	int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);
+	int (*ndo_set_vf_rate)(struct net_device *, int, int, int);
+	int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);
+	int (*ndo_set_vf_trust)(struct net_device *, int, bool);
+	int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);
+	int (*ndo_set_vf_link_state)(struct net_device *, int, int);
+	int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);
+	int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);
+	int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);
+	int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*ndo_set_vf_guid)(struct net_device *, int, u64, int);
+	int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);
+	int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);
+	int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);
+	int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);
+	int (*ndo_del_slave)(struct net_device *, struct net_device *);
+	struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);
+	struct net_device * (*ndo_sk_get_lower_dev)(struct net_device *, struct sock *);
+	netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);
+	int (*ndo_set_features)(struct net_device *, netdev_features_t);
+	int (*ndo_neigh_construct)(struct net_device *, struct neighbour *);
+	void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);
+	int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_del_bulk)(struct ndmsg *, struct nlattr **, struct net_device *, u16, struct netlink_ext_ack *);
+	int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);
+	int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);
+	int (*ndo_mdb_add)(struct net_device *, struct nlattr **, u16, struct netlink_ext_ack *);
+	int (*ndo_mdb_del)(struct net_device *, struct nlattr **, struct netlink_ext_ack *);
+	int (*ndo_mdb_dump)(struct net_device *, struct sk_buff *, struct netlink_callback *);
+	int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);
+	int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);
+	int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);
+	int (*ndo_change_carrier)(struct net_device *, bool);
+	int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);
+	int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);
+	void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);
+	void (*ndo_dfwd_del_station)(struct net_device *, void *);
+	int (*ndo_set_tx_maxrate)(struct net_device *, int, u32);
+	int (*ndo_get_iflink)(const struct net_device *);
+	int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);
+	void (*ndo_set_rx_headroom)(struct net_device *, int);
+	int (*ndo_bpf)(struct net_device *, struct netdev_bpf *);
+	int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);
+	struct net_device * (*ndo_xdp_get_xmit_slave)(struct net_device *, struct xdp_buff *);
+	int (*ndo_xsk_wakeup)(struct net_device *, u32, u32);
+	int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);
+	struct net_device * (*ndo_get_peer_dev)(struct net_device *);
+	int (*ndo_fill_forward_path)(struct net_device_path_ctx *, struct net_device_path *);
+	ktime_t (*ndo_get_tstamp)(struct net_device *, const struct skb_shared_hwtstamps *, bool);
+	int (*ndo_hwtstamp_get)(struct net_device *, struct kernel_hwtstamp_config *);
+	int (*ndo_hwtstamp_set)(struct net_device *, struct kernel_hwtstamp_config *, struct netlink_ext_ack *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	u64 android_kabi_reserved5;
+	u64 android_kabi_reserved6;
+	u64 android_kabi_reserved7;
+	u64 android_kabi_reserved8;
+};
+
+struct ifmap {
+	unsigned long mem_start;
+	unsigned long mem_end;
+	unsigned short base_addr;
+	unsigned char irq;
+	unsigned char dma;
+	unsigned char port;
+};
+
+typedef struct {
+	unsigned short encoding;
+	unsigned short parity;
+} raw_hdlc_proto;
+
+typedef struct {
+	unsigned int interval;
+	unsigned int timeout;
+} cisco_proto;
+
+typedef struct {
+	unsigned int t391;
+	unsigned int t392;
+	unsigned int n391;
+	unsigned int n392;
+	unsigned int n393;
+	unsigned short lmi;
+	unsigned short dce;
+} fr_proto;
+
+typedef struct {
+	unsigned int dlci;
+} fr_proto_pvc;
+
+typedef struct {
+	unsigned int dlci;
+	char master[16];
+} fr_proto_pvc_info;
+
+typedef struct {
+	unsigned short dce;
+	unsigned int modulo;
+	unsigned int window;
+	unsigned int t1;
+	unsigned int t2;
+	unsigned int n2;
+} x25_hdlc_proto;
+
+typedef struct {
+	unsigned int clock_rate;
+	unsigned int clock_type;
+	unsigned short loopback;
+} sync_serial_settings;
+
+typedef struct {
+	unsigned int clock_rate;
+	unsigned int clock_type;
+	unsigned short loopback;
+	unsigned int slot_map;
+} te1_settings;
+
+struct if_settings {
+	unsigned int type;
+	unsigned int size;
+	union {
+		raw_hdlc_proto __attribute__((btf_type_tag("user"))) *raw_hdlc;
+		cisco_proto __attribute__((btf_type_tag("user"))) *cisco;
+		fr_proto __attribute__((btf_type_tag("user"))) *fr;
+		fr_proto_pvc __attribute__((btf_type_tag("user"))) *fr_pvc;
+		fr_proto_pvc_info __attribute__((btf_type_tag("user"))) *fr_pvc_info;
+		x25_hdlc_proto __attribute__((btf_type_tag("user"))) *x25;
+		sync_serial_settings __attribute__((btf_type_tag("user"))) *sync;
+		te1_settings __attribute__((btf_type_tag("user"))) *te1;
+	} ifs_ifsu;
+};
+
+struct ifreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union {
+		struct sockaddr ifru_addr;
+		struct sockaddr ifru_dstaddr;
+		struct sockaddr ifru_broadaddr;
+		struct sockaddr ifru_netmask;
+		struct sockaddr ifru_hwaddr;
+		short ifru_flags;
+		int ifru_ivalue;
+		int ifru_mtu;
+		struct ifmap ifru_map;
+		char ifru_slave[16];
+		char ifru_newname[16];
+		void __attribute__((btf_type_tag("user"))) *ifru_data;
+		struct if_settings ifru_settings;
+	} ifr_ifru;
+};
+
+struct neigh_table;
+
+struct neigh_parms {
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	int (*neigh_setup)(struct neighbour *);
+	struct neigh_table *tbl;
+	void *sysctl_table;
+	int dead;
+	refcount_t refcnt;
+	struct callback_head callback_head;
+	int reachable_time;
+	u32 qlen;
+	int data[14];
+	unsigned long data_state[1];
+	u64 android_kabi_reserved1;
+};
+
+struct fib_rule;
+
+struct flowi;
+
+struct fib_lookup_arg;
+
+struct fib_rule_hdr;
+
+struct fib_rules_ops {
+	int family;
+	struct list_head list;
+	int rule_size;
+	int addr_size;
+	int unresolved_rules;
+	int nr_goto_rules;
+	unsigned int fib_rules_seq;
+	int (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);
+	bool (*suppress)(struct fib_rule *, int, struct fib_lookup_arg *);
+	int (*match)(struct fib_rule *, struct flowi *, int);
+	int (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);
+	int (*delete)(struct fib_rule *);
+	int (*compare)(struct fib_rule *, struct fib_rule_hdr *, struct nlattr **);
+	int (*fill)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *);
+	size_t (*nlmsg_payload)(struct fib_rule *);
+	void (*flush_cache)(struct fib_rules_ops *);
+	int nlgroup;
+	struct list_head rules_list;
+	struct module *owner;
+	struct net *fro_net;
+	struct callback_head rcu;
+};
+
+typedef __u64 __be64;
+
+struct fib_kuid_range {
+	kuid_t start;
+	kuid_t end;
+};
+
+struct fib_rule_port_range {
+	__u16 start;
+	__u16 end;
+};
+
+struct fib_rule {
+	struct list_head list;
+	int iifindex;
+	int oifindex;
+	u32 mark;
+	u32 mark_mask;
+	u32 flags;
+	u32 table;
+	u8 action;
+	u8 l3mdev;
+	u8 proto;
+	u8 ip_proto;
+	u32 target;
+	__be64 tun_id;
+	struct fib_rule __attribute__((btf_type_tag("rcu"))) *ctarget;
+	struct net *fr_net;
+	refcount_t refcnt;
+	u32 pref;
+	int suppress_ifgroup;
+	int suppress_prefixlen;
+	char iifname[16];
+	char oifname[16];
+	struct fib_kuid_range uid_range;
+	struct fib_rule_port_range sport_range;
+	struct fib_rule_port_range dport_range;
+	struct callback_head rcu;
+};
+
+struct flowi_tunnel {
+	__be64 tun_id;
+};
+
+struct flowi_common {
+	int flowic_oif;
+	int flowic_iif;
+	int flowic_l3mdev;
+	__u32 flowic_mark;
+	__u8 flowic_tos;
+	__u8 flowic_scope;
+	__u8 flowic_proto;
+	__u8 flowic_flags;
+	__u32 flowic_secid;
+	kuid_t flowic_uid;
+	__u32 flowic_multipath_hash;
+	struct flowi_tunnel flowic_tun_key;
+};
+
+union flowi_uli {
+	struct {
+		__be16 dport;
+		__be16 sport;
+	} ports;
+	struct {
+		__u8 type;
+		__u8 code;
+	} icmpt;
+	__be32 gre_key;
+	struct {
+		__u8 type;
+	} mht;
+};
+
+struct flowi4 {
+	struct flowi_common __fl_common;
+	__be32 saddr;
+	__be32 daddr;
+	union flowi_uli uli;
+};
+
+struct flowi6 {
+	struct flowi_common __fl_common;
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	__be32 flowlabel;
+	union flowi_uli uli;
+	__u32 mp_hash;
+};
+
+struct flowi {
+	union {
+		struct flowi_common __fl_common;
+		struct flowi4 ip4;
+		struct flowi6 ip6;
+	} u;
+};
+
+struct fib_lookup_arg {
+	void *lookup_ptr;
+	const void *lookup_data;
+	void *result;
+	struct fib_rule *rule;
+	u32 table;
+	int flags;
+};
+
+struct fib_rule_hdr {
+	__u8 family;
+	__u8 dst_len;
+	__u8 src_len;
+	__u8 tos;
+	__u8 table;
+	__u8 res1;
+	__u8 res2;
+	__u8 action;
+	__u32 flags;
+};
+
+struct nlattr {
+	__u16 nla_len;
+	__u16 nla_type;
+};
+
+struct nla_policy;
+
+struct netlink_ext_ack {
+	const char *_msg;
+	const struct nlattr *bad_attr;
+	const struct nla_policy *policy;
+	const struct nlattr *miss_nest;
+	u16 miss_type;
+	u8 cookie[20];
+	u8 cookie_len;
+	char _msg_buf[80];
+};
+
+struct netlink_range_validation;
+
+struct netlink_range_validation_signed;
+
+struct nla_policy {
+	u8 type;
+	u8 validation_type;
+	u16 len;
+	union {
+		u16 strict_start_type;
+		const u32 bitfield32_valid;
+		const u32 mask;
+		const char *reject_message;
+		const struct nla_policy *nested_policy;
+		struct netlink_range_validation *range;
+		struct netlink_range_validation_signed *range_signed;
+		struct {
+			s16 min;
+			s16 max;
+		};
+		int (*validate)(const struct nlattr *, struct netlink_ext_ack *);
+	};
+};
+
+struct netlink_range_validation {
+	u64 min;
+	u64 max;
+};
+
+struct netlink_range_validation_signed {
+	s64 min;
+	s64 max;
+};
+
+struct fib_notifier_ops {
+	int family;
+	struct list_head list;
+	unsigned int (*fib_seq_read)(struct net *);
+	int (*fib_dump)(struct net *, struct notifier_block *, struct netlink_ext_ack *);
+	struct module *owner;
+	struct callback_head rcu;
+};
+
+struct hh_cache {
+	unsigned int hh_len;
+	seqlock_t hh_lock;
+	unsigned long hh_data[12];
+};
+
+struct neigh_ops;
+
+struct neighbour {
+	struct neighbour __attribute__((btf_type_tag("rcu"))) *next;
+	struct neigh_table *tbl;
+	struct neigh_parms *parms;
+	unsigned long confirmed;
+	unsigned long updated;
+	rwlock_t lock;
+	refcount_t refcnt;
+	unsigned int arp_queue_len_bytes;
+	struct sk_buff_head arp_queue;
+	struct timer_list timer;
+	unsigned long used;
+	atomic_t probes;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	u8 protocol;
+	u32 flags;
+	seqlock_t ha_lock;
+	long: 0;
+	unsigned char ha[32];
+	struct hh_cache hh;
+	int (*output)(struct neighbour *, struct sk_buff *);
+	const struct neigh_ops *ops;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	struct callback_head rcu;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u64 android_kabi_reserved1;
+	u8 primary_key[0];
+};
+
+struct pneigh_entry;
+
+struct neigh_statistics;
+
+struct neigh_hash_table;
+
+struct neigh_table {
+	int family;
+	unsigned int entry_size;
+	unsigned int key_len;
+	__be16 protocol;
+	__u32 (*hash)(const void *, const struct net_device *, __u32 *);
+	bool (*key_eq)(const struct neighbour *, const void *);
+	int (*constructor)(struct neighbour *);
+	int (*pconstructor)(struct pneigh_entry *);
+	void (*pdestructor)(struct pneigh_entry *);
+	void (*proxy_redo)(struct sk_buff *);
+	int (*is_multicast)(const void *);
+	bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);
+	char *id;
+	struct neigh_parms parms;
+	struct list_head parms_list;
+	int gc_interval;
+	int gc_thresh1;
+	int gc_thresh2;
+	int gc_thresh3;
+	unsigned long last_flush;
+	struct delayed_work gc_work;
+	struct delayed_work managed_work;
+	struct timer_list proxy_timer;
+	struct sk_buff_head proxy_queue;
+	atomic_t entries;
+	atomic_t gc_entries;
+	struct list_head gc_list;
+	struct list_head managed_list;
+	rwlock_t lock;
+	unsigned long last_rand;
+	struct neigh_statistics __attribute__((btf_type_tag("percpu"))) *stats;
+	struct neigh_hash_table __attribute__((btf_type_tag("rcu"))) *nht;
+	struct pneigh_entry **phash_buckets;
+	u64 android_kabi_reserved1;
+};
+
+struct pneigh_entry {
+	struct pneigh_entry *next;
+	possible_net_t net;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+	u8 protocol;
+	u32 key[0];
+};
+
+struct neigh_statistics {
+	unsigned long allocs;
+	unsigned long destroys;
+	unsigned long hash_grows;
+	unsigned long res_failed;
+	unsigned long lookups;
+	unsigned long hits;
+	unsigned long rcv_probes_mcast;
+	unsigned long rcv_probes_ucast;
+	unsigned long periodic_gc_runs;
+	unsigned long forced_gc_runs;
+	unsigned long unres_discards;
+	unsigned long table_fulls;
+};
+
+struct neigh_hash_table {
+	struct neighbour __attribute__((btf_type_tag("rcu"))) **hash_buckets;
+	unsigned int hash_shift;
+	__u32 hash_rnd[4];
+	struct callback_head rcu;
+};
+
+struct neigh_ops {
+	int family;
+	void (*solicit)(struct neighbour *, struct sk_buff *);
+	void (*error_report)(struct neighbour *, struct sk_buff *);
+	int (*output)(struct neighbour *, struct sk_buff *);
+	int (*connected_output)(struct neighbour *, struct sk_buff *);
+};
+
+struct ipv6_stable_secret {
+	bool initialized;
+	struct in6_addr secret;
+};
+
+struct ipv6_devconf {
+	__s32 forwarding;
+	__s32 hop_limit;
+	__s32 mtu6;
+	__s32 accept_ra;
+	__s32 accept_redirects;
+	__s32 autoconf;
+	__s32 dad_transmits;
+	__s32 rtr_solicits;
+	__s32 rtr_solicit_interval;
+	__s32 rtr_solicit_max_interval;
+	__s32 rtr_solicit_delay;
+	__s32 force_mld_version;
+	__s32 mldv1_unsolicited_report_interval;
+	__s32 mldv2_unsolicited_report_interval;
+	__s32 use_tempaddr;
+	__s32 temp_valid_lft;
+	__s32 temp_prefered_lft;
+	__s32 regen_max_retry;
+	__s32 max_desync_factor;
+	__s32 max_addresses;
+	__s32 accept_ra_defrtr;
+	__u32 ra_defrtr_metric;
+	__s32 accept_ra_min_hop_limit;
+	__s32 accept_ra_min_lft;
+	__s32 accept_ra_pinfo;
+	__s32 ignore_routes_with_linkdown;
+	__s32 accept_ra_rtr_pref;
+	__s32 rtr_probe_interval;
+	__s32 accept_ra_rt_info_min_plen;
+	__s32 accept_ra_rt_info_max_plen;
+	__s32 accept_ra_rt_table;
+	__s32 proxy_ndp;
+	__s32 accept_source_route;
+	__s32 accept_ra_from_local;
+	__s32 optimistic_dad;
+	__s32 use_optimistic;
+	atomic_t mc_forwarding;
+	__s32 disable_ipv6;
+	__s32 drop_unicast_in_l2_multicast;
+	__s32 accept_dad;
+	__s32 force_tllao;
+	__s32 ndisc_notify;
+	__s32 suppress_frag_ndisc;
+	__s32 accept_ra_mtu;
+	__s32 drop_unsolicited_na;
+	__s32 accept_untracked_na;
+	struct ipv6_stable_secret stable_secret;
+	__s32 use_oif_addrs_only;
+	__s32 keep_addr_on_down;
+	__s32 seg6_enabled;
+	__u32 enhanced_dad;
+	__u32 addr_gen_mode;
+	__s32 disable_policy;
+	__s32 ndisc_tclass;
+	__s32 rpl_seg_enabled;
+	__u32 ioam6_id;
+	__u32 ioam6_id_wide;
+	__u8 ioam6_enabled;
+	__u8 ndisc_evict_nocarrier;
+	struct ctl_table_header *sysctl_header;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct rtnl_link_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+	__u64 collisions;
+	__u64 rx_length_errors;
+	__u64 rx_over_errors;
+	__u64 rx_crc_errors;
+	__u64 rx_frame_errors;
+	__u64 rx_fifo_errors;
+	__u64 rx_missed_errors;
+	__u64 tx_aborted_errors;
+	__u64 tx_carrier_errors;
+	__u64 tx_fifo_errors;
+	__u64 tx_heartbeat_errors;
+	__u64 tx_window_errors;
+	__u64 rx_compressed;
+	__u64 tx_compressed;
+	__u64 rx_nohandler;
+	__u64 rx_otherhost_dropped;
+};
+
+struct ifla_vf_info {
+	__u32 vf;
+	__u8 mac[32];
+	__u32 vlan;
+	__u32 qos;
+	__u32 spoofchk;
+	__u32 linkstate;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+	__u32 rss_query_en;
+	__u32 trusted;
+	__be16 vlan_proto;
+};
+
+struct ifla_vf_stats {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 broadcast;
+	__u64 multicast;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+};
+
+struct ifla_vf_guid {
+	__u32 vf;
+	__u64 guid;
+};
+
+struct ndmsg {
+	__u8 ndm_family;
+	__u8 ndm_pad1;
+	__u16 ndm_pad2;
+	__s32 ndm_ifindex;
+	__u16 ndm_state;
+	__u8 ndm_flags;
+	__u8 ndm_type;
+};
+
+struct netlink_callback {
+	struct sk_buff *skb;
+	const struct nlmsghdr *nlh;
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	void *data;
+	struct module *module;
+	struct netlink_ext_ack *extack;
+	u16 family;
+	u16 answer_flags;
+	u32 min_dump_alloc;
+	unsigned int prev_seq;
+	unsigned int seq;
+	bool strict_check;
+	union {
+		u8 ctx[48];
+		long args[6];
+	};
+};
+
+struct nlmsghdr {
+	__u32 nlmsg_len;
+	__u16 nlmsg_type;
+	__u16 nlmsg_flags;
+	__u32 nlmsg_seq;
+	__u32 nlmsg_pid;
+};
+
+struct netdev_phys_item_id {
+	unsigned char id[32];
+	unsigned char id_len;
+};
+
+enum bpf_netdev_command {
+	XDP_SETUP_PROG = 0,
+	XDP_SETUP_PROG_HW = 1,
+	BPF_OFFLOAD_MAP_ALLOC = 2,
+	BPF_OFFLOAD_MAP_FREE = 3,
+	XDP_SETUP_XSK_POOL = 4,
+};
+
+struct bpf_offloaded_map;
+
+struct xsk_buff_pool;
+
+struct netdev_bpf {
+	enum bpf_netdev_command command;
+	union {
+		struct {
+			u32 flags;
+			struct bpf_prog *prog;
+			struct netlink_ext_ack *extack;
+		};
+		struct {
+			struct bpf_offloaded_map *offmap;
+		};
+		struct {
+			struct xsk_buff_pool *pool;
+			u16 queue_id;
+		} xsk;
+	};
+};
+
+struct net_device_path_ctx {
+	const struct net_device *dev;
+	u8 daddr[6];
+	int num_vlans;
+	struct {
+		u16 id;
+		__be16 proto;
+	} vlan[2];
+};
+
+enum net_device_path_type {
+	DEV_PATH_ETHERNET = 0,
+	DEV_PATH_VLAN = 1,
+	DEV_PATH_BRIDGE = 2,
+	DEV_PATH_PPPOE = 3,
+	DEV_PATH_DSA = 4,
+	DEV_PATH_MTK_WDMA = 5,
+};
+
+struct net_device_path {
+	enum net_device_path_type type;
+	const struct net_device *dev;
+	union {
+		struct {
+			u16 id;
+			__be16 proto;
+			u8 h_dest[6];
+		} encap;
+		struct {
+			enum {
+				DEV_PATH_BR_VLAN_KEEP = 0,
+				DEV_PATH_BR_VLAN_TAG = 1,
+				DEV_PATH_BR_VLAN_UNTAG = 2,
+				DEV_PATH_BR_VLAN_UNTAG_HW = 3,
+			} vlan_mode;
+			u16 vlan_id;
+			__be16 vlan_proto;
+		} bridge;
+		struct {
+			int port;
+			u16 proto;
+		} dsa;
+		struct {
+			u8 wdma_idx;
+			u8 queue;
+			u16 wcid;
+			u8 bss;
+		} mtk_wdma;
+	};
+};
+
+struct skb_shared_hwtstamps {
+	union {
+		ktime_t hwtstamp;
+		void *netdev_data;
+	};
+};
+
+enum hwtstamp_source {
+	HWTSTAMP_SOURCE_NETDEV = 0,
+	HWTSTAMP_SOURCE_PHYLIB = 1,
+};
+
+struct kernel_hwtstamp_config {
+	int flags;
+	int tx_type;
+	int rx_filter;
+	struct ifreq *ifr;
+	bool copied_to_user;
+	enum hwtstamp_source source;
+};
+
+enum xdp_rss_hash_type {
+	XDP_RSS_L3_IPV4 = 1,
+	XDP_RSS_L3_IPV6 = 2,
+	XDP_RSS_L3_DYNHDR = 4,
+	XDP_RSS_L4 = 8,
+	XDP_RSS_L4_TCP = 16,
+	XDP_RSS_L4_UDP = 32,
+	XDP_RSS_L4_SCTP = 64,
+	XDP_RSS_L4_IPSEC = 128,
+	XDP_RSS_TYPE_NONE = 0,
+	XDP_RSS_TYPE_L2 = 0,
+	XDP_RSS_TYPE_L3_IPV4 = 1,
+	XDP_RSS_TYPE_L3_IPV6 = 2,
+	XDP_RSS_TYPE_L3_IPV4_OPT = 5,
+	XDP_RSS_TYPE_L3_IPV6_EX = 6,
+	XDP_RSS_TYPE_L4_ANY = 8,
+	XDP_RSS_TYPE_L4_IPV4_TCP = 25,
+	XDP_RSS_TYPE_L4_IPV4_UDP = 41,
+	XDP_RSS_TYPE_L4_IPV4_SCTP = 73,
+	XDP_RSS_TYPE_L4_IPV4_IPSEC = 137,
+	XDP_RSS_TYPE_L4_IPV6_TCP = 26,
+	XDP_RSS_TYPE_L4_IPV6_UDP = 42,
+	XDP_RSS_TYPE_L4_IPV6_SCTP = 74,
+	XDP_RSS_TYPE_L4_IPV6_IPSEC = 138,
+	XDP_RSS_TYPE_L4_IPV6_TCP_EX = 30,
+	XDP_RSS_TYPE_L4_IPV6_UDP_EX = 46,
+	XDP_RSS_TYPE_L4_IPV6_SCTP_EX = 78,
+};
+
+struct xdp_md;
+
+struct xdp_metadata_ops {
+	int (*xmo_rx_timestamp)(const struct xdp_md *, u64 *);
+	int (*xmo_rx_hash)(const struct xdp_md *, u32 *, enum xdp_rss_hash_type *);
+};
+
+struct net_device_core_stats {
+	unsigned long rx_dropped;
+	unsigned long tx_dropped;
+	unsigned long rx_nohandler;
+	unsigned long rx_otherhost_dropped;
+};
+
+struct iw_request_info;
+
+union iwreq_data;
+
+typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *);
+
+struct iw_priv_args;
+
+struct iw_statistics;
+
+struct iw_handler_def {
+	const iw_handler *standard;
+	__u16 num_standard;
+	__u16 num_private;
+	__u16 num_private_args;
+	const iw_handler *private;
+	const struct iw_priv_args *private_args;
+	struct iw_statistics * (*get_wireless_stats)(struct net_device *);
+};
+
+enum ethtool_phys_id_state {
+	ETHTOOL_ID_INACTIVE = 0,
+	ETHTOOL_ID_ACTIVE = 1,
+	ETHTOOL_ID_ON = 2,
+	ETHTOOL_ID_OFF = 3,
+};
+
+struct ethtool_drvinfo;
+
+struct ethtool_regs;
+
+struct ethtool_wolinfo;
+
+struct ethtool_link_ext_state_info;
+
+struct ethtool_link_ext_stats;
+
+struct ethtool_eeprom;
+
+struct ethtool_coalesce;
+
+struct kernel_ethtool_coalesce;
+
+struct ethtool_ringparam;
+
+struct kernel_ethtool_ringparam;
+
+struct ethtool_pause_stats;
+
+struct ethtool_pauseparam;
+
+struct ethtool_test;
+
+struct ethtool_stats;
+
+struct ethtool_rxnfc;
+
+struct ethtool_flash;
+
+struct ethtool_channels;
+
+struct ethtool_dump;
+
+struct ethtool_ts_info;
+
+struct ethtool_modinfo;
+
+struct ethtool_eee;
+
+struct ethtool_tunable;
+
+struct ethtool_link_ksettings;
+
+struct ethtool_fec_stats;
+
+struct ethtool_fecparam;
+
+struct ethtool_module_eeprom;
+
+struct ethtool_eth_phy_stats;
+
+struct ethtool_eth_mac_stats;
+
+struct ethtool_eth_ctrl_stats;
+
+struct ethtool_rmon_stats;
+
+struct ethtool_rmon_hist_range;
+
+struct ethtool_module_power_mode_params;
+
+struct ethtool_mm_state;
+
+struct ethtool_mm_cfg;
+
+struct ethtool_mm_stats;
+
+struct ethtool_ops {
+	u32 cap_link_lanes_supported: 1;
+	u32 supported_coalesce_params;
+	u32 supported_ring_params;
+	void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
+	int (*get_regs_len)(struct net_device *);
+	void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
+	void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
+	int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
+	u32 (*get_msglevel)(struct net_device *);
+	void (*set_msglevel)(struct net_device *, u32);
+	int (*nway_reset)(struct net_device *);
+	u32 (*get_link)(struct net_device *);
+	int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);
+	void (*get_link_ext_stats)(struct net_device *, struct ethtool_link_ext_stats *);
+	int (*get_eeprom_len)(struct net_device *);
+	int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *);
+	void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *);
+	void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);
+	void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);
+	void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
+	void (*get_strings)(struct net_device *, u32, u8 *);
+	int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
+	void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*begin)(struct net_device *);
+	void (*complete)(struct net_device *);
+	u32 (*get_priv_flags)(struct net_device *);
+	int (*set_priv_flags)(struct net_device *, u32);
+	int (*get_sset_count)(struct net_device *, int);
+	int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);
+	int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
+	int (*flash_device)(struct net_device *, struct ethtool_flash *);
+	int (*reset)(struct net_device *, u32 *);
+	u32 (*get_rxfh_key_size)(struct net_device *);
+	u32 (*get_rxfh_indir_size)(struct net_device *);
+	int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);
+	int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);
+	int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);
+	int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);
+	void (*get_channels)(struct net_device *, struct ethtool_channels *);
+	int (*set_channels)(struct net_device *, struct ethtool_channels *);
+	int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
+	int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);
+	int (*set_dump)(struct net_device *, struct ethtool_dump *);
+	int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
+	int (*get_module_info)(struct net_device *, struct ethtool_modinfo *);
+	int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
+	int (*get_eee)(struct net_device *, struct ethtool_eee *);
+	int (*set_eee)(struct net_device *, struct ethtool_eee *);
+	int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);
+	int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);
+	int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);
+	void (*get_fec_stats)(struct net_device *, struct ethtool_fec_stats *);
+	int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);
+	void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);
+	int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);
+	int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);
+	int (*get_module_eeprom_by_page)(struct net_device *, const struct ethtool_module_eeprom *, struct netlink_ext_ack *);
+	void (*get_eth_phy_stats)(struct net_device *, struct ethtool_eth_phy_stats *);
+	void (*get_eth_mac_stats)(struct net_device *, struct ethtool_eth_mac_stats *);
+	void (*get_eth_ctrl_stats)(struct net_device *, struct ethtool_eth_ctrl_stats *);
+	void (*get_rmon_stats)(struct net_device *, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
+	int (*get_module_power_mode)(struct net_device *, struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+	int (*set_module_power_mode)(struct net_device *, const struct ethtool_module_power_mode_params *, struct netlink_ext_ack *);
+	int (*get_mm)(struct net_device *, struct ethtool_mm_state *);
+	int (*set_mm)(struct net_device *, struct ethtool_mm_cfg *, struct netlink_ext_ack *);
+	void (*get_mm_stats)(struct net_device *, struct ethtool_mm_stats *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct nd_opt_hdr;
+
+struct ndisc_options;
+
+struct prefix_info;
+
+struct ndisc_ops {
+	int (*is_useropt)(u8);
+	int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);
+	void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);
+	int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);
+	void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);
+	void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);
+};
+
+struct header_ops {
+	int (*create)(struct sk_buff *, struct net_device *, unsigned short, const void *, const void *, unsigned int);
+	int (*parse)(const struct sk_buff *, unsigned char *);
+	int (*cache)(const struct neighbour *, struct hh_cache *, __be16);
+	void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);
+	bool (*validate)(const char *, unsigned int);
+	__be16 (*parse_protocol)(const struct sk_buff *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct ipv4_devconf {
+	void *sysctl;
+	int data[33];
+	unsigned long state[1];
+};
+
+struct in_ifaddr;
+
+struct ip_mc_list;
+
+struct in_device {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	refcount_t refcnt;
+	int dead;
+	struct in_ifaddr __attribute__((btf_type_tag("rcu"))) *ifa_list;
+	struct ip_mc_list __attribute__((btf_type_tag("rcu"))) *mc_list;
+	struct ip_mc_list __attribute__((btf_type_tag("rcu"))) * __attribute__((btf_type_tag("rcu"))) *mc_hash;
+	int mc_count;
+	spinlock_t mc_tomb_lock;
+	struct ip_mc_list *mc_tomb;
+	unsigned long mr_v1_seen;
+	unsigned long mr_v2_seen;
+	unsigned long mr_maxdelay;
+	unsigned long mr_qi;
+	unsigned long mr_qri;
+	unsigned char mr_qrv;
+	unsigned char mr_gq_running;
+	u32 mr_ifc_count;
+	struct timer_list mr_gq_timer;
+	struct timer_list mr_ifc_timer;
+	struct neigh_parms *arp_parms;
+	struct ipv4_devconf cnf;
+	struct callback_head callback_head;
+};
+
+struct icmpv6_mib_device;
+
+struct icmpv6msg_mib_device;
+
+struct ipv6_devstat {
+	struct proc_dir_entry *proc_dir_entry;
+	struct ipstats_mib __attribute__((btf_type_tag("percpu"))) *ipv6;
+	struct icmpv6_mib_device *icmpv6dev;
+	struct icmpv6msg_mib_device *icmpv6msgdev;
+};
+
+struct ifmcaddr6;
+
+struct ifacaddr6;
+
+struct inet6_dev {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head addr_list;
+	struct ifmcaddr6 __attribute__((btf_type_tag("rcu"))) *mc_list;
+	struct ifmcaddr6 __attribute__((btf_type_tag("rcu"))) *mc_tomb;
+	unsigned char mc_qrv;
+	unsigned char mc_gq_running;
+	unsigned char mc_ifc_count;
+	unsigned char mc_dad_count;
+	unsigned long mc_v1_seen;
+	unsigned long mc_qi;
+	unsigned long mc_qri;
+	unsigned long mc_maxdelay;
+	struct delayed_work mc_gq_work;
+	struct delayed_work mc_ifc_work;
+	struct delayed_work mc_dad_work;
+	struct delayed_work mc_query_work;
+	struct delayed_work mc_report_work;
+	struct sk_buff_head mc_query_queue;
+	struct sk_buff_head mc_report_queue;
+	spinlock_t mc_query_lock;
+	spinlock_t mc_report_lock;
+	struct mutex mc_lock;
+	struct ifacaddr6 *ac_list;
+	rwlock_t lock;
+	refcount_t refcnt;
+	__u32 if_flags;
+	int dead;
+	u32 desync_factor;
+	struct list_head tempaddr_list;
+	struct in6_addr token;
+	struct neigh_parms *nd_parms;
+	struct ipv6_devconf cnf;
+	struct ipv6_devstat stats;
+	struct timer_list rs_timer;
+	__s32 rs_interval;
+	__u8 rs_probes;
+	unsigned long tstamp;
+	struct callback_head rcu;
+	unsigned int ra_mtu;
+};
+
+struct ip6_sf_list;
+
+struct ifmcaddr6 {
+	struct in6_addr mca_addr;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 __attribute__((btf_type_tag("rcu"))) *next;
+	struct ip6_sf_list __attribute__((btf_type_tag("rcu"))) *mca_sources;
+	struct ip6_sf_list __attribute__((btf_type_tag("rcu"))) *mca_tomb;
+	unsigned int mca_sfmode;
+	unsigned char mca_crcount;
+	unsigned long mca_sfcount[2];
+	struct delayed_work mca_work;
+	unsigned int mca_flags;
+	int mca_users;
+	refcount_t mca_refcnt;
+	unsigned long mca_cstamp;
+	unsigned long mca_tstamp;
+	struct callback_head rcu;
+};
+
+struct ip6_sf_list {
+	struct ip6_sf_list __attribute__((btf_type_tag("rcu"))) *sf_next;
+	struct in6_addr sf_addr;
+	unsigned long sf_count[2];
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+	struct callback_head rcu;
+};
+
+struct ifacaddr6 {
+	struct in6_addr aca_addr;
+	struct fib6_info *aca_rt;
+	struct ifacaddr6 *aca_next;
+	struct hlist_node aca_addr_lst;
+	int aca_users;
+	refcount_t aca_refcnt;
+	unsigned long aca_cstamp;
+	unsigned long aca_tstamp;
+	struct callback_head rcu;
+};
+
+struct icmpv6_mib_device {
+	atomic_long_t mibs[7];
+};
+
+struct icmpv6msg_mib_device {
+	atomic_long_t mibs[512];
+};
+
+struct vlan_group {
+	unsigned int nr_vlan_devs;
+	struct hlist_node hlist;
+	struct net_device **vlan_devices_arrays[16];
+};
+
+struct vlan_info {
+	struct net_device *real_dev;
+	struct vlan_group grp;
+	struct list_head vid_list;
+	unsigned int nr_vids;
+	struct callback_head rcu;
+};
+
+enum bpf_prog_type {
+	BPF_PROG_TYPE_UNSPEC = 0,
+	BPF_PROG_TYPE_SOCKET_FILTER = 1,
+	BPF_PROG_TYPE_KPROBE = 2,
+	BPF_PROG_TYPE_SCHED_CLS = 3,
+	BPF_PROG_TYPE_SCHED_ACT = 4,
+	BPF_PROG_TYPE_TRACEPOINT = 5,
+	BPF_PROG_TYPE_XDP = 6,
+	BPF_PROG_TYPE_PERF_EVENT = 7,
+	BPF_PROG_TYPE_CGROUP_SKB = 8,
+	BPF_PROG_TYPE_CGROUP_SOCK = 9,
+	BPF_PROG_TYPE_LWT_IN = 10,
+	BPF_PROG_TYPE_LWT_OUT = 11,
+	BPF_PROG_TYPE_LWT_XMIT = 12,
+	BPF_PROG_TYPE_SOCK_OPS = 13,
+	BPF_PROG_TYPE_SK_SKB = 14,
+	BPF_PROG_TYPE_CGROUP_DEVICE = 15,
+	BPF_PROG_TYPE_SK_MSG = 16,
+	BPF_PROG_TYPE_RAW_TRACEPOINT = 17,
+	BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,
+	BPF_PROG_TYPE_LWT_SEG6LOCAL = 19,
+	BPF_PROG_TYPE_LIRC_MODE2 = 20,
+	BPF_PROG_TYPE_SK_REUSEPORT = 21,
+	BPF_PROG_TYPE_FLOW_DISSECTOR = 22,
+	BPF_PROG_TYPE_CGROUP_SYSCTL = 23,
+	BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,
+	BPF_PROG_TYPE_CGROUP_SOCKOPT = 25,
+	BPF_PROG_TYPE_TRACING = 26,
+	BPF_PROG_TYPE_STRUCT_OPS = 27,
+	BPF_PROG_TYPE_EXT = 28,
+	BPF_PROG_TYPE_LSM = 29,
+	BPF_PROG_TYPE_SK_LOOKUP = 30,
+	BPF_PROG_TYPE_SYSCALL = 31,
+	BPF_PROG_TYPE_NETFILTER = 32,
+	BPF_PROG_TYPE_FUSE = 33,
+};
+
+enum bpf_attach_type {
+	BPF_CGROUP_INET_INGRESS = 0,
+	BPF_CGROUP_INET_EGRESS = 1,
+	BPF_CGROUP_INET_SOCK_CREATE = 2,
+	BPF_CGROUP_SOCK_OPS = 3,
+	BPF_SK_SKB_STREAM_PARSER = 4,
+	BPF_SK_SKB_STREAM_VERDICT = 5,
+	BPF_CGROUP_DEVICE = 6,
+	BPF_SK_MSG_VERDICT = 7,
+	BPF_CGROUP_INET4_BIND = 8,
+	BPF_CGROUP_INET6_BIND = 9,
+	BPF_CGROUP_INET4_CONNECT = 10,
+	BPF_CGROUP_INET6_CONNECT = 11,
+	BPF_CGROUP_INET4_POST_BIND = 12,
+	BPF_CGROUP_INET6_POST_BIND = 13,
+	BPF_CGROUP_UDP4_SENDMSG = 14,
+	BPF_CGROUP_UDP6_SENDMSG = 15,
+	BPF_LIRC_MODE2 = 16,
+	BPF_FLOW_DISSECTOR = 17,
+	BPF_CGROUP_SYSCTL = 18,
+	BPF_CGROUP_UDP4_RECVMSG = 19,
+	BPF_CGROUP_UDP6_RECVMSG = 20,
+	BPF_CGROUP_GETSOCKOPT = 21,
+	BPF_CGROUP_SETSOCKOPT = 22,
+	BPF_TRACE_RAW_TP = 23,
+	BPF_TRACE_FENTRY = 24,
+	BPF_TRACE_FEXIT = 25,
+	BPF_MODIFY_RETURN = 26,
+	BPF_LSM_MAC = 27,
+	BPF_TRACE_ITER = 28,
+	BPF_CGROUP_INET4_GETPEERNAME = 29,
+	BPF_CGROUP_INET6_GETPEERNAME = 30,
+	BPF_CGROUP_INET4_GETSOCKNAME = 31,
+	BPF_CGROUP_INET6_GETSOCKNAME = 32,
+	BPF_XDP_DEVMAP = 33,
+	BPF_CGROUP_INET_SOCK_RELEASE = 34,
+	BPF_XDP_CPUMAP = 35,
+	BPF_SK_LOOKUP = 36,
+	BPF_XDP = 37,
+	BPF_SK_SKB_VERDICT = 38,
+	BPF_SK_REUSEPORT_SELECT = 39,
+	BPF_SK_REUSEPORT_SELECT_OR_MIGRATE = 40,
+	BPF_PERF_EVENT = 41,
+	BPF_TRACE_KPROBE_MULTI = 42,
+	BPF_LSM_CGROUP = 43,
+	BPF_STRUCT_OPS = 44,
+	BPF_NETFILTER = 45,
+	BPF_TCX_INGRESS = 46,
+	BPF_TCX_EGRESS = 47,
+	BPF_TRACE_UPROBE_MULTI = 48,
+	__MAX_BPF_ATTACH_TYPE = 49,
+};
+
+struct sock_filter {
+	__u16 code;
+	__u8 jt;
+	__u8 jf;
+	__u32 k;
+};
+
+struct bpf_insn {
+	__u8 code;
+	__u8 dst_reg: 4;
+	__u8 src_reg: 4;
+	__s16 off;
+	__s32 imm;
+};
+
+struct bpf_prog_stats;
+
+struct bpf_prog_aux;
+
+struct sock_fprog_kern;
+
+struct bpf_prog {
+	u16 pages;
+	u16 jited: 1;
+	u16 jit_requested: 1;
+	u16 gpl_compatible: 1;
+	u16 cb_access: 1;
+	u16 dst_needed: 1;
+	u16 blinding_requested: 1;
+	u16 blinded: 1;
+	u16 is_func: 1;
+	u16 kprobe_override: 1;
+	u16 has_callchain_buf: 1;
+	u16 enforce_expected_attach_type: 1;
+	u16 call_get_stack: 1;
+	u16 call_get_func_ip: 1;
+	u16 tstamp_type_access: 1;
+	enum bpf_prog_type type;
+	enum bpf_attach_type expected_attach_type;
+	u32 len;
+	u32 jited_len;
+	u8 tag[8];
+	struct bpf_prog_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	int __attribute__((btf_type_tag("percpu"))) *active;
+	unsigned int (*bpf_func)(const void *, const struct bpf_insn *);
+	struct bpf_prog_aux *aux;
+	struct sock_fprog_kern *orig_prog;
+	u64 android_kabi_reserved1;
+	union {
+		struct {
+			struct {} __empty_insns;
+			struct sock_filter insns[0];
+		};
+		struct {
+			struct {} __empty_insnsi;
+			struct bpf_insn insnsi[0];
+		};
+	};
+};
+
+struct bpf_mprog_fp {
+	struct bpf_prog *prog;
+};
+
+struct bpf_mprog_bundle;
+
+struct bpf_mprog_entry {
+	struct bpf_mprog_fp fp_items[64];
+	struct bpf_mprog_bundle *parent;
+};
+
+struct dql {
+	unsigned int num_queued;
+	unsigned int adj_limit;
+	unsigned int last_obj_cnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int limit;
+	unsigned int num_completed;
+	unsigned int prev_ovlimit;
+	unsigned int prev_num_queued;
+	unsigned int prev_last_obj_cnt;
+	unsigned int lowest_slack;
+	unsigned long slack_start_time;
+	unsigned int max_limit;
+	unsigned int min_limit;
+	unsigned int slack_hold_time;
+	long: 64;
+	long: 64;
+};
+
+struct netdev_queue {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct Qdisc __attribute__((btf_type_tag("rcu"))) *qdisc;
+	struct Qdisc __attribute__((btf_type_tag("rcu"))) *qdisc_sleeping;
+	struct kobject kobj;
+	unsigned long tx_maxrate;
+	atomic_long_t trans_timeout;
+	struct net_device *sb_dev;
+	struct xsk_buff_pool *pool;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t _xmit_lock;
+	int xmit_lock_owner;
+	unsigned long trans_start;
+	unsigned long state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct dql dql;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct qdisc_skb_head {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	__u32 qlen;
+	spinlock_t lock;
+};
+
+typedef struct {
+	local64_t v;
+} u64_stats_t;
+
+struct gnet_stats_basic_sync {
+	u64_stats_t bytes;
+	u64_stats_t packets;
+	struct u64_stats_sync syncp;
+};
+
+struct gnet_stats_queue {
+	__u32 qlen;
+	__u32 backlog;
+	__u32 drops;
+	__u32 requeues;
+	__u32 overlimits;
+};
+
+struct Qdisc_ops;
+
+struct qdisc_size_table;
+
+struct net_rate_estimator;
+
+struct Qdisc {
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	unsigned int flags;
+	u32 limit;
+	const struct Qdisc_ops *ops;
+	struct qdisc_size_table __attribute__((btf_type_tag("rcu"))) *stab;
+	struct hlist_node hash;
+	u32 handle;
+	u32 parent;
+	struct netdev_queue *dev_queue;
+	struct net_rate_estimator __attribute__((btf_type_tag("rcu"))) *rate_est;
+	struct gnet_stats_basic_sync __attribute__((btf_type_tag("percpu"))) *cpu_bstats;
+	struct gnet_stats_queue __attribute__((btf_type_tag("percpu"))) *cpu_qstats;
+	int pad;
+	refcount_t refcnt;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head gso_skb;
+	struct qdisc_skb_head q;
+	struct gnet_stats_basic_sync bstats;
+	struct gnet_stats_queue qstats;
+	unsigned long state;
+	unsigned long state2;
+	struct Qdisc *next_sched;
+	struct sk_buff_head skb_bad_txq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t busylock;
+	spinlock_t seqlock;
+	struct callback_head rcu;
+	netdevice_tracker dev_tracker;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long privdata[0];
+};
+
+struct xdp_dev_bulk_queue {
+	struct xdp_frame *q[16];
+	struct list_head flush_node;
+	struct net_device *dev;
+	struct net_device *dev_rx;
+	struct bpf_prog *xdp_prog;
+	unsigned int count;
+};
+
+struct xps_map;
+
+struct xps_dev_maps {
+	struct callback_head rcu;
+	unsigned int nr_ids;
+	s16 num_tc;
+	struct xps_map __attribute__((btf_type_tag("rcu"))) *attr_map[0];
+};
+
+struct xps_map {
+	unsigned int len;
+	unsigned int alloc_len;
+	struct callback_head rcu;
+	u16 queues[0];
+};
+
+struct pcpu_lstats {
+	u64_stats_t packets;
+	u64_stats_t bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct pcpu_sw_netstats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+};
+
+struct pcpu_dstats {
+	u64 rx_packets;
+	u64 rx_bytes;
+	u64 rx_drops;
+	u64 tx_packets;
+	u64 tx_bytes;
+	u64 tx_drops;
+	struct u64_stats_sync syncp;
+	long: 64;
+	long: 64;
+};
+
+struct rtnl_link_ops {
+	struct list_head list;
+	const char *kind;
+	size_t priv_size;
+	struct net_device * (*alloc)(struct nlattr **, const char *, unsigned char, unsigned int, unsigned int);
+	void (*setup)(struct net_device *);
+	bool netns_refund;
+	unsigned int maxtype;
+	const struct nla_policy *policy;
+	int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	void (*dellink)(struct net_device *, struct list_head *);
+	size_t (*get_size)(const struct net_device *);
+	int (*fill_info)(struct sk_buff *, const struct net_device *);
+	size_t (*get_xstats_size)(const struct net_device *);
+	int (*fill_xstats)(struct sk_buff *, const struct net_device *);
+	unsigned int (*get_num_tx_queues)();
+	unsigned int (*get_num_rx_queues)();
+	unsigned int slave_maxtype;
+	const struct nla_policy *slave_policy;
+	int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);
+	size_t (*get_slave_size)(const struct net_device *, const struct net_device *);
+	int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);
+	struct net * (*get_link_net)(const struct net_device *);
+	size_t (*get_linkxstats_size)(const struct net_device *, int);
+	int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);
+};
+
+struct netprio_map {
+	struct callback_head rcu;
+	u32 priomap_len;
+	u32 priomap[0];
+};
+
+struct macsec_context;
+
+struct macsec_ops {
+	int (*mdo_dev_open)(struct macsec_context *);
+	int (*mdo_dev_stop)(struct macsec_context *);
+	int (*mdo_add_secy)(struct macsec_context *);
+	int (*mdo_upd_secy)(struct macsec_context *);
+	int (*mdo_del_secy)(struct macsec_context *);
+	int (*mdo_add_rxsc)(struct macsec_context *);
+	int (*mdo_upd_rxsc)(struct macsec_context *);
+	int (*mdo_del_rxsc)(struct macsec_context *);
+	int (*mdo_add_rxsa)(struct macsec_context *);
+	int (*mdo_upd_rxsa)(struct macsec_context *);
+	int (*mdo_del_rxsa)(struct macsec_context *);
+	int (*mdo_add_txsa)(struct macsec_context *);
+	int (*mdo_upd_txsa)(struct macsec_context *);
+	int (*mdo_del_txsa)(struct macsec_context *);
+	int (*mdo_get_dev_stats)(struct macsec_context *);
+	int (*mdo_get_tx_sc_stats)(struct macsec_context *);
+	int (*mdo_get_tx_sa_stats)(struct macsec_context *);
+	int (*mdo_get_rx_sc_stats)(struct macsec_context *);
+	int (*mdo_get_rx_sa_stats)(struct macsec_context *);
+	bool rx_uses_md_dst;
+};
+
+struct udp_tunnel_nic_table_info {
+	unsigned int n_entries;
+	unsigned int tunnel_types;
+};
+
+struct udp_tunnel_info;
+
+struct udp_tunnel_nic_shared;
+
+struct udp_tunnel_nic_info {
+	int (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	int (*sync_table)(struct net_device *, unsigned int);
+	struct udp_tunnel_nic_shared *shared;
+	unsigned int flags;
+	struct udp_tunnel_nic_table_info tables[4];
+};
+
+struct rtnl_hw_stats64 {
+	__u64 rx_packets;
+	__u64 tx_packets;
+	__u64 rx_bytes;
+	__u64 tx_bytes;
+	__u64 rx_errors;
+	__u64 tx_errors;
+	__u64 rx_dropped;
+	__u64 tx_dropped;
+	__u64 multicast;
+};
+
+typedef enum {
+	SS_FREE = 0,
+	SS_UNCONNECTED = 1,
+	SS_CONNECTING = 2,
+	SS_CONNECTED = 3,
+	SS_DISCONNECTING = 4,
+} socket_state;
+
+struct socket_wq {
+	wait_queue_head_t wait;
+	struct fasync_struct *fasync_list;
+	unsigned long flags;
+	struct callback_head rcu;
+	long: 64;
+};
+
+struct proto_ops;
+
+struct socket {
+	socket_state state;
+	short type;
+	unsigned long flags;
+	struct file *file;
+	struct sock *sk;
+	const struct proto_ops *ops;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct socket_wq wq;
+};
+
+typedef struct {
+	size_t written;
+	size_t count;
+	union {
+		char __attribute__((btf_type_tag("user"))) *buf;
+		void *data;
+	} arg;
+	int error;
+} read_descriptor_t;
+
+typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t);
+
+typedef int (*skb_read_actor_t)(struct sock *, struct sk_buff *);
+
+struct proto_ops {
+	int family;
+	struct module *owner;
+	int (*release)(struct socket *);
+	int (*bind)(struct socket *, struct sockaddr *, int);
+	int (*connect)(struct socket *, struct sockaddr *, int, int);
+	int (*socketpair)(struct socket *, struct socket *);
+	int (*accept)(struct socket *, struct socket *, int, bool);
+	int (*getname)(struct socket *, struct sockaddr *, int);
+	__poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *);
+	int (*ioctl)(struct socket *, unsigned int, unsigned long);
+	int (*compat_ioctl)(struct socket *, unsigned int, unsigned long);
+	int (*gettstamp)(struct socket *, void __attribute__((btf_type_tag("user"))) *, bool, bool);
+	int (*listen)(struct socket *, int);
+	int (*shutdown)(struct socket *, int);
+	int (*setsockopt)(struct socket *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct socket *, int, int, char __attribute__((btf_type_tag("user"))) *, int __attribute__((btf_type_tag("user"))) *);
+	void (*show_fdinfo)(struct seq_file *, struct socket *);
+	int (*sendmsg)(struct socket *, struct msghdr *, size_t);
+	int (*recvmsg)(struct socket *, struct msghdr *, size_t, int);
+	int (*mmap)(struct file *, struct socket *, struct vm_area_struct *);
+	ssize_t (*splice_read)(struct socket *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	void (*splice_eof)(struct socket *);
+	int (*set_peek_off)(struct sock *, int);
+	int (*peek_len)(struct socket *);
+	int (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t);
+	int (*read_skb)(struct sock *, skb_read_actor_t);
+	int (*sendmsg_locked)(struct sock *, struct msghdr *, size_t);
+	int (*set_rcvlowat)(struct sock *, int);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct request_sock;
+
+struct request_sock_ops {
+	int family;
+	unsigned int obj_size;
+	struct kmem_cache *slab;
+	char *slab_name;
+	int (*rtx_syn_ack)(const struct sock *, struct request_sock *);
+	void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);
+	void (*send_reset)(const struct sock *, struct sk_buff *);
+	void (*destructor)(struct request_sock *);
+	void (*syn_ack_timeout)(const struct request_sock *);
+};
+
+struct saved_syn;
+
+struct request_sock {
+	struct sock_common __req_common;
+	struct request_sock *dl_next;
+	u16 mss;
+	u8 num_retrans;
+	u8 syncookie: 1;
+	u8 num_timeout: 7;
+	u32 ts_recent;
+	struct timer_list rsk_timer;
+	const struct request_sock_ops *rsk_ops;
+	struct sock *sk;
+	struct saved_syn *saved_syn;
+	u32 secid;
+	u32 peer_secid;
+	u32 timeout;
+};
+
+struct saved_syn {
+	u32 mac_hdrlen;
+	u32 network_hdrlen;
+	u32 tcp_hdrlen;
+	u8 data[0];
+};
+
+struct timewait_sock_ops {
+	struct kmem_cache *twsk_slab;
+	char *twsk_slab_name;
+	unsigned int twsk_obj_size;
+	int (*twsk_unique)(struct sock *, struct sock *, void *);
+	void (*twsk_destructor)(struct sock *);
+};
+
+struct sk_filter {
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct bpf_prog *prog;
+};
+
+struct xfrm_mark {
+	__u32 v;
+	__u32 m;
+};
+
+typedef union {
+	__be32 a4;
+	__be32 a6[4];
+	struct in6_addr in6;
+} xfrm_address_t;
+
+struct xfrm_selector {
+	xfrm_address_t daddr;
+	xfrm_address_t saddr;
+	__be16 dport;
+	__be16 dport_mask;
+	__be16 sport;
+	__be16 sport_mask;
+	__u16 family;
+	__u8 prefixlen_d;
+	__u8 prefixlen_s;
+	__u8 proto;
+	int ifindex;
+	__kernel_uid32_t user;
+};
+
+struct xfrm_lifetime_cfg {
+	__u64 soft_byte_limit;
+	__u64 hard_byte_limit;
+	__u64 soft_packet_limit;
+	__u64 hard_packet_limit;
+	__u64 soft_add_expires_seconds;
+	__u64 hard_add_expires_seconds;
+	__u64 soft_use_expires_seconds;
+	__u64 hard_use_expires_seconds;
+};
+
+struct xfrm_lifetime_cur {
+	__u64 bytes;
+	__u64 packets;
+	__u64 add_time;
+	__u64 use_time;
+};
+
+struct xfrm_policy_walk_entry {
+	struct list_head all;
+	u8 dead;
+};
+
+struct xfrm_policy_queue {
+	struct sk_buff_head hold_queue;
+	struct timer_list hold_timer;
+	unsigned long timeout;
+};
+
+struct xfrm_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u8 proto;
+};
+
+struct xfrm_tmpl {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	unsigned short encap_family;
+	u32 reqid;
+	u8 mode;
+	u8 share;
+	u8 optional;
+	u8 allalgs;
+	u32 aalgos;
+	u32 ealgos;
+	u32 calgos;
+};
+
+struct xfrm_dev_offload {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net_device *real_dev;
+	unsigned long offload_handle;
+	u8 dir: 2;
+	u8 type: 2;
+	u8 flags: 2;
+};
+
+struct xfrm_sec_ctx;
+
+struct xfrm_policy {
+	possible_net_t xp_net;
+	struct hlist_node bydst;
+	struct hlist_node byidx;
+	rwlock_t lock;
+	refcount_t refcnt;
+	u32 pos;
+	struct timer_list timer;
+	atomic_t genid;
+	u32 priority;
+	u32 index;
+	u32 if_id;
+	struct xfrm_mark mark;
+	struct xfrm_selector selector;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_policy_walk_entry walk;
+	struct xfrm_policy_queue polq;
+	bool bydst_reinsert;
+	u8 type;
+	u8 action;
+	u8 flags;
+	u8 xfrm_nr;
+	u16 family;
+	struct xfrm_sec_ctx *security;
+	struct xfrm_tmpl xfrm_vec[6];
+	struct hlist_node bydst_inexact_list;
+	struct callback_head rcu;
+	struct xfrm_dev_offload xdo;
+};
+
+struct sock_reuseport {
+	struct callback_head rcu;
+	u16 max_socks;
+	u16 num_socks;
+	u16 num_closed_socks;
+	u16 incoming_cpu;
+	unsigned int synq_overflow_ts;
+	unsigned int reuseport_id;
+	unsigned int bind_inany: 1;
+	unsigned int has_conns: 1;
+	struct bpf_prog __attribute__((btf_type_tag("rcu"))) *prog;
+	struct sock *socks[0];
+};
+
+struct fs_struct {
+	int users;
+	spinlock_t lock;
+	seqcount_spinlock_t seq;
+	int umask;
+	int in_exec;
+	struct path root;
+	struct path pwd;
+};
+
+struct ld_semaphore {
+	atomic_long_t count;
+	raw_spinlock_t wait_lock;
+	unsigned int wait_readers;
+	struct list_head read_wait;
+	struct list_head write_wait;
+};
+
+typedef unsigned int tcflag_t;
+
+typedef unsigned char cc_t;
+
+typedef unsigned int speed_t;
+
+struct ktermios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct winsize {
+	unsigned short ws_row;
+	unsigned short ws_col;
+	unsigned short ws_xpixel;
+	unsigned short ws_ypixel;
+};
+
+struct tty_driver;
+
+struct tty_port;
+
+struct tty_operations;
+
+struct tty_ldisc;
+
+struct tty_struct {
+	struct kref kref;
+	int index;
+	struct device *dev;
+	struct tty_driver *driver;
+	struct tty_port *port;
+	const struct tty_operations *ops;
+	struct tty_ldisc *ldisc;
+	struct ld_semaphore ldisc_sem;
+	struct mutex atomic_write_lock;
+	struct mutex legacy_mutex;
+	struct mutex throttle_mutex;
+	struct rw_semaphore termios_rwsem;
+	struct mutex winsize_mutex;
+	struct ktermios termios;
+	struct ktermios termios_locked;
+	char name[64];
+	unsigned long flags;
+	int count;
+	unsigned int receive_room;
+	struct winsize winsize;
+	struct {
+		spinlock_t lock;
+		bool stopped;
+		bool tco_stopped;
+		unsigned long unused[0];
+	} flow;
+	struct {
+		struct pid *pgrp;
+		struct pid *session;
+		spinlock_t lock;
+		unsigned char pktstatus;
+		bool packet;
+		unsigned long unused[0];
+	} ctrl;
+	bool hw_stopped;
+	bool closing;
+	int flow_change;
+	struct tty_struct *link;
+	struct fasync_struct *fasync;
+	wait_queue_head_t write_wait;
+	wait_queue_head_t read_wait;
+	struct work_struct hangup_work;
+	void *disc_data;
+	void *driver_data;
+	spinlock_t files_lock;
+	int write_cnt;
+	unsigned char *write_buf;
+	struct list_head tty_files;
+	struct work_struct SAK_work;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct tty_driver {
+	struct kref kref;
+	struct cdev **cdevs;
+	struct module *owner;
+	const char *driver_name;
+	const char *name;
+	int name_base;
+	int major;
+	int minor_start;
+	unsigned int num;
+	short type;
+	short subtype;
+	struct ktermios init_termios;
+	unsigned long flags;
+	struct proc_dir_entry *proc_entry;
+	struct tty_driver *other;
+	struct tty_struct **ttys;
+	struct tty_port **ports;
+	struct ktermios **termios;
+	void *driver_state;
+	const struct tty_operations *ops;
+	struct list_head tty_drivers;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct __kfifo {
+	unsigned int in;
+	unsigned int out;
+	unsigned int mask;
+	unsigned int esize;
+	void *data;
+};
+
+struct tty_buffer {
+	union {
+		struct tty_buffer *next;
+		struct llist_node free;
+	};
+	unsigned int used;
+	unsigned int size;
+	unsigned int commit;
+	unsigned int lookahead;
+	unsigned int read;
+	bool flags;
+	long: 0;
+	u8 data[0];
+};
+
+struct tty_bufhead {
+	struct tty_buffer *head;
+	struct work_struct work;
+	struct mutex lock;
+	atomic_t priority;
+	struct tty_buffer sentinel;
+	struct llist_head free;
+	atomic_t mem_used;
+	int mem_limit;
+	struct tty_buffer *tail;
+};
+
+struct tty_port_operations;
+
+struct tty_port_client_operations;
+
+struct tty_port {
+	struct tty_bufhead buf;
+	struct tty_struct *tty;
+	struct tty_struct *itty;
+	const struct tty_port_operations *ops;
+	const struct tty_port_client_operations *client_ops;
+	spinlock_t lock;
+	int blocked_open;
+	int count;
+	wait_queue_head_t open_wait;
+	wait_queue_head_t delta_msr_wait;
+	unsigned long flags;
+	unsigned long iflags;
+	unsigned char console: 1;
+	struct mutex mutex;
+	struct mutex buf_mutex;
+	unsigned char *xmit_buf;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			unsigned char *type;
+			const unsigned char *const_type;
+			char (*rectype)[0];
+			unsigned char *ptr;
+			const unsigned char *ptr_const;
+		};
+		unsigned char buf[0];
+	} xmit_fifo;
+	unsigned int close_delay;
+	unsigned int closing_wait;
+	int drain_delay;
+	struct kref kref;
+	void *client_data;
+	u64 android_kabi_reserved1;
+};
+
+struct tty_port_operations {
+	bool (*carrier_raised)(struct tty_port *);
+	void (*dtr_rts)(struct tty_port *, bool);
+	void (*shutdown)(struct tty_port *);
+	int (*activate)(struct tty_port *, struct tty_struct *);
+	void (*destruct)(struct tty_port *);
+	u64 android_kabi_reserved1;
+};
+
+struct tty_port_client_operations {
+	size_t (*receive_buf)(struct tty_port *, const u8 *, const u8 *, size_t);
+	void (*lookahead_buf)(struct tty_port *, const u8 *, const u8 *, size_t);
+	void (*write_wakeup)(struct tty_port *);
+};
+
+struct serial_icounter_struct;
+
+struct serial_struct;
+
+struct tty_operations {
+	struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);
+	int (*install)(struct tty_driver *, struct tty_struct *);
+	void (*remove)(struct tty_driver *, struct tty_struct *);
+	int (*open)(struct tty_struct *, struct file *);
+	void (*close)(struct tty_struct *, struct file *);
+	void (*shutdown)(struct tty_struct *);
+	void (*cleanup)(struct tty_struct *);
+	ssize_t (*write)(struct tty_struct *, const u8 *, size_t);
+	int (*put_char)(struct tty_struct *, u8);
+	void (*flush_chars)(struct tty_struct *);
+	unsigned int (*write_room)(struct tty_struct *);
+	unsigned int (*chars_in_buffer)(struct tty_struct *);
+	int (*ioctl)(struct tty_struct *, unsigned int, unsigned long);
+	long (*compat_ioctl)(struct tty_struct *, unsigned int, unsigned long);
+	void (*set_termios)(struct tty_struct *, const struct ktermios *);
+	void (*throttle)(struct tty_struct *);
+	void (*unthrottle)(struct tty_struct *);
+	void (*stop)(struct tty_struct *);
+	void (*start)(struct tty_struct *);
+	void (*hangup)(struct tty_struct *);
+	int (*break_ctl)(struct tty_struct *, int);
+	void (*flush_buffer)(struct tty_struct *);
+	void (*set_ldisc)(struct tty_struct *);
+	void (*wait_until_sent)(struct tty_struct *, int);
+	void (*send_xchar)(struct tty_struct *, char);
+	int (*tiocmget)(struct tty_struct *);
+	int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);
+	int (*resize)(struct tty_struct *, struct winsize *);
+	int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);
+	int (*get_serial)(struct tty_struct *, struct serial_struct *);
+	int (*set_serial)(struct tty_struct *, struct serial_struct *);
+	void (*show_fdinfo)(struct tty_struct *, struct seq_file *);
+	int (*proc_show)(struct seq_file *, void *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct tty_ldisc_ops;
+
+struct tty_ldisc {
+	struct tty_ldisc_ops *ops;
+	struct tty_struct *tty;
+};
+
+struct tty_ldisc_ops {
+	char *name;
+	int num;
+	int (*open)(struct tty_struct *);
+	void (*close)(struct tty_struct *);
+	void (*flush_buffer)(struct tty_struct *);
+	ssize_t (*read)(struct tty_struct *, struct file *, u8 *, size_t, void **, unsigned long);
+	ssize_t (*write)(struct tty_struct *, struct file *, const u8 *, size_t);
+	int (*ioctl)(struct tty_struct *, unsigned int, unsigned long);
+	int (*compat_ioctl)(struct tty_struct *, unsigned int, unsigned long);
+	void (*set_termios)(struct tty_struct *, const struct ktermios *);
+	__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);
+	void (*hangup)(struct tty_struct *);
+	void (*receive_buf)(struct tty_struct *, const u8 *, const u8 *, size_t);
+	void (*write_wakeup)(struct tty_struct *);
+	void (*dcd_change)(struct tty_struct *, bool);
+	size_t (*receive_buf2)(struct tty_struct *, const u8 *, const u8 *, size_t);
+	void (*lookahead_buf)(struct tty_struct *, const u8 *, const u8 *, size_t);
+	struct module *owner;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum {
+	Root_NFS = 255,
+	Root_CIFS = 254,
+	Root_Generic = 253,
+	Root_RAM0 = 1048576,
+};
+
+struct minix_super_block {
+	__u16 s_ninodes;
+	__u16 s_nzones;
+	__u16 s_imap_blocks;
+	__u16 s_zmap_blocks;
+	__u16 s_firstdatazone;
+	__u16 s_log_zone_size;
+	__u32 s_max_size;
+	__u16 s_magic;
+	__u16 s_state;
+	__u32 s_zones;
+};
+
+struct romfs_super_block {
+	__be32 word0;
+	__be32 word1;
+	__be32 size;
+	__be32 checksum;
+	char name[0];
+};
+
+struct cramfs_info {
+	__u32 crc;
+	__u32 edition;
+	__u32 blocks;
+	__u32 files;
+};
+
+struct cramfs_inode {
+	__u32 mode: 16;
+	__u32 uid: 16;
+	__u32 size: 24;
+	__u32 gid: 8;
+	__u32 namelen: 6;
+	__u32 offset: 26;
+};
+
+struct cramfs_super {
+	__u32 magic;
+	__u32 size;
+	__u32 flags;
+	__u32 future;
+	__u8 signature[16];
+	struct cramfs_info fsid;
+	__u8 name[16];
+	struct cramfs_inode root;
+};
+
+typedef __u16 __le16;
+
+typedef __u64 __le64;
+
+struct squashfs_super_block {
+	__le32 s_magic;
+	__le32 inodes;
+	__le32 mkfs_time;
+	__le32 block_size;
+	__le32 fragments;
+	__le16 compression;
+	__le16 block_log;
+	__le16 flags;
+	__le16 no_ids;
+	__le16 s_major;
+	__le16 s_minor;
+	__le64 root_inode;
+	__le64 bytes_used;
+	__le64 id_table_start;
+	__le64 xattr_id_table_start;
+	__le64 inode_table_start;
+	__le64 directory_table_start;
+	__le64 fragment_table_start;
+	__le64 lookup_table_start;
+};
+
+typedef int (*decompress_fn)(unsigned char *, long, long (*)(void *, unsigned long), long (*)(void *, unsigned long), unsigned char *, long *, void (*)(char *));
+
+struct subprocess_info {
+	struct work_struct work;
+	struct completion *complete;
+	const char *path;
+	char **argv;
+	char **envp;
+	int wait;
+	int retval;
+	int (*init)(struct subprocess_info *, struct cred *);
+	void (*cleanup)(struct subprocess_info *);
+	void *data;
+};
+
+typedef u64 async_cookie_t;
+
+struct async_domain {
+	struct list_head pending;
+	unsigned int registered: 1;
+};
+
+enum state {
+	Start = 0,
+	Collect = 1,
+	GotHeader = 2,
+	SkipIt = 3,
+	GotName = 4,
+	CopyFile = 5,
+	GotSymlink = 6,
+	Reset = 7,
+};
+
+struct hash {
+	int ino;
+	int minor;
+	int major;
+	umode_t mode;
+	struct hash *next;
+	char name[4098];
+};
+
+enum umh_disable_depth {
+	UMH_ENABLED = 0,
+	UMH_FREEZING = 1,
+	UMH_DISABLED = 2,
+};
+
+struct dir_entry {
+	struct list_head list;
+	time64_t mtime;
+	char name[0];
+};
+
+typedef void (*async_func_t)(void *, async_cookie_t);
+
+typedef long (*sys_call_ptr_t)(const struct pt_regs *);
+
+struct io_bitmap {
+	u64 sequence;
+	refcount_t refcnt;
+	unsigned int max;
+	unsigned long bitmap[1024];
+};
+
+struct irqentry_state {
+	union {
+		bool exit_rcu;
+		bool lockdep;
+	};
+};
+
+typedef struct irqentry_state irqentry_state_t;
+
+struct vm_special_mapping {
+	const char *name;
+	struct page **pages;
+	vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);
+	int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);
+};
+
+struct timens_offsets {
+	struct timespec64 monotonic;
+	struct timespec64 boottime;
+};
+
+struct time_namespace {
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct ns_common ns;
+	struct timens_offsets offsets;
+	struct page *vvar_page;
+	bool frozen_offsets;
+};
+
+enum vm_fault_reason {
+	VM_FAULT_OOM = 1,
+	VM_FAULT_SIGBUS = 2,
+	VM_FAULT_MAJOR = 4,
+	VM_FAULT_HWPOISON = 16,
+	VM_FAULT_HWPOISON_LARGE = 32,
+	VM_FAULT_SIGSEGV = 64,
+	VM_FAULT_NOPAGE = 256,
+	VM_FAULT_LOCKED = 512,
+	VM_FAULT_RETRY = 1024,
+	VM_FAULT_FALLBACK = 2048,
+	VM_FAULT_DONE_COW = 4096,
+	VM_FAULT_NEEDDSYNC = 8192,
+	VM_FAULT_COMPLETED = 16384,
+	VM_FAULT_HINDEX_MASK = 983040,
+};
+
+enum vdso_clock_mode {
+	VDSO_CLOCKMODE_NONE = 0,
+	VDSO_CLOCKMODE_TSC = 1,
+	VDSO_CLOCKMODE_PVCLOCK = 2,
+	VDSO_CLOCKMODE_HVCLOCK = 3,
+	VDSO_CLOCKMODE_MAX = 4,
+	VDSO_CLOCKMODE_TIMENS = 2147483647,
+};
+
+struct vdso_timestamp {
+	u64 sec;
+	u64 nsec;
+};
+
+struct timens_offset {
+	s64 sec;
+	u64 nsec;
+};
+
+struct arch_vdso_data {};
+
+struct vdso_data {
+	u32 seq;
+	s32 clock_mode;
+	u64 cycle_last;
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	union {
+		struct vdso_timestamp basetime[12];
+		struct timens_offset offset[12];
+	};
+	s32 tz_minuteswest;
+	s32 tz_dsttime;
+	u32 hrtimer_res;
+	u32 __unused;
+	struct arch_vdso_data arch_data;
+};
+
+struct alt_instr {
+	s32 instr_offset;
+	s32 repl_offset;
+	union {
+		struct {
+			u32 cpuid: 16;
+			u32 flags: 16;
+		};
+		u32 ft_flags;
+	};
+	u8 instrlen;
+	u8 replacementlen;
+} __attribute__((packed));
+
+struct maple_enode;
+
+struct maple_alloc;
+
+struct ma_state {
+	struct maple_tree *tree;
+	unsigned long index;
+	unsigned long last;
+	struct maple_enode *node;
+	unsigned long min;
+	unsigned long max;
+	struct maple_alloc *alloc;
+	unsigned char depth;
+	unsigned char offset;
+	unsigned char mas_flags;
+};
+
+struct vma_iterator {
+	struct ma_state mas;
+};
+
+struct maple_alloc {
+	unsigned long total;
+	unsigned char node_count;
+	unsigned int request_count;
+	struct maple_alloc *slot[30];
+};
+
+struct pvclock_vcpu_time_info {
+	u32 version;
+	u32 pad0;
+	u64 tsc_timestamp;
+	u64 system_time;
+	u32 tsc_to_system_mul;
+	s8 tsc_shift;
+	u8 flags;
+	u8 pad[2];
+};
+
+struct pvclock_vsyscall_time_info {
+	struct pvclock_vcpu_time_info pvti;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct vdso_exception_table_entry {
+	int insn;
+	int fixup;
+};
+
+typedef void (*btf_trace_emulate_vsyscall)(void *, int);
+
+enum {
+	EMULATE = 0,
+	XONLY = 1,
+	NONE = 2,
+};
+
+enum x86_pf_error_code {
+	X86_PF_PROT = 1,
+	X86_PF_WRITE = 2,
+	X86_PF_USER = 4,
+	X86_PF_RSVD = 8,
+	X86_PF_INSTR = 16,
+	X86_PF_PK = 32,
+	X86_PF_SHSTK = 64,
+	X86_PF_SGX = 32768,
+};
+
+enum fixed_addresses {
+	VSYSCALL_PAGE = 511,
+	FIX_DBGP_BASE = 512,
+	FIX_EARLYCON_MEM_BASE = 513,
+	FIX_APIC_BASE = 514,
+	FIX_IO_APIC_BASE_0 = 515,
+	FIX_IO_APIC_BASE_END = 642,
+	__end_of_permanent_fixed_addresses = 643,
+	FIX_BTMAP_END = 1024,
+	FIX_BTMAP_BEGIN = 1535,
+	__end_of_fixed_addresses = 1536,
+};
+
+enum syscall_work_bit {
+	SYSCALL_WORK_BIT_SECCOMP = 0,
+	SYSCALL_WORK_BIT_SYSCALL_TRACEPOINT = 1,
+	SYSCALL_WORK_BIT_SYSCALL_TRACE = 2,
+	SYSCALL_WORK_BIT_SYSCALL_EMU = 3,
+	SYSCALL_WORK_BIT_SYSCALL_AUDIT = 4,
+	SYSCALL_WORK_BIT_SYSCALL_USER_DISPATCH = 5,
+	SYSCALL_WORK_BIT_SYSCALL_EXIT_TRAP = 6,
+};
+
+typedef struct {
+	pgd_t pgd;
+} p4d_t;
+
+struct trace_event_raw_emulate_vsyscall {
+	struct trace_entry ent;
+	int nr;
+	char __data[0];
+};
+
+struct seccomp_data {
+	int nr;
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 args[6];
+};
+
+struct trace_event_data_offsets_emulate_vsyscall {};
+
+struct perf_guest_switch_msr {
+	unsigned int msr;
+	u64 host;
+	u64 guest;
+};
+
+struct event_constraint;
+
+struct debug_store;
+
+struct er_account;
+
+struct intel_shared_regs;
+
+struct intel_excl_cntrs;
+
+struct amd_nb;
+
+struct cpu_hw_events {
+	struct perf_event *events[64];
+	unsigned long active_mask[1];
+	unsigned long dirty[1];
+	int enabled;
+	int n_events;
+	int n_added;
+	int n_txn;
+	int n_txn_pair;
+	int n_txn_metric;
+	int assign[64];
+	u64 tags[64];
+	struct perf_event *event_list[64];
+	struct event_constraint *event_constraint[64];
+	int n_excl;
+	unsigned int txn_flags;
+	int is_fake;
+	struct debug_store *ds;
+	void *ds_pebs_vaddr;
+	void *ds_bts_vaddr;
+	u64 pebs_enabled;
+	int n_pebs;
+	int n_large_pebs;
+	int n_pebs_via_pt;
+	int pebs_output;
+	u64 pebs_data_cfg;
+	u64 active_pebs_data_cfg;
+	int pebs_record_size;
+	u64 fixed_ctrl_val;
+	u64 active_fixed_ctrl_val;
+	int lbr_users;
+	int lbr_pebs_users;
+	struct perf_branch_stack lbr_stack;
+	struct perf_branch_entry lbr_entries[32];
+	union {
+		struct er_account *lbr_sel;
+		struct er_account *lbr_ctl;
+	};
+	u64 br_sel;
+	void *last_task_ctx;
+	int last_log_id;
+	int lbr_select;
+	void *lbr_xsave;
+	u64 intel_ctrl_guest_mask;
+	u64 intel_ctrl_host_mask;
+	struct perf_guest_switch_msr guest_switch_msrs[64];
+	u64 intel_cp_status;
+	struct intel_shared_regs *shared_regs;
+	struct event_constraint *constraint_list;
+	struct intel_excl_cntrs *excl_cntrs;
+	int excl_thread_id;
+	u64 tfa_shadow;
+	int n_metric;
+	struct amd_nb *amd_nb;
+	int brs_active;
+	u64 perf_ctr_virt_mask;
+	int n_pair;
+	void *kfree_on_online[2];
+	struct pmu *pmu;
+};
+
+struct event_constraint {
+	union {
+		unsigned long idxmsk[1];
+		u64 idxmsk64;
+	};
+	u64 code;
+	u64 cmask;
+	int weight;
+	int overlap;
+	int flags;
+	unsigned int size;
+};
+
+struct debug_store {
+	u64 bts_buffer_base;
+	u64 bts_index;
+	u64 bts_absolute_maximum;
+	u64 bts_interrupt_threshold;
+	u64 pebs_buffer_base;
+	u64 pebs_index;
+	u64 pebs_absolute_maximum;
+	u64 pebs_interrupt_threshold;
+	u64 pebs_event_reset[48];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct er_account {
+	raw_spinlock_t lock;
+	u64 config;
+	u64 reg;
+	atomic_t ref;
+};
+
+struct intel_shared_regs {
+	struct er_account regs[7];
+	int refcnt;
+	unsigned int core_id;
+};
+
+enum intel_excl_state_type {
+	INTEL_EXCL_UNUSED = 0,
+	INTEL_EXCL_SHARED = 1,
+	INTEL_EXCL_EXCLUSIVE = 2,
+};
+
+struct intel_excl_states {
+	enum intel_excl_state_type state[64];
+	bool sched_started;
+};
+
+struct intel_excl_cntrs {
+	raw_spinlock_t lock;
+	struct intel_excl_states states[2];
+	union {
+		u16 has_exclusive[2];
+		u32 exclusive_present;
+	};
+	int refcnt;
+	unsigned int core_id;
+};
+
+struct amd_nb {
+	int nb_id;
+	int refcnt;
+	struct perf_event *owners[64];
+	struct event_constraint event_constraints[64];
+};
+
+union perf_capabilities {
+	struct {
+		u64 lbr_format: 6;
+		u64 pebs_trap: 1;
+		u64 pebs_arch_reg: 1;
+		u64 pebs_format: 4;
+		u64 smm_freeze: 1;
+		u64 full_width_write: 1;
+		u64 pebs_baseline: 1;
+		u64 perf_metrics: 1;
+		u64 pebs_output_pt_available: 1;
+		u64 pebs_timing_info: 1;
+		u64 anythread_deprecated: 1;
+	};
+	u64 capabilities;
+};
+
+struct x86_pmu_quirk;
+
+struct extra_reg;
+
+struct x86_hybrid_pmu;
+
+struct x86_pmu {
+	const char *name;
+	int version;
+	int (*handle_irq)(struct pt_regs *);
+	void (*disable_all)();
+	void (*enable_all)(int);
+	void (*enable)(struct perf_event *);
+	void (*disable)(struct perf_event *);
+	void (*assign)(struct perf_event *, int);
+	void (*add)(struct perf_event *);
+	void (*del)(struct perf_event *);
+	void (*read)(struct perf_event *);
+	int (*set_period)(struct perf_event *);
+	u64 (*update)(struct perf_event *);
+	int (*hw_config)(struct perf_event *);
+	int (*schedule_events)(struct cpu_hw_events *, int, int *);
+	unsigned int eventsel;
+	unsigned int perfctr;
+	int (*addr_offset)(int, bool);
+	int (*rdpmc_index)(int);
+	u64 (*event_map)(int);
+	int max_events;
+	int num_counters;
+	int num_counters_fixed;
+	int cntval_bits;
+	u64 cntval_mask;
+	union {
+		unsigned long events_maskl;
+		unsigned long events_mask[1];
+	};
+	int events_mask_len;
+	int apic;
+	u64 max_period;
+	struct event_constraint * (*get_event_constraints)(struct cpu_hw_events *, int, struct perf_event *);
+	void (*put_event_constraints)(struct cpu_hw_events *, struct perf_event *);
+	void (*start_scheduling)(struct cpu_hw_events *);
+	void (*commit_scheduling)(struct cpu_hw_events *, int, int);
+	void (*stop_scheduling)(struct cpu_hw_events *);
+	struct event_constraint *event_constraints;
+	struct x86_pmu_quirk *quirks;
+	void (*limit_period)(struct perf_event *, s64 *);
+	unsigned int late_ack: 1;
+	unsigned int mid_ack: 1;
+	unsigned int enabled_ack: 1;
+	int attr_rdpmc_broken;
+	int attr_rdpmc;
+	struct attribute **format_attrs;
+	ssize_t (*events_sysfs_show)(char *, u64);
+	const struct attribute_group **attr_update;
+	unsigned long attr_freeze_on_smi;
+	int (*cpu_prepare)(int);
+	void (*cpu_starting)(int);
+	void (*cpu_dying)(int);
+	void (*cpu_dead)(int);
+	void (*check_microcode)();
+	void (*sched_task)(struct perf_event_pmu_context *, bool);
+	u64 intel_ctrl;
+	union perf_capabilities intel_cap;
+	unsigned int bts: 1;
+	unsigned int bts_active: 1;
+	unsigned int pebs: 1;
+	unsigned int pebs_active: 1;
+	unsigned int pebs_broken: 1;
+	unsigned int pebs_prec_dist: 1;
+	unsigned int pebs_no_tlb: 1;
+	unsigned int pebs_no_isolation: 1;
+	unsigned int pebs_block: 1;
+	unsigned int pebs_ept: 1;
+	int pebs_record_size;
+	int pebs_buffer_size;
+	int max_pebs_events;
+	void (*drain_pebs)(struct pt_regs *, struct perf_sample_data *);
+	struct event_constraint *pebs_constraints;
+	void (*pebs_aliases)(struct perf_event *);
+	u64 (*pebs_latency_data)(struct perf_event *, u64);
+	unsigned long large_pebs_flags;
+	u64 rtm_abort_event;
+	u64 pebs_capable;
+	unsigned int lbr_tos;
+	unsigned int lbr_from;
+	unsigned int lbr_to;
+	unsigned int lbr_info;
+	unsigned int lbr_nr;
+	union {
+		u64 lbr_sel_mask;
+		u64 lbr_ctl_mask;
+	};
+	union {
+		const int *lbr_sel_map;
+		int *lbr_ctl_map;
+	};
+	bool lbr_double_abort;
+	bool lbr_pt_coexist;
+	unsigned int lbr_has_info: 1;
+	unsigned int lbr_has_tsx: 1;
+	unsigned int lbr_from_flags: 1;
+	unsigned int lbr_to_cycles: 1;
+	unsigned int lbr_depth_mask: 8;
+	unsigned int lbr_deep_c_reset: 1;
+	unsigned int lbr_lip: 1;
+	unsigned int lbr_cpl: 1;
+	unsigned int lbr_filter: 1;
+	unsigned int lbr_call_stack: 1;
+	unsigned int lbr_mispred: 1;
+	unsigned int lbr_timed_lbr: 1;
+	unsigned int lbr_br_type: 1;
+	void (*lbr_reset)();
+	void (*lbr_read)(struct cpu_hw_events *);
+	void (*lbr_save)(void *);
+	void (*lbr_restore)(void *);
+	atomic_t lbr_exclusive[3];
+	int num_topdown_events;
+	void (*swap_task_ctx)(struct perf_event_pmu_context *, struct perf_event_pmu_context *);
+	unsigned int amd_nb_constraints: 1;
+	u64 perf_ctr_pair_en;
+	struct extra_reg *extra_regs;
+	unsigned int flags;
+	struct perf_guest_switch_msr * (*guest_get_msrs)(int *, void *);
+	int (*check_period)(struct perf_event *, u64);
+	int (*aux_output_match)(struct perf_event *);
+	void (*filter)(struct pmu *, int, bool *);
+	int num_hybrid_pmus;
+	struct x86_hybrid_pmu *hybrid_pmu;
+	u8 (*get_hybrid_cpu_type)();
+};
+
+struct x86_pmu_quirk {
+	struct x86_pmu_quirk *next;
+	void (*func)();
+};
+
+struct extra_reg {
+	unsigned int event;
+	unsigned int msr;
+	u64 config_mask;
+	u64 valid_mask;
+	int idx;
+	bool extra_msr_access;
+};
+
+struct x86_hybrid_pmu {
+	struct pmu pmu;
+	const char *name;
+	u8 cpu_type;
+	cpumask_t supported_cpus;
+	union perf_capabilities intel_cap;
+	u64 intel_ctrl;
+	int max_pebs_events;
+	int num_counters;
+	int num_counters_fixed;
+	struct event_constraint unconstrained;
+	u64 hw_cache_event_ids[42];
+	u64 hw_cache_extra_regs[42];
+	struct event_constraint *event_constraints;
+	struct event_constraint *pebs_constraints;
+	struct extra_reg *extra_regs;
+	unsigned int late_ack: 1;
+	unsigned int mid_ack: 1;
+	unsigned int enabled_ack: 1;
+	u64 pebs_data_source[16];
+};
+
+typedef int (*nmi_handler_t)(unsigned int, struct pt_regs *);
+
+struct nmiaction {
+	struct list_head list;
+	nmi_handler_t handler;
+	u64 max_duration;
+	unsigned long flags;
+	const char *name;
+};
+
+struct device_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device *, struct device_attribute *, char *);
+	ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);
+};
+
+struct perf_pmu_events_attr {
+	struct device_attribute attr;
+	u64 id;
+	const char *event_str;
+};
+
+enum {
+	x86_lbr_exclusive_lbr = 0,
+	x86_lbr_exclusive_bts = 1,
+	x86_lbr_exclusive_pt = 2,
+	x86_lbr_exclusive_max = 3,
+};
+
+enum perf_type_id {
+	PERF_TYPE_HARDWARE = 0,
+	PERF_TYPE_SOFTWARE = 1,
+	PERF_TYPE_TRACEPOINT = 2,
+	PERF_TYPE_HW_CACHE = 3,
+	PERF_TYPE_RAW = 4,
+	PERF_TYPE_BREAKPOINT = 5,
+	PERF_TYPE_MAX = 6,
+};
+
+enum perf_branch_sample_type {
+	PERF_SAMPLE_BRANCH_USER = 1,
+	PERF_SAMPLE_BRANCH_KERNEL = 2,
+	PERF_SAMPLE_BRANCH_HV = 4,
+	PERF_SAMPLE_BRANCH_ANY = 8,
+	PERF_SAMPLE_BRANCH_ANY_CALL = 16,
+	PERF_SAMPLE_BRANCH_ANY_RETURN = 32,
+	PERF_SAMPLE_BRANCH_IND_CALL = 64,
+	PERF_SAMPLE_BRANCH_ABORT_TX = 128,
+	PERF_SAMPLE_BRANCH_IN_TX = 256,
+	PERF_SAMPLE_BRANCH_NO_TX = 512,
+	PERF_SAMPLE_BRANCH_COND = 1024,
+	PERF_SAMPLE_BRANCH_CALL_STACK = 2048,
+	PERF_SAMPLE_BRANCH_IND_JUMP = 4096,
+	PERF_SAMPLE_BRANCH_CALL = 8192,
+	PERF_SAMPLE_BRANCH_NO_FLAGS = 16384,
+	PERF_SAMPLE_BRANCH_NO_CYCLES = 32768,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,
+	PERF_SAMPLE_BRANCH_HW_INDEX = 131072,
+	PERF_SAMPLE_BRANCH_PRIV_SAVE = 262144,
+	PERF_SAMPLE_BRANCH_MAX = 524288,
+};
+
+enum perf_event_x86_regs {
+	PERF_REG_X86_AX = 0,
+	PERF_REG_X86_BX = 1,
+	PERF_REG_X86_CX = 2,
+	PERF_REG_X86_DX = 3,
+	PERF_REG_X86_SI = 4,
+	PERF_REG_X86_DI = 5,
+	PERF_REG_X86_BP = 6,
+	PERF_REG_X86_SP = 7,
+	PERF_REG_X86_IP = 8,
+	PERF_REG_X86_FLAGS = 9,
+	PERF_REG_X86_CS = 10,
+	PERF_REG_X86_SS = 11,
+	PERF_REG_X86_DS = 12,
+	PERF_REG_X86_ES = 13,
+	PERF_REG_X86_FS = 14,
+	PERF_REG_X86_GS = 15,
+	PERF_REG_X86_R8 = 16,
+	PERF_REG_X86_R9 = 17,
+	PERF_REG_X86_R10 = 18,
+	PERF_REG_X86_R11 = 19,
+	PERF_REG_X86_R12 = 20,
+	PERF_REG_X86_R13 = 21,
+	PERF_REG_X86_R14 = 22,
+	PERF_REG_X86_R15 = 23,
+	PERF_REG_X86_32_MAX = 16,
+	PERF_REG_X86_64_MAX = 24,
+	PERF_REG_X86_XMM0 = 32,
+	PERF_REG_X86_XMM1 = 34,
+	PERF_REG_X86_XMM2 = 36,
+	PERF_REG_X86_XMM3 = 38,
+	PERF_REG_X86_XMM4 = 40,
+	PERF_REG_X86_XMM5 = 42,
+	PERF_REG_X86_XMM6 = 44,
+	PERF_REG_X86_XMM7 = 46,
+	PERF_REG_X86_XMM8 = 48,
+	PERF_REG_X86_XMM9 = 50,
+	PERF_REG_X86_XMM10 = 52,
+	PERF_REG_X86_XMM11 = 54,
+	PERF_REG_X86_XMM12 = 56,
+	PERF_REG_X86_XMM13 = 58,
+	PERF_REG_X86_XMM14 = 60,
+	PERF_REG_X86_XMM15 = 62,
+	PERF_REG_X86_XMM_MAX = 64,
+};
+
+enum {
+	PERF_X86_EVENT_PEBS_LDLAT = 1,
+	PERF_X86_EVENT_PEBS_ST = 2,
+	PERF_X86_EVENT_PEBS_ST_HSW = 4,
+	PERF_X86_EVENT_PEBS_LD_HSW = 8,
+	PERF_X86_EVENT_PEBS_NA_HSW = 16,
+	PERF_X86_EVENT_EXCL = 32,
+	PERF_X86_EVENT_DYNAMIC = 64,
+	PERF_X86_EVENT_EXCL_ACCT = 256,
+	PERF_X86_EVENT_AUTO_RELOAD = 512,
+	PERF_X86_EVENT_LARGE_PEBS = 1024,
+	PERF_X86_EVENT_PEBS_VIA_PT = 2048,
+	PERF_X86_EVENT_PAIR = 4096,
+	PERF_X86_EVENT_LBR_SELECT = 8192,
+	PERF_X86_EVENT_TOPDOWN = 16384,
+	PERF_X86_EVENT_PEBS_STLAT = 32768,
+	PERF_X86_EVENT_AMD_BRS = 65536,
+	PERF_X86_EVENT_PEBS_LAT_HYBRID = 131072,
+};
+
+enum stack_type {
+	STACK_TYPE_UNKNOWN = 0,
+	STACK_TYPE_TASK = 1,
+	STACK_TYPE_IRQ = 2,
+	STACK_TYPE_SOFTIRQ = 3,
+	STACK_TYPE_ENTRY = 4,
+	STACK_TYPE_EXCEPTION = 5,
+	STACK_TYPE_EXCEPTION_LAST = 10,
+};
+
+enum perf_hw_cache_id {
+	PERF_COUNT_HW_CACHE_L1D = 0,
+	PERF_COUNT_HW_CACHE_L1I = 1,
+	PERF_COUNT_HW_CACHE_LL = 2,
+	PERF_COUNT_HW_CACHE_DTLB = 3,
+	PERF_COUNT_HW_CACHE_ITLB = 4,
+	PERF_COUNT_HW_CACHE_BPU = 5,
+	PERF_COUNT_HW_CACHE_NODE = 6,
+	PERF_COUNT_HW_CACHE_MAX = 7,
+};
+
+enum perf_hw_cache_op_id {
+	PERF_COUNT_HW_CACHE_OP_READ = 0,
+	PERF_COUNT_HW_CACHE_OP_WRITE = 1,
+	PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
+	PERF_COUNT_HW_CACHE_OP_MAX = 3,
+};
+
+enum perf_hw_cache_op_result_id {
+	PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
+	PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
+	PERF_COUNT_HW_CACHE_RESULT_MAX = 2,
+};
+
+enum perf_event_sample_format {
+	PERF_SAMPLE_IP = 1,
+	PERF_SAMPLE_TID = 2,
+	PERF_SAMPLE_TIME = 4,
+	PERF_SAMPLE_ADDR = 8,
+	PERF_SAMPLE_READ = 16,
+	PERF_SAMPLE_CALLCHAIN = 32,
+	PERF_SAMPLE_ID = 64,
+	PERF_SAMPLE_CPU = 128,
+	PERF_SAMPLE_PERIOD = 256,
+	PERF_SAMPLE_STREAM_ID = 512,
+	PERF_SAMPLE_RAW = 1024,
+	PERF_SAMPLE_BRANCH_STACK = 2048,
+	PERF_SAMPLE_REGS_USER = 4096,
+	PERF_SAMPLE_STACK_USER = 8192,
+	PERF_SAMPLE_WEIGHT = 16384,
+	PERF_SAMPLE_DATA_SRC = 32768,
+	PERF_SAMPLE_IDENTIFIER = 65536,
+	PERF_SAMPLE_TRANSACTION = 131072,
+	PERF_SAMPLE_REGS_INTR = 262144,
+	PERF_SAMPLE_PHYS_ADDR = 524288,
+	PERF_SAMPLE_AUX = 1048576,
+	PERF_SAMPLE_CGROUP = 2097152,
+	PERF_SAMPLE_DATA_PAGE_SIZE = 4194304,
+	PERF_SAMPLE_CODE_PAGE_SIZE = 8388608,
+	PERF_SAMPLE_WEIGHT_STRUCT = 16777216,
+	PERF_SAMPLE_MAX = 33554432,
+};
+
+enum {
+	NMI_LOCAL = 0,
+	NMI_UNKNOWN = 1,
+	NMI_SERR = 2,
+	NMI_IO_CHECK = 3,
+	NMI_MAX = 4,
+};
+
+enum hybrid_pmu_type {
+	hybrid_big = 64,
+	hybrid_small = 32,
+	hybrid_big_small = 96,
+};
+
+enum {
+	X86_PERF_KFREE_SHARED = 0,
+	X86_PERF_KFREE_EXCL = 1,
+	X86_PERF_KFREE_MAX = 2,
+};
+
+enum extra_reg_type {
+	EXTRA_REG_NONE = -1,
+	EXTRA_REG_RSP_0 = 0,
+	EXTRA_REG_RSP_1 = 1,
+	EXTRA_REG_LBR = 2,
+	EXTRA_REG_LDLAT = 3,
+	EXTRA_REG_FE = 4,
+	EXTRA_REG_SNOOP_0 = 5,
+	EXTRA_REG_SNOOP_1 = 6,
+	EXTRA_REG_MAX = 7,
+};
+
+struct perf_pmu_events_ht_attr {
+	struct device_attribute attr;
+	u64 id;
+	const char *event_str_ht;
+	const char *event_str_noht;
+};
+
+struct perf_pmu_events_hybrid_attr {
+	struct device_attribute attr;
+	u64 id;
+	const char *event_str;
+	u64 pmu_type;
+};
+
+struct stack_frame {
+	struct stack_frame *next_frame;
+	unsigned long return_address;
+};
+
+struct perf_guest_info_callbacks {
+	unsigned int (*state)();
+	unsigned long (*get_ip)();
+	unsigned int (*handle_intel_pt_intr)();
+};
+
+struct sched_state {
+	int weight;
+	int event;
+	int counter;
+	int unassigned;
+	int nr_gp;
+	u64 used;
+};
+
+struct perf_sched {
+	int max_weight;
+	int max_events;
+	int max_gp;
+	int saved_states;
+	struct event_constraint **constraints;
+	struct sched_state state;
+	struct sched_state saved[2];
+};
+
+struct cyc2ns_data {
+	u32 cyc2ns_mul;
+	u32 cyc2ns_shift;
+	u64 cyc2ns_offset;
+};
+
+struct perf_callchain_entry_ctx {
+	struct perf_callchain_entry *entry;
+	u32 max_stack;
+	u32 nr;
+	short contexts;
+	bool contexts_maxed;
+};
+
+struct stack_info {
+	enum stack_type type;
+	unsigned long *begin;
+	unsigned long *end;
+	unsigned long *next_sp;
+};
+
+struct unwind_state {
+	struct stack_info stack_info;
+	unsigned long stack_mask;
+	struct task_struct *task;
+	int graph_idx;
+	struct llist_node *kr_cur;
+	bool error;
+	bool got_irq;
+	unsigned long *bp;
+	unsigned long *orig_sp;
+	unsigned long ip;
+	unsigned long *next_bp;
+	struct pt_regs *regs;
+};
+
+struct stack_frame_ia32 {
+	u32 next_frame;
+	u32 return_address;
+};
+
+typedef void (*smp_call_func_t)(void *);
+
+typedef bool (*smp_cond_func_t)(int, void *);
+
+struct perf_event_mmap_page {
+	__u32 version;
+	__u32 compat_version;
+	__u32 lock;
+	__u32 index;
+	__s64 offset;
+	__u64 time_enabled;
+	__u64 time_running;
+	union {
+		__u64 capabilities;
+		struct {
+			__u64 cap_bit0: 1;
+			__u64 cap_bit0_is_deprecated: 1;
+			__u64 cap_user_rdpmc: 1;
+			__u64 cap_user_time: 1;
+			__u64 cap_user_time_zero: 1;
+			__u64 cap_user_time_short: 1;
+			__u64 cap_____res: 58;
+		};
+	};
+	__u16 pmc_width;
+	__u16 time_shift;
+	__u32 time_mult;
+	__u64 time_offset;
+	__u64 time_zero;
+	__u32 size;
+	__u32 __reserved_1;
+	__u64 time_cycles;
+	__u64 time_mask;
+	__u8 __reserved[928];
+	__u64 data_head;
+	__u64 data_tail;
+	__u64 data_offset;
+	__u64 data_size;
+	__u64 aux_head;
+	__u64 aux_tail;
+	__u64 aux_offset;
+	__u64 aux_size;
+};
+
+struct x86_pmu_capability {
+	int version;
+	int num_counters_gp;
+	int num_counters_fixed;
+	int bit_width_gp;
+	int bit_width_fixed;
+	unsigned int events_mask;
+	int events_mask_len;
+	unsigned int pebs_ept: 1;
+};
+
+struct perf_msr {
+	u64 msr;
+	struct attribute_group *grp;
+	bool (*test)(int, void *);
+	bool no_check;
+	u64 mask;
+};
+
+enum {
+	PERF_BR_UNKNOWN = 0,
+	PERF_BR_COND = 1,
+	PERF_BR_UNCOND = 2,
+	PERF_BR_IND = 3,
+	PERF_BR_CALL = 4,
+	PERF_BR_IND_CALL = 5,
+	PERF_BR_RET = 6,
+	PERF_BR_SYSCALL = 7,
+	PERF_BR_SYSRET = 8,
+	PERF_BR_COND_CALL = 9,
+	PERF_BR_COND_RET = 10,
+	PERF_BR_ERET = 11,
+	PERF_BR_IRQ = 12,
+	PERF_BR_SERROR = 13,
+	PERF_BR_NO_TX = 14,
+	PERF_BR_EXTEND_ABI = 15,
+	PERF_BR_MAX = 16,
+};
+
+enum {
+	X86_BR_NONE = 0,
+	X86_BR_USER = 1,
+	X86_BR_KERNEL = 2,
+	X86_BR_CALL = 4,
+	X86_BR_RET = 8,
+	X86_BR_SYSCALL = 16,
+	X86_BR_SYSRET = 32,
+	X86_BR_INT = 64,
+	X86_BR_IRET = 128,
+	X86_BR_JCC = 256,
+	X86_BR_JMP = 512,
+	X86_BR_IRQ = 1024,
+	X86_BR_IND_CALL = 2048,
+	X86_BR_ABORT = 4096,
+	X86_BR_IN_TX = 8192,
+	X86_BR_NO_TX = 16384,
+	X86_BR_ZERO_CALL = 32768,
+	X86_BR_CALL_STACK = 65536,
+	X86_BR_IND_JMP = 131072,
+	X86_BR_TYPE_SAVE = 262144,
+};
+
+typedef int insn_value_t;
+
+typedef unsigned char insn_byte_t;
+
+struct insn_field {
+	union {
+		insn_value_t value;
+		insn_byte_t bytes[4];
+	};
+	unsigned char got;
+	unsigned char nbytes;
+};
+
+typedef unsigned int insn_attr_t;
+
+struct insn {
+	struct insn_field prefixes;
+	struct insn_field rex_prefix;
+	struct insn_field vex_prefix;
+	struct insn_field opcode;
+	struct insn_field modrm;
+	struct insn_field sib;
+	struct insn_field displacement;
+	union {
+		struct insn_field immediate;
+		struct insn_field moffset1;
+		struct insn_field immediate1;
+	};
+	union {
+		struct insn_field moffset2;
+		struct insn_field immediate2;
+	};
+	int emulate_prefix_size;
+	insn_attr_t attr;
+	unsigned char opnd_bytes;
+	unsigned char addr_bytes;
+	unsigned char length;
+	unsigned char x86_64;
+	const insn_byte_t *kaddr;
+	const insn_byte_t *end_kaddr;
+	const insn_byte_t *next_byte;
+};
+
+typedef void (*exitcall_t)();
+
+struct rapl_pmu;
+
+struct rapl_pmus {
+	struct pmu pmu;
+	unsigned int maxdie;
+	struct rapl_pmu *pmus[0];
+};
+
+struct rapl_pmu {
+	raw_spinlock_t lock;
+	int n_active;
+	int cpu;
+	struct list_head active_list;
+	struct pmu *pmu;
+	ktime_t timer_interval;
+	struct hrtimer hrtimer;
+};
+
+struct x86_cpu_id {
+	__u16 vendor;
+	__u16 family;
+	__u16 model;
+	__u16 steppings;
+	__u16 feature;
+	kernel_ulong_t driver_data;
+};
+
+enum rapl_unit_quirk {
+	RAPL_UNIT_QUIRK_NONE = 0,
+	RAPL_UNIT_QUIRK_INTEL_HSW = 1,
+	RAPL_UNIT_QUIRK_INTEL_SPR = 2,
+};
+
+struct rapl_model {
+	struct perf_msr *rapl_msrs;
+	unsigned long events;
+	unsigned int msr_power_unit;
+	enum rapl_unit_quirk unit_quirk;
+};
+
+enum perf_rapl_events {
+	PERF_RAPL_PP0 = 0,
+	PERF_RAPL_PKG = 1,
+	PERF_RAPL_RAM = 2,
+	PERF_RAPL_PP1 = 3,
+	PERF_RAPL_PSYS = 4,
+	PERF_RAPL_MAX = 5,
+	NR_RAPL_DOMAINS = 5,
+};
+
+enum perf_event_task_context {
+	perf_invalid_context = -1,
+	perf_hw_context = 0,
+	perf_sw_context = 1,
+	perf_nr_task_contexts = 2,
+};
+
+enum hrtimer_mode {
+	HRTIMER_MODE_ABS = 0,
+	HRTIMER_MODE_REL = 1,
+	HRTIMER_MODE_PINNED = 2,
+	HRTIMER_MODE_SOFT = 4,
+	HRTIMER_MODE_HARD = 8,
+	HRTIMER_MODE_ABS_PINNED = 2,
+	HRTIMER_MODE_REL_PINNED = 3,
+	HRTIMER_MODE_ABS_SOFT = 4,
+	HRTIMER_MODE_REL_SOFT = 5,
+	HRTIMER_MODE_ABS_PINNED_SOFT = 6,
+	HRTIMER_MODE_REL_PINNED_SOFT = 7,
+	HRTIMER_MODE_ABS_HARD = 8,
+	HRTIMER_MODE_REL_HARD = 9,
+	HRTIMER_MODE_ABS_PINNED_HARD = 10,
+	HRTIMER_MODE_REL_PINNED_HARD = 11,
+};
+
+struct cpuinfo_x86 {
+	__u8 x86;
+	__u8 x86_vendor;
+	__u8 x86_model;
+	__u8 x86_stepping;
+	int x86_tlbsize;
+	__u32 vmx_capability[5];
+	__u8 x86_virt_bits;
+	__u8 x86_phys_bits;
+	__u8 x86_coreid_bits;
+	__u8 cu_id;
+	__u32 extended_cpuid_level;
+	int cpuid_level;
+	union {
+		__u32 x86_capability[24];
+		unsigned long x86_capability_alignment;
+	};
+	char x86_vendor_id[16];
+	char x86_model_id[64];
+	unsigned int x86_cache_size;
+	int x86_cache_alignment;
+	int x86_cache_max_rmid;
+	int x86_cache_occ_scale;
+	int x86_cache_mbm_width_offset;
+	int x86_power;
+	unsigned long loops_per_jiffy;
+	u64 ppin;
+	u16 x86_max_cores;
+	u16 apicid;
+	u16 initial_apicid;
+	u16 x86_clflush_size;
+	u16 booted_cores;
+	u16 phys_proc_id;
+	u16 logical_proc_id;
+	u16 cpu_core_id;
+	u16 cpu_die_id;
+	u16 logical_die_id;
+	u16 cpu_index;
+	bool smt_active;
+	u32 microcode;
+	u8 x86_cache_bits;
+	unsigned int initialized: 1;
+};
+
+union cpuid_0x80000022_ebx {
+	struct {
+		unsigned int num_core_pmc: 4;
+		unsigned int lbr_v2_stack_sz: 6;
+		unsigned int num_df_pmc: 6;
+	} split;
+	unsigned int full;
+};
+
+enum {
+	PERF_BR_SPEC_NA = 0,
+	PERF_BR_SPEC_WRONG_PATH = 1,
+	PERF_BR_NON_SPEC_CORRECT_PATH = 2,
+	PERF_BR_SPEC_CORRECT_PATH = 3,
+	PERF_BR_SPEC_MAX = 4,
+};
+
+enum perf_branch_sample_type_shift {
+	PERF_SAMPLE_BRANCH_USER_SHIFT = 0,
+	PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1,
+	PERF_SAMPLE_BRANCH_HV_SHIFT = 2,
+	PERF_SAMPLE_BRANCH_ANY_SHIFT = 3,
+	PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4,
+	PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5,
+	PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6,
+	PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7,
+	PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8,
+	PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9,
+	PERF_SAMPLE_BRANCH_COND_SHIFT = 10,
+	PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11,
+	PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12,
+	PERF_SAMPLE_BRANCH_CALL_SHIFT = 13,
+	PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14,
+	PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15,
+	PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16,
+	PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17,
+	PERF_SAMPLE_BRANCH_PRIV_SAVE_SHIFT = 18,
+	PERF_SAMPLE_BRANCH_MAX_SHIFT = 19,
+};
+
+struct branch_entry {
+	union {
+		struct {
+			u64 ip: 58;
+			u64 ip_sign_ext: 5;
+			u64 mispredict: 1;
+		} split;
+		u64 full;
+	} from;
+	union {
+		struct {
+			u64 ip: 58;
+			u64 ip_sign_ext: 3;
+			u64 reserved: 1;
+			u64 spec: 1;
+			u64 valid: 1;
+		} split;
+		u64 full;
+	} to;
+};
+
+struct cpu_perf_ibs;
+
+struct perf_ibs {
+	struct pmu pmu;
+	unsigned int msr;
+	u64 config_mask;
+	u64 cnt_mask;
+	u64 enable_mask;
+	u64 valid_mask;
+	u64 max_period;
+	unsigned long offset_mask[1];
+	int offset_max;
+	unsigned int fetch_count_reset_broken: 1;
+	unsigned int fetch_ignore_if_zero_rip: 1;
+	struct cpu_perf_ibs __attribute__((btf_type_tag("percpu"))) *pcpu;
+	u64 (*get_count)(u64);
+};
+
+struct cpu_perf_ibs {
+	struct perf_event *event;
+	unsigned long state[1];
+};
+
+struct syscore_ops {
+	struct list_head node;
+	int (*suspend)();
+	void (*resume)();
+	void (*shutdown)();
+};
+
+enum perf_hw_id {
+	PERF_COUNT_HW_CPU_CYCLES = 0,
+	PERF_COUNT_HW_INSTRUCTIONS = 1,
+	PERF_COUNT_HW_CACHE_REFERENCES = 2,
+	PERF_COUNT_HW_CACHE_MISSES = 3,
+	PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
+	PERF_COUNT_HW_BRANCH_MISSES = 5,
+	PERF_COUNT_HW_BUS_CYCLES = 6,
+	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
+	PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
+	PERF_COUNT_HW_REF_CPU_CYCLES = 9,
+	PERF_COUNT_HW_MAX = 10,
+};
+
+enum ibs_states {
+	IBS_ENABLED = 0,
+	IBS_STARTED = 1,
+	IBS_STOPPING = 2,
+	IBS_STOPPED = 3,
+	IBS_MAX_STATES = 4,
+};
+
+union ibs_fetch_ctl {
+	__u64 val;
+	struct {
+		__u64 fetch_maxcnt: 16;
+		__u64 fetch_cnt: 16;
+		__u64 fetch_lat: 16;
+		__u64 fetch_en: 1;
+		__u64 fetch_val: 1;
+		__u64 fetch_comp: 1;
+		__u64 ic_miss: 1;
+		__u64 phy_addr_valid: 1;
+		__u64 l1tlb_pgsz: 2;
+		__u64 l1tlb_miss: 1;
+		__u64 l2tlb_miss: 1;
+		__u64 rand_en: 1;
+		__u64 fetch_l2_miss: 1;
+		__u64 l3_miss_only: 1;
+		__u64 fetch_oc_miss: 1;
+		__u64 fetch_l3_miss: 1;
+		__u64 reserved: 2;
+	};
+};
+
+union ibs_op_ctl {
+	__u64 val;
+	struct {
+		__u64 opmaxcnt: 16;
+		__u64 l3_miss_only: 1;
+		__u64 op_en: 1;
+		__u64 op_val: 1;
+		__u64 cnt_ctl: 1;
+		__u64 opmaxcnt_ext: 7;
+		__u64 reserved0: 5;
+		__u64 opcurcnt: 27;
+		__u64 reserved1: 5;
+	};
+};
+
+struct perf_ibs_data {
+	u32 size;
+	union {
+		u32 data[0];
+		u32 caps;
+	};
+	u64 regs[8];
+};
+
+union ibs_op_data3 {
+	__u64 val;
+	struct {
+		__u64 ld_op: 1;
+		__u64 st_op: 1;
+		__u64 dc_l1tlb_miss: 1;
+		__u64 dc_l2tlb_miss: 1;
+		__u64 dc_l1tlb_hit_2m: 1;
+		__u64 dc_l1tlb_hit_1g: 1;
+		__u64 dc_l2tlb_hit_2m: 1;
+		__u64 dc_miss: 1;
+		__u64 dc_mis_acc: 1;
+		__u64 reserved: 4;
+		__u64 dc_wc_mem_acc: 1;
+		__u64 dc_uc_mem_acc: 1;
+		__u64 dc_locked_op: 1;
+		__u64 dc_miss_no_mab_alloc: 1;
+		__u64 dc_lin_addr_valid: 1;
+		__u64 dc_phy_addr_valid: 1;
+		__u64 dc_l2_tlb_hit_1g: 1;
+		__u64 l2_miss: 1;
+		__u64 sw_pf: 1;
+		__u64 op_mem_width: 4;
+		__u64 op_dc_miss_open_mem_reqs: 6;
+		__u64 dc_miss_lat: 16;
+		__u64 tlb_refill_lat: 16;
+	};
+};
+
+union ibs_op_data2 {
+	__u64 val;
+	struct {
+		__u64 data_src_lo: 3;
+		__u64 reserved0: 1;
+		__u64 rmt_node: 1;
+		__u64 cache_hit_st: 1;
+		__u64 data_src_hi: 2;
+		__u64 reserved1: 56;
+	};
+};
+
+union ibs_op_data {
+	__u64 val;
+	struct {
+		__u64 comp_to_ret_ctr: 16;
+		__u64 tag_to_ret_ctr: 16;
+		__u64 reserved1: 2;
+		__u64 op_return: 1;
+		__u64 op_brn_taken: 1;
+		__u64 op_brn_misp: 1;
+		__u64 op_brn_ret: 1;
+		__u64 op_rip_invalid: 1;
+		__u64 op_brn_fuse: 1;
+		__u64 op_microcode: 1;
+		__u64 reserved2: 23;
+	};
+};
+
+typedef int pci_power_t;
+
+typedef unsigned int pci_channel_state_t;
+
+typedef phys_addr_t resource_size_t;
+
+struct resource {
+	resource_size_t start;
+	resource_size_t end;
+	const char *name;
+	unsigned long flags;
+	unsigned long desc;
+	struct resource *parent;
+	struct resource *sibling;
+	struct resource *child;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef unsigned short pci_dev_flags_t;
+
+struct pci_vpd {
+	struct mutex lock;
+	unsigned int len;
+	u8 cap;
+};
+
+struct pci_bus;
+
+struct pci_slot;
+
+struct aer_stats;
+
+struct rcec_ea;
+
+struct pci_driver;
+
+struct pcie_link_state;
+
+struct pci_sriov;
+
+struct pci_dev {
+	struct list_head bus_list;
+	struct pci_bus *bus;
+	struct pci_bus *subordinate;
+	void *sysdata;
+	struct proc_dir_entry *procent;
+	struct pci_slot *slot;
+	unsigned int devfn;
+	unsigned short vendor;
+	unsigned short device;
+	unsigned short subsystem_vendor;
+	unsigned short subsystem_device;
+	unsigned int class;
+	u8 revision;
+	u8 hdr_type;
+	u16 aer_cap;
+	struct aer_stats *aer_stats;
+	struct rcec_ea *rcec_ea;
+	struct pci_dev *rcec;
+	u32 devcap;
+	u8 pcie_cap;
+	u8 msi_cap;
+	u8 msix_cap;
+	u8 pcie_mpss: 3;
+	u8 rom_base_reg;
+	u8 pin;
+	u16 pcie_flags_reg;
+	unsigned long *dma_alias_mask;
+	struct pci_driver *driver;
+	u64 dma_mask;
+	struct device_dma_parameters dma_parms;
+	pci_power_t current_state;
+	u8 pm_cap;
+	unsigned int imm_ready: 1;
+	unsigned int pme_support: 5;
+	unsigned int pme_poll: 1;
+	unsigned int d1_support: 1;
+	unsigned int d2_support: 1;
+	unsigned int no_d1d2: 1;
+	unsigned int no_d3cold: 1;
+	unsigned int bridge_d3: 1;
+	unsigned int d3cold_allowed: 1;
+	unsigned int mmio_always_on: 1;
+	unsigned int wakeup_prepared: 1;
+	unsigned int skip_bus_pm: 1;
+	unsigned int ignore_hotplug: 1;
+	unsigned int hotplug_user_indicators: 1;
+	unsigned int clear_retrain_link: 1;
+	unsigned int d3hot_delay;
+	unsigned int d3cold_delay;
+	struct pcie_link_state *link_state;
+	u16 l1ss;
+	unsigned int ltr_path: 1;
+	unsigned int pasid_no_tlp: 1;
+	unsigned int eetlp_prefix_path: 1;
+	pci_channel_state_t error_state;
+	struct device dev;
+	int cfg_size;
+	unsigned int irq;
+	struct resource resource[17];
+	struct resource driver_exclusive_resource;
+	bool match_driver;
+	unsigned int transparent: 1;
+	unsigned int io_window: 1;
+	unsigned int pref_window: 1;
+	unsigned int pref_64_window: 1;
+	unsigned int multifunction: 1;
+	unsigned int is_busmaster: 1;
+	unsigned int no_msi: 1;
+	unsigned int no_64bit_msi: 1;
+	unsigned int block_cfg_access: 1;
+	unsigned int broken_parity_status: 1;
+	unsigned int irq_reroute_variant: 2;
+	unsigned int msi_enabled: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int ari_enabled: 1;
+	unsigned int ats_enabled: 1;
+	unsigned int pasid_enabled: 1;
+	unsigned int pri_enabled: 1;
+	unsigned int is_managed: 1;
+	unsigned int is_msi_managed: 1;
+	unsigned int needs_freset: 1;
+	unsigned int state_saved: 1;
+	unsigned int is_physfn: 1;
+	unsigned int is_virtfn: 1;
+	unsigned int is_hotplug_bridge: 1;
+	unsigned int shpc_managed: 1;
+	unsigned int is_thunderbolt: 1;
+	unsigned int untrusted: 1;
+	unsigned int external_facing: 1;
+	unsigned int broken_intx_masking: 1;
+	unsigned int io_window_1k: 1;
+	unsigned int irq_managed: 1;
+	unsigned int non_compliant_bars: 1;
+	unsigned int is_probed: 1;
+	unsigned int link_active_reporting: 1;
+	unsigned int no_vf_scan: 1;
+	unsigned int no_command_memory: 1;
+	unsigned int rom_bar_overlap: 1;
+	unsigned int rom_attr_enabled: 1;
+	pci_dev_flags_t dev_flags;
+	atomic_t enable_cnt;
+	spinlock_t pcie_cap_lock;
+	u32 saved_config_space[16];
+	struct hlist_head saved_cap_space;
+	struct bin_attribute *res_attr[17];
+	struct bin_attribute *res_attr_wc[17];
+	void *msix_base;
+	raw_spinlock_t msi_lock;
+	struct pci_vpd vpd;
+	union {
+		struct pci_sriov *sriov;
+		struct pci_dev *physfn;
+	};
+	u16 ats_cap;
+	u8 ats_stu;
+	u16 acs_cap;
+	phys_addr_t rom;
+	size_t romlen;
+	const char *driver_override;
+	unsigned long priv_flags;
+	u8 reset_methods[7];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef unsigned short pci_bus_flags_t;
+
+struct pci_ops;
+
+struct pci_bus {
+	struct list_head node;
+	struct pci_bus *parent;
+	struct list_head children;
+	struct list_head devices;
+	struct pci_dev *self;
+	struct list_head slots;
+	struct resource *resource[4];
+	struct list_head resources;
+	struct resource busn_res;
+	struct pci_ops *ops;
+	void *sysdata;
+	struct proc_dir_entry *procdir;
+	unsigned char number;
+	unsigned char primary;
+	unsigned char max_bus_speed;
+	unsigned char cur_bus_speed;
+	char name[48];
+	unsigned short bridge_ctl;
+	pci_bus_flags_t bus_flags;
+	struct device *bridge;
+	struct device dev;
+	struct bin_attribute *legacy_io;
+	struct bin_attribute *legacy_mem;
+	unsigned int is_added: 1;
+	unsigned int unsafe_warn: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct pci_ops {
+	int (*add_bus)(struct pci_bus *);
+	void (*remove_bus)(struct pci_bus *);
+	void * (*map_bus)(struct pci_bus *, unsigned int, int);
+	int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);
+	int (*write)(struct pci_bus *, unsigned int, int, int, u32);
+	u64 android_kabi_reserved1;
+};
+
+struct hotplug_slot;
+
+struct pci_slot {
+	struct pci_bus *bus;
+	struct list_head list;
+	struct hotplug_slot *hotplug;
+	unsigned char number;
+	struct kobject kobj;
+};
+
+struct pci_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct pci_device_id;
+
+struct pci_error_handlers;
+
+struct pci_driver {
+	struct list_head node;
+	const char *name;
+	const struct pci_device_id *id_table;
+	int (*probe)(struct pci_dev *, const struct pci_device_id *);
+	void (*remove)(struct pci_dev *);
+	int (*suspend)(struct pci_dev *, pm_message_t);
+	int (*resume)(struct pci_dev *);
+	void (*shutdown)(struct pci_dev *);
+	int (*sriov_configure)(struct pci_dev *, int);
+	int (*sriov_set_msix_vec_count)(struct pci_dev *, int);
+	u32 (*sriov_get_vf_total_msix)(struct pci_dev *);
+	const struct pci_error_handlers *err_handler;
+	const struct attribute_group **groups;
+	const struct attribute_group **dev_groups;
+	struct device_driver driver;
+	struct pci_dynids dynids;
+	bool driver_managed_dma;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct pci_device_id {
+	__u32 vendor;
+	__u32 device;
+	__u32 subvendor;
+	__u32 subdevice;
+	__u32 class;
+	__u32 class_mask;
+	kernel_ulong_t driver_data;
+	__u32 override_only;
+};
+
+typedef unsigned int pci_ers_result_t;
+
+struct pci_error_handlers {
+	pci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t);
+	pci_ers_result_t (*mmio_enabled)(struct pci_dev *);
+	pci_ers_result_t (*slot_reset)(struct pci_dev *);
+	void (*reset_prepare)(struct pci_dev *);
+	void (*reset_done)(struct pci_dev *);
+	void (*resume)(struct pci_dev *);
+	void (*cor_error_detected)(struct pci_dev *);
+	u64 android_kabi_reserved1;
+};
+
+struct amd_uncore {
+	int id;
+	int refcnt;
+	int cpu;
+	int num_counters;
+	int rdpmc_base;
+	u32 msr_base;
+	cpumask_t *active_mask;
+	struct pmu *pmu;
+	struct perf_event **events;
+	struct hlist_node node;
+};
+
+enum perf_msr_id {
+	PERF_MSR_TSC = 0,
+	PERF_MSR_APERF = 1,
+	PERF_MSR_MPERF = 2,
+	PERF_MSR_PPERF = 3,
+	PERF_MSR_SMI = 4,
+	PERF_MSR_PTSC = 5,
+	PERF_MSR_IRPERF = 6,
+	PERF_MSR_THERM = 7,
+	PERF_MSR_EVENT_MAX = 8,
+};
+
+enum irq_domain_bus_token {
+	DOMAIN_BUS_ANY = 0,
+	DOMAIN_BUS_WIRED = 1,
+	DOMAIN_BUS_GENERIC_MSI = 2,
+	DOMAIN_BUS_PCI_MSI = 3,
+	DOMAIN_BUS_PLATFORM_MSI = 4,
+	DOMAIN_BUS_NEXUS = 5,
+	DOMAIN_BUS_IPI = 6,
+	DOMAIN_BUS_FSL_MC_MSI = 7,
+	DOMAIN_BUS_TI_SCI_INTA_MSI = 8,
+	DOMAIN_BUS_WAKEUP = 9,
+	DOMAIN_BUS_VMD_MSI = 10,
+	DOMAIN_BUS_PCI_DEVICE_MSI = 11,
+	DOMAIN_BUS_PCI_DEVICE_MSIX = 12,
+	DOMAIN_BUS_DMAR = 13,
+	DOMAIN_BUS_AMDVI = 14,
+	DOMAIN_BUS_PCI_DEVICE_IMS = 15,
+};
+
+typedef unsigned long irq_hw_number_t;
+
+struct irq_domain_ops;
+
+struct irq_domain_chip_generic;
+
+struct msi_parent_ops;
+
+struct irq_data;
+
+struct irq_domain {
+	struct list_head link;
+	const char *name;
+	const struct irq_domain_ops *ops;
+	void *host_data;
+	unsigned int flags;
+	unsigned int mapcount;
+	struct mutex mutex;
+	struct irq_domain *root;
+	struct fwnode_handle *fwnode;
+	enum irq_domain_bus_token bus_token;
+	struct irq_domain_chip_generic *gc;
+	struct device *dev;
+	struct device *pm_dev;
+	struct irq_domain *parent;
+	const struct msi_parent_ops *msi_parent_ops;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	irq_hw_number_t hwirq_max;
+	unsigned int revmap_size;
+	struct xarray revmap_tree;
+	struct irq_data __attribute__((btf_type_tag("rcu"))) *revmap[0];
+};
+
+struct irq_fwspec;
+
+struct irq_domain_ops {
+	int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);
+	int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);
+	int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);
+	void (*unmap)(struct irq_domain *, unsigned int);
+	int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, unsigned long *, unsigned int *);
+	int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);
+	void (*free)(struct irq_domain *, unsigned int, unsigned int);
+	int (*activate)(struct irq_domain *, struct irq_data *, bool);
+	void (*deactivate)(struct irq_domain *, struct irq_data *);
+	int (*translate)(struct irq_domain *, struct irq_fwspec *, unsigned long *, unsigned int *);
+};
+
+struct irq_fwspec {
+	struct fwnode_handle *fwnode;
+	int param_count;
+	u32 param[16];
+};
+
+struct irq_common_data;
+
+struct irq_chip;
+
+struct irq_data {
+	u32 mask;
+	unsigned int irq;
+	unsigned long hwirq;
+	struct irq_common_data *common;
+	struct irq_chip *chip;
+	struct irq_domain *domain;
+	struct irq_data *parent_data;
+	void *chip_data;
+};
+
+struct msi_desc;
+
+struct irq_common_data {
+	unsigned int state_use_accessors;
+	void *handler_data;
+	struct msi_desc *msi_desc;
+	cpumask_var_t affinity;
+	cpumask_var_t effective_affinity;
+};
+
+struct pci_msi_desc {
+	union {
+		u32 msi_mask;
+		u32 msix_ctrl;
+	};
+	struct {
+		u8 is_msix: 1;
+		u8 multiple: 3;
+		u8 multi_cap: 3;
+		u8 can_mask: 1;
+		u8 is_64: 1;
+		u8 is_virtual: 1;
+		unsigned int default_irq;
+	} msi_attrib;
+	union {
+		u8 mask_pos;
+		void *mask_base;
+	};
+};
+
+union msi_domain_cookie {
+	u64 value;
+	void *ptr;
+	void *iobase;
+};
+
+union msi_instance_cookie {
+	u64 value;
+	void *ptr;
+};
+
+struct msi_desc_data {
+	union msi_domain_cookie dcookie;
+	union msi_instance_cookie icookie;
+};
+
+struct x86_msi_addr_lo {
+	union {
+		struct {
+			u32 reserved_0: 2;
+			u32 dest_mode_logical: 1;
+			u32 redirect_hint: 1;
+			u32 reserved_1: 1;
+			u32 virt_destid_8_14: 7;
+			u32 destid_0_7: 8;
+			u32 base_address: 12;
+		};
+		struct {
+			u32 dmar_reserved_0: 2;
+			u32 dmar_index_15: 1;
+			u32 dmar_subhandle_valid: 1;
+			u32 dmar_format: 1;
+			u32 dmar_index_0_14: 15;
+			u32 dmar_base_address: 12;
+		};
+	};
+};
+
+typedef struct x86_msi_addr_lo arch_msi_msg_addr_lo_t;
+
+struct x86_msi_addr_hi {
+	u32 reserved: 8;
+	u32 destid_8_31: 24;
+};
+
+typedef struct x86_msi_addr_hi arch_msi_msg_addr_hi_t;
+
+struct x86_msi_data {
+	union {
+		struct {
+			u32 vector: 8;
+			u32 delivery_mode: 3;
+			u32 dest_mode_logical: 1;
+			u32 reserved: 2;
+			u32 active_low: 1;
+			u32 is_level: 1;
+		};
+		u32 dmar_subhandle;
+	};
+};
+
+typedef struct x86_msi_data arch_msi_msg_data_t;
+
+struct msi_msg {
+	union {
+		u32 address_lo;
+		arch_msi_msg_addr_lo_t arch_addr_lo;
+	};
+	union {
+		u32 address_hi;
+		arch_msi_msg_addr_hi_t arch_addr_hi;
+	};
+	union {
+		u32 data;
+		arch_msi_msg_data_t arch_data;
+	};
+};
+
+struct irq_affinity_desc;
+
+struct msi_desc {
+	unsigned int irq;
+	unsigned int nvec_used;
+	struct device *dev;
+	struct msi_msg msg;
+	struct irq_affinity_desc *affinity;
+	const void *iommu_cookie;
+	struct device_attribute *sysfs_attrs;
+	void (*write_msi_msg)(struct msi_desc *, void *);
+	void *write_msi_msg_data;
+	u16 msi_index;
+	union {
+		struct pci_msi_desc pci;
+		struct msi_desc_data data;
+	};
+};
+
+struct irq_affinity_desc {
+	struct cpumask mask;
+	unsigned int is_managed: 1;
+};
+
+enum irqchip_irq_state {
+	IRQCHIP_STATE_PENDING = 0,
+	IRQCHIP_STATE_ACTIVE = 1,
+	IRQCHIP_STATE_MASKED = 2,
+	IRQCHIP_STATE_LINE_LEVEL = 3,
+};
+
+struct irq_chip {
+	const char *name;
+	unsigned int (*irq_startup)(struct irq_data *);
+	void (*irq_shutdown)(struct irq_data *);
+	void (*irq_enable)(struct irq_data *);
+	void (*irq_disable)(struct irq_data *);
+	void (*irq_ack)(struct irq_data *);
+	void (*irq_mask)(struct irq_data *);
+	void (*irq_mask_ack)(struct irq_data *);
+	void (*irq_unmask)(struct irq_data *);
+	void (*irq_eoi)(struct irq_data *);
+	int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);
+	int (*irq_retrigger)(struct irq_data *);
+	int (*irq_set_type)(struct irq_data *, unsigned int);
+	int (*irq_set_wake)(struct irq_data *, unsigned int);
+	void (*irq_bus_lock)(struct irq_data *);
+	void (*irq_bus_sync_unlock)(struct irq_data *);
+	void (*irq_suspend)(struct irq_data *);
+	void (*irq_resume)(struct irq_data *);
+	void (*irq_pm_shutdown)(struct irq_data *);
+	void (*irq_calc_mask)(struct irq_data *);
+	void (*irq_print_chip)(struct irq_data *, struct seq_file *);
+	int (*irq_request_resources)(struct irq_data *);
+	void (*irq_release_resources)(struct irq_data *);
+	void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);
+	void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);
+	int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);
+	int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);
+	int (*irq_set_vcpu_affinity)(struct irq_data *, void *);
+	void (*ipi_send_single)(struct irq_data *, unsigned int);
+	void (*ipi_send_mask)(struct irq_data *, const struct cpumask *);
+	int (*irq_nmi_setup)(struct irq_data *);
+	void (*irq_nmi_teardown)(struct irq_data *);
+	unsigned long flags;
+};
+
+enum irq_gc_flags {
+	IRQ_GC_INIT_MASK_CACHE = 1,
+	IRQ_GC_INIT_NESTED_LOCK = 2,
+	IRQ_GC_MASK_CACHE_PER_TYPE = 4,
+	IRQ_GC_NO_MASK = 8,
+	IRQ_GC_BE_IO = 16,
+};
+
+struct irq_chip_generic;
+
+struct irq_domain_chip_generic {
+	unsigned int irqs_per_chip;
+	unsigned int num_chips;
+	unsigned int irq_flags_to_clear;
+	unsigned int irq_flags_to_set;
+	enum irq_gc_flags gc_flags;
+	struct irq_chip_generic *gc[0];
+};
+
+struct irq_chip_regs {
+	unsigned long enable;
+	unsigned long disable;
+	unsigned long mask;
+	unsigned long ack;
+	unsigned long eoi;
+	unsigned long type;
+	unsigned long polarity;
+};
+
+struct irq_desc;
+
+typedef void (*irq_flow_handler_t)(struct irq_desc *);
+
+struct irq_chip_type {
+	struct irq_chip chip;
+	struct irq_chip_regs regs;
+	irq_flow_handler_t handler;
+	u32 type;
+	u32 mask_cache_priv;
+	u32 *mask_cache;
+};
+
+struct irq_chip_generic {
+	raw_spinlock_t lock;
+	void *reg_base;
+	u32 (*reg_readl)(void *);
+	void (*reg_writel)(u32, void *);
+	void (*suspend)(struct irq_chip_generic *);
+	void (*resume)(struct irq_chip_generic *);
+	unsigned int irq_base;
+	unsigned int irq_cnt;
+	u32 mask_cache;
+	u32 type_cache;
+	u32 polarity_cache;
+	u32 wake_enabled;
+	u32 wake_active;
+	unsigned int num_ct;
+	void *private;
+	unsigned long installed;
+	unsigned long unused;
+	struct irq_domain *domain;
+	struct list_head list;
+	struct irq_chip_type chip_types[0];
+};
+
+struct irqaction;
+
+struct irq_affinity_notify;
+
+struct irq_desc {
+	struct irq_common_data irq_common_data;
+	struct irq_data irq_data;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *kstat_irqs;
+	irq_flow_handler_t handle_irq;
+	struct irqaction *action;
+	unsigned int status_use_accessors;
+	unsigned int core_internal_state__do_not_mess_with_it;
+	unsigned int depth;
+	unsigned int wake_depth;
+	unsigned int tot_count;
+	unsigned int irq_count;
+	unsigned long last_unhandled;
+	unsigned int irqs_unhandled;
+	atomic_t threads_handled;
+	int threads_handled_last;
+	raw_spinlock_t lock;
+	struct cpumask *percpu_enabled;
+	const struct cpumask *percpu_affinity;
+	const struct cpumask *affinity_hint;
+	struct irq_affinity_notify *affinity_notify;
+	cpumask_var_t pending_mask;
+	unsigned long threads_oneshot;
+	atomic_t threads_active;
+	wait_queue_head_t wait_for_threads;
+	unsigned int nr_actions;
+	unsigned int no_suspend_depth;
+	unsigned int cond_suspend_depth;
+	unsigned int force_resume_depth;
+	struct proc_dir_entry *dir;
+	struct callback_head rcu;
+	struct kobject kobj;
+	struct mutex request_mutex;
+	int parent_irq;
+	struct module *owner;
+	const char *name;
+	struct hlist_node resend_node;
+	u64 android_vendor_data1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum irqreturn {
+	IRQ_NONE = 0,
+	IRQ_HANDLED = 1,
+	IRQ_WAKE_THREAD = 2,
+};
+
+typedef enum irqreturn irqreturn_t;
+
+typedef irqreturn_t (*irq_handler_t)(int, void *);
+
+struct irqaction {
+	irq_handler_t handler;
+	void *dev_id;
+	void __attribute__((btf_type_tag("percpu"))) *percpu_dev_id;
+	struct irqaction *next;
+	irq_handler_t thread_fn;
+	struct task_struct *thread;
+	struct irqaction *secondary;
+	unsigned int irq;
+	unsigned int flags;
+	unsigned long thread_flags;
+	unsigned long thread_mask;
+	const char *name;
+	struct proc_dir_entry *dir;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct irq_affinity_notify {
+	unsigned int irq;
+	struct kref kref;
+	struct work_struct work;
+	void (*notify)(struct irq_affinity_notify *, const cpumask_t *);
+	void (*release)(struct kref *);
+};
+
+struct msi_domain_info;
+
+struct msi_parent_ops {
+	u32 supported_flags;
+	const char *prefix;
+	bool (*init_dev_msi_info)(struct device *, struct irq_domain *, struct irq_domain *, struct msi_domain_info *);
+};
+
+struct msi_domain_ops;
+
+struct msi_domain_info {
+	u32 flags;
+	enum irq_domain_bus_token bus_token;
+	unsigned int hwsize;
+	struct msi_domain_ops *ops;
+	struct irq_chip *chip;
+	void *chip_data;
+	irq_flow_handler_t handler;
+	void *handler_data;
+	const char *handler_name;
+	void *data;
+};
+
+struct irq_alloc_info;
+
+typedef struct irq_alloc_info msi_alloc_info_t;
+
+struct msi_domain_ops {
+	irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);
+	int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);
+	void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);
+	int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);
+	void (*prepare_desc)(struct irq_domain *, msi_alloc_info_t *, struct msi_desc *);
+	void (*set_desc)(msi_alloc_info_t *, struct msi_desc *);
+	int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);
+	void (*domain_free_irqs)(struct irq_domain *, struct device *);
+	void (*msi_post_free)(struct irq_domain *, struct device *);
+};
+
+enum irq_alloc_type {
+	X86_IRQ_ALLOC_TYPE_IOAPIC = 1,
+	X86_IRQ_ALLOC_TYPE_HPET = 2,
+	X86_IRQ_ALLOC_TYPE_PCI_MSI = 3,
+	X86_IRQ_ALLOC_TYPE_PCI_MSIX = 4,
+	X86_IRQ_ALLOC_TYPE_DMAR = 5,
+	X86_IRQ_ALLOC_TYPE_AMDVI = 6,
+	X86_IRQ_ALLOC_TYPE_UV = 7,
+};
+
+struct ioapic_alloc_info {
+	int pin;
+	int node;
+	u32 is_level: 1;
+	u32 active_low: 1;
+	u32 valid: 1;
+};
+
+struct uv_alloc_info {
+	int limit;
+	int blade;
+	unsigned long offset;
+	char *name;
+};
+
+struct irq_alloc_info {
+	enum irq_alloc_type type;
+	u32 flags;
+	u32 devid;
+	irq_hw_number_t hwirq;
+	const struct cpumask *mask;
+	struct msi_desc *desc;
+	void *data;
+	union {
+		struct ioapic_alloc_info ioapic;
+		struct uv_alloc_info uv;
+	};
+};
+
+struct msi_dev_domain {
+	struct xarray store;
+	struct irq_domain *domain;
+};
+
+struct platform_msi_priv_data;
+
+struct msi_device_data {
+	unsigned long properties;
+	struct platform_msi_priv_data *platform_data;
+	struct mutex mutex;
+	struct msi_dev_domain __domains[2];
+	unsigned long __iter_idx;
+};
+
+struct x86_cpu_desc {
+	u8 x86_family;
+	u8 x86_vendor;
+	u8 x86_model;
+	u8 x86_stepping;
+	u32 x86_microcode_rev;
+};
+
+struct perf_pmu_format_hybrid_attr {
+	struct device_attribute attr;
+	u64 pmu_type;
+};
+
+enum {
+	LBR_FORMAT_32 = 0,
+	LBR_FORMAT_LIP = 1,
+	LBR_FORMAT_EIP = 2,
+	LBR_FORMAT_EIP_FLAGS = 3,
+	LBR_FORMAT_EIP_FLAGS2 = 4,
+	LBR_FORMAT_INFO = 5,
+	LBR_FORMAT_TIME = 6,
+	LBR_FORMAT_INFO2 = 7,
+	LBR_FORMAT_MAX_KNOWN = 7,
+};
+
+enum pmc_type {
+	KVM_PMC_GP = 0,
+	KVM_PMC_FIXED = 1,
+};
+
+enum kvm_apic_logical_mode {
+	KVM_APIC_MODE_SW_DISABLED = 0,
+	KVM_APIC_MODE_XAPIC_CLUSTER = 1,
+	KVM_APIC_MODE_XAPIC_FLAT = 2,
+	KVM_APIC_MODE_X2APIC = 3,
+	KVM_APIC_MODE_MAP_DISABLED = 4,
+};
+
+enum hv_tsc_page_status {
+	HV_TSC_PAGE_UNSET = 0,
+	HV_TSC_PAGE_GUEST_CHANGED = 1,
+	HV_TSC_PAGE_HOST_CHANGED = 2,
+	HV_TSC_PAGE_SET = 3,
+	HV_TSC_PAGE_BROKEN = 4,
+};
+
+enum pfn_cache_usage {
+	KVM_GUEST_USES_PFN = 1,
+	KVM_HOST_USES_PFN = 2,
+	KVM_GUEST_AND_HOST_USE_PFN = 3,
+};
+
+enum kvm_irqchip_mode {
+	KVM_IRQCHIP_NONE = 0,
+	KVM_IRQCHIP_KERNEL = 1,
+	KVM_IRQCHIP_SPLIT = 2,
+};
+
+enum mmu_notifier_event {
+	MMU_NOTIFY_UNMAP = 0,
+	MMU_NOTIFY_CLEAR = 1,
+	MMU_NOTIFY_PROTECTION_VMA = 2,
+	MMU_NOTIFY_PROTECTION_PAGE = 3,
+	MMU_NOTIFY_SOFT_DIRTY = 4,
+	MMU_NOTIFY_RELEASE = 5,
+	MMU_NOTIFY_MIGRATE = 6,
+	MMU_NOTIFY_EXCLUSIVE = 7,
+};
+
+enum kvm_stat_kind {
+	KVM_STAT_VM = 0,
+	KVM_STAT_VCPU = 1,
+};
+
+struct kvm_vcpu;
+
+struct kvm_pmc {
+	enum pmc_type type;
+	u8 idx;
+	bool is_paused;
+	bool intr;
+	u64 counter;
+	u64 prev_counter;
+	u64 eventsel;
+	struct perf_event *perf_event;
+	struct kvm_vcpu *vcpu;
+	u64 current_config;
+};
+
+struct kvm_pmu {
+	u8 version;
+	unsigned int nr_arch_gp_counters;
+	unsigned int nr_arch_fixed_counters;
+	unsigned int available_event_types;
+	u64 fixed_ctr_ctrl;
+	u64 fixed_ctr_ctrl_mask;
+	u64 global_ctrl;
+	u64 global_status;
+	u64 counter_bitmask[2];
+	u64 global_ctrl_mask;
+	u64 global_status_mask;
+	u64 reserved_bits;
+	u64 raw_event_mask;
+	struct kvm_pmc gp_counters[8];
+	struct kvm_pmc fixed_counters[3];
+	union {
+		unsigned long reprogram_pmi[1];
+		atomic64_t __reprogram_pmi;
+	};
+	unsigned long all_valid_pmc_idx[1];
+	unsigned long pmc_in_use[1];
+	u64 ds_area;
+	u64 pebs_enable;
+	u64 pebs_enable_mask;
+	u64 pebs_data_cfg;
+	u64 pebs_data_cfg_mask;
+	u64 host_cross_mapped_mask;
+	bool need_cleanup;
+	u8 event_count;
+};
+
+struct preempt_ops;
+
+struct preempt_notifier {
+	struct hlist_node link;
+	struct preempt_ops *ops;
+};
+
+typedef u64 gpa_t;
+
+struct kvm_mmio_fragment {
+	gpa_t gpa;
+	void *data;
+	unsigned int len;
+};
+
+typedef u64 hpa_t;
+
+struct kvm_mmu_root_info {
+	gpa_t pgd;
+	hpa_t hpa;
+};
+
+union kvm_mmu_page_role {
+	u32 word;
+	struct {
+		unsigned int level: 4;
+		unsigned int has_4_byte_gpte: 1;
+		unsigned int quadrant: 2;
+		unsigned int direct: 1;
+		unsigned int access: 3;
+		unsigned int invalid: 1;
+		unsigned int efer_nx: 1;
+		unsigned int cr0_wp: 1;
+		unsigned int smep_andnot_wp: 1;
+		unsigned int smap_andnot_wp: 1;
+		unsigned int ad_disabled: 1;
+		unsigned int guest_mode: 1;
+		unsigned int passthrough: 1;
+		char: 5;
+		unsigned int smm: 8;
+	};
+};
+
+union kvm_mmu_extended_role {
+	u32 word;
+	struct {
+		unsigned int valid: 1;
+		unsigned int execonly: 1;
+		unsigned int cr4_pse: 1;
+		unsigned int cr4_pke: 1;
+		unsigned int cr4_smap: 1;
+		unsigned int cr4_smep: 1;
+		unsigned int cr4_la57: 1;
+		unsigned int efer_lma: 1;
+	};
+};
+
+union kvm_cpu_role {
+	u64 as_u64;
+	struct {
+		union kvm_mmu_page_role base;
+		union kvm_mmu_extended_role ext;
+	};
+};
+
+struct rsvd_bits_validate {
+	u64 rsvd_bits_mask[10];
+	u64 bad_mt_xwr;
+};
+
+struct kvm_page_fault;
+
+struct x86_exception;
+
+struct kvm_mmu_page;
+
+struct kvm_mmu {
+	unsigned long (*get_guest_pgd)(struct kvm_vcpu *);
+	u64 (*get_pdptr)(struct kvm_vcpu *, int);
+	int (*page_fault)(struct kvm_vcpu *, struct kvm_page_fault *);
+	void (*inject_page_fault)(struct kvm_vcpu *, struct x86_exception *);
+	gpa_t (*gva_to_gpa)(struct kvm_vcpu *, struct kvm_mmu *, gpa_t, u64, struct x86_exception *);
+	int (*sync_spte)(struct kvm_vcpu *, struct kvm_mmu_page *, int);
+	struct kvm_mmu_root_info root;
+	union kvm_cpu_role cpu_role;
+	union kvm_mmu_page_role root_role;
+	u32 pkru_mask;
+	struct kvm_mmu_root_info prev_roots[3];
+	u8 permissions[16];
+	u64 *pae_root;
+	u64 *pml4_root;
+	u64 *pml5_root;
+	struct rsvd_bits_validate shadow_zero_check;
+	struct rsvd_bits_validate guest_rsvd_check;
+	u64 pdptrs[4];
+};
+
+struct kvm_mmu_memory_cache {
+	gfp_t gfp_zero;
+	gfp_t gfp_custom;
+	struct kmem_cache *kmem_cache;
+	int capacity;
+	int nobjs;
+	void **objects;
+};
+
+struct fpu_guest {
+	u64 xfeatures;
+	u64 perm;
+	u64 xfd_err;
+	unsigned int uabi_size;
+	struct fpstate *fpstate;
+};
+
+struct kvm_pio_request {
+	unsigned long linear_rip;
+	unsigned long count;
+	int in;
+	int port;
+	int size;
+};
+
+struct kvm_queued_exception {
+	bool pending;
+	bool injected;
+	bool has_error_code;
+	u8 vector;
+	u32 error_code;
+	unsigned long payload;
+	bool has_payload;
+};
+
+struct kvm_queued_interrupt {
+	bool injected;
+	bool soft;
+	u8 nr;
+};
+
+struct kvm_hypervisor_cpuid {
+	u32 base;
+	u32 limit;
+};
+
+typedef u64 hfn_t;
+
+typedef hfn_t kvm_pfn_t;
+
+struct kvm_memory_slot;
+
+struct kvm;
+
+struct gfn_to_pfn_cache {
+	u64 generation;
+	gpa_t gpa;
+	unsigned long uhva;
+	struct kvm_memory_slot *memslot;
+	struct kvm *kvm;
+	struct kvm_vcpu *vcpu;
+	struct list_head list;
+	rwlock_t lock;
+	struct mutex refresh_lock;
+	void *khva;
+	kvm_pfn_t pfn;
+	enum pfn_cache_usage usage;
+	bool active;
+	bool valid;
+};
+
+struct gfn_to_hva_cache {
+	u64 generation;
+	gpa_t gpa;
+	unsigned long hva;
+	unsigned long len;
+	struct kvm_memory_slot *memslot;
+};
+
+struct kvm_mtrr_range {
+	u64 base;
+	u64 mask;
+	struct list_head node;
+};
+
+typedef __u8 mtrr_type;
+
+struct kvm_mtrr {
+	struct kvm_mtrr_range var_ranges[8];
+	mtrr_type fixed_ranges[88];
+	u64 deftype;
+	struct list_head head;
+};
+
+typedef u64 gfn_t;
+
+struct kvm_vcpu_xen {
+	u64 hypercall_rip;
+	u32 current_runstate;
+	u8 upcall_vector;
+	struct gfn_to_pfn_cache vcpu_info_cache;
+	struct gfn_to_pfn_cache vcpu_time_info_cache;
+	struct gfn_to_pfn_cache runstate_cache;
+	struct gfn_to_pfn_cache runstate2_cache;
+	u64 last_steal;
+	u64 runstate_entry_time;
+	u64 runstate_times[4];
+	unsigned long evtchn_pending_sel;
+	u32 vcpu_id;
+	u32 timer_virq;
+	u64 timer_expires;
+	atomic_t timer_pending;
+	struct hrtimer timer;
+	int poll_evtchn;
+	struct timer_list poll_timer;
+	struct kvm_hypervisor_cpuid cpuid;
+};
+
+struct kvm_lapic;
+
+struct kvm_cpuid_entry2;
+
+struct x86_emulate_ctxt;
+
+struct kvm_vcpu_hv;
+
+struct kvm_vcpu_arch {
+	unsigned long regs[17];
+	u32 regs_avail;
+	u32 regs_dirty;
+	unsigned long cr0;
+	unsigned long cr0_guest_owned_bits;
+	unsigned long cr2;
+	unsigned long cr3;
+	unsigned long cr4;
+	unsigned long cr4_guest_owned_bits;
+	unsigned long cr4_guest_rsvd_bits;
+	unsigned long cr8;
+	u32 host_pkru;
+	u32 pkru;
+	u32 hflags;
+	u64 efer;
+	u64 apic_base;
+	struct kvm_lapic *apic;
+	bool load_eoi_exitmap_pending;
+	unsigned long ioapic_handled_vectors[4];
+	unsigned long apic_attention;
+	int32_t apic_arb_prio;
+	int mp_state;
+	u64 ia32_misc_enable_msr;
+	u64 smbase;
+	u64 smi_count;
+	bool at_instruction_boundary;
+	bool tpr_access_reporting;
+	bool xfd_no_write_intercept;
+	u64 ia32_xss;
+	u64 microcode_version;
+	u64 arch_capabilities;
+	u64 perf_capabilities;
+	struct kvm_mmu *mmu;
+	struct kvm_mmu root_mmu;
+	struct kvm_mmu guest_mmu;
+	struct kvm_mmu nested_mmu;
+	struct kvm_mmu *walk_mmu;
+	struct kvm_mmu_memory_cache mmu_pte_list_desc_cache;
+	struct kvm_mmu_memory_cache mmu_shadow_page_cache;
+	struct kvm_mmu_memory_cache mmu_shadowed_info_cache;
+	struct kvm_mmu_memory_cache mmu_page_header_cache;
+	struct fpu_guest guest_fpu;
+	u64 xcr0;
+	u64 guest_supported_xcr0;
+	struct kvm_pio_request pio;
+	void *pio_data;
+	void *sev_pio_data;
+	unsigned int sev_pio_count;
+	u8 event_exit_inst_len;
+	bool exception_from_userspace;
+	struct kvm_queued_exception exception;
+	struct kvm_queued_exception exception_vmexit;
+	struct kvm_queued_interrupt interrupt;
+	int halt_request;
+	int cpuid_nent;
+	struct kvm_cpuid_entry2 *cpuid_entries;
+	struct kvm_hypervisor_cpuid kvm_cpuid;
+	bool is_amd_compatible;
+	struct {
+		unsigned long enabled[1];
+	} governed_features;
+	u64 reserved_gpa_bits;
+	int maxphyaddr;
+	struct x86_emulate_ctxt *emulate_ctxt;
+	bool emulate_regs_need_sync_to_vcpu;
+	bool emulate_regs_need_sync_from_vcpu;
+	int (*complete_userspace_io)(struct kvm_vcpu *);
+	gpa_t time;
+	struct pvclock_vcpu_time_info hv_clock;
+	unsigned int hw_tsc_khz;
+	struct gfn_to_pfn_cache pv_time;
+	bool pvclock_set_guest_stopped_request;
+	struct {
+		u8 preempted;
+		u64 msr_val;
+		u64 last_steal;
+		struct gfn_to_hva_cache cache;
+	} st;
+	u64 l1_tsc_offset;
+	u64 tsc_offset;
+	u64 last_guest_tsc;
+	u64 last_host_tsc;
+	u64 tsc_offset_adjustment;
+	u64 this_tsc_nsec;
+	u64 this_tsc_write;
+	u64 this_tsc_generation;
+	bool tsc_catchup;
+	bool tsc_always_catchup;
+	s8 virtual_tsc_shift;
+	u32 virtual_tsc_mult;
+	u32 virtual_tsc_khz;
+	s64 ia32_tsc_adjust_msr;
+	u64 msr_ia32_power_ctl;
+	u64 l1_tsc_scaling_ratio;
+	u64 tsc_scaling_ratio;
+	atomic_t nmi_queued;
+	unsigned int nmi_pending;
+	bool nmi_injected;
+	bool smi_pending;
+	u8 handling_intr_from_guest;
+	struct kvm_mtrr mtrr_state;
+	u64 pat;
+	unsigned int switch_db_regs;
+	unsigned long db[4];
+	unsigned long dr6;
+	unsigned long dr7;
+	unsigned long eff_db[4];
+	unsigned long guest_debug_dr7;
+	u64 msr_platform_info;
+	u64 msr_misc_features_enables;
+	u64 mcg_cap;
+	u64 mcg_status;
+	u64 mcg_ctl;
+	u64 mcg_ext_ctl;
+	u64 *mce_banks;
+	u64 *mci_ctl2_banks;
+	u64 mmio_gva;
+	unsigned int mmio_access;
+	gfn_t mmio_gfn;
+	u64 mmio_gen;
+	struct kvm_pmu pmu;
+	unsigned long singlestep_rip;
+	bool hyperv_enabled;
+	struct kvm_vcpu_hv *hyperv;
+	struct kvm_vcpu_xen xen;
+	cpumask_var_t wbinvd_dirty_mask;
+	unsigned long last_retry_eip;
+	unsigned long last_retry_addr;
+	struct {
+		bool halted;
+		gfn_t gfns[64];
+		struct gfn_to_hva_cache data;
+		u64 msr_en_val;
+		u64 msr_int_val;
+		u16 vec;
+		u32 id;
+		bool send_user_only;
+		u32 host_apf_flags;
+		bool delivery_as_pf_vmexit;
+		bool pageready_pending;
+	} apf;
+	struct {
+		u64 length;
+		u64 status;
+	} osvw;
+	struct {
+		u64 msr_val;
+		struct gfn_to_hva_cache data;
+	} pv_eoi;
+	u64 msr_kvm_poll_control;
+	unsigned long exit_qualification;
+	struct {
+		bool pv_unhalted;
+	} pv;
+	int pending_ioapic_eoi;
+	int pending_external_vector;
+	bool preempted_in_kernel;
+	bool l1tf_flush_l1d;
+	int last_vmentry_cpu;
+	u64 msr_hwcr;
+	struct {
+		u32 features;
+		bool enforce;
+	} pv_cpuid;
+	bool guest_state_protected;
+	bool pdptrs_from_userspace;
+};
+
+struct kvm_vcpu_stat_generic {
+	u64 halt_successful_poll;
+	u64 halt_attempted_poll;
+	u64 halt_poll_invalid;
+	u64 halt_wakeup;
+	u64 halt_poll_success_ns;
+	u64 halt_poll_fail_ns;
+	u64 halt_wait_ns;
+	u64 halt_poll_success_hist[32];
+	u64 halt_poll_fail_hist[32];
+	u64 halt_wait_hist[32];
+	u64 blocking;
+};
+
+struct kvm_vcpu_stat {
+	struct kvm_vcpu_stat_generic generic;
+	u64 pf_taken;
+	u64 pf_fixed;
+	u64 pf_emulate;
+	u64 pf_spurious;
+	u64 pf_fast;
+	u64 pf_mmio_spte_created;
+	u64 pf_guest;
+	u64 tlb_flush;
+	u64 invlpg;
+	u64 exits;
+	u64 io_exits;
+	u64 mmio_exits;
+	u64 signal_exits;
+	u64 irq_window_exits;
+	u64 nmi_window_exits;
+	u64 l1d_flush;
+	u64 halt_exits;
+	u64 request_irq_exits;
+	u64 irq_exits;
+	u64 host_state_reload;
+	u64 fpu_reload;
+	u64 insn_emulation;
+	u64 insn_emulation_fail;
+	u64 hypercalls;
+	u64 irq_injections;
+	u64 nmi_injections;
+	u64 req_event;
+	u64 nested_run;
+	u64 directed_yield_attempted;
+	u64 directed_yield_successful;
+	u64 preemption_reported;
+	u64 preemption_other;
+	u64 guest_mode;
+	u64 notify_window_exits;
+};
+
+struct kvm_dirty_gfn;
+
+struct kvm_dirty_ring {
+	u32 dirty_index;
+	u32 reset_index;
+	u32 size;
+	u32 soft_limit;
+	struct kvm_dirty_gfn *dirty_gfns;
+	int index;
+};
+
+struct kvm_run;
+
+struct kvm_vcpu {
+	struct kvm *kvm;
+	struct preempt_notifier preempt_notifier;
+	int cpu;
+	int vcpu_id;
+	int vcpu_idx;
+	int ____srcu_idx;
+	int mode;
+	u64 requests;
+	unsigned long guest_debug;
+	struct mutex mutex;
+	struct kvm_run *run;
+	struct rcuwait wait;
+	struct pid __attribute__((btf_type_tag("rcu"))) *pid;
+	int sigset_active;
+	sigset_t sigset;
+	unsigned int halt_poll_ns;
+	bool valid_wakeup;
+	int mmio_needed;
+	int mmio_read_completed;
+	int mmio_is_write;
+	int mmio_cur_fragment;
+	int mmio_nr_fragments;
+	struct kvm_mmio_fragment mmio_fragments[2];
+	struct {
+		u32 queued;
+		struct list_head queue;
+		struct list_head done;
+		spinlock_t lock;
+	} async_pf;
+	struct {
+		bool in_spin_loop;
+		bool dy_eligible;
+	} spin_loop;
+	bool preempted;
+	bool ready;
+	struct kvm_vcpu_arch arch;
+	struct kvm_vcpu_stat stat;
+	char stats_id[48];
+	struct kvm_dirty_ring dirty_ring;
+	struct kvm_memory_slot *last_used_slot;
+	u64 last_used_slot_gen;
+};
+
+struct kvm_memslots {
+	u64 generation;
+	atomic_long_t last_used_slot;
+	struct rb_root_cached hva_tree;
+	struct rb_root gfn_tree;
+	struct hlist_head id_hash[128];
+	int node_idx;
+};
+
+struct kvm_vm_stat_generic {
+	u64 remote_tlb_flush;
+	u64 remote_tlb_flush_requests;
+};
+
+struct kvm_vm_stat {
+	struct kvm_vm_stat_generic generic;
+	u64 mmu_shadow_zapped;
+	u64 mmu_pte_write;
+	u64 mmu_pde_zapped;
+	u64 mmu_flooded;
+	u64 mmu_recycled;
+	u64 mmu_cache_miss;
+	u64 mmu_unsync;
+	union {
+		struct {
+			atomic64_t pages_4k;
+			atomic64_t pages_2m;
+			atomic64_t pages_1g;
+		};
+		atomic64_t pages[3];
+	};
+	u64 nx_lpage_splits;
+	u64 max_mmu_page_hash_collisions;
+	u64 max_mmu_rmap_size;
+};
+
+struct kvm_xen_hvm_config {
+	__u32 flags;
+	__u32 msr;
+	__u64 blob_addr_32;
+	__u64 blob_addr_64;
+	__u8 blob_size_32;
+	__u8 blob_size_64;
+	__u8 pad2[30];
+};
+
+struct ms_hyperv_tsc_page {
+	volatile u32 tsc_sequence;
+	u32 reserved1;
+	volatile u64 tsc_scale;
+	volatile s64 tsc_offset;
+};
+
+struct kvm_hv_syndbg {
+	struct {
+		u64 control;
+		u64 status;
+		u64 send_page;
+		u64 recv_page;
+		u64 pending_page;
+	} control;
+	u64 options;
+};
+
+struct hv_partition_assist_pg;
+
+struct kvm_hv {
+	struct mutex hv_lock;
+	u64 hv_guest_os_id;
+	u64 hv_hypercall;
+	u64 hv_tsc_page;
+	enum hv_tsc_page_status hv_tsc_page_status;
+	u64 hv_crash_param[5];
+	u64 hv_crash_ctl;
+	struct ms_hyperv_tsc_page tsc_ref;
+	struct idr conn_to_evt;
+	u64 hv_reenlightenment_control;
+	u64 hv_tsc_emulation_control;
+	u64 hv_tsc_emulation_status;
+	u64 hv_invtsc_control;
+	atomic_t num_mismatched_vp_indexes;
+	unsigned int synic_auto_eoi_used;
+	struct hv_partition_assist_pg *hv_pa_pg;
+	struct kvm_hv_syndbg hv_syndbg;
+};
+
+struct kvm_xen {
+	struct mutex xen_lock;
+	u32 xen_version;
+	bool long_mode;
+	bool runstate_update_flag;
+	u8 upcall_vector;
+	struct gfn_to_pfn_cache shinfo_cache;
+	struct idr evtchn_ports;
+	unsigned long poll_mask[16];
+};
+
+struct kvm_pic;
+
+struct kvm_ioapic;
+
+struct kvm_pit;
+
+struct kvm_apic_map;
+
+struct kvm_x86_msr_filter;
+
+struct kvm_x86_pmu_event_filter;
+
+struct kvm_arch {
+	unsigned long n_used_mmu_pages;
+	unsigned long n_requested_mmu_pages;
+	unsigned long n_max_mmu_pages;
+	unsigned int indirect_shadow_pages;
+	u8 mmu_valid_gen;
+	struct hlist_head mmu_page_hash[4096];
+	struct list_head active_mmu_pages;
+	struct list_head zapped_obsolete_pages;
+	struct list_head possible_nx_huge_pages;
+	spinlock_t mmu_unsync_pages_lock;
+	struct list_head assigned_dev_head;
+	struct iommu_domain *iommu_domain;
+	bool iommu_noncoherent;
+	atomic_t noncoherent_dma_count;
+	atomic_t assigned_device_count;
+	struct kvm_pic *vpic;
+	struct kvm_ioapic *vioapic;
+	struct kvm_pit *vpit;
+	atomic_t vapics_in_nmi_mode;
+	struct mutex apic_map_lock;
+	struct kvm_apic_map __attribute__((btf_type_tag("rcu"))) *apic_map;
+	atomic_t apic_map_dirty;
+	bool apic_access_memslot_enabled;
+	bool apic_access_memslot_inhibited;
+	struct rw_semaphore apicv_update_lock;
+	unsigned long apicv_inhibit_reasons;
+	gpa_t wall_clock;
+	bool mwait_in_guest;
+	bool hlt_in_guest;
+	bool pause_in_guest;
+	bool cstate_in_guest;
+	unsigned long irq_sources_bitmap;
+	s64 kvmclock_offset;
+	raw_spinlock_t tsc_write_lock;
+	u64 last_tsc_nsec;
+	u64 last_tsc_write;
+	u32 last_tsc_khz;
+	u64 last_tsc_offset;
+	u64 cur_tsc_nsec;
+	u64 cur_tsc_write;
+	u64 cur_tsc_offset;
+	u64 cur_tsc_generation;
+	int nr_vcpus_matched_tsc;
+	u32 default_tsc_khz;
+	seqcount_raw_spinlock_t pvclock_sc;
+	bool use_master_clock;
+	u64 master_kernel_ns;
+	u64 master_cycle_now;
+	struct delayed_work kvmclock_update_work;
+	struct delayed_work kvmclock_sync_work;
+	struct kvm_xen_hvm_config xen_hvm_config;
+	struct hlist_head mask_notifier_list;
+	struct kvm_hv hyperv;
+	struct kvm_xen xen;
+	bool backwards_tsc_observed;
+	bool boot_vcpu_runs_old_kvmclock;
+	u32 bsp_vcpu_id;
+	u64 disabled_quirks;
+	enum kvm_irqchip_mode irqchip_mode;
+	u8 nr_reserved_ioapic_pins;
+	bool disabled_lapic_found;
+	bool x2apic_format;
+	bool x2apic_broadcast_quirk_disabled;
+	bool guest_can_read_msr_platform_info;
+	bool exception_payload_enabled;
+	bool triple_fault_event;
+	bool bus_lock_detection_enabled;
+	bool enable_pmu;
+	u32 notify_window;
+	u32 notify_vmexit_flags;
+	bool exit_on_emulation_error;
+	u32 user_space_msr_mask;
+	struct kvm_x86_msr_filter __attribute__((btf_type_tag("rcu"))) *msr_filter;
+	u32 hypercall_exit_enabled;
+	bool sgx_provisioning_allowed;
+	struct kvm_x86_pmu_event_filter __attribute__((btf_type_tag("rcu"))) *pmu_event_filter;
+	struct task_struct *nx_huge_page_recovery_thread;
+	atomic64_t tdp_mmu_pages;
+	struct list_head tdp_mmu_roots;
+	spinlock_t tdp_mmu_pages_lock;
+	bool shadow_root_allocated;
+	u32 max_vcpu_ids;
+	bool disable_nx_huge_pages;
+	struct kvm_mmu_memory_cache split_shadow_page_cache;
+	struct kvm_mmu_memory_cache split_page_header_cache;
+	struct kvm_mmu_memory_cache split_desc_cache;
+};
+
+struct mmu_notifier_ops;
+
+struct mmu_notifier {
+	struct hlist_node hlist;
+	const struct mmu_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct callback_head rcu;
+	unsigned int users;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct kvm_io_bus;
+
+struct kvm_coalesced_mmio_ring;
+
+struct kvm_irq_routing_table;
+
+struct kvm_stat_data;
+
+struct kvm {
+	rwlock_t mmu_lock;
+	struct mutex slots_lock;
+	struct mutex slots_arch_lock;
+	struct mm_struct *mm;
+	unsigned long nr_memslot_pages;
+	struct kvm_memslots __memslots[4];
+	struct kvm_memslots __attribute__((btf_type_tag("rcu"))) *memslots[2];
+	struct xarray vcpu_array;
+	atomic_t nr_memslots_dirty_logging;
+	spinlock_t mn_invalidate_lock;
+	unsigned long mn_active_invalidate_count;
+	struct rcuwait mn_memslots_update_rcuwait;
+	spinlock_t gpc_lock;
+	struct list_head gpc_list;
+	atomic_t online_vcpus;
+	int max_vcpus;
+	int created_vcpus;
+	int last_boosted_vcpu;
+	struct list_head vm_list;
+	struct mutex lock;
+	struct kvm_io_bus __attribute__((btf_type_tag("rcu"))) *buses[4];
+	struct {
+		spinlock_t lock;
+		struct list_head items;
+		struct list_head resampler_list;
+		struct mutex resampler_lock;
+	} irqfds;
+	struct list_head ioeventfds;
+	struct kvm_vm_stat stat;
+	struct kvm_arch arch;
+	refcount_t users_count;
+	struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
+	spinlock_t ring_lock;
+	struct list_head coalesced_zones;
+	struct mutex irq_lock;
+	struct kvm_irq_routing_table __attribute__((btf_type_tag("rcu"))) *irq_routing;
+	struct hlist_head irq_ack_notifier_list;
+	struct mmu_notifier mmu_notifier;
+	unsigned long mmu_invalidate_seq;
+	long mmu_invalidate_in_progress;
+	unsigned long mmu_invalidate_range_start;
+	unsigned long mmu_invalidate_range_end;
+	struct list_head devices;
+	u64 manual_dirty_log_protect;
+	struct dentry *debugfs_dentry;
+	struct kvm_stat_data **debugfs_stat_data;
+	struct srcu_struct srcu;
+	struct srcu_struct irq_srcu;
+	pid_t userspace_pid;
+	bool override_halt_poll_ns;
+	unsigned int max_halt_poll_ns;
+	u32 dirty_ring_size;
+	bool dirty_ring_with_bitmap;
+	bool vm_bugged;
+	bool vm_dead;
+	struct notifier_block pm_notifier;
+	char stats_id[48];
+};
+
+struct kvm_io_device;
+
+struct kvm_io_range {
+	gpa_t addr;
+	int len;
+	struct kvm_io_device *dev;
+};
+
+struct kvm_io_bus {
+	int dev_count;
+	int ioeventfd_count;
+	struct kvm_io_range range[0];
+};
+
+struct kvm_apic_map {
+	struct callback_head rcu;
+	enum kvm_apic_logical_mode logical_mode;
+	u32 max_apic_id;
+	union {
+		struct kvm_lapic *xapic_flat_map[8];
+		struct kvm_lapic *xapic_cluster_map[64];
+	};
+	struct kvm_lapic *phys_map[0];
+};
+
+struct hv_partition_assist_pg {
+	u32 tlb_lock_count;
+};
+
+struct interval_tree_node {
+	struct rb_node rb;
+	unsigned long start;
+	unsigned long last;
+	unsigned long __subtree_last;
+};
+
+struct kvm_rmap_head;
+
+struct kvm_lpage_info;
+
+struct kvm_arch_memory_slot {
+	struct kvm_rmap_head *rmap[3];
+	struct kvm_lpage_info *lpage_info[2];
+	unsigned short *gfn_write_track;
+};
+
+struct kvm_memory_slot {
+	struct hlist_node id_node[2];
+	struct interval_tree_node hva_node[2];
+	struct rb_node gfn_node[2];
+	gfn_t base_gfn;
+	unsigned long npages;
+	unsigned long *dirty_bitmap;
+	struct kvm_arch_memory_slot arch;
+	unsigned long userspace_addr;
+	u32 flags;
+	short id;
+	u16 as_id;
+};
+
+struct kvm_rmap_head {
+	unsigned long val;
+};
+
+struct kvm_lpage_info {
+	int disallow_lpage;
+};
+
+struct msr_bitmap_range {
+	u32 flags;
+	u32 nmsrs;
+	u32 base;
+	unsigned long *bitmap;
+};
+
+struct kvm_x86_msr_filter {
+	u8 count;
+	bool default_allow: 1;
+	struct msr_bitmap_range ranges[16];
+};
+
+struct kvm_x86_pmu_event_filter {
+	__u32 action;
+	__u32 nevents;
+	__u32 fixed_counter_bitmap;
+	__u32 flags;
+	__u32 nr_includes;
+	__u32 nr_excludes;
+	__u64 *includes;
+	__u64 *excludes;
+	__u64 events[0];
+};
+
+struct kvm_coalesced_mmio {
+	__u64 phys_addr;
+	__u32 len;
+	union {
+		__u32 pad;
+		__u32 pio;
+	};
+	__u8 data[8];
+};
+
+struct kvm_coalesced_mmio_ring {
+	__u32 first;
+	__u32 last;
+	struct kvm_coalesced_mmio coalesced_mmio[0];
+};
+
+struct kvm_irq_routing_table {
+	int chip[72];
+	u32 nr_rt_entries;
+	struct hlist_head map[0];
+};
+
+struct mmu_notifier_range;
+
+struct mmu_notifier_ops {
+	void (*release)(struct mmu_notifier *, struct mm_struct *);
+	int (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, unsigned long, unsigned long);
+	int (*clear_young)(struct mmu_notifier *, struct mm_struct *, unsigned long, unsigned long);
+	int (*test_young)(struct mmu_notifier *, struct mm_struct *, unsigned long);
+	void (*change_pte)(struct mmu_notifier *, struct mm_struct *, unsigned long, pte_t);
+	int (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);
+	void (*arch_invalidate_secondary_tlbs)(struct mmu_notifier *, struct mm_struct *, unsigned long, unsigned long);
+	struct mmu_notifier * (*alloc_notifier)(struct mm_struct *);
+	void (*free_notifier)(struct mmu_notifier *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct mmu_notifier_range {
+	struct mm_struct *mm;
+	unsigned long start;
+	unsigned long end;
+	unsigned int flags;
+	enum mmu_notifier_event event;
+	void *owner;
+};
+
+struct _kvm_stats_desc;
+
+struct kvm_stat_data {
+	struct kvm *kvm;
+	const struct _kvm_stats_desc *desc;
+	enum kvm_stat_kind kind;
+};
+
+struct kvm_stats_desc {
+	__u32 flags;
+	__s16 exponent;
+	__u16 size;
+	__u32 offset;
+	__u32 bucket_size;
+	char name[0];
+};
+
+struct _kvm_stats_desc {
+	struct kvm_stats_desc desc;
+	char name[48];
+};
+
+struct preempt_ops {
+	void (*sched_in)(struct preempt_notifier *, int);
+	void (*sched_out)(struct preempt_notifier *, struct task_struct *);
+};
+
+struct kvm_debug_exit_arch {
+	__u32 exception;
+	__u32 pad;
+	__u64 pc;
+	__u64 dr6;
+	__u64 dr7;
+};
+
+struct kvm_hyperv_exit {
+	__u32 type;
+	__u32 pad1;
+	union {
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 evt_page;
+			__u64 msg_page;
+		} synic;
+		struct {
+			__u64 input;
+			__u64 result;
+			__u64 params[2];
+		} hcall;
+		struct {
+			__u32 msr;
+			__u32 pad2;
+			__u64 control;
+			__u64 status;
+			__u64 send_page;
+			__u64 recv_page;
+			__u64 pending_page;
+		} syndbg;
+	} u;
+};
+
+struct kvm_xen_exit {
+	__u32 type;
+	union {
+		struct {
+			__u32 longmode;
+			__u32 cpl;
+			__u64 input;
+			__u64 result;
+			__u64 params[6];
+		} hcall;
+	} u;
+};
+
+struct kvm_regs {
+	__u64 rax;
+	__u64 rbx;
+	__u64 rcx;
+	__u64 rdx;
+	__u64 rsi;
+	__u64 rdi;
+	__u64 rsp;
+	__u64 rbp;
+	__u64 r8;
+	__u64 r9;
+	__u64 r10;
+	__u64 r11;
+	__u64 r12;
+	__u64 r13;
+	__u64 r14;
+	__u64 r15;
+	__u64 rip;
+	__u64 rflags;
+};
+
+struct kvm_segment {
+	__u64 base;
+	__u32 limit;
+	__u16 selector;
+	__u8 type;
+	__u8 present;
+	__u8 dpl;
+	__u8 db;
+	__u8 s;
+	__u8 l;
+	__u8 g;
+	__u8 avl;
+	__u8 unusable;
+	__u8 padding;
+};
+
+struct kvm_dtable {
+	__u64 base;
+	__u16 limit;
+	__u16 padding[3];
+};
+
+struct kvm_sregs {
+	struct kvm_segment cs;
+	struct kvm_segment ds;
+	struct kvm_segment es;
+	struct kvm_segment fs;
+	struct kvm_segment gs;
+	struct kvm_segment ss;
+	struct kvm_segment tr;
+	struct kvm_segment ldt;
+	struct kvm_dtable gdt;
+	struct kvm_dtable idt;
+	__u64 cr0;
+	__u64 cr2;
+	__u64 cr3;
+	__u64 cr4;
+	__u64 cr8;
+	__u64 efer;
+	__u64 apic_base;
+	__u64 interrupt_bitmap[4];
+};
+
+struct kvm_vcpu_events {
+	struct {
+		__u8 injected;
+		__u8 nr;
+		__u8 has_error_code;
+		__u8 pending;
+		__u32 error_code;
+	} exception;
+	struct {
+		__u8 injected;
+		__u8 nr;
+		__u8 soft;
+		__u8 shadow;
+	} interrupt;
+	struct {
+		__u8 injected;
+		__u8 pending;
+		__u8 masked;
+		__u8 pad;
+	} nmi;
+	__u32 sipi_vector;
+	__u32 flags;
+	struct {
+		__u8 smm;
+		__u8 pending;
+		__u8 smm_inside_nmi;
+		__u8 latched_init;
+	} smi;
+	struct {
+		__u8 pending;
+	} triple_fault;
+	__u8 reserved[26];
+	__u8 exception_has_payload;
+	__u64 exception_payload;
+};
+
+struct kvm_sync_regs {
+	struct kvm_regs regs;
+	struct kvm_sregs sregs;
+	struct kvm_vcpu_events events;
+};
+
+struct kvm_run {
+	__u8 request_interrupt_window;
+	__u8 immediate_exit;
+	__u8 padding1[6];
+	__u32 exit_reason;
+	__u8 ready_for_interrupt_injection;
+	__u8 if_flag;
+	__u16 flags;
+	__u64 cr8;
+	__u64 apic_base;
+	union {
+		struct {
+			__u64 hardware_exit_reason;
+		} hw;
+		struct {
+			__u64 hardware_entry_failure_reason;
+			__u32 cpu;
+		} fail_entry;
+		struct {
+			__u32 exception;
+			__u32 error_code;
+		} ex;
+		struct {
+			__u8 direction;
+			__u8 size;
+			__u16 port;
+			__u32 count;
+			__u64 data_offset;
+		} io;
+		struct {
+			struct kvm_debug_exit_arch arch;
+		} debug;
+		struct {
+			__u64 phys_addr;
+			__u8 data[8];
+			__u32 len;
+			__u8 is_write;
+		} mmio;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u64 ret;
+			union {
+				__u64 flags;
+			};
+		} hypercall;
+		struct {
+			__u64 rip;
+			__u32 is_write;
+			__u32 pad;
+		} tpr_access;
+		struct {
+			__u8 icptcode;
+			__u16 ipa;
+			__u32 ipb;
+		} s390_sieic;
+		__u64 s390_reset_flags;
+		struct {
+			__u64 trans_exc_code;
+			__u32 pgm_code;
+		} s390_ucontrol;
+		struct {
+			__u32 dcrn;
+			__u32 data;
+			__u8 is_write;
+		} dcr;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 data[16];
+		} internal;
+		struct {
+			__u32 suberror;
+			__u32 ndata;
+			__u64 flags;
+			union {
+				struct {
+					__u8 insn_size;
+					__u8 insn_bytes[15];
+				};
+			};
+		} emulation_failure;
+		struct {
+			__u64 gprs[32];
+		} osi;
+		struct {
+			__u64 nr;
+			__u64 ret;
+			__u64 args[9];
+		} papr_hcall;
+		struct {
+			__u16 subchannel_id;
+			__u16 subchannel_nr;
+			__u32 io_int_parm;
+			__u32 io_int_word;
+			__u32 ipb;
+			__u8 dequeued;
+		} s390_tsch;
+		struct {
+			__u32 epr;
+		} epr;
+		struct {
+			__u32 type;
+			__u32 ndata;
+			union {
+				__u64 data[16];
+			};
+		} system_event;
+		struct {
+			__u64 addr;
+			__u8 ar;
+			__u8 reserved;
+			__u8 fc;
+			__u8 sel1;
+			__u16 sel2;
+		} s390_stsi;
+		struct {
+			__u8 vector;
+		} eoi;
+		struct kvm_hyperv_exit hyperv;
+		struct {
+			__u64 esr_iss;
+			__u64 fault_ipa;
+		} arm_nisv;
+		struct {
+			__u8 error;
+			__u8 pad[7];
+			__u32 reason;
+			__u32 index;
+			__u64 data;
+		} msr;
+		struct kvm_xen_exit xen;
+		struct {
+			unsigned long extension_id;
+			unsigned long function_id;
+			unsigned long args[6];
+			unsigned long ret[2];
+		} riscv_sbi;
+		struct {
+			unsigned long csr_num;
+			unsigned long new_value;
+			unsigned long write_mask;
+			unsigned long ret_value;
+		} riscv_csr;
+		struct {
+			__u32 flags;
+		} notify;
+		char padding[256];
+	};
+	__u64 kvm_valid_regs;
+	__u64 kvm_dirty_regs;
+	union {
+		struct kvm_sync_regs regs;
+		char padding[2048];
+	} s;
+};
+
+struct kvm_cpuid_entry2 {
+	__u32 function;
+	__u32 index;
+	__u32 flags;
+	__u32 eax;
+	__u32 ebx;
+	__u32 ecx;
+	__u32 edx;
+	__u32 padding[3];
+};
+
+struct kvm_vcpu_hv_synic {
+	u64 version;
+	u64 control;
+	u64 msg_page;
+	u64 evt_page;
+	atomic64_t sint[16];
+	atomic_t sint_to_gsi[16];
+	unsigned long auto_eoi_bitmap[4];
+	unsigned long vec_bitmap[4];
+	bool active;
+	bool dont_zero_synic_pages;
+};
+
+union hv_stimer_config {
+	u64 as_uint64;
+	struct {
+		u64 enable: 1;
+		u64 periodic: 1;
+		u64 lazy: 1;
+		u64 auto_enable: 1;
+		u64 apic_vector: 8;
+		u64 direct_mode: 1;
+		u64 reserved_z0: 3;
+		u64 sintx: 4;
+		u64 reserved_z1: 44;
+	};
+};
+
+union hv_message_flags {
+	__u8 asu8;
+	struct {
+		__u8 msg_pending: 1;
+		__u8 reserved: 7;
+	};
+};
+
+union hv_port_id {
+	__u32 asu32;
+	struct {
+		__u32 id: 24;
+		__u32 reserved: 8;
+	} u;
+};
+
+struct hv_message_header {
+	__u32 message_type;
+	__u8 payload_size;
+	union hv_message_flags message_flags;
+	__u8 reserved[2];
+	union {
+		__u64 sender;
+		union hv_port_id port;
+	};
+};
+
+struct hv_message {
+	struct hv_message_header header;
+	union {
+		__u64 payload[30];
+	} u;
+};
+
+struct kvm_vcpu_hv_stimer {
+	struct hrtimer timer;
+	int index;
+	union hv_stimer_config config;
+	u64 count;
+	u64 exp_time;
+	struct hv_message msg;
+	bool msg_pending;
+};
+
+struct kvm_vcpu_hv_tlb_flush_fifo {
+	spinlock_t write_lock;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			u64 *type;
+			const u64 *const_type;
+			char (*rectype)[0];
+			u64 *ptr;
+			const u64 *ptr_const;
+		};
+		u64 buf[16];
+	} entries;
+};
+
+struct hv_nested_enlightenments_control {
+	struct {
+		__u32 directhypercall: 1;
+		__u32 reserved: 31;
+	} features;
+	struct {
+		__u32 inter_partition_comm: 1;
+		__u32 reserved: 31;
+	} hypercallControls;
+};
+
+struct hv_vp_assist_page {
+	__u32 apic_assist;
+	__u32 reserved1;
+	__u32 vtl_entry_reason;
+	__u32 vtl_reserved;
+	__u64 vtl_ret_x64rax;
+	__u64 vtl_ret_x64rcx;
+	struct hv_nested_enlightenments_control nested_control;
+	__u8 enlighten_vmentry;
+	__u8 reserved2[7];
+	__u64 current_nested_vmcs;
+	__u8 synthetic_time_unhalted_timer_expired;
+	__u8 reserved3[7];
+	__u8 virtualization_fault_information[40];
+	__u8 reserved4[8];
+	__u8 intercept_message[256];
+	__u8 vtl_ret_actions[256];
+};
+
+struct kvm_vcpu_hv {
+	struct kvm_vcpu *vcpu;
+	u32 vp_index;
+	u64 hv_vapic;
+	s64 runtime_offset;
+	struct kvm_vcpu_hv_synic synic;
+	struct kvm_hyperv_exit exit;
+	struct kvm_vcpu_hv_stimer stimer[4];
+	unsigned long stimer_pending_bitmap[1];
+	bool enforce_cpuid;
+	struct {
+		u32 features_eax;
+		u32 features_ebx;
+		u32 features_edx;
+		u32 enlightenments_eax;
+		u32 enlightenments_ebx;
+		u32 syndbg_cap_eax;
+		u32 nested_eax;
+		u32 nested_ebx;
+	} cpuid_cache;
+	struct kvm_vcpu_hv_tlb_flush_fifo tlb_flush_fifo[2];
+	u64 sparse_banks[64];
+	struct hv_vp_assist_page vp_assist_page;
+	struct {
+		u64 pa_page_gpa;
+		u64 vm_id;
+		u32 vp_id;
+	} nested;
+};
+
+struct kvm_dirty_gfn {
+	__u32 flags;
+	__u32 slot;
+	__u64 offset;
+};
+
+union cpuid10_edx {
+	struct {
+		unsigned int num_counters_fixed: 5;
+		unsigned int bit_width_fixed: 8;
+		unsigned int reserved1: 2;
+		unsigned int anythread_deprecated: 1;
+		unsigned int reserved2: 16;
+	} split;
+	unsigned int full;
+};
+
+union cpuid10_eax {
+	struct {
+		unsigned int version_id: 8;
+		unsigned int num_counters: 8;
+		unsigned int bit_width: 8;
+		unsigned int mask_length: 8;
+	} split;
+	unsigned int full;
+};
+
+union cpuid10_ebx {
+	struct {
+		unsigned int no_unhalted_core_cycles: 1;
+		unsigned int no_instructions_retired: 1;
+		unsigned int no_unhalted_reference_cycles: 1;
+		unsigned int no_llc_reference: 1;
+		unsigned int no_llc_misses: 1;
+		unsigned int no_branch_instruction_retired: 1;
+		unsigned int no_branch_misses_retired: 1;
+	} split;
+	unsigned int full;
+};
+
+typedef int perf_snapshot_branch_stack_t(struct perf_branch_entry *, unsigned int);
+
+struct bts_ctx {
+	struct perf_output_handle handle;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct debug_store ds_back;
+	int state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	BTS_STATE_STOPPED = 0,
+	BTS_STATE_INACTIVE = 1,
+	BTS_STATE_ACTIVE = 2,
+};
+
+enum pageflags {
+	PG_locked = 0,
+	PG_writeback = 1,
+	PG_referenced = 2,
+	PG_uptodate = 3,
+	PG_dirty = 4,
+	PG_lru = 5,
+	PG_head = 6,
+	PG_waiters = 7,
+	PG_active = 8,
+	PG_workingset = 9,
+	PG_error = 10,
+	PG_slab = 11,
+	PG_owner_priv_1 = 12,
+	PG_arch_1 = 13,
+	PG_reserved = 14,
+	PG_private = 15,
+	PG_private_2 = 16,
+	PG_mappedtodisk = 17,
+	PG_reclaim = 18,
+	PG_swapbacked = 19,
+	PG_unevictable = 20,
+	PG_mlocked = 21,
+	PG_uncached = 22,
+	PG_oem_reserved_1 = 23,
+	PG_oem_reserved_2 = 24,
+	PG_oem_reserved_3 = 25,
+	PG_oem_reserved_4 = 26,
+	__NR_PAGEFLAGS = 27,
+	PG_readahead = 18,
+	PG_anon_exclusive = 17,
+	PG_checked = 12,
+	PG_swapcache = 12,
+	PG_fscache = 16,
+	PG_pinned = 12,
+	PG_savepinned = 4,
+	PG_foreign = 12,
+	PG_xen_remapped = 12,
+	PG_isolated = 18,
+	PG_reported = 3,
+	PG_vmemmap_self_hosted = 12,
+	PG_has_hwpoisoned = 10,
+	PG_large_rmappable = 9,
+};
+
+struct bts_phys {
+	struct page *page;
+	unsigned long size;
+	unsigned long offset;
+	unsigned long displacement;
+};
+
+struct bts_buffer {
+	size_t real_size;
+	unsigned int nr_pages;
+	unsigned int nr_bufs;
+	unsigned int cur_buf;
+	bool snapshot;
+	local_t data_size;
+	local_t head;
+	unsigned long end;
+	void **data_pages;
+	struct bts_phys buf[0];
+};
+
+enum {
+	PERF_TXN_ELISION = 1ULL,
+	PERF_TXN_TRANSACTION = 2ULL,
+	PERF_TXN_SYNC = 4ULL,
+	PERF_TXN_ASYNC = 8ULL,
+	PERF_TXN_RETRY = 16ULL,
+	PERF_TXN_CONFLICT = 32ULL,
+	PERF_TXN_CAPACITY_WRITE = 64ULL,
+	PERF_TXN_CAPACITY_READ = 128ULL,
+	PERF_TXN_MAX = 256ULL,
+	PERF_TXN_ABORT_MASK = 18446744069414584320ULL,
+	PERF_TXN_ABORT_SHIFT = 32ULL,
+};
+
+struct bts_record {
+	u64 from;
+	u64 to;
+	u64 flags;
+};
+
+struct pebs_record_core {
+	u64 flags;
+	u64 ip;
+	u64 ax;
+	u64 bx;
+	u64 cx;
+	u64 dx;
+	u64 si;
+	u64 di;
+	u64 bp;
+	u64 sp;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
+};
+
+struct pebs_record_nhm {
+	u64 flags;
+	u64 ip;
+	u64 ax;
+	u64 bx;
+	u64 cx;
+	u64 dx;
+	u64 si;
+	u64 di;
+	u64 bp;
+	u64 sp;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
+	u64 status;
+	u64 dla;
+	u64 dse;
+	u64 lat;
+};
+
+struct pebs_basic {
+	u64 format_size;
+	u64 ip;
+	u64 applicable_counters;
+	u64 tsc;
+};
+
+struct x86_perf_regs {
+	struct pt_regs regs;
+	u64 *xmm_regs;
+};
+
+struct entry_stack {
+	char stack[4096];
+};
+
+struct entry_stack_page {
+	struct entry_stack stack;
+};
+
+struct x86_hw_tss {
+	u32 reserved1;
+	u64 sp0;
+	u64 sp1;
+	u64 sp2;
+	u64 reserved2;
+	u64 ist[7];
+	u32 reserved3;
+	u32 reserved4;
+	u16 reserved5;
+	u16 io_bitmap_base;
+} __attribute__((packed));
+
+struct x86_io_bitmap {
+	u64 prev_sequence;
+	unsigned int prev_max;
+	unsigned long bitmap[1025];
+	unsigned long mapall[1025];
+};
+
+struct tss_struct {
+	struct x86_hw_tss x86_tss;
+	struct x86_io_bitmap io_bitmap;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct cea_exception_stacks {
+	char DF_stack_guard[4096];
+	char DF_stack[8192];
+	char NMI_stack_guard[4096];
+	char NMI_stack[8192];
+	char DB_stack_guard[4096];
+	char DB_stack[8192];
+	char MCE_stack_guard[4096];
+	char MCE_stack[8192];
+	char VC_stack_guard[4096];
+	char VC_stack[8192];
+	char VC2_stack_guard[4096];
+	char VC2_stack[8192];
+	char IST_top_guard[4096];
+};
+
+struct debug_store_buffers {
+	char bts_buffer[65536];
+	char pebs_buffer[65536];
+};
+
+struct cpu_entry_area {
+	char gdt[4096];
+	struct entry_stack_page entry_stack_page;
+	struct tss_struct tss;
+	struct cea_exception_stacks estacks;
+	struct debug_store cpu_debug_store;
+	struct debug_store_buffers cpu_debug_buffers;
+};
+
+struct perf_event_header {
+	__u32 type;
+	__u16 misc;
+	__u16 size;
+};
+
+union intel_x86_pebs_dse {
+	u64 val;
+	struct {
+		unsigned int ld_dse: 4;
+		unsigned int ld_stlb_miss: 1;
+		unsigned int ld_locked: 1;
+		unsigned int ld_data_blk: 1;
+		unsigned int ld_addr_blk: 1;
+		unsigned int ld_reserved: 24;
+	};
+	struct {
+		unsigned int st_l1d_hit: 1;
+		unsigned int st_reserved1: 3;
+		unsigned int st_stlb_miss: 1;
+		unsigned int st_locked: 1;
+		unsigned int st_reserved2: 26;
+	};
+	struct {
+		unsigned int st_lat_dse: 4;
+		unsigned int st_lat_stlb_miss: 1;
+		unsigned int st_lat_locked: 1;
+		unsigned int ld_reserved3: 26;
+	};
+	struct {
+		unsigned int mtl_dse: 5;
+		unsigned int mtl_locked: 1;
+		unsigned int mtl_stlb_miss: 1;
+		unsigned int mtl_fwd_blk: 1;
+		unsigned int ld_reserved4: 24;
+	};
+};
+
+struct pebs_gprs {
+	u64 flags;
+	u64 ip;
+	u64 ax;
+	u64 cx;
+	u64 dx;
+	u64 bx;
+	u64 sp;
+	u64 bp;
+	u64 si;
+	u64 di;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
+};
+
+struct lbr_entry {
+	u64 from;
+	u64 to;
+	u64 info;
+};
+
+struct pebs_record_skl {
+	u64 flags;
+	u64 ip;
+	u64 ax;
+	u64 bx;
+	u64 cx;
+	u64 dx;
+	u64 si;
+	u64 di;
+	u64 bp;
+	u64 sp;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
+	u64 status;
+	u64 dla;
+	u64 dse;
+	u64 lat;
+	u64 real_ip;
+	u64 tsx_tuning;
+	u64 tsc;
+};
+
+struct pebs_meminfo {
+	u64 address;
+	u64 aux;
+	u64 latency;
+	u64 tsx_tuning;
+};
+
+struct pebs_xmm {
+	u64 xmm[32];
+};
+
+enum {
+	LBR_NONE = 0,
+	LBR_VALID = 1,
+};
+
+enum {
+	ARCH_LBR_BR_TYPE_JCC = 0,
+	ARCH_LBR_BR_TYPE_NEAR_IND_JMP = 1,
+	ARCH_LBR_BR_TYPE_NEAR_REL_JMP = 2,
+	ARCH_LBR_BR_TYPE_NEAR_IND_CALL = 3,
+	ARCH_LBR_BR_TYPE_NEAR_REL_CALL = 4,
+	ARCH_LBR_BR_TYPE_NEAR_RET = 5,
+	ARCH_LBR_BR_TYPE_KNOWN_MAX = 5,
+	ARCH_LBR_BR_TYPE_MAP_MAX = 16,
+};
+
+enum xfeature {
+	XFEATURE_FP = 0,
+	XFEATURE_SSE = 1,
+	XFEATURE_YMM = 2,
+	XFEATURE_BNDREGS = 3,
+	XFEATURE_BNDCSR = 4,
+	XFEATURE_OPMASK = 5,
+	XFEATURE_ZMM_Hi256 = 6,
+	XFEATURE_Hi16_ZMM = 7,
+	XFEATURE_PT_UNIMPLEMENTED_SO_FAR = 8,
+	XFEATURE_PKRU = 9,
+	XFEATURE_PASID = 10,
+	XFEATURE_CET_USER = 11,
+	XFEATURE_CET_KERNEL_UNUSED = 12,
+	XFEATURE_RSRVD_COMP_13 = 13,
+	XFEATURE_RSRVD_COMP_14 = 14,
+	XFEATURE_LBR = 15,
+	XFEATURE_RSRVD_COMP_16 = 16,
+	XFEATURE_XTILE_CFG = 17,
+	XFEATURE_XTILE_DATA = 18,
+	XFEATURE_MAX = 19,
+};
+
+struct x86_perf_task_context_opt {
+	int lbr_callstack_users;
+	int lbr_stack_state;
+	int log_id;
+};
+
+struct x86_perf_task_context_arch_lbr {
+	struct x86_perf_task_context_opt opt;
+	struct lbr_entry entries[0];
+};
+
+struct x86_perf_task_context {
+	u64 lbr_sel;
+	int tos;
+	int valid_lbrs;
+	struct x86_perf_task_context_opt opt;
+	struct lbr_entry lbr[32];
+};
+
+union cpuid28_ebx {
+	struct {
+		unsigned int lbr_cpl: 1;
+		unsigned int lbr_filter: 1;
+		unsigned int lbr_call_stack: 1;
+	} split;
+	unsigned int full;
+};
+
+union cpuid28_eax {
+	struct {
+		unsigned int lbr_depth_mask: 8;
+		unsigned int reserved: 22;
+		unsigned int lbr_deep_c_reset: 1;
+		unsigned int lbr_lip: 1;
+	} split;
+	unsigned int full;
+};
+
+union cpuid28_ecx {
+	struct {
+		unsigned int lbr_mispred: 1;
+		unsigned int lbr_timed_lbr: 1;
+		unsigned int lbr_br_type: 1;
+	} split;
+	unsigned int full;
+};
+
+struct arch_lbr_state {
+	u64 lbr_ctl;
+	u64 lbr_depth;
+	u64 ler_from;
+	u64 ler_to;
+	u64 ler_info;
+	struct lbr_entry entries[0];
+};
+
+struct x86_perf_task_context_arch_lbr_xsave {
+	struct x86_perf_task_context_opt opt;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct xregs_state xsave;
+		struct {
+			struct fxregs_state i387;
+			struct xstate_header header;
+			struct arch_lbr_state lbr;
+			long: 64;
+			long: 64;
+			long: 64;
+		};
+	};
+};
+
+struct x86_pmu_lbr {
+	unsigned int nr;
+	unsigned int from;
+	unsigned int to;
+	unsigned int info;
+};
+
+struct p4_event_bind {
+	unsigned int opcode;
+	unsigned int escr_msr[2];
+	unsigned int escr_emask;
+	unsigned int shared;
+	signed char cntr[6];
+};
+
+struct p4_pebs_bind {
+	unsigned int metric_pebs;
+	unsigned int metric_vert;
+};
+
+struct p4_event_alias {
+	u64 original;
+	u64 alternative;
+};
+
+enum P4_PEBS_METRIC {
+	P4_PEBS_METRIC__none = 0,
+	P4_PEBS_METRIC__1stl_cache_load_miss_retired = 1,
+	P4_PEBS_METRIC__2ndl_cache_load_miss_retired = 2,
+	P4_PEBS_METRIC__dtlb_load_miss_retired = 3,
+	P4_PEBS_METRIC__dtlb_store_miss_retired = 4,
+	P4_PEBS_METRIC__dtlb_all_miss_retired = 5,
+	P4_PEBS_METRIC__tagged_mispred_branch = 6,
+	P4_PEBS_METRIC__mob_load_replay_retired = 7,
+	P4_PEBS_METRIC__split_load_retired = 8,
+	P4_PEBS_METRIC__split_store_retired = 9,
+	P4_PEBS_METRIC__max = 10,
+};
+
+enum P4_EVENTS {
+	P4_EVENT_TC_DELIVER_MODE = 0,
+	P4_EVENT_BPU_FETCH_REQUEST = 1,
+	P4_EVENT_ITLB_REFERENCE = 2,
+	P4_EVENT_MEMORY_CANCEL = 3,
+	P4_EVENT_MEMORY_COMPLETE = 4,
+	P4_EVENT_LOAD_PORT_REPLAY = 5,
+	P4_EVENT_STORE_PORT_REPLAY = 6,
+	P4_EVENT_MOB_LOAD_REPLAY = 7,
+	P4_EVENT_PAGE_WALK_TYPE = 8,
+	P4_EVENT_BSQ_CACHE_REFERENCE = 9,
+	P4_EVENT_IOQ_ALLOCATION = 10,
+	P4_EVENT_IOQ_ACTIVE_ENTRIES = 11,
+	P4_EVENT_FSB_DATA_ACTIVITY = 12,
+	P4_EVENT_BSQ_ALLOCATION = 13,
+	P4_EVENT_BSQ_ACTIVE_ENTRIES = 14,
+	P4_EVENT_SSE_INPUT_ASSIST = 15,
+	P4_EVENT_PACKED_SP_UOP = 16,
+	P4_EVENT_PACKED_DP_UOP = 17,
+	P4_EVENT_SCALAR_SP_UOP = 18,
+	P4_EVENT_SCALAR_DP_UOP = 19,
+	P4_EVENT_64BIT_MMX_UOP = 20,
+	P4_EVENT_128BIT_MMX_UOP = 21,
+	P4_EVENT_X87_FP_UOP = 22,
+	P4_EVENT_TC_MISC = 23,
+	P4_EVENT_GLOBAL_POWER_EVENTS = 24,
+	P4_EVENT_TC_MS_XFER = 25,
+	P4_EVENT_UOP_QUEUE_WRITES = 26,
+	P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE = 27,
+	P4_EVENT_RETIRED_BRANCH_TYPE = 28,
+	P4_EVENT_RESOURCE_STALL = 29,
+	P4_EVENT_WC_BUFFER = 30,
+	P4_EVENT_B2B_CYCLES = 31,
+	P4_EVENT_BNR = 32,
+	P4_EVENT_SNOOP = 33,
+	P4_EVENT_RESPONSE = 34,
+	P4_EVENT_FRONT_END_EVENT = 35,
+	P4_EVENT_EXECUTION_EVENT = 36,
+	P4_EVENT_REPLAY_EVENT = 37,
+	P4_EVENT_INSTR_RETIRED = 38,
+	P4_EVENT_UOPS_RETIRED = 39,
+	P4_EVENT_UOP_TYPE = 40,
+	P4_EVENT_BRANCH_RETIRED = 41,
+	P4_EVENT_MISPRED_BRANCH_RETIRED = 42,
+	P4_EVENT_X87_ASSIST = 43,
+	P4_EVENT_MACHINE_CLEAR = 44,
+	P4_EVENT_INSTR_COMPLETED = 45,
+};
+
+struct pt_filter {
+	unsigned long msr_a;
+	unsigned long msr_b;
+	unsigned long config;
+};
+
+struct pt_filters {
+	struct pt_filter filter[4];
+	unsigned int nr_filters;
+};
+
+struct pt {
+	struct perf_output_handle handle;
+	struct pt_filters filters;
+	int handle_nmi;
+	int vmx_on;
+	u64 output_base;
+	u64 output_mask;
+};
+
+struct pt_pmu {
+	struct pmu pmu;
+	u32 caps[8];
+	bool vmx;
+	bool branch_en_always_on;
+	unsigned long max_nonturbo_ratio;
+	unsigned int tsc_art_num;
+	unsigned int tsc_art_den;
+};
+
+struct pt_cap_desc {
+	const char *name;
+	u32 leaf;
+	u8 reg;
+	u32 mask;
+};
+
+struct pt_address_range {
+	unsigned long msr_a;
+	unsigned long msr_b;
+	unsigned int reg_off;
+};
+
+enum pt_capabilities {
+	PT_CAP_max_subleaf = 0,
+	PT_CAP_cr3_filtering = 1,
+	PT_CAP_psb_cyc = 2,
+	PT_CAP_ip_filtering = 3,
+	PT_CAP_mtc = 4,
+	PT_CAP_ptwrite = 5,
+	PT_CAP_power_event_trace = 6,
+	PT_CAP_event_trace = 7,
+	PT_CAP_tnt_disable = 8,
+	PT_CAP_topa_output = 9,
+	PT_CAP_topa_multiple_entries = 10,
+	PT_CAP_single_range_output = 11,
+	PT_CAP_output_subsys = 12,
+	PT_CAP_payloads_lip = 13,
+	PT_CAP_num_address_ranges = 14,
+	PT_CAP_mtc_periods = 15,
+	PT_CAP_cycle_thresholds = 16,
+	PT_CAP_psb_periods = 17,
+};
+
+enum cpuid_regs_idx {
+	CPUID_EAX = 0,
+	CPUID_EBX = 1,
+	CPUID_ECX = 2,
+	CPUID_EDX = 3,
+};
+
+enum perf_addr_filter_action_t {
+	PERF_ADDR_FILTER_ACTION_STOP = 0,
+	PERF_ADDR_FILTER_ACTION_START = 1,
+	PERF_ADDR_FILTER_ACTION_FILTER = 2,
+};
+
+struct topa {
+	struct list_head list;
+	u64 offset;
+	size_t size;
+	int last;
+	unsigned int z_count;
+};
+
+struct topa_entry {
+	u64 end: 1;
+	u64 rsvd0: 1;
+	u64 intr: 1;
+	u64 rsvd1: 1;
+	u64 stop: 1;
+	u64 rsvd2: 1;
+	u64 size: 4;
+	u64 rsvd3: 2;
+	u64 base: 36;
+	u64 rsvd4: 16;
+};
+
+struct topa_page {
+	struct topa_entry table[507];
+	struct topa topa;
+};
+
+struct dev_ext_attribute {
+	struct device_attribute attr;
+	void *var;
+};
+
+struct perf_addr_filter {
+	struct list_head entry;
+	struct path path;
+	unsigned long offset;
+	unsigned long size;
+	enum perf_addr_filter_action_t action;
+};
+
+struct pt_buffer {
+	struct list_head tables;
+	struct topa *first;
+	struct topa *last;
+	struct topa *cur;
+	unsigned int cur_idx;
+	size_t output_off;
+	unsigned long nr_pages;
+	local_t data_size;
+	local64_t head;
+	bool snapshot;
+	bool single;
+	long stop_pos;
+	long intr_pos;
+	struct topa_entry *stop_te;
+	struct topa_entry *intr_te;
+	void **data_pages;
+};
+
+struct intel_uncore_pmu;
+
+struct intel_uncore_ops;
+
+struct uncore_event_desc;
+
+struct freerunning_counters;
+
+struct intel_uncore_topology;
+
+struct intel_uncore_type {
+	const char *name;
+	int num_counters;
+	int num_boxes;
+	int perf_ctr_bits;
+	int fixed_ctr_bits;
+	int num_freerunning_types;
+	int type_id;
+	unsigned int perf_ctr;
+	unsigned int event_ctl;
+	unsigned int event_mask;
+	unsigned int event_mask_ext;
+	unsigned int fixed_ctr;
+	unsigned int fixed_ctl;
+	unsigned int box_ctl;
+	u64 *box_ctls;
+	union {
+		unsigned int msr_offset;
+		unsigned int mmio_offset;
+	};
+	unsigned int mmio_map_size;
+	unsigned int num_shared_regs: 8;
+	unsigned int single_fixed: 1;
+	unsigned int pair_ctr_ctl: 1;
+	union {
+		unsigned int *msr_offsets;
+		unsigned int *pci_offsets;
+		unsigned int *mmio_offsets;
+	};
+	unsigned int *box_ids;
+	struct event_constraint unconstrainted;
+	struct event_constraint *constraints;
+	struct intel_uncore_pmu *pmus;
+	struct intel_uncore_ops *ops;
+	struct uncore_event_desc *event_descs;
+	struct freerunning_counters *freerunning;
+	const struct attribute_group *attr_groups[4];
+	const struct attribute_group **attr_update;
+	struct pmu *pmu;
+	struct intel_uncore_topology **topology;
+	int (*get_topology)(struct intel_uncore_type *);
+	void (*set_mapping)(struct intel_uncore_type *);
+	void (*cleanup_mapping)(struct intel_uncore_type *);
+};
+
+struct intel_uncore_box;
+
+struct intel_uncore_pmu {
+	struct pmu pmu;
+	char name[32];
+	int pmu_idx;
+	int func_id;
+	bool registered;
+	atomic_t activeboxes;
+	struct intel_uncore_type *type;
+	struct intel_uncore_box **boxes;
+};
+
+struct intel_uncore_extra_reg {
+	raw_spinlock_t lock;
+	u64 config;
+	u64 config1;
+	u64 config2;
+	atomic_t ref;
+};
+
+struct intel_uncore_box {
+	int dieid;
+	int n_active;
+	int n_events;
+	int cpu;
+	unsigned long flags;
+	atomic_t refcnt;
+	struct perf_event *events[10];
+	struct perf_event *event_list[10];
+	struct event_constraint *event_constraint[10];
+	unsigned long active_mask[1];
+	u64 tags[10];
+	struct pci_dev *pci_dev;
+	struct intel_uncore_pmu *pmu;
+	u64 hrtimer_duration;
+	struct hrtimer hrtimer;
+	struct list_head list;
+	struct list_head active_list;
+	void *io_addr;
+	struct intel_uncore_extra_reg shared_regs[0];
+};
+
+struct intel_uncore_ops {
+	void (*init_box)(struct intel_uncore_box *);
+	void (*exit_box)(struct intel_uncore_box *);
+	void (*disable_box)(struct intel_uncore_box *);
+	void (*enable_box)(struct intel_uncore_box *);
+	void (*disable_event)(struct intel_uncore_box *, struct perf_event *);
+	void (*enable_event)(struct intel_uncore_box *, struct perf_event *);
+	u64 (*read_counter)(struct intel_uncore_box *, struct perf_event *);
+	int (*hw_config)(struct intel_uncore_box *, struct perf_event *);
+	struct event_constraint * (*get_constraint)(struct intel_uncore_box *, struct perf_event *);
+	void (*put_constraint)(struct intel_uncore_box *, struct perf_event *);
+};
+
+struct uncore_event_desc {
+	struct device_attribute attr;
+	const char *config;
+};
+
+struct freerunning_counters {
+	unsigned int counter_base;
+	unsigned int counter_offset;
+	unsigned int box_offset;
+	unsigned int num_counters;
+	unsigned int bits;
+	unsigned int *box_offsets;
+};
+
+struct uncore_iio_topology;
+
+struct uncore_upi_topology;
+
+struct intel_uncore_topology {
+	int pmu_idx;
+	union {
+		void *untyped;
+		struct uncore_iio_topology *iio;
+		struct uncore_upi_topology *upi;
+	};
+};
+
+struct uncore_iio_topology {
+	int pci_bus_no;
+	int segment;
+};
+
+struct uncore_upi_topology {
+	int die_to;
+	int pmu_idx_to;
+	int enabled;
+};
+
+struct pci_extra_dev {
+	struct pci_dev *dev[4];
+};
+
+struct intel_uncore_init_fun {
+	void (*cpu_init)();
+	int (*pci_init)();
+	void (*mmio_init)();
+	bool use_discovery;
+	int *uncore_units_ignore;
+};
+
+enum bus_notifier_event {
+	BUS_NOTIFY_ADD_DEVICE = 0,
+	BUS_NOTIFY_DEL_DEVICE = 1,
+	BUS_NOTIFY_REMOVED_DEVICE = 2,
+	BUS_NOTIFY_BIND_DRIVER = 3,
+	BUS_NOTIFY_BOUND_DRIVER = 4,
+	BUS_NOTIFY_UNBIND_DRIVER = 5,
+	BUS_NOTIFY_UNBOUND_DRIVER = 6,
+	BUS_NOTIFY_DRIVER_NOT_BOUND = 7,
+};
+
+struct pci2phy_map {
+	struct list_head list;
+	int segment;
+	int pbus_to_dieid[256];
+};
+
+struct acpi_device;
+
+struct pci_sysdata {
+	int domain;
+	int node;
+	struct acpi_device *companion;
+	void *iommu;
+	void *fwnode;
+};
+
+enum {
+	EXTRA_REG_NHMEX_M_FILTER = 0,
+	EXTRA_REG_NHMEX_M_DSP = 1,
+	EXTRA_REG_NHMEX_M_ISS = 2,
+	EXTRA_REG_NHMEX_M_MAP = 3,
+	EXTRA_REG_NHMEX_M_MSC_THR = 4,
+	EXTRA_REG_NHMEX_M_PGT = 5,
+	EXTRA_REG_NHMEX_M_PLD = 6,
+	EXTRA_REG_NHMEX_M_ZDP_CTL_FVC = 7,
+};
+
+struct imc_uncore_pci_dev {
+	__u32 pci_id;
+	struct pci_driver *driver;
+};
+
+enum uncore_access_type {
+	UNCORE_ACCESS_MSR = 0,
+	UNCORE_ACCESS_MMIO = 1,
+	UNCORE_ACCESS_PCI = 2,
+	UNCORE_ACCESS_MAX = 3,
+};
+
+enum {
+	SNBEP_PCI_QPI_PORT0_FILTER = 0,
+	SNBEP_PCI_QPI_PORT1_FILTER = 1,
+	BDX_PCI_QPI_PORT2_FILTER = 2,
+};
+
+enum {
+	IIO_TOPOLOGY_TYPE = 0,
+	UPI_TOPOLOGY_TYPE = 1,
+	TOPOLOGY_MAX = 2,
+};
+
+struct intel_uncore_discovery_type {
+	struct rb_node node;
+	enum uncore_access_type access_type;
+	u64 box_ctrl;
+	u64 *box_ctrl_die;
+	u16 type;
+	u8 num_counters;
+	u8 counter_width;
+	u8 ctl_offset;
+	u8 ctr_offset;
+	u16 num_boxes;
+	unsigned int *ids;
+	unsigned int *box_offset;
+};
+
+struct uncore_global_discovery {
+	union {
+		u64 table1;
+		struct {
+			u64 type: 8;
+			u64 stride: 8;
+			u64 max_units: 10;
+			u64 __reserved_1: 36;
+			u64 access_type: 2;
+		};
+	};
+	u64 ctl;
+	union {
+		u64 table3;
+		struct {
+			u64 status_offset: 8;
+			u64 num_status: 16;
+			u64 __reserved_2: 40;
+		};
+	};
+};
+
+struct uncore_unit_discovery {
+	union {
+		u64 table1;
+		struct {
+			u64 num_regs: 8;
+			u64 ctl_offset: 8;
+			u64 bit_width: 8;
+			u64 ctr_offset: 8;
+			u64 status_offset: 8;
+			u64 __reserved_1: 22;
+			u64 access_type: 2;
+		};
+	};
+	u64 ctl;
+	union {
+		u64 table3;
+		struct {
+			u64 box_type: 16;
+			u64 box_id: 16;
+			u64 __reserved_2: 32;
+		};
+	};
+};
+
+struct cstate_model {
+	unsigned long core_events;
+	unsigned long pkg_events;
+	unsigned long quirks;
+};
+
+enum perf_cstate_pkg_events {
+	PERF_CSTATE_PKG_C2_RES = 0,
+	PERF_CSTATE_PKG_C3_RES = 1,
+	PERF_CSTATE_PKG_C6_RES = 2,
+	PERF_CSTATE_PKG_C7_RES = 3,
+	PERF_CSTATE_PKG_C8_RES = 4,
+	PERF_CSTATE_PKG_C9_RES = 5,
+	PERF_CSTATE_PKG_C10_RES = 6,
+	PERF_CSTATE_PKG_EVENT_MAX = 7,
+};
+
+enum perf_cstate_core_events {
+	PERF_CSTATE_CORE_C1_RES = 0,
+	PERF_CSTATE_CORE_C3_RES = 1,
+	PERF_CSTATE_CORE_C6_RES = 2,
+	PERF_CSTATE_CORE_C7_RES = 3,
+	PERF_CSTATE_CORE_EVENT_MAX = 4,
+};
+
+typedef void (*btf_trace_kvm_userspace_exit)(void *, __u32, int);
+
+typedef void (*btf_trace_kvm_vcpu_wakeup)(void *, __u64, bool, bool);
+
+typedef void (*btf_trace_kvm_set_irq)(void *, unsigned int, int, int);
+
+typedef void (*btf_trace_kvm_ioapic_set_irq)(void *, __u64, int, bool);
+
+typedef void (*btf_trace_kvm_ioapic_delayed_eoi_inj)(void *, __u64);
+
+typedef void (*btf_trace_kvm_msi_set_irq)(void *, __u64, __u64);
+
+typedef void (*btf_trace_kvm_ack_irq)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kvm_mmio)(void *, int, int, u64, void *);
+
+typedef void (*btf_trace_kvm_fpu)(void *, int);
+
+typedef void (*btf_trace_kvm_try_async_get_page)(void *, u64, u64);
+
+typedef void (*btf_trace_kvm_async_pf_repeated_fault)(void *, u64, u64);
+
+typedef void (*btf_trace_kvm_async_pf_not_present)(void *, u64, u64);
+
+typedef void (*btf_trace_kvm_async_pf_ready)(void *, u64, u64);
+
+typedef void (*btf_trace_kvm_async_pf_completed)(void *, unsigned long, u64);
+
+typedef void (*btf_trace_kvm_halt_poll_ns)(void *, bool, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kvm_dirty_ring_push)(void *, struct kvm_dirty_ring *, u32, u64);
+
+typedef void (*btf_trace_kvm_dirty_ring_reset)(void *, struct kvm_dirty_ring *);
+
+typedef void (*btf_trace_kvm_dirty_ring_exit)(void *, struct kvm_vcpu *);
+
+struct kvm_io_device_ops;
+
+struct kvm_io_device {
+	const struct kvm_io_device_ops *ops;
+};
+
+struct kvm_io_device_ops {
+	int (*read)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, void *);
+	int (*write)(struct kvm_vcpu *, struct kvm_io_device *, gpa_t, int, const void *);
+	void (*destructor)(struct kvm_io_device *);
+};
+
+typedef void (*btf_trace_kvm_unmap_hva_range)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_kvm_set_spte_hva)(void *, unsigned long);
+
+typedef void (*btf_trace_kvm_age_hva)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_kvm_test_age_hva)(void *, unsigned long);
+
+struct trace_print_flags {
+	unsigned long mask;
+	const char *name;
+};
+
+struct kvm_device;
+
+struct kvm_device_attr;
+
+struct kvm_device_ops {
+	const char *name;
+	int (*create)(struct kvm_device *, u32);
+	void (*init)(struct kvm_device *);
+	void (*destroy)(struct kvm_device *);
+	void (*release)(struct kvm_device *);
+	int (*set_attr)(struct kvm_device *, struct kvm_device_attr *);
+	int (*get_attr)(struct kvm_device *, struct kvm_device_attr *);
+	int (*has_attr)(struct kvm_device *, struct kvm_device_attr *);
+	long (*ioctl)(struct kvm_device *, unsigned int, unsigned long);
+	int (*mmap)(struct kvm_device *, struct vm_area_struct *);
+};
+
+struct kvm_device {
+	const struct kvm_device_ops *ops;
+	struct kvm *kvm;
+	void *private;
+	struct list_head vm_node;
+};
+
+struct kvm_device_attr {
+	__u32 flags;
+	__u32 group;
+	__u64 attr;
+	__u64 addr;
+};
+
+union kvm_mmu_notifier_arg {
+	pte_t pte;
+};
+
+struct miscdevice {
+	int minor;
+	const char *name;
+	const struct file_operations *fops;
+	struct list_head list;
+	struct device *parent;
+	struct device *this_device;
+	const struct attribute_group **groups;
+	const char *nodename;
+	umode_t mode;
+};
+
+enum kvm_mr_change {
+	KVM_MR_CREATE = 0,
+	KVM_MR_DELETE = 1,
+	KVM_MR_MOVE = 2,
+	KVM_MR_FLAGS_ONLY = 3,
+};
+
+enum {
+	FOLL_WRITE = 1,
+	FOLL_GET = 2,
+	FOLL_DUMP = 4,
+	FOLL_FORCE = 8,
+	FOLL_NOWAIT = 16,
+	FOLL_NOFAULT = 32,
+	FOLL_HWPOISON = 64,
+	FOLL_ANON = 128,
+	FOLL_LONGTERM = 256,
+	FOLL_SPLIT_PMD = 512,
+	FOLL_PCI_P2PDMA = 1024,
+	FOLL_INTERRUPTIBLE = 2048,
+	FOLL_HONOR_NUMA_FAULT = 4096,
+};
+
+enum {
+	MEMREMAP_WB = 1,
+	MEMREMAP_WT = 2,
+	MEMREMAP_WC = 4,
+	MEMREMAP_ENC = 8,
+	MEMREMAP_DEC = 16,
+};
+
+enum {
+	OUTSIDE_GUEST_MODE = 0,
+	IN_GUEST_MODE = 1,
+	EXITING_GUEST_MODE = 2,
+	READING_SHADOW_PAGE_TABLES = 3,
+};
+
+enum kvm_bus {
+	KVM_MMIO_BUS = 0,
+	KVM_PIO_BUS = 1,
+	KVM_VIRTIO_CCW_NOTIFY_BUS = 2,
+	KVM_FAST_MMIO_BUS = 3,
+	KVM_NR_BUSES = 4,
+};
+
+enum {
+	SECTION_MARKED_PRESENT_BIT = 0,
+	SECTION_HAS_MEM_MAP_BIT = 1,
+	SECTION_IS_ONLINE_BIT = 2,
+	SECTION_IS_EARLY_BIT = 3,
+	SECTION_MAP_LAST_BIT = 4,
+};
+
+enum kobject_action {
+	KOBJ_ADD = 0,
+	KOBJ_REMOVE = 1,
+	KOBJ_CHANGE = 2,
+	KOBJ_MOVE = 3,
+	KOBJ_ONLINE = 4,
+	KOBJ_OFFLINE = 5,
+	KOBJ_BIND = 6,
+	KOBJ_UNBIND = 7,
+};
+
+typedef unsigned int xa_mark_t;
+
+struct trace_event_raw_kvm_userspace_exit {
+	struct trace_entry ent;
+	__u32 reason;
+	int errno;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_vcpu_wakeup {
+	struct trace_entry ent;
+	__u64 ns;
+	bool waited;
+	bool valid;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_set_irq {
+	struct trace_entry ent;
+	unsigned int gsi;
+	int level;
+	int irq_source_id;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_ioapic_set_irq {
+	struct trace_entry ent;
+	__u64 e;
+	int pin;
+	bool coalesced;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_ioapic_delayed_eoi_inj {
+	struct trace_entry ent;
+	__u64 e;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_msi_set_irq {
+	struct trace_entry ent;
+	__u64 address;
+	__u64 data;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_ack_irq {
+	struct trace_entry ent;
+	unsigned int irqchip;
+	unsigned int pin;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmio {
+	struct trace_entry ent;
+	u32 type;
+	u32 len;
+	u64 gpa;
+	u64 val;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_fpu {
+	struct trace_entry ent;
+	u32 load;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_async_get_page_class {
+	struct trace_entry ent;
+	__u64 gva;
+	u64 gfn;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_async_pf_nopresent_ready {
+	struct trace_entry ent;
+	__u64 token;
+	__u64 gva;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_async_pf_completed {
+	struct trace_entry ent;
+	unsigned long address;
+	u64 gva;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_halt_poll_ns {
+	struct trace_entry ent;
+	bool grow;
+	unsigned int vcpu_id;
+	unsigned int new;
+	unsigned int old;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_dirty_ring_push {
+	struct trace_entry ent;
+	int index;
+	u32 dirty_index;
+	u32 reset_index;
+	u32 slot;
+	u64 offset;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_dirty_ring_reset {
+	struct trace_entry ent;
+	int index;
+	u32 dirty_index;
+	u32 reset_index;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_dirty_ring_exit {
+	struct trace_entry ent;
+	int vcpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_unmap_hva_range {
+	struct trace_entry ent;
+	unsigned long start;
+	unsigned long end;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_set_spte_hva {
+	struct trace_entry ent;
+	unsigned long hva;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_age_hva {
+	struct trace_entry ent;
+	unsigned long start;
+	unsigned long end;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_test_age_hva {
+	struct trace_entry ent;
+	unsigned long hva;
+	char __data[0];
+};
+
+struct mem_section_usage {
+	struct callback_head rcu;
+	unsigned long subsection_map[1];
+	unsigned long pageblock_flags[0];
+};
+
+typedef u32 compat_sigset_word;
+
+typedef struct {
+	compat_sigset_word sig[2];
+} compat_sigset_t;
+
+struct page_ext;
+
+struct mem_section {
+	unsigned long section_mem_map;
+	struct mem_section_usage *usage;
+	struct page_ext *page_ext;
+	unsigned long pad;
+};
+
+struct page_ext {
+	unsigned long flags;
+};
+
+struct kvm_userspace_memory_region {
+	__u32 slot;
+	__u32 flags;
+	__u64 guest_phys_addr;
+	__u64 memory_size;
+	__u64 userspace_addr;
+};
+
+struct kvm_memslot_iter {
+	struct kvm_memslots *slots;
+	struct rb_node *node;
+	struct kvm_memory_slot *slot;
+};
+
+typedef unsigned long hva_t;
+
+typedef int (*cmp_func_t)(const void *, const void *);
+
+struct kvm_coalesced_mmio_zone {
+	__u64 addr;
+	__u32 size;
+	union {
+		__u32 pad;
+		__u32 pio;
+	};
+};
+
+struct kvm_irqfd {
+	__u32 fd;
+	__u32 gsi;
+	__u32 flags;
+	__u32 resamplefd;
+	__u8 pad[16];
+};
+
+struct kvm_irq_level {
+	union {
+		__u32 irq;
+		__s32 status;
+	};
+	__u32 level;
+};
+
+struct kvm_msi {
+	__u32 address_lo;
+	__u32 address_hi;
+	__u32 data;
+	__u32 flags;
+	__u32 devid;
+	__u8 pad[12];
+};
+
+struct kvm_ioeventfd {
+	__u64 datamatch;
+	__u64 addr;
+	__u32 len;
+	__s32 fd;
+	__u32 flags;
+	__u8 pad[36];
+};
+
+struct kvm_irq_routing_irqchip {
+	__u32 irqchip;
+	__u32 pin;
+};
+
+struct kvm_irq_routing_msi {
+	__u32 address_lo;
+	__u32 address_hi;
+	__u32 data;
+	union {
+		__u32 pad;
+		__u32 devid;
+	};
+};
+
+struct kvm_irq_routing_s390_adapter {
+	__u64 ind_addr;
+	__u64 summary_addr;
+	__u64 ind_offset;
+	__u32 summary_offset;
+	__u32 adapter_id;
+};
+
+struct kvm_irq_routing_hv_sint {
+	__u32 vcpu;
+	__u32 sint;
+};
+
+struct kvm_irq_routing_xen_evtchn {
+	__u32 port;
+	__u32 vcpu;
+	__u32 priority;
+};
+
+struct kvm_irq_routing_entry {
+	__u32 gsi;
+	__u32 type;
+	__u32 flags;
+	__u32 pad;
+	union {
+		struct kvm_irq_routing_irqchip irqchip;
+		struct kvm_irq_routing_msi msi;
+		struct kvm_irq_routing_s390_adapter adapter;
+		struct kvm_irq_routing_hv_sint hv_sint;
+		struct kvm_irq_routing_xen_evtchn xen_evtchn;
+		__u32 pad[8];
+	} u;
+};
+
+struct kvm_dirty_log {
+	__u32 slot;
+	__u32 padding1;
+	union {
+		void __attribute__((btf_type_tag("user"))) *dirty_bitmap;
+		__u64 padding2;
+	};
+};
+
+struct kvm_clear_dirty_log {
+	__u32 slot;
+	__u32 num_pages;
+	__u64 first_page;
+	union {
+		void __attribute__((btf_type_tag("user"))) *dirty_bitmap;
+		__u64 padding2;
+	};
+};
+
+struct kvm_mp_state {
+	__u32 mp_state;
+};
+
+struct kvm_guest_debug_arch {
+	__u64 debugreg[8];
+};
+
+struct kvm_guest_debug {
+	__u32 control;
+	__u32 pad;
+	struct kvm_guest_debug_arch arch;
+};
+
+struct kvm_fpu {
+	__u8 fpr[128];
+	__u16 fcw;
+	__u16 fsw;
+	__u8 ftwx;
+	__u8 pad1;
+	__u16 last_opcode;
+	__u64 last_ip;
+	__u64 last_dp;
+	__u8 xmm[256];
+	__u32 mxcsr;
+	__u32 pad2;
+};
+
+struct kvm_translation {
+	__u64 linear_address;
+	__u64 physical_address;
+	__u8 valid;
+	__u8 writeable;
+	__u8 usermode;
+	__u8 pad[5];
+};
+
+struct kvm_stats_header {
+	__u32 flags;
+	__u32 name_size;
+	__u32 num_desc;
+	__u32 id_offset;
+	__u32 desc_offset;
+	__u32 data_offset;
+};
+
+struct kvm_gfn_range;
+
+typedef bool (*hva_handler_t)(struct kvm *, struct kvm_gfn_range *);
+
+typedef void (*on_lock_fn_t)(struct kvm *, unsigned long, unsigned long);
+
+typedef void (*on_unlock_fn_t)(struct kvm *);
+
+struct kvm_hva_range {
+	unsigned long start;
+	unsigned long end;
+	union kvm_mmu_notifier_arg arg;
+	hva_handler_t handler;
+	on_lock_fn_t on_lock;
+	on_unlock_fn_t on_unlock;
+	bool flush_on_ret;
+	bool may_block;
+};
+
+struct kvm_gfn_range {
+	struct kvm_memory_slot *slot;
+	gfn_t start;
+	gfn_t end;
+	union kvm_mmu_notifier_arg arg;
+	bool may_block;
+};
+
+struct trace_event_data_offsets_kvm_userspace_exit {};
+
+struct trace_event_data_offsets_kvm_vcpu_wakeup {};
+
+struct trace_event_data_offsets_kvm_set_irq {};
+
+struct trace_event_data_offsets_kvm_ioapic_set_irq {};
+
+struct trace_event_data_offsets_kvm_ioapic_delayed_eoi_inj {};
+
+struct trace_event_data_offsets_kvm_msi_set_irq {};
+
+struct trace_event_data_offsets_kvm_ack_irq {};
+
+struct trace_event_data_offsets_kvm_mmio {};
+
+struct trace_event_data_offsets_kvm_fpu {};
+
+struct trace_event_data_offsets_kvm_async_get_page_class {};
+
+struct trace_event_data_offsets_kvm_async_pf_nopresent_ready {};
+
+struct trace_event_data_offsets_kvm_async_pf_completed {};
+
+struct trace_event_data_offsets_kvm_halt_poll_ns {};
+
+struct trace_event_data_offsets_kvm_dirty_ring_push {};
+
+struct trace_event_data_offsets_kvm_dirty_ring_reset {};
+
+struct trace_event_data_offsets_kvm_dirty_ring_exit {};
+
+struct trace_event_data_offsets_kvm_unmap_hva_range {};
+
+struct trace_event_data_offsets_kvm_set_spte_hva {};
+
+struct trace_event_data_offsets_kvm_age_hva {};
+
+struct trace_event_data_offsets_kvm_test_age_hva {};
+
+struct kvm_host_map {
+	struct page *page;
+	void *hva;
+	kvm_pfn_t pfn;
+	kvm_pfn_t gfn;
+};
+
+struct kvm_enable_cap {
+	__u32 cap;
+	__u32 flags;
+	__u64 args[4];
+	__u8 pad[64];
+};
+
+typedef int (*kvm_vm_thread_fn_t)(struct kvm *, uintptr_t);
+
+struct kvm_vm_worker_thread_context {
+	struct kvm *kvm;
+	struct task_struct *parent;
+	struct completion init_done;
+	kvm_vm_thread_fn_t thread_fn;
+	uintptr_t data;
+	int err;
+};
+
+struct kvm_irq_routing {
+	__u32 nr;
+	__u32 flags;
+	struct kvm_irq_routing_entry entries[0];
+};
+
+struct kvm_create_device {
+	__u32 type;
+	__u32 fd;
+	__u32 flags;
+};
+
+struct compat_kvm_clear_dirty_log {
+	__u32 slot;
+	__u32 num_pages;
+	__u64 first_page;
+	union {
+		compat_uptr_t dirty_bitmap;
+		__u64 padding2;
+	};
+};
+
+struct compat_kvm_dirty_log {
+	__u32 slot;
+	__u32 padding1;
+	union {
+		compat_uptr_t dirty_bitmap;
+		__u64 padding2;
+	};
+};
+
+struct kvm_signal_mask {
+	__u32 len;
+	__u8 sigset[0];
+};
+
+enum {
+	kvm_ioeventfd_flag_nr_datamatch = 0,
+	kvm_ioeventfd_flag_nr_pio = 1,
+	kvm_ioeventfd_flag_nr_deassign = 2,
+	kvm_ioeventfd_flag_nr_virtio_ccw_notify = 3,
+	kvm_ioeventfd_flag_nr_fast_mmio = 4,
+	kvm_ioeventfd_flag_nr_max = 5,
+};
+
+enum {
+	WORK_STRUCT_PENDING_BIT = 0,
+	WORK_STRUCT_INACTIVE_BIT = 1,
+	WORK_STRUCT_PWQ_BIT = 2,
+	WORK_STRUCT_LINKED_BIT = 3,
+	WORK_STRUCT_COLOR_SHIFT = 4,
+	WORK_STRUCT_COLOR_BITS = 4,
+	WORK_STRUCT_PENDING = 1,
+	WORK_STRUCT_INACTIVE = 2,
+	WORK_STRUCT_PWQ = 4,
+	WORK_STRUCT_LINKED = 8,
+	WORK_STRUCT_STATIC = 0,
+	WORK_NR_COLORS = 16,
+	WORK_CPU_UNBOUND = 32,
+	WORK_STRUCT_FLAG_BITS = 8,
+	WORK_OFFQ_FLAG_BASE = 4,
+	__WORK_OFFQ_CANCELING = 4,
+	WORK_OFFQ_FLAG_BITS = 1,
+	WORK_OFFQ_POOL_SHIFT = 5,
+	WORK_OFFQ_LEFT = 59,
+	WORK_OFFQ_POOL_BITS = 31,
+	WORK_BUSY_PENDING = 1,
+	WORK_BUSY_RUNNING = 2,
+	WORKER_DESC_LEN = 24,
+};
+
+struct kvm_irq_ack_notifier {
+	struct hlist_node link;
+	unsigned int gsi;
+	void (*irq_acked)(struct kvm_irq_ack_notifier *);
+};
+
+struct kvm_s390_adapter_int {
+	u64 ind_addr;
+	u64 summary_addr;
+	u64 ind_offset;
+	u32 summary_offset;
+	u32 adapter_id;
+};
+
+struct kvm_hv_sint {
+	u32 vcpu;
+	u32 sint;
+};
+
+struct kvm_xen_evtchn {
+	u32 port;
+	u32 vcpu_id;
+	int vcpu_idx;
+	u32 priority;
+};
+
+struct kvm_kernel_irq_routing_entry {
+	u32 gsi;
+	u32 type;
+	int (*set)(struct kvm_kernel_irq_routing_entry *, struct kvm *, int, int, bool);
+	union {
+		struct {
+			unsigned int irqchip;
+			unsigned int pin;
+		} irqchip;
+		struct {
+			u32 address_lo;
+			u32 address_hi;
+			u32 data;
+			u32 flags;
+			u32 devid;
+		} msi;
+		struct kvm_s390_adapter_int adapter;
+		struct kvm_hv_sint hv_sint;
+		struct kvm_xen_evtchn xen_evtchn;
+	};
+	struct hlist_node link;
+};
+
+typedef struct poll_table_struct poll_table;
+
+struct irq_bypass_producer;
+
+struct irq_bypass_consumer {
+	struct list_head node;
+	void *token;
+	int (*add_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*del_producer)(struct irq_bypass_consumer *, struct irq_bypass_producer *);
+	void (*stop)(struct irq_bypass_consumer *);
+	void (*start)(struct irq_bypass_consumer *);
+};
+
+struct kvm_kernel_irqfd_resampler;
+
+struct kvm_kernel_irqfd {
+	struct kvm *kvm;
+	wait_queue_entry_t wait;
+	struct kvm_kernel_irq_routing_entry irq_entry;
+	seqcount_spinlock_t irq_entry_sc;
+	int gsi;
+	struct work_struct inject;
+	struct kvm_kernel_irqfd_resampler *resampler;
+	struct eventfd_ctx *resamplefd;
+	struct list_head resampler_link;
+	struct eventfd_ctx *eventfd;
+	struct list_head list;
+	poll_table pt;
+	struct work_struct shutdown;
+	struct irq_bypass_consumer consumer;
+	struct irq_bypass_producer *producer;
+};
+
+struct kvm_kernel_irqfd_resampler {
+	struct kvm *kvm;
+	struct list_head list;
+	struct kvm_irq_ack_notifier notifier;
+	struct list_head link;
+};
+
+struct irq_bypass_producer {
+	struct list_head node;
+	void *token;
+	int irq;
+	int (*add_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*del_consumer)(struct irq_bypass_producer *, struct irq_bypass_consumer *);
+	void (*stop)(struct irq_bypass_producer *);
+	void (*start)(struct irq_bypass_producer *);
+};
+
+struct _ioeventfd {
+	struct list_head list;
+	u64 addr;
+	int length;
+	struct eventfd_ctx *eventfd;
+	u64 datamatch;
+	struct kvm_io_device dev;
+	u8 bus_idx;
+	bool wildcard;
+};
+
+struct fd {
+	struct file *file;
+	unsigned int flags;
+};
+
+typedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, unsigned long, int, void *);
+
+struct iommu_domain_geometry {
+	dma_addr_t aperture_start;
+	dma_addr_t aperture_end;
+	bool force_aperture;
+};
+
+enum iommu_page_response_code {
+	IOMMU_PAGE_RESP_SUCCESS = 0,
+	IOMMU_PAGE_RESP_INVALID = 1,
+	IOMMU_PAGE_RESP_FAILURE = 2,
+};
+
+struct iommu_dma_cookie;
+
+struct iommu_fault;
+
+struct iommu_domain {
+	unsigned int type;
+	const struct iommu_domain_ops *ops;
+	unsigned long pgsize_bitmap;
+	struct iommu_domain_geometry geometry;
+	struct iommu_dma_cookie *iova_cookie;
+	enum iommu_page_response_code (*iopf_handler)(struct iommu_fault *, void *);
+	void *fault_data;
+	union {
+		struct {
+			iommu_fault_handler_t handler;
+			void *handler_token;
+		};
+		struct {
+			struct mm_struct *mm;
+			int users;
+		};
+	};
+};
+
+struct iommu_iotlb_gather;
+
+struct iommu_domain_ops {
+	int (*attach_dev)(struct iommu_domain *, struct device *);
+	int (*set_dev_pasid)(struct iommu_domain *, struct device *, ioasid_t);
+	int (*map)(struct iommu_domain *, unsigned long, phys_addr_t, size_t, int, gfp_t);
+	int (*map_pages)(struct iommu_domain *, unsigned long, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
+	size_t (*unmap)(struct iommu_domain *, unsigned long, size_t, struct iommu_iotlb_gather *);
+	size_t (*unmap_pages)(struct iommu_domain *, unsigned long, size_t, size_t, struct iommu_iotlb_gather *);
+	void (*flush_iotlb_all)(struct iommu_domain *);
+	void (*iotlb_sync_map)(struct iommu_domain *, unsigned long, size_t);
+	void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
+	phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
+	bool (*enforce_cache_coherency)(struct iommu_domain *);
+	int (*enable_nesting)(struct iommu_domain *);
+	int (*set_pgtable_quirks)(struct iommu_domain *, unsigned long);
+	void (*free)(struct iommu_domain *);
+};
+
+struct iommu_iotlb_gather {
+	unsigned long start;
+	unsigned long end;
+	size_t pgsize;
+	struct list_head freelist;
+	bool queued;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct iommu_fault_unrecoverable {
+	__u32 reason;
+	__u32 flags;
+	__u32 pasid;
+	__u32 perm;
+	__u64 addr;
+	__u64 fetch_addr;
+};
+
+struct iommu_fault_page_request {
+	__u32 flags;
+	__u32 pasid;
+	__u32 grpid;
+	__u32 perm;
+	__u64 addr;
+	__u64 private_data[2];
+};
+
+struct iommu_fault {
+	__u32 type;
+	__u32 padding;
+	union {
+		struct iommu_fault_unrecoverable event;
+		struct iommu_fault_page_request prm;
+		__u8 padding2[56];
+	};
+};
+
+struct iommu_device {
+	struct list_head list;
+	const struct iommu_ops *ops;
+	struct fwnode_handle *fwnode;
+	struct device *dev;
+	u32 max_pasids;
+};
+
+struct of_phandle_args {
+	struct device_node *np;
+	int args_count;
+	uint32_t args[16];
+};
+
+struct iommu_fault_event {
+	struct iommu_fault fault;
+	struct list_head list;
+};
+
+struct iommu_page_response {
+	__u32 argsz;
+	__u32 version;
+	__u32 flags;
+	__u32 pasid;
+	__u32 grpid;
+	__u32 code;
+};
+
+struct iopf_device_param;
+
+struct iommu_fault_param;
+
+struct iommu_fwspec;
+
+struct dev_iommu {
+	struct mutex lock;
+	struct iommu_fault_param *fault_param;
+	struct iopf_device_param *iopf_param;
+	struct iommu_fwspec *fwspec;
+	struct iommu_device *iommu_dev;
+	void *priv;
+	u32 max_pasids;
+	u32 attach_deferred: 1;
+	u32 pci_32bit_workaround: 1;
+	u32 require_direct: 1;
+};
+
+typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);
+
+struct iommu_fault_param {
+	iommu_dev_fault_handler_t handler;
+	void *data;
+	struct list_head faults;
+	struct mutex lock;
+};
+
+struct iommu_fwspec {
+	const struct iommu_ops *ops;
+	struct fwnode_handle *iommu_fwnode;
+	u32 flags;
+	unsigned int num_ids;
+	u32 ids[0];
+};
+
+enum kvm_device_type {
+	KVM_DEV_TYPE_FSL_MPIC_20 = 1,
+	KVM_DEV_TYPE_FSL_MPIC_42 = 2,
+	KVM_DEV_TYPE_XICS = 3,
+	KVM_DEV_TYPE_VFIO = 4,
+	KVM_DEV_TYPE_ARM_VGIC_V2 = 5,
+	KVM_DEV_TYPE_FLIC = 6,
+	KVM_DEV_TYPE_ARM_VGIC_V3 = 7,
+	KVM_DEV_TYPE_ARM_VGIC_ITS = 8,
+	KVM_DEV_TYPE_XIVE = 9,
+	KVM_DEV_TYPE_ARM_PV_TIME = 10,
+	KVM_DEV_TYPE_RISCV_AIA = 11,
+	KVM_DEV_TYPE_MAX = 12,
+};
+
+struct kvm_vfio_file {
+	struct list_head node;
+	struct file *file;
+};
+
+struct kvm_vfio {
+	struct list_head file_list;
+	struct mutex lock;
+	bool noncoherent;
+};
+
+struct kvm_coalesced_mmio_dev {
+	struct list_head list;
+	struct kvm_io_device dev;
+	struct kvm *kvm;
+	struct kvm_coalesced_mmio_zone zone;
+};
+
+struct kvm_arch_async_pf {
+	u32 token;
+	gfn_t gfn;
+	unsigned long cr3;
+	bool direct_map;
+};
+
+struct kvm_async_pf {
+	struct work_struct work;
+	struct list_head link;
+	struct list_head queue;
+	struct kvm_vcpu *vcpu;
+	struct mm_struct *mm;
+	gpa_t cr2_or_gpa;
+	unsigned long addr;
+	struct kvm_arch_async_pf arch;
+	bool wakeup_all;
+	bool notpresent_injected;
+};
+
+struct plist_head {
+	struct list_head node_list;
+};
+
+enum pm_qos_type {
+	PM_QOS_UNITIALIZED = 0,
+	PM_QOS_MAX = 1,
+	PM_QOS_MIN = 2,
+};
+
+struct pm_qos_constraints {
+	struct plist_head list;
+	s32 target_value;
+	s32 default_value;
+	s32 no_constraint_value;
+	enum pm_qos_type type;
+	struct blocking_notifier_head *notifiers;
+};
+
+struct freq_constraints {
+	struct pm_qos_constraints min_freq;
+	struct blocking_notifier_head min_freq_notifiers;
+	struct pm_qos_constraints max_freq;
+	struct blocking_notifier_head max_freq_notifiers;
+};
+
+struct pm_qos_flags {
+	struct list_head list;
+	s32 effective_flags;
+};
+
+struct dev_pm_qos_request;
+
+struct dev_pm_qos {
+	struct pm_qos_constraints resume_latency;
+	struct pm_qos_constraints latency_tolerance;
+	struct freq_constraints freq;
+	struct pm_qos_flags flags;
+	struct dev_pm_qos_request *resume_latency_req;
+	struct dev_pm_qos_request *latency_tolerance_req;
+	struct dev_pm_qos_request *flags_req;
+};
+
+struct pm_qos_flags_request {
+	struct list_head node;
+	s32 flags;
+};
+
+enum freq_qos_req_type {
+	FREQ_QOS_MIN = 1,
+	FREQ_QOS_MAX = 2,
+};
+
+struct freq_qos_request {
+	enum freq_qos_req_type type;
+	struct plist_node pnode;
+	struct freq_constraints *qos;
+	u64 android_oem_data1;
+};
+
+enum dev_pm_qos_req_type {
+	DEV_PM_QOS_RESUME_LATENCY = 1,
+	DEV_PM_QOS_LATENCY_TOLERANCE = 2,
+	DEV_PM_QOS_MIN_FREQUENCY = 3,
+	DEV_PM_QOS_MAX_FREQUENCY = 4,
+	DEV_PM_QOS_FLAGS = 5,
+};
+
+struct dev_pm_qos_request {
+	enum dev_pm_qos_req_type type;
+	union {
+		struct plist_node pnode;
+		struct pm_qos_flags_request flr;
+		struct freq_qos_request freq;
+	} data;
+	struct device *dev;
+};
+
+typedef void (*btf_trace_kvm_entry)(void *, struct kvm_vcpu *);
+
+struct kvm_kpic_state {
+	u8 last_irr;
+	u8 irr;
+	u8 imr;
+	u8 isr;
+	u8 priority_add;
+	u8 irq_base;
+	u8 read_reg_select;
+	u8 poll;
+	u8 special_mask;
+	u8 init_state;
+	u8 auto_eoi;
+	u8 rotate_on_auto_eoi;
+	u8 special_fully_nested_mode;
+	u8 init4;
+	u8 elcr;
+	u8 elcr_mask;
+	u8 isr_ack;
+	struct kvm_pic *pics_state;
+};
+
+struct kvm_pic {
+	spinlock_t lock;
+	bool wakeup_needed;
+	unsigned int pending_acks;
+	struct kvm *kvm;
+	struct kvm_kpic_state pics[2];
+	int output;
+	struct kvm_io_device dev_master;
+	struct kvm_io_device dev_slave;
+	struct kvm_io_device dev_elcr;
+	unsigned long irq_states[16];
+};
+
+union kvm_ioapic_redirect_entry {
+	u64 bits;
+	struct {
+		u8 vector;
+		u8 delivery_mode: 3;
+		u8 dest_mode: 1;
+		u8 delivery_status: 1;
+		u8 polarity: 1;
+		u8 remote_irr: 1;
+		u8 trig_mode: 1;
+		u8 mask: 1;
+		u8 reserve: 7;
+		u8 reserved[4];
+		u8 dest_id;
+	} fields;
+};
+
+struct dest_map {
+	unsigned long map[64];
+	u8 vectors[4096];
+};
+
+struct rtc_status {
+	int pending_eoi;
+	struct dest_map dest_map;
+};
+
+struct kvm_ioapic {
+	u64 base_address;
+	u32 ioregsel;
+	u32 id;
+	u32 irr;
+	u32 pad;
+	union kvm_ioapic_redirect_entry redirtbl[24];
+	unsigned long irq_states[24];
+	struct kvm_io_device dev;
+	struct kvm *kvm;
+	spinlock_t lock;
+	struct rtc_status rtc_status;
+	struct delayed_work eoi_inject;
+	u32 irq_eoi[24];
+	u32 irr_delivered;
+};
+
+struct kvm_kpit_channel_state {
+	u32 count;
+	u16 latched_count;
+	u8 count_latched;
+	u8 status_latched;
+	u8 status;
+	u8 read_state;
+	u8 write_state;
+	u8 write_latch;
+	u8 rw_mode;
+	u8 mode;
+	u8 bcd;
+	u8 gate;
+	ktime_t count_load_time;
+};
+
+struct kvm_kpit_state {
+	struct kvm_kpit_channel_state channels[3];
+	u32 flags;
+	bool is_periodic;
+	s64 period;
+	struct hrtimer timer;
+	struct mutex lock;
+	atomic_t reinject;
+	atomic_t pending;
+	atomic_t irq_ack;
+	struct kvm_irq_ack_notifier irq_ack_notifier;
+};
+
+struct kvm_irq_mask_notifier {
+	void (*func)(struct kvm_irq_mask_notifier *, bool);
+	int irq;
+	struct hlist_node link;
+};
+
+struct kthread_work;
+
+typedef void (*kthread_work_func_t)(struct kthread_work *);
+
+struct kthread_worker;
+
+struct kthread_work {
+	struct list_head node;
+	kthread_work_func_t func;
+	struct kthread_worker *worker;
+	int canceling;
+};
+
+struct kvm_pit {
+	struct kvm_io_device dev;
+	struct kvm_io_device speaker_dev;
+	struct kvm *kvm;
+	struct kvm_kpit_state pit_state;
+	int irq_source_id;
+	struct kvm_irq_mask_notifier mask_notifier;
+	struct kthread_worker *worker;
+	struct kthread_work expired;
+};
+
+struct kthread_worker {
+	unsigned int flags;
+	raw_spinlock_t lock;
+	struct list_head work_list;
+	struct list_head delayed_work_list;
+	struct task_struct *task;
+	struct kthread_work *current_work;
+};
+
+struct kvm_timer {
+	struct hrtimer timer;
+	s64 period;
+	ktime_t target_expiration;
+	u32 timer_mode;
+	u32 timer_mode_mask;
+	u64 tscdeadline;
+	u64 expired_tscdeadline;
+	u32 timer_advance_ns;
+	atomic_t pending;
+	bool hv_timer_in_use;
+};
+
+struct kvm_lapic {
+	unsigned long base_address;
+	struct kvm_io_device dev;
+	struct kvm_timer lapic_timer;
+	u32 divide_count;
+	struct kvm_vcpu *vcpu;
+	bool apicv_active;
+	bool sw_enabled;
+	bool irr_pending;
+	bool lvt0_in_nmi_mode;
+	s16 isr_count;
+	int highest_isr_cache;
+	void *regs;
+	gpa_t vapic_addr;
+	struct gfn_to_hva_cache vapic_cache;
+	unsigned long pending_events;
+	unsigned int sipi_vector;
+	int nr_lvt_entries;
+};
+
+struct x86_exception {
+	u8 vector;
+	bool error_code_valid;
+	u16 error_code;
+	bool nested_page_fault;
+	u64 address;
+	u8 async_page_fault;
+};
+
+struct fastop;
+
+typedef void (*fastop_t)(struct fastop *);
+
+enum x86emul_mode {
+	X86EMUL_MODE_REAL = 0,
+	X86EMUL_MODE_VM86 = 1,
+	X86EMUL_MODE_PROT16 = 2,
+	X86EMUL_MODE_PROT32 = 3,
+	X86EMUL_MODE_PROT64 = 4,
+};
+
+typedef unsigned long ulong;
+
+struct segmented_address {
+	ulong ea;
+	unsigned int seg;
+};
+
+typedef u32 sse128_t[4];
+
+struct operand {
+	enum {
+		OP_REG = 0,
+		OP_MEM = 1,
+		OP_MEM_STR = 2,
+		OP_IMM = 3,
+		OP_XMM = 4,
+		OP_MM = 5,
+		OP_NONE = 6,
+	} type;
+	unsigned int bytes;
+	unsigned int count;
+	union {
+		unsigned long orig_val;
+		u64 orig_val64;
+	};
+	union {
+		unsigned long *reg;
+		struct segmented_address mem;
+		unsigned int xmm;
+		unsigned int mm;
+	} addr;
+	long: 64;
+	union {
+		unsigned long val;
+		u64 val64;
+		char valptr[16];
+		sse128_t vec_val;
+		u64 mm_val;
+		void *data;
+	};
+};
+
+struct fetch_cache {
+	u8 data[15];
+	u8 *ptr;
+	u8 *end;
+};
+
+struct read_cache {
+	u8 data[1024];
+	unsigned long pos;
+	unsigned long end;
+};
+
+struct x86_emulate_ops;
+
+struct x86_emulate_ctxt {
+	void *vcpu;
+	const struct x86_emulate_ops *ops;
+	unsigned long eflags;
+	unsigned long eip;
+	enum x86emul_mode mode;
+	int interruptibility;
+	bool perm_ok;
+	bool tf;
+	bool have_exception;
+	struct x86_exception exception;
+	bool gpa_available;
+	gpa_t gpa_val;
+	u8 opcode_len;
+	u8 b;
+	u8 intercept;
+	u8 op_bytes;
+	u8 ad_bytes;
+	union {
+		int (*execute)(struct x86_emulate_ctxt *);
+		fastop_t fop;
+	};
+	int (*check_perm)(struct x86_emulate_ctxt *);
+	bool rip_relative;
+	u8 rex_prefix;
+	u8 lock_prefix;
+	u8 rep_prefix;
+	u16 regs_valid;
+	u16 regs_dirty;
+	u8 modrm;
+	u8 modrm_mod;
+	u8 modrm_reg;
+	u8 modrm_rm;
+	u8 modrm_seg;
+	u8 seg_override;
+	u64 d;
+	unsigned long _eip;
+	struct operand src;
+	struct operand src2;
+	struct operand dst;
+	struct operand memop;
+	unsigned long _regs[16];
+	struct operand *memopp;
+	struct fetch_cache fetch;
+	struct read_cache io_read;
+	struct read_cache mem_read;
+	bool is_branch;
+};
+
+enum x86_intercept_stage {
+	X86_ICTP_NONE = 0,
+	X86_ICPT_PRE_EXCEPT = 1,
+	X86_ICPT_POST_EXCEPT = 2,
+	X86_ICPT_POST_MEMACCESS = 3,
+};
+
+struct desc_ptr;
+
+struct x86_instruction_info;
+
+struct x86_emulate_ops {
+	void (*vm_bugged)(struct x86_emulate_ctxt *);
+	ulong (*read_gpr)(struct x86_emulate_ctxt *, unsigned int);
+	void (*write_gpr)(struct x86_emulate_ctxt *, unsigned int, ulong);
+	int (*read_std)(struct x86_emulate_ctxt *, unsigned long, void *, unsigned int, struct x86_exception *, bool);
+	int (*write_std)(struct x86_emulate_ctxt *, unsigned long, void *, unsigned int, struct x86_exception *, bool);
+	int (*fetch)(struct x86_emulate_ctxt *, unsigned long, void *, unsigned int, struct x86_exception *);
+	int (*read_emulated)(struct x86_emulate_ctxt *, unsigned long, void *, unsigned int, struct x86_exception *);
+	int (*write_emulated)(struct x86_emulate_ctxt *, unsigned long, const void *, unsigned int, struct x86_exception *);
+	int (*cmpxchg_emulated)(struct x86_emulate_ctxt *, unsigned long, const void *, const void *, unsigned int, struct x86_exception *);
+	void (*invlpg)(struct x86_emulate_ctxt *, ulong);
+	int (*pio_in_emulated)(struct x86_emulate_ctxt *, int, unsigned short, void *, unsigned int);
+	int (*pio_out_emulated)(struct x86_emulate_ctxt *, int, unsigned short, const void *, unsigned int);
+	bool (*get_segment)(struct x86_emulate_ctxt *, u16 *, struct desc_struct *, u32 *, int);
+	void (*set_segment)(struct x86_emulate_ctxt *, u16, struct desc_struct *, u32, int);
+	unsigned long (*get_cached_segment_base)(struct x86_emulate_ctxt *, int);
+	void (*get_gdt)(struct x86_emulate_ctxt *, struct desc_ptr *);
+	void (*get_idt)(struct x86_emulate_ctxt *, struct desc_ptr *);
+	void (*set_gdt)(struct x86_emulate_ctxt *, struct desc_ptr *);
+	void (*set_idt)(struct x86_emulate_ctxt *, struct desc_ptr *);
+	ulong (*get_cr)(struct x86_emulate_ctxt *, int);
+	int (*set_cr)(struct x86_emulate_ctxt *, int, ulong);
+	int (*cpl)(struct x86_emulate_ctxt *);
+	void (*get_dr)(struct x86_emulate_ctxt *, int, ulong *);
+	int (*set_dr)(struct x86_emulate_ctxt *, int, ulong);
+	int (*set_msr_with_filter)(struct x86_emulate_ctxt *, u32, u64);
+	int (*get_msr_with_filter)(struct x86_emulate_ctxt *, u32, u64 *);
+	int (*get_msr)(struct x86_emulate_ctxt *, u32, u64 *);
+	int (*check_pmc)(struct x86_emulate_ctxt *, u32);
+	int (*read_pmc)(struct x86_emulate_ctxt *, u32, u64 *);
+	void (*halt)(struct x86_emulate_ctxt *);
+	void (*wbinvd)(struct x86_emulate_ctxt *);
+	int (*fix_hypercall)(struct x86_emulate_ctxt *);
+	int (*intercept)(struct x86_emulate_ctxt *, struct x86_instruction_info *, enum x86_intercept_stage);
+	bool (*get_cpuid)(struct x86_emulate_ctxt *, u32 *, u32 *, u32 *, u32 *, bool);
+	bool (*guest_has_movbe)(struct x86_emulate_ctxt *);
+	bool (*guest_has_fxsr)(struct x86_emulate_ctxt *);
+	bool (*guest_has_rdpid)(struct x86_emulate_ctxt *);
+	void (*set_nmi_mask)(struct x86_emulate_ctxt *, bool);
+	bool (*is_smm)(struct x86_emulate_ctxt *);
+	bool (*is_guest_mode)(struct x86_emulate_ctxt *);
+	int (*leave_smm)(struct x86_emulate_ctxt *);
+	void (*triple_fault)(struct x86_emulate_ctxt *);
+	int (*set_xcr)(struct x86_emulate_ctxt *, u32, u64);
+};
+
+struct desc_ptr {
+	unsigned short size;
+	unsigned long address;
+} __attribute__((packed));
+
+struct x86_instruction_info {
+	u8 intercept;
+	u8 rep_prefix;
+	u8 modrm_mod;
+	u8 modrm_reg;
+	u8 modrm_rm;
+	u64 src_val;
+	u64 dst_val;
+	u8 src_bytes;
+	u8 dst_bytes;
+	u8 ad_bytes;
+	u64 next_rip;
+};
+
+typedef void (*btf_trace_kvm_hypercall)(void *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_kvm_hv_hypercall)(void *, __u16, bool, __u16, __u16, __u16, __u64, __u64);
+
+typedef void (*btf_trace_kvm_hv_hypercall_done)(void *, u64);
+
+typedef void (*btf_trace_kvm_xen_hypercall)(void *, u8, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_kvm_pio)(void *, unsigned int, unsigned int, unsigned int, unsigned int, const void *);
+
+typedef void (*btf_trace_kvm_fast_mmio)(void *, u64);
+
+typedef void (*btf_trace_kvm_cpuid)(void *, unsigned int, unsigned int, unsigned long, unsigned long, unsigned long, unsigned long, bool, bool);
+
+typedef void (*btf_trace_kvm_apic)(void *, unsigned int, unsigned int, u64);
+
+typedef void (*btf_trace_kvm_exit)(void *, struct kvm_vcpu *, u32);
+
+typedef void (*btf_trace_kvm_inj_virq)(void *, unsigned int, bool, bool);
+
+typedef void (*btf_trace_kvm_inj_exception)(void *, unsigned int, bool, unsigned int, bool);
+
+typedef void (*btf_trace_kvm_page_fault)(void *, struct kvm_vcpu *, u64, u64);
+
+typedef void (*btf_trace_kvm_msr)(void *, unsigned int, u32, u64, bool);
+
+typedef void (*btf_trace_kvm_cr)(void *, unsigned int, unsigned int, unsigned long);
+
+typedef void (*btf_trace_kvm_pic_set_irq)(void *, __u8, __u8, __u8, __u8, bool);
+
+typedef void (*btf_trace_kvm_apic_ipi)(void *, __u32, __u32);
+
+typedef void (*btf_trace_kvm_apic_accept_irq)(void *, __u32, __u16, __u16, __u8);
+
+typedef void (*btf_trace_kvm_eoi)(void *, struct kvm_lapic *, int);
+
+typedef void (*btf_trace_kvm_pv_eoi)(void *, struct kvm_lapic *, int);
+
+typedef void (*btf_trace_kvm_nested_vmenter)(void *, __u64, __u64, __u64, __u32, __u32, bool, __u64, __u64, __u32);
+
+typedef void (*btf_trace_kvm_nested_intercepts)(void *, __u16, __u16, __u32, __u32, __u32, __u32);
+
+typedef void (*btf_trace_kvm_nested_vmexit)(void *, struct kvm_vcpu *, u32);
+
+typedef void (*btf_trace_kvm_nested_vmexit_inject)(void *, __u32, __u64, __u64, __u32, __u32, __u32);
+
+typedef void (*btf_trace_kvm_nested_intr_vmexit)(void *, __u64);
+
+typedef void (*btf_trace_kvm_invlpga)(void *, __u64, unsigned int, u64);
+
+typedef void (*btf_trace_kvm_skinit)(void *, __u64, __u32);
+
+typedef void (*btf_trace_kvm_emulate_insn)(void *, struct kvm_vcpu *, __u8);
+
+typedef unsigned long gva_t;
+
+typedef void (*btf_trace_vcpu_match_mmio)(void *, gva_t, gpa_t, bool, bool);
+
+typedef void (*btf_trace_kvm_write_tsc_offset)(void *, unsigned int, __u64, __u64);
+
+typedef void (*btf_trace_kvm_update_master_clock)(void *, bool, unsigned int, bool);
+
+typedef void (*btf_trace_kvm_track_tsc)(void *, unsigned int, unsigned int, unsigned int, bool, unsigned int);
+
+typedef void (*btf_trace_kvm_pml_full)(void *, unsigned int);
+
+typedef void (*btf_trace_kvm_ple_window_update)(void *, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kvm_pvclock_update)(void *, unsigned int, struct pvclock_vcpu_time_info *);
+
+typedef void (*btf_trace_kvm_wait_lapic_expire)(void *, unsigned int, s64);
+
+typedef void (*btf_trace_kvm_smm_transition)(void *, unsigned int, u64, bool);
+
+typedef void (*btf_trace_kvm_pi_irte_update)(void *, unsigned int, unsigned int, unsigned int, unsigned int, u64, bool);
+
+typedef void (*btf_trace_kvm_hv_notify_acked_sint)(void *, int, u32);
+
+typedef void (*btf_trace_kvm_hv_synic_set_irq)(void *, int, u32, int, int);
+
+typedef void (*btf_trace_kvm_hv_synic_send_eoi)(void *, int, int);
+
+typedef void (*btf_trace_kvm_hv_synic_set_msr)(void *, int, u32, u64, bool);
+
+typedef void (*btf_trace_kvm_hv_stimer_set_config)(void *, int, int, u64, bool);
+
+typedef void (*btf_trace_kvm_hv_stimer_set_count)(void *, int, int, u64, bool);
+
+typedef void (*btf_trace_kvm_hv_stimer_start_periodic)(void *, int, int, u64, u64);
+
+typedef void (*btf_trace_kvm_hv_stimer_start_one_shot)(void *, int, int, u64, u64);
+
+typedef void (*btf_trace_kvm_hv_stimer_callback)(void *, int, int);
+
+typedef void (*btf_trace_kvm_hv_stimer_expiration)(void *, int, int, int, int);
+
+typedef void (*btf_trace_kvm_hv_stimer_cleanup)(void *, int, int);
+
+typedef void (*btf_trace_kvm_apicv_inhibit_changed)(void *, int, bool, unsigned long);
+
+typedef void (*btf_trace_kvm_apicv_accept_irq)(void *, __u32, __u16, __u16, __u8);
+
+typedef void (*btf_trace_kvm_avic_incomplete_ipi)(void *, u32, u32, u32, u32, u32);
+
+typedef void (*btf_trace_kvm_avic_unaccelerated_access)(void *, u32, u32, bool, bool, u32);
+
+typedef void (*btf_trace_kvm_avic_ga_log)(void *, u32, u32);
+
+typedef void (*btf_trace_kvm_avic_kick_vcpu_slowpath)(void *, u32, u32, u32);
+
+typedef void (*btf_trace_kvm_avic_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_kvm_hv_timer_state)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kvm_hv_flush_tlb)(void *, u64, u64, u64, bool);
+
+typedef void (*btf_trace_kvm_hv_flush_tlb_ex)(void *, u64, u64, u64, u64, bool);
+
+typedef void (*btf_trace_kvm_hv_send_ipi)(void *, u32, u64);
+
+typedef void (*btf_trace_kvm_hv_send_ipi_ex)(void *, u32, u64, u64);
+
+typedef void (*btf_trace_kvm_pv_tlb_flush)(void *, unsigned int, bool);
+
+typedef void (*btf_trace_kvm_nested_vmenter_failed)(void *, const char *, u32);
+
+typedef void (*btf_trace_kvm_hv_syndbg_set_msr)(void *, int, u32, u32, u64);
+
+typedef void (*btf_trace_kvm_hv_syndbg_get_msr)(void *, int, u32, u32, u64);
+
+struct ghcb;
+
+typedef void (*btf_trace_kvm_vmgexit_enter)(void *, unsigned int, struct ghcb *);
+
+struct ghcb_save_area {
+	u8 reserved_0x0[203];
+	u8 cpl;
+	u8 reserved_0xcc[116];
+	u64 xss;
+	u8 reserved_0x148[24];
+	u64 dr7;
+	u8 reserved_0x168[16];
+	u64 rip;
+	u8 reserved_0x180[88];
+	u64 rsp;
+	u8 reserved_0x1e0[24];
+	u64 rax;
+	u8 reserved_0x200[264];
+	u64 rcx;
+	u64 rdx;
+	u64 rbx;
+	u8 reserved_0x320[8];
+	u64 rbp;
+	u64 rsi;
+	u64 rdi;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
+	u8 reserved_0x380[16];
+	u64 sw_exit_code;
+	u64 sw_exit_info_1;
+	u64 sw_exit_info_2;
+	u64 sw_scratch;
+	u8 reserved_0x3b0[56];
+	u64 xcr0;
+	u8 valid_bitmap[16];
+	u64 x87_state_gpa;
+};
+
+struct ghcb {
+	struct ghcb_save_area save;
+	u8 reserved_save[1016];
+	u8 shared_buffer[2032];
+	u8 reserved_0xff0[10];
+	u16 protocol_version;
+	u32 ghcb_usage;
+};
+
+typedef void (*btf_trace_kvm_vmgexit_exit)(void *, unsigned int, struct ghcb *);
+
+typedef void (*btf_trace_kvm_vmgexit_msr_protocol_enter)(void *, unsigned int, u64);
+
+typedef void (*btf_trace_kvm_vmgexit_msr_protocol_exit)(void *, unsigned int, u64, int);
+
+struct kvm_caps {
+	bool has_tsc_control;
+	u32 max_guest_tsc_khz;
+	u8 tsc_scaling_ratio_frac_bits;
+	u64 max_tsc_scaling_ratio;
+	u64 default_tsc_scaling_ratio;
+	bool has_bus_lock_exit;
+	bool has_notify_vmexit;
+	u64 supported_mce_cap;
+	u64 supported_xcr0;
+	u64 supported_xss;
+	u64 supported_perf_cap;
+};
+
+struct kvm_pit_channel_state {
+	__u32 count;
+	__u16 latched_count;
+	__u8 count_latched;
+	__u8 status_latched;
+	__u8 status;
+	__u8 read_state;
+	__u8 write_state;
+	__u8 write_latch;
+	__u8 rw_mode;
+	__u8 mode;
+	__u8 bcd;
+	__u8 gate;
+	__s64 count_load_time;
+};
+
+struct kvm_pit_state {
+	struct kvm_pit_channel_state channels[3];
+};
+
+struct kvm_pit_state2 {
+	struct kvm_pit_channel_state channels[3];
+	__u32 flags;
+	__u32 reserved[9];
+};
+
+struct kvm_pit_config {
+	__u32 flags;
+	__u32 pad[15];
+};
+
+enum kvm_reg {
+	VCPU_REGS_RAX = 0,
+	VCPU_REGS_RCX = 1,
+	VCPU_REGS_RDX = 2,
+	VCPU_REGS_RBX = 3,
+	VCPU_REGS_RSP = 4,
+	VCPU_REGS_RBP = 5,
+	VCPU_REGS_RSI = 6,
+	VCPU_REGS_RDI = 7,
+	VCPU_REGS_R8 = 8,
+	VCPU_REGS_R9 = 9,
+	VCPU_REGS_R10 = 10,
+	VCPU_REGS_R11 = 11,
+	VCPU_REGS_R12 = 12,
+	VCPU_REGS_R13 = 13,
+	VCPU_REGS_R14 = 14,
+	VCPU_REGS_R15 = 15,
+	VCPU_REGS_RIP = 16,
+	NR_VCPU_REGS = 17,
+	VCPU_EXREG_PDPTR = 17,
+	VCPU_EXREG_CR0 = 18,
+	VCPU_EXREG_CR3 = 19,
+	VCPU_EXREG_CR4 = 20,
+	VCPU_EXREG_RFLAGS = 21,
+	VCPU_EXREG_SEGMENTS = 22,
+	VCPU_EXREG_EXIT_INFO_1 = 23,
+	VCPU_EXREG_EXIT_INFO_2 = 24,
+};
+
+enum exit_fastpath_completion {
+	EXIT_FASTPATH_NONE = 0,
+	EXIT_FASTPATH_REENTER_GUEST = 1,
+	EXIT_FASTPATH_EXIT_HANDLED = 2,
+};
+
+enum kvm_apicv_inhibit {
+	APICV_INHIBIT_REASON_DISABLE = 0,
+	APICV_INHIBIT_REASON_HYPERV = 1,
+	APICV_INHIBIT_REASON_ABSENT = 2,
+	APICV_INHIBIT_REASON_BLOCKIRQ = 3,
+	APICV_INHIBIT_REASON_PHYSICAL_ID_ALIASED = 4,
+	APICV_INHIBIT_REASON_APIC_ID_MODIFIED = 5,
+	APICV_INHIBIT_REASON_APIC_BASE_MODIFIED = 6,
+	APICV_INHIBIT_REASON_NESTED = 7,
+	APICV_INHIBIT_REASON_IRQWIN = 8,
+	APICV_INHIBIT_REASON_PIT_REINJ = 9,
+	APICV_INHIBIT_REASON_SEV = 10,
+	APICV_INHIBIT_REASON_LOGICAL_ID_ALIASED = 11,
+};
+
+struct msr_data;
+
+struct kvm_x86_nested_ops;
+
+union kvm_smram;
+
+struct kvm_enc_region;
+
+struct kvm_msr_entry;
+
+struct kvm_x86_ops {
+	const char *name;
+	int (*check_processor_compatibility)();
+	int (*hardware_enable)();
+	void (*hardware_disable)();
+	void (*hardware_unsetup)();
+	bool (*has_emulated_msr)(struct kvm *, u32);
+	void (*vcpu_after_set_cpuid)(struct kvm_vcpu *);
+	unsigned int vm_size;
+	int (*vm_init)(struct kvm *);
+	void (*vm_destroy)(struct kvm *);
+	int (*vcpu_precreate)(struct kvm *);
+	int (*vcpu_create)(struct kvm_vcpu *);
+	void (*vcpu_free)(struct kvm_vcpu *);
+	void (*vcpu_reset)(struct kvm_vcpu *, bool);
+	void (*prepare_switch_to_guest)(struct kvm_vcpu *);
+	void (*vcpu_load)(struct kvm_vcpu *, int);
+	void (*vcpu_put)(struct kvm_vcpu *);
+	void (*update_exception_bitmap)(struct kvm_vcpu *);
+	int (*get_msr)(struct kvm_vcpu *, struct msr_data *);
+	int (*set_msr)(struct kvm_vcpu *, struct msr_data *);
+	u64 (*get_segment_base)(struct kvm_vcpu *, int);
+	void (*get_segment)(struct kvm_vcpu *, struct kvm_segment *, int);
+	int (*get_cpl)(struct kvm_vcpu *);
+	void (*set_segment)(struct kvm_vcpu *, struct kvm_segment *, int);
+	void (*get_cs_db_l_bits)(struct kvm_vcpu *, int *, int *);
+	bool (*is_valid_cr0)(struct kvm_vcpu *, unsigned long);
+	void (*set_cr0)(struct kvm_vcpu *, unsigned long);
+	void (*post_set_cr3)(struct kvm_vcpu *, unsigned long);
+	bool (*is_valid_cr4)(struct kvm_vcpu *, unsigned long);
+	void (*set_cr4)(struct kvm_vcpu *, unsigned long);
+	int (*set_efer)(struct kvm_vcpu *, u64);
+	void (*get_idt)(struct kvm_vcpu *, struct desc_ptr *);
+	void (*set_idt)(struct kvm_vcpu *, struct desc_ptr *);
+	void (*get_gdt)(struct kvm_vcpu *, struct desc_ptr *);
+	void (*set_gdt)(struct kvm_vcpu *, struct desc_ptr *);
+	void (*sync_dirty_debug_regs)(struct kvm_vcpu *);
+	void (*set_dr7)(struct kvm_vcpu *, unsigned long);
+	void (*cache_reg)(struct kvm_vcpu *, enum kvm_reg);
+	unsigned long (*get_rflags)(struct kvm_vcpu *);
+	void (*set_rflags)(struct kvm_vcpu *, unsigned long);
+	bool (*get_if_flag)(struct kvm_vcpu *);
+	void (*flush_tlb_all)(struct kvm_vcpu *);
+	void (*flush_tlb_current)(struct kvm_vcpu *);
+	int (*flush_remote_tlbs)(struct kvm *);
+	int (*flush_remote_tlbs_range)(struct kvm *, gfn_t, gfn_t);
+	void (*flush_tlb_gva)(struct kvm_vcpu *, gva_t);
+	void (*flush_tlb_guest)(struct kvm_vcpu *);
+	int (*vcpu_pre_run)(struct kvm_vcpu *);
+	enum exit_fastpath_completion (*vcpu_run)(struct kvm_vcpu *);
+	int (*handle_exit)(struct kvm_vcpu *, enum exit_fastpath_completion);
+	int (*skip_emulated_instruction)(struct kvm_vcpu *);
+	void (*update_emulated_instruction)(struct kvm_vcpu *);
+	void (*set_interrupt_shadow)(struct kvm_vcpu *, int);
+	u32 (*get_interrupt_shadow)(struct kvm_vcpu *);
+	void (*patch_hypercall)(struct kvm_vcpu *, unsigned char *);
+	void (*inject_irq)(struct kvm_vcpu *, bool);
+	void (*inject_nmi)(struct kvm_vcpu *);
+	void (*inject_exception)(struct kvm_vcpu *);
+	void (*cancel_injection)(struct kvm_vcpu *);
+	int (*interrupt_allowed)(struct kvm_vcpu *, bool);
+	int (*nmi_allowed)(struct kvm_vcpu *, bool);
+	bool (*get_nmi_mask)(struct kvm_vcpu *);
+	void (*set_nmi_mask)(struct kvm_vcpu *, bool);
+	bool (*is_vnmi_pending)(struct kvm_vcpu *);
+	bool (*set_vnmi_pending)(struct kvm_vcpu *);
+	void (*enable_nmi_window)(struct kvm_vcpu *);
+	void (*enable_irq_window)(struct kvm_vcpu *);
+	void (*update_cr8_intercept)(struct kvm_vcpu *, int, int);
+	bool (*check_apicv_inhibit_reasons)(enum kvm_apicv_inhibit);
+	const unsigned long required_apicv_inhibits;
+	bool allow_apicv_in_x2apic_without_x2apic_virtualization;
+	void (*refresh_apicv_exec_ctrl)(struct kvm_vcpu *);
+	void (*hwapic_irr_update)(struct kvm_vcpu *, int);
+	void (*hwapic_isr_update)(int);
+	bool (*guest_apic_has_interrupt)(struct kvm_vcpu *);
+	void (*load_eoi_exitmap)(struct kvm_vcpu *, u64 *);
+	void (*set_virtual_apic_mode)(struct kvm_vcpu *);
+	void (*set_apic_access_page_addr)(struct kvm_vcpu *);
+	void (*deliver_interrupt)(struct kvm_lapic *, int, int, int);
+	int (*sync_pir_to_irr)(struct kvm_vcpu *);
+	int (*set_tss_addr)(struct kvm *, unsigned int);
+	int (*set_identity_map_addr)(struct kvm *, u64);
+	u8 (*get_mt_mask)(struct kvm_vcpu *, gfn_t, bool);
+	void (*load_mmu_pgd)(struct kvm_vcpu *, hpa_t, int);
+	bool (*has_wbinvd_exit)();
+	u64 (*get_l2_tsc_offset)(struct kvm_vcpu *);
+	u64 (*get_l2_tsc_multiplier)(struct kvm_vcpu *);
+	void (*write_tsc_offset)(struct kvm_vcpu *);
+	void (*write_tsc_multiplier)(struct kvm_vcpu *);
+	void (*get_exit_info)(struct kvm_vcpu *, u32 *, u64 *, u64 *, u32 *, u32 *);
+	int (*check_intercept)(struct kvm_vcpu *, struct x86_instruction_info *, enum x86_intercept_stage, struct x86_exception *);
+	void (*handle_exit_irqoff)(struct kvm_vcpu *);
+	void (*request_immediate_exit)(struct kvm_vcpu *);
+	void (*sched_in)(struct kvm_vcpu *, int);
+	int cpu_dirty_log_size;
+	void (*update_cpu_dirty_logging)(struct kvm_vcpu *);
+	const struct kvm_x86_nested_ops *nested_ops;
+	void (*vcpu_blocking)(struct kvm_vcpu *);
+	void (*vcpu_unblocking)(struct kvm_vcpu *);
+	int (*pi_update_irte)(struct kvm *, unsigned int, uint32_t, bool);
+	void (*pi_start_assignment)(struct kvm *);
+	void (*apicv_pre_state_restore)(struct kvm_vcpu *);
+	void (*apicv_post_state_restore)(struct kvm_vcpu *);
+	bool (*dy_apicv_has_pending_interrupt)(struct kvm_vcpu *);
+	int (*set_hv_timer)(struct kvm_vcpu *, u64, bool *);
+	void (*cancel_hv_timer)(struct kvm_vcpu *);
+	void (*setup_mce)(struct kvm_vcpu *);
+	int (*smi_allowed)(struct kvm_vcpu *, bool);
+	int (*enter_smm)(struct kvm_vcpu *, union kvm_smram *);
+	int (*leave_smm)(struct kvm_vcpu *, const union kvm_smram *);
+	void (*enable_smi_window)(struct kvm_vcpu *);
+	int (*mem_enc_ioctl)(struct kvm *, void __attribute__((btf_type_tag("user"))) *);
+	int (*mem_enc_register_region)(struct kvm *, struct kvm_enc_region *);
+	int (*mem_enc_unregister_region)(struct kvm *, struct kvm_enc_region *);
+	int (*vm_copy_enc_context_from)(struct kvm *, unsigned int);
+	int (*vm_move_enc_context_from)(struct kvm *, unsigned int);
+	void (*guest_memory_reclaimed)(struct kvm *);
+	int (*get_msr_feature)(struct kvm_msr_entry *);
+	bool (*can_emulate_instruction)(struct kvm_vcpu *, int, void *, int);
+	bool (*apic_init_signal_blocked)(struct kvm_vcpu *);
+	int (*enable_l2_tlb_flush)(struct kvm_vcpu *);
+	void (*migrate_timers)(struct kvm_vcpu *);
+	void (*msr_filter_changed)(struct kvm_vcpu *);
+	int (*complete_emulated_msr)(struct kvm_vcpu *, int);
+	void (*vcpu_deliver_sipi_vector)(struct kvm_vcpu *, u8);
+	unsigned long (*vcpu_get_apicv_inhibit_reasons)(struct kvm_vcpu *);
+};
+
+struct msr_data {
+	bool host_initiated;
+	u32 index;
+	u64 data;
+};
+
+struct kvm_nested_state;
+
+struct kvm_x86_nested_ops {
+	void (*leave_nested)(struct kvm_vcpu *);
+	bool (*is_exception_vmexit)(struct kvm_vcpu *, u8, u32);
+	int (*check_events)(struct kvm_vcpu *);
+	bool (*has_events)(struct kvm_vcpu *);
+	void (*triple_fault)(struct kvm_vcpu *);
+	int (*get_state)(struct kvm_vcpu *, struct kvm_nested_state __attribute__((btf_type_tag("user"))) *, unsigned int);
+	int (*set_state)(struct kvm_vcpu *, struct kvm_nested_state __attribute__((btf_type_tag("user"))) *, struct kvm_nested_state *);
+	bool (*get_nested_state_pages)(struct kvm_vcpu *);
+	int (*write_log_dirty)(struct kvm_vcpu *, gpa_t);
+	int (*enable_evmcs)(struct kvm_vcpu *, uint16_t *);
+	uint16_t (*get_evmcs_version)(struct kvm_vcpu *);
+	void (*hv_inject_synthetic_vmexit_post_tlb_flush)(struct kvm_vcpu *);
+};
+
+struct kvm_vmx_nested_state_hdr {
+	__u64 vmxon_pa;
+	__u64 vmcs12_pa;
+	struct {
+		__u16 flags;
+	} smm;
+	__u16 pad;
+	__u32 flags;
+	__u64 preemption_timer_deadline;
+};
+
+struct kvm_svm_nested_state_hdr {
+	__u64 vmcb_pa;
+};
+
+struct kvm_vmx_nested_state_data {
+	__u8 vmcs12[4096];
+	__u8 shadow_vmcs12[4096];
+};
+
+struct kvm_svm_nested_state_data {
+	__u8 vmcb12[4096];
+};
+
+struct kvm_nested_state {
+	__u16 flags;
+	__u16 format;
+	__u32 size;
+	union {
+		struct kvm_vmx_nested_state_hdr vmx;
+		struct kvm_svm_nested_state_hdr svm;
+		__u8 pad[120];
+	} hdr;
+	union {
+		struct {
+			struct {} __empty_vmx;
+			struct kvm_vmx_nested_state_data vmx[0];
+		};
+		struct {
+			struct {} __empty_svm;
+			struct kvm_svm_nested_state_data svm[0];
+		};
+	} data;
+};
+
+struct kvm_smm_seg_state_64 {
+	u16 selector;
+	u16 attributes;
+	u32 limit;
+	u64 base;
+};
+
+struct kvm_smram_state_64 {
+	struct kvm_smm_seg_state_64 es;
+	struct kvm_smm_seg_state_64 cs;
+	struct kvm_smm_seg_state_64 ss;
+	struct kvm_smm_seg_state_64 ds;
+	struct kvm_smm_seg_state_64 fs;
+	struct kvm_smm_seg_state_64 gs;
+	struct kvm_smm_seg_state_64 gdtr;
+	struct kvm_smm_seg_state_64 ldtr;
+	struct kvm_smm_seg_state_64 idtr;
+	struct kvm_smm_seg_state_64 tr;
+	u64 io_restart_rip;
+	u64 io_restart_rcx;
+	u64 io_restart_rsi;
+	u64 io_restart_rdi;
+	u32 io_restart_dword;
+	u32 reserved1;
+	u8 io_inst_restart;
+	u8 auto_hlt_restart;
+	u8 amd_nmi_mask;
+	u8 int_shadow;
+	u32 reserved2;
+	u64 efer;
+	u64 svm_guest_flag;
+	u64 svm_guest_vmcb_gpa;
+	u64 svm_guest_virtual_int;
+	u32 reserved3[3];
+	u32 smm_revison;
+	u32 smbase;
+	u32 reserved4[5];
+	u64 ssp;
+	u64 svm_guest_pat;
+	u64 svm_host_efer;
+	u64 svm_host_cr4;
+	u64 svm_host_cr3;
+	u64 svm_host_cr0;
+	u64 cr4;
+	u64 cr3;
+	u64 cr0;
+	u64 dr7;
+	u64 dr6;
+	u64 rflags;
+	u64 rip;
+	u64 gprs[16];
+};
+
+struct kvm_smm_seg_state_32 {
+	u32 flags;
+	u32 limit;
+	u32 base;
+};
+
+struct kvm_smram_state_32 {
+	u32 reserved1[62];
+	u32 smbase;
+	u32 smm_revision;
+	u16 io_inst_restart;
+	u16 auto_hlt_restart;
+	u32 io_restart_rdi;
+	u32 io_restart_rcx;
+	u32 io_restart_rsi;
+	u32 io_restart_rip;
+	u32 cr4;
+	u16 reserved2;
+	u8 int_shadow;
+	u8 reserved3[17];
+	struct kvm_smm_seg_state_32 ds;
+	struct kvm_smm_seg_state_32 fs;
+	struct kvm_smm_seg_state_32 gs;
+	struct kvm_smm_seg_state_32 idtr;
+	struct kvm_smm_seg_state_32 tr;
+	u32 reserved;
+	struct kvm_smm_seg_state_32 gdtr;
+	struct kvm_smm_seg_state_32 ldtr;
+	struct kvm_smm_seg_state_32 es;
+	struct kvm_smm_seg_state_32 cs;
+	struct kvm_smm_seg_state_32 ss;
+	u32 es_sel;
+	u32 cs_sel;
+	u32 ss_sel;
+	u32 ds_sel;
+	u32 fs_sel;
+	u32 gs_sel;
+	u32 ldtr_sel;
+	u32 tr_sel;
+	u32 dr7;
+	u32 dr6;
+	u32 gprs[8];
+	u32 eip;
+	u32 eflags;
+	u32 cr3;
+	u32 cr0;
+};
+
+union kvm_smram {
+	struct kvm_smram_state_64 smram64;
+	struct kvm_smram_state_32 smram32;
+	u8 bytes[512];
+};
+
+struct kvm_enc_region {
+	__u64 addr;
+	__u64 size;
+};
+
+struct kvm_msr_entry {
+	__u32 index;
+	__u32 reserved;
+	__u64 data;
+};
+
+struct user_return_notifier {
+	void (*on_user_return)(struct user_return_notifier *);
+	struct hlist_node link;
+};
+
+struct kvm_user_return_msr_values {
+	u64 host;
+	u64 curr;
+};
+
+struct kvm_user_return_msrs {
+	struct user_return_notifier urn;
+	bool registered;
+	struct kvm_user_return_msr_values values[16];
+};
+
+struct cpuid_reg {
+	u32 function;
+	u32 index;
+	int reg;
+};
+
+struct pvclock_clock {
+	int vclock_mode;
+	u64 cycle_last;
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	u64 base_cycles;
+	u64 offset;
+};
+
+struct pvclock_gtod_data {
+	seqcount_t seq;
+	struct pvclock_clock clock;
+	struct pvclock_clock raw_clock;
+	ktime_t offs_boot;
+	u64 wall_time_sec;
+};
+
+struct read_write_emulator_ops {
+	int (*read_write_prepare)(struct kvm_vcpu *, void *, int);
+	int (*read_write_emulate)(struct kvm_vcpu *, gpa_t, void *, int);
+	int (*read_write_mmio)(struct kvm_vcpu *, gpa_t, int, void *);
+	int (*read_write_exit_mmio)(struct kvm_vcpu *, gpa_t, void *, int);
+	bool write;
+};
+
+enum lapic_mode {
+	LAPIC_MODE_DISABLED = 0,
+	LAPIC_MODE_INVALID = 1024,
+	LAPIC_MODE_XAPIC = 2048,
+	LAPIC_MODE_X2APIC = 3072,
+};
+
+enum {
+	KVM_DEBUGREG_BP_ENABLED = 1,
+	KVM_DEBUGREG_WONT_EXIT = 2,
+};
+
+enum x86_hypervisor_type {
+	X86_HYPER_NATIVE = 0,
+	X86_HYPER_VMWARE = 1,
+	X86_HYPER_MS_HYPERV = 2,
+	X86_HYPER_XEN_PV = 3,
+	X86_HYPER_XEN_HVM = 4,
+	X86_HYPER_KVM = 5,
+	X86_HYPER_JAILHOUSE = 6,
+	X86_HYPER_ACRN = 7,
+};
+
+enum {
+	VCPU_SREG_ES = 0,
+	VCPU_SREG_CS = 1,
+	VCPU_SREG_SS = 2,
+	VCPU_SREG_DS = 3,
+	VCPU_SREG_FS = 4,
+	VCPU_SREG_GS = 5,
+	VCPU_SREG_TR = 6,
+	VCPU_SREG_LDTR = 7,
+};
+
+enum pg_level {
+	PG_LEVEL_NONE = 0,
+	PG_LEVEL_4K = 1,
+	PG_LEVEL_2M = 2,
+	PG_LEVEL_1G = 3,
+	PG_LEVEL_512G = 4,
+	PG_LEVEL_NUM = 5,
+};
+
+enum irq_remap_cap {
+	IRQ_POSTING_CAP = 0,
+};
+
+enum kvm_only_cpuid_leafs {
+	CPUID_12_EAX = 22,
+	CPUID_7_1_EDX = 23,
+	CPUID_8000_0007_EDX = 24,
+	CPUID_8000_0022_EAX = 25,
+	CPUID_7_2_EDX = 26,
+	NR_KVM_CPU_CAPS = 27,
+	NKVMCAPINTS = 5,
+};
+
+enum cpuid_leafs {
+	CPUID_1_EDX = 0,
+	CPUID_8000_0001_EDX = 1,
+	CPUID_8086_0001_EDX = 2,
+	CPUID_LNX_1 = 3,
+	CPUID_1_ECX = 4,
+	CPUID_C000_0001_EDX = 5,
+	CPUID_8000_0001_ECX = 6,
+	CPUID_LNX_2 = 7,
+	CPUID_LNX_3 = 8,
+	CPUID_7_0_EBX = 9,
+	CPUID_D_1_EAX = 10,
+	CPUID_LNX_4 = 11,
+	CPUID_7_1_EAX = 12,
+	CPUID_8000_0008_EBX = 13,
+	CPUID_6_EAX = 14,
+	CPUID_8000_000A_EDX = 15,
+	CPUID_7_ECX = 16,
+	CPUID_8000_0007_EBX = 17,
+	CPUID_7_EDX = 18,
+	CPUID_8000_001F_EAX = 19,
+	CPUID_8000_0021_EAX = 20,
+	CPUID_LNX_5 = 21,
+	NR_CPUID_WORDS = 22,
+};
+
+enum kvm_governed_features {
+	KVM_GOVERNED_X86_FEATURE_GBPAGES = 0,
+	KVM_GOVERNED_X86_FEATURE_XSAVES = 1,
+	KVM_GOVERNED_X86_FEATURE_VMX = 2,
+	KVM_GOVERNED_X86_FEATURE_NRIPS = 3,
+	KVM_GOVERNED_X86_FEATURE_TSCRATEMSR = 4,
+	KVM_GOVERNED_X86_FEATURE_V_VMSAVE_VMLOAD = 5,
+	KVM_GOVERNED_X86_FEATURE_LBRV = 6,
+	KVM_GOVERNED_X86_FEATURE_PAUSEFILTER = 7,
+	KVM_GOVERNED_X86_FEATURE_PFTHRESHOLD = 8,
+	KVM_GOVERNED_X86_FEATURE_VGIF = 9,
+	KVM_GOVERNED_X86_FEATURE_VNMI = 10,
+	KVM_NR_GOVERNED_FEATURES = 11,
+};
+
+enum hv_tlb_flush_fifos {
+	HV_L1_TLB_FLUSH_FIFO = 0,
+	HV_L2_TLB_FLUSH_FIFO = 1,
+	HV_NR_TLB_FLUSH_FIFOS = 2,
+};
+
+enum tk_offsets {
+	TK_OFFS_REAL = 0,
+	TK_OFFS_BOOT = 1,
+	TK_OFFS_TAI = 2,
+	TK_OFFS_MAX = 3,
+};
+
+enum hk_type {
+	HK_TYPE_TIMER = 0,
+	HK_TYPE_RCU = 1,
+	HK_TYPE_MISC = 2,
+	HK_TYPE_SCHED = 3,
+	HK_TYPE_TICK = 4,
+	HK_TYPE_DOMAIN = 5,
+	HK_TYPE_WQ = 6,
+	HK_TYPE_MANAGED_IRQ = 7,
+	HK_TYPE_KTHREAD = 8,
+	HK_TYPE_MAX = 9,
+};
+
+enum cpufreq_table_sorting {
+	CPUFREQ_TABLE_UNSORTED = 0,
+	CPUFREQ_TABLE_SORTED_ASCENDING = 1,
+	CPUFREQ_TABLE_SORTED_DESCENDING = 2,
+};
+
+enum clocksource_ids {
+	CSID_GENERIC = 0,
+	CSID_ARM_ARCH_COUNTER = 1,
+	CSID_MAX = 2,
+};
+
+enum kvm_intr_type {
+	KVM_HANDLING_IRQ = 1,
+	KVM_HANDLING_NMI = 2,
+};
+
+enum vmx_l1d_flush_state {
+	VMENTER_L1D_FLUSH_AUTO = 0,
+	VMENTER_L1D_FLUSH_NEVER = 1,
+	VMENTER_L1D_FLUSH_COND = 2,
+	VMENTER_L1D_FLUSH_ALWAYS = 3,
+	VMENTER_L1D_FLUSH_EPT_DISABLED = 4,
+	VMENTER_L1D_FLUSH_NOT_REQUIRED = 5,
+};
+
+typedef u64 uint64_t;
+
+struct trace_event_raw_kvm_entry {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	unsigned long rip;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hypercall {
+	struct trace_entry ent;
+	unsigned long nr;
+	unsigned long a0;
+	unsigned long a1;
+	unsigned long a2;
+	unsigned long a3;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_hypercall {
+	struct trace_entry ent;
+	__u16 rep_cnt;
+	__u16 rep_idx;
+	__u64 ingpa;
+	__u64 outgpa;
+	__u16 code;
+	__u16 var_cnt;
+	bool fast;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_hypercall_done {
+	struct trace_entry ent;
+	__u64 result;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_xen_hypercall {
+	struct trace_entry ent;
+	u8 cpl;
+	unsigned long nr;
+	unsigned long a0;
+	unsigned long a1;
+	unsigned long a2;
+	unsigned long a3;
+	unsigned long a4;
+	unsigned long a5;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_pio {
+	struct trace_entry ent;
+	unsigned int rw;
+	unsigned int port;
+	unsigned int size;
+	unsigned int count;
+	unsigned int val;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_fast_mmio {
+	struct trace_entry ent;
+	u64 gpa;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_cpuid {
+	struct trace_entry ent;
+	unsigned int function;
+	unsigned int index;
+	unsigned long rax;
+	unsigned long rbx;
+	unsigned long rcx;
+	unsigned long rdx;
+	bool found;
+	bool used_max_basic;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_apic {
+	struct trace_entry ent;
+	unsigned int rw;
+	unsigned int reg;
+	u64 val;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_exit {
+	struct trace_entry ent;
+	unsigned int exit_reason;
+	unsigned long guest_rip;
+	u32 isa;
+	u64 info1;
+	u64 info2;
+	u32 intr_info;
+	u32 error_code;
+	unsigned int vcpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_inj_virq {
+	struct trace_entry ent;
+	unsigned int vector;
+	bool soft;
+	bool reinjected;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_inj_exception {
+	struct trace_entry ent;
+	u8 exception;
+	u8 has_error;
+	u32 error_code;
+	bool reinjected;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_page_fault {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	unsigned long guest_rip;
+	u64 fault_address;
+	u64 error_code;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_msr {
+	struct trace_entry ent;
+	unsigned int write;
+	u32 ecx;
+	u64 data;
+	u8 exception;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_cr {
+	struct trace_entry ent;
+	unsigned int rw;
+	unsigned int cr;
+	unsigned long val;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_pic_set_irq {
+	struct trace_entry ent;
+	__u8 chip;
+	__u8 pin;
+	__u8 elcr;
+	__u8 imr;
+	bool coalesced;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_apic_ipi {
+	struct trace_entry ent;
+	__u32 icr_low;
+	__u32 dest_id;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_apic_accept_irq {
+	struct trace_entry ent;
+	__u32 apicid;
+	__u16 dm;
+	__u16 tm;
+	__u8 vec;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_eoi {
+	struct trace_entry ent;
+	__u32 apicid;
+	int vector;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_pv_eoi {
+	struct trace_entry ent;
+	__u32 apicid;
+	int vector;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_nested_vmenter {
+	struct trace_entry ent;
+	__u64 rip;
+	__u64 vmcb;
+	__u64 nested_rip;
+	__u32 int_ctl;
+	__u32 event_inj;
+	bool tdp_enabled;
+	__u64 guest_pgd;
+	__u32 isa;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_nested_intercepts {
+	struct trace_entry ent;
+	__u16 cr_read;
+	__u16 cr_write;
+	__u32 exceptions;
+	__u32 intercept1;
+	__u32 intercept2;
+	__u32 intercept3;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_nested_vmexit {
+	struct trace_entry ent;
+	unsigned int exit_reason;
+	unsigned long guest_rip;
+	u32 isa;
+	u64 info1;
+	u64 info2;
+	u32 intr_info;
+	u32 error_code;
+	unsigned int vcpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_nested_vmexit_inject {
+	struct trace_entry ent;
+	__u32 exit_code;
+	__u64 exit_info1;
+	__u64 exit_info2;
+	__u32 exit_int_info;
+	__u32 exit_int_info_err;
+	__u32 isa;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_nested_intr_vmexit {
+	struct trace_entry ent;
+	__u64 rip;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_invlpga {
+	struct trace_entry ent;
+	__u64 rip;
+	unsigned int asid;
+	__u64 address;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_skinit {
+	struct trace_entry ent;
+	__u64 rip;
+	__u32 slb;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_emulate_insn {
+	struct trace_entry ent;
+	__u64 rip;
+	__u32 csbase;
+	__u8 len;
+	__u8 insn[15];
+	__u8 flags;
+	__u8 failed;
+	char __data[0];
+};
+
+struct trace_event_raw_vcpu_match_mmio {
+	struct trace_entry ent;
+	gva_t gva;
+	gpa_t gpa;
+	bool write;
+	bool gpa_match;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_write_tsc_offset {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	__u64 previous_tsc_offset;
+	__u64 next_tsc_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_update_master_clock {
+	struct trace_entry ent;
+	bool use_master_clock;
+	unsigned int host_clock;
+	bool offset_matched;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_track_tsc {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	unsigned int nr_vcpus_matched_tsc;
+	unsigned int online_vcpus;
+	bool use_master_clock;
+	unsigned int host_clock;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_pml_full {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_ple_window_update {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	unsigned int new;
+	unsigned int old;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_pvclock_update {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	__u32 version;
+	__u64 tsc_timestamp;
+	__u64 system_time;
+	__u32 tsc_to_system_mul;
+	__s8 tsc_shift;
+	__u8 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_wait_lapic_expire {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	s64 delta;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_smm_transition {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	u64 smbase;
+	bool entering;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_pi_irte_update {
+	struct trace_entry ent;
+	unsigned int host_irq;
+	unsigned int vcpu_id;
+	unsigned int gsi;
+	unsigned int gvec;
+	u64 pi_desc_addr;
+	bool set;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_notify_acked_sint {
+	struct trace_entry ent;
+	int vcpu_id;
+	u32 sint;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_synic_set_irq {
+	struct trace_entry ent;
+	int vcpu_id;
+	u32 sint;
+	int vector;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_synic_send_eoi {
+	struct trace_entry ent;
+	int vcpu_id;
+	u32 sint;
+	int vector;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_synic_set_msr {
+	struct trace_entry ent;
+	int vcpu_id;
+	u32 msr;
+	u64 data;
+	bool host;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_stimer_set_config {
+	struct trace_entry ent;
+	int vcpu_id;
+	int timer_index;
+	u64 config;
+	bool host;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_stimer_set_count {
+	struct trace_entry ent;
+	int vcpu_id;
+	int timer_index;
+	u64 count;
+	bool host;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_stimer_start_periodic {
+	struct trace_entry ent;
+	int vcpu_id;
+	int timer_index;
+	u64 time_now;
+	u64 exp_time;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_stimer_start_one_shot {
+	struct trace_entry ent;
+	int vcpu_id;
+	int timer_index;
+	u64 time_now;
+	u64 count;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_stimer_callback {
+	struct trace_entry ent;
+	int vcpu_id;
+	int timer_index;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_stimer_expiration {
+	struct trace_entry ent;
+	int vcpu_id;
+	int timer_index;
+	int direct;
+	int msg_send_result;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_stimer_cleanup {
+	struct trace_entry ent;
+	int vcpu_id;
+	int timer_index;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_apicv_inhibit_changed {
+	struct trace_entry ent;
+	int reason;
+	bool set;
+	unsigned long inhibits;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_apicv_accept_irq {
+	struct trace_entry ent;
+	__u32 apicid;
+	__u16 dm;
+	__u16 tm;
+	__u8 vec;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_avic_incomplete_ipi {
+	struct trace_entry ent;
+	u32 vcpu;
+	u32 icrh;
+	u32 icrl;
+	u32 id;
+	u32 index;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_avic_unaccelerated_access {
+	struct trace_entry ent;
+	u32 vcpu;
+	u32 offset;
+	bool ft;
+	bool rw;
+	u32 vec;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_avic_ga_log {
+	struct trace_entry ent;
+	u32 vmid;
+	u32 vcpuid;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_avic_kick_vcpu_slowpath {
+	struct trace_entry ent;
+	u32 icrh;
+	u32 icrl;
+	u32 index;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_avic_doorbell {
+	struct trace_entry ent;
+	u32 vcpuid;
+	u32 apicid;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_timer_state {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	unsigned int hv_timer_in_use;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_flush_tlb {
+	struct trace_entry ent;
+	u64 processor_mask;
+	u64 address_space;
+	u64 flags;
+	bool guest_mode;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_flush_tlb_ex {
+	struct trace_entry ent;
+	u64 valid_bank_mask;
+	u64 format;
+	u64 address_space;
+	u64 flags;
+	bool guest_mode;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_send_ipi {
+	struct trace_entry ent;
+	u32 vector;
+	u64 processor_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_send_ipi_ex {
+	struct trace_entry ent;
+	u32 vector;
+	u64 format;
+	u64 valid_bank_mask;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_pv_tlb_flush {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	bool need_flush_tlb;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_nested_vmenter_failed {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	u32 err;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_syndbg_set_msr {
+	struct trace_entry ent;
+	int vcpu_id;
+	u32 vp_index;
+	u32 msr;
+	u64 data;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_hv_syndbg_get_msr {
+	struct trace_entry ent;
+	int vcpu_id;
+	u32 vp_index;
+	u32 msr;
+	u64 data;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_vmgexit_enter {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	u64 exit_reason;
+	u64 info1;
+	u64 info2;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_vmgexit_exit {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	u64 exit_reason;
+	u64 info1;
+	u64 info2;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_vmgexit_msr_protocol_enter {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	u64 ghcb_gpa;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_vmgexit_msr_protocol_exit {
+	struct trace_entry ent;
+	unsigned int vcpu_id;
+	u64 ghcb_gpa;
+	int result;
+	char __data[0];
+};
+
+struct kvm_steal_time {
+	__u64 steal;
+	__u32 version;
+	__u32 flags;
+	__u8 preempted;
+	__u8 u8_pad[3];
+	__u32 pad[11];
+};
+
+struct __large_struct {
+	unsigned long buf[100];
+};
+
+struct trace_event_data_offsets_kvm_nested_vmenter_failed {
+	u32 msg;
+};
+
+struct kvm_clock_data {
+	__u64 clock;
+	__u32 flags;
+	__u32 pad0;
+	__u64 realtime;
+	__u64 host_tsc;
+	__u32 pad[4];
+};
+
+struct kvm_cpuid2 {
+	__u32 nent;
+	__u32 padding;
+	struct kvm_cpuid_entry2 entries[0];
+};
+
+struct kvm_msrs {
+	__u32 nmsrs;
+	__u32 pad;
+	struct kvm_msr_entry entries[0];
+};
+
+struct kvm_xsave {
+	__u32 region[1024];
+	__u32 extra[0];
+};
+
+struct kvm_debugregs {
+	__u64 db[4];
+	__u64 dr6;
+	__u64 dr7;
+	__u64 flags;
+	__u64 reserved[9];
+};
+
+struct kvm_xcr {
+	__u32 xcr;
+	__u32 reserved;
+	__u64 value;
+};
+
+struct kvm_xcrs {
+	__u32 nr_xcrs;
+	__u32 flags;
+	struct kvm_xcr xcrs[16];
+	__u64 padding[16];
+};
+
+struct kvm_tpr_access_ctl {
+	__u32 enabled;
+	__u32 flags;
+	__u32 reserved[8];
+};
+
+struct kvm_lapic_state {
+	char regs[1024];
+};
+
+struct kvm_cpuid_entry {
+	__u32 function;
+	__u32 eax;
+	__u32 ebx;
+	__u32 ecx;
+	__u32 edx;
+	__u32 padding;
+};
+
+struct kvm_cpuid {
+	__u32 nent;
+	__u32 padding;
+	struct kvm_cpuid_entry entries[0];
+};
+
+struct kvm_x86_mce {
+	__u64 status;
+	__u64 addr;
+	__u64 misc;
+	__u64 mcg_status;
+	__u8 bank;
+	__u8 pad1[7];
+	__u64 pad2[3];
+};
+
+struct kvm_msr_filter_range {
+	__u32 flags;
+	__u32 nmsrs;
+	__u32 base;
+	__u8 *bitmap;
+};
+
+struct kvm_hyperv_eventfd {
+	__u32 conn_id;
+	__s32 fd;
+	__u32 flags;
+	__u32 padding[3];
+};
+
+struct kvm_ioapic_state {
+	__u64 base_address;
+	__u32 ioregsel;
+	__u32 id;
+	__u32 irr;
+	__u32 pad;
+	union {
+		__u64 bits;
+		struct {
+			__u8 vector;
+			__u8 delivery_mode: 3;
+			__u8 dest_mode: 1;
+			__u8 delivery_status: 1;
+			__u8 polarity: 1;
+			__u8 remote_irr: 1;
+			__u8 trig_mode: 1;
+			__u8 mask: 1;
+			__u8 reserve: 7;
+			__u8 reserved[4];
+			__u8 dest_id;
+		} fields;
+	} redirtbl[24];
+};
+
+struct kvm_pmu_ops;
+
+struct kvm_x86_init_ops {
+	int (*hardware_setup)();
+	unsigned int (*handle_intel_pt_intr)();
+	struct kvm_x86_ops *runtime_ops;
+	struct kvm_pmu_ops *pmu_ops;
+};
+
+struct kvm_pmu_ops {
+	bool (*hw_event_available)(struct kvm_pmc *);
+	struct kvm_pmc * (*pmc_idx_to_pmc)(struct kvm_pmu *, int);
+	struct kvm_pmc * (*rdpmc_ecx_to_pmc)(struct kvm_vcpu *, unsigned int, u64 *);
+	struct kvm_pmc * (*msr_idx_to_pmc)(struct kvm_vcpu *, u32);
+	bool (*is_valid_rdpmc_ecx)(struct kvm_vcpu *, unsigned int);
+	bool (*is_valid_msr)(struct kvm_vcpu *, u32);
+	int (*get_msr)(struct kvm_vcpu *, struct msr_data *);
+	int (*set_msr)(struct kvm_vcpu *, struct msr_data *);
+	void (*refresh)(struct kvm_vcpu *);
+	void (*init)(struct kvm_vcpu *);
+	void (*reset)(struct kvm_vcpu *);
+	void (*deliver_pmi)(struct kvm_vcpu *);
+	void (*cleanup)(struct kvm_vcpu *);
+	const u64 EVENTSEL_EVENT;
+	const int MAX_NR_GP_COUNTERS;
+	const int MIN_NR_GP_COUNTERS;
+};
+
+struct clk;
+
+struct cpufreq_cpuinfo {
+	unsigned int max_freq;
+	unsigned int min_freq;
+	unsigned int transition_latency;
+};
+
+struct cpufreq_governor;
+
+struct cpufreq_frequency_table;
+
+struct cpufreq_stats;
+
+struct thermal_cooling_device;
+
+struct cpufreq_policy {
+	cpumask_var_t cpus;
+	cpumask_var_t related_cpus;
+	cpumask_var_t real_cpus;
+	unsigned int shared_type;
+	unsigned int cpu;
+	struct clk *clk;
+	struct cpufreq_cpuinfo cpuinfo;
+	unsigned int min;
+	unsigned int max;
+	unsigned int cur;
+	unsigned int suspend_freq;
+	unsigned int policy;
+	unsigned int last_policy;
+	struct cpufreq_governor *governor;
+	void *governor_data;
+	char last_governor[16];
+	struct work_struct update;
+	struct freq_constraints constraints;
+	struct freq_qos_request *min_freq_req;
+	struct freq_qos_request *max_freq_req;
+	struct cpufreq_frequency_table *freq_table;
+	enum cpufreq_table_sorting freq_table_sorted;
+	struct list_head policy_list;
+	struct kobject kobj;
+	struct completion kobj_unregister;
+	struct rw_semaphore rwsem;
+	bool fast_switch_possible;
+	bool fast_switch_enabled;
+	bool strict_target;
+	bool efficiencies_available;
+	unsigned int transition_delay_us;
+	bool dvfs_possible_from_any_cpu;
+	bool boost_enabled;
+	unsigned int cached_target_freq;
+	unsigned int cached_resolved_idx;
+	bool transition_ongoing;
+	spinlock_t transition_lock;
+	wait_queue_head_t transition_wait;
+	struct task_struct *transition_task;
+	struct cpufreq_stats *stats;
+	void *driver_data;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
+};
+
+struct cpufreq_governor {
+	char name[16];
+	int (*init)(struct cpufreq_policy *);
+	void (*exit)(struct cpufreq_policy *);
+	int (*start)(struct cpufreq_policy *);
+	void (*stop)(struct cpufreq_policy *);
+	void (*limits)(struct cpufreq_policy *);
+	ssize_t (*show_setspeed)(struct cpufreq_policy *, char *);
+	int (*store_setspeed)(struct cpufreq_policy *, unsigned int);
+	struct list_head governor_list;
+	struct module *owner;
+	u8 flags;
+};
+
+struct cpufreq_frequency_table {
+	unsigned int flags;
+	unsigned int driver_data;
+	unsigned int frequency;
+};
+
+struct kvm_clock_pairing {
+	__s64 sec;
+	__s64 nsec;
+	__u64 tsc;
+	__u32 flags;
+	__u32 pad[9];
+};
+
+struct kvm_lapic_irq {
+	u32 vector;
+	u16 delivery_mode;
+	u16 dest_mode;
+	bool level;
+	u16 trig_mode;
+	u32 shorthand;
+	u32 dest_id;
+	bool msi_redir_hint;
+};
+
+typedef enum exit_fastpath_completion fastpath_t;
+
+struct cpufreq_freqs {
+	struct cpufreq_policy *policy;
+	unsigned int old;
+	unsigned int new;
+	u8 flags;
+};
+
+struct clocksource;
+
+struct tk_read_base {
+	struct clocksource *clock;
+	u64 mask;
+	u64 cycle_last;
+	u32 mult;
+	u32 shift;
+	u64 xtime_nsec;
+	ktime_t base;
+	u64 base_real;
+};
+
+struct timekeeper {
+	struct tk_read_base tkr_mono;
+	struct tk_read_base tkr_raw;
+	u64 xtime_sec;
+	unsigned long ktime_sec;
+	struct timespec64 wall_to_monotonic;
+	ktime_t offs_real;
+	ktime_t offs_boot;
+	ktime_t offs_tai;
+	s32 tai_offset;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+	ktime_t next_leap_ktime;
+	u64 raw_sec;
+	struct timespec64 monotonic_to_boot;
+	u64 cycle_interval;
+	u64 xtime_interval;
+	s64 xtime_remainder;
+	u64 raw_interval;
+	u64 ntp_tick;
+	s64 ntp_error;
+	u32 ntp_error_shift;
+	u32 ntp_err_mult;
+	u32 skip_second_overflow;
+};
+
+struct clocksource {
+	u64 (*read)(struct clocksource *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+	u64 max_idle_ns;
+	u32 maxadj;
+	u32 uncertainty_margin;
+	u64 max_cycles;
+	const char *name;
+	struct list_head list;
+	int rating;
+	enum clocksource_ids id;
+	enum vdso_clock_mode vdso_clock_mode;
+	unsigned long flags;
+	int (*enable)(struct clocksource *);
+	void (*disable)(struct clocksource *);
+	void (*suspend)(struct clocksource *);
+	void (*resume)(struct clocksource *);
+	void (*mark_unstable)(struct clocksource *);
+	void (*tick_stable)(struct clocksource *);
+	struct list_head wd_list;
+	u64 cs_last;
+	u64 wd_last;
+	struct module *owner;
+};
+
+struct trace_event_data_offsets_kvm_entry {};
+
+struct trace_event_data_offsets_kvm_hypercall {};
+
+struct trace_event_data_offsets_kvm_hv_hypercall {};
+
+struct trace_event_data_offsets_kvm_hv_hypercall_done {};
+
+struct trace_event_data_offsets_kvm_xen_hypercall {};
+
+struct trace_event_data_offsets_kvm_pio {};
+
+struct trace_event_data_offsets_kvm_fast_mmio {};
+
+struct trace_event_data_offsets_kvm_cpuid {};
+
+struct trace_event_data_offsets_kvm_apic {};
+
+struct trace_event_data_offsets_kvm_exit {};
+
+struct trace_event_data_offsets_kvm_inj_virq {};
+
+struct trace_event_data_offsets_kvm_inj_exception {};
+
+struct trace_event_data_offsets_kvm_page_fault {};
+
+struct trace_event_data_offsets_kvm_msr {};
+
+struct trace_event_data_offsets_kvm_cr {};
+
+struct trace_event_data_offsets_kvm_pic_set_irq {};
+
+struct trace_event_data_offsets_kvm_apic_ipi {};
+
+struct trace_event_data_offsets_kvm_apic_accept_irq {};
+
+struct trace_event_data_offsets_kvm_eoi {};
+
+struct trace_event_data_offsets_kvm_pv_eoi {};
+
+struct trace_event_data_offsets_kvm_nested_vmenter {};
+
+struct trace_event_data_offsets_kvm_nested_intercepts {};
+
+struct trace_event_data_offsets_kvm_nested_vmexit {};
+
+struct trace_event_data_offsets_kvm_nested_vmexit_inject {};
+
+struct trace_event_data_offsets_kvm_nested_intr_vmexit {};
+
+struct trace_event_data_offsets_kvm_invlpga {};
+
+struct trace_event_data_offsets_kvm_skinit {};
+
+struct trace_event_data_offsets_kvm_emulate_insn {};
+
+struct trace_event_data_offsets_vcpu_match_mmio {};
+
+struct trace_event_data_offsets_kvm_write_tsc_offset {};
+
+struct trace_event_data_offsets_kvm_update_master_clock {};
+
+struct trace_event_data_offsets_kvm_track_tsc {};
+
+struct trace_event_data_offsets_kvm_pml_full {};
+
+struct trace_event_data_offsets_kvm_ple_window_update {};
+
+struct trace_event_data_offsets_kvm_pvclock_update {};
+
+struct trace_event_data_offsets_kvm_wait_lapic_expire {};
+
+struct trace_event_data_offsets_kvm_smm_transition {};
+
+struct trace_event_data_offsets_kvm_pi_irte_update {};
+
+struct trace_event_data_offsets_kvm_hv_notify_acked_sint {};
+
+struct trace_event_data_offsets_kvm_hv_synic_set_irq {};
+
+struct trace_event_data_offsets_kvm_hv_synic_send_eoi {};
+
+struct trace_event_data_offsets_kvm_hv_synic_set_msr {};
+
+struct trace_event_data_offsets_kvm_hv_stimer_set_config {};
+
+struct trace_event_data_offsets_kvm_hv_stimer_set_count {};
+
+struct trace_event_data_offsets_kvm_hv_stimer_start_periodic {};
+
+struct trace_event_data_offsets_kvm_hv_stimer_start_one_shot {};
+
+struct trace_event_data_offsets_kvm_hv_stimer_callback {};
+
+struct trace_event_data_offsets_kvm_hv_stimer_expiration {};
+
+struct trace_event_data_offsets_kvm_hv_stimer_cleanup {};
+
+struct trace_event_data_offsets_kvm_apicv_inhibit_changed {};
+
+struct trace_event_data_offsets_kvm_apicv_accept_irq {};
+
+struct trace_event_data_offsets_kvm_avic_incomplete_ipi {};
+
+struct trace_event_data_offsets_kvm_avic_unaccelerated_access {};
+
+struct trace_event_data_offsets_kvm_avic_ga_log {};
+
+struct trace_event_data_offsets_kvm_avic_kick_vcpu_slowpath {};
+
+struct trace_event_data_offsets_kvm_avic_doorbell {};
+
+struct trace_event_data_offsets_kvm_hv_timer_state {};
+
+struct trace_event_data_offsets_kvm_hv_flush_tlb {};
+
+struct trace_event_data_offsets_kvm_hv_flush_tlb_ex {};
+
+struct trace_event_data_offsets_kvm_hv_send_ipi {};
+
+struct trace_event_data_offsets_kvm_hv_send_ipi_ex {};
+
+struct trace_event_data_offsets_kvm_pv_tlb_flush {};
+
+struct trace_event_data_offsets_kvm_hv_syndbg_set_msr {};
+
+struct trace_event_data_offsets_kvm_hv_syndbg_get_msr {};
+
+struct trace_event_data_offsets_kvm_vmgexit_enter {};
+
+struct trace_event_data_offsets_kvm_vmgexit_exit {};
+
+struct trace_event_data_offsets_kvm_vmgexit_msr_protocol_enter {};
+
+struct trace_event_data_offsets_kvm_vmgexit_msr_protocol_exit {};
+
+struct pvclock_wall_clock {
+	u32 version;
+	u32 sec;
+	u32 nsec;
+};
+
+struct kvm_msr_list {
+	__u32 nmsrs;
+	__u32 indices[0];
+};
+
+struct kvm_interrupt {
+	__u32 irq;
+};
+
+struct kvm_vapic_addr {
+	__u64 vapic_addr;
+};
+
+struct kvm_sregs2 {
+	struct kvm_segment cs;
+	struct kvm_segment ds;
+	struct kvm_segment es;
+	struct kvm_segment fs;
+	struct kvm_segment gs;
+	struct kvm_segment ss;
+	struct kvm_segment tr;
+	struct kvm_segment ldt;
+	struct kvm_dtable gdt;
+	struct kvm_dtable idt;
+	__u64 cr0;
+	__u64 cr2;
+	__u64 cr3;
+	__u64 cr4;
+	__u64 cr8;
+	__u64 efer;
+	__u64 apic_base;
+	__u64 flags;
+	__u64 pdptrs[4];
+};
+
+struct kvm_msr_filter_range_compat {
+	__u32 flags;
+	__u32 nmsrs;
+	__u32 base;
+	__u32 bitmap;
+};
+
+struct kvm_msr_filter_compat {
+	__u32 flags;
+	struct kvm_msr_filter_range_compat ranges[16];
+};
+
+struct kvm_msr_filter {
+	__u32 flags;
+	struct kvm_msr_filter_range ranges[16];
+};
+
+struct kvm_reinject_control {
+	__u8 pit_reinject;
+	__u8 reserved[31];
+};
+
+struct kvm_pic_state {
+	__u8 last_irr;
+	__u8 irr;
+	__u8 imr;
+	__u8 isr;
+	__u8 priority_add;
+	__u8 irq_base;
+	__u8 read_reg_select;
+	__u8 poll;
+	__u8 special_mask;
+	__u8 init_state;
+	__u8 auto_eoi;
+	__u8 rotate_on_auto_eoi;
+	__u8 special_fully_nested_mode;
+	__u8 init4;
+	__u8 elcr;
+	__u8 elcr_mask;
+};
+
+struct kvm_irqchip {
+	__u32 chip_id;
+	__u32 pad;
+	union {
+		char dummy[512];
+		struct kvm_pic_state pic;
+		struct kvm_ioapic_state ioapic;
+	} chip;
+};
+
+struct group_dual;
+
+struct gprefix;
+
+struct escape;
+
+struct instr_dual;
+
+struct mode_dual;
+
+struct opcode {
+	u64 flags;
+	u8 intercept;
+	u8 pad[7];
+	union {
+		int (*execute)(struct x86_emulate_ctxt *);
+		const struct opcode *group;
+		const struct group_dual *gdual;
+		const struct gprefix *gprefix;
+		const struct escape *esc;
+		const struct instr_dual *idual;
+		const struct mode_dual *mdual;
+		void (*fastop)(struct fastop *);
+	} u;
+	int (*check_perm)(struct x86_emulate_ctxt *);
+};
+
+struct group_dual {
+	struct opcode mod012[8];
+	struct opcode mod3[8];
+};
+
+struct gprefix {
+	struct opcode pfx_no;
+	struct opcode pfx_66;
+	struct opcode pfx_f2;
+	struct opcode pfx_f3;
+};
+
+struct escape {
+	struct opcode op[8];
+	struct opcode high[64];
+};
+
+struct instr_dual {
+	struct opcode mod012;
+	struct opcode mod3;
+};
+
+struct mode_dual {
+	struct opcode mode32;
+	struct opcode mode64;
+};
+
+enum x86_intercept {
+	x86_intercept_none = 0,
+	x86_intercept_cr_read = 1,
+	x86_intercept_cr_write = 2,
+	x86_intercept_clts = 3,
+	x86_intercept_lmsw = 4,
+	x86_intercept_smsw = 5,
+	x86_intercept_dr_read = 6,
+	x86_intercept_dr_write = 7,
+	x86_intercept_lidt = 8,
+	x86_intercept_sidt = 9,
+	x86_intercept_lgdt = 10,
+	x86_intercept_sgdt = 11,
+	x86_intercept_lldt = 12,
+	x86_intercept_sldt = 13,
+	x86_intercept_ltr = 14,
+	x86_intercept_str = 15,
+	x86_intercept_rdtsc = 16,
+	x86_intercept_rdpmc = 17,
+	x86_intercept_pushf = 18,
+	x86_intercept_popf = 19,
+	x86_intercept_cpuid = 20,
+	x86_intercept_rsm = 21,
+	x86_intercept_iret = 22,
+	x86_intercept_intn = 23,
+	x86_intercept_invd = 24,
+	x86_intercept_pause = 25,
+	x86_intercept_hlt = 26,
+	x86_intercept_invlpg = 27,
+	x86_intercept_invlpga = 28,
+	x86_intercept_vmrun = 29,
+	x86_intercept_vmload = 30,
+	x86_intercept_vmsave = 31,
+	x86_intercept_vmmcall = 32,
+	x86_intercept_stgi = 33,
+	x86_intercept_clgi = 34,
+	x86_intercept_skinit = 35,
+	x86_intercept_rdtscp = 36,
+	x86_intercept_rdpid = 37,
+	x86_intercept_icebp = 38,
+	x86_intercept_wbinvd = 39,
+	x86_intercept_monitor = 40,
+	x86_intercept_mwait = 41,
+	x86_intercept_rdmsr = 42,
+	x86_intercept_wrmsr = 43,
+	x86_intercept_in = 44,
+	x86_intercept_ins = 45,
+	x86_intercept_out = 46,
+	x86_intercept_outs = 47,
+	x86_intercept_xsetbv = 48,
+	nr_x86_intercepts = 49,
+};
+
+enum x86_transfer_type {
+	X86_TRANSFER_NONE = 0,
+	X86_TRANSFER_CALL_JMP = 1,
+	X86_TRANSFER_RET = 2,
+	X86_TRANSFER_TASK_SWITCH = 3,
+};
+
+enum {
+	TASK_SWITCH_CALL = 0,
+	TASK_SWITCH_IRET = 1,
+	TASK_SWITCH_JMP = 2,
+	TASK_SWITCH_GATE = 3,
+};
+
+struct tss_segment_32 {
+	u32 prev_task_link;
+	u32 esp0;
+	u32 ss0;
+	u32 esp1;
+	u32 ss1;
+	u32 esp2;
+	u32 ss2;
+	u32 cr3;
+	u32 eip;
+	u32 eflags;
+	u32 eax;
+	u32 ecx;
+	u32 edx;
+	u32 ebx;
+	u32 esp;
+	u32 ebp;
+	u32 esi;
+	u32 edi;
+	u32 es;
+	u32 cs;
+	u32 ss;
+	u32 ds;
+	u32 fs;
+	u32 gs;
+	u32 ldt_selector;
+	u16 t;
+	u16 io_map;
+};
+
+struct tss_segment_16 {
+	u16 prev_task_link;
+	u16 sp0;
+	u16 ss0;
+	u16 sp1;
+	u16 ss1;
+	u16 sp2;
+	u16 ss2;
+	u16 ip;
+	u16 flag;
+	u16 ax;
+	u16 cx;
+	u16 dx;
+	u16 bx;
+	u16 sp;
+	u16 bp;
+	u16 si;
+	u16 di;
+	u16 es;
+	u16 cs;
+	u16 ss;
+	u16 ds;
+	u16 ldt;
+};
+
+struct static_key_false_deferred {
+	struct static_key_false key;
+	unsigned long timeout;
+	struct delayed_work work;
+};
+
+enum {
+	CLEAN = 0,
+	UPDATE_IN_PROGRESS = 1,
+	DIRTY = 2,
+};
+
+enum lapic_lvt_entry {
+	LVT_TIMER = 0,
+	LVT_THERMAL_MONITOR = 1,
+	LVT_PERFORMANCE_COUNTER = 2,
+	LVT_LINT0 = 3,
+	LVT_LINT1 = 4,
+	LVT_ERROR = 5,
+	LVT_CMCI = 6,
+	KVM_APIC_MAX_NR_LVT_ENTRIES = 7,
+};
+
+typedef void (*rcu_callback_t)(struct callback_head *);
+
+enum sgx_miscselect {
+	SGX_MISC_EXINFO = 1,
+};
+
+enum sgx_attribute {
+	SGX_ATTR_INIT = 1,
+	SGX_ATTR_DEBUG = 2,
+	SGX_ATTR_MODE64BIT = 4,
+	SGX_ATTR_PROVISIONKEY = 16,
+	SGX_ATTR_EINITTOKENKEY = 32,
+	SGX_ATTR_KSS = 128,
+	SGX_ATTR_ASYNC_EXIT_NOTIFY = 1024,
+};
+
+struct kvm_cpuid_array {
+	struct kvm_cpuid_entry2 *entries;
+	int maxnent;
+	int nent;
+};
+
+typedef void (*swap_func_t)(void *, void *, int);
+
+struct kvm_pmu_event_filter {
+	__u32 action;
+	__u32 nevents;
+	__u32 fixed_counter_bitmap;
+	__u32 flags;
+	__u32 pad[4];
+	__u64 events[0];
+};
+
+struct fixed_mtrr_segment {
+	u64 start;
+	u64 end;
+	int range_shift;
+	int range_start;
+};
+
+struct mtrr_iter {
+	struct kvm_mtrr *mtrr_state;
+	u64 start;
+	u64 end;
+	int mem_type;
+	bool mtrr_disabled;
+	bool partial_map;
+	union {
+		struct {
+			int index;
+			int seg;
+		};
+		struct {
+			struct kvm_mtrr_range *range;
+			u64 start_max;
+		};
+	};
+	bool fixed;
+};
+
+enum hv_message_type {
+	HVMSG_NONE = 0,
+	HVMSG_UNMAPPED_GPA = 2147483648,
+	HVMSG_GPA_INTERCEPT = 2147483649,
+	HVMSG_TIMER_EXPIRED = 2147483664,
+	HVMSG_INVALID_VP_REGISTER_VALUE = 2147483680,
+	HVMSG_UNRECOVERABLE_EXCEPTION = 2147483681,
+	HVMSG_UNSUPPORTED_FEATURE = 2147483682,
+	HVMSG_EVENTLOG_BUFFERCOMPLETE = 2147483712,
+	HVMSG_X64_IOPORT_INTERCEPT = 2147549184,
+	HVMSG_X64_MSR_INTERCEPT = 2147549185,
+	HVMSG_X64_CPUID_INTERCEPT = 2147549186,
+	HVMSG_X64_EXCEPTION_INTERCEPT = 2147549187,
+	HVMSG_X64_APIC_EOI = 2147549188,
+	HVMSG_X64_LEGACY_FP_ERROR = 2147549189,
+};
+
+enum HV_GENERIC_SET_FORMAT {
+	HV_GENERIC_SET_SPARSE_4K = 0,
+	HV_GENERIC_SET_ALL = 1,
+};
+
+struct hv_timer_message_payload {
+	__u32 timer_index;
+	__u32 reserved;
+	__u64 expiration_time;
+	__u64 delivery_time;
+};
+
+struct kvm_hv_hcall {
+	u64 param;
+	u64 ingpa;
+	u64 outgpa;
+	u16 code;
+	u16 var_cnt;
+	u16 rep_cnt;
+	u16 rep_idx;
+	bool fast;
+	bool rep;
+	long: 64;
+	sse128_t xmm[6];
+	union {
+		gpa_t data_offset;
+		int consumed_xmm_halves;
+	};
+	long: 64;
+};
+
+struct hv_vpset {
+	u64 format;
+	u64 valid_bank_mask;
+	u64 bank_contents[0];
+};
+
+struct hv_send_ipi_ex {
+	u32 vector;
+	u32 reserved;
+	struct hv_vpset vp_set;
+};
+
+struct hv_send_ipi {
+	u32 vector;
+	u32 reserved;
+	u64 cpu_mask;
+};
+
+struct hv_tlb_flush_ex {
+	u64 address_space;
+	u64 flags;
+	struct hv_vpset hv_vp_set;
+	u64 gva_list[0];
+};
+
+struct hv_tlb_flush {
+	u64 address_space;
+	u64 flags;
+	u64 processor_mask;
+	u64 gva_list[0];
+};
+
+struct kvm_page_fault {
+	const gpa_t addr;
+	const u32 error_code;
+	const bool prefetch;
+	const bool exec;
+	const bool write;
+	const bool present;
+	const bool rsvd;
+	const bool user;
+	const bool is_tdp;
+	const bool nx_huge_page_workaround_enabled;
+	bool huge_page_disallowed;
+	u8 max_level;
+	u8 req_level;
+	u8 goal_level;
+	gfn_t gfn;
+	struct kvm_memory_slot *slot;
+	unsigned long mmu_seq;
+	kvm_pfn_t pfn;
+	hva_t hva;
+	bool map_writable;
+	bool write_fault_to_shadow_pgtable;
+};
+
+typedef u64 __attribute__((btf_type_tag("rcu"))) *tdp_ptep_t;
+
+struct kvm_mmu_page {
+	struct list_head link;
+	struct hlist_node hash_link;
+	bool tdp_mmu_page;
+	bool unsync;
+	union {
+		u8 mmu_valid_gen;
+		bool tdp_mmu_scheduled_root_to_zap;
+	};
+	bool nx_huge_page_disallowed;
+	union kvm_mmu_page_role role;
+	gfn_t gfn;
+	u64 *spt;
+	u64 *shadowed_translation;
+	union {
+		int root_count;
+		refcount_t tdp_mmu_root_count;
+	};
+	unsigned int unsync_children;
+	union {
+		struct kvm_rmap_head parent_ptes;
+		tdp_ptep_t ptep;
+	};
+	unsigned long unsync_child_bitmap[8];
+	struct list_head possible_nx_huge_page_link;
+	atomic_t write_flooding_count;
+	struct callback_head callback_head;
+};
+
+typedef void (*btf_trace_kvm_mmu_pagetable_walk)(void *, u64, u32);
+
+typedef void (*btf_trace_kvm_mmu_paging_element)(void *, u64, int);
+
+typedef void (*btf_trace_kvm_mmu_set_accessed_bit)(void *, unsigned long, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kvm_mmu_set_dirty_bit)(void *, unsigned long, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kvm_mmu_walker_error)(void *, u32);
+
+typedef void (*btf_trace_kvm_mmu_get_page)(void *, struct kvm_mmu_page *, bool);
+
+typedef void (*btf_trace_kvm_mmu_sync_page)(void *, struct kvm_mmu_page *);
+
+typedef void (*btf_trace_kvm_mmu_unsync_page)(void *, struct kvm_mmu_page *);
+
+typedef void (*btf_trace_kvm_mmu_prepare_zap_page)(void *, struct kvm_mmu_page *);
+
+typedef void (*btf_trace_mark_mmio_spte)(void *, u64 *, gfn_t, u64);
+
+typedef void (*btf_trace_handle_mmio_page_fault)(void *, u64, gfn_t, unsigned int);
+
+typedef void (*btf_trace_fast_page_fault)(void *, struct kvm_vcpu *, struct kvm_page_fault *, u64 *, u64, int);
+
+typedef void (*btf_trace_kvm_mmu_zap_all_fast)(void *, struct kvm *);
+
+typedef void (*btf_trace_check_mmio_spte)(void *, u64, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kvm_mmu_set_spte)(void *, int, gfn_t, u64 *);
+
+typedef void (*btf_trace_kvm_mmu_spte_requested)(void *, struct kvm_page_fault *);
+
+typedef void (*btf_trace_kvm_tdp_mmu_spte_changed)(void *, int, gfn_t, int, u64, u64);
+
+typedef void (*btf_trace_kvm_mmu_split_huge_page)(void *, u64, u64, int, int);
+
+typedef unsigned int uint;
+
+enum {
+	RET_PF_CONTINUE = 0,
+	RET_PF_RETRY = 1,
+	RET_PF_EMULATE = 2,
+	RET_PF_INVALID = 3,
+	RET_PF_FIXED = 4,
+	RET_PF_SPURIOUS = 5,
+};
+
+enum node_stat_item {
+	NR_LRU_BASE = 0,
+	NR_INACTIVE_ANON = 0,
+	NR_ACTIVE_ANON = 1,
+	NR_INACTIVE_FILE = 2,
+	NR_ACTIVE_FILE = 3,
+	NR_UNEVICTABLE = 4,
+	NR_SLAB_RECLAIMABLE_B = 5,
+	NR_SLAB_UNRECLAIMABLE_B = 6,
+	NR_ISOLATED_ANON = 7,
+	NR_ISOLATED_FILE = 8,
+	WORKINGSET_NODES = 9,
+	WORKINGSET_REFAULT_BASE = 10,
+	WORKINGSET_REFAULT_ANON = 10,
+	WORKINGSET_REFAULT_FILE = 11,
+	WORKINGSET_ACTIVATE_BASE = 12,
+	WORKINGSET_ACTIVATE_ANON = 12,
+	WORKINGSET_ACTIVATE_FILE = 13,
+	WORKINGSET_RESTORE_BASE = 14,
+	WORKINGSET_RESTORE_ANON = 14,
+	WORKINGSET_RESTORE_FILE = 15,
+	WORKINGSET_NODERECLAIM = 16,
+	NR_ANON_MAPPED = 17,
+	NR_FILE_MAPPED = 18,
+	NR_FILE_PAGES = 19,
+	NR_FILE_DIRTY = 20,
+	NR_WRITEBACK = 21,
+	NR_WRITEBACK_TEMP = 22,
+	NR_SHMEM = 23,
+	NR_SHMEM_THPS = 24,
+	NR_SHMEM_PMDMAPPED = 25,
+	NR_FILE_THPS = 26,
+	NR_FILE_PMDMAPPED = 27,
+	NR_ANON_THPS = 28,
+	NR_VMSCAN_WRITE = 29,
+	NR_VMSCAN_IMMEDIATE = 30,
+	NR_DIRTIED = 31,
+	NR_WRITTEN = 32,
+	NR_THROTTLED_WRITTEN = 33,
+	NR_KERNEL_MISC_RECLAIMABLE = 34,
+	NR_FOLL_PIN_ACQUIRED = 35,
+	NR_FOLL_PIN_RELEASED = 36,
+	NR_KERNEL_STACK_KB = 37,
+	NR_PAGETABLE = 38,
+	NR_SECONDARY_PAGETABLE = 39,
+	NR_SWAPCACHE = 40,
+	NR_VM_NODE_STAT_ITEMS = 41,
+};
+
+struct pte_list_desc {
+	struct pte_list_desc *more;
+	u32 spte_count;
+	u32 tail_count;
+	u64 *sptes[14];
+};
+
+struct trace_event_raw_kvm_mmu_pagetable_walk {
+	struct trace_entry ent;
+	__u64 addr;
+	__u32 pferr;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmu_paging_element {
+	struct trace_entry ent;
+	__u64 pte;
+	__u32 level;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmu_set_bit_class {
+	struct trace_entry ent;
+	__u64 gpa;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmu_walker_error {
+	struct trace_entry ent;
+	__u32 pferr;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmu_get_page {
+	struct trace_entry ent;
+	__u8 mmu_valid_gen;
+	__u64 gfn;
+	__u32 role;
+	__u32 root_count;
+	bool unsync;
+	bool created;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmu_page_class {
+	struct trace_entry ent;
+	__u8 mmu_valid_gen;
+	__u64 gfn;
+	__u32 role;
+	__u32 root_count;
+	bool unsync;
+	char __data[0];
+};
+
+struct trace_event_raw_mark_mmio_spte {
+	struct trace_entry ent;
+	void *sptep;
+	gfn_t gfn;
+	unsigned int access;
+	unsigned int gen;
+	char __data[0];
+};
+
+struct trace_event_raw_handle_mmio_page_fault {
+	struct trace_entry ent;
+	u64 addr;
+	gfn_t gfn;
+	unsigned int access;
+	char __data[0];
+};
+
+struct trace_event_raw_fast_page_fault {
+	struct trace_entry ent;
+	int vcpu_id;
+	gpa_t cr2_or_gpa;
+	u32 error_code;
+	u64 *sptep;
+	u64 old_spte;
+	u64 new_spte;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmu_zap_all_fast {
+	struct trace_entry ent;
+	__u8 mmu_valid_gen;
+	unsigned int mmu_used_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_check_mmio_spte {
+	struct trace_entry ent;
+	unsigned int kvm_gen;
+	unsigned int spte_gen;
+	u64 spte;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmu_set_spte {
+	struct trace_entry ent;
+	u64 gfn;
+	u64 spte;
+	u64 sptep;
+	u8 level;
+	bool r;
+	bool x;
+	signed char u;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmu_spte_requested {
+	struct trace_entry ent;
+	u64 gfn;
+	u64 pfn;
+	u8 level;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_tdp_mmu_spte_changed {
+	struct trace_entry ent;
+	u64 gfn;
+	u64 old_spte;
+	u64 new_spte;
+	u8 level;
+	u8 as_id;
+	char __data[0];
+};
+
+struct trace_event_raw_kvm_mmu_split_huge_page {
+	struct trace_entry ent;
+	u64 gfn;
+	u64 spte;
+	int level;
+	int errno;
+	char __data[0];
+};
+
+struct rmap_iterator {
+	struct pte_list_desc *desc;
+	int pos;
+};
+
+typedef bool (*rmap_handler_t)(struct kvm *, struct kvm_rmap_head *, struct kvm_memory_slot *, gfn_t, int, pte_t);
+
+struct slot_rmap_walk_iterator {
+	const struct kvm_memory_slot *slot;
+	gfn_t start_gfn;
+	gfn_t end_gfn;
+	int start_level;
+	int end_level;
+	gfn_t gfn;
+	struct kvm_rmap_head *rmap;
+	int level;
+	struct kvm_rmap_head *end_rmap;
+};
+
+struct mmu_page_and_offset {
+	struct kvm_mmu_page *sp;
+	unsigned int idx;
+};
+
+struct kvm_mmu_pages {
+	struct mmu_page_and_offset page[16];
+	unsigned int nr;
+};
+
+struct mmu_page_path {
+	struct kvm_mmu_page *parent[5];
+	unsigned int idx[5];
+};
+
+struct kvm_mmu_role_regs {
+	const unsigned long cr0;
+	const unsigned long cr4;
+	const u64 efer;
+};
+
+struct guest_walkerEPT {
+	int level;
+	unsigned int max_level;
+	gfn_t table_gfn[5];
+	u64 ptes[5];
+	u64 prefetch_ptes[8];
+	gpa_t pte_gpa[5];
+	u64 __attribute__((btf_type_tag("user"))) *ptep_user[5];
+	bool pte_writable[5];
+	unsigned int pt_access[5];
+	unsigned int pte_access;
+	gfn_t gfn;
+	struct x86_exception fault;
+};
+
+struct shadow_page_caches {
+	struct kvm_mmu_memory_cache *page_header_cache;
+	struct kvm_mmu_memory_cache *shadow_page_cache;
+	struct kvm_mmu_memory_cache *shadowed_info_cache;
+};
+
+struct kvm_shadow_walk_iterator {
+	u64 addr;
+	hpa_t shadow_addr;
+	u64 *sptep;
+	int level;
+	unsigned int index;
+};
+
+typedef bool (*slot_rmaps_handler)(struct kvm *, struct kvm_rmap_head *, const struct kvm_memory_slot *);
+
+struct guest_walker64 {
+	int level;
+	unsigned int max_level;
+	gfn_t table_gfn[5];
+	u64 ptes[5];
+	u64 prefetch_ptes[8];
+	gpa_t pte_gpa[5];
+	u64 __attribute__((btf_type_tag("user"))) *ptep_user[5];
+	bool pte_writable[5];
+	unsigned int pt_access[5];
+	unsigned int pte_access;
+	gfn_t gfn;
+	struct x86_exception fault;
+};
+
+struct guest_walker32 {
+	int level;
+	unsigned int max_level;
+	gfn_t table_gfn[2];
+	u32 ptes[2];
+	u32 prefetch_ptes[8];
+	gpa_t pte_gpa[2];
+	u32 __attribute__((btf_type_tag("user"))) *ptep_user[2];
+	bool pte_writable[2];
+	unsigned int pt_access[2];
+	unsigned int pte_access;
+	gfn_t gfn;
+	struct x86_exception fault;
+};
+
+struct trace_event_data_offsets_kvm_mmu_pagetable_walk {};
+
+struct trace_event_data_offsets_kvm_mmu_paging_element {};
+
+struct trace_event_data_offsets_kvm_mmu_set_bit_class {};
+
+struct trace_event_data_offsets_kvm_mmu_walker_error {};
+
+struct trace_event_data_offsets_kvm_mmu_get_page {};
+
+struct trace_event_data_offsets_kvm_mmu_page_class {};
+
+struct trace_event_data_offsets_mark_mmio_spte {};
+
+struct trace_event_data_offsets_handle_mmio_page_fault {};
+
+struct trace_event_data_offsets_fast_page_fault {};
+
+struct trace_event_data_offsets_kvm_mmu_zap_all_fast {};
+
+struct trace_event_data_offsets_check_mmio_spte {};
+
+struct trace_event_data_offsets_kvm_mmu_set_spte {};
+
+struct trace_event_data_offsets_kvm_mmu_spte_requested {};
+
+struct trace_event_data_offsets_kvm_tdp_mmu_spte_changed {};
+
+struct trace_event_data_offsets_kvm_mmu_split_huge_page {};
+
+enum e820_type {
+	E820_TYPE_RAM = 1,
+	E820_TYPE_RESERVED = 2,
+	E820_TYPE_ACPI = 3,
+	E820_TYPE_NVS = 4,
+	E820_TYPE_UNUSABLE = 5,
+	E820_TYPE_PMEM = 7,
+	E820_TYPE_PRAM = 12,
+	E820_TYPE_SOFT_RESERVED = 4026531839,
+	E820_TYPE_RESERVED_KERN = 128,
+};
+
+struct tdp_iter {
+	gfn_t next_last_level_gfn;
+	gfn_t yielded_gfn;
+	tdp_ptep_t pt_path[5];
+	tdp_ptep_t sptep;
+	gfn_t gfn;
+	int root_level;
+	int min_level;
+	int level;
+	int as_id;
+	u64 old_spte;
+	bool valid;
+	bool yielded;
+};
+
+typedef bool (*tdp_handler_t)(struct kvm *, struct tdp_iter *, struct kvm_gfn_range *);
+
+struct vmcs_hdr {
+	u32 revision_id: 31;
+	u32 shadow_vmcs: 1;
+};
+
+struct vmcs {
+	struct vmcs_hdr hdr;
+	u32 abort;
+	char data[0];
+};
+
+struct nested_vmx_msrs {
+	u32 procbased_ctls_low;
+	u32 procbased_ctls_high;
+	u32 secondary_ctls_low;
+	u32 secondary_ctls_high;
+	u32 pinbased_ctls_low;
+	u32 pinbased_ctls_high;
+	u32 exit_ctls_low;
+	u32 exit_ctls_high;
+	u32 entry_ctls_low;
+	u32 entry_ctls_high;
+	u32 misc_low;
+	u32 misc_high;
+	u32 ept_caps;
+	u32 vpid_caps;
+	u64 basic;
+	u64 cr0_fixed0;
+	u64 cr0_fixed1;
+	u64 cr4_fixed0;
+	u64 cr4_fixed1;
+	u64 vmcs_enum;
+	u64 vmfunc_controls;
+};
+
+struct vmcs_config {
+	int size;
+	u32 basic_cap;
+	u32 revision_id;
+	u32 pin_based_exec_ctrl;
+	u32 cpu_based_exec_ctrl;
+	u32 cpu_based_2nd_exec_ctrl;
+	u64 cpu_based_3rd_exec_ctrl;
+	u32 vmexit_ctrl;
+	u32 vmentry_ctrl;
+	u64 misc;
+	struct nested_vmx_msrs nested;
+};
+
+struct vmx_capability {
+	u32 ept;
+	u32 vpid;
+};
+
+struct kvm_vmx_segment_field {
+	unsigned int selector;
+	unsigned int base;
+	unsigned int limit;
+	unsigned int ar_bytes;
+};
+
+enum vmcs_field {
+	VIRTUAL_PROCESSOR_ID = 0,
+	POSTED_INTR_NV = 2,
+	LAST_PID_POINTER_INDEX = 8,
+	GUEST_ES_SELECTOR = 2048,
+	GUEST_CS_SELECTOR = 2050,
+	GUEST_SS_SELECTOR = 2052,
+	GUEST_DS_SELECTOR = 2054,
+	GUEST_FS_SELECTOR = 2056,
+	GUEST_GS_SELECTOR = 2058,
+	GUEST_LDTR_SELECTOR = 2060,
+	GUEST_TR_SELECTOR = 2062,
+	GUEST_INTR_STATUS = 2064,
+	GUEST_PML_INDEX = 2066,
+	HOST_ES_SELECTOR = 3072,
+	HOST_CS_SELECTOR = 3074,
+	HOST_SS_SELECTOR = 3076,
+	HOST_DS_SELECTOR = 3078,
+	HOST_FS_SELECTOR = 3080,
+	HOST_GS_SELECTOR = 3082,
+	HOST_TR_SELECTOR = 3084,
+	IO_BITMAP_A = 8192,
+	IO_BITMAP_A_HIGH = 8193,
+	IO_BITMAP_B = 8194,
+	IO_BITMAP_B_HIGH = 8195,
+	MSR_BITMAP = 8196,
+	MSR_BITMAP_HIGH = 8197,
+	VM_EXIT_MSR_STORE_ADDR = 8198,
+	VM_EXIT_MSR_STORE_ADDR_HIGH = 8199,
+	VM_EXIT_MSR_LOAD_ADDR = 8200,
+	VM_EXIT_MSR_LOAD_ADDR_HIGH = 8201,
+	VM_ENTRY_MSR_LOAD_ADDR = 8202,
+	VM_ENTRY_MSR_LOAD_ADDR_HIGH = 8203,
+	PML_ADDRESS = 8206,
+	PML_ADDRESS_HIGH = 8207,
+	TSC_OFFSET = 8208,
+	TSC_OFFSET_HIGH = 8209,
+	VIRTUAL_APIC_PAGE_ADDR = 8210,
+	VIRTUAL_APIC_PAGE_ADDR_HIGH = 8211,
+	APIC_ACCESS_ADDR = 8212,
+	APIC_ACCESS_ADDR_HIGH = 8213,
+	POSTED_INTR_DESC_ADDR = 8214,
+	POSTED_INTR_DESC_ADDR_HIGH = 8215,
+	VM_FUNCTION_CONTROL = 8216,
+	VM_FUNCTION_CONTROL_HIGH = 8217,
+	EPT_POINTER = 8218,
+	EPT_POINTER_HIGH = 8219,
+	EOI_EXIT_BITMAP0 = 8220,
+	EOI_EXIT_BITMAP0_HIGH = 8221,
+	EOI_EXIT_BITMAP1 = 8222,
+	EOI_EXIT_BITMAP1_HIGH = 8223,
+	EOI_EXIT_BITMAP2 = 8224,
+	EOI_EXIT_BITMAP2_HIGH = 8225,
+	EOI_EXIT_BITMAP3 = 8226,
+	EOI_EXIT_BITMAP3_HIGH = 8227,
+	EPTP_LIST_ADDRESS = 8228,
+	EPTP_LIST_ADDRESS_HIGH = 8229,
+	VMREAD_BITMAP = 8230,
+	VMREAD_BITMAP_HIGH = 8231,
+	VMWRITE_BITMAP = 8232,
+	VMWRITE_BITMAP_HIGH = 8233,
+	XSS_EXIT_BITMAP = 8236,
+	XSS_EXIT_BITMAP_HIGH = 8237,
+	ENCLS_EXITING_BITMAP = 8238,
+	ENCLS_EXITING_BITMAP_HIGH = 8239,
+	TSC_MULTIPLIER = 8242,
+	TSC_MULTIPLIER_HIGH = 8243,
+	TERTIARY_VM_EXEC_CONTROL = 8244,
+	TERTIARY_VM_EXEC_CONTROL_HIGH = 8245,
+	PID_POINTER_TABLE = 8258,
+	PID_POINTER_TABLE_HIGH = 8259,
+	GUEST_PHYSICAL_ADDRESS = 9216,
+	GUEST_PHYSICAL_ADDRESS_HIGH = 9217,
+	VMCS_LINK_POINTER = 10240,
+	VMCS_LINK_POINTER_HIGH = 10241,
+	GUEST_IA32_DEBUGCTL = 10242,
+	GUEST_IA32_DEBUGCTL_HIGH = 10243,
+	GUEST_IA32_PAT = 10244,
+	GUEST_IA32_PAT_HIGH = 10245,
+	GUEST_IA32_EFER = 10246,
+	GUEST_IA32_EFER_HIGH = 10247,
+	GUEST_IA32_PERF_GLOBAL_CTRL = 10248,
+	GUEST_IA32_PERF_GLOBAL_CTRL_HIGH = 10249,
+	GUEST_PDPTR0 = 10250,
+	GUEST_PDPTR0_HIGH = 10251,
+	GUEST_PDPTR1 = 10252,
+	GUEST_PDPTR1_HIGH = 10253,
+	GUEST_PDPTR2 = 10254,
+	GUEST_PDPTR2_HIGH = 10255,
+	GUEST_PDPTR3 = 10256,
+	GUEST_PDPTR3_HIGH = 10257,
+	GUEST_BNDCFGS = 10258,
+	GUEST_BNDCFGS_HIGH = 10259,
+	GUEST_IA32_RTIT_CTL = 10260,
+	GUEST_IA32_RTIT_CTL_HIGH = 10261,
+	HOST_IA32_PAT = 11264,
+	HOST_IA32_PAT_HIGH = 11265,
+	HOST_IA32_EFER = 11266,
+	HOST_IA32_EFER_HIGH = 11267,
+	HOST_IA32_PERF_GLOBAL_CTRL = 11268,
+	HOST_IA32_PERF_GLOBAL_CTRL_HIGH = 11269,
+	PIN_BASED_VM_EXEC_CONTROL = 16384,
+	CPU_BASED_VM_EXEC_CONTROL = 16386,
+	EXCEPTION_BITMAP = 16388,
+	PAGE_FAULT_ERROR_CODE_MASK = 16390,
+	PAGE_FAULT_ERROR_CODE_MATCH = 16392,
+	CR3_TARGET_COUNT = 16394,
+	VM_EXIT_CONTROLS = 16396,
+	VM_EXIT_MSR_STORE_COUNT = 16398,
+	VM_EXIT_MSR_LOAD_COUNT = 16400,
+	VM_ENTRY_CONTROLS = 16402,
+	VM_ENTRY_MSR_LOAD_COUNT = 16404,
+	VM_ENTRY_INTR_INFO_FIELD = 16406,
+	VM_ENTRY_EXCEPTION_ERROR_CODE = 16408,
+	VM_ENTRY_INSTRUCTION_LEN = 16410,
+	TPR_THRESHOLD = 16412,
+	SECONDARY_VM_EXEC_CONTROL = 16414,
+	PLE_GAP = 16416,
+	PLE_WINDOW = 16418,
+	NOTIFY_WINDOW = 16420,
+	VM_INSTRUCTION_ERROR = 17408,
+	VM_EXIT_REASON = 17410,
+	VM_EXIT_INTR_INFO = 17412,
+	VM_EXIT_INTR_ERROR_CODE = 17414,
+	IDT_VECTORING_INFO_FIELD = 17416,
+	IDT_VECTORING_ERROR_CODE = 17418,
+	VM_EXIT_INSTRUCTION_LEN = 17420,
+	VMX_INSTRUCTION_INFO = 17422,
+	GUEST_ES_LIMIT = 18432,
+	GUEST_CS_LIMIT = 18434,
+	GUEST_SS_LIMIT = 18436,
+	GUEST_DS_LIMIT = 18438,
+	GUEST_FS_LIMIT = 18440,
+	GUEST_GS_LIMIT = 18442,
+	GUEST_LDTR_LIMIT = 18444,
+	GUEST_TR_LIMIT = 18446,
+	GUEST_GDTR_LIMIT = 18448,
+	GUEST_IDTR_LIMIT = 18450,
+	GUEST_ES_AR_BYTES = 18452,
+	GUEST_CS_AR_BYTES = 18454,
+	GUEST_SS_AR_BYTES = 18456,
+	GUEST_DS_AR_BYTES = 18458,
+	GUEST_FS_AR_BYTES = 18460,
+	GUEST_GS_AR_BYTES = 18462,
+	GUEST_LDTR_AR_BYTES = 18464,
+	GUEST_TR_AR_BYTES = 18466,
+	GUEST_INTERRUPTIBILITY_INFO = 18468,
+	GUEST_ACTIVITY_STATE = 18470,
+	GUEST_SYSENTER_CS = 18474,
+	VMX_PREEMPTION_TIMER_VALUE = 18478,
+	HOST_IA32_SYSENTER_CS = 19456,
+	CR0_GUEST_HOST_MASK = 24576,
+	CR4_GUEST_HOST_MASK = 24578,
+	CR0_READ_SHADOW = 24580,
+	CR4_READ_SHADOW = 24582,
+	CR3_TARGET_VALUE0 = 24584,
+	CR3_TARGET_VALUE1 = 24586,
+	CR3_TARGET_VALUE2 = 24588,
+	CR3_TARGET_VALUE3 = 24590,
+	EXIT_QUALIFICATION = 25600,
+	GUEST_LINEAR_ADDRESS = 25610,
+	GUEST_CR0 = 26624,
+	GUEST_CR3 = 26626,
+	GUEST_CR4 = 26628,
+	GUEST_ES_BASE = 26630,
+	GUEST_CS_BASE = 26632,
+	GUEST_SS_BASE = 26634,
+	GUEST_DS_BASE = 26636,
+	GUEST_FS_BASE = 26638,
+	GUEST_GS_BASE = 26640,
+	GUEST_LDTR_BASE = 26642,
+	GUEST_TR_BASE = 26644,
+	GUEST_GDTR_BASE = 26646,
+	GUEST_IDTR_BASE = 26648,
+	GUEST_DR7 = 26650,
+	GUEST_RSP = 26652,
+	GUEST_RIP = 26654,
+	GUEST_RFLAGS = 26656,
+	GUEST_PENDING_DBG_EXCEPTIONS = 26658,
+	GUEST_SYSENTER_ESP = 26660,
+	GUEST_SYSENTER_EIP = 26662,
+	HOST_CR0 = 27648,
+	HOST_CR3 = 27650,
+	HOST_CR4 = 27652,
+	HOST_FS_BASE = 27654,
+	HOST_GS_BASE = 27656,
+	HOST_TR_BASE = 27658,
+	HOST_GDTR_BASE = 27660,
+	HOST_IDTR_BASE = 27662,
+	HOST_IA32_SYSENTER_ESP = 27664,
+	HOST_IA32_SYSENTER_EIP = 27666,
+	HOST_RSP = 27668,
+	HOST_RIP = 27670,
+};
+
+enum l1tf_mitigations {
+	L1TF_MITIGATION_OFF = 0,
+	L1TF_MITIGATION_FLUSH_NOWARN = 1,
+	L1TF_MITIGATION_FLUSH = 2,
+	L1TF_MITIGATION_FLUSH_NOSMT = 3,
+	L1TF_MITIGATION_FULL = 4,
+	L1TF_MITIGATION_FULL_FORCE = 5,
+};
+
+enum segment_cache_field {
+	SEG_FIELD_SEL = 0,
+	SEG_FIELD_BASE = 1,
+	SEG_FIELD_LIMIT = 2,
+	SEG_FIELD_AR = 3,
+	SEG_FIELD_NR = 4,
+};
+
+enum {
+	DESC_TSS = 9,
+	DESC_LDT = 2,
+	DESCTYPE_S = 16,
+};
+
+enum vm_entry_failure_code {
+	ENTRY_FAIL_DEFAULT = 0,
+	ENTRY_FAIL_PDPTE = 2,
+	ENTRY_FAIL_NMI = 3,
+	ENTRY_FAIL_VMCS_LINK_PTR = 4,
+};
+
+enum nvmx_vmentry_status {
+	NVMX_VMENTRY_SUCCESS = 0,
+	NVMX_VMENTRY_VMFAIL = 1,
+	NVMX_VMENTRY_VMEXIT = 2,
+	NVMX_VMENTRY_KVM_INTERNAL_ERROR = 3,
+};
+
+struct kvm_save_segment {
+	u16 selector;
+	unsigned long base;
+	u32 limit;
+	u32 ar;
+};
+
+struct vmx_uret_msr {
+	bool load_into_hardware;
+	u64 data;
+	u64 mask;
+};
+
+struct vmcs_host_state {
+	unsigned long cr3;
+	unsigned long cr4;
+	unsigned long gs_base;
+	unsigned long fs_base;
+	unsigned long rsp;
+	u16 fs_sel;
+	u16 gs_sel;
+	u16 ldt_sel;
+	u16 ds_sel;
+	u16 es_sel;
+};
+
+struct vmcs_controls_shadow {
+	u32 vm_entry;
+	u32 vm_exit;
+	u32 pin;
+	u32 exec;
+	u32 secondary_exec;
+	u64 tertiary_exec;
+};
+
+struct loaded_vmcs {
+	struct vmcs *vmcs;
+	struct vmcs *shadow_vmcs;
+	int cpu;
+	bool launched;
+	bool nmi_known_unmasked;
+	bool hv_timer_soft_disabled;
+	int soft_vnmi_blocked;
+	ktime_t entry_time;
+	s64 vnmi_blocked_time;
+	unsigned long *msr_bitmap;
+	struct list_head loaded_vmcss_on_cpu_link;
+	struct vmcs_host_state host_state;
+	struct vmcs_controls_shadow controls_shadow;
+};
+
+struct vmx_msr_entry {
+	u32 index;
+	u32 reserved;
+	u64 value;
+};
+
+struct vmx_msrs {
+	unsigned int nr;
+	long: 64;
+	struct vmx_msr_entry val[8];
+};
+
+struct msr_autoload {
+	struct vmx_msrs guest;
+	struct vmx_msrs host;
+};
+
+struct msr_autostore {
+	struct vmx_msrs guest;
+};
+
+union vmx_exit_reason {
+	struct {
+		u32 basic: 16;
+		u32 reserved16: 1;
+		u32 reserved17: 1;
+		u32 reserved18: 1;
+		u32 reserved19: 1;
+		u32 reserved20: 1;
+		u32 reserved21: 1;
+		u32 reserved22: 1;
+		u32 reserved23: 1;
+		u32 reserved24: 1;
+		u32 reserved25: 1;
+		u32 bus_lock_detected: 1;
+		u32 enclave_mode: 1;
+		u32 smi_pending_mtf: 1;
+		u32 smi_from_vmx_root: 1;
+		u32 reserved30: 1;
+		u32 failed_vmentry: 1;
+	};
+	u32 full;
+};
+
+struct pi_desc {
+	u32 pir[8];
+	union {
+		struct {
+			u16 on: 1;
+			u16 sn: 1;
+			u16 rsvd_1: 14;
+			u8 nv;
+			u8 rsvd_2;
+			u32 ndst;
+		};
+		u64 control;
+	};
+	u32 rsvd[6];
+};
+
+struct vmcs12;
+
+struct hv_enlightened_vmcs;
+
+struct nested_vmx {
+	bool vmxon;
+	gpa_t vmxon_ptr;
+	bool pml_full;
+	gpa_t current_vmptr;
+	struct vmcs12 *cached_vmcs12;
+	struct vmcs12 *cached_shadow_vmcs12;
+	struct gfn_to_hva_cache shadow_vmcs12_cache;
+	struct gfn_to_hva_cache vmcs12_cache;
+	bool need_vmcs12_to_shadow_sync;
+	bool dirty_vmcs12;
+	bool force_msr_bitmap_recalc;
+	bool need_sync_vmcs02_to_vmcs12_rare;
+	bool vmcs02_initialized;
+	bool change_vmcs01_virtual_apic_mode;
+	bool reload_vmcs01_apic_access_page;
+	bool update_vmcs01_cpu_dirty_logging;
+	bool update_vmcs01_apicv_status;
+	bool enlightened_vmcs_enabled;
+	bool nested_run_pending;
+	bool mtf_pending;
+	struct loaded_vmcs vmcs02;
+	struct kvm_host_map apic_access_page_map;
+	struct kvm_host_map virtual_apic_map;
+	struct kvm_host_map pi_desc_map;
+	struct kvm_host_map msr_bitmap_map;
+	struct pi_desc *pi_desc;
+	bool pi_pending;
+	u16 posted_intr_nv;
+	struct hrtimer preemption_timer;
+	u64 preemption_timer_deadline;
+	bool has_preemption_timer_deadline;
+	bool preemption_timer_expired;
+	u64 pre_vmenter_debugctl;
+	u64 pre_vmenter_bndcfgs;
+	int l1_tpr_threshold;
+	u16 vpid02;
+	u16 last_vpid;
+	struct nested_vmx_msrs msrs;
+	struct {
+		bool vmxon;
+		bool guest_mode;
+	} smm;
+	gpa_t hv_evmcs_vmptr;
+	struct kvm_host_map hv_evmcs_map;
+	struct hv_enlightened_vmcs *hv_evmcs;
+};
+
+struct pt_ctx {
+	u64 ctl;
+	u64 status;
+	u64 output_base;
+	u64 output_mask;
+	u64 cr3_match;
+	u64 addr_a[4];
+	u64 addr_b[4];
+};
+
+struct pt_desc {
+	u64 ctl_bitmask;
+	u32 num_address_ranges;
+	u32 caps[8];
+	struct pt_ctx host;
+	struct pt_ctx guest;
+};
+
+struct lbr_desc {
+	struct x86_pmu_lbr records;
+	struct perf_event *event;
+	bool msr_passthrough;
+};
+
+struct vcpu_vmx {
+	struct kvm_vcpu vcpu;
+	u8 fail;
+	u8 x2apic_msr_bitmap_mode;
+	bool guest_state_loaded;
+	unsigned long exit_qualification;
+	u32 exit_intr_info;
+	u32 idt_vectoring_info;
+	ulong rflags;
+	struct vmx_uret_msr guest_uret_msrs[7];
+	bool guest_uret_msrs_loaded;
+	u64 msr_host_kernel_gs_base;
+	u64 msr_guest_kernel_gs_base;
+	u64 spec_ctrl;
+	u32 msr_ia32_umwait_control;
+	struct loaded_vmcs vmcs01;
+	struct loaded_vmcs *loaded_vmcs;
+	struct msr_autoload msr_autoload;
+	struct msr_autostore msr_autostore;
+	struct {
+		int vm86_active;
+		ulong save_rflags;
+		struct kvm_segment segs[8];
+	} rmode;
+	struct {
+		u32 bitmask;
+		struct kvm_save_segment seg[8];
+	} segment_cache;
+	int vpid;
+	bool emulation_required;
+	union vmx_exit_reason exit_reason;
+	long: 64;
+	struct pi_desc pi_desc;
+	struct list_head pi_wakeup_list;
+	struct nested_vmx nested;
+	unsigned int ple_window;
+	bool ple_window_dirty;
+	bool req_immediate_exit;
+	struct page *pml_pg;
+	u64 hv_deadline_tsc;
+	unsigned long host_debugctlmsr;
+	u64 msr_ia32_feature_control;
+	u64 msr_ia32_feature_control_valid_bits;
+	u64 msr_ia32_sgxlepubkeyhash[4];
+	u64 msr_ia32_mcu_opt_ctrl;
+	bool disable_fb_clear;
+	struct pt_desc pt_desc;
+	struct lbr_desc lbr_desc;
+	struct {
+		unsigned long read[1];
+		unsigned long write[1];
+	} shadow_msr_intercept;
+	long: 64;
+};
+
+typedef u64 natural_width;
+
+struct vmcs12 {
+	struct vmcs_hdr hdr;
+	u32 abort;
+	u32 launch_state;
+	u32 padding[7];
+	u64 io_bitmap_a;
+	u64 io_bitmap_b;
+	u64 msr_bitmap;
+	u64 vm_exit_msr_store_addr;
+	u64 vm_exit_msr_load_addr;
+	u64 vm_entry_msr_load_addr;
+	u64 tsc_offset;
+	u64 virtual_apic_page_addr;
+	u64 apic_access_addr;
+	u64 posted_intr_desc_addr;
+	u64 ept_pointer;
+	u64 eoi_exit_bitmap0;
+	u64 eoi_exit_bitmap1;
+	u64 eoi_exit_bitmap2;
+	u64 eoi_exit_bitmap3;
+	u64 xss_exit_bitmap;
+	u64 guest_physical_address;
+	u64 vmcs_link_pointer;
+	u64 guest_ia32_debugctl;
+	u64 guest_ia32_pat;
+	u64 guest_ia32_efer;
+	u64 guest_ia32_perf_global_ctrl;
+	u64 guest_pdptr0;
+	u64 guest_pdptr1;
+	u64 guest_pdptr2;
+	u64 guest_pdptr3;
+	u64 guest_bndcfgs;
+	u64 host_ia32_pat;
+	u64 host_ia32_efer;
+	u64 host_ia32_perf_global_ctrl;
+	u64 vmread_bitmap;
+	u64 vmwrite_bitmap;
+	u64 vm_function_control;
+	u64 eptp_list_address;
+	u64 pml_address;
+	u64 encls_exiting_bitmap;
+	u64 tsc_multiplier;
+	u64 padding64[1];
+	natural_width cr0_guest_host_mask;
+	natural_width cr4_guest_host_mask;
+	natural_width cr0_read_shadow;
+	natural_width cr4_read_shadow;
+	natural_width dead_space[4];
+	natural_width exit_qualification;
+	natural_width guest_linear_address;
+	natural_width guest_cr0;
+	natural_width guest_cr3;
+	natural_width guest_cr4;
+	natural_width guest_es_base;
+	natural_width guest_cs_base;
+	natural_width guest_ss_base;
+	natural_width guest_ds_base;
+	natural_width guest_fs_base;
+	natural_width guest_gs_base;
+	natural_width guest_ldtr_base;
+	natural_width guest_tr_base;
+	natural_width guest_gdtr_base;
+	natural_width guest_idtr_base;
+	natural_width guest_dr7;
+	natural_width guest_rsp;
+	natural_width guest_rip;
+	natural_width guest_rflags;
+	natural_width guest_pending_dbg_exceptions;
+	natural_width guest_sysenter_esp;
+	natural_width guest_sysenter_eip;
+	natural_width host_cr0;
+	natural_width host_cr3;
+	natural_width host_cr4;
+	natural_width host_fs_base;
+	natural_width host_gs_base;
+	natural_width host_tr_base;
+	natural_width host_gdtr_base;
+	natural_width host_idtr_base;
+	natural_width host_ia32_sysenter_esp;
+	natural_width host_ia32_sysenter_eip;
+	natural_width host_rsp;
+	natural_width host_rip;
+	natural_width paddingl[8];
+	u32 pin_based_vm_exec_control;
+	u32 cpu_based_vm_exec_control;
+	u32 exception_bitmap;
+	u32 page_fault_error_code_mask;
+	u32 page_fault_error_code_match;
+	u32 cr3_target_count;
+	u32 vm_exit_controls;
+	u32 vm_exit_msr_store_count;
+	u32 vm_exit_msr_load_count;
+	u32 vm_entry_controls;
+	u32 vm_entry_msr_load_count;
+	u32 vm_entry_intr_info_field;
+	u32 vm_entry_exception_error_code;
+	u32 vm_entry_instruction_len;
+	u32 tpr_threshold;
+	u32 secondary_vm_exec_control;
+	u32 vm_instruction_error;
+	u32 vm_exit_reason;
+	u32 vm_exit_intr_info;
+	u32 vm_exit_intr_error_code;
+	u32 idt_vectoring_info_field;
+	u32 idt_vectoring_error_code;
+	u32 vm_exit_instruction_len;
+	u32 vmx_instruction_info;
+	u32 guest_es_limit;
+	u32 guest_cs_limit;
+	u32 guest_ss_limit;
+	u32 guest_ds_limit;
+	u32 guest_fs_limit;
+	u32 guest_gs_limit;
+	u32 guest_ldtr_limit;
+	u32 guest_tr_limit;
+	u32 guest_gdtr_limit;
+	u32 guest_idtr_limit;
+	u32 guest_es_ar_bytes;
+	u32 guest_cs_ar_bytes;
+	u32 guest_ss_ar_bytes;
+	u32 guest_ds_ar_bytes;
+	u32 guest_fs_ar_bytes;
+	u32 guest_gs_ar_bytes;
+	u32 guest_ldtr_ar_bytes;
+	u32 guest_tr_ar_bytes;
+	u32 guest_interruptibility_info;
+	u32 guest_activity_state;
+	u32 guest_sysenter_cs;
+	u32 host_ia32_sysenter_cs;
+	u32 vmx_preemption_timer_value;
+	u32 padding32[7];
+	u16 virtual_processor_id;
+	u16 posted_intr_nv;
+	u16 guest_es_selector;
+	u16 guest_cs_selector;
+	u16 guest_ss_selector;
+	u16 guest_ds_selector;
+	u16 guest_fs_selector;
+	u16 guest_gs_selector;
+	u16 guest_ldtr_selector;
+	u16 guest_tr_selector;
+	u16 guest_intr_status;
+	u16 host_es_selector;
+	u16 host_cs_selector;
+	u16 host_ss_selector;
+	u16 host_ds_selector;
+	u16 host_fs_selector;
+	u16 host_gs_selector;
+	u16 host_tr_selector;
+	u16 guest_pml_index;
+} __attribute__((packed));
+
+struct hv_enlightened_vmcs {
+	u32 revision_id;
+	u32 abort;
+	u16 host_es_selector;
+	u16 host_cs_selector;
+	u16 host_ss_selector;
+	u16 host_ds_selector;
+	u16 host_fs_selector;
+	u16 host_gs_selector;
+	u16 host_tr_selector;
+	u16 padding16_1;
+	u64 host_ia32_pat;
+	u64 host_ia32_efer;
+	u64 host_cr0;
+	u64 host_cr3;
+	u64 host_cr4;
+	u64 host_ia32_sysenter_esp;
+	u64 host_ia32_sysenter_eip;
+	u64 host_rip;
+	u32 host_ia32_sysenter_cs;
+	u32 pin_based_vm_exec_control;
+	u32 vm_exit_controls;
+	u32 secondary_vm_exec_control;
+	u64 io_bitmap_a;
+	u64 io_bitmap_b;
+	u64 msr_bitmap;
+	u16 guest_es_selector;
+	u16 guest_cs_selector;
+	u16 guest_ss_selector;
+	u16 guest_ds_selector;
+	u16 guest_fs_selector;
+	u16 guest_gs_selector;
+	u16 guest_ldtr_selector;
+	u16 guest_tr_selector;
+	u32 guest_es_limit;
+	u32 guest_cs_limit;
+	u32 guest_ss_limit;
+	u32 guest_ds_limit;
+	u32 guest_fs_limit;
+	u32 guest_gs_limit;
+	u32 guest_ldtr_limit;
+	u32 guest_tr_limit;
+	u32 guest_gdtr_limit;
+	u32 guest_idtr_limit;
+	u32 guest_es_ar_bytes;
+	u32 guest_cs_ar_bytes;
+	u32 guest_ss_ar_bytes;
+	u32 guest_ds_ar_bytes;
+	u32 guest_fs_ar_bytes;
+	u32 guest_gs_ar_bytes;
+	u32 guest_ldtr_ar_bytes;
+	u32 guest_tr_ar_bytes;
+	u64 guest_es_base;
+	u64 guest_cs_base;
+	u64 guest_ss_base;
+	u64 guest_ds_base;
+	u64 guest_fs_base;
+	u64 guest_gs_base;
+	u64 guest_ldtr_base;
+	u64 guest_tr_base;
+	u64 guest_gdtr_base;
+	u64 guest_idtr_base;
+	u64 padding64_1[3];
+	u64 vm_exit_msr_store_addr;
+	u64 vm_exit_msr_load_addr;
+	u64 vm_entry_msr_load_addr;
+	u64 cr3_target_value0;
+	u64 cr3_target_value1;
+	u64 cr3_target_value2;
+	u64 cr3_target_value3;
+	u32 page_fault_error_code_mask;
+	u32 page_fault_error_code_match;
+	u32 cr3_target_count;
+	u32 vm_exit_msr_store_count;
+	u32 vm_exit_msr_load_count;
+	u32 vm_entry_msr_load_count;
+	u64 tsc_offset;
+	u64 virtual_apic_page_addr;
+	u64 vmcs_link_pointer;
+	u64 guest_ia32_debugctl;
+	u64 guest_ia32_pat;
+	u64 guest_ia32_efer;
+	u64 guest_pdptr0;
+	u64 guest_pdptr1;
+	u64 guest_pdptr2;
+	u64 guest_pdptr3;
+	u64 guest_pending_dbg_exceptions;
+	u64 guest_sysenter_esp;
+	u64 guest_sysenter_eip;
+	u32 guest_activity_state;
+	u32 guest_sysenter_cs;
+	u64 cr0_guest_host_mask;
+	u64 cr4_guest_host_mask;
+	u64 cr0_read_shadow;
+	u64 cr4_read_shadow;
+	u64 guest_cr0;
+	u64 guest_cr3;
+	u64 guest_cr4;
+	u64 guest_dr7;
+	u64 host_fs_base;
+	u64 host_gs_base;
+	u64 host_tr_base;
+	u64 host_gdtr_base;
+	u64 host_idtr_base;
+	u64 host_rsp;
+	u64 ept_pointer;
+	u16 virtual_processor_id;
+	u16 padding16_2[3];
+	u64 padding64_2[5];
+	u64 guest_physical_address;
+	u32 vm_instruction_error;
+	u32 vm_exit_reason;
+	u32 vm_exit_intr_info;
+	u32 vm_exit_intr_error_code;
+	u32 idt_vectoring_info_field;
+	u32 idt_vectoring_error_code;
+	u32 vm_exit_instruction_len;
+	u32 vmx_instruction_info;
+	u64 exit_qualification;
+	u64 exit_io_instruction_ecx;
+	u64 exit_io_instruction_esi;
+	u64 exit_io_instruction_edi;
+	u64 exit_io_instruction_eip;
+	u64 guest_linear_address;
+	u64 guest_rsp;
+	u64 guest_rflags;
+	u32 guest_interruptibility_info;
+	u32 cpu_based_vm_exec_control;
+	u32 exception_bitmap;
+	u32 vm_entry_controls;
+	u32 vm_entry_intr_info_field;
+	u32 vm_entry_exception_error_code;
+	u32 vm_entry_instruction_len;
+	u32 tpr_threshold;
+	u64 guest_rip;
+	u32 hv_clean_fields;
+	u32 padding32_1;
+	u32 hv_synthetic_controls;
+	struct {
+		u32 nested_flush_hypercall: 1;
+		u32 msr_bitmap: 1;
+		u32 reserved: 30;
+	} hv_enlightenments_control;
+	u32 hv_vp_id;
+	u32 padding32_2;
+	u64 hv_vm_id;
+	u64 partition_assist_page;
+	u64 padding64_4[4];
+	u64 guest_bndcfgs;
+	u64 guest_ia32_perf_global_ctrl;
+	u64 guest_ia32_s_cet;
+	u64 guest_ssp;
+	u64 guest_ia32_int_ssp_table_addr;
+	u64 guest_ia32_lbr_ctl;
+	u64 padding64_5[2];
+	u64 xss_exit_bitmap;
+	u64 encls_exiting_bitmap;
+	u64 host_ia32_perf_global_ctrl;
+	u64 tsc_multiplier;
+	u64 host_ia32_s_cet;
+	u64 host_ssp;
+	u64 host_ia32_int_ssp_table_addr;
+	u64 padding64_6;
+};
+
+struct kvm_vmx {
+	struct kvm kvm;
+	unsigned int tss_addr;
+	bool ept_identity_pagetable_done;
+	gpa_t ept_identity_map_addr;
+	u64 *pid_table;
+};
+
+struct gdt_page {
+	struct desc_struct gdt[16];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct idt_bits {
+	u16 ist: 3;
+	u16 zero: 5;
+	u16 type: 5;
+	u16 dpl: 2;
+	u16 p: 1;
+};
+
+struct gate_struct {
+	u16 offset_low;
+	u16 segment;
+	struct idt_bits bits;
+	u16 offset_middle;
+	u32 offset_high;
+	u32 reserved;
+};
+
+typedef struct gate_struct gate_desc;
+
+typedef void cpu_emergency_virt_cb();
+
+struct ldttss_desc {
+	u16 limit0;
+	u16 base0;
+	u16 base1: 8;
+	u16 type: 5;
+	u16 dpl: 2;
+	u16 p: 1;
+	u16 limit1: 4;
+	u16 zero0: 3;
+	u16 g: 1;
+	u16 base2: 8;
+	u32 base3;
+	u32 zero1;
+};
+
+typedef struct ldttss_desc tss_desc;
+
+enum intel_pmu_architectural_events {
+	INTEL_ARCH_CPU_CYCLES = 0,
+	INTEL_ARCH_INSTRUCTIONS_RETIRED = 1,
+	INTEL_ARCH_REFERENCE_CYCLES = 2,
+	INTEL_ARCH_LLC_REFERENCES = 3,
+	INTEL_ARCH_LLC_MISSES = 4,
+	INTEL_ARCH_BRANCHES_RETIRED = 5,
+	INTEL_ARCH_BRANCHES_MISPREDICTED = 6,
+	NR_REAL_INTEL_ARCH_EVENTS = 7,
+	PSEUDO_ARCH_REFERENCE_CYCLES = 7,
+	NR_INTEL_ARCH_EVENTS = 8,
+};
+
+struct evmcs_field {
+	u16 offset;
+	u16 clean_field;
+};
+
+enum evmcs_ctrl_type {
+	EVMCS_EXIT_CTRLS = 0,
+	EVMCS_ENTRY_CTRLS = 1,
+	EVMCS_EXEC_CTRL = 2,
+	EVMCS_2NDEXEC = 3,
+	EVMCS_3RDEXEC = 4,
+	EVMCS_PINCTRL = 5,
+	EVMCS_VMFUNC = 6,
+	NR_EVMCS_CTRLS = 7,
+};
+
+enum evmcs_revision {
+	EVMCSv1_LEGACY = 0,
+	NR_EVMCS_REVISIONS = 1,
+};
+
+struct shadow_vmcs_field {
+	u16 encoding;
+	u16 offset;
+};
+
+enum vm_instruction_error_number {
+	VMXERR_VMCALL_IN_VMX_ROOT_OPERATION = 1,
+	VMXERR_VMCLEAR_INVALID_ADDRESS = 2,
+	VMXERR_VMCLEAR_VMXON_POINTER = 3,
+	VMXERR_VMLAUNCH_NONCLEAR_VMCS = 4,
+	VMXERR_VMRESUME_NONLAUNCHED_VMCS = 5,
+	VMXERR_VMRESUME_AFTER_VMXOFF = 6,
+	VMXERR_ENTRY_INVALID_CONTROL_FIELD = 7,
+	VMXERR_ENTRY_INVALID_HOST_STATE_FIELD = 8,
+	VMXERR_VMPTRLD_INVALID_ADDRESS = 9,
+	VMXERR_VMPTRLD_VMXON_POINTER = 10,
+	VMXERR_VMPTRLD_INCORRECT_VMCS_REVISION_ID = 11,
+	VMXERR_UNSUPPORTED_VMCS_COMPONENT = 12,
+	VMXERR_VMWRITE_READ_ONLY_VMCS_COMPONENT = 13,
+	VMXERR_VMXON_IN_VMX_ROOT_OPERATION = 15,
+	VMXERR_ENTRY_INVALID_EXECUTIVE_VMCS_POINTER = 16,
+	VMXERR_ENTRY_NONLAUNCHED_EXECUTIVE_VMCS = 17,
+	VMXERR_ENTRY_EXECUTIVE_VMCS_POINTER_NOT_VMXON_POINTER = 18,
+	VMXERR_VMCALL_NONCLEAR_VMCS = 19,
+	VMXERR_VMCALL_INVALID_VM_EXIT_CONTROL_FIELDS = 20,
+	VMXERR_VMCALL_INCORRECT_MSEG_REVISION_ID = 22,
+	VMXERR_VMXOFF_UNDER_DUAL_MONITOR_TREATMENT_OF_SMIS_AND_SMM = 23,
+	VMXERR_VMCALL_INVALID_SMM_MONITOR_FEATURES = 24,
+	VMXERR_ENTRY_INVALID_VM_EXECUTION_CONTROL_FIELDS_IN_EXECUTIVE_VMCS = 25,
+	VMXERR_ENTRY_EVENTS_BLOCKED_BY_MOV_SS = 26,
+	VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID = 28,
+};
+
+enum {
+	VMX_VMREAD_BITMAP = 0,
+	VMX_VMWRITE_BITMAP = 1,
+	VMX_BITMAP_NR = 2,
+};
+
+enum vmcs_field_width {
+	VMCS_FIELD_WIDTH_U16 = 0,
+	VMCS_FIELD_WIDTH_U64 = 1,
+	VMCS_FIELD_WIDTH_U32 = 2,
+	VMCS_FIELD_WIDTH_NATURAL_WIDTH = 3,
+};
+
+enum nested_evmptrld_status {
+	EVMPTRLD_DISABLED = 0,
+	EVMPTRLD_SUCCEEDED = 1,
+	EVMPTRLD_VMFAIL = 2,
+	EVMPTRLD_ERROR = 3,
+};
+
+struct vcpu_data {
+	u64 pi_desc_addr;
+	u32 vector;
+};
+
+struct vmcb;
+
+struct svm_cpu_data {
+	u64 asid_generation;
+	u32 max_asid;
+	u32 next_asid;
+	u32 min_asid;
+	struct page *save_area;
+	unsigned long save_area_pa;
+	struct vmcb *current_vmcb;
+	struct vmcb **sev_vmcbs;
+};
+
+struct hv_enlightenments_control {
+	u32 nested_flush_hypercall: 1;
+	u32 msr_bitmap: 1;
+	u32 enlightened_npt_tlb: 1;
+	u32 reserved: 29;
+};
+
+struct hv_vmcb_enlightenments {
+	struct hv_enlightenments_control hv_enlightenments_control;
+	u32 hv_vp_id;
+	u64 hv_vm_id;
+	u64 partition_assist_page;
+	u64 reserved;
+};
+
+struct vmcb_control_area {
+	u32 intercepts[6];
+	u32 reserved_1[9];
+	u16 pause_filter_thresh;
+	u16 pause_filter_count;
+	u64 iopm_base_pa;
+	u64 msrpm_base_pa;
+	u64 tsc_offset;
+	u32 asid;
+	u8 tlb_ctl;
+	u8 reserved_2[3];
+	u32 int_ctl;
+	u32 int_vector;
+	u32 int_state;
+	u8 reserved_3[4];
+	u32 exit_code;
+	u32 exit_code_hi;
+	u64 exit_info_1;
+	u64 exit_info_2;
+	u32 exit_int_info;
+	u32 exit_int_info_err;
+	u64 nested_ctl;
+	u64 avic_vapic_bar;
+	u64 ghcb_gpa;
+	u32 event_inj;
+	u32 event_inj_err;
+	u64 nested_cr3;
+	u64 virt_ext;
+	u32 clean;
+	u32 reserved_5;
+	u64 next_rip;
+	u8 insn_len;
+	u8 insn_bytes[15];
+	u64 avic_backing_page;
+	u8 reserved_6[8];
+	u64 avic_logical_id;
+	u64 avic_physical_id;
+	u8 reserved_7[8];
+	u64 vmsa_pa;
+	u8 reserved_8[720];
+	union {
+		struct hv_vmcb_enlightenments hv_enlightenments;
+		u8 reserved_sw[32];
+	};
+};
+
+struct vmcb_seg {
+	u16 selector;
+	u16 attrib;
+	u32 limit;
+	u64 base;
+};
+
+struct vmcb_save_area {
+	struct vmcb_seg es;
+	struct vmcb_seg cs;
+	struct vmcb_seg ss;
+	struct vmcb_seg ds;
+	struct vmcb_seg fs;
+	struct vmcb_seg gs;
+	struct vmcb_seg gdtr;
+	struct vmcb_seg ldtr;
+	struct vmcb_seg idtr;
+	struct vmcb_seg tr;
+	u8 reserved_0xa0[42];
+	u8 vmpl;
+	u8 cpl;
+	u8 reserved_0xcc[4];
+	u64 efer;
+	u8 reserved_0xd8[112];
+	u64 cr4;
+	u64 cr3;
+	u64 cr0;
+	u64 dr7;
+	u64 dr6;
+	u64 rflags;
+	u64 rip;
+	u8 reserved_0x180[88];
+	u64 rsp;
+	u64 s_cet;
+	u64 ssp;
+	u64 isst_addr;
+	u64 rax;
+	u64 star;
+	u64 lstar;
+	u64 cstar;
+	u64 sfmask;
+	u64 kernel_gs_base;
+	u64 sysenter_cs;
+	u64 sysenter_esp;
+	u64 sysenter_eip;
+	u64 cr2;
+	u8 reserved_0x248[32];
+	u64 g_pat;
+	u64 dbgctl;
+	u64 br_from;
+	u64 br_to;
+	u64 last_excp_from;
+	u64 last_excp_to;
+	u8 reserved_0x298[72];
+	u64 spec_ctrl;
+};
+
+struct vmcb {
+	struct vmcb_control_area control;
+	struct vmcb_save_area save;
+};
+
+struct svm_direct_access_msrs {
+	u32 index;
+	bool always;
+};
+
+struct __x86_intercept {
+	u32 exit_code;
+	enum x86_intercept_stage stage;
+};
+
+enum {
+	VMCB_INTERCEPTS = 0,
+	VMCB_PERM_MAP = 1,
+	VMCB_ASID = 2,
+	VMCB_INTR = 3,
+	VMCB_NPT = 4,
+	VMCB_CR = 5,
+	VMCB_DR = 6,
+	VMCB_DT = 7,
+	VMCB_SEG = 8,
+	VMCB_CR2 = 9,
+	VMCB_LBR = 10,
+	VMCB_AVIC = 11,
+	VMCB_SW = 31,
+};
+
+enum {
+	INTERCEPT_CR0_READ = 0,
+	INTERCEPT_CR3_READ = 3,
+	INTERCEPT_CR4_READ = 4,
+	INTERCEPT_CR8_READ = 8,
+	INTERCEPT_CR0_WRITE = 16,
+	INTERCEPT_CR3_WRITE = 19,
+	INTERCEPT_CR4_WRITE = 20,
+	INTERCEPT_CR8_WRITE = 24,
+	INTERCEPT_DR0_READ = 32,
+	INTERCEPT_DR1_READ = 33,
+	INTERCEPT_DR2_READ = 34,
+	INTERCEPT_DR3_READ = 35,
+	INTERCEPT_DR4_READ = 36,
+	INTERCEPT_DR5_READ = 37,
+	INTERCEPT_DR6_READ = 38,
+	INTERCEPT_DR7_READ = 39,
+	INTERCEPT_DR0_WRITE = 48,
+	INTERCEPT_DR1_WRITE = 49,
+	INTERCEPT_DR2_WRITE = 50,
+	INTERCEPT_DR3_WRITE = 51,
+	INTERCEPT_DR4_WRITE = 52,
+	INTERCEPT_DR5_WRITE = 53,
+	INTERCEPT_DR6_WRITE = 54,
+	INTERCEPT_DR7_WRITE = 55,
+	INTERCEPT_EXCEPTION_OFFSET = 64,
+	INTERCEPT_INTR = 96,
+	INTERCEPT_NMI = 97,
+	INTERCEPT_SMI = 98,
+	INTERCEPT_INIT = 99,
+	INTERCEPT_VINTR = 100,
+	INTERCEPT_SELECTIVE_CR0 = 101,
+	INTERCEPT_STORE_IDTR = 102,
+	INTERCEPT_STORE_GDTR = 103,
+	INTERCEPT_STORE_LDTR = 104,
+	INTERCEPT_STORE_TR = 105,
+	INTERCEPT_LOAD_IDTR = 106,
+	INTERCEPT_LOAD_GDTR = 107,
+	INTERCEPT_LOAD_LDTR = 108,
+	INTERCEPT_LOAD_TR = 109,
+	INTERCEPT_RDTSC = 110,
+	INTERCEPT_RDPMC = 111,
+	INTERCEPT_PUSHF = 112,
+	INTERCEPT_POPF = 113,
+	INTERCEPT_CPUID = 114,
+	INTERCEPT_RSM = 115,
+	INTERCEPT_IRET = 116,
+	INTERCEPT_INTn = 117,
+	INTERCEPT_INVD = 118,
+	INTERCEPT_PAUSE = 119,
+	INTERCEPT_HLT = 120,
+	INTERCEPT_INVLPG = 121,
+	INTERCEPT_INVLPGA = 122,
+	INTERCEPT_IOIO_PROT = 123,
+	INTERCEPT_MSR_PROT = 124,
+	INTERCEPT_TASK_SWITCH = 125,
+	INTERCEPT_FERR_FREEZE = 126,
+	INTERCEPT_SHUTDOWN = 127,
+	INTERCEPT_VMRUN = 128,
+	INTERCEPT_VMMCALL = 129,
+	INTERCEPT_VMLOAD = 130,
+	INTERCEPT_VMSAVE = 131,
+	INTERCEPT_STGI = 132,
+	INTERCEPT_CLGI = 133,
+	INTERCEPT_SKINIT = 134,
+	INTERCEPT_RDTSCP = 135,
+	INTERCEPT_ICEBP = 136,
+	INTERCEPT_WBINVD = 137,
+	INTERCEPT_MONITOR = 138,
+	INTERCEPT_MWAIT = 139,
+	INTERCEPT_MWAIT_COND = 140,
+	INTERCEPT_XSETBV = 141,
+	INTERCEPT_RDPRU = 142,
+	TRAP_EFER_WRITE = 143,
+	TRAP_CR0_WRITE = 144,
+	TRAP_CR1_WRITE = 145,
+	TRAP_CR2_WRITE = 146,
+	TRAP_CR3_WRITE = 147,
+	TRAP_CR4_WRITE = 148,
+	TRAP_CR5_WRITE = 149,
+	TRAP_CR6_WRITE = 150,
+	TRAP_CR7_WRITE = 151,
+	TRAP_CR8_WRITE = 152,
+	INTERCEPT_INVLPGB = 160,
+	INTERCEPT_INVLPGB_ILLEGAL = 161,
+	INTERCEPT_INVPCID = 162,
+	INTERCEPT_MCOMMIT = 163,
+	INTERCEPT_TLBSYNC = 164,
+};
+
+enum intercept_words {
+	INTERCEPT_CR = 0,
+	INTERCEPT_DR = 1,
+	INTERCEPT_EXCEPTION = 2,
+	INTERCEPT_WORD3 = 3,
+	INTERCEPT_WORD4 = 4,
+	INTERCEPT_WORD5 = 5,
+	MAX_INTERCEPT = 6,
+};
+
+enum {
+	NONE_SVM_INSTR = 0,
+	SVM_INSTR_VMRUN = 1,
+	SVM_INSTR_VMLOAD = 2,
+	SVM_INSTR_VMSAVE = 3,
+};
+
+enum cc_attr {
+	CC_ATTR_MEM_ENCRYPT = 0,
+	CC_ATTR_HOST_MEM_ENCRYPT = 1,
+	CC_ATTR_GUEST_MEM_ENCRYPT = 2,
+	CC_ATTR_GUEST_STATE_ENCRYPT = 3,
+	CC_ATTR_GUEST_UNROLL_STRING_IO = 4,
+	CC_ATTR_GUEST_SEV_SNP = 5,
+	CC_ATTR_HOTPLUG_DISABLED = 6,
+};
+
+struct kvm_vmcb_info {
+	struct vmcb *ptr;
+	unsigned long pa;
+	int cpu;
+	uint64_t asid_generation;
+};
+
+struct vmcb_ctrl_area_cached {
+	u32 intercepts[6];
+	u16 pause_filter_thresh;
+	u16 pause_filter_count;
+	long: 0;
+	u64 iopm_base_pa;
+	u64 msrpm_base_pa;
+	u64 tsc_offset;
+	u32 asid;
+	u8 tlb_ctl;
+	long: 0;
+	u32 int_ctl;
+	u32 int_vector;
+	u32 int_state;
+	u32 exit_code;
+	u32 exit_code_hi;
+	long: 0;
+	u64 exit_info_1;
+	u64 exit_info_2;
+	u32 exit_int_info;
+	u32 exit_int_info_err;
+	u64 nested_ctl;
+	u32 event_inj;
+	u32 event_inj_err;
+	u64 next_rip;
+	u64 nested_cr3;
+	u64 virt_ext;
+	u32 clean;
+	union {
+		struct hv_vmcb_enlightenments hv_enlightenments;
+		u8 reserved_sw[32];
+	};
+	long: 0;
+} __attribute__((packed));
+
+struct vmcb_save_area_cached {
+	u64 efer;
+	u64 cr4;
+	u64 cr3;
+	u64 cr0;
+	u64 dr7;
+	u64 dr6;
+};
+
+struct svm_nested_state {
+	struct kvm_vmcb_info vmcb02;
+	u64 hsave_msr;
+	u64 vm_cr_msr;
+	u64 vmcb12_gpa;
+	u64 last_vmcb12_gpa;
+	u32 *msrpm;
+	bool nested_run_pending;
+	long: 0;
+	struct vmcb_ctrl_area_cached ctl;
+	struct vmcb_save_area_cached save;
+	bool initialized;
+	bool force_msr_bitmap_recalc;
+};
+
+struct sev_es_save_area;
+
+struct vcpu_sev_es_state {
+	struct sev_es_save_area *vmsa;
+	struct ghcb *ghcb;
+	u8 valid_bitmap[16];
+	struct kvm_host_map ghcb_map;
+	bool received_first_sipi;
+	u64 sw_scratch;
+	void *ghcb_sa;
+	u32 ghcb_sa_len;
+	bool ghcb_sa_sync;
+	bool ghcb_sa_free;
+};
+
+struct vcpu_svm {
+	struct kvm_vcpu vcpu;
+	struct vmcb *vmcb;
+	struct kvm_vmcb_info vmcb01;
+	struct kvm_vmcb_info *current_vmcb;
+	u32 asid;
+	u32 sysenter_esp_hi;
+	u32 sysenter_eip_hi;
+	uint64_t tsc_aux;
+	u64 msr_decfg;
+	u64 next_rip;
+	u64 spec_ctrl;
+	u64 tsc_ratio_msr;
+	u64 virt_spec_ctrl;
+	u32 *msrpm;
+	ulong nmi_iret_rip;
+	struct svm_nested_state nested;
+	bool nmi_masked;
+	bool awaiting_iret_completion;
+	bool nmi_singlestep;
+	u64 nmi_singlestep_guest_rflags;
+	bool nmi_l1_to_l2;
+	unsigned long soft_int_csbase;
+	unsigned long soft_int_old_rip;
+	unsigned long soft_int_next_rip;
+	bool soft_int_injected;
+	u32 ldr_reg;
+	u32 dfr_reg;
+	struct page *avic_backing_page;
+	u64 *avic_physical_id_cache;
+	struct list_head ir_list;
+	spinlock_t ir_list_lock;
+	struct {
+		unsigned long read[1];
+		unsigned long write[1];
+	} shadow_msr_intercept;
+	struct vcpu_sev_es_state sev_es;
+	bool guest_state_loaded;
+	bool x2avic_msrs_intercepted;
+	bool guest_gif;
+};
+
+struct sev_es_save_area {
+	struct vmcb_seg es;
+	struct vmcb_seg cs;
+	struct vmcb_seg ss;
+	struct vmcb_seg ds;
+	struct vmcb_seg fs;
+	struct vmcb_seg gs;
+	struct vmcb_seg gdtr;
+	struct vmcb_seg ldtr;
+	struct vmcb_seg idtr;
+	struct vmcb_seg tr;
+	u64 vmpl0_ssp;
+	u64 vmpl1_ssp;
+	u64 vmpl2_ssp;
+	u64 vmpl3_ssp;
+	u64 u_cet;
+	u8 reserved_0xc8[2];
+	u8 vmpl;
+	u8 cpl;
+	u8 reserved_0xcc[4];
+	u64 efer;
+	u8 reserved_0xd8[104];
+	u64 xss;
+	u64 cr4;
+	u64 cr3;
+	u64 cr0;
+	u64 dr7;
+	u64 dr6;
+	u64 rflags;
+	u64 rip;
+	u64 dr0;
+	u64 dr1;
+	u64 dr2;
+	u64 dr3;
+	u64 dr0_addr_mask;
+	u64 dr1_addr_mask;
+	u64 dr2_addr_mask;
+	u64 dr3_addr_mask;
+	u8 reserved_0x1c0[24];
+	u64 rsp;
+	u64 s_cet;
+	u64 ssp;
+	u64 isst_addr;
+	u64 rax;
+	u64 star;
+	u64 lstar;
+	u64 cstar;
+	u64 sfmask;
+	u64 kernel_gs_base;
+	u64 sysenter_cs;
+	u64 sysenter_esp;
+	u64 sysenter_eip;
+	u64 cr2;
+	u8 reserved_0x248[32];
+	u64 g_pat;
+	u64 dbgctl;
+	u64 br_from;
+	u64 br_to;
+	u64 last_excp_from;
+	u64 last_excp_to;
+	u8 reserved_0x298[80];
+	u32 pkru;
+	u32 tsc_aux;
+	u8 reserved_0x2f0[24];
+	u64 rcx;
+	u64 rdx;
+	u64 rbx;
+	u64 reserved_0x320;
+	u64 rbp;
+	u64 rsi;
+	u64 rdi;
+	u64 r8;
+	u64 r9;
+	u64 r10;
+	u64 r11;
+	u64 r12;
+	u64 r13;
+	u64 r14;
+	u64 r15;
+	u8 reserved_0x380[16];
+	u64 guest_exit_info_1;
+	u64 guest_exit_info_2;
+	u64 guest_exit_int_info;
+	u64 guest_nrip;
+	u64 sev_features;
+	u64 vintr_ctrl;
+	u64 guest_exit_code;
+	u64 virtual_tom;
+	u64 tlb_id;
+	u64 pcpu_id;
+	u64 event_inj;
+	u64 xcr0;
+	u8 reserved_0x3f0[16];
+	u64 x87_dp;
+	u32 mxcsr;
+	u16 x87_ftw;
+	u16 x87_fsw;
+	u16 x87_fcw;
+	u16 x87_fop;
+	u16 x87_ds;
+	u16 x87_cs;
+	u64 x87_rip;
+	u8 fpreg_x87[80];
+	u8 fpreg_xmm[256];
+	u8 fpreg_ymm[256];
+};
+
+enum pmu_type {
+	PMU_TYPE_COUNTER = 0,
+	PMU_TYPE_EVNTSEL = 1,
+};
+
+enum avic_ipi_failure_cause {
+	AVIC_IPI_FAILURE_INVALID_INT_TYPE = 0,
+	AVIC_IPI_FAILURE_TARGET_NOT_RUNNING = 1,
+	AVIC_IPI_FAILURE_INVALID_TARGET = 2,
+	AVIC_IPI_FAILURE_INVALID_BACKING_PAGE = 3,
+	AVIC_IPI_FAILURE_INVALID_IPI_VECTOR = 4,
+};
+
+struct misc_cg;
+
+struct kvm_sev_info {
+	bool active;
+	bool es_active;
+	unsigned int asid;
+	unsigned int handle;
+	int fd;
+	unsigned long pages_locked;
+	struct list_head regions_list;
+	u64 ap_jump_table;
+	struct kvm *enc_context_owner;
+	struct list_head mirror_vms;
+	struct list_head mirror_entry;
+	struct misc_cg *misc_cg;
+	atomic_t migration_in_progress;
+};
+
+struct kvm_svm {
+	struct kvm kvm;
+	u32 avic_vm_id;
+	struct page *avic_logical_id_table_page;
+	struct page *avic_physical_id_table_page;
+	struct hlist_node hnode;
+	struct kvm_sev_info sev_info;
+};
+
+struct amd_svm_iommu_ir {
+	struct list_head node;
+	void *data;
+};
+
+enum sev_migration_role {
+	SEV_MIGRATION_SOURCE = 0,
+	SEV_MIGRATION_TARGET = 1,
+	SEV_NR_MIGRATION_ROLES = 2,
+};
+
+enum misc_res_type {
+	MISC_CG_RES_TYPES = 0,
+};
+
+struct enc_region {
+	struct list_head list;
+	unsigned long npages;
+	struct page **pages;
+	unsigned long uaddr;
+	unsigned long size;
+};
+
+struct kvm_sev_cmd {
+	__u32 id;
+	__u64 data;
+	__u32 error;
+	__u32 sev_fd;
+};
+
+struct real_mode_header {
+	u32 text_start;
+	u32 ro_end;
+	u32 trampoline_start;
+	u32 trampoline_header;
+	u32 trampoline_start64;
+	u32 trampoline_pgd;
+	u32 wakeup_start;
+	u32 wakeup_header;
+	u32 machine_real_restart_asm;
+	u32 machine_real_restart_seg;
+};
+
+struct trampoline_header {
+	u64 start;
+	u64 efer;
+	u32 cr4;
+	u32 flags;
+	u32 lock;
+};
+
+struct screen_info {
+	__u8 orig_x;
+	__u8 orig_y;
+	__u16 ext_mem_k;
+	__u16 orig_video_page;
+	__u8 orig_video_mode;
+	__u8 orig_video_cols;
+	__u8 flags;
+	__u8 unused2;
+	__u16 orig_video_ega_bx;
+	__u16 unused3;
+	__u8 orig_video_lines;
+	__u8 orig_video_isVGA;
+	__u16 orig_video_points;
+	__u16 lfb_width;
+	__u16 lfb_height;
+	__u16 lfb_depth;
+	__u32 lfb_base;
+	__u32 lfb_size;
+	__u16 cl_magic;
+	__u16 cl_offset;
+	__u16 lfb_linelength;
+	__u8 red_size;
+	__u8 red_pos;
+	__u8 green_size;
+	__u8 green_pos;
+	__u8 blue_size;
+	__u8 blue_pos;
+	__u8 rsvd_size;
+	__u8 rsvd_pos;
+	__u16 vesapm_seg;
+	__u16 vesapm_off;
+	__u16 pages;
+	__u16 vesa_attributes;
+	__u32 capabilities;
+	__u32 ext_lfb_base;
+	__u8 _reserved[2];
+} __attribute__((packed));
+
+struct apm_bios_info {
+	__u16 version;
+	__u16 cseg;
+	__u32 offset;
+	__u16 cseg_16;
+	__u16 dseg;
+	__u16 flags;
+	__u16 cseg_len;
+	__u16 cseg_16_len;
+	__u16 dseg_len;
+};
+
+struct ist_info {
+	__u32 signature;
+	__u32 command;
+	__u32 event;
+	__u32 perf_level;
+};
+
+struct sys_desc_table {
+	__u16 length;
+	__u8 table[14];
+};
+
+struct olpc_ofw_header {
+	__u32 ofw_magic;
+	__u32 ofw_version;
+	__u32 cif_handler;
+	__u32 irq_desc_table;
+};
+
+struct edid_info {
+	unsigned char dummy[128];
+};
+
+struct efi_info {
+	__u32 efi_loader_signature;
+	__u32 efi_systab;
+	__u32 efi_memdesc_size;
+	__u32 efi_memdesc_version;
+	__u32 efi_memmap;
+	__u32 efi_memmap_size;
+	__u32 efi_systab_hi;
+	__u32 efi_memmap_hi;
+};
+
+struct setup_header {
+	__u8 setup_sects;
+	__u16 root_flags;
+	__u32 syssize;
+	__u16 ram_size;
+	__u16 vid_mode;
+	__u16 root_dev;
+	__u16 boot_flag;
+	__u16 jump;
+	__u32 header;
+	__u16 version;
+	__u32 realmode_swtch;
+	__u16 start_sys_seg;
+	__u16 kernel_version;
+	__u8 type_of_loader;
+	__u8 loadflags;
+	__u16 setup_move_size;
+	__u32 code32_start;
+	__u32 ramdisk_image;
+	__u32 ramdisk_size;
+	__u32 bootsect_kludge;
+	__u16 heap_end_ptr;
+	__u8 ext_loader_ver;
+	__u8 ext_loader_type;
+	__u32 cmd_line_ptr;
+	__u32 initrd_addr_max;
+	__u32 kernel_alignment;
+	__u8 relocatable_kernel;
+	__u8 min_alignment;
+	__u16 xloadflags;
+	__u32 cmdline_size;
+	__u32 hardware_subarch;
+	__u64 hardware_subarch_data;
+	__u32 payload_offset;
+	__u32 payload_length;
+	__u64 setup_data;
+	__u64 pref_address;
+	__u32 init_size;
+	__u32 handover_offset;
+	__u32 kernel_info_offset;
+} __attribute__((packed));
+
+struct boot_e820_entry {
+	__u64 addr;
+	__u64 size;
+	__u32 type;
+} __attribute__((packed));
+
+struct edd_device_params {
+	__u16 length;
+	__u16 info_flags;
+	__u32 num_default_cylinders;
+	__u32 num_default_heads;
+	__u32 sectors_per_track;
+	__u64 number_of_sectors;
+	__u16 bytes_per_sector;
+	__u32 dpte_ptr;
+	__u16 key;
+	__u8 device_path_info_length;
+	__u8 reserved2;
+	__u16 reserved3;
+	__u8 host_bus_type[4];
+	__u8 interface_type[8];
+	union {
+		struct {
+			__u16 base_address;
+			__u16 reserved1;
+			__u32 reserved2;
+		} isa;
+		struct {
+			__u8 bus;
+			__u8 slot;
+			__u8 function;
+			__u8 channel;
+			__u32 reserved;
+		} pci;
+		struct {
+			__u64 reserved;
+		} ibnd;
+		struct {
+			__u64 reserved;
+		} xprs;
+		struct {
+			__u64 reserved;
+		} htpt;
+		struct {
+			__u64 reserved;
+		} unknown;
+	} interface_path;
+	union {
+		struct {
+			__u8 device;
+			__u8 reserved1;
+			__u16 reserved2;
+			__u32 reserved3;
+			__u64 reserved4;
+		} ata;
+		struct {
+			__u8 device;
+			__u8 lun;
+			__u8 reserved1;
+			__u8 reserved2;
+			__u32 reserved3;
+			__u64 reserved4;
+		} atapi;
+		struct {
+			__u16 id;
+			__u64 lun;
+			__u16 reserved1;
+			__u32 reserved2;
+		} __attribute__((packed)) scsi;
+		struct {
+			__u64 serial_number;
+			__u64 reserved;
+		} usb;
+		struct {
+			__u64 eui;
+			__u64 reserved;
+		} i1394;
+		struct {
+			__u64 wwid;
+			__u64 lun;
+		} fibre;
+		struct {
+			__u64 identity_tag;
+			__u64 reserved;
+		} i2o;
+		struct {
+			__u32 array_number;
+			__u32 reserved1;
+			__u64 reserved2;
+		} raid;
+		struct {
+			__u8 device;
+			__u8 reserved1;
+			__u16 reserved2;
+			__u32 reserved3;
+			__u64 reserved4;
+		} sata;
+		struct {
+			__u64 reserved1;
+			__u64 reserved2;
+		} unknown;
+	} device_path;
+	__u8 reserved4;
+	__u8 checksum;
+} __attribute__((packed));
+
+struct edd_info {
+	__u8 device;
+	__u8 version;
+	__u16 interface_support;
+	__u16 legacy_max_cylinder;
+	__u8 legacy_max_head;
+	__u8 legacy_sectors_per_track;
+	struct edd_device_params params;
+};
+
+struct boot_params {
+	struct screen_info screen_info;
+	struct apm_bios_info apm_bios_info;
+	__u8 _pad2[4];
+	__u64 tboot_addr;
+	struct ist_info ist_info;
+	__u64 acpi_rsdp_addr;
+	__u8 _pad3[8];
+	__u8 hd0_info[16];
+	__u8 hd1_info[16];
+	struct sys_desc_table sys_desc_table;
+	struct olpc_ofw_header olpc_ofw_header;
+	__u32 ext_ramdisk_image;
+	__u32 ext_ramdisk_size;
+	__u32 ext_cmd_line_ptr;
+	__u8 _pad4[112];
+	__u32 cc_blob_address;
+	struct edid_info edid_info;
+	struct efi_info efi_info;
+	__u32 alt_mem_k;
+	__u32 scratch;
+	__u8 e820_entries;
+	__u8 eddbuf_entries;
+	__u8 edd_mbr_sig_buf_entries;
+	__u8 kbd_status;
+	__u8 secure_boot;
+	__u8 _pad5[2];
+	__u8 sentinel;
+	__u8 _pad6[1];
+	struct setup_header hdr;
+	__u8 _pad7[36];
+	__u32 edd_mbr_sig_buffer[16];
+	struct boot_e820_entry e820_table[128];
+	__u8 _pad8[48];
+	struct edd_info eddbuf[6];
+	__u8 _pad9[276];
+};
+
+enum x86_hardware_subarch {
+	X86_SUBARCH_PC = 0,
+	X86_SUBARCH_LGUEST = 1,
+	X86_SUBARCH_XEN = 2,
+	X86_SUBARCH_INTEL_MID = 3,
+	X86_SUBARCH_CE4100 = 4,
+	X86_NR_SUBARCHS = 5,
+};
+
+typedef unsigned long p4dval_t;
+
+struct boot_params_to_save {
+	unsigned int start;
+	unsigned int len;
+};
+
+enum x86_legacy_i8042_state {
+	X86_LEGACY_I8042_PLATFORM_ABSENT = 0,
+	X86_LEGACY_I8042_FIRMWARE_ABSENT = 1,
+	X86_LEGACY_I8042_EXPECTED_PRESENT = 2,
+};
+
+enum show_regs_mode {
+	SHOW_REGS_SHORT = 0,
+	SHOW_REGS_USER = 1,
+	SHOW_REGS_ALL = 2,
+};
+
+enum {
+	UNAME26 = 131072,
+	ADDR_NO_RANDOMIZE = 262144,
+	FDPIC_FUNCPTRS = 524288,
+	MMAP_PAGE_ZERO = 1048576,
+	ADDR_COMPAT_LAYOUT = 2097152,
+	READ_IMPLIES_EXEC = 4194304,
+	ADDR_LIMIT_32BIT = 8388608,
+	SHORT_INODE = 16777216,
+	WHOLE_SECONDS = 33554432,
+	STICKY_TIMEOUTS = 67108864,
+	ADDR_LIMIT_3GB = 134217728,
+};
+
+enum which_selector {
+	FS = 0,
+	GS = 1,
+};
+
+struct kernel_vm86_regs {
+	struct pt_regs pt;
+	unsigned short es;
+	unsigned short __esh;
+	unsigned short ds;
+	unsigned short __dsh;
+	unsigned short fs;
+	unsigned short __fsh;
+	unsigned short gs;
+	unsigned short __gsh;
+};
+
+struct ksignal {
+	struct k_sigaction ka;
+	kernel_siginfo_t info;
+	int sig;
+};
+
+struct sigaltstack {
+	void __attribute__((btf_type_tag("user"))) *ss_sp;
+	int ss_flags;
+	__kernel_size_t ss_size;
+};
+
+typedef struct sigaltstack stack_t;
+
+struct sigcontext_64 {
+	__u64 r8;
+	__u64 r9;
+	__u64 r10;
+	__u64 r11;
+	__u64 r12;
+	__u64 r13;
+	__u64 r14;
+	__u64 r15;
+	__u64 di;
+	__u64 si;
+	__u64 bp;
+	__u64 bx;
+	__u64 dx;
+	__u64 ax;
+	__u64 cx;
+	__u64 sp;
+	__u64 ip;
+	__u64 flags;
+	__u16 cs;
+	__u16 gs;
+	__u16 fs;
+	__u16 ss;
+	__u64 err;
+	__u64 trapno;
+	__u64 oldmask;
+	__u64 cr2;
+	__u64 fpstate;
+	__u64 reserved1[8];
+};
+
+struct ucontext {
+	unsigned long uc_flags;
+	struct ucontext *uc_link;
+	stack_t uc_stack;
+	struct sigcontext_64 uc_mcontext;
+	sigset_t uc_sigmask;
+};
+
+struct siginfo {
+	union {
+		struct {
+			int si_signo;
+			int si_errno;
+			int si_code;
+			union __sifields _sifields;
+		};
+		int _si_pad[32];
+	};
+};
+
+struct rt_sigframe {
+	char __attribute__((btf_type_tag("user"))) *pretcode;
+	struct ucontext uc;
+	struct siginfo info;
+};
+
+typedef struct siginfo siginfo_t;
+
+enum die_val {
+	DIE_OOPS = 1,
+	DIE_INT3 = 2,
+	DIE_DEBUG = 3,
+	DIE_PANIC = 4,
+	DIE_NMI = 5,
+	DIE_DIE = 6,
+	DIE_KERNELDEBUG = 7,
+	DIE_TRAP = 8,
+	DIE_GPF = 9,
+	DIE_CALL = 10,
+	DIE_PAGE_FAULT = 11,
+	DIE_NMIUNKNOWN = 12,
+};
+
+enum bug_trap_type {
+	BUG_TRAP_TYPE_NONE = 0,
+	BUG_TRAP_TYPE_WARN = 1,
+	BUG_TRAP_TYPE_BUG = 2,
+};
+
+enum kernel_gp_hint {
+	GP_NO_HINT = 0,
+	GP_NON_CANONICAL = 1,
+	GP_CANONICAL = 2,
+};
+
+enum insn_mode {
+	INSN_MODE_32 = 0,
+	INSN_MODE_64 = 1,
+	INSN_MODE_KERN = 2,
+	INSN_NUM_MODES = 3,
+};
+
+typedef u8 kprobe_opcode_t;
+
+struct kprobe;
+
+typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);
+
+typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, unsigned long);
+
+struct arch_specific_insn {
+	kprobe_opcode_t *insn;
+	unsigned int boostable: 1;
+	unsigned char size;
+	union {
+		unsigned char opcode;
+		struct {
+			unsigned char type;
+		} jcc;
+		struct {
+			unsigned char type;
+			unsigned char asize;
+		} loop;
+		struct {
+			unsigned char reg;
+		} indirect;
+	};
+	s32 rel32;
+	void (*emulate_op)(struct kprobe *, struct pt_regs *);
+	int tp_len;
+};
+
+struct kprobe {
+	struct hlist_node hlist;
+	struct list_head list;
+	unsigned long nmissed;
+	kprobe_opcode_t *addr;
+	const char *symbol_name;
+	unsigned int offset;
+	kprobe_pre_handler_t pre_handler;
+	kprobe_post_handler_t post_handler;
+	kprobe_opcode_t opcode;
+	struct arch_specific_insn ainsn;
+	u32 flags;
+};
+
+struct idt_data {
+	unsigned int vector;
+	unsigned int segment;
+	struct idt_bits bits;
+	const void *addr;
+};
+
+enum {
+	GATE_INTERRUPT = 14,
+	GATE_TRAP = 15,
+	GATE_CALL = 12,
+	GATE_TASK = 5,
+};
+
+typedef void (*btf_trace_local_timer_entry)(void *, int);
+
+typedef void (*btf_trace_local_timer_exit)(void *, int);
+
+typedef void (*btf_trace_spurious_apic_entry)(void *, int);
+
+typedef void (*btf_trace_spurious_apic_exit)(void *, int);
+
+typedef void (*btf_trace_error_apic_entry)(void *, int);
+
+typedef void (*btf_trace_error_apic_exit)(void *, int);
+
+typedef void (*btf_trace_x86_platform_ipi_entry)(void *, int);
+
+typedef void (*btf_trace_x86_platform_ipi_exit)(void *, int);
+
+typedef void (*btf_trace_irq_work_entry)(void *, int);
+
+typedef void (*btf_trace_irq_work_exit)(void *, int);
+
+typedef void (*btf_trace_reschedule_entry)(void *, int);
+
+typedef void (*btf_trace_reschedule_exit)(void *, int);
+
+typedef void (*btf_trace_call_function_entry)(void *, int);
+
+typedef void (*btf_trace_call_function_exit)(void *, int);
+
+typedef void (*btf_trace_call_function_single_entry)(void *, int);
+
+typedef void (*btf_trace_call_function_single_exit)(void *, int);
+
+typedef void (*btf_trace_thermal_apic_entry)(void *, int);
+
+typedef void (*btf_trace_thermal_apic_exit)(void *, int);
+
+typedef void (*btf_trace_vector_config)(void *, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_vector_update)(void *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_vector_clear)(void *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_vector_reserve_managed)(void *, unsigned int, int);
+
+typedef void (*btf_trace_vector_reserve)(void *, unsigned int, int);
+
+typedef void (*btf_trace_vector_alloc)(void *, unsigned int, unsigned int, bool, int);
+
+typedef void (*btf_trace_vector_alloc_managed)(void *, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_vector_activate)(void *, unsigned int, bool, bool, bool);
+
+typedef void (*btf_trace_vector_deactivate)(void *, unsigned int, bool, bool, bool);
+
+typedef void (*btf_trace_vector_teardown)(void *, unsigned int, bool, bool);
+
+typedef void (*btf_trace_vector_setup)(void *, unsigned int, bool, int);
+
+typedef void (*btf_trace_vector_free_moved)(void *, unsigned int, unsigned int, unsigned int, bool);
+
+typedef struct {
+	u8 kvm_cpu_l1tf_flush_l1d;
+	unsigned int __nmi_count;
+	unsigned int apic_timer_irqs;
+	unsigned int irq_spurious_count;
+	unsigned int icr_read_retry_count;
+	unsigned int kvm_posted_intr_ipis;
+	unsigned int kvm_posted_intr_wakeup_ipis;
+	unsigned int kvm_posted_intr_nested_ipis;
+	unsigned int x86_platform_ipis;
+	unsigned int apic_perf_irqs;
+	unsigned int apic_irq_work_irqs;
+	unsigned int irq_resched_count;
+	unsigned int irq_call_count;
+	unsigned int irq_tlb_count;
+	unsigned int irq_thermal_count;
+	unsigned int irq_hv_callback_count;
+} irq_cpustat_t;
+
+struct trace_event_raw_x86_irq_vector {
+	struct trace_entry ent;
+	int vector;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_config {
+	struct trace_entry ent;
+	unsigned int irq;
+	unsigned int vector;
+	unsigned int cpu;
+	unsigned int apicdest;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_mod {
+	struct trace_entry ent;
+	unsigned int irq;
+	unsigned int vector;
+	unsigned int cpu;
+	unsigned int prev_vector;
+	unsigned int prev_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_reserve {
+	struct trace_entry ent;
+	unsigned int irq;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_alloc {
+	struct trace_entry ent;
+	unsigned int irq;
+	unsigned int vector;
+	bool reserved;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_alloc_managed {
+	struct trace_entry ent;
+	unsigned int irq;
+	unsigned int vector;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_activate {
+	struct trace_entry ent;
+	unsigned int irq;
+	bool is_managed;
+	bool can_reserve;
+	bool reserve;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_teardown {
+	struct trace_entry ent;
+	unsigned int irq;
+	bool is_managed;
+	bool has_reserved;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_setup {
+	struct trace_entry ent;
+	unsigned int irq;
+	bool is_legacy;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_vector_free_moved {
+	struct trace_entry ent;
+	unsigned int irq;
+	unsigned int cpu;
+	unsigned int vector;
+	bool is_managed;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_x86_irq_vector {};
+
+struct trace_event_data_offsets_vector_config {};
+
+struct trace_event_data_offsets_vector_mod {};
+
+struct trace_event_data_offsets_vector_reserve {};
+
+struct trace_event_data_offsets_vector_alloc {};
+
+struct trace_event_data_offsets_vector_alloc_managed {};
+
+struct trace_event_data_offsets_vector_activate {};
+
+struct trace_event_data_offsets_vector_teardown {};
+
+struct trace_event_data_offsets_vector_setup {};
+
+struct trace_event_data_offsets_vector_free_moved {};
+
+struct irq_stack {
+	char stack[16384];
+};
+
+struct estack_pages {
+	u32 offs;
+	u16 size;
+	u16 type;
+};
+
+enum lockdown_reason {
+	LOCKDOWN_NONE = 0,
+	LOCKDOWN_MODULE_SIGNATURE = 1,
+	LOCKDOWN_DEV_MEM = 2,
+	LOCKDOWN_EFI_TEST = 3,
+	LOCKDOWN_KEXEC = 4,
+	LOCKDOWN_HIBERNATION = 5,
+	LOCKDOWN_PCI_ACCESS = 6,
+	LOCKDOWN_IOPORT = 7,
+	LOCKDOWN_MSR = 8,
+	LOCKDOWN_ACPI_TABLES = 9,
+	LOCKDOWN_DEVICE_TREE = 10,
+	LOCKDOWN_PCMCIA_CIS = 11,
+	LOCKDOWN_TIOCSSERIAL = 12,
+	LOCKDOWN_MODULE_PARAMETERS = 13,
+	LOCKDOWN_MMIOTRACE = 14,
+	LOCKDOWN_DEBUGFS = 15,
+	LOCKDOWN_XMON_WR = 16,
+	LOCKDOWN_BPF_WRITE_USER = 17,
+	LOCKDOWN_DBG_WRITE_KERNEL = 18,
+	LOCKDOWN_RTAS_ERROR_INJECTION = 19,
+	LOCKDOWN_INTEGRITY_MAX = 20,
+	LOCKDOWN_KCORE = 21,
+	LOCKDOWN_KPROBES = 22,
+	LOCKDOWN_BPF_READ_KERNEL = 23,
+	LOCKDOWN_DBG_READ_KERNEL = 24,
+	LOCKDOWN_PERF = 25,
+	LOCKDOWN_TRACEFS = 26,
+	LOCKDOWN_XMON_RW = 27,
+	LOCKDOWN_XFRM_SECRET = 28,
+	LOCKDOWN_CONFIDENTIALITY_MAX = 29,
+};
+
+enum lockdep_ok {
+	LOCKDEP_STILL_OK = 0,
+	LOCKDEP_NOW_UNRELIABLE = 1,
+};
+
+typedef void (*btf_trace_nmi_handler)(void *, void *, s64, int);
+
+struct nmi_stats {
+	unsigned int normal;
+	unsigned int unknown;
+	unsigned int external;
+	unsigned int swallow;
+	unsigned long recv_jiffies;
+	unsigned long idt_seq;
+	unsigned long idt_nmi_seq;
+	unsigned long idt_ignored;
+	atomic_long_t idt_calls;
+	unsigned long idt_seq_snap;
+	unsigned long idt_nmi_seq_snap;
+	unsigned long idt_ignored_snap;
+	long idt_calls_snap;
+};
+
+enum nmi_states {
+	NMI_NOT_RUNNING = 0,
+	NMI_EXECUTING = 1,
+	NMI_LATCHED = 2,
+};
+
+struct nmi_desc {
+	raw_spinlock_t lock;
+	struct list_head head;
+};
+
+struct trace_event_raw_nmi_handler {
+	struct trace_entry ent;
+	void *handler;
+	s64 delta_ns;
+	int handled;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_nmi_handler {};
+
+typedef struct ldttss_desc ldt_desc;
+
+struct encoded_page;
+
+struct mmu_gather_batch {
+	struct mmu_gather_batch *next;
+	unsigned int nr;
+	unsigned int max;
+	struct encoded_page *encoded_pages[0];
+};
+
+struct mmu_table_batch;
+
+struct mmu_gather {
+	struct mm_struct *mm;
+	struct mmu_table_batch *batch;
+	unsigned long start;
+	unsigned long end;
+	unsigned int fullmm: 1;
+	unsigned int need_flush_all: 1;
+	unsigned int freed_tables: 1;
+	unsigned int delayed_rmap: 1;
+	unsigned int cleared_ptes: 1;
+	unsigned int cleared_pmds: 1;
+	unsigned int cleared_puds: 1;
+	unsigned int cleared_p4ds: 1;
+	unsigned int vma_exec: 1;
+	unsigned int vma_huge: 1;
+	unsigned int vma_pfn: 1;
+	unsigned int batch_count;
+	struct mmu_gather_batch *active;
+	struct mmu_gather_batch local;
+	struct page *__pages[8];
+};
+
+struct mmu_table_batch {
+	struct callback_head rcu;
+	unsigned int nr;
+	void *tables[0];
+};
+
+struct user_desc {
+	unsigned int entry_number;
+	unsigned int base_addr;
+	unsigned int limit;
+	unsigned int seg_32bit: 1;
+	unsigned int contents: 2;
+	unsigned int read_exec_only: 1;
+	unsigned int limit_in_pages: 1;
+	unsigned int seg_not_present: 1;
+	unsigned int useable: 1;
+	unsigned int lm: 1;
+};
+
+enum efi_secureboot_mode {
+	efi_secureboot_mode_unset = 0,
+	efi_secureboot_mode_unknown = 1,
+	efi_secureboot_mode_disabled = 2,
+	efi_secureboot_mode_enabled = 3,
+};
+
+struct setup_indirect {
+	__u32 type;
+	__u32 reserved;
+	__u64 len;
+	__u64 addr;
+};
+
+struct e820_entry {
+	u64 addr;
+	u64 size;
+	enum e820_type type;
+} __attribute__((packed));
+
+struct e820_table {
+	__u32 nr_entries;
+	struct e820_entry entries[131];
+};
+
+struct atomic_notifier_head {
+	spinlock_t lock;
+	struct notifier_block __attribute__((btf_type_tag("rcu"))) *head;
+};
+
+struct setup_data {
+	__u64 next;
+	__u32 type;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct x86_init_resources {
+	void (*probe_roms)();
+	void (*reserve_resources)();
+	char * (*memory_setup)();
+	void (*dmi_setup)();
+};
+
+struct x86_init_mpparse {
+	void (*setup_ioapic_ids)();
+	void (*find_smp_config)();
+	void (*get_smp_config)(unsigned int);
+};
+
+struct x86_init_irqs {
+	void (*pre_vector_init)();
+	void (*intr_init)();
+	void (*intr_mode_select)();
+	void (*intr_mode_init)();
+	struct irq_domain * (*create_pci_msi_domain)();
+};
+
+struct x86_init_oem {
+	void (*arch_setup)();
+	void (*banner)();
+};
+
+struct x86_init_paging {
+	void (*pagetable_init)();
+};
+
+struct x86_init_timers {
+	void (*setup_percpu_clockev)();
+	void (*timer_init)();
+	void (*wallclock_init)();
+};
+
+struct x86_init_iommu {
+	int (*iommu_init)();
+};
+
+struct x86_init_pci {
+	int (*arch_init)();
+	int (*init)();
+	void (*init_irq)();
+	void (*fixup_irqs)();
+};
+
+struct x86_hyper_init {
+	void (*init_platform)();
+	void (*guest_late_init)();
+	bool (*x2apic_available)();
+	bool (*msi_ext_dest_id)();
+	void (*init_mem_mapping)();
+	void (*init_after_bootmem)();
+};
+
+struct x86_init_acpi {
+	void (*set_root_pointer)(u64);
+	u64 (*get_root_pointer)();
+	void (*reduced_hw_early_init)();
+};
+
+struct x86_init_ops {
+	struct x86_init_resources resources;
+	struct x86_init_mpparse mpparse;
+	struct x86_init_irqs irqs;
+	struct x86_init_oem oem;
+	struct x86_init_paging paging;
+	struct x86_init_timers timers;
+	struct x86_init_iommu iommu;
+	struct x86_init_pci pci;
+	struct x86_hyper_init hyper;
+	struct x86_init_acpi acpi;
+};
+
+struct x86_cpuinit_ops {
+	void (*setup_percpu_clockev)();
+	void (*early_percpu_clock_init)();
+	void (*fixup_cpu_id)(struct cpuinfo_x86 *, int);
+	bool parallel_bringup;
+};
+
+struct x86_legacy_devices {
+	int pnpbios;
+};
+
+struct x86_legacy_features {
+	enum x86_legacy_i8042_state i8042;
+	int rtc;
+	int warm_reset;
+	int no_vga;
+	int reserve_bios_regions;
+	struct x86_legacy_devices devices;
+};
+
+struct x86_hyper_runtime {
+	void (*pin_vcpu)(int);
+	void (*sev_es_hcall_prepare)(struct ghcb *, struct pt_regs *);
+	bool (*sev_es_hcall_finish)(struct ghcb *, struct pt_regs *);
+	bool (*is_private_mmio)(u64);
+};
+
+struct x86_guest {
+	bool (*enc_status_change_prepare)(unsigned long, int, bool);
+	bool (*enc_status_change_finish)(unsigned long, int, bool);
+	bool (*enc_tlb_flush_required)(bool);
+	bool (*enc_cache_flush_required)();
+};
+
+struct x86_platform_ops {
+	unsigned long (*calibrate_cpu)();
+	unsigned long (*calibrate_tsc)();
+	void (*get_wallclock)(struct timespec64 *);
+	int (*set_wallclock)(const struct timespec64 *);
+	void (*iommu_shutdown)();
+	bool (*is_untracked_pat_range)(u64, u64);
+	void (*nmi_init)();
+	unsigned char (*get_nmi_reason)();
+	void (*save_sched_clock_state)();
+	void (*restore_sched_clock_state)();
+	void (*apic_post_init)();
+	struct x86_legacy_features legacy;
+	void (*set_legacy_features)();
+	void (*realmode_reserve)();
+	void (*realmode_init)();
+	struct x86_hyper_runtime hyper;
+	struct x86_guest guest;
+};
+
+struct x86_apic_ops {
+	unsigned int (*io_apic_read)(unsigned int, unsigned int);
+	void (*restore)();
+};
+
+struct legacy_pic {
+	int nr_legacy_irqs;
+	struct irq_chip *chip;
+	void (*mask)(unsigned int);
+	void (*unmask)(unsigned int);
+	void (*mask_all)();
+	void (*restore_mask)();
+	void (*init)(int);
+	int (*probe)();
+	int (*irq_pending)(unsigned int);
+	void (*make_irq)(unsigned int);
+};
+
+enum {
+	IRQ_TYPE_NONE = 0,
+	IRQ_TYPE_EDGE_RISING = 1,
+	IRQ_TYPE_EDGE_FALLING = 2,
+	IRQ_TYPE_EDGE_BOTH = 3,
+	IRQ_TYPE_LEVEL_HIGH = 4,
+	IRQ_TYPE_LEVEL_LOW = 8,
+	IRQ_TYPE_LEVEL_MASK = 12,
+	IRQ_TYPE_SENSE_MASK = 15,
+	IRQ_TYPE_DEFAULT = 15,
+	IRQ_TYPE_PROBE = 16,
+	IRQ_LEVEL = 256,
+	IRQ_PER_CPU = 512,
+	IRQ_NOPROBE = 1024,
+	IRQ_NOREQUEST = 2048,
+	IRQ_NOAUTOEN = 4096,
+	IRQ_NO_BALANCING = 8192,
+	IRQ_MOVE_PCNTXT = 16384,
+	IRQ_NESTED_THREAD = 32768,
+	IRQ_NOTHREAD = 65536,
+	IRQ_PER_CPU_DEVID = 131072,
+	IRQ_IS_POLLED = 262144,
+	IRQ_DISABLE_UNLAZY = 524288,
+	IRQ_HIDDEN = 1048576,
+	IRQ_NO_DEBUG = 2097152,
+};
+
+typedef struct irq_desc *vector_irq_t[256];
+
+union text_poke_insn {
+	u8 text[5];
+	struct {
+		u8 opcode;
+		s32 disp;
+	} __attribute__((packed));
+};
+
+enum jump_label_type {
+	JUMP_LABEL_NOP = 0,
+	JUMP_LABEL_JMP = 1,
+};
+
+struct jump_label_patch {
+	const void *code;
+	int size;
+};
+
+struct stat64 {
+	unsigned long long st_dev;
+	unsigned char __pad0[4];
+	unsigned int __st_ino;
+	unsigned int st_mode;
+	unsigned int st_nlink;
+	unsigned int st_uid;
+	unsigned int st_gid;
+	unsigned long long st_rdev;
+	unsigned char __pad3[4];
+	long long st_size;
+	unsigned int st_blksize;
+	long long st_blocks;
+	unsigned int st_atime;
+	unsigned int st_atime_nsec;
+	unsigned int st_mtime;
+	unsigned int st_mtime_nsec;
+	unsigned int st_ctime;
+	unsigned int st_ctime_nsec;
+	unsigned long long st_ino;
+} __attribute__((packed));
+
+struct mmap_arg_struct32 {
+	unsigned int addr;
+	unsigned int len;
+	unsigned int prot;
+	unsigned int flags;
+	unsigned int fd;
+	unsigned int offset;
+};
+
+struct kernel_clone_args {
+	u64 flags;
+	int __attribute__((btf_type_tag("user"))) *pidfd;
+	int __attribute__((btf_type_tag("user"))) *child_tid;
+	int __attribute__((btf_type_tag("user"))) *parent_tid;
+	const char *name;
+	int exit_signal;
+	u32 kthread: 1;
+	u32 io_thread: 1;
+	u32 user_worker: 1;
+	u32 no_files: 1;
+	unsigned long stack;
+	unsigned long stack_size;
+	unsigned long tls;
+	pid_t *set_tid;
+	size_t set_tid_size;
+	int cgroup;
+	int idle;
+	int (*fn)(void *);
+	void *fn_arg;
+	struct cgroup *cgrp;
+	struct css_set *cset;
+};
+
+struct kstatfs {
+	long f_type;
+	long f_bsize;
+	u64 f_blocks;
+	u64 f_bfree;
+	u64 f_bavail;
+	u64 f_files;
+	u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	long f_namelen;
+	long f_frsize;
+	long f_flags;
+	long f_spare[4];
+};
+
+typedef u32 compat_size_t;
+
+struct sigcontext_32 {
+	__u16 gs;
+	__u16 __gsh;
+	__u16 fs;
+	__u16 __fsh;
+	__u16 es;
+	__u16 __esh;
+	__u16 ds;
+	__u16 __dsh;
+	__u32 di;
+	__u32 si;
+	__u32 bp;
+	__u32 sp;
+	__u32 bx;
+	__u32 dx;
+	__u32 cx;
+	__u32 ax;
+	__u32 trapno;
+	__u32 err;
+	__u32 ip;
+	__u16 cs;
+	__u16 __csh;
+	__u32 flags;
+	__u32 sp_at_signal;
+	__u16 ss;
+	__u16 __ssh;
+	__u32 fpstate;
+	__u32 oldmask;
+	__u32 cr2;
+};
+
+struct _fpreg {
+	__u16 significand[4];
+	__u16 exponent;
+};
+
+struct _fpxreg {
+	__u16 significand[4];
+	__u16 exponent;
+	__u16 padding[3];
+};
+
+struct _xmmreg {
+	__u32 element[4];
+};
+
+struct _fpx_sw_bytes {
+	__u32 magic1;
+	__u32 extended_size;
+	__u64 xfeatures;
+	__u32 xstate_size;
+	__u32 padding[7];
+};
+
+struct _fpstate_32 {
+	__u32 cw;
+	__u32 sw;
+	__u32 tag;
+	__u32 ipoff;
+	__u32 cssel;
+	__u32 dataoff;
+	__u32 datasel;
+	struct _fpreg _st[8];
+	__u16 status;
+	__u16 magic;
+	__u32 _fxsr_env[6];
+	__u32 mxcsr;
+	__u32 reserved;
+	struct _fpxreg _fxsr_st[8];
+	struct _xmmreg _xmm[8];
+	union {
+		__u32 padding1[44];
+		__u32 padding[44];
+	};
+	union {
+		__u32 padding2[12];
+		struct _fpx_sw_bytes sw_reserved;
+	};
+};
+
+struct sigframe_ia32 {
+	u32 pretcode;
+	int sig;
+	struct sigcontext_32 sc;
+	struct _fpstate_32 fpstate_unused;
+	unsigned int extramask[1];
+	char retcode[8];
+};
+
+typedef s32 compat_pid_t;
+
+typedef u32 __compat_uid32_t;
+
+typedef s32 compat_timer_t;
+
+typedef s32 compat_int_t;
+
+union compat_sigval {
+	compat_int_t sival_int;
+	compat_uptr_t sival_ptr;
+};
+
+typedef union compat_sigval compat_sigval_t;
+
+typedef s32 compat_clock_t;
+
+typedef u32 compat_ulong_t;
+
+struct compat_siginfo {
+	int si_signo;
+	int si_errno;
+	int si_code;
+	union {
+		int _pad[29];
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+		} _kill;
+		struct {
+			compat_timer_t _tid;
+			int _overrun;
+			compat_sigval_t _sigval;
+		} _timer;
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+			compat_sigval_t _sigval;
+		} _rt;
+		struct {
+			compat_pid_t _pid;
+			__compat_uid32_t _uid;
+			int _status;
+			compat_clock_t _utime;
+			compat_clock_t _stime;
+		} _sigchld;
+		struct {
+			compat_uptr_t _addr;
+			union {
+				int _trapno;
+				short _addr_lsb;
+				struct {
+					char _dummy_bnd[4];
+					compat_uptr_t _lower;
+					compat_uptr_t _upper;
+				} _addr_bnd;
+				struct {
+					char _dummy_pkey[4];
+					u32 _pkey;
+				} _addr_pkey;
+				struct {
+					compat_ulong_t _data;
+					u32 _type;
+					u32 _flags;
+				} _perf;
+			};
+		} _sigfault;
+		struct {
+			compat_long_t _band;
+			int _fd;
+		} _sigpoll;
+		struct {
+			compat_uptr_t _call_addr;
+			int _syscall;
+			unsigned int _arch;
+		} _sigsys;
+	} _sifields;
+};
+
+typedef struct compat_siginfo compat_siginfo_t;
+
+struct compat_sigaltstack {
+	compat_uptr_t ss_sp;
+	int ss_flags;
+	compat_size_t ss_size;
+};
+
+typedef struct compat_sigaltstack compat_stack_t;
+
+struct ucontext_ia32 {
+	unsigned int uc_flags;
+	unsigned int uc_link;
+	compat_stack_t uc_stack;
+	struct sigcontext_32 uc_mcontext;
+	compat_sigset_t uc_sigmask;
+};
+
+struct rt_sigframe_ia32 {
+	u32 pretcode;
+	int sig;
+	u32 pinfo;
+	u32 puc;
+	compat_siginfo_t info;
+	struct ucontext_ia32 uc;
+	char retcode[8];
+};
+
+enum align_flags {
+	ALIGN_VA_32 = 1,
+	ALIGN_VA_64 = 2,
+};
+
+struct vm_unmapped_area_info {
+	unsigned long flags;
+	unsigned long length;
+	unsigned long low_limit;
+	unsigned long high_limit;
+	unsigned long align_mask;
+	unsigned long align_offset;
+};
+
+struct kobj_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);
+};
+
+struct change_member {
+	struct e820_entry *entry;
+	unsigned long long addr;
+};
+
+enum {
+	IORES_DESC_NONE = 0,
+	IORES_DESC_CRASH_KERNEL = 1,
+	IORES_DESC_ACPI_TABLES = 2,
+	IORES_DESC_ACPI_NV_STORAGE = 3,
+	IORES_DESC_PERSISTENT_MEMORY = 4,
+	IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
+	IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
+	IORES_DESC_RESERVED = 7,
+	IORES_DESC_SOFT_RESERVED = 8,
+	IORES_DESC_CXL = 9,
+};
+
+struct io_tlb_area;
+
+struct io_tlb_slot;
+
+struct io_tlb_pool {
+	phys_addr_t start;
+	phys_addr_t end;
+	void *vaddr;
+	unsigned long nslabs;
+	bool late_alloc;
+	unsigned int nareas;
+	unsigned int area_nslabs;
+	struct io_tlb_area *areas;
+	struct io_tlb_slot *slots;
+	struct list_head node;
+	struct callback_head rcu;
+	bool transient;
+};
+
+struct io_tlb_mem {
+	struct io_tlb_pool defpool;
+	unsigned long nslabs;
+	struct dentry *debugfs;
+	bool force_bounce;
+	bool for_alloc;
+	bool can_grow;
+	u64 phys_limit;
+	spinlock_t lock;
+	struct list_head pools;
+	struct work_struct dyn_alloc;
+	atomic_long_t total_used;
+	atomic_long_t used_hiwater;
+};
+
+struct sg_table {
+	struct scatterlist *sgl;
+	unsigned int nents;
+	unsigned int orig_nents;
+};
+
+struct scatterlist {
+	unsigned long page_link;
+	unsigned int offset;
+	unsigned int length;
+	dma_addr_t dma_address;
+	unsigned int dma_length;
+	unsigned int dma_flags;
+};
+
+enum {
+	NONE_FORCE_HPET_RESUME = 0,
+	OLD_ICH_FORCE_HPET_RESUME = 1,
+	ICH_FORCE_HPET_RESUME = 2,
+	VT8237_FORCE_HPET_RESUME = 3,
+	NVIDIA_FORCE_HPET_RESUME = 4,
+	ATI_FORCE_HPET_RESUME = 5,
+};
+
+enum dmi_field {
+	DMI_NONE = 0,
+	DMI_BIOS_VENDOR = 1,
+	DMI_BIOS_VERSION = 2,
+	DMI_BIOS_DATE = 3,
+	DMI_BIOS_RELEASE = 4,
+	DMI_EC_FIRMWARE_RELEASE = 5,
+	DMI_SYS_VENDOR = 6,
+	DMI_PRODUCT_NAME = 7,
+	DMI_PRODUCT_VERSION = 8,
+	DMI_PRODUCT_SERIAL = 9,
+	DMI_PRODUCT_UUID = 10,
+	DMI_PRODUCT_SKU = 11,
+	DMI_PRODUCT_FAMILY = 12,
+	DMI_BOARD_VENDOR = 13,
+	DMI_BOARD_NAME = 14,
+	DMI_BOARD_VERSION = 15,
+	DMI_BOARD_SERIAL = 16,
+	DMI_BOARD_ASSET_TAG = 17,
+	DMI_CHASSIS_VENDOR = 18,
+	DMI_CHASSIS_TYPE = 19,
+	DMI_CHASSIS_VERSION = 20,
+	DMI_CHASSIS_SERIAL = 21,
+	DMI_CHASSIS_ASSET_TAG = 22,
+	DMI_STRING_MAX = 23,
+	DMI_OEM_STRING = 24,
+};
+
+struct cpu {
+	int node_id;
+	int hotpluggable;
+	struct device dev;
+};
+
+struct x86_cpu {
+	struct cpu cpu;
+};
+
+struct text_poke_loc {
+	s32 rel_addr;
+	s32 disp;
+	u8 len;
+	u8 opcode;
+	const u8 text[5];
+	u8 old;
+};
+
+enum cfi_mode {
+	CFI_DEFAULT = 0,
+	CFI_OFF = 1,
+	CFI_KCFI = 2,
+	CFI_FINEIBT = 3,
+};
+
+struct bp_patching_desc {
+	struct text_poke_loc *vec;
+	int nr_entries;
+	atomic_t refs;
+};
+
+struct smp_alt_module {
+	struct module *mod;
+	char *name;
+	const s32 *locks;
+	const s32 *locks_end;
+	u8 *text;
+	u8 *text_end;
+	struct list_head next;
+};
+
+typedef u8 retpoline_thunk_t[32];
+
+typedef struct {
+	struct mm_struct *mm;
+} temp_mm_state_t;
+
+struct paravirt_patch_site {
+	u8 *instr;
+	u8 type;
+	u8 len;
+};
+
+typedef void text_poke_f(void *, const void *, size_t);
+
+struct die_args {
+	struct pt_regs *regs;
+	const char *str;
+	long err;
+	int trapnr;
+	int signr;
+};
+
+enum clock_event_state {
+	CLOCK_EVT_STATE_DETACHED = 0,
+	CLOCK_EVT_STATE_SHUTDOWN = 1,
+	CLOCK_EVT_STATE_PERIODIC = 2,
+	CLOCK_EVT_STATE_ONESHOT = 3,
+	CLOCK_EVT_STATE_ONESHOT_STOPPED = 4,
+};
+
+struct clock_event_device {
+	void (*event_handler)(struct clock_event_device *);
+	int (*set_next_event)(unsigned long, struct clock_event_device *);
+	int (*set_next_ktime)(ktime_t, struct clock_event_device *);
+	ktime_t next_event;
+	u64 max_delta_ns;
+	u64 min_delta_ns;
+	u32 mult;
+	u32 shift;
+	enum clock_event_state state_use_accessors;
+	unsigned int features;
+	unsigned long retries;
+	int (*set_state_periodic)(struct clock_event_device *);
+	int (*set_state_oneshot)(struct clock_event_device *);
+	int (*set_state_oneshot_stopped)(struct clock_event_device *);
+	int (*set_state_shutdown)(struct clock_event_device *);
+	int (*tick_resume)(struct clock_event_device *);
+	void (*broadcast)(const struct cpumask *);
+	void (*suspend)(struct clock_event_device *);
+	void (*resume)(struct clock_event_device *);
+	unsigned long min_delta_ticks;
+	unsigned long max_delta_ticks;
+	const char *name;
+	int rating;
+	int irq;
+	int bound_on;
+	const struct cpumask *cpumask;
+	struct list_head list;
+	struct module *owner;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	HW_BREAKPOINT_EMPTY = 0,
+	HW_BREAKPOINT_R = 1,
+	HW_BREAKPOINT_W = 2,
+	HW_BREAKPOINT_RW = 3,
+	HW_BREAKPOINT_X = 4,
+	HW_BREAKPOINT_INVALID = 7,
+};
+
+enum {
+	HW_BREAKPOINT_LEN_1 = 1,
+	HW_BREAKPOINT_LEN_2 = 2,
+	HW_BREAKPOINT_LEN_3 = 3,
+	HW_BREAKPOINT_LEN_4 = 4,
+	HW_BREAKPOINT_LEN_5 = 5,
+	HW_BREAKPOINT_LEN_6 = 6,
+	HW_BREAKPOINT_LEN_7 = 7,
+	HW_BREAKPOINT_LEN_8 = 8,
+};
+
+struct tlb_context {
+	u64 ctx_id;
+	u64 tlb_gen;
+};
+
+struct tlb_state {
+	struct mm_struct *loaded_mm;
+	union {
+		struct mm_struct *last_user_mm;
+		unsigned long last_user_mm_spec;
+	};
+	u16 loaded_mm_asid;
+	u16 next_asid;
+	bool invalidate_other;
+	unsigned short user_pcid_flush_mask;
+	unsigned long cr4;
+	struct tlb_context ctxs[6];
+};
+
+typedef struct {
+	seqcount_t seqcount;
+} seqcount_latch_t;
+
+struct cyc2ns {
+	struct cyc2ns_data data[2];
+	seqcount_latch_t seq;
+};
+
+typedef unsigned long long cycles_t;
+
+typedef unsigned int u_int;
+
+struct system_counterval_t {
+	u64 cycles;
+	struct clocksource *cs;
+};
+
+struct muldiv {
+	u32 multiplier;
+	u32 divider;
+};
+
+struct freq_desc {
+	bool use_msr_plat;
+	struct muldiv muldiv[16];
+	u32 freqs[16];
+	u32 mask;
+};
+
+struct dmi_strmatch {
+	unsigned char slot: 7;
+	unsigned char exact_match: 1;
+	char substr[79];
+};
+
+struct dmi_system_id {
+	int (*callback)(const struct dmi_system_id *);
+	const char *ident;
+	struct dmi_strmatch matches[4];
+	void *driver_data;
+};
+
+struct mfd_cell;
+
+struct pdev_archdata {};
+
+struct platform_device_id;
+
+struct platform_device {
+	const char *name;
+	int id;
+	bool id_auto;
+	struct device dev;
+	u64 platform_dma_mask;
+	struct device_dma_parameters dma_parms;
+	u32 num_resources;
+	struct resource *resource;
+	const struct platform_device_id *id_entry;
+	const char *driver_override;
+	struct mfd_cell *mfd_cell;
+	struct pdev_archdata archdata;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct platform_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct pnp_protocol;
+
+struct pnp_card;
+
+struct pnp_driver;
+
+struct pnp_card_link;
+
+struct pnp_id;
+
+struct pnp_dev {
+	struct device dev;
+	u64 dma_mask;
+	unsigned int number;
+	int status;
+	struct list_head global_list;
+	struct list_head protocol_list;
+	struct list_head card_list;
+	struct list_head rdev_list;
+	struct pnp_protocol *protocol;
+	struct pnp_card *card;
+	struct pnp_driver *driver;
+	struct pnp_card_link *card_link;
+	struct pnp_id *id;
+	int active;
+	int capabilities;
+	unsigned int num_dependent_sets;
+	struct list_head resources;
+	struct list_head options;
+	char name[50];
+	int flags;
+	struct proc_dir_entry *procent;
+	void *data;
+};
+
+struct pnp_protocol {
+	struct list_head protocol_list;
+	char *name;
+	int (*get)(struct pnp_dev *);
+	int (*set)(struct pnp_dev *);
+	int (*disable)(struct pnp_dev *);
+	bool (*can_wakeup)(struct pnp_dev *);
+	int (*suspend)(struct pnp_dev *, pm_message_t);
+	int (*resume)(struct pnp_dev *);
+	unsigned char number;
+	struct device dev;
+	struct list_head cards;
+	struct list_head devices;
+};
+
+struct pnp_card {
+	struct device dev;
+	unsigned char number;
+	struct list_head global_list;
+	struct list_head protocol_list;
+	struct list_head devices;
+	struct pnp_protocol *protocol;
+	struct pnp_id *id;
+	char name[50];
+	unsigned char pnpver;
+	unsigned char productver;
+	unsigned int serial;
+	unsigned char checksum;
+	struct proc_dir_entry *procdir;
+};
+
+struct pnp_id {
+	char id[8];
+	struct pnp_id *next;
+};
+
+struct pnp_device_id;
+
+struct pnp_driver {
+	const char *name;
+	const struct pnp_device_id *id_table;
+	unsigned int flags;
+	int (*probe)(struct pnp_dev *, const struct pnp_device_id *);
+	void (*remove)(struct pnp_dev *);
+	void (*shutdown)(struct pnp_dev *);
+	int (*suspend)(struct pnp_dev *, pm_message_t);
+	int (*resume)(struct pnp_dev *);
+	struct device_driver driver;
+};
+
+struct pnp_device_id {
+	__u8 id[8];
+	kernel_ulong_t driver_data;
+};
+
+struct pnp_card_driver;
+
+struct pnp_card_link {
+	struct pnp_card *card;
+	struct pnp_card_driver *driver;
+	void *driver_data;
+	pm_message_t pm_state;
+};
+
+struct pnp_card_device_id;
+
+struct pnp_card_driver {
+	struct list_head global_list;
+	char *name;
+	const struct pnp_card_device_id *id_table;
+	unsigned int flags;
+	int (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *);
+	void (*remove)(struct pnp_card_link *);
+	int (*suspend)(struct pnp_card_link *, pm_message_t);
+	int (*resume)(struct pnp_card_link *);
+	struct pnp_driver link;
+};
+
+struct pnp_card_device_id {
+	__u8 id[8];
+	kernel_ulong_t driver_data;
+	struct {
+		__u8 id[8];
+	} devs[8];
+};
+
+struct rtc_time {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	int tm_year;
+	int tm_wday;
+	int tm_yday;
+	int tm_isdst;
+};
+
+enum insn_type {
+	CALL = 0,
+	NOP = 1,
+	JMP = 2,
+	RET = 3,
+	JCC = 4,
+};
+
+struct ssb_state {
+	struct ssb_state *shared_state;
+	raw_spinlock_t lock;
+	unsigned int disable_state;
+	unsigned long local_state;
+};
+
+enum idle_boot_override {
+	IDLE_NO_OVERRIDE = 0,
+	IDLE_HALT = 1,
+	IDLE_NOMWAIT = 2,
+	IDLE_POLL = 3,
+};
+
+enum tick_broadcast_state {
+	TICK_BROADCAST_EXIT = 0,
+	TICK_BROADCAST_ENTER = 1,
+};
+
+enum tick_broadcast_mode {
+	TICK_BROADCAST_OFF = 0,
+	TICK_BROADCAST_ON = 1,
+	TICK_BROADCAST_FORCE = 2,
+};
+
+struct inactive_task_frame {
+	unsigned long r15;
+	unsigned long r14;
+	unsigned long r13;
+	unsigned long r12;
+	unsigned long bx;
+	unsigned long bp;
+	unsigned long ret_addr;
+};
+
+struct fork_frame {
+	struct inactive_task_frame frame;
+	struct pt_regs regs;
+};
+
+typedef void (*btf_trace_x86_fpu_before_save)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_after_save)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_before_restore)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_after_restore)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_regs_activated)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_regs_deactivated)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_init_state)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_dropped)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_copy_src)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_copy_dst)(void *, struct fpu *);
+
+typedef void (*btf_trace_x86_fpu_xstate_check_failed)(void *, struct fpu *);
+
+struct fpu_state_config {
+	unsigned int max_size;
+	unsigned int default_size;
+	u64 max_features;
+	u64 default_features;
+	u64 legacy_features;
+};
+
+enum xstate_copy_mode {
+	XSTATE_COPY_FP = 0,
+	XSTATE_COPY_FX = 1,
+	XSTATE_COPY_XSAVE = 2,
+};
+
+struct trace_event_raw_x86_fpu {
+	struct trace_entry ent;
+	struct fpu *fpu;
+	bool load_fpu;
+	u64 xfeatures;
+	u64 xcomp_bv;
+	char __data[0];
+};
+
+struct membuf {
+	void *p;
+	size_t left;
+};
+
+struct trace_event_data_offsets_x86_fpu {};
+
+struct user_i387_ia32_struct {
+	u32 cwd;
+	u32 swd;
+	u32 twd;
+	u32 fip;
+	u32 fcs;
+	u32 foo;
+	u32 fos;
+	u32 st_space[20];
+};
+
+struct user_regset;
+
+typedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf);
+
+typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void __attribute__((btf_type_tag("user"))) *);
+
+typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);
+
+typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);
+
+struct user_regset {
+	user_regset_get2_fn *regset_get;
+	user_regset_set_fn *set;
+	user_regset_active_fn *active;
+	user_regset_writeback_fn *writeback;
+	unsigned int n;
+	unsigned int size;
+	unsigned int align;
+	unsigned int bias;
+	unsigned int core_note_type;
+};
+
+struct pkru_state {
+	u32 pkru;
+	u32 pad;
+};
+
+struct pt_regs_offset {
+	const char *name;
+	int offset;
+};
+
+struct user_regset_view {
+	const char *name;
+	const struct user_regset *regsets;
+	unsigned int n;
+	u32 e_flags;
+	u16 e_machine;
+	u8 ei_osabi;
+};
+
+enum x86_regset_32 {
+	REGSET32_GENERAL = 0,
+	REGSET32_FP = 1,
+	REGSET32_XFP = 2,
+	REGSET32_XSTATE = 3,
+	REGSET32_TLS = 4,
+	REGSET32_IOPERM = 5,
+};
+
+enum x86_regset_64 {
+	REGSET64_GENERAL = 0,
+	REGSET64_FP = 1,
+	REGSET64_IOPERM = 2,
+	REGSET64_XSTATE = 3,
+	REGSET64_SSP = 4,
+};
+
+struct stack_frame_user {
+	const void __attribute__((btf_type_tag("user"))) *next_fp;
+	unsigned long ret_addr;
+};
+
+typedef bool (*stack_trace_consume_fn)(void *, unsigned long);
+
+struct _cache_table {
+	unsigned char descriptor;
+	char cache_type;
+	short size;
+};
+
+enum cache_type {
+	CACHE_TYPE_NOCACHE = 0,
+	CACHE_TYPE_INST = 1,
+	CACHE_TYPE_DATA = 2,
+	CACHE_TYPE_SEPARATE = 3,
+	CACHE_TYPE_UNIFIED = 4,
+};
+
+enum _cache_type {
+	CTYPE_NULL = 0,
+	CTYPE_DATA = 1,
+	CTYPE_INST = 2,
+	CTYPE_UNIFIED = 3,
+};
+
+union _cpuid4_leaf_eax {
+	struct {
+		enum _cache_type type: 5;
+		unsigned int level: 3;
+		unsigned int is_self_initializing: 1;
+		unsigned int is_fully_associative: 1;
+		unsigned int reserved: 4;
+		unsigned int num_threads_sharing: 12;
+		unsigned int num_cores_on_die: 6;
+	} split;
+	u32 full;
+};
+
+union _cpuid4_leaf_ebx {
+	struct {
+		unsigned int coherency_line_size: 12;
+		unsigned int physical_line_partition: 10;
+		unsigned int ways_of_associativity: 10;
+	} split;
+	u32 full;
+};
+
+union _cpuid4_leaf_ecx {
+	struct {
+		unsigned int number_of_sets: 32;
+	} split;
+	u32 full;
+};
+
+union l1_cache {
+	struct {
+		unsigned int line_size: 8;
+		unsigned int lines_per_tag: 8;
+		unsigned int assoc: 8;
+		unsigned int size_in_kb: 8;
+	};
+	unsigned int val;
+};
+
+union l2_cache {
+	struct {
+		unsigned int line_size: 8;
+		unsigned int lines_per_tag: 4;
+		unsigned int assoc: 4;
+		unsigned int size_in_kb: 16;
+	};
+	unsigned int val;
+};
+
+union l3_cache {
+	struct {
+		unsigned int line_size: 8;
+		unsigned int lines_per_tag: 4;
+		unsigned int assoc: 4;
+		unsigned int res: 2;
+		unsigned int size_encoded: 14;
+	};
+	unsigned int val;
+};
+
+struct cacheinfo;
+
+struct cpu_cacheinfo {
+	struct cacheinfo *info_list;
+	unsigned int num_levels;
+	unsigned int num_leaves;
+	bool cpu_map_populated;
+	bool early_ci_levels;
+};
+
+struct cacheinfo {
+	unsigned int id;
+	enum cache_type type;
+	unsigned int level;
+	unsigned int coherency_line_size;
+	unsigned int number_of_sets;
+	unsigned int ways_of_associativity;
+	unsigned int physical_line_partition;
+	unsigned int size;
+	cpumask_t shared_cpu_map;
+	unsigned int attributes;
+	void *fw_token;
+	bool disable_sysfs;
+	void *priv;
+};
+
+struct amd_northbridge;
+
+struct _cpuid4_info_regs {
+	union _cpuid4_leaf_eax eax;
+	union _cpuid4_leaf_ebx ebx;
+	union _cpuid4_leaf_ecx ecx;
+	unsigned int id;
+	unsigned long size;
+	struct amd_northbridge *nb;
+};
+
+struct amd_l3_cache {
+	unsigned int indices;
+	u8 subcaches[4];
+};
+
+struct threshold_bank;
+
+struct amd_northbridge {
+	struct pci_dev *root;
+	struct pci_dev *misc;
+	struct pci_dev *link;
+	struct amd_l3_cache l3_cache;
+	struct threshold_bank *bank4;
+};
+
+struct threshold_block;
+
+struct threshold_bank {
+	struct kobject *kobj;
+	struct threshold_block *blocks;
+	refcount_t cpus;
+	unsigned int shared;
+};
+
+struct threshold_block {
+	unsigned int block;
+	unsigned int bank;
+	unsigned int cpu;
+	u32 address;
+	u16 interrupt_enable;
+	bool interrupt_capable;
+	u16 threshold_limit;
+	struct kobject kobj;
+	struct list_head miscj;
+};
+
+typedef int (*cpu_stop_fn_t)(void *);
+
+struct cpuid_bit {
+	u16 feature;
+	u8 reg;
+	u8 bit;
+	u32 level;
+	u32 sub_leaf;
+};
+
+struct pcpu_hot {
+	union {
+		struct {
+			struct task_struct *current_task;
+			int preempt_count;
+			int cpu_number;
+			u64 call_depth;
+			unsigned long top_of_stack;
+			void *hardirq_stack_ptr;
+			u16 softirq_pending;
+			bool hardirq_stack_inuse;
+		};
+		u8 pad[64];
+	};
+};
+
+struct fixed_percpu_data {
+	char gs_base[40];
+	unsigned long stack_canary;
+};
+
+struct cpu_dev {
+	const char *c_vendor;
+	const char *c_ident[2];
+	void (*c_early_init)(struct cpuinfo_x86 *);
+	void (*c_bsp_init)(struct cpuinfo_x86 *);
+	void (*c_init)(struct cpuinfo_x86 *);
+	void (*c_identify)(struct cpuinfo_x86 *);
+	void (*c_detect_tlb)(struct cpuinfo_x86 *);
+	int c_x86_vendor;
+};
+
+struct cpuid_dependent_feature {
+	u32 feature;
+	u32 level;
+};
+
+struct ppin_info {
+	int feature;
+	int msr_ppin_ctl;
+	int msr_ppin;
+};
+
+enum tlb_infos {
+	ENTRIES = 0,
+	NR_INFO = 1,
+};
+
+enum {
+	SAMPLES = 8,
+	MIN_CHANGE = 5,
+};
+
+enum spectre_v2_mitigation {
+	SPECTRE_V2_NONE = 0,
+	SPECTRE_V2_RETPOLINE = 1,
+	SPECTRE_V2_LFENCE = 2,
+	SPECTRE_V2_EIBRS = 3,
+	SPECTRE_V2_EIBRS_RETPOLINE = 4,
+	SPECTRE_V2_EIBRS_LFENCE = 5,
+	SPECTRE_V2_IBRS = 6,
+};
+
+enum rfds_mitigations {
+	RFDS_MITIGATION_OFF = 0,
+	RFDS_MITIGATION_VERW = 1,
+	RFDS_MITIGATION_UCODE_NEEDED = 2,
+};
+
+enum srbds_mitigations {
+	SRBDS_MITIGATION_OFF = 0,
+	SRBDS_MITIGATION_UCODE_NEEDED = 1,
+	SRBDS_MITIGATION_FULL = 2,
+	SRBDS_MITIGATION_TSX_OFF = 3,
+	SRBDS_MITIGATION_HYPERVISOR = 4,
+};
+
+enum l1d_flush_mitigations {
+	L1D_FLUSH_OFF = 0,
+	L1D_FLUSH_ON = 1,
+};
+
+enum gds_mitigations {
+	GDS_MITIGATION_OFF = 0,
+	GDS_MITIGATION_UCODE_NEEDED = 1,
+	GDS_MITIGATION_FORCE = 2,
+	GDS_MITIGATION_FULL = 3,
+	GDS_MITIGATION_FULL_LOCKED = 4,
+	GDS_MITIGATION_HYPERVISOR = 5,
+};
+
+enum spectre_v1_mitigation {
+	SPECTRE_V1_MITIGATION_NONE = 0,
+	SPECTRE_V1_MITIGATION_AUTO = 1,
+};
+
+enum retbleed_mitigation_cmd {
+	RETBLEED_CMD_OFF = 0,
+	RETBLEED_CMD_AUTO = 1,
+	RETBLEED_CMD_UNRET = 2,
+	RETBLEED_CMD_IBPB = 3,
+	RETBLEED_CMD_STUFF = 4,
+};
+
+enum retbleed_mitigation {
+	RETBLEED_MITIGATION_NONE = 0,
+	RETBLEED_MITIGATION_UNRET = 1,
+	RETBLEED_MITIGATION_IBPB = 2,
+	RETBLEED_MITIGATION_IBRS = 3,
+	RETBLEED_MITIGATION_EIBRS = 4,
+	RETBLEED_MITIGATION_STUFF = 5,
+};
+
+enum spectre_v2_mitigation_cmd {
+	SPECTRE_V2_CMD_NONE = 0,
+	SPECTRE_V2_CMD_AUTO = 1,
+	SPECTRE_V2_CMD_FORCE = 2,
+	SPECTRE_V2_CMD_RETPOLINE = 3,
+	SPECTRE_V2_CMD_RETPOLINE_GENERIC = 4,
+	SPECTRE_V2_CMD_RETPOLINE_LFENCE = 5,
+	SPECTRE_V2_CMD_EIBRS = 6,
+	SPECTRE_V2_CMD_EIBRS_RETPOLINE = 7,
+	SPECTRE_V2_CMD_EIBRS_LFENCE = 8,
+	SPECTRE_V2_CMD_IBRS = 9,
+};
+
+enum spectre_v2_user_cmd {
+	SPECTRE_V2_USER_CMD_NONE = 0,
+	SPECTRE_V2_USER_CMD_AUTO = 1,
+	SPECTRE_V2_USER_CMD_FORCE = 2,
+	SPECTRE_V2_USER_CMD_PRCTL = 3,
+	SPECTRE_V2_USER_CMD_PRCTL_IBPB = 4,
+	SPECTRE_V2_USER_CMD_SECCOMP = 5,
+	SPECTRE_V2_USER_CMD_SECCOMP_IBPB = 6,
+};
+
+enum bhi_mitigations {
+	BHI_MITIGATION_OFF = 0,
+	BHI_MITIGATION_ON = 1,
+};
+
+enum spectre_v2_user_mitigation {
+	SPECTRE_V2_USER_NONE = 0,
+	SPECTRE_V2_USER_STRICT = 1,
+	SPECTRE_V2_USER_STRICT_PREFERRED = 2,
+	SPECTRE_V2_USER_PRCTL = 3,
+	SPECTRE_V2_USER_SECCOMP = 4,
+};
+
+enum mds_mitigations {
+	MDS_MITIGATION_OFF = 0,
+	MDS_MITIGATION_FULL = 1,
+	MDS_MITIGATION_VMWERV = 2,
+};
+
+enum taa_mitigations {
+	TAA_MITIGATION_OFF = 0,
+	TAA_MITIGATION_UCODE_NEEDED = 1,
+	TAA_MITIGATION_VERW = 2,
+	TAA_MITIGATION_TSX_DISABLED = 3,
+};
+
+enum mmio_mitigations {
+	MMIO_MITIGATION_OFF = 0,
+	MMIO_MITIGATION_UCODE_NEEDED = 1,
+	MMIO_MITIGATION_VERW = 2,
+};
+
+enum ssb_mitigation_cmd {
+	SPEC_STORE_BYPASS_CMD_NONE = 0,
+	SPEC_STORE_BYPASS_CMD_AUTO = 1,
+	SPEC_STORE_BYPASS_CMD_ON = 2,
+	SPEC_STORE_BYPASS_CMD_PRCTL = 3,
+	SPEC_STORE_BYPASS_CMD_SECCOMP = 4,
+};
+
+enum ssb_mitigation {
+	SPEC_STORE_BYPASS_NONE = 0,
+	SPEC_STORE_BYPASS_DISABLE = 1,
+	SPEC_STORE_BYPASS_PRCTL = 2,
+	SPEC_STORE_BYPASS_SECCOMP = 3,
+};
+
+enum srso_mitigation_cmd {
+	SRSO_CMD_OFF = 0,
+	SRSO_CMD_MICROCODE = 1,
+	SRSO_CMD_SAFE_RET = 2,
+	SRSO_CMD_IBPB = 3,
+	SRSO_CMD_IBPB_ON_VMEXIT = 4,
+};
+
+enum srso_mitigation {
+	SRSO_MITIGATION_NONE = 0,
+	SRSO_MITIGATION_UCODE_NEEDED = 1,
+	SRSO_MITIGATION_SAFE_RET_UCODE_NEEDED = 2,
+	SRSO_MITIGATION_MICROCODE = 3,
+	SRSO_MITIGATION_SAFE_RET = 4,
+	SRSO_MITIGATION_IBPB = 5,
+	SRSO_MITIGATION_IBPB_ON_VMEXIT = 6,
+};
+
+enum bpf_reg_type {
+	NOT_INIT = 0,
+	SCALAR_VALUE = 1,
+	PTR_TO_CTX = 2,
+	CONST_PTR_TO_MAP = 3,
+	PTR_TO_MAP_VALUE = 4,
+	PTR_TO_MAP_KEY = 5,
+	PTR_TO_STACK = 6,
+	PTR_TO_PACKET_META = 7,
+	PTR_TO_PACKET = 8,
+	PTR_TO_PACKET_END = 9,
+	PTR_TO_FLOW_KEYS = 10,
+	PTR_TO_SOCKET = 11,
+	PTR_TO_SOCK_COMMON = 12,
+	PTR_TO_TCP_SOCK = 13,
+	PTR_TO_TP_BUFFER = 14,
+	PTR_TO_XDP_SOCK = 15,
+	PTR_TO_BTF_ID = 16,
+	PTR_TO_MEM = 17,
+	PTR_TO_BUF = 18,
+	PTR_TO_FUNC = 19,
+	CONST_PTR_TO_DYNPTR = 20,
+	__BPF_REG_TYPE_MAX = 21,
+	PTR_TO_MAP_VALUE_OR_NULL = 260,
+	PTR_TO_SOCKET_OR_NULL = 267,
+	PTR_TO_SOCK_COMMON_OR_NULL = 268,
+	PTR_TO_TCP_SOCK_OR_NULL = 269,
+	PTR_TO_BTF_ID_OR_NULL = 272,
+	__BPF_REG_TYPE_LIMIT = 33554431,
+};
+
+enum bpf_cgroup_iter_order {
+	BPF_CGROUP_ITER_ORDER_UNSPEC = 0,
+	BPF_CGROUP_ITER_SELF_ONLY = 1,
+	BPF_CGROUP_ITER_DESCENDANTS_PRE = 2,
+	BPF_CGROUP_ITER_DESCENDANTS_POST = 3,
+	BPF_CGROUP_ITER_ANCESTORS_UP = 4,
+};
+
+enum bpf_iter_task_type {
+	BPF_TASK_ITER_ALL = 0,
+	BPF_TASK_ITER_TID = 1,
+	BPF_TASK_ITER_TGID = 2,
+};
+
+enum bpf_map_type {
+	BPF_MAP_TYPE_UNSPEC = 0,
+	BPF_MAP_TYPE_HASH = 1,
+	BPF_MAP_TYPE_ARRAY = 2,
+	BPF_MAP_TYPE_PROG_ARRAY = 3,
+	BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,
+	BPF_MAP_TYPE_PERCPU_HASH = 5,
+	BPF_MAP_TYPE_PERCPU_ARRAY = 6,
+	BPF_MAP_TYPE_STACK_TRACE = 7,
+	BPF_MAP_TYPE_CGROUP_ARRAY = 8,
+	BPF_MAP_TYPE_LRU_HASH = 9,
+	BPF_MAP_TYPE_LRU_PERCPU_HASH = 10,
+	BPF_MAP_TYPE_LPM_TRIE = 11,
+	BPF_MAP_TYPE_ARRAY_OF_MAPS = 12,
+	BPF_MAP_TYPE_HASH_OF_MAPS = 13,
+	BPF_MAP_TYPE_DEVMAP = 14,
+	BPF_MAP_TYPE_SOCKMAP = 15,
+	BPF_MAP_TYPE_CPUMAP = 16,
+	BPF_MAP_TYPE_XSKMAP = 17,
+	BPF_MAP_TYPE_SOCKHASH = 18,
+	BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED = 19,
+	BPF_MAP_TYPE_CGROUP_STORAGE = 19,
+	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,
+	BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,
+	BPF_MAP_TYPE_QUEUE = 22,
+	BPF_MAP_TYPE_STACK = 23,
+	BPF_MAP_TYPE_SK_STORAGE = 24,
+	BPF_MAP_TYPE_DEVMAP_HASH = 25,
+	BPF_MAP_TYPE_STRUCT_OPS = 26,
+	BPF_MAP_TYPE_RINGBUF = 27,
+	BPF_MAP_TYPE_INODE_STORAGE = 28,
+	BPF_MAP_TYPE_TASK_STORAGE = 29,
+	BPF_MAP_TYPE_BLOOM_FILTER = 30,
+	BPF_MAP_TYPE_USER_RINGBUF = 31,
+	BPF_MAP_TYPE_CGRP_STORAGE = 32,
+};
+
+enum btf_field_type {
+	BPF_SPIN_LOCK = 1,
+	BPF_TIMER = 2,
+	BPF_KPTR_UNREF = 4,
+	BPF_KPTR_REF = 8,
+	BPF_KPTR = 12,
+	BPF_LIST_HEAD = 16,
+	BPF_LIST_NODE = 32,
+	BPF_RB_ROOT = 64,
+	BPF_RB_NODE = 128,
+	BPF_GRAPH_NODE_OR_ROOT = 240,
+	BPF_REFCOUNT = 256,
+};
+
+enum cpuhp_smt_control {
+	CPU_SMT_ENABLED = 0,
+	CPU_SMT_DISABLED = 1,
+	CPU_SMT_FORCE_DISABLED = 2,
+	CPU_SMT_NOT_SUPPORTED = 3,
+	CPU_SMT_NOT_IMPLEMENTED = 4,
+};
+
+struct bpf_prog_stats {
+	u64_stats_t cnt;
+	u64_stats_t nsecs;
+	u64_stats_t misses;
+	struct u64_stats_sync syncp;
+	long: 64;
+};
+
+struct bpf_ksym {
+	unsigned long start;
+	unsigned long end;
+	char name[512];
+	struct list_head lnode;
+	struct latch_tree_node tnode;
+	bool prog;
+};
+
+struct btf;
+
+struct bpf_ctx_arg_aux;
+
+struct bpf_trampoline;
+
+struct btf_type;
+
+struct bpf_jit_poke_descriptor;
+
+struct bpf_kfunc_desc_tab;
+
+struct bpf_kfunc_btf_tab;
+
+struct bpf_prog_ops;
+
+struct bpf_map;
+
+struct btf_mod_pair;
+
+struct bpf_prog_offload;
+
+struct bpf_func_info;
+
+struct bpf_func_info_aux;
+
+struct bpf_line_info;
+
+struct bpf_prog_aux {
+	atomic64_t refcnt;
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 max_ctx_offset;
+	u32 max_pkt_offset;
+	u32 max_tp_access;
+	u32 stack_depth;
+	u32 id;
+	u32 func_cnt;
+	u32 func_idx;
+	u32 attach_btf_id;
+	u32 ctx_arg_info_size;
+	u32 max_rdonly_access;
+	u32 max_rdwr_access;
+	struct btf *attach_btf;
+	const struct bpf_ctx_arg_aux *ctx_arg_info;
+	struct mutex dst_mutex;
+	struct bpf_prog *dst_prog;
+	struct bpf_trampoline *dst_trampoline;
+	enum bpf_prog_type saved_dst_prog_type;
+	enum bpf_attach_type saved_dst_attach_type;
+	bool verifier_zext;
+	bool dev_bound;
+	bool offload_requested;
+	bool attach_btf_trace;
+	bool func_proto_unreliable;
+	bool sleepable;
+	bool tail_call_reachable;
+	bool xdp_has_frags;
+	const struct btf_type *attach_func_proto;
+	const char *attach_func_name;
+	struct bpf_prog **func;
+	void *jit_data;
+	struct bpf_jit_poke_descriptor *poke_tab;
+	struct bpf_kfunc_desc_tab *kfunc_tab;
+	struct bpf_kfunc_btf_tab *kfunc_btf_tab;
+	u32 size_poke_tab;
+	struct bpf_ksym ksym;
+	const struct bpf_prog_ops *ops;
+	struct bpf_map **used_maps;
+	struct mutex used_maps_mutex;
+	struct btf_mod_pair *used_btfs;
+	struct bpf_prog *prog;
+	struct user_struct *user;
+	u64 load_time;
+	u32 verified_insns;
+	int cgroup_atype;
+	struct bpf_map *cgroup_storage[2];
+	char name[16];
+	void *security;
+	struct bpf_prog_offload *offload;
+	struct btf *btf;
+	struct bpf_func_info *func_info;
+	struct bpf_func_info_aux *func_info_aux;
+	struct bpf_line_info *linfo;
+	void **jited_linfo;
+	u32 func_info_cnt;
+	u32 nr_linfo;
+	u32 linfo_idx;
+	struct module *mod;
+	u32 num_exentries;
+	struct exception_table_entry *extable;
+	union {
+		struct work_struct work;
+		struct callback_head rcu;
+	};
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_ctx_arg_aux {
+	u32 offset;
+	enum bpf_reg_type reg_type;
+	u32 btf_id;
+};
+
+struct btf_func_model {
+	u8 ret_size;
+	u8 ret_flags;
+	u8 nr_args;
+	u8 arg_size[12];
+	u8 arg_flags[12];
+};
+
+struct ftrace_ops;
+
+struct bpf_tramp_image;
+
+struct bpf_trampoline {
+	struct hlist_node hlist;
+	struct ftrace_ops *fops;
+	struct mutex mutex;
+	refcount_t refcnt;
+	u32 flags;
+	u64 key;
+	struct {
+		struct btf_func_model model;
+		void *addr;
+		bool ftrace_managed;
+	} func;
+	struct bpf_prog *extension_prog;
+	struct hlist_head progs_hlist[3];
+	int progs_cnt[3];
+	struct bpf_tramp_image *cur_image;
+	struct module *mod;
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_tramp_image {
+	void *image;
+	struct bpf_ksym ksym;
+	struct percpu_ref pcref;
+	void *ip_after_call;
+	void *ip_epilogue;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct btf_type {
+	__u32 name_off;
+	__u32 info;
+	union {
+		__u32 size;
+		__u32 type;
+	};
+};
+
+struct bpf_jit_poke_descriptor {
+	void *tailcall_target;
+	void *tailcall_bypass;
+	void *bypass_addr;
+	void *aux;
+	union {
+		struct {
+			struct bpf_map *map;
+			u32 key;
+		} tail_call;
+	};
+	bool tailcall_target_stable;
+	u8 adj_off;
+	u16 reason;
+	u32 insn_idx;
+};
+
+struct bpf_map_ops;
+
+struct btf_record;
+
+struct bpf_map {
+	const struct bpf_map_ops *ops;
+	struct bpf_map *inner_map_meta;
+	void *security;
+	enum bpf_map_type map_type;
+	u32 key_size;
+	u32 value_size;
+	u32 max_entries;
+	u64 map_extra;
+	u32 map_flags;
+	u32 id;
+	struct btf_record *record;
+	int numa_node;
+	u32 btf_key_type_id;
+	u32 btf_value_type_id;
+	u32 btf_vmlinux_value_type_id;
+	struct btf *btf;
+	struct obj_cgroup *objcg;
+	char name[16];
+	long: 64;
+	long: 64;
+	atomic64_t refcnt;
+	atomic64_t usercnt;
+	union {
+		struct work_struct work;
+		struct callback_head rcu;
+	};
+	struct mutex freeze_mutex;
+	atomic64_t writecnt;
+	struct {
+		spinlock_t lock;
+		enum bpf_prog_type type;
+		bool jited;
+		bool xdp_has_frags;
+	} owner;
+	bool bypass_spec_v1;
+	bool frozen;
+	bool free_after_mult_rcu_gp;
+	s64 __attribute__((btf_type_tag("percpu"))) *elem_count;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef u64 (*bpf_callback_t)(u64, u64, u64, u64, u64);
+
+union bpf_attr;
+
+struct bpf_verifier_env;
+
+struct bpf_func_state;
+
+struct bpf_iter_seq_info;
+
+struct bpf_map_ops {
+	int (*map_alloc_check)(union bpf_attr *);
+	struct bpf_map * (*map_alloc)(union bpf_attr *);
+	void (*map_release)(struct bpf_map *, struct file *);
+	void (*map_free)(struct bpf_map *);
+	int (*map_get_next_key)(struct bpf_map *, void *, void *);
+	void (*map_release_uref)(struct bpf_map *);
+	void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);
+	int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr __attribute__((btf_type_tag("user"))) *);
+	int (*map_lookup_and_delete_elem)(struct bpf_map *, void *, void *, u64);
+	int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr __attribute__((btf_type_tag("user"))) *);
+	int (*map_update_batch)(struct bpf_map *, struct file *, const union bpf_attr *, union bpf_attr __attribute__((btf_type_tag("user"))) *);
+	int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr __attribute__((btf_type_tag("user"))) *);
+	void * (*map_lookup_elem)(struct bpf_map *, void *);
+	long (*map_update_elem)(struct bpf_map *, void *, void *, u64);
+	long (*map_delete_elem)(struct bpf_map *, void *);
+	long (*map_push_elem)(struct bpf_map *, void *, u64);
+	long (*map_pop_elem)(struct bpf_map *, void *);
+	long (*map_peek_elem)(struct bpf_map *, void *);
+	void * (*map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+	void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);
+	void (*map_fd_put_ptr)(struct bpf_map *, void *, bool);
+	int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);
+	u32 (*map_fd_sys_lookup_elem)(void *);
+	void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);
+	int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);
+	int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);
+	void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);
+	int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);
+	int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);
+	int (*map_mmap)(struct bpf_map *, struct vm_area_struct *);
+	__poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *);
+	int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);
+	void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) ** (*map_owner_storage_ptr)(void *);
+	long (*map_redirect)(struct bpf_map *, u64, u64);
+	bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);
+	int (*map_set_for_each_callback_args)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *);
+	long (*map_for_each_callback)(struct bpf_map *, bpf_callback_t, void *, u64);
+	u64 (*map_mem_usage)(const struct bpf_map *);
+	int *map_btf_id;
+	const struct bpf_iter_seq_info *iter_seq_info;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+union bpf_attr {
+	struct {
+		__u32 map_type;
+		__u32 key_size;
+		__u32 value_size;
+		__u32 max_entries;
+		__u32 map_flags;
+		__u32 inner_map_fd;
+		__u32 numa_node;
+		char map_name[16];
+		__u32 map_ifindex;
+		__u32 btf_fd;
+		__u32 btf_key_type_id;
+		__u32 btf_value_type_id;
+		__u32 btf_vmlinux_value_type_id;
+		__u64 map_extra;
+	};
+	struct {
+		__u32 map_fd;
+		__u64 key;
+		union {
+			__u64 value;
+			__u64 next_key;
+		};
+		__u64 flags;
+	};
+	struct {
+		__u64 in_batch;
+		__u64 out_batch;
+		__u64 keys;
+		__u64 values;
+		__u32 count;
+		__u32 map_fd;
+		__u64 elem_flags;
+		__u64 flags;
+	} batch;
+	struct {
+		__u32 prog_type;
+		__u32 insn_cnt;
+		__u64 insns;
+		__u64 license;
+		__u32 log_level;
+		__u32 log_size;
+		__u64 log_buf;
+		__u32 kern_version;
+		__u32 prog_flags;
+		char prog_name[16];
+		__u32 prog_ifindex;
+		__u32 expected_attach_type;
+		__u32 prog_btf_fd;
+		__u32 func_info_rec_size;
+		__u64 func_info;
+		__u32 func_info_cnt;
+		__u32 line_info_rec_size;
+		__u64 line_info;
+		__u32 line_info_cnt;
+		__u32 attach_btf_id;
+		union {
+			__u32 attach_prog_fd;
+			__u32 attach_btf_obj_fd;
+		};
+		__u32 core_relo_cnt;
+		__u64 fd_array;
+		__u64 core_relos;
+		__u32 core_relo_rec_size;
+		__u32 log_true_size;
+	};
+	struct {
+		__u64 pathname;
+		__u32 bpf_fd;
+		__u32 file_flags;
+		__s32 path_fd;
+	};
+	struct {
+		union {
+			__u32 target_fd;
+			__u32 target_ifindex;
+		};
+		__u32 attach_bpf_fd;
+		__u32 attach_type;
+		__u32 attach_flags;
+		__u32 replace_bpf_fd;
+		union {
+			__u32 relative_fd;
+			__u32 relative_id;
+		};
+		__u64 expected_revision;
+	};
+	struct {
+		__u32 prog_fd;
+		__u32 retval;
+		__u32 data_size_in;
+		__u32 data_size_out;
+		__u64 data_in;
+		__u64 data_out;
+		__u32 repeat;
+		__u32 duration;
+		__u32 ctx_size_in;
+		__u32 ctx_size_out;
+		__u64 ctx_in;
+		__u64 ctx_out;
+		__u32 flags;
+		__u32 cpu;
+		__u32 batch_size;
+	} test;
+	struct {
+		union {
+			__u32 start_id;
+			__u32 prog_id;
+			__u32 map_id;
+			__u32 btf_id;
+			__u32 link_id;
+		};
+		__u32 next_id;
+		__u32 open_flags;
+	};
+	struct {
+		__u32 bpf_fd;
+		__u32 info_len;
+		__u64 info;
+	} info;
+	struct {
+		union {
+			__u32 target_fd;
+			__u32 target_ifindex;
+		};
+		__u32 attach_type;
+		__u32 query_flags;
+		__u32 attach_flags;
+		__u64 prog_ids;
+		union {
+			__u32 prog_cnt;
+			__u32 count;
+		};
+		__u64 prog_attach_flags;
+		__u64 link_ids;
+		__u64 link_attach_flags;
+		__u64 revision;
+	} query;
+	struct {
+		__u64 name;
+		__u32 prog_fd;
+	} raw_tracepoint;
+	struct {
+		__u64 btf;
+		__u64 btf_log_buf;
+		__u32 btf_size;
+		__u32 btf_log_size;
+		__u32 btf_log_level;
+		__u32 btf_log_true_size;
+	};
+	struct {
+		__u32 pid;
+		__u32 fd;
+		__u32 flags;
+		__u32 buf_len;
+		__u64 buf;
+		__u32 prog_id;
+		__u32 fd_type;
+		__u64 probe_offset;
+		__u64 probe_addr;
+	} task_fd_query;
+	struct {
+		union {
+			__u32 prog_fd;
+			__u32 map_fd;
+		};
+		union {
+			__u32 target_fd;
+			__u32 target_ifindex;
+		};
+		__u32 attach_type;
+		__u32 flags;
+		union {
+			__u32 target_btf_id;
+			struct {
+				__u64 iter_info;
+				__u32 iter_info_len;
+			};
+			struct {
+				__u64 bpf_cookie;
+			} perf_event;
+			struct {
+				__u32 flags;
+				__u32 cnt;
+				__u64 syms;
+				__u64 addrs;
+				__u64 cookies;
+			} kprobe_multi;
+			struct {
+				__u32 target_btf_id;
+				__u64 cookie;
+			} tracing;
+			struct {
+				__u32 pf;
+				__u32 hooknum;
+				__s32 priority;
+				__u32 flags;
+			} netfilter;
+			struct {
+				union {
+					__u32 relative_fd;
+					__u32 relative_id;
+				};
+				__u64 expected_revision;
+			} tcx;
+			struct {
+				__u64 path;
+				__u64 offsets;
+				__u64 ref_ctr_offsets;
+				__u64 cookies;
+				__u32 cnt;
+				__u32 flags;
+				__u32 pid;
+			} uprobe_multi;
+		};
+	} link_create;
+	struct {
+		__u32 link_fd;
+		union {
+			__u32 new_prog_fd;
+			__u32 new_map_fd;
+		};
+		__u32 flags;
+		union {
+			__u32 old_prog_fd;
+			__u32 old_map_fd;
+		};
+	} link_update;
+	struct {
+		__u32 link_fd;
+	} link_detach;
+	struct {
+		__u32 type;
+	} enable_stats;
+	struct {
+		__u32 link_fd;
+		__u32 flags;
+	} iter_create;
+	struct {
+		__u32 prog_fd;
+		__u32 map_fd;
+		__u32 flags;
+	} prog_bind_map;
+};
+
+struct btf_header {
+	__u16 magic;
+	__u8 version;
+	__u8 flags;
+	__u32 hdr_len;
+	__u32 type_off;
+	__u32 type_len;
+	__u32 str_off;
+	__u32 str_len;
+};
+
+struct btf_kfunc_set_tab;
+
+struct btf_id_dtor_kfunc_tab;
+
+struct btf_struct_metas;
+
+struct btf {
+	void *data;
+	struct btf_type **types;
+	u32 *resolved_ids;
+	u32 *resolved_sizes;
+	const char *strings;
+	void *nohdr_data;
+	struct btf_header hdr;
+	u32 nr_types;
+	u32 types_size;
+	u32 data_size;
+	refcount_t refcnt;
+	u32 id;
+	struct callback_head rcu;
+	struct btf_kfunc_set_tab *kfunc_set_tab;
+	struct btf_id_dtor_kfunc_tab *dtor_kfunc_tab;
+	struct btf_struct_metas *struct_meta_tab;
+	struct btf *base_btf;
+	u32 start_id;
+	u32 start_str_off;
+	char name[56];
+	bool kernel_btf;
+};
+
+struct bpf_iter_aux_info;
+
+typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_fini_seq_priv_t)(void *);
+
+struct bpf_iter_seq_info {
+	const struct seq_operations *seq_ops;
+	bpf_iter_init_seq_priv_t init_seq_private;
+	bpf_iter_fini_seq_priv_t fini_seq_private;
+	u32 seq_priv_size;
+};
+
+struct bpf_iter_aux_info {
+	struct bpf_map *map;
+	struct {
+		struct cgroup *start;
+		enum bpf_cgroup_iter_order order;
+	} cgroup;
+	struct {
+		enum bpf_iter_task_type type;
+		u32 pid;
+	} task;
+};
+
+typedef void (*btf_dtor_kfunc_t)(void *);
+
+struct btf_field_kptr {
+	struct btf *btf;
+	struct module *module;
+	btf_dtor_kfunc_t dtor;
+	u32 btf_id;
+};
+
+struct btf_field_graph_root {
+	struct btf *btf;
+	u32 value_btf_id;
+	u32 node_offset;
+	struct btf_record *value_rec;
+};
+
+struct btf_field {
+	u32 offset;
+	u32 size;
+	enum btf_field_type type;
+	union {
+		struct btf_field_kptr kptr;
+		struct btf_field_graph_root graph_root;
+	};
+};
+
+struct btf_record {
+	u32 cnt;
+	u32 field_mask;
+	int spin_lock_off;
+	int timer_off;
+	int refcount_off;
+	struct btf_field fields[0];
+};
+
+struct bpf_prog_ops {
+	int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr __attribute__((btf_type_tag("user"))) *);
+};
+
+struct btf_mod_pair {
+	struct btf *btf;
+	struct module *module;
+};
+
+struct bpf_offload_dev;
+
+struct bpf_prog_offload {
+	struct bpf_prog *prog;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	void *dev_priv;
+	struct list_head offloads;
+	bool dev_state;
+	bool opt_failed;
+	void *jited_image;
+	u32 jited_len;
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_func_info {
+	__u32 insn_off;
+	__u32 type_id;
+};
+
+struct bpf_func_info_aux {
+	u16 linkage;
+	bool unreliable;
+};
+
+struct bpf_line_info {
+	__u32 insn_off;
+	__u32 file_name_off;
+	__u32 line_off;
+	__u32 line_col;
+};
+
+struct bpf_run_ctx {};
+
+struct aperfmperf {
+	seqcount_t seq;
+	unsigned long last_update;
+	u64 acnt;
+	u64 mcnt;
+	u64 aperf;
+	u64 mperf;
+};
+
+struct cpuid_dep {
+	unsigned int feature;
+	unsigned int depends;
+};
+
+enum vmx_feature_leafs {
+	MISC_FEATURES = 0,
+	PRIMARY_CTLS = 1,
+	SECONDARY_CTLS = 2,
+	TERTIARY_CTLS_LOW = 3,
+	TERTIARY_CTLS_HIGH = 4,
+	NR_VMX_FEATURE_WORDS = 5,
+};
+
+struct sku_microcode {
+	u8 model;
+	u8 stepping;
+	u32 microcode;
+};
+
+struct _tlb_table {
+	unsigned char descriptor;
+	char tlb_type;
+	unsigned int entries;
+	char info[128];
+};
+
+enum split_lock_detect_state {
+	sld_off = 0,
+	sld_warn = 1,
+	sld_fatal = 2,
+	sld_ratelimit = 3,
+};
+
+struct semaphore {
+	raw_spinlock_t lock;
+	unsigned int count;
+	struct list_head wait_list;
+};
+
+enum pconfig_target {
+	INVALID_TARGET = 0,
+	MKTME_TARGET = 1,
+	PCONFIG_TARGET_NR = 2,
+};
+
+enum {
+	PCONFIG_CPUID_SUBLEAF_INVALID = 0,
+	PCONFIG_CPUID_SUBLEAF_TARGETID = 1,
+};
+
+struct cpuid_regs {
+	u32 eax;
+	u32 ebx;
+	u32 ecx;
+	u32 edx;
+};
+
+enum tsx_ctrl_states {
+	TSX_CTRL_ENABLE = 0,
+	TSX_CTRL_DISABLE = 1,
+	TSX_CTRL_RTM_ALWAYS_ABORT = 2,
+	TSX_CTRL_NOT_SUPPORTED = 3,
+};
+
+enum energy_perf_value_index {
+	EPB_INDEX_PERFORMANCE = 0,
+	EPB_INDEX_BALANCE_PERFORMANCE = 1,
+	EPB_INDEX_NORMAL = 2,
+	EPB_INDEX_BALANCE_POWERSAVE = 3,
+	EPB_INDEX_POWERSAVE = 4,
+};
+
+struct mtrr_ops {
+	u32 var_regs;
+	void (*set)(unsigned int, unsigned long, unsigned long, mtrr_type);
+	void (*get)(unsigned int, unsigned long *, unsigned long *, mtrr_type *);
+	int (*get_free_region)(unsigned long, unsigned long, int);
+	int (*validate_add_page)(unsigned long, unsigned long, unsigned int);
+	int (*have_wrcomb)();
+};
+
+struct set_mtrr_data {
+	unsigned long smp_base;
+	unsigned long smp_size;
+	unsigned int smp_reg;
+	mtrr_type smp_type;
+};
+
+struct proc_ops {
+	unsigned int proc_flags;
+	int (*proc_open)(struct inode *, struct file *);
+	ssize_t (*proc_read)(struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
+	ssize_t (*proc_write)(struct file *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	loff_t (*proc_lseek)(struct file *, loff_t, int);
+	int (*proc_release)(struct inode *, struct file *);
+	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
+	long (*proc_ioctl)(struct file *, unsigned int, unsigned long);
+	long (*proc_compat_ioctl)(struct file *, unsigned int, unsigned long);
+	int (*proc_mmap)(struct file *, struct vm_area_struct *);
+	unsigned long (*proc_get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+};
+
+typedef u32 compat_uint_t;
+
+struct mtrr_sentry32 {
+	compat_ulong_t base;
+	compat_uint_t size;
+	compat_uint_t type;
+};
+
+struct mtrr_gentry32 {
+	compat_ulong_t regnum;
+	compat_uint_t base;
+	compat_uint_t size;
+	compat_uint_t type;
+};
+
+struct mtrr_sentry {
+	__u64 base;
+	__u32 size;
+	__u32 type;
+};
+
+struct mtrr_gentry {
+	__u64 base;
+	__u32 size;
+	__u32 regnum;
+	__u32 type;
+	__u32 _pad;
+};
+
+struct cache_map {
+	u64 start;
+	u64 end;
+	u64 flags;
+	u64 type: 8;
+	u64 fixed: 1;
+};
+
+struct mtrr_var_range {
+	__u32 base_lo;
+	__u32 base_hi;
+	__u32 mask_lo;
+	__u32 mask_hi;
+};
+
+struct mtrr_state_type {
+	struct mtrr_var_range var_ranges[256];
+	mtrr_type fixed_ranges[88];
+	unsigned char enabled;
+	bool have_fixed;
+	mtrr_type def_type;
+};
+
+struct fixed_range_block {
+	int base_msr;
+	int ranges;
+};
+
+struct var_mtrr_range_state {
+	unsigned long base_pfn;
+	unsigned long size_pfn;
+	mtrr_type type;
+};
+
+enum ucode_state {
+	UCODE_OK = 0,
+	UCODE_NEW = 1,
+	UCODE_UPDATED = 2,
+	UCODE_NFOUND = 3,
+	UCODE_ERROR = 4,
+};
+
+struct cpu_signature;
+
+struct microcode_ops {
+	enum ucode_state (*request_microcode_fw)(int, struct device *);
+	void (*microcode_fini_cpu)(int);
+	enum ucode_state (*apply_microcode)(int);
+	int (*collect_cpu_info)(int, struct cpu_signature *);
+};
+
+struct cpu_signature {
+	unsigned int sig;
+	unsigned int pf;
+	unsigned int rev;
+};
+
+struct ucode_cpu_info {
+	struct cpu_signature cpu_sig;
+	void *mc;
+};
+
+struct cpio_data {
+	void *data;
+	size_t size;
+	char name[18];
+};
+
+struct property_entry;
+
+struct platform_device_info {
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	bool of_node_reused;
+	const char *name;
+	int id;
+	const struct resource *res;
+	unsigned int num_res;
+	const void *data;
+	size_t size_data;
+	u64 dma_mask;
+	const struct property_entry *properties;
+	u64 android_kabi_reserved1;
+};
+
+enum dev_prop_type {
+	DEV_PROP_U8 = 0,
+	DEV_PROP_U16 = 1,
+	DEV_PROP_U32 = 2,
+	DEV_PROP_U64 = 3,
+	DEV_PROP_STRING = 4,
+	DEV_PROP_REF = 5,
+};
+
+struct property_entry {
+	const char *name;
+	size_t length;
+	bool is_inline;
+	enum dev_prop_type type;
+	union {
+		const void *pointer;
+		union {
+			u8 u8_data[8];
+			u16 u16_data[4];
+			u32 u32_data[2];
+			u64 u64_data[1];
+			const char *str[1];
+		} value;
+	};
+};
+
+struct microcode_header_intel {
+	unsigned int hdrver;
+	unsigned int rev;
+	unsigned int date;
+	unsigned int sig;
+	unsigned int cksum;
+	unsigned int ldrver;
+	unsigned int pf;
+	unsigned int datasize;
+	unsigned int totalsize;
+	unsigned int metasize;
+	unsigned int reserved[2];
+};
+
+struct microcode_intel {
+	struct microcode_header_intel hdr;
+	unsigned int bits[0];
+};
+
+struct ucode_patch {
+	struct list_head plist;
+	void *data;
+	unsigned int size;
+	u32 patch_id;
+	u16 equiv_cpu;
+};
+
+struct extended_signature {
+	unsigned int sig;
+	unsigned int pf;
+	unsigned int cksum;
+};
+
+struct extended_sigtable {
+	unsigned int count;
+	unsigned int cksum;
+	unsigned int reserved[3];
+	struct extended_signature sigs[0];
+};
+
+struct firmware {
+	size_t size;
+	const u8 *data;
+	void *priv;
+};
+
+struct equiv_cpu_entry;
+
+struct equiv_cpu_table {
+	unsigned int num_entries;
+	struct equiv_cpu_entry *entry;
+};
+
+struct equiv_cpu_entry {
+	u32 installed_cpu;
+	u32 fixed_errata_mask;
+	u32 fixed_errata_compare;
+	u16 equiv_cpu;
+	u16 res;
+};
+
+struct microcode_header_amd {
+	u32 data_code;
+	u32 patch_id;
+	u16 mc_patch_data_id;
+	u8 mc_patch_data_len;
+	u8 init_flag;
+	u32 mc_patch_data_checksum;
+	u32 nb_dev_id;
+	u32 sb_dev_id;
+	u16 processor_rev_id;
+	u8 nb_rev_id;
+	u8 sb_rev_id;
+	u8 bios_api_rev;
+	u8 reserved1[3];
+	u32 match_reg[8];
+};
+
+struct microcode_amd {
+	struct microcode_header_amd hdr;
+	unsigned int mpb[0];
+};
+
+struct cont_desc {
+	struct microcode_amd *mc;
+	u32 cpuid_1_eax;
+	u32 psize;
+	u8 *data;
+	size_t size;
+};
+
+struct hypervisor_x86 {
+	const char *name;
+	uint32_t (*detect)();
+	enum x86_hypervisor_type type;
+	struct x86_hyper_init init;
+	struct x86_hyper_runtime runtime;
+	bool ignore_nopv;
+};
+
+struct vmware_steal_time {
+	union {
+		uint64_t clock;
+		struct {
+			uint32_t clock_low;
+			uint32_t clock_high;
+		};
+	};
+	uint64_t reserved[7];
+};
+
+struct ms_hyperv_info {
+	u32 features;
+	u32 priv_high;
+	u32 misc_features;
+	u32 hints;
+	u32 nested_features;
+	u32 max_vp_index;
+	u32 max_lp_index;
+	u8 vtl;
+	union {
+		u32 isolation_config_a;
+		struct {
+			u32 paravisor_present: 1;
+			u32 reserved_a1: 31;
+		};
+	};
+	union {
+		u32 isolation_config_b;
+		struct {
+			u32 cvm_type: 4;
+			u32 reserved_b1: 1;
+			u32 shared_gpa_boundary_active: 1;
+			u32 shared_gpa_boundary_bits: 6;
+			u32 reserved_b2: 20;
+		};
+	};
+	u64 shared_gpa_boundary;
+};
+
+enum hv_isolation_type {
+	HV_ISOLATION_TYPE_NONE = 0,
+	HV_ISOLATION_TYPE_VBS = 1,
+	HV_ISOLATION_TYPE_SNP = 2,
+	HV_ISOLATION_TYPE_TDX = 3,
+};
+
+enum acpi_irq_model_id {
+	ACPI_IRQ_MODEL_PIC = 0,
+	ACPI_IRQ_MODEL_IOAPIC = 1,
+	ACPI_IRQ_MODEL_IOSAPIC = 2,
+	ACPI_IRQ_MODEL_PLATFORM = 3,
+	ACPI_IRQ_MODEL_GIC = 4,
+	ACPI_IRQ_MODEL_LPIC = 5,
+	ACPI_IRQ_MODEL_COUNT = 6,
+};
+
+struct serial_icounter_struct {
+	int cts;
+	int dsr;
+	int rng;
+	int dcd;
+	int rx;
+	int tx;
+	int frame;
+	int overrun;
+	int parity;
+	int brk;
+	int buf_overrun;
+	int reserved[9];
+};
+
+struct serial_struct {
+	int type;
+	int line;
+	unsigned int port;
+	int irq;
+	int flags;
+	int xmit_fifo_size;
+	int custom_divisor;
+	int baud_base;
+	unsigned short close_delay;
+	char io_type;
+	char reserved_char[1];
+	int hub6;
+	unsigned short closing_wait;
+	unsigned short closing_wait2;
+	unsigned char *iomem_base;
+	unsigned short iomem_reg_shift;
+	unsigned int port_high;
+	unsigned long iomap_base;
+};
+
+struct acpi_madt_multiproc_wakeup_mailbox {
+	u16 command;
+	u16 reserved;
+	u32 apic_id;
+	u64 wakeup_vector;
+	u8 reserved_os[2032];
+	u8 reserved_firmware[2048];
+};
+
+enum ioapic_domain_type {
+	IOAPIC_DOMAIN_INVALID = 0,
+	IOAPIC_DOMAIN_LEGACY = 1,
+	IOAPIC_DOMAIN_STRICT = 2,
+	IOAPIC_DOMAIN_DYNAMIC = 3,
+};
+
+enum acpi_madt_type {
+	ACPI_MADT_TYPE_LOCAL_APIC = 0,
+	ACPI_MADT_TYPE_IO_APIC = 1,
+	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
+	ACPI_MADT_TYPE_NMI_SOURCE = 3,
+	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
+	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
+	ACPI_MADT_TYPE_IO_SAPIC = 6,
+	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
+	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
+	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
+	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
+	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
+	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
+	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
+	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
+	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
+	ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,
+	ACPI_MADT_TYPE_CORE_PIC = 17,
+	ACPI_MADT_TYPE_LIO_PIC = 18,
+	ACPI_MADT_TYPE_HT_PIC = 19,
+	ACPI_MADT_TYPE_EIO_PIC = 20,
+	ACPI_MADT_TYPE_MSI_PIC = 21,
+	ACPI_MADT_TYPE_BIO_PIC = 22,
+	ACPI_MADT_TYPE_LPC_PIC = 23,
+	ACPI_MADT_TYPE_RINTC = 24,
+	ACPI_MADT_TYPE_IMSIC = 25,
+	ACPI_MADT_TYPE_APLIC = 26,
+	ACPI_MADT_TYPE_PLIC = 27,
+	ACPI_MADT_TYPE_RESERVED = 28,
+	ACPI_MADT_TYPE_OEM_RESERVED = 128,
+};
+
+enum mp_irq_source_types {
+	mp_INT = 0,
+	mp_NMI = 1,
+	mp_SMI = 2,
+	mp_ExtINT = 3,
+};
+
+struct acpi_table_header {
+	char signature[4];
+	u32 length;
+	u8 revision;
+	u8 checksum;
+	char oem_id[6];
+	char oem_table_id[8];
+	u32 oem_revision;
+	char asl_compiler_id[4];
+	u32 asl_compiler_revision;
+};
+
+struct acpi_table_boot {
+	struct acpi_table_header header;
+	u8 cmos_index;
+	u8 reserved[3];
+};
+
+struct acpi_table_madt {
+	struct acpi_table_header header;
+	u32 address;
+	u32 flags;
+};
+
+struct acpi_subtable_header {
+	u8 type;
+	u8 length;
+};
+
+struct acpi_madt_local_apic_override {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_madt_local_sapic {
+	struct acpi_subtable_header header;
+	u8 processor_id;
+	u8 id;
+	u8 eid;
+	u8 reserved[3];
+	u32 lapic_flags;
+	u32 uid;
+	char uid_string[0];
+};
+
+struct acpi_madt_local_apic {
+	struct acpi_subtable_header header;
+	u8 processor_id;
+	u8 id;
+	u32 lapic_flags;
+};
+
+struct acpi_madt_local_x2apic {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 local_apic_id;
+	u32 lapic_flags;
+	u32 uid;
+};
+
+struct acpi_madt_local_x2apic_nmi {
+	struct acpi_subtable_header header;
+	u16 inti_flags;
+	u32 uid;
+	u8 lint;
+	u8 reserved[3];
+};
+
+struct acpi_madt_local_apic_nmi {
+	struct acpi_subtable_header header;
+	u8 processor_id;
+	u16 inti_flags;
+	u8 lint;
+} __attribute__((packed));
+
+struct acpi_madt_io_apic {
+	struct acpi_subtable_header header;
+	u8 id;
+	u8 reserved;
+	u32 address;
+	u32 global_irq_base;
+};
+
+struct acpi_madt_interrupt_override {
+	struct acpi_subtable_header header;
+	u8 bus;
+	u8 source_irq;
+	u32 global_irq;
+	u16 inti_flags;
+} __attribute__((packed));
+
+struct acpi_madt_nmi_source {
+	struct acpi_subtable_header header;
+	u16 inti_flags;
+	u32 global_irq;
+};
+
+struct acpi_madt_multiproc_wakeup {
+	struct acpi_subtable_header header;
+	u16 mailbox_version;
+	u32 reserved;
+	u64 base_address;
+};
+
+struct acpi_generic_address {
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_width;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_table_hpet {
+	struct acpi_table_header header;
+	u32 id;
+	struct acpi_generic_address address;
+	u8 sequence;
+	u16 minimum_tick;
+	u8 flags;
+} __attribute__((packed));
+
+typedef void *acpi_handle;
+
+struct ioapic_domain_cfg {
+	enum ioapic_domain_type type;
+	const struct irq_domain_ops *ops;
+	struct device_node *dev;
+};
+
+typedef u32 acpi_status;
+
+typedef char *acpi_string;
+
+union acpi_object;
+
+struct acpi_object_list {
+	u32 count;
+	union acpi_object *pointer;
+};
+
+typedef u32 acpi_object_type;
+
+typedef u64 acpi_io_address;
+
+union acpi_object {
+	acpi_object_type type;
+	struct {
+		acpi_object_type type;
+		u64 value;
+	} integer;
+	struct {
+		acpi_object_type type;
+		u32 length;
+		char *pointer;
+	} string;
+	struct {
+		acpi_object_type type;
+		u32 length;
+		u8 *pointer;
+	} buffer;
+	struct {
+		acpi_object_type type;
+		u32 count;
+		union acpi_object *elements;
+	} package;
+	struct {
+		acpi_object_type type;
+		acpi_object_type actual_type;
+		acpi_handle handle;
+	} reference;
+	struct {
+		acpi_object_type type;
+		u32 proc_id;
+		acpi_io_address pblk_address;
+		u32 pblk_length;
+	} processor;
+	struct {
+		acpi_object_type type;
+		u32 system_level;
+		u32 resource_order;
+	} power_resource;
+};
+
+typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *);
+
+union acpi_subtable_headers;
+
+typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const unsigned long);
+
+struct acpi_hmat_structure {
+	u16 type;
+	u16 reserved;
+	u32 length;
+};
+
+struct acpi_prmt_module_header {
+	u16 revision;
+	u16 length;
+};
+
+struct acpi_cedt_header {
+	u8 type;
+	u8 reserved;
+	u16 length;
+};
+
+union acpi_subtable_headers {
+	struct acpi_subtable_header common;
+	struct acpi_hmat_structure hmat;
+	struct acpi_prmt_module_header prmt;
+	struct acpi_cedt_header cedt;
+};
+
+typedef int (*acpi_tbl_entry_handler_arg)(union acpi_subtable_headers *, void *, const unsigned long);
+
+struct acpi_subtable_proc {
+	int id;
+	acpi_tbl_entry_handler handler;
+	acpi_tbl_entry_handler_arg handler_arg;
+	void *arg;
+	int count;
+};
+
+struct mpc_intsrc {
+	unsigned char type;
+	unsigned char irqtype;
+	unsigned short irqflag;
+	unsigned char srcbus;
+	unsigned char srcbusirq;
+	unsigned char dstapic;
+	unsigned char dstirq;
+};
+
+typedef u32 phys_cpuid_t;
+
+typedef u64 acpi_physical_address;
+
+struct wakeup_header {
+	u16 video_mode;
+	u32 pmode_entry;
+	u16 pmode_cs;
+	u32 pmode_cr0;
+	u32 pmode_cr3;
+	u32 pmode_cr4;
+	u32 pmode_efer_low;
+	u32 pmode_efer_high;
+	u64 pmode_gdt;
+	u32 pmode_misc_en_low;
+	u32 pmode_misc_en_high;
+	u32 pmode_behavior;
+	u32 realmode_flags;
+	u32 real_magic;
+	u32 signature;
+} __attribute__((packed));
+
+struct cppc_perf_caps {
+	u32 guaranteed_perf;
+	u32 highest_perf;
+	u32 nominal_perf;
+	u32 lowest_perf;
+	u32 lowest_nonlinear_perf;
+	u32 lowest_freq;
+	u32 nominal_freq;
+	u32 energy_perf;
+	bool auto_sel;
+};
+
+struct cpc_reg {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_width;
+	u64 address;
+} __attribute__((packed));
+
+struct cstate_entry {
+	struct {
+		unsigned int eax;
+		unsigned int ecx;
+	} states[8];
+};
+
+struct acpi_processor_flags {
+	u8 power: 1;
+	u8 performance: 1;
+	u8 throttling: 1;
+	u8 limit: 1;
+	u8 bm_control: 1;
+	u8 bm_check: 1;
+	u8 has_cst: 1;
+	u8 has_lpi: 1;
+	u8 power_setup_done: 1;
+	u8 bm_rld_set: 1;
+	u8 need_hotplug_init: 1;
+};
+
+struct acpi_processor_cx {
+	u8 valid;
+	u8 type;
+	u32 address;
+	u8 entry_method;
+	u8 index;
+	u32 latency;
+	u8 bm_sts_skip;
+	char desc[32];
+};
+
+struct acpi_power_register {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
+struct machine_ops {
+	void (*restart)(char *);
+	void (*halt)();
+	void (*power_off)();
+	void (*shutdown)();
+	void (*crash_shutdown)(struct pt_regs *);
+	void (*emergency_restart)();
+};
+
+typedef void (*nmi_shootdown_cb)(int, struct pt_regs *);
+
+enum reboot_type {
+	BOOT_TRIPLE = 116,
+	BOOT_KBD = 107,
+	BOOT_BIOS = 98,
+	BOOT_ACPI = 97,
+	BOOT_EFI = 101,
+	BOOT_CF9_FORCE = 112,
+	BOOT_CF9_SAFE = 113,
+};
+
+enum reboot_mode {
+	REBOOT_UNDEFINED = -1,
+	REBOOT_COLD = 0,
+	REBOOT_WARM = 1,
+	REBOOT_HARD = 2,
+	REBOOT_SOFT = 3,
+	REBOOT_GPIO = 4,
+};
+
+struct chipset {
+	u32 vendor;
+	u32 device;
+	u32 class;
+	u32 class_mask;
+	u32 flags;
+	void (*f)(int, int, int);
+};
+
+struct intel_early_ops {
+	resource_size_t (*stolen_size)(int, int, int);
+	resource_size_t (*stolen_base)(int, int, int, resource_size_t);
+};
+
+struct smp_ops {
+	void (*smp_prepare_boot_cpu)();
+	void (*smp_prepare_cpus)(unsigned int);
+	void (*smp_cpus_done)(unsigned int);
+	void (*stop_other_cpus)(int);
+	void (*crash_stop_other_cpus)();
+	void (*smp_send_reschedule)(int);
+	void (*cleanup_dead_cpu)(unsigned int);
+	void (*poll_sync_state)();
+	int (*kick_ap_alive)(unsigned int, struct task_struct *);
+	int (*cpu_disable)();
+	void (*cpu_die)(unsigned int);
+	void (*play_dead)();
+	void (*send_call_func_ipi)(const struct cpumask *);
+	void (*send_call_func_single_ipi)(int);
+};
+
+struct mwait_cpu_dead {
+	unsigned int control;
+	unsigned int status;
+};
+
+typedef const struct cpumask * (*sched_domain_mask_f)(int);
+
+typedef int (*sched_domain_flags_f)();
+
+struct sched_domain;
+
+struct sched_domain_shared;
+
+struct sched_group;
+
+struct sched_group_capacity;
+
+struct sd_data {
+	struct sched_domain * __attribute__((btf_type_tag("percpu"))) *sd;
+	struct sched_domain_shared * __attribute__((btf_type_tag("percpu"))) *sds;
+	struct sched_group * __attribute__((btf_type_tag("percpu"))) *sg;
+	struct sched_group_capacity * __attribute__((btf_type_tag("percpu"))) *sgc;
+};
+
+struct sched_domain_topology_level {
+	sched_domain_mask_f mask;
+	sched_domain_flags_f sd_flags;
+	int flags;
+	int numa_level;
+	struct sd_data data;
+	char *name;
+};
+
+struct sched_domain {
+	struct sched_domain __attribute__((btf_type_tag("rcu"))) *parent;
+	struct sched_domain __attribute__((btf_type_tag("rcu"))) *child;
+	struct sched_group *groups;
+	unsigned long min_interval;
+	unsigned long max_interval;
+	unsigned int busy_factor;
+	unsigned int imbalance_pct;
+	unsigned int cache_nice_tries;
+	unsigned int imb_numa_nr;
+	int nohz_idle;
+	int flags;
+	int level;
+	unsigned long last_balance;
+	unsigned int balance_interval;
+	unsigned int nr_balance_failed;
+	u64 max_newidle_lb_cost;
+	unsigned long last_decay_max_lb_cost;
+	u64 avg_scan_cost;
+	unsigned int lb_count[3];
+	unsigned int lb_failed[3];
+	unsigned int lb_balanced[3];
+	unsigned int lb_imbalance[3];
+	unsigned int lb_gained[3];
+	unsigned int lb_hot_gained[3];
+	unsigned int lb_nobusyg[3];
+	unsigned int lb_nobusyq[3];
+	unsigned int alb_count;
+	unsigned int alb_failed;
+	unsigned int alb_pushed;
+	unsigned int sbe_count;
+	unsigned int sbe_balanced;
+	unsigned int sbe_pushed;
+	unsigned int sbf_count;
+	unsigned int sbf_balanced;
+	unsigned int sbf_pushed;
+	unsigned int ttwu_wake_remote;
+	unsigned int ttwu_move_affine;
+	unsigned int ttwu_move_balance;
+	char *name;
+	union {
+		void *private;
+		struct callback_head rcu;
+	};
+	struct sched_domain_shared *shared;
+	unsigned int span_weight;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	unsigned long span[0];
+};
+
+struct sched_domain_shared {
+	atomic_t ref;
+	atomic_t nr_busy_cpus;
+	int has_idle_cores;
+	int nr_idle_scan;
+};
+
+enum apic_intr_mode_id {
+	APIC_PIC = 0,
+	APIC_VIRTUAL_WIRE = 1,
+	APIC_VIRTUAL_WIRE_NO_CONFIG = 2,
+	APIC_SYMMETRIC_IO = 3,
+	APIC_SYMMETRIC_IO_NO_ROUTING = 4,
+};
+
+enum {
+	SD_BALANCE_NEWIDLE = 1,
+	SD_BALANCE_EXEC = 2,
+	SD_BALANCE_FORK = 4,
+	SD_BALANCE_WAKE = 8,
+	SD_WAKE_AFFINE = 16,
+	SD_ASYM_CPUCAPACITY = 32,
+	SD_ASYM_CPUCAPACITY_FULL = 64,
+	SD_SHARE_CPUCAPACITY = 128,
+	SD_SHARE_PKG_RESOURCES = 256,
+	SD_SERIALIZE = 512,
+	SD_ASYM_PACKING = 1024,
+	SD_PREFER_SIBLING = 2048,
+	SD_OVERLAP = 4096,
+	SD_NUMA = 8192,
+};
+
+struct physid_mask {
+	unsigned long mask[512];
+};
+
+typedef struct physid_mask physid_mask_t;
+
+struct tsc_adjust {
+	s64 bootval;
+	s64 adjusted;
+	unsigned long nextcheck;
+	bool warned;
+};
+
+enum pcpu_fc {
+	PCPU_FC_AUTO = 0,
+	PCPU_FC_EMBED = 1,
+	PCPU_FC_PAGE = 2,
+	PCPU_FC_NR = 3,
+};
+
+typedef int pcpu_fc_cpu_to_node_fn_t(int);
+
+typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);
+
+enum {
+	DUMP_PREFIX_NONE = 0,
+	DUMP_PREFIX_ADDRESS = 1,
+	DUMP_PREFIX_OFFSET = 2,
+};
+
+struct mpc_cpu {
+	unsigned char type;
+	unsigned char apicid;
+	unsigned char apicver;
+	unsigned char cpuflag;
+	unsigned int cpufeature;
+	unsigned int featureflag;
+	unsigned int reserved[2];
+};
+
+struct mpc_bus {
+	unsigned char type;
+	unsigned char busid;
+	unsigned char bustype[6];
+};
+
+struct mpc_ioapic {
+	unsigned char type;
+	unsigned char apicid;
+	unsigned char apicver;
+	unsigned char flags;
+	unsigned int apicaddr;
+};
+
+struct mpc_lintsrc {
+	unsigned char type;
+	unsigned char irqtype;
+	unsigned short irqflag;
+	unsigned char srcbusid;
+	unsigned char srcbusirq;
+	unsigned char destapic;
+	unsigned char destapiclint;
+};
+
+struct mpf_intel {
+	char signature[4];
+	unsigned int physptr;
+	unsigned char length;
+	unsigned char specification;
+	unsigned char checksum;
+	unsigned char feature1;
+	unsigned char feature2;
+	unsigned char feature3;
+	unsigned char feature4;
+	unsigned char feature5;
+};
+
+struct mpc_table {
+	char signature[4];
+	unsigned short length;
+	char spec;
+	char checksum;
+	char oem[8];
+	char productid[12];
+	unsigned int oemptr;
+	unsigned short oemsize;
+	unsigned short oemcount;
+	unsigned int lapic;
+	unsigned int reserved;
+};
+
+enum {
+	X2APIC_OFF = 0,
+	X2APIC_DISABLED = 1,
+	X2APIC_ON = 2,
+	X2APIC_ON_LOCKED = 3,
+};
+
+enum apic_delivery_modes {
+	APIC_DELIVERY_MODE_FIXED = 0,
+	APIC_DELIVERY_MODE_LOWESTPRIO = 1,
+	APIC_DELIVERY_MODE_SMI = 2,
+	APIC_DELIVERY_MODE_NMI = 4,
+	APIC_DELIVERY_MODE_INIT = 5,
+	APIC_DELIVERY_MODE_EXTINT = 7,
+};
+
+enum {
+	IRQ_REMAP_XAPIC_MODE = 0,
+	IRQ_REMAP_X2APIC_MODE = 1,
+};
+
+enum page_cache_mode {
+	_PAGE_CACHE_MODE_WB = 0,
+	_PAGE_CACHE_MODE_WC = 1,
+	_PAGE_CACHE_MODE_UC_MINUS = 2,
+	_PAGE_CACHE_MODE_UC = 3,
+	_PAGE_CACHE_MODE_WT = 4,
+	_PAGE_CACHE_MODE_WP = 5,
+	_PAGE_CACHE_MODE_NUM = 8,
+};
+
+union apic_ir {
+	unsigned long map[4];
+	u32 regs[8];
+};
+
+struct apic {
+	void (*eoi)();
+	void (*native_eoi)();
+	void (*write)(u32, u32);
+	u32 (*read)(u32);
+	void (*wait_icr_idle)();
+	u32 (*safe_wait_icr_idle)();
+	void (*send_IPI)(int, int);
+	void (*send_IPI_mask)(const struct cpumask *, int);
+	void (*send_IPI_mask_allbutself)(const struct cpumask *, int);
+	void (*send_IPI_allbutself)(int);
+	void (*send_IPI_all)(int);
+	void (*send_IPI_self)(int);
+	enum apic_delivery_modes delivery_mode;
+	u32 disable_esr: 1;
+	u32 dest_mode_logical: 1;
+	u32 x2apic_set_max_apicid: 1;
+	u32 (*calc_dest_apicid)(unsigned int);
+	u64 (*icr_read)();
+	void (*icr_write)(u32, u32);
+	u32 max_apic_id;
+	int (*probe)();
+	int (*acpi_madt_oem_check)(char *, char *);
+	bool (*apic_id_registered)();
+	bool (*check_apicid_used)(physid_mask_t *, int);
+	void (*init_apic_ldr)();
+	void (*ioapic_phys_id_map)(physid_mask_t *, physid_mask_t *);
+	int (*cpu_present_to_apicid)(int);
+	int (*phys_pkg_id)(int, int);
+	u32 (*get_apic_id)(unsigned long);
+	u32 (*set_apic_id)(unsigned int);
+	int (*wakeup_secondary_cpu)(int, unsigned long);
+	int (*wakeup_secondary_cpu_64)(int, unsigned long);
+	char *name;
+};
+
+struct irq_cfg {
+	unsigned int dest_apicid;
+	unsigned int vector;
+};
+
+struct vector_cleanup {
+	struct hlist_head head;
+	struct timer_list timer;
+};
+
+enum {
+	IRQCHIP_FWNODE_REAL = 0,
+	IRQCHIP_FWNODE_NAMED = 1,
+	IRQCHIP_FWNODE_NAMED_ID = 2,
+};
+
+enum {
+	X86_IRQ_ALLOC_LEGACY = 1,
+};
+
+enum {
+	IRQ_SET_MASK_OK = 0,
+	IRQ_SET_MASK_OK_NOCOPY = 1,
+	IRQ_SET_MASK_OK_DONE = 2,
+};
+
+enum {
+	IRQD_TRIGGER_MASK = 15,
+	IRQD_SETAFFINITY_PENDING = 256,
+	IRQD_ACTIVATED = 512,
+	IRQD_NO_BALANCING = 1024,
+	IRQD_PER_CPU = 2048,
+	IRQD_AFFINITY_SET = 4096,
+	IRQD_LEVEL = 8192,
+	IRQD_WAKEUP_STATE = 16384,
+	IRQD_MOVE_PCNTXT = 32768,
+	IRQD_IRQ_DISABLED = 65536,
+	IRQD_IRQ_MASKED = 131072,
+	IRQD_IRQ_INPROGRESS = 262144,
+	IRQD_WAKEUP_ARMED = 524288,
+	IRQD_FORWARDED_TO_VCPU = 1048576,
+	IRQD_AFFINITY_MANAGED = 2097152,
+	IRQD_IRQ_STARTED = 4194304,
+	IRQD_MANAGED_SHUTDOWN = 8388608,
+	IRQD_SINGLE_TARGET = 16777216,
+	IRQD_DEFAULT_TRIGGER_SET = 33554432,
+	IRQD_CAN_RESERVE = 67108864,
+	IRQD_HANDLE_ENFORCE_IRQCTX = 134217728,
+	IRQD_AFFINITY_ON_ACTIVATE = 268435456,
+	IRQD_IRQ_ENABLED_ON_SUSPEND = 536870912,
+	IRQD_RESEND_WHEN_IN_PROGRESS = 1073741824,
+};
+
+struct apic_chip_data {
+	struct irq_cfg hw_irq_cfg;
+	unsigned int vector;
+	unsigned int prev_vector;
+	unsigned int cpu;
+	unsigned int prev_cpu;
+	unsigned int irq;
+	struct hlist_node clist;
+	unsigned int move_in_progress: 1;
+	unsigned int is_managed: 1;
+	unsigned int can_reserve: 1;
+	unsigned int has_reserved: 1;
+};
+
+struct apic_override {
+	void (*eoi)();
+	void (*native_eoi)();
+	void (*write)(u32, u32);
+	u32 (*read)(u32);
+	void (*send_IPI)(int, int);
+	void (*send_IPI_mask)(const struct cpumask *, int);
+	void (*send_IPI_mask_allbutself)(const struct cpumask *, int);
+	void (*send_IPI_allbutself)(int);
+	void (*send_IPI_all)(int);
+	void (*send_IPI_self)(int);
+	u64 (*icr_read)();
+	void (*icr_write)(u32, u32);
+	int (*wakeup_secondary_cpu)(int, unsigned long);
+	int (*wakeup_secondary_cpu_64)(int, unsigned long);
+};
+
+struct mp_ioapic_gsi {
+	u32 gsi_base;
+	u32 gsi_end;
+};
+
+struct IO_APIC_route_entry;
+
+struct ioapic {
+	int nr_registers;
+	struct IO_APIC_route_entry *saved_registers;
+	struct mpc_ioapic mp_config;
+	struct mp_ioapic_gsi gsi_config;
+	struct ioapic_domain_cfg irqdomain_cfg;
+	struct irq_domain *irqdomain;
+	struct resource *iomem_res;
+};
+
+struct IO_APIC_route_entry {
+	union {
+		struct {
+			u64 vector: 8;
+			u64 delivery_mode: 3;
+			u64 dest_mode_logical: 1;
+			u64 delivery_status: 1;
+			u64 active_low: 1;
+			u64 irr: 1;
+			u64 is_level: 1;
+			u64 masked: 1;
+			u64 reserved_0: 15;
+			u64 reserved_1: 17;
+			u64 virt_destid_8_14: 7;
+			u64 destid_0_7: 8;
+		};
+		struct {
+			u64 ir_shared_0: 8;
+			u64 ir_zero: 3;
+			u64 ir_index_15: 1;
+			u64 ir_shared_1: 5;
+			u64 ir_reserved_0: 31;
+			u64 ir_format: 1;
+			u64 ir_index_0_14: 15;
+		};
+		struct {
+			u64 w1: 32;
+			u64 w2: 32;
+		};
+	};
+};
+
+struct irq_pin_list {
+	struct list_head list;
+	int apic;
+	int pin;
+};
+
+struct io_apic {
+	unsigned int index;
+	unsigned int unused[3];
+	unsigned int data;
+	unsigned int unused2[11];
+	unsigned int eoi;
+};
+
+union IO_APIC_reg_00 {
+	u32 raw;
+	struct {
+		u32 __reserved_2: 14;
+		u32 LTS: 1;
+		u32 delivery_type: 1;
+		u32 __reserved_1: 8;
+		u32 ID: 8;
+	} bits;
+};
+
+union IO_APIC_reg_01 {
+	u32 raw;
+	struct {
+		u32 version: 8;
+		u32 __reserved_2: 7;
+		u32 PRQ: 1;
+		u32 entries: 8;
+		u32 __reserved_1: 8;
+	} bits;
+};
+
+union IO_APIC_reg_02 {
+	u32 raw;
+	struct {
+		u32 __reserved_2: 24;
+		u32 arbitration: 4;
+		u32 __reserved_1: 4;
+	} bits;
+};
+
+struct mp_chip_data {
+	struct list_head irq_2_pin;
+	struct IO_APIC_route_entry entry;
+	bool is_level;
+	bool active_low;
+	bool isa_irq;
+	u32 count;
+};
+
+union IO_APIC_reg_03 {
+	u32 raw;
+	struct {
+		u32 boot_DT: 1;
+		u32 __reserved_1: 31;
+	} bits;
+};
+
+enum {
+	IRQ_DOMAIN_FLAG_HIERARCHY = 1,
+	IRQ_DOMAIN_NAME_ALLOCATED = 2,
+	IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,
+	IRQ_DOMAIN_FLAG_IPI_SINGLE = 8,
+	IRQ_DOMAIN_FLAG_MSI = 16,
+	IRQ_DOMAIN_FLAG_ISOLATED_MSI = 32,
+	IRQ_DOMAIN_FLAG_NO_MAP = 64,
+	IRQ_DOMAIN_FLAG_MSI_PARENT = 256,
+	IRQ_DOMAIN_FLAG_MSI_DEVICE = 512,
+	IRQ_DOMAIN_FLAG_NONCORE = 65536,
+};
+
+enum {
+	MSI_FLAG_USE_DEF_DOM_OPS = 1,
+	MSI_FLAG_USE_DEF_CHIP_OPS = 2,
+	MSI_FLAG_ACTIVATE_EARLY = 4,
+	MSI_FLAG_MUST_REACTIVATE = 8,
+	MSI_FLAG_DEV_SYSFS = 16,
+	MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS = 32,
+	MSI_FLAG_FREE_MSI_DESCS = 64,
+	MSI_GENERIC_FLAGS_MASK = 65535,
+	MSI_DOMAIN_FLAGS_MASK = 4294901760,
+	MSI_FLAG_MULTI_PCI_MSI = 65536,
+	MSI_FLAG_PCI_MSIX = 131072,
+	MSI_FLAG_LEVEL_CAPABLE = 262144,
+	MSI_FLAG_MSIX_CONTIGUOUS = 524288,
+	MSI_FLAG_PCI_MSIX_ALLOC_DYN = 1048576,
+	MSI_FLAG_PCI_IMS = 2097152,
+};
+
+enum {
+	IRQCHIP_SET_TYPE_MASKED = 1,
+	IRQCHIP_EOI_IF_HANDLED = 2,
+	IRQCHIP_MASK_ON_SUSPEND = 4,
+	IRQCHIP_ONOFFLINE_ENABLED = 8,
+	IRQCHIP_SKIP_SET_WAKE = 16,
+	IRQCHIP_ONESHOT_SAFE = 32,
+	IRQCHIP_EOI_THREADED = 64,
+	IRQCHIP_SUPPORTS_LEVEL_MSI = 128,
+	IRQCHIP_SUPPORTS_NMI = 256,
+	IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,
+	IRQCHIP_AFFINITY_PRE_STARTUP = 1024,
+	IRQCHIP_IMMUTABLE = 2048,
+};
+
+struct freelist_node {
+	atomic_t refs;
+	struct freelist_node *next;
+};
+
+struct rethook;
+
+struct rethook_node {
+	union {
+		struct freelist_node freelist;
+		struct callback_head rcu;
+	};
+	struct llist_node llist;
+	struct rethook *rethook;
+	unsigned long ret_addr;
+	unsigned long frame;
+};
+
+struct freelist_head {
+	struct freelist_node *head;
+};
+
+struct rethook {
+	void *data;
+	void (*handler)(struct rethook_node *, void *, unsigned long, struct pt_regs *);
+	struct freelist_head pool;
+	refcount_t ref;
+	struct callback_head rcu;
+};
+
+struct kretprobe_blackpoint {
+	const char *name;
+	void *addr;
+};
+
+struct prev_kprobe {
+	struct kprobe *kp;
+	unsigned long status;
+	unsigned long old_flags;
+	unsigned long saved_flags;
+};
+
+struct kprobe_ctlblk {
+	unsigned long kprobe_status;
+	unsigned long kprobe_old_flags;
+	unsigned long kprobe_saved_flags;
+	struct prev_kprobe prev_kprobe;
+};
+
+struct __arch_relative_insn {
+	u8 op;
+	s32 raddr;
+} __attribute__((packed));
+
+struct kprobe_insn_cache {
+	struct mutex mutex;
+	void * (*alloc)();
+	void (*free)(void *);
+	const char *sym;
+	struct list_head pages;
+	size_t insn_size;
+	int nr_garbage;
+};
+
+struct arch_optimized_insn {
+	kprobe_opcode_t copied_insn[4];
+	kprobe_opcode_t *insn;
+	size_t size;
+};
+
+struct optimized_kprobe {
+	struct kprobe kp;
+	struct list_head list;
+	struct arch_optimized_insn optinsn;
+};
+
+enum mod_mem_type {
+	MOD_TEXT = 0,
+	MOD_DATA = 1,
+	MOD_RODATA = 2,
+	MOD_RO_AFTER_INIT = 3,
+	MOD_INIT_TEXT = 4,
+	MOD_INIT_DATA = 5,
+	MOD_INIT_RODATA = 6,
+	MOD_MEM_NUM_TYPES = 7,
+	MOD_INVALID = -1,
+};
+
+typedef __u64 Elf64_Off;
+
+struct elf64_shdr {
+	Elf64_Word sh_name;
+	Elf64_Word sh_type;
+	Elf64_Xword sh_flags;
+	Elf64_Addr sh_addr;
+	Elf64_Off sh_offset;
+	Elf64_Xword sh_size;
+	Elf64_Word sh_link;
+	Elf64_Word sh_info;
+	Elf64_Xword sh_addralign;
+	Elf64_Xword sh_entsize;
+};
+
+typedef struct elf64_shdr Elf64_Shdr;
+
+typedef __s64 Elf64_Sxword;
+
+struct elf64_rela {
+	Elf64_Addr r_offset;
+	Elf64_Xword r_info;
+	Elf64_Sxword r_addend;
+};
+
+typedef struct elf64_rela Elf64_Rela;
+
+struct callthunk_sites {
+	s32 *call_start;
+	s32 *call_end;
+	struct paravirt_patch_site *pv_start;
+	struct paravirt_patch_site *pv_end;
+};
+
+struct elf64_hdr {
+	unsigned char e_ident[16];
+	Elf64_Half e_type;
+	Elf64_Half e_machine;
+	Elf64_Word e_version;
+	Elf64_Addr e_entry;
+	Elf64_Off e_phoff;
+	Elf64_Off e_shoff;
+	Elf64_Word e_flags;
+	Elf64_Half e_ehsize;
+	Elf64_Half e_phentsize;
+	Elf64_Half e_phnum;
+	Elf64_Half e_shentsize;
+	Elf64_Half e_shnum;
+	Elf64_Half e_shstrndx;
+};
+
+typedef struct elf64_hdr Elf64_Ehdr;
+
+struct console {
+	char name[16];
+	void (*write)(struct console *, const char *, unsigned int);
+	int (*read)(struct console *, char *, unsigned int);
+	struct tty_driver * (*device)(struct console *, int *);
+	void (*unblank)();
+	int (*setup)(struct console *, char *);
+	int (*exit)(struct console *);
+	int (*match)(struct console *, char *, int, char *);
+	short flags;
+	short index;
+	int cflag;
+	uint ispeed;
+	uint ospeed;
+	u64 seq;
+	unsigned long dropped;
+	void *data;
+	struct hlist_node node;
+};
+
+enum cons_flags {
+	CON_PRINTBUFFER = 1,
+	CON_CONSDEV = 2,
+	CON_ENABLED = 4,
+	CON_BOOT = 8,
+	CON_ANYTIME = 16,
+	CON_BRL = 32,
+	CON_EXTENDED = 64,
+	CON_SUSPENDED = 128,
+};
+
+struct hpet_channel;
+
+struct hpet_base {
+	unsigned int nr_channels;
+	unsigned int nr_clockevents;
+	unsigned int boot_cfg;
+	struct hpet_channel *channels;
+};
+
+enum hpet_mode {
+	HPET_MODE_UNUSED = 0,
+	HPET_MODE_LEGACY = 1,
+	HPET_MODE_CLOCKEVT = 2,
+	HPET_MODE_DEVICE = 3,
+};
+
+struct hpet_channel {
+	struct clock_event_device evt;
+	unsigned int num;
+	unsigned int cpu;
+	unsigned int irq;
+	unsigned int in_use;
+	enum hpet_mode mode;
+	unsigned int boot_cfg;
+	char name[10];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef irqreturn_t (*rtc_irq_handler)(int, void *);
+
+union hpet_lock {
+	struct {
+		arch_spinlock_t lock;
+		u32 value;
+	};
+	u64 lockval;
+};
+
+struct hpet_data {
+	unsigned long hd_phys_address;
+	void *hd_address;
+	unsigned short hd_nirqs;
+	unsigned int hd_state;
+	unsigned int hd_irq[32];
+};
+
+struct amd_nb_bus_dev_range {
+	u8 bus;
+	u8 dev_base;
+	u8 dev_limit;
+};
+
+struct amd_northbridge_info {
+	u16 num;
+	u64 flags;
+	struct amd_northbridge *nb;
+};
+
+struct kvm_vcpu_pv_apf_data {
+	__u32 flags;
+	__u32 token;
+	__u8 pad[56];
+	__u32 enabled;
+};
+
+struct kvm_task_sleep_head {
+	raw_spinlock_t lock;
+	struct hlist_head list;
+};
+
+struct kvm_task_sleep_node {
+	struct hlist_node link;
+	struct swait_queue_head wq;
+	u32 token;
+	int cpu;
+};
+
+struct swait_queue {
+	struct task_struct *task;
+	struct list_head task_list;
+};
+
+struct flush_tlb_info {
+	struct mm_struct *mm;
+	unsigned long start;
+	unsigned long end;
+	u64 new_tlb_gen;
+	unsigned int initiating_cpu;
+	u8 stride_shift;
+	u8 freed_tables;
+};
+
+typedef unsigned long efi_status_t;
+
+typedef u16 efi_char16_t;
+
+typedef struct {
+	__u8 b[16];
+} guid_t;
+
+typedef guid_t efi_guid_t;
+
+typedef unsigned __int128 __uint128_t;
+
+struct pv_info {
+	const char *name;
+};
+
+struct pv_cpu_ops {
+	void (*io_delay)();
+};
+
+struct pv_irq_ops {};
+
+struct pv_mmu_ops {
+	void (*flush_tlb_user)();
+	void (*flush_tlb_kernel)();
+	void (*flush_tlb_one_user)(unsigned long);
+	void (*flush_tlb_multi)(const struct cpumask *, const struct flush_tlb_info *);
+	void (*tlb_remove_table)(struct mmu_gather *, void *);
+	void (*exit_mmap)(struct mm_struct *);
+	void (*notify_page_enc_status_changed)(unsigned long, int, bool);
+};
+
+struct paravirt_callee_save {
+	void *func;
+};
+
+struct pv_lock_ops {
+	void (*queued_spin_lock_slowpath)(struct qspinlock *, u32);
+	struct paravirt_callee_save queued_spin_unlock;
+	void (*wait)(u8 *, u8);
+	void (*kick)(int);
+	struct paravirt_callee_save vcpu_is_preempted;
+};
+
+struct paravirt_patch_template {
+	struct pv_cpu_ops cpu;
+	struct pv_irq_ops irq;
+	struct pv_mmu_ops mmu;
+	struct pv_lock_ops lock;
+};
+
+struct of_ioapic_type {
+	u32 out_type;
+	u32 is_level;
+	u32 active_low;
+};
+
+struct arch_uprobe;
+
+struct uprobe_xol_ops {
+	bool (*emulate)(struct arch_uprobe *, struct pt_regs *);
+	int (*pre_xol)(struct arch_uprobe *, struct pt_regs *);
+	int (*post_xol)(struct arch_uprobe *, struct pt_regs *);
+	void (*abort)(struct arch_uprobe *, struct pt_regs *);
+};
+
+struct arch_uprobe {
+	union {
+		u8 insn[16];
+		u8 ixol[16];
+	};
+	const struct uprobe_xol_ops *ops;
+	union {
+		struct {
+			s32 offs;
+			u8 ilen;
+			u8 opc1;
+		} branch;
+		struct {
+			u8 fixups;
+			u8 ilen;
+		} defparam;
+		struct {
+			u8 reg_offset;
+			u8 ilen;
+		} push;
+	};
+};
+
+enum rp_check {
+	RP_CHECK_CALL = 0,
+	RP_CHECK_CHAIN_CALL = 1,
+	RP_CHECK_RET = 2,
+};
+
+enum perf_sample_regs_abi {
+	PERF_SAMPLE_REGS_ABI_NONE = 0,
+	PERF_SAMPLE_REGS_ABI_32 = 1,
+	PERF_SAMPLE_REGS_ABI_64 = 2,
+};
+
+struct __va_list_tag {
+	unsigned int gp_offset;
+	unsigned int fp_offset;
+	void *overflow_arg_area;
+	void *reg_save_area;
+};
+
+typedef __builtin_va_list va_list;
+
+struct va_format {
+	const char *fmt;
+	va_list *va;
+};
+
+struct core_text {
+	unsigned long base;
+	unsigned long end;
+	const char *name;
+};
+
+enum cp_error_code {
+	CP_EC = 32767,
+	CP_RET = 1,
+	CP_IRET = 2,
+	CP_ENDBR = 3,
+	CP_RSTRORSSP = 4,
+	CP_SETSSBSY = 5,
+	CP_ENCL = 32768,
+};
+
+enum auditsc_class_t {
+	AUDITSC_NATIVE = 0,
+	AUDITSC_COMPAT = 1,
+	AUDITSC_OPEN = 2,
+	AUDITSC_OPENAT = 3,
+	AUDITSC_SOCKETCALL = 4,
+	AUDITSC_EXECVE = 5,
+	AUDITSC_OPENAT2 = 6,
+	AUDITSC_NVALS = 7,
+};
+
+struct pci_hostbridge_probe {
+	u32 bus;
+	u32 slot;
+	u32 vendor;
+	u32 device;
+};
+
+typedef u8 uint8_t;
+
+enum {
+	REGION_INTERSECTS = 0,
+	REGION_DISJOINT = 1,
+	REGION_MIXED = 2,
+};
+
+enum memblock_flags {
+	MEMBLOCK_NONE = 0,
+	MEMBLOCK_HOTPLUG = 1,
+	MEMBLOCK_MIRROR = 2,
+	MEMBLOCK_NOMAP = 4,
+	MEMBLOCK_DRIVER_MANAGED = 8,
+};
+
+struct map_range {
+	unsigned long start;
+	unsigned long end;
+	unsigned int page_size_mask;
+};
+
+struct memblock_region;
+
+struct memblock_type {
+	unsigned long cnt;
+	unsigned long max;
+	phys_addr_t total_size;
+	struct memblock_region *regions;
+	char *name;
+};
+
+struct memblock_region {
+	phys_addr_t base;
+	phys_addr_t size;
+	enum memblock_flags flags;
+};
+
+struct kcore_list {
+	struct list_head list;
+	unsigned long addr;
+	size_t size;
+	int type;
+};
+
+enum kcore_type {
+	KCORE_TEXT = 0,
+	KCORE_VMALLOC = 1,
+	KCORE_RAM = 2,
+	KCORE_VMEMMAP = 3,
+	KCORE_USER = 4,
+};
+
+enum {
+	MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE = 12,
+	SECTION_INFO = 12,
+	MIX_SECTION_INFO = 13,
+	NODE_INFO = 14,
+	MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE = 14,
+};
+
+struct x86_mapping_info {
+	void * (*alloc_pgt_page)(void *);
+	void *context;
+	unsigned long page_flag;
+	unsigned long offset;
+	bool direct_gbpages;
+	unsigned long kernpg_flag;
+};
+
+struct mhp_params {
+	struct vmem_altmap *altmap;
+	pgprot_t pgprot;
+	struct dev_pagemap *pgmap;
+};
+
+typedef void (*btf_trace_page_fault_user)(void *, unsigned long, struct pt_regs *, unsigned long);
+
+typedef void (*btf_trace_page_fault_kernel)(void *, unsigned long, struct pt_regs *, unsigned long);
+
+enum perf_sw_ids {
+	PERF_COUNT_SW_CPU_CLOCK = 0,
+	PERF_COUNT_SW_TASK_CLOCK = 1,
+	PERF_COUNT_SW_PAGE_FAULTS = 2,
+	PERF_COUNT_SW_CONTEXT_SWITCHES = 3,
+	PERF_COUNT_SW_CPU_MIGRATIONS = 4,
+	PERF_COUNT_SW_PAGE_FAULTS_MIN = 5,
+	PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,
+	PERF_COUNT_SW_ALIGNMENT_FAULTS = 7,
+	PERF_COUNT_SW_EMULATION_FAULTS = 8,
+	PERF_COUNT_SW_DUMMY = 9,
+	PERF_COUNT_SW_BPF_OUTPUT = 10,
+	PERF_COUNT_SW_CGROUP_SWITCHES = 11,
+	PERF_COUNT_SW_MAX = 12,
+};
+
+struct trace_event_raw_x86_exceptions {
+	struct trace_entry ent;
+	unsigned long address;
+	unsigned long ip;
+	unsigned long error_code;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_x86_exceptions {};
+
+enum {
+	IORES_MAP_SYSTEM_RAM = 1,
+	IORES_MAP_ENCRYPTED = 2,
+};
+
+struct ioremap_desc {
+	unsigned int flags;
+};
+
+struct va_alignment {
+	int flags;
+	unsigned long mask;
+	unsigned long bits;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ptdesc {
+	unsigned long __page_flags;
+	union {
+		struct callback_head pt_rcu_head;
+		struct list_head pt_list;
+		struct {
+			unsigned long _pt_pad_1;
+			pgtable_t pmd_huge_pte;
+		};
+	};
+	unsigned long __page_mapping;
+	union {
+		struct mm_struct *pt_mm;
+		atomic_t pt_frag_refcount;
+	};
+	union {
+		unsigned long _pt_pad_2;
+		spinlock_t ptl;
+	};
+	unsigned int __page_type;
+	atomic_t _refcount;
+	unsigned long pt_memcg_data;
+};
+
+struct tlb_state_shared {
+	bool is_lazy;
+};
+
+enum tlb_flush_reason {
+	TLB_FLUSH_ON_TASK_SWITCH = 0,
+	TLB_REMOTE_SHOOTDOWN = 1,
+	TLB_LOCAL_SHOOTDOWN = 2,
+	TLB_LOCAL_MM_SHOOTDOWN = 3,
+	TLB_REMOTE_SEND_IPI = 4,
+	NR_TLB_FLUSH_REASONS = 5,
+};
+
+enum task_work_notify_mode {
+	TWA_NONE = 0,
+	TWA_RESUME = 1,
+	TWA_SIGNAL = 2,
+	TWA_SIGNAL_NO_IPI = 3,
+};
+
+struct exception_stacks {
+	char DF_stack_guard[0];
+	char DF_stack[8192];
+	char NMI_stack_guard[0];
+	char NMI_stack[8192];
+	char DB_stack_guard[0];
+	char DB_stack[8192];
+	char MCE_stack_guard[0];
+	char MCE_stack[8192];
+	char VC_stack_guard[0];
+	char VC_stack[0];
+	char VC2_stack_guard[0];
+	char VC2_stack[0];
+	char IST_top_guard[0];
+};
+
+enum cpa_warn {
+	CPA_CONFLICT = 0,
+	CPA_PROTECT = 1,
+	CPA_DETECT = 2,
+};
+
+enum vm_event_item {
+	PGPGIN = 0,
+	PGPGOUT = 1,
+	PSWPIN = 2,
+	PSWPOUT = 3,
+	PGALLOC_DMA32 = 4,
+	PGALLOC_NORMAL = 5,
+	PGALLOC_MOVABLE = 6,
+	PGALLOC_NOSPLIT = 7,
+	PGALLOC_NOMERGE = 8,
+	ALLOCSTALL_DMA32 = 9,
+	ALLOCSTALL_NORMAL = 10,
+	ALLOCSTALL_MOVABLE = 11,
+	ALLOCSTALL_NOSPLIT = 12,
+	ALLOCSTALL_NOMERGE = 13,
+	PGSCAN_SKIP_DMA32 = 14,
+	PGSCAN_SKIP_NORMAL = 15,
+	PGSCAN_SKIP_MOVABLE = 16,
+	PGSCAN_SKIP_NOSPLIT = 17,
+	PGSCAN_SKIP_NOMERGE = 18,
+	PGFREE = 19,
+	PGACTIVATE = 20,
+	PGDEACTIVATE = 21,
+	PGLAZYFREE = 22,
+	PGFAULT = 23,
+	PGMAJFAULT = 24,
+	PGLAZYFREED = 25,
+	PGREFILL = 26,
+	PGREUSE = 27,
+	PGSTEAL_KSWAPD = 28,
+	PGSTEAL_DIRECT = 29,
+	PGSTEAL_KHUGEPAGED = 30,
+	PGDEMOTE_KSWAPD = 31,
+	PGDEMOTE_DIRECT = 32,
+	PGDEMOTE_KHUGEPAGED = 33,
+	PGSCAN_KSWAPD = 34,
+	PGSCAN_DIRECT = 35,
+	PGSCAN_KHUGEPAGED = 36,
+	PGSCAN_DIRECT_THROTTLE = 37,
+	PGSCAN_ANON = 38,
+	PGSCAN_FILE = 39,
+	PGSTEAL_ANON = 40,
+	PGSTEAL_FILE = 41,
+	PGINODESTEAL = 42,
+	SLABS_SCANNED = 43,
+	KSWAPD_INODESTEAL = 44,
+	KSWAPD_LOW_WMARK_HIT_QUICKLY = 45,
+	KSWAPD_HIGH_WMARK_HIT_QUICKLY = 46,
+	PAGEOUTRUN = 47,
+	PGROTATED = 48,
+	DROP_PAGECACHE = 49,
+	DROP_SLAB = 50,
+	OOM_KILL = 51,
+	PGMIGRATE_SUCCESS = 52,
+	PGMIGRATE_FAIL = 53,
+	THP_MIGRATION_SUCCESS = 54,
+	THP_MIGRATION_FAIL = 55,
+	THP_MIGRATION_SPLIT = 56,
+	COMPACTMIGRATE_SCANNED = 57,
+	COMPACTFREE_SCANNED = 58,
+	COMPACTISOLATED = 59,
+	COMPACTSTALL = 60,
+	COMPACTFAIL = 61,
+	COMPACTSUCCESS = 62,
+	KCOMPACTD_WAKE = 63,
+	KCOMPACTD_MIGRATE_SCANNED = 64,
+	KCOMPACTD_FREE_SCANNED = 65,
+	CMA_ALLOC_SUCCESS = 66,
+	CMA_ALLOC_FAIL = 67,
+	UNEVICTABLE_PGCULLED = 68,
+	UNEVICTABLE_PGSCANNED = 69,
+	UNEVICTABLE_PGRESCUED = 70,
+	UNEVICTABLE_PGMLOCKED = 71,
+	UNEVICTABLE_PGMUNLOCKED = 72,
+	UNEVICTABLE_PGCLEARED = 73,
+	UNEVICTABLE_PGSTRANDED = 74,
+	THP_FAULT_ALLOC = 75,
+	THP_FAULT_FALLBACK = 76,
+	THP_FAULT_FALLBACK_CHARGE = 77,
+	THP_COLLAPSE_ALLOC = 78,
+	THP_COLLAPSE_ALLOC_FAILED = 79,
+	THP_FILE_ALLOC = 80,
+	THP_FILE_FALLBACK = 81,
+	THP_FILE_FALLBACK_CHARGE = 82,
+	THP_FILE_MAPPED = 83,
+	THP_SPLIT_PAGE = 84,
+	THP_SPLIT_PAGE_FAILED = 85,
+	THP_DEFERRED_SPLIT_PAGE = 86,
+	THP_SPLIT_PMD = 87,
+	THP_SHATTER_PAGE = 88,
+	THP_SHATTER_PAGE_FAILED = 89,
+	THP_SHATTER_PAGE_DISCARDED = 90,
+	THP_SCAN_EXCEED_NONE_PTE = 91,
+	THP_SCAN_EXCEED_SWAP_PTE = 92,
+	THP_SCAN_EXCEED_SHARED_PTE = 93,
+	THP_SPLIT_PUD = 94,
+	THP_ZERO_PAGE_ALLOC = 95,
+	THP_ZERO_PAGE_ALLOC_FAILED = 96,
+	THP_SWPOUT = 97,
+	THP_SWPOUT_FALLBACK = 98,
+	BALLOON_INFLATE = 99,
+	BALLOON_DEFLATE = 100,
+	BALLOON_MIGRATE = 101,
+	SWAP_RA = 102,
+	SWAP_RA_HIT = 103,
+	DIRECT_MAP_LEVEL2_SPLIT = 104,
+	DIRECT_MAP_LEVEL3_SPLIT = 105,
+	NR_VM_EVENT_ITEMS = 106,
+};
+
+struct cpa_data {
+	unsigned long *vaddr;
+	pgd_t *pgd;
+	pgprot_t mask_set;
+	pgprot_t mask_clr;
+	unsigned long numpages;
+	unsigned long curpage;
+	unsigned long pfn;
+	unsigned int flags;
+	unsigned int force_split: 1;
+	unsigned int force_static_prot: 1;
+	unsigned int force_flush_all: 1;
+	struct page **pages;
+};
+
+enum {
+	PAT_UC = 0,
+	PAT_WC = 1,
+	PAT_WT = 4,
+	PAT_WP = 5,
+	PAT_WB = 6,
+	PAT_UC_MINUS = 7,
+};
+
+struct memtype {
+	u64 start;
+	u64 end;
+	u64 subtree_max_end;
+	enum page_cache_mode type;
+	struct rb_node rb;
+};
+
+struct pagerange_state {
+	unsigned long cur_pfn;
+	int ram;
+	int not_ram;
+};
+
+typedef struct {
+	u64 val;
+} pfn_t;
+
+struct rb_augment_callbacks {
+	void (*propagate)(struct rb_node *, struct rb_node *);
+	void (*copy)(struct rb_node *, struct rb_node *);
+	void (*rotate)(struct rb_node *, struct rb_node *);
+};
+
+enum {
+	MEMTYPE_EXACT_MATCH = 0,
+	MEMTYPE_END_MATCH = 1,
+};
+
+struct kaslr_memory_region {
+	unsigned long *base;
+	unsigned long size_tb;
+};
+
+struct rnd_state {
+	__u32 s1;
+	__u32 s2;
+	__u32 s3;
+	__u32 s4;
+};
+
+enum pti_mode {
+	PTI_AUTO = 0,
+	PTI_FORCE_OFF = 1,
+	PTI_FORCE_ON = 2,
+};
+
+enum pti_clone_level {
+	PTI_CLONE_PMD = 0,
+	PTI_CLONE_PTE = 1,
+};
+
+struct crypto_tfm;
+
+struct cipher_alg {
+	unsigned int cia_min_keysize;
+	unsigned int cia_max_keysize;
+	int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);
+	void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);
+	void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);
+};
+
+struct compress_alg {
+	int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+	int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);
+};
+
+struct crypto_type;
+
+struct crypto_alg {
+	struct list_head cra_list;
+	struct list_head cra_users;
+	u32 cra_flags;
+	unsigned int cra_blocksize;
+	unsigned int cra_ctxsize;
+	unsigned int cra_alignmask;
+	int cra_priority;
+	refcount_t cra_refcnt;
+	char cra_name[128];
+	char cra_driver_name[128];
+	const struct crypto_type *cra_type;
+	union {
+		struct cipher_alg cipher;
+		struct compress_alg compress;
+	} cra_u;
+	int (*cra_init)(struct crypto_tfm *);
+	void (*cra_exit)(struct crypto_tfm *);
+	void (*cra_destroy)(struct crypto_alg *);
+	struct module *cra_module;
+};
+
+struct crypto_skcipher;
+
+struct skcipher_request;
+
+struct skcipher_alg {
+	int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);
+	int (*encrypt)(struct skcipher_request *);
+	int (*decrypt)(struct skcipher_request *);
+	int (*init)(struct crypto_skcipher *);
+	void (*exit)(struct crypto_skcipher *);
+	unsigned int min_keysize;
+	unsigned int max_keysize;
+	unsigned int ivsize;
+	unsigned int chunksize;
+	unsigned int walksize;
+	struct crypto_alg base;
+};
+
+struct crypto_tfm {
+	refcount_t refcnt;
+	u32 crt_flags;
+	int node;
+	void (*exit)(struct crypto_tfm *);
+	struct crypto_alg *__crt_alg;
+	void *__crt_ctx[0];
+};
+
+struct crypto_skcipher {
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct crypto_instance;
+
+struct crypto_type {
+	unsigned int (*ctxsize)(struct crypto_alg *, u32, u32);
+	unsigned int (*extsize)(struct crypto_alg *);
+	int (*init_tfm)(struct crypto_tfm *);
+	void (*show)(struct seq_file *, struct crypto_alg *);
+	int (*report)(struct sk_buff *, struct crypto_alg *);
+	void (*free)(struct crypto_instance *);
+	unsigned int type;
+	unsigned int maskclear;
+	unsigned int maskset;
+	unsigned int tfmsize;
+};
+
+struct crypto_template;
+
+struct crypto_spawn;
+
+struct crypto_instance {
+	struct crypto_alg alg;
+	struct crypto_template *tmpl;
+	union {
+		struct hlist_node list;
+		struct crypto_spawn *spawns;
+	};
+	struct work_struct free_work;
+	void *__ctx[0];
+};
+
+struct rtattr;
+
+struct crypto_template {
+	struct list_head list;
+	struct hlist_head instances;
+	struct module *module;
+	int (*create)(struct crypto_template *, struct rtattr **);
+	char name[128];
+};
+
+struct crypto_spawn {
+	struct list_head list;
+	struct crypto_alg *alg;
+	union {
+		struct crypto_instance *inst;
+		struct crypto_spawn *next;
+	};
+	const struct crypto_type *frontend;
+	u32 mask;
+	bool dead;
+	bool registered;
+};
+
+typedef void (*crypto_completion_t)(void *, int);
+
+struct crypto_async_request {
+	struct list_head list;
+	crypto_completion_t complete;
+	void *data;
+	struct crypto_tfm *tfm;
+	u32 flags;
+};
+
+struct skcipher_request {
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	struct crypto_async_request base;
+	void *__ctx[0];
+};
+
+enum chacha_constants {
+	CHACHA_CONSTANT_EXPA = 1634760805,
+	CHACHA_CONSTANT_ND_3 = 857760878,
+	CHACHA_CONSTANT_2_BY = 2036477234,
+	CHACHA_CONSTANT_TE_K = 1797285236,
+};
+
+struct chacha_ctx {
+	u32 key[8];
+	int nrounds;
+};
+
+struct scatter_walk {
+	struct scatterlist *sg;
+	unsigned int offset;
+};
+
+struct skcipher_walk {
+	union {
+		struct {
+			struct page *page;
+			unsigned long offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} src;
+	union {
+		struct {
+			struct page *page;
+			unsigned long offset;
+		} phys;
+		struct {
+			u8 *page;
+			void *addr;
+		} virt;
+	} dst;
+	struct scatter_walk in;
+	unsigned int nbytes;
+	struct scatter_walk out;
+	unsigned int total;
+	struct list_head buffers;
+	u8 *page;
+	u8 *buffer;
+	u8 *oiv;
+	void *iv;
+	unsigned int ivsize;
+	int flags;
+	unsigned int blocksize;
+	unsigned int stride;
+	unsigned int alignmask;
+};
+
+struct crypto_aead;
+
+struct aead_request;
+
+struct aead_alg {
+	int (*setkey)(struct crypto_aead *, const u8 *, unsigned int);
+	int (*setauthsize)(struct crypto_aead *, unsigned int);
+	int (*encrypt)(struct aead_request *);
+	int (*decrypt)(struct aead_request *);
+	int (*init)(struct crypto_aead *);
+	void (*exit)(struct crypto_aead *);
+	unsigned int ivsize;
+	unsigned int maxauthsize;
+	unsigned int chunksize;
+	struct crypto_alg base;
+};
+
+struct crypto_aead {
+	unsigned int authsize;
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct aead_request {
+	struct crypto_async_request base;
+	unsigned int assoclen;
+	unsigned int cryptlen;
+	u8 *iv;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	void *__ctx[0];
+};
+
+struct crypto_aes_ctx {
+	u32 key_enc[60];
+	u32 key_dec[60];
+	u32 key_length;
+};
+
+struct aesni_rfc4106_gcm_ctx {
+	u8 hash_subkey[16];
+	struct crypto_aes_ctx aes_key_expanded;
+	u8 nonce[4];
+	long: 64;
+};
+
+struct generic_gcmaes_ctx {
+	u8 hash_subkey[16];
+	struct crypto_aes_ctx aes_key_expanded;
+	long: 64;
+};
+
+struct gcm_context_data {
+	u8 aad_hash[16];
+	u64 aad_length;
+	u64 in_length;
+	u8 partial_block_enc_key[16];
+	u8 orig_IV[16];
+	u8 current_counter[16];
+	u64 partial_block_len;
+	u64 unused;
+	u8 hash_keys[256];
+};
+
+struct aesni_xts_ctx {
+	u8 raw_tweak_ctx[484];
+	long: 64;
+	u8 raw_crypt_ctx[484];
+	long: 64;
+};
+
+struct hash_alg_common {
+	unsigned int digestsize;
+	unsigned int statesize;
+	struct crypto_alg base;
+};
+
+struct shash_desc;
+
+struct crypto_shash;
+
+struct shash_alg {
+	int (*init)(struct shash_desc *);
+	int (*update)(struct shash_desc *, const u8 *, unsigned int);
+	int (*final)(struct shash_desc *, u8 *);
+	int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);
+	int (*export)(struct shash_desc *, void *);
+	int (*import)(struct shash_desc *, const void *);
+	int (*setkey)(struct crypto_shash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_shash *);
+	void (*exit_tfm)(struct crypto_shash *);
+	int (*clone_tfm)(struct crypto_shash *, struct crypto_shash *);
+	unsigned int descsize;
+	union {
+		int (*finup_mb)(struct shash_desc *, const u8 * const *, unsigned int, u8 * const *, unsigned int);
+		struct {
+			u64 android_backport_reserved1;
+		};
+		union {};
+	};
+	union {
+		unsigned int mb_max_msgs;
+		struct {
+			u64 android_backport_reserved2;
+		};
+		union {};
+	};
+	union {
+		struct {
+			unsigned int digestsize;
+			unsigned int statesize;
+			struct crypto_alg base;
+		};
+		struct hash_alg_common halg;
+	};
+};
+
+struct shash_desc {
+	struct crypto_shash *tfm;
+	void *__ctx[0];
+};
+
+struct crypto_shash {
+	unsigned int descsize;
+	struct crypto_tfm base;
+};
+
+struct sha256_state {
+	u32 state[8];
+	u64 count;
+	u8 buf[64];
+};
+
+typedef void sha256_block_fn(struct sha256_state *, const u8 *, int);
+
+struct sha512_state;
+
+typedef void sha512_block_fn(struct sha512_state *, const u8 *, int);
+
+struct sha512_state {
+	u64 state[8];
+	u64 count[2];
+	u8 buf[128];
+};
+
+enum blake2s_lengths {
+	BLAKE2S_BLOCK_SIZE = 64,
+	BLAKE2S_HASH_SIZE = 32,
+	BLAKE2S_KEY_SIZE = 32,
+	BLAKE2S_128_HASH_SIZE = 16,
+	BLAKE2S_160_HASH_SIZE = 20,
+	BLAKE2S_224_HASH_SIZE = 28,
+	BLAKE2S_256_HASH_SIZE = 32,
+};
+
+struct blake2s_state {
+	u32 h[8];
+	u32 t[2];
+	u32 f[2];
+	u8 buf[64];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+struct polyval_tfm_ctx {
+	u8 key_powers[128];
+};
+
+struct polyval_desc_ctx {
+	u8 buffer[16];
+	u32 bytes;
+};
+
+struct poly1305_key {
+	union {
+		u32 r[5];
+		u64 r64[3];
+	};
+};
+
+struct poly1305_core_key {
+	struct poly1305_key key;
+	struct poly1305_key precomputed_s;
+};
+
+struct poly1305_state {
+	union {
+		u32 h[5];
+		u64 h64[3];
+	};
+};
+
+struct poly1305_desc_ctx {
+	u8 buf[16];
+	unsigned int buflen;
+	unsigned short rset;
+	bool sset;
+	u32 s[4];
+	struct poly1305_state h;
+	union {
+		struct poly1305_key opaque_r[11];
+		struct poly1305_core_key core_r;
+	};
+};
+
+struct poly1305_arch_internal {
+	union {
+		struct {
+			u32 h[5];
+			u32 is_base2_26;
+		};
+		u64 hs[3];
+	};
+	u64 r[2];
+	u64 pad;
+	struct {
+		u32 r2;
+		u32 r1;
+		u32 r4;
+		u32 r3;
+	} rn[9];
+};
+
+struct crypto_kpp;
+
+struct kpp_request;
+
+struct kpp_alg {
+	int (*set_secret)(struct crypto_kpp *, const void *, unsigned int);
+	int (*generate_public_key)(struct kpp_request *);
+	int (*compute_shared_secret)(struct kpp_request *);
+	unsigned int (*max_size)(struct crypto_kpp *);
+	int (*init)(struct crypto_kpp *);
+	void (*exit)(struct crypto_kpp *);
+	struct crypto_alg base;
+};
+
+struct crypto_kpp {
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct kpp_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	void *__ctx[0];
+};
+
+enum curve25519_lengths {
+	CURVE25519_KEY_SIZE = 32,
+};
+
+struct efi_memory_map_data {
+	phys_addr_t phys_map;
+	unsigned long size;
+	unsigned long desc_version;
+	unsigned long desc_size;
+	unsigned long flags;
+};
+
+typedef struct {
+	u32 type;
+	u32 pad;
+	u64 phys_addr;
+	u64 virt_addr;
+	u64 num_pages;
+	u64 attribute;
+} efi_memory_desc_t;
+
+struct efi_memory_map {
+	phys_addr_t phys_map;
+	void *map;
+	void *map_end;
+	int nr_map;
+	unsigned long desc_version;
+	unsigned long desc_size;
+	unsigned long flags;
+};
+
+struct efi_mem_range {
+	struct range range;
+	u64 attribute;
+};
+
+enum efi_rts_ids {
+	EFI_NONE = 0,
+	EFI_GET_TIME = 1,
+	EFI_SET_TIME = 2,
+	EFI_GET_WAKEUP_TIME = 3,
+	EFI_SET_WAKEUP_TIME = 4,
+	EFI_GET_VARIABLE = 5,
+	EFI_GET_NEXT_VARIABLE = 6,
+	EFI_SET_VARIABLE = 7,
+	EFI_QUERY_VARIABLE_INFO = 8,
+	EFI_GET_NEXT_HIGH_MONO_COUNT = 9,
+	EFI_RESET_SYSTEM = 10,
+	EFI_UPDATE_CAPSULE = 11,
+	EFI_QUERY_CAPSULE_CAPS = 12,
+	EFI_ACPI_PRM_HANDLER = 13,
+};
+
+typedef struct {
+	efi_guid_t guid;
+	u64 table;
+} efi_config_table_64_t;
+
+struct efi_setup_data {
+	u64 fw_vendor;
+	u64 __unused;
+	u64 tables;
+	u64 smbios;
+	u64 reserved[8];
+};
+
+typedef struct {
+	efi_guid_t guid;
+	unsigned long *ptr;
+	const char name[16];
+} efi_config_table_type_t;
+
+typedef struct {
+	u64 signature;
+	u32 revision;
+	u32 headersize;
+	u32 crc32;
+	u32 reserved;
+} efi_table_hdr_t;
+
+typedef struct {
+	u16 year;
+	u8 month;
+	u8 day;
+	u8 hour;
+	u8 minute;
+	u8 second;
+	u8 pad1;
+	u32 nanosecond;
+	s16 timezone;
+	u8 daylight;
+	u8 pad2;
+} efi_time_t;
+
+typedef struct {
+	u32 resolution;
+	u32 accuracy;
+	u8 sets_to_zero;
+} efi_time_cap_t;
+
+typedef u8 efi_bool_t;
+
+typedef struct {
+	efi_guid_t guid;
+	u32 headersize;
+	u32 flags;
+	u32 imagesize;
+} efi_capsule_header_t;
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u32 get_time;
+	u32 set_time;
+	u32 get_wakeup_time;
+	u32 set_wakeup_time;
+	u32 set_virtual_address_map;
+	u32 convert_pointer;
+	u32 get_variable;
+	u32 get_next_variable;
+	u32 set_variable;
+	u32 get_next_high_mono_count;
+	u32 reset_system;
+	u32 update_capsule;
+	u32 query_capsule_caps;
+	u32 query_variable_info;
+} efi_runtime_services_32_t;
+
+typedef union {
+	struct {
+		efi_table_hdr_t hdr;
+		efi_status_t (*get_time)(efi_time_t *, efi_time_cap_t *);
+		efi_status_t (*set_time)(efi_time_t *);
+		efi_status_t (*get_wakeup_time)(efi_bool_t *, efi_bool_t *, efi_time_t *);
+		efi_status_t (*set_wakeup_time)(efi_bool_t, efi_time_t *);
+		efi_status_t (*set_virtual_address_map)(unsigned long, unsigned long, u32, efi_memory_desc_t *);
+		void *convert_pointer;
+		efi_status_t (*get_variable)(efi_char16_t *, efi_guid_t *, u32 *, unsigned long *, void *);
+		efi_status_t (*get_next_variable)(unsigned long *, efi_char16_t *, efi_guid_t *);
+		efi_status_t (*set_variable)(efi_char16_t *, efi_guid_t *, u32, unsigned long, void *);
+		efi_status_t (*get_next_high_mono_count)(u32 *);
+		void (*reset_system)(int, efi_status_t, unsigned long, efi_char16_t *);
+		efi_status_t (*update_capsule)(efi_capsule_header_t **, unsigned long, unsigned long);
+		efi_status_t (*query_capsule_caps)(efi_capsule_header_t **, unsigned long, u64 *, int *);
+		efi_status_t (*query_variable_info)(u32, u64 *, u64 *, u64 *);
+	};
+	efi_runtime_services_32_t mixed_mode;
+} efi_runtime_services_t;
+
+typedef struct {
+	efi_guid_t guid;
+	u32 table;
+} efi_config_table_32_t;
+
+typedef union {
+	struct {
+		efi_guid_t guid;
+		void *table;
+	};
+	efi_config_table_32_t mixed_mode;
+} efi_config_table_t;
+
+typedef struct {
+	u32 version;
+	u32 length;
+	u64 memory_protection_attribute;
+} efi_properties_table_t;
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u32 fw_vendor;
+	u32 fw_revision;
+	u32 con_in_handle;
+	u32 con_in;
+	u32 con_out_handle;
+	u32 con_out;
+	u32 stderr_handle;
+	u32 stderr;
+	u32 runtime;
+	u32 boottime;
+	u32 nr_tables;
+	u32 tables;
+} efi_system_table_32_t;
+
+typedef struct {
+	efi_table_hdr_t hdr;
+	u64 fw_vendor;
+	u32 fw_revision;
+	u32 __pad1;
+	u64 con_in_handle;
+	u64 con_in;
+	u64 con_out_handle;
+	u64 con_out;
+	u64 stderr_handle;
+	u64 stderr;
+	u64 runtime;
+	u64 boottime;
+	u32 nr_tables;
+	u32 __pad2;
+	u64 tables;
+} efi_system_table_64_t;
+
+union efi_simple_text_input_protocol;
+
+typedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_t;
+
+union efi_simple_text_output_protocol;
+
+typedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;
+
+union efi_boot_services;
+
+typedef union efi_boot_services efi_boot_services_t;
+
+typedef union {
+	struct {
+		efi_table_hdr_t hdr;
+		unsigned long fw_vendor;
+		u32 fw_revision;
+		unsigned long con_in_handle;
+		efi_simple_text_input_protocol_t *con_in;
+		unsigned long con_out_handle;
+		efi_simple_text_output_protocol_t *con_out;
+		unsigned long stderr_handle;
+		unsigned long stderr;
+		efi_runtime_services_t *runtime;
+		efi_boot_services_t *boottime;
+		unsigned long nr_tables;
+		unsigned long tables;
+	};
+	efi_system_table_32_t mixed_mode;
+} efi_system_table_t;
+
+typedef int (*efi_memattr_perm_setter)(struct mm_struct *, efi_memory_desc_t *, bool);
+
+struct pm_qos_request {
+	struct plist_node node;
+	struct pm_qos_constraints *qos;
+};
+
+enum bpf_text_poke_type {
+	BPF_MOD_CALL = 0,
+	BPF_MOD_JUMP = 1,
+};
+
+enum bpf_link_type {
+	BPF_LINK_TYPE_UNSPEC = 0,
+	BPF_LINK_TYPE_RAW_TRACEPOINT = 1,
+	BPF_LINK_TYPE_TRACING = 2,
+	BPF_LINK_TYPE_CGROUP = 3,
+	BPF_LINK_TYPE_ITER = 4,
+	BPF_LINK_TYPE_NETNS = 5,
+	BPF_LINK_TYPE_XDP = 6,
+	BPF_LINK_TYPE_PERF_EVENT = 7,
+	BPF_LINK_TYPE_KPROBE_MULTI = 8,
+	BPF_LINK_TYPE_STRUCT_OPS = 9,
+	BPF_LINK_TYPE_NETFILTER = 10,
+	BPF_LINK_TYPE_TCX = 11,
+	BPF_LINK_TYPE_UPROBE_MULTI = 12,
+	MAX_BPF_LINK_TYPE = 13,
+};
+
+struct sock_fprog_kern {
+	u16 len;
+	struct sock_filter *filter;
+};
+
+struct bpf_map_dev_ops;
+
+struct bpf_offloaded_map {
+	struct bpf_map map;
+	struct net_device *netdev;
+	const struct bpf_map_dev_ops *dev_ops;
+	void *dev_priv;
+	struct list_head offloads;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_map_dev_ops {
+	int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);
+	int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);
+	int (*map_delete_elem)(struct bpf_offloaded_map *, void *);
+	u64 android_kabi_reserved1;
+};
+
+struct Qdisc_class_ops;
+
+struct gnet_dump;
+
+struct Qdisc_ops {
+	struct Qdisc_ops *next;
+	const struct Qdisc_class_ops *cl_ops;
+	char id[16];
+	int priv_size;
+	unsigned int static_flags;
+	int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);
+	struct sk_buff * (*dequeue)(struct Qdisc *);
+	struct sk_buff * (*peek)(struct Qdisc *);
+	int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*reset)(struct Qdisc *);
+	void (*destroy)(struct Qdisc *);
+	int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);
+	void (*attach)(struct Qdisc *);
+	int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
+	void (*change_real_num_tx)(struct Qdisc *, unsigned int);
+	int (*dump)(struct Qdisc *, struct sk_buff *);
+	int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
+	void (*ingress_block_set)(struct Qdisc *, u32);
+	void (*egress_block_set)(struct Qdisc *, u32);
+	u32 (*ingress_block_get)(struct Qdisc *);
+	u32 (*egress_block_get)(struct Qdisc *);
+	struct module *owner;
+	u64 android_kabi_reserved1;
+};
+
+struct tcmsg;
+
+struct qdisc_walker;
+
+struct tcf_block;
+
+struct Qdisc_class_ops {
+	unsigned int flags;
+	struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
+	int (*graft)(struct Qdisc *, unsigned long, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);
+	struct Qdisc * (*leaf)(struct Qdisc *, unsigned long);
+	void (*qlen_notify)(struct Qdisc *, unsigned long);
+	unsigned long (*find)(struct Qdisc *, u32);
+	int (*change)(struct Qdisc *, u32, u32, struct nlattr **, unsigned long *, struct netlink_ext_ack *);
+	int (*delete)(struct Qdisc *, unsigned long, struct netlink_ext_ack *);
+	void (*walk)(struct Qdisc *, struct qdisc_walker *);
+	struct tcf_block * (*tcf_block)(struct Qdisc *, unsigned long, struct netlink_ext_ack *);
+	unsigned long (*bind_tcf)(struct Qdisc *, unsigned long, u32);
+	void (*unbind_tcf)(struct Qdisc *, unsigned long);
+	int (*dump)(struct Qdisc *, unsigned long, struct sk_buff *, struct tcmsg *);
+	int (*dump_stats)(struct Qdisc *, unsigned long, struct gnet_dump *);
+	u64 android_kabi_reserved1;
+};
+
+struct tcmsg {
+	unsigned char tcm_family;
+	unsigned char tcm__pad1;
+	unsigned short tcm__pad2;
+	int tcm_ifindex;
+	__u32 tcm_handle;
+	__u32 tcm_parent;
+	__u32 tcm_info;
+};
+
+struct flow_block {
+	struct list_head cb_list;
+};
+
+struct tcf_chain;
+
+struct tcf_block {
+	struct mutex lock;
+	struct list_head chain_list;
+	u32 index;
+	u32 classid;
+	refcount_t refcnt;
+	struct net *net;
+	struct Qdisc *q;
+	struct rw_semaphore cb_lock;
+	struct flow_block flow_block;
+	struct list_head owner_list;
+	bool keep_dst;
+	atomic_t offloadcnt;
+	unsigned int nooffloaddevcnt;
+	unsigned int lockeddevcnt;
+	struct {
+		struct tcf_chain *chain;
+		struct list_head filter_chain_list;
+	} chain0;
+	struct callback_head rcu;
+	struct hlist_head proto_destroy_ht[128];
+	struct mutex proto_destroy_lock;
+};
+
+struct tcf_proto;
+
+struct tcf_proto_ops;
+
+struct tcf_chain {
+	struct mutex filter_chain_lock;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_chain;
+	struct list_head list;
+	struct tcf_block *block;
+	u32 index;
+	unsigned int refcnt;
+	unsigned int action_refcnt;
+	bool explicitly_created;
+	bool flushing;
+	const struct tcf_proto_ops *tmplt_ops;
+	void *tmplt_priv;
+	struct callback_head rcu;
+};
+
+struct tcf_result;
+
+struct tcf_proto {
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *next;
+	void __attribute__((btf_type_tag("rcu"))) *root;
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	__be16 protocol;
+	u32 prio;
+	void *data;
+	const struct tcf_proto_ops *ops;
+	struct tcf_chain *chain;
+	spinlock_t lock;
+	bool deleting;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	struct hlist_node destroy_ht_node;
+};
+
+struct tcf_result {
+	union {
+		struct {
+			unsigned long class;
+			u32 classid;
+		};
+		const struct tcf_proto *goto_tp;
+	};
+};
+
+typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);
+
+struct tcf_walker;
+
+struct tcf_exts;
+
+struct tcf_proto_ops {
+	struct list_head head;
+	char kind[16];
+	int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);
+	int (*init)(struct tcf_proto *);
+	void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);
+	void * (*get)(struct tcf_proto *, u32);
+	void (*put)(struct tcf_proto *, void *);
+	int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, unsigned long, u32, struct nlattr **, void **, u32, struct netlink_ext_ack *);
+	int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);
+	bool (*delete_empty)(struct tcf_proto *);
+	void (*walk)(struct tcf_proto *, struct tcf_walker *, bool);
+	int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);
+	void (*hw_add)(struct tcf_proto *, void *);
+	void (*hw_del)(struct tcf_proto *, void *);
+	void (*bind_class)(void *, u32, unsigned long, void *, unsigned long);
+	void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);
+	void (*tmplt_destroy)(void *);
+	void (*tmplt_reoffload)(struct tcf_chain *, bool, flow_setup_cb_t *, void *);
+	struct tcf_exts * (*get_exts)(const struct tcf_proto *, u32);
+	int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);
+	int (*tmplt_dump)(struct sk_buff *, struct net *, void *);
+	struct module *owner;
+	int flags;
+};
+
+struct tc_stats {
+	__u64 bytes;
+	__u32 packets;
+	__u32 drops;
+	__u32 overlimits;
+	__u32 bps;
+	__u32 pps;
+	__u32 qlen;
+	__u32 backlog;
+};
+
+struct gnet_dump {
+	spinlock_t *lock;
+	struct sk_buff *skb;
+	struct nlattr *tail;
+	int compat_tc_stats;
+	int compat_xstats;
+	int padattr;
+	void *xstats;
+	int xstats_len;
+	struct tc_stats tc_stats;
+};
+
+struct tc_sizespec {
+	unsigned char cell_log;
+	unsigned char size_log;
+	short cell_align;
+	int overhead;
+	unsigned int linklayer;
+	unsigned int mpu;
+	unsigned int mtu;
+	unsigned int tsize;
+};
+
+struct qdisc_size_table {
+	struct callback_head rcu;
+	struct list_head list;
+	struct tc_sizespec szopts;
+	int refcnt;
+	u16 data[0];
+};
+
+struct net_rate_estimator {
+	struct gnet_stats_basic_sync *bstats;
+	spinlock_t *stats_lock;
+	bool running;
+	struct gnet_stats_basic_sync __attribute__((btf_type_tag("percpu"))) *cpu_bstats;
+	u8 ewma_log;
+	u8 intvl_log;
+	seqcount_t seq;
+	u64 last_packets;
+	u64 last_bytes;
+	u64 avpps;
+	u64 avbps;
+	unsigned long next_jiffies;
+	struct timer_list timer;
+	struct callback_head rcu;
+};
+
+enum bpf_tramp_prog_type {
+	BPF_TRAMP_FENTRY = 0,
+	BPF_TRAMP_FEXIT = 1,
+	BPF_TRAMP_MODIFY_RETURN = 2,
+	BPF_TRAMP_MAX = 3,
+	BPF_TRAMP_REPLACE = 4,
+};
+
+enum {
+	BPF_REG_0 = 0,
+	BPF_REG_1 = 1,
+	BPF_REG_2 = 2,
+	BPF_REG_3 = 3,
+	BPF_REG_4 = 4,
+	BPF_REG_5 = 5,
+	BPF_REG_6 = 6,
+	BPF_REG_7 = 7,
+	BPF_REG_8 = 8,
+	BPF_REG_9 = 9,
+	BPF_REG_10 = 10,
+	__MAX_BPF_REG = 11,
+};
+
+enum bpf_jit_poke_reason {
+	BPF_POKE_REASON_TAIL_CALL = 0,
+};
+
+struct bpf_array_aux;
+
+struct bpf_array {
+	struct bpf_map map;
+	u32 elem_size;
+	u32 index_mask;
+	struct bpf_array_aux *aux;
+	union {
+		struct {
+			struct {} __empty_value;
+			char value[0];
+		};
+		struct {
+			struct {} __empty_ptrs;
+			void *ptrs[0];
+		};
+		struct {
+			struct {} __empty_pptrs;
+			void __attribute__((btf_type_tag("percpu"))) *pptrs[0];
+		};
+	};
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_array_aux {
+	struct list_head poke_progs;
+	struct bpf_map *map;
+	struct mutex poke_mutex;
+	struct work_struct work;
+};
+
+struct bpf_tramp_link;
+
+struct bpf_tramp_links {
+	struct bpf_tramp_link *links[38];
+	int nr_links;
+};
+
+struct bpf_link_ops;
+
+struct bpf_link {
+	atomic64_t refcnt;
+	u32 id;
+	enum bpf_link_type type;
+	const struct bpf_link_ops *ops;
+	struct bpf_prog *prog;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct bpf_tramp_link {
+	struct bpf_link link;
+	struct hlist_node tramp_hlist;
+	u64 cookie;
+};
+
+struct bpf_link_info;
+
+struct bpf_link_ops {
+	void (*release)(struct bpf_link *);
+	void (*dealloc)(struct bpf_link *);
+	void (*dealloc_deferred)(struct bpf_link *);
+	int (*detach)(struct bpf_link *);
+	int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);
+	void (*show_fdinfo)(const struct bpf_link *, struct seq_file *);
+	int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);
+	int (*update_map)(struct bpf_link *, struct bpf_map *, struct bpf_map *);
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_link_info {
+	__u32 type;
+	__u32 id;
+	__u32 prog_id;
+	union {
+		struct {
+			__u64 tp_name;
+			__u32 tp_name_len;
+		} raw_tracepoint;
+		struct {
+			__u32 attach_type;
+			__u32 target_obj_id;
+			__u32 target_btf_id;
+		} tracing;
+		struct {
+			__u64 cgroup_id;
+			__u32 attach_type;
+		} cgroup;
+		struct {
+			__u64 target_name;
+			__u32 target_name_len;
+			union {
+				struct {
+					__u32 map_id;
+				} map;
+			};
+			union {
+				struct {
+					__u64 cgroup_id;
+					__u32 order;
+				} cgroup;
+				struct {
+					__u32 tid;
+					__u32 pid;
+				} task;
+			};
+		} iter;
+		struct {
+			__u32 netns_ino;
+			__u32 attach_type;
+		} netns;
+		struct {
+			__u32 ifindex;
+		} xdp;
+		struct {
+			__u32 map_id;
+		} struct_ops;
+		struct {
+			__u32 pf;
+			__u32 hooknum;
+			__s32 priority;
+			__u32 flags;
+		} netfilter;
+		struct {
+			__u64 addrs;
+			__u32 count;
+			__u32 flags;
+		} kprobe_multi;
+		struct {
+			__u32 type;
+			union {
+				struct {
+					__u64 file_name;
+					__u32 name_len;
+					__u32 offset;
+				} uprobe;
+				struct {
+					__u64 func_name;
+					__u32 name_len;
+					__u32 offset;
+					__u64 addr;
+				} kprobe;
+				struct {
+					__u64 tp_name;
+					__u32 name_len;
+				} tracepoint;
+				struct {
+					__u64 config;
+					__u32 type;
+				} event;
+			};
+		} perf_event;
+		struct {
+			__u32 ifindex;
+			__u32 attach_type;
+		} tcx;
+	};
+};
+
+struct jit_context {
+	int cleanup_addr;
+	int tail_call_direct_label;
+	int tail_call_indirect_label;
+};
+
+struct bpf_binary_header {
+	u32 size;
+	long: 0;
+	u8 image[0];
+};
+
+typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);
+
+struct bpf_tramp_run_ctx;
+
+typedef u64 (*bpf_trampoline_enter_t)(struct bpf_prog *, struct bpf_tramp_run_ctx *);
+
+struct bpf_tramp_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+	struct bpf_run_ctx *saved_run_ctx;
+};
+
+typedef void (*bpf_trampoline_exit_t)(struct bpf_prog *, u64, struct bpf_tramp_run_ctx *);
+
+struct x64_jit_data {
+	struct bpf_binary_header *rw_header;
+	struct bpf_binary_header *header;
+	int *addrs;
+	u8 *image;
+	int proglen;
+	struct jit_context ctx;
+};
+
+struct fdtable {
+	unsigned int max_fds;
+	struct file __attribute__((btf_type_tag("rcu"))) **fd;
+	unsigned long *close_on_exec;
+	unsigned long *open_fds;
+	unsigned long *full_fds_bits;
+	struct callback_head rcu;
+};
+
+struct files_struct {
+	atomic_t count;
+	bool resize_in_progress;
+	wait_queue_head_t resize_wait;
+	struct fdtable __attribute__((btf_type_tag("rcu"))) *fdt;
+	struct fdtable fdtab;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t file_lock;
+	unsigned int next_fd;
+	unsigned long close_on_exec_init[1];
+	unsigned long open_fds_init[1];
+	unsigned long full_fds_bits_init[1];
+	struct file __attribute__((btf_type_tag("rcu"))) *fd_array[64];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_uring_sqe;
+
+struct io_uring_cmd {
+	struct file *file;
+	const struct io_uring_sqe *sqe;
+	union {
+		void (*task_work_cb)(struct io_uring_cmd *, unsigned int);
+		void *cookie;
+	};
+	u32 cmd_op;
+	u32 flags;
+	u8 pdu[32];
+};
+
+typedef int __kernel_rwf_t;
+
+struct io_uring_sqe {
+	__u8 opcode;
+	__u8 flags;
+	__u16 ioprio;
+	__s32 fd;
+	union {
+		__u64 off;
+		__u64 addr2;
+		struct {
+			__u32 cmd_op;
+			__u32 __pad1;
+		};
+	};
+	union {
+		__u64 addr;
+		__u64 splice_off_in;
+	};
+	__u32 len;
+	union {
+		__kernel_rwf_t rw_flags;
+		__u32 fsync_flags;
+		__u16 poll_events;
+		__u32 poll32_events;
+		__u32 sync_range_flags;
+		__u32 msg_flags;
+		__u32 timeout_flags;
+		__u32 accept_flags;
+		__u32 cancel_flags;
+		__u32 open_flags;
+		__u32 statx_flags;
+		__u32 fadvise_advice;
+		__u32 splice_flags;
+		__u32 rename_flags;
+		__u32 unlink_flags;
+		__u32 hardlink_flags;
+		__u32 xattr_flags;
+		__u32 msg_ring_flags;
+		__u32 uring_cmd_flags;
+	};
+	__u64 user_data;
+	union {
+		__u16 buf_index;
+		__u16 buf_group;
+	};
+	__u16 personality;
+	union {
+		__s32 splice_fd_in;
+		__u32 file_index;
+		struct {
+			__u16 addr_len;
+			__u16 __pad3[1];
+		};
+	};
+	union {
+		struct {
+			__u64 addr3;
+			__u64 __pad2[1];
+		};
+		__u8 cmd[0];
+	};
+};
+
+typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, unsigned long);
+
+typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);
+
+enum {
+	MM_FILEPAGES = 0,
+	MM_ANONPAGES = 1,
+	MM_SWAPENTS = 2,
+	MM_SHMEMPAGES = 3,
+	NR_MM_COUNTERS = 4,
+};
+
+enum ucount_type {
+	UCOUNT_USER_NAMESPACES = 0,
+	UCOUNT_PID_NAMESPACES = 1,
+	UCOUNT_UTS_NAMESPACES = 2,
+	UCOUNT_IPC_NAMESPACES = 3,
+	UCOUNT_NET_NAMESPACES = 4,
+	UCOUNT_MNT_NAMESPACES = 5,
+	UCOUNT_CGROUP_NAMESPACES = 6,
+	UCOUNT_TIME_NAMESPACES = 7,
+	UCOUNT_INOTIFY_INSTANCES = 8,
+	UCOUNT_INOTIFY_WATCHES = 9,
+	UCOUNT_COUNTS = 10,
+};
+
+enum rlimit_type {
+	UCOUNT_RLIMIT_NPROC = 0,
+	UCOUNT_RLIMIT_MSGQUEUE = 1,
+	UCOUNT_RLIMIT_SIGPENDING = 2,
+	UCOUNT_RLIMIT_MEMLOCK = 3,
+	UCOUNT_RLIMIT_COUNTS = 4,
+};
+
+enum {
+	TASK_COMM_LEN = 16,
+};
+
+enum proc_hidepid {
+	HIDEPID_OFF = 0,
+	HIDEPID_NO_ACCESS = 1,
+	HIDEPID_INVISIBLE = 2,
+	HIDEPID_NOT_PTRACEABLE = 4,
+};
+
+enum proc_pidonly {
+	PROC_PIDONLY_OFF = 0,
+	PROC_PIDONLY_ON = 1,
+};
+
+enum {
+	FUTEX_STATE_OK = 0,
+	FUTEX_STATE_EXITING = 1,
+	FUTEX_STATE_DEAD = 2,
+};
+
+struct trace_event_raw_task_newtask {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	unsigned long clone_flags;
+	short oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_task_rename {
+	struct trace_entry ent;
+	pid_t pid;
+	char oldcomm[16];
+	char newcomm[16];
+	short oom_score_adj;
+	char __data[0];
+};
+
+struct vm_stack {
+	struct callback_head rcu;
+	struct vm_struct *stack_vm_area;
+};
+
+struct clone_args {
+	__u64 flags;
+	__u64 pidfd;
+	__u64 child_tid;
+	__u64 parent_tid;
+	__u64 exit_signal;
+	__u64 stack;
+	__u64 stack_size;
+	__u64 tls;
+	__u64 set_tid;
+	__u64 set_tid_size;
+	__u64 cgroup;
+};
+
+struct proc_fs_info {
+	struct pid_namespace *pid_ns;
+	struct dentry *proc_self;
+	struct dentry *proc_thread_self;
+	kgid_t pid_gid;
+	enum proc_hidepid hide_pid;
+	enum proc_pidonly pidonly;
+	struct callback_head rcu;
+};
+
+struct trace_event_data_offsets_task_newtask {};
+
+struct trace_event_data_offsets_task_rename {};
+
+struct multiprocess_signals {
+	sigset_t signal;
+	struct hlist_node node;
+};
+
+typedef int (*proc_visitor)(struct task_struct *, void *);
+
+struct taint_flag {
+	char c_true;
+	char c_false;
+	bool module;
+};
+
+enum kmsg_dump_reason {
+	KMSG_DUMP_UNDEF = 0,
+	KMSG_DUMP_PANIC = 1,
+	KMSG_DUMP_OOPS = 2,
+	KMSG_DUMP_EMERG = 3,
+	KMSG_DUMP_SHUTDOWN = 4,
+	KMSG_DUMP_MAX = 5,
+};
+
+enum con_flush_mode {
+	CONSOLE_FLUSH_PENDING = 0,
+	CONSOLE_REPLAY_ALL = 1,
+};
+
+enum error_detector {
+	ERROR_DETECTOR_KFENCE = 0,
+	ERROR_DETECTOR_KASAN = 1,
+	ERROR_DETECTOR_WARN = 2,
+};
+
+enum ftrace_dump_mode {
+	DUMP_NONE = 0,
+	DUMP_ALL = 1,
+	DUMP_ORIG = 2,
+};
+
+enum ctx_state {
+	CONTEXT_DISABLED = -1,
+	CONTEXT_KERNEL = 0,
+	CONTEXT_IDLE = 1,
+	CONTEXT_USER = 2,
+	CONTEXT_GUEST = 3,
+	CONTEXT_MAX = 4,
+};
+
+struct warn_args {
+	const char *fmt;
+	va_list args;
+};
+
+typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));
+
+typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);
+
+typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);
+
+struct cpuhp_cpu_state {
+	enum cpuhp_state state;
+	enum cpuhp_state target;
+	enum cpuhp_state fail;
+	struct task_struct *thread;
+	bool should_run;
+	bool rollback;
+	bool single;
+	bool bringup;
+	struct hlist_node *node;
+	struct hlist_node *last;
+	enum cpuhp_state cb_state;
+	int result;
+	atomic_t ap_sync_state;
+	struct completion done_up;
+	struct completion done_down;
+};
+
+struct smp_hotplug_thread {
+	struct task_struct * __attribute__((btf_type_tag("percpu"))) *store;
+	struct list_head list;
+	int (*thread_should_run)(unsigned int);
+	void (*thread_fn)(unsigned int);
+	void (*create)(unsigned int);
+	void (*setup)(unsigned int);
+	void (*cleanup)(unsigned int, bool);
+	void (*park)(unsigned int);
+	void (*unpark)(unsigned int);
+	bool selfparking;
+	const char *thread_comm;
+};
+
+struct cpuhp_step {
+	const char *name;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} startup;
+	union {
+		int (*single)(unsigned int);
+		int (*multi)(unsigned int, struct hlist_node *);
+	} teardown;
+	struct hlist_head list;
+	bool cant_stop;
+	bool multi_instance;
+};
+
+enum cpu_mitigations {
+	CPU_MITIGATIONS_OFF = 0,
+	CPU_MITIGATIONS_AUTO = 1,
+	CPU_MITIGATIONS_AUTO_NOSMT = 2,
+};
+
+enum cpuhp_sync_state {
+	SYNC_STATE_DEAD = 0,
+	SYNC_STATE_KICKED = 1,
+	SYNC_STATE_SHOULD_DIE = 2,
+	SYNC_STATE_ALIVE = 3,
+	SYNC_STATE_SHOULD_ONLINE = 4,
+	SYNC_STATE_ONLINE = 5,
+};
+
+struct trace_event_raw_cpuhp_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
+};
+
+struct trace_event_raw_cpuhp_multi_enter {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int target;
+	int idx;
+	void *fun;
+	char __data[0];
+};
+
+struct trace_event_raw_cpuhp_exit {
+	struct trace_entry ent;
+	unsigned int cpu;
+	int state;
+	int idx;
+	int ret;
+	char __data[0];
+};
+
+struct cpu_down_work {
+	unsigned int cpu;
+	enum cpuhp_state target;
+};
+
+struct trace_event_data_offsets_cpuhp_enter {};
+
+struct trace_event_data_offsets_cpuhp_multi_enter {};
+
+struct trace_event_data_offsets_cpuhp_exit {};
+
+struct pipe_buffer;
+
+struct pipe_inode_info {
+	struct mutex mutex;
+	wait_queue_head_t rd_wait;
+	wait_queue_head_t wr_wait;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int max_usage;
+	unsigned int ring_size;
+	unsigned int nr_accounted;
+	unsigned int readers;
+	unsigned int writers;
+	unsigned int files;
+	unsigned int r_counter;
+	unsigned int w_counter;
+	bool poll_usage;
+	struct page *tmp_page;
+	struct fasync_struct *fasync_readers;
+	struct fasync_struct *fasync_writers;
+	struct pipe_buffer *bufs;
+	struct user_struct *user;
+};
+
+struct pipe_buf_operations;
+
+struct pipe_buffer {
+	struct page *page;
+	unsigned int offset;
+	unsigned int len;
+	const struct pipe_buf_operations *ops;
+	unsigned int flags;
+	unsigned long private;
+};
+
+struct pipe_buf_operations {
+	int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);
+	void (*release)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);
+	bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
+};
+
+struct __kernel_old_timeval {
+	__kernel_long_t tv_sec;
+	__kernel_long_t tv_usec;
+};
+
+struct rusage {
+	struct __kernel_old_timeval ru_utime;
+	struct __kernel_old_timeval ru_stime;
+	__kernel_long_t ru_maxrss;
+	__kernel_long_t ru_ixrss;
+	__kernel_long_t ru_idrss;
+	__kernel_long_t ru_isrss;
+	__kernel_long_t ru_minflt;
+	__kernel_long_t ru_majflt;
+	__kernel_long_t ru_nswap;
+	__kernel_long_t ru_inblock;
+	__kernel_long_t ru_oublock;
+	__kernel_long_t ru_msgsnd;
+	__kernel_long_t ru_msgrcv;
+	__kernel_long_t ru_nsignals;
+	__kernel_long_t ru_nvcsw;
+	__kernel_long_t ru_nivcsw;
+};
+
+struct waitid_info;
+
+struct wait_opts {
+	enum pid_type wo_type;
+	int wo_flags;
+	struct pid *wo_pid;
+	struct waitid_info *wo_info;
+	int wo_stat;
+	struct rusage *wo_rusage;
+	wait_queue_entry_t child_wait;
+	int notask_error;
+};
+
+struct waitid_info {
+	pid_t pid;
+	uid_t uid;
+	int status;
+	int cause;
+};
+
+struct old_timeval32 {
+	old_time32_t tv_sec;
+	s32 tv_usec;
+};
+
+struct compat_rusage {
+	struct old_timeval32 ru_utime;
+	struct old_timeval32 ru_stime;
+	compat_long_t ru_maxrss;
+	compat_long_t ru_ixrss;
+	compat_long_t ru_idrss;
+	compat_long_t ru_isrss;
+	compat_long_t ru_minflt;
+	compat_long_t ru_majflt;
+	compat_long_t ru_nswap;
+	compat_long_t ru_inblock;
+	compat_long_t ru_oublock;
+	compat_long_t ru_msgsnd;
+	compat_long_t ru_msgrcv;
+	compat_long_t ru_nsignals;
+	compat_long_t ru_nvcsw;
+	compat_long_t ru_nivcsw;
+};
+
+typedef void (*btf_trace_irq_handler_entry)(void *, int, struct irqaction *);
+
+typedef void (*btf_trace_irq_handler_exit)(void *, int, struct irqaction *, int);
+
+typedef void (*btf_trace_softirq_entry)(void *, unsigned int);
+
+typedef void (*btf_trace_softirq_exit)(void *, unsigned int);
+
+typedef void (*btf_trace_softirq_raise)(void *, unsigned int);
+
+struct tasklet_struct;
+
+typedef void (*btf_trace_tasklet_entry)(void *, struct tasklet_struct *, void *);
+
+struct tasklet_struct {
+	struct tasklet_struct *next;
+	unsigned long state;
+	atomic_t count;
+	bool use_callback;
+	union {
+		void (*func)(unsigned long);
+		void (*callback)(struct tasklet_struct *);
+	};
+	unsigned long data;
+};
+
+typedef void (*btf_trace_tasklet_exit)(void *, struct tasklet_struct *, void *);
+
+struct softirq_action {
+	void (*action)(struct softirq_action *);
+};
+
+struct tasklet_head {
+	struct tasklet_struct *head;
+	struct tasklet_struct **tail;
+};
+
+enum {
+	HI_SOFTIRQ = 0,
+	TIMER_SOFTIRQ = 1,
+	NET_TX_SOFTIRQ = 2,
+	NET_RX_SOFTIRQ = 3,
+	BLOCK_SOFTIRQ = 4,
+	IRQ_POLL_SOFTIRQ = 5,
+	TASKLET_SOFTIRQ = 6,
+	SCHED_SOFTIRQ = 7,
+	HRTIMER_SOFTIRQ = 8,
+	RCU_SOFTIRQ = 9,
+	NR_SOFTIRQS = 10,
+};
+
+enum {
+	TASKLET_STATE_SCHED = 0,
+	TASKLET_STATE_RUN = 1,
+};
+
+struct trace_event_raw_irq_handler_entry {
+	struct trace_entry ent;
+	int irq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_irq_handler_exit {
+	struct trace_entry ent;
+	int irq;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_softirq {
+	struct trace_entry ent;
+	unsigned int vec;
+	char __data[0];
+};
+
+struct trace_event_raw_tasklet {
+	struct trace_entry ent;
+	void *tasklet;
+	void *func;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_irq_handler_entry {
+	u32 name;
+};
+
+struct wait_bit_key {
+	void *flags;
+	int bit_nr;
+	unsigned long timeout;
+};
+
+struct wait_bit_queue_entry {
+	struct wait_bit_key key;
+	struct wait_queue_entry wq_entry;
+};
+
+struct trace_event_data_offsets_irq_handler_exit {};
+
+struct trace_event_data_offsets_softirq {};
+
+struct trace_event_data_offsets_tasklet {};
+
+enum {
+	MAX_IORES_LEVEL = 5,
+};
+
+struct resource_entry {
+	struct list_head node;
+	struct resource *res;
+	resource_size_t offset;
+	struct resource __res;
+};
+
+struct resource_constraint {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);
+	void *alignf_data;
+};
+
+typedef void (*dr_release_t)(struct device *, void *);
+
+typedef int (*dr_match_t)(struct device *, void *, void *);
+
+struct pseudo_fs_context {
+	const struct super_operations *ops;
+	const struct xattr_handler **xattr;
+	const struct dentry_operations *dops;
+	unsigned long magic;
+};
+
+struct region_devres {
+	struct resource *parent;
+	resource_size_t start;
+	resource_size_t n;
+};
+
+enum sysctl_writes_mode {
+	SYSCTL_WRITES_LEGACY = -1,
+	SYSCTL_WRITES_WARN = 0,
+	SYSCTL_WRITES_STRICT = 1,
+};
+
+typedef __kernel_clock_t clock_t;
+
+struct do_proc_dointvec_minmax_conv_param {
+	int *min;
+	int *max;
+};
+
+struct do_proc_douintvec_minmax_conv_param {
+	unsigned int *min;
+	unsigned int *max;
+};
+
+struct __user_cap_header_struct;
+
+typedef struct __user_cap_header_struct *cap_user_header_t;
+
+struct __user_cap_header_struct {
+	__u32 version;
+	int pid;
+};
+
+struct __user_cap_data_struct;
+
+typedef struct __user_cap_data_struct __attribute__((btf_type_tag("user"))) *cap_user_data_t;
+
+struct __user_cap_data_struct {
+	__u32 effective;
+	__u32 permitted;
+	__u32 inheritable;
+};
+
+struct compat_iovec {
+	compat_uptr_t iov_base;
+	compat_size_t iov_len;
+};
+
+struct sigqueue {
+	struct list_head list;
+	int flags;
+	kernel_siginfo_t info;
+	struct ucounts *ucounts;
+};
+
+struct ptrace_syscall_info {
+	__u8 op;
+	__u8 pad[3];
+	__u32 arch;
+	__u64 instruction_pointer;
+	__u64 stack_pointer;
+	union {
+		struct {
+			__u64 nr;
+			__u64 args[6];
+		} entry;
+		struct {
+			__s64 rval;
+			__u8 is_error;
+		} exit;
+		struct {
+			__u64 nr;
+			__u64 args[6];
+			__u32 ret_data;
+		} seccomp;
+	};
+};
+
+struct ptrace_peeksiginfo_args {
+	__u64 off;
+	__u32 flags;
+	__s32 nr;
+};
+
+typedef int wait_bit_action_f(struct wait_bit_key *, int);
+
+struct core_vma_metadata;
+
+struct coredump_params {
+	const kernel_siginfo_t *siginfo;
+	struct file *file;
+	unsigned long limit;
+	unsigned long mm_flags;
+	int cpu;
+	loff_t written;
+	loff_t pos;
+	loff_t to_skip;
+	int vma_count;
+	size_t vma_data_size;
+	struct core_vma_metadata *vma_meta;
+};
+
+struct core_vma_metadata {
+	unsigned long start;
+	unsigned long end;
+	unsigned long flags;
+	unsigned long dump_size;
+	unsigned long pgoff;
+	struct file *file;
+};
+
+typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);
+
+enum sig_handler {
+	HANDLER_CURRENT = 0,
+	HANDLER_SIG_DFL = 1,
+	HANDLER_EXIT = 2,
+};
+
+enum {
+	TRACE_SIGNAL_DELIVERED = 0,
+	TRACE_SIGNAL_IGNORED = 1,
+	TRACE_SIGNAL_ALREADY_PENDING = 2,
+	TRACE_SIGNAL_OVERFLOW_FAIL = 3,
+	TRACE_SIGNAL_LOSE_INFO = 4,
+};
+
+enum siginfo_layout {
+	SIL_KILL = 0,
+	SIL_TIMER = 1,
+	SIL_POLL = 2,
+	SIL_FAULT = 3,
+	SIL_FAULT_TRAPNO = 4,
+	SIL_FAULT_MCEERR = 5,
+	SIL_FAULT_BNDERR = 6,
+	SIL_FAULT_PKUERR = 7,
+	SIL_FAULT_PERF_EVENT = 8,
+	SIL_CHLD = 9,
+	SIL_RT = 10,
+	SIL_SYS = 11,
+};
+
+struct trace_event_raw_signal_generate {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	char comm[16];
+	pid_t pid;
+	int group;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_signal_deliver {
+	struct trace_entry ent;
+	int sig;
+	int errno;
+	int code;
+	unsigned long sa_handler;
+	unsigned long sa_flags;
+	char __data[0];
+};
+
+typedef unsigned long old_sigset_t;
+
+typedef u32 compat_old_sigset_t;
+
+struct compat_sigaction {
+	compat_uptr_t sa_handler;
+	compat_ulong_t sa_flags;
+	compat_uptr_t sa_restorer;
+	compat_sigset_t sa_mask;
+};
+
+struct compat_old_sigaction {
+	compat_uptr_t sa_handler;
+	compat_old_sigset_t sa_mask;
+	compat_ulong_t sa_flags;
+	compat_uptr_t sa_restorer;
+};
+
+struct trace_event_data_offsets_signal_generate {};
+
+struct trace_event_data_offsets_signal_deliver {};
+
+enum {
+	PER_LINUX = 0,
+	PER_LINUX_32BIT = 8388608,
+	PER_LINUX_FDPIC = 524288,
+	PER_SVR4 = 68157441,
+	PER_SVR3 = 83886082,
+	PER_SCOSVR3 = 117440515,
+	PER_OSR5 = 100663299,
+	PER_WYSEV386 = 83886084,
+	PER_ISCR4 = 67108869,
+	PER_BSD = 6,
+	PER_SUNOS = 67108870,
+	PER_XENIX = 83886087,
+	PER_LINUX32 = 8,
+	PER_LINUX32_3GB = 134217736,
+	PER_IRIX32 = 67108873,
+	PER_IRIXN32 = 67108874,
+	PER_IRIX64 = 67108875,
+	PER_RISCOS = 12,
+	PER_SOLARIS = 67108877,
+	PER_UW7 = 68157454,
+	PER_OSF4 = 15,
+	PER_HPUX = 16,
+	PER_MASK = 255,
+};
+
+enum uts_proc {
+	UTS_PROC_ARCH = 0,
+	UTS_PROC_OSTYPE = 1,
+	UTS_PROC_OSRELEASE = 2,
+	UTS_PROC_VERSION = 3,
+	UTS_PROC_HOSTNAME = 4,
+	UTS_PROC_DOMAINNAME = 5,
+};
+
+struct tms {
+	__kernel_clock_t tms_utime;
+	__kernel_clock_t tms_stime;
+	__kernel_clock_t tms_cutime;
+	__kernel_clock_t tms_cstime;
+};
+
+struct compat_tms {
+	compat_clock_t tms_utime;
+	compat_clock_t tms_stime;
+	compat_clock_t tms_cutime;
+	compat_clock_t tms_cstime;
+};
+
+struct old_utsname {
+	char sysname[65];
+	char nodename[65];
+	char release[65];
+	char version[65];
+	char machine[65];
+};
+
+struct oldold_utsname {
+	char sysname[9];
+	char nodename[9];
+	char release[9];
+	char version[9];
+	char machine[9];
+};
+
+struct compat_rlimit {
+	compat_ulong_t rlim_cur;
+	compat_ulong_t rlim_max;
+};
+
+struct rlimit64 {
+	__u64 rlim_cur;
+	__u64 rlim_max;
+};
+
+struct getcpu_cache {
+	unsigned long blob[16];
+};
+
+struct sysinfo {
+	__kernel_long_t uptime;
+	__kernel_ulong_t loads[3];
+	__kernel_ulong_t totalram;
+	__kernel_ulong_t freeram;
+	__kernel_ulong_t sharedram;
+	__kernel_ulong_t bufferram;
+	__kernel_ulong_t totalswap;
+	__kernel_ulong_t freeswap;
+	__u16 procs;
+	__u16 pad;
+	__kernel_ulong_t totalhigh;
+	__kernel_ulong_t freehigh;
+	__u32 mem_unit;
+	char _f[0];
+};
+
+struct compat_sysinfo {
+	s32 uptime;
+	u32 loads[3];
+	u32 totalram;
+	u32 freeram;
+	u32 sharedram;
+	u32 bufferram;
+	u32 totalswap;
+	u32 freeswap;
+	u16 procs;
+	u16 pad;
+	u32 totalhigh;
+	u32 freehigh;
+	u32 mem_unit;
+	char _f[8];
+};
+
+struct prctl_mm_map {
+	__u64 start_code;
+	__u64 end_code;
+	__u64 start_data;
+	__u64 end_data;
+	__u64 start_brk;
+	__u64 brk;
+	__u64 start_stack;
+	__u64 arg_start;
+	__u64 arg_end;
+	__u64 env_start;
+	__u64 env_end;
+	__u64 *auxv;
+	__u32 auxv_size;
+	__u32 exe_fd;
+};
+
+struct wq_flusher;
+
+struct worker;
+
+struct workqueue_attrs;
+
+struct pool_workqueue;
+
+struct wq_device;
+
+struct workqueue_struct {
+	struct list_head pwqs;
+	struct list_head list;
+	struct mutex mutex;
+	int work_color;
+	int flush_color;
+	atomic_t nr_pwqs_to_flush;
+	struct wq_flusher *first_flusher;
+	struct list_head flusher_queue;
+	struct list_head flusher_overflow;
+	struct list_head maydays;
+	struct worker *rescuer;
+	int nr_drainers;
+	int saved_max_active;
+	struct workqueue_attrs *unbound_attrs;
+	struct pool_workqueue *dfl_pwq;
+	struct wq_device *wq_dev;
+	char name[24];
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int flags;
+	struct pool_workqueue __attribute__((btf_type_tag("percpu"))) __attribute__((btf_type_tag("rcu"))) **cpu_pwq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct wq_flusher {
+	struct list_head list;
+	int flush_color;
+	struct completion done;
+};
+
+struct worker_pool;
+
+struct worker {
+	union {
+		struct list_head entry;
+		struct hlist_node hentry;
+	};
+	struct work_struct *current_work;
+	work_func_t current_func;
+	struct pool_workqueue *current_pwq;
+	u64 current_at;
+	unsigned int current_color;
+	int sleeping;
+	work_func_t last_func;
+	struct list_head scheduled;
+	struct task_struct *task;
+	struct worker_pool *pool;
+	struct list_head node;
+	unsigned long last_active;
+	unsigned int flags;
+	int id;
+	char desc[24];
+	struct workqueue_struct *rescue_wq;
+};
+
+struct pool_workqueue {
+	struct worker_pool *pool;
+	struct workqueue_struct *wq;
+	int work_color;
+	int flush_color;
+	int refcnt;
+	int nr_in_flight[16];
+	int nr_active;
+	int max_active;
+	struct list_head inactive_works;
+	struct list_head pwqs_node;
+	struct list_head mayday_node;
+	u64 stats[8];
+	struct kthread_work release_work;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ida {
+	struct xarray xa;
+};
+
+struct worker_pool {
+	raw_spinlock_t lock;
+	int cpu;
+	int node;
+	int id;
+	unsigned int flags;
+	unsigned long watchdog_ts;
+	bool cpu_stall;
+	int nr_running;
+	struct list_head worklist;
+	int nr_workers;
+	int nr_idle;
+	struct list_head idle_list;
+	struct timer_list idle_timer;
+	struct work_struct idle_cull_work;
+	struct timer_list mayday_timer;
+	struct hlist_head busy_hash[64];
+	struct worker *manager;
+	struct list_head workers;
+	struct list_head dying_workers;
+	struct completion *detach_completion;
+	struct ida worker_ida;
+	struct workqueue_attrs *attrs;
+	struct hlist_node hash_node;
+	int refcnt;
+	struct callback_head rcu;
+};
+
+enum wq_affn_scope {
+	WQ_AFFN_DFL = 0,
+	WQ_AFFN_CPU = 1,
+	WQ_AFFN_SMT = 2,
+	WQ_AFFN_CACHE = 3,
+	WQ_AFFN_NUMA = 4,
+	WQ_AFFN_SYSTEM = 5,
+	WQ_AFFN_NR_TYPES = 6,
+};
+
+struct workqueue_attrs {
+	int nice;
+	cpumask_var_t cpumask;
+	cpumask_var_t __pod_cpumask;
+	bool affn_strict;
+	enum wq_affn_scope affn_scope;
+	bool ordered;
+};
+
+struct wq_device {
+	struct workqueue_struct *wq;
+	struct device dev;
+};
+
+typedef void (*btf_trace_workqueue_queue_work)(void *, int, struct pool_workqueue *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);
+
+typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t);
+
+struct wq_pod_type {
+	int nr_pods;
+	cpumask_var_t *pod_cpus;
+	int *pod_node;
+	int *cpu_pod;
+};
+
+enum {
+	POOL_MANAGER_ACTIVE = 1,
+	POOL_DISASSOCIATED = 4,
+	WORKER_DIE = 2,
+	WORKER_IDLE = 4,
+	WORKER_PREP = 8,
+	WORKER_CPU_INTENSIVE = 64,
+	WORKER_UNBOUND = 128,
+	WORKER_REBOUND = 256,
+	WORKER_NOT_RUNNING = 456,
+	NR_STD_WORKER_POOLS = 2,
+	UNBOUND_POOL_HASH_ORDER = 6,
+	BUSY_WORKER_HASH_ORDER = 6,
+	MAX_IDLE_WORKERS_RATIO = 4,
+	IDLE_WORKER_TIMEOUT = 75000,
+	MAYDAY_INITIAL_TIMEOUT = 2,
+	MAYDAY_INTERVAL = 25,
+	CREATE_COOLDOWN = 250,
+	RESCUER_NICE_LEVEL = -20,
+	HIGHPRI_NICE_LEVEL = -20,
+	WQ_NAME_LEN = 24,
+};
+
+enum pool_workqueue_stats {
+	PWQ_STAT_STARTED = 0,
+	PWQ_STAT_COMPLETED = 1,
+	PWQ_STAT_CPU_TIME = 2,
+	PWQ_STAT_CPU_INTENSIVE = 3,
+	PWQ_STAT_CM_WAKEUP = 4,
+	PWQ_STAT_REPATRIATED = 5,
+	PWQ_STAT_MAYDAY = 6,
+	PWQ_STAT_RESCUED = 7,
+	PWQ_NR_STATS = 8,
+};
+
+enum {
+	WQ_UNBOUND = 2,
+	WQ_FREEZABLE = 4,
+	WQ_MEM_RECLAIM = 8,
+	WQ_HIGHPRI = 16,
+	WQ_CPU_INTENSIVE = 32,
+	WQ_SYSFS = 64,
+	WQ_POWER_EFFICIENT = 128,
+	__WQ_DESTROYING = 32768,
+	__WQ_DRAINING = 65536,
+	__WQ_ORDERED = 131072,
+	__WQ_LEGACY = 262144,
+	__WQ_ORDERED_EXPLICIT = 524288,
+	WQ_MAX_ACTIVE = 512,
+	WQ_UNBOUND_MAX_ACTIVE = 512,
+	WQ_DFL_ACTIVE = 256,
+};
+
+enum xa_lock_type {
+	XA_LOCK_IRQ = 1,
+	XA_LOCK_BH = 2,
+};
+
+struct trace_event_raw_workqueue_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	u32 __data_loc_workqueue;
+	int req_cpu;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_activate_work {
+	struct trace_entry ent;
+	void *work;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_workqueue_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct wq_barrier {
+	struct work_struct work;
+	struct completion done;
+	struct task_struct *task;
+};
+
+struct cwt_wait {
+	wait_queue_entry_t wait;
+	struct work_struct *work;
+};
+
+struct __una_u32 {
+	u32 x;
+};
+
+struct work_for_cpu {
+	struct work_struct work;
+	long (*fn)(void *);
+	void *arg;
+	long ret;
+};
+
+struct apply_wqattrs_ctx {
+	struct workqueue_struct *wq;
+	struct workqueue_attrs *attrs;
+	struct list_head list;
+	struct pool_workqueue *dfl_pwq;
+	struct pool_workqueue *pwq_tbl[0];
+};
+
+struct trace_event_data_offsets_workqueue_queue_work {
+	u32 workqueue;
+};
+
+struct pr_cont_work_struct {
+	bool comma;
+	work_func_t func;
+	long ctr;
+};
+
+struct trace_event_data_offsets_workqueue_activate_work {};
+
+struct trace_event_data_offsets_workqueue_execute_start {};
+
+struct trace_event_data_offsets_workqueue_execute_end {};
+
+struct execute_work {
+	struct work_struct work;
+};
+
+typedef struct {} local_lock_t;
+
+typedef void (*task_work_func_t)(struct callback_head *);
+
+struct param_attribute {
+	struct module_attribute mattr;
+	const struct kernel_param *param;
+};
+
+struct module_param_attrs {
+	unsigned int num;
+	struct attribute_group grp;
+	struct param_attribute attrs[0];
+};
+
+enum {
+	KERNEL_PARAM_OPS_FL_NOARG = 1,
+};
+
+enum {
+	KERNEL_PARAM_FL_UNSAFE = 1,
+	KERNEL_PARAM_FL_HWPARAM = 2,
+};
+
+struct module_version_attribute {
+	struct module_attribute mattr;
+	const char *module_name;
+	const char *version;
+};
+
+struct kmalloced_param {
+	struct list_head list;
+	char val[0];
+};
+
+struct sched_param {
+	int sched_priority;
+};
+
+enum KTHREAD_BITS {
+	KTHREAD_IS_PER_CPU = 0,
+	KTHREAD_SHOULD_STOP = 1,
+	KTHREAD_SHOULD_PARK = 2,
+};
+
+enum {
+	KTW_FREEZABLE = 1,
+};
+
+enum {
+	CSS_NO_REF = 1,
+	CSS_ONLINE = 2,
+	CSS_RELEASED = 4,
+	CSS_VISIBLE = 8,
+	CSS_DYING = 16,
+};
+
+enum {
+	__PERCPU_REF_ATOMIC = 1,
+	__PERCPU_REF_DEAD = 2,
+	__PERCPU_REF_ATOMIC_DEAD = 3,
+	__PERCPU_REF_FLAG_BITS = 2,
+};
+
+struct kthread_create_info {
+	char *full_name;
+	int (*threadfn)(void *);
+	void *data;
+	int node;
+	struct task_struct *result;
+	struct completion *done;
+	struct list_head list;
+};
+
+struct kthread_delayed_work {
+	struct kthread_work work;
+	struct timer_list timer;
+};
+
+struct kthread_flush_work {
+	struct kthread_work work;
+	struct completion done;
+};
+
+struct kthread {
+	unsigned long flags;
+	unsigned int cpu;
+	int result;
+	int (*threadfn)(void *);
+	void *data;
+	struct completion parked;
+	struct completion exited;
+	struct cgroup_subsys_state *blkcg_css;
+	char *full_name;
+};
+
+struct ipc_ids {
+	int in_use;
+	unsigned short seq;
+	struct rw_semaphore rwsem;
+	struct idr ipcs_idr;
+	int max_idx;
+	int last_idx;
+	struct rhashtable key_ht;
+};
+
+struct ipc_namespace {
+	struct ipc_ids ids[3];
+	int sem_ctls[4];
+	int used_sems;
+	unsigned int msg_ctlmax;
+	unsigned int msg_ctlmnb;
+	unsigned int msg_ctlmni;
+	struct percpu_counter percpu_msg_bytes;
+	struct percpu_counter percpu_msg_hdrs;
+	size_t shm_ctlmax;
+	size_t shm_ctlall;
+	unsigned long shm_tot;
+	int shm_ctlmni;
+	int shm_rmid_forced;
+	struct notifier_block ipcns_nb;
+	struct vfsmount *mq_mnt;
+	unsigned int mq_queues_count;
+	unsigned int mq_queues_max;
+	unsigned int mq_msg_max;
+	unsigned int mq_msgsize_max;
+	unsigned int mq_msg_default;
+	unsigned int mq_msgsize_default;
+	struct ctl_table_set mq_set;
+	struct ctl_table_header *mq_sysctls;
+	struct ctl_table_set ipc_set;
+	struct ctl_table_header *ipc_sysctls;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	struct llist_node mnt_llist;
+	struct ns_common ns;
+};
+
+typedef void (*btf_trace_notifier_register)(void *, void *);
+
+typedef void (*btf_trace_notifier_unregister)(void *, void *);
+
+typedef void (*btf_trace_notifier_run)(void *, void *);
+
+struct trace_event_raw_notifier_info {
+	struct trace_entry ent;
+	void *cb;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_notifier_info {};
+
+struct srcu_notifier_head {
+	struct mutex mutex;
+	struct srcu_usage srcuu;
+	struct srcu_struct srcu;
+	struct notifier_block __attribute__((btf_type_tag("rcu"))) *head;
+};
+
+enum proc_cn_event {
+	PROC_EVENT_NONE = 0,
+	PROC_EVENT_FORK = 1,
+	PROC_EVENT_EXEC = 2,
+	PROC_EVENT_UID = 4,
+	PROC_EVENT_GID = 64,
+	PROC_EVENT_SID = 128,
+	PROC_EVENT_PTRACE = 256,
+	PROC_EVENT_COMM = 512,
+	PROC_EVENT_NONZERO_EXIT = 536870912,
+	PROC_EVENT_COREDUMP = 1073741824,
+	PROC_EVENT_EXIT = 2147483648,
+};
+
+enum sys_off_mode {
+	SYS_OFF_MODE_POWER_OFF_PREPARE = 0,
+	SYS_OFF_MODE_POWER_OFF = 1,
+	SYS_OFF_MODE_RESTART_PREPARE = 2,
+	SYS_OFF_MODE_RESTART = 3,
+};
+
+struct sys_off_data;
+
+struct sys_off_handler {
+	struct notifier_block nb;
+	int (*sys_off_cb)(struct sys_off_data *);
+	void *cb_data;
+	enum sys_off_mode mode;
+	bool blocking;
+	void *list;
+};
+
+struct sys_off_data {
+	int mode;
+	void *cb_data;
+	const char *cmd;
+};
+
+struct async_entry {
+	struct list_head domain_list;
+	struct list_head global_list;
+	struct work_struct work;
+	async_cookie_t cookie;
+	async_func_t func;
+	void *data;
+	struct async_domain *domain;
+};
+
+enum {
+	HP_THREAD_NONE = 0,
+	HP_THREAD_ACTIVE = 1,
+	HP_THREAD_PARKED = 2,
+};
+
+struct smpboot_thread_data {
+	unsigned int cpu;
+	unsigned int status;
+	struct smp_hotplug_thread *ht;
+};
+
+enum vhost_task_flags {
+	VHOST_TASK_FLAGS_STOP = 0,
+};
+
+struct vhost_task {
+	bool (*fn)(void *);
+	void *data;
+	struct completion exited;
+	unsigned long flags;
+	struct task_struct *task;
+};
+
+struct cfs_rq {
+	struct load_weight load;
+	unsigned int nr_running;
+	unsigned int h_nr_running;
+	unsigned int idle_nr_running;
+	unsigned int idle_h_nr_running;
+	s64 avg_vruntime;
+	u64 avg_load;
+	u64 exec_clock;
+	u64 min_vruntime;
+	struct rb_root_cached tasks_timeline;
+	struct sched_entity *curr;
+	struct sched_entity *next;
+	unsigned int nr_spread_over;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg;
+	struct {
+		raw_spinlock_t lock;
+		int nr;
+		unsigned long load_avg;
+		unsigned long util_avg;
+		unsigned long runnable_avg;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	} removed;
+	unsigned long tg_load_avg_contrib;
+	long propagate;
+	long prop_runnable_sum;
+	unsigned long h_load;
+	u64 last_h_load_update;
+	struct sched_entity *h_load_next;
+	bool decayed;
+	struct rq *rq;
+	int on_list;
+	struct list_head leaf_cfs_rq_list;
+	struct task_group *tg;
+	int idle;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct __call_single_data {
+	struct __call_single_node node;
+	smp_call_func_t func;
+	void *info;
+};
+
+typedef struct __call_single_data call_single_data_t;
+
+struct uclamp_bucket {
+	unsigned long value: 11;
+	unsigned long tasks: 53;
+};
+
+struct uclamp_rq {
+	unsigned int value;
+	struct uclamp_bucket bucket[20];
+};
+
+struct rt_prio_array {
+	unsigned long bitmap[2];
+	struct list_head queue[100];
+};
+
+struct rt_rq {
+	struct rt_prio_array active;
+	unsigned int rt_nr_running;
+	unsigned int rr_nr_running;
+	struct {
+		int curr;
+		int next;
+	} highest_prio;
+	unsigned int rt_nr_migratory;
+	unsigned int rt_nr_total;
+	int overloaded;
+	struct plist_head pushable_tasks;
+	int rt_queued;
+	int rt_throttled;
+	u64 rt_time;
+	u64 rt_runtime;
+	raw_spinlock_t rt_runtime_lock;
+};
+
+struct dl_rq {
+	struct rb_root_cached root;
+	unsigned int dl_nr_running;
+	struct {
+		u64 curr;
+		u64 next;
+	} earliest_dl;
+	unsigned int dl_nr_migratory;
+	int overloaded;
+	struct rb_root_cached pushable_dl_tasks_root;
+	u64 running_bw;
+	u64 this_bw;
+	u64 extra_bw;
+	u64 max_bw;
+	u64 bw_ratio;
+};
+
+struct cpu_stop_done;
+
+struct cpu_stop_work {
+	struct list_head list;
+	cpu_stop_fn_t fn;
+	unsigned long caller;
+	void *arg;
+	struct cpu_stop_done *done;
+};
+
+enum misfit_reason {
+	MISFIT_PERF = 0,
+};
+
+typedef enum misfit_reason misfit_reason_t;
+
+struct root_domain;
+
+struct balance_callback;
+
+struct cpuidle_state;
+
+struct rq {
+	raw_spinlock_t __lock;
+	unsigned int nr_running;
+	unsigned long last_blocked_load_update_tick;
+	unsigned int has_blocked_load;
+	long: 64;
+	call_single_data_t nohz_csd;
+	unsigned int nohz_tick_stopped;
+	atomic_t nohz_flags;
+	unsigned int ttwu_pending;
+	u64 nr_switches;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct uclamp_rq uclamp[2];
+	unsigned int uclamp_flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct cfs_rq cfs;
+	struct rt_rq rt;
+	struct dl_rq dl;
+	struct list_head leaf_cfs_rq_list;
+	struct list_head *tmp_alone_branch;
+	unsigned int nr_uninterruptible;
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *curr;
+	struct task_struct *idle;
+	struct task_struct *stop;
+	unsigned long next_balance;
+	struct mm_struct *prev_mm;
+	unsigned int clock_update_flags;
+	u64 clock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u64 clock_task;
+	u64 clock_task_mult;
+	u64 clock_pelt;
+	unsigned long lost_idle_time;
+	u64 clock_pelt_idle;
+	u64 clock_idle;
+	atomic_t nr_iowait;
+	u64 last_seen_need_resched_ns;
+	int ticks_without_resched;
+	int membarrier_state;
+	struct root_domain *rd;
+	struct sched_domain __attribute__((btf_type_tag("rcu"))) *sd;
+	unsigned long cpu_capacity;
+	unsigned long cpu_capacity_orig;
+	struct balance_callback *balance_callback;
+	unsigned char nohz_idle_balance;
+	unsigned char idle_balance;
+	unsigned long misfit_task_load;
+	int active_balance;
+	int push_cpu;
+	struct cpu_stop_work active_balance_work;
+	int cpu;
+	int online;
+	struct list_head cfs_tasks;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sched_avg avg_rt;
+	struct sched_avg avg_dl;
+	struct sched_avg avg_irq;
+	u64 idle_stamp;
+	u64 avg_idle;
+	unsigned long wake_stamp;
+	u64 wake_avg_idle;
+	u64 max_idle_balance_cost;
+	struct rcuwait hotplug_wait;
+	u64 prev_irq_time;
+	u64 prev_steal_time;
+	u64 prev_steal_time_rq;
+	unsigned long calc_load_update;
+	long calc_load_active;
+	long: 64;
+	call_single_data_t hrtick_csd;
+	struct hrtimer hrtick_timer;
+	ktime_t hrtick_time;
+	struct sched_info rq_sched_info;
+	unsigned long long rq_cpu_time;
+	unsigned int yld_count;
+	unsigned int sched_count;
+	unsigned int sched_goidle;
+	unsigned int ttwu_count;
+	unsigned int ttwu_local;
+	struct cpuidle_state *idle_state;
+	unsigned int nr_pinned;
+	unsigned int push_busy;
+	struct cpu_stop_work push_work;
+	cpumask_var_t scratch_mask;
+	misfit_reason_t misfit_reason;
+	u64 android_oem_data1[16];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct dl_bw {
+	raw_spinlock_t lock;
+	u64 bw;
+	u64 total_bw;
+};
+
+struct cpudl_item;
+
+struct cpudl {
+	raw_spinlock_t lock;
+	int size;
+	cpumask_var_t free_cpus;
+	struct cpudl_item *elements;
+};
+
+struct cpupri_vec {
+	atomic_t count;
+	cpumask_var_t mask;
+};
+
+struct cpupri {
+	struct cpupri_vec pri_to_cpu[101];
+	int *cpu_to_pri;
+};
+
+struct perf_domain;
+
+struct root_domain {
+	atomic_t refcount;
+	atomic_t rto_count;
+	struct callback_head rcu;
+	cpumask_var_t span;
+	cpumask_var_t online;
+	int overload;
+	int overutilized;
+	cpumask_var_t dlo_mask;
+	atomic_t dlo_count;
+	struct dl_bw dl_bw;
+	struct cpudl cpudl;
+	u64 visit_gen;
+	struct irq_work rto_push_work;
+	raw_spinlock_t rto_lock;
+	int rto_loop;
+	int rto_cpu;
+	atomic_t rto_loop_next;
+	atomic_t rto_loop_start;
+	cpumask_var_t rto_mask;
+	struct cpupri cpupri;
+	unsigned long max_cpu_capacity;
+	struct perf_domain __attribute__((btf_type_tag("rcu"))) *pd;
+	u64 android_vendor_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct cpudl_item {
+	u64 dl;
+	int cpu;
+	int idx;
+};
+
+struct em_perf_domain;
+
+struct perf_domain {
+	struct em_perf_domain *em_pd;
+	struct perf_domain *next;
+	struct callback_head rcu;
+};
+
+struct em_perf_table;
+
+struct em_perf_domain {
+	struct em_perf_table __attribute__((btf_type_tag("rcu"))) *em_table;
+	int nr_perf_states;
+	int min_ps;
+	int max_ps;
+	unsigned long flags;
+	unsigned long cpus[0];
+};
+
+struct em_perf_state {
+	unsigned long performance;
+	unsigned long frequency;
+	unsigned long power;
+	unsigned long cost;
+	unsigned long flags;
+};
+
+struct em_perf_table {
+	struct callback_head rcu;
+	struct kref kref;
+	struct em_perf_state state[0];
+};
+
+struct sched_group {
+	struct sched_group *next;
+	atomic_t ref;
+	unsigned int group_weight;
+	unsigned int cores;
+	struct sched_group_capacity *sgc;
+	int asym_prefer_cpu;
+	int flags;
+	unsigned long cpumask[0];
+};
+
+struct sched_group_capacity {
+	atomic_t ref;
+	unsigned long capacity;
+	unsigned long min_capacity;
+	unsigned long max_capacity;
+	unsigned long next_update;
+	int imbalance;
+	int id;
+	unsigned long cpumask[0];
+};
+
+struct balance_callback {
+	struct balance_callback *next;
+	void (*func)(struct rq *);
+};
+
+struct cfs_bandwidth {};
+
+struct task_group {
+	struct cgroup_subsys_state css;
+	struct sched_entity **se;
+	struct cfs_rq **cfs_rq;
+	unsigned long shares;
+	int idle;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_long_t load_avg;
+	struct callback_head rcu;
+	struct list_head list;
+	struct task_group *parent;
+	struct list_head siblings;
+	struct list_head children;
+	struct cfs_bandwidth cfs_bandwidth;
+	unsigned int uclamp_pct[2];
+	struct uclamp_se uclamp_req[2];
+	struct uclamp_se uclamp[2];
+	unsigned int latency_sensitive;
+	u64 android_vendor_data1[4];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+};
+
+struct pin_cookie {};
+
+struct rq_flags {
+	unsigned long flags;
+	struct pin_cookie cookie;
+	unsigned int clock_update_flags;
+};
+
+struct affinity_context {
+	const struct cpumask *new_mask;
+	struct cpumask *user_mask;
+	unsigned int flags;
+};
+
+struct io_ring_ctx;
+
+struct io_wq;
+
+struct io_uring_task {
+	int cached_refs;
+	const struct io_ring_ctx *last;
+	struct io_wq *io_wq;
+	struct file *registered_rings[16];
+	struct xarray xa;
+	struct wait_queue_head wait;
+	atomic_t in_cancel;
+	atomic_t inflight_tracked;
+	struct percpu_counter inflight;
+	long: 64;
+	long: 64;
+	struct {
+		struct llist_head task_list;
+		struct callback_head task_work;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+};
+
+struct io_fixed_file;
+
+struct io_file_table {
+	struct io_fixed_file *files;
+	unsigned long *bitmap;
+	unsigned int alloc_hint;
+};
+
+struct io_wq_work_node {
+	struct io_wq_work_node *next;
+};
+
+struct io_wq_work_list {
+	struct io_wq_work_node *first;
+	struct io_wq_work_node *last;
+};
+
+struct io_kiocb;
+
+struct io_submit_link {
+	struct io_kiocb *head;
+	struct io_kiocb *last;
+};
+
+struct io_submit_state {
+	struct io_wq_work_node free_list;
+	struct io_wq_work_list compl_reqs;
+	struct io_submit_link link;
+	bool plug_started;
+	bool need_plug;
+	unsigned short submit_nr;
+	unsigned int cqes_count;
+	struct blk_plug plug;
+};
+
+struct io_hash_bucket;
+
+struct io_hash_table {
+	struct io_hash_bucket *hbs;
+	unsigned int hash_bits;
+};
+
+struct io_alloc_cache {
+	struct io_wq_work_node list;
+	unsigned int nr_cached;
+	unsigned int max_cached;
+	size_t elem_size;
+};
+
+struct io_uring_cqe {
+	__u64 user_data;
+	__s32 res;
+	__u32 flags;
+	__u64 big_cqe[0];
+};
+
+struct io_restriction {
+	unsigned long register_op[1];
+	unsigned long sqe_op[1];
+	u8 sqe_flags_allowed;
+	u8 sqe_flags_required;
+	bool registered;
+};
+
+struct io_rings;
+
+struct io_rsrc_node;
+
+struct io_mapped_ubuf;
+
+struct io_ev_fd;
+
+struct io_sq_data;
+
+struct io_rsrc_data;
+
+struct io_wq_hash;
+
+struct io_ring_ctx {
+	struct {
+		unsigned int flags;
+		unsigned int drain_next: 1;
+		unsigned int restricted: 1;
+		unsigned int off_timeout_used: 1;
+		unsigned int drain_active: 1;
+		unsigned int has_evfd: 1;
+		unsigned int task_complete: 1;
+		unsigned int lockless_cq: 1;
+		unsigned int syscall_iopoll: 1;
+		unsigned int poll_activated: 1;
+		unsigned int drain_disabled: 1;
+		unsigned int compat: 1;
+		struct task_struct *submitter_task;
+		struct io_rings *rings;
+		struct percpu_ref refs;
+		enum task_work_notify_mode notify_method;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex uring_lock;
+		u32 *sq_array;
+		struct io_uring_sqe *sq_sqes;
+		unsigned int cached_sq_head;
+		unsigned int sq_entries;
+		struct io_rsrc_node *rsrc_node;
+		atomic_t cancel_seq;
+		struct io_file_table file_table;
+		unsigned int nr_user_files;
+		unsigned int nr_user_bufs;
+		struct io_mapped_ubuf **user_bufs;
+		struct io_submit_state submit_state;
+		struct xarray io_bl_xa;
+		struct io_hash_table cancel_table_locked;
+		struct io_alloc_cache apoll_cache;
+		struct io_alloc_cache netmsg_cache;
+		struct io_wq_work_list iopoll_list;
+		bool poll_multi_queue;
+	};
+	struct {
+		struct io_uring_cqe *cqe_cached;
+		struct io_uring_cqe *cqe_sentinel;
+		unsigned int cached_cq_tail;
+		unsigned int cq_entries;
+		struct io_ev_fd __attribute__((btf_type_tag("rcu"))) *io_ev_fd;
+		unsigned int cq_extra;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct llist_head work_llist;
+		unsigned long check_cq;
+		atomic_t cq_wait_nr;
+		atomic_t cq_timeouts;
+		struct wait_queue_head cq_wait;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		spinlock_t timeout_lock;
+		struct list_head timeout_list;
+		struct list_head ltimeout_list;
+		unsigned int cq_last_tm_flush;
+		long: 64;
+		long: 64;
+	};
+	struct io_uring_cqe completion_cqes[16];
+	spinlock_t completion_lock;
+	struct io_wq_work_list locked_free_list;
+	unsigned int locked_free_nr;
+	struct list_head io_buffers_comp;
+	struct list_head cq_overflow_list;
+	struct io_hash_table cancel_table;
+	const struct cred *sq_creds;
+	struct io_sq_data *sq_data;
+	struct wait_queue_head sqo_sq_wait;
+	struct list_head sqd_list;
+	unsigned int file_alloc_start;
+	unsigned int file_alloc_end;
+	struct xarray personalities;
+	u32 pers_next;
+	struct list_head io_buffers_cache;
+	struct hlist_head io_buf_list;
+	struct wait_queue_head poll_wq;
+	struct io_restriction restrictions;
+	struct io_mapped_ubuf *dummy_ubuf;
+	struct io_rsrc_data *file_data;
+	struct io_rsrc_data *buf_data;
+	struct list_head rsrc_ref_list;
+	struct io_alloc_cache rsrc_node_cache;
+	struct wait_queue_head rsrc_quiesce_wq;
+	unsigned int rsrc_quiesce;
+	struct list_head io_buffers_pages;
+	struct io_wq_hash *hash_map;
+	struct user_struct *user;
+	struct mm_struct *mm_account;
+	struct llist_head fallback_llist;
+	struct delayed_work fallback_work;
+	struct work_struct exit_work;
+	struct list_head tctx_list;
+	struct completion ref_comp;
+	u32 iowq_limits[2];
+	bool iowq_limits_set;
+	struct callback_head poll_wq_task_work;
+	struct list_head defer_list;
+	unsigned int sq_thread_idle;
+	unsigned int evfd_last_cq_tail;
+	unsigned short n_ring_pages;
+	unsigned short n_sqe_pages;
+	struct page **ring_pages;
+	struct page **sqe_pages;
+	long: 64;
+};
+
+struct io_uring {
+	u32 head;
+	u32 tail;
+};
+
+struct io_rings {
+	struct io_uring sq;
+	struct io_uring cq;
+	u32 sq_ring_mask;
+	u32 cq_ring_mask;
+	u32 sq_ring_entries;
+	u32 cq_ring_entries;
+	u32 sq_dropped;
+	atomic_t sq_flags;
+	u32 cq_flags;
+	u32 cq_overflow;
+	long: 64;
+	long: 64;
+	struct io_uring_cqe cqes[0];
+};
+
+struct io_fixed_file {
+	unsigned long file_ptr;
+};
+
+struct io_cmd_data {
+	struct file *file;
+	__u8 data[56];
+};
+
+struct io_cqe {
+	__u64 user_data;
+	__s32 res;
+	union {
+		__u32 flags;
+		int fd;
+	};
+};
+
+struct io_tw_state;
+
+typedef void (*io_req_tw_func_t)(struct io_kiocb *, struct io_tw_state *);
+
+struct io_task_work {
+	struct llist_node node;
+	io_req_tw_func_t func;
+};
+
+struct io_wq_work {
+	struct io_wq_work_node list;
+	unsigned int flags;
+	int cancel_seq;
+};
+
+struct io_buffer;
+
+struct io_buffer_list;
+
+struct async_poll;
+
+struct io_kiocb {
+	union {
+		struct file *file;
+		struct io_cmd_data cmd;
+	};
+	u8 opcode;
+	u8 iopoll_completed;
+	u16 buf_index;
+	unsigned int flags;
+	struct io_cqe cqe;
+	struct io_ring_ctx *ctx;
+	struct task_struct *task;
+	struct io_rsrc_node *rsrc_node;
+	union {
+		struct io_mapped_ubuf *imu;
+		struct io_buffer *kbuf;
+		struct io_buffer_list *buf_list;
+	};
+	union {
+		struct io_wq_work_node comp_list;
+		__poll_t apoll_events;
+	};
+	atomic_t refs;
+	atomic_t poll_refs;
+	struct io_task_work io_task_work;
+	unsigned int nr_tw;
+	struct hlist_node hash_node;
+	struct async_poll *apoll;
+	void *async_data;
+	struct io_kiocb *link;
+	const struct cred *creds;
+	struct io_wq_work work;
+	struct {
+		u64 extra1;
+		u64 extra2;
+	} big_cqe;
+};
+
+struct io_tw_state {
+	bool locked;
+};
+
+struct io_hash_bucket {
+	spinlock_t lock;
+	struct hlist_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct io_ev_fd {
+	struct eventfd_ctx *cq_ev_fd;
+	unsigned int eventfd_async: 1;
+	struct callback_head rcu;
+	atomic_t refs;
+	atomic_t ops;
+};
+
+struct io_wq_hash {
+	refcount_t refs;
+	unsigned long map;
+	struct wait_queue_head wait;
+};
+
+typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);
+
+typedef void (*btf_trace_sched_kthread_work_queue_work)(void *, struct kthread_worker *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_start)(void *, struct kthread_work *);
+
+typedef void (*btf_trace_sched_kthread_work_execute_end)(void *, struct kthread_work *, kthread_work_func_t);
+
+typedef void (*btf_trace_sched_waking)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *, unsigned int);
+
+typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_wait)(void *, struct pid *);
+
+typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);
+
+typedef void (*btf_trace_sched_stat_wait)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_sleep)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_iowait)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_stat_blocked)(void *, struct task_struct *, u64);
+
+typedef void (*btf_trace_sched_blocked_reason)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);
+
+typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);
+
+typedef void (*btf_trace_sched_process_hang)(void *, struct task_struct *);
+
+typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);
+
+typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);
+
+typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);
+
+typedef void (*btf_trace_pelt_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_pelt_rt_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_dl_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_thermal_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_irq_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_pelt_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_cpu_capacity_tp)(void *, struct rq *);
+
+typedef void (*btf_trace_sched_overutilized_tp)(void *, struct root_domain *, bool);
+
+typedef void (*btf_trace_sched_util_est_cfs_tp)(void *, struct cfs_rq *);
+
+typedef void (*btf_trace_sched_util_est_se_tp)(void *, struct sched_entity *);
+
+typedef void (*btf_trace_sched_update_nr_running_tp)(void *, struct rq *, int);
+
+typedef void (*btf_trace_ipi_raise)(void *, const struct cpumask *, const char *);
+
+typedef void (*btf_trace_ipi_send_cpu)(void *, const unsigned int, unsigned long, void *);
+
+typedef void (*btf_trace_ipi_send_cpumask)(void *, const struct cpumask *, unsigned long, void *);
+
+typedef void (*btf_trace_ipi_entry)(void *, const char *);
+
+typedef void (*btf_trace_ipi_exit)(void *, const char *);
+
+struct kernel_stat {
+	unsigned long irqs_sum;
+	unsigned int softirqs[10];
+};
+
+struct kernel_cpustat {
+	u64 cpustat[10];
+};
+
+enum {
+	__SCHED_FEAT_PLACE_LAG = 0,
+	__SCHED_FEAT_PLACE_DEADLINE_INITIAL = 1,
+	__SCHED_FEAT_RUN_TO_PARITY = 2,
+	__SCHED_FEAT_NEXT_BUDDY = 3,
+	__SCHED_FEAT_CACHE_HOT_BUDDY = 4,
+	__SCHED_FEAT_WAKEUP_PREEMPTION = 5,
+	__SCHED_FEAT_HRTICK = 6,
+	__SCHED_FEAT_HRTICK_DL = 7,
+	__SCHED_FEAT_DOUBLE_TICK = 8,
+	__SCHED_FEAT_NONTASK_CAPACITY = 9,
+	__SCHED_FEAT_TTWU_QUEUE = 10,
+	__SCHED_FEAT_SIS_PROP = 11,
+	__SCHED_FEAT_SIS_UTIL = 12,
+	__SCHED_FEAT_WARN_DOUBLE_CLOCK = 13,
+	__SCHED_FEAT_RT_PUSH_IPI = 14,
+	__SCHED_FEAT_RT_RUNTIME_SHARE = 15,
+	__SCHED_FEAT_LB_MIN = 16,
+	__SCHED_FEAT_ATTACH_AGE_LOAD = 17,
+	__SCHED_FEAT_WA_IDLE = 18,
+	__SCHED_FEAT_WA_WEIGHT = 19,
+	__SCHED_FEAT_WA_BIAS = 20,
+	__SCHED_FEAT_UTIL_EST = 21,
+	__SCHED_FEAT_LATENCY_WARN = 22,
+	__SCHED_FEAT_HZ_BW = 23,
+	__SCHED_FEAT_NR = 24,
+};
+
+enum uclamp_id {
+	UCLAMP_MIN = 0,
+	UCLAMP_MAX = 1,
+	UCLAMP_CNT = 2,
+};
+
+enum {
+	cpuset = 0,
+	possible = 1,
+	fail = 2,
+};
+
+enum cgroup_subsys_id {
+	cpuset_cgrp_id = 0,
+	cpu_cgrp_id = 1,
+	cpuacct_cgrp_id = 2,
+	io_cgrp_id = 3,
+	memory_cgrp_id = 4,
+	freezer_cgrp_id = 5,
+	net_prio_cgrp_id = 6,
+	CGROUP_SUBSYS_COUNT = 7,
+};
+
+enum cpu_util_type {
+	FREQUENCY_UTIL = 0,
+	ENERGY_UTIL = 1,
+};
+
+enum psi_task_count {
+	NR_IOWAIT = 0,
+	NR_MEMSTALL = 1,
+	NR_RUNNING = 2,
+	NR_MEMSTALL_RUNNING = 3,
+	NR_PSI_TASK_COUNTS = 4,
+};
+
+enum {
+	CSD_FLAG_LOCK = 1,
+	IRQ_WORK_PENDING = 1,
+	IRQ_WORK_BUSY = 2,
+	IRQ_WORK_LAZY = 4,
+	IRQ_WORK_HARD_IRQ = 8,
+	IRQ_WORK_CLAIMED = 3,
+	CSD_TYPE_ASYNC = 0,
+	CSD_TYPE_SYNC = 16,
+	CSD_TYPE_IRQ_WORK = 32,
+	CSD_TYPE_TTWU = 48,
+	CSD_FLAG_TYPE_MASK = 240,
+};
+
+enum {
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,
+	MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,
+	MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,
+};
+
+union cpumask_rcuhead {
+	cpumask_t cpumask;
+	struct callback_head rcu;
+};
+
+struct trace_event_raw_sched_kthread_stop {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_stop_ret {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_queue_work {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	void *worker;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_start {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_kthread_work_execute_end {
+	struct trace_entry ent;
+	void *work;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wakeup_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int target_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_switch {
+	struct trace_entry ent;
+	char prev_comm[16];
+	pid_t prev_pid;
+	int prev_prio;
+	long prev_state;
+	char next_comm[16];
+	pid_t next_pid;
+	int next_prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_migrate_task {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	int orig_cpu;
+	int dest_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_wait {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_fork {
+	struct trace_entry ent;
+	char parent_comm[16];
+	pid_t parent_pid;
+	char child_comm[16];
+	pid_t child_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_exec {
+	struct trace_entry ent;
+	u32 __data_loc_filename;
+	pid_t pid;
+	pid_t old_pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_stat_template {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	u64 delay;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_blocked_reason {
+	struct trace_entry ent;
+	pid_t pid;
+	void *caller;
+	bool io_wait;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_stat_runtime {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	u64 runtime;
+	u64 vruntime;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_pi_setprio {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	int oldprio;
+	int newprio;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_process_hang {
+	struct trace_entry ent;
+	char comm[16];
+	pid_t pid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_move_numa {
+	struct trace_entry ent;
+	pid_t pid;
+	pid_t tgid;
+	pid_t ngid;
+	int src_cpu;
+	int src_nid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_numa_pair_template {
+	struct trace_entry ent;
+	pid_t src_pid;
+	pid_t src_tgid;
+	pid_t src_ngid;
+	int src_cpu;
+	int src_nid;
+	pid_t dst_pid;
+	pid_t dst_tgid;
+	pid_t dst_ngid;
+	int dst_cpu;
+	int dst_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_sched_wake_idle_without_ipi {
+	struct trace_entry ent;
+	int cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_ipi_raise {
+	struct trace_entry ent;
+	u32 __data_loc_target_cpus;
+	const char *reason;
+	char __data[0];
+};
+
+struct trace_event_raw_ipi_send_cpu {
+	struct trace_entry ent;
+	unsigned int cpu;
+	void *callsite;
+	void *callback;
+	char __data[0];
+};
+
+struct trace_event_raw_ipi_send_cpumask {
+	struct trace_entry ent;
+	u32 __data_loc_cpumask;
+	void *callsite;
+	void *callback;
+	char __data[0];
+};
+
+struct trace_event_raw_ipi_handler {
+	struct trace_entry ent;
+	const char *reason;
+	char __data[0];
+};
+
+struct irqtime {
+	u64 total;
+	u64 tick_delta;
+	u64 irq_start_time;
+	struct u64_stats_sync sync;
+};
+
+struct sched_attr {
+	__u32 size;
+	__u32 sched_policy;
+	__u64 sched_flags;
+	__s32 sched_nice;
+	__u32 sched_priority;
+	__u64 sched_runtime;
+	__u64 sched_deadline;
+	__u64 sched_period;
+	__u32 sched_util_min;
+	__u32 sched_util_max;
+};
+
+struct trace_event_data_offsets_sched_process_exec {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_ipi_raise {
+	u32 target_cpus;
+};
+
+struct trace_event_data_offsets_ipi_send_cpumask {
+	u32 cpumask;
+};
+
+struct wake_q_head {
+	struct wake_q_node *first;
+	struct wake_q_node **lastp;
+	int count;
+};
+
+typedef struct {
+	void *lock;
+} class_rcu_t;
+
+typedef struct {
+	raw_spinlock_t *lock;
+	raw_spinlock_t *lock2;
+} class_double_raw_spinlock_t;
+
+typedef struct {
+	struct rq *lock;
+	struct rq *lock2;
+} class_double_rq_lock_t;
+
+typedef struct {
+	struct rq *lock;
+	struct rq_flags rf;
+} class_rq_lock_irqsave_t;
+
+typedef struct {
+	void *lock;
+} class_preempt_t;
+
+typedef struct {
+	raw_spinlock_t *lock;
+	unsigned long flags;
+} class_raw_spinlock_irqsave_t;
+
+struct sched_domain_attr {
+	int relax_domain_level;
+};
+
+struct rt_bandwidth {
+	raw_spinlock_t rt_runtime_lock;
+	ktime_t rt_period;
+	u64 rt_runtime;
+	struct hrtimer rt_period_timer;
+	unsigned int rt_period_active;
+};
+
+struct set_affinity_pending;
+
+struct migration_arg {
+	struct task_struct *task;
+	int dest_cpu;
+	struct set_affinity_pending *pending;
+};
+
+struct set_affinity_pending {
+	refcount_t refs;
+	unsigned int stop_pending;
+	struct completion done;
+	struct cpu_stop_work stop_work;
+	struct migration_arg arg;
+};
+
+struct css_task_iter {
+	struct cgroup_subsys *ss;
+	unsigned int flags;
+	struct list_head *cset_pos;
+	struct list_head *cset_head;
+	struct list_head *tcset_pos;
+	struct list_head *tcset_head;
+	struct list_head *task_pos;
+	struct list_head *cur_tasks_head;
+	struct css_set *cur_cset;
+	struct css_set *cur_dcset;
+	struct task_struct *cur_task;
+	struct list_head iters_node;
+	u64 android_kabi_reserved1;
+};
+
+struct uclamp_request {
+	s64 percent;
+	u64 util;
+	int ret;
+};
+
+struct trace_event_data_offsets_sched_kthread_stop {};
+
+struct trace_event_data_offsets_sched_kthread_stop_ret {};
+
+struct trace_event_data_offsets_sched_kthread_work_queue_work {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_start {};
+
+struct trace_event_data_offsets_sched_kthread_work_execute_end {};
+
+struct trace_event_data_offsets_sched_wakeup_template {};
+
+struct trace_event_data_offsets_sched_switch {};
+
+struct trace_event_data_offsets_sched_migrate_task {};
+
+struct trace_event_data_offsets_sched_process_template {};
+
+struct trace_event_data_offsets_sched_process_wait {};
+
+struct trace_event_data_offsets_sched_process_fork {};
+
+struct trace_event_data_offsets_sched_stat_template {};
+
+struct trace_event_data_offsets_sched_blocked_reason {};
+
+struct trace_event_data_offsets_sched_stat_runtime {};
+
+struct trace_event_data_offsets_sched_pi_setprio {};
+
+struct trace_event_data_offsets_sched_process_hang {};
+
+struct trace_event_data_offsets_sched_move_numa {};
+
+struct trace_event_data_offsets_sched_numa_pair_template {};
+
+struct trace_event_data_offsets_sched_wake_idle_without_ipi {};
+
+struct trace_event_data_offsets_ipi_send_cpu {};
+
+struct trace_event_data_offsets_ipi_handler {};
+
+typedef int (*tg_visitor)(struct task_group *, void *);
+
+struct migration_swap_arg {
+	struct task_struct *src_task;
+	struct task_struct *dst_task;
+	int src_cpu;
+	int dst_cpu;
+};
+
+typedef int (*task_call_f)(struct task_struct *, void *);
+
+typedef struct mutex *class_mutex_t;
+
+struct cpuidle_device;
+
+struct cpuidle_driver;
+
+struct cpuidle_state {
+	char name[16];
+	char desc[32];
+	s64 exit_latency_ns;
+	s64 target_residency_ns;
+	unsigned int flags;
+	unsigned int exit_latency;
+	int power_usage;
+	unsigned int target_residency;
+	int (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int);
+	int (*enter_dead)(struct cpuidle_device *, int);
+	int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);
+};
+
+struct cpuidle_state_usage {
+	unsigned long long disable;
+	unsigned long long usage;
+	u64 time_ns;
+	unsigned long long above;
+	unsigned long long below;
+	unsigned long long rejected;
+	unsigned long long s2idle_usage;
+	unsigned long long s2idle_time;
+};
+
+struct cpuidle_driver_kobj;
+
+struct cpuidle_state_kobj;
+
+struct cpuidle_device_kobj;
+
+struct cpuidle_device {
+	unsigned int registered: 1;
+	unsigned int enabled: 1;
+	unsigned int poll_time_limit: 1;
+	unsigned int cpu;
+	ktime_t next_hrtimer;
+	int last_state_idx;
+	u64 last_residency_ns;
+	u64 poll_limit_ns;
+	u64 forced_idle_latency_limit_ns;
+	struct cpuidle_state_usage states_usage[10];
+	struct cpuidle_state_kobj *kobjs[10];
+	struct cpuidle_driver_kobj *kobj_driver;
+	struct cpuidle_device_kobj *kobj_dev;
+	struct list_head device_list;
+	u64 android_kabi_reserved1;
+};
+
+struct cpuidle_driver {
+	const char *name;
+	struct module *owner;
+	unsigned int bctimer: 1;
+	struct cpuidle_state states[10];
+	int state_count;
+	int safe_state_index;
+	struct cpumask *cpumask;
+	const char *governor;
+	u64 android_kabi_reserved1;
+};
+
+enum sched_tunable_scaling {
+	SCHED_TUNABLESCALING_NONE = 0,
+	SCHED_TUNABLESCALING_LOG = 1,
+	SCHED_TUNABLESCALING_LINEAR = 2,
+	SCHED_TUNABLESCALING_END = 3,
+};
+
+enum cpu_idle_type {
+	CPU_IDLE = 0,
+	CPU_NOT_IDLE = 1,
+	CPU_NEWLY_IDLE = 2,
+	CPU_MAX_IDLE_TYPES = 3,
+};
+
+enum fbq_type {
+	regular = 0,
+	remote = 1,
+	all = 2,
+};
+
+enum migration_type {
+	migrate_load = 0,
+	migrate_util = 1,
+	migrate_task = 2,
+	migrate_misfit = 3,
+};
+
+enum group_type {
+	group_has_spare = 0,
+	group_fully_busy = 1,
+	group_misfit_task = 2,
+	group_smt_balance = 3,
+	group_asym_packing = 4,
+	group_imbalanced = 5,
+	group_overloaded = 6,
+};
+
+struct update_util_data {
+	void (*func)(struct update_util_data *, u64, unsigned int);
+};
+
+struct sched_entity_stats {
+	struct sched_entity se;
+	struct sched_statistics stats;
+};
+
+struct lb_env {
+	struct sched_domain *sd;
+	struct rq *src_rq;
+	int src_cpu;
+	int dst_cpu;
+	struct rq *dst_rq;
+	struct cpumask *dst_grpmask;
+	int new_dst_cpu;
+	enum cpu_idle_type idle;
+	long imbalance;
+	struct cpumask *cpus;
+	unsigned int flags;
+	unsigned int loop;
+	unsigned int loop_break;
+	unsigned int loop_max;
+	enum fbq_type fbq_type;
+	enum migration_type migration_type;
+	struct list_head tasks;
+	struct rq_flags *src_rq_rf;
+};
+
+struct sg_lb_stats {
+	unsigned long avg_load;
+	unsigned long group_load;
+	unsigned long group_capacity;
+	unsigned long group_util;
+	unsigned long group_runnable;
+	unsigned int sum_nr_running;
+	unsigned int sum_h_nr_running;
+	unsigned int idle_cpus;
+	unsigned int group_weight;
+	enum group_type group_type;
+	unsigned int group_asym_packing;
+	unsigned int group_smt_balance;
+	unsigned long group_misfit_task_load;
+	misfit_reason_t group_misfit_reason;
+};
+
+struct sd_lb_stats {
+	struct sched_group *busiest;
+	struct sched_group *local;
+	unsigned long total_load;
+	unsigned long total_capacity;
+	unsigned long avg_load;
+	unsigned int prefer_sibling;
+	struct sg_lb_stats busiest_stat;
+	struct sg_lb_stats local_stat;
+};
+
+enum cpu_usage_stat {
+	CPUTIME_USER = 0,
+	CPUTIME_NICE = 1,
+	CPUTIME_SYSTEM = 2,
+	CPUTIME_SOFTIRQ = 3,
+	CPUTIME_IRQ = 4,
+	CPUTIME_IDLE = 5,
+	CPUTIME_IOWAIT = 6,
+	CPUTIME_STEAL = 7,
+	CPUTIME_GUEST = 8,
+	CPUTIME_GUEST_NICE = 9,
+	NR_STATS = 10,
+};
+
+enum dl_bw_request {
+	dl_bw_req_check_overflow = 0,
+	dl_bw_req_alloc = 1,
+	dl_bw_req_free = 2,
+};
+
+enum s2idle_states {
+	S2IDLE_STATE_NONE = 0,
+	S2IDLE_STATE_ENTER = 1,
+	S2IDLE_STATE_WAKE = 2,
+};
+
+struct idle_timer {
+	struct hrtimer timer;
+	int done;
+};
+
+typedef struct rt_rq *rt_rq_iter_t;
+
+struct sd_flag_debug {
+	unsigned int meta_flags;
+	char *name;
+};
+
+struct housekeeping {
+	cpumask_var_t cpumasks[9];
+	unsigned long flags;
+};
+
+struct sched_clock_data {
+	u64 tick_raw;
+	u64 tick_gtod;
+	u64 clock;
+};
+
+struct cpuacct {
+	struct cgroup_subsys_state css;
+	u64 __attribute__((btf_type_tag("percpu"))) *cpuusage;
+	struct kernel_cpustat __attribute__((btf_type_tag("percpu"))) *cpustat;
+};
+
+struct gov_attr_set {
+	struct kobject kobj;
+	struct list_head policy_list;
+	struct mutex update_lock;
+	int usage_count;
+};
+
+struct sugov_tunables {
+	struct gov_attr_set attr_set;
+	unsigned int rate_limit_us;
+};
+
+struct governor_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct gov_attr_set *, char *);
+	ssize_t (*store)(struct gov_attr_set *, const char *, size_t);
+};
+
+struct sugov_policy;
+
+struct sugov_cpu {
+	struct update_util_data update_util;
+	struct sugov_policy *sg_policy;
+	unsigned int cpu;
+	bool iowait_boost_pending;
+	unsigned int iowait_boost;
+	u64 last_update;
+	unsigned long util;
+	unsigned long bw_dl;
+	unsigned long saved_idle_calls;
+};
+
+struct sugov_policy {
+	struct cpufreq_policy *policy;
+	struct sugov_tunables *tunables;
+	struct list_head tunables_hook;
+	raw_spinlock_t update_lock;
+	u64 last_freq_update_time;
+	s64 freq_update_delay_ns;
+	unsigned int next_freq;
+	unsigned int cached_raw_freq;
+	struct irq_work irq_work;
+	struct kthread_work work;
+	struct mutex work_lock;
+	struct kthread_worker worker;
+	struct task_struct *thread;
+	bool work_in_progress;
+	bool limits_changed;
+	bool need_freq_update;
+};
+
+enum psi_states {
+	PSI_IO_SOME = 0,
+	PSI_IO_FULL = 1,
+	PSI_MEM_SOME = 2,
+	PSI_MEM_FULL = 3,
+	PSI_CPU_SOME = 4,
+	PSI_CPU_FULL = 5,
+	PSI_IRQ_FULL = 6,
+	PSI_NONIDLE = 7,
+	NR_PSI_STATES = 8,
+};
+
+enum psi_res {
+	PSI_IO = 0,
+	PSI_MEM = 1,
+	PSI_CPU = 2,
+	PSI_IRQ = 3,
+	NR_PSI_RESOURCES = 4,
+};
+
+enum psi_aggregators {
+	PSI_AVGS = 0,
+	PSI_POLL = 1,
+	NR_PSI_AGGREGATORS = 2,
+};
+
+enum hk_flags {
+	HK_FLAG_TIMER = 1,
+	HK_FLAG_RCU = 2,
+	HK_FLAG_MISC = 4,
+	HK_FLAG_SCHED = 8,
+	HK_FLAG_TICK = 16,
+	HK_FLAG_DOMAIN = 32,
+	HK_FLAG_WQ = 64,
+	HK_FLAG_MANAGED_IRQ = 128,
+	HK_FLAG_KTHREAD = 256,
+};
+
+enum tick_dep_bits {
+	TICK_DEP_BIT_POSIX_TIMER = 0,
+	TICK_DEP_BIT_PERF_EVENTS = 1,
+	TICK_DEP_BIT_SCHED = 2,
+	TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
+	TICK_DEP_BIT_RCU = 4,
+	TICK_DEP_BIT_RCU_EXP = 5,
+};
+
+enum cpuacct_stat_index {
+	CPUACCT_STAT_USER = 0,
+	CPUACCT_STAT_SYSTEM = 1,
+	CPUACCT_STAT_NSTATS = 2,
+};
+
+enum {
+	__SD_BALANCE_NEWIDLE = 0,
+	__SD_BALANCE_EXEC = 1,
+	__SD_BALANCE_FORK = 2,
+	__SD_BALANCE_WAKE = 3,
+	__SD_WAKE_AFFINE = 4,
+	__SD_ASYM_CPUCAPACITY = 5,
+	__SD_ASYM_CPUCAPACITY_FULL = 6,
+	__SD_SHARE_CPUCAPACITY = 7,
+	__SD_SHARE_PKG_RESOURCES = 8,
+	__SD_SERIALIZE = 9,
+	__SD_ASYM_PACKING = 10,
+	__SD_PREFER_SIBLING = 11,
+	__SD_OVERLAP = 12,
+	__SD_NUMA = 13,
+	__SD_FLAG_CNT = 14,
+};
+
+enum s_alloc {
+	sa_rootdomain = 0,
+	sa_sd = 1,
+	sa_sd_storage = 2,
+	sa_none = 3,
+};
+
+enum membarrier_cmd {
+	MEMBARRIER_CMD_QUERY = 0,
+	MEMBARRIER_CMD_GLOBAL = 1,
+	MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,
+	MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,
+	MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128,
+	MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256,
+	MEMBARRIER_CMD_GET_REGISTRATIONS = 512,
+	MEMBARRIER_CMD_SHARED = 1,
+};
+
+enum membarrier_cmd_flag {
+	MEMBARRIER_CMD_FLAG_CPU = 1,
+};
+
+enum {
+	MEMBARRIER_FLAG_SYNC_CORE = 1,
+	MEMBARRIER_FLAG_RSEQ = 2,
+};
+
+struct psi_window {
+	u64 size;
+	u64 start_time;
+	u64 start_value;
+	u64 prev_growth;
+};
+
+struct psi_trigger {
+	enum psi_states state;
+	u64 threshold;
+	struct list_head node;
+	struct psi_group *group;
+	wait_queue_head_t event_wait;
+	struct kernfs_open_file *of;
+	int event;
+	struct psi_window win;
+	u64 last_event_time;
+	bool pending_event;
+	enum psi_aggregators aggregator;
+};
+
+struct asym_cap_data {
+	struct list_head link;
+	unsigned long capacity;
+	unsigned long cpus[0];
+};
+
+struct s_data {
+	struct sched_domain * __attribute__((btf_type_tag("percpu"))) *sd;
+	struct root_domain *rd;
+};
+
+typedef __kernel_ulong_t ino_t;
+
+typedef void (*btf_trace_contention_begin)(void *, void *, unsigned int);
+
+typedef void (*btf_trace_contention_end)(void *, void *, int);
+
+struct trace_event_raw_contention_begin {
+	struct trace_entry ent;
+	void *lock_addr;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_contention_end {
+	struct trace_entry ent;
+	void *lock_addr;
+	int ret;
+	char __data[0];
+};
+
+struct ww_acquire_ctx;
+
+struct mutex_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	struct ww_acquire_ctx *ww_ctx;
+};
+
+struct ww_acquire_ctx {
+	struct task_struct *task;
+	unsigned long stamp;
+	unsigned int acquired;
+	unsigned short wounded;
+	unsigned short is_wait_die;
+};
+
+struct ww_mutex {
+	struct mutex base;
+	struct ww_acquire_ctx *ctx;
+};
+
+struct trace_event_data_offsets_contention_begin {};
+
+struct trace_event_data_offsets_contention_end {};
+
+struct semaphore_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	bool up;
+};
+
+enum rwsem_waiter_type {
+	RWSEM_WAITING_FOR_WRITE = 0,
+	RWSEM_WAITING_FOR_READ = 1,
+};
+
+enum rwsem_wake_type {
+	RWSEM_WAKE_ANY = 0,
+	RWSEM_WAKE_READERS = 1,
+	RWSEM_WAKE_READ_OWNED = 2,
+};
+
+enum owner_state {
+	OWNER_NULL = 1,
+	OWNER_WRITER = 2,
+	OWNER_READER = 4,
+	OWNER_NONSPINNABLE = 8,
+};
+
+struct rwsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+	enum rwsem_waiter_type type;
+	unsigned long timeout;
+	bool handoff_set;
+};
+
+struct optimistic_spin_node {
+	struct optimistic_spin_node *next;
+	struct optimistic_spin_node *prev;
+	int locked;
+	int cpu;
+};
+
+struct mcs_spinlock {
+	struct mcs_spinlock *next;
+	int locked;
+	int count;
+};
+
+struct qnode {
+	struct mcs_spinlock mcs;
+};
+
+enum rtmutex_chainwalk {
+	RT_MUTEX_MIN_CHAINWALK = 0,
+	RT_MUTEX_FULL_CHAINWALK = 1,
+};
+
+struct rt_waiter_node {
+	struct rb_node entry;
+	int prio;
+	u64 deadline;
+};
+
+struct rt_mutex_base;
+
+struct rt_mutex_waiter {
+	struct rt_waiter_node tree;
+	struct rt_waiter_node pi_tree;
+	struct task_struct *task;
+	struct rt_mutex_base *lock;
+	unsigned int wake_state;
+	struct ww_acquire_ctx *ww_ctx;
+};
+
+struct rt_mutex_base {
+	raw_spinlock_t wait_lock;
+	struct rb_root_cached waiters;
+	struct task_struct *owner;
+};
+
+struct rt_mutex {
+	struct rt_mutex_base rtmutex;
+};
+
+struct rt_wake_q_head {
+	struct wake_q_head head;
+	struct task_struct *rtlock_task;
+};
+
+struct hrtimer_sleeper {
+	struct hrtimer timer;
+	struct task_struct *task;
+};
+
+enum pm_qos_req_action {
+	PM_QOS_ADD_REQ = 0,
+	PM_QOS_UPDATE_REQ = 1,
+	PM_QOS_REMOVE_REQ = 2,
+};
+
+enum suspend_stat_step {
+	SUSPEND_FREEZE = 1,
+	SUSPEND_PREPARE = 2,
+	SUSPEND_SUSPEND = 3,
+	SUSPEND_SUSPEND_LATE = 4,
+	SUSPEND_SUSPEND_NOIRQ = 5,
+	SUSPEND_RESUME_NOIRQ = 6,
+	SUSPEND_RESUME_EARLY = 7,
+	SUSPEND_RESUME = 8,
+};
+
+enum {
+	TEST_NONE = 0,
+	TEST_CORE = 1,
+	TEST_CPUS = 2,
+	TEST_PLATFORM = 3,
+	TEST_DEVICES = 4,
+	TEST_FREEZER = 5,
+	__TEST_AFTER_LAST = 6,
+};
+
+typedef int suspend_state_t;
+
+struct platform_suspend_ops {
+	int (*valid)(suspend_state_t);
+	int (*begin)(suspend_state_t);
+	int (*prepare)();
+	int (*prepare_late)();
+	int (*enter)(suspend_state_t);
+	void (*wake)();
+	void (*finish)();
+	bool (*suspend_again)();
+	void (*end)();
+	void (*recover)();
+	u64 android_kabi_reserved1;
+};
+
+struct platform_s2idle_ops {
+	int (*begin)();
+	int (*prepare)();
+	int (*prepare_late)();
+	void (*check)();
+	bool (*wake)();
+	void (*restore_early)();
+	void (*restore)();
+	void (*end)();
+	u64 android_kabi_reserved1;
+};
+
+struct wakelock {
+	char *name;
+	struct rb_node node;
+	struct wakeup_source *ws;
+};
+
+struct sysrq_key_op {
+	void (* const handler)(u8);
+	const char * const help_msg;
+	const char * const action_msg;
+	const int enable_mask;
+};
+
+enum wakeup_reason_flag {
+	RESUME_NONE = 0,
+	RESUME_IRQ = 1,
+	RESUME_ABORT = 2,
+	RESUME_ABNORMAL = 3,
+};
+
+struct wakeup_irq_node {
+	struct list_head siblings;
+	int irq;
+	const char *irq_name;
+};
+
+typedef void (*btf_trace_console)(void *, const char *, size_t);
+
+struct prb_desc;
+
+struct printk_info;
+
+struct prb_desc_ring {
+	unsigned int count_bits;
+	struct prb_desc *descs;
+	struct printk_info *infos;
+	atomic_long_t head_id;
+	atomic_long_t tail_id;
+	atomic_long_t last_finalized_id;
+};
+
+struct prb_data_ring {
+	unsigned int size_bits;
+	char *data;
+	atomic_long_t head_lpos;
+	atomic_long_t tail_lpos;
+};
+
+struct printk_ringbuffer {
+	struct prb_desc_ring desc_ring;
+	struct prb_data_ring text_data_ring;
+	atomic_long_t fail;
+};
+
+struct prb_data_blk_lpos {
+	unsigned long begin;
+	unsigned long next;
+};
+
+struct prb_desc {
+	atomic_long_t state_var;
+	struct prb_data_blk_lpos text_blk_lpos;
+};
+
+struct dev_printk_info {
+	char subsystem[16];
+	char device[48];
+};
+
+struct printk_info {
+	u64 seq;
+	u64 ts_nsec;
+	u16 text_len;
+	u8 facility;
+	u8 flags: 5;
+	u8 level: 3;
+	u32 caller_id;
+	struct dev_printk_info dev_info;
+};
+
+struct console_cmdline {
+	char name[16];
+	int index;
+	bool user_specified;
+	char *options;
+};
+
+struct printk_buffers {
+	char outbuf[2048];
+	char scratchbuf[1024];
+};
+
+struct latched_seq {
+	seqcount_latch_t latch;
+	u64 val[2];
+};
+
+enum devkmsg_log_masks {
+	DEVKMSG_LOG_MASK_ON = 1,
+	DEVKMSG_LOG_MASK_OFF = 2,
+	DEVKMSG_LOG_MASK_LOCK = 4,
+};
+
+enum printk_info_flags {
+	LOG_NEWLINE = 2,
+	LOG_CONT = 8,
+};
+
+enum con_msg_format_flags {
+	MSG_FORMAT_DEFAULT = 0,
+	MSG_FORMAT_SYSLOG = 1,
+};
+
+struct kmsg_dumper {
+	struct list_head list;
+	void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);
+	enum kmsg_dump_reason max_reason;
+	bool registered;
+};
+
+struct trace_event_raw_console {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_console {
+	u32 msg;
+};
+
+struct printk_record {
+	struct printk_info *info;
+	char *text_buf;
+	unsigned int text_buf_size;
+};
+
+struct prb_reserved_entry {
+	struct printk_ringbuffer *rb;
+	unsigned long irqflags;
+	unsigned long id;
+	unsigned int text_space;
+};
+
+struct printk_message {
+	struct printk_buffers *pbufs;
+	unsigned int outbuf_len;
+	u64 seq;
+	unsigned long dropped;
+};
+
+struct devkmsg_user {
+	atomic64_t seq;
+	struct ratelimit_state rs;
+	struct mutex lock;
+	struct printk_buffers pbufs;
+};
+
+struct kmsg_dump_iter {
+	u64 cur_seq;
+	u64 next_seq;
+};
+
+enum desc_state {
+	desc_miss = -1,
+	desc_reserved = 0,
+	desc_committed = 1,
+	desc_finalized = 2,
+	desc_reusable = 3,
+};
+
+struct prb_data_block {
+	unsigned long id;
+	char data[0];
+};
+
+enum {
+	IRQS_AUTODETECT = 1,
+	IRQS_SPURIOUS_DISABLED = 2,
+	IRQS_POLL_INPROGRESS = 8,
+	IRQS_ONESHOT = 32,
+	IRQS_REPLAY = 64,
+	IRQS_WAITING = 128,
+	IRQS_PENDING = 512,
+	IRQS_SUSPENDED = 2048,
+	IRQS_TIMINGS = 4096,
+	IRQS_NMI = 8192,
+	IRQS_SYSFS = 16384,
+};
+
+enum {
+	_IRQ_DEFAULT_INIT_FLAGS = 0,
+	_IRQ_PER_CPU = 512,
+	_IRQ_LEVEL = 256,
+	_IRQ_NOPROBE = 1024,
+	_IRQ_NOREQUEST = 2048,
+	_IRQ_NOTHREAD = 65536,
+	_IRQ_NOAUTOEN = 4096,
+	_IRQ_MOVE_PCNTXT = 16384,
+	_IRQ_NO_BALANCING = 8192,
+	_IRQ_NESTED_THREAD = 32768,
+	_IRQ_PER_CPU_DEVID = 131072,
+	_IRQ_IS_POLLED = 262144,
+	_IRQ_DISABLE_UNLAZY = 524288,
+	_IRQ_HIDDEN = 1048576,
+	_IRQ_NO_DEBUG = 2097152,
+	_IRQF_MODIFY_MASK = 2096911,
+};
+
+enum {
+	IRQTF_RUNTHREAD = 0,
+	IRQTF_WARNED = 1,
+	IRQTF_AFFINITY = 2,
+	IRQTF_FORCED_THREAD = 3,
+	IRQTF_READY = 4,
+};
+
+enum {
+	IRQC_IS_HARDIRQ = 0,
+	IRQC_IS_NESTED = 1,
+};
+
+enum {
+	IRQ_STARTUP_NORMAL = 0,
+	IRQ_STARTUP_MANAGED = 1,
+	IRQ_STARTUP_ABORT = 2,
+};
+
+struct irq_devres {
+	unsigned int irq;
+	void *dev_id;
+};
+
+struct irq_desc_devres {
+	unsigned int from;
+	unsigned int cnt;
+};
+
+struct irq_generic_chip_devres {
+	struct irq_chip_generic *gc;
+	u32 msk;
+	unsigned int clr;
+	unsigned int set;
+};
+
+struct irqchip_fwid {
+	struct fwnode_handle fwnode;
+	unsigned int type;
+	char *name;
+	phys_addr_t *pa;
+};
+
+enum {
+	AFFINITY = 0,
+	AFFINITY_LIST = 1,
+	EFFECTIVE = 2,
+	EFFECTIVE_LIST = 3,
+};
+
+enum msi_domain_ids {
+	MSI_DEFAULT_DOMAIN = 0,
+	MSI_SECONDARY_DOMAIN = 1,
+	MSI_MAX_DEVICE_IRQDOMAINS = 2,
+};
+
+enum msi_desc_filter {
+	MSI_DESC_ALL = 0,
+	MSI_DESC_NOTASSOCIATED = 1,
+	MSI_DESC_ASSOCIATED = 2,
+};
+
+struct msi_domain_template {
+	char name[48];
+	struct irq_chip chip;
+	struct msi_domain_ops ops;
+	struct msi_domain_info info;
+};
+
+struct xa_limit {
+	u32 max;
+	u32 min;
+};
+
+struct msi_ctrl {
+	unsigned int domid;
+	unsigned int first;
+	unsigned int last;
+	unsigned int nirqs;
+};
+
+struct msi_map {
+	int index;
+	int virq;
+};
+
+struct irq_affinity {
+	unsigned int pre_vectors;
+	unsigned int post_vectors;
+	unsigned int nr_sets;
+	unsigned int set_size[4];
+	void (*calc_sets)(struct irq_affinity *, unsigned int);
+	void *priv;
+};
+
+struct irq_matrix;
+
+typedef void (*btf_trace_irq_matrix_online)(void *, struct irq_matrix *);
+
+struct cpumap;
+
+struct irq_matrix {
+	unsigned int matrix_bits;
+	unsigned int alloc_start;
+	unsigned int alloc_end;
+	unsigned int alloc_size;
+	unsigned int global_available;
+	unsigned int global_reserved;
+	unsigned int systembits_inalloc;
+	unsigned int total_allocated;
+	unsigned int online_maps;
+	struct cpumap __attribute__((btf_type_tag("percpu"))) *maps;
+	unsigned long scratch_map[4];
+	unsigned long system_map[4];
+};
+
+struct cpumap {
+	unsigned int available;
+	unsigned int allocated;
+	unsigned int managed;
+	unsigned int managed_allocated;
+	bool initialized;
+	bool online;
+	unsigned long alloc_map[4];
+	unsigned long managed_map[4];
+};
+
+typedef void (*btf_trace_irq_matrix_offline)(void *, struct irq_matrix *);
+
+typedef void (*btf_trace_irq_matrix_reserve)(void *, struct irq_matrix *);
+
+typedef void (*btf_trace_irq_matrix_remove_reserved)(void *, struct irq_matrix *);
+
+typedef void (*btf_trace_irq_matrix_assign_system)(void *, int, struct irq_matrix *);
+
+typedef void (*btf_trace_irq_matrix_alloc_reserved)(void *, int, unsigned int, struct irq_matrix *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_reserve_managed)(void *, int, unsigned int, struct irq_matrix *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_remove_managed)(void *, int, unsigned int, struct irq_matrix *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_alloc_managed)(void *, int, unsigned int, struct irq_matrix *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_assign)(void *, int, unsigned int, struct irq_matrix *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_alloc)(void *, int, unsigned int, struct irq_matrix *, struct cpumap *);
+
+typedef void (*btf_trace_irq_matrix_free)(void *, int, unsigned int, struct irq_matrix *, struct cpumap *);
+
+struct trace_event_raw_irq_matrix_global {
+	struct trace_entry ent;
+	unsigned int online_maps;
+	unsigned int global_available;
+	unsigned int global_reserved;
+	unsigned int total_allocated;
+	char __data[0];
+};
+
+struct trace_event_raw_irq_matrix_global_update {
+	struct trace_entry ent;
+	int bit;
+	unsigned int online_maps;
+	unsigned int global_available;
+	unsigned int global_reserved;
+	unsigned int total_allocated;
+	char __data[0];
+};
+
+struct trace_event_raw_irq_matrix_cpu {
+	struct trace_entry ent;
+	int bit;
+	unsigned int cpu;
+	bool online;
+	unsigned int available;
+	unsigned int allocated;
+	unsigned int managed;
+	unsigned int online_maps;
+	unsigned int global_available;
+	unsigned int global_reserved;
+	unsigned int total_allocated;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_irq_matrix_global {};
+
+struct trace_event_data_offsets_irq_matrix_global_update {};
+
+struct trace_event_data_offsets_irq_matrix_cpu {};
+
+typedef void (*btf_trace_rcu_utilization)(void *, const char *);
+
+typedef void (*btf_trace_rcu_grace_period)(void *, const char *, unsigned long, const char *);
+
+typedef void (*btf_trace_rcu_future_grace_period)(void *, const char *, unsigned long, unsigned long, u8, int, int, const char *);
+
+typedef void (*btf_trace_rcu_grace_period_init)(void *, const char *, unsigned long, u8, int, int, unsigned long);
+
+typedef void (*btf_trace_rcu_exp_grace_period)(void *, const char *, unsigned long, const char *);
+
+typedef void (*btf_trace_rcu_exp_funnel_lock)(void *, const char *, u8, int, int, const char *);
+
+typedef void (*btf_trace_rcu_nocb_wake)(void *, const char *, int, const char *);
+
+typedef void (*btf_trace_rcu_preempt_task)(void *, const char *, int, unsigned long);
+
+typedef void (*btf_trace_rcu_unlock_preempted_task)(void *, const char *, unsigned long, int);
+
+typedef void (*btf_trace_rcu_quiescent_state_report)(void *, const char *, unsigned long, unsigned long, unsigned long, u8, int, int, int);
+
+typedef void (*btf_trace_rcu_fqs)(void *, const char *, unsigned long, int, const char *);
+
+typedef void (*btf_trace_rcu_stall_warning)(void *, const char *, const char *);
+
+typedef void (*btf_trace_rcu_dyntick)(void *, const char *, long, long, int);
+
+typedef void (*btf_trace_rcu_callback)(void *, const char *, struct callback_head *, long);
+
+typedef void (*btf_trace_rcu_segcb_stats)(void *, struct rcu_segcblist *, const char *);
+
+typedef void (*btf_trace_rcu_kvfree_callback)(void *, const char *, struct callback_head *, unsigned long, long);
+
+typedef void (*btf_trace_rcu_batch_start)(void *, const char *, long, long);
+
+typedef void (*btf_trace_rcu_invoke_callback)(void *, const char *, struct callback_head *);
+
+typedef void (*btf_trace_rcu_invoke_kvfree_callback)(void *, const char *, struct callback_head *, unsigned long);
+
+typedef void (*btf_trace_rcu_invoke_kfree_bulk_callback)(void *, const char *, unsigned long, void **);
+
+typedef void (*btf_trace_rcu_batch_end)(void *, const char *, int, char, char, char, char);
+
+typedef void (*btf_trace_rcu_torture_read)(void *, const char *, struct callback_head *, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_rcu_barrier)(void *, const char *, const char *, int, int, unsigned long);
+
+struct rcu_tasks;
+
+typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);
+
+typedef void (*pregp_func_t)(struct list_head *);
+
+typedef void (*pertask_func_t)(struct task_struct *, struct list_head *);
+
+typedef void (*postscan_func_t)(struct list_head *);
+
+typedef void (*holdouts_func_t)(struct list_head *, bool, bool *);
+
+typedef void (*postgp_func_t)(struct rcu_tasks *);
+
+typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);
+
+struct rcu_tasks_percpu;
+
+struct rcu_tasks {
+	struct rcuwait cbs_wait;
+	raw_spinlock_t cbs_gbl_lock;
+	struct mutex tasks_gp_mutex;
+	int gp_state;
+	int gp_sleep;
+	int init_fract;
+	unsigned long gp_jiffies;
+	unsigned long gp_start;
+	unsigned long tasks_gp_seq;
+	unsigned long n_ipis;
+	unsigned long n_ipis_fails;
+	struct task_struct *kthread_ptr;
+	unsigned long lazy_jiffies;
+	rcu_tasks_gp_func_t gp_func;
+	pregp_func_t pregp_func;
+	pertask_func_t pertask_func;
+	postscan_func_t postscan_func;
+	holdouts_func_t holdouts_func;
+	postgp_func_t postgp_func;
+	call_rcu_func_t call_func;
+	struct rcu_tasks_percpu __attribute__((btf_type_tag("percpu"))) *rtpcpu;
+	int percpu_enqueue_shift;
+	int percpu_enqueue_lim;
+	int percpu_dequeue_lim;
+	unsigned long percpu_dequeue_gpseq;
+	struct mutex barrier_q_mutex;
+	atomic_t barrier_q_count;
+	struct completion barrier_q_completion;
+	unsigned long barrier_q_seq;
+	char *name;
+	char *kname;
+};
+
+struct rcu_tasks_percpu {
+	struct rcu_segcblist cblist;
+	raw_spinlock_t lock;
+	unsigned long rtp_jiffies;
+	unsigned long rtp_n_lock_retries;
+	struct timer_list lazy_timer;
+	unsigned int urgent_gp;
+	struct work_struct rtp_work;
+	struct irq_work rtp_irq_work;
+	struct callback_head barrier_q_head;
+	struct list_head rtp_blkd_tasks;
+	int cpu;
+	struct rcu_tasks *rtpp;
+};
+
+struct rcu_synchronize {
+	struct callback_head head;
+	struct completion completion;
+};
+
+struct trace_event_raw_rcu_utilization {
+	struct trace_entry ent;
+	const char *s;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_future_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	long gp_seq_req;
+	u8 level;
+	int grplo;
+	int grphi;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_grace_period_init {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	u8 level;
+	int grplo;
+	int grphi;
+	unsigned long qsmask;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_exp_grace_period {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gpseq;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_exp_funnel_lock {
+	struct trace_entry ent;
+	const char *rcuname;
+	u8 level;
+	int grplo;
+	int grphi;
+	const char *gpevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_nocb_wake {
+	struct trace_entry ent;
+	const char *rcuname;
+	int cpu;
+	const char *reason;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_preempt_task {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_unlock_preempted_task {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_quiescent_state_report {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	unsigned long mask;
+	unsigned long qsmask;
+	u8 level;
+	int grplo;
+	int grphi;
+	u8 gp_tasks;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_fqs {
+	struct trace_entry ent;
+	const char *rcuname;
+	long gp_seq;
+	int cpu;
+	const char *qsevent;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_stall_warning {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *msg;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_dyntick {
+	struct trace_entry ent;
+	const char *polarity;
+	long oldnesting;
+	long newnesting;
+	int dynticks;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	void *func;
+	long qlen;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_segcb_stats {
+	struct trace_entry ent;
+	const char *ctx;
+	unsigned long gp_seq[4];
+	long seglen[4];
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_kvfree_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	unsigned long offset;
+	long qlen;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_batch_start {
+	struct trace_entry ent;
+	const char *rcuname;
+	long qlen;
+	long blimit;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	void *func;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_kvfree_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	void *rhp;
+	unsigned long offset;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_invoke_kfree_bulk_callback {
+	struct trace_entry ent;
+	const char *rcuname;
+	unsigned long nr_records;
+	void **p;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_batch_end {
+	struct trace_entry ent;
+	const char *rcuname;
+	int callbacks_invoked;
+	char cb;
+	char nr;
+	char iit;
+	char risk;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_torture_read {
+	struct trace_entry ent;
+	char rcutorturename[8];
+	struct callback_head *rhp;
+	unsigned long secs;
+	unsigned long c_old;
+	unsigned long c;
+	char __data[0];
+};
+
+struct trace_event_raw_rcu_barrier {
+	struct trace_entry ent;
+	const char *rcuname;
+	const char *s;
+	int cpu;
+	int cnt;
+	unsigned long done;
+	char __data[0];
+};
+
+struct rcu_cblist {
+	struct callback_head *head;
+	struct callback_head **tail;
+	long len;
+};
+
+struct trc_stall_chk_rdr {
+	int nesting;
+	int ipi_to_cpu;
+	u8 needqs;
+};
+
+struct trace_event_data_offsets_rcu_utilization {};
+
+struct trace_event_data_offsets_rcu_grace_period {};
+
+struct trace_event_data_offsets_rcu_future_grace_period {};
+
+struct trace_event_data_offsets_rcu_grace_period_init {};
+
+struct trace_event_data_offsets_rcu_exp_grace_period {};
+
+struct trace_event_data_offsets_rcu_exp_funnel_lock {};
+
+struct trace_event_data_offsets_rcu_nocb_wake {};
+
+struct trace_event_data_offsets_rcu_preempt_task {};
+
+struct trace_event_data_offsets_rcu_unlock_preempted_task {};
+
+struct trace_event_data_offsets_rcu_quiescent_state_report {};
+
+struct trace_event_data_offsets_rcu_fqs {};
+
+struct trace_event_data_offsets_rcu_stall_warning {};
+
+struct trace_event_data_offsets_rcu_dyntick {};
+
+struct trace_event_data_offsets_rcu_callback {};
+
+struct trace_event_data_offsets_rcu_segcb_stats {};
+
+struct trace_event_data_offsets_rcu_kvfree_callback {};
+
+struct trace_event_data_offsets_rcu_batch_start {};
+
+struct trace_event_data_offsets_rcu_invoke_callback {};
+
+struct trace_event_data_offsets_rcu_invoke_kvfree_callback {};
+
+struct trace_event_data_offsets_rcu_invoke_kfree_bulk_callback {};
+
+struct trace_event_data_offsets_rcu_batch_end {};
+
+struct trace_event_data_offsets_rcu_torture_read {};
+
+struct trace_event_data_offsets_rcu_barrier {};
+
+enum {
+	GP_IDLE = 0,
+	GP_ENTER = 1,
+	GP_PASSED = 2,
+	GP_EXIT = 3,
+	GP_REPLAY = 4,
+};
+
+enum rcutorture_type {
+	RCU_FLAVOR = 0,
+	RCU_TASKS_FLAVOR = 1,
+	RCU_TASKS_RUDE_FLAVOR = 2,
+	RCU_TASKS_TRACING_FLAVOR = 3,
+	RCU_TRIVIAL_FLAVOR = 4,
+	SRCU_FLAVOR = 5,
+	INVALID_RCU_FLAVOR = 6,
+};
+
+struct rcu_exp_work {
+	unsigned long rew_s;
+	struct kthread_work rew_work;
+};
+
+struct rcu_node {
+	raw_spinlock_t lock;
+	unsigned long gp_seq;
+	unsigned long gp_seq_needed;
+	unsigned long completedqs;
+	unsigned long qsmask;
+	unsigned long rcu_gp_init_mask;
+	unsigned long qsmaskinit;
+	unsigned long qsmaskinitnext;
+	unsigned long expmask;
+	unsigned long expmaskinit;
+	unsigned long expmaskinitnext;
+	unsigned long cbovldmask;
+	unsigned long ffmask;
+	unsigned long grpmask;
+	int grplo;
+	int grphi;
+	u8 grpnum;
+	u8 level;
+	bool wait_blkd_tasks;
+	struct rcu_node *parent;
+	struct list_head blkd_tasks;
+	struct list_head *gp_tasks;
+	struct list_head *exp_tasks;
+	struct list_head *boost_tasks;
+	struct rt_mutex boost_mtx;
+	unsigned long boost_time;
+	struct mutex boost_kthread_mutex;
+	struct task_struct *boost_kthread_task;
+	unsigned int boost_kthread_status;
+	unsigned long n_boosts;
+	struct swait_queue_head nocb_gp_wq[2];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	raw_spinlock_t fqslock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t exp_lock;
+	unsigned long exp_seq_rq;
+	wait_queue_head_t exp_wq[4];
+	struct rcu_exp_work rew;
+	bool exp_need_flush;
+	raw_spinlock_t exp_poll_lock;
+	unsigned long exp_seq_poll_rq;
+	struct work_struct exp_poll_wq;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+union rcu_noqs {
+	struct {
+		u8 norm;
+		u8 exp;
+	} b;
+	u16 s;
+};
+
+struct rcu_snap_record {
+	unsigned long gp_seq;
+	u64 cputime_irq;
+	u64 cputime_softirq;
+	u64 cputime_system;
+	unsigned long nr_hardirqs;
+	unsigned int nr_softirqs;
+	unsigned long long nr_csw;
+	unsigned long jiffies;
+};
+
+struct rcu_data {
+	unsigned long gp_seq;
+	unsigned long gp_seq_needed;
+	union rcu_noqs cpu_no_qs;
+	bool core_needs_qs;
+	bool beenonline;
+	bool gpwrap;
+	bool cpu_started;
+	struct rcu_node *mynode;
+	unsigned long grpmask;
+	unsigned long ticks_this_gp;
+	struct irq_work defer_qs_iw;
+	bool defer_qs_iw_pending;
+	struct work_struct strict_work;
+	struct rcu_segcblist cblist;
+	long qlen_last_fqs_check;
+	unsigned long n_cbs_invoked;
+	unsigned long n_force_qs_snap;
+	long blimit;
+	int dynticks_snap;
+	bool rcu_need_heavy_qs;
+	bool rcu_urgent_qs;
+	bool rcu_forced_tick;
+	bool rcu_forced_tick_exp;
+	unsigned long barrier_seq_snap;
+	struct callback_head barrier_head;
+	int exp_dynticks_snap;
+	struct swait_queue_head nocb_cb_wq;
+	struct swait_queue_head nocb_state_wq;
+	struct task_struct *nocb_gp_kthread;
+	raw_spinlock_t nocb_lock;
+	atomic_t nocb_lock_contended;
+	int nocb_defer_wakeup;
+	struct timer_list nocb_timer;
+	unsigned long nocb_gp_adv_time;
+	struct mutex nocb_gp_kthread_mutex;
+	raw_spinlock_t nocb_bypass_lock;
+	struct rcu_cblist nocb_bypass;
+	unsigned long nocb_bypass_first;
+	unsigned long nocb_nobypass_last;
+	int nocb_nobypass_count;
+	long: 64;
+	raw_spinlock_t nocb_gp_lock;
+	u8 nocb_gp_sleep;
+	u8 nocb_gp_bypass;
+	u8 nocb_gp_gp;
+	unsigned long nocb_gp_seq;
+	unsigned long nocb_gp_loops;
+	struct swait_queue_head nocb_gp_wq;
+	bool nocb_cb_sleep;
+	struct task_struct *nocb_cb_kthread;
+	struct list_head nocb_head_rdp;
+	struct list_head nocb_entry_rdp;
+	struct rcu_data *nocb_toggling_rdp;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct rcu_data *nocb_gp_rdp;
+	struct task_struct *rcu_cpu_kthread_task;
+	unsigned int rcu_cpu_kthread_status;
+	char rcu_cpu_has_work;
+	unsigned long rcuc_activity;
+	unsigned int softirq_snap;
+	struct irq_work rcu_iw;
+	bool rcu_iw_pending;
+	unsigned long rcu_iw_gp_seq;
+	unsigned long rcu_ofl_gp_seq;
+	short rcu_ofl_gp_flags;
+	unsigned long rcu_onl_gp_seq;
+	short rcu_onl_gp_flags;
+	unsigned long last_fqs_resched;
+	unsigned long last_sched_clock;
+	struct rcu_snap_record snap_record;
+	long lazy_len;
+	int cpu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rcu_state {
+	struct rcu_node node[3];
+	struct rcu_node *level[3];
+	int ncpus;
+	int n_online_cpus;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long gp_seq;
+	unsigned long gp_max;
+	struct task_struct *gp_kthread;
+	struct swait_queue_head gp_wq;
+	short gp_flags;
+	short gp_state;
+	unsigned long gp_wake_time;
+	unsigned long gp_wake_seq;
+	unsigned long gp_seq_polled;
+	unsigned long gp_seq_polled_snap;
+	unsigned long gp_seq_polled_exp_snap;
+	struct mutex barrier_mutex;
+	atomic_t barrier_cpu_count;
+	struct completion barrier_completion;
+	unsigned long barrier_sequence;
+	raw_spinlock_t barrier_lock;
+	struct mutex exp_mutex;
+	struct mutex exp_wake_mutex;
+	unsigned long expedited_sequence;
+	atomic_t expedited_need_qs;
+	struct swait_queue_head expedited_wq;
+	int ncpus_snap;
+	u8 cbovld;
+	u8 cbovldnext;
+	unsigned long jiffies_force_qs;
+	unsigned long jiffies_kick_kthreads;
+	unsigned long n_force_qs;
+	unsigned long gp_start;
+	unsigned long gp_end;
+	unsigned long gp_activity;
+	unsigned long gp_req_activity;
+	unsigned long jiffies_stall;
+	int nr_fqs_jiffies_stall;
+	unsigned long jiffies_resched;
+	unsigned long n_force_qs_gpstart;
+	const char *name;
+	char abbr;
+	long: 0;
+	arch_spinlock_t ofl_lock;
+	int nocb_is_setup;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rcu_gp_oldstate {
+	unsigned long rgos_norm;
+	unsigned long rgos_exp;
+};
+
+struct kfree_rcu_cpu;
+
+struct kfree_rcu_cpu_work {
+	struct rcu_work rcu_work;
+	struct callback_head *head_free;
+	struct rcu_gp_oldstate head_free_gp_snap;
+	struct list_head bulk_head_free[2];
+	struct kfree_rcu_cpu *krcp;
+};
+
+struct kfree_rcu_cpu {
+	struct callback_head *head;
+	unsigned long head_gp_snap;
+	atomic_t head_count;
+	struct list_head bulk_head[2];
+	atomic_t bulk_count[2];
+	struct kfree_rcu_cpu_work krw_arr[2];
+	raw_spinlock_t lock;
+	struct delayed_work monitor_work;
+	bool initialized;
+	struct delayed_work page_cache_work;
+	atomic_t backoff_page_cache_fill;
+	atomic_t work_in_progress;
+	struct hrtimer hrtimer;
+	struct llist_head bkvcache;
+	int nr_bkv_objs;
+};
+
+struct context_tracking {
+	atomic_t state;
+	long dynticks_nesting;
+	long dynticks_nmi_nesting;
+};
+
+struct kvfree_rcu_bulk_data {
+	struct list_head list;
+	struct rcu_gp_oldstate gp_snap;
+	unsigned long nr_records;
+	void *records[0];
+};
+
+struct rcu_stall_chk_rdr {
+	int nesting;
+	union rcu_special rs;
+	bool on_blkd_list;
+};
+
+struct dma_sgt_handle {
+	struct sg_table sgt;
+	struct page **pages;
+};
+
+struct dma_devres {
+	size_t size;
+	void *vaddr;
+	dma_addr_t dma_handle;
+	unsigned long attrs;
+};
+
+enum pci_p2pdma_map_type {
+	PCI_P2PDMA_MAP_UNKNOWN = 0,
+	PCI_P2PDMA_MAP_NOT_SUPPORTED = 1,
+	PCI_P2PDMA_MAP_BUS_ADDR = 2,
+	PCI_P2PDMA_MAP_THRU_HOST_BRIDGE = 3,
+};
+
+struct pci_p2pdma_map_state {
+	struct dev_pagemap *pgmap;
+	int map;
+	u64 bus_off;
+};
+
+struct debugfs_u32_array {
+	u32 *array;
+	u32 n_elements;
+};
+
+struct cma {
+	unsigned long base_pfn;
+	unsigned long count;
+	unsigned long *bitmap;
+	unsigned int order_per_bit;
+	spinlock_t lock;
+	struct hlist_head mem_head;
+	spinlock_t mem_head_lock;
+	struct debugfs_u32_array dfs_bitmap;
+	char name[64];
+	bool reserve_pages_on_error;
+};
+
+struct io_tlb_area {
+	unsigned long used;
+	unsigned int index;
+	spinlock_t lock;
+};
+
+struct io_tlb_slot {
+	phys_addr_t orig_addr;
+	size_t alloc_size;
+	unsigned int list;
+};
+
+typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t);
+
+struct trace_event_raw_swiotlb_bounced {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u64 dma_mask;
+	dma_addr_t dev_addr;
+	size_t size;
+	bool force;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_swiotlb_bounced {
+	u32 dev_name;
+};
+
+typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long);
+
+typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long);
+
+enum {
+	TRACE_EVENT_FL_FILTERED = 1,
+	TRACE_EVENT_FL_CAP_ANY = 2,
+	TRACE_EVENT_FL_NO_SET_FILTER = 4,
+	TRACE_EVENT_FL_IGNORE_ENABLE = 8,
+	TRACE_EVENT_FL_TRACEPOINT = 16,
+	TRACE_EVENT_FL_DYNAMIC = 32,
+	TRACE_EVENT_FL_KPROBE = 64,
+	TRACE_EVENT_FL_UPROBE = 128,
+	TRACE_EVENT_FL_EPROBE = 256,
+	TRACE_EVENT_FL_FPROBE = 512,
+	TRACE_EVENT_FL_CUSTOM = 1024,
+};
+
+struct trace_event_raw_sys_enter {
+	struct trace_entry ent;
+	long id;
+	unsigned long args[6];
+	char __data[0];
+};
+
+struct trace_event_raw_sys_exit {
+	struct trace_entry ent;
+	long id;
+	long ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_sys_enter {};
+
+struct trace_event_data_offsets_sys_exit {};
+
+struct ptrace_sud_config {
+	__u64 mode;
+	__u64 selector;
+	__u64 offset;
+	__u64 len;
+};
+
+typedef void (*btf_trace_module_load)(void *, struct module *);
+
+typedef void (*btf_trace_module_free)(void *, struct module *);
+
+typedef void (*btf_trace_module_get)(void *, struct module *, unsigned long);
+
+typedef void (*btf_trace_module_put)(void *, struct module *, unsigned long);
+
+typedef void (*btf_trace_module_request)(void *, char *, bool, unsigned long);
+
+struct latch_tree_root {
+	seqcount_latch_t seq;
+	struct rb_root tree[2];
+};
+
+struct mod_tree_root {
+	struct latch_tree_root root;
+	unsigned long addr_min;
+	unsigned long addr_max;
+};
+
+enum mod_license {
+	NOT_GPL_ONLY = 0,
+	GPL_ONLY = 1,
+};
+
+struct symsearch {
+	const struct kernel_symbol *start;
+	const struct kernel_symbol *stop;
+	const s32 *crcs;
+	enum mod_license license;
+};
+
+enum kernel_load_data_id {
+	LOADING_UNKNOWN = 0,
+	LOADING_FIRMWARE = 1,
+	LOADING_MODULE = 2,
+	LOADING_KEXEC_IMAGE = 3,
+	LOADING_KEXEC_INITRAMFS = 4,
+	LOADING_POLICY = 5,
+	LOADING_X509_CERTIFICATE = 6,
+	LOADING_MAX_ID = 7,
+};
+
+enum fail_dup_mod_reason {
+	FAIL_DUP_MOD_BECOMING = 0,
+	FAIL_DUP_MOD_LOAD = 1,
+};
+
+enum kernel_read_file_id {
+	READING_UNKNOWN = 0,
+	READING_FIRMWARE = 1,
+	READING_MODULE = 2,
+	READING_KEXEC_IMAGE = 3,
+	READING_KEXEC_INITRAMFS = 4,
+	READING_POLICY = 5,
+	READING_X509_CERTIFICATE = 6,
+	READING_MAX_ID = 7,
+};
+
+struct trace_event_raw_module_load {
+	struct trace_entry ent;
+	unsigned int taints;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_free {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_refcnt {
+	struct trace_entry ent;
+	unsigned long ip;
+	int refcnt;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_module_request {
+	struct trace_entry ent;
+	unsigned long ip;
+	bool wait;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct module_use {
+	struct list_head source_list;
+	struct list_head target_list;
+	struct module *source;
+	struct module *target;
+};
+
+struct mod_initfree {
+	struct llist_node node;
+	void *init_text;
+	void *init_data;
+	void *init_rodata;
+};
+
+struct idempotent {
+	const void *cookie;
+	struct hlist_node entry;
+	struct completion complete;
+	int ret;
+};
+
+struct trace_event_data_offsets_module_load {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_free {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_refcnt {
+	u32 name;
+};
+
+struct trace_event_data_offsets_module_request {
+	u32 name;
+};
+
+struct find_symbol_arg {
+	const char *name;
+	bool gplok;
+	bool warn;
+	struct module *owner;
+	const s32 *crc;
+	const struct kernel_symbol *sym;
+	enum mod_license license;
+};
+
+struct load_info {
+	const char *name;
+	struct module *mod;
+	Elf64_Ehdr *hdr;
+	unsigned long len;
+	Elf64_Shdr *sechdrs;
+	char *secstrings;
+	char *strtab;
+	unsigned long symoffs;
+	unsigned long stroffs;
+	unsigned long init_typeoffs;
+	unsigned long core_typeoffs;
+	bool sig_ok;
+	unsigned long mod_kallsyms_init_off;
+	struct {
+		unsigned int sym;
+		unsigned int str;
+		unsigned int mod;
+		unsigned int vers;
+		unsigned int info;
+		unsigned int pcpu;
+	} index;
+};
+
+enum key_being_used_for {
+	VERIFYING_MODULE_SIGNATURE = 0,
+	VERIFYING_FIRMWARE_SIGNATURE = 1,
+	VERIFYING_KEXEC_PE_SIGNATURE = 2,
+	VERIFYING_KEY_SIGNATURE = 3,
+	VERIFYING_KEY_SELF_SIGNATURE = 4,
+	VERIFYING_UNSPECIFIED_SIGNATURE = 5,
+	NR__KEY_BEING_USED_FOR = 6,
+};
+
+struct module_signature {
+	u8 algo;
+	u8 hash;
+	u8 id_type;
+	u8 signer_len;
+	u8 key_id_len;
+	u8 __pad[3];
+	__be32 sig_len;
+};
+
+struct latch_tree_ops {
+	bool (*less)(struct latch_tree_node *, struct latch_tree_node *);
+	int (*comp)(void *, struct latch_tree_node *);
+};
+
+struct module_sect_attr {
+	struct bin_attribute battr;
+	unsigned long address;
+};
+
+struct module_sect_attrs {
+	struct attribute_group grp;
+	unsigned int nsections;
+	struct module_sect_attr attrs[0];
+};
+
+struct module_notes_attrs {
+	struct kobject *dir;
+	unsigned int notes;
+	struct bin_attribute attrs[0];
+};
+
+struct modversion_info {
+	unsigned long crc;
+	char name[56];
+};
+
+enum kcmp_type {
+	KCMP_FILE = 0,
+	KCMP_VM = 1,
+	KCMP_FILES = 2,
+	KCMP_FS = 3,
+	KCMP_SIGHAND = 4,
+	KCMP_IO = 5,
+	KCMP_SYSVSEM = 6,
+	KCMP_EPOLL_TFD = 7,
+	KCMP_TYPES = 8,
+};
+
+struct kcmp_epoll_slot {
+	__u32 efd;
+	__u32 tfd;
+	__u32 toff;
+};
+
+struct profile_hit {
+	u32 pc;
+	u32 hits;
+};
+
+enum profile_type {
+	PROFILE_TASK_EXIT = 0,
+	PROFILE_MUNMAP = 1,
+};
+
+struct stacktrace_cookie {
+	unsigned long *store;
+	unsigned int size;
+	unsigned int skip;
+	unsigned int len;
+};
+
+struct timezone {
+	int tz_minuteswest;
+	int tz_dsttime;
+};
+
+typedef __kernel_long_t __kernel_suseconds_t;
+
+typedef __kernel_suseconds_t suseconds_t;
+
+typedef __u64 timeu64_t;
+
+typedef __kernel_long_t __kernel_old_time_t;
+
+struct __kernel_timex_timeval {
+	__kernel_time64_t tv_sec;
+	long long tv_usec;
+};
+
+struct __kernel_timex {
+	unsigned int modes;
+	long long offset;
+	long long freq;
+	long long maxerror;
+	long long esterror;
+	int status;
+	long long constant;
+	long long precision;
+	long long tolerance;
+	struct __kernel_timex_timeval time;
+	long long tick;
+	long long ppsfreq;
+	long long jitter;
+	int shift;
+	long long stabil;
+	long long jitcnt;
+	long long calcnt;
+	long long errcnt;
+	long long stbcnt;
+	int tai;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct old_timex32 {
+	u32 modes;
+	s32 offset;
+	s32 freq;
+	s32 maxerror;
+	s32 esterror;
+	s32 status;
+	s32 constant;
+	s32 precision;
+	s32 tolerance;
+	struct old_timeval32 time;
+	s32 tick;
+	s32 ppsfreq;
+	s32 jitter;
+	s32 shift;
+	s32 stabil;
+	s32 jitcnt;
+	s32 calcnt;
+	s32 errcnt;
+	s32 stbcnt;
+	s32 tai;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct itimerspec64 {
+	struct timespec64 it_interval;
+	struct timespec64 it_value;
+};
+
+struct __kernel_itimerspec {
+	struct __kernel_timespec it_interval;
+	struct __kernel_timespec it_value;
+};
+
+struct old_itimerspec32 {
+	struct old_timespec32 it_interval;
+	struct old_timespec32 it_value;
+};
+
+typedef void (*btf_trace_timer_init)(void *, struct timer_list *);
+
+typedef void (*btf_trace_timer_start)(void *, struct timer_list *, unsigned long, unsigned int);
+
+typedef void (*btf_trace_timer_expire_entry)(void *, struct timer_list *, unsigned long);
+
+typedef void (*btf_trace_timer_expire_exit)(void *, struct timer_list *);
+
+typedef void (*btf_trace_timer_cancel)(void *, struct timer_list *);
+
+typedef void (*btf_trace_hrtimer_init)(void *, struct hrtimer *, clockid_t, enum hrtimer_mode);
+
+typedef void (*btf_trace_hrtimer_start)(void *, struct hrtimer *, enum hrtimer_mode);
+
+typedef void (*btf_trace_hrtimer_expire_entry)(void *, struct hrtimer *, ktime_t *);
+
+typedef void (*btf_trace_hrtimer_expire_exit)(void *, struct hrtimer *);
+
+typedef void (*btf_trace_hrtimer_cancel)(void *, struct hrtimer *);
+
+typedef void (*btf_trace_itimer_state)(void *, int, const struct itimerspec64 * const, unsigned long long);
+
+typedef void (*btf_trace_itimer_expire)(void *, int, struct pid *, unsigned long long);
+
+typedef void (*btf_trace_tick_stop)(void *, int, int);
+
+struct timer_base {
+	raw_spinlock_t lock;
+	struct timer_list *running_timer;
+	unsigned long clk;
+	unsigned long next_expiry;
+	unsigned int cpu;
+	bool next_expiry_recalc;
+	bool is_idle;
+	bool timers_pending;
+	unsigned long pending_map[9];
+	struct hlist_head vectors[576];
+	long: 64;
+	long: 64;
+};
+
+struct trace_event_raw_timer_class {
+	struct trace_entry ent;
+	void *timer;
+	char __data[0];
+};
+
+struct trace_event_raw_timer_start {
+	struct trace_entry ent;
+	void *timer;
+	void *function;
+	unsigned long expires;
+	unsigned long now;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_timer_expire_entry {
+	struct trace_entry ent;
+	void *timer;
+	unsigned long now;
+	void *function;
+	unsigned long baseclk;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_init {
+	struct trace_entry ent;
+	void *hrtimer;
+	clockid_t clockid;
+	enum hrtimer_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_start {
+	struct trace_entry ent;
+	void *hrtimer;
+	void *function;
+	s64 expires;
+	s64 softexpires;
+	enum hrtimer_mode mode;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_expire_entry {
+	struct trace_entry ent;
+	void *hrtimer;
+	s64 now;
+	void *function;
+	char __data[0];
+};
+
+struct trace_event_raw_hrtimer_class {
+	struct trace_entry ent;
+	void *hrtimer;
+	char __data[0];
+};
+
+struct trace_event_raw_itimer_state {
+	struct trace_entry ent;
+	int which;
+	unsigned long long expires;
+	long value_sec;
+	long value_nsec;
+	long interval_sec;
+	long interval_nsec;
+	char __data[0];
+};
+
+struct trace_event_raw_itimer_expire {
+	struct trace_entry ent;
+	int which;
+	pid_t pid;
+	unsigned long long now;
+	char __data[0];
+};
+
+struct trace_event_raw_tick_stop {
+	struct trace_entry ent;
+	int success;
+	int dependency;
+	char __data[0];
+};
+
+struct process_timer {
+	struct timer_list timer;
+	struct task_struct *task;
+};
+
+struct trace_event_data_offsets_timer_class {};
+
+struct trace_event_data_offsets_timer_start {};
+
+struct trace_event_data_offsets_timer_expire_entry {};
+
+struct trace_event_data_offsets_hrtimer_init {};
+
+struct trace_event_data_offsets_hrtimer_start {};
+
+struct trace_event_data_offsets_hrtimer_expire_entry {};
+
+struct trace_event_data_offsets_hrtimer_class {};
+
+struct trace_event_data_offsets_itimer_state {};
+
+struct trace_event_data_offsets_itimer_expire {};
+
+struct trace_event_data_offsets_tick_stop {};
+
+enum hrtimer_base_type {
+	HRTIMER_BASE_MONOTONIC = 0,
+	HRTIMER_BASE_REALTIME = 1,
+	HRTIMER_BASE_BOOTTIME = 2,
+	HRTIMER_BASE_TAI = 3,
+	HRTIMER_BASE_MONOTONIC_SOFT = 4,
+	HRTIMER_BASE_REALTIME_SOFT = 5,
+	HRTIMER_BASE_BOOTTIME_SOFT = 6,
+	HRTIMER_BASE_TAI_SOFT = 7,
+	HRTIMER_MAX_CLOCK_BASES = 8,
+};
+
+struct tk_fast {
+	seqcount_latch_t seq;
+	struct tk_read_base base[2];
+};
+
+enum timekeeping_adv_mode {
+	TK_ADV_TICK = 0,
+	TK_ADV_FREQ = 1,
+};
+
+struct system_time_snapshot {
+	u64 cycles;
+	ktime_t real;
+	ktime_t boot;
+	ktime_t raw;
+	enum clocksource_ids cs_id;
+	unsigned int clock_was_set_seq;
+	u8 cs_was_changed_seq;
+	u32 mono_shift;
+	u32 mono_mult;
+};
+
+struct system_device_crosststamp {
+	ktime_t device;
+	ktime_t sys_realtime;
+	ktime_t sys_monoraw;
+};
+
+struct audit_ntp_val {
+	long long oldval;
+	long long newval;
+};
+
+struct audit_ntp_data {
+	struct audit_ntp_val vals[6];
+};
+
+struct ktime_timestamps {
+	u64 mono;
+	u64 boot;
+	u64 real;
+};
+
+enum audit_ntp_type {
+	AUDIT_NTP_OFFSET = 0,
+	AUDIT_NTP_FREQ = 1,
+	AUDIT_NTP_STATUS = 2,
+	AUDIT_NTP_TAI = 3,
+	AUDIT_NTP_TICK = 4,
+	AUDIT_NTP_ADJUST = 5,
+	AUDIT_NTP_NVALS = 6,
+};
+
+struct rtc_device;
+
+struct rtc_timer {
+	struct timerqueue_node node;
+	ktime_t period;
+	void (*func)(struct rtc_device *);
+	struct rtc_device *rtc;
+	int enabled;
+};
+
+struct rtc_class_ops;
+
+struct rtc_device {
+	struct device dev;
+	struct module *owner;
+	int id;
+	const struct rtc_class_ops *ops;
+	struct mutex ops_lock;
+	struct cdev char_dev;
+	unsigned long flags;
+	unsigned long irq_data;
+	spinlock_t irq_lock;
+	wait_queue_head_t irq_queue;
+	struct fasync_struct *async_queue;
+	int irq_freq;
+	int max_user_freq;
+	struct timerqueue_head timerqueue;
+	struct rtc_timer aie_timer;
+	struct rtc_timer uie_rtctimer;
+	struct hrtimer pie_timer;
+	int pie_enabled;
+	struct work_struct irqwork;
+	unsigned long set_offset_nsec;
+	unsigned long features[1];
+	time64_t range_min;
+	timeu64_t range_max;
+	timeu64_t alarm_offset_max;
+	time64_t start_secs;
+	time64_t offset_secs;
+	bool set_start_time;
+	u64 android_kabi_reserved1;
+};
+
+struct rtc_wkalrm;
+
+struct rtc_param;
+
+struct rtc_class_ops {
+	int (*ioctl)(struct device *, unsigned int, unsigned long);
+	int (*read_time)(struct device *, struct rtc_time *);
+	int (*set_time)(struct device *, struct rtc_time *);
+	int (*read_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*set_alarm)(struct device *, struct rtc_wkalrm *);
+	int (*proc)(struct device *, struct seq_file *);
+	int (*alarm_irq_enable)(struct device *, unsigned int);
+	int (*read_offset)(struct device *, long *);
+	int (*set_offset)(struct device *, long);
+	int (*param_get)(struct device *, struct rtc_param *);
+	int (*param_set)(struct device *, struct rtc_param *);
+	u64 android_kabi_reserved1;
+};
+
+struct rtc_wkalrm {
+	unsigned char enabled;
+	unsigned char pending;
+	struct rtc_time time;
+};
+
+struct rtc_param {
+	__u64 param;
+	union {
+		__u64 uvalue;
+		__s64 svalue;
+		__u64 ptr;
+	};
+	__u32 index;
+	__u32 __pad;
+};
+
+typedef s64 int64_t;
+
+enum wd_read_status {
+	WD_READ_SUCCESS = 0,
+	WD_READ_UNSTABLE = 1,
+	WD_READ_SKIP = 2,
+};
+
+enum tick_device_mode {
+	TICKDEV_MODE_PERIODIC = 0,
+	TICKDEV_MODE_ONESHOT = 1,
+};
+
+enum tick_nohz_mode {
+	NOHZ_MODE_INACTIVE = 0,
+	NOHZ_MODE_LOWRES = 1,
+	NOHZ_MODE_HIGHRES = 2,
+};
+
+struct tick_device {
+	struct clock_event_device *evtdev;
+	enum tick_device_mode mode;
+};
+
+struct tick_sched {
+	unsigned int inidle: 1;
+	unsigned int tick_stopped: 1;
+	unsigned int idle_active: 1;
+	unsigned int do_timer_last: 1;
+	unsigned int got_idle_tick: 1;
+	unsigned int stalled_jiffies;
+	unsigned long last_tick_jiffies;
+	struct hrtimer sched_timer;
+	ktime_t last_tick;
+	ktime_t next_tick;
+	unsigned long idle_jiffies;
+	ktime_t idle_waketime;
+	seqcount_t idle_sleeptime_seq;
+	ktime_t idle_entrytime;
+	enum tick_nohz_mode nohz_mode;
+	unsigned long last_jiffies;
+	u64 timer_expires_base;
+	u64 timer_expires;
+	u64 next_timer;
+	ktime_t idle_expires;
+	unsigned long idle_calls;
+	unsigned long idle_sleeps;
+	ktime_t idle_exittime;
+	ktime_t idle_sleeptime;
+	ktime_t iowait_sleeptime;
+	atomic_t tick_dep_mask;
+	unsigned long check_clocks;
+};
+
+struct timer_list_iter {
+	int cpu;
+	bool second_pass;
+	u64 now;
+};
+
+struct tm {
+	int tm_sec;
+	int tm_min;
+	int tm_hour;
+	int tm_mday;
+	int tm_mon;
+	long tm_year;
+	int tm_wday;
+	int tm_yday;
+};
+
+struct cyclecounter;
+
+struct timecounter {
+	const struct cyclecounter *cc;
+	u64 cycle_last;
+	u64 nsec;
+	u64 mask;
+	u64 frac;
+};
+
+struct cyclecounter {
+	u64 (*read)(const struct cyclecounter *);
+	u64 mask;
+	u32 mult;
+	u32 shift;
+};
+
+typedef void (*btf_trace_alarmtimer_suspend)(void *, ktime_t, int);
+
+struct alarm;
+
+typedef void (*btf_trace_alarmtimer_fired)(void *, struct alarm *, ktime_t);
+
+enum alarmtimer_restart {
+	ALARMTIMER_NORESTART = 0,
+	ALARMTIMER_RESTART = 1,
+};
+
+enum alarmtimer_type {
+	ALARM_REALTIME = 0,
+	ALARM_BOOTTIME = 1,
+	ALARM_NUMTYPE = 2,
+	ALARM_REALTIME_FREEZER = 3,
+	ALARM_BOOTTIME_FREEZER = 4,
+};
+
+struct alarm {
+	struct timerqueue_node node;
+	struct hrtimer timer;
+	enum alarmtimer_restart (*function)(struct alarm *, ktime_t);
+	enum alarmtimer_type type;
+	int state;
+	void *data;
+};
+
+typedef void (*btf_trace_alarmtimer_start)(void *, struct alarm *, ktime_t);
+
+typedef void (*btf_trace_alarmtimer_cancel)(void *, struct alarm *, ktime_t);
+
+struct k_itimer;
+
+struct k_clock {
+	int (*clock_getres)(const clockid_t, struct timespec64 *);
+	int (*clock_set)(const clockid_t, const struct timespec64 *);
+	int (*clock_get_timespec)(const clockid_t, struct timespec64 *);
+	ktime_t (*clock_get_ktime)(const clockid_t);
+	int (*clock_adj)(const clockid_t, struct __kernel_timex *);
+	int (*timer_create)(struct k_itimer *);
+	int (*nsleep)(const clockid_t, int, const struct timespec64 *);
+	int (*timer_set)(struct k_itimer *, int, struct itimerspec64 *, struct itimerspec64 *);
+	int (*timer_del)(struct k_itimer *);
+	void (*timer_get)(struct k_itimer *, struct itimerspec64 *);
+	void (*timer_rearm)(struct k_itimer *);
+	s64 (*timer_forward)(struct k_itimer *, ktime_t);
+	ktime_t (*timer_remaining)(struct k_itimer *, ktime_t);
+	int (*timer_try_to_cancel)(struct k_itimer *);
+	void (*timer_arm)(struct k_itimer *, ktime_t, bool, bool);
+	void (*timer_wait_running)(struct k_itimer *);
+};
+
+struct cpu_timer {
+	struct timerqueue_node node;
+	struct timerqueue_head *head;
+	struct pid *pid;
+	struct list_head elist;
+	int firing;
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *handling;
+};
+
+typedef __kernel_timer_t timer_t;
+
+struct k_itimer {
+	struct list_head list;
+	struct hlist_node t_hash;
+	spinlock_t it_lock;
+	const struct k_clock *kclock;
+	clockid_t it_clock;
+	timer_t it_id;
+	int it_active;
+	s64 it_overrun;
+	s64 it_overrun_last;
+	int it_requeue_pending;
+	int it_sigev_notify;
+	ktime_t it_interval;
+	struct signal_struct *it_signal;
+	union {
+		struct pid *it_pid;
+		struct task_struct *it_process;
+	};
+	struct sigqueue *sigq;
+	union {
+		struct {
+			struct hrtimer timer;
+		} real;
+		struct cpu_timer cpu;
+		struct {
+			struct alarm alarmtimer;
+		} alarm;
+	} it;
+	struct callback_head rcu;
+};
+
+struct alarm_base {
+	spinlock_t lock;
+	struct timerqueue_head timerqueue;
+	ktime_t (*get_ktime)();
+	void (*get_timespec)(struct timespec64 *);
+	clockid_t base_clockid;
+};
+
+struct class_interface {
+	struct list_head node;
+	const struct class *class;
+	int (*add_dev)(struct device *);
+	void (*remove_dev)(struct device *);
+};
+
+struct platform_driver {
+	int (*probe)(struct platform_device *);
+	int (*remove)(struct platform_device *);
+	void (*remove_new)(struct platform_device *);
+	void (*shutdown)(struct platform_device *);
+	int (*suspend)(struct platform_device *, pm_message_t);
+	int (*resume)(struct platform_device *);
+	struct device_driver driver;
+	const struct platform_device_id *id_table;
+	bool prevent_deferred_probe;
+	bool driver_managed_dma;
+	u64 android_kabi_reserved1;
+};
+
+struct trace_event_raw_alarmtimer_suspend {
+	struct trace_entry ent;
+	s64 expires;
+	unsigned char alarm_type;
+	char __data[0];
+};
+
+struct trace_event_raw_alarm_class {
+	struct trace_entry ent;
+	void *alarm;
+	unsigned char alarm_type;
+	s64 expires;
+	s64 now;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_alarmtimer_suspend {};
+
+struct trace_event_data_offsets_alarm_class {};
+
+struct sigevent {
+	sigval_t sigev_value;
+	int sigev_signo;
+	int sigev_notify;
+	union {
+		int _pad[12];
+		int _tid;
+		struct {
+			void (*_function)(sigval_t);
+			void *_attribute;
+		} _sigev_thread;
+	} _sigev_un;
+};
+
+struct compat_sigevent {
+	compat_sigval_t sigev_value;
+	compat_int_t sigev_signo;
+	compat_int_t sigev_notify;
+	union {
+		compat_int_t _pad[13];
+		compat_int_t _tid;
+		struct {
+			compat_uptr_t _function;
+			compat_uptr_t _attribute;
+		} _sigev_thread;
+	} _sigev_un;
+};
+
+typedef struct sigevent sigevent_t;
+
+struct posix_clock;
+
+struct posix_clock_operations {
+	struct module *owner;
+	int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);
+	int (*clock_gettime)(struct posix_clock *, struct timespec64 *);
+	int (*clock_getres)(struct posix_clock *, struct timespec64 *);
+	int (*clock_settime)(struct posix_clock *, const struct timespec64 *);
+	long (*ioctl)(struct posix_clock *, unsigned int, unsigned long);
+	int (*open)(struct posix_clock *, fmode_t);
+	__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);
+	int (*release)(struct posix_clock *);
+	ssize_t (*read)(struct posix_clock *, uint, char __attribute__((btf_type_tag("user"))) *, size_t);
+};
+
+struct posix_clock {
+	struct posix_clock_operations ops;
+	struct cdev cdev;
+	struct device *dev;
+	struct rw_semaphore rwsem;
+	bool zombie;
+};
+
+struct posix_clock_desc {
+	struct file *fp;
+	struct posix_clock *clk;
+};
+
+struct __kernel_old_itimerval {
+	struct __kernel_old_timeval it_interval;
+	struct __kernel_old_timeval it_value;
+};
+
+struct old_itimerval32 {
+	struct old_timeval32 it_interval;
+	struct old_timeval32 it_value;
+};
+
+struct ce_unbind {
+	struct clock_event_device *ce;
+	int res;
+};
+
+struct futex_hash_bucket {
+	atomic_t waiters;
+	spinlock_t lock;
+	struct plist_head chain;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum futex_access {
+	FUTEX_READ = 0,
+	FUTEX_WRITE = 1,
+};
+
+union futex_key {
+	struct {
+		u64 i_seq;
+		unsigned long pgoff;
+		unsigned int offset;
+	} shared;
+	struct {
+		union {
+			struct mm_struct *mm;
+			u64 __tmp;
+		};
+		unsigned long address;
+		unsigned int offset;
+	} private;
+	struct {
+		u64 ptr;
+		unsigned long word;
+		unsigned int offset;
+	} both;
+};
+
+struct futex_pi_state {
+	struct list_head list;
+	struct rt_mutex_base pi_mutex;
+	struct task_struct *owner;
+	refcount_t refcount;
+	union futex_key key;
+};
+
+struct futex_q {
+	struct plist_node list;
+	struct task_struct *task;
+	spinlock_t *lock_ptr;
+	union futex_key key;
+	struct futex_pi_state *pi_state;
+	struct rt_mutex_waiter *rt_waiter;
+	union futex_key *requeue_pi_key;
+	u32 bitset;
+	atomic_t requeue_state;
+};
+
+struct futex_waitv {
+	__u64 val;
+	__u64 uaddr;
+	__u32 flags;
+	__u32 __reserved;
+};
+
+struct futex_vector {
+	struct futex_waitv w;
+	struct futex_q q;
+};
+
+enum {
+	Q_REQUEUE_PI_NONE = 0,
+	Q_REQUEUE_PI_IGNORE = 1,
+	Q_REQUEUE_PI_IN_PROGRESS = 2,
+	Q_REQUEUE_PI_WAIT = 3,
+	Q_REQUEUE_PI_DONE = 4,
+	Q_REQUEUE_PI_LOCKED = 5,
+};
+
+struct dma_chan {
+	int lock;
+	const char *device_id;
+};
+
+typedef void (*btf_trace_csd_queue_cpu)(void *, const unsigned int, unsigned long, smp_call_func_t, struct __call_single_data *);
+
+typedef void (*btf_trace_csd_function_entry)(void *, smp_call_func_t, struct __call_single_data *);
+
+typedef void (*btf_trace_csd_function_exit)(void *, smp_call_func_t, struct __call_single_data *);
+
+struct call_function_data {
+	call_single_data_t __attribute__((btf_type_tag("percpu"))) *csd;
+	cpumask_var_t cpumask;
+	cpumask_var_t cpumask_ipi;
+};
+
+struct trace_event_raw_csd_queue_cpu {
+	struct trace_entry ent;
+	unsigned int cpu;
+	void *callsite;
+	void *func;
+	void *csd;
+	char __data[0];
+};
+
+struct trace_event_raw_csd_function {
+	struct trace_entry ent;
+	void *func;
+	void *csd;
+	char __data[0];
+};
+
+struct smp_call_on_cpu_struct {
+	struct work_struct work;
+	struct completion done;
+	int (*func)(void *);
+	void *data;
+	int ret;
+	int cpu;
+};
+
+struct trace_event_data_offsets_csd_queue_cpu {};
+
+struct trace_event_data_offsets_csd_function {};
+
+enum pkey_id_type {
+	PKEY_ID_PGP = 0,
+	PKEY_ID_X509 = 1,
+	PKEY_ID_PKCS7 = 2,
+};
+
+union bpf_iter_link_info;
+
+typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *);
+
+typedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *);
+
+typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);
+
+enum bpf_func_id {
+	BPF_FUNC_unspec = 0,
+	BPF_FUNC_map_lookup_elem = 1,
+	BPF_FUNC_map_update_elem = 2,
+	BPF_FUNC_map_delete_elem = 3,
+	BPF_FUNC_probe_read = 4,
+	BPF_FUNC_ktime_get_ns = 5,
+	BPF_FUNC_trace_printk = 6,
+	BPF_FUNC_get_prandom_u32 = 7,
+	BPF_FUNC_get_smp_processor_id = 8,
+	BPF_FUNC_skb_store_bytes = 9,
+	BPF_FUNC_l3_csum_replace = 10,
+	BPF_FUNC_l4_csum_replace = 11,
+	BPF_FUNC_tail_call = 12,
+	BPF_FUNC_clone_redirect = 13,
+	BPF_FUNC_get_current_pid_tgid = 14,
+	BPF_FUNC_get_current_uid_gid = 15,
+	BPF_FUNC_get_current_comm = 16,
+	BPF_FUNC_get_cgroup_classid = 17,
+	BPF_FUNC_skb_vlan_push = 18,
+	BPF_FUNC_skb_vlan_pop = 19,
+	BPF_FUNC_skb_get_tunnel_key = 20,
+	BPF_FUNC_skb_set_tunnel_key = 21,
+	BPF_FUNC_perf_event_read = 22,
+	BPF_FUNC_redirect = 23,
+	BPF_FUNC_get_route_realm = 24,
+	BPF_FUNC_perf_event_output = 25,
+	BPF_FUNC_skb_load_bytes = 26,
+	BPF_FUNC_get_stackid = 27,
+	BPF_FUNC_csum_diff = 28,
+	BPF_FUNC_skb_get_tunnel_opt = 29,
+	BPF_FUNC_skb_set_tunnel_opt = 30,
+	BPF_FUNC_skb_change_proto = 31,
+	BPF_FUNC_skb_change_type = 32,
+	BPF_FUNC_skb_under_cgroup = 33,
+	BPF_FUNC_get_hash_recalc = 34,
+	BPF_FUNC_get_current_task = 35,
+	BPF_FUNC_probe_write_user = 36,
+	BPF_FUNC_current_task_under_cgroup = 37,
+	BPF_FUNC_skb_change_tail = 38,
+	BPF_FUNC_skb_pull_data = 39,
+	BPF_FUNC_csum_update = 40,
+	BPF_FUNC_set_hash_invalid = 41,
+	BPF_FUNC_get_numa_node_id = 42,
+	BPF_FUNC_skb_change_head = 43,
+	BPF_FUNC_xdp_adjust_head = 44,
+	BPF_FUNC_probe_read_str = 45,
+	BPF_FUNC_get_socket_cookie = 46,
+	BPF_FUNC_get_socket_uid = 47,
+	BPF_FUNC_set_hash = 48,
+	BPF_FUNC_setsockopt = 49,
+	BPF_FUNC_skb_adjust_room = 50,
+	BPF_FUNC_redirect_map = 51,
+	BPF_FUNC_sk_redirect_map = 52,
+	BPF_FUNC_sock_map_update = 53,
+	BPF_FUNC_xdp_adjust_meta = 54,
+	BPF_FUNC_perf_event_read_value = 55,
+	BPF_FUNC_perf_prog_read_value = 56,
+	BPF_FUNC_getsockopt = 57,
+	BPF_FUNC_override_return = 58,
+	BPF_FUNC_sock_ops_cb_flags_set = 59,
+	BPF_FUNC_msg_redirect_map = 60,
+	BPF_FUNC_msg_apply_bytes = 61,
+	BPF_FUNC_msg_cork_bytes = 62,
+	BPF_FUNC_msg_pull_data = 63,
+	BPF_FUNC_bind = 64,
+	BPF_FUNC_xdp_adjust_tail = 65,
+	BPF_FUNC_skb_get_xfrm_state = 66,
+	BPF_FUNC_get_stack = 67,
+	BPF_FUNC_skb_load_bytes_relative = 68,
+	BPF_FUNC_fib_lookup = 69,
+	BPF_FUNC_sock_hash_update = 70,
+	BPF_FUNC_msg_redirect_hash = 71,
+	BPF_FUNC_sk_redirect_hash = 72,
+	BPF_FUNC_lwt_push_encap = 73,
+	BPF_FUNC_lwt_seg6_store_bytes = 74,
+	BPF_FUNC_lwt_seg6_adjust_srh = 75,
+	BPF_FUNC_lwt_seg6_action = 76,
+	BPF_FUNC_rc_repeat = 77,
+	BPF_FUNC_rc_keydown = 78,
+	BPF_FUNC_skb_cgroup_id = 79,
+	BPF_FUNC_get_current_cgroup_id = 80,
+	BPF_FUNC_get_local_storage = 81,
+	BPF_FUNC_sk_select_reuseport = 82,
+	BPF_FUNC_skb_ancestor_cgroup_id = 83,
+	BPF_FUNC_sk_lookup_tcp = 84,
+	BPF_FUNC_sk_lookup_udp = 85,
+	BPF_FUNC_sk_release = 86,
+	BPF_FUNC_map_push_elem = 87,
+	BPF_FUNC_map_pop_elem = 88,
+	BPF_FUNC_map_peek_elem = 89,
+	BPF_FUNC_msg_push_data = 90,
+	BPF_FUNC_msg_pop_data = 91,
+	BPF_FUNC_rc_pointer_rel = 92,
+	BPF_FUNC_spin_lock = 93,
+	BPF_FUNC_spin_unlock = 94,
+	BPF_FUNC_sk_fullsock = 95,
+	BPF_FUNC_tcp_sock = 96,
+	BPF_FUNC_skb_ecn_set_ce = 97,
+	BPF_FUNC_get_listener_sock = 98,
+	BPF_FUNC_skc_lookup_tcp = 99,
+	BPF_FUNC_tcp_check_syncookie = 100,
+	BPF_FUNC_sysctl_get_name = 101,
+	BPF_FUNC_sysctl_get_current_value = 102,
+	BPF_FUNC_sysctl_get_new_value = 103,
+	BPF_FUNC_sysctl_set_new_value = 104,
+	BPF_FUNC_strtol = 105,
+	BPF_FUNC_strtoul = 106,
+	BPF_FUNC_sk_storage_get = 107,
+	BPF_FUNC_sk_storage_delete = 108,
+	BPF_FUNC_send_signal = 109,
+	BPF_FUNC_tcp_gen_syncookie = 110,
+	BPF_FUNC_skb_output = 111,
+	BPF_FUNC_probe_read_user = 112,
+	BPF_FUNC_probe_read_kernel = 113,
+	BPF_FUNC_probe_read_user_str = 114,
+	BPF_FUNC_probe_read_kernel_str = 115,
+	BPF_FUNC_tcp_send_ack = 116,
+	BPF_FUNC_send_signal_thread = 117,
+	BPF_FUNC_jiffies64 = 118,
+	BPF_FUNC_read_branch_records = 119,
+	BPF_FUNC_get_ns_current_pid_tgid = 120,
+	BPF_FUNC_xdp_output = 121,
+	BPF_FUNC_get_netns_cookie = 122,
+	BPF_FUNC_get_current_ancestor_cgroup_id = 123,
+	BPF_FUNC_sk_assign = 124,
+	BPF_FUNC_ktime_get_boot_ns = 125,
+	BPF_FUNC_seq_printf = 126,
+	BPF_FUNC_seq_write = 127,
+	BPF_FUNC_sk_cgroup_id = 128,
+	BPF_FUNC_sk_ancestor_cgroup_id = 129,
+	BPF_FUNC_ringbuf_output = 130,
+	BPF_FUNC_ringbuf_reserve = 131,
+	BPF_FUNC_ringbuf_submit = 132,
+	BPF_FUNC_ringbuf_discard = 133,
+	BPF_FUNC_ringbuf_query = 134,
+	BPF_FUNC_csum_level = 135,
+	BPF_FUNC_skc_to_tcp6_sock = 136,
+	BPF_FUNC_skc_to_tcp_sock = 137,
+	BPF_FUNC_skc_to_tcp_timewait_sock = 138,
+	BPF_FUNC_skc_to_tcp_request_sock = 139,
+	BPF_FUNC_skc_to_udp6_sock = 140,
+	BPF_FUNC_get_task_stack = 141,
+	BPF_FUNC_load_hdr_opt = 142,
+	BPF_FUNC_store_hdr_opt = 143,
+	BPF_FUNC_reserve_hdr_opt = 144,
+	BPF_FUNC_inode_storage_get = 145,
+	BPF_FUNC_inode_storage_delete = 146,
+	BPF_FUNC_d_path = 147,
+	BPF_FUNC_copy_from_user = 148,
+	BPF_FUNC_snprintf_btf = 149,
+	BPF_FUNC_seq_printf_btf = 150,
+	BPF_FUNC_skb_cgroup_classid = 151,
+	BPF_FUNC_redirect_neigh = 152,
+	BPF_FUNC_per_cpu_ptr = 153,
+	BPF_FUNC_this_cpu_ptr = 154,
+	BPF_FUNC_redirect_peer = 155,
+	BPF_FUNC_task_storage_get = 156,
+	BPF_FUNC_task_storage_delete = 157,
+	BPF_FUNC_get_current_task_btf = 158,
+	BPF_FUNC_bprm_opts_set = 159,
+	BPF_FUNC_ktime_get_coarse_ns = 160,
+	BPF_FUNC_ima_inode_hash = 161,
+	BPF_FUNC_sock_from_file = 162,
+	BPF_FUNC_check_mtu = 163,
+	BPF_FUNC_for_each_map_elem = 164,
+	BPF_FUNC_snprintf = 165,
+	BPF_FUNC_sys_bpf = 166,
+	BPF_FUNC_btf_find_by_name_kind = 167,
+	BPF_FUNC_sys_close = 168,
+	BPF_FUNC_timer_init = 169,
+	BPF_FUNC_timer_set_callback = 170,
+	BPF_FUNC_timer_start = 171,
+	BPF_FUNC_timer_cancel = 172,
+	BPF_FUNC_get_func_ip = 173,
+	BPF_FUNC_get_attach_cookie = 174,
+	BPF_FUNC_task_pt_regs = 175,
+	BPF_FUNC_get_branch_snapshot = 176,
+	BPF_FUNC_trace_vprintk = 177,
+	BPF_FUNC_skc_to_unix_sock = 178,
+	BPF_FUNC_kallsyms_lookup_name = 179,
+	BPF_FUNC_find_vma = 180,
+	BPF_FUNC_loop = 181,
+	BPF_FUNC_strncmp = 182,
+	BPF_FUNC_get_func_arg = 183,
+	BPF_FUNC_get_func_ret = 184,
+	BPF_FUNC_get_func_arg_cnt = 185,
+	BPF_FUNC_get_retval = 186,
+	BPF_FUNC_set_retval = 187,
+	BPF_FUNC_xdp_get_buff_len = 188,
+	BPF_FUNC_xdp_load_bytes = 189,
+	BPF_FUNC_xdp_store_bytes = 190,
+	BPF_FUNC_copy_from_user_task = 191,
+	BPF_FUNC_skb_set_tstamp = 192,
+	BPF_FUNC_ima_file_hash = 193,
+	BPF_FUNC_kptr_xchg = 194,
+	BPF_FUNC_map_lookup_percpu_elem = 195,
+	BPF_FUNC_skc_to_mptcp_sock = 196,
+	BPF_FUNC_dynptr_from_mem = 197,
+	BPF_FUNC_ringbuf_reserve_dynptr = 198,
+	BPF_FUNC_ringbuf_submit_dynptr = 199,
+	BPF_FUNC_ringbuf_discard_dynptr = 200,
+	BPF_FUNC_dynptr_read = 201,
+	BPF_FUNC_dynptr_write = 202,
+	BPF_FUNC_dynptr_data = 203,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv4 = 204,
+	BPF_FUNC_tcp_raw_gen_syncookie_ipv6 = 205,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv4 = 206,
+	BPF_FUNC_tcp_raw_check_syncookie_ipv6 = 207,
+	BPF_FUNC_ktime_get_tai_ns = 208,
+	BPF_FUNC_user_ringbuf_drain = 209,
+	BPF_FUNC_cgrp_storage_get = 210,
+	BPF_FUNC_cgrp_storage_delete = 211,
+	__BPF_FUNC_MAX_ID = 212,
+};
+
+struct bpf_func_proto;
+
+typedef const struct bpf_func_proto * (*bpf_iter_get_func_proto_t)(enum bpf_func_id, const struct bpf_prog *);
+
+struct bpf_iter_reg {
+	const char *target;
+	bpf_iter_attach_target_t attach_target;
+	bpf_iter_detach_target_t detach_target;
+	bpf_iter_show_fdinfo_t show_fdinfo;
+	bpf_iter_fill_link_info_t fill_link_info;
+	bpf_iter_get_func_proto_t get_func_proto;
+	u32 ctx_arg_info_size;
+	u32 feature;
+	struct bpf_ctx_arg_aux ctx_arg_info[2];
+	const struct bpf_iter_seq_info *seq_info;
+};
+
+union bpf_iter_link_info {
+	struct {
+		__u32 map_fd;
+	} map;
+	struct {
+		enum bpf_cgroup_iter_order order;
+		__u32 cgroup_fd;
+		__u64 cgroup_id;
+	} cgroup;
+	struct {
+		__u32 tid;
+		__u32 pid;
+		__u32 pid_fd;
+	} task;
+};
+
+enum bpf_return_type {
+	RET_INTEGER = 0,
+	RET_VOID = 1,
+	RET_PTR_TO_MAP_VALUE = 2,
+	RET_PTR_TO_SOCKET = 3,
+	RET_PTR_TO_TCP_SOCK = 4,
+	RET_PTR_TO_SOCK_COMMON = 5,
+	RET_PTR_TO_MEM = 6,
+	RET_PTR_TO_MEM_OR_BTF_ID = 7,
+	RET_PTR_TO_BTF_ID = 8,
+	__BPF_RET_TYPE_MAX = 9,
+	RET_PTR_TO_MAP_VALUE_OR_NULL = 258,
+	RET_PTR_TO_SOCKET_OR_NULL = 259,
+	RET_PTR_TO_TCP_SOCK_OR_NULL = 260,
+	RET_PTR_TO_SOCK_COMMON_OR_NULL = 261,
+	RET_PTR_TO_RINGBUF_MEM_OR_NULL = 1286,
+	RET_PTR_TO_DYNPTR_MEM_OR_NULL = 262,
+	RET_PTR_TO_BTF_ID_OR_NULL = 264,
+	RET_PTR_TO_BTF_ID_TRUSTED = 1048584,
+	__BPF_RET_TYPE_LIMIT = 33554431,
+};
+
+enum bpf_arg_type {
+	ARG_DONTCARE = 0,
+	ARG_CONST_MAP_PTR = 1,
+	ARG_PTR_TO_MAP_KEY = 2,
+	ARG_PTR_TO_MAP_VALUE = 3,
+	ARG_PTR_TO_MEM = 4,
+	ARG_CONST_SIZE = 5,
+	ARG_CONST_SIZE_OR_ZERO = 6,
+	ARG_PTR_TO_CTX = 7,
+	ARG_ANYTHING = 8,
+	ARG_PTR_TO_SPIN_LOCK = 9,
+	ARG_PTR_TO_SOCK_COMMON = 10,
+	ARG_PTR_TO_INT = 11,
+	ARG_PTR_TO_LONG = 12,
+	ARG_PTR_TO_SOCKET = 13,
+	ARG_PTR_TO_BTF_ID = 14,
+	ARG_PTR_TO_RINGBUF_MEM = 15,
+	ARG_CONST_ALLOC_SIZE_OR_ZERO = 16,
+	ARG_PTR_TO_BTF_ID_SOCK_COMMON = 17,
+	ARG_PTR_TO_PERCPU_BTF_ID = 18,
+	ARG_PTR_TO_FUNC = 19,
+	ARG_PTR_TO_STACK = 20,
+	ARG_PTR_TO_CONST_STR = 21,
+	ARG_PTR_TO_TIMER = 22,
+	ARG_PTR_TO_KPTR = 23,
+	ARG_PTR_TO_DYNPTR = 24,
+	__BPF_ARG_TYPE_MAX = 25,
+	ARG_PTR_TO_MAP_VALUE_OR_NULL = 259,
+	ARG_PTR_TO_MEM_OR_NULL = 260,
+	ARG_PTR_TO_CTX_OR_NULL = 263,
+	ARG_PTR_TO_SOCKET_OR_NULL = 269,
+	ARG_PTR_TO_STACK_OR_NULL = 276,
+	ARG_PTR_TO_BTF_ID_OR_NULL = 270,
+	ARG_PTR_TO_UNINIT_MEM = 32772,
+	ARG_PTR_TO_FIXED_SIZE_MEM = 262148,
+	__BPF_ARG_TYPE_LIMIT = 33554431,
+};
+
+struct bpf_func_proto {
+	u64 (*func)(u64, u64, u64, u64, u64);
+	bool gpl_only;
+	bool pkt_access;
+	bool might_sleep;
+	enum bpf_return_type ret_type;
+	union {
+		struct {
+			enum bpf_arg_type arg1_type;
+			enum bpf_arg_type arg2_type;
+			enum bpf_arg_type arg3_type;
+			enum bpf_arg_type arg4_type;
+			enum bpf_arg_type arg5_type;
+		};
+		enum bpf_arg_type arg_type[5];
+	};
+	union {
+		struct {
+			u32 *arg1_btf_id;
+			u32 *arg2_btf_id;
+			u32 *arg3_btf_id;
+			u32 *arg4_btf_id;
+			u32 *arg5_btf_id;
+		};
+		u32 *arg_btf_id[5];
+		struct {
+			size_t arg1_size;
+			size_t arg2_size;
+			size_t arg3_size;
+			size_t arg4_size;
+			size_t arg5_size;
+		};
+		size_t arg_size[5];
+	};
+	int *ret_btf_id;
+	bool (*allowed)(const struct bpf_prog *);
+};
+
+struct kallsym_iter {
+	loff_t pos;
+	loff_t pos_mod_end;
+	loff_t pos_ftrace_mod_end;
+	loff_t pos_bpf_end;
+	unsigned long value;
+	unsigned int nameoff;
+	char type;
+	char name[512];
+	char module_name[56];
+	int exported;
+	int show_value;
+};
+
+struct bpf_iter_meta;
+
+struct bpf_iter__ksym {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct kallsym_iter *ksym;
+	};
+};
+
+struct bpf_iter_meta {
+	union {
+		struct seq_file *seq;
+	};
+	u64 session_id;
+	u64 seq_num;
+};
+
+struct cgroup_taskset {
+	struct list_head src_csets;
+	struct list_head dst_csets;
+	int nr_tasks;
+	int ssid;
+	struct list_head *csets;
+	struct css_set *cur_cset;
+	struct task_struct *cur_task;
+};
+
+struct bpf_cgroup_storage_key {
+	__u64 cgroup_inode_id;
+	__u32 attach_type;
+};
+
+struct bpf_storage_buffer;
+
+struct bpf_cgroup_storage_map;
+
+struct bpf_cgroup_storage {
+	union {
+		struct bpf_storage_buffer *buf;
+		void __attribute__((btf_type_tag("percpu"))) *percpu_buf;
+	};
+	struct bpf_cgroup_storage_map *map;
+	struct bpf_cgroup_storage_key key;
+	struct list_head list_map;
+	struct list_head list_cg;
+	struct rb_node node;
+	struct callback_head rcu;
+};
+
+struct bpf_storage_buffer {
+	struct callback_head rcu;
+	char data[0];
+};
+
+typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);
+
+typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);
+
+typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);
+
+typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);
+
+typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);
+
+struct kernfs_fs_context {
+	struct kernfs_root *root;
+	void *ns_tag;
+	unsigned long magic;
+	bool new_sb_created;
+};
+
+struct cgroup_fs_context {
+	struct kernfs_fs_context kfc;
+	struct cgroup_root *root;
+	struct cgroup_namespace *ns;
+	unsigned int flags;
+	bool cpuset_clone_children;
+	bool none;
+	bool all_ss;
+	u16 subsys_mask;
+	char *name;
+	char *release_agent;
+};
+
+struct kernfs_syscall_ops {
+	int (*show_options)(struct seq_file *, struct kernfs_root *);
+	int (*mkdir)(struct kernfs_node *, const char *, umode_t);
+	int (*rmdir)(struct kernfs_node *);
+	int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);
+	int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum {
+	CGRP_ROOT_NOPREFIX = 2,
+	CGRP_ROOT_XATTR = 4,
+	CGRP_ROOT_NS_DELEGATE = 8,
+	CGRP_ROOT_FAVOR_DYNMODS = 16,
+	CGRP_ROOT_CPUSET_V2_MODE = 65536,
+	CGRP_ROOT_MEMORY_LOCAL_EVENTS = 131072,
+	CGRP_ROOT_MEMORY_RECURSIVE_PROT = 262144,
+};
+
+enum kernfs_node_type {
+	KERNFS_DIR = 1,
+	KERNFS_FILE = 2,
+	KERNFS_LINK = 4,
+};
+
+enum {
+	CGRP_NOTIFY_ON_RELEASE = 0,
+	CGRP_CPUSET_CLONE_CHILDREN = 1,
+	CGRP_FREEZE = 2,
+	CGRP_FROZEN = 3,
+	CGRP_KILL = 4,
+};
+
+enum kernfs_root_flag {
+	KERNFS_ROOT_CREATE_DEACTIVATED = 1,
+	KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,
+	KERNFS_ROOT_SUPPORT_EXPORTOP = 4,
+	KERNFS_ROOT_SUPPORT_USER_XATTR = 8,
+};
+
+enum cgroup_opt_features {
+	OPT_FEATURE_PRESSURE = 0,
+	OPT_FEATURE_COUNT = 1,
+};
+
+enum {
+	CFTYPE_ONLY_ON_ROOT = 1,
+	CFTYPE_NOT_ON_ROOT = 2,
+	CFTYPE_NS_DELEGATABLE = 4,
+	CFTYPE_NO_PREFIX = 8,
+	CFTYPE_WORLD_WRITABLE = 16,
+	CFTYPE_DEBUG = 32,
+	__CFTYPE_ONLY_ON_DFL = 65536,
+	__CFTYPE_NOT_ON_DFL = 131072,
+	__CFTYPE_ADDED = 262144,
+};
+
+enum cgroup2_param {
+	Opt_nsdelegate = 0,
+	Opt_favordynmods = 1,
+	Opt_memory_localevents = 2,
+	Opt_memory_recursiveprot = 3,
+	nr__cgroup2_params = 4,
+};
+
+struct cgrp_cset_link {
+	struct cgroup *cgrp;
+	struct css_set *cset;
+	struct list_head cset_link;
+	struct list_head cgrp_link;
+};
+
+struct trace_event_raw_cgroup_root {
+	struct trace_entry ent;
+	int root;
+	u16 ss_mask;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_migrate {
+	struct trace_entry ent;
+	int dst_root;
+	int dst_level;
+	u64 dst_id;
+	int pid;
+	u32 __data_loc_dst_path;
+	u32 __data_loc_comm;
+	char __data[0];
+};
+
+struct trace_event_raw_cgroup_event {
+	struct trace_entry ent;
+	int root;
+	int level;
+	u64 id;
+	u32 __data_loc_path;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cgroup_root {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cgroup {
+	u32 path;
+};
+
+struct trace_event_data_offsets_cgroup_event {
+	u32 path;
+};
+
+struct cgroup_mgctx {
+	struct list_head preloaded_src_csets;
+	struct list_head preloaded_dst_csets;
+	struct cgroup_taskset tset;
+	u16 ss_mask;
+};
+
+struct cgroup_pidlist;
+
+struct cgroup_file_ctx {
+	struct cgroup_namespace *ns;
+	struct {
+		void *trigger;
+	} psi;
+	struct {
+		bool started;
+		struct css_task_iter iter;
+	} procs;
+	struct {
+		struct cgroup_pidlist *pidlist;
+	} procs1;
+};
+
+struct trace_event_data_offsets_cgroup_migrate {
+	u32 dst_path;
+	u32 comm;
+};
+
+typedef int (*btf_kfunc_filter_t)(const struct bpf_prog *, u32);
+
+struct btf_id_set8;
+
+struct btf_kfunc_id_set {
+	struct module *owner;
+	struct btf_id_set8 *set;
+	btf_kfunc_filter_t filter;
+};
+
+struct btf_id_set8 {
+	u32 cnt;
+	u32 flags;
+	struct {
+		u32 id;
+		u32 flags;
+	} pairs[0];
+};
+
+enum cgroup_filetype {
+	CGROUP_FILE_PROCS = 0,
+	CGROUP_FILE_TASKS = 1,
+};
+
+enum cgroup1_param {
+	Opt_all = 0,
+	Opt_clone_children = 1,
+	Opt_cpuset_v2_mode = 2,
+	Opt_name = 3,
+	Opt_none = 4,
+	Opt_noprefix = 5,
+	Opt_release_agent = 6,
+	Opt_xattr = 7,
+	Opt_favordynmods___2 = 8,
+	Opt_nofavordynmods = 9,
+};
+
+struct cgroup_pidlist {
+	struct {
+		enum cgroup_filetype type;
+		struct pid_namespace *ns;
+	} key;
+	pid_t *list;
+	int length;
+	struct list_head links;
+	struct cgroup *owner;
+	struct delayed_work destroy_dwork;
+};
+
+struct cgroupstats {
+	__u64 nr_sleeping;
+	__u64 nr_running;
+	__u64 nr_stopped;
+	__u64 nr_uninterruptible;
+	__u64 nr_io_wait;
+};
+
+enum freezer_state_flags {
+	CGROUP_FREEZER_ONLINE = 1,
+	CGROUP_FREEZING_SELF = 2,
+	CGROUP_FREEZING_PARENT = 4,
+	CGROUP_FROZEN = 8,
+	CGROUP_FREEZING = 6,
+};
+
+struct freezer {
+	struct cgroup_subsys_state css;
+	unsigned int state;
+};
+
+struct fmeter {
+	int cnt;
+	int val;
+	time64_t time;
+	spinlock_t lock;
+};
+
+enum prs_errcode {
+	PERR_NONE = 0,
+	PERR_INVCPUS = 1,
+	PERR_INVPARENT = 2,
+	PERR_NOTPART = 3,
+	PERR_NOTEXCL = 4,
+	PERR_NOCPUS = 5,
+	PERR_HOTPLUG = 6,
+	PERR_CPUSEMPTY = 7,
+};
+
+struct cpuset {
+	struct cgroup_subsys_state css;
+	unsigned long flags;
+	cpumask_var_t cpus_allowed;
+	cpumask_var_t cpus_requested;
+	nodemask_t mems_allowed;
+	cpumask_var_t effective_cpus;
+	nodemask_t effective_mems;
+	cpumask_var_t subparts_cpus;
+	nodemask_t old_mems_allowed;
+	struct fmeter fmeter;
+	int attach_in_progress;
+	int pn;
+	int relax_domain_level;
+	int nr_subparts_cpus;
+	int partition_root_state;
+	int use_parent_ecpus;
+	int child_ecpus_count;
+	int nr_deadline_tasks;
+	int nr_migrate_dl_tasks;
+	u64 sum_migrate_dl_bw;
+	enum prs_errcode prs_err;
+	struct cgroup_file partition_file;
+};
+
+enum subparts_cmd {
+	partcmd_enable = 0,
+	partcmd_disable = 1,
+	partcmd_update = 2,
+	partcmd_invalidate = 3,
+};
+
+enum {
+	ZONELIST_FALLBACK = 0,
+	MAX_ZONELISTS = 1,
+};
+
+struct cpuset_migrate_mm_work {
+	struct work_struct work;
+	struct mm_struct *mm;
+	nodemask_t from;
+	nodemask_t to;
+};
+
+struct tmpmasks {
+	cpumask_var_t addmask;
+	cpumask_var_t delmask;
+	cpumask_var_t new_cpus;
+};
+
+typedef enum {
+	CS_ONLINE = 0,
+	CS_CPU_EXCLUSIVE = 1,
+	CS_MEM_EXCLUSIVE = 2,
+	CS_MEM_HARDWALL = 3,
+	CS_MEMORY_MIGRATE = 4,
+	CS_SCHED_LOAD_BALANCE = 5,
+	CS_SPREAD_PAGE = 6,
+	CS_SPREAD_SLAB = 7,
+} cpuset_flagbits_t;
+
+typedef enum {
+	FILE_MEMORY_MIGRATE = 0,
+	FILE_CPULIST = 1,
+	FILE_MEMLIST = 2,
+	FILE_EFFECTIVE_CPULIST = 3,
+	FILE_EFFECTIVE_MEMLIST = 4,
+	FILE_SUBPARTS_CPULIST = 5,
+	FILE_CPU_EXCLUSIVE = 6,
+	FILE_MEM_EXCLUSIVE = 7,
+	FILE_MEM_HARDWALL = 8,
+	FILE_SCHED_LOAD_BALANCE = 9,
+	FILE_PARTITION_ROOT = 10,
+	FILE_SCHED_RELAX_DOMAIN_LEVEL = 11,
+	FILE_MEMORY_PRESSURE_ENABLED = 12,
+	FILE_MEMORY_PRESSURE = 13,
+	FILE_SPREAD_PAGE = 14,
+	FILE_SPREAD_SLAB = 15,
+} cpuset_filetype_t;
+
+struct cpu_stopper {
+	struct task_struct *thread;
+	raw_spinlock_t lock;
+	bool enabled;
+	struct list_head works;
+	struct cpu_stop_work stop_work;
+	unsigned long caller;
+	cpu_stop_fn_t fn;
+};
+
+struct cpu_stop_done {
+	atomic_t nr_todo;
+	int ret;
+	struct completion completion;
+};
+
+enum multi_stop_state {
+	MULTI_STOP_NONE = 0,
+	MULTI_STOP_PREPARE = 1,
+	MULTI_STOP_DISABLE_IRQ = 2,
+	MULTI_STOP_RUN = 3,
+	MULTI_STOP_EXIT = 4,
+};
+
+struct multi_stop_data {
+	cpu_stop_fn_t fn;
+	void *data;
+	unsigned int num_threads;
+	const struct cpumask *active_cpus;
+	enum multi_stop_state state;
+	atomic_t thread_ack;
+};
+
+struct auditd_connection {
+	struct pid *pid;
+	u32 portid;
+	struct net *net;
+	struct callback_head rcu;
+};
+
+typedef int __kernel_mqd_t;
+
+typedef __kernel_mqd_t mqd_t;
+
+struct mq_attr {
+	__kernel_long_t mq_flags;
+	__kernel_long_t mq_maxmsg;
+	__kernel_long_t mq_msgsize;
+	__kernel_long_t mq_curmsgs;
+	__kernel_long_t __reserved[4];
+};
+
+struct audit_cap_data {
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+	union {
+		unsigned int fE;
+		kernel_cap_t effective;
+	};
+	kernel_cap_t ambient;
+	kuid_t rootid;
+};
+
+struct open_how {
+	__u64 flags;
+	__u64 mode;
+	__u64 resolve;
+};
+
+enum audit_state {
+	AUDIT_STATE_DISABLED = 0,
+	AUDIT_STATE_BUILD = 1,
+	AUDIT_STATE_RECORD = 2,
+};
+
+struct audit_names {
+	struct list_head list;
+	struct filename *name;
+	int name_len;
+	bool hidden;
+	unsigned long ino;
+	dev_t dev;
+	umode_t mode;
+	kuid_t uid;
+	kgid_t gid;
+	dev_t rdev;
+	u32 osid;
+	struct audit_cap_data fcap;
+	unsigned int fcap_ver;
+	unsigned char type;
+	bool should_free;
+};
+
+struct audit_proctitle {
+	int len;
+	char *value;
+};
+
+struct audit_aux_data;
+
+struct __kernel_sockaddr_storage;
+
+struct audit_tree_refs;
+
+struct audit_context {
+	int dummy;
+	enum {
+		AUDIT_CTX_UNUSED = 0,
+		AUDIT_CTX_SYSCALL = 1,
+		AUDIT_CTX_URING = 2,
+	} context;
+	enum audit_state state;
+	enum audit_state current_state;
+	unsigned int serial;
+	int major;
+	int uring_op;
+	struct timespec64 ctime;
+	unsigned long argv[4];
+	long return_code;
+	u64 prio;
+	int return_valid;
+	struct audit_names preallocated_names[5];
+	int name_count;
+	struct list_head names_list;
+	char *filterkey;
+	struct path pwd;
+	struct audit_aux_data *aux;
+	struct audit_aux_data *aux_pids;
+	struct __kernel_sockaddr_storage *sockaddr;
+	size_t sockaddr_len;
+	pid_t ppid;
+	kuid_t uid;
+	kuid_t euid;
+	kuid_t suid;
+	kuid_t fsuid;
+	kgid_t gid;
+	kgid_t egid;
+	kgid_t sgid;
+	kgid_t fsgid;
+	unsigned long personality;
+	int arch;
+	pid_t target_pid;
+	kuid_t target_auid;
+	kuid_t target_uid;
+	unsigned int target_sessionid;
+	u32 target_sid;
+	char target_comm[16];
+	struct audit_tree_refs *trees;
+	struct audit_tree_refs *first_trees;
+	struct list_head killed_trees;
+	int tree_count;
+	int type;
+	union {
+		struct {
+			int nargs;
+			long args[6];
+		} socketcall;
+		struct {
+			kuid_t uid;
+			kgid_t gid;
+			umode_t mode;
+			u32 osid;
+			int has_perm;
+			uid_t perm_uid;
+			gid_t perm_gid;
+			umode_t perm_mode;
+			unsigned long qbytes;
+		} ipc;
+		struct {
+			mqd_t mqdes;
+			struct mq_attr mqstat;
+		} mq_getsetattr;
+		struct {
+			mqd_t mqdes;
+			int sigev_signo;
+		} mq_notify;
+		struct {
+			mqd_t mqdes;
+			size_t msg_len;
+			unsigned int msg_prio;
+			struct timespec64 abs_timeout;
+		} mq_sendrecv;
+		struct {
+			int oflag;
+			umode_t mode;
+			struct mq_attr attr;
+		} mq_open;
+		struct {
+			pid_t pid;
+			struct audit_cap_data cap;
+		} capset;
+		struct {
+			int fd;
+			int flags;
+		} mmap;
+		struct open_how openat2;
+		struct {
+			int argc;
+		} execve;
+		struct {
+			char *name;
+		} module;
+		struct {
+			struct audit_ntp_data ntp_data;
+			struct timespec64 tk_injoffset;
+		} time;
+	};
+	int fds[2];
+	struct audit_proctitle proctitle;
+};
+
+struct __kernel_sockaddr_storage {
+	union {
+		struct {
+			__kernel_sa_family_t ss_family;
+			char __data[126];
+		};
+		void *__align;
+	};
+};
+
+struct audit_ctl_mutex {
+	struct mutex lock;
+	void *owner;
+};
+
+struct pernet_operations {
+	struct list_head list;
+	int (*init)(struct net *);
+	void (*pre_exit)(struct net *);
+	void (*exit)(struct net *);
+	void (*exit_batch)(struct list_head *);
+	unsigned int *id;
+	size_t size;
+};
+
+struct audit_features {
+	__u32 vers;
+	__u32 mask;
+	__u32 features;
+	__u32 lock;
+};
+
+enum skb_drop_reason {
+	SKB_NOT_DROPPED_YET = 0,
+	SKB_CONSUMED = 1,
+	SKB_DROP_REASON_NOT_SPECIFIED = 2,
+	SKB_DROP_REASON_NO_SOCKET = 3,
+	SKB_DROP_REASON_PKT_TOO_SMALL = 4,
+	SKB_DROP_REASON_TCP_CSUM = 5,
+	SKB_DROP_REASON_SOCKET_FILTER = 6,
+	SKB_DROP_REASON_UDP_CSUM = 7,
+	SKB_DROP_REASON_NETFILTER_DROP = 8,
+	SKB_DROP_REASON_OTHERHOST = 9,
+	SKB_DROP_REASON_IP_CSUM = 10,
+	SKB_DROP_REASON_IP_INHDR = 11,
+	SKB_DROP_REASON_IP_RPFILTER = 12,
+	SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST = 13,
+	SKB_DROP_REASON_XFRM_POLICY = 14,
+	SKB_DROP_REASON_IP_NOPROTO = 15,
+	SKB_DROP_REASON_SOCKET_RCVBUFF = 16,
+	SKB_DROP_REASON_PROTO_MEM = 17,
+	SKB_DROP_REASON_TCP_MD5NOTFOUND = 18,
+	SKB_DROP_REASON_TCP_MD5UNEXPECTED = 19,
+	SKB_DROP_REASON_TCP_MD5FAILURE = 20,
+	SKB_DROP_REASON_SOCKET_BACKLOG = 21,
+	SKB_DROP_REASON_TCP_FLAGS = 22,
+	SKB_DROP_REASON_TCP_ZEROWINDOW = 23,
+	SKB_DROP_REASON_TCP_OLD_DATA = 24,
+	SKB_DROP_REASON_TCP_OVERWINDOW = 25,
+	SKB_DROP_REASON_TCP_OFOMERGE = 26,
+	SKB_DROP_REASON_TCP_RFC7323_PAWS = 27,
+	SKB_DROP_REASON_TCP_OLD_SEQUENCE = 28,
+	SKB_DROP_REASON_TCP_INVALID_SEQUENCE = 29,
+	SKB_DROP_REASON_TCP_RESET = 30,
+	SKB_DROP_REASON_TCP_INVALID_SYN = 31,
+	SKB_DROP_REASON_TCP_CLOSE = 32,
+	SKB_DROP_REASON_TCP_FASTOPEN = 33,
+	SKB_DROP_REASON_TCP_OLD_ACK = 34,
+	SKB_DROP_REASON_TCP_TOO_OLD_ACK = 35,
+	SKB_DROP_REASON_TCP_ACK_UNSENT_DATA = 36,
+	SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE = 37,
+	SKB_DROP_REASON_TCP_OFO_DROP = 38,
+	SKB_DROP_REASON_IP_OUTNOROUTES = 39,
+	SKB_DROP_REASON_BPF_CGROUP_EGRESS = 40,
+	SKB_DROP_REASON_IPV6DISABLED = 41,
+	SKB_DROP_REASON_NEIGH_CREATEFAIL = 42,
+	SKB_DROP_REASON_NEIGH_FAILED = 43,
+	SKB_DROP_REASON_NEIGH_QUEUEFULL = 44,
+	SKB_DROP_REASON_NEIGH_DEAD = 45,
+	SKB_DROP_REASON_TC_EGRESS = 46,
+	SKB_DROP_REASON_QDISC_DROP = 47,
+	SKB_DROP_REASON_CPU_BACKLOG = 48,
+	SKB_DROP_REASON_XDP = 49,
+	SKB_DROP_REASON_TC_INGRESS = 50,
+	SKB_DROP_REASON_UNHANDLED_PROTO = 51,
+	SKB_DROP_REASON_SKB_CSUM = 52,
+	SKB_DROP_REASON_SKB_GSO_SEG = 53,
+	SKB_DROP_REASON_SKB_UCOPY_FAULT = 54,
+	SKB_DROP_REASON_DEV_HDR = 55,
+	SKB_DROP_REASON_DEV_READY = 56,
+	SKB_DROP_REASON_FULL_RING = 57,
+	SKB_DROP_REASON_NOMEM = 58,
+	SKB_DROP_REASON_HDR_TRUNC = 59,
+	SKB_DROP_REASON_TAP_FILTER = 60,
+	SKB_DROP_REASON_TAP_TXFILTER = 61,
+	SKB_DROP_REASON_ICMP_CSUM = 62,
+	SKB_DROP_REASON_INVALID_PROTO = 63,
+	SKB_DROP_REASON_IP_INADDRERRORS = 64,
+	SKB_DROP_REASON_IP_INNOROUTES = 65,
+	SKB_DROP_REASON_PKT_TOO_BIG = 66,
+	SKB_DROP_REASON_DUP_FRAG = 67,
+	SKB_DROP_REASON_FRAG_REASM_TIMEOUT = 68,
+	SKB_DROP_REASON_FRAG_TOO_FAR = 69,
+	SKB_DROP_REASON_TCP_MINTTL = 70,
+	SKB_DROP_REASON_IPV6_BAD_EXTHDR = 71,
+	SKB_DROP_REASON_IPV6_NDISC_FRAG = 72,
+	SKB_DROP_REASON_IPV6_NDISC_HOP_LIMIT = 73,
+	SKB_DROP_REASON_IPV6_NDISC_BAD_CODE = 74,
+	SKB_DROP_REASON_IPV6_NDISC_BAD_OPTIONS = 75,
+	SKB_DROP_REASON_IPV6_NDISC_NS_OTHERHOST = 76,
+	SKB_DROP_REASON_QUEUE_PURGE = 77,
+	SKB_DROP_REASON_MAX = 78,
+	SKB_DROP_REASON_SUBSYS_MASK = 4294901760,
+};
+
+enum audit_nlgrps {
+	AUDIT_NLGRP_NONE = 0,
+	AUDIT_NLGRP_READLOG = 1,
+	__AUDIT_NLGRP_MAX = 2,
+};
+
+struct scm_creds {
+	u32 pid;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct netlink_skb_parms {
+	struct scm_creds creds;
+	__u32 portid;
+	__u32 dst_group;
+	__u32 flags;
+	struct sock *sk;
+	bool nsid_is_set;
+	int nsid;
+};
+
+struct audit_reply {
+	__u32 portid;
+	struct net *net;
+	struct sk_buff *skb;
+};
+
+struct audit_net {
+	struct sock *sk;
+};
+
+struct audit_buffer {
+	struct sk_buff *skb;
+	struct audit_context *ctx;
+	gfp_t gfp_mask;
+};
+
+struct netlink_kernel_cfg {
+	unsigned int groups;
+	unsigned int flags;
+	void (*input)(struct sk_buff *);
+	struct mutex *cb_mutex;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	void (*release)(struct sock *, unsigned long *);
+};
+
+struct audit_sig_info {
+	uid_t uid;
+	pid_t pid;
+	char ctx[0];
+};
+
+struct audit_tty_status {
+	__u32 enabled;
+	__u32 log_passwd;
+};
+
+struct audit_status {
+	__u32 mask;
+	__u32 enabled;
+	__u32 failure;
+	__u32 pid;
+	__u32 rate_limit;
+	__u32 backlog_limit;
+	__u32 lost;
+	__u32 backlog;
+	union {
+		__u32 version;
+		__u32 feature_bitmap;
+	};
+	__u32 backlog_wait_time;
+	__u32 backlog_wait_time_actual;
+};
+
+struct audit_netlink_list {
+	__u32 portid;
+	struct net *net;
+	struct sk_buff_head q;
+};
+
+enum {
+	Audit_equal = 0,
+	Audit_not_equal = 1,
+	Audit_bitmask = 2,
+	Audit_bittest = 3,
+	Audit_lt = 4,
+	Audit_gt = 5,
+	Audit_le = 6,
+	Audit_ge = 7,
+	Audit_bad = 8,
+};
+
+struct audit_field;
+
+struct audit_watch;
+
+struct audit_tree;
+
+struct audit_fsnotify_mark;
+
+struct audit_krule {
+	u32 pflags;
+	u32 flags;
+	u32 listnr;
+	u32 action;
+	u32 mask[64];
+	u32 buflen;
+	u32 field_count;
+	char *filterkey;
+	struct audit_field *fields;
+	struct audit_field *arch_f;
+	struct audit_field *inode_f;
+	struct audit_watch *watch;
+	struct audit_tree *tree;
+	struct audit_fsnotify_mark *exe;
+	struct list_head rlist;
+	struct list_head list;
+	u64 prio;
+};
+
+struct audit_entry {
+	struct list_head list;
+	struct callback_head rcu;
+	struct audit_krule rule;
+};
+
+struct audit_field {
+	u32 type;
+	union {
+		u32 val;
+		kuid_t uid;
+		kgid_t gid;
+		struct {
+			char *lsm_str;
+			void *lsm_rule;
+		};
+	};
+	u32 op;
+};
+
+struct audit_rule_data {
+	__u32 flags;
+	__u32 action;
+	__u32 field_count;
+	__u32 mask[64];
+	__u32 fields[64];
+	__u32 values[64];
+	__u32 fieldflags[64];
+	__u32 buflen;
+	char buf[0];
+};
+
+enum audit_nfcfgop {
+	AUDIT_XT_OP_REGISTER = 0,
+	AUDIT_XT_OP_REPLACE = 1,
+	AUDIT_XT_OP_UNREGISTER = 2,
+	AUDIT_NFT_OP_TABLE_REGISTER = 3,
+	AUDIT_NFT_OP_TABLE_UNREGISTER = 4,
+	AUDIT_NFT_OP_CHAIN_REGISTER = 5,
+	AUDIT_NFT_OP_CHAIN_UNREGISTER = 6,
+	AUDIT_NFT_OP_RULE_REGISTER = 7,
+	AUDIT_NFT_OP_RULE_UNREGISTER = 8,
+	AUDIT_NFT_OP_SET_REGISTER = 9,
+	AUDIT_NFT_OP_SET_UNREGISTER = 10,
+	AUDIT_NFT_OP_SETELEM_REGISTER = 11,
+	AUDIT_NFT_OP_SETELEM_UNREGISTER = 12,
+	AUDIT_NFT_OP_GEN_REGISTER = 13,
+	AUDIT_NFT_OP_OBJ_REGISTER = 14,
+	AUDIT_NFT_OP_OBJ_UNREGISTER = 15,
+	AUDIT_NFT_OP_OBJ_RESET = 16,
+	AUDIT_NFT_OP_FLOWTABLE_REGISTER = 17,
+	AUDIT_NFT_OP_FLOWTABLE_UNREGISTER = 18,
+	AUDIT_NFT_OP_SETELEM_RESET = 19,
+	AUDIT_NFT_OP_RULE_RESET = 20,
+	AUDIT_NFT_OP_INVALID = 21,
+};
+
+struct audit_nfcfgop_tab {
+	enum audit_nfcfgop op;
+	const char *s;
+};
+
+struct audit_aux_data {
+	struct audit_aux_data *next;
+	int type;
+};
+
+struct audit_chunk;
+
+struct audit_tree_refs {
+	struct audit_tree_refs *next;
+	struct audit_chunk *c[31];
+};
+
+struct cpu_vfs_cap_data {
+	__u32 magic_etc;
+	kuid_t rootid;
+	kernel_cap_t permitted;
+	kernel_cap_t inheritable;
+};
+
+typedef int __kernel_key_t;
+
+typedef __kernel_key_t key_t;
+
+struct kern_ipc_perm {
+	spinlock_t lock;
+	bool deleted;
+	int id;
+	key_t key;
+	kuid_t uid;
+	kgid_t gid;
+	kuid_t cuid;
+	kgid_t cgid;
+	umode_t mode;
+	unsigned long seq;
+	void *security;
+	struct rhash_head khtnode;
+	struct callback_head rcu;
+	refcount_t refcount;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct audit_aux_data_bprm_fcaps {
+	struct audit_aux_data d;
+	struct audit_cap_data fcap;
+	unsigned int fcap_ver;
+	struct audit_cap_data old_pcap;
+	struct audit_cap_data new_pcap;
+};
+
+struct audit_aux_data_pids {
+	struct audit_aux_data d;
+	pid_t target_pid[16];
+	kuid_t target_auid[16];
+	kuid_t target_uid[16];
+	unsigned int target_sessionid[16];
+	u32 target_sid[16];
+	char target_comm[256];
+	int pid_count;
+};
+
+struct fanotify_response_info_header {
+	__u8 type;
+	__u8 pad;
+	__u16 len;
+};
+
+struct fanotify_response_info_audit_rule {
+	struct fanotify_response_info_header hdr;
+	__u32 rule_number;
+	__u32 subj_trust;
+	__u32 obj_trust;
+};
+
+struct inotify_group_private_data {
+	spinlock_t idr_lock;
+	struct idr idr;
+	struct ucounts *ucounts;
+};
+
+struct fsnotify_ops;
+
+struct fsnotify_event;
+
+struct fsnotify_group {
+	const struct fsnotify_ops *ops;
+	refcount_t refcnt;
+	spinlock_t notification_lock;
+	struct list_head notification_list;
+	wait_queue_head_t notification_waitq;
+	unsigned int q_len;
+	unsigned int max_events;
+	unsigned int priority;
+	bool shutdown;
+	int flags;
+	unsigned int owner_flags;
+	struct mutex mark_mutex;
+	atomic_t user_waits;
+	struct list_head marks_list;
+	struct fasync_struct *fsn_fa;
+	struct fsnotify_event *overflow_event;
+	struct mem_cgroup *memcg;
+	union {
+		void *private;
+		struct inotify_group_private_data inotify_data;
+	};
+};
+
+struct fsnotify_iter_info;
+
+struct fsnotify_mark;
+
+struct fsnotify_ops {
+	int (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *);
+	int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);
+	void (*free_group_priv)(struct fsnotify_group *);
+	void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);
+	void (*free_event)(struct fsnotify_group *, struct fsnotify_event *);
+	void (*free_mark)(struct fsnotify_mark *);
+};
+
+struct fsnotify_iter_info {
+	struct fsnotify_mark *marks[5];
+	struct fsnotify_group *current_group;
+	unsigned int report_mask;
+	int srcu_idx;
+};
+
+struct fsnotify_mark {
+	__u32 mask;
+	refcount_t refcnt;
+	struct fsnotify_group *group;
+	struct list_head g_list;
+	spinlock_t lock;
+	struct hlist_node obj_list;
+	struct fsnotify_mark_connector *connector;
+	__u32 ignore_mask;
+	unsigned int flags;
+};
+
+struct fsnotify_event {
+	struct list_head list;
+};
+
+enum fsnotify_obj_type {
+	FSNOTIFY_OBJ_TYPE_ANY = -1,
+	FSNOTIFY_OBJ_TYPE_INODE = 0,
+	FSNOTIFY_OBJ_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_OBJ_TYPE_SB = 2,
+	FSNOTIFY_OBJ_TYPE_COUNT = 3,
+	FSNOTIFY_OBJ_TYPE_DETACHED = 3,
+};
+
+struct audit_parent {
+	struct list_head watches;
+	struct fsnotify_mark mark;
+};
+
+struct audit_watch {
+	refcount_t count;
+	dev_t dev;
+	char *path;
+	unsigned long ino;
+	struct audit_parent *parent;
+	struct list_head wlist;
+	struct list_head rules;
+};
+
+struct audit_fsnotify_mark {
+	dev_t dev;
+	unsigned long ino;
+	char *path;
+	struct fsnotify_mark mark;
+	struct audit_krule *rule;
+};
+
+enum {
+	HASH_SIZE = 128,
+};
+
+struct audit_node {
+	struct list_head list;
+	struct audit_tree *owner;
+	unsigned int index;
+};
+
+struct audit_chunk {
+	struct list_head hash;
+	unsigned long key;
+	struct fsnotify_mark *mark;
+	struct list_head trees;
+	int count;
+	atomic_long_t refs;
+	struct callback_head head;
+	struct audit_node owners[0];
+};
+
+struct audit_tree {
+	refcount_t count;
+	int goner;
+	struct audit_chunk *root;
+	struct list_head chunks;
+	struct list_head rules;
+	struct list_head list;
+	struct list_head same_root;
+	struct callback_head head;
+	char pathname[0];
+};
+
+struct audit_tree_mark {
+	struct fsnotify_mark mark;
+	struct audit_chunk *chunk;
+};
+
+enum kprobe_slot_state {
+	SLOT_CLEAN = 0,
+	SLOT_DIRTY = 1,
+	SLOT_USED = 2,
+};
+
+enum perf_record_ksymbol_type {
+	PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,
+	PERF_RECORD_KSYMBOL_TYPE_BPF = 1,
+	PERF_RECORD_KSYMBOL_TYPE_OOL = 2,
+	PERF_RECORD_KSYMBOL_TYPE_MAX = 3,
+};
+
+struct kprobe_insn_page {
+	struct list_head list;
+	kprobe_opcode_t *insns;
+	struct kprobe_insn_cache *cache;
+	int nused;
+	int ngarbage;
+	char slot_used[0];
+};
+
+struct kprobe_blacklist_entry {
+	struct list_head list;
+	unsigned long start_addr;
+	unsigned long end_addr;
+};
+
+struct kretprobe_instance;
+
+typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);
+
+struct kretprobe {
+	struct kprobe kp;
+	kretprobe_handler_t handler;
+	kretprobe_handler_t entry_handler;
+	int maxactive;
+	int nmissed;
+	size_t data_size;
+	struct rethook *rh;
+};
+
+struct kretprobe_instance {
+	struct rethook_node node;
+	char data[0];
+};
+
+typedef void (*rethook_handler_t)(struct rethook_node *, void *, unsigned long, struct pt_regs *);
+
+enum stats_per_group {
+	STATS_SYSTEM = 0,
+	STATS_SOFTIRQ = 1,
+	STATS_HARDIRQ = 2,
+	STATS_IDLE = 3,
+	NUM_STATS_PER_GROUP = 4,
+};
+
+struct action_cache {
+	unsigned long allow_native[8];
+	unsigned long allow_compat[8];
+};
+
+struct notification;
+
+struct seccomp_filter {
+	refcount_t refs;
+	refcount_t users;
+	bool log;
+	bool wait_killable_recv;
+	struct action_cache cache;
+	struct seccomp_filter *prev;
+	struct bpf_prog *prog;
+	struct notification *notif;
+	struct mutex notify_lock;
+	wait_queue_head_t wqh;
+};
+
+struct notification {
+	atomic_t requests;
+	u32 flags;
+	u64 next_id;
+	struct list_head notifications;
+};
+
+struct seccomp_log_name {
+	u32 log;
+	const char *name;
+};
+
+enum notify_state {
+	SECCOMP_NOTIFY_INIT = 0,
+	SECCOMP_NOTIFY_SENT = 1,
+	SECCOMP_NOTIFY_REPLIED = 2,
+};
+
+struct seccomp_kaddfd {
+	struct file *file;
+	int fd;
+	unsigned int flags;
+	__u32 ioctl_flags;
+	union {
+		bool setfd;
+		int ret;
+	};
+	struct completion completion;
+	struct list_head list;
+};
+
+struct seccomp_knotif {
+	struct task_struct *task;
+	u64 id;
+	const struct seccomp_data *data;
+	enum notify_state state;
+	int error;
+	long val;
+	u32 flags;
+	struct completion ready;
+	struct list_head list;
+	struct list_head addfd;
+};
+
+typedef unsigned int (*bpf_dispatcher_fn)(const void *, const struct bpf_insn *, unsigned int (*)(const void *, const struct bpf_insn *));
+
+typedef unsigned int (*bpf_func_t)(const void *, const struct bpf_insn *);
+
+struct sock_fprog {
+	unsigned short len;
+	struct sock_filter __attribute__((btf_type_tag("user"))) *filter;
+};
+
+struct compat_sock_fprog {
+	u16 len;
+	compat_uptr_t filter;
+};
+
+struct seccomp_notif_sizes {
+	__u16 seccomp_notif;
+	__u16 seccomp_notif_resp;
+	__u16 seccomp_data;
+};
+
+typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);
+
+struct seccomp_notif {
+	__u64 id;
+	__u32 pid;
+	__u32 flags;
+	struct seccomp_data data;
+};
+
+struct seccomp_notif_resp {
+	__u64 id;
+	__s64 val;
+	__s32 error;
+	__u32 flags;
+};
+
+struct seccomp_notif_addfd {
+	__u64 id;
+	__u32 flags;
+	__u32 srcfd;
+	__u32 newfd;
+	__u32 newfd_flags;
+};
+
+struct listener_list {
+	struct rw_semaphore sem;
+	struct list_head list;
+};
+
+struct genl_split_ops;
+
+struct genl_info;
+
+struct genl_ops;
+
+struct genl_small_ops;
+
+struct genl_multicast_group;
+
+struct genl_family {
+	unsigned int hdrsize;
+	char name[16];
+	unsigned int version;
+	unsigned int maxattr;
+	u8 netnsok: 1;
+	u8 parallel_ops: 1;
+	u8 n_ops;
+	u8 n_small_ops;
+	u8 n_split_ops;
+	u8 n_mcgrps;
+	u8 resv_start_op;
+	const struct nla_policy *policy;
+	int (*pre_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+	void (*post_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+	const struct genl_ops *ops;
+	const struct genl_small_ops *small_ops;
+	const struct genl_split_ops *split_ops;
+	const struct genl_multicast_group *mcgrps;
+	struct module *module;
+	int id;
+	unsigned int mcgrp_offset;
+	u64 android_kabi_reserved1;
+};
+
+struct genl_split_ops {
+	union {
+		struct {
+			int (*pre_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+			int (*doit)(struct sk_buff *, struct genl_info *);
+			void (*post_doit)(const struct genl_split_ops *, struct sk_buff *, struct genl_info *);
+		};
+		struct {
+			int (*start)(struct netlink_callback *);
+			int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+			int (*done)(struct netlink_callback *);
+		};
+	};
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct genlmsghdr;
+
+struct genl_info {
+	u32 snd_seq;
+	u32 snd_portid;
+	const struct genl_family *family;
+	const struct nlmsghdr *nlhdr;
+	struct genlmsghdr *genlhdr;
+	struct nlattr **attrs;
+	possible_net_t _net;
+	void *user_ptr[2];
+	struct netlink_ext_ack *extack;
+};
+
+struct genlmsghdr {
+	__u8 cmd;
+	__u8 version;
+	__u16 reserved;
+};
+
+struct genl_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*start)(struct netlink_callback *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+	u64 android_kabi_reserved1;
+};
+
+struct genl_small_ops {
+	int (*doit)(struct sk_buff *, struct genl_info *);
+	int (*dumpit)(struct sk_buff *, struct netlink_callback *);
+	u8 cmd;
+	u8 internal_flags;
+	u8 flags;
+	u8 validate;
+};
+
+struct genl_multicast_group {
+	char name[16];
+	u8 flags;
+	u8 cap_sys_admin: 1;
+};
+
+enum {
+	TASKSTATS_CMD_UNSPEC = 0,
+	TASKSTATS_CMD_GET = 1,
+	TASKSTATS_CMD_NEW = 2,
+	__TASKSTATS_CMD_MAX = 3,
+};
+
+enum {
+	TASKSTATS_TYPE_UNSPEC = 0,
+	TASKSTATS_TYPE_PID = 1,
+	TASKSTATS_TYPE_TGID = 2,
+	TASKSTATS_TYPE_STATS = 3,
+	TASKSTATS_TYPE_AGGR_PID = 4,
+	TASKSTATS_TYPE_AGGR_TGID = 5,
+	TASKSTATS_TYPE_NULL = 6,
+	__TASKSTATS_TYPE_MAX = 7,
+};
+
+enum {
+	TASKSTATS_CMD_ATTR_UNSPEC = 0,
+	TASKSTATS_CMD_ATTR_PID = 1,
+	TASKSTATS_CMD_ATTR_TGID = 2,
+	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 3,
+	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 4,
+	__TASKSTATS_CMD_ATTR_MAX = 5,
+};
+
+enum actions {
+	REGISTER = 0,
+	DEREGISTER = 1,
+	CPU_DONT_CARE = 2,
+};
+
+enum {
+	CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
+	CGROUPSTATS_CMD_ATTR_FD = 1,
+	__CGROUPSTATS_CMD_ATTR_MAX = 2,
+};
+
+enum {
+	CGROUPSTATS_CMD_UNSPEC = 3,
+	CGROUPSTATS_CMD_GET = 4,
+	CGROUPSTATS_CMD_NEW = 5,
+	__CGROUPSTATS_CMD_MAX = 6,
+};
+
+enum {
+	CGROUPSTATS_TYPE_UNSPEC = 0,
+	CGROUPSTATS_TYPE_CGROUP_STATS = 1,
+	__CGROUPSTATS_TYPE_MAX = 2,
+};
+
+struct listener {
+	struct list_head list;
+	pid_t pid;
+	char valid;
+};
+
+struct tp_transition_snapshot {
+	unsigned long rcu;
+	unsigned long srcu;
+	bool ongoing;
+};
+
+enum tp_func_state {
+	TP_FUNC_0 = 0,
+	TP_FUNC_1 = 1,
+	TP_FUNC_2 = 2,
+	TP_FUNC_N = 3,
+};
+
+enum tp_transition_sync {
+	TP_TRANSITION_SYNC_1_0_1 = 0,
+	TP_TRANSITION_SYNC_N_2_1 = 1,
+	_NR_TP_TRANSITION_SYNC = 2,
+};
+
+struct tp_module {
+	struct list_head list;
+	struct module *mod;
+};
+
+struct tp_probes {
+	struct callback_head rcu;
+	struct tracepoint_func probes[0];
+};
+
+enum ring_buffer_type {
+	RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,
+	RINGBUF_TYPE_PADDING = 29,
+	RINGBUF_TYPE_TIME_EXTEND = 30,
+	RINGBUF_TYPE_TIME_STAMP = 31,
+};
+
+enum {
+	RB_LEN_TIME_EXTEND = 8,
+	RB_LEN_TIME_STAMP = 8,
+};
+
+enum ring_buffer_flags {
+	RB_FL_OVERWRITE = 1,
+};
+
+enum {
+	RB_CTX_TRANSITION = 0,
+	RB_CTX_NMI = 1,
+	RB_CTX_IRQ = 2,
+	RB_CTX_SOFTIRQ = 3,
+	RB_CTX_NORMAL = 4,
+	RB_CTX_MAX = 5,
+};
+
+enum {
+	RB_ADD_STAMP_NONE = 0,
+	RB_ADD_STAMP_EXTEND = 2,
+	RB_ADD_STAMP_ABSOLUTE = 4,
+	RB_ADD_STAMP_FORCE = 8,
+};
+
+struct buffer_data_page;
+
+struct buffer_page {
+	struct list_head list;
+	local_t write;
+	unsigned int read;
+	local_t entries;
+	unsigned long real_end;
+	struct buffer_data_page *page;
+	u32 id;
+};
+
+struct buffer_data_page {
+	u64 time_stamp;
+	local_t commit;
+	unsigned char data[0];
+};
+
+struct ring_buffer_per_cpu;
+
+struct ring_buffer_iter {
+	struct ring_buffer_per_cpu *cpu_buffer;
+	unsigned long head;
+	unsigned long next_event;
+	struct buffer_page *head_page;
+	struct buffer_page *cache_reader_page;
+	unsigned long cache_read;
+	unsigned long cache_pages_removed;
+	u64 read_stamp;
+	u64 page_stamp;
+	struct ring_buffer_event *event;
+	int missed_events;
+};
+
+struct rb_time_struct {
+	local64_t time;
+};
+
+typedef struct rb_time_struct rb_time_t;
+
+struct rb_irq_work {
+	struct irq_work work;
+	wait_queue_head_t waiters;
+	wait_queue_head_t full_waiters;
+	bool waiters_pending;
+	bool full_waiters_pending;
+	bool wakeup_full;
+};
+
+struct ring_buffer_meta;
+
+struct ring_buffer_writer;
+
+struct ring_buffer_per_cpu {
+	int cpu;
+	atomic_t record_disabled;
+	atomic_t resize_disabled;
+	struct trace_buffer *buffer;
+	raw_spinlock_t reader_lock;
+	arch_spinlock_t lock;
+	struct lock_class_key lock_key;
+	struct buffer_data_page *free_page;
+	unsigned long nr_pages;
+	unsigned int current_context;
+	struct list_head *pages;
+	struct buffer_page *head_page;
+	struct buffer_page *tail_page;
+	struct buffer_page *commit_page;
+	struct buffer_page *reader_page;
+	unsigned long lost_events;
+	unsigned long last_overrun;
+	unsigned long nest;
+	local_t entries_bytes;
+	local_t entries;
+	local_t overrun;
+	local_t commit_overrun;
+	local_t dropped_events;
+	local_t committing;
+	local_t commits;
+	local_t pages_touched;
+	local_t pages_lost;
+	local_t pages_read;
+	long last_pages_touch;
+	size_t shortest_full;
+	unsigned long read;
+	unsigned long read_bytes;
+	rb_time_t write_stamp;
+	rb_time_t before_stamp;
+	u64 event_stamp[5];
+	u64 read_stamp;
+	unsigned long pages_removed;
+	int mapped;
+	struct mutex mapping_lock;
+	unsigned long *page_ids;
+	struct ring_buffer_meta *meta_page;
+	struct ring_buffer_writer *writer;
+	long nr_pages_to_update;
+	struct list_head new_pages;
+	struct work_struct update_pages_work;
+	struct completion update_done;
+	struct rb_irq_work irq_work;
+};
+
+struct trace_buffer {
+	unsigned int flags;
+	int cpus;
+	atomic_t record_disabled;
+	atomic_t resizing;
+	cpumask_var_t cpumask;
+	struct lock_class_key *reader_lock_key;
+	struct mutex mutex;
+	struct ring_buffer_per_cpu **buffers;
+	struct ring_buffer_writer *writer;
+	struct hlist_node node;
+	u64 (*clock)();
+	struct rb_irq_work irq_work;
+	bool time_stamp_abs;
+};
+
+struct trace_page_desc;
+
+struct ring_buffer_writer {
+	struct trace_page_desc *pdesc;
+	int (*get_reader_page)(int);
+};
+
+struct trace_page_desc {
+	int nr_cpus;
+	char __data[0];
+};
+
+struct reader_page {
+	__u32 id;
+	__u32 read;
+	unsigned long lost_events;
+};
+
+struct ring_buffer_meta {
+	unsigned long entries;
+	unsigned long overrun;
+	unsigned long read;
+	unsigned long pages_touched;
+	unsigned long pages_lost;
+	unsigned long pages_read;
+	__u32 meta_page_size;
+	__u32 nr_data_pages;
+	struct reader_page reader_page;
+};
+
+struct rb_page_desc {
+	int cpu;
+	int nr_page_va;
+	unsigned long meta_va;
+	unsigned long page_va[0];
+};
+
+struct rb_event_info {
+	u64 ts;
+	u64 delta;
+	u64 before;
+	u64 after;
+	unsigned long length;
+	struct buffer_page *tail_page;
+	int add_timestamp;
+};
+
+typedef bool (*ring_buffer_cond_fn)(void *);
+
+struct trace_array_cpu;
+
+struct array_buffer {
+	struct trace_array *tr;
+	struct trace_buffer *buffer;
+	struct trace_array_cpu __attribute__((btf_type_tag("percpu"))) *data;
+	u64 time_start;
+	int cpu;
+};
+
+struct trace_pid_list;
+
+struct trace_options;
+
+struct trace_func_repeats;
+
+struct trace_array {
+	struct list_head list;
+	char *name;
+	struct array_buffer array_buffer;
+	struct trace_pid_list __attribute__((btf_type_tag("rcu"))) *filtered_pids;
+	struct trace_pid_list __attribute__((btf_type_tag("rcu"))) *filtered_no_pids;
+	arch_spinlock_t max_lock;
+	int buffer_disabled;
+	int stop_count;
+	int clock_id;
+	int nr_topts;
+	bool clear_trace;
+	int buffer_percent;
+	unsigned int n_err_log_entries;
+	struct tracer *current_trace;
+	unsigned int trace_flags;
+	unsigned char trace_flags_index[32];
+	unsigned int flags;
+	raw_spinlock_t start_lock;
+	struct list_head err_log;
+	struct dentry *dir;
+	struct dentry *options;
+	struct dentry *percpu_dir;
+	struct eventfs_inode *event_dir;
+	struct trace_options *topts;
+	struct list_head systems;
+	struct list_head events;
+	struct trace_event_file *trace_marker_file;
+	cpumask_var_t tracing_cpumask;
+	cpumask_var_t pipe_cpumask;
+	int ref;
+	int trace_ref;
+	int no_filter_buffering_ref;
+	struct list_head hist_vars;
+	struct trace_func_repeats __attribute__((btf_type_tag("percpu"))) *last_func_repeats;
+};
+
+struct trace_array_cpu {
+	atomic_t disabled;
+	void *buffer_page;
+	unsigned long entries;
+	unsigned long saved_latency;
+	unsigned long critical_start;
+	unsigned long critical_end;
+	unsigned long critical_sequence;
+	unsigned long nice;
+	unsigned long policy;
+	unsigned long rt_priority;
+	unsigned long skipped_entries;
+	u64 preempt_timestamp;
+	pid_t pid;
+	kuid_t uid;
+	char comm[16];
+	bool ignore_pid;
+};
+
+union upper_chunk;
+
+union lower_chunk;
+
+struct trace_pid_list {
+	raw_spinlock_t lock;
+	struct irq_work refill_irqwork;
+	union upper_chunk *upper[256];
+	union upper_chunk *upper_list;
+	union lower_chunk *lower_list;
+	int free_upper_chunks;
+	int free_lower_chunks;
+};
+
+union upper_chunk {
+	union upper_chunk *next;
+	union lower_chunk *data[256];
+};
+
+union lower_chunk {
+	union lower_chunk *next;
+	unsigned long data[256];
+};
+
+struct tracer_flags;
+
+struct tracer {
+	const char *name;
+	int (*init)(struct trace_array *);
+	void (*reset)(struct trace_array *);
+	void (*start)(struct trace_array *);
+	void (*stop)(struct trace_array *);
+	int (*update_thresh)(struct trace_array *);
+	void (*open)(struct trace_iterator *);
+	void (*pipe_open)(struct trace_iterator *);
+	void (*close)(struct trace_iterator *);
+	void (*pipe_close)(struct trace_iterator *);
+	ssize_t (*read)(struct trace_iterator *, struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+	void (*print_header)(struct seq_file *);
+	enum print_line_t (*print_line)(struct trace_iterator *);
+	int (*set_flag)(struct trace_array *, u32, u32, int);
+	int (*flag_changed)(struct trace_array *, u32, int);
+	struct tracer *next;
+	struct tracer_flags *flags;
+	int enabled;
+	bool print_max;
+	bool allow_instances;
+	bool noboot;
+};
+
+struct tracer_opt;
+
+struct tracer_flags {
+	u32 val;
+	struct tracer_opt *opts;
+	struct tracer *trace;
+};
+
+struct tracer_opt {
+	const char *name;
+	u32 bit;
+};
+
+struct trace_option_dentry;
+
+struct trace_options {
+	struct tracer *tracer;
+	struct trace_option_dentry *topts;
+};
+
+struct trace_option_dentry {
+	struct tracer_opt *opt;
+	struct tracer_flags *flags;
+	struct trace_array *tr;
+	struct dentry *entry;
+};
+
+struct filter_pred;
+
+struct prog_entry {
+	int target;
+	int when_to_branch;
+	struct filter_pred *pred;
+};
+
+struct event_subsystem;
+
+struct trace_subsystem_dir {
+	struct list_head list;
+	struct event_subsystem *subsystem;
+	struct trace_array *tr;
+	struct eventfs_inode *ei;
+	int ref_count;
+	int nr_events;
+};
+
+struct event_subsystem {
+	struct list_head list;
+	const char *name;
+	struct event_filter *filter;
+	int ref_count;
+};
+
+struct trace_func_repeats {
+	unsigned long ip;
+	unsigned long parent_ip;
+	unsigned long count;
+	u64 ts_last_call;
+};
+
+struct trace_export {
+	struct trace_export __attribute__((btf_type_tag("rcu"))) *next;
+	void (*write)(struct trace_export *, const void *, unsigned int);
+	int flags;
+};
+
+struct saved_cmdlines_buffer {
+	unsigned int map_pid_to_cmdline[32769];
+	unsigned int *map_cmdline_to_pid;
+	unsigned int cmdline_num;
+	int cmdline_idx;
+	char saved_cmdlines[0];
+};
+
+struct ftrace_stack {
+	unsigned long calls[1024];
+};
+
+struct ftrace_stacks {
+	struct ftrace_stack stacks[4];
+};
+
+struct trace_buffer_struct {
+	int nesting;
+	char buffer[4096];
+};
+
+enum trace_iterator_flags {
+	TRACE_ITER_PRINT_PARENT = 1,
+	TRACE_ITER_SYM_OFFSET = 2,
+	TRACE_ITER_SYM_ADDR = 4,
+	TRACE_ITER_VERBOSE = 8,
+	TRACE_ITER_RAW = 16,
+	TRACE_ITER_HEX = 32,
+	TRACE_ITER_BIN = 64,
+	TRACE_ITER_BLOCK = 128,
+	TRACE_ITER_FIELDS = 256,
+	TRACE_ITER_PRINTK = 512,
+	TRACE_ITER_ANNOTATE = 1024,
+	TRACE_ITER_USERSTACKTRACE = 2048,
+	TRACE_ITER_SYM_USEROBJ = 4096,
+	TRACE_ITER_PRINTK_MSGONLY = 8192,
+	TRACE_ITER_CONTEXT_INFO = 16384,
+	TRACE_ITER_LATENCY_FMT = 32768,
+	TRACE_ITER_RECORD_CMD = 65536,
+	TRACE_ITER_RECORD_TGID = 131072,
+	TRACE_ITER_OVERWRITE = 262144,
+	TRACE_ITER_STOP_ON_FREE = 524288,
+	TRACE_ITER_IRQ_INFO = 1048576,
+	TRACE_ITER_MARKERS = 2097152,
+	TRACE_ITER_EVENT_FORK = 4194304,
+	TRACE_ITER_PAUSE_ON_TRACE = 8388608,
+	TRACE_ITER_HASH_PTR = 16777216,
+	TRACE_ITER_STACKTRACE = 33554432,
+};
+
+enum trace_type {
+	__TRACE_FIRST_TYPE = 0,
+	TRACE_FN = 1,
+	TRACE_CTX = 2,
+	TRACE_WAKE = 3,
+	TRACE_STACK = 4,
+	TRACE_PRINT = 5,
+	TRACE_BPRINT = 6,
+	TRACE_MMIO_RW = 7,
+	TRACE_MMIO_MAP = 8,
+	TRACE_BRANCH = 9,
+	TRACE_GRAPH_RET = 10,
+	TRACE_GRAPH_ENT = 11,
+	TRACE_USER_STACK = 12,
+	TRACE_BLK = 13,
+	TRACE_BPUTS = 14,
+	TRACE_HWLAT = 15,
+	TRACE_OSNOISE = 16,
+	TRACE_TIMERLAT = 17,
+	TRACE_RAW_DATA = 18,
+	TRACE_FUNC_REPEATS = 19,
+	__TRACE_LAST_TYPE = 20,
+};
+
+enum trace_flag_type {
+	TRACE_FLAG_IRQS_OFF = 1,
+	TRACE_FLAG_IRQS_NOSUPPORT = 2,
+	TRACE_FLAG_NEED_RESCHED = 4,
+	TRACE_FLAG_HARDIRQ = 8,
+	TRACE_FLAG_SOFTIRQ = 16,
+	TRACE_FLAG_PREEMPT_RESCHED = 32,
+	TRACE_FLAG_NMI = 64,
+	TRACE_FLAG_BH_OFF = 128,
+};
+
+enum event_trigger_type {
+	ETT_NONE = 0,
+	ETT_TRACE_ONOFF = 1,
+	ETT_SNAPSHOT = 2,
+	ETT_STACKTRACE = 4,
+	ETT_EVENT_ENABLE = 8,
+	ETT_EVENT_HIST = 16,
+	ETT_HIST_ENABLE = 32,
+	ETT_EVENT_EPROBE = 64,
+};
+
+enum trace_iter_flags {
+	TRACE_FILE_LAT_FMT = 1,
+	TRACE_FILE_ANNOTATE = 2,
+	TRACE_FILE_TIME_IN_NS = 4,
+};
+
+enum {
+	EVENT_FILE_FL_ENABLED_BIT = 0,
+	EVENT_FILE_FL_RECORDED_CMD_BIT = 1,
+	EVENT_FILE_FL_RECORDED_TGID_BIT = 2,
+	EVENT_FILE_FL_FILTERED_BIT = 3,
+	EVENT_FILE_FL_NO_SET_FILTER_BIT = 4,
+	EVENT_FILE_FL_SOFT_MODE_BIT = 5,
+	EVENT_FILE_FL_SOFT_DISABLED_BIT = 6,
+	EVENT_FILE_FL_TRIGGER_MODE_BIT = 7,
+	EVENT_FILE_FL_TRIGGER_COND_BIT = 8,
+	EVENT_FILE_FL_PID_FILTER_BIT = 9,
+	EVENT_FILE_FL_WAS_ENABLED_BIT = 10,
+	EVENT_FILE_FL_FREED_BIT = 11,
+};
+
+enum {
+	TRACE_ARRAY_FL_GLOBAL = 1,
+};
+
+struct err_info {
+	const char **errs;
+	u8 type;
+	u16 pos;
+	u64 ts;
+};
+
+struct tracing_log_err {
+	struct list_head list;
+	struct err_info info;
+	char loc[128];
+	char *cmd;
+};
+
+struct buffer_ref {
+	struct trace_buffer *buffer;
+	void *page;
+	int cpu;
+	refcount_t refcount;
+};
+
+struct trace_parser {
+	bool cont;
+	char *buffer;
+	unsigned int idx;
+	unsigned int size;
+};
+
+struct userstack_entry {
+	struct trace_entry ent;
+	unsigned int tgid;
+	unsigned long caller[8];
+};
+
+struct func_repeats_entry {
+	struct trace_entry ent;
+	unsigned long ip;
+	unsigned long parent_ip;
+	u16 count;
+	u16 top_delta_ts;
+	u32 bottom_delta_ts;
+};
+
+typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);
+
+struct partial_page;
+
+struct splice_pipe_desc {
+	struct page **pages;
+	struct partial_page *partial;
+	int nr_pages;
+	unsigned int nr_pages_max;
+	const struct pipe_buf_operations *ops;
+	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
+};
+
+struct partial_page {
+	unsigned int offset;
+	unsigned int len;
+	unsigned long private;
+};
+
+struct print_entry {
+	struct trace_entry ent;
+	unsigned long ip;
+	char buf[0];
+};
+
+struct bputs_entry {
+	struct trace_entry ent;
+	unsigned long ip;
+	const char *str;
+};
+
+typedef bool (*cond_update_fn_t)(struct trace_array *, void *);
+
+struct ftrace_entry {
+	struct trace_entry ent;
+	unsigned long ip;
+	unsigned long parent_ip;
+};
+
+struct stack_entry {
+	struct trace_entry ent;
+	int size;
+	unsigned long caller[0];
+};
+
+struct bprint_entry {
+	struct trace_entry ent;
+	unsigned long ip;
+	const char *fmt;
+	u32 buf[0];
+};
+
+struct trace_min_max_param {
+	struct mutex *lock;
+	u64 *val;
+	u64 *min;
+	u64 *max;
+};
+
+struct raw_data_entry {
+	struct trace_entry ent;
+	unsigned int id;
+	char buf[0];
+};
+
+struct ftrace_buffer_info {
+	struct trace_iterator iter;
+	void *spare;
+	unsigned int spare_cpu;
+	unsigned int read;
+};
+
+struct trace_mark {
+	unsigned long long val;
+	char sym;
+};
+
+enum {
+	FILTER_OTHER = 0,
+	FILTER_STATIC_STRING = 1,
+	FILTER_DYN_STRING = 2,
+	FILTER_RDYN_STRING = 3,
+	FILTER_PTR_STRING = 4,
+	FILTER_TRACE_FN = 5,
+	FILTER_CPUMASK = 6,
+	FILTER_COMM = 7,
+	FILTER_CPU = 8,
+	FILTER_STACKTRACE = 9,
+};
+
+struct ftrace_event_field {
+	struct list_head link;
+	const char *name;
+	const char *type;
+	int filter_type;
+	int offset;
+	int size;
+	int is_signed;
+	int len;
+};
+
+struct ctx_switch_entry {
+	struct trace_entry ent;
+	unsigned int prev_pid;
+	unsigned int next_pid;
+	unsigned int next_cpu;
+	unsigned char prev_prio;
+	unsigned char prev_state;
+	unsigned char next_prio;
+	unsigned char next_state;
+};
+
+struct hwlat_entry {
+	struct trace_entry ent;
+	u64 duration;
+	u64 outer_duration;
+	u64 nmi_total_ts;
+	struct timespec64 timestamp;
+	unsigned int nmi_count;
+	unsigned int seqnum;
+	unsigned int count;
+};
+
+struct osnoise_entry {
+	struct trace_entry ent;
+	u64 noise;
+	u64 runtime;
+	u64 max_sample;
+	unsigned int hw_count;
+	unsigned int nmi_count;
+	unsigned int irq_count;
+	unsigned int softirq_count;
+	unsigned int thread_count;
+};
+
+struct timerlat_entry {
+	struct trace_entry ent;
+	unsigned int seqnum;
+	int context;
+	u64 timer_latency;
+};
+
+struct tracer_stat;
+
+struct stat_session {
+	struct list_head session_list;
+	struct tracer_stat *ts;
+	struct rb_root stat_root;
+	struct mutex stat_mutex;
+	struct dentry *file;
+};
+
+struct tracer_stat {
+	const char *name;
+	void * (*stat_start)(struct tracer_stat *);
+	void * (*stat_next)(void *, int);
+	cmp_func_t stat_cmp;
+	int (*stat_show)(struct seq_file *, void *);
+	void (*stat_release)(void *);
+	int (*stat_headers)(struct seq_file *);
+};
+
+struct stat_node {
+	struct rb_node node;
+	void *stat;
+};
+
+struct trace_bprintk_fmt {
+	struct list_head list;
+	const char *fmt;
+};
+
+struct tracing_map;
+
+struct tracing_map_field;
+
+struct tracing_map_elt {
+	struct tracing_map *map;
+	struct tracing_map_field *fields;
+	atomic64_t *vars;
+	bool *var_set;
+	void *key;
+	void *private_data;
+};
+
+typedef int (*tracing_map_cmp_fn_t)(void *, void *);
+
+struct tracing_map_field {
+	tracing_map_cmp_fn_t cmp_fn;
+	union {
+		atomic64_t sum;
+		unsigned int offset;
+	};
+};
+
+struct tracing_map_sort_key {
+	unsigned int field_idx;
+	bool descending;
+};
+
+struct tracing_map_array;
+
+struct tracing_map_ops;
+
+struct tracing_map {
+	unsigned int key_size;
+	unsigned int map_bits;
+	unsigned int map_size;
+	unsigned int max_elts;
+	atomic_t next_elt;
+	struct tracing_map_array *elts;
+	struct tracing_map_array *map;
+	const struct tracing_map_ops *ops;
+	void *private_data;
+	struct tracing_map_field fields[6];
+	unsigned int n_fields;
+	int key_idx[3];
+	unsigned int n_keys;
+	struct tracing_map_sort_key sort_key;
+	unsigned int n_vars;
+	atomic64_t hits;
+	atomic64_t drops;
+};
+
+struct tracing_map_array {
+	unsigned int entries_per_page;
+	unsigned int entry_size_shift;
+	unsigned int entry_shift;
+	unsigned int entry_mask;
+	unsigned int n_pages;
+	void **pages;
+};
+
+struct tracing_map_ops {
+	int (*elt_alloc)(struct tracing_map_elt *);
+	void (*elt_free)(struct tracing_map_elt *);
+	void (*elt_clear)(struct tracing_map_elt *);
+	void (*elt_init)(struct tracing_map_elt *);
+};
+
+struct tracing_map_entry {
+	u32 key;
+	struct tracing_map_elt *val;
+};
+
+struct tracing_map_sort_entry {
+	void *key;
+	struct tracing_map_elt *elt;
+	bool elt_copied;
+	bool dup;
+};
+
+enum {
+	TRACE_NOP_OPT_ACCEPT = 1,
+	TRACE_NOP_OPT_REFUSE = 2,
+};
+
+enum req_flag_bits {
+	__REQ_FAILFAST_DEV = 8,
+	__REQ_FAILFAST_TRANSPORT = 9,
+	__REQ_FAILFAST_DRIVER = 10,
+	__REQ_SYNC = 11,
+	__REQ_META = 12,
+	__REQ_PRIO = 13,
+	__REQ_NOMERGE = 14,
+	__REQ_IDLE = 15,
+	__REQ_INTEGRITY = 16,
+	__REQ_FUA = 17,
+	__REQ_PREFLUSH = 18,
+	__REQ_RAHEAD = 19,
+	__REQ_BACKGROUND = 20,
+	__REQ_NOWAIT = 21,
+	__REQ_POLLED = 22,
+	__REQ_ALLOC_CACHE = 23,
+	__REQ_SWAP = 24,
+	__REQ_DRV = 25,
+	__REQ_FS_PRIVATE = 26,
+	__REQ_NOUNMAP = 27,
+	__REQ_NR_BITS = 28,
+};
+
+enum req_op {
+	REQ_OP_READ = 0,
+	REQ_OP_WRITE = 1,
+	REQ_OP_FLUSH = 2,
+	REQ_OP_DISCARD = 3,
+	REQ_OP_SECURE_ERASE = 5,
+	REQ_OP_WRITE_ZEROES = 9,
+	REQ_OP_ZONE_OPEN = 10,
+	REQ_OP_ZONE_CLOSE = 11,
+	REQ_OP_ZONE_FINISH = 12,
+	REQ_OP_ZONE_APPEND = 13,
+	REQ_OP_ZONE_RESET = 15,
+	REQ_OP_ZONE_RESET_ALL = 17,
+	REQ_OP_DRV_IN = 34,
+	REQ_OP_DRV_OUT = 35,
+	REQ_OP_LAST = 36,
+};
+
+struct boot_triggers {
+	const char *event;
+	char *trigger;
+};
+
+typedef int (*eventfs_callback)(const char *, umode_t *, void **, const struct file_operations **);
+
+struct eventfs_entry {
+	const char *name;
+	eventfs_callback callback;
+};
+
+enum {
+	TRACE_PIDS = 1,
+	TRACE_NO_PIDS = 2,
+};
+
+enum {
+	FORMAT_HEADER = 1,
+	FORMAT_FIELD_SEPERATOR = 2,
+	FORMAT_PRINTFMT = 3,
+};
+
+struct module_string {
+	struct list_head next;
+	struct module *module;
+	char *str;
+};
+
+typedef unsigned long perf_trace_t[1024];
+
+struct ustring_buffer {
+	char buffer[1024];
+};
+
+enum regex_type {
+	MATCH_FULL = 0,
+	MATCH_FRONT_ONLY = 1,
+	MATCH_MIDDLE_ONLY = 2,
+	MATCH_END_ONLY = 3,
+	MATCH_GLOB = 4,
+	MATCH_INDEX = 5,
+};
+
+enum filter_pred_fn {
+	FILTER_PRED_FN_NOP = 0,
+	FILTER_PRED_FN_64 = 1,
+	FILTER_PRED_FN_64_CPUMASK = 2,
+	FILTER_PRED_FN_S64 = 3,
+	FILTER_PRED_FN_U64 = 4,
+	FILTER_PRED_FN_32 = 5,
+	FILTER_PRED_FN_32_CPUMASK = 6,
+	FILTER_PRED_FN_S32 = 7,
+	FILTER_PRED_FN_U32 = 8,
+	FILTER_PRED_FN_16 = 9,
+	FILTER_PRED_FN_16_CPUMASK = 10,
+	FILTER_PRED_FN_S16 = 11,
+	FILTER_PRED_FN_U16 = 12,
+	FILTER_PRED_FN_8 = 13,
+	FILTER_PRED_FN_8_CPUMASK = 14,
+	FILTER_PRED_FN_S8 = 15,
+	FILTER_PRED_FN_U8 = 16,
+	FILTER_PRED_FN_COMM = 17,
+	FILTER_PRED_FN_STRING = 18,
+	FILTER_PRED_FN_STRLOC = 19,
+	FILTER_PRED_FN_STRRELLOC = 20,
+	FILTER_PRED_FN_PCHAR_USER = 21,
+	FILTER_PRED_FN_PCHAR = 22,
+	FILTER_PRED_FN_CPU = 23,
+	FILTER_PRED_FN_CPU_CPUMASK = 24,
+	FILTER_PRED_FN_CPUMASK = 25,
+	FILTER_PRED_FN_CPUMASK_CPU = 26,
+	FILTER_PRED_FN_FUNCTION = 27,
+	FILTER_PRED_FN_ = 28,
+	FILTER_PRED_TEST_VISITED = 29,
+};
+
+enum filter_op_ids {
+	OP_GLOB = 0,
+	OP_NE = 1,
+	OP_EQ = 2,
+	OP_LE = 3,
+	OP_LT = 4,
+	OP_GE = 5,
+	OP_GT = 6,
+	OP_BAND = 7,
+	OP_MAX = 8,
+};
+
+enum {
+	TOO_MANY_CLOSE = -1,
+	TOO_MANY_OPEN = -2,
+	MISSING_QUOTE = -3,
+};
+
+enum {
+	FILT_ERR_NONE = 0,
+	FILT_ERR_INVALID_OP = 1,
+	FILT_ERR_TOO_MANY_OPEN = 2,
+	FILT_ERR_TOO_MANY_CLOSE = 3,
+	FILT_ERR_MISSING_QUOTE = 4,
+	FILT_ERR_MISSING_BRACE_OPEN = 5,
+	FILT_ERR_MISSING_BRACE_CLOSE = 6,
+	FILT_ERR_OPERAND_TOO_LONG = 7,
+	FILT_ERR_EXPECT_STRING = 8,
+	FILT_ERR_EXPECT_DIGIT = 9,
+	FILT_ERR_ILLEGAL_FIELD_OP = 10,
+	FILT_ERR_FIELD_NOT_FOUND = 11,
+	FILT_ERR_ILLEGAL_INTVAL = 12,
+	FILT_ERR_BAD_SUBSYS_FILTER = 13,
+	FILT_ERR_TOO_MANY_PREDS = 14,
+	FILT_ERR_INVALID_FILTER = 15,
+	FILT_ERR_INVALID_CPULIST = 16,
+	FILT_ERR_IP_FIELD_ONLY = 17,
+	FILT_ERR_INVALID_VALUE = 18,
+	FILT_ERR_NO_FUNCTION = 19,
+	FILT_ERR_ERRNO = 20,
+	FILT_ERR_NO_FILTER = 21,
+};
+
+enum {
+	INVERT = 1,
+	PROCESS_AND = 2,
+	PROCESS_OR = 4,
+};
+
+struct regex;
+
+struct filter_pred {
+	struct regex *regex;
+	struct cpumask *mask;
+	unsigned short *ops;
+	struct ftrace_event_field *field;
+	u64 val;
+	u64 val2;
+	enum filter_pred_fn fn_num;
+	int offset;
+	int not;
+	int op;
+};
+
+typedef int (*regex_match_func)(char *, struct regex *, int);
+
+struct regex {
+	char pattern[256];
+	int len;
+	int field_len;
+	regex_match_func match;
+};
+
+struct filter_list {
+	struct list_head list;
+	struct event_filter *filter;
+};
+
+struct filter_parse_error {
+	int lasterr;
+	int lasterr_pos;
+};
+
+typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);
+
+struct event_trigger_data;
+
+struct event_trigger_ops;
+
+struct event_command {
+	struct list_head list;
+	char *name;
+	enum event_trigger_type trigger_type;
+	int flags;
+	int (*parse)(struct event_command *, struct trace_event_file *, char *, char *, char *);
+	int (*reg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg)(char *, struct event_trigger_data *, struct trace_event_file *);
+	void (*unreg_all)(struct trace_event_file *);
+	int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);
+	struct event_trigger_ops * (*get_trigger_ops)(char *, char *);
+};
+
+struct event_trigger_data {
+	unsigned long count;
+	int ref;
+	int flags;
+	struct event_trigger_ops *ops;
+	struct event_command *cmd_ops;
+	struct event_filter __attribute__((btf_type_tag("rcu"))) *filter;
+	char *filter_str;
+	void *private_data;
+	bool paused;
+	bool paused_tmp;
+	struct list_head list;
+	char *name;
+	struct list_head named_list;
+	struct event_trigger_data *named_data;
+};
+
+struct event_trigger_ops {
+	void (*trigger)(struct event_trigger_data *, struct trace_buffer *, void *, struct ring_buffer_event *);
+	int (*init)(struct event_trigger_data *);
+	void (*free)(struct event_trigger_data *);
+	int (*print)(struct seq_file *, struct event_trigger_data *);
+};
+
+enum event_command_flags {
+	EVENT_CMD_FL_POST_TRIGGER = 1,
+	EVENT_CMD_FL_NEEDS_REC = 2,
+};
+
+enum {
+	EVENT_TRIGGER_FL_PROBE = 1,
+};
+
+struct enable_trigger_data {
+	struct trace_event_file *file;
+	bool enable;
+	bool hist;
+};
+
+struct dyn_event;
+
+struct dyn_event_operations {
+	struct list_head list;
+	int (*create)(const char *);
+	int (*show)(struct seq_file *, struct dyn_event *);
+	bool (*is_busy)(struct dyn_event *);
+	int (*free)(struct dyn_event *);
+	bool (*match)(const char *, const char *, int, const char **, struct dyn_event *);
+};
+
+struct dyn_event {
+	struct list_head list;
+	struct dyn_event_operations *ops;
+};
+
+enum fetch_op {
+	FETCH_OP_NOP = 0,
+	FETCH_OP_REG = 1,
+	FETCH_OP_STACK = 2,
+	FETCH_OP_STACKP = 3,
+	FETCH_OP_RETVAL = 4,
+	FETCH_OP_IMM = 5,
+	FETCH_OP_COMM = 6,
+	FETCH_OP_ARG = 7,
+	FETCH_OP_FOFFS = 8,
+	FETCH_OP_DATA = 9,
+	FETCH_OP_DEREF = 10,
+	FETCH_OP_UDEREF = 11,
+	FETCH_OP_ST_RAW = 12,
+	FETCH_OP_ST_MEM = 13,
+	FETCH_OP_ST_UMEM = 14,
+	FETCH_OP_ST_STRING = 15,
+	FETCH_OP_ST_USTRING = 16,
+	FETCH_OP_ST_SYMSTR = 17,
+	FETCH_OP_MOD_BF = 18,
+	FETCH_OP_LP_ARRAY = 19,
+	FETCH_OP_TP_ARG = 20,
+	FETCH_OP_END = 21,
+	FETCH_NOP_SYMBOL = 22,
+};
+
+enum {
+	TP_ERR_FILE_NOT_FOUND = 0,
+	TP_ERR_NO_REGULAR_FILE = 1,
+	TP_ERR_BAD_REFCNT = 2,
+	TP_ERR_REFCNT_OPEN_BRACE = 3,
+	TP_ERR_BAD_REFCNT_SUFFIX = 4,
+	TP_ERR_BAD_UPROBE_OFFS = 5,
+	TP_ERR_BAD_MAXACT_TYPE = 6,
+	TP_ERR_BAD_MAXACT = 7,
+	TP_ERR_MAXACT_TOO_BIG = 8,
+	TP_ERR_BAD_PROBE_ADDR = 9,
+	TP_ERR_NON_UNIQ_SYMBOL = 10,
+	TP_ERR_BAD_RETPROBE = 11,
+	TP_ERR_NO_TRACEPOINT = 12,
+	TP_ERR_BAD_ADDR_SUFFIX = 13,
+	TP_ERR_NO_GROUP_NAME = 14,
+	TP_ERR_GROUP_TOO_LONG = 15,
+	TP_ERR_BAD_GROUP_NAME = 16,
+	TP_ERR_NO_EVENT_NAME = 17,
+	TP_ERR_EVENT_TOO_LONG = 18,
+	TP_ERR_BAD_EVENT_NAME = 19,
+	TP_ERR_EVENT_EXIST = 20,
+	TP_ERR_RETVAL_ON_PROBE = 21,
+	TP_ERR_NO_RETVAL = 22,
+	TP_ERR_BAD_STACK_NUM = 23,
+	TP_ERR_BAD_ARG_NUM = 24,
+	TP_ERR_BAD_VAR = 25,
+	TP_ERR_BAD_REG_NAME = 26,
+	TP_ERR_BAD_MEM_ADDR = 27,
+	TP_ERR_BAD_IMM = 28,
+	TP_ERR_IMMSTR_NO_CLOSE = 29,
+	TP_ERR_FILE_ON_KPROBE = 30,
+	TP_ERR_BAD_FILE_OFFS = 31,
+	TP_ERR_SYM_ON_UPROBE = 32,
+	TP_ERR_TOO_MANY_OPS = 33,
+	TP_ERR_DEREF_NEED_BRACE = 34,
+	TP_ERR_BAD_DEREF_OFFS = 35,
+	TP_ERR_DEREF_OPEN_BRACE = 36,
+	TP_ERR_COMM_CANT_DEREF = 37,
+	TP_ERR_BAD_FETCH_ARG = 38,
+	TP_ERR_ARRAY_NO_CLOSE = 39,
+	TP_ERR_BAD_ARRAY_SUFFIX = 40,
+	TP_ERR_BAD_ARRAY_NUM = 41,
+	TP_ERR_ARRAY_TOO_BIG = 42,
+	TP_ERR_BAD_TYPE = 43,
+	TP_ERR_BAD_STRING = 44,
+	TP_ERR_BAD_SYMSTRING = 45,
+	TP_ERR_BAD_BITFIELD = 46,
+	TP_ERR_ARG_NAME_TOO_LONG = 47,
+	TP_ERR_NO_ARG_NAME = 48,
+	TP_ERR_BAD_ARG_NAME = 49,
+	TP_ERR_USED_ARG_NAME = 50,
+	TP_ERR_ARG_TOO_LONG = 51,
+	TP_ERR_NO_ARG_BODY = 52,
+	TP_ERR_BAD_INSN_BNDRY = 53,
+	TP_ERR_FAIL_REG_PROBE = 54,
+	TP_ERR_DIFF_PROBE_TYPE = 55,
+	TP_ERR_DIFF_ARG_TYPE = 56,
+	TP_ERR_SAME_PROBE = 57,
+	TP_ERR_NO_EVENT_INFO = 58,
+	TP_ERR_BAD_ATTACH_EVENT = 59,
+	TP_ERR_BAD_ATTACH_ARG = 60,
+	TP_ERR_NO_EP_FILTER = 61,
+	TP_ERR_NOSUP_BTFARG = 62,
+	TP_ERR_NO_BTFARG = 63,
+	TP_ERR_NO_BTF_ENTRY = 64,
+	TP_ERR_BAD_VAR_ARGS = 65,
+	TP_ERR_NOFENTRY_ARGS = 66,
+	TP_ERR_DOUBLE_ARGS = 67,
+	TP_ERR_ARGS_2LONG = 68,
+	TP_ERR_ARGIDX_2BIG = 69,
+	TP_ERR_NO_PTR_STRCT = 70,
+	TP_ERR_NOSUP_DAT_ARG = 71,
+	TP_ERR_BAD_HYPHEN = 72,
+	TP_ERR_NO_BTF_FIELD = 73,
+	TP_ERR_BAD_BTF_TID = 74,
+	TP_ERR_BAD_TYPE4STR = 75,
+	TP_ERR_NEED_STRING_TYPE = 76,
+};
+
+enum probe_print_type {
+	PROBE_PRINT_NORMAL = 0,
+	PROBE_PRINT_RETURN = 1,
+	PROBE_PRINT_EVENT = 2,
+};
+
+struct eprobe_trace_entry_head {
+	struct trace_entry ent;
+};
+
+struct fetch_insn;
+
+struct fetch_type;
+
+struct probe_arg {
+	struct fetch_insn *code;
+	bool dynamic;
+	unsigned int offset;
+	unsigned int count;
+	const char *name;
+	const char *comm;
+	char *fmt;
+	const struct fetch_type *type;
+};
+
+struct trace_probe_event;
+
+struct trace_probe {
+	struct list_head list;
+	struct trace_probe_event *event;
+	ssize_t size;
+	unsigned int nr_args;
+	struct probe_arg args[0];
+};
+
+struct trace_eprobe {
+	const char *event_system;
+	const char *event_name;
+	char *filter_str;
+	struct trace_event_call *event;
+	struct dyn_event devent;
+	struct trace_probe tp;
+};
+
+struct trace_uprobe_filter {
+	rwlock_t rwlock;
+	int nr_systemwide;
+	struct list_head perf_events;
+};
+
+struct trace_probe_event {
+	unsigned int flags;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct list_head files;
+	struct list_head probes;
+	struct trace_uprobe_filter filter[0];
+};
+
+struct fetch_insn {
+	enum fetch_op op;
+	union {
+		unsigned int param;
+		struct {
+			unsigned int size;
+			int offset;
+		};
+		struct {
+			unsigned char basesize;
+			unsigned char lshift;
+			unsigned char rshift;
+		};
+		unsigned long immediate;
+		void *data;
+	};
+};
+
+typedef int (*print_type_func_t)(struct trace_seq *, void *, void *);
+
+struct fetch_type {
+	const char *name;
+	size_t size;
+	bool is_signed;
+	bool is_string;
+	print_type_func_t print;
+	const char *fmt;
+	const char *fmttype;
+};
+
+struct btf_param;
+
+struct traceprobe_parse_context {
+	struct trace_event_call *event;
+	const char *funcname;
+	const struct btf_type *proto;
+	const struct btf_param *params;
+	s32 nr_params;
+	struct btf *btf;
+	const struct btf_type *last_type;
+	u32 last_bitoffs;
+	u32 last_bitsize;
+	unsigned int flags;
+	int offset;
+};
+
+struct btf_param {
+	__u32 name_off;
+	__u32 type;
+};
+
+struct eprobe_data {
+	struct trace_event_file *file;
+	struct trace_eprobe *ep;
+};
+
+struct event_file_link {
+	struct trace_event_file *file;
+	struct list_head list;
+};
+
+enum dynevent_type {
+	DYNEVENT_TYPE_SYNTH = 1,
+	DYNEVENT_TYPE_KPROBE = 2,
+	DYNEVENT_TYPE_NONE = 3,
+};
+
+enum {
+	SYNTH_ERR_BAD_NAME = 0,
+	SYNTH_ERR_INVALID_CMD = 1,
+	SYNTH_ERR_INVALID_DYN_CMD = 2,
+	SYNTH_ERR_EVENT_EXISTS = 3,
+	SYNTH_ERR_TOO_MANY_FIELDS = 4,
+	SYNTH_ERR_INCOMPLETE_TYPE = 5,
+	SYNTH_ERR_INVALID_TYPE = 6,
+	SYNTH_ERR_INVALID_FIELD = 7,
+	SYNTH_ERR_INVALID_ARRAY_SPEC = 8,
+};
+
+struct trace_dynamic_info {
+	u16 offset;
+	u16 len;
+};
+
+union trace_synth_field {
+	u8 as_u8;
+	u16 as_u16;
+	u32 as_u32;
+	u64 as_u64;
+	struct trace_dynamic_info as_dynamic;
+};
+
+struct synth_trace_event {
+	struct trace_entry ent;
+	union trace_synth_field fields[0];
+};
+
+struct synth_field;
+
+struct synth_event {
+	struct dyn_event devent;
+	int ref;
+	char *name;
+	struct synth_field **fields;
+	unsigned int n_fields;
+	struct synth_field **dynamic_fields;
+	unsigned int n_dynamic_fields;
+	unsigned int n_u64;
+	struct trace_event_class class;
+	struct trace_event_call call;
+	struct tracepoint *tp;
+	struct module *mod;
+};
+
+struct synth_field {
+	char *type;
+	char *name;
+	size_t size;
+	unsigned int offset;
+	unsigned int field_pos;
+	bool is_signed;
+	bool is_string;
+	bool is_dynamic;
+	bool is_stack;
+};
+
+struct dynevent_arg_pair {
+	const char *lhs;
+	const char *rhs;
+	char operator;
+	char separator;
+};
+
+struct dynevent_cmd;
+
+typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *);
+
+struct dynevent_cmd {
+	struct seq_buf seq;
+	const char *event_name;
+	unsigned int n_fields;
+	enum dynevent_type type;
+	dynevent_create_fn_t run_command;
+	void *private_data;
+};
+
+typedef int (*dynevent_check_arg_fn_t)(void *);
+
+struct dynevent_arg {
+	const char *str;
+	char separator;
+};
+
+struct synth_event_trace_state {
+	struct trace_event_buffer fbuffer;
+	struct synth_trace_event *entry;
+	struct trace_buffer *buffer;
+	struct synth_event *event;
+	unsigned int cur_field;
+	unsigned int n_u64;
+	bool disabled;
+	bool add_next;
+	bool add_name;
+};
+
+struct synth_field_desc {
+	const char *type;
+	const char *name;
+};
+
+enum hist_field_fn {
+	HIST_FIELD_FN_NOP = 0,
+	HIST_FIELD_FN_VAR_REF = 1,
+	HIST_FIELD_FN_COUNTER = 2,
+	HIST_FIELD_FN_CONST = 3,
+	HIST_FIELD_FN_LOG2 = 4,
+	HIST_FIELD_FN_BUCKET = 5,
+	HIST_FIELD_FN_TIMESTAMP = 6,
+	HIST_FIELD_FN_CPU = 7,
+	HIST_FIELD_FN_STRING = 8,
+	HIST_FIELD_FN_DYNSTRING = 9,
+	HIST_FIELD_FN_RELDYNSTRING = 10,
+	HIST_FIELD_FN_PSTRING = 11,
+	HIST_FIELD_FN_S64 = 12,
+	HIST_FIELD_FN_U64 = 13,
+	HIST_FIELD_FN_S32 = 14,
+	HIST_FIELD_FN_U32 = 15,
+	HIST_FIELD_FN_S16 = 16,
+	HIST_FIELD_FN_U16 = 17,
+	HIST_FIELD_FN_S8 = 18,
+	HIST_FIELD_FN_U8 = 19,
+	HIST_FIELD_FN_UMINUS = 20,
+	HIST_FIELD_FN_MINUS = 21,
+	HIST_FIELD_FN_PLUS = 22,
+	HIST_FIELD_FN_DIV = 23,
+	HIST_FIELD_FN_MULT = 24,
+	HIST_FIELD_FN_DIV_POWER2 = 25,
+	HIST_FIELD_FN_DIV_NOT_POWER2 = 26,
+	HIST_FIELD_FN_DIV_MULT_SHIFT = 27,
+	HIST_FIELD_FN_EXECNAME = 28,
+	HIST_FIELD_FN_STACK = 29,
+};
+
+enum field_op_id {
+	FIELD_OP_NONE = 0,
+	FIELD_OP_PLUS = 1,
+	FIELD_OP_MINUS = 2,
+	FIELD_OP_UNARY_MINUS = 3,
+	FIELD_OP_DIV = 4,
+	FIELD_OP_MULT = 5,
+};
+
+enum handler_id {
+	HANDLER_ONMATCH = 1,
+	HANDLER_ONMAX = 2,
+	HANDLER_ONCHANGE = 3,
+};
+
+enum action_id {
+	ACTION_SAVE = 1,
+	ACTION_TRACE = 2,
+	ACTION_SNAPSHOT = 3,
+};
+
+enum hist_field_flags {
+	HIST_FIELD_FL_HITCOUNT = 1,
+	HIST_FIELD_FL_KEY = 2,
+	HIST_FIELD_FL_STRING = 4,
+	HIST_FIELD_FL_HEX = 8,
+	HIST_FIELD_FL_SYM = 16,
+	HIST_FIELD_FL_SYM_OFFSET = 32,
+	HIST_FIELD_FL_EXECNAME = 64,
+	HIST_FIELD_FL_SYSCALL = 128,
+	HIST_FIELD_FL_STACKTRACE = 256,
+	HIST_FIELD_FL_LOG2 = 512,
+	HIST_FIELD_FL_TIMESTAMP = 1024,
+	HIST_FIELD_FL_TIMESTAMP_USECS = 2048,
+	HIST_FIELD_FL_VAR = 4096,
+	HIST_FIELD_FL_EXPR = 8192,
+	HIST_FIELD_FL_VAR_REF = 16384,
+	HIST_FIELD_FL_CPU = 32768,
+	HIST_FIELD_FL_ALIAS = 65536,
+	HIST_FIELD_FL_BUCKET = 131072,
+	HIST_FIELD_FL_CONST = 262144,
+	HIST_FIELD_FL_PERCENT = 524288,
+	HIST_FIELD_FL_GRAPH = 1048576,
+};
+
+enum {
+	HIST_ERR_NONE = 0,
+	HIST_ERR_DUPLICATE_VAR = 1,
+	HIST_ERR_VAR_NOT_UNIQUE = 2,
+	HIST_ERR_TOO_MANY_VARS = 3,
+	HIST_ERR_MALFORMED_ASSIGNMENT = 4,
+	HIST_ERR_NAMED_MISMATCH = 5,
+	HIST_ERR_TRIGGER_EEXIST = 6,
+	HIST_ERR_TRIGGER_ENOENT_CLEAR = 7,
+	HIST_ERR_SET_CLOCK_FAIL = 8,
+	HIST_ERR_BAD_FIELD_MODIFIER = 9,
+	HIST_ERR_TOO_MANY_SUBEXPR = 10,
+	HIST_ERR_TIMESTAMP_MISMATCH = 11,
+	HIST_ERR_TOO_MANY_FIELD_VARS = 12,
+	HIST_ERR_EVENT_FILE_NOT_FOUND = 13,
+	HIST_ERR_HIST_NOT_FOUND = 14,
+	HIST_ERR_HIST_CREATE_FAIL = 15,
+	HIST_ERR_SYNTH_VAR_NOT_FOUND = 16,
+	HIST_ERR_SYNTH_EVENT_NOT_FOUND = 17,
+	HIST_ERR_SYNTH_TYPE_MISMATCH = 18,
+	HIST_ERR_SYNTH_COUNT_MISMATCH = 19,
+	HIST_ERR_FIELD_VAR_PARSE_FAIL = 20,
+	HIST_ERR_VAR_CREATE_FIND_FAIL = 21,
+	HIST_ERR_ONX_NOT_VAR = 22,
+	HIST_ERR_ONX_VAR_NOT_FOUND = 23,
+	HIST_ERR_ONX_VAR_CREATE_FAIL = 24,
+	HIST_ERR_FIELD_VAR_CREATE_FAIL = 25,
+	HIST_ERR_TOO_MANY_PARAMS = 26,
+	HIST_ERR_PARAM_NOT_FOUND = 27,
+	HIST_ERR_INVALID_PARAM = 28,
+	HIST_ERR_ACTION_NOT_FOUND = 29,
+	HIST_ERR_NO_SAVE_PARAMS = 30,
+	HIST_ERR_TOO_MANY_SAVE_ACTIONS = 31,
+	HIST_ERR_ACTION_MISMATCH = 32,
+	HIST_ERR_NO_CLOSING_PAREN = 33,
+	HIST_ERR_SUBSYS_NOT_FOUND = 34,
+	HIST_ERR_INVALID_SUBSYS_EVENT = 35,
+	HIST_ERR_INVALID_REF_KEY = 36,
+	HIST_ERR_VAR_NOT_FOUND = 37,
+	HIST_ERR_FIELD_NOT_FOUND = 38,
+	HIST_ERR_EMPTY_ASSIGNMENT = 39,
+	HIST_ERR_INVALID_SORT_MODIFIER = 40,
+	HIST_ERR_EMPTY_SORT_FIELD = 41,
+	HIST_ERR_TOO_MANY_SORT_FIELDS = 42,
+	HIST_ERR_INVALID_SORT_FIELD = 43,
+	HIST_ERR_INVALID_STR_OPERAND = 44,
+	HIST_ERR_EXPECT_NUMBER = 45,
+	HIST_ERR_UNARY_MINUS_SUBEXPR = 46,
+	HIST_ERR_DIVISION_BY_ZERO = 47,
+	HIST_ERR_NEED_NOHC_VAL = 48,
+};
+
+struct hist_trigger_data;
+
+struct hist_var_data {
+	struct list_head list;
+	struct hist_trigger_data *hist_data;
+};
+
+struct hist_field;
+
+struct hist_trigger_attrs;
+
+struct action_data;
+
+struct field_var;
+
+struct field_var_hist;
+
+struct hist_trigger_data {
+	struct hist_field *fields[22];
+	unsigned int n_vals;
+	unsigned int n_keys;
+	unsigned int n_fields;
+	unsigned int n_vars;
+	unsigned int n_var_str;
+	unsigned int key_size;
+	struct tracing_map_sort_key sort_keys[2];
+	unsigned int n_sort_keys;
+	struct trace_event_file *event_file;
+	struct hist_trigger_attrs *attrs;
+	struct tracing_map *map;
+	bool enable_timestamps;
+	bool remove;
+	struct hist_field *var_refs[16];
+	unsigned int n_var_refs;
+	struct action_data *actions[8];
+	unsigned int n_actions;
+	struct field_var *field_vars[64];
+	unsigned int n_field_vars;
+	unsigned int n_field_var_str;
+	struct field_var_hist *field_var_hists[64];
+	unsigned int n_field_var_hists;
+	struct field_var *save_vars[64];
+	unsigned int n_save_vars;
+	unsigned int n_save_var_str;
+};
+
+struct hist_var {
+	char *name;
+	struct hist_trigger_data *hist_data;
+	unsigned int idx;
+};
+
+struct hist_field {
+	struct ftrace_event_field *field;
+	unsigned long flags;
+	unsigned long buckets;
+	const char *type;
+	struct hist_field *operands[2];
+	struct hist_trigger_data *hist_data;
+	enum hist_field_fn fn_num;
+	unsigned int ref;
+	unsigned int size;
+	unsigned int offset;
+	unsigned int is_signed;
+	struct hist_var var;
+	enum field_op_id operator;
+	char *system;
+	char *event_name;
+	char *name;
+	unsigned int var_ref_idx;
+	bool read_once;
+	unsigned int var_str_idx;
+	u64 constant;
+	u64 div_multiplier;
+};
+
+struct var_defs {
+	unsigned int n_vars;
+	char *name[16];
+	char *expr[16];
+};
+
+struct hist_trigger_attrs {
+	char *keys_str;
+	char *vals_str;
+	char *sort_key_str;
+	char *name;
+	char *clock;
+	bool pause;
+	bool cont;
+	bool clear;
+	bool ts_in_usecs;
+	bool no_hitcount;
+	unsigned int map_bits;
+	char *assignment_str[16];
+	unsigned int n_assignments;
+	char *action_str[8];
+	unsigned int n_actions;
+	struct var_defs var_defs;
+};
+
+typedef bool (*check_track_val_fn_t)(u64, u64);
+
+typedef void (*action_fn_t)(struct hist_trigger_data *, struct tracing_map_elt *, struct trace_buffer *, void *, struct ring_buffer_event *, void *, struct action_data *, u64 *);
+
+struct action_data {
+	enum handler_id handler;
+	enum action_id action;
+	char *action_name;
+	action_fn_t fn;
+	unsigned int n_params;
+	char *params[64];
+	unsigned int var_ref_idx[64];
+	struct synth_event *synth_event;
+	bool use_trace_keyword;
+	char *synth_event_name;
+	union {
+		struct {
+			char *event;
+			char *event_system;
+		} match_data;
+		struct {
+			char *var_str;
+			struct hist_field *var_ref;
+			struct hist_field *track_var;
+			check_track_val_fn_t check_val;
+			action_fn_t save_data;
+		} track_data;
+	};
+};
+
+struct field_var {
+	struct hist_field *var;
+	struct hist_field *val;
+};
+
+struct field_var_hist {
+	struct hist_trigger_data *hist_data;
+	char *cmd;
+};
+
+struct hist_val_stat {
+	u64 max;
+	u64 total;
+};
+
+struct hist_elt_data {
+	char *comm;
+	u64 *var_ref_vals;
+	char **field_var_str;
+	int n_field_var_str;
+};
+
+typedef void (*synth_probe_func_t)(void *, u64 *, unsigned int *);
+
+struct track_data {
+	u64 track_val;
+	bool updated;
+	unsigned int key_len;
+	void *key;
+	struct tracing_map_elt elt;
+	struct action_data *action_data;
+	struct hist_trigger_data *hist_data;
+};
+
+struct bpf_mem_caches;
+
+struct bpf_mem_cache;
+
+struct bpf_mem_alloc {
+	struct bpf_mem_caches __attribute__((btf_type_tag("percpu"))) *caches;
+	struct bpf_mem_cache __attribute__((btf_type_tag("percpu"))) *cache;
+	bool percpu;
+	struct work_struct work;
+};
+
+struct bpf_local_storage_map_bucket;
+
+struct bpf_local_storage_map {
+	struct bpf_map map;
+	struct bpf_local_storage_map_bucket *buckets;
+	u32 bucket_log;
+	u16 elem_size;
+	u16 cache_idx;
+	struct bpf_mem_alloc selem_ma;
+	struct bpf_mem_alloc storage_ma;
+	bool bpf_ma;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_local_storage_map_bucket {
+	struct hlist_head list;
+	raw_spinlock_t lock;
+};
+
+struct bpf_mem_cache {
+	struct llist_head free_llist;
+	local_t active;
+	struct llist_head free_llist_extra;
+	struct irq_work refill_work;
+	struct obj_cgroup *objcg;
+	int unit_size;
+	int free_cnt;
+	int low_watermark;
+	int high_watermark;
+	int batch;
+	int percpu_size;
+	bool draining;
+	struct bpf_mem_cache *tgt;
+	struct llist_head free_by_rcu;
+	struct llist_node *free_by_rcu_tail;
+	struct llist_head waiting_for_gp;
+	struct llist_node *waiting_for_gp_tail;
+	struct callback_head rcu;
+	atomic_t call_rcu_in_progress;
+	struct llist_head free_llist_extra_rcu;
+	struct llist_head free_by_rcu_ttrace;
+	struct llist_head waiting_for_gp_ttrace;
+	struct callback_head rcu_ttrace;
+	atomic_t call_rcu_ttrace_in_progress;
+};
+
+struct bpf_mem_caches {
+	struct bpf_mem_cache cache[11];
+};
+
+struct bpf_local_storage_data {
+	struct bpf_local_storage_map __attribute__((btf_type_tag("rcu"))) *smap;
+	u8 data[0];
+};
+
+struct bpf_id_pair {
+	u32 old;
+	u32 cur;
+};
+
+struct bpf_idmap {
+	u32 tmp_id_gen;
+	struct bpf_id_pair map[600];
+};
+
+struct bpf_idset {
+	u32 count;
+	u32 ids[600];
+};
+
+struct bpf_verifier_log {
+	u64 start_pos;
+	u64 end_pos;
+	char __attribute__((btf_type_tag("user"))) *ubuf;
+	u32 level;
+	u32 len_total;
+	u32 len_max;
+	char kbuf[1024];
+};
+
+struct bpf_subprog_info {
+	u32 start;
+	u32 linfo_idx;
+	u16 stack_depth;
+	bool has_tail_call;
+	bool tail_call_reachable;
+	bool has_ld_abs;
+	bool is_async_cb;
+	u64 android_kabi_reserved1;
+};
+
+struct backtrack_state {
+	struct bpf_verifier_env *env;
+	u32 frame;
+	u32 reg_masks[8];
+	u64 stack_masks[8];
+};
+
+typedef sockptr_t bpfptr_t;
+
+struct bpf_verifier_ops;
+
+struct bpf_verifier_stack_elem;
+
+struct bpf_verifier_state;
+
+struct bpf_verifier_state_list;
+
+struct bpf_insn_aux_data;
+
+struct bpf_verifier_env {
+	u32 insn_idx;
+	u32 prev_insn_idx;
+	struct bpf_prog *prog;
+	const struct bpf_verifier_ops *ops;
+	struct bpf_verifier_stack_elem *head;
+	int stack_size;
+	bool strict_alignment;
+	bool test_state_freq;
+	struct bpf_verifier_state *cur_state;
+	struct bpf_verifier_state_list **explored_states;
+	struct bpf_verifier_state_list *free_list;
+	struct bpf_map *used_maps[64];
+	struct btf_mod_pair used_btfs[64];
+	u32 used_map_cnt;
+	u32 used_btf_cnt;
+	u32 id_gen;
+	bool explore_alu_limits;
+	bool allow_ptr_leaks;
+	bool allow_uninit_stack;
+	bool bpf_capable;
+	bool bypass_spec_v1;
+	bool bypass_spec_v4;
+	bool seen_direct_write;
+	struct bpf_insn_aux_data *insn_aux_data;
+	const struct bpf_line_info *prev_linfo;
+	struct bpf_verifier_log log;
+	struct bpf_subprog_info subprog_info[257];
+	union {
+		struct bpf_idmap idmap_scratch;
+		struct bpf_idset idset_scratch;
+	};
+	struct {
+		int *insn_state;
+		int *insn_stack;
+		int cur_stack;
+	} cfg;
+	struct backtrack_state bt;
+	u32 pass_cnt;
+	u32 subprog_cnt;
+	u32 prev_insn_processed;
+	u32 insn_processed;
+	u32 prev_jmps_processed;
+	u32 jmps_processed;
+	u64 verification_time;
+	u32 max_states_per_insn;
+	u32 total_states;
+	u32 peak_states;
+	u32 longest_mark_read_walk;
+	bpfptr_t fd_array;
+	u32 scratched_regs;
+	u64 scratched_stack_slots;
+	u64 prev_log_pos;
+	u64 prev_insn_print_pos;
+	char tmp_str_buf[320];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum bpf_access_type {
+	BPF_READ = 1,
+	BPF_WRITE = 2,
+};
+
+struct bpf_insn_access_aux;
+
+struct bpf_reg_state;
+
+struct bpf_verifier_ops {
+	const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
+	bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
+	int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
+	int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
+	u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+	int (*btf_struct_access)(struct bpf_verifier_log *, const struct bpf_reg_state *, int, int);
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_insn_access_aux {
+	enum bpf_reg_type reg_type;
+	union {
+		int ctx_field_size;
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+	};
+	struct bpf_verifier_log *log;
+};
+
+enum bpf_dynptr_type {
+	BPF_DYNPTR_TYPE_INVALID = 0,
+	BPF_DYNPTR_TYPE_LOCAL = 1,
+	BPF_DYNPTR_TYPE_RINGBUF = 2,
+	BPF_DYNPTR_TYPE_SKB = 3,
+	BPF_DYNPTR_TYPE_XDP = 4,
+};
+
+enum bpf_iter_state {
+	BPF_ITER_STATE_INVALID = 0,
+	BPF_ITER_STATE_ACTIVE = 1,
+	BPF_ITER_STATE_DRAINED = 2,
+};
+
+struct tnum {
+	u64 value;
+	u64 mask;
+};
+
+enum bpf_reg_liveness {
+	REG_LIVE_NONE = 0,
+	REG_LIVE_READ32 = 1,
+	REG_LIVE_READ64 = 2,
+	REG_LIVE_READ = 3,
+	REG_LIVE_WRITTEN = 4,
+	REG_LIVE_DONE = 8,
+};
+
+struct bpf_reg_state {
+	enum bpf_reg_type type;
+	s32 off;
+	union {
+		int range;
+		struct {
+			struct bpf_map *map_ptr;
+			u32 map_uid;
+		};
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+		};
+		struct {
+			u32 mem_size;
+			u32 dynptr_id;
+		};
+		struct {
+			enum bpf_dynptr_type type;
+			bool first_slot;
+		} dynptr;
+		struct {
+			struct btf *btf;
+			u32 btf_id;
+			enum bpf_iter_state state: 2;
+			int depth: 30;
+		} iter;
+		struct {
+			unsigned long raw1;
+			unsigned long raw2;
+		} raw;
+		u32 subprogno;
+	};
+	struct tnum var_off;
+	s64 smin_value;
+	s64 smax_value;
+	u64 umin_value;
+	u64 umax_value;
+	s32 s32_min_value;
+	s32 s32_max_value;
+	u32 u32_min_value;
+	u32 u32_max_value;
+	u32 id;
+	u32 ref_obj_id;
+	struct bpf_reg_state *parent;
+	u32 frameno;
+	s32 subreg_def;
+	enum bpf_reg_liveness live;
+	bool precise;
+};
+
+struct bpf_active_lock {
+	void *ptr;
+	u32 id;
+};
+
+struct bpf_idx_pair;
+
+struct bpf_verifier_state {
+	struct bpf_func_state *frame[8];
+	struct bpf_verifier_state *parent;
+	u32 branches;
+	u32 insn_idx;
+	u32 curframe;
+	struct bpf_active_lock active_lock;
+	bool speculative;
+	bool active_rcu_lock;
+	bool used_as_loop_entry;
+	u32 first_insn_idx;
+	u32 last_insn_idx;
+	struct bpf_verifier_state *loop_entry;
+	struct bpf_idx_pair *jmp_history;
+	u32 jmp_history_cnt;
+	u32 dfs_depth;
+	u32 callback_unroll_depth;
+};
+
+struct bpf_reference_state;
+
+struct bpf_stack_state;
+
+struct bpf_func_state {
+	struct bpf_reg_state regs[11];
+	int callsite;
+	u32 frameno;
+	u32 subprogno;
+	u32 async_entry_cnt;
+	bool in_callback_fn;
+	struct tnum callback_ret_range;
+	bool in_async_callback_fn;
+	u32 callback_depth;
+	int acquired_refs;
+	struct bpf_reference_state *refs;
+	int allocated_stack;
+	struct bpf_stack_state *stack;
+};
+
+struct bpf_reference_state {
+	int id;
+	int insn_idx;
+	int callback_ref;
+};
+
+struct bpf_stack_state {
+	struct bpf_reg_state spilled_ptr;
+	u8 slot_type[8];
+};
+
+struct bpf_idx_pair {
+	u32 prev_idx;
+	u32 idx;
+};
+
+struct bpf_verifier_state_list {
+	struct bpf_verifier_state state;
+	struct bpf_verifier_state_list *next;
+	int miss_cnt;
+	int hit_cnt;
+};
+
+struct bpf_loop_inline_state {
+	unsigned int initialized: 1;
+	unsigned int fit_for_inline: 1;
+	u32 callback_subprogno;
+};
+
+struct btf_struct_meta;
+
+struct bpf_insn_aux_data {
+	union {
+		enum bpf_reg_type ptr_type;
+		unsigned long map_ptr_state;
+		s32 call_imm;
+		u32 alu_limit;
+		struct {
+			u32 map_index;
+			u32 map_off;
+		};
+		struct {
+			enum bpf_reg_type reg_type;
+			union {
+				struct {
+					struct btf *btf;
+					u32 btf_id;
+				};
+				u32 mem_size;
+			};
+		} btf_var;
+		struct bpf_loop_inline_state loop_inline_state;
+	};
+	union {
+		u64 obj_new_size;
+		u64 insert_off;
+	};
+	struct btf_struct_meta *kptr_struct_meta;
+	u64 map_key_state;
+	int ctx_field_size;
+	u32 seen;
+	bool sanitize_stack_spill;
+	bool zext_dst;
+	bool storage_get_func_atomic;
+	bool is_iter_next;
+	u8 alu_state;
+	unsigned int orig_idx;
+	bool jmp_point;
+	bool prune_point;
+	bool force_checkpoint;
+	bool calls_callback;
+};
+
+struct btf_struct_meta {
+	u32 btf_id;
+	struct btf_record *record;
+};
+
+typedef void (*btf_trace_bpf_trace_printk)(void *, const char *);
+
+struct bpf_nested_pt_regs {
+	struct pt_regs regs[3];
+};
+
+struct bpf_trace_sample_data {
+	struct perf_sample_data sds[3];
+};
+
+struct send_signal_irq_work {
+	struct irq_work irq_work;
+	struct task_struct *task;
+	u32 sig;
+	enum pid_type type;
+};
+
+struct bpf_raw_tp_regs {
+	struct pt_regs regs[3];
+};
+
+enum key_lookup_flag {
+	KEY_LOOKUP_CREATE = 1,
+	KEY_LOOKUP_PARTIAL = 2,
+	KEY_LOOKUP_ALL = 3,
+};
+
+enum key_need_perm {
+	KEY_NEED_UNSPECIFIED = 0,
+	KEY_NEED_VIEW = 1,
+	KEY_NEED_READ = 2,
+	KEY_NEED_WRITE = 3,
+	KEY_NEED_SEARCH = 4,
+	KEY_NEED_LINK = 5,
+	KEY_NEED_SETATTR = 6,
+	KEY_NEED_UNLINK = 7,
+	KEY_SYSADMIN_OVERRIDE = 8,
+	KEY_AUTHTOKEN_OVERRIDE = 9,
+	KEY_DEFER_PERM_CHECK = 10,
+};
+
+enum bpf_task_fd_type {
+	BPF_FD_TYPE_RAW_TRACEPOINT = 0,
+	BPF_FD_TYPE_TRACEPOINT = 1,
+	BPF_FD_TYPE_KPROBE = 2,
+	BPF_FD_TYPE_KRETPROBE = 3,
+	BPF_FD_TYPE_UPROBE = 4,
+	BPF_FD_TYPE_URETPROBE = 5,
+};
+
+enum uprobe_filter_ctx {
+	UPROBE_FILTER_REGISTER = 0,
+	UPROBE_FILTER_UNREGISTER = 1,
+	UPROBE_FILTER_MMAP = 2,
+};
+
+enum {
+	BPF_F_UPROBE_MULTI_RETURN = 1,
+};
+
+enum {
+	BTF_F_COMPACT = 1,
+	BTF_F_NONAME = 2,
+	BTF_F_PTR_RAW = 4,
+	BTF_F_ZERO = 8,
+};
+
+enum {
+	BPF_F_INDEX_MASK = 4294967295ULL,
+	BPF_F_CURRENT_CPU = 4294967295ULL,
+	BPF_F_CTXLEN_MASK = 4503595332403200ULL,
+};
+
+enum {
+	BPF_F_GET_BRANCH_RECORDS_SIZE = 1,
+};
+
+typedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void __attribute__((btf_type_tag("user"))) *);
+
+typedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void __attribute__((btf_type_tag("user"))) *);
+
+typedef u64 (*btf_bpf_probe_read_kernel)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_kernel_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_compat)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_read_compat_str)(void *, u32, const void *);
+
+typedef u64 (*btf_bpf_probe_write_user)(void __attribute__((btf_type_tag("user"))) *, const void *, u32);
+
+typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_trace_vprintk)(char *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32);
+
+typedef u64 (*btf_bpf_seq_write)(struct seq_file *, const void *, u32);
+
+struct btf_ptr;
+
+typedef u64 (*btf_bpf_seq_printf_btf)(struct seq_file *, struct btf_ptr *, u32, u64);
+
+struct btf_ptr {
+	void *ptr;
+	__u32 type_id;
+	__u32 flags;
+};
+
+typedef u64 (*btf_bpf_perf_event_read)(struct bpf_map *, u64);
+
+struct bpf_perf_event_value;
+
+typedef u64 (*btf_bpf_perf_event_read_value)(struct bpf_map *, u64, struct bpf_perf_event_value *, u32);
+
+struct bpf_perf_event_value {
+	__u64 counter;
+	__u64 enabled;
+	__u64 running;
+};
+
+typedef u64 (*btf_bpf_perf_event_output)(struct pt_regs *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_current_task)();
+
+typedef u64 (*btf_bpf_get_current_task_btf)();
+
+typedef u64 (*btf_bpf_task_pt_regs)(struct task_struct *);
+
+typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);
+
+typedef u64 (*btf_bpf_send_signal)(u32);
+
+typedef u64 (*btf_bpf_send_signal_thread)(u32);
+
+typedef u64 (*btf_bpf_d_path)(struct path *, char *, u32);
+
+typedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64);
+
+typedef u64 (*btf_bpf_get_func_ip_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_func_ip_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_kprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_func_ip_uprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_uprobe_multi)(struct pt_regs *);
+
+typedef u64 (*btf_bpf_get_attach_cookie_trace)(void *);
+
+struct bpf_perf_event_data_kern;
+
+typedef u64 (*btf_bpf_get_attach_cookie_pe)(struct bpf_perf_event_data_kern *);
+
+typedef struct pt_regs bpf_user_pt_regs_t;
+
+struct bpf_perf_event_data_kern {
+	bpf_user_pt_regs_t *regs;
+	struct perf_sample_data *data;
+	struct perf_event *event;
+};
+
+typedef u64 (*btf_bpf_get_attach_cookie_tracing)(void *);
+
+typedef u64 (*btf_bpf_get_branch_snapshot)(void *, u32, u64);
+
+typedef u64 (*btf_get_func_arg)(void *, u32, u64 *);
+
+typedef u64 (*btf_get_func_ret)(void *, u64 *);
+
+typedef u64 (*btf_get_func_arg_cnt)(void *);
+
+typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack_tp)(void *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_perf_prog_read_value)(struct bpf_perf_event_data_kern *, struct bpf_perf_event_value *, u32);
+
+typedef u64 (*btf_bpf_read_branch_records)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+struct bpf_raw_tracepoint_args;
+
+typedef u64 (*btf_bpf_perf_event_output_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64, void *, u64);
+
+struct bpf_raw_tracepoint_args {
+	__u64 args[0];
+};
+
+typedef u64 (*btf_bpf_get_stackid_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);
+
+struct trace_event_raw_bpf_trace_printk {
+	struct trace_entry ent;
+	u32 __data_loc_bpf_string;
+	char __data[0];
+};
+
+struct bpf_trace_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	u64 bpf_cookie;
+	bool is_uprobe;
+};
+
+struct trace_uprobe;
+
+struct uprobe_dispatch_data {
+	struct trace_uprobe *tu;
+	unsigned long bp_addr;
+};
+
+struct bpf_uprobe;
+
+struct bpf_uprobe_multi_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	unsigned long entry_ip;
+	struct bpf_uprobe *uprobe;
+};
+
+struct uprobe_consumer {
+	int (*handler)(struct uprobe_consumer *, struct pt_regs *);
+	int (*ret_handler)(struct uprobe_consumer *, unsigned long, struct pt_regs *);
+	bool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
+	struct uprobe_consumer *next;
+};
+
+struct bpf_uprobe_multi_link;
+
+struct bpf_uprobe {
+	struct bpf_uprobe_multi_link *link;
+	loff_t offset;
+	u64 cookie;
+	struct uprobe_consumer consumer;
+};
+
+struct bpf_uprobe_multi_link {
+	struct path path;
+	struct bpf_link link;
+	u32 cnt;
+	struct bpf_uprobe *uprobes;
+	struct task_struct *task;
+};
+
+struct bpf_trace_module {
+	struct module *module;
+	struct list_head list;
+};
+
+struct trace_event_data_offsets_bpf_trace_printk {
+	u32 bpf_string;
+};
+
+typedef u32 (*bpf_prog_run_fn)(const struct bpf_prog *, const void *);
+
+struct bpf_bprintf_data {
+	u32 *bin_args;
+	char *buf;
+	bool get_bin_args;
+	bool get_buf;
+};
+
+struct bpf_event_entry {
+	struct perf_event *event;
+	struct file *perf_file;
+	struct file *map_file;
+	struct callback_head rcu;
+};
+
+struct __key_reference_with_attributes;
+
+typedef struct __key_reference_with_attributes *key_ref_t;
+
+struct bpf_dynptr_kern {
+	void *data;
+	u32 size;
+	u32 offset;
+};
+
+struct bpf_link_primer {
+	struct bpf_link *link;
+	struct file *file;
+	int fd;
+	u32 id;
+};
+
+struct btf_id_set {
+	u32 cnt;
+	u32 ids[0];
+};
+
+struct bpf_key {
+	struct key *key;
+	bool has_ref;
+};
+
+typedef unsigned long (*bpf_ctx_copy_t)(void *, const void *, unsigned long, unsigned long);
+
+struct perf_event_query_bpf {
+	__u32 ids_len;
+	__u32 prog_cnt;
+	__u32 ids[0];
+};
+
+struct trace_kprobe {
+	struct dyn_event devent;
+	struct kretprobe rp;
+	unsigned long __attribute__((btf_type_tag("percpu"))) *nhit;
+	const char *symbol;
+	struct trace_probe tp;
+};
+
+struct kretprobe_trace_entry_head {
+	struct trace_entry ent;
+	unsigned long func;
+	unsigned long ret_ip;
+};
+
+struct kprobe_trace_entry_head {
+	struct trace_entry ent;
+	unsigned long ip;
+};
+
+struct sym_count_ctx {
+	unsigned int count;
+	const char *name;
+};
+
+typedef void (*btf_trace_error_report_end)(void *, enum error_detector, unsigned long);
+
+struct trace_event_raw_error_report_template {
+	struct trace_entry ent;
+	enum error_detector error_detector;
+	unsigned long id;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_error_report_template {};
+
+typedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_cpu_idle_miss)(void *, unsigned int, unsigned int, bool);
+
+typedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int);
+
+typedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32);
+
+typedef void (*btf_trace_cpu_frequency)(void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_cpu_frequency_limits)(void *, struct cpufreq_policy *);
+
+typedef void (*btf_trace_device_pm_callback_start)(void *, struct device *, const char *, int);
+
+typedef void (*btf_trace_device_pm_callback_end)(void *, struct device *, int);
+
+typedef void (*btf_trace_suspend_resume)(void *, const char *, int, bool);
+
+typedef void (*btf_trace_wakeup_source_activate)(void *, const char *, unsigned int);
+
+typedef void (*btf_trace_wakeup_source_deactivate)(void *, const char *, unsigned int);
+
+typedef void (*btf_trace_clock_enable)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_clock_disable)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_clock_set_rate)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_power_domain_target)(void *, const char *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_pm_qos_add_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_update_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_remove_request)(void *, s32);
+
+typedef void (*btf_trace_pm_qos_update_target)(void *, enum pm_qos_req_action, int, int);
+
+typedef void (*btf_trace_pm_qos_update_flags)(void *, enum pm_qos_req_action, int, int);
+
+typedef void (*btf_trace_dev_pm_qos_add_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_dev_pm_qos_update_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32);
+
+typedef void (*btf_trace_guest_halt_poll_ns)(void *, bool, unsigned int, unsigned int);
+
+struct trace_event_raw_cpu {
+	struct trace_entry ent;
+	u32 state;
+	u32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_idle_miss {
+	struct trace_entry ent;
+	u32 cpu_id;
+	u32 state;
+	bool below;
+	char __data[0];
+};
+
+struct trace_event_raw_powernv_throttle {
+	struct trace_entry ent;
+	int chip_id;
+	u32 __data_loc_reason;
+	int pmax;
+	char __data[0];
+};
+
+struct trace_event_raw_pstate_sample {
+	struct trace_entry ent;
+	u32 core_busy;
+	u32 scaled_busy;
+	u32 from;
+	u32 to;
+	u64 mperf;
+	u64 aperf;
+	u64 tsc;
+	u32 freq;
+	u32 io_boost;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_frequency_limits {
+	struct trace_entry ent;
+	u32 min_freq;
+	u32 max_freq;
+	u32 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_device_pm_callback_start {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	u32 __data_loc_parent;
+	u32 __data_loc_pm_ops;
+	int event;
+	char __data[0];
+};
+
+struct trace_event_raw_device_pm_callback_end {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_suspend_resume {
+	struct trace_entry ent;
+	const char *action;
+	int val;
+	bool start;
+	char __data[0];
+};
+
+struct trace_event_raw_wakeup_source {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	char __data[0];
+};
+
+struct trace_event_raw_clock {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	u64 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_power_domain {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u64 state;
+	u64 cpu_id;
+	char __data[0];
+};
+
+struct trace_event_raw_cpu_latency_qos_request {
+	struct trace_entry ent;
+	s32 value;
+	char __data[0];
+};
+
+struct trace_event_raw_pm_qos_update {
+	struct trace_entry ent;
+	enum pm_qos_req_action action;
+	int prev_value;
+	int curr_value;
+	char __data[0];
+};
+
+struct trace_event_raw_dev_pm_qos_request {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	enum dev_pm_qos_req_type type;
+	s32 new_value;
+	char __data[0];
+};
+
+struct trace_event_raw_guest_halt_poll_ns {
+	struct trace_entry ent;
+	bool grow;
+	unsigned int new;
+	unsigned int old;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_powernv_throttle {
+	u32 reason;
+};
+
+struct trace_event_data_offsets_wakeup_source {
+	u32 name;
+};
+
+struct trace_event_data_offsets_clock {
+	u32 name;
+};
+
+struct trace_event_data_offsets_power_domain {
+	u32 name;
+};
+
+struct trace_event_data_offsets_dev_pm_qos_request {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cpu {};
+
+struct trace_event_data_offsets_cpu_idle_miss {};
+
+struct trace_event_data_offsets_pstate_sample {};
+
+struct trace_event_data_offsets_cpu_frequency_limits {};
+
+struct trace_event_data_offsets_device_pm_callback_start {
+	u32 device;
+	u32 driver;
+	u32 parent;
+	u32 pm_ops;
+};
+
+struct trace_event_data_offsets_device_pm_callback_end {
+	u32 device;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_suspend_resume {};
+
+struct trace_event_data_offsets_cpu_latency_qos_request {};
+
+struct trace_event_data_offsets_pm_qos_update {};
+
+struct trace_event_data_offsets_guest_halt_poll_ns {};
+
+typedef void (*btf_trace_rpm_suspend)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_resume)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_idle)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_usage)(void *, struct device *, int);
+
+typedef void (*btf_trace_rpm_return_int)(void *, struct device *, unsigned long, int);
+
+typedef void (*btf_trace_rpm_status)(void *, struct device *, enum rpm_status);
+
+struct trace_event_raw_rpm_internal {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int flags;
+	int usage_count;
+	int disable_depth;
+	int runtime_auto;
+	int request_pending;
+	int irq_safe;
+	int child_count;
+	char __data[0];
+};
+
+struct trace_event_raw_rpm_return_int {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long ip;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_rpm_status {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rpm_internal {
+	u32 name;
+};
+
+struct trace_event_data_offsets_rpm_return_int {
+	u32 name;
+};
+
+struct trace_event_data_offsets_rpm_status {
+	u32 name;
+};
+
+struct trace_probe_log {
+	const char *subsystem;
+	const char **argv;
+	int argc;
+	int index;
+};
+
+enum {
+	BTF_KIND_UNKN = 0,
+	BTF_KIND_INT = 1,
+	BTF_KIND_PTR = 2,
+	BTF_KIND_ARRAY = 3,
+	BTF_KIND_STRUCT = 4,
+	BTF_KIND_UNION = 5,
+	BTF_KIND_ENUM = 6,
+	BTF_KIND_FWD = 7,
+	BTF_KIND_TYPEDEF = 8,
+	BTF_KIND_VOLATILE = 9,
+	BTF_KIND_CONST = 10,
+	BTF_KIND_RESTRICT = 11,
+	BTF_KIND_FUNC = 12,
+	BTF_KIND_FUNC_PROTO = 13,
+	BTF_KIND_VAR = 14,
+	BTF_KIND_DATASEC = 15,
+	BTF_KIND_FLOAT = 16,
+	BTF_KIND_DECL_TAG = 17,
+	BTF_KIND_TYPE_TAG = 18,
+	BTF_KIND_ENUM64 = 19,
+	NR_BTF_KINDS = 20,
+	BTF_KIND_MAX = 19,
+};
+
+struct btf_array {
+	__u32 type;
+	__u32 index_type;
+	__u32 nelems;
+};
+
+struct btf_member {
+	__u32 name_off;
+	__u32 type;
+	__u32 offset;
+};
+
+struct btf_anon_stack {
+	u32 tid;
+	u32 offset;
+};
+
+struct uprobe_cpu_buffer {
+	struct mutex mutex;
+	void *buf;
+};
+
+struct trace_uprobe {
+	struct dyn_event devent;
+	struct uprobe_consumer consumer;
+	struct path path;
+	struct inode *inode;
+	char *filename;
+	unsigned long offset;
+	unsigned long ref_ctr_offset;
+	unsigned long nhit;
+	struct trace_probe tp;
+};
+
+struct uprobe_trace_entry_head {
+	struct trace_entry ent;
+	unsigned long vaddr[0];
+};
+
+typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);
+
+struct bpf_empty_prog_array {
+	struct bpf_prog_array hdr;
+	struct bpf_prog *null_prog;
+};
+
+struct xdp_mem_info {
+	u32 type;
+	u32 id;
+};
+
+struct xdp_frame {
+	void *data;
+	u16 len;
+	u16 headroom;
+	u32 metasize;
+	struct xdp_mem_info mem;
+	struct net_device *dev_rx;
+	u32 frame_sz;
+	u32 flags;
+};
+
+struct xdp_rxq_info;
+
+struct xdp_txq_info;
+
+struct xdp_buff {
+	void *data;
+	void *data_end;
+	void *data_meta;
+	void *data_hard_start;
+	struct xdp_rxq_info *rxq;
+	struct xdp_txq_info *txq;
+	u32 frame_sz;
+	u32 flags;
+};
+
+struct xdp_rxq_info {
+	struct net_device *dev;
+	u32 queue_index;
+	u32 reg_state;
+	struct xdp_mem_info mem;
+	unsigned int napi_id;
+	u32 frag_size;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_txq_info {
+	struct net_device *dev;
+};
+
+struct xdp_md {
+	__u32 data;
+	__u32 data_end;
+	__u32 data_meta;
+	__u32 ingress_ifindex;
+	__u32 rx_queue_index;
+	__u32 egress_ifindex;
+};
+
+struct rhash_lock_head {};
+
+typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);
+
+typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);
+
+typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32);
+
+struct xdp_cpumap_stats;
+
+typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);
+
+struct xdp_cpumap_stats {
+	unsigned int redirect;
+	unsigned int pass;
+	unsigned int drop;
+};
+
+typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int);
+
+struct xdp_mem_allocator;
+
+typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);
+
+struct xdp_mem_allocator {
+	struct xdp_mem_info mem;
+	union {
+		void *allocator;
+		struct page_pool *page_pool;
+	};
+	struct rhash_head node;
+	struct callback_head rcu;
+};
+
+typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);
+
+typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);
+
+typedef void (*btf_trace_bpf_xdp_link_attach_failed)(void *, const char *);
+
+struct bpf_prog_dummy {
+	struct bpf_prog prog;
+};
+
+enum cgroup_bpf_attach_type {
+	CGROUP_BPF_ATTACH_TYPE_INVALID = -1,
+	CGROUP_INET_INGRESS = 0,
+	CGROUP_INET_EGRESS = 1,
+	CGROUP_INET_SOCK_CREATE = 2,
+	CGROUP_SOCK_OPS = 3,
+	CGROUP_DEVICE = 4,
+	CGROUP_INET4_BIND = 5,
+	CGROUP_INET6_BIND = 6,
+	CGROUP_INET4_CONNECT = 7,
+	CGROUP_INET6_CONNECT = 8,
+	CGROUP_INET4_POST_BIND = 9,
+	CGROUP_INET6_POST_BIND = 10,
+	CGROUP_UDP4_SENDMSG = 11,
+	CGROUP_UDP6_SENDMSG = 12,
+	CGROUP_SYSCTL = 13,
+	CGROUP_UDP4_RECVMSG = 14,
+	CGROUP_UDP6_RECVMSG = 15,
+	CGROUP_GETSOCKOPT = 16,
+	CGROUP_SETSOCKOPT = 17,
+	CGROUP_INET4_GETPEERNAME = 18,
+	CGROUP_INET6_GETPEERNAME = 19,
+	CGROUP_INET4_GETSOCKNAME = 20,
+	CGROUP_INET6_GETSOCKNAME = 21,
+	CGROUP_INET_SOCK_RELEASE = 22,
+	CGROUP_LSM_START = 23,
+	CGROUP_LSM_END = 32,
+	MAX_CGROUP_BPF_ATTACH_TYPE = 33,
+};
+
+enum xdp_action {
+	XDP_ABORTED = 0,
+	XDP_DROP = 1,
+	XDP_PASS = 2,
+	XDP_TX = 3,
+	XDP_REDIRECT = 4,
+};
+
+struct bpf_prog_pack {
+	struct list_head list;
+	void *ptr;
+	unsigned long bitmap[0];
+};
+
+typedef u64 (*btf_bpf_user_rnd_u32)();
+
+typedef u64 (*btf_bpf_get_raw_cpu_id)();
+
+struct trace_event_raw_xdp_exception {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_bulk_tx {
+	struct trace_entry ent;
+	int ifindex;
+	u32 act;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct _bpf_dtab_netdev {
+	struct net_device *dev;
+};
+
+struct trace_event_raw_xdp_redirect_template {
+	struct trace_entry ent;
+	int prog_id;
+	u32 act;
+	int ifindex;
+	int err;
+	int to_ifindex;
+	u32 map_id;
+	int map_index;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_kthread {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int sched;
+	unsigned int xdp_pass;
+	unsigned int xdp_drop;
+	unsigned int xdp_redirect;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_cpumap_enqueue {
+	struct trace_entry ent;
+	int map_id;
+	u32 act;
+	int cpu;
+	unsigned int drops;
+	unsigned int processed;
+	int to_cpu;
+	char __data[0];
+};
+
+struct trace_event_raw_xdp_devmap_xmit {
+	struct trace_entry ent;
+	int from_ifindex;
+	u32 act;
+	int to_ifindex;
+	int drops;
+	int sent;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_disconnect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_connect {
+	struct trace_entry ent;
+	const struct xdp_mem_allocator *xa;
+	u32 mem_id;
+	u32 mem_type;
+	const void *allocator;
+	const struct xdp_rxq_info *rxq;
+	int ifindex;
+	char __data[0];
+};
+
+struct trace_event_raw_mem_return_failed {
+	struct trace_entry ent;
+	const struct page *page;
+	u32 mem_id;
+	u32 mem_type;
+	char __data[0];
+};
+
+struct trace_event_raw_bpf_xdp_link_attach_failed {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_bpf_xdp_link_attach_failed {
+	u32 msg;
+};
+
+struct trace_event_data_offsets_xdp_exception {};
+
+struct trace_event_data_offsets_xdp_bulk_tx {};
+
+struct trace_event_data_offsets_xdp_redirect_template {};
+
+struct trace_event_data_offsets_xdp_cpumap_kthread {};
+
+struct trace_event_data_offsets_xdp_cpumap_enqueue {};
+
+struct trace_event_data_offsets_xdp_devmap_xmit {};
+
+struct trace_event_data_offsets_mem_disconnect {};
+
+struct trace_event_data_offsets_mem_connect {};
+
+struct trace_event_data_offsets_mem_return_failed {};
+
+struct bpf_mprog_cp {
+	struct bpf_link *link;
+};
+
+struct bpf_mprog_bundle {
+	struct bpf_mprog_entry a;
+	struct bpf_mprog_entry b;
+	struct bpf_mprog_cp cp_items[64];
+	struct bpf_prog *ref;
+	atomic64_t revision;
+	u32 count;
+};
+
+enum {
+	BPF_F_NO_PREALLOC = 1,
+	BPF_F_NO_COMMON_LRU = 2,
+	BPF_F_NUMA_NODE = 4,
+	BPF_F_RDONLY = 8,
+	BPF_F_WRONLY = 16,
+	BPF_F_STACK_BUILD_ID = 32,
+	BPF_F_ZERO_SEED = 64,
+	BPF_F_RDONLY_PROG = 128,
+	BPF_F_WRONLY_PROG = 256,
+	BPF_F_CLONE = 512,
+	BPF_F_MMAPABLE = 1024,
+	BPF_F_PRESERVE_ELEMS = 2048,
+	BPF_F_INNER_MAP = 4096,
+	BPF_F_LINK = 8192,
+	BPF_F_PATH_FD = 16384,
+};
+
+enum {
+	BPF_ANY = 0,
+	BPF_NOEXIST = 1,
+	BPF_EXIST = 2,
+	BPF_F_LOCK = 4,
+};
+
+enum bpf_cmd {
+	BPF_MAP_CREATE = 0,
+	BPF_MAP_LOOKUP_ELEM = 1,
+	BPF_MAP_UPDATE_ELEM = 2,
+	BPF_MAP_DELETE_ELEM = 3,
+	BPF_MAP_GET_NEXT_KEY = 4,
+	BPF_PROG_LOAD = 5,
+	BPF_OBJ_PIN = 6,
+	BPF_OBJ_GET = 7,
+	BPF_PROG_ATTACH = 8,
+	BPF_PROG_DETACH = 9,
+	BPF_PROG_TEST_RUN = 10,
+	BPF_PROG_RUN = 10,
+	BPF_PROG_GET_NEXT_ID = 11,
+	BPF_MAP_GET_NEXT_ID = 12,
+	BPF_PROG_GET_FD_BY_ID = 13,
+	BPF_MAP_GET_FD_BY_ID = 14,
+	BPF_OBJ_GET_INFO_BY_FD = 15,
+	BPF_PROG_QUERY = 16,
+	BPF_RAW_TRACEPOINT_OPEN = 17,
+	BPF_BTF_LOAD = 18,
+	BPF_BTF_GET_FD_BY_ID = 19,
+	BPF_TASK_FD_QUERY = 20,
+	BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,
+	BPF_MAP_FREEZE = 22,
+	BPF_BTF_GET_NEXT_ID = 23,
+	BPF_MAP_LOOKUP_BATCH = 24,
+	BPF_MAP_LOOKUP_AND_DELETE_BATCH = 25,
+	BPF_MAP_UPDATE_BATCH = 26,
+	BPF_MAP_DELETE_BATCH = 27,
+	BPF_LINK_CREATE = 28,
+	BPF_LINK_UPDATE = 29,
+	BPF_LINK_GET_FD_BY_ID = 30,
+	BPF_LINK_GET_NEXT_ID = 31,
+	BPF_ENABLE_STATS = 32,
+	BPF_ITER_CREATE = 33,
+	BPF_LINK_DETACH = 34,
+	BPF_PROG_BIND_MAP = 35,
+};
+
+enum perf_bpf_event_type {
+	PERF_BPF_EVENT_UNKNOWN = 0,
+	PERF_BPF_EVENT_PROG_LOAD = 1,
+	PERF_BPF_EVENT_PROG_UNLOAD = 2,
+	PERF_BPF_EVENT_MAX = 3,
+};
+
+enum bpf_audit {
+	BPF_AUDIT_LOAD = 0,
+	BPF_AUDIT_UNLOAD = 1,
+	BPF_AUDIT_MAX = 2,
+};
+
+enum bpf_perf_event_type {
+	BPF_PERF_EVENT_UNSPEC = 0,
+	BPF_PERF_EVENT_UPROBE = 1,
+	BPF_PERF_EVENT_URETPROBE = 2,
+	BPF_PERF_EVENT_KPROBE = 3,
+	BPF_PERF_EVENT_KRETPROBE = 4,
+	BPF_PERF_EVENT_TRACEPOINT = 5,
+	BPF_PERF_EVENT_EVENT = 6,
+};
+
+enum bpf_stats_type {
+	BPF_STATS_RUN_TIME = 0,
+};
+
+typedef u64 (*btf_bpf_sys_bpf)(int, union bpf_attr *, u32);
+
+typedef u64 (*btf_bpf_sys_close)(u32);
+
+typedef u64 (*btf_bpf_kallsyms_lookup_name)(const char *, int, int, u64 *);
+
+struct bpf_tracing_link {
+	struct bpf_tramp_link link;
+	enum bpf_attach_type attach_type;
+	struct bpf_trampoline *trampoline;
+	struct bpf_prog *tgt_prog;
+};
+
+struct bpf_raw_tp_link {
+	struct bpf_link link;
+	struct bpf_raw_event_map *btp;
+};
+
+struct bpf_perf_link {
+	struct bpf_link link;
+	struct file *perf_file;
+};
+
+struct bpf_spin_lock {
+	__u32 val;
+};
+
+struct bpf_prog_kstats {
+	u64 nsecs;
+	u64 cnt;
+	u64 misses;
+};
+
+struct bpf_prog_info {
+	__u32 type;
+	__u32 id;
+	__u8 tag[8];
+	__u32 jited_prog_len;
+	__u32 xlated_prog_len;
+	__u64 jited_prog_insns;
+	__u64 xlated_prog_insns;
+	__u64 load_time;
+	__u32 created_by_uid;
+	__u32 nr_map_ids;
+	__u64 map_ids;
+	char name[16];
+	__u32 ifindex;
+	__u32 gpl_compatible: 1;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 nr_jited_ksyms;
+	__u32 nr_jited_func_lens;
+	__u64 jited_ksyms;
+	__u64 jited_func_lens;
+	__u32 btf_id;
+	__u32 func_info_rec_size;
+	__u64 func_info;
+	__u32 nr_func_info;
+	__u32 nr_line_info;
+	__u64 line_info;
+	__u64 jited_line_info;
+	__u32 nr_jited_line_info;
+	__u32 line_info_rec_size;
+	__u32 jited_line_info_rec_size;
+	__u32 nr_prog_tags;
+	__u64 prog_tags;
+	__u64 run_time_ns;
+	__u64 run_cnt;
+	__u64 recursion_misses;
+	__u32 verified_insns;
+	__u32 attach_btf_obj_id;
+	__u32 attach_btf_id;
+};
+
+struct bpf_map_info {
+	__u32 type;
+	__u32 id;
+	__u32 key_size;
+	__u32 value_size;
+	__u32 max_entries;
+	__u32 map_flags;
+	char name[16];
+	__u32 ifindex;
+	__u32 btf_vmlinux_value_type_id;
+	__u64 netns_dev;
+	__u64 netns_ino;
+	__u32 btf_id;
+	__u32 btf_key_type_id;
+	__u32 btf_value_type_id;
+	__u64 map_extra;
+};
+
+struct bpf_btf_info {
+	__u64 btf;
+	__u32 btf_size;
+	__u32 id;
+	__u64 name;
+	__u32 name_len;
+	__u32 kernel_btf;
+};
+
+struct bpf_attach_target_info {
+	struct btf_func_model fmodel;
+	long tgt_addr;
+	struct module *tgt_mod;
+	const char *tgt_name;
+	const struct btf_type *tgt_type;
+};
+
+struct bpf_verifier_stack_elem {
+	struct bpf_verifier_state st;
+	int insn_idx;
+	int prev_insn_idx;
+	struct bpf_verifier_stack_elem *next;
+	u32 log_pos;
+};
+
+struct bpf_kfunc_desc {
+	struct btf_func_model func_model;
+	u32 func_id;
+	s32 imm;
+	u16 offset;
+	unsigned long addr;
+};
+
+struct bpf_kfunc_desc_tab {
+	struct bpf_kfunc_desc descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_kfunc_btf {
+	struct btf *btf;
+	struct module *module;
+	u16 offset;
+};
+
+struct bpf_kfunc_btf_tab {
+	struct bpf_kfunc_btf descs[256];
+	u32 nr_descs;
+};
+
+struct bpf_reg_types {
+	const enum bpf_reg_type types[10];
+	u32 *btf_id;
+};
+
+enum btf_func_linkage {
+	BTF_FUNC_STATIC = 0,
+	BTF_FUNC_GLOBAL = 1,
+	BTF_FUNC_EXTERN = 2,
+};
+
+enum special_kfunc_type {
+	KF_bpf_obj_new_impl = 0,
+	KF_bpf_obj_drop_impl = 1,
+	KF_bpf_refcount_acquire_impl = 2,
+	KF_bpf_list_push_front_impl = 3,
+	KF_bpf_list_push_back_impl = 4,
+	KF_bpf_list_pop_front = 5,
+	KF_bpf_list_pop_back = 6,
+	KF_bpf_cast_to_kern_ctx = 7,
+	KF_bpf_rdonly_cast = 8,
+	KF_bpf_rcu_read_lock = 9,
+	KF_bpf_rcu_read_unlock = 10,
+	KF_bpf_rbtree_remove = 11,
+	KF_bpf_rbtree_add_impl = 12,
+	KF_bpf_rbtree_first = 13,
+	KF_bpf_dynptr_from_skb = 14,
+	KF_bpf_dynptr_from_xdp = 15,
+	KF_bpf_dynptr_slice = 16,
+	KF_bpf_dynptr_slice_rdwr = 17,
+	KF_bpf_dynptr_clone = 18,
+};
+
+enum bpf_stack_slot_type {
+	STACK_INVALID = 0,
+	STACK_SPILL = 1,
+	STACK_MISC = 2,
+	STACK_ZERO = 3,
+	STACK_DYNPTR = 4,
+	STACK_ITER = 5,
+};
+
+enum bpf_type_flag {
+	PTR_MAYBE_NULL = 256,
+	MEM_RDONLY = 512,
+	MEM_RINGBUF = 1024,
+	MEM_USER = 2048,
+	MEM_PERCPU = 4096,
+	OBJ_RELEASE = 8192,
+	PTR_UNTRUSTED = 16384,
+	MEM_UNINIT = 32768,
+	DYNPTR_TYPE_LOCAL = 65536,
+	DYNPTR_TYPE_RINGBUF = 131072,
+	MEM_FIXED_SIZE = 262144,
+	MEM_ALLOC = 524288,
+	PTR_TRUSTED = 1048576,
+	MEM_RCU = 2097152,
+	NON_OWN_REF = 4194304,
+	DYNPTR_TYPE_SKB = 8388608,
+	DYNPTR_TYPE_XDP = 16777216,
+	__BPF_TYPE_FLAG_MAX = 16777217,
+	__BPF_TYPE_LAST_FLAG = 16777216,
+};
+
+enum bpf_access_src {
+	ACCESS_DIRECT = 1,
+	ACCESS_HELPER = 2,
+};
+
+enum bpf_core_relo_kind {
+	BPF_CORE_FIELD_BYTE_OFFSET = 0,
+	BPF_CORE_FIELD_BYTE_SIZE = 1,
+	BPF_CORE_FIELD_EXISTS = 2,
+	BPF_CORE_FIELD_SIGNED = 3,
+	BPF_CORE_FIELD_LSHIFT_U64 = 4,
+	BPF_CORE_FIELD_RSHIFT_U64 = 5,
+	BPF_CORE_TYPE_ID_LOCAL = 6,
+	BPF_CORE_TYPE_ID_TARGET = 7,
+	BPF_CORE_TYPE_EXISTS = 8,
+	BPF_CORE_TYPE_SIZE = 9,
+	BPF_CORE_ENUMVAL_EXISTS = 10,
+	BPF_CORE_ENUMVAL_VALUE = 11,
+	BPF_CORE_TYPE_MATCHES = 12,
+};
+
+enum {
+	DISCOVERED = 16,
+	EXPLORED = 32,
+	FALLTHROUGH = 1,
+	BRANCH = 2,
+};
+
+enum {
+	DONE_EXPLORING = 0,
+	KEEP_EXPLORING = 1,
+};
+
+enum reg_arg_type {
+	SRC_OP = 0,
+	DST_OP = 1,
+	DST_OP_NO_MARK = 2,
+};
+
+enum {
+	REASON_BOUNDS = -1,
+	REASON_TYPE = -2,
+	REASON_PATHS = -3,
+	REASON_LIMIT = -4,
+	REASON_STACK = -5,
+};
+
+enum kfunc_ptr_arg_type {
+	KF_ARG_PTR_TO_CTX = 0,
+	KF_ARG_PTR_TO_ALLOC_BTF_ID = 1,
+	KF_ARG_PTR_TO_REFCOUNTED_KPTR = 2,
+	KF_ARG_PTR_TO_DYNPTR = 3,
+	KF_ARG_PTR_TO_ITER = 4,
+	KF_ARG_PTR_TO_LIST_HEAD = 5,
+	KF_ARG_PTR_TO_LIST_NODE = 6,
+	KF_ARG_PTR_TO_BTF_ID = 7,
+	KF_ARG_PTR_TO_MEM = 8,
+	KF_ARG_PTR_TO_MEM_SIZE = 9,
+	KF_ARG_PTR_TO_CALLBACK = 10,
+	KF_ARG_PTR_TO_RB_ROOT = 11,
+	KF_ARG_PTR_TO_RB_NODE = 12,
+};
+
+enum {
+	KF_ARG_DYNPTR_ID = 0,
+	KF_ARG_LIST_HEAD_ID = 1,
+	KF_ARG_LIST_NODE_ID = 2,
+	KF_ARG_RB_ROOT_ID = 3,
+	KF_ARG_RB_NODE_ID = 4,
+};
+
+enum {
+	BTF_TRACING_TYPE_TASK = 0,
+	BTF_TRACING_TYPE_FILE = 1,
+	BTF_TRACING_TYPE_VMA = 2,
+	MAX_BTF_TRACING_TYPE = 3,
+};
+
+enum sk_action {
+	SK_DROP = 0,
+	SK_PASS = 1,
+};
+
+enum {
+	AT_PKT_END = -1,
+	BEYOND_PKT_END = -2,
+};
+
+enum {
+	BPF_MAX_LOOPS = 8388608,
+};
+
+struct bpf_iter_meta__safe_trusted {
+	struct seq_file *seq;
+};
+
+struct bpf_iter__task__safe_trusted {
+	struct bpf_iter_meta *meta;
+	struct task_struct *task;
+};
+
+struct linux_binprm__safe_trusted {
+	struct file *file;
+};
+
+struct file__safe_trusted {
+	struct inode *f_inode;
+};
+
+struct dentry__safe_trusted {
+	struct inode *d_inode;
+};
+
+struct socket__safe_trusted {
+	struct sock *sk;
+};
+
+struct task_struct__safe_rcu {
+	const cpumask_t *cpus_ptr;
+	struct css_set __attribute__((btf_type_tag("rcu"))) *cgroups;
+	struct task_struct __attribute__((btf_type_tag("rcu"))) *real_parent;
+	struct task_struct *group_leader;
+};
+
+struct cgroup__safe_rcu {
+	struct kernfs_node *kn;
+};
+
+struct css_set__safe_rcu {
+	struct cgroup *dfl_cgrp;
+};
+
+struct mm_struct__safe_rcu_or_null {
+	struct file __attribute__((btf_type_tag("rcu"))) *exe_file;
+};
+
+struct sk_buff__safe_rcu_or_null {
+	struct sock *sk;
+};
+
+struct request_sock__safe_rcu_or_null {
+	struct sock *sk;
+};
+
+struct btf_var_secinfo {
+	__u32 type;
+	__u32 offset;
+	__u32 size;
+};
+
+struct bpf_iter;
+
+typedef void (*bpf_insn_print_t)(void *, const char *, ...);
+
+typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);
+
+typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);
+
+struct bpf_insn_cbs {
+	bpf_insn_print_t cb_print;
+	bpf_insn_revmap_call_t cb_call;
+	bpf_insn_print_imm_t cb_imm;
+	void *private_data;
+};
+
+typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
+
+struct bpf_core_relo {
+	__u32 insn_off;
+	__u32 type_id;
+	__u32 access_str_off;
+	enum bpf_core_relo_kind kind;
+};
+
+struct bpf_core_ctx {
+	struct bpf_verifier_log *log;
+	const struct btf *btf;
+};
+
+struct bpf_struct_ops {
+	const struct bpf_verifier_ops *verifier_ops;
+	int (*init)(struct btf *);
+	int (*check_member)(const struct btf_type *, const struct btf_member *, const struct bpf_prog *);
+	int (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *);
+	int (*reg)(void *);
+	void (*unreg)(void *);
+	int (*update)(void *, void *);
+	int (*validate)(void *);
+	const struct btf_type *type;
+	const struct btf_type *value_type;
+	const char *name;
+	struct btf_func_model func_models[64];
+	u32 type_id;
+	u32 value_id;
+	u64 android_kabi_reserved1;
+};
+
+struct bpf_kfunc_call_arg_meta {
+	struct btf *btf;
+	u32 func_id;
+	u32 kfunc_flags;
+	const struct btf_type *func_proto;
+	const char *func_name;
+	u32 ref_obj_id;
+	u8 release_regno;
+	bool r0_rdonly;
+	u32 ret_btf_id;
+	u64 r0_size;
+	u32 subprogno;
+	struct {
+		u64 value;
+		bool found;
+	} arg_constant;
+	struct btf *arg_btf;
+	u32 arg_btf_id;
+	bool arg_owning_ref;
+	struct {
+		struct btf_field *field;
+	} arg_list_head;
+	struct {
+		struct btf_field *field;
+	} arg_rbtree_root;
+	struct {
+		enum bpf_dynptr_type type;
+		u32 id;
+		u32 ref_obj_id;
+	} initialized_dynptr;
+	struct {
+		u8 spi;
+		u8 frameno;
+	} iter;
+	u64 mem_size;
+};
+
+struct bpf_call_arg_meta {
+	struct bpf_map *map_ptr;
+	bool raw_mode;
+	bool pkt_access;
+	u8 release_regno;
+	int regno;
+	int access_size;
+	int mem_size;
+	u64 msize_max_value;
+	int ref_obj_id;
+	int dynptr_id;
+	int map_uid;
+	int func_id;
+	struct btf *btf;
+	u32 btf_id;
+	struct btf *ret_btf;
+	u32 ret_btf_id;
+	u32 subprogno;
+	struct btf_field *kptr_field;
+};
+
+struct bpf_sanitize_info {
+	struct bpf_insn_aux_data aux;
+	bool mask_to_left;
+};
+
+typedef int (*set_callee_state_fn)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *, int);
+
+struct bpf_preload_info;
+
+struct bpf_preload_ops {
+	int (*preload)(struct bpf_preload_info *);
+	struct module *owner;
+};
+
+struct bpf_preload_info {
+	char link_name[16];
+	struct bpf_link *link;
+};
+
+struct tree_descr {
+	const char *name;
+	const struct file_operations *ops;
+	int mode;
+};
+
+enum bpf_type {
+	BPF_TYPE_UNSPEC = 0,
+	BPF_TYPE_PROG = 1,
+	BPF_TYPE_MAP = 2,
+	BPF_TYPE_LINK = 3,
+};
+
+enum {
+	OPT_MODE = 0,
+};
+
+struct map_iter {
+	void *key;
+	bool done;
+};
+
+struct bpf_mount_opts {
+	umode_t mode;
+};
+
+struct bpf_hrtimer {
+	struct hrtimer timer;
+	struct bpf_map *map;
+	struct bpf_prog *prog;
+	void __attribute__((btf_type_tag("rcu"))) *callback_fn;
+	void *value;
+	struct callback_head rcu;
+};
+
+struct bpf_bprintf_buffers {
+	char bin_args[512];
+	char buf[1024];
+};
+
+enum {
+	BPF_F_TIMER_ABS = 1,
+};
+
+typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_map_delete_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_push_elem)(struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_map_pop_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);
+
+typedef u64 (*btf_bpf_map_lookup_percpu_elem)(struct bpf_map *, void *, u32);
+
+typedef u64 (*btf_bpf_get_smp_processor_id)();
+
+typedef u64 (*btf_bpf_get_numa_node_id)();
+
+typedef u64 (*btf_bpf_ktime_get_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_boot_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_coarse_ns)();
+
+typedef u64 (*btf_bpf_ktime_get_tai_ns)();
+
+typedef u64 (*btf_bpf_get_current_pid_tgid)();
+
+typedef u64 (*btf_bpf_get_current_uid_gid)();
+
+typedef u64 (*btf_bpf_get_current_comm)(char *, u32);
+
+typedef u64 (*btf_bpf_spin_lock)(struct bpf_spin_lock *);
+
+typedef u64 (*btf_bpf_spin_unlock)(struct bpf_spin_lock *);
+
+typedef u64 (*btf_bpf_jiffies64)();
+
+typedef u64 (*btf_bpf_get_current_cgroup_id)();
+
+typedef u64 (*btf_bpf_get_current_ancestor_cgroup_id)(int);
+
+typedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long *);
+
+typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, unsigned long *);
+
+typedef u64 (*btf_bpf_strncmp)(const char *, u32, const char *);
+
+struct bpf_pidns_info;
+
+typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);
+
+struct bpf_pidns_info {
+	__u32 pid;
+	__u32 tgid;
+};
+
+typedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void __attribute__((btf_type_tag("user"))) *);
+
+typedef u64 (*btf_bpf_copy_from_user_task)(void *, u32, const void __attribute__((btf_type_tag("user"))) *, struct task_struct *, u64);
+
+typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);
+
+typedef u64 (*btf_bpf_this_cpu_ptr)(const void *);
+
+typedef u64 (*btf_bpf_snprintf)(char *, u32, char *, const void *, u32);
+
+struct bpf_timer_kern;
+
+typedef u64 (*btf_bpf_timer_init)(struct bpf_timer_kern *, struct bpf_map *, u64);
+
+struct bpf_timer_kern {
+	struct bpf_hrtimer *timer;
+	struct bpf_spin_lock lock;
+};
+
+typedef u64 (*btf_bpf_timer_set_callback)(struct bpf_timer_kern *, void *, struct bpf_prog_aux *);
+
+typedef u64 (*btf_bpf_timer_start)(struct bpf_timer_kern *, u64, u64);
+
+typedef u64 (*btf_bpf_timer_cancel)(struct bpf_timer_kern *);
+
+typedef u64 (*btf_bpf_kptr_xchg)(void *, void *);
+
+typedef u64 (*btf_bpf_dynptr_from_mem)(void *, u32, u64, struct bpf_dynptr_kern *);
+
+typedef u64 (*btf_bpf_dynptr_read)(void *, u32, const struct bpf_dynptr_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_write)(const struct bpf_dynptr_kern *, u32, void *, u32, u64);
+
+typedef u64 (*btf_bpf_dynptr_data)(const struct bpf_dynptr_kern *, u32, u32);
+
+struct bpf_refcount {
+	int: 32;
+};
+
+struct bpf_rb_node_kern {
+	struct rb_node rb_node;
+	void *owner;
+};
+
+struct bpf_rb_node {
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_timer {
+	long: 64;
+	long: 64;
+};
+
+struct bpf_dynptr {
+	long: 64;
+	long: 64;
+};
+
+struct bpf_list_node_kern {
+	struct list_head list_head;
+	void *owner;
+};
+
+struct bpf_list_node {
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_list_head {
+	long: 64;
+	long: 64;
+};
+
+struct bpf_rb_root {
+	long: 64;
+	long: 64;
+};
+
+struct btf_id_dtor_kfunc {
+	u32 btf_id;
+	u32 kfunc_btf_id;
+};
+
+enum bpf_iter_feature {
+	BPF_ITER_RESCHED = 1,
+};
+
+struct bpf_iter_target_info {
+	struct list_head list;
+	const struct bpf_iter_reg *reg_info;
+	u32 btf_id;
+};
+
+struct bpf_iter_link {
+	struct bpf_link link;
+	struct bpf_iter_aux_info aux;
+	struct bpf_iter_target_info *tinfo;
+};
+
+struct bpf_iter_priv_data {
+	struct bpf_iter_target_info *tinfo;
+	const struct bpf_iter_seq_info *seq_info;
+	struct bpf_prog *prog;
+	u64 session_id;
+	u64 seq_num;
+	bool done_stop;
+	long: 0;
+	u8 target_private[0];
+};
+
+typedef u64 (*btf_bpf_for_each_map_elem)(struct bpf_map *, void *, void *, u64);
+
+typedef u64 (*btf_bpf_loop)(u32, void *, void *, u64);
+
+struct btf_iter_num;
+
+struct bpf_iter_num {
+	__u64 __opaque[1];
+};
+
+struct bpf_iter_num_kern {
+	int cur;
+	int end;
+};
+
+struct bpf_iter__bpf_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+};
+
+struct bpf_iter_seq_map_info {
+	u32 map_id;
+};
+
+struct mmap_unlock_irq_work {
+	struct irq_work irq_work;
+	struct mm_struct *mm;
+};
+
+enum bpf_task_vma_iter_find_op {
+	task_vma_iter_first_vma = 0,
+	task_vma_iter_next_vma = 1,
+	task_vma_iter_find_vma = 2,
+};
+
+typedef u64 (*btf_bpf_find_vma)(struct task_struct *, u64, bpf_callback_t, void *, u64);
+
+struct bpf_iter__task {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+};
+
+struct bpf_iter_seq_task_common {
+	struct pid_namespace *ns;
+	enum bpf_iter_task_type type;
+	u32 pid;
+	u32 pid_visiting;
+};
+
+struct bpf_iter__task_file {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	u32 fd;
+	union {
+		struct file *file;
+	};
+};
+
+struct bpf_iter_seq_task_file_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	u32 tid;
+	u32 fd;
+};
+
+struct bpf_iter__task_vma {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct task_struct *task;
+	};
+	union {
+		struct vm_area_struct *vma;
+	};
+};
+
+struct bpf_iter_seq_task_vma_info {
+	struct bpf_iter_seq_task_common common;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	struct vm_area_struct *vma;
+	u32 tid;
+	unsigned long prev_vm_start;
+	unsigned long prev_vm_end;
+};
+
+struct bpf_iter_seq_task_info {
+	struct bpf_iter_seq_task_common common;
+	u32 tid;
+};
+
+struct bpf_iter__bpf_prog {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_prog *prog;
+	};
+};
+
+struct bpf_iter_seq_prog_info {
+	u32 prog_id;
+};
+
+struct bpf_iter__bpf_link {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_link *link;
+	};
+};
+
+struct bpf_iter_seq_link_info {
+	u32 link_id;
+};
+
+struct pcpu_freelist_node;
+
+struct pcpu_freelist_head {
+	struct pcpu_freelist_node *first;
+	raw_spinlock_t lock;
+};
+
+struct pcpu_freelist {
+	struct pcpu_freelist_head __attribute__((btf_type_tag("percpu"))) *freelist;
+	struct pcpu_freelist_head extralist;
+};
+
+struct bpf_lru_list {
+	struct list_head lists[3];
+	unsigned int counts[2];
+	struct list_head *next_inactive_rotation;
+	raw_spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_lru_locallist;
+
+struct bpf_common_lru {
+	struct bpf_lru_list lru_list;
+	struct bpf_lru_locallist __attribute__((btf_type_tag("percpu"))) *local_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_lru_node;
+
+typedef bool (*del_from_htab_func)(void *, struct bpf_lru_node *);
+
+struct bpf_lru {
+	union {
+		struct bpf_common_lru common_lru;
+		struct bpf_lru_list __attribute__((btf_type_tag("percpu"))) *percpu_lru;
+	};
+	del_from_htab_func del_from_htab;
+	void *del_arg;
+	unsigned int hash_offset;
+	unsigned int nr_scans;
+	bool percpu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bucket;
+
+struct htab_elem;
+
+struct bpf_htab {
+	struct bpf_map map;
+	struct bpf_mem_alloc ma;
+	struct bpf_mem_alloc pcpu_ma;
+	struct bucket *buckets;
+	void *elems;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	union {
+		struct pcpu_freelist freelist;
+		struct bpf_lru lru;
+	};
+	struct htab_elem * __attribute__((btf_type_tag("percpu"))) *extra_elems;
+	struct percpu_counter pcount;
+	atomic_t count;
+	bool use_percpu_counter;
+	u32 n_buckets;
+	u32 elem_size;
+	u32 hashrnd;
+	struct lock_class_key lockdep_key;
+	int __attribute__((btf_type_tag("percpu"))) *map_locked[8];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bucket {
+	struct hlist_nulls_head head;
+	raw_spinlock_t raw_lock;
+};
+
+struct pcpu_freelist_node {
+	struct pcpu_freelist_node *next;
+};
+
+struct bpf_lru_locallist {
+	struct list_head lists[2];
+	u16 next_steal;
+	raw_spinlock_t lock;
+};
+
+struct bpf_lru_node {
+	struct list_head list;
+	u16 cpu;
+	u8 type;
+	u8 ref;
+};
+
+struct htab_elem {
+	union {
+		struct hlist_nulls_node hash_node;
+		struct {
+			void *padding;
+			union {
+				struct pcpu_freelist_node fnode;
+				struct htab_elem *batch_flink;
+			};
+		};
+	};
+	union {
+		void *ptr_to_pptr;
+		struct bpf_lru_node lru_node;
+	};
+	u32 hash;
+	long: 0;
+	char key[0];
+};
+
+struct bpf_iter_seq_hash_map_info {
+	struct bpf_map *map;
+	struct bpf_htab *htab;
+	void *percpu_value_buf;
+	u32 bucket_id;
+	u32 skip_elems;
+};
+
+struct bpf_iter__bpf_map_elem {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		void *value;
+	};
+};
+
+struct prog_poke_elem {
+	struct list_head list;
+	struct bpf_prog_aux *aux;
+};
+
+struct bpf_iter_seq_array_map_info {
+	struct bpf_map *map;
+	void *percpu_value_buf;
+	u32 index;
+};
+
+enum bpf_lru_list_type {
+	BPF_LRU_LIST_T_ACTIVE = 0,
+	BPF_LRU_LIST_T_INACTIVE = 1,
+	BPF_LRU_LIST_T_FREE = 2,
+	BPF_LRU_LOCAL_LIST_T_FREE = 3,
+	BPF_LRU_LOCAL_LIST_T_PENDING = 4,
+};
+
+struct lpm_trie_node;
+
+struct lpm_trie {
+	struct bpf_map map;
+	struct lpm_trie_node __attribute__((btf_type_tag("rcu"))) *root;
+	size_t n_entries;
+	size_t max_prefixlen;
+	size_t data_size;
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct lpm_trie_node {
+	struct callback_head rcu;
+	struct lpm_trie_node __attribute__((btf_type_tag("rcu"))) *child[2];
+	u32 prefixlen;
+	u32 flags;
+	u8 data[0];
+};
+
+struct bpf_lpm_trie_key {
+	__u32 prefixlen;
+	__u8 data[0];
+};
+
+struct bpf_bloom_filter {
+	struct bpf_map map;
+	u32 bitset_mask;
+	u32 hash_seed;
+	u32 nr_hash_funcs;
+	unsigned long bitset[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_cgroup_storage_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	struct rb_root root;
+	struct list_head list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum bpf_cgroup_storage_type {
+	BPF_CGROUP_STORAGE_SHARED = 0,
+	BPF_CGROUP_STORAGE_PERCPU = 1,
+	__BPF_CGROUP_STORAGE_MAX = 2,
+};
+
+struct bpf_queue_stack {
+	struct bpf_map map;
+	raw_spinlock_t lock;
+	u32 head;
+	u32 tail;
+	u32 size;
+	char elements[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	BPF_RINGBUF_BUSY_BIT = 2147483648,
+	BPF_RINGBUF_DISCARD_BIT = 1073741824,
+	BPF_RINGBUF_HDR_SZ = 8,
+};
+
+enum {
+	BPF_RB_NO_WAKEUP = 1,
+	BPF_RB_FORCE_WAKEUP = 2,
+};
+
+enum {
+	BPF_RB_AVAIL_DATA = 0,
+	BPF_RB_RING_SIZE = 1,
+	BPF_RB_CONS_POS = 2,
+	BPF_RB_PROD_POS = 3,
+};
+
+typedef u64 (*btf_bpf_ringbuf_reserve)(struct bpf_map *, u64, u64);
+
+typedef u64 (*btf_bpf_ringbuf_submit)(void *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_discard)(void *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_output)(struct bpf_map *, void *, u64, u64);
+
+typedef u64 (*btf_bpf_ringbuf_query)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_reserve_dynptr)(struct bpf_map *, u32, u64, struct bpf_dynptr_kern *);
+
+typedef u64 (*btf_bpf_ringbuf_submit_dynptr)(struct bpf_dynptr_kern *, u64);
+
+typedef u64 (*btf_bpf_ringbuf_discard_dynptr)(struct bpf_dynptr_kern *, u64);
+
+typedef u64 (*btf_bpf_user_ringbuf_drain)(struct bpf_map *, void *, void *, u64);
+
+struct bpf_ringbuf {
+	wait_queue_head_t waitq;
+	struct irq_work work;
+	u64 mask;
+	struct page **pages;
+	int nr_pages;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t spinlock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_t busy;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long consumer_pos;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long producer_pos;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	char data[0];
+};
+
+struct bpf_ringbuf_map {
+	struct bpf_map map;
+	struct bpf_ringbuf *rb;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_ringbuf_hdr {
+	u32 len;
+	u32 pg_off;
+};
+
+struct bpf_local_storage_elem {
+	struct hlist_node map_node;
+	struct hlist_node snode;
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) *local_storage;
+	struct callback_head rcu;
+	long: 64;
+	struct bpf_local_storage_data sdata;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_local_storage_cache {
+	spinlock_t idx_lock;
+	u64 idx_usage_counts[16];
+};
+
+enum {
+	BPF_LOCAL_STORAGE_GET_F_CREATE = 1,
+	BPF_SK_STORAGE_GET_F_CREATE = 1,
+};
+
+typedef u64 (*btf_bpf_task_storage_get_recur)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_get)(struct bpf_map *, struct task_struct *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_task_storage_delete_recur)(struct bpf_map *, struct task_struct *);
+
+typedef u64 (*btf_bpf_task_storage_delete)(struct bpf_map *, struct task_struct *);
+
+typedef u64 (*btf_bpf_inode_storage_get)(struct bpf_map *, struct inode *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_inode_storage_delete)(struct bpf_map *, struct inode *);
+
+struct bpf_storage_blob {
+	struct bpf_local_storage __attribute__((btf_type_tag("rcu"))) *storage;
+};
+
+struct bpf_tuple {
+	struct bpf_prog *prog;
+	struct bpf_link *link;
+};
+
+enum {
+	BPF_MAX_TRAMP_LINKS = 38,
+};
+
+struct bpf_shim_tramp_link {
+	struct bpf_tramp_link link;
+	struct bpf_trampoline *trampoline;
+};
+
+struct btf_kfunc_hook_filter {
+	btf_kfunc_filter_t filters[16];
+	u32 nr_filters;
+};
+
+struct btf_kfunc_set_tab {
+	struct btf_id_set8 *sets[13];
+	struct btf_kfunc_hook_filter hook_filters[13];
+};
+
+struct btf_id_dtor_kfunc_tab {
+	u32 cnt;
+	struct btf_id_dtor_kfunc dtors[0];
+};
+
+struct btf_struct_metas {
+	u32 cnt;
+	struct btf_struct_meta types[0];
+};
+
+struct nd_opt_hdr {
+	__u8 nd_opt_type;
+	__u8 nd_opt_len;
+};
+
+struct ndisc_options {
+	struct nd_opt_hdr *nd_opt_array[15];
+	struct nd_opt_hdr *nd_opts_ri;
+	struct nd_opt_hdr *nd_opts_ri_end;
+	struct nd_opt_hdr *nd_useropts;
+	struct nd_opt_hdr *nd_useropts_end;
+	struct nd_opt_hdr *nd_802154_opt_array[3];
+};
+
+struct prefix_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	union {
+		__u8 flags;
+		struct {
+			__u8 reserved: 6;
+			__u8 autoconf: 1;
+			__u8 onlink: 1;
+		};
+	};
+	__be32 valid;
+	__be32 prefered;
+	__be32 reserved2;
+	struct in6_addr prefix;
+};
+
+struct inet_ehash_bucket;
+
+struct inet_bind_hashbucket;
+
+struct inet_listen_hashbucket;
+
+struct inet_hashinfo {
+	struct inet_ehash_bucket *ehash;
+	spinlock_t *ehash_locks;
+	unsigned int ehash_mask;
+	unsigned int ehash_locks_mask;
+	struct kmem_cache *bind_bucket_cachep;
+	struct inet_bind_hashbucket *bhash;
+	struct kmem_cache *bind2_bucket_cachep;
+	struct inet_bind_hashbucket *bhash2;
+	unsigned int bhash_size;
+	unsigned int lhash2_mask;
+	struct inet_listen_hashbucket *lhash2;
+	bool pernet;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct inet_ehash_bucket {
+	struct hlist_nulls_head chain;
+};
+
+struct inet_bind_hashbucket {
+	spinlock_t lock;
+	struct hlist_head chain;
+};
+
+struct inet_listen_hashbucket {
+	spinlock_t lock;
+	struct hlist_nulls_head nulls_head;
+};
+
+struct inet_peer_base {
+	struct rb_root rb_root;
+	seqlock_t lock;
+	int total;
+};
+
+struct ack_sample {
+	u32 pkts_acked;
+	s32 rtt_us;
+	u32 in_flight;
+};
+
+struct rate_sample {
+	u64 prior_mstamp;
+	u32 prior_delivered;
+	u32 prior_delivered_ce;
+	s32 delivered;
+	s32 delivered_ce;
+	long interval_us;
+	u32 snd_interval_us;
+	u32 rcv_interval_us;
+	long rtt_us;
+	int losses;
+	u32 acked_sacked;
+	u32 prior_in_flight;
+	u32 last_end_seq;
+	bool is_app_limited;
+	bool is_retrans;
+	bool is_ack_delayed;
+};
+
+struct lwtunnel_state {
+	__u16 type;
+	__u16 flags;
+	__u16 headroom;
+	atomic_t refcnt;
+	int (*orig_output)(struct net *, struct sock *, struct sk_buff *);
+	int (*orig_input)(struct sk_buff *);
+	struct callback_head rcu;
+	__u8 data[0];
+};
+
+struct sk_psock_progs {
+	struct bpf_prog *msg_parser;
+	struct bpf_prog *stream_parser;
+	struct bpf_prog *stream_verdict;
+	struct bpf_prog *skb_verdict;
+};
+
+struct sk_psock_work_state {
+	u32 len;
+	u32 off;
+};
+
+struct sk_msg;
+
+struct sk_psock {
+	struct sock *sk;
+	struct sock *sk_redir;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 eval;
+	bool redir_ingress;
+	struct sk_msg *cork;
+	struct sk_psock_progs progs;
+	struct sk_buff_head ingress_skb;
+	struct list_head ingress_msg;
+	spinlock_t ingress_lock;
+	unsigned long state;
+	struct list_head link;
+	spinlock_t link_lock;
+	refcount_t refcnt;
+	void (*saved_unhash)(struct sock *);
+	void (*saved_destroy)(struct sock *);
+	void (*saved_close)(struct sock *, long);
+	void (*saved_write_space)(struct sock *);
+	void (*saved_data_ready)(struct sock *);
+	int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool);
+	struct proto *sk_proto;
+	struct mutex work_mutex;
+	struct sk_psock_work_state work_state;
+	struct delayed_work work;
+	struct sock *sk_pair;
+	struct rcu_work rwork;
+};
+
+struct sk_msg_sg {
+	u32 start;
+	u32 curr;
+	u32 end;
+	u32 size;
+	u32 copybreak;
+	unsigned long copy[1];
+	struct scatterlist data[19];
+};
+
+struct sk_msg {
+	struct sk_msg_sg sg;
+	void *data;
+	void *data_end;
+	u32 apply_bytes;
+	u32 cork_bytes;
+	u32 flags;
+	struct sk_buff *skb;
+	struct sock *sk_redir;
+	struct sock *sk;
+	struct list_head list;
+};
+
+struct bpf_flow_keys;
+
+struct bpf_sock;
+
+struct __sk_buff {
+	__u32 len;
+	__u32 pkt_type;
+	__u32 mark;
+	__u32 queue_mapping;
+	__u32 protocol;
+	__u32 vlan_present;
+	__u32 vlan_tci;
+	__u32 vlan_proto;
+	__u32 priority;
+	__u32 ingress_ifindex;
+	__u32 ifindex;
+	__u32 tc_index;
+	__u32 cb[5];
+	__u32 hash;
+	__u32 tc_classid;
+	__u32 data;
+	__u32 data_end;
+	__u32 napi_id;
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 data_meta;
+	union {
+		struct bpf_flow_keys *flow_keys;
+	};
+	__u64 tstamp;
+	__u32 wire_len;
+	__u32 gso_segs;
+	union {
+		struct bpf_sock *sk;
+	};
+	__u32 gso_size;
+	__u8 tstamp_type;
+	__u64 hwtstamp;
+};
+
+struct bpf_sock {
+	__u32 bound_dev_if;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 mark;
+	__u32 priority;
+	__u32 src_ip4;
+	__u32 src_ip6[4];
+	__u32 src_port;
+	__be16 dst_port;
+	__u32 dst_ip4;
+	__u32 dst_ip6[4];
+	__u32 state;
+	__s32 rx_queue_mapping;
+};
+
+struct bpf_sock_addr {
+	__u32 user_family;
+	__u32 user_ip4;
+	__u32 user_ip6[4];
+	__u32 user_port;
+	__u32 family;
+	__u32 type;
+	__u32 protocol;
+	__u32 msg_src_ip4;
+	__u32 msg_src_ip6[4];
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct bpf_sock_addr_kern {
+	struct sock *sk;
+	struct sockaddr *uaddr;
+	u64 tmp_reg;
+	void *t_ctx;
+	u32 uaddrlen;
+};
+
+struct bpf_sock_ops {
+	__u32 op;
+	union {
+		__u32 args[4];
+		__u32 reply;
+		__u32 replylong[4];
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 is_fullsock;
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 bpf_sock_ops_cb_flags;
+	__u32 state;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u32 sk_txhash;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *skb_data;
+	};
+	union {
+		void *skb_data_end;
+	};
+	__u32 skb_len;
+	__u32 skb_tcp_flags;
+	__u64 skb_hwtstamp;
+};
+
+struct bpf_sock_ops_kern {
+	struct sock *sk;
+	union {
+		u32 args[4];
+		u32 reply;
+		u32 replylong[4];
+	};
+	struct sk_buff *syn_skb;
+	struct sk_buff *skb;
+	void *skb_data_end;
+	u8 op;
+	u8 is_fullsock;
+	u8 remaining_opt_len;
+	u64 temp;
+};
+
+struct sk_msg_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 family;
+	__u32 remote_ip4;
+	__u32 local_ip4;
+	__u32 remote_ip6[4];
+	__u32 local_ip6[4];
+	__u32 remote_port;
+	__u32 local_port;
+	__u32 size;
+	union {
+		struct bpf_sock *sk;
+	};
+};
+
+struct bpf_flow_dissector {
+	struct bpf_flow_keys *flow_keys;
+	const struct sk_buff *skb;
+	const void *data;
+	const void *data_end;
+};
+
+struct bpf_perf_event_data {
+	bpf_user_pt_regs_t regs;
+	__u64 sample_period;
+	__u64 addr;
+};
+
+struct bpf_cgroup_dev_ctx {
+	__u32 access_type;
+	__u32 major;
+	__u32 minor;
+};
+
+struct bpf_sysctl {
+	__u32 write;
+	__u32 file_pos;
+};
+
+struct bpf_sysctl_kern {
+	struct ctl_table_header *head;
+	struct ctl_table *table;
+	void *cur_val;
+	size_t cur_len;
+	void *new_val;
+	size_t new_len;
+	int new_updated;
+	int write;
+	loff_t *ppos;
+	u64 tmp_reg;
+};
+
+struct bpf_sockopt {
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		void *optval;
+	};
+	union {
+		void *optval_end;
+	};
+	__s32 level;
+	__s32 optname;
+	__s32 optlen;
+	__s32 retval;
+};
+
+struct bpf_sockopt_kern {
+	struct sock *sk;
+	u8 *optval;
+	u8 *optval_end;
+	s32 level;
+	s32 optname;
+	s32 optlen;
+	struct task_struct *current_task;
+	u64 tmp_reg;
+};
+
+struct sk_reuseport_md {
+	union {
+		void *data;
+	};
+	union {
+		void *data_end;
+	};
+	__u32 len;
+	__u32 eth_protocol;
+	__u32 ip_protocol;
+	__u32 bind_inany;
+	__u32 hash;
+	union {
+		struct bpf_sock *sk;
+	};
+	union {
+		struct bpf_sock *migrating_sk;
+	};
+};
+
+struct sk_reuseport_kern {
+	struct sk_buff *skb;
+	struct sock *sk;
+	struct sock *selected_sk;
+	struct sock *migrating_sk;
+	void *data_end;
+	u32 hash;
+	u32 reuseport_id;
+	bool bind_inany;
+};
+
+struct bpf_sk_lookup {
+	union {
+		union {
+			struct bpf_sock *sk;
+		};
+		__u64 cookie;
+	};
+	__u32 family;
+	__u32 protocol;
+	__u32 remote_ip4;
+	__u32 remote_ip6[4];
+	__be16 remote_port;
+	__u32 local_ip4;
+	__u32 local_ip6[4];
+	__u32 local_port;
+	__u32 ingress_ifindex;
+};
+
+struct bpf_sk_lookup_kern {
+	u16 family;
+	u16 protocol;
+	__be16 sport;
+	u16 dport;
+	struct {
+		__be32 saddr;
+		__be32 daddr;
+	} v4;
+	struct {
+		const struct in6_addr *saddr;
+		const struct in6_addr *daddr;
+	} v6;
+	struct sock *selected_sk;
+	u32 ingress_ifindex;
+	bool no_reuseport;
+};
+
+struct bpf_nf_ctx {
+	const struct nf_hook_state *state;
+	struct sk_buff *skb;
+};
+
+struct fuse_bpf_in_arg {
+	uint32_t size;
+	uint32_t padding;
+	union {
+		const void *value;
+		uint64_t padding2;
+	};
+	union {
+		const void *end_offset;
+		uint64_t padding3;
+	};
+};
+
+struct fuse_bpf_arg {
+	uint32_t size;
+	uint32_t padding;
+	union {
+		void *value;
+		uint64_t padding2;
+	};
+	union {
+		void *end_offset;
+		uint64_t padding3;
+	};
+};
+
+struct fuse_bpf_args {
+	uint64_t nodeid;
+	uint32_t opcode;
+	uint32_t error_in;
+	uint32_t in_numargs;
+	uint32_t out_numargs;
+	uint32_t flags;
+	uint32_t padding;
+	struct fuse_bpf_in_arg in_args[5];
+	struct fuse_bpf_arg out_args[3];
+};
+
+struct bpf_ctx_convert {
+	struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;
+	struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;
+	struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;
+	struct xdp_md BPF_PROG_TYPE_XDP_prog;
+	struct xdp_buff BPF_PROG_TYPE_XDP_kern;
+	struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;
+	struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;
+	struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;
+	struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;
+	struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_IN_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;
+	struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;
+	struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;
+	struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;
+	struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;
+	struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;
+	struct sk_buff BPF_PROG_TYPE_SK_SKB_kern;
+	struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;
+	struct sk_msg BPF_PROG_TYPE_SK_MSG_kern;
+	struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;
+	struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;
+	bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;
+	struct pt_regs BPF_PROG_TYPE_KPROBE_kern;
+	__u64 BPF_PROG_TYPE_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_TRACEPOINT_kern;
+	struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;
+	struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;
+	struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;
+	u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;
+	void *BPF_PROG_TYPE_TRACING_prog;
+	void *BPF_PROG_TYPE_TRACING_kern;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;
+	struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;
+	struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;
+	struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;
+	struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;
+	struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;
+	__u32 BPF_PROG_TYPE_LIRC_MODE2_prog;
+	u32 BPF_PROG_TYPE_LIRC_MODE2_kern;
+	struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;
+	struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;
+	struct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog;
+	struct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern;
+	void *BPF_PROG_TYPE_STRUCT_OPS_prog;
+	void *BPF_PROG_TYPE_STRUCT_OPS_kern;
+	void *BPF_PROG_TYPE_EXT_prog;
+	void *BPF_PROG_TYPE_EXT_kern;
+	void *BPF_PROG_TYPE_LSM_prog;
+	void *BPF_PROG_TYPE_LSM_kern;
+	void *BPF_PROG_TYPE_SYSCALL_prog;
+	void *BPF_PROG_TYPE_SYSCALL_kern;
+	struct bpf_nf_ctx BPF_PROG_TYPE_NETFILTER_prog;
+	struct bpf_nf_ctx BPF_PROG_TYPE_NETFILTER_kern;
+	struct fuse_bpf_args BPF_PROG_TYPE_FUSE_prog;
+	struct fuse_bpf_args BPF_PROG_TYPE_FUSE_kern;
+};
+
+struct bpf_flow_keys {
+	__u16 nhoff;
+	__u16 thoff;
+	__u16 addr_proto;
+	__u8 is_frag;
+	__u8 is_first_frag;
+	__u8 is_encap;
+	__u8 ip_proto;
+	__be16 n_proto;
+	__be16 sport;
+	__be16 dport;
+	union {
+		struct {
+			__be32 ipv4_src;
+			__be32 ipv4_dst;
+		};
+		struct {
+			__u32 ipv6_src[4];
+			__u32 ipv6_dst[4];
+		};
+	};
+	__u32 flags;
+	__be32 flow_label;
+};
+
+struct nf_hook_state {
+	u8 hook;
+	u8 pf;
+	struct net_device *in;
+	struct net_device *out;
+	struct sock *sk;
+	struct net *net;
+	int (*okfn)(struct net *, struct sock *, struct sk_buff *);
+};
+
+struct btf_verifier_env;
+
+struct resolve_vertex;
+
+struct btf_show;
+
+struct btf_kind_operations {
+	s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);
+	int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);
+	int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);
+	void (*log_details)(struct btf_verifier_env *, const struct btf_type *);
+	void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);
+};
+
+struct resolve_vertex {
+	const struct btf_type *t;
+	u32 type_id;
+	u16 next_member;
+};
+
+enum verifier_phase {
+	CHECK_META = 0,
+	CHECK_TYPE = 1,
+};
+
+enum resolve_mode {
+	RESOLVE_TBD = 0,
+	RESOLVE_PTR = 1,
+	RESOLVE_STRUCT_OR_ARRAY = 2,
+};
+
+struct btf_verifier_env {
+	struct btf *btf;
+	u8 *visit_states;
+	struct resolve_vertex stack[32];
+	struct bpf_verifier_log log;
+	u32 log_type_id;
+	u32 top_stack;
+	enum verifier_phase phase;
+	enum resolve_mode resolve_mode;
+};
+
+struct btf_show {
+	u64 flags;
+	void *target;
+	void (*showfn)(struct btf_show *, const char *, struct __va_list_tag *);
+	const struct btf *btf;
+	struct {
+		u8 depth;
+		u8 depth_to_show;
+		u8 depth_check;
+		u8 array_member: 1;
+		u8 array_terminated: 1;
+		u16 array_encoding;
+		u32 type_id;
+		int status;
+		const struct btf_type *type;
+		const struct btf_member *member;
+		char name[80];
+	} state;
+	struct {
+		u32 size;
+		void *head;
+		void *data;
+		u8 safe[32];
+	} obj;
+};
+
+struct bpf_cand_cache {
+	const char *name;
+	u32 name_len;
+	u16 kind;
+	u16 cnt;
+	struct {
+		const struct btf *btf;
+		u32 id;
+	} cands[0];
+};
+
+enum bpf_struct_walk_result {
+	WALK_SCALAR = 0,
+	WALK_PTR = 1,
+	WALK_STRUCT = 2,
+};
+
+enum {
+	BTF_MODULE_F_LIVE = 1,
+};
+
+enum btf_kfunc_hook {
+	BTF_KFUNC_HOOK_COMMON = 0,
+	BTF_KFUNC_HOOK_XDP = 1,
+	BTF_KFUNC_HOOK_TC = 2,
+	BTF_KFUNC_HOOK_STRUCT_OPS = 3,
+	BTF_KFUNC_HOOK_TRACING = 4,
+	BTF_KFUNC_HOOK_SYSCALL = 5,
+	BTF_KFUNC_HOOK_FMODRET = 6,
+	BTF_KFUNC_HOOK_CGROUP_SKB = 7,
+	BTF_KFUNC_HOOK_SCHED_ACT = 8,
+	BTF_KFUNC_HOOK_SK_SKB = 9,
+	BTF_KFUNC_HOOK_SOCKET_FILTER = 10,
+	BTF_KFUNC_HOOK_LWT = 11,
+	BTF_KFUNC_HOOK_NETFILTER = 12,
+	BTF_KFUNC_HOOK_MAX = 13,
+};
+
+enum {
+	BTF_KFUNC_SET_MAX_CNT = 256,
+	BTF_DTOR_KFUNC_MAX_CNT = 256,
+	BTF_KFUNC_FILTER_MAX_CNT = 16,
+};
+
+enum {
+	BTF_FIELD_IGNORE = 0,
+	BTF_FIELD_FOUND = 1,
+};
+
+enum visit_state {
+	NOT_VISITED = 0,
+	VISITED = 1,
+	RESOLVED = 2,
+};
+
+enum {
+	BTF_VAR_STATIC = 0,
+	BTF_VAR_GLOBAL_ALLOCATED = 1,
+	BTF_VAR_GLOBAL_EXTERN = 2,
+};
+
+struct btf_module {
+	struct list_head list;
+	struct module *module;
+	struct btf *btf;
+	struct bin_attribute *sysfs_attr;
+	int flags;
+};
+
+typedef u64 (*btf_bpf_btf_find_by_name_kind)(char *, int, u32, int);
+
+struct btf_decl_tag {
+	__s32 component_idx;
+};
+
+struct btf_sec_info {
+	u32 off;
+	u32 len;
+};
+
+struct btf_enum {
+	__u32 name_off;
+	__s32 val;
+};
+
+struct btf_var {
+	__u32 linkage;
+};
+
+struct btf_enum64 {
+	__u32 name_off;
+	__u32 val_lo32;
+	__u32 val_hi32;
+};
+
+struct btf_show_snprintf {
+	struct btf_show show;
+	int len_left;
+	int len;
+};
+
+struct btf_field_info {
+	enum btf_field_type type;
+	u32 off;
+	union {
+		struct {
+			u32 type_id;
+		} kptr;
+		struct {
+			const char *node_name;
+			u32 value_btf_id;
+		} graph_root;
+	};
+};
+
+typedef int (*cmp_r_func_t)(const void *, const void *, const void *);
+
+typedef void (*swap_r_func_t)(void *, void *, int, const void *);
+
+struct bpf_core_cand;
+
+struct bpf_core_cand_list {
+	struct bpf_core_cand *cands;
+	int len;
+};
+
+struct bpf_core_cand {
+	const struct btf *btf;
+	__u32 id;
+};
+
+struct bpf_core_accessor {
+	__u32 type_id;
+	__u32 idx;
+	const char *name;
+};
+
+struct bpf_core_spec {
+	const struct btf *btf;
+	struct bpf_core_accessor spec[64];
+	__u32 root_type_id;
+	enum bpf_core_relo_kind relo_kind;
+	int len;
+	int raw_spec[64];
+	int raw_len;
+	__u32 bit_offset;
+};
+
+struct bpf_core_relo_res {
+	__u64 orig_val;
+	__u64 new_val;
+	bool poison;
+	bool validate;
+	bool fail_memsz_adjust;
+	__u32 orig_sz;
+	__u32 orig_type_id;
+	__u32 new_sz;
+	__u32 new_type_id;
+};
+
+struct bpf_dispatcher_prog {
+	struct bpf_prog *prog;
+	refcount_t users;
+};
+
+struct bpf_dispatcher {
+	struct mutex mutex;
+	void *func;
+	struct bpf_dispatcher_prog progs[48];
+	int num_progs;
+	void *image;
+	void *rw_image;
+	u32 image_off;
+	struct bpf_ksym ksym;
+	struct static_call_key *sc_key;
+	void *sc_tramp;
+	u64 android_kabi_reserved1;
+};
+
+enum net_device_flags {
+	IFF_UP = 1,
+	IFF_BROADCAST = 2,
+	IFF_DEBUG = 4,
+	IFF_LOOPBACK = 8,
+	IFF_POINTOPOINT = 16,
+	IFF_NOTRAILERS = 32,
+	IFF_RUNNING = 64,
+	IFF_NOARP = 128,
+	IFF_PROMISC = 256,
+	IFF_ALLMULTI = 512,
+	IFF_MASTER = 1024,
+	IFF_SLAVE = 2048,
+	IFF_MULTICAST = 4096,
+	IFF_PORTSEL = 8192,
+	IFF_AUTOMEDIA = 16384,
+	IFF_DYNAMIC = 32768,
+	IFF_LOWER_UP = 65536,
+	IFF_DORMANT = 131072,
+	IFF_ECHO = 262144,
+};
+
+enum netdev_priv_flags {
+	IFF_802_1Q_VLAN = 1ULL,
+	IFF_EBRIDGE = 2ULL,
+	IFF_BONDING = 4ULL,
+	IFF_ISATAP = 8ULL,
+	IFF_WAN_HDLC = 16ULL,
+	IFF_XMIT_DST_RELEASE = 32ULL,
+	IFF_DONT_BRIDGE = 64ULL,
+	IFF_DISABLE_NETPOLL = 128ULL,
+	IFF_MACVLAN_PORT = 256ULL,
+	IFF_BRIDGE_PORT = 512ULL,
+	IFF_OVS_DATAPATH = 1024ULL,
+	IFF_TX_SKB_SHARING = 2048ULL,
+	IFF_UNICAST_FLT = 4096ULL,
+	IFF_TEAM_PORT = 8192ULL,
+	IFF_SUPP_NOFCS = 16384ULL,
+	IFF_LIVE_ADDR_CHANGE = 32768ULL,
+	IFF_MACVLAN = 65536ULL,
+	IFF_XMIT_DST_RELEASE_PERM = 131072ULL,
+	IFF_L3MDEV_MASTER = 262144ULL,
+	IFF_NO_QUEUE = 524288ULL,
+	IFF_OPENVSWITCH = 1048576ULL,
+	IFF_L3MDEV_SLAVE = 2097152ULL,
+	IFF_TEAM = 4194304ULL,
+	IFF_RXFH_CONFIGURED = 8388608ULL,
+	IFF_PHONY_HEADROOM = 16777216ULL,
+	IFF_MACSEC = 33554432ULL,
+	IFF_NO_RX_HANDLER = 67108864ULL,
+	IFF_FAILOVER = 134217728ULL,
+	IFF_FAILOVER_SLAVE = 268435456ULL,
+	IFF_L3MDEV_RX_HANDLER = 536870912ULL,
+	IFF_NO_ADDRCONF = 1073741824ULL,
+	IFF_TX_SKB_NO_LINEAR = 2147483648ULL,
+	IFF_CHANGE_PROTO_DOWN = 4294967296ULL,
+	IFF_SEE_ALL_HWTSTAMP_REQUESTS = 8589934592ULL,
+};
+
+enum netdev_xdp_act {
+	NETDEV_XDP_ACT_BASIC = 1,
+	NETDEV_XDP_ACT_REDIRECT = 2,
+	NETDEV_XDP_ACT_NDO_XMIT = 4,
+	NETDEV_XDP_ACT_XSK_ZEROCOPY = 8,
+	NETDEV_XDP_ACT_HW_OFFLOAD = 16,
+	NETDEV_XDP_ACT_RX_SG = 32,
+	NETDEV_XDP_ACT_NDO_XMIT_SG = 64,
+	NETDEV_XDP_ACT_MASK = 127,
+};
+
+enum xdp_buff_flags {
+	XDP_FLAGS_HAS_FRAGS = 1,
+	XDP_FLAGS_FRAGS_PF_MEMALLOC = 2,
+};
+
+enum {
+	BPF_F_BROADCAST = 8,
+	BPF_F_EXCLUDE_INGRESS = 16,
+};
+
+enum netdev_cmd {
+	NETDEV_UP = 1,
+	NETDEV_DOWN = 2,
+	NETDEV_REBOOT = 3,
+	NETDEV_CHANGE = 4,
+	NETDEV_REGISTER = 5,
+	NETDEV_UNREGISTER = 6,
+	NETDEV_CHANGEMTU = 7,
+	NETDEV_CHANGEADDR = 8,
+	NETDEV_PRE_CHANGEADDR = 9,
+	NETDEV_GOING_DOWN = 10,
+	NETDEV_CHANGENAME = 11,
+	NETDEV_FEAT_CHANGE = 12,
+	NETDEV_BONDING_FAILOVER = 13,
+	NETDEV_PRE_UP = 14,
+	NETDEV_PRE_TYPE_CHANGE = 15,
+	NETDEV_POST_TYPE_CHANGE = 16,
+	NETDEV_POST_INIT = 17,
+	NETDEV_PRE_UNINIT = 18,
+	NETDEV_RELEASE = 19,
+	NETDEV_NOTIFY_PEERS = 20,
+	NETDEV_JOIN = 21,
+	NETDEV_CHANGEUPPER = 22,
+	NETDEV_RESEND_IGMP = 23,
+	NETDEV_PRECHANGEMTU = 24,
+	NETDEV_CHANGEINFODATA = 25,
+	NETDEV_BONDING_INFO = 26,
+	NETDEV_PRECHANGEUPPER = 27,
+	NETDEV_CHANGELOWERSTATE = 28,
+	NETDEV_UDP_TUNNEL_PUSH_INFO = 29,
+	NETDEV_UDP_TUNNEL_DROP_INFO = 30,
+	NETDEV_CHANGE_TX_QUEUE_LEN = 31,
+	NETDEV_CVLAN_FILTER_PUSH_INFO = 32,
+	NETDEV_CVLAN_FILTER_DROP_INFO = 33,
+	NETDEV_SVLAN_FILTER_PUSH_INFO = 34,
+	NETDEV_SVLAN_FILTER_DROP_INFO = 35,
+	NETDEV_OFFLOAD_XSTATS_ENABLE = 36,
+	NETDEV_OFFLOAD_XSTATS_DISABLE = 37,
+	NETDEV_OFFLOAD_XSTATS_REPORT_USED = 38,
+	NETDEV_OFFLOAD_XSTATS_REPORT_DELTA = 39,
+	NETDEV_XDP_FEAT_CHANGE = 40,
+};
+
+struct bpf_dtab_netdev;
+
+struct bpf_dtab {
+	struct bpf_map map;
+	struct bpf_dtab_netdev __attribute__((btf_type_tag("rcu"))) **netdev_map;
+	struct list_head list;
+	struct hlist_head *dev_index_head;
+	spinlock_t index_lock;
+	unsigned int items;
+	u32 n_buckets;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_devmap_val {
+	__u32 ifindex;
+	union {
+		int fd;
+		__u32 id;
+	} bpf_prog;
+};
+
+struct bpf_dtab_netdev {
+	struct net_device *dev;
+	struct hlist_node index_hlist;
+	struct bpf_prog *xdp_prog;
+	struct callback_head rcu;
+	unsigned int idx;
+	struct bpf_devmap_val val;
+};
+
+typedef struct bio_vec skb_frag_t;
+
+struct skb_shared_info {
+	__u8 flags;
+	__u8 meta_len;
+	__u8 nr_frags;
+	__u8 tx_flags;
+	unsigned short gso_size;
+	unsigned short gso_segs;
+	struct sk_buff *frag_list;
+	struct skb_shared_hwtstamps hwtstamps;
+	unsigned int gso_type;
+	u32 tskey;
+	atomic_t dataref;
+	unsigned int xdp_frags_size;
+	void *destructor_arg;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_oem_data1[3];
+	skb_frag_t frags[17];
+};
+
+struct bpf_nh_params {
+	u32 nh_family;
+	union {
+		u32 ipv4_nh;
+		struct in6_addr ipv6_nh;
+	};
+};
+
+struct bpf_redirect_info {
+	u64 tgt_index;
+	void *tgt_value;
+	struct bpf_map *map;
+	u32 flags;
+	u32 kern_flags;
+	u32 map_id;
+	enum bpf_map_type map_type;
+	struct bpf_nh_params nh;
+};
+
+struct netdev_notifier_info {
+	struct net_device *dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct bpf_cpu_map_entry;
+
+struct xdp_bulk_queue {
+	void *q[8];
+	struct list_head flush_node;
+	struct bpf_cpu_map_entry *obj;
+	unsigned int count;
+};
+
+struct bpf_cpumap_val {
+	__u32 qsize;
+	union {
+		int fd;
+		__u32 id;
+	} bpf_prog;
+};
+
+struct ptr_ring;
+
+struct bpf_cpu_map_entry {
+	u32 cpu;
+	int map_id;
+	struct xdp_bulk_queue __attribute__((btf_type_tag("percpu"))) *bulkq;
+	struct ptr_ring *queue;
+	struct task_struct *kthread;
+	struct bpf_cpumap_val value;
+	struct bpf_prog *prog;
+	struct completion kthread_running;
+	struct rcu_work free_work;
+};
+
+struct ptr_ring {
+	int producer;
+	spinlock_t producer_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int consumer_head;
+	int consumer_tail;
+	spinlock_t consumer_lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	int size;
+	int batch;
+	void **queue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_cpu_map {
+	struct bpf_map map;
+	struct bpf_cpu_map_entry __attribute__((btf_type_tag("rcu"))) **cpu_map;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_prog_offload_ops;
+
+struct bpf_offload_dev {
+	const struct bpf_prog_offload_ops *ops;
+	struct list_head netdevs;
+	void *priv;
+};
+
+struct bpf_prog_offload_ops {
+	int (*insn_hook)(struct bpf_verifier_env *, int, int);
+	int (*finalize)(struct bpf_verifier_env *);
+	int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);
+	int (*remove_insns)(struct bpf_verifier_env *, u32, u32);
+	int (*prepare)(struct bpf_prog *);
+	int (*translate)(struct bpf_prog *);
+	void (*destroy)(struct bpf_prog *);
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	XDP_METADATA_KFUNC_RX_TIMESTAMP = 0,
+	XDP_METADATA_KFUNC_RX_HASH = 1,
+	MAX_XDP_METADATA_KFUNC = 2,
+};
+
+struct bpf_offload_netdev {
+	struct rhash_head l;
+	struct net_device *netdev;
+	struct bpf_offload_dev *offdev;
+	struct list_head progs;
+	struct list_head maps;
+	struct list_head offdev_netdevs;
+};
+
+typedef struct ns_common *ns_get_path_helper_t(void *);
+
+struct ns_get_path_bpf_prog_args {
+	struct bpf_prog *prog;
+	struct bpf_prog_info *info;
+};
+
+struct ns_get_path_bpf_map_args {
+	struct bpf_offloaded_map *offmap;
+	struct bpf_map_info *info;
+};
+
+enum netns_bpf_attach_type {
+	NETNS_BPF_INVALID = -1,
+	NETNS_BPF_FLOW_DISSECTOR = 0,
+	NETNS_BPF_SK_LOOKUP = 1,
+	MAX_NETNS_BPF_ATTACH_TYPE = 2,
+};
+
+struct bpf_netns_link {
+	struct bpf_link link;
+	enum bpf_attach_type type;
+	enum netns_bpf_attach_type netns_type;
+	struct net *net;
+	struct list_head node;
+};
+
+struct mini_Qdisc;
+
+struct tcx_entry {
+	struct mini_Qdisc __attribute__((btf_type_tag("rcu"))) *miniq;
+	struct bpf_mprog_bundle bundle;
+	bool miniq_active;
+	struct callback_head rcu;
+};
+
+struct mini_Qdisc {
+	struct tcf_proto *filter_list;
+	struct tcf_block *block;
+	struct gnet_stats_basic_sync __attribute__((btf_type_tag("percpu"))) *cpu_bstats;
+	struct gnet_stats_queue __attribute__((btf_type_tag("percpu"))) *cpu_qstats;
+	unsigned long rcu_state;
+};
+
+struct tcx_link {
+	struct bpf_link link;
+	struct net_device *dev;
+	u32 location;
+};
+
+enum {
+	BPF_F_SKIP_FIELD_MASK = 255,
+	BPF_F_USER_STACK = 256,
+	BPF_F_FAST_STACK_CMP = 512,
+	BPF_F_REUSE_STACKID = 1024,
+	BPF_F_USER_BUILD_ID = 2048,
+};
+
+enum bpf_stack_build_id_status {
+	BPF_STACK_BUILD_ID_EMPTY = 0,
+	BPF_STACK_BUILD_ID_VALID = 1,
+	BPF_STACK_BUILD_ID_IP = 2,
+};
+
+enum perf_callchain_context {
+	PERF_CONTEXT_HV = 18446744073709551584ULL,
+	PERF_CONTEXT_KERNEL = 18446744073709551488ULL,
+	PERF_CONTEXT_USER = 18446744073709551104ULL,
+	PERF_CONTEXT_GUEST = 18446744073709549568ULL,
+	PERF_CONTEXT_GUEST_KERNEL = 18446744073709549440ULL,
+	PERF_CONTEXT_GUEST_USER = 18446744073709549056ULL,
+	PERF_CONTEXT_MAX = 18446744073709547521ULL,
+};
+
+typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);
+
+struct stack_map_bucket;
+
+struct bpf_stack_map {
+	struct bpf_map map;
+	void *elems;
+	struct pcpu_freelist freelist;
+	u32 n_buckets;
+	struct stack_map_bucket *buckets[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct stack_map_bucket {
+	struct pcpu_freelist_node fnode;
+	u32 hash;
+	u32 nr;
+	u64 data[0];
+};
+
+struct bpf_stack_build_id {
+	__s32 status;
+	unsigned char build_id[20];
+	union {
+		__u64 offset;
+		__u64 ip;
+	};
+};
+
+struct cgroup_iter_priv {
+	struct cgroup_subsys_state *start_css;
+	bool visited_all;
+	bool terminate;
+	int order;
+};
+
+struct bpf_iter__cgroup {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct cgroup *cgroup;
+	};
+};
+
+typedef u64 (*btf_bpf_cgrp_storage_get)(struct bpf_map *, struct cgroup *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_cgrp_storage_delete)(struct bpf_map *, struct cgroup *);
+
+struct cgroup_lsm_atype {
+	u32 attach_btf_id;
+	int refcnt;
+};
+
+enum {
+	TCPF_ESTABLISHED = 2,
+	TCPF_SYN_SENT = 4,
+	TCPF_SYN_RECV = 8,
+	TCPF_FIN_WAIT1 = 16,
+	TCPF_FIN_WAIT2 = 32,
+	TCPF_TIME_WAIT = 64,
+	TCPF_CLOSE = 128,
+	TCPF_CLOSE_WAIT = 256,
+	TCPF_LAST_ACK = 512,
+	TCPF_LISTEN = 1024,
+	TCPF_CLOSING = 2048,
+	TCPF_NEW_SYN_RECV = 4096,
+};
+
+enum {
+	BPF_F_SYSCTL_BASE_NAME = 1,
+};
+
+typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);
+
+typedef u64 (*btf_bpf_get_retval)();
+
+typedef u64 (*btf_bpf_set_retval)(int);
+
+typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);
+
+typedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t);
+
+typedef u64 (*btf_bpf_sysctl_get_new_value)(struct bpf_sysctl_kern *, char *, size_t);
+
+typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sockopt)(struct bpf_sockopt_kern *);
+
+struct bpf_cgroup_link;
+
+struct bpf_prog_list {
+	struct hlist_node node;
+	struct bpf_prog *prog;
+	struct bpf_cgroup_link *link;
+	struct bpf_cgroup_storage *storage[2];
+};
+
+struct bpf_cgroup_link {
+	struct bpf_link link;
+	struct cgroup *cgroup;
+	enum bpf_attach_type type;
+};
+
+struct qdisc_skb_cb {
+	struct {
+		unsigned int pkt_len;
+		u16 slave_dev_queue_mapping;
+		u16 tc_classid;
+	};
+	unsigned char data[20];
+};
+
+struct bpf_skb_data_end {
+	struct qdisc_skb_cb qdisc_cb;
+	void *data_meta;
+	void *data_end;
+};
+
+struct bpf_cg_run_ctx {
+	struct bpf_run_ctx run_ctx;
+	const struct bpf_prog_array_item *prog_item;
+	int retval;
+};
+
+struct bpf_sockopt_buf {
+	u8 data[32];
+};
+
+enum {
+	IPPROTO_IP = 0,
+	IPPROTO_ICMP = 1,
+	IPPROTO_IGMP = 2,
+	IPPROTO_IPIP = 4,
+	IPPROTO_TCP = 6,
+	IPPROTO_EGP = 8,
+	IPPROTO_PUP = 12,
+	IPPROTO_UDP = 17,
+	IPPROTO_IDP = 22,
+	IPPROTO_TP = 29,
+	IPPROTO_DCCP = 33,
+	IPPROTO_IPV6 = 41,
+	IPPROTO_RSVP = 46,
+	IPPROTO_GRE = 47,
+	IPPROTO_ESP = 50,
+	IPPROTO_AH = 51,
+	IPPROTO_MTP = 92,
+	IPPROTO_BEETPH = 94,
+	IPPROTO_ENCAP = 98,
+	IPPROTO_PIM = 103,
+	IPPROTO_COMP = 108,
+	IPPROTO_L2TP = 115,
+	IPPROTO_SCTP = 132,
+	IPPROTO_UDPLITE = 136,
+	IPPROTO_MPLS = 137,
+	IPPROTO_ETHERNET = 143,
+	IPPROTO_RAW = 255,
+	IPPROTO_MPTCP = 262,
+	IPPROTO_MAX = 263,
+};
+
+enum sock_type {
+	SOCK_STREAM = 1,
+	SOCK_DGRAM = 2,
+	SOCK_RAW = 3,
+	SOCK_RDM = 4,
+	SOCK_SEQPACKET = 5,
+	SOCK_DCCP = 6,
+	SOCK_PACKET = 10,
+};
+
+enum sock_flags {
+	SOCK_DEAD = 0,
+	SOCK_DONE = 1,
+	SOCK_URGINLINE = 2,
+	SOCK_KEEPOPEN = 3,
+	SOCK_LINGER = 4,
+	SOCK_DESTROY = 5,
+	SOCK_BROADCAST = 6,
+	SOCK_TIMESTAMP = 7,
+	SOCK_ZAPPED = 8,
+	SOCK_USE_WRITE_QUEUE = 9,
+	SOCK_DBG = 10,
+	SOCK_RCVTSTAMP = 11,
+	SOCK_RCVTSTAMPNS = 12,
+	SOCK_LOCALROUTE = 13,
+	SOCK_MEMALLOC = 14,
+	SOCK_TIMESTAMPING_RX_SOFTWARE = 15,
+	SOCK_FASYNC = 16,
+	SOCK_RXQ_OVFL = 17,
+	SOCK_ZEROCOPY = 18,
+	SOCK_WIFI_STATUS = 19,
+	SOCK_NOFCS = 20,
+	SOCK_FILTER_LOCKED = 21,
+	SOCK_SELECT_ERR_QUEUE = 22,
+	SOCK_RCU_FREE = 23,
+	SOCK_TXTIME = 24,
+	SOCK_XDP = 25,
+	SOCK_TSTAMP_NEW = 26,
+	SOCK_RCVMARK = 27,
+};
+
+struct reuseport_array {
+	struct bpf_map map;
+	struct sock __attribute__((btf_type_tag("rcu"))) *ptrs[0];
+};
+
+enum bpf_struct_ops_state {
+	BPF_STRUCT_OPS_STATE_INIT = 0,
+	BPF_STRUCT_OPS_STATE_INUSE = 1,
+	BPF_STRUCT_OPS_STATE_TOBEFREE = 2,
+	BPF_STRUCT_OPS_STATE_READY = 3,
+};
+
+struct bpf_dummy_ops_state;
+
+struct bpf_dummy_ops {
+	int (*test_1)(struct bpf_dummy_ops_state *);
+	int (*test_2)(struct bpf_dummy_ops_state *, int, unsigned short, char, unsigned long);
+	int (*test_sleepable)(struct bpf_dummy_ops_state *);
+};
+
+struct bpf_struct_ops_bpf_dummy_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_dummy_ops data;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_dummy_ops_state {
+	int val;
+};
+
+struct bpf_struct_ops_tcp_congestion_ops {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct tcp_congestion_ops data;
+};
+
+struct bpf_struct_ops_value {
+	refcount_t refcnt;
+	enum bpf_struct_ops_state state;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	char data[0];
+};
+
+struct bpf_struct_ops_map {
+	struct bpf_map map;
+	struct callback_head rcu;
+	const struct bpf_struct_ops *st_ops;
+	struct mutex lock;
+	struct bpf_link **links;
+	void *image;
+	struct bpf_struct_ops_value *uvalue;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bpf_struct_ops_value kvalue;
+};
+
+struct bpf_struct_ops_link {
+	struct bpf_link link;
+	struct bpf_map __attribute__((btf_type_tag("rcu"))) *map;
+};
+
+struct bpf_cpumask {
+	cpumask_t cpumask;
+	refcount_t usage;
+};
+
+enum {
+	BTF_SOCK_TYPE_INET = 0,
+	BTF_SOCK_TYPE_INET_CONN = 1,
+	BTF_SOCK_TYPE_INET_REQ = 2,
+	BTF_SOCK_TYPE_INET_TW = 3,
+	BTF_SOCK_TYPE_REQ = 4,
+	BTF_SOCK_TYPE_SOCK = 5,
+	BTF_SOCK_TYPE_SOCK_COMMON = 6,
+	BTF_SOCK_TYPE_TCP = 7,
+	BTF_SOCK_TYPE_TCP_REQ = 8,
+	BTF_SOCK_TYPE_TCP_TW = 9,
+	BTF_SOCK_TYPE_TCP6 = 10,
+	BTF_SOCK_TYPE_UDP = 11,
+	BTF_SOCK_TYPE_UDP6 = 12,
+	BTF_SOCK_TYPE_UNIX = 13,
+	BTF_SOCK_TYPE_MPTCP = 14,
+	BTF_SOCK_TYPE_SOCKET = 15,
+	MAX_BTF_SOCK_TYPE = 16,
+};
+
+enum {
+	BPF_F_BPRM_SECUREEXEC = 1,
+};
+
+typedef u64 (*btf_bpf_bprm_opts_set)(struct linux_binprm *, u64);
+
+typedef u64 (*btf_bpf_ima_inode_hash)(struct inode *, void *, u32);
+
+typedef u64 (*btf_bpf_ima_file_hash)(struct file *, void *, u32);
+
+typedef u64 (*btf_bpf_get_attach_cookie)(void *);
+
+struct xattr {
+	const char *name;
+	void *value;
+	size_t value_len;
+};
+
+struct sembuf {
+	unsigned short sem_num;
+	short sem_op;
+	short sem_flg;
+};
+
+struct static_call_tramp_key {
+	s32 tramp;
+	s32 key;
+};
+
+struct perf_buffer {
+	refcount_t refcount;
+	struct callback_head callback_head;
+	int nr_pages;
+	int overwrite;
+	int paused;
+	atomic_t poll;
+	local_t head;
+	unsigned int nest;
+	local_t events;
+	local_t wakeup;
+	local_t lost;
+	long watermark;
+	long aux_watermark;
+	spinlock_t event_lock;
+	struct list_head event_list;
+	atomic_t mmap_count;
+	unsigned long mmap_locked;
+	struct user_struct *mmap_user;
+	long aux_head;
+	unsigned int aux_nest;
+	long aux_wakeup;
+	unsigned long aux_pgoff;
+	int aux_nr_pages;
+	int aux_overwrite;
+	atomic_t aux_mmap_count;
+	unsigned long aux_mmap_locked;
+	void (*free_aux)(void *);
+	refcount_t aux_refcount;
+	int aux_in_sampling;
+	void **aux_pages;
+	void *aux_priv;
+	struct perf_event_mmap_page *user_page;
+	void *data_pages[0];
+};
+
+struct perf_cpu_context {
+	struct perf_event_context ctx;
+	struct perf_event_context *task_ctx;
+	int online;
+	int heap_size;
+	struct perf_event **heap;
+	struct perf_event *heap_default[2];
+};
+
+struct swevent_hlist;
+
+struct swevent_htable {
+	struct swevent_hlist *swevent_hlist;
+	struct mutex hlist_mutex;
+	int hlist_refcount;
+	int recursion[4];
+};
+
+struct swevent_hlist {
+	struct hlist_head heads[256];
+	struct callback_head callback_head;
+};
+
+struct min_heap_callbacks {
+	int elem_size;
+	bool (*less)(const void *, const void *);
+	void (*swp)(void *, void *);
+};
+
+struct pmu_event_list {
+	raw_spinlock_t lock;
+	struct list_head list;
+};
+
+struct match_token {
+	int token;
+	const char *pattern;
+};
+
+enum event_type_t {
+	EVENT_FLEXIBLE = 1,
+	EVENT_PINNED = 2,
+	EVENT_TIME = 4,
+	EVENT_CPU = 8,
+	EVENT_CGROUP = 16,
+	EVENT_ALL = 3,
+};
+
+enum perf_event_type {
+	PERF_RECORD_MMAP = 1,
+	PERF_RECORD_LOST = 2,
+	PERF_RECORD_COMM = 3,
+	PERF_RECORD_EXIT = 4,
+	PERF_RECORD_THROTTLE = 5,
+	PERF_RECORD_UNTHROTTLE = 6,
+	PERF_RECORD_FORK = 7,
+	PERF_RECORD_READ = 8,
+	PERF_RECORD_SAMPLE = 9,
+	PERF_RECORD_MMAP2 = 10,
+	PERF_RECORD_AUX = 11,
+	PERF_RECORD_ITRACE_START = 12,
+	PERF_RECORD_LOST_SAMPLES = 13,
+	PERF_RECORD_SWITCH = 14,
+	PERF_RECORD_SWITCH_CPU_WIDE = 15,
+	PERF_RECORD_NAMESPACES = 16,
+	PERF_RECORD_KSYMBOL = 17,
+	PERF_RECORD_BPF_EVENT = 18,
+	PERF_RECORD_CGROUP = 19,
+	PERF_RECORD_TEXT_POKE = 20,
+	PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
+	PERF_RECORD_MAX = 22,
+};
+
+enum {
+	NET_NS_INDEX = 0,
+	UTS_NS_INDEX = 1,
+	IPC_NS_INDEX = 2,
+	PID_NS_INDEX = 3,
+	USER_NS_INDEX = 4,
+	MNT_NS_INDEX = 5,
+	CGROUP_NS_INDEX = 6,
+	NR_NAMESPACES = 7,
+};
+
+enum perf_event_read_format {
+	PERF_FORMAT_TOTAL_TIME_ENABLED = 1,
+	PERF_FORMAT_TOTAL_TIME_RUNNING = 2,
+	PERF_FORMAT_ID = 4,
+	PERF_FORMAT_GROUP = 8,
+	PERF_FORMAT_LOST = 16,
+	PERF_FORMAT_MAX = 32,
+};
+
+enum perf_probe_config {
+	PERF_PROBE_CONFIG_IS_RETPROBE = 1,
+	PERF_UPROBE_REF_CTR_OFFSET_BITS = 32,
+	PERF_UPROBE_REF_CTR_OFFSET_SHIFT = 32,
+};
+
+enum perf_event_ioc_flags {
+	PERF_IOC_FLAG_GROUP = 1,
+};
+
+enum {
+	IF_STATE_ACTION = 0,
+	IF_STATE_SOURCE = 1,
+	IF_STATE_END = 2,
+};
+
+enum {
+	IF_ACT_NONE = -1,
+	IF_ACT_FILTER = 0,
+	IF_ACT_START = 1,
+	IF_ACT_STOP = 2,
+	IF_SRC_FILE = 3,
+	IF_SRC_KERNEL = 4,
+	IF_SRC_FILEADDR = 5,
+	IF_SRC_KERNELADDR = 6,
+};
+
+typedef void (*event_f)(struct perf_event *, struct perf_cpu_context *, struct perf_event_context *, void *);
+
+struct perf_switch_event {
+	struct task_struct *task;
+	struct task_struct *next_prev;
+	struct {
+		struct perf_event_header header;
+		u32 next_prev_pid;
+		u32 next_prev_tid;
+	} event_id;
+};
+
+typedef void perf_iterate_f(struct perf_event *, void *);
+
+struct stop_event_data {
+	struct perf_event *event;
+	unsigned int restart;
+};
+
+typedef int (*remote_function_f)(void *);
+
+struct remote_function_call {
+	struct task_struct *p;
+	remote_function_f func;
+	void *info;
+	int ret;
+};
+
+struct perf_task_event {
+	struct task_struct *task;
+	struct perf_event_context *task_ctx;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 ppid;
+		u32 tid;
+		u32 ptid;
+		u64 time;
+	} event_id;
+};
+
+struct perf_ns_link_info {
+	__u64 dev;
+	__u64 ino;
+};
+
+struct perf_comm_event {
+	struct task_struct *task;
+	char *comm;
+	int comm_size;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+	} event_id;
+};
+
+struct perf_mmap_event {
+	struct vm_area_struct *vma;
+	const char *file_name;
+	int file_size;
+	int maj;
+	int min;
+	u64 ino;
+	u64 ino_generation;
+	u32 prot;
+	u32 flags;
+	u8 build_id[20];
+	u32 build_id_size;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+		u64 start;
+		u64 len;
+		u64 pgoff;
+	} event_id;
+};
+
+struct perf_aux_event {
+	struct perf_event_header header;
+	u64 offset;
+	u64 size;
+	u64 flags;
+};
+
+struct perf_aux_event___2 {
+	struct perf_event_header header;
+	u64 hw_id;
+};
+
+struct __group_key {
+	int cpu;
+	struct pmu *pmu;
+	struct cgroup *cgroup;
+};
+
+struct min_heap {
+	void *data;
+	int nr;
+	int size;
+};
+
+struct perf_aux_event___3 {
+	struct perf_event_header header;
+	u32 pid;
+	u32 tid;
+};
+
+struct perf_read_event {
+	struct perf_event_header header;
+	u32 pid;
+	u32 tid;
+};
+
+typedef struct {
+	char *from;
+	char *to;
+} substring_t;
+
+struct remote_output {
+	struct perf_buffer *rb;
+	int err;
+};
+
+struct perf_namespaces_event {
+	struct task_struct *task;
+	struct {
+		struct perf_event_header header;
+		u32 pid;
+		u32 tid;
+		u64 nr_namespaces;
+		struct perf_ns_link_info link_info[7];
+	} event_id;
+};
+
+struct perf_ksymbol_event {
+	const char *name;
+	int name_len;
+	struct {
+		struct perf_event_header header;
+		u64 addr;
+		u32 len;
+		u16 ksym_type;
+		u16 flags;
+	} event_id;
+};
+
+struct perf_bpf_event {
+	struct bpf_prog *prog;
+	struct {
+		struct perf_event_header header;
+		u16 type;
+		u16 flags;
+		u32 id;
+		u8 tag[8];
+	} event_id;
+};
+
+struct perf_text_poke_event {
+	const void *old_bytes;
+	const void *new_bytes;
+	size_t pad;
+	u16 old_len;
+	u16 new_len;
+	struct {
+		struct perf_event_header header;
+		u64 addr;
+	} event_id;
+};
+
+struct event_function_struct {
+	struct perf_event *event;
+	event_f func;
+	void *data;
+};
+
+struct perf_read_data {
+	struct perf_event *event;
+	bool group;
+	int ret;
+};
+
+struct callchain_cpus_entries {
+	struct callback_head callback_head;
+	struct perf_callchain_entry *cpu_entries[0];
+};
+
+struct bp_slots_histogram {
+	atomic_t count[4];
+};
+
+struct rhltable {
+	struct rhashtable ht;
+};
+
+struct bp_cpuinfo {
+	unsigned int cpu_pinned;
+	struct bp_slots_histogram tsk_pinned;
+};
+
+enum bp_type_idx {
+	TYPE_INST = 0,
+	TYPE_DATA = 0,
+	TYPE_MAX = 1,
+};
+
+struct xol_area {
+	wait_queue_head_t wq;
+	atomic_t slot_count;
+	unsigned long *bitmap;
+	struct vm_special_mapping xol_mapping;
+	struct page *pages[2];
+	unsigned long vaddr;
+};
+
+struct uprobe {
+	struct rb_node rb_node;
+	refcount_t ref;
+	struct rw_semaphore register_rwsem;
+	struct rw_semaphore consumer_rwsem;
+	struct list_head pending_list;
+	struct uprobe_consumer *consumers;
+	struct inode *inode;
+	loff_t offset;
+	loff_t ref_ctr_offset;
+	unsigned long flags;
+	struct arch_uprobe arch;
+};
+
+typedef u8 uprobe_opcode_t;
+
+struct delayed_uprobe {
+	struct list_head list;
+	struct uprobe *uprobe;
+	struct mm_struct *mm;
+};
+
+struct page_vma_mapped_walk {
+	unsigned long pfn;
+	unsigned long nr_pages;
+	unsigned long pgoff;
+	struct vm_area_struct *vma;
+	unsigned long address;
+	pmd_t *pmd;
+	pte_t *pte;
+	spinlock_t *ptl;
+	unsigned int flags;
+};
+
+typedef unsigned int fgf_t;
+
+struct __uprobe_key {
+	struct inode *inode;
+	loff_t offset;
+};
+
+struct map_info {
+	struct map_info *next;
+	struct mm_struct *mm;
+	unsigned long vaddr;
+};
+
+typedef int filler_t(struct file *, struct folio *);
+
+struct static_key_deferred {
+	struct static_key key;
+	unsigned long timeout;
+	struct delayed_work work;
+};
+
+struct static_key_mod {
+	struct static_key_mod *next;
+	struct jump_entry *entries;
+	struct module *mod;
+};
+
+struct key_preparsed_payload {
+	const char *orig_description;
+	char *description;
+	union key_payload payload;
+	const void *data;
+	size_t datalen;
+	size_t quotalen;
+	time64_t expiry;
+};
+
+struct key_match_data {
+	bool (*cmp)(const struct key *, const struct key_match_data *);
+	const void *raw_data;
+	void *preparsed;
+	unsigned int lookup_type;
+};
+
+enum kernel_pkey_operation {
+	kernel_pkey_encrypt = 0,
+	kernel_pkey_decrypt = 1,
+	kernel_pkey_sign = 2,
+	kernel_pkey_verify = 3,
+};
+
+struct kernel_pkey_params {
+	struct key *key;
+	const char *encoding;
+	const char *hash_algo;
+	char *info;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	enum kernel_pkey_operation op: 8;
+};
+
+struct kernel_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+};
+
+enum OID {
+	OID_id_dsa_with_sha1 = 0,
+	OID_id_dsa = 1,
+	OID_id_ecPublicKey = 2,
+	OID_id_prime192v1 = 3,
+	OID_id_prime256v1 = 4,
+	OID_id_ecdsa_with_sha1 = 5,
+	OID_id_ecdsa_with_sha224 = 6,
+	OID_id_ecdsa_with_sha256 = 7,
+	OID_id_ecdsa_with_sha384 = 8,
+	OID_id_ecdsa_with_sha512 = 9,
+	OID_rsaEncryption = 10,
+	OID_md2WithRSAEncryption = 11,
+	OID_md3WithRSAEncryption = 12,
+	OID_md4WithRSAEncryption = 13,
+	OID_sha1WithRSAEncryption = 14,
+	OID_sha256WithRSAEncryption = 15,
+	OID_sha384WithRSAEncryption = 16,
+	OID_sha512WithRSAEncryption = 17,
+	OID_sha224WithRSAEncryption = 18,
+	OID_data = 19,
+	OID_signed_data = 20,
+	OID_email_address = 21,
+	OID_contentType = 22,
+	OID_messageDigest = 23,
+	OID_signingTime = 24,
+	OID_smimeCapabilites = 25,
+	OID_smimeAuthenticatedAttrs = 26,
+	OID_md2 = 27,
+	OID_md4 = 28,
+	OID_md5 = 29,
+	OID_mskrb5 = 30,
+	OID_krb5 = 31,
+	OID_krb5u2u = 32,
+	OID_msIndirectData = 33,
+	OID_msStatementType = 34,
+	OID_msSpOpusInfo = 35,
+	OID_msPeImageDataObjId = 36,
+	OID_msIndividualSPKeyPurpose = 37,
+	OID_msOutlookExpress = 38,
+	OID_ntlmssp = 39,
+	OID_negoex = 40,
+	OID_spnego = 41,
+	OID_IAKerb = 42,
+	OID_PKU2U = 43,
+	OID_Scram = 44,
+	OID_certAuthInfoAccess = 45,
+	OID_sha1 = 46,
+	OID_id_ansip384r1 = 47,
+	OID_sha256 = 48,
+	OID_sha384 = 49,
+	OID_sha512 = 50,
+	OID_sha224 = 51,
+	OID_commonName = 52,
+	OID_surname = 53,
+	OID_countryName = 54,
+	OID_locality = 55,
+	OID_stateOrProvinceName = 56,
+	OID_organizationName = 57,
+	OID_organizationUnitName = 58,
+	OID_title = 59,
+	OID_description = 60,
+	OID_name = 61,
+	OID_givenName = 62,
+	OID_initials = 63,
+	OID_generationalQualifier = 64,
+	OID_subjectKeyIdentifier = 65,
+	OID_keyUsage = 66,
+	OID_subjectAltName = 67,
+	OID_issuerAltName = 68,
+	OID_basicConstraints = 69,
+	OID_crlDistributionPoints = 70,
+	OID_certPolicies = 71,
+	OID_authorityKeyIdentifier = 72,
+	OID_extKeyUsage = 73,
+	OID_NetlogonMechanism = 74,
+	OID_appleLocalKdcSupported = 75,
+	OID_gostCPSignA = 76,
+	OID_gostCPSignB = 77,
+	OID_gostCPSignC = 78,
+	OID_gost2012PKey256 = 79,
+	OID_gost2012PKey512 = 80,
+	OID_gost2012Digest256 = 81,
+	OID_gost2012Digest512 = 82,
+	OID_gost2012Signature256 = 83,
+	OID_gost2012Signature512 = 84,
+	OID_gostTC26Sign256A = 85,
+	OID_gostTC26Sign256B = 86,
+	OID_gostTC26Sign256C = 87,
+	OID_gostTC26Sign256D = 88,
+	OID_gostTC26Sign512A = 89,
+	OID_gostTC26Sign512B = 90,
+	OID_gostTC26Sign512C = 91,
+	OID_sm2 = 92,
+	OID_sm3 = 93,
+	OID_SM2_with_SM3 = 94,
+	OID_sm3WithRSAEncryption = 95,
+	OID_TPMLoadableKey = 96,
+	OID_TPMImportableKey = 97,
+	OID_TPMSealedData = 98,
+	OID__NR = 99,
+};
+
+struct x509_certificate;
+
+struct pkcs7_signed_info;
+
+struct pkcs7_message {
+	struct x509_certificate *certs;
+	struct x509_certificate *crl;
+	struct pkcs7_signed_info *signed_infos;
+	u8 version;
+	bool have_authattrs;
+	enum OID data_type;
+	size_t data_len;
+	size_t data_hdrlen;
+	const void *data;
+};
+
+struct compact_control;
+
+struct capture_control {
+	struct compact_control *cc;
+	struct page *page;
+};
+
+struct compact_control {
+	struct list_head freepages;
+	struct list_head migratepages;
+	unsigned int nr_freepages;
+	unsigned int nr_migratepages;
+	unsigned long free_pfn;
+	unsigned long migrate_pfn;
+	unsigned long fast_start_pfn;
+	struct zone *zone;
+	unsigned long total_migrate_scanned;
+	unsigned long total_free_scanned;
+	unsigned short fast_search_fail;
+	short search_order;
+	const gfp_t gfp_mask;
+	int order;
+	int migratetype;
+	const unsigned int alloc_flags;
+	const int highest_zoneidx;
+	enum migrate_mode mode;
+	bool ignore_skip_hint;
+	bool no_set_skip_hint;
+	bool ignore_block_suitable;
+	bool direct_compaction;
+	bool proactive_compaction;
+	bool whole_zone;
+	bool contended;
+	bool finish_pageblock;
+	bool alloc_contig;
+};
+
+struct fid {
+	union {
+		struct {
+			u32 ino;
+			u32 gen;
+			u32 parent_ino;
+			u32 parent_gen;
+		} i32;
+		struct {
+			u32 block;
+			u16 partref;
+			u16 parent_partref;
+			u32 generation;
+			u32 parent_block;
+			u32 parent_generation;
+		} udf;
+		struct {
+			struct {} __empty_raw;
+			__u32 raw[0];
+		};
+	};
+};
+
+typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct folio *);
+
+typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);
+
+typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t);
+
+enum mapping_flags {
+	AS_EIO = 0,
+	AS_ENOSPC = 1,
+	AS_MM_ALL_LOCKS = 2,
+	AS_UNEVICTABLE = 3,
+	AS_EXITING = 4,
+	AS_NO_WRITEBACK_TAGS = 5,
+	AS_LARGE_FOLIO_SUPPORT = 6,
+	AS_RELEASE_ALWAYS = 7,
+	AS_STABLE_WRITES = 8,
+};
+
+enum behavior {
+	EXCLUSIVE = 0,
+	SHARED = 1,
+	DROP = 2,
+};
+
+enum positive_aop_returns {
+	AOP_WRITEPAGE_ACTIVATE = 524288,
+	AOP_TRUNCATED_PAGE = 524289,
+};
+
+enum {
+	SB_UNFROZEN = 0,
+	SB_FREEZE_WRITE = 1,
+	SB_FREEZE_PAGEFAULT = 2,
+	SB_FREEZE_FS = 3,
+	SB_FREEZE_COMPLETE = 4,
+};
+
+struct xa_node {
+	unsigned char shift;
+	unsigned char offset;
+	unsigned char count;
+	unsigned char nr_values;
+	struct xa_node __attribute__((btf_type_tag("rcu"))) *parent;
+	struct xarray *array;
+	union {
+		struct list_head private_list;
+		struct callback_head callback_head;
+	};
+	void __attribute__((btf_type_tag("rcu"))) *slots[64];
+	union {
+		unsigned long tags[3];
+		unsigned long marks[3];
+	};
+};
+
+struct trace_event_raw_mm_filemap_op_page_cache {
+	struct trace_entry ent;
+	unsigned long pfn;
+	unsigned long i_ino;
+	unsigned long index;
+	dev_t s_dev;
+	unsigned char order;
+	char __data[0];
+};
+
+struct trace_event_raw_filemap_set_wb_err {
+	struct trace_entry ent;
+	unsigned long i_ino;
+	dev_t s_dev;
+	errseq_t errseq;
+	char __data[0];
+};
+
+struct trace_event_raw_file_check_and_advance_wb_err {
+	struct trace_entry ent;
+	struct file *file;
+	unsigned long i_ino;
+	dev_t s_dev;
+	errseq_t old;
+	errseq_t new;
+	char __data[0];
+};
+
+struct cachestat_range {
+	__u64 off;
+	__u64 len;
+};
+
+struct cachestat {
+	__u64 nr_cache;
+	__u64 nr_dirty;
+	__u64 nr_writeback;
+	__u64 nr_evicted;
+	__u64 nr_recently_evicted;
+};
+
+typedef void (*xa_update_node_t)(struct xa_node *);
+
+struct xa_state {
+	struct xarray *xa;
+	unsigned long xa_index;
+	unsigned char xa_shift;
+	unsigned char xa_sibs;
+	unsigned char xa_offset;
+	unsigned char xa_pad;
+	struct xa_node *xa_node;
+	struct xa_node *xa_alloc;
+	xa_update_node_t xa_update;
+	struct list_lru *xa_lru;
+};
+
+struct folio_batch {
+	unsigned char nr;
+	bool percpu_pvec_drained;
+	struct folio *folios[15];
+};
+
+struct wait_page_key {
+	struct folio *folio;
+	int bit_nr;
+	int page_match;
+};
+
+typedef struct pglist_data pg_data_t;
+
+struct trace_event_data_offsets_mm_filemap_op_page_cache {};
+
+struct trace_event_data_offsets_filemap_set_wb_err {};
+
+struct trace_event_data_offsets_file_check_and_advance_wb_err {};
+
+struct reciprocal_value {
+	u32 m;
+	u8 sh1;
+	u8 sh2;
+};
+
+struct kmem_cache_order_objects {
+	unsigned int x;
+};
+
+struct kmem_cache_cpu;
+
+struct kmem_cache_node;
+
+struct kmem_cache {
+	struct kmem_cache_cpu __attribute__((btf_type_tag("percpu"))) *cpu_slab;
+	slab_flags_t flags;
+	unsigned long min_partial;
+	unsigned int size;
+	unsigned int object_size;
+	struct reciprocal_value reciprocal_size;
+	unsigned int offset;
+	unsigned int cpu_partial;
+	unsigned int cpu_partial_slabs;
+	struct kmem_cache_order_objects oo;
+	struct kmem_cache_order_objects min;
+	gfp_t allocflags;
+	int refcount;
+	void (*ctor)(void *);
+	unsigned int inuse;
+	unsigned int align;
+	unsigned int red_left_pad;
+	const char *name;
+	struct list_head list;
+	struct kobject kobj;
+	unsigned long random;
+	unsigned int *random_seq;
+	unsigned int useroffset;
+	unsigned int usersize;
+	struct kmem_cache_node *node[1];
+};
+
+typedef unsigned __int128 __u128;
+
+typedef __u128 u128;
+
+typedef u128 freelist_full_t;
+
+typedef union {
+	struct {
+		void *freelist;
+		unsigned long counter;
+	};
+	freelist_full_t full;
+} freelist_aba_t;
+
+struct slab;
+
+struct kmem_cache_cpu {
+	union {
+		struct {
+			void **freelist;
+			unsigned long tid;
+		};
+		freelist_aba_t freelist_tid;
+	};
+	struct slab *slab;
+	struct slab *partial;
+	local_lock_t lock;
+};
+
+struct slab {
+	unsigned long __page_flags;
+	struct kmem_cache *slab_cache;
+	union {
+		struct {
+			union {
+				struct list_head slab_list;
+				struct {
+					struct slab *next;
+					int slabs;
+				};
+			};
+			union {
+				struct {
+					void *freelist;
+					union {
+						unsigned long counters;
+						struct {
+							unsigned int inuse: 16;
+							unsigned int objects: 15;
+							unsigned int frozen: 1;
+						};
+					};
+				};
+				freelist_aba_t freelist_counter;
+			};
+		};
+		struct callback_head callback_head;
+	};
+	unsigned int __unused;
+	atomic_t __page_refcount;
+	unsigned long memcg_data;
+};
+
+struct kmem_cache_node {
+	spinlock_t list_lock;
+	unsigned long nr_partial;
+	struct list_head partial;
+	atomic_long_t nr_slabs;
+	atomic_long_t total_objects;
+	struct list_head full;
+};
+
+typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *);
+
+typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, unsigned long, unsigned long, unsigned long, int, bool);
+
+typedef void (*btf_trace_mark_victim)(void *, struct task_struct *, uid_t);
+
+typedef void (*btf_trace_wake_reaper)(void *, int);
+
+typedef void (*btf_trace_start_task_reaping)(void *, int);
+
+typedef void (*btf_trace_finish_task_reaping)(void *, int);
+
+typedef void (*btf_trace_skip_task_reaping)(void *, int);
+
+enum compact_priority {
+	COMPACT_PRIO_SYNC_FULL = 0,
+	MIN_COMPACT_PRIORITY = 0,
+	COMPACT_PRIO_SYNC_LIGHT = 1,
+	MIN_COMPACT_COSTLY_PRIORITY = 1,
+	DEF_COMPACT_PRIORITY = 1,
+	COMPACT_PRIO_ASYNC = 2,
+	INIT_COMPACT_PRIORITY = 2,
+};
+
+enum compact_result {
+	COMPACT_NOT_SUITABLE_ZONE = 0,
+	COMPACT_SKIPPED = 1,
+	COMPACT_DEFERRED = 2,
+	COMPACT_NO_SUITABLE_PAGE = 3,
+	COMPACT_CONTINUE = 4,
+	COMPACT_COMPLETE = 5,
+	COMPACT_PARTIAL_SKIPPED = 6,
+	COMPACT_CONTENDED = 7,
+	COMPACT_SUCCESS = 8,
+};
+
+typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);
+
+enum oom_constraint {
+	CONSTRAINT_NONE = 0,
+	CONSTRAINT_CPUSET = 1,
+	CONSTRAINT_MEMORY_POLICY = 2,
+	CONSTRAINT_MEMCG = 3,
+};
+
+enum memcg_memory_event {
+	MEMCG_LOW = 0,
+	MEMCG_HIGH = 1,
+	MEMCG_MAX = 2,
+	MEMCG_OOM = 3,
+	MEMCG_OOM_KILL = 4,
+	MEMCG_OOM_GROUP_KILL = 5,
+	MEMCG_SWAP_HIGH = 6,
+	MEMCG_SWAP_MAX = 7,
+	MEMCG_SWAP_FAIL = 8,
+	MEMCG_NR_MEMORY_EVENTS = 9,
+};
+
+struct trace_event_raw_oom_score_adj_update {
+	struct trace_entry ent;
+	pid_t pid;
+	char comm[16];
+	short oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_reclaim_retry_zone {
+	struct trace_entry ent;
+	int node;
+	int zone_idx;
+	int order;
+	unsigned long reclaimable;
+	unsigned long available;
+	unsigned long min_wmark;
+	int no_progress_loops;
+	bool wmark_check;
+	char __data[0];
+};
+
+struct trace_event_raw_mark_victim {
+	struct trace_entry ent;
+	int pid;
+	u32 __data_loc_comm;
+	unsigned long total_vm;
+	unsigned long anon_rss;
+	unsigned long file_rss;
+	unsigned long shmem_rss;
+	uid_t uid;
+	unsigned long pgtables;
+	short oom_score_adj;
+	char __data[0];
+};
+
+struct trace_event_raw_wake_reaper {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_start_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_finish_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_skip_task_reaping {
+	struct trace_entry ent;
+	int pid;
+	char __data[0];
+};
+
+struct trace_event_raw_compact_retry {
+	struct trace_entry ent;
+	int order;
+	int priority;
+	int result;
+	int retries;
+	int max_retries;
+	bool ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mark_victim {
+	u32 comm;
+};
+
+struct oom_control {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct mem_cgroup *memcg;
+	const gfp_t gfp_mask;
+	const int order;
+	unsigned long totalpages;
+	struct task_struct *chosen;
+	long chosen_points;
+	enum oom_constraint constraint;
+};
+
+typedef unsigned int zap_flags_t;
+
+struct zap_details {
+	struct folio *single_folio;
+	bool even_cows;
+	zap_flags_t zap_flags;
+};
+
+struct trace_event_data_offsets_oom_score_adj_update {};
+
+struct trace_event_data_offsets_reclaim_retry_zone {};
+
+struct trace_event_data_offsets_wake_reaper {};
+
+struct trace_event_data_offsets_start_task_reaping {};
+
+struct trace_event_data_offsets_finish_task_reaping {};
+
+struct trace_event_data_offsets_skip_task_reaping {};
+
+struct trace_event_data_offsets_compact_retry {};
+
+enum wb_stat_item {
+	WB_RECLAIMABLE = 0,
+	WB_WRITEBACK = 1,
+	WB_DIRTIED = 2,
+	WB_WRITTEN = 3,
+	NR_WB_STAT_ITEMS = 4,
+};
+
+enum {
+	XA_CHECK_SCHED = 4096,
+};
+
+enum vmscan_throttle_state {
+	VMSCAN_THROTTLE_WRITEBACK = 0,
+	VMSCAN_THROTTLE_ISOLATED = 1,
+	VMSCAN_THROTTLE_NOPROGRESS = 2,
+	VMSCAN_THROTTLE_CONGESTED = 3,
+	NR_VMSCAN_THROTTLE = 4,
+};
+
+enum zone_stat_item {
+	NR_FREE_PAGES = 0,
+	NR_ZONE_LRU_BASE = 1,
+	NR_ZONE_INACTIVE_ANON = 1,
+	NR_ZONE_ACTIVE_ANON = 2,
+	NR_ZONE_INACTIVE_FILE = 3,
+	NR_ZONE_ACTIVE_FILE = 4,
+	NR_ZONE_UNEVICTABLE = 5,
+	NR_ZONE_WRITE_PENDING = 6,
+	NR_MLOCK = 7,
+	NR_BOUNCE = 8,
+	NR_ZSPAGES = 9,
+	NR_FREE_CMA_PAGES = 10,
+	NR_VM_ZONE_STAT_ITEMS = 11,
+};
+
+enum wb_state {
+	WB_registered = 0,
+	WB_writeback_running = 1,
+	WB_has_dirty_io = 2,
+	WB_start_all = 3,
+};
+
+enum page_memcg_data_flags {
+	MEMCG_DATA_OBJCGS = 1,
+	MEMCG_DATA_KMEM = 2,
+	__NR_MEMCG_DATA_FLAGS = 4,
+};
+
+struct dirty_throttle_control {
+	struct wb_domain *dom;
+	struct dirty_throttle_control *gdtc;
+	struct bdi_writeback *wb;
+	struct fprop_local_percpu *wb_completions;
+	unsigned long avail;
+	unsigned long dirty;
+	unsigned long thresh;
+	unsigned long bg_thresh;
+	unsigned long wb_dirty;
+	unsigned long wb_thresh;
+	unsigned long wb_bg_thresh;
+	unsigned long pos_ratio;
+};
+
+struct wb_lock_cookie {
+	bool locked;
+	unsigned long flags;
+};
+
+typedef int (*writepage_t)(struct folio *, struct writeback_control *, void *);
+
+typedef void (*btf_trace_mm_lru_insertion)(void *, struct folio *);
+
+typedef void (*btf_trace_mm_lru_activate)(void *, struct folio *);
+
+struct lru_rotate {
+	local_lock_t lock;
+	struct folio_batch fbatch;
+};
+
+struct cpu_fbatches {
+	local_lock_t lock;
+	struct folio_batch lru_add;
+	struct folio_batch lru_deactivate_file;
+	struct folio_batch lru_deactivate;
+	struct folio_batch lru_lazyfree;
+	struct folio_batch activate;
+};
+
+enum lru_list {
+	LRU_INACTIVE_ANON = 0,
+	LRU_ACTIVE_ANON = 1,
+	LRU_INACTIVE_FILE = 2,
+	LRU_ACTIVE_FILE = 3,
+	LRU_UNEVICTABLE = 4,
+	NR_LRU_LISTS = 5,
+};
+
+enum {
+	LRU_GEN_ANON = 0,
+	LRU_GEN_FILE = 1,
+};
+
+enum {
+	LRU_GEN_CORE = 0,
+	LRU_GEN_MM_WALK = 1,
+	LRU_GEN_NONLEAF_YOUNG = 2,
+	NR_LRU_GEN_CAPS = 3,
+};
+
+struct trace_event_raw_mm_lru_insertion {
+	struct trace_entry ent;
+	struct folio *folio;
+	unsigned long pfn;
+	enum lru_list lru;
+	unsigned long flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_lru_activate {
+	struct trace_entry ent;
+	struct folio *folio;
+	unsigned long pfn;
+	char __data[0];
+};
+
+typedef void (*move_fn_t)(struct lruvec *, struct folio *);
+
+struct trace_event_data_offsets_mm_lru_insertion {};
+
+struct trace_event_data_offsets_mm_lru_activate {};
+
+typedef union {
+	struct page **pages;
+	struct folio **folios;
+	struct encoded_page **encoded_pages;
+} release_pages_arg;
+
+typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);
+
+typedef void (*btf_trace_mm_vmscan_wakeup_kswapd)(void *, int, int, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_direct_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_memcg_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_begin)(void *, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_direct_reclaim_end)(void *, unsigned long);
+
+typedef void (*btf_trace_mm_vmscan_memcg_reclaim_end)(void *, unsigned long);
+
+typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_end)(void *, unsigned long);
+
+typedef void (*btf_trace_mm_shrink_slab_start)(void *, struct shrinker *, struct shrink_control *, long, unsigned long, unsigned long long, unsigned long, int);
+
+typedef void (*btf_trace_mm_shrink_slab_end)(void *, struct shrinker *, int, int, long, long, long);
+
+typedef unsigned int isolate_mode_t;
+
+typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, unsigned long, unsigned long, unsigned long, unsigned long, isolate_mode_t, int);
+
+typedef void (*btf_trace_mm_vmscan_write_folio)(void *, struct folio *);
+
+struct reclaim_stat;
+
+typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, unsigned long, unsigned long, struct reclaim_stat *, int, int);
+
+struct reclaim_stat {
+	unsigned int nr_dirty;
+	unsigned int nr_unqueued_dirty;
+	unsigned int nr_congested;
+	unsigned int nr_writeback;
+	unsigned int nr_immediate;
+	unsigned int nr_pageout;
+	unsigned int nr_activate[2];
+	unsigned int nr_ref_keep;
+	unsigned int nr_unmap_fail;
+	unsigned int nr_lazyfree_fail;
+};
+
+typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, unsigned long, unsigned long, unsigned long, unsigned long, int, int);
+
+typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);
+
+typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, unsigned long);
+
+typedef void (*btf_trace_mm_vmscan_throttled)(void *, int, int, int, int);
+
+enum page_walk_lock {
+	PGWALK_RDLOCK = 0,
+	PGWALK_WRLOCK = 1,
+	PGWALK_WRLOCK_VERIFY = 2,
+};
+
+struct mm_walk;
+
+struct mm_walk_ops {
+	int (*pgd_entry)(pgd_t *, unsigned long, unsigned long, struct mm_walk *);
+	int (*p4d_entry)(p4d_t *, unsigned long, unsigned long, struct mm_walk *);
+	int (*pud_entry)(pud_t *, unsigned long, unsigned long, struct mm_walk *);
+	int (*pmd_entry)(pmd_t *, unsigned long, unsigned long, struct mm_walk *);
+	int (*pte_entry)(pte_t *, unsigned long, unsigned long, struct mm_walk *);
+	int (*pte_hole)(unsigned long, unsigned long, int, struct mm_walk *);
+	int (*hugetlb_entry)(pte_t *, unsigned long, unsigned long, unsigned long, struct mm_walk *);
+	int (*test_walk)(unsigned long, unsigned long, struct mm_walk *);
+	int (*pre_vma)(unsigned long, unsigned long, struct mm_walk *);
+	void (*post_vma)(struct mm_walk *);
+	enum page_walk_lock walk_lock;
+};
+
+enum page_walk_action {
+	ACTION_SUBTREE = 0,
+	ACTION_CONTINUE = 1,
+	ACTION_AGAIN = 2,
+};
+
+struct mm_walk {
+	const struct mm_walk_ops *ops;
+	struct mm_struct *mm;
+	pgd_t *pgd;
+	struct vm_area_struct *vma;
+	enum page_walk_action action;
+	bool no_vma;
+	void *private;
+};
+
+enum {
+	MEMCG_LRU_NOP = 0,
+	MEMCG_LRU_HEAD = 1,
+	MEMCG_LRU_TAIL = 2,
+	MEMCG_LRU_OLD = 3,
+	MEMCG_LRU_YOUNG = 4,
+};
+
+enum folio_references {
+	FOLIOREF_RECLAIM = 0,
+	FOLIOREF_RECLAIM_CLEAN = 1,
+	FOLIOREF_KEEP = 2,
+	FOLIOREF_ACTIVATE = 3,
+};
+
+enum pgdat_flags {
+	PGDAT_DIRTY = 0,
+	PGDAT_WRITEBACK = 1,
+	PGDAT_RECLAIM_LOCKED = 2,
+};
+
+enum mthp_stat_item {
+	MTHP_STAT_ANON_FAULT_ALLOC = 0,
+	MTHP_STAT_ANON_FAULT_FALLBACK = 1,
+	MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE = 2,
+	MTHP_STAT_SWPOUT = 3,
+	MTHP_STAT_SWPOUT_FALLBACK = 4,
+	__MTHP_STAT_COUNT = 5,
+};
+
+enum ttu_flags {
+	TTU_SPLIT_HUGE_PMD = 4,
+	TTU_IGNORE_MLOCK = 8,
+	TTU_SYNC = 16,
+	TTU_HWPOISON = 32,
+	TTU_BATCH_FLUSH = 64,
+	TTU_RMAP_LOCKED = 128,
+};
+
+enum {
+	SWP_USED = 1,
+	SWP_WRITEOK = 2,
+	SWP_DISCARDABLE = 4,
+	SWP_DISCARDING = 8,
+	SWP_SOLIDSTATE = 16,
+	SWP_CONTINUED = 32,
+	SWP_BLKDEV = 64,
+	SWP_ACTIVATED = 128,
+	SWP_FS_OPS = 256,
+	SWP_AREA_DISCARD = 512,
+	SWP_PAGE_DISCARD = 1024,
+	SWP_STABLE_WRITES = 2048,
+	SWP_SYNCHRONOUS_IO = 4096,
+	SWP_SCANNING = 16384,
+};
+
+enum migrate_reason {
+	MR_COMPACTION = 0,
+	MR_MEMORY_FAILURE = 1,
+	MR_MEMORY_HOTPLUG = 2,
+	MR_SYSCALL = 3,
+	MR_MEMPOLICY_MBIND = 4,
+	MR_NUMA_MISPLACED = 5,
+	MR_CONTIG_RANGE = 6,
+	MR_LONGTERM_PIN = 7,
+	MR_DEMOTION = 8,
+	MR_TYPES = 9,
+};
+
+enum {
+	MM_LEAF_TOTAL = 0,
+	MM_LEAF_OLD = 1,
+	MM_LEAF_YOUNG = 2,
+	MM_NONLEAF_TOTAL = 3,
+	MM_NONLEAF_FOUND = 4,
+	MM_NONLEAF_ADDED = 5,
+	NR_MM_STATS = 6,
+};
+
+enum migratetype {
+	MIGRATE_UNMOVABLE = 0,
+	MIGRATE_MOVABLE = 1,
+	MIGRATE_RECLAIMABLE = 2,
+	MIGRATE_FALLBACKS = 3,
+	MIGRATE_CMA = 3,
+	MIGRATE_PCPTYPES = 4,
+	MIGRATE_HIGHATOMIC = 4,
+	MIGRATE_ISOLATE = 5,
+	MIGRATE_TYPES = 6,
+};
+
+enum zone_watermarks {
+	WMARK_MIN = 0,
+	WMARK_LOW = 1,
+	WMARK_HIGH = 2,
+	WMARK_PROMO = 3,
+	NR_WMARK = 4,
+};
+
+enum lruvec_flags {
+	LRUVEC_CGROUP_CONGESTED = 0,
+	LRUVEC_NODE_CONGESTED = 1,
+};
+
+enum scan_balance {
+	SCAN_EQUAL = 0,
+	SCAN_FRACT = 1,
+	SCAN_ANON = 2,
+	SCAN_FILE = 3,
+};
+
+enum zone_flags {
+	ZONE_BOOSTED_WATERMARK = 0,
+	ZONE_RECLAIM_ACTIVE = 1,
+};
+
+struct trace_event_raw_mm_vmscan_kswapd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_kswapd_wake {
+	struct trace_entry ent;
+	int nid;
+	int zid;
+	int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_wakeup_kswapd {
+	struct trace_entry ent;
+	int nid;
+	int zid;
+	int order;
+	unsigned long gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {
+	struct trace_entry ent;
+	int order;
+	unsigned long gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_direct_reclaim_end_template {
+	struct trace_entry ent;
+	unsigned long nr_reclaimed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_shrink_slab_start {
+	struct trace_entry ent;
+	struct shrinker *shr;
+	void *shrink;
+	int nid;
+	long nr_objects_to_shrink;
+	unsigned long gfp_flags;
+	unsigned long cache_items;
+	unsigned long long delta;
+	unsigned long total_scan;
+	int priority;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_shrink_slab_end {
+	struct trace_entry ent;
+	struct shrinker *shr;
+	int nid;
+	void *shrink;
+	long unused_scan;
+	long new_scan;
+	int retval;
+	long total_scan;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_isolate {
+	struct trace_entry ent;
+	int highest_zoneidx;
+	int order;
+	unsigned long nr_requested;
+	unsigned long nr_scanned;
+	unsigned long nr_skipped;
+	unsigned long nr_taken;
+	unsigned int isolate_mode;
+	int lru;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_write_folio {
+	struct trace_entry ent;
+	unsigned long pfn;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_shrink_inactive {
+	struct trace_entry ent;
+	int nid;
+	unsigned long nr_scanned;
+	unsigned long nr_reclaimed;
+	unsigned long nr_dirty;
+	unsigned long nr_writeback;
+	unsigned long nr_congested;
+	unsigned long nr_immediate;
+	unsigned int nr_activate0;
+	unsigned int nr_activate1;
+	unsigned long nr_ref_keep;
+	unsigned long nr_unmap_fail;
+	int priority;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_lru_shrink_active {
+	struct trace_entry ent;
+	int nid;
+	unsigned long nr_taken;
+	unsigned long nr_active;
+	unsigned long nr_deactivated;
+	unsigned long nr_referenced;
+	int priority;
+	int reclaim_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_node_reclaim_begin {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	unsigned long gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_vmscan_throttled {
+	struct trace_entry ent;
+	int nid;
+	int usec_timeout;
+	int usec_delayed;
+	int reason;
+	char __data[0];
+};
+
+struct migration_target_control {
+	int nid;
+	nodemask_t *nmask;
+	gfp_t gfp_mask;
+};
+
+struct scan_control {
+	unsigned long nr_to_reclaim;
+	nodemask_t *nodemask;
+	struct mem_cgroup *target_mem_cgroup;
+	unsigned long anon_cost;
+	unsigned long file_cost;
+	unsigned int may_deactivate: 2;
+	unsigned int force_deactivate: 1;
+	unsigned int skipped_deactivate: 1;
+	unsigned int may_writepage: 1;
+	unsigned int may_unmap: 1;
+	unsigned int may_swap: 1;
+	unsigned int proactive: 1;
+	unsigned int memcg_low_reclaim: 1;
+	unsigned int memcg_low_skipped: 1;
+	unsigned int hibernation_mode: 1;
+	unsigned int compaction_ready: 1;
+	unsigned int cache_trim_mode: 1;
+	unsigned int file_is_tiny: 1;
+	unsigned int no_demotion: 1;
+	s8 order;
+	s8 priority;
+	s8 reclaim_idx;
+	gfp_t gfp_mask;
+	unsigned long nr_scanned;
+	unsigned long nr_reclaimed;
+	struct {
+		unsigned int dirty;
+		unsigned int unqueued_dirty;
+		unsigned int congested;
+		unsigned int writeback;
+		unsigned int immediate;
+		unsigned int file_taken;
+		unsigned int taken;
+	} nr;
+	struct reclaim_state reclaim_state;
+	u64 android_vendor_data1;
+};
+
+struct mem_cgroup_reclaim_cookie {
+	pg_data_t *pgdat;
+	unsigned int generation;
+};
+
+struct ctrl_pos {
+	unsigned long refaulted;
+	unsigned long total;
+	int gain;
+};
+
+typedef enum {
+	PAGE_KEEP = 0,
+	PAGE_ACTIVATE = 1,
+	PAGE_SUCCESS = 2,
+	PAGE_CLEAN = 3,
+} pageout_t;
+
+struct trace_event_data_offsets_mm_vmscan_kswapd_sleep {};
+
+struct trace_event_data_offsets_mm_vmscan_kswapd_wake {};
+
+struct trace_event_data_offsets_mm_vmscan_wakeup_kswapd {};
+
+struct trace_event_data_offsets_mm_vmscan_direct_reclaim_begin_template {};
+
+struct trace_event_data_offsets_mm_vmscan_direct_reclaim_end_template {};
+
+struct trace_event_data_offsets_mm_shrink_slab_start {};
+
+struct trace_event_data_offsets_mm_shrink_slab_end {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_isolate {};
+
+struct trace_event_data_offsets_mm_vmscan_write_folio {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};
+
+struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};
+
+struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};
+
+struct trace_event_data_offsets_mm_vmscan_throttled {};
+
+struct fileattr {
+	u32 flags;
+	u32 fsx_xflags;
+	u32 fsx_extsize;
+	u32 fsx_nextents;
+	u32 fsx_projid;
+	u32 fsx_cowextsize;
+	bool flags_valid: 1;
+	bool fsx_valid: 1;
+};
+
+struct constant_table {
+	const char *name;
+	int value;
+};
+
+enum sgp_type {
+	SGP_READ = 0,
+	SGP_NOALLOC = 1,
+	SGP_CACHE = 2,
+	SGP_WRITE = 3,
+	SGP_FALLOC = 4,
+};
+
+enum mfill_atomic_mode {
+	MFILL_ATOMIC_COPY = 0,
+	MFILL_ATOMIC_ZEROPAGE = 1,
+	MFILL_ATOMIC_CONTINUE = 2,
+	MFILL_ATOMIC_POISON = 3,
+	NR_MFILL_ATOMIC_MODES = 4,
+};
+
+enum shmem_param {
+	Opt_gid = 0,
+	Opt_huge = 1,
+	Opt_mode = 2,
+	Opt_mpol = 3,
+	Opt_nr_blocks = 4,
+	Opt_nr_inodes = 5,
+	Opt_size = 6,
+	Opt_uid = 7,
+	Opt_inode32 = 8,
+	Opt_inode64 = 9,
+	Opt_noswap = 10,
+	Opt_quota = 11,
+	Opt_usrquota = 12,
+	Opt_grpquota = 13,
+	Opt_usrquota_block_hardlimit = 14,
+	Opt_usrquota_inode_hardlimit = 15,
+	Opt_grpquota_block_hardlimit = 16,
+	Opt_grpquota_inode_hardlimit = 17,
+};
+
+enum fid_type {
+	FILEID_ROOT = 0,
+	FILEID_INO32_GEN = 1,
+	FILEID_INO32_GEN_PARENT = 2,
+	FILEID_BTRFS_WITHOUT_PARENT = 77,
+	FILEID_BTRFS_WITH_PARENT = 78,
+	FILEID_BTRFS_WITH_PARENT_ROOT = 79,
+	FILEID_UDF_WITHOUT_PARENT = 81,
+	FILEID_UDF_WITH_PARENT = 82,
+	FILEID_NILFS_WITHOUT_PARENT = 97,
+	FILEID_NILFS_WITH_PARENT = 98,
+	FILEID_FAT_WITHOUT_PARENT = 113,
+	FILEID_FAT_WITH_PARENT = 114,
+	FILEID_LUSTRE = 151,
+	FILEID_KERNFS = 254,
+	FILEID_INVALID = 255,
+};
+
+enum {
+	_DQUOT_USAGE_ENABLED = 0,
+	_DQUOT_LIMITS_ENABLED = 1,
+	_DQUOT_SUSPENDED = 2,
+	_DQUOT_STATE_FLAGS = 3,
+};
+
+struct shared_policy {};
+
+struct simple_xattrs {
+	struct rb_root rb_root;
+	rwlock_t lock;
+};
+
+struct shmem_inode_info {
+	spinlock_t lock;
+	unsigned int seals;
+	unsigned long flags;
+	unsigned long alloced;
+	unsigned long swapped;
+	unsigned long fallocend;
+	struct list_head shrinklist;
+	struct list_head swaplist;
+	struct shared_policy policy;
+	struct simple_xattrs xattrs;
+	atomic_t stop_eviction;
+	struct timespec64 i_crtime;
+	unsigned int fsflags;
+	struct offset_ctx dir_offsets;
+	struct inode vfs_inode;
+	u64 android_vendor_data1;
+};
+
+typedef unsigned int uffd_flags_t;
+
+struct shmem_quota_limits {
+	qsize_t usrquota_bhardlimit;
+	qsize_t usrquota_ihardlimit;
+	qsize_t grpquota_bhardlimit;
+	qsize_t grpquota_ihardlimit;
+};
+
+struct mempolicy;
+
+struct shmem_sb_info {
+	unsigned long max_blocks;
+	struct percpu_counter used_blocks;
+	unsigned long max_inodes;
+	unsigned long free_ispace;
+	raw_spinlock_t stat_lock;
+	umode_t mode;
+	unsigned char huge;
+	kuid_t uid;
+	kgid_t gid;
+	bool full_inums;
+	bool noswap;
+	ino_t next_ino;
+	ino_t __attribute__((btf_type_tag("percpu"))) *ino_batch;
+	struct mempolicy *mpol;
+	spinlock_t shrinklist_lock;
+	struct list_head shrinklist;
+	unsigned long shrinklist_len;
+	struct shmem_quota_limits qlimits;
+};
+
+struct mempolicy {};
+
+struct simple_xattr {
+	struct rb_node rb_node;
+	char *name;
+	size_t size;
+	char value[0];
+};
+
+typedef int (*initxattrs)(struct inode *, const struct xattr *, void *);
+
+struct shmem_falloc {
+	wait_queue_head_t *waitq;
+	unsigned long start;
+	unsigned long next;
+	unsigned long nr_falloced;
+	unsigned long nr_unswapped;
+};
+
+struct shmem_options {
+	unsigned long long blocks;
+	unsigned long long inodes;
+	struct mempolicy *mpol;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	bool full_inums;
+	int huge;
+	int seen;
+	bool noswap;
+	unsigned short quota_types;
+	struct shmem_quota_limits qlimits;
+};
+
+struct vm_event_state {
+	unsigned long event[106];
+};
+
+enum writeback_stat_item {
+	NR_DIRTY_THRESHOLD = 0,
+	NR_DIRTY_BG_THRESHOLD = 1,
+	NR_VM_WRITEBACK_STAT_ITEMS = 2,
+};
+
+struct contig_page_info {
+	unsigned long free_pages;
+	unsigned long free_blocks_total;
+	unsigned long free_blocks_suitable;
+};
+
+enum {
+	RADIX_TREE_ITER_TAG_MASK = 15,
+	RADIX_TREE_ITER_TAGGED = 16,
+	RADIX_TREE_ITER_CONTIG = 32,
+};
+
+struct radix_tree_iter {
+	unsigned long index;
+	unsigned long next_index;
+	unsigned long tags;
+	struct xa_node *node;
+};
+
+enum mminit_level {
+	MMINIT_WARNING = 0,
+	MMINIT_VERIFY = 1,
+	MMINIT_TRACE = 2,
+};
+
+enum meminit_context {
+	MEMINIT_EARLY = 0,
+	MEMINIT_HOTPLUG = 1,
+};
+
+typedef void (*btf_trace_percpu_alloc_percpu)(void *, unsigned long, bool, bool, size_t, size_t, void *, int, void __attribute__((btf_type_tag("percpu"))) *, size_t, gfp_t);
+
+typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void __attribute__((btf_type_tag("percpu"))) *);
+
+typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);
+
+typedef void (*btf_trace_percpu_create_chunk)(void *, void *);
+
+typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);
+
+struct pcpu_block_md {
+	int scan_hint;
+	int scan_hint_start;
+	int contig_hint;
+	int contig_hint_start;
+	int left_free;
+	int right_free;
+	int first_free;
+	int nr_bits;
+};
+
+struct pcpu_chunk {
+	struct list_head list;
+	int free_bytes;
+	struct pcpu_block_md chunk_md;
+	unsigned long *bound_map;
+	void *base_addr;
+	unsigned long *alloc_map;
+	struct pcpu_block_md *md_blocks;
+	void *data;
+	bool immutable;
+	bool isolated;
+	int start_offset;
+	int end_offset;
+	struct obj_cgroup **obj_cgroups;
+	int nr_pages;
+	int nr_populated;
+	int nr_empty_pop_pages;
+	unsigned long populated[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum memcg_stat_item {
+	MEMCG_SWAP = 41,
+	MEMCG_SOCK = 42,
+	MEMCG_PERCPU_B = 43,
+	MEMCG_VMALLOC = 44,
+	MEMCG_KMEM = 45,
+	MEMCG_ZSWAP_B = 46,
+	MEMCG_ZSWAPPED = 47,
+	MEMCG_NR_STAT = 48,
+};
+
+struct trace_event_raw_percpu_alloc_percpu {
+	struct trace_entry ent;
+	unsigned long call_site;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	void *base_addr;
+	int off;
+	void __attribute__((btf_type_tag("percpu"))) *ptr;
+	size_t bytes_alloc;
+	unsigned long gfp_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_free_percpu {
+	struct trace_entry ent;
+	void *base_addr;
+	int off;
+	void __attribute__((btf_type_tag("percpu"))) *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_alloc_percpu_fail {
+	struct trace_entry ent;
+	bool reserved;
+	bool is_atomic;
+	size_t size;
+	size_t align;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_create_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_percpu_destroy_chunk {
+	struct trace_entry ent;
+	void *base_addr;
+	char __data[0];
+};
+
+struct pcpu_group_info {
+	int nr_units;
+	unsigned long base_offset;
+	unsigned int *cpu_map;
+};
+
+struct pcpu_alloc_info {
+	size_t static_size;
+	size_t reserved_size;
+	size_t dyn_size;
+	size_t unit_size;
+	size_t atom_size;
+	size_t alloc_size;
+	size_t __ai_size;
+	int nr_groups;
+	struct pcpu_group_info groups[0];
+};
+
+struct trace_event_data_offsets_percpu_alloc_percpu {};
+
+struct trace_event_data_offsets_percpu_free_percpu {};
+
+struct trace_event_data_offsets_percpu_alloc_percpu_fail {};
+
+struct trace_event_data_offsets_percpu_create_chunk {};
+
+struct trace_event_data_offsets_percpu_destroy_chunk {};
+
+typedef void (*btf_trace_kmem_cache_alloc)(void *, unsigned long, const void *, struct kmem_cache *, gfp_t, int);
+
+typedef void (*btf_trace_kmalloc)(void *, unsigned long, const void *, size_t, size_t, gfp_t, int);
+
+typedef void (*btf_trace_kfree)(void *, unsigned long, const void *);
+
+typedef void (*btf_trace_kmem_cache_free)(void *, unsigned long, const void *, const struct kmem_cache *);
+
+typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);
+
+typedef void (*btf_trace_mm_page_free_batched)(void *, struct page *);
+
+typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);
+
+typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int, int);
+
+typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);
+
+typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int);
+
+typedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int);
+
+struct kmalloc_info_struct {
+	const char *name[3];
+	unsigned int size;
+};
+
+enum slab_state {
+	DOWN = 0,
+	PARTIAL = 1,
+	PARTIAL_NODE = 2,
+	UP = 3,
+	FULL = 4,
+};
+
+struct trace_event_raw_kmem_cache_alloc {
+	struct trace_entry ent;
+	unsigned long call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	unsigned long gfp_flags;
+	int node;
+	bool accounted;
+	char __data[0];
+};
+
+struct trace_event_raw_kmalloc {
+	struct trace_entry ent;
+	unsigned long call_site;
+	const void *ptr;
+	size_t bytes_req;
+	size_t bytes_alloc;
+	unsigned long gfp_flags;
+	int node;
+	char __data[0];
+};
+
+struct trace_event_raw_kfree {
+	struct trace_entry ent;
+	unsigned long call_site;
+	const void *ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_kmem_cache_free {
+	struct trace_entry ent;
+	unsigned long call_site;
+	const void *ptr;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free {
+	struct trace_entry ent;
+	unsigned long pfn;
+	unsigned int order;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_free_batched {
+	struct trace_entry ent;
+	unsigned long pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc {
+	struct trace_entry ent;
+	unsigned long pfn;
+	unsigned int order;
+	unsigned long gfp_flags;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page {
+	struct trace_entry ent;
+	unsigned long pfn;
+	unsigned int order;
+	int migratetype;
+	int percpu_refill;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_pcpu_drain {
+	struct trace_entry ent;
+	unsigned long pfn;
+	unsigned int order;
+	int migratetype;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_page_alloc_extfrag {
+	struct trace_entry ent;
+	unsigned long pfn;
+	int alloc_order;
+	int fallback_order;
+	int alloc_migratetype;
+	int fallback_migratetype;
+	int change_ownership;
+	char __data[0];
+};
+
+struct trace_event_raw_rss_stat {
+	struct trace_entry ent;
+	unsigned int mm_id;
+	unsigned int curr;
+	int member;
+	long size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_kmem_cache_free {
+	u32 name;
+};
+
+struct kmem_obj_info {
+	void *kp_ptr;
+	struct slab *kp_slab;
+	void *kp_objp;
+	unsigned long kp_data_offset;
+	struct kmem_cache *kp_slab_cache;
+	void *kp_ret;
+	void *kp_stack[16];
+	void *kp_free_stack[16];
+};
+
+struct slabinfo {
+	unsigned long active_objs;
+	unsigned long num_objs;
+	unsigned long active_slabs;
+	unsigned long num_slabs;
+	unsigned long shared_avail;
+	unsigned int limit;
+	unsigned int batchcount;
+	unsigned int shared;
+	unsigned int objects_per_slab;
+	unsigned int cache_order;
+};
+
+struct trace_event_data_offsets_kmem_cache_alloc {};
+
+struct trace_event_data_offsets_kmalloc {};
+
+struct trace_event_data_offsets_kfree {};
+
+struct trace_event_data_offsets_mm_page_free {};
+
+struct trace_event_data_offsets_mm_page_free_batched {};
+
+struct trace_event_data_offsets_mm_page_alloc {};
+
+struct trace_event_data_offsets_mm_page {};
+
+struct trace_event_data_offsets_mm_page_pcpu_drain {};
+
+struct trace_event_data_offsets_mm_page_alloc_extfrag {};
+
+struct trace_event_data_offsets_rss_stat {};
+
+typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_mm_compaction_fast_isolate_freepages)(void *, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_mm_compaction_migratepages)(void *, struct compact_control *, unsigned int);
+
+typedef void (*btf_trace_mm_compaction_begin)(void *, struct compact_control *, unsigned long, unsigned long, bool);
+
+typedef void (*btf_trace_mm_compaction_end)(void *, struct compact_control *, unsigned long, unsigned long, bool, int);
+
+typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);
+
+typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int);
+
+typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);
+
+typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);
+
+typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);
+
+enum pageblock_bits {
+	PB_migrate = 0,
+	PB_migrate_end = 2,
+	PB_migrate_skip = 3,
+	NR_PAGEBLOCK_BITS = 4,
+};
+
+struct trace_event_raw_mm_compaction_isolate_template {
+	struct trace_entry ent;
+	unsigned long start_pfn;
+	unsigned long end_pfn;
+	unsigned long nr_scanned;
+	unsigned long nr_taken;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_migratepages {
+	struct trace_entry ent;
+	unsigned long nr_migrated;
+	unsigned long nr_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_begin {
+	struct trace_entry ent;
+	unsigned long zone_start;
+	unsigned long migrate_pfn;
+	unsigned long free_pfn;
+	unsigned long zone_end;
+	bool sync;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_end {
+	struct trace_entry ent;
+	unsigned long zone_start;
+	unsigned long migrate_pfn;
+	unsigned long free_pfn;
+	unsigned long zone_end;
+	bool sync;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_try_to_compact_pages {
+	struct trace_entry ent;
+	int order;
+	unsigned long gfp_mask;
+	int prio;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_suitable_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_defer_template {
+	struct trace_entry ent;
+	int nid;
+	enum zone_type idx;
+	int order;
+	unsigned int considered;
+	unsigned int defer_shift;
+	int order_failed;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_compaction_kcompactd_sleep {
+	struct trace_entry ent;
+	int nid;
+	char __data[0];
+};
+
+struct trace_event_raw_kcompactd_wake_template {
+	struct trace_entry ent;
+	int nid;
+	int order;
+	enum zone_type highest_zoneidx;
+	char __data[0];
+};
+
+struct movable_operations {
+	bool (*isolate_page)(struct page *, isolate_mode_t);
+	int (*migrate_page)(struct page *, struct page *, enum migrate_mode);
+	void (*putback_page)(struct page *);
+};
+
+typedef enum {
+	ISOLATE_ABORT = 0,
+	ISOLATE_NONE = 1,
+	ISOLATE_SUCCESS = 2,
+} isolate_migrate_t;
+
+typedef struct folio *new_folio_t(struct folio *, unsigned long);
+
+typedef void free_folio_t(struct folio *, unsigned long);
+
+struct trace_event_data_offsets_mm_compaction_isolate_template {};
+
+struct trace_event_data_offsets_mm_compaction_migratepages {};
+
+struct trace_event_data_offsets_mm_compaction_begin {};
+
+struct trace_event_data_offsets_mm_compaction_end {};
+
+struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};
+
+struct trace_event_data_offsets_mm_compaction_suitable_template {};
+
+struct trace_event_data_offsets_mm_compaction_defer_template {};
+
+struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};
+
+struct trace_event_data_offsets_kcompactd_wake_template {};
+
+struct alloc_context {
+	struct zonelist *zonelist;
+	nodemask_t *nodemask;
+	struct zoneref *preferred_zoneref;
+	int migratetype;
+	enum zone_type highest_zoneidx;
+	bool spread_dirty_pages;
+};
+
+struct anon_vma_chain {
+	struct vm_area_struct *vma;
+	struct anon_vma *anon_vma;
+	struct list_head same_vma;
+	struct rb_node rb;
+	unsigned long rb_subtree_last;
+};
+
+enum lru_status {
+	LRU_REMOVED = 0,
+	LRU_REMOVED_RETRY = 1,
+	LRU_ROTATE = 2,
+	LRU_SKIP = 3,
+	LRU_RETRY = 4,
+};
+
+struct list_lru_memcg {
+	struct callback_head rcu;
+	struct list_lru_one node[0];
+};
+
+typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);
+
+struct list_lru_memcg_table {
+	struct list_lru_memcg *mlru;
+	struct mem_cgroup *memcg;
+};
+
+enum {
+	FOLL_TOUCH = 65536,
+	FOLL_TRIED = 131072,
+	FOLL_REMOTE = 262144,
+	FOLL_PIN = 524288,
+	FOLL_FAST_ONLY = 1048576,
+	FOLL_UNLOCKABLE = 2097152,
+	FOLL_MADV_POPULATE = 4194304,
+};
+
+struct follow_page_context {
+	struct dev_pagemap *pgmap;
+	unsigned int page_mask;
+};
+
+typedef void (*btf_trace_mmap_lock_start_locking)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_released)(void *, struct mm_struct *, const char *, bool);
+
+typedef void (*btf_trace_mmap_lock_acquire_returned)(void *, struct mm_struct *, const char *, bool, bool);
+
+struct memcg_path {
+	local_lock_t lock;
+	char __attribute__((btf_type_tag("rcu"))) *buf;
+	local_t buf_idx;
+};
+
+struct trace_event_raw_mmap_lock {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	char __data[0];
+};
+
+struct trace_event_raw_mmap_lock_acquire_returned {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	u32 __data_loc_memcg_path;
+	bool write;
+	bool success;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmap_lock {
+	u32 memcg_path;
+};
+
+struct trace_event_data_offsets_mmap_lock_acquire_returned {
+	u32 memcg_path;
+};
+
+typedef int (*show_pad_smaps_fn)(struct seq_file *, void *);
+
+typedef void (*show_pad_maps_fn)(struct seq_file *, struct vm_area_struct *);
+
+enum rmap_level {
+	RMAP_LEVEL_PTE = 0,
+	RMAP_LEVEL_PMD = 1,
+};
+
+enum transparent_hugepage_flag {
+	TRANSPARENT_HUGEPAGE_UNSUPPORTED = 0,
+	TRANSPARENT_HUGEPAGE_FLAG = 1,
+	TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 2,
+	TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 3,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 4,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 5,
+	TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 6,
+	TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 7,
+	TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 8,
+};
+
+typedef int rmap_t;
+
+typedef int fpb_t;
+
+typedef unsigned long pte_marker;
+
+typedef int (*pte_fn_t)(pte_t *, unsigned long, void *);
+
+typedef unsigned int pgtbl_mod_mask;
+
+struct copy_subpage_arg {
+	struct page *dst;
+	struct page *src;
+	struct vm_area_struct *vma;
+};
+
+struct mlock_fbatch {
+	local_lock_t lock;
+	struct folio_batch fbatch;
+};
+
+typedef void (*btf_trace_vm_unmapped_area)(void *, unsigned long, struct vm_unmapped_area_info *);
+
+typedef void (*btf_trace_vma_mas_szero)(void *, struct maple_tree *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_vma_store)(void *, struct maple_tree *, struct vm_area_struct *);
+
+typedef void (*btf_trace_exit_mmap)(void *, struct mm_struct *);
+
+enum {
+	HUGETLB_SHMFS_INODE = 1,
+	HUGETLB_ANONHUGE_INODE = 2,
+};
+
+struct trace_event_raw_vm_unmapped_area {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long total_vm;
+	unsigned long flags;
+	unsigned long length;
+	unsigned long low_limit;
+	unsigned long high_limit;
+	unsigned long align_mask;
+	unsigned long align_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_vma_mas_szero {
+	struct trace_entry ent;
+	struct maple_tree *mt;
+	unsigned long start;
+	unsigned long end;
+	char __data[0];
+};
+
+struct trace_event_raw_vma_store {
+	struct trace_entry ent;
+	struct maple_tree *mt;
+	struct vm_area_struct *vma;
+	unsigned long vm_start;
+	unsigned long vm_end;
+	char __data[0];
+};
+
+struct trace_event_raw_exit_mmap {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	struct maple_tree *mt;
+	char __data[0];
+};
+
+struct vma_prepare {
+	struct vm_area_struct *vma;
+	struct vm_area_struct *adj_next;
+	struct file *file;
+	struct address_space *mapping;
+	struct anon_vma *anon_vma;
+	struct vm_area_struct *insert;
+	struct vm_area_struct *remove;
+	struct vm_area_struct *remove2;
+};
+
+struct trace_event_data_offsets_vm_unmapped_area {};
+
+struct trace_event_data_offsets_vma_mas_szero {};
+
+struct trace_event_data_offsets_vma_store {};
+
+struct trace_event_data_offsets_exit_mmap {};
+
+enum pgt_entry {
+	NORMAL_PMD = 0,
+	HPAGE_PMD = 1,
+	NORMAL_PUD = 2,
+	HPAGE_PUD = 3,
+};
+
+struct hstate {};
+
+typedef void (*btf_trace_tlb_flush)(void *, int, unsigned long);
+
+typedef void (*btf_trace_mm_migrate_pages)(void *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, enum migrate_mode, int);
+
+typedef void (*btf_trace_mm_migrate_pages_start)(void *, enum migrate_mode, int);
+
+typedef void (*btf_trace_set_migration_pte)(void *, unsigned long, unsigned long, int);
+
+typedef void (*btf_trace_remove_migration_pte)(void *, unsigned long, unsigned long, int);
+
+struct trace_event_raw_tlb_flush {
+	struct trace_entry ent;
+	int reason;
+	unsigned long pages;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_migrate_pages {
+	struct trace_entry ent;
+	unsigned long succeeded;
+	unsigned long failed;
+	unsigned long thp_succeeded;
+	unsigned long thp_failed;
+	unsigned long thp_split;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_migrate_pages_start {
+	struct trace_entry ent;
+	enum migrate_mode mode;
+	int reason;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pte {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long pte;
+	int order;
+	char __data[0];
+};
+
+struct rmap_walk_control {
+	void *arg;
+	bool try_lock;
+	bool contended;
+	bool (*rmap_one)(struct folio *, struct vm_area_struct *, unsigned long, void *);
+	int (*done)(struct folio *);
+	struct anon_vma * (*anon_lock)(struct folio *, struct rmap_walk_control *);
+	bool (*invalid_vma)(struct vm_area_struct *, void *);
+};
+
+struct trace_event_data_offsets_tlb_flush {};
+
+struct trace_event_data_offsets_mm_migrate_pages {};
+
+struct trace_event_data_offsets_mm_migrate_pages_start {};
+
+struct trace_event_data_offsets_migration_pte {};
+
+struct folio_referenced_arg {
+	int mapcount;
+	int referenced;
+	unsigned long vm_flags;
+	struct mem_cgroup *memcg;
+};
+
+typedef void (*btf_trace_alloc_vmap_area)(void *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, int);
+
+typedef void (*btf_trace_purge_vmap_area_lazy)(void *, unsigned long, unsigned long, unsigned int);
+
+typedef void (*btf_trace_free_vmap_area_noflush)(void *, unsigned long, unsigned long, unsigned long);
+
+struct vfree_deferred {
+	struct llist_head list;
+	struct work_struct wq;
+};
+
+struct vmap_block_queue {
+	spinlock_t lock;
+	struct list_head free;
+	struct xarray vmap_blocks;
+};
+
+struct vmap_area {
+	unsigned long va_start;
+	unsigned long va_end;
+	struct rb_node rb_node;
+	struct list_head list;
+	union {
+		unsigned long subtree_max_size;
+		struct vm_struct *vm;
+	};
+	unsigned long flags;
+};
+
+enum fit_type {
+	NOTHING_FIT = 0,
+	FL_FIT_TYPE = 1,
+	LE_FIT_TYPE = 2,
+	RE_FIT_TYPE = 3,
+	NE_FIT_TYPE = 4,
+};
+
+typedef unsigned int kasan_vmalloc_flags_t;
+
+struct trace_event_raw_alloc_vmap_area {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long size;
+	unsigned long align;
+	unsigned long vstart;
+	unsigned long vend;
+	int failed;
+	char __data[0];
+};
+
+struct trace_event_raw_purge_vmap_area_lazy {
+	struct trace_entry ent;
+	unsigned long start;
+	unsigned long end;
+	unsigned int npurged;
+	char __data[0];
+};
+
+struct trace_event_raw_free_vmap_area_noflush {
+	struct trace_entry ent;
+	unsigned long va_start;
+	unsigned long nr_lazy;
+	unsigned long nr_lazy_max;
+	char __data[0];
+};
+
+struct vmap_block {
+	spinlock_t lock;
+	struct vmap_area *va;
+	unsigned long free;
+	unsigned long dirty;
+	unsigned long used_map[16];
+	unsigned long dirty_min;
+	unsigned long dirty_max;
+	struct list_head free_list;
+	struct callback_head callback_head;
+	struct list_head purge;
+	unsigned int cpu;
+};
+
+struct trace_event_data_offsets_alloc_vmap_area {};
+
+struct trace_event_data_offsets_purge_vmap_area_lazy {};
+
+struct trace_event_data_offsets_free_vmap_area_noflush {};
+
+typedef int fpi_t;
+
+struct page_frag_cache {
+	void *va;
+	__u16 offset;
+	__u16 size;
+	unsigned int pagecnt_bias;
+	bool pfmemalloc;
+};
+
+struct memblock {
+	bool bottom_up;
+	phys_addr_t current_limit;
+	struct memblock_type memory;
+	struct memblock_type reserved;
+};
+
+enum memblock_memsize_state {
+	MEMBLOCK_MEMSIZE_NONE = 0,
+	MEMBLOCK_MEMSIZE_DEBUGFS = 1,
+	MEMBLOCK_MEMSIZE_PROCFS = 2,
+};
+
+struct memsize_rgn_struct {
+	phys_addr_t base;
+	long size;
+	bool nomap;
+	bool reusable;
+	char name[100];
+};
+
+typedef void (*online_page_callback_t)(struct page *, unsigned int);
+
+enum {
+	MMOP_OFFLINE = 0,
+	MMOP_ONLINE = 1,
+	MMOP_ONLINE_KERNEL = 2,
+	MMOP_ONLINE_MOVABLE = 3,
+};
+
+enum {
+	ONLINE_POLICY_CONTIG_ZONES = 0,
+	ONLINE_POLICY_AUTO_MOVABLE = 1,
+};
+
+enum {
+	MEMMAP_ON_MEMORY_DISABLE = 0,
+	MEMMAP_ON_MEMORY_ENABLE = 1,
+	MEMMAP_ON_MEMORY_FORCE = 2,
+};
+
+typedef int mhp_t;
+
+struct memory_group;
+
+struct memory_block {
+	unsigned long start_section_nr;
+	unsigned long state;
+	int online_type;
+	int nid;
+	struct zone *zone;
+	struct device dev;
+	struct vmem_altmap *altmap;
+	struct memory_group *group;
+	struct list_head group_next;
+};
+
+struct memory_group {
+	int nid;
+	struct list_head memory_blocks;
+	unsigned long present_kernel_pages;
+	unsigned long present_movable_pages;
+	bool is_dynamic;
+	union {
+		struct {
+			unsigned long max_pages;
+		} s;
+		struct {
+			unsigned long unit_pages;
+		} d;
+	};
+};
+
+struct auto_movable_group_stats {
+	unsigned long movable_pages;
+	unsigned long req_kernel_early_pages;
+};
+
+struct auto_movable_stats {
+	unsigned long kernel_early_pages;
+	unsigned long movable_pages;
+};
+
+typedef int (*walk_memory_groups_func_t)(struct memory_group *, void *);
+
+struct memory_notify {
+	unsigned long start_pfn;
+	unsigned long nr_pages;
+	int status_change_nid_normal;
+	int status_change_nid;
+};
+
+typedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);
+
+enum iter_type {
+	ITER_IOVEC = 0,
+	ITER_KVEC = 1,
+	ITER_BVEC = 2,
+	ITER_XARRAY = 3,
+	ITER_DISCARD = 4,
+	ITER_UBUF = 5,
+};
+
+typedef int cydp_t;
+
+struct madvise_walk_private {
+	struct mmu_gather *tlb;
+	bool pageout;
+};
+
+enum {
+	BIO_PAGE_PINNED = 0,
+	BIO_CLONED = 1,
+	BIO_BOUNCED = 2,
+	BIO_QUIET = 3,
+	BIO_CHAIN = 4,
+	BIO_REFFED = 5,
+	BIO_BPS_THROTTLED = 6,
+	BIO_TRACE_COMPLETION = 7,
+	BIO_CGROUP_ACCT = 8,
+	BIO_QOS_THROTTLED = 9,
+	BIO_QOS_MERGED = 10,
+	BIO_REMAPPED = 11,
+	BIO_ZONE_WRITE_LOCKED = 12,
+	BIO_FLAG_LAST = 13,
+};
+
+struct swap_iocb {
+	struct kiocb iocb;
+	struct bio_vec bvec[32];
+	int pages;
+	int len;
+};
+
+struct vma_swap_readahead {
+	unsigned short win;
+	unsigned short offset;
+	unsigned short nr_pte;
+};
+
+enum {
+	PERCPU_REF_INIT_ATOMIC = 1,
+	PERCPU_REF_INIT_DEAD = 2,
+	PERCPU_REF_ALLOW_REINIT = 4,
+};
+
+struct swap_extent {
+	struct rb_node rb_node;
+	unsigned long start_page;
+	unsigned long nr_pages;
+	sector_t start_block;
+};
+
+union swap_header {
+	struct {
+		char reserved[4086];
+		char magic[10];
+	} magic;
+	struct {
+		char bootbits[1024];
+		__u32 version;
+		__u32 last_page;
+		__u32 nr_badpages;
+		unsigned char sws_uuid[16];
+		unsigned char sws_volume[16];
+		__u32 padding[117];
+		__u32 badpages[1];
+	} info;
+};
+
+struct swap_slots_cache {
+	bool lock_initialized;
+	struct mutex alloc_lock;
+	swp_entry_t *slots;
+	int nr;
+	int cur;
+	spinlock_t free_lock;
+	swp_entry_t *slots_ret;
+	int n_ret;
+};
+
+struct dma_page {
+	struct list_head page_list;
+	void *vaddr;
+	dma_addr_t dma;
+};
+
+struct dma_block;
+
+struct dma_pool {
+	struct list_head page_list;
+	spinlock_t lock;
+	struct dma_block *next_block;
+	size_t nr_blocks;
+	size_t nr_active;
+	size_t nr_pages;
+	struct device *dev;
+	unsigned int size;
+	unsigned int allocation;
+	unsigned int boundary;
+	char name[32];
+	struct list_head pools;
+};
+
+struct dma_block {
+	struct dma_block *next_block;
+	dma_addr_t dma;
+};
+
+struct mmu_notifier_subscriptions {
+	struct hlist_head list;
+	bool has_itree;
+	spinlock_t lock;
+	unsigned long invalidate_seq;
+	unsigned long active_invalidate_ranges;
+	struct rb_root_cached itree;
+	wait_queue_head_t wq;
+	struct hlist_head deferred_list;
+};
+
+struct mmu_interval_notifier_ops;
+
+struct mmu_interval_notifier {
+	struct interval_tree_node interval_tree;
+	const struct mmu_interval_notifier_ops *ops;
+	struct mm_struct *mm;
+	struct hlist_node deferred_item;
+	unsigned long invalidate_seq;
+};
+
+struct mmu_interval_notifier_ops {
+	bool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, unsigned long);
+};
+
+struct slub_flush_work {
+	struct work_struct work;
+	struct kmem_cache *s;
+	bool skip;
+};
+
+struct slab_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kmem_cache *, char *);
+	ssize_t (*store)(struct kmem_cache *, const char *, size_t);
+};
+
+struct saved_alias {
+	struct kmem_cache *s;
+	const char *name;
+	struct saved_alias *next;
+};
+
+enum track_item {
+	TRACK_ALLOC = 0,
+	TRACK_FREE = 1,
+};
+
+enum stat_item {
+	ALLOC_FASTPATH = 0,
+	ALLOC_SLOWPATH = 1,
+	FREE_FASTPATH = 2,
+	FREE_SLOWPATH = 3,
+	FREE_FROZEN = 4,
+	FREE_ADD_PARTIAL = 5,
+	FREE_REMOVE_PARTIAL = 6,
+	ALLOC_FROM_PARTIAL = 7,
+	ALLOC_SLAB = 8,
+	ALLOC_REFILL = 9,
+	ALLOC_NODE_MISMATCH = 10,
+	FREE_SLAB = 11,
+	CPUSLAB_FLUSH = 12,
+	DEACTIVATE_FULL = 13,
+	DEACTIVATE_EMPTY = 14,
+	DEACTIVATE_TO_HEAD = 15,
+	DEACTIVATE_TO_TAIL = 16,
+	DEACTIVATE_REMOTE_FREES = 17,
+	DEACTIVATE_BYPASS = 18,
+	ORDER_FALLBACK = 19,
+	CMPXCHG_DOUBLE_CPU_FAIL = 20,
+	CMPXCHG_DOUBLE_FAIL = 21,
+	CPU_PARTIAL_ALLOC = 22,
+	CPU_PARTIAL_FREE = 23,
+	CPU_PARTIAL_NODE = 24,
+	CPU_PARTIAL_DRAIN = 25,
+	NR_SLUB_STAT_ITEMS = 26,
+};
+
+enum slab_modes {
+	M_NONE = 0,
+	M_PARTIAL = 1,
+	M_FREE = 2,
+	M_FULL_NOLIST = 3,
+};
+
+enum slab_stat_type {
+	SL_ALL = 0,
+	SL_PARTIAL = 1,
+	SL_CPU = 2,
+	SL_OBJECTS = 3,
+	SL_TOTAL = 4,
+};
+
+typedef struct {
+	unsigned long v;
+} freeptr_t;
+
+struct kunit_resource;
+
+typedef void (*kunit_resource_free_t)(struct kunit_resource *);
+
+struct kunit_resource {
+	void *data;
+	const char *name;
+	kunit_resource_free_t free;
+	struct kref refcount;
+	struct list_head node;
+	bool should_kfree;
+};
+
+typedef u32 depot_stack_handle_t;
+
+struct location {
+	depot_stack_handle_t handle;
+	unsigned long count;
+	unsigned long addr;
+	unsigned long waste;
+	long long sum_time;
+	long min_time;
+	long max_time;
+	long min_pid;
+	long max_pid;
+	unsigned long cpus[1];
+	nodemask_t nodes;
+};
+
+struct track {
+	unsigned long addr;
+	depot_stack_handle_t handle;
+	int cpu;
+	int pid;
+	unsigned long when;
+};
+
+struct detached_freelist {
+	struct slab *slab;
+	void *tail;
+	void *freelist;
+	int cnt;
+	struct kmem_cache *s;
+};
+
+union __u128_halves {
+	u128 full;
+	struct {
+		u64 low;
+		u64 high;
+	};
+};
+
+struct partial_context {
+	struct slab **slab;
+	gfp_t flags;
+	unsigned int orig_size;
+};
+
+typedef bool (*kunit_resource_match_t)(struct kunit *, struct kunit_resource *, void *);
+
+struct loc_track {
+	unsigned long max;
+	unsigned long count;
+	struct location *loc;
+	loff_t idx;
+};
+
+enum kfence_object_state {
+	KFENCE_OBJECT_UNUSED = 0,
+	KFENCE_OBJECT_ALLOCATED = 1,
+	KFENCE_OBJECT_FREED = 2,
+};
+
+struct kfence_track {
+	pid_t pid;
+	int cpu;
+	u64 ts_nsec;
+	int num_stack_entries;
+	unsigned long stack_entries[64];
+};
+
+struct kfence_metadata {
+	struct list_head list;
+	struct callback_head callback_head;
+	raw_spinlock_t lock;
+	enum kfence_object_state state;
+	unsigned long addr;
+	size_t size;
+	struct kmem_cache *cache;
+	unsigned long unprotected_page;
+	struct kfence_track alloc_track;
+	struct kfence_track free_track;
+	u32 alloc_stack_hash;
+	struct obj_cgroup *objcg;
+};
+
+enum kfence_counter_id {
+	KFENCE_COUNTER_ALLOCATED = 0,
+	KFENCE_COUNTER_ALLOCS = 1,
+	KFENCE_COUNTER_FREES = 2,
+	KFENCE_COUNTER_ZOMBIES = 3,
+	KFENCE_COUNTER_BUGS = 4,
+	KFENCE_COUNTER_SKIP_INCOMPAT = 5,
+	KFENCE_COUNTER_SKIP_CAPACITY = 6,
+	KFENCE_COUNTER_SKIP_COVERED = 7,
+	KFENCE_COUNTER_COUNT = 8,
+};
+
+enum kfence_error_type {
+	KFENCE_ERROR_OOB = 0,
+	KFENCE_ERROR_UAF = 1,
+	KFENCE_ERROR_CORRUPTION = 2,
+	KFENCE_ERROR_INVALID = 3,
+	KFENCE_ERROR_INVALID_FREE = 4,
+};
+
+struct kcsan_scoped_access {};
+
+typedef __kernel_long_t __kernel_ptrdiff_t;
+
+typedef __kernel_ptrdiff_t ptrdiff_t;
+
+enum bh_state_bits {
+	BH_Uptodate = 0,
+	BH_Dirty = 1,
+	BH_Lock = 2,
+	BH_Req = 3,
+	BH_Mapped = 4,
+	BH_New = 5,
+	BH_Async_Read = 6,
+	BH_Async_Write = 7,
+	BH_Delay = 8,
+	BH_Boundary = 9,
+	BH_Write_EIO = 10,
+	BH_Unwritten = 11,
+	BH_Quiet = 12,
+	BH_Meta = 13,
+	BH_Prio = 14,
+	BH_Defer_Completion = 15,
+	BH_PrivateStart = 16,
+};
+
+enum {
+	PAGE_WAS_MAPPED = 1,
+	PAGE_WAS_MLOCKED = 2,
+	PAGE_OLD_STATES = 3,
+};
+
+struct buffer_head;
+
+typedef void bh_end_io_t(struct buffer_head *, int);
+
+struct buffer_head {
+	unsigned long b_state;
+	struct buffer_head *b_this_page;
+	union {
+		struct page *b_page;
+		struct folio *b_folio;
+	};
+	sector_t b_blocknr;
+	size_t b_size;
+	char *b_data;
+	struct block_device *b_bdev;
+	bh_end_io_t *b_end_io;
+	void *b_private;
+	struct list_head b_assoc_buffers;
+	struct address_space *b_assoc_map;
+	atomic_t b_count;
+	spinlock_t b_uptodate_lock;
+};
+
+struct migrate_pages_stats {
+	int nr_succeeded;
+	int nr_failed_pages;
+	int nr_thp_succeeded;
+	int nr_thp_failed;
+	int nr_thp_split;
+};
+
+typedef void (*btf_trace_hugepage_set_pmd)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_hugepage_set_pud)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_hugepage_update_pmd)(void *, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_hugepage_update_pud)(void *, unsigned long, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_set_migration_pmd)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_remove_migration_pmd)(void *, unsigned long, unsigned long);
+
+struct mthp_stat {
+	unsigned long stats[50];
+};
+
+struct trace_event_raw_hugepage_set {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long pte;
+	char __data[0];
+};
+
+struct trace_event_raw_hugepage_update {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long pte;
+	unsigned long clr;
+	unsigned long set;
+	char __data[0];
+};
+
+struct trace_event_raw_migration_pmd {
+	struct trace_entry ent;
+	unsigned long addr;
+	unsigned long pmd;
+	char __data[0];
+};
+
+struct thpsize {
+	struct kobject kobj;
+	struct list_head node;
+	int order;
+};
+
+struct trace_event_data_offsets_hugepage_set {};
+
+struct trace_event_data_offsets_hugepage_update {};
+
+struct trace_event_data_offsets_migration_pmd {};
+
+typedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int);
+
+typedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int);
+
+typedef void (*btf_trace_mm_khugepaged_scan_file)(void *, struct mm_struct *, struct page *, struct file *, int, int, int);
+
+typedef void (*btf_trace_mm_khugepaged_collapse_file)(void *, struct mm_struct *, struct page *, unsigned long, bool, unsigned long, struct file *, int, int);
+
+struct collapse_control {
+	bool is_khugepaged;
+	u32 node_load[1];
+	nodemask_t alloc_nmask;
+};
+
+struct khugepaged_mm_slot;
+
+struct khugepaged_scan {
+	struct list_head mm_head;
+	struct khugepaged_mm_slot *mm_slot;
+	unsigned long address;
+};
+
+struct mm_slot {
+	struct hlist_node hash;
+	struct list_head mm_node;
+	struct mm_struct *mm;
+};
+
+struct khugepaged_mm_slot {
+	struct mm_slot slot;
+};
+
+enum scan_result {
+	SCAN_FAIL = 0,
+	SCAN_SUCCEED = 1,
+	SCAN_PMD_NULL = 2,
+	SCAN_PMD_NONE = 3,
+	SCAN_PMD_MAPPED = 4,
+	SCAN_EXCEED_NONE_PTE = 5,
+	SCAN_EXCEED_SWAP_PTE = 6,
+	SCAN_EXCEED_SHARED_PTE = 7,
+	SCAN_PTE_NON_PRESENT = 8,
+	SCAN_PTE_UFFD_WP = 9,
+	SCAN_PTE_MAPPED_HUGEPAGE = 10,
+	SCAN_PAGE_RO = 11,
+	SCAN_LACK_REFERENCED_PAGE = 12,
+	SCAN_PAGE_NULL = 13,
+	SCAN_SCAN_ABORT = 14,
+	SCAN_PAGE_COUNT = 15,
+	SCAN_PAGE_LRU = 16,
+	SCAN_PAGE_LOCK = 17,
+	SCAN_PAGE_ANON = 18,
+	SCAN_PAGE_COMPOUND = 19,
+	SCAN_ANY_PROCESS = 20,
+	SCAN_VMA_NULL = 21,
+	SCAN_VMA_CHECK = 22,
+	SCAN_ADDRESS_RANGE = 23,
+	SCAN_DEL_PAGE_LRU = 24,
+	SCAN_ALLOC_HUGE_PAGE_FAIL = 25,
+	SCAN_CGROUP_CHARGE_FAIL = 26,
+	SCAN_TRUNCATED = 27,
+	SCAN_PAGE_HAS_PRIVATE = 28,
+	SCAN_STORE_FAILED = 29,
+	SCAN_COPY_MC = 30,
+	SCAN_PAGE_FILLED = 31,
+};
+
+struct trace_event_raw_mm_khugepaged_scan_pmd {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	unsigned long pfn;
+	bool writable;
+	int referenced;
+	int none_or_zero;
+	int status;
+	int unmapped;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int isolated;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_isolate {
+	struct trace_entry ent;
+	unsigned long pfn;
+	int none_or_zero;
+	int referenced;
+	bool writable;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_collapse_huge_page_swapin {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	int swapped_in;
+	int referenced;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_khugepaged_scan_file {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	unsigned long pfn;
+	u32 __data_loc_filename;
+	int present;
+	int swap;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_mm_khugepaged_collapse_file {
+	struct trace_entry ent;
+	struct mm_struct *mm;
+	unsigned long hpfn;
+	unsigned long index;
+	unsigned long addr;
+	bool is_shmem;
+	u32 __data_loc_filename;
+	int nr;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mm_khugepaged_scan_file {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_mm_khugepaged_collapse_file {
+	u32 filename;
+};
+
+struct trace_event_data_offsets_mm_khugepaged_scan_pmd {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_isolate {};
+
+struct trace_event_data_offsets_mm_collapse_huge_page_swapin {};
+
+struct memcg_vmstats {
+	long state[48];
+	unsigned long events[17];
+	long state_local[48];
+	unsigned long events_local[17];
+	long state_pending[48];
+	unsigned long events_pending[17];
+	atomic64_t stats_updates;
+};
+
+struct mem_cgroup_tree_per_node;
+
+struct mem_cgroup_tree {
+	struct mem_cgroup_tree_per_node *rb_tree_per_node[1];
+};
+
+struct mem_cgroup_tree_per_node {
+	struct rb_root rb_root;
+	struct rb_node *rb_rightmost;
+	spinlock_t lock;
+};
+
+struct memory_stat {
+	const char *name;
+	unsigned int idx;
+};
+
+struct move_charge_struct {
+	spinlock_t lock;
+	struct mm_struct *mm;
+	struct mem_cgroup *from;
+	struct mem_cgroup *to;
+	unsigned long flags;
+	unsigned long precharge;
+	unsigned long moved_charge;
+	unsigned long moved_swap;
+	struct task_struct *moving_task;
+	wait_queue_head_t waitq;
+};
+
+struct memcg_stock_pcp {
+	local_lock_t stock_lock;
+	struct mem_cgroup *cached;
+	unsigned int nr_pages;
+	struct obj_cgroup *cached_objcg;
+	struct pglist_data *cached_pgdat;
+	unsigned int nr_bytes;
+	int nr_slab_reclaimable_b;
+	int nr_slab_unreclaimable_b;
+	struct work_struct work;
+	unsigned long flags;
+};
+
+enum mem_cgroup_events_target {
+	MEM_CGROUP_TARGET_THRESH = 0,
+	MEM_CGROUP_TARGET_SOFTLIMIT = 1,
+	MEM_CGROUP_NTARGETS = 2,
+};
+
+enum mc_target_type {
+	MC_TARGET_NONE = 0,
+	MC_TARGET_PAGE = 1,
+	MC_TARGET_SWAP = 2,
+	MC_TARGET_DEVICE = 3,
+};
+
+enum res_type {
+	_MEM = 0,
+	_MEMSWAP = 1,
+	_KMEM = 2,
+	_TCP = 3,
+};
+
+enum {
+	RES_USAGE = 0,
+	RES_LIMIT = 1,
+	RES_MAX_USAGE = 2,
+	RES_FAILCNT = 3,
+	RES_SOFT_LIMIT = 4,
+};
+
+struct oom_wait_info {
+	struct mem_cgroup *memcg;
+	wait_queue_entry_t wait;
+};
+
+struct mem_cgroup_eventfd_list {
+	struct list_head list;
+	struct eventfd_ctx *eventfd;
+};
+
+struct mem_cgroup_event {
+	struct mem_cgroup *memcg;
+	struct eventfd_ctx *eventfd;
+	struct list_head list;
+	int (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *);
+	void (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *);
+	poll_table pt;
+	wait_queue_head_t *wqh;
+	wait_queue_entry_t wait;
+	struct work_struct remove;
+};
+
+struct uncharge_gather {
+	struct mem_cgroup *memcg;
+	unsigned long nr_memory;
+	unsigned long pgpgout;
+	unsigned long nr_kmem;
+	int nid;
+};
+
+union mc_target {
+	struct folio *folio;
+	swp_entry_t ent;
+};
+
+enum vmpressure_levels {
+	VMPRESSURE_LOW = 0,
+	VMPRESSURE_MEDIUM = 1,
+	VMPRESSURE_CRITICAL = 2,
+	VMPRESSURE_NUM_LEVELS = 3,
+};
+
+enum vmpressure_modes {
+	VMPRESSURE_NO_PASSTHROUGH = 0,
+	VMPRESSURE_HIERARCHY = 1,
+	VMPRESSURE_LOCAL = 2,
+	VMPRESSURE_NUM_MODES = 3,
+};
+
+struct vmpressure_event {
+	struct eventfd_ctx *efd;
+	enum vmpressure_levels level;
+	enum vmpressure_modes mode;
+	struct list_head node;
+};
+
+struct swap_cgroup_ctrl {
+	struct page **map;
+	unsigned long length;
+	spinlock_t lock;
+};
+
+struct swap_cgroup {
+	unsigned short id;
+};
+
+struct page_ext_operations {
+	size_t offset;
+	size_t size;
+	bool (*need)();
+	void (*init)();
+	bool need_shared_flags;
+};
+
+enum page_ext_flags {
+	PAGE_EXT_OWNER = 0,
+	PAGE_EXT_OWNER_ALLOCATED = 1,
+	PAGE_EXT_PINNER_MIGRATION_FAILED = 2,
+};
+
+struct page_owner {
+	unsigned short order;
+	short last_migrate_reason;
+	gfp_t gfp_mask;
+	depot_stack_handle_t handle;
+	depot_stack_handle_t free_handle;
+	u64 ts_nsec;
+	u64 free_ts_nsec;
+	char comm[16];
+	pid_t pid;
+	pid_t tgid;
+	pid_t free_pid;
+	pid_t free_tgid;
+};
+
+struct cleancache_filekey;
+
+struct cleancache_ops {
+	int (*init_fs)(size_t);
+	int (*init_shared_fs)(uuid_t *, size_t);
+	int (*get_page)(int, struct cleancache_filekey, unsigned long, struct page *);
+	void (*put_page)(int, struct cleancache_filekey, unsigned long, struct page *);
+	void (*invalidate_page)(int, struct cleancache_filekey, unsigned long);
+	void (*invalidate_inode)(int, struct cleancache_filekey);
+	void (*invalidate_fs)(int);
+};
+
+struct cleancache_filekey {
+	union {
+		ino_t ino;
+		__u32 fh[6];
+		u32 key[6];
+	} u;
+};
+
+struct captured_pinner;
+
+struct page_pinner_buffer {
+	spinlock_t lock;
+	unsigned long index;
+	struct captured_pinner *buffer;
+};
+
+enum pp_state {
+	PP_PUT = 0,
+	PP_FREE = 1,
+	PP_FAIL_DETECTED = 2,
+};
+
+struct captured_pinner {
+	depot_stack_handle_t handle;
+	union {
+		u64 ts_usec;
+		u64 elapsed;
+	};
+	unsigned long pfn;
+	int count;
+	int mapcount;
+	struct address_space *mapping;
+	unsigned long flags;
+	enum pp_state state;
+};
+
+struct page_pinner {
+	depot_stack_handle_t handle;
+	u64 ts_usec;
+	atomic_t count;
+};
+
+typedef void (*btf_trace_test_pages_isolated)(void *, unsigned long, unsigned long, unsigned long);
+
+struct trace_event_raw_test_pages_isolated {
+	struct trace_entry ent;
+	unsigned long start_pfn;
+	unsigned long end_pfn;
+	unsigned long fin_pfn;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_test_pages_isolated {};
+
+typedef void (*btf_trace_cma_release)(void *, const char *, unsigned long, const struct page *, unsigned long);
+
+typedef void (*btf_trace_cma_alloc_start)(void *, const char *, unsigned long, unsigned int);
+
+typedef void (*btf_trace_cma_alloc_finish)(void *, const char *, unsigned long, const struct page *, unsigned long, unsigned int, int);
+
+typedef void (*btf_trace_cma_alloc_busy_retry)(void *, const char *, unsigned long, const struct page *, unsigned long, unsigned int);
+
+struct trace_event_raw_cma_release {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long pfn;
+	const struct page *page;
+	unsigned long count;
+	char __data[0];
+};
+
+struct trace_event_raw_cma_alloc_start {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long count;
+	unsigned int align;
+	char __data[0];
+};
+
+struct trace_event_raw_cma_alloc_finish {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long pfn;
+	const struct page *page;
+	unsigned long count;
+	unsigned int align;
+	int errorno;
+	char __data[0];
+};
+
+struct trace_event_raw_cma_alloc_busy_retry {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned long pfn;
+	const struct page *page;
+	unsigned long count;
+	unsigned int align;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_cma_release {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cma_alloc_start {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cma_alloc_finish {
+	u32 name;
+};
+
+struct trace_event_data_offsets_cma_alloc_busy_retry {
+	u32 name;
+};
+
+struct balloon_dev_info {
+	unsigned long isolated_pages;
+	spinlock_t pages_lock;
+	struct list_head pages;
+	int (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);
+};
+
+struct cma_mem {
+	struct hlist_node node;
+	struct page *p;
+	unsigned long n;
+};
+
+enum {
+	BAD_STACK = -1,
+	NOT_STACK = 0,
+	GOOD_FRAME = 1,
+	GOOD_STACK = 2,
+};
+
+struct page_reporting_dev_info {
+	int (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);
+	struct delayed_work work;
+	atomic_t state;
+	unsigned int order;
+};
+
+enum {
+	PAGE_REPORTING_IDLE = 0,
+	PAGE_REPORTING_REQUESTED = 1,
+	PAGE_REPORTING_ACTIVE = 2,
+};
+
+struct file_lock_context {
+	spinlock_t flc_lock;
+	struct list_head flc_flock;
+	struct list_head flc_posix;
+	struct list_head flc_lease;
+};
+
+struct nlm_lockowner;
+
+struct nfs_lock_info {
+	u32 state;
+	struct nlm_lockowner *owner;
+	struct list_head list;
+};
+
+struct nfs4_lock_state;
+
+struct nfs4_lock_info {
+	struct nfs4_lock_state *owner;
+};
+
+struct file_lock_operations;
+
+struct lock_manager_operations;
+
+struct file_lock {
+	struct file_lock *fl_blocker;
+	struct list_head fl_list;
+	struct hlist_node fl_link;
+	struct list_head fl_blocked_requests;
+	struct list_head fl_blocked_member;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	unsigned int fl_pid;
+	int fl_link_cpu;
+	wait_queue_head_t fl_wait;
+	struct file *fl_file;
+	loff_t fl_start;
+	loff_t fl_end;
+	struct fasync_struct *fl_fasync;
+	unsigned long fl_break_time;
+	unsigned long fl_downgrade_time;
+	const struct file_lock_operations *fl_ops;
+	const struct lock_manager_operations *fl_lmops;
+	union {
+		struct nfs_lock_info nfs_fl;
+		struct nfs4_lock_info nfs4_fl;
+		struct {
+			struct list_head link;
+			int state;
+			unsigned int debug_id;
+		} afs;
+		struct {
+			struct inode *inode;
+		} ceph;
+	} fl_u;
+};
+
+struct file_lock_operations {
+	void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
+	void (*fl_release_private)(struct file_lock *);
+};
+
+struct lock_manager_operations {
+	void *lm_mod_owner;
+	fl_owner_t (*lm_get_owner)(fl_owner_t);
+	void (*lm_put_owner)(fl_owner_t);
+	void (*lm_notify)(struct file_lock *);
+	int (*lm_grant)(struct file_lock *, int);
+	bool (*lm_break)(struct file_lock *);
+	int (*lm_change)(struct file_lock *, int, struct list_head *);
+	void (*lm_setup)(struct file_lock *, void **);
+	bool (*lm_breaker_owns_lease)(struct file_lock *);
+	bool (*lm_lock_expirable)(struct file_lock *);
+	void (*lm_expire_lock)();
+};
+
+enum fsnotify_data_type {
+	FSNOTIFY_EVENT_NONE = 0,
+	FSNOTIFY_EVENT_PATH = 1,
+	FSNOTIFY_EVENT_INODE = 2,
+	FSNOTIFY_EVENT_DENTRY = 3,
+	FSNOTIFY_EVENT_ERROR = 4,
+};
+
+typedef s32 compat_off_t;
+
+struct open_flags {
+	int open_flag;
+	umode_t mode;
+	int acc_mode;
+	int intent;
+	int lookup_flags;
+};
+
+typedef __kernel_long_t __kernel_off_t;
+
+typedef __kernel_off_t off_t;
+
+typedef __kernel_rwf_t rwf_t;
+
+typedef s64 compat_loff_t;
+
+struct files_stat_struct {
+	unsigned long nr_files;
+	unsigned long nr_free_files;
+	unsigned long max_files;
+};
+
+struct backing_file {
+	struct file file;
+	struct path real_path;
+};
+
+struct fscrypt_policy_v1 {
+	__u8 version;
+	__u8 contents_encryption_mode;
+	__u8 filenames_encryption_mode;
+	__u8 flags;
+	__u8 master_key_descriptor[8];
+};
+
+struct fscrypt_policy_v2 {
+	__u8 version;
+	__u8 contents_encryption_mode;
+	__u8 filenames_encryption_mode;
+	__u8 flags;
+	__u8 log2_data_unit_size;
+	__u8 __reserved[3];
+	__u8 master_key_identifier[16];
+};
+
+union fscrypt_policy {
+	u8 version;
+	struct fscrypt_policy_v1 v1;
+	struct fscrypt_policy_v2 v2;
+};
+
+struct char_device_struct {
+	struct char_device_struct *next;
+	unsigned int major;
+	unsigned int baseminor;
+	int minorct;
+	char name[64];
+	struct cdev *cdev;
+};
+
+typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
+
+struct mount;
+
+struct mnt_namespace {
+	struct ns_common ns;
+	struct mount *root;
+	struct list_head list;
+	spinlock_t ns_lock;
+	struct user_namespace *user_ns;
+	struct ucounts *ucounts;
+	u64 seq;
+	wait_queue_head_t poll;
+	u64 event;
+	unsigned int mounts;
+	unsigned int pending_mounts;
+};
+
+struct mnt_pcp;
+
+struct mountpoint;
+
+struct mount {
+	struct hlist_node mnt_hash;
+	struct mount *mnt_parent;
+	struct dentry *mnt_mountpoint;
+	struct vfsmount mnt;
+	union {
+		struct callback_head mnt_rcu;
+		struct llist_node mnt_llist;
+	};
+	struct mnt_pcp __attribute__((btf_type_tag("percpu"))) *mnt_pcp;
+	struct list_head mnt_mounts;
+	struct list_head mnt_child;
+	struct list_head mnt_instance;
+	const char *mnt_devname;
+	struct list_head mnt_list;
+	struct list_head mnt_expire;
+	struct list_head mnt_share;
+	struct list_head mnt_slave_list;
+	struct list_head mnt_slave;
+	struct mount *mnt_master;
+	struct mnt_namespace *mnt_ns;
+	struct mountpoint *mnt_mp;
+	union {
+		struct hlist_node mnt_mp_list;
+		struct hlist_node mnt_umount;
+	};
+	struct list_head mnt_umounting;
+	struct fsnotify_mark_connector __attribute__((btf_type_tag("rcu"))) *mnt_fsnotify_marks;
+	__u32 mnt_fsnotify_mask;
+	int mnt_id;
+	int mnt_group_id;
+	int mnt_expiry_mark;
+	struct hlist_head mnt_pins;
+	struct hlist_head mnt_stuck_children;
+};
+
+struct mnt_pcp {
+	int mnt_count;
+	int mnt_writers;
+};
+
+struct mountpoint {
+	struct hlist_node m_hash;
+	struct dentry *m_dentry;
+	struct hlist_head m_list;
+	int m_count;
+};
+
+struct __old_kernel_stat {
+	unsigned short st_dev;
+	unsigned short st_ino;
+	unsigned short st_mode;
+	unsigned short st_nlink;
+	unsigned short st_uid;
+	unsigned short st_gid;
+	unsigned short st_rdev;
+	unsigned int st_size;
+	unsigned int st_atime;
+	unsigned int st_mtime;
+	unsigned int st_ctime;
+};
+
+struct stat {
+	__kernel_ulong_t st_dev;
+	__kernel_ulong_t st_ino;
+	__kernel_ulong_t st_nlink;
+	unsigned int st_mode;
+	unsigned int st_uid;
+	unsigned int st_gid;
+	unsigned int __pad0;
+	__kernel_ulong_t st_rdev;
+	__kernel_long_t st_size;
+	__kernel_long_t st_blksize;
+	__kernel_long_t st_blocks;
+	__kernel_ulong_t st_atime;
+	__kernel_ulong_t st_atime_nsec;
+	__kernel_ulong_t st_mtime;
+	__kernel_ulong_t st_mtime_nsec;
+	__kernel_ulong_t st_ctime;
+	__kernel_ulong_t st_ctime_nsec;
+	__kernel_long_t __unused[3];
+};
+
+struct statx_timestamp {
+	__s64 tv_sec;
+	__u32 tv_nsec;
+	__s32 __reserved;
+};
+
+struct statx {
+	__u32 stx_mask;
+	__u32 stx_blksize;
+	__u64 stx_attributes;
+	__u32 stx_nlink;
+	__u32 stx_uid;
+	__u32 stx_gid;
+	__u16 stx_mode;
+	__u16 __spare0[1];
+	__u64 stx_ino;
+	__u64 stx_size;
+	__u64 stx_blocks;
+	__u64 stx_attributes_mask;
+	struct statx_timestamp stx_atime;
+	struct statx_timestamp stx_btime;
+	struct statx_timestamp stx_ctime;
+	struct statx_timestamp stx_mtime;
+	__u32 stx_rdev_major;
+	__u32 stx_rdev_minor;
+	__u32 stx_dev_major;
+	__u32 stx_dev_minor;
+	__u64 stx_mnt_id;
+	__u32 stx_dio_mem_align;
+	__u32 stx_dio_offset_align;
+	__u64 __spare3[12];
+};
+
+typedef u32 compat_ino_t;
+
+typedef u16 compat_mode_t;
+
+typedef u16 compat_nlink_t;
+
+typedef u16 __compat_uid_t;
+
+typedef u16 __compat_gid_t;
+
+struct compat_stat {
+	u32 st_dev;
+	compat_ino_t st_ino;
+	compat_mode_t st_mode;
+	compat_nlink_t st_nlink;
+	__compat_uid_t st_uid;
+	__compat_gid_t st_gid;
+	u32 st_rdev;
+	u32 st_size;
+	u32 st_blksize;
+	u32 st_blocks;
+	u32 st_atime;
+	u32 st_atime_nsec;
+	u32 st_mtime;
+	u32 st_mtime_nsec;
+	u32 st_ctime;
+	u32 st_ctime_nsec;
+	u32 __unused4;
+	u32 __unused5;
+};
+
+typedef unsigned short ushort;
+
+struct user_arg_ptr {
+	bool is_compat;
+	union {
+		const char __attribute__((btf_type_tag("user"))) * const __attribute__((btf_type_tag("user"))) *native;
+		const compat_uptr_t __attribute__((btf_type_tag("user"))) *compat;
+	} ptr;
+};
+
+enum inode_i_mutex_lock_class {
+	I_MUTEX_NORMAL = 0,
+	I_MUTEX_PARENT = 1,
+	I_MUTEX_CHILD = 2,
+	I_MUTEX_XATTR = 3,
+	I_MUTEX_NONDIR2 = 4,
+	I_MUTEX_PARENT2 = 5,
+};
+
+struct saved {
+	struct path link;
+	struct delayed_call done;
+	const char *name;
+	unsigned int seq;
+};
+
+struct nameidata {
+	struct path path;
+	struct qstr last;
+	struct path root;
+	struct inode *inode;
+	unsigned int flags;
+	unsigned int state;
+	unsigned int seq;
+	unsigned int next_seq;
+	unsigned int m_seq;
+	unsigned int r_seq;
+	int last_type;
+	unsigned int depth;
+	int total_link_count;
+	struct saved *stack;
+	struct saved internal[2];
+	struct filename *name;
+	struct nameidata *saved;
+	unsigned int root_seq;
+	int dfd;
+	vfsuid_t dir_vfsuid;
+	umode_t dir_mode;
+};
+
+enum {
+	LAST_NORM = 0,
+	LAST_ROOT = 1,
+	LAST_DOT = 2,
+	LAST_DOTDOT = 3,
+};
+
+enum {
+	WALK_TRAILING = 1,
+	WALK_MORE = 2,
+	WALK_NOFOLLOW = 4,
+};
+
+struct word_at_a_time {
+	const unsigned long one_bits;
+	const unsigned long high_bits;
+};
+
+struct name_snapshot {
+	struct qstr name;
+	unsigned char inline_name[32];
+};
+
+struct renamedata {
+	struct mnt_idmap *old_mnt_idmap;
+	struct inode *old_dir;
+	struct dentry *old_dentry;
+	struct mnt_idmap *new_mnt_idmap;
+	struct inode *new_dir;
+	struct dentry *new_dentry;
+	struct inode **delegated_inode;
+	unsigned int flags;
+};
+
+struct f_owner_ex {
+	int type;
+	__kernel_pid_t pid;
+};
+
+struct flock {
+	short l_type;
+	short l_whence;
+	__kernel_off_t l_start;
+	__kernel_off_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+struct compat_flock64 {
+	short l_type;
+	short l_whence;
+	compat_loff_t l_start;
+	compat_loff_t l_len;
+	compat_pid_t l_pid;
+} __attribute__((packed));
+
+struct compat_flock {
+	short l_type;
+	short l_whence;
+	compat_off_t l_start;
+	compat_off_t l_len;
+	compat_pid_t l_pid;
+};
+
+struct fiemap_extent;
+
+struct fiemap_extent_info {
+	unsigned int fi_flags;
+	unsigned int fi_extents_mapped;
+	unsigned int fi_extents_max;
+	struct fiemap_extent __attribute__((btf_type_tag("user"))) *fi_extents_start;
+};
+
+struct fiemap_extent {
+	__u64 fe_logical;
+	__u64 fe_physical;
+	__u64 fe_length;
+	__u64 fe_reserved64[2];
+	__u32 fe_flags;
+	__u32 fe_reserved[3];
+};
+
+struct space_resv_32 {
+	__s16 l_type;
+	__s16 l_whence;
+	__s64 l_start;
+	__s64 l_len;
+	__s32 l_sysid;
+	__u32 l_pid;
+	__s32 l_pad[4];
+} __attribute__((packed));
+
+struct file_clone_range {
+	__s64 src_fd;
+	__u64 src_offset;
+	__u64 src_length;
+	__u64 dest_offset;
+};
+
+struct fsxattr {
+	__u32 fsx_xflags;
+	__u32 fsx_extsize;
+	__u32 fsx_nextents;
+	__u32 fsx_projid;
+	__u32 fsx_cowextsize;
+	unsigned char fsx_pad[8];
+};
+
+struct fiemap {
+	__u64 fm_start;
+	__u64 fm_length;
+	__u32 fm_flags;
+	__u32 fm_mapped_extents;
+	__u32 fm_extent_count;
+	__u32 fm_reserved;
+	struct fiemap_extent fm_extents[0];
+};
+
+struct file_dedupe_range_info {
+	__s64 dest_fd;
+	__u64 dest_offset;
+	__u64 bytes_deduped;
+	__s32 status;
+	__u32 reserved;
+};
+
+struct file_dedupe_range {
+	__u64 src_offset;
+	__u64 src_length;
+	__u16 dest_count;
+	__u16 reserved1;
+	__u32 reserved2;
+	struct file_dedupe_range_info info[0];
+};
+
+struct space_resv {
+	__s16 l_type;
+	__s16 l_whence;
+	__s64 l_start;
+	__s64 l_len;
+	__s32 l_sysid;
+	__u32 l_pid;
+	__s32 l_pad[4];
+};
+
+struct old_linux_dirent {
+	unsigned long d_ino;
+	unsigned long d_offset;
+	unsigned short d_namlen;
+	char d_name[0];
+};
+
+struct readdir_callback {
+	struct dir_context ctx;
+	struct old_linux_dirent __attribute__((btf_type_tag("user"))) *dirent;
+	int result;
+};
+
+struct linux_dirent {
+	unsigned long d_ino;
+	unsigned long d_off;
+	unsigned short d_reclen;
+	char d_name[0];
+};
+
+struct getdents_callback {
+	struct dir_context ctx;
+	struct linux_dirent __attribute__((btf_type_tag("user"))) *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct linux_dirent64 {
+	u64 d_ino;
+	s64 d_off;
+	unsigned short d_reclen;
+	unsigned char d_type;
+	char d_name[0];
+};
+
+struct getdents_callback64 {
+	struct dir_context ctx;
+	struct linux_dirent64 __attribute__((btf_type_tag("user"))) *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+struct compat_old_linux_dirent {
+	compat_ulong_t d_ino;
+	compat_ulong_t d_offset;
+	unsigned short d_namlen;
+	char d_name[0];
+};
+
+struct compat_readdir_callback {
+	struct dir_context ctx;
+	struct compat_old_linux_dirent __attribute__((btf_type_tag("user"))) *dirent;
+	int result;
+};
+
+struct compat_linux_dirent {
+	compat_ulong_t d_ino;
+	compat_ulong_t d_off;
+	unsigned short d_reclen;
+	char d_name[0];
+};
+
+struct compat_getdents_callback {
+	struct dir_context ctx;
+	struct compat_linux_dirent __attribute__((btf_type_tag("user"))) *current_dir;
+	int prev_reclen;
+	int count;
+	int error;
+};
+
+enum poll_time_type {
+	PT_TIMEVAL = 0,
+	PT_OLD_TIMEVAL = 1,
+	PT_TIMESPEC = 2,
+	PT_OLD_TIMESPEC = 3,
+};
+
+struct poll_table_entry {
+	struct file *filp;
+	__poll_t key;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *wait_address;
+};
+
+struct poll_table_page;
+
+struct poll_wqueues {
+	poll_table pt;
+	struct poll_table_page *table;
+	struct task_struct *polling_task;
+	int triggered;
+	int error;
+	int inline_index;
+	struct poll_table_entry inline_entries[9];
+};
+
+struct poll_table_page {
+	struct poll_table_page *next;
+	struct poll_table_entry *entry;
+	struct poll_table_entry entries[0];
+};
+
+typedef struct {
+	unsigned long fds_bits[16];
+} __kernel_fd_set;
+
+typedef __kernel_fd_set fd_set;
+
+struct poll_list {
+	struct poll_list *next;
+	int len;
+	struct pollfd entries[0];
+};
+
+struct compat_sel_arg_struct {
+	compat_ulong_t n;
+	compat_uptr_t inp;
+	compat_uptr_t outp;
+	compat_uptr_t exp;
+	compat_uptr_t tvp;
+};
+
+typedef struct {
+	unsigned long *in;
+	unsigned long *out;
+	unsigned long *ex;
+	unsigned long *res_in;
+	unsigned long *res_out;
+	unsigned long *res_ex;
+} fd_set_bits;
+
+struct sigset_argpack {
+	sigset_t __attribute__((btf_type_tag("user"))) *p;
+	size_t size;
+};
+
+struct compat_sigset_argpack {
+	compat_uptr_t p;
+	compat_size_t size;
+};
+
+struct dentry_stat_t {
+	long nr_dentry;
+	long nr_unused;
+	long age_limit;
+	long want_pages;
+	long nr_negative;
+	long dummy;
+};
+
+enum dentry_d_lock_class {
+	DENTRY_D_LOCK_NORMAL = 0,
+	DENTRY_D_LOCK_NESTED = 1,
+};
+
+enum d_walk_ret {
+	D_WALK_CONTINUE = 0,
+	D_WALK_QUIT = 1,
+	D_WALK_NORETRY = 2,
+	D_WALK_SKIP = 3,
+};
+
+struct external_name {
+	union {
+		atomic_t count;
+		struct callback_head head;
+	} u;
+	unsigned char name[0];
+};
+
+struct check_mount {
+	struct vfsmount *mnt;
+	unsigned int mounted;
+};
+
+struct select_data {
+	struct dentry *start;
+	union {
+		long found;
+		struct dentry *victim;
+	};
+	struct list_head dispose;
+};
+
+struct inodes_stat_t {
+	long nr_inodes;
+	long nr_unused;
+	long dummy[5];
+};
+
+enum file_time_flags {
+	S_ATIME = 1,
+	S_MTIME = 2,
+	S_CTIME = 4,
+	S_VERSION = 8,
+};
+
+enum umount_tree_flags {
+	UMOUNT_SYNC = 1,
+	UMOUNT_PROPAGATE = 2,
+	UMOUNT_CONNECTED = 4,
+};
+
+enum mnt_tree_flags_t {
+	MNT_TREE_MOVE = 1,
+	MNT_TREE_BENEATH = 2,
+};
+
+struct mount_attr {
+	__u64 attr_set;
+	__u64 attr_clr;
+	__u64 propagation;
+	__u64 userns_fd;
+};
+
+struct mount_kattr {
+	unsigned int attr_set;
+	unsigned int attr_clr;
+	unsigned int propagation;
+	unsigned int lookup_flags;
+	bool recurse;
+	struct user_namespace *mnt_userns;
+	struct mnt_idmap *mnt_idmap;
+};
+
+struct mnt_idmap {
+	struct user_namespace *owner;
+	refcount_t count;
+};
+
+struct proc_mounts {
+	struct mnt_namespace *ns;
+	struct path root;
+	int (*show)(struct seq_file *, struct vfsmount *);
+	struct mount cursor;
+};
+
+struct xattr_name {
+	char name[256];
+};
+
+struct xattr_ctx {
+	union {
+		const void __attribute__((btf_type_tag("user"))) *cvalue;
+		void __attribute__((btf_type_tag("user"))) *value;
+	};
+	void *kvalue;
+	size_t size;
+	struct xattr_name *kname;
+	unsigned int flags;
+};
+
+struct utf8data;
+
+struct utf8data_table;
+
+struct unicode_map {
+	unsigned int version;
+	const struct utf8data *ntab[2];
+	const struct utf8data_table *tables;
+};
+
+struct utf8data {
+	unsigned int maxage;
+	unsigned int offset;
+};
+
+struct utf8data_table {
+	const unsigned int *utf8agetab;
+	int utf8agetab_size;
+	const struct utf8data *utf8nfdicfdata;
+	int utf8nfdicfdata_size;
+	const struct utf8data *utf8nfdidata;
+	int utf8nfdidata_size;
+	const unsigned char *utf8data;
+};
+
+struct simple_transaction_argresp {
+	ssize_t size;
+	char data[0];
+};
+
+struct simple_attr {
+	int (*get)(void *, u64 *);
+	int (*set)(void *, u64);
+	char get_buf[24];
+	char set_buf[24];
+	void *data;
+	const char *fmt;
+	struct mutex mutex;
+};
+
+typedef void (*btf_trace_writeback_dirty_folio)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_folio_wait_writeback)(void *, struct folio *, struct address_space *);
+
+typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int);
+
+typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_inode_foreign_history)(void *, struct inode *, struct writeback_control *, unsigned int);
+
+typedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *);
+
+typedef void (*btf_trace_track_foreign_dirty)(void *, struct folio *, struct bdi_writeback *);
+
+typedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *);
+
+struct wb_writeback_work;
+
+typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+struct wb_writeback_work {
+	long nr_pages;
+	struct super_block *sb;
+	enum writeback_sync_modes sync_mode;
+	unsigned int tagged_writepages: 1;
+	unsigned int for_kupdate: 1;
+	unsigned int range_cyclic: 1;
+	unsigned int for_background: 1;
+	unsigned int for_sync: 1;
+	unsigned int auto_free: 1;
+	enum wb_reason reason;
+	struct list_head list;
+	struct wb_completion *done;
+};
+
+typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);
+
+typedef void (*btf_trace_writeback_pages_written)(void *, long);
+
+typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);
+
+typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);
+
+typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);
+
+typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, unsigned long, int);
+
+typedef void (*btf_trace_global_dirty_state)(void *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, long, unsigned long);
+
+typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, unsigned long);
+
+typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, unsigned long);
+
+typedef void (*btf_trace_writeback_lazytime)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *);
+
+typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *);
+
+typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);
+
+struct trace_event_raw_writeback_folio_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	unsigned long index;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_dirty_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	unsigned long state;
+	unsigned long flags;
+	char __data[0];
+};
+
+struct trace_event_raw_inode_foreign_history {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	ino_t cgroup_ino;
+	unsigned int history;
+	char __data[0];
+};
+
+struct trace_event_raw_inode_switch_wbs {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	ino_t old_cgroup_ino;
+	ino_t new_cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_track_foreign_dirty {
+	struct trace_entry ent;
+	char name[32];
+	u64 bdi_id;
+	ino_t ino;
+	unsigned int memcg_id;
+	ino_t cgroup_ino;
+	ino_t page_cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_flush_foreign {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	unsigned int frn_bdi_id;
+	unsigned int frn_memcg_id;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_write_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	int sync_mode;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_work_class {
+	struct trace_entry ent;
+	char name[32];
+	long nr_pages;
+	dev_t sb_dev;
+	int sync_mode;
+	int for_kupdate;
+	int range_cyclic;
+	int for_background;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_pages_written {
+	struct trace_entry ent;
+	long pages;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_class {
+	struct trace_entry ent;
+	char name[32];
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_bdi_register {
+	struct trace_entry ent;
+	char name[32];
+	char __data[0];
+};
+
+struct trace_event_raw_wbc_class {
+	struct trace_entry ent;
+	char name[32];
+	long nr_to_write;
+	long pages_skipped;
+	int sync_mode;
+	int for_kupdate;
+	int for_background;
+	int for_reclaim;
+	int range_cyclic;
+	long range_start;
+	long range_end;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_queue_io {
+	struct trace_entry ent;
+	char name[32];
+	unsigned long older;
+	long age;
+	int moved;
+	int reason;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_global_dirty_state {
+	struct trace_entry ent;
+	unsigned long nr_dirty;
+	unsigned long nr_writeback;
+	unsigned long background_thresh;
+	unsigned long dirty_thresh;
+	unsigned long dirty_limit;
+	unsigned long nr_dirtied;
+	unsigned long nr_written;
+	char __data[0];
+};
+
+struct trace_event_raw_bdi_dirty_ratelimit {
+	struct trace_entry ent;
+	char bdi[32];
+	unsigned long write_bw;
+	unsigned long avg_write_bw;
+	unsigned long dirty_rate;
+	unsigned long dirty_ratelimit;
+	unsigned long task_ratelimit;
+	unsigned long balanced_dirty_ratelimit;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_balance_dirty_pages {
+	struct trace_entry ent;
+	char bdi[32];
+	unsigned long limit;
+	unsigned long setpoint;
+	unsigned long dirty;
+	unsigned long bdi_setpoint;
+	unsigned long bdi_dirty;
+	unsigned long dirty_ratelimit;
+	unsigned long task_ratelimit;
+	unsigned int dirtied;
+	unsigned int dirtied_pause;
+	unsigned long paused;
+	long pause;
+	unsigned long period;
+	long think;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_sb_inodes_requeue {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	unsigned long state;
+	unsigned long dirtied_when;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_single_inode_template {
+	struct trace_entry ent;
+	char name[32];
+	ino_t ino;
+	unsigned long state;
+	unsigned long dirtied_when;
+	unsigned long writeback_index;
+	long nr_to_write;
+	unsigned long wrote;
+	ino_t cgroup_ino;
+	char __data[0];
+};
+
+struct trace_event_raw_writeback_inode_template {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long state;
+	__u16 mode;
+	unsigned long dirtied_when;
+	char __data[0];
+};
+
+struct inode_switch_wbs_context {
+	struct rcu_work work;
+	struct bdi_writeback *new_wb;
+	struct inode *inodes[0];
+};
+
+struct trace_event_data_offsets_writeback_folio_template {};
+
+struct trace_event_data_offsets_writeback_dirty_inode_template {};
+
+struct trace_event_data_offsets_inode_foreign_history {};
+
+struct trace_event_data_offsets_inode_switch_wbs {};
+
+struct trace_event_data_offsets_track_foreign_dirty {};
+
+struct trace_event_data_offsets_flush_foreign {};
+
+struct trace_event_data_offsets_writeback_write_inode_template {};
+
+struct trace_event_data_offsets_writeback_work_class {};
+
+struct trace_event_data_offsets_writeback_pages_written {};
+
+struct trace_event_data_offsets_writeback_class {};
+
+struct trace_event_data_offsets_writeback_bdi_register {};
+
+struct trace_event_data_offsets_wbc_class {};
+
+struct trace_event_data_offsets_writeback_queue_io {};
+
+struct trace_event_data_offsets_global_dirty_state {};
+
+struct trace_event_data_offsets_bdi_dirty_ratelimit {};
+
+struct trace_event_data_offsets_balance_dirty_pages {};
+
+struct trace_event_data_offsets_writeback_sb_inodes_requeue {};
+
+struct trace_event_data_offsets_writeback_single_inode_template {};
+
+struct trace_event_data_offsets_writeback_inode_template {};
+
+struct splice_desc {
+	size_t total_len;
+	unsigned int len;
+	unsigned int flags;
+	union {
+		void __attribute__((btf_type_tag("user"))) *userptr;
+		struct file *file;
+		void *data;
+	} u;
+	void (*splice_eof)(struct splice_desc *);
+	loff_t pos;
+	loff_t *opos;
+	size_t num_spliced;
+	bool need_wakeup;
+};
+
+typedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *);
+
+typedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *);
+
+struct utimbuf {
+	__kernel_old_time_t actime;
+	__kernel_old_time_t modtime;
+};
+
+struct old_utimbuf32 {
+	old_time32_t actime;
+	old_time32_t modtime;
+};
+
+struct prepend_buffer {
+	char *buf;
+	int len;
+};
+
+struct statfs {
+	__kernel_long_t f_type;
+	__kernel_long_t f_bsize;
+	__kernel_long_t f_blocks;
+	__kernel_long_t f_bfree;
+	__kernel_long_t f_bavail;
+	__kernel_long_t f_files;
+	__kernel_long_t f_ffree;
+	__kernel_fsid_t f_fsid;
+	__kernel_long_t f_namelen;
+	__kernel_long_t f_frsize;
+	__kernel_long_t f_flags;
+	__kernel_long_t f_spare[4];
+};
+
+struct statfs64 {
+	__kernel_long_t f_type;
+	__kernel_long_t f_bsize;
+	__u64 f_blocks;
+	__u64 f_bfree;
+	__u64 f_bavail;
+	__u64 f_files;
+	__u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	__kernel_long_t f_namelen;
+	__kernel_long_t f_frsize;
+	__kernel_long_t f_flags;
+	__kernel_long_t f_spare[4];
+};
+
+typedef int __kernel_daddr_t;
+
+struct ustat {
+	__kernel_daddr_t f_tfree;
+	unsigned long f_tinode;
+	char f_fname[6];
+	char f_fpack[6];
+};
+
+typedef __kernel_fsid_t compat_fsid_t;
+
+struct compat_statfs {
+	int f_type;
+	int f_bsize;
+	int f_blocks;
+	int f_bfree;
+	int f_bavail;
+	int f_files;
+	int f_ffree;
+	compat_fsid_t f_fsid;
+	int f_namelen;
+	int f_frsize;
+	int f_flags;
+	int f_spare[4];
+};
+
+struct compat_statfs64 {
+	__u32 f_type;
+	__u32 f_bsize;
+	__u64 f_blocks;
+	__u64 f_bfree;
+	__u64 f_bavail;
+	__u64 f_files;
+	__u64 f_ffree;
+	__kernel_fsid_t f_fsid;
+	__u32 f_namelen;
+	__u32 f_frsize;
+	__u32 f_flags;
+	__u32 f_spare[4];
+} __attribute__((packed));
+
+typedef s32 compat_daddr_t;
+
+struct compat_ustat {
+	compat_daddr_t f_tfree;
+	compat_ino_t f_tinode;
+	char f_fname[6];
+	char f_fpack[6];
+};
+
+struct fs_pin {
+	wait_queue_head_t wait;
+	int done;
+	struct hlist_node s_list;
+	struct hlist_node m_list;
+	void (*kill)(struct fs_pin *);
+};
+
+struct ns_get_path_task_args {
+	const struct proc_ns_operations *ns_ops;
+	struct task_struct *task;
+};
+
+enum legacy_fs_param {
+	LEGACY_FS_UNSET_PARAMS = 0,
+	LEGACY_FS_MONOLITHIC_PARAMS = 1,
+	LEGACY_FS_INDIVIDUAL_PARAMS = 2,
+};
+
+struct legacy_fs_context {
+	char *legacy_data;
+	size_t data_size;
+	enum legacy_fs_param param_type;
+};
+
+enum fsconfig_command {
+	FSCONFIG_SET_FLAG = 0,
+	FSCONFIG_SET_STRING = 1,
+	FSCONFIG_SET_BINARY = 2,
+	FSCONFIG_SET_PATH = 3,
+	FSCONFIG_SET_PATH_EMPTY = 4,
+	FSCONFIG_SET_FD = 5,
+	FSCONFIG_CMD_CREATE = 6,
+	FSCONFIG_CMD_RECONFIGURE = 7,
+	FSCONFIG_CMD_CREATE_EXCL = 8,
+};
+
+struct iomap_ops {
+	int (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap *, struct iomap *);
+	int (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct bh_lru {
+	struct buffer_head *bhs[16];
+};
+
+enum rq_end_io_ret {
+	RQ_END_IO_NONE = 0,
+	RQ_END_IO_FREE = 1,
+};
+
+typedef enum rq_end_io_ret rq_end_io_fn(struct request *, blk_status_t);
+
+typedef __u32 req_flags_t;
+
+enum mq_rq_state {
+	MQ_RQ_IDLE = 0,
+	MQ_RQ_IN_FLIGHT = 1,
+	MQ_RQ_COMPLETE = 2,
+};
+
+struct blk_crypto_keyslot;
+
+struct request {
+	struct request_queue *q;
+	struct blk_mq_ctx *mq_ctx;
+	struct blk_mq_hw_ctx *mq_hctx;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	int tag;
+	int internal_tag;
+	unsigned int timeout;
+	unsigned int __data_len;
+	sector_t __sector;
+	struct bio *bio;
+	struct bio *biotail;
+	union {
+		struct list_head queuelist;
+		struct request *rq_next;
+	};
+	struct block_device *part;
+	u64 alloc_time_ns;
+	u64 start_time_ns;
+	u64 io_start_time_ns;
+	unsigned short wbt_flags;
+	unsigned short stats_sectors;
+	unsigned short nr_phys_segments;
+	struct bio_crypt_ctx *crypt_ctx;
+	struct blk_crypto_keyslot *crypt_keyslot;
+	enum rw_hint write_hint;
+	unsigned short ioprio;
+	enum mq_rq_state state;
+	atomic_t ref;
+	unsigned long deadline;
+	union {
+		struct hlist_node hash;
+		struct llist_node ipi_list;
+	};
+	union {
+		struct rb_node rb_node;
+		struct bio_vec special_vec;
+	};
+	struct {
+		struct io_cq *icq;
+		void *priv[2];
+	} elv;
+	struct {
+		unsigned int seq;
+		rq_end_io_fn *saved_end_io;
+	} flush;
+	u64 fifo_time;
+	rq_end_io_fn *end_io;
+	void *end_io_data;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+};
+
+struct sbitmap_word;
+
+struct sbitmap {
+	unsigned int depth;
+	unsigned int shift;
+	unsigned int map_nr;
+	bool round_robin;
+	struct sbitmap_word *map;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *alloc_hint;
+};
+
+struct blk_mq_hw_ctx {
+	struct {
+		spinlock_t lock;
+		struct list_head dispatch;
+		unsigned long state;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct delayed_work run_work;
+	cpumask_var_t cpumask;
+	int next_cpu;
+	int next_cpu_batch;
+	unsigned long flags;
+	void *sched_data;
+	struct request_queue *queue;
+	struct blk_flush_queue *fq;
+	void *driver_data;
+	struct sbitmap ctx_map;
+	struct blk_mq_ctx *dispatch_from;
+	unsigned int dispatch_busy;
+	unsigned short type;
+	unsigned short nr_ctx;
+	struct blk_mq_ctx **ctxs;
+	spinlock_t dispatch_wait_lock;
+	wait_queue_entry_t dispatch_wait;
+	atomic_t wait_index;
+	struct blk_mq_tags *tags;
+	struct blk_mq_tags *sched_tags;
+	unsigned long run;
+	unsigned int numa_node;
+	unsigned int queue_num;
+	atomic_t nr_active;
+	struct hlist_node cpuhp_online;
+	struct hlist_node cpuhp_dead;
+	struct kobject kobj;
+	struct dentry *debugfs_dir;
+	struct dentry *sched_debugfs_dir;
+	struct list_head hctx_list;
+	u64 android_kabi_reserved1;
+};
+
+struct sbitmap_word {
+	unsigned long word;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long cleared;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sbq_wait_state;
+
+struct sbitmap_queue {
+	struct sbitmap sb;
+	unsigned int wake_batch;
+	atomic_t wake_index;
+	struct sbq_wait_state *ws;
+	atomic_t ws_active;
+	unsigned int min_shallow_depth;
+	atomic_t completion_cnt;
+	atomic_t wakeup_cnt;
+};
+
+struct blk_mq_tags {
+	unsigned int nr_tags;
+	unsigned int nr_reserved_tags;
+	unsigned int active_queues;
+	struct sbitmap_queue bitmap_tags;
+	struct sbitmap_queue breserved_tags;
+	struct request **rqs;
+	struct request **static_rqs;
+	struct list_head page_list;
+	spinlock_t lock;
+	u64 android_oem_data1;
+};
+
+struct sbq_wait_state {
+	wait_queue_head_t wait;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct blk_mq_queue_data {
+	struct request *rq;
+	bool last;
+};
+
+struct blk_mq_queue_map {
+	unsigned int *mq_map;
+	unsigned int nr_queues;
+	unsigned int queue_offset;
+};
+
+struct blk_mq_tag_set {
+	const struct blk_mq_ops *ops;
+	struct blk_mq_queue_map map[3];
+	unsigned int nr_maps;
+	unsigned int nr_hw_queues;
+	unsigned int queue_depth;
+	unsigned int reserved_tags;
+	unsigned int cmd_size;
+	int numa_node;
+	unsigned int timeout;
+	unsigned int flags;
+	void *driver_data;
+	struct blk_mq_tags **tags;
+	struct blk_mq_tags *shared_tags;
+	struct mutex tag_list_lock;
+	struct list_head tag_list;
+	struct srcu_struct *srcu;
+	u64 android_kabi_reserved1;
+};
+
+struct bh_accounting {
+	int nr;
+	int ratelimit;
+};
+
+struct postprocess_bh_ctx {
+	struct work_struct work;
+	struct buffer_head *bh;
+};
+
+struct dax_device;
+
+struct iomap_folio_ops;
+
+struct iomap {
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	void *inline_data;
+	void *private;
+	const struct iomap_folio_ops *folio_ops;
+	u64 validity_cookie;
+	u64 android_kabi_reserved1;
+};
+
+struct iomap_iter;
+
+struct iomap_folio_ops {
+	struct folio * (*get_folio)(struct iomap_iter *, loff_t, unsigned int);
+	void (*put_folio)(struct inode *, loff_t, unsigned int, struct folio *);
+	bool (*iomap_valid)(struct inode *, const struct iomap *);
+};
+
+struct iomap_iter {
+	struct inode *inode;
+	loff_t pos;
+	u64 len;
+	s64 processed;
+	unsigned int flags;
+	struct iomap iomap;
+	struct iomap srcmap;
+	void *private;
+};
+
+typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);
+
+struct folio_iter {
+	struct folio *folio;
+	size_t offset;
+	size_t length;
+	struct folio *_next;
+	size_t _seg_count;
+	int _i;
+};
+
+struct mpage_readpage_args {
+	struct bio *bio;
+	struct folio *folio;
+	unsigned int nr_pages;
+	bool is_readahead;
+	sector_t last_block_in_bio;
+	struct buffer_head map_bh;
+	unsigned long first_logical_block;
+	get_block_t *get_block;
+};
+
+struct mpage_data {
+	struct bio *bio;
+	sector_t last_block_in_bio;
+	get_block_t *get_block;
+};
+
+struct proc_fs_opts {
+	int flag;
+	const char *str;
+};
+
+union proc_op {
+	int (*proc_get_link)(struct dentry *, struct path *);
+	int (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *);
+	const char *lsm;
+};
+
+struct proc_inode {
+	struct pid *pid;
+	unsigned int fd;
+	union proc_op op;
+	struct proc_dir_entry *pde;
+	struct ctl_table_header *sysctl;
+	struct ctl_table *sysctl_entry;
+	struct hlist_node sibling_inodes;
+	const struct proc_ns_operations *ns_ops;
+	struct inode vfs_inode;
+};
+
+typedef int (*proc_write_t)(struct file *, char *, size_t);
+
+typedef u32 nlink_t;
+
+struct proc_dir_entry {
+	atomic_t in_use;
+	refcount_t refcnt;
+	struct list_head pde_openers;
+	spinlock_t pde_unload_lock;
+	struct completion *pde_unload_completion;
+	const struct inode_operations *proc_iops;
+	union {
+		const struct proc_ops *proc_ops;
+		const struct file_operations *proc_dir_ops;
+	};
+	const struct dentry_operations *proc_dops;
+	union {
+		const struct seq_operations *seq_ops;
+		int (*single_show)(struct seq_file *, void *);
+	};
+	proc_write_t write;
+	void *data;
+	unsigned int state_size;
+	unsigned int low_ino;
+	nlink_t nlink;
+	kuid_t uid;
+	kgid_t gid;
+	loff_t size;
+	struct proc_dir_entry *parent;
+	struct rb_root subdir;
+	struct rb_node subdir_node;
+	char *name;
+	umode_t mode;
+	u8 flags;
+	u8 namelen;
+	char inline_name[0];
+};
+
+enum {
+	DIO_LOCKING = 1,
+	DIO_SKIP_HOLES = 2,
+};
+
+typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);
+
+struct dio {
+	int flags;
+	blk_opf_t opf;
+	struct gendisk *bio_disk;
+	struct inode *inode;
+	loff_t i_size;
+	dio_iodone_t *end_io;
+	bool is_pinned;
+	void *private;
+	spinlock_t bio_lock;
+	int page_errors;
+	int is_async;
+	bool defer_completion;
+	bool should_dirty;
+	int io_error;
+	unsigned long refcount;
+	struct bio *bio_list;
+	struct task_struct *waiter;
+	struct kiocb *iocb;
+	ssize_t result;
+	union {
+		struct page *pages[64];
+		struct work_struct complete_work;
+	};
+	long: 64;
+};
+
+struct dio_submit {
+	struct bio *bio;
+	unsigned int blkbits;
+	unsigned int blkfactor;
+	unsigned int start_zero_done;
+	int pages_in_io;
+	sector_t block_in_file;
+	unsigned int blocks_available;
+	int reap_counter;
+	sector_t final_block_in_request;
+	int boundary;
+	get_block_t *get_block;
+	loff_t logical_offset_in_bio;
+	sector_t final_block_in_bio;
+	sector_t next_block_for_io;
+	struct page *cur_page;
+	unsigned int cur_page_offset;
+	unsigned int cur_page_len;
+	sector_t cur_page_block;
+	loff_t cur_page_fs_offset;
+	struct iov_iter *iter;
+	unsigned int head;
+	unsigned int tail;
+	size_t from;
+	size_t to;
+};
+
+typedef unsigned int iov_iter_extraction_t;
+
+enum fsnotify_iter_type {
+	FSNOTIFY_ITER_TYPE_INODE = 0,
+	FSNOTIFY_ITER_TYPE_VFSMOUNT = 1,
+	FSNOTIFY_ITER_TYPE_SB = 2,
+	FSNOTIFY_ITER_TYPE_PARENT = 3,
+	FSNOTIFY_ITER_TYPE_INODE2 = 4,
+	FSNOTIFY_ITER_TYPE_COUNT = 5,
+};
+
+struct fs_error_report {
+	int error;
+	struct inode *inode;
+	struct super_block *sb;
+};
+
+struct inotify_inode_mark {
+	struct fsnotify_mark fsn_mark;
+	int wd;
+};
+
+struct file_handle {
+	__u32 handle_bytes;
+	int handle_type;
+	unsigned char f_handle[0];
+};
+
+struct inotify_event_info {
+	struct fsnotify_event fse;
+	u32 mask;
+	int wd;
+	u32 sync_cookie;
+	int name_len;
+	char name[0];
+};
+
+struct inotify_event {
+	__s32 wd;
+	__u32 mask;
+	__u32 cookie;
+	__u32 len;
+	char name[0];
+};
+
+struct epitem;
+
+struct eventpoll {
+	struct mutex mtx;
+	wait_queue_head_t wq;
+	wait_queue_head_t poll_wait;
+	struct list_head rdllist;
+	rwlock_t lock;
+	struct rb_root_cached rbr;
+	struct epitem *ovflist;
+	struct wakeup_source *ws;
+	struct user_struct *user;
+	struct file *file;
+	u64 gen;
+	struct hlist_head refs;
+	refcount_t refcount;
+	unsigned int napi_id;
+};
+
+struct epoll_filefd {
+	struct file *file;
+	int fd;
+} __attribute__((packed));
+
+struct epoll_event {
+	__poll_t events;
+	__u64 data;
+} __attribute__((packed));
+
+struct eppoll_entry;
+
+struct epitem {
+	union {
+		struct rb_node rbn;
+		struct callback_head rcu;
+	};
+	struct list_head rdllink;
+	struct epitem *next;
+	struct epoll_filefd ffd;
+	bool dying;
+	struct eppoll_entry *pwqlist;
+	struct eventpoll *ep;
+	struct hlist_node fllink;
+	struct wakeup_source __attribute__((btf_type_tag("rcu"))) *ws;
+	struct epoll_event event;
+};
+
+struct eppoll_entry {
+	struct eppoll_entry *next;
+	struct epitem *base;
+	wait_queue_entry_t wait;
+	wait_queue_head_t *whead;
+};
+
+struct epitems_head {
+	struct hlist_head epitems;
+	struct epitems_head *next;
+};
+
+struct ep_pqueue {
+	poll_table pt;
+	struct epitem *epi;
+};
+
+struct signalfd_siginfo {
+	__u32 ssi_signo;
+	__s32 ssi_errno;
+	__s32 ssi_code;
+	__u32 ssi_pid;
+	__u32 ssi_uid;
+	__s32 ssi_fd;
+	__u32 ssi_tid;
+	__u32 ssi_band;
+	__u32 ssi_overrun;
+	__u32 ssi_trapno;
+	__s32 ssi_status;
+	__s32 ssi_int;
+	__u64 ssi_ptr;
+	__u64 ssi_utime;
+	__u64 ssi_stime;
+	__u64 ssi_addr;
+	__u16 ssi_addr_lsb;
+	__u16 __pad2;
+	__s32 ssi_syscall;
+	__u64 ssi_call_addr;
+	__u32 ssi_arch;
+	__u8 __pad[28];
+};
+
+struct signalfd_ctx {
+	sigset_t sigmask;
+};
+
+struct timerfd_ctx {
+	union {
+		struct hrtimer tmr;
+		struct alarm alarm;
+	} t;
+	ktime_t tintv;
+	ktime_t moffs;
+	wait_queue_head_t wqh;
+	u64 ticks;
+	int clockid;
+	unsigned short expired;
+	unsigned short settime_flags;
+	struct callback_head rcu;
+	struct list_head clist;
+	spinlock_t cancel_lock;
+	bool might_cancel;
+};
+
+struct eventfd_ctx {
+	struct kref kref;
+	wait_queue_head_t wqh;
+	__u64 count;
+	unsigned int flags;
+	int id;
+};
+
+struct userfaultfd_fork_ctx {
+	struct userfaultfd_ctx *orig;
+	struct userfaultfd_ctx *new;
+	struct list_head list;
+};
+
+struct userfaultfd_unmap_ctx {
+	struct userfaultfd_ctx *ctx;
+	unsigned long start;
+	unsigned long end;
+	struct list_head list;
+};
+
+struct uffd_msg {
+	__u8 event;
+	__u8 reserved1;
+	__u16 reserved2;
+	__u32 reserved3;
+	union {
+		struct {
+			__u64 flags;
+			__u64 address;
+			union {
+				__u32 ptid;
+			} feat;
+		} pagefault;
+		struct {
+			__u32 ufd;
+		} fork;
+		struct {
+			__u64 from;
+			__u64 to;
+			__u64 len;
+		} remap;
+		struct {
+			__u64 start;
+			__u64 end;
+		} remove;
+		struct {
+			__u64 reserved1;
+			__u64 reserved2;
+			__u64 reserved3;
+		} reserved;
+	} arg;
+};
+
+struct userfaultfd_wait_queue {
+	struct uffd_msg msg;
+	wait_queue_entry_t wq;
+	struct userfaultfd_ctx *ctx;
+	bool waken;
+};
+
+struct uffdio_range {
+	__u64 start;
+	__u64 len;
+};
+
+struct uffdio_register {
+	struct uffdio_range range;
+	__u64 mode;
+	__u64 ioctls;
+};
+
+struct uffdio_copy {
+	__u64 dst;
+	__u64 src;
+	__u64 len;
+	__u64 mode;
+	__s64 copy;
+};
+
+struct uffdio_zeropage {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 zeropage;
+};
+
+struct uffdio_move {
+	__u64 dst;
+	__u64 src;
+	__u64 len;
+	__u64 mode;
+	__s64 move;
+};
+
+struct uffdio_writeprotect {
+	struct uffdio_range range;
+	__u64 mode;
+};
+
+struct uffdio_continue {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 mapped;
+};
+
+struct uffdio_poison {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 updated;
+};
+
+struct uffdio_api {
+	__u64 api;
+	__u64 features;
+	__u64 ioctls;
+};
+
+struct userfaultfd_wake_range {
+	unsigned long start;
+	unsigned long len;
+};
+
+struct kioctx_cpu;
+
+struct ctx_rq_wait;
+
+struct kioctx {
+	struct percpu_ref users;
+	atomic_t dead;
+	struct percpu_ref reqs;
+	unsigned long user_id;
+	struct kioctx_cpu *cpu;
+	unsigned int req_batch;
+	unsigned int max_reqs;
+	unsigned int nr_events;
+	unsigned long mmap_base;
+	unsigned long mmap_size;
+	struct page **ring_pages;
+	long nr_pages;
+	struct rcu_work free_rwork;
+	struct ctx_rq_wait *rq_wait;
+	long: 64;
+	struct {
+		atomic_t reqs_available;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		spinlock_t ctx_lock;
+		struct list_head active_reqs;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		struct mutex ring_lock;
+		wait_queue_head_t wait;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct {
+		unsigned int tail;
+		unsigned int completed_events;
+		spinlock_t completion_lock;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+		long: 64;
+	};
+	struct page *internal_pages[8];
+	struct file *aio_ring_file;
+	unsigned int id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kioctx_cpu {
+	unsigned int reqs_available;
+};
+
+struct ctx_rq_wait {
+	struct completion comp;
+	atomic_t count;
+};
+
+enum {
+	IOCB_CMD_PREAD = 0,
+	IOCB_CMD_PWRITE = 1,
+	IOCB_CMD_FSYNC = 2,
+	IOCB_CMD_FDSYNC = 3,
+	IOCB_CMD_POLL = 5,
+	IOCB_CMD_NOOP = 6,
+	IOCB_CMD_PREADV = 7,
+	IOCB_CMD_PWRITEV = 8,
+};
+
+struct fsync_iocb {
+	struct file *file;
+	struct work_struct work;
+	bool datasync;
+	struct cred *creds;
+};
+
+struct poll_iocb {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	bool cancelled;
+	bool work_scheduled;
+	bool work_need_resched;
+	struct wait_queue_entry wait;
+	struct work_struct work;
+};
+
+typedef int kiocb_cancel_fn(struct kiocb *);
+
+struct io_event {
+	__u64 data;
+	__u64 obj;
+	__s64 res;
+	__s64 res2;
+};
+
+struct aio_kiocb {
+	union {
+		struct file *ki_filp;
+		struct kiocb rw;
+		struct fsync_iocb fsync;
+		struct poll_iocb poll;
+	};
+	struct kioctx *ki_ctx;
+	kiocb_cancel_fn *ki_cancel;
+	struct io_event ki_res;
+	struct list_head ki_list;
+	refcount_t ki_refcnt;
+	struct eventfd_ctx *ki_eventfd;
+};
+
+typedef __kernel_ulong_t aio_context_t;
+
+struct iocb {
+	__u64 aio_data;
+	__u32 aio_key;
+	__kernel_rwf_t aio_rw_flags;
+	__u16 aio_lio_opcode;
+	__s16 aio_reqprio;
+	__u32 aio_fildes;
+	__u64 aio_buf;
+	__u64 aio_nbytes;
+	__s64 aio_offset;
+	__u64 aio_reserved2;
+	__u32 aio_flags;
+	__u32 aio_resfd;
+};
+
+struct aio_poll_table {
+	struct poll_table_struct pt;
+	struct aio_kiocb *iocb;
+	bool queued;
+	int error;
+};
+
+typedef u32 compat_aio_context_t;
+
+struct __aio_sigset {
+	const sigset_t __attribute__((btf_type_tag("user"))) *sigmask;
+	size_t sigsetsize;
+};
+
+struct __compat_aio_sigset {
+	compat_uptr_t sigmask;
+	compat_size_t sigsetsize;
+};
+
+struct aio_ring {
+	unsigned int id;
+	unsigned int nr;
+	unsigned int head;
+	unsigned int tail;
+	unsigned int magic;
+	unsigned int compat_features;
+	unsigned int incompat_features;
+	unsigned int header_length;
+	struct io_event io_events[0];
+};
+
+struct blk_crypto_key;
+
+struct bio_crypt_ctx {
+	const struct blk_crypto_key *bc_key;
+	u64 bc_dun[4];
+};
+
+enum blk_crypto_mode_num {
+	BLK_ENCRYPTION_MODE_INVALID = 0,
+	BLK_ENCRYPTION_MODE_AES_256_XTS = 1,
+	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV = 2,
+	BLK_ENCRYPTION_MODE_ADIANTUM = 3,
+	BLK_ENCRYPTION_MODE_SM4_XTS = 4,
+	BLK_ENCRYPTION_MODE_MAX = 5,
+};
+
+enum blk_crypto_key_type {
+	BLK_CRYPTO_KEY_TYPE_STANDARD = 1,
+	BLK_CRYPTO_KEY_TYPE_HW_WRAPPED = 2,
+};
+
+struct blk_crypto_config {
+	enum blk_crypto_mode_num crypto_mode;
+	unsigned int data_unit_size;
+	unsigned int dun_bytes;
+	enum blk_crypto_key_type key_type;
+};
+
+struct blk_crypto_key {
+	struct blk_crypto_config crypto_cfg;
+	unsigned int data_unit_size_bits;
+	unsigned int size;
+	u8 raw[128];
+};
+
+struct fscrypt_prepared_key {
+	struct crypto_skcipher *tfm;
+	struct blk_crypto_key *blk_key;
+};
+
+struct fscrypt_mode;
+
+struct fscrypt_master_key;
+
+struct fscrypt_direct_key;
+
+struct fscrypt_inode_info {
+	struct fscrypt_prepared_key ci_enc_key;
+	bool ci_owns_key;
+	bool ci_inlinecrypt;
+	u8 ci_data_unit_bits;
+	u8 ci_data_units_per_block_bits;
+	struct fscrypt_mode *ci_mode;
+	struct inode *ci_inode;
+	struct fscrypt_master_key *ci_master_key;
+	struct list_head ci_master_key_link;
+	struct fscrypt_direct_key *ci_direct_key;
+	siphash_key_t ci_dirhash_key;
+	bool ci_dirhash_key_initialized;
+	union fscrypt_policy ci_policy;
+	u8 ci_nonce[16];
+	u32 ci_hashed_ino;
+};
+
+struct fscrypt_mode {
+	const char *friendly_name;
+	const char *cipher_str;
+	int keysize;
+	int security_strength;
+	int ivsize;
+	int logged_cryptoapi_impl;
+	int logged_blk_crypto_native;
+	int logged_blk_crypto_fallback;
+	enum blk_crypto_mode_num blk_crypto_mode;
+};
+
+struct fscrypt_hkdf {
+	struct crypto_shash *hmac_tfm;
+};
+
+struct fscrypt_master_key_secret {
+	struct fscrypt_hkdf hkdf;
+	bool is_hw_wrapped;
+	u32 size;
+	u8 raw[128];
+};
+
+struct fscrypt_key_specifier {
+	__u32 type;
+	__u32 __reserved;
+	union {
+		__u8 __reserved[32];
+		__u8 descriptor[8];
+		__u8 identifier[16];
+	} u;
+};
+
+struct fscrypt_master_key {
+	struct hlist_node mk_node;
+	struct rw_semaphore mk_sem;
+	refcount_t mk_active_refs;
+	refcount_t mk_struct_refs;
+	struct callback_head mk_rcu_head;
+	struct fscrypt_master_key_secret mk_secret;
+	struct fscrypt_key_specifier mk_spec;
+	struct key *mk_users;
+	struct list_head mk_decrypted_inodes;
+	spinlock_t mk_decrypted_inodes_lock;
+	struct fscrypt_prepared_key mk_direct_keys[11];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_64_keys[11];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_32_keys[11];
+	siphash_key_t mk_ino_hash_key;
+	bool mk_ino_hash_key_initialized;
+	bool mk_present;
+};
+
+struct crypto_wait {
+	struct completion completion;
+	int err;
+};
+
+union fscrypt_iv {
+	struct {
+		__le64 index;
+		u8 nonce[16];
+	};
+	u8 raw[32];
+	__le64 dun[4];
+};
+
+typedef enum {
+	FS_DECRYPT = 0,
+	FS_ENCRYPT = 1,
+} fscrypt_direction_t;
+
+struct fscrypt_str {
+	unsigned char *name;
+	u32 len;
+};
+
+struct fscrypt_nokey_name {
+	u32 dirhash[2];
+	u8 bytes[149];
+	u8 sha256[32];
+};
+
+struct fscrypt_name {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	u32 hash;
+	u32 minor_hash;
+	struct fscrypt_str crypto_buf;
+	bool is_nokey_name;
+};
+
+struct fscrypt_symlink_data {
+	__le16 len;
+	char encrypted_path[0];
+};
+
+struct fscrypt_keyring {
+	spinlock_t lock;
+	struct hlist_head key_hashtable[128];
+};
+
+enum key_state {
+	KEY_IS_UNINSTANTIATED = 0,
+	KEY_IS_POSITIVE = 1,
+};
+
+struct fscrypt_add_key_arg {
+	struct fscrypt_key_specifier key_spec;
+	__u32 raw_size;
+	__u32 key_id;
+	__u32 __reserved[7];
+	__u32 __flags;
+	__u8 raw[0];
+};
+
+struct fscrypt_provisioning_key_payload {
+	__u32 type;
+	__u32 __reserved;
+	__u8 raw[0];
+};
+
+struct fscrypt_remove_key_arg {
+	struct fscrypt_key_specifier key_spec;
+	__u32 removal_status_flags;
+	__u32 __reserved[5];
+};
+
+struct fscrypt_get_key_status_arg {
+	struct fscrypt_key_specifier key_spec;
+	__u32 __reserved[6];
+	__u32 status;
+	__u32 status_flags;
+	__u32 user_count;
+	__u32 __out_reserved[13];
+};
+
+struct fscrypt_context_v1 {
+	u8 version;
+	u8 contents_encryption_mode;
+	u8 filenames_encryption_mode;
+	u8 flags;
+	u8 master_key_descriptor[8];
+	u8 nonce[16];
+};
+
+struct fscrypt_context_v2 {
+	u8 version;
+	u8 contents_encryption_mode;
+	u8 filenames_encryption_mode;
+	u8 flags;
+	u8 log2_data_unit_size;
+	u8 __reserved[3];
+	u8 master_key_identifier[16];
+	u8 nonce[16];
+};
+
+union fscrypt_context {
+	u8 version;
+	struct fscrypt_context_v1 v1;
+	struct fscrypt_context_v2 v2;
+};
+
+struct fscrypt_direct_key {
+	struct super_block *dk_sb;
+	struct hlist_node dk_node;
+	refcount_t dk_refcount;
+	const struct fscrypt_mode *dk_mode;
+	struct fscrypt_prepared_key dk_key;
+	u8 dk_descriptor[8];
+	u8 dk_raw[64];
+};
+
+struct fscrypt_key {
+	__u32 mode;
+	__u8 raw[64];
+	__u32 size;
+};
+
+struct user_key_payload {
+	struct callback_head rcu;
+	unsigned short datalen;
+	long: 0;
+	char data[0];
+};
+
+struct fscrypt_get_policy_ex_arg {
+	__u64 policy_size;
+	union {
+		__u8 version;
+		struct fscrypt_policy_v1 v1;
+		struct fscrypt_policy_v2 v2;
+	} policy;
+};
+
+struct fscrypt_dummy_policy {
+	const union fscrypt_policy *policy;
+};
+
+enum hash_algo {
+	HASH_ALGO_MD4 = 0,
+	HASH_ALGO_MD5 = 1,
+	HASH_ALGO_SHA1 = 2,
+	HASH_ALGO_RIPE_MD_160 = 3,
+	HASH_ALGO_SHA256 = 4,
+	HASH_ALGO_SHA384 = 5,
+	HASH_ALGO_SHA512 = 6,
+	HASH_ALGO_SHA224 = 7,
+	HASH_ALGO_RIPE_MD_128 = 8,
+	HASH_ALGO_RIPE_MD_256 = 9,
+	HASH_ALGO_RIPE_MD_320 = 10,
+	HASH_ALGO_WP_256 = 11,
+	HASH_ALGO_WP_384 = 12,
+	HASH_ALGO_WP_512 = 13,
+	HASH_ALGO_TGR_128 = 14,
+	HASH_ALGO_TGR_160 = 15,
+	HASH_ALGO_TGR_192 = 16,
+	HASH_ALGO_SM3_256 = 17,
+	HASH_ALGO_STREEBOG_256 = 18,
+	HASH_ALGO_STREEBOG_512 = 19,
+	HASH_ALGO__LAST = 20,
+};
+
+struct fsverity_hash_alg;
+
+struct merkle_tree_params {
+	const struct fsverity_hash_alg *hash_alg;
+	const u8 *hashstate;
+	unsigned int digest_size;
+	unsigned int block_size;
+	unsigned int hashes_per_block;
+	unsigned int blocks_per_page;
+	u8 log_digestsize;
+	u8 log_blocksize;
+	u8 log_arity;
+	u8 log_blocks_per_page;
+	unsigned int num_levels;
+	u64 tree_size;
+	unsigned long tree_pages;
+	unsigned long level_start[8];
+};
+
+struct fsverity_info {
+	struct merkle_tree_params tree_params;
+	u8 root_hash[64];
+	u8 file_digest[64];
+	const struct inode *inode;
+	unsigned long *hash_block_verified;
+};
+
+struct fsverity_hash_alg {
+	struct crypto_shash *tfm;
+	const char *name;
+	unsigned int digest_size;
+	unsigned int block_size;
+	enum hash_algo algo_id;
+	int mb_max_msgs;
+};
+
+struct block_buffer {
+	u32 filled;
+	bool is_root_hash;
+	u8 *data;
+};
+
+struct fsverity_descriptor {
+	__u8 version;
+	__u8 hash_algorithm;
+	__u8 log_blocksize;
+	__u8 salt_size;
+	__le32 sig_size;
+	__le64 data_size;
+	__u8 root_hash[64];
+	__u8 salt[32];
+	__u8 __reserved[144];
+	__u8 signature[0];
+};
+
+struct fsverity_enable_arg {
+	__u32 version;
+	__u32 hash_algorithm;
+	__u32 block_size;
+	__u32 salt_size;
+	__u64 salt_ptr;
+	__u32 sig_size;
+	__u32 __reserved1;
+	__u64 sig_ptr;
+	__u64 __reserved2[11];
+};
+
+struct fsverity_digest {
+	__u16 digest_algorithm;
+	__u16 digest_size;
+	__u8 digest[0];
+};
+
+struct fsverity_read_metadata_arg {
+	__u64 metadata_type;
+	__u64 offset;
+	__u64 length;
+	__u64 buf_ptr;
+	__u64 __reserved;
+};
+
+struct fsverity_pending_block {
+	const void *data;
+	u64 pos;
+	u8 real_hash[64];
+};
+
+struct fsverity_verification_context {
+	struct inode *inode;
+	struct fsverity_info *vi;
+	unsigned long max_ra_pages;
+	int num_pending;
+	struct fsverity_pending_block pending_blocks[2];
+};
+
+typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *);
+
+typedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int);
+
+typedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *);
+
+typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);
+
+struct file_lock_list_struct {
+	spinlock_t lock;
+	struct hlist_head hlist;
+};
+
+struct trace_event_raw_locks_get_lock_context {
+	struct trace_entry ent;
+	unsigned long i_ino;
+	dev_t s_dev;
+	unsigned char type;
+	struct file_lock_context *ctx;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lock {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	unsigned long i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_pid;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	loff_t fl_start;
+	loff_t fl_end;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_filelock_lease {
+	struct trace_entry ent;
+	struct file_lock *fl;
+	unsigned long i_ino;
+	dev_t s_dev;
+	struct file_lock *fl_blocker;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	unsigned long fl_break_time;
+	unsigned long fl_downgrade_time;
+	char __data[0];
+};
+
+struct trace_event_raw_generic_add_lease {
+	struct trace_entry ent;
+	unsigned long i_ino;
+	int wcount;
+	int rcount;
+	int icount;
+	dev_t s_dev;
+	fl_owner_t fl_owner;
+	unsigned int fl_flags;
+	unsigned char fl_type;
+	char __data[0];
+};
+
+struct trace_event_raw_leases_conflict {
+	struct trace_entry ent;
+	void *lease;
+	void *breaker;
+	unsigned int l_fl_flags;
+	unsigned int b_fl_flags;
+	unsigned char l_fl_type;
+	unsigned char b_fl_type;
+	bool conflict;
+	char __data[0];
+};
+
+struct flock64 {
+	short l_type;
+	short l_whence;
+	__kernel_loff_t l_start;
+	__kernel_loff_t l_len;
+	__kernel_pid_t l_pid;
+};
+
+struct trace_event_data_offsets_locks_get_lock_context {};
+
+struct trace_event_data_offsets_filelock_lock {};
+
+struct trace_event_data_offsets_filelock_lease {};
+
+struct trace_event_data_offsets_generic_add_lease {};
+
+struct trace_event_data_offsets_leases_conflict {};
+
+struct locks_iterator {
+	int li_cpu;
+	loff_t li_pos;
+};
+
+enum {
+	Enabled = 0,
+	Magic = 1,
+};
+
+typedef struct {
+	struct list_head list;
+	unsigned long flags;
+	int offset;
+	int size;
+	char *magic;
+	char *mask;
+	const char *interpreter;
+	char *name;
+	struct dentry *dentry;
+	struct file *interp_file;
+} Node;
+
+struct elf64_phdr {
+	Elf64_Word p_type;
+	Elf64_Word p_flags;
+	Elf64_Off p_offset;
+	Elf64_Addr p_vaddr;
+	Elf64_Addr p_paddr;
+	Elf64_Xword p_filesz;
+	Elf64_Xword p_memsz;
+	Elf64_Xword p_align;
+};
+
+struct memelfnote {
+	const char *name;
+	int type;
+	unsigned int datasz;
+	void *data;
+};
+
+struct elf_thread_core_info;
+
+struct elf_note_info {
+	struct elf_thread_core_info *thread;
+	struct memelfnote psinfo;
+	struct memelfnote signote;
+	struct memelfnote auxv;
+	struct memelfnote files;
+	siginfo_t csigdata;
+	size_t size;
+	int thread_notes;
+};
+
+struct elf_siginfo {
+	int si_signo;
+	int si_code;
+	int si_errno;
+};
+
+struct elf_prstatus_common {
+	struct elf_siginfo pr_info;
+	short pr_cursig;
+	unsigned long pr_sigpend;
+	unsigned long pr_sighold;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	struct __kernel_old_timeval pr_utime;
+	struct __kernel_old_timeval pr_stime;
+	struct __kernel_old_timeval pr_cutime;
+	struct __kernel_old_timeval pr_cstime;
+};
+
+typedef unsigned long elf_greg_t;
+
+typedef elf_greg_t elf_gregset_t[27];
+
+struct elf_prstatus {
+	struct elf_prstatus_common common;
+	elf_gregset_t pr_reg;
+	int pr_fpvalid;
+};
+
+struct elf_thread_core_info {
+	struct elf_thread_core_info *next;
+	struct task_struct *task;
+	struct elf_prstatus prstatus;
+	struct memelfnote notes[0];
+};
+
+typedef unsigned int __kernel_uid_t;
+
+typedef unsigned int __kernel_gid_t;
+
+struct elf_prpsinfo {
+	char pr_state;
+	char pr_sname;
+	char pr_zomb;
+	char pr_nice;
+	unsigned long pr_flag;
+	__kernel_uid_t pr_uid;
+	__kernel_gid_t pr_gid;
+	pid_t pr_pid;
+	pid_t pr_ppid;
+	pid_t pr_pgrp;
+	pid_t pr_sid;
+	char pr_fname[16];
+	char pr_psargs[80];
+};
+
+struct arch_elf_state {};
+
+struct elf64_note {
+	Elf64_Word n_namesz;
+	Elf64_Word n_descsz;
+	Elf64_Word n_type;
+};
+
+typedef __u16 Elf32_Half;
+
+typedef __u32 Elf32_Addr;
+
+typedef __u32 Elf32_Off;
+
+struct elf32_hdr {
+	unsigned char e_ident[16];
+	Elf32_Half e_type;
+	Elf32_Half e_machine;
+	Elf32_Word e_version;
+	Elf32_Addr e_entry;
+	Elf32_Off e_phoff;
+	Elf32_Off e_shoff;
+	Elf32_Word e_flags;
+	Elf32_Half e_ehsize;
+	Elf32_Half e_phentsize;
+	Elf32_Half e_phnum;
+	Elf32_Half e_shentsize;
+	Elf32_Half e_shnum;
+	Elf32_Half e_shstrndx;
+};
+
+struct compat_elf_siginfo {
+	compat_int_t si_signo;
+	compat_int_t si_code;
+	compat_int_t si_errno;
+};
+
+struct compat_elf_prstatus_common {
+	struct compat_elf_siginfo pr_info;
+	short pr_cursig;
+	compat_ulong_t pr_sigpend;
+	compat_ulong_t pr_sighold;
+	compat_pid_t pr_pid;
+	compat_pid_t pr_ppid;
+	compat_pid_t pr_pgrp;
+	compat_pid_t pr_sid;
+	struct old_timeval32 pr_utime;
+	struct old_timeval32 pr_stime;
+	struct old_timeval32 pr_cutime;
+	struct old_timeval32 pr_cstime;
+};
+
+struct user_regs_struct32 {
+	__u32 ebx;
+	__u32 ecx;
+	__u32 edx;
+	__u32 esi;
+	__u32 edi;
+	__u32 ebp;
+	__u32 eax;
+	unsigned short ds;
+	unsigned short __ds;
+	unsigned short es;
+	unsigned short __es;
+	unsigned short fs;
+	unsigned short __fs;
+	unsigned short gs;
+	unsigned short __gs;
+	__u32 orig_eax;
+	__u32 eip;
+	unsigned short cs;
+	unsigned short __cs;
+	__u32 eflags;
+	__u32 esp;
+	unsigned short ss;
+	unsigned short __ss;
+};
+
+struct i386_elf_prstatus {
+	struct compat_elf_prstatus_common common;
+	struct user_regs_struct32 pr_reg;
+	compat_int_t pr_fpvalid;
+};
+
+struct elf32_phdr {
+	Elf32_Word p_type;
+	Elf32_Off p_offset;
+	Elf32_Addr p_vaddr;
+	Elf32_Addr p_paddr;
+	Elf32_Word p_filesz;
+	Elf32_Word p_memsz;
+	Elf32_Word p_flags;
+	Elf32_Word p_align;
+};
+
+struct elf_thread_core_info___2;
+
+struct elf_note_info___2 {
+	struct elf_thread_core_info___2 *thread;
+	struct memelfnote psinfo;
+	struct memelfnote signote;
+	struct memelfnote auxv;
+	struct memelfnote files;
+	compat_siginfo_t csigdata;
+	size_t size;
+	int thread_notes;
+};
+
+struct user_regs_struct {
+	unsigned long r15;
+	unsigned long r14;
+	unsigned long r13;
+	unsigned long r12;
+	unsigned long bp;
+	unsigned long bx;
+	unsigned long r11;
+	unsigned long r10;
+	unsigned long r9;
+	unsigned long r8;
+	unsigned long ax;
+	unsigned long cx;
+	unsigned long dx;
+	unsigned long si;
+	unsigned long di;
+	unsigned long orig_ax;
+	unsigned long ip;
+	unsigned long cs;
+	unsigned long flags;
+	unsigned long sp;
+	unsigned long ss;
+	unsigned long fs_base;
+	unsigned long gs_base;
+	unsigned long ds;
+	unsigned long es;
+	unsigned long fs;
+	unsigned long gs;
+};
+
+typedef struct user_regs_struct compat_elf_gregset_t;
+
+struct compat_elf_prstatus {
+	struct compat_elf_prstatus_common common;
+	compat_elf_gregset_t pr_reg;
+	compat_int_t pr_fpvalid;
+};
+
+struct elf_thread_core_info___2 {
+	struct elf_thread_core_info___2 *next;
+	struct task_struct *task;
+	struct compat_elf_prstatus prstatus;
+	struct memelfnote notes[0];
+};
+
+struct compat_elf_prpsinfo {
+	char pr_state;
+	char pr_sname;
+	char pr_zomb;
+	char pr_nice;
+	compat_ulong_t pr_flag;
+	__compat_uid_t pr_uid;
+	__compat_gid_t pr_gid;
+	compat_pid_t pr_pid;
+	compat_pid_t pr_ppid;
+	compat_pid_t pr_pgrp;
+	compat_pid_t pr_sid;
+	char pr_fname[16];
+	char pr_psargs[80];
+};
+
+struct elf32_shdr {
+	Elf32_Word sh_name;
+	Elf32_Word sh_type;
+	Elf32_Word sh_flags;
+	Elf32_Addr sh_addr;
+	Elf32_Off sh_offset;
+	Elf32_Word sh_size;
+	Elf32_Word sh_link;
+	Elf32_Word sh_info;
+	Elf32_Word sh_addralign;
+	Elf32_Word sh_entsize;
+};
+
+enum {
+	MBE_REFERENCED_B = 0,
+	MBE_REUSABLE_B = 1,
+};
+
+struct mb_cache_entry {
+	struct list_head e_list;
+	struct hlist_bl_node e_hash_list;
+	atomic_t e_refcnt;
+	u32 e_key;
+	unsigned long e_flags;
+	u64 e_value;
+};
+
+struct mb_cache {
+	struct hlist_bl_head *c_hash;
+	int c_bucket_bits;
+	unsigned long c_max_entries;
+	spinlock_t c_list_lock;
+	struct list_head c_list;
+	unsigned long c_entry_count;
+	struct shrinker c_shrink;
+	struct work_struct c_shrink_work;
+};
+
+struct posix_acl_xattr_header {
+	__le32 a_version;
+};
+
+struct posix_acl_xattr_entry {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+};
+
+struct core_name {
+	char *corename;
+	int used;
+	int size;
+};
+
+typedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);
+
+typedef void (*btf_trace_iomap_writepage)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_release_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_invalidate_folio)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_dio_rw_queued)(void *, struct inode *, loff_t, u64);
+
+typedef void (*btf_trace_iomap_iter_dstmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter_srcmap)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_writepage_map)(void *, struct inode *, struct iomap *);
+
+typedef void (*btf_trace_iomap_iter)(void *, struct iomap_iter *, const void *, unsigned long);
+
+typedef void (*btf_trace_iomap_dio_rw_begin)(void *, struct kiocb *, struct iov_iter *, unsigned int, size_t);
+
+typedef void (*btf_trace_iomap_dio_complete)(void *, struct kiocb *, int, ssize_t);
+
+struct trace_event_raw_iomap_readpage_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	int nr_pages;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_range_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t size;
+	loff_t offset;
+	u64 length;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	u64 addr;
+	loff_t offset;
+	u64 length;
+	u16 type;
+	u16 flags;
+	dev_t bdev;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_iter {
+	struct trace_entry ent;
+	dev_t dev;
+	u64 ino;
+	loff_t pos;
+	u64 length;
+	unsigned int flags;
+	const void *ops;
+	unsigned long caller;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_dio_rw_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t isize;
+	loff_t pos;
+	size_t count;
+	size_t done_before;
+	int ki_flags;
+	unsigned int dio_flags;
+	bool aio;
+	char __data[0];
+};
+
+struct trace_event_raw_iomap_dio_complete {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t isize;
+	loff_t pos;
+	int ki_flags;
+	bool aio;
+	int error;
+	ssize_t ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iomap_readpage_class {};
+
+struct trace_event_data_offsets_iomap_range_class {};
+
+struct trace_event_data_offsets_iomap_class {};
+
+struct trace_event_data_offsets_iomap_iter {};
+
+struct trace_event_data_offsets_iomap_dio_rw_begin {};
+
+struct trace_event_data_offsets_iomap_dio_complete {};
+
+enum {
+	BIOSET_NEED_BVECS = 1,
+	BIOSET_NEED_RESCUER = 2,
+	BIOSET_PERCPU_CACHE = 4,
+};
+
+struct iomap_ioend {
+	struct list_head io_list;
+	u16 io_type;
+	u16 io_flags;
+	u32 io_folios;
+	struct inode *io_inode;
+	size_t io_size;
+	loff_t io_offset;
+	sector_t io_sector;
+	struct bio *io_bio;
+	struct bio io_inline_bio;
+};
+
+struct iomap_readpage_ctx {
+	struct folio *cur_folio;
+	bool cur_folio_in_bio;
+	struct bio *bio;
+	struct readahead_control *rac;
+};
+
+struct iomap_folio_state {
+	atomic_t read_bytes_pending;
+	atomic_t write_bytes_pending;
+	spinlock_t state_lock;
+	unsigned long state[0];
+};
+
+typedef int (*iomap_punch_t)(struct inode *, loff_t, loff_t);
+
+typedef int (*list_cmp_func_t)(void *, const struct list_head *, const struct list_head *);
+
+struct iomap_writeback_ops;
+
+struct iomap_writepage_ctx {
+	struct iomap iomap;
+	struct iomap_ioend *ioend;
+	const struct iomap_writeback_ops *ops;
+};
+
+struct iomap_writeback_ops {
+	int (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);
+	int (*prepare_ioend)(struct iomap_ioend *, int);
+	void (*discard_folio)(struct folio *, loff_t);
+};
+
+struct iomap_dio_ops;
+
+struct iomap_dio {
+	struct kiocb *iocb;
+	const struct iomap_dio_ops *dops;
+	loff_t i_size;
+	loff_t size;
+	atomic_t ref;
+	unsigned int flags;
+	int error;
+	size_t done_before;
+	bool wait_for_completion;
+	union {
+		struct {
+			struct iov_iter *iter;
+			struct task_struct *waiter;
+		} submit;
+		struct {
+			struct work_struct work;
+		} aio;
+	};
+};
+
+struct iomap_dio_ops {
+	int (*end_io)(struct kiocb *, ssize_t, int, unsigned int);
+	void (*submit_io)(const struct iomap_iter *, struct bio *, loff_t);
+	struct bio_set *bio_set;
+};
+
+struct iomap_swapfile_info {
+	struct iomap iomap;
+	struct swap_info_struct *sis;
+	uint64_t lowest_ppage;
+	uint64_t highest_ppage;
+	unsigned long nr_pages;
+	int nr_extents;
+	struct file *file;
+};
+
+struct dqstats {
+	unsigned long stat[8];
+	struct percpu_counter counter[8];
+};
+
+struct quota_module_name {
+	int qm_fmt_id;
+	char *qm_mod_name;
+};
+
+enum {
+	DQF_INFO_DIRTY_B = 17,
+};
+
+enum {
+	DQST_LOOKUPS = 0,
+	DQST_DROPS = 1,
+	DQST_READS = 2,
+	DQST_WRITES = 3,
+	DQST_CACHE_HITS = 4,
+	DQST_ALLOC_DQUOTS = 5,
+	DQST_FREE_DQUOTS = 6,
+	DQST_SYNCS = 7,
+	_DQST_DQSTAT_LAST = 8,
+};
+
+enum {
+	DQF_ROOT_SQUASH_B = 0,
+	DQF_SYS_FILE_B = 16,
+	DQF_PRIVATE = 17,
+};
+
+enum {
+	QIF_BLIMITS_B = 0,
+	QIF_SPACE_B = 1,
+	QIF_ILIMITS_B = 2,
+	QIF_INODES_B = 3,
+	QIF_BTIME_B = 4,
+	QIF_ITIME_B = 5,
+};
+
+typedef __kernel_uid32_t qid_t;
+
+struct dquot_warn {
+	struct super_block *w_sb;
+	struct kqid w_dq_id;
+	short w_type;
+};
+
+struct qtree_fmt_operations {
+	void (*mem2disk_dqblk)(void *, struct dquot *);
+	void (*disk2mem_dqblk)(struct dquot *, void *);
+	int (*is_id)(void *, struct dquot *);
+};
+
+struct v2_disk_dqheader {
+	__le32 dqh_magic;
+	__le32 dqh_version;
+};
+
+struct qtree_mem_dqinfo {
+	struct super_block *dqi_sb;
+	int dqi_type;
+	unsigned int dqi_blocks;
+	unsigned int dqi_free_blk;
+	unsigned int dqi_free_entry;
+	unsigned int dqi_blocksize_bits;
+	unsigned int dqi_entry_size;
+	unsigned int dqi_usable_bs;
+	unsigned int dqi_qtree_depth;
+	const struct qtree_fmt_operations *dqi_ops;
+};
+
+struct v2_disk_dqinfo {
+	__le32 dqi_bgrace;
+	__le32 dqi_igrace;
+	__le32 dqi_flags;
+	__le32 dqi_blocks;
+	__le32 dqi_free_blk;
+	__le32 dqi_free_entry;
+};
+
+struct v2r0_disk_dqblk {
+	__le32 dqb_id;
+	__le32 dqb_ihardlimit;
+	__le32 dqb_isoftlimit;
+	__le32 dqb_curinodes;
+	__le32 dqb_bhardlimit;
+	__le32 dqb_bsoftlimit;
+	__le64 dqb_curspace;
+	__le64 dqb_btime;
+	__le64 dqb_itime;
+};
+
+struct v2r1_disk_dqblk {
+	__le32 dqb_id;
+	__le32 dqb_pad;
+	__le64 dqb_ihardlimit;
+	__le64 dqb_isoftlimit;
+	__le64 dqb_curinodes;
+	__le64 dqb_bhardlimit;
+	__le64 dqb_bsoftlimit;
+	__le64 dqb_curspace;
+	__le64 dqb_btime;
+	__le64 dqb_itime;
+};
+
+struct qt_disk_dqdbheader {
+	__le32 dqdh_next_free;
+	__le32 dqdh_prev_free;
+	__le16 dqdh_entries;
+	__le16 dqdh_pad1;
+	__le32 dqdh_pad2;
+};
+
+struct if_dqblk {
+	__u64 dqb_bhardlimit;
+	__u64 dqb_bsoftlimit;
+	__u64 dqb_curspace;
+	__u64 dqb_ihardlimit;
+	__u64 dqb_isoftlimit;
+	__u64 dqb_curinodes;
+	__u64 dqb_btime;
+	__u64 dqb_itime;
+	__u32 dqb_valid;
+};
+
+struct fs_qfilestat {
+	__u64 qfs_ino;
+	__u64 qfs_nblks;
+	__u32 qfs_nextents;
+};
+
+typedef struct fs_qfilestat fs_qfilestat_t;
+
+struct fs_quota_stat {
+	__s8 qs_version;
+	__u16 qs_flags;
+	__s8 qs_pad;
+	fs_qfilestat_t qs_uquota;
+	fs_qfilestat_t qs_gquota;
+	__u32 qs_incoredqs;
+	__s32 qs_btimelimit;
+	__s32 qs_itimelimit;
+	__s32 qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+};
+
+typedef u64 compat_u64;
+
+struct compat_fs_qfilestat {
+	compat_u64 dqb_bhardlimit;
+	compat_u64 qfs_nblks;
+	compat_uint_t qfs_nextents;
+} __attribute__((packed));
+
+struct compat_fs_quota_stat {
+	__s8 qs_version;
+	__u16 qs_flags;
+	__s8 qs_pad;
+	long: 0;
+	struct compat_fs_qfilestat qs_uquota;
+	struct compat_fs_qfilestat qs_gquota;
+	compat_uint_t qs_incoredqs;
+	compat_int_t qs_btimelimit;
+	compat_int_t qs_itimelimit;
+	compat_int_t qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+};
+
+struct fs_qfilestatv {
+	__u64 qfs_ino;
+	__u64 qfs_nblks;
+	__u32 qfs_nextents;
+	__u32 qfs_pad;
+};
+
+struct fs_quota_statv {
+	__s8 qs_version;
+	__u8 qs_pad1;
+	__u16 qs_flags;
+	__u32 qs_incoredqs;
+	struct fs_qfilestatv qs_uquota;
+	struct fs_qfilestatv qs_gquota;
+	struct fs_qfilestatv qs_pquota;
+	__s32 qs_btimelimit;
+	__s32 qs_itimelimit;
+	__s32 qs_rtbtimelimit;
+	__u16 qs_bwarnlimit;
+	__u16 qs_iwarnlimit;
+	__u16 qs_rtbwarnlimit;
+	__u16 qs_pad3;
+	__u32 qs_pad4;
+	__u64 qs_pad2[7];
+};
+
+struct fs_disk_quota {
+	__s8 d_version;
+	__s8 d_flags;
+	__u16 d_fieldmask;
+	__u32 d_id;
+	__u64 d_blk_hardlimit;
+	__u64 d_blk_softlimit;
+	__u64 d_ino_hardlimit;
+	__u64 d_ino_softlimit;
+	__u64 d_bcount;
+	__u64 d_icount;
+	__s32 d_itimer;
+	__s32 d_btimer;
+	__u16 d_iwarns;
+	__u16 d_bwarns;
+	__s8 d_itimer_hi;
+	__s8 d_btimer_hi;
+	__s8 d_rtbtimer_hi;
+	__s8 d_padding2;
+	__u64 d_rtb_hardlimit;
+	__u64 d_rtb_softlimit;
+	__u64 d_rtbcount;
+	__s32 d_rtbtimer;
+	__u16 d_rtbwarns;
+	__s16 d_padding3;
+	char d_padding4[8];
+};
+
+struct if_dqinfo {
+	__u64 dqi_bgrace;
+	__u64 dqi_igrace;
+	__u32 dqi_flags;
+	__u32 dqi_valid;
+};
+
+struct compat_if_dqblk {
+	compat_u64 dqb_bhardlimit;
+	compat_u64 dqb_bsoftlimit;
+	compat_u64 dqb_curspace;
+	compat_u64 dqb_ihardlimit;
+	compat_u64 dqb_isoftlimit;
+	compat_u64 dqb_curinodes;
+	compat_u64 dqb_btime;
+	compat_u64 dqb_itime;
+	compat_uint_t dqb_valid;
+} __attribute__((packed));
+
+struct if_nextdqblk {
+	__u64 dqb_bhardlimit;
+	__u64 dqb_bsoftlimit;
+	__u64 dqb_curspace;
+	__u64 dqb_ihardlimit;
+	__u64 dqb_isoftlimit;
+	__u64 dqb_curinodes;
+	__u64 dqb_btime;
+	__u64 dqb_itime;
+	__u32 dqb_valid;
+	__u32 dqb_id;
+};
+
+enum clear_refs_types {
+	CLEAR_REFS_ALL = 1,
+	CLEAR_REFS_ANON = 2,
+	CLEAR_REFS_MAPPED = 3,
+	CLEAR_REFS_SOFT_DIRTY = 4,
+	CLEAR_REFS_MM_HIWATER_RSS = 5,
+	CLEAR_REFS_LAST = 6,
+};
+
+struct proc_maps_private {
+	struct inode *inode;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	struct vma_iterator iter;
+};
+
+struct mem_size_stats {
+	unsigned long resident;
+	unsigned long shared_clean;
+	unsigned long shared_dirty;
+	unsigned long private_clean;
+	unsigned long private_dirty;
+	unsigned long referenced;
+	unsigned long anonymous;
+	unsigned long lazyfree;
+	unsigned long anonymous_thp;
+	unsigned long shmem_thp;
+	unsigned long file_thp;
+	unsigned long swap;
+	unsigned long swap_shared;
+	unsigned long writeback;
+	unsigned long same;
+	unsigned long huge;
+	unsigned long shared_hugetlb;
+	unsigned long private_hugetlb;
+	unsigned long ksm;
+	u64 pss;
+	u64 pss_anon;
+	u64 pss_file;
+	u64 pss_shmem;
+	u64 pss_dirty;
+	u64 pss_locked;
+	u64 swap_pss;
+};
+
+typedef struct {
+	u64 pme;
+} pagemap_entry_t;
+
+struct pagemapread {
+	int pos;
+	int len;
+	pagemap_entry_t *buffer;
+	bool show_pfn;
+};
+
+struct clear_refs_private {
+	enum clear_refs_types type;
+};
+
+enum {
+	BIAS = 2147483648,
+};
+
+enum {
+	PROC_ENTRY_PERMANENT = 1,
+};
+
+struct pde_opener {
+	struct list_head lh;
+	struct file *file;
+	bool closing;
+	struct completion *c;
+};
+
+enum proc_param {
+	Opt_gid___2 = 0,
+	Opt_hidepid = 1,
+	Opt_subset = 2,
+};
+
+struct proc_fs_context {
+	struct pid_namespace *pid_ns;
+	unsigned int mask;
+	enum proc_hidepid hidepid;
+	int gid;
+	enum proc_pidonly pidonly;
+};
+
+struct pid_entry {
+	const char *name;
+	unsigned int len;
+	umode_t mode;
+	const struct inode_operations *iop;
+	const struct file_operations *fop;
+	union proc_op op;
+};
+
+struct limit_names {
+	const char *name;
+	const char *unit;
+};
+
+struct map_files_info {
+	unsigned long start;
+	unsigned long end;
+	fmode_t mode;
+};
+
+struct syscall_info {
+	__u64 sp;
+	struct seccomp_data data;
+};
+
+struct genradix_root;
+
+struct __genradix {
+	struct genradix_root *root;
+};
+
+struct tgid_iter {
+	unsigned int tgid;
+	struct task_struct *task;
+};
+
+typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);
+
+struct fd_data {
+	fmode_t mode;
+	unsigned int fd;
+};
+
+struct sysctl_alias {
+	const char *kernel_param;
+	const char *sysctl_param;
+};
+
+struct seq_net_private {
+	struct net *net;
+	netns_tracker ns_tracker;
+};
+
+struct kernfs_global_locks {
+	struct mutex open_file_mutex[1024];
+};
+
+struct kernfs_super_info {
+	struct super_block *sb;
+	struct kernfs_root *root;
+	const void *ns;
+	struct list_head node;
+};
+
+struct kernfs_root {
+	struct kernfs_node *kn;
+	unsigned int flags;
+	struct idr ino_idr;
+	u32 last_id_lowbits;
+	u32 id_highbits;
+	struct kernfs_syscall_ops *syscall_ops;
+	struct list_head supers;
+	wait_queue_head_t deactivate_waitq;
+	struct rw_semaphore kernfs_rwsem;
+	struct rw_semaphore kernfs_iattr_rwsem;
+	struct rw_semaphore kernfs_supers_rwsem;
+	struct callback_head rcu;
+};
+
+struct kernfs_iattrs {
+	kuid_t ia_uid;
+	kgid_t ia_gid;
+	struct timespec64 ia_atime;
+	struct timespec64 ia_mtime;
+	struct timespec64 ia_ctime;
+	struct simple_xattrs xattrs;
+	atomic_t nr_user_xattrs;
+	atomic_t user_xattr_size;
+};
+
+enum kernfs_node_flag {
+	KERNFS_ACTIVATED = 16,
+	KERNFS_NS = 32,
+	KERNFS_HAS_SEQ_SHOW = 64,
+	KERNFS_HAS_MMAP = 128,
+	KERNFS_LOCKDEP = 256,
+	KERNFS_HIDDEN = 512,
+	KERNFS_SUICIDAL = 1024,
+	KERNFS_SUICIDED = 2048,
+	KERNFS_EMPTY_DIR = 4096,
+	KERNFS_HAS_RELEASE = 8192,
+	KERNFS_REMOVING = 16384,
+};
+
+struct configfs_fragment;
+
+struct configfs_dirent {
+	atomic_t s_count;
+	int s_dependent_count;
+	struct list_head s_sibling;
+	struct list_head s_children;
+	int s_links;
+	void *s_element;
+	int s_type;
+	umode_t s_mode;
+	struct dentry *s_dentry;
+	struct iattr *s_iattr;
+	struct configfs_fragment *s_frag;
+};
+
+struct configfs_fragment {
+	atomic_t frag_count;
+	struct rw_semaphore frag_sem;
+	bool frag_dead;
+};
+
+struct config_item;
+
+struct configfs_attribute {
+	const char *ca_name;
+	struct module *ca_owner;
+	umode_t ca_mode;
+	ssize_t (*show)(struct config_item *, char *);
+	ssize_t (*store)(struct config_item *, const char *, size_t);
+};
+
+struct config_group;
+
+struct config_item_type;
+
+struct config_item {
+	char *ci_name;
+	char ci_namebuf[20];
+	struct kref ci_kref;
+	struct list_head ci_entry;
+	struct config_item *ci_parent;
+	struct config_group *ci_group;
+	const struct config_item_type *ci_type;
+	struct dentry *ci_dentry;
+};
+
+struct configfs_subsystem;
+
+struct config_group {
+	struct config_item cg_item;
+	struct list_head cg_children;
+	struct configfs_subsystem *cg_subsys;
+	struct list_head default_groups;
+	struct list_head group_entry;
+};
+
+struct configfs_subsystem {
+	struct config_group su_group;
+	struct mutex su_mutex;
+};
+
+struct configfs_item_operations;
+
+struct configfs_group_operations;
+
+struct configfs_bin_attribute;
+
+struct config_item_type {
+	struct module *ct_owner;
+	struct configfs_item_operations *ct_item_ops;
+	struct configfs_group_operations *ct_group_ops;
+	struct configfs_attribute **ct_attrs;
+	struct configfs_bin_attribute **ct_bin_attrs;
+};
+
+struct configfs_item_operations {
+	void (*release)(struct config_item *);
+	int (*allow_link)(struct config_item *, struct config_item *);
+	void (*drop_link)(struct config_item *, struct config_item *);
+};
+
+struct configfs_group_operations {
+	struct config_item * (*make_item)(struct config_group *, const char *);
+	struct config_group * (*make_group)(struct config_group *, const char *);
+	void (*disconnect_notify)(struct config_group *, struct config_item *);
+	void (*drop_item)(struct config_group *, struct config_item *);
+};
+
+struct configfs_bin_attribute {
+	struct configfs_attribute cb_attr;
+	void *cb_private;
+	size_t cb_max_size;
+	ssize_t (*read)(struct config_item *, void *, size_t);
+	ssize_t (*write)(struct config_item *, const void *, size_t);
+};
+
+struct configfs_buffer {
+	size_t count;
+	loff_t pos;
+	char *page;
+	struct configfs_item_operations *ops;
+	struct mutex mutex;
+	int needs_read_fill;
+	bool read_in_progress;
+	bool write_in_progress;
+	char *bin_buffer;
+	int bin_buffer_size;
+	int cb_max_size;
+	struct config_item *item;
+	struct module *owner;
+	union {
+		struct configfs_attribute *attr;
+		struct configfs_bin_attribute *bin_attr;
+	};
+};
+
+enum {
+	Opt_uid___2 = 0,
+	Opt_gid___3 = 1,
+	Opt_mode___2 = 2,
+	Opt_ptmxmode = 3,
+	Opt_newinstance = 4,
+	Opt_max = 5,
+	Opt_err = 6,
+};
+
+struct pts_mount_opts {
+	int setuid;
+	int setgid;
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	umode_t ptmxmode;
+	int reserve;
+	int max;
+};
+
+struct pts_fs_info {
+	struct ida allocated_ptys;
+	struct pts_mount_opts mount_opts;
+	struct super_block *sb;
+	struct dentry *ptmx_dentry;
+};
+
+typedef unsigned int tid_t;
+
+struct transaction_chp_stats_s {
+	unsigned long cs_chp_time;
+	__u32 cs_forced_to_close;
+	__u32 cs_written;
+	__u32 cs_dropped;
+};
+
+struct journal_s;
+
+typedef struct journal_s journal_t;
+
+struct journal_head;
+
+struct transaction_s;
+
+typedef struct transaction_s transaction_t;
+
+struct transaction_s {
+	journal_t *t_journal;
+	tid_t t_tid;
+	enum {
+		T_RUNNING = 0,
+		T_LOCKED = 1,
+		T_SWITCH = 2,
+		T_FLUSH = 3,
+		T_COMMIT = 4,
+		T_COMMIT_DFLUSH = 5,
+		T_COMMIT_JFLUSH = 6,
+		T_COMMIT_CALLBACK = 7,
+		T_FINISHED = 8,
+	} t_state;
+	unsigned long t_log_start;
+	int t_nr_buffers;
+	struct journal_head *t_reserved_list;
+	struct journal_head *t_buffers;
+	struct journal_head *t_forget;
+	struct journal_head *t_checkpoint_list;
+	struct journal_head *t_shadow_list;
+	struct list_head t_inode_list;
+	unsigned long t_max_wait;
+	unsigned long t_start;
+	unsigned long t_requested;
+	struct transaction_chp_stats_s t_chp_stats;
+	atomic_t t_updates;
+	atomic_t t_outstanding_credits;
+	atomic_t t_outstanding_revokes;
+	atomic_t t_handle_count;
+	transaction_t *t_cpnext;
+	transaction_t *t_cpprev;
+	unsigned long t_expires;
+	ktime_t t_start_time;
+	unsigned int t_synchronous_commit: 1;
+	int t_need_data_flush;
+	struct list_head t_private_list;
+};
+
+struct transaction_run_stats_s {
+	unsigned long rs_wait;
+	unsigned long rs_request_delay;
+	unsigned long rs_running;
+	unsigned long rs_locked;
+	unsigned long rs_flushing;
+	unsigned long rs_logging;
+	__u32 rs_handle_count;
+	__u32 rs_blocks;
+	__u32 rs_blocks_logged;
+};
+
+struct transaction_stats_s {
+	unsigned long ts_tid;
+	unsigned long ts_requested;
+	struct transaction_run_stats_s run;
+};
+
+enum passtype {
+	PASS_SCAN = 0,
+	PASS_REVOKE = 1,
+	PASS_REPLAY = 2,
+};
+
+struct journal_superblock_s;
+
+typedef struct journal_superblock_s journal_superblock_t;
+
+struct jbd2_revoke_table_s;
+
+struct jbd2_inode;
+
+struct journal_s {
+	unsigned long j_flags;
+	unsigned long j_atomic_flags;
+	int j_errno;
+	struct mutex j_abort_mutex;
+	struct buffer_head *j_sb_buffer;
+	journal_superblock_t *j_superblock;
+	rwlock_t j_state_lock;
+	int j_barrier_count;
+	struct mutex j_barrier;
+	transaction_t *j_running_transaction;
+	transaction_t *j_committing_transaction;
+	transaction_t *j_checkpoint_transactions;
+	wait_queue_head_t j_wait_transaction_locked;
+	wait_queue_head_t j_wait_done_commit;
+	wait_queue_head_t j_wait_commit;
+	wait_queue_head_t j_wait_updates;
+	wait_queue_head_t j_wait_reserved;
+	wait_queue_head_t j_fc_wait;
+	struct mutex j_checkpoint_mutex;
+	struct buffer_head *j_chkpt_bhs[64];
+	struct shrinker j_shrinker;
+	struct percpu_counter j_checkpoint_jh_count;
+	transaction_t *j_shrink_transaction;
+	unsigned long j_head;
+	unsigned long j_tail;
+	unsigned long j_free;
+	unsigned long j_first;
+	unsigned long j_last;
+	unsigned long j_fc_first;
+	unsigned long j_fc_off;
+	unsigned long j_fc_last;
+	struct block_device *j_dev;
+	int j_blocksize;
+	unsigned long long j_blk_offset;
+	char j_devname[56];
+	struct block_device *j_fs_dev;
+	unsigned int j_total_len;
+	atomic_t j_reserved_credits;
+	spinlock_t j_list_lock;
+	struct inode *j_inode;
+	tid_t j_tail_sequence;
+	tid_t j_transaction_sequence;
+	tid_t j_commit_sequence;
+	tid_t j_commit_request;
+	__u8 j_uuid[16];
+	struct task_struct *j_task;
+	int j_max_transaction_buffers;
+	int j_revoke_records_per_block;
+	unsigned long j_commit_interval;
+	struct timer_list j_commit_timer;
+	spinlock_t j_revoke_lock;
+	struct jbd2_revoke_table_s *j_revoke;
+	struct jbd2_revoke_table_s *j_revoke_table[2];
+	struct buffer_head **j_wbuf;
+	struct buffer_head **j_fc_wbuf;
+	int j_wbufsize;
+	int j_fc_wbufsize;
+	pid_t j_last_sync_writer;
+	u64 j_average_commit_time;
+	u32 j_min_batch_time;
+	u32 j_max_batch_time;
+	void (*j_commit_callback)(journal_t *, transaction_t *);
+	int (*j_submit_inode_data_buffers)(struct jbd2_inode *);
+	int (*j_finish_inode_data_buffers)(struct jbd2_inode *);
+	spinlock_t j_history_lock;
+	struct proc_dir_entry *j_proc_entry;
+	struct transaction_stats_s j_stats;
+	unsigned int j_failed_commit;
+	void *j_private;
+	struct crypto_shash *j_chksum_driver;
+	__u32 j_csum_seed;
+	void (*j_fc_cleanup_callback)(struct journal_s *, int, tid_t);
+	int (*j_fc_replay_callback)(struct journal_s *, struct buffer_head *, enum passtype, int, tid_t);
+	int (*j_bmap)(struct journal_s *, sector_t *);
+};
+
+struct journal_header_s {
+	__be32 h_magic;
+	__be32 h_blocktype;
+	__be32 h_sequence;
+};
+
+typedef struct journal_header_s journal_header_t;
+
+struct journal_superblock_s {
+	journal_header_t s_header;
+	__be32 s_blocksize;
+	__be32 s_maxlen;
+	__be32 s_first;
+	__be32 s_sequence;
+	__be32 s_start;
+	__be32 s_errno;
+	__be32 s_feature_compat;
+	__be32 s_feature_incompat;
+	__be32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	__be32 s_nr_users;
+	__be32 s_dynsuper;
+	__be32 s_max_transaction;
+	__be32 s_max_trans_data;
+	__u8 s_checksum_type;
+	__u8 s_padding2[3];
+	__be32 s_num_fc_blks;
+	__be32 s_head;
+	__u32 s_padding[40];
+	__be32 s_checksum;
+	__u8 s_users[768];
+};
+
+struct jbd2_inode {
+	transaction_t *i_transaction;
+	transaction_t *i_next_transaction;
+	struct list_head i_list;
+	struct inode *i_vfs_inode;
+	unsigned long i_flags;
+	loff_t i_dirty_start;
+	loff_t i_dirty_end;
+};
+
+struct jbd2_buffer_trigger_type;
+
+struct journal_head {
+	struct buffer_head *b_bh;
+	spinlock_t b_state_lock;
+	int b_jcount;
+	unsigned int b_jlist;
+	unsigned int b_modified;
+	char *b_frozen_data;
+	char *b_committed_data;
+	transaction_t *b_transaction;
+	transaction_t *b_next_transaction;
+	struct journal_head *b_tnext;
+	struct journal_head *b_tprev;
+	transaction_t *b_cp_transaction;
+	struct journal_head *b_cpnext;
+	struct journal_head *b_cpprev;
+	struct jbd2_buffer_trigger_type *b_triggers;
+	struct jbd2_buffer_trigger_type *b_frozen_triggers;
+};
+
+struct jbd2_buffer_trigger_type {
+	void (*t_frozen)(struct jbd2_buffer_trigger_type *, struct buffer_head *, void *, size_t);
+	void (*t_abort)(struct jbd2_buffer_trigger_type *, struct buffer_head *);
+};
+
+enum ext4_li_mode {
+	EXT4_LI_MODE_PREFETCH_BBITMAP = 0,
+	EXT4_LI_MODE_ITABLE = 1,
+};
+
+enum jbd_state_bits {
+	BH_JBD = 16,
+	BH_JWrite = 17,
+	BH_Freed = 18,
+	BH_Revoked = 19,
+	BH_RevokeValid = 20,
+	BH_JBDDirty = 21,
+	BH_JournalHead = 22,
+	BH_Shadow = 23,
+	BH_Verified = 24,
+	BH_JBDPrivateStart = 25,
+};
+
+struct ext4_group_desc {
+	__le32 bg_block_bitmap_lo;
+	__le32 bg_inode_bitmap_lo;
+	__le32 bg_inode_table_lo;
+	__le16 bg_free_blocks_count_lo;
+	__le16 bg_free_inodes_count_lo;
+	__le16 bg_used_dirs_count_lo;
+	__le16 bg_flags;
+	__le32 bg_exclude_bitmap_lo;
+	__le16 bg_block_bitmap_csum_lo;
+	__le16 bg_inode_bitmap_csum_lo;
+	__le16 bg_itable_unused_lo;
+	__le16 bg_checksum;
+	__le32 bg_block_bitmap_hi;
+	__le32 bg_inode_bitmap_hi;
+	__le32 bg_inode_table_hi;
+	__le16 bg_free_blocks_count_hi;
+	__le16 bg_free_inodes_count_hi;
+	__le16 bg_used_dirs_count_hi;
+	__le16 bg_itable_unused_hi;
+	__le32 bg_exclude_bitmap_hi;
+	__le16 bg_block_bitmap_csum_hi;
+	__le16 bg_inode_bitmap_csum_hi;
+	__u32 bg_reserved;
+};
+
+typedef int ext4_grpblk_t;
+
+typedef unsigned int ext4_group_t;
+
+struct ext4_group_info {
+	unsigned long bb_state;
+	struct rb_root bb_free_root;
+	ext4_grpblk_t bb_first_free;
+	ext4_grpblk_t bb_free;
+	ext4_grpblk_t bb_fragments;
+	int bb_avg_fragment_size_order;
+	ext4_grpblk_t bb_largest_free_order;
+	ext4_group_t bb_group;
+	struct list_head bb_prealloc_list;
+	struct rw_semaphore alloc_sem;
+	struct list_head bb_avg_fragment_size_node;
+	struct list_head bb_largest_free_order_node;
+	ext4_grpblk_t bb_counters[0];
+};
+
+typedef unsigned long long ext4_fsblk_t;
+
+typedef __u32 ext4_lblk_t;
+
+struct extent_status;
+
+struct ext4_es_tree {
+	struct rb_root root;
+	struct extent_status *cache_es;
+};
+
+struct ext4_pending_tree {
+	struct rb_root root;
+};
+
+struct ext4_inode_info {
+	__le32 i_data[15];
+	__u32 i_dtime;
+	ext4_fsblk_t i_file_acl;
+	ext4_group_t i_block_group;
+	ext4_lblk_t i_dir_start_lookup;
+	unsigned long i_flags;
+	struct rw_semaphore xattr_sem;
+	union {
+		struct list_head i_orphan;
+		unsigned int i_orphan_idx;
+	};
+	struct list_head i_fc_dilist;
+	struct list_head i_fc_list;
+	ext4_lblk_t i_fc_lblk_start;
+	ext4_lblk_t i_fc_lblk_len;
+	atomic_t i_fc_updates;
+	wait_queue_head_t i_fc_wait;
+	struct mutex i_fc_lock;
+	loff_t i_disksize;
+	struct rw_semaphore i_data_sem;
+	struct inode vfs_inode;
+	struct jbd2_inode *jinode;
+	spinlock_t i_raw_lock;
+	struct timespec64 i_crtime;
+	atomic_t i_prealloc_active;
+	struct rb_root i_prealloc_node;
+	rwlock_t i_prealloc_lock;
+	struct ext4_es_tree i_es_tree;
+	rwlock_t i_es_lock;
+	struct list_head i_es_list;
+	unsigned int i_es_all_nr;
+	unsigned int i_es_shk_nr;
+	ext4_lblk_t i_es_shrink_lblk;
+	ext4_group_t i_last_alloc_group;
+	unsigned int i_reserved_data_blocks;
+	struct ext4_pending_tree i_pending_tree;
+	__u16 i_extra_isize;
+	u16 i_inline_off;
+	u16 i_inline_size;
+	qsize_t i_reserved_quota;
+	spinlock_t i_completed_io_lock;
+	struct list_head i_rsv_conversion_list;
+	struct work_struct i_rsv_conversion_work;
+	atomic_t i_unwritten;
+	spinlock_t i_block_reservation_lock;
+	tid_t i_sync_tid;
+	tid_t i_datasync_tid;
+	struct dquot __attribute__((btf_type_tag("rcu"))) *i_dquot[3];
+	__u32 i_csum_seed;
+	kprojid_t i_projid;
+};
+
+struct extent_status {
+	struct rb_node rb_node;
+	ext4_lblk_t es_lblk;
+	ext4_lblk_t es_len;
+	ext4_fsblk_t es_pblk;
+};
+
+struct ext4_orphan_block;
+
+struct ext4_orphan_info {
+	int of_blocks;
+	__u32 of_csum_seed;
+	struct ext4_orphan_block *of_binfo;
+};
+
+struct ext4_es_stats {
+	unsigned long es_stats_shrunk;
+	struct percpu_counter es_stats_cache_hits;
+	struct percpu_counter es_stats_cache_misses;
+	u64 es_stats_scan_time;
+	u64 es_stats_max_scan_time;
+	struct percpu_counter es_stats_all_cnt;
+	struct percpu_counter es_stats_shk_cnt;
+};
+
+struct ext4_journal_trigger {
+	struct jbd2_buffer_trigger_type tr_triggers;
+	struct super_block *sb;
+};
+
+struct ext4_fc_stats {
+	unsigned int fc_ineligible_reason_count[10];
+	unsigned long fc_num_commits;
+	unsigned long fc_ineligible_commits;
+	unsigned long fc_failed_commits;
+	unsigned long fc_skipped_commits;
+	unsigned long fc_numblks;
+	u64 s_fc_avg_commit_time;
+};
+
+struct ext4_fc_alloc_region;
+
+struct ext4_fc_replay_state {
+	int fc_replay_num_tags;
+	int fc_replay_expected_off;
+	int fc_current_pass;
+	int fc_cur_tag;
+	int fc_crc;
+	struct ext4_fc_alloc_region *fc_regions;
+	int fc_regions_size;
+	int fc_regions_used;
+	int fc_regions_valid;
+	int *fc_modified_inodes;
+	int fc_modified_inodes_used;
+	int fc_modified_inodes_size;
+};
+
+struct ext4_super_block;
+
+struct blockgroup_lock;
+
+struct ext4_system_blocks;
+
+struct ext4_locality_group;
+
+struct flex_groups;
+
+struct ext4_li_request;
+
+struct ext4_sb_info {
+	unsigned long s_desc_size;
+	unsigned long s_inodes_per_block;
+	unsigned long s_blocks_per_group;
+	unsigned long s_clusters_per_group;
+	unsigned long s_inodes_per_group;
+	unsigned long s_itb_per_group;
+	unsigned long s_gdb_count;
+	unsigned long s_desc_per_block;
+	ext4_group_t s_groups_count;
+	ext4_group_t s_blockfile_groups;
+	unsigned long s_overhead;
+	unsigned int s_cluster_ratio;
+	unsigned int s_cluster_bits;
+	loff_t s_bitmap_maxbytes;
+	struct buffer_head *s_sbh;
+	struct ext4_super_block *s_es;
+	struct buffer_head * __attribute__((btf_type_tag("rcu"))) *s_group_desc;
+	unsigned int s_mount_opt;
+	unsigned int s_mount_opt2;
+	unsigned long s_mount_flags;
+	unsigned int s_def_mount_opt;
+	unsigned int s_def_mount_opt2;
+	ext4_fsblk_t s_sb_block;
+	atomic64_t s_resv_clusters;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	unsigned short s_mount_state;
+	unsigned short s_pad;
+	int s_addr_per_block_bits;
+	int s_desc_per_block_bits;
+	int s_inode_size;
+	int s_first_ino;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_inode_goal;
+	u32 s_hash_seed[4];
+	int s_def_hash_version;
+	int s_hash_unsigned;
+	struct percpu_counter s_freeclusters_counter;
+	struct percpu_counter s_freeinodes_counter;
+	struct percpu_counter s_dirs_counter;
+	struct percpu_counter s_dirtyclusters_counter;
+	struct percpu_counter s_sra_exceeded_retry_limit;
+	struct blockgroup_lock *s_blockgroup_lock;
+	struct proc_dir_entry *s_proc;
+	struct kobject s_kobj;
+	struct completion s_kobj_unregister;
+	struct super_block *s_sb;
+	struct buffer_head *s_mmp_bh;
+	struct journal_s *s_journal;
+	unsigned long s_ext4_flags;
+	struct mutex s_orphan_lock;
+	struct list_head s_orphan;
+	struct ext4_orphan_info s_orphan_info;
+	unsigned long s_commit_interval;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	struct block_device *s_journal_bdev;
+	char __attribute__((btf_type_tag("rcu"))) *s_qf_names[3];
+	int s_jquota_fmt;
+	unsigned int s_want_extra_isize;
+	struct ext4_system_blocks __attribute__((btf_type_tag("rcu"))) *s_system_blks;
+	struct ext4_group_info ** __attribute__((btf_type_tag("rcu"))) *s_group_info;
+	struct inode *s_buddy_cache;
+	spinlock_t s_md_lock;
+	unsigned short *s_mb_offsets;
+	unsigned int *s_mb_maxs;
+	unsigned int s_group_info_size;
+	unsigned int s_mb_free_pending;
+	struct list_head s_freed_data_list;
+	struct list_head s_discard_list;
+	struct work_struct s_discard_work;
+	atomic_t s_retry_alloc_pending;
+	struct list_head *s_mb_avg_fragment_size;
+	rwlock_t *s_mb_avg_fragment_size_locks;
+	struct list_head *s_mb_largest_free_orders;
+	rwlock_t *s_mb_largest_free_orders_locks;
+	unsigned long s_stripe;
+	unsigned int s_mb_max_linear_groups;
+	unsigned int s_mb_stream_request;
+	unsigned int s_mb_max_to_scan;
+	unsigned int s_mb_min_to_scan;
+	unsigned int s_mb_stats;
+	unsigned int s_mb_order2_reqs;
+	unsigned int s_mb_group_prealloc;
+	unsigned int s_max_dir_size_kb;
+	unsigned long s_mb_last_group;
+	unsigned long s_mb_last_start;
+	unsigned int s_mb_prefetch;
+	unsigned int s_mb_prefetch_limit;
+	unsigned int s_mb_best_avail_max_trim_order;
+	atomic_t s_bal_reqs;
+	atomic_t s_bal_success;
+	atomic_t s_bal_allocated;
+	atomic_t s_bal_ex_scanned;
+	atomic_t s_bal_cX_ex_scanned[5];
+	atomic_t s_bal_groups_scanned;
+	atomic_t s_bal_goals;
+	atomic_t s_bal_len_goals;
+	atomic_t s_bal_breaks;
+	atomic_t s_bal_2orders;
+	atomic_t s_bal_p2_aligned_bad_suggestions;
+	atomic_t s_bal_goal_fast_bad_suggestions;
+	atomic_t s_bal_best_avail_bad_suggestions;
+	atomic64_t s_bal_cX_groups_considered[5];
+	atomic64_t s_bal_cX_hits[5];
+	atomic64_t s_bal_cX_failed[5];
+	atomic_t s_mb_buddies_generated;
+	atomic64_t s_mb_generation_time;
+	atomic_t s_mb_lost_chunks;
+	atomic_t s_mb_preallocated;
+	atomic_t s_mb_discarded;
+	atomic_t s_lock_busy;
+	struct ext4_locality_group __attribute__((btf_type_tag("percpu"))) *s_locality_groups;
+	unsigned long s_sectors_written_start;
+	u64 s_kbytes_written;
+	unsigned int s_extent_max_zeroout_kb;
+	unsigned int s_log_groups_per_flex;
+	struct flex_groups * __attribute__((btf_type_tag("rcu"))) *s_flex_groups;
+	ext4_group_t s_flex_groups_allocated;
+	struct workqueue_struct *rsv_conversion_wq;
+	struct timer_list s_err_report;
+	struct ext4_li_request *s_li_request;
+	unsigned int s_li_wait_mult;
+	struct task_struct *s_mmp_tsk;
+	unsigned long s_last_trim_minblks;
+	struct crypto_shash *s_chksum_driver;
+	__u32 s_csum_seed;
+	struct shrinker s_es_shrinker;
+	struct list_head s_es_list;
+	long s_es_nr_inode;
+	struct ext4_es_stats s_es_stats;
+	struct mb_cache *s_ea_block_cache;
+	struct mb_cache *s_ea_inode_cache;
+	long: 64;
+	long: 64;
+	spinlock_t s_es_lock;
+	struct ext4_journal_trigger s_journal_triggers[1];
+	struct ratelimit_state s_err_ratelimit_state;
+	struct ratelimit_state s_warning_ratelimit_state;
+	struct ratelimit_state s_msg_ratelimit_state;
+	atomic_t s_warning_count;
+	atomic_t s_msg_count;
+	struct fscrypt_dummy_policy s_dummy_enc_policy;
+	struct percpu_rw_semaphore s_writepages_rwsem;
+	struct dax_device *s_daxdev;
+	u64 s_dax_part_off;
+	errseq_t s_bdev_wb_err;
+	spinlock_t s_bdev_wb_lock;
+	spinlock_t s_error_lock;
+	int s_add_error_count;
+	int s_first_error_code;
+	__u32 s_first_error_line;
+	__u32 s_first_error_ino;
+	__u64 s_first_error_block;
+	const char *s_first_error_func;
+	time64_t s_first_error_time;
+	int s_last_error_code;
+	__u32 s_last_error_line;
+	__u32 s_last_error_ino;
+	__u64 s_last_error_block;
+	const char *s_last_error_func;
+	time64_t s_last_error_time;
+	struct work_struct s_sb_upd_work;
+	atomic_t s_fc_subtid;
+	struct list_head s_fc_q[2];
+	struct list_head s_fc_dentry_q[2];
+	unsigned int s_fc_bytes;
+	spinlock_t s_fc_lock;
+	struct buffer_head *s_fc_bh;
+	struct ext4_fc_stats s_fc_stats;
+	tid_t s_fc_ineligible_tid;
+	struct ext4_fc_replay_state s_fc_replay_state;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ext4_super_block {
+	__le32 s_inodes_count;
+	__le32 s_blocks_count_lo;
+	__le32 s_r_blocks_count_lo;
+	__le32 s_free_blocks_count_lo;
+	__le32 s_free_inodes_count;
+	__le32 s_first_data_block;
+	__le32 s_log_block_size;
+	__le32 s_log_cluster_size;
+	__le32 s_blocks_per_group;
+	__le32 s_clusters_per_group;
+	__le32 s_inodes_per_group;
+	__le32 s_mtime;
+	__le32 s_wtime;
+	__le16 s_mnt_count;
+	__le16 s_max_mnt_count;
+	__le16 s_magic;
+	__le16 s_state;
+	__le16 s_errors;
+	__le16 s_minor_rev_level;
+	__le32 s_lastcheck;
+	__le32 s_checkinterval;
+	__le32 s_creator_os;
+	__le32 s_rev_level;
+	__le16 s_def_resuid;
+	__le16 s_def_resgid;
+	__le32 s_first_ino;
+	__le16 s_inode_size;
+	__le16 s_block_group_nr;
+	__le32 s_feature_compat;
+	__le32 s_feature_incompat;
+	__le32 s_feature_ro_compat;
+	__u8 s_uuid[16];
+	char s_volume_name[16];
+	char s_last_mounted[64];
+	__le32 s_algorithm_usage_bitmap;
+	__u8 s_prealloc_blocks;
+	__u8 s_prealloc_dir_blocks;
+	__le16 s_reserved_gdt_blocks;
+	__u8 s_journal_uuid[16];
+	__le32 s_journal_inum;
+	__le32 s_journal_dev;
+	__le32 s_last_orphan;
+	__le32 s_hash_seed[4];
+	__u8 s_def_hash_version;
+	__u8 s_jnl_backup_type;
+	__le16 s_desc_size;
+	__le32 s_default_mount_opts;
+	__le32 s_first_meta_bg;
+	__le32 s_mkfs_time;
+	__le32 s_jnl_blocks[17];
+	__le32 s_blocks_count_hi;
+	__le32 s_r_blocks_count_hi;
+	__le32 s_free_blocks_count_hi;
+	__le16 s_min_extra_isize;
+	__le16 s_want_extra_isize;
+	__le32 s_flags;
+	__le16 s_raid_stride;
+	__le16 s_mmp_update_interval;
+	__le64 s_mmp_block;
+	__le32 s_raid_stripe_width;
+	__u8 s_log_groups_per_flex;
+	__u8 s_checksum_type;
+	__u8 s_encryption_level;
+	__u8 s_reserved_pad;
+	__le64 s_kbytes_written;
+	__le32 s_snapshot_inum;
+	__le32 s_snapshot_id;
+	__le64 s_snapshot_r_blocks_count;
+	__le32 s_snapshot_list;
+	__le32 s_error_count;
+	__le32 s_first_error_time;
+	__le32 s_first_error_ino;
+	__le64 s_first_error_block;
+	__u8 s_first_error_func[32];
+	__le32 s_first_error_line;
+	__le32 s_last_error_time;
+	__le32 s_last_error_ino;
+	__le32 s_last_error_line;
+	__le64 s_last_error_block;
+	__u8 s_last_error_func[32];
+	__u8 s_mount_opts[64];
+	__le32 s_usr_quota_inum;
+	__le32 s_grp_quota_inum;
+	__le32 s_overhead_clusters;
+	__le32 s_backup_bgs[2];
+	__u8 s_encrypt_algos[4];
+	__u8 s_encrypt_pw_salt[16];
+	__le32 s_lpf_ino;
+	__le32 s_prj_quota_inum;
+	__le32 s_checksum_seed;
+	__u8 s_wtime_hi;
+	__u8 s_mtime_hi;
+	__u8 s_mkfs_time_hi;
+	__u8 s_lastcheck_hi;
+	__u8 s_first_error_time_hi;
+	__u8 s_last_error_time_hi;
+	__u8 s_first_error_errcode;
+	__u8 s_last_error_errcode;
+	__le16 s_encoding;
+	__le16 s_encoding_flags;
+	__le32 s_orphan_file_inum;
+	__le32 s_reserved[94];
+	__le32 s_checksum;
+};
+
+struct bgl_lock {
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct blockgroup_lock {
+	struct bgl_lock locks[128];
+};
+
+struct ext4_orphan_block {
+	atomic_t ob_free_entries;
+	struct buffer_head *ob_bh;
+};
+
+struct ext4_system_blocks {
+	struct rb_root root;
+	struct callback_head rcu;
+};
+
+struct ext4_locality_group {
+	struct mutex lg_mutex;
+	struct list_head lg_prealloc_list[10];
+	spinlock_t lg_prealloc_lock;
+};
+
+struct flex_groups {
+	atomic64_t free_clusters;
+	atomic_t free_inodes;
+	atomic_t used_dirs;
+};
+
+struct ext4_li_request {
+	struct super_block *lr_super;
+	enum ext4_li_mode lr_mode;
+	ext4_group_t lr_first_not_zeroed;
+	ext4_group_t lr_next_group;
+	struct list_head lr_request;
+	unsigned long lr_next_sched;
+	unsigned long lr_timeout;
+};
+
+struct ext4_fc_alloc_region {
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	int ino;
+	int len;
+};
+
+struct jbd2_journal_handle;
+
+typedef struct jbd2_journal_handle handle_t;
+
+struct jbd2_journal_handle {
+	union {
+		transaction_t *h_transaction;
+		journal_t *h_journal;
+	};
+	handle_t *h_rsv_handle;
+	int h_total_credits;
+	int h_revoke_credits;
+	int h_revoke_credits_requested;
+	int h_ref;
+	int h_err;
+	unsigned int h_sync: 1;
+	unsigned int h_jdata: 1;
+	unsigned int h_reserved: 1;
+	unsigned int h_aborted: 1;
+	unsigned int h_type: 8;
+	unsigned int h_line_no: 16;
+	unsigned long h_start_jiffies;
+	unsigned int h_requested_credits;
+	unsigned int saved_alloc_context;
+};
+
+struct ext4_allocation_request {
+	struct inode *inode;
+	unsigned int len;
+	ext4_lblk_t logical;
+	ext4_lblk_t lleft;
+	ext4_lblk_t lright;
+	ext4_fsblk_t goal;
+	ext4_fsblk_t pleft;
+	ext4_fsblk_t pright;
+	unsigned int flags;
+};
+
+struct ext4_system_zone {
+	struct rb_node node;
+	ext4_fsblk_t start_blk;
+	unsigned int count;
+	u32 ino;
+};
+
+struct ext4_map_blocks {
+	ext4_fsblk_t m_pblk;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+};
+
+typedef enum {
+	EXT4_IGET_NORMAL = 0,
+	EXT4_IGET_SPECIAL = 1,
+	EXT4_IGET_HANDLE = 2,
+	EXT4_IGET_BAD = 4,
+	EXT4_IGET_EA_INODE = 8,
+} ext4_iget_flags;
+
+enum {
+	EXT4_INODE_SECRM = 0,
+	EXT4_INODE_UNRM = 1,
+	EXT4_INODE_COMPR = 2,
+	EXT4_INODE_SYNC = 3,
+	EXT4_INODE_IMMUTABLE = 4,
+	EXT4_INODE_APPEND = 5,
+	EXT4_INODE_NODUMP = 6,
+	EXT4_INODE_NOATIME = 7,
+	EXT4_INODE_DIRTY = 8,
+	EXT4_INODE_COMPRBLK = 9,
+	EXT4_INODE_NOCOMPR = 10,
+	EXT4_INODE_ENCRYPT = 11,
+	EXT4_INODE_INDEX = 12,
+	EXT4_INODE_IMAGIC = 13,
+	EXT4_INODE_JOURNAL_DATA = 14,
+	EXT4_INODE_NOTAIL = 15,
+	EXT4_INODE_DIRSYNC = 16,
+	EXT4_INODE_TOPDIR = 17,
+	EXT4_INODE_HUGE_FILE = 18,
+	EXT4_INODE_EXTENTS = 19,
+	EXT4_INODE_VERITY = 20,
+	EXT4_INODE_EA_INODE = 21,
+	EXT4_INODE_DAX = 25,
+	EXT4_INODE_INLINE_DATA = 28,
+	EXT4_INODE_PROJINHERIT = 29,
+	EXT4_INODE_CASEFOLD = 30,
+	EXT4_INODE_RESERVED = 31,
+};
+
+struct fname {
+	__u32 hash;
+	__u32 minor_hash;
+	struct rb_node rb_hash;
+	struct fname *next;
+	__u32 inode;
+	__u8 name_len;
+	__u8 file_type;
+	char name[0];
+};
+
+struct ext4_dir_entry_2 {
+	__le32 inode;
+	__le16 rec_len;
+	__u8 name_len;
+	__u8 file_type;
+	char name[255];
+};
+
+struct ext4_dir_entry_hash {
+	__le32 hash;
+	__le32 minor_hash;
+};
+
+struct dir_private_info {
+	struct rb_root root;
+	struct rb_node *curr_node;
+	struct fname *extra_fname;
+	loff_t last_pos;
+	__u32 curr_hash;
+	__u32 curr_minor_hash;
+	__u32 next_hash;
+};
+
+enum ext4_journal_trigger_type {
+	EXT4_JTR_ORPHAN_FILE = 0,
+	EXT4_JTR_NONE = 1,
+};
+
+enum {
+	EXT4_STATE_NEW = 0,
+	EXT4_STATE_XATTR = 1,
+	EXT4_STATE_NO_EXPAND = 2,
+	EXT4_STATE_DA_ALLOC_CLOSE = 3,
+	EXT4_STATE_EXT_MIGRATE = 4,
+	EXT4_STATE_NEWENTRY = 5,
+	EXT4_STATE_MAY_INLINE_DATA = 6,
+	EXT4_STATE_EXT_PRECACHED = 7,
+	EXT4_STATE_LUSTRE_EA_INODE = 8,
+	EXT4_STATE_VERITY_IN_PROGRESS = 9,
+	EXT4_STATE_FC_COMMITTING = 10,
+	EXT4_STATE_ORPHAN_FILE = 11,
+};
+
+struct partial_cluster {
+	ext4_fsblk_t pclu;
+	ext4_lblk_t lblk;
+	enum {
+		initial = 0,
+		tofree = 1,
+		nofree = 2,
+	} state;
+};
+
+enum {
+	ES_WRITTEN_B = 0,
+	ES_UNWRITTEN_B = 1,
+	ES_DELAYED_B = 2,
+	ES_HOLE_B = 3,
+	ES_REFERENCED_B = 4,
+	ES_FLAGS = 5,
+};
+
+enum {
+	EXT4_FC_REASON_XATTR = 0,
+	EXT4_FC_REASON_CROSS_RENAME = 1,
+	EXT4_FC_REASON_JOURNAL_FLAG_CHANGE = 2,
+	EXT4_FC_REASON_NOMEM = 3,
+	EXT4_FC_REASON_SWAP_BOOT = 4,
+	EXT4_FC_REASON_RESIZE = 5,
+	EXT4_FC_REASON_RENAME_DIR = 6,
+	EXT4_FC_REASON_FALLOC_RANGE = 7,
+	EXT4_FC_REASON_INODE_JOURNAL_DATA = 8,
+	EXT4_FC_REASON_ENCRYPTED_FILENAME = 9,
+	EXT4_FC_REASON_MAX = 10,
+};
+
+enum SHIFT_DIRECTION {
+	SHIFT_LEFT = 0,
+	SHIFT_RIGHT = 1,
+};
+
+struct ext4_extent_idx {
+	__le32 ei_block;
+	__le32 ei_leaf_lo;
+	__le16 ei_leaf_hi;
+	__u16 ei_unused;
+};
+
+struct ext4_extent {
+	__le32 ee_block;
+	__le16 ee_len;
+	__le16 ee_start_hi;
+	__le32 ee_start_lo;
+};
+
+struct ext4_io_end_vec {
+	struct list_head list;
+	loff_t offset;
+	ssize_t size;
+};
+
+struct ext4_extent_tail {
+	__le32 et_checksum;
+};
+
+struct ext4_extent_header {
+	__le16 eh_magic;
+	__le16 eh_entries;
+	__le16 eh_max;
+	__le16 eh_depth;
+	__le32 eh_generation;
+};
+
+struct ext4_ext_path {
+	ext4_fsblk_t p_block;
+	__u16 p_depth;
+	__u16 p_maxdepth;
+	struct ext4_extent *p_ext;
+	struct ext4_extent_idx *p_idx;
+	struct ext4_extent_header *p_hdr;
+	struct buffer_head *p_bh;
+};
+
+struct ext4_iloc {
+	struct buffer_head *bh;
+	unsigned long offset;
+	ext4_group_t block_group;
+};
+
+struct ext4_io_end {
+	struct list_head list;
+	handle_t *handle;
+	struct inode *inode;
+	struct bio *bio;
+	unsigned int flag;
+	refcount_t count;
+	struct list_head list_vec;
+};
+
+typedef struct ext4_io_end ext4_io_end_t;
+
+struct pending_reservation {
+	struct rb_node rb_node;
+	ext4_lblk_t lclu;
+};
+
+struct rsvd_count {
+	int ndelonly;
+	bool first_do_lblk_found;
+	ext4_lblk_t first_do_lblk;
+	ext4_lblk_t last_do_lblk;
+	struct extent_status *left_es;
+	bool partial;
+	ext4_lblk_t lclu;
+};
+
+enum {
+	EXT4_MF_MNTDIR_SAMPLED = 0,
+	EXT4_MF_FC_INELIGIBLE = 1,
+};
+
+struct ext4_fsmap {
+	struct list_head fmr_list;
+	dev_t fmr_device;
+	uint32_t fmr_flags;
+	uint64_t fmr_physical;
+	uint64_t fmr_owner;
+	uint64_t fmr_length;
+};
+
+typedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);
+
+typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
+
+struct ext4_fsmap_head;
+
+struct ext4_getfsmap_info {
+	struct ext4_fsmap_head *gfi_head;
+	ext4_fsmap_format_t gfi_formatter;
+	void *gfi_format_arg;
+	ext4_fsblk_t gfi_next_fsblk;
+	u32 gfi_dev;
+	ext4_group_t gfi_agno;
+	struct ext4_fsmap gfi_low;
+	struct ext4_fsmap gfi_high;
+	struct ext4_fsmap gfi_lastfree;
+	struct list_head gfi_meta_list;
+	bool gfi_last;
+};
+
+struct ext4_fsmap_head {
+	uint32_t fmh_iflags;
+	uint32_t fmh_oflags;
+	unsigned int fmh_count;
+	unsigned int fmh_entries;
+	struct ext4_fsmap fmh_keys[2];
+};
+
+struct fsmap {
+	__u32 fmr_device;
+	__u32 fmr_flags;
+	__u64 fmr_physical;
+	__u64 fmr_owner;
+	__u64 fmr_offset;
+	__u64 fmr_length;
+	__u64 fmr_reserved[3];
+};
+
+struct ext4_getfsmap_dev {
+	int (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);
+	u32 gfd_dev;
+};
+
+struct dx_hash_info {
+	u32 hash;
+	u32 minor_hash;
+	int hash_version;
+	u32 *seed;
+};
+
+struct ext4_inode {
+	__le16 i_mode;
+	__le16 i_uid;
+	__le32 i_size_lo;
+	__le32 i_atime;
+	__le32 i_ctime;
+	__le32 i_mtime;
+	__le32 i_dtime;
+	__le16 i_gid;
+	__le16 i_links_count;
+	__le32 i_blocks_lo;
+	__le32 i_flags;
+	union {
+		struct {
+			__le32 l_i_version;
+		} linux1;
+		struct {
+			__u32 h_i_translator;
+		} hurd1;
+		struct {
+			__u32 m_i_reserved1;
+		} masix1;
+	} osd1;
+	__le32 i_block[15];
+	__le32 i_generation;
+	__le32 i_file_acl_lo;
+	__le32 i_size_high;
+	__le32 i_obso_faddr;
+	union {
+		struct {
+			__le16 l_i_blocks_high;
+			__le16 l_i_file_acl_high;
+			__le16 l_i_uid_high;
+			__le16 l_i_gid_high;
+			__le16 l_i_checksum_lo;
+			__le16 l_i_reserved;
+		} linux2;
+		struct {
+			__le16 h_i_reserved1;
+			__u16 h_i_mode_high;
+			__u16 h_i_uid_high;
+			__u16 h_i_gid_high;
+			__u32 h_i_author;
+		} hurd2;
+		struct {
+			__le16 h_i_reserved1;
+			__le16 m_i_file_acl_high;
+			__u32 m_i_reserved2[2];
+		} masix2;
+	} osd2;
+	__le16 i_extra_isize;
+	__le16 i_checksum_hi;
+	__le32 i_ctime_extra;
+	__le32 i_mtime_extra;
+	__le32 i_atime_extra;
+	__le32 i_crtime;
+	__le32 i_crtime_extra;
+	__le32 i_version_hi;
+	__le32 i_projid;
+};
+
+typedef unsigned int __kernel_mode_t;
+
+typedef __kernel_mode_t mode_t;
+
+struct orlov_stats {
+	__u64 free_clusters;
+	__u32 free_inodes;
+	__u32 used_dirs;
+};
+
+typedef struct {
+	__le32 *p;
+	__le32 key;
+	struct buffer_head *bh;
+} Indirect;
+
+struct ext4_xattr_ibody_header {
+	__le32 h_magic;
+};
+
+struct ext4_xattr_entry {
+	__u8 e_name_len;
+	__u8 e_name_index;
+	__le16 e_value_offs;
+	__le32 e_value_inum;
+	__le32 e_value_size;
+	__le32 e_hash;
+	char e_name[0];
+};
+
+struct ext4_xattr_info {
+	const char *name;
+	const void *value;
+	size_t value_len;
+	int name_index;
+	int in_inode;
+};
+
+struct ext4_xattr_search {
+	struct ext4_xattr_entry *first;
+	void *base;
+	void *end;
+	struct ext4_xattr_entry *here;
+	int not_found;
+};
+
+struct ext4_xattr_ibody_find {
+	struct ext4_xattr_search s;
+	struct ext4_iloc iloc;
+};
+
+struct ext4_filename {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	struct dx_hash_info hinfo;
+	struct fscrypt_str crypto_buf;
+	struct fscrypt_str cf_name;
+};
+
+typedef unsigned short __kernel_uid16_t;
+
+typedef __kernel_uid16_t uid16_t;
+
+typedef unsigned short __kernel_gid16_t;
+
+typedef __kernel_gid16_t gid16_t;
+
+struct ext4_xattr_inode_array {
+	unsigned int count;
+	struct inode *inodes[0];
+};
+
+struct ext4_io_submit {
+	struct writeback_control *io_wbc;
+	struct bio *io_bio;
+	ext4_io_end_t *io_end;
+	sector_t io_next_block;
+};
+
+struct mpage_da_data {
+	struct inode *inode;
+	struct writeback_control *wbc;
+	unsigned int can_map: 1;
+	unsigned long first_page;
+	unsigned long next_page;
+	unsigned long last_page;
+	struct ext4_map_blocks map;
+	struct ext4_io_submit io_submit;
+	unsigned int do_map: 1;
+	unsigned int scanned_until_end: 1;
+	unsigned int journalled_more_data: 1;
+};
+
+struct move_extent {
+	__u32 reserved;
+	__u32 donor_fd;
+	__u64 orig_start;
+	__u64 donor_start;
+	__u64 len;
+	__u64 moved_len;
+};
+
+struct ext4_new_group_input {
+	__u32 group;
+	__u64 block_bitmap;
+	__u64 inode_bitmap;
+	__u64 inode_table;
+	__u32 blocks_count;
+	__u16 reserved_blocks;
+	__u16 unused;
+};
+
+struct fstrim_range {
+	__u64 start;
+	__u64 len;
+	__u64 minlen;
+};
+
+struct ext4_new_group_data {
+	__u32 group;
+	__u64 block_bitmap;
+	__u64 inode_bitmap;
+	__u64 inode_table;
+	__u32 blocks_count;
+	__u16 reserved_blocks;
+	__u16 mdata_blocks;
+	__u32 free_clusters_count;
+};
+
+struct fsmap_head {
+	__u32 fmh_iflags;
+	__u32 fmh_oflags;
+	__u32 fmh_count;
+	__u32 fmh_entries;
+	__u64 fmh_reserved[6];
+	struct fsmap fmh_keys[2];
+	struct fsmap fmh_recs[0];
+};
+
+struct getfsmap_info {
+	struct super_block *gi_sb;
+	struct fsmap_head __attribute__((btf_type_tag("user"))) *gi_data;
+	unsigned int gi_idx;
+	__u32 gi_last_flags;
+};
+
+struct fsuuid {
+	__u32 fsu_len;
+	__u32 fsu_flags;
+	__u8 fsu_uuid[0];
+};
+
+typedef void ext4_update_sb_callback(struct ext4_super_block *, const void *);
+
+struct compat_ext4_new_group_input {
+	u32 group;
+	compat_u64 block_bitmap;
+	compat_u64 inode_bitmap;
+	compat_u64 inode_table;
+	u32 blocks_count;
+	u16 reserved_blocks;
+	u16 unused;
+} __attribute__((packed));
+
+struct sg {
+	struct ext4_group_info info;
+	ext4_grpblk_t counters[18];
+};
+
+enum criteria {
+	CR_POWER2_ALIGNED = 0,
+	CR_GOAL_LEN_FAST = 1,
+	CR_BEST_AVAIL_LEN = 2,
+	CR_GOAL_LEN_SLOW = 3,
+	CR_ANY_FREE = 4,
+	EXT4_MB_NUM_CRS = 5,
+};
+
+enum {
+	MB_INODE_PA = 0,
+	MB_GROUP_PA = 1,
+};
+
+enum blk_default_limits {
+	BLK_MAX_SEGMENTS = 128,
+	BLK_SAFE_MAX_SECTORS = 255,
+	BLK_MAX_SEGMENT_SIZE = 65536,
+	BLK_SEG_BOUNDARY_MASK = 4294967295,
+};
+
+struct ext4_free_data {
+	struct list_head efd_list;
+	struct rb_node efd_node;
+	ext4_group_t efd_group;
+	ext4_grpblk_t efd_start_cluster;
+	ext4_grpblk_t efd_count;
+	tid_t efd_tid;
+};
+
+struct ext4_prealloc_space {
+	union {
+		struct rb_node inode_node;
+		struct list_head lg_list;
+	} pa_node;
+	struct list_head pa_group_list;
+	union {
+		struct list_head pa_tmp_list;
+		struct callback_head pa_rcu;
+	} u;
+	spinlock_t pa_lock;
+	atomic_t pa_count;
+	unsigned int pa_deleted;
+	ext4_fsblk_t pa_pstart;
+	ext4_lblk_t pa_lstart;
+	ext4_grpblk_t pa_len;
+	ext4_grpblk_t pa_free;
+	unsigned short pa_type;
+	union {
+		rwlock_t *inode_lock;
+		spinlock_t *lg_lock;
+	} pa_node_lock;
+	struct inode *pa_inode;
+};
+
+struct ext4_buddy {
+	struct page *bd_buddy_page;
+	void *bd_buddy;
+	struct page *bd_bitmap_page;
+	void *bd_bitmap;
+	struct ext4_group_info *bd_info;
+	struct super_block *bd_sb;
+	__u16 bd_blkbits;
+	ext4_group_t bd_group;
+};
+
+struct ext4_free_extent {
+	ext4_lblk_t fe_logical;
+	ext4_grpblk_t fe_start;
+	ext4_group_t fe_group;
+	ext4_grpblk_t fe_len;
+};
+
+struct ext4_allocation_context {
+	struct inode *ac_inode;
+	struct super_block *ac_sb;
+	struct ext4_free_extent ac_o_ex;
+	struct ext4_free_extent ac_g_ex;
+	struct ext4_free_extent ac_b_ex;
+	struct ext4_free_extent ac_f_ex;
+	ext4_grpblk_t ac_orig_goal_len;
+	__u32 ac_groups_considered;
+	__u32 ac_flags;
+	__u16 ac_groups_scanned;
+	__u16 ac_groups_linear_remaining;
+	__u16 ac_found;
+	__u16 ac_cX_found[5];
+	__u16 ac_tail;
+	__u16 ac_buddy;
+	__u8 ac_status;
+	__u8 ac_criteria;
+	__u8 ac_2order;
+	__u8 ac_op;
+	struct page *ac_bitmap_page;
+	struct page *ac_buddy_page;
+	struct ext4_prealloc_space *ac_pa;
+	struct ext4_locality_group *ac_lg;
+};
+
+struct migrate_struct {
+	ext4_lblk_t first_block;
+	ext4_lblk_t last_block;
+	ext4_lblk_t curr_block;
+	ext4_fsblk_t first_pblock;
+	ext4_fsblk_t last_pblock;
+};
+
+struct mmp_struct {
+	__le32 mmp_magic;
+	__le32 mmp_seq;
+	__le64 mmp_time;
+	char mmp_nodename[64];
+	char mmp_bdevname[32];
+	__le16 mmp_check_interval;
+	__le16 mmp_pad1;
+	__le32 mmp_pad2[226];
+	__le32 mmp_checksum;
+};
+
+struct ext4_dir_entry_tail {
+	__le32 det_reserved_zero1;
+	__le16 det_rec_len;
+	__u8 det_reserved_zero2;
+	__u8 det_reserved_ft;
+	__le32 det_checksum;
+};
+
+struct dx_entry;
+
+struct dx_frame {
+	struct buffer_head *bh;
+	struct dx_entry *entries;
+	struct dx_entry *at;
+};
+
+struct dx_entry {
+	__le32 hash;
+	__le32 block;
+};
+
+struct fake_dirent {
+	__le32 inode;
+	__le16 rec_len;
+	u8 name_len;
+	u8 file_type;
+};
+
+struct dx_root_info {
+	__le32 reserved_zero;
+	u8 hash_version;
+	u8 info_length;
+	u8 indirect_levels;
+	u8 unused_flags;
+};
+
+struct dx_root {
+	struct fake_dirent dot;
+	char dot_name[4];
+	struct fake_dirent dotdot;
+	char dotdot_name[4];
+	struct dx_root_info info;
+	struct dx_entry entries[0];
+};
+
+struct dx_node {
+	struct fake_dirent fake;
+	struct dx_entry entries[0];
+};
+
+struct dx_countlimit {
+	__le16 limit;
+	__le16 count;
+};
+
+struct ext4_dir_entry {
+	__le32 inode;
+	__le16 rec_len;
+	__le16 name_len;
+	char name[255];
+};
+
+struct dx_tail {
+	u32 dt_reserved;
+	__le32 dt_checksum;
+};
+
+struct dx_map_entry {
+	u32 hash;
+	u16 offs;
+	u16 size;
+};
+
+struct ext4_renament {
+	struct inode *dir;
+	struct dentry *dentry;
+	struct inode *inode;
+	bool is_dir;
+	int dir_nlink_delta;
+	struct buffer_head *bh;
+	struct ext4_dir_entry_2 *de;
+	int inlined;
+	struct buffer_head *dir_bh;
+	struct ext4_dir_entry_2 *parent_de;
+	int dir_inlined;
+};
+
+typedef enum {
+	EITHER = 0,
+	INDEX = 1,
+	DIRENT = 2,
+	DIRENT_HTREE = 3,
+} dirblock_type_t;
+
+enum bio_post_read_step {
+	STEP_INITIAL = 0,
+	STEP_DECRYPT = 1,
+	STEP_VERITY = 2,
+	STEP_MAX = 3,
+};
+
+struct bio_post_read_ctx {
+	struct bio *bio;
+	struct work_struct work;
+	unsigned int cur_step;
+	unsigned int enabled_steps;
+};
+
+enum {
+	BLOCK_BITMAP = 0,
+	INODE_BITMAP = 1,
+	INODE_TABLE = 2,
+	GROUP_TABLE_COUNT = 3,
+};
+
+struct ext4_rcu_ptr {
+	struct callback_head rcu;
+	void *ptr;
+};
+
+struct ext4_new_flex_group_data {
+	struct ext4_new_group_data *groups;
+	__u16 *bg_flags;
+	ext4_group_t resize_bg;
+	ext4_group_t count;
+};
+
+typedef void (*btf_trace_ext4_other_inode_update_time)(void *, struct inode *, ino_t);
+
+typedef void (*btf_trace_ext4_free_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_request_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_allocate_inode)(void *, struct inode *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_evict_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_drop_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_nfs_commit_metadata)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_mark_inode_dirty)(void *, struct inode *, unsigned long);
+
+typedef void (*btf_trace_ext4_begin_ordered_truncate)(void *, struct inode *, loff_t);
+
+typedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_ext4_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_journalled_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_da_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_writepages)(void *, struct inode *, struct writeback_control *);
+
+typedef void (*btf_trace_ext4_da_write_pages)(void *, struct inode *, unsigned long, struct writeback_control *);
+
+typedef void (*btf_trace_ext4_da_write_pages_extent)(void *, struct inode *, struct ext4_map_blocks *);
+
+typedef void (*btf_trace_ext4_writepages_result)(void *, struct inode *, struct writeback_control *, int, int);
+
+typedef void (*btf_trace_ext4_read_folio)(void *, struct inode *, struct folio *);
+
+typedef void (*btf_trace_ext4_release_folio)(void *, struct inode *, struct folio *);
+
+typedef void (*btf_trace_ext4_invalidate_folio)(void *, struct folio *, size_t, size_t);
+
+typedef void (*btf_trace_ext4_journalled_invalidate_folio)(void *, struct folio *, size_t, size_t);
+
+typedef void (*btf_trace_ext4_discard_blocks)(void *, struct super_block *, unsigned long long, unsigned long long);
+
+typedef void (*btf_trace_ext4_mb_new_inode_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);
+
+typedef void (*btf_trace_ext4_mb_new_group_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);
+
+typedef void (*btf_trace_ext4_mb_release_inode_pa)(void *, struct ext4_prealloc_space *, unsigned long long, unsigned int);
+
+typedef void (*btf_trace_ext4_mb_release_group_pa)(void *, struct super_block *, struct ext4_prealloc_space *);
+
+typedef void (*btf_trace_ext4_discard_preallocations)(void *, struct inode *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_mb_discard_preallocations)(void *, struct super_block *, int);
+
+typedef void (*btf_trace_ext4_request_blocks)(void *, struct ext4_allocation_request *);
+
+typedef void (*btf_trace_ext4_allocate_blocks)(void *, struct ext4_allocation_request *, unsigned long long);
+
+typedef void (*btf_trace_ext4_free_blocks)(void *, struct inode *, __u64, unsigned long, int);
+
+typedef void (*btf_trace_ext4_sync_file_enter)(void *, struct file *, int);
+
+typedef void (*btf_trace_ext4_sync_file_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_sync_fs)(void *, struct super_block *, int);
+
+typedef void (*btf_trace_ext4_alloc_da_blocks)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_mballoc_alloc)(void *, struct ext4_allocation_context *);
+
+typedef void (*btf_trace_ext4_mballoc_prealloc)(void *, struct ext4_allocation_context *);
+
+typedef void (*btf_trace_ext4_mballoc_discard)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_mballoc_free)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_forget)(void *, struct inode *, int, __u64);
+
+typedef void (*btf_trace_ext4_da_update_reserve_space)(void *, struct inode *, int, int);
+
+typedef void (*btf_trace_ext4_da_reserve_space)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_da_release_space)(void *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_mb_bitmap_load)(void *, struct super_block *, unsigned long);
+
+typedef void (*btf_trace_ext4_mb_buddy_bitmap_load)(void *, struct super_block *, unsigned long);
+
+typedef void (*btf_trace_ext4_load_inode_bitmap)(void *, struct super_block *, unsigned long);
+
+typedef void (*btf_trace_ext4_read_block_bitmap_load)(void *, struct super_block *, unsigned long, bool);
+
+typedef void (*btf_trace_ext4_fallocate_enter)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_ext4_punch_hole)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_ext4_zero_range)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_ext4_fallocate_exit)(void *, struct inode *, loff_t, unsigned int, int);
+
+typedef void (*btf_trace_ext4_unlink_enter)(void *, struct inode *, struct dentry *);
+
+typedef void (*btf_trace_ext4_unlink_exit)(void *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_truncate_enter)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_truncate_exit)(void *, struct inode *);
+
+typedef void (*btf_trace_ext4_ext_convert_to_initialized_enter)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *);
+
+typedef void (*btf_trace_ext4_ext_convert_to_initialized_fastpath)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *, struct ext4_extent *);
+
+typedef void (*btf_trace_ext4_ext_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_ind_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_ext4_ext_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);
+
+typedef void (*btf_trace_ext4_ind_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);
+
+typedef void (*btf_trace_ext4_ext_load_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t);
+
+typedef void (*btf_trace_ext4_load_inode)(void *, struct super_block *, unsigned long);
+
+typedef void (*btf_trace_ext4_journal_start_sb)(void *, struct super_block *, int, int, int, int, unsigned long);
+
+typedef void (*btf_trace_ext4_journal_start_inode)(void *, struct inode *, int, int, int, int, unsigned long);
+
+typedef void (*btf_trace_ext4_journal_start_reserved)(void *, struct super_block *, int, unsigned long);
+
+typedef void (*btf_trace_ext4_trim_extent)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_trim_all_free)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);
+
+typedef void (*btf_trace_ext4_ext_handle_unwritten_extents)(void *, struct inode *, struct ext4_map_blocks *, int, unsigned int, ext4_fsblk_t);
+
+typedef void (*btf_trace_ext4_get_implied_cluster_alloc_exit)(void *, struct super_block *, struct ext4_map_blocks *, int);
+
+typedef void (*btf_trace_ext4_ext_show_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t, unsigned short);
+
+typedef void (*btf_trace_ext4_remove_blocks)(void *, struct inode *, struct ext4_extent *, ext4_lblk_t, ext4_fsblk_t, struct partial_cluster *);
+
+typedef void (*btf_trace_ext4_ext_rm_leaf)(void *, struct inode *, ext4_lblk_t, struct ext4_extent *, struct partial_cluster *);
+
+typedef void (*btf_trace_ext4_ext_rm_idx)(void *, struct inode *, ext4_fsblk_t);
+
+typedef void (*btf_trace_ext4_ext_remove_space)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int);
+
+typedef void (*btf_trace_ext4_ext_remove_space_done)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, struct partial_cluster *, __le16);
+
+typedef void (*btf_trace_ext4_es_insert_extent)(void *, struct inode *, struct extent_status *);
+
+typedef void (*btf_trace_ext4_es_cache_extent)(void *, struct inode *, struct extent_status *);
+
+typedef void (*btf_trace_ext4_es_remove_extent)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t);
+
+typedef void (*btf_trace_ext4_es_find_extent_range_enter)(void *, struct inode *, ext4_lblk_t);
+
+typedef void (*btf_trace_ext4_es_find_extent_range_exit)(void *, struct inode *, struct extent_status *);
+
+typedef void (*btf_trace_ext4_es_lookup_extent_enter)(void *, struct inode *, ext4_lblk_t);
+
+typedef void (*btf_trace_ext4_es_lookup_extent_exit)(void *, struct inode *, struct extent_status *, int);
+
+typedef void (*btf_trace_ext4_es_shrink_count)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_es_shrink_scan_enter)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_es_shrink_scan_exit)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_collapse_range)(void *, struct inode *, loff_t, loff_t);
+
+typedef void (*btf_trace_ext4_insert_range)(void *, struct inode *, loff_t, loff_t);
+
+typedef void (*btf_trace_ext4_es_shrink)(void *, struct super_block *, int, u64, int, int);
+
+typedef void (*btf_trace_ext4_es_insert_delayed_block)(void *, struct inode *, struct extent_status *, bool);
+
+typedef void (*btf_trace_ext4_fsmap_low_key)(void *, struct super_block *, u32, u32, u64, u64, u64);
+
+typedef void (*btf_trace_ext4_fsmap_high_key)(void *, struct super_block *, u32, u32, u64, u64, u64);
+
+typedef void (*btf_trace_ext4_fsmap_mapping)(void *, struct super_block *, u32, u32, u64, u64, u64);
+
+typedef void (*btf_trace_ext4_getfsmap_low_key)(void *, struct super_block *, struct ext4_fsmap *);
+
+typedef void (*btf_trace_ext4_getfsmap_high_key)(void *, struct super_block *, struct ext4_fsmap *);
+
+typedef void (*btf_trace_ext4_getfsmap_mapping)(void *, struct super_block *, struct ext4_fsmap *);
+
+typedef void (*btf_trace_ext4_shutdown)(void *, struct super_block *, unsigned long);
+
+typedef void (*btf_trace_ext4_error)(void *, struct super_block *, const char *, unsigned int);
+
+typedef void (*btf_trace_ext4_prefetch_bitmaps)(void *, struct super_block *, ext4_group_t, ext4_group_t, unsigned int);
+
+typedef void (*btf_trace_ext4_lazy_itable_init)(void *, struct super_block *, ext4_group_t);
+
+typedef void (*btf_trace_ext4_fc_replay_scan)(void *, struct super_block *, int, int);
+
+typedef void (*btf_trace_ext4_fc_replay)(void *, struct super_block *, int, int, int, int);
+
+typedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *, tid_t);
+
+typedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int, tid_t);
+
+typedef void (*btf_trace_ext4_fc_stats)(void *, struct super_block *);
+
+typedef void (*btf_trace_ext4_fc_track_create)(void *, handle_t *, struct inode *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_fc_track_link)(void *, handle_t *, struct inode *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_fc_track_unlink)(void *, handle_t *, struct inode *, struct dentry *, int);
+
+typedef void (*btf_trace_ext4_fc_track_inode)(void *, handle_t *, struct inode *, int);
+
+typedef void (*btf_trace_ext4_fc_track_range)(void *, handle_t *, struct inode *, long, long, int);
+
+typedef void (*btf_trace_ext4_fc_cleanup)(void *, journal_t *, int, tid_t);
+
+typedef void (*btf_trace_ext4_update_sb)(void *, struct super_block *, ext4_fsblk_t, unsigned int);
+
+struct ext4_lazy_init {
+	unsigned long li_state;
+	struct list_head li_request_list;
+	struct mutex li_list_mtx;
+};
+
+struct ext4_err_translation {
+	int code;
+	int errno;
+};
+
+struct mount_opts {
+	int token;
+	int mount_opt;
+	int flags;
+};
+
+struct ext4_sb_encodings {
+	__u16 magic;
+	char *name;
+	unsigned int version;
+};
+
+enum stat_group {
+	STAT_READ = 0,
+	STAT_WRITE = 1,
+	STAT_DISCARD = 2,
+	STAT_FLUSH = 3,
+	NR_STAT_GROUPS = 4,
+};
+
+enum {
+	Opt_bsd_df = 0,
+	Opt_minix_df = 1,
+	Opt_grpid = 2,
+	Opt_nogrpid = 3,
+	Opt_resgid = 4,
+	Opt_resuid = 5,
+	Opt_sb = 6,
+	Opt_nouid32 = 7,
+	Opt_debug = 8,
+	Opt_removed = 9,
+	Opt_user_xattr = 10,
+	Opt_acl = 11,
+	Opt_auto_da_alloc = 12,
+	Opt_noauto_da_alloc = 13,
+	Opt_noload = 14,
+	Opt_commit = 15,
+	Opt_min_batch_time = 16,
+	Opt_max_batch_time = 17,
+	Opt_journal_dev = 18,
+	Opt_journal_path = 19,
+	Opt_journal_checksum = 20,
+	Opt_journal_async_commit = 21,
+	Opt_abort = 22,
+	Opt_data_journal = 23,
+	Opt_data_ordered = 24,
+	Opt_data_writeback = 25,
+	Opt_data_err_abort = 26,
+	Opt_data_err_ignore = 27,
+	Opt_test_dummy_encryption = 28,
+	Opt_inlinecrypt = 29,
+	Opt_usrjquota = 30,
+	Opt_grpjquota = 31,
+	Opt_quota___2 = 32,
+	Opt_noquota = 33,
+	Opt_barrier = 34,
+	Opt_nobarrier = 35,
+	Opt_err___2 = 36,
+	Opt_usrquota___2 = 37,
+	Opt_grpquota___2 = 38,
+	Opt_prjquota = 39,
+	Opt_dax = 40,
+	Opt_dax_always = 41,
+	Opt_dax_inode = 42,
+	Opt_dax_never = 43,
+	Opt_stripe = 44,
+	Opt_delalloc = 45,
+	Opt_nodelalloc = 46,
+	Opt_warn_on_error = 47,
+	Opt_nowarn_on_error = 48,
+	Opt_mblk_io_submit = 49,
+	Opt_debug_want_extra_isize = 50,
+	Opt_nomblk_io_submit = 51,
+	Opt_block_validity = 52,
+	Opt_noblock_validity = 53,
+	Opt_inode_readahead_blks = 54,
+	Opt_journal_ioprio = 55,
+	Opt_dioread_nolock = 56,
+	Opt_dioread_lock = 57,
+	Opt_discard = 58,
+	Opt_nodiscard = 59,
+	Opt_init_itable = 60,
+	Opt_noinit_itable = 61,
+	Opt_max_dir_size_kb = 62,
+	Opt_nojournal_checksum = 63,
+	Opt_nombcache = 64,
+	Opt_no_prefetch_block_bitmaps = 65,
+	Opt_mb_optimize_scan = 66,
+	Opt_errors = 67,
+	Opt_data = 68,
+	Opt_data_err = 69,
+	Opt_jqfmt = 70,
+	Opt_dax_type = 71,
+};
+
+enum {
+	IOPRIO_CLASS_NONE = 0,
+	IOPRIO_CLASS_RT = 1,
+	IOPRIO_CLASS_BE = 2,
+	IOPRIO_CLASS_IDLE = 3,
+	IOPRIO_CLASS_INVALID = 7,
+};
+
+enum {
+	IOPRIO_HINT_NONE = 0,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_1 = 1,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_2 = 2,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_3 = 3,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_4 = 4,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_5 = 5,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_6 = 6,
+	IOPRIO_HINT_DEV_DURATION_LIMIT_7 = 7,
+};
+
+enum {
+	I_DATA_SEM_NORMAL = 0,
+	I_DATA_SEM_OTHER = 1,
+	I_DATA_SEM_QUOTA = 2,
+	I_DATA_SEM_EA = 3,
+};
+
+struct trace_event_raw_ext4_other_inode_update_time {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t orig_ino;
+	uid_t uid;
+	gid_t gid;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_free_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	uid_t uid;
+	gid_t gid;
+	__u64 blocks;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_request_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t dir;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_allocate_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t dir;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_evict_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int nlink;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_drop_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int drop;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_nfs_commit_metadata {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mark_inode_dirty {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long ip;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_begin_ordered_truncate {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t new_size;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__write_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__write_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	unsigned int copied;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_writepages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	long nr_to_write;
+	long pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	unsigned long writeback_index;
+	int sync_mode;
+	char for_kupdate;
+	char range_cyclic;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_write_pages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long first_page;
+	long nr_to_write;
+	int sync_mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_write_pages_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 lblk;
+	__u32 len;
+	__u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_writepages_result {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int ret;
+	int pages_written;
+	long pages_skipped;
+	unsigned long writeback_index;
+	int sync_mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__folio_op {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long index;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_invalidate_folio_op {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long index;
+	size_t offset;
+	size_t length;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_discard_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	__u64 blk;
+	__u64 count;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__mb_new_pa {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 pa_pstart;
+	__u64 pa_lstart;
+	__u32 pa_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mb_release_inode_pa {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	__u32 count;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mb_release_group_pa {
+	struct trace_entry ent;
+	dev_t dev;
+	__u64 pa_pstart;
+	__u32 pa_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_discard_preallocations {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int len;
+	unsigned int needed;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mb_discard_preallocations {
+	struct trace_entry ent;
+	dev_t dev;
+	int needed;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_request_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int len;
+	__u32 logical;
+	__u32 lleft;
+	__u32 lright;
+	__u64 goal;
+	__u64 pleft;
+	__u64 pright;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_allocate_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	unsigned int len;
+	__u32 logical;
+	__u32 lleft;
+	__u32 lright;
+	__u64 goal;
+	__u64 pleft;
+	__u64 pright;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_free_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	unsigned long count;
+	int flags;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_sync_file_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t parent;
+	int datasync;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_sync_file_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_sync_fs {
+	struct trace_entry ent;
+	dev_t dev;
+	int wait;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_alloc_da_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int data_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mballoc_alloc {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u32 orig_logical;
+	int orig_start;
+	__u32 orig_group;
+	int orig_len;
+	__u32 goal_logical;
+	int goal_start;
+	__u32 goal_group;
+	int goal_len;
+	__u32 result_logical;
+	int result_start;
+	__u32 result_group;
+	int result_len;
+	__u16 found;
+	__u16 groups;
+	__u16 buddy;
+	__u16 flags;
+	__u16 tail;
+	__u8 cr;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_mballoc_prealloc {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u32 orig_logical;
+	int orig_start;
+	__u32 orig_group;
+	int orig_len;
+	__u32 result_logical;
+	int result_start;
+	__u32 result_group;
+	int result_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__mballoc {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int result_start;
+	__u32 result_group;
+	int result_len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_forget {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 block;
+	int is_metadata;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_update_reserve_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 i_blocks;
+	int used_blocks;
+	int reserved_data_blocks;
+	int quota_claim;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_reserve_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 i_blocks;
+	int reserved_data_blocks;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_da_release_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 i_blocks;
+	int freed_blocks;
+	int reserved_data_blocks;
+	__u16 mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__bitmap_load {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_read_block_bitmap_load {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	bool prefetch;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__fallocate_mode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	loff_t len;
+	int mode;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fallocate_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int blocks;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_unlink_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t parent;
+	loff_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_unlink_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__truncate {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	__u64 blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_convert_to_initialized_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	ext4_lblk_t u_lblk;
+	unsigned int u_len;
+	ext4_fsblk_t u_pblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_convert_to_initialized_fastpath {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t m_lblk;
+	unsigned int m_len;
+	ext4_lblk_t u_lblk;
+	unsigned int u_len;
+	ext4_fsblk_t u_pblk;
+	ext4_lblk_t i_lblk;
+	unsigned int i_len;
+	ext4_fsblk_t i_pblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__map_blocks_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	unsigned int len;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__map_blocks_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int flags;
+	ext4_fsblk_t pblk;
+	ext4_lblk_t lblk;
+	unsigned int len;
+	unsigned int mflags;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_load_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_fsblk_t pblk;
+	ext4_lblk_t lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_load_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_journal_start_sb {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long ip;
+	int blocks;
+	int rsv_blocks;
+	int revoke_creds;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_journal_start_inode {
+	struct trace_entry ent;
+	unsigned long ino;
+	dev_t dev;
+	unsigned long ip;
+	int blocks;
+	int rsv_blocks;
+	int revoke_creds;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_journal_start_reserved {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long ip;
+	int blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__trim {
+	struct trace_entry ent;
+	int dev_major;
+	int dev_minor;
+	__u32 group;
+	int start;
+	int len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_handle_unwritten_extents {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int flags;
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	unsigned int len;
+	unsigned int allocated;
+	ext4_fsblk_t newblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_get_implied_cluster_alloc_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int flags;
+	ext4_lblk_t lblk;
+	ext4_fsblk_t pblk;
+	unsigned int len;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_show_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_fsblk_t pblk;
+	ext4_lblk_t lblk;
+	unsigned short len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_remove_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t from;
+	ext4_lblk_t to;
+	ext4_fsblk_t ee_pblk;
+	ext4_lblk_t ee_lblk;
+	unsigned short ee_len;
+	ext4_fsblk_t pc_pclu;
+	ext4_lblk_t pc_lblk;
+	int pc_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_rm_leaf {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t start;
+	ext4_lblk_t ee_lblk;
+	ext4_fsblk_t ee_pblk;
+	short ee_len;
+	ext4_fsblk_t pc_pclu;
+	ext4_lblk_t pc_lblk;
+	int pc_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_rm_idx {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_fsblk_t pblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_remove_space {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+	int depth;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_ext_remove_space_done {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+	int depth;
+	ext4_fsblk_t pc_pclu;
+	ext4_lblk_t pc_lblk;
+	int pc_state;
+	unsigned short eh_entries;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__es_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_remove_extent {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t lblk;
+	loff_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_find_extent_range_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_find_extent_range_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_lookup_extent_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_lookup_extent_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	int found;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4__es_shrink_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	int nr_to_scan;
+	int cache_cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_shrink_scan_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	int nr_shrunk;
+	int cache_cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_collapse_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	loff_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_insert_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	loff_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_shrink {
+	struct trace_entry ent;
+	dev_t dev;
+	int nr_shrunk;
+	unsigned long long scan_time;
+	int nr_skipped;
+	int retried;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_es_insert_delayed_block {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ext4_lblk_t lblk;
+	ext4_lblk_t len;
+	ext4_fsblk_t pblk;
+	char status;
+	bool allocated;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fsmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t keydev;
+	u32 agno;
+	u64 bno;
+	u64 len;
+	u64 owner;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_getfsmap_class {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t keydev;
+	u64 block;
+	u64 len;
+	u64 owner;
+	u64 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_shutdown {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_error {
+	struct trace_entry ent;
+	dev_t dev;
+	const char *function;
+	unsigned int line;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_prefetch_bitmaps {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	__u32 next;
+	__u32 ios;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_lazy_itable_init {
+	struct trace_entry ent;
+	dev_t dev;
+	__u32 group;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_replay_scan {
+	struct trace_entry ent;
+	dev_t dev;
+	int error;
+	int off;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_replay {
+	struct trace_entry ent;
+	dev_t dev;
+	int tag;
+	int ino;
+	int priv1;
+	int priv2;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_commit_start {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_commit_stop {
+	struct trace_entry ent;
+	dev_t dev;
+	int nblks;
+	int reason;
+	int num_fc;
+	int num_fc_ineligible;
+	int nblks_agg;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int fc_ineligible_rc[10];
+	unsigned long fc_commits;
+	unsigned long fc_ineligible_commits;
+	unsigned long fc_numblks;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_track_dentry {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_track_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_track_range {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t t_tid;
+	ino_t i_ino;
+	tid_t i_sync_tid;
+	long start;
+	long end;
+	int error;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_fc_cleanup {
+	struct trace_entry ent;
+	dev_t dev;
+	int j_fc_off;
+	int full;
+	tid_t tid;
+	char __data[0];
+};
+
+struct trace_event_raw_ext4_update_sb {
+	struct trace_entry ent;
+	dev_t dev;
+	ext4_fsblk_t fsblk;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct ext4_journal_cb_entry {
+	struct list_head jce_list;
+	void (*jce_func)(struct super_block *, struct ext4_journal_cb_entry *, int);
+};
+
+struct ext4_fs_context {
+	char *s_qf_names[3];
+	struct fscrypt_dummy_policy dummy_enc_policy;
+	int s_jquota_fmt;
+	unsigned short qname_spec;
+	unsigned long vals_s_flags;
+	unsigned long mask_s_flags;
+	unsigned long journal_devnum;
+	unsigned long s_commit_interval;
+	unsigned long s_stripe;
+	unsigned int s_inode_readahead_blks;
+	unsigned int s_want_extra_isize;
+	unsigned int s_li_wait_mult;
+	unsigned int s_max_dir_size_kb;
+	unsigned int journal_ioprio;
+	unsigned int vals_s_mount_opt;
+	unsigned int mask_s_mount_opt;
+	unsigned int vals_s_mount_opt2;
+	unsigned int mask_s_mount_opt2;
+	unsigned int opt_flags;
+	unsigned int spec;
+	u32 s_max_batch_time;
+	u32 s_min_batch_time;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	ext4_fsblk_t s_sb_block;
+};
+
+struct ext4_mount_options {
+	unsigned long s_mount_opt;
+	unsigned long s_mount_opt2;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	unsigned long s_commit_interval;
+	u32 s_min_batch_time;
+	u32 s_max_batch_time;
+	int s_jquota_fmt;
+	char *s_qf_names[3];
+};
+
+struct trace_event_data_offsets_ext4_other_inode_update_time {};
+
+struct trace_event_data_offsets_ext4_free_inode {};
+
+struct trace_event_data_offsets_ext4_request_inode {};
+
+struct trace_event_data_offsets_ext4_allocate_inode {};
+
+struct trace_event_data_offsets_ext4_evict_inode {};
+
+struct trace_event_data_offsets_ext4_drop_inode {};
+
+struct trace_event_data_offsets_ext4_nfs_commit_metadata {};
+
+struct trace_event_data_offsets_ext4_mark_inode_dirty {};
+
+struct trace_event_data_offsets_ext4_begin_ordered_truncate {};
+
+struct trace_event_data_offsets_ext4__write_begin {};
+
+struct trace_event_data_offsets_ext4__write_end {};
+
+struct trace_event_data_offsets_ext4_writepages {};
+
+struct trace_event_data_offsets_ext4_da_write_pages {};
+
+struct trace_event_data_offsets_ext4_da_write_pages_extent {};
+
+struct trace_event_data_offsets_ext4_writepages_result {};
+
+struct trace_event_data_offsets_ext4__folio_op {};
+
+struct trace_event_data_offsets_ext4_invalidate_folio_op {};
+
+struct trace_event_data_offsets_ext4_discard_blocks {};
+
+struct trace_event_data_offsets_ext4__mb_new_pa {};
+
+struct trace_event_data_offsets_ext4_mb_release_inode_pa {};
+
+struct trace_event_data_offsets_ext4_mb_release_group_pa {};
+
+struct trace_event_data_offsets_ext4_discard_preallocations {};
+
+struct trace_event_data_offsets_ext4_mb_discard_preallocations {};
+
+struct trace_event_data_offsets_ext4_request_blocks {};
+
+struct trace_event_data_offsets_ext4_allocate_blocks {};
+
+struct trace_event_data_offsets_ext4_free_blocks {};
+
+struct trace_event_data_offsets_ext4_sync_file_enter {};
+
+struct trace_event_data_offsets_ext4_sync_file_exit {};
+
+struct trace_event_data_offsets_ext4_sync_fs {};
+
+struct trace_event_data_offsets_ext4_alloc_da_blocks {};
+
+struct trace_event_data_offsets_ext4_mballoc_alloc {};
+
+struct trace_event_data_offsets_ext4_mballoc_prealloc {};
+
+struct trace_event_data_offsets_ext4__mballoc {};
+
+struct trace_event_data_offsets_ext4_forget {};
+
+struct trace_event_data_offsets_ext4_da_update_reserve_space {};
+
+struct trace_event_data_offsets_ext4_da_reserve_space {};
+
+struct trace_event_data_offsets_ext4_da_release_space {};
+
+struct trace_event_data_offsets_ext4__bitmap_load {};
+
+struct trace_event_data_offsets_ext4_read_block_bitmap_load {};
+
+struct trace_event_data_offsets_ext4__fallocate_mode {};
+
+struct trace_event_data_offsets_ext4_fallocate_exit {};
+
+struct trace_event_data_offsets_ext4_unlink_enter {};
+
+struct trace_event_data_offsets_ext4_unlink_exit {};
+
+struct trace_event_data_offsets_ext4__truncate {};
+
+struct trace_event_data_offsets_ext4_ext_convert_to_initialized_enter {};
+
+struct trace_event_data_offsets_ext4_ext_convert_to_initialized_fastpath {};
+
+struct trace_event_data_offsets_ext4__map_blocks_enter {};
+
+struct trace_event_data_offsets_ext4__map_blocks_exit {};
+
+struct trace_event_data_offsets_ext4_ext_load_extent {};
+
+struct trace_event_data_offsets_ext4_load_inode {};
+
+struct trace_event_data_offsets_ext4_journal_start_sb {};
+
+struct trace_event_data_offsets_ext4_journal_start_inode {};
+
+struct trace_event_data_offsets_ext4_journal_start_reserved {};
+
+struct trace_event_data_offsets_ext4__trim {};
+
+struct trace_event_data_offsets_ext4_ext_handle_unwritten_extents {};
+
+struct trace_event_data_offsets_ext4_get_implied_cluster_alloc_exit {};
+
+struct trace_event_data_offsets_ext4_ext_show_extent {};
+
+struct trace_event_data_offsets_ext4_remove_blocks {};
+
+struct trace_event_data_offsets_ext4_ext_rm_leaf {};
+
+struct trace_event_data_offsets_ext4_ext_rm_idx {};
+
+struct trace_event_data_offsets_ext4_ext_remove_space {};
+
+struct trace_event_data_offsets_ext4_ext_remove_space_done {};
+
+struct trace_event_data_offsets_ext4__es_extent {};
+
+struct trace_event_data_offsets_ext4_es_remove_extent {};
+
+struct trace_event_data_offsets_ext4_es_find_extent_range_enter {};
+
+struct trace_event_data_offsets_ext4_es_find_extent_range_exit {};
+
+struct trace_event_data_offsets_ext4_es_lookup_extent_enter {};
+
+struct trace_event_data_offsets_ext4_es_lookup_extent_exit {};
+
+struct trace_event_data_offsets_ext4__es_shrink_enter {};
+
+struct trace_event_data_offsets_ext4_es_shrink_scan_exit {};
+
+struct trace_event_data_offsets_ext4_collapse_range {};
+
+struct trace_event_data_offsets_ext4_insert_range {};
+
+struct trace_event_data_offsets_ext4_es_shrink {};
+
+struct trace_event_data_offsets_ext4_es_insert_delayed_block {};
+
+struct trace_event_data_offsets_ext4_fsmap_class {};
+
+struct trace_event_data_offsets_ext4_getfsmap_class {};
+
+struct trace_event_data_offsets_ext4_shutdown {};
+
+struct trace_event_data_offsets_ext4_error {};
+
+struct trace_event_data_offsets_ext4_prefetch_bitmaps {};
+
+struct trace_event_data_offsets_ext4_lazy_itable_init {};
+
+struct trace_event_data_offsets_ext4_fc_replay_scan {};
+
+struct trace_event_data_offsets_ext4_fc_replay {};
+
+struct trace_event_data_offsets_ext4_fc_commit_start {};
+
+struct trace_event_data_offsets_ext4_fc_commit_stop {};
+
+struct trace_event_data_offsets_ext4_fc_stats {};
+
+struct trace_event_data_offsets_ext4_fc_track_dentry {};
+
+struct trace_event_data_offsets_ext4_fc_track_inode {};
+
+struct trace_event_data_offsets_ext4_fc_track_range {};
+
+struct trace_event_data_offsets_ext4_fc_cleanup {};
+
+struct trace_event_data_offsets_ext4_update_sb {};
+
+struct ext4_attr {
+	struct attribute attr;
+	short attr_id;
+	short attr_ptr;
+	unsigned short attr_size;
+	union {
+		int offset;
+		void *explicit_ptr;
+	} u;
+};
+
+enum {
+	attr_noop = 0,
+	attr_delayed_allocation_blocks = 1,
+	attr_session_write_kbytes = 2,
+	attr_lifetime_write_kbytes = 3,
+	attr_reserved_clusters = 4,
+	attr_sra_exceeded_retry_limit = 5,
+	attr_inode_readahead = 6,
+	attr_trigger_test_error = 7,
+	attr_first_error_time = 8,
+	attr_last_error_time = 9,
+	attr_feature = 10,
+	attr_pointer_ui = 11,
+	attr_pointer_ul = 12,
+	attr_pointer_u64 = 13,
+	attr_pointer_u8 = 14,
+	attr_pointer_string = 15,
+	attr_pointer_atomic = 16,
+	attr_journal_task = 17,
+};
+
+enum {
+	ptr_explicit = 0,
+	ptr_ext4_sb_info_offset = 1,
+	ptr_ext4_super_block_offset = 2,
+};
+
+struct ext4_xattr_header {
+	__le32 h_magic;
+	__le32 h_refcount;
+	__le32 h_blocks;
+	__le32 h_hash;
+	__le32 h_checksum;
+	__u32 h_reserved[3];
+};
+
+struct ext4_xattr_block_find {
+	struct ext4_xattr_search s;
+	struct buffer_head *bh;
+};
+
+enum {
+	EXT4_FC_STATUS_OK = 0,
+	EXT4_FC_STATUS_INELIGIBLE = 1,
+	EXT4_FC_STATUS_SKIPPED = 2,
+	EXT4_FC_STATUS_FAILED = 3,
+};
+
+struct ext4_fc_dentry_update {
+	int fcd_op;
+	int fcd_parent;
+	int fcd_ino;
+	struct qstr fcd_name;
+	unsigned char fcd_iname[32];
+	struct list_head fcd_list;
+	struct list_head fcd_dilist;
+};
+
+struct __track_dentry_update_args {
+	struct dentry *dentry;
+	int op;
+};
+
+struct __track_range_args {
+	ext4_lblk_t start;
+	ext4_lblk_t end;
+};
+
+struct ext4_fc_tl {
+	__le16 fc_tag;
+	__le16 fc_len;
+};
+
+struct ext4_fc_head {
+	__le32 fc_features;
+	__le32 fc_tid;
+};
+
+struct ext4_fc_tail {
+	__le32 fc_tid;
+	__le32 fc_crc;
+};
+
+struct ext4_fc_add_range {
+	__le32 fc_ino;
+	__u8 fc_ex[12];
+};
+
+struct ext4_fc_tl_mem {
+	u16 fc_tag;
+	u16 fc_len;
+};
+
+struct ext4_fc_inode {
+	__le32 fc_ino;
+	__u8 fc_raw_inode[0];
+};
+
+struct ext4_fc_del_range {
+	__le32 fc_ino;
+	__le32 fc_lblk;
+	__le32 fc_len;
+};
+
+struct dentry_info_args {
+	int parent_ino;
+	int dname_len;
+	int ino;
+	int inode_len;
+	char *dname;
+};
+
+struct ext4_fc_dentry_info {
+	__le32 fc_parent_ino;
+	__le32 fc_ino;
+	__u8 fc_dname[0];
+};
+
+struct ext4_orphan_block_tail {
+	__le32 ob_magic;
+	__le32 ob_checksum;
+};
+
+typedef struct {
+	__le32 a_version;
+} ext4_acl_header;
+
+typedef struct {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+} ext4_acl_entry;
+
+struct journal_block_tag_s {
+	__be32 t_blocknr;
+	__be16 t_checksum;
+	__be16 t_flags;
+	__be32 t_blocknr_high;
+};
+
+typedef struct journal_block_tag_s journal_block_tag_t;
+
+struct journal_block_tag3_s {
+	__be32 t_blocknr;
+	__be32 t_flags;
+	__be32 t_blocknr_high;
+	__be32 t_checksum;
+};
+
+typedef struct journal_block_tag3_s journal_block_tag3_t;
+
+struct commit_header {
+	__be32 h_magic;
+	__be32 h_blocktype;
+	__be32 h_sequence;
+	unsigned char h_chksum_type;
+	unsigned char h_chksum_size;
+	unsigned char h_padding[2];
+	__be32 h_chksum[8];
+	__be64 h_commit_sec;
+	__be32 h_commit_nsec;
+};
+
+struct jbd2_journal_block_tail {
+	__be32 t_checksum;
+};
+
+struct jbd2_journal_revoke_header_s {
+	journal_header_t r_header;
+	__be32 r_count;
+};
+
+typedef struct jbd2_journal_revoke_header_s jbd2_journal_revoke_header_t;
+
+struct recovery_info {
+	tid_t start_transaction;
+	tid_t end_transaction;
+	unsigned long head_block;
+	int nr_replays;
+	int nr_revokes;
+	int nr_revoke_hits;
+};
+
+enum shrink_type {
+	SHRINK_DESTROY = 0,
+	SHRINK_BUSY_STOP = 1,
+	SHRINK_BUSY_SKIP = 2,
+};
+
+struct jbd2_revoke_table_s {
+	int hash_size;
+	int hash_shift;
+	struct list_head *hash_table;
+};
+
+struct jbd2_revoke_record_s {
+	struct list_head hash;
+	tid_t sequence;
+	unsigned long long blocknr;
+};
+
+typedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);
+
+typedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_locking)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_flushing)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_commit_logging)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_drop_transaction)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_end_commit)(void *, journal_t *, transaction_t *);
+
+typedef void (*btf_trace_jbd2_submit_inode_data)(void *, struct inode *);
+
+typedef void (*btf_trace_jbd2_handle_start)(void *, dev_t, tid_t, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_jbd2_handle_restart)(void *, dev_t, tid_t, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_jbd2_handle_extend)(void *, dev_t, tid_t, unsigned int, unsigned int, int, int);
+
+typedef void (*btf_trace_jbd2_handle_stats)(void *, dev_t, tid_t, unsigned int, unsigned int, int, int, int, int);
+
+typedef void (*btf_trace_jbd2_run_stats)(void *, dev_t, tid_t, struct transaction_run_stats_s *);
+
+typedef void (*btf_trace_jbd2_checkpoint_stats)(void *, dev_t, tid_t, struct transaction_chp_stats_s *);
+
+typedef void (*btf_trace_jbd2_update_log_tail)(void *, journal_t *, tid_t, unsigned long, unsigned long);
+
+typedef void (*btf_trace_jbd2_write_superblock)(void *, journal_t *, blk_opf_t);
+
+typedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, unsigned long);
+
+typedef void (*btf_trace_jbd2_shrink_count)(void *, journal_t *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_jbd2_shrink_scan_enter)(void *, journal_t *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_jbd2_shrink_scan_exit)(void *, journal_t *, unsigned long, unsigned long, unsigned long);
+
+typedef void (*btf_trace_jbd2_shrink_checkpoint_list)(void *, journal_t *, tid_t, tid_t, tid_t, unsigned long, tid_t);
+
+struct trace_event_raw_jbd2_checkpoint {
+	struct trace_entry ent;
+	dev_t dev;
+	int result;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	char sync_commit;
+	tid_t transaction;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_end_commit {
+	struct trace_entry ent;
+	dev_t dev;
+	char sync_commit;
+	tid_t transaction;
+	tid_t head;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_submit_inode_data {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_start_class {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned int type;
+	unsigned int line_no;
+	int requested_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_extend {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned int type;
+	unsigned int line_no;
+	int buffer_credits;
+	int requested_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_handle_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned int type;
+	unsigned int line_no;
+	int interval;
+	int sync;
+	int requested_blocks;
+	int dirtied_blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_run_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned long wait;
+	unsigned long request_delay;
+	unsigned long running;
+	unsigned long locked;
+	unsigned long flushing;
+	unsigned long logging;
+	__u32 handle_count;
+	__u32 blocks;
+	__u32 blocks_logged;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_checkpoint_stats {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tid;
+	unsigned long chp_time;
+	__u32 forced_to_close;
+	__u32 written;
+	__u32 dropped;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_update_log_tail {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t tail_sequence;
+	tid_t first_tid;
+	unsigned long block_nr;
+	unsigned long freed;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_write_superblock {
+	struct trace_entry ent;
+	dev_t dev;
+	blk_opf_t write_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_lock_buffer_stall {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long stall_ms;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_journal_shrink {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long nr_to_scan;
+	unsigned long count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_scan_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long nr_to_scan;
+	unsigned long nr_shrunk;
+	unsigned long count;
+	char __data[0];
+};
+
+struct trace_event_raw_jbd2_shrink_checkpoint_list {
+	struct trace_entry ent;
+	dev_t dev;
+	tid_t first_tid;
+	tid_t tid;
+	tid_t last_tid;
+	unsigned long nr_freed;
+	tid_t next_tid;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_jbd2_checkpoint {};
+
+struct trace_event_data_offsets_jbd2_commit {};
+
+struct trace_event_data_offsets_jbd2_end_commit {};
+
+struct trace_event_data_offsets_jbd2_submit_inode_data {};
+
+struct trace_event_data_offsets_jbd2_handle_start_class {};
+
+struct trace_event_data_offsets_jbd2_handle_extend {};
+
+struct trace_event_data_offsets_jbd2_handle_stats {};
+
+struct trace_event_data_offsets_jbd2_run_stats {};
+
+struct trace_event_data_offsets_jbd2_checkpoint_stats {};
+
+struct trace_event_data_offsets_jbd2_update_log_tail {};
+
+struct trace_event_data_offsets_jbd2_write_superblock {};
+
+struct trace_event_data_offsets_jbd2_lock_buffer_stall {};
+
+struct trace_event_data_offsets_jbd2_journal_shrink {};
+
+struct trace_event_data_offsets_jbd2_shrink_scan_exit {};
+
+struct trace_event_data_offsets_jbd2_shrink_checkpoint_list {};
+
+struct jbd2_stats_proc_session {
+	journal_t *journal;
+	struct transaction_stats_s *stats;
+	int start;
+	int max;
+};
+
+enum ramfs_param {
+	Opt_mode___3 = 0,
+};
+
+struct ramfs_mount_opts {
+	umode_t mode;
+};
+
+struct ramfs_fs_info {
+	struct ramfs_mount_opts mount_opts;
+};
+
+struct fat_cache {
+	struct list_head cache_list;
+	int nr_contig;
+	int fcluster;
+	int dcluster;
+};
+
+struct msdos_inode_info {
+	spinlock_t cache_lru_lock;
+	struct list_head cache_lru;
+	int nr_caches;
+	unsigned int cache_valid_id;
+	loff_t mmu_private;
+	int i_start;
+	int i_logstart;
+	int i_attrs;
+	loff_t i_pos;
+	struct hlist_node i_fat_hash;
+	struct hlist_node i_dir_hash;
+	struct rw_semaphore truncate_lock;
+	struct timespec64 i_crtime;
+	struct inode vfs_inode;
+};
+
+struct fat_mount_options {
+	kuid_t fs_uid;
+	kgid_t fs_gid;
+	unsigned short fs_fmask;
+	unsigned short fs_dmask;
+	unsigned short codepage;
+	int time_offset;
+	char *iocharset;
+	unsigned short shortname;
+	unsigned char name_check;
+	unsigned char errors;
+	unsigned char nfs;
+	unsigned short allow_utime;
+	unsigned int quiet: 1;
+	unsigned int showexec: 1;
+	unsigned int sys_immutable: 1;
+	unsigned int dotsOK: 1;
+	unsigned int isvfat: 1;
+	unsigned int utf8: 1;
+	unsigned int unicode_xlate: 1;
+	unsigned int numtail: 1;
+	unsigned int flush: 1;
+	unsigned int nocase: 1;
+	unsigned int usefree: 1;
+	unsigned int tz_set: 1;
+	unsigned int rodir: 1;
+	unsigned int discard: 1;
+	unsigned int dos1xfloppy: 1;
+};
+
+struct nls_table;
+
+struct fatent_operations;
+
+struct msdos_sb_info {
+	unsigned short sec_per_clus;
+	unsigned short cluster_bits;
+	unsigned int cluster_size;
+	unsigned char fats;
+	unsigned char fat_bits;
+	unsigned short fat_start;
+	unsigned long fat_length;
+	unsigned long dir_start;
+	unsigned short dir_entries;
+	unsigned long data_start;
+	unsigned long max_cluster;
+	unsigned long root_cluster;
+	unsigned long fsinfo_sector;
+	struct mutex fat_lock;
+	struct mutex nfs_build_inode_lock;
+	struct mutex s_lock;
+	unsigned int prev_free;
+	unsigned int free_clusters;
+	unsigned int free_clus_valid;
+	struct fat_mount_options options;
+	struct nls_table *nls_disk;
+	struct nls_table *nls_io;
+	const void *dir_ops;
+	int dir_per_block;
+	int dir_per_block_bits;
+	unsigned int vol_id;
+	int fatent_shift;
+	const struct fatent_operations *fatent_ops;
+	struct inode *fat_inode;
+	struct inode *fsinfo_inode;
+	struct ratelimit_state ratelimit;
+	spinlock_t inode_hash_lock;
+	struct hlist_head inode_hashtable[256];
+	spinlock_t dir_hash_lock;
+	struct hlist_head dir_hashtable[256];
+	unsigned int dirty;
+	struct callback_head rcu;
+};
+
+typedef u16 wchar_t;
+
+struct nls_table {
+	const char *charset;
+	const char *alias;
+	int (*uni2char)(wchar_t, unsigned char *, int);
+	int (*char2uni)(const unsigned char *, int, wchar_t *);
+	const unsigned char *charset2lower;
+	const unsigned char *charset2upper;
+	struct module *owner;
+	struct nls_table *next;
+};
+
+struct fat_entry;
+
+struct fatent_operations {
+	void (*ent_blocknr)(struct super_block *, int, int *, sector_t *);
+	void (*ent_set_ptr)(struct fat_entry *, int);
+	int (*ent_bread)(struct super_block *, struct fat_entry *, int, sector_t);
+	int (*ent_get)(struct fat_entry *);
+	void (*ent_put)(struct fat_entry *, int);
+	int (*ent_next)(struct fat_entry *);
+};
+
+struct fat_cache_id {
+	unsigned int id;
+	int nr_contig;
+	int fcluster;
+	int dcluster;
+};
+
+struct fat_entry {
+	int entry;
+	union {
+		u8 *ent12_p[2];
+		__le16 *ent16_p;
+		__le32 *ent32_p;
+	} u;
+	int nr_bhs;
+	struct buffer_head *bhs[2];
+	struct inode *fat_inode;
+};
+
+enum {
+	PARSE_INVALID = 1,
+	PARSE_NOT_LONGNAME = 2,
+	PARSE_EOF = 3,
+};
+
+enum utf16_endian {
+	UTF16_HOST_ENDIAN = 0,
+	UTF16_LITTLE_ENDIAN = 1,
+	UTF16_BIG_ENDIAN = 2,
+};
+
+struct msdos_dir_entry {
+	__u8 name[11];
+	__u8 attr;
+	__u8 lcase;
+	__u8 ctime_cs;
+	__le16 ctime;
+	__le16 cdate;
+	__le16 adate;
+	__le16 starthi;
+	__le16 time;
+	__le16 date;
+	__le16 start;
+	__le32 size;
+};
+
+typedef unsigned long long llu;
+
+struct msdos_dir_slot {
+	__u8 id;
+	__u8 name0_4[10];
+	__u8 attr;
+	__u8 reserved;
+	__u8 alias_checksum;
+	__u8 name5_10[12];
+	__le16 start;
+	__u8 name11_12[4];
+};
+
+struct __fat_dirent {
+	long d_ino;
+	__kernel_off_t d_off;
+	unsigned short d_reclen;
+	char d_name[256];
+};
+
+struct fat_ioctl_filldir_callback {
+	struct dir_context ctx;
+	void __attribute__((btf_type_tag("user"))) *dirent;
+	int result;
+	const char *longname;
+	int long_len;
+	const char *shortname;
+	int short_len;
+};
+
+struct fat_slot_info {
+	loff_t i_pos;
+	loff_t slot_off;
+	int nr_slots;
+	struct msdos_dir_entry *de;
+	struct buffer_head *bh;
+};
+
+struct compat_dirent {
+	u32 d_ino;
+	compat_off_t d_off;
+	u16 d_reclen;
+	char d_name[256];
+};
+
+struct fatent_ra {
+	sector_t cur;
+	sector_t limit;
+	unsigned int ra_blocks;
+	sector_t ra_advance;
+	sector_t ra_next;
+	sector_t ra_limit;
+};
+
+struct fat_floppy_defaults {
+	unsigned int nr_sectors;
+	unsigned int sec_per_clus;
+	unsigned int dir_entries;
+	unsigned int media;
+	unsigned int fat_length;
+};
+
+enum {
+	Opt_check_n = 0,
+	Opt_check_r = 1,
+	Opt_check_s = 2,
+	Opt_uid___3 = 3,
+	Opt_gid___4 = 4,
+	Opt_umask = 5,
+	Opt_dmask = 6,
+	Opt_fmask = 7,
+	Opt_allow_utime = 8,
+	Opt_codepage = 9,
+	Opt_usefree = 10,
+	Opt_nocase = 11,
+	Opt_quiet = 12,
+	Opt_showexec = 13,
+	Opt_debug___2 = 14,
+	Opt_immutable = 15,
+	Opt_dots = 16,
+	Opt_nodots = 17,
+	Opt_charset = 18,
+	Opt_shortname_lower = 19,
+	Opt_shortname_win95 = 20,
+	Opt_shortname_winnt = 21,
+	Opt_shortname_mixed = 22,
+	Opt_utf8_no = 23,
+	Opt_utf8_yes = 24,
+	Opt_uni_xl_no = 25,
+	Opt_uni_xl_yes = 26,
+	Opt_nonumtail_no = 27,
+	Opt_nonumtail_yes = 28,
+	Opt_obsolete = 29,
+	Opt_flush = 30,
+	Opt_tz_utc = 31,
+	Opt_rodir = 32,
+	Opt_err_cont = 33,
+	Opt_err_panic = 34,
+	Opt_err_ro = 35,
+	Opt_discard___2 = 36,
+	Opt_nfs = 37,
+	Opt_time_offset = 38,
+	Opt_nfs_stale_rw = 39,
+	Opt_nfs_nostale_ro = 40,
+	Opt_err___3 = 41,
+	Opt_dos1xfloppy = 42,
+};
+
+struct fat_boot_sector {
+	__u8 ignored[3];
+	__u8 system_id[8];
+	__u8 sector_size[2];
+	__u8 sec_per_clus;
+	__le16 reserved;
+	__u8 fats;
+	__u8 dir_entries[2];
+	__u8 sectors[2];
+	__u8 media;
+	__le16 fat_length;
+	__le16 secs_track;
+	__le16 heads;
+	__le32 hidden;
+	__le32 total_sect;
+	union {
+		struct {
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat16;
+		struct {
+			__le32 length;
+			__le16 flags;
+			__u8 version[2];
+			__le32 root_cluster;
+			__le16 info_sector;
+			__le16 backup_boot;
+			__le16 reserved2[6];
+			__u8 drive_number;
+			__u8 state;
+			__u8 signature;
+			__u8 vol_id[4];
+			__u8 vol_label[11];
+			__u8 fs_type[8];
+		} fat32;
+	};
+};
+
+struct fat_boot_fsinfo {
+	__le32 signature1;
+	__le32 reserved1[120];
+	__le32 signature2;
+	__le32 free_clusters;
+	__le32 next_cluster;
+	__le32 reserved2[4];
+};
+
+struct fat_bios_param_block {
+	u16 fat_sector_size;
+	u8 fat_sec_per_clus;
+	u16 fat_reserved;
+	u8 fat_fats;
+	u16 fat_dir_entries;
+	u16 fat_sectors;
+	u16 fat_fat_length;
+	u32 fat_total_sect;
+	u8 fat16_state;
+	u32 fat16_vol_id;
+	u32 fat32_length;
+	u32 fat32_root_cluster;
+	u16 fat32_info_sector;
+	u8 fat32_state;
+	u32 fat32_vol_id;
+};
+
+struct fat_fid {
+	u32 i_gen;
+	u32 i_pos_low;
+	u16 i_pos_hi;
+	u16 parent_i_pos_hi;
+	u32 parent_i_pos_low;
+	u32 parent_i_gen;
+};
+
+struct shortname_info {
+	unsigned char lower: 1;
+	unsigned char upper: 1;
+	unsigned char valid: 1;
+};
+
+enum exfat_error_mode {
+	EXFAT_ERRORS_CONT = 0,
+	EXFAT_ERRORS_PANIC = 1,
+	EXFAT_ERRORS_RO = 2,
+};
+
+struct exfat_chain {
+	unsigned int dir;
+	unsigned int size;
+	unsigned char flags;
+};
+
+struct exfat_hint {
+	unsigned int clu;
+	union {
+		unsigned int off;
+		int eidx;
+	};
+};
+
+struct exfat_hint_femp {
+	int eidx;
+	int count;
+	struct exfat_chain cur;
+};
+
+struct exfat_inode_info {
+	struct exfat_chain dir;
+	int entry;
+	unsigned int type;
+	unsigned short attr;
+	unsigned int start_clu;
+	unsigned char flags;
+	unsigned int version;
+	struct exfat_hint hint_bmap;
+	struct exfat_hint hint_stat;
+	struct exfat_hint_femp hint_femp;
+	spinlock_t cache_lru_lock;
+	struct list_head cache_lru;
+	int nr_caches;
+	unsigned int cache_valid_id;
+	loff_t i_size_ondisk;
+	loff_t i_size_aligned;
+	loff_t i_pos;
+	struct hlist_node i_hash_fat;
+	struct rw_semaphore truncate_lock;
+	struct inode vfs_inode;
+	struct timespec64 i_crtime;
+};
+
+struct exfat_mount_options {
+	kuid_t fs_uid;
+	kgid_t fs_gid;
+	unsigned short fs_fmask;
+	unsigned short fs_dmask;
+	unsigned short allow_utime;
+	char *iocharset;
+	enum exfat_error_mode errors;
+	unsigned int utf8: 1;
+	unsigned int sys_tz: 1;
+	unsigned int discard: 1;
+	unsigned int keep_last_dots: 1;
+	int time_offset;
+};
+
+struct exfat_sb_info {
+	unsigned long long num_sectors;
+	unsigned int num_clusters;
+	unsigned int cluster_size;
+	unsigned int cluster_size_bits;
+	unsigned int sect_per_clus;
+	unsigned int sect_per_clus_bits;
+	unsigned long long FAT1_start_sector;
+	unsigned long long FAT2_start_sector;
+	unsigned long long data_start_sector;
+	unsigned int num_FAT_sectors;
+	unsigned int root_dir;
+	unsigned int dentries_per_clu;
+	unsigned int vol_flags;
+	unsigned int vol_flags_persistent;
+	struct buffer_head *boot_bh;
+	unsigned int map_clu;
+	unsigned int map_sectors;
+	struct buffer_head **vol_amap;
+	unsigned short *vol_utbl;
+	unsigned int clu_srch_ptr;
+	unsigned int used_clusters;
+	struct mutex s_lock;
+	struct mutex bitmap_lock;
+	struct exfat_mount_options options;
+	struct nls_table *nls_io;
+	struct ratelimit_state ratelimit;
+	spinlock_t inode_hash_lock;
+	struct hlist_head inode_hashtable[256];
+};
+
+struct exfat_entry_set_cache {
+	struct super_block *sb;
+	unsigned int start_off;
+	int num_bh;
+	struct buffer_head *__bh[3];
+	struct buffer_head **bh;
+	unsigned int num_entries;
+	bool modified;
+};
+
+struct exfat_dentry {
+	__u8 type;
+	union {
+		struct {
+			__u8 num_ext;
+			__le16 checksum;
+			__le16 attr;
+			__le16 reserved1;
+			__le16 create_time;
+			__le16 create_date;
+			__le16 modify_time;
+			__le16 modify_date;
+			__le16 access_time;
+			__le16 access_date;
+			__u8 create_time_cs;
+			__u8 modify_time_cs;
+			__u8 create_tz;
+			__u8 modify_tz;
+			__u8 access_tz;
+			__u8 reserved2[7];
+		} __attribute__((packed)) file;
+		struct {
+			__u8 flags;
+			__u8 reserved1;
+			__u8 name_len;
+			__le16 name_hash;
+			__le16 reserved2;
+			__le64 valid_size;
+			__le32 reserved3;
+			__le32 start_clu;
+			__le64 size;
+		} __attribute__((packed)) stream;
+		struct {
+			__u8 flags;
+			__le16 unicode_0_14[15];
+		} __attribute__((packed)) name;
+		struct {
+			__u8 flags;
+			__u8 reserved[18];
+			__le32 start_clu;
+			__le64 size;
+		} __attribute__((packed)) bitmap;
+		struct {
+			__u8 reserved1[3];
+			__le32 checksum;
+			__u8 reserved2[12];
+			__le32 start_clu;
+			__le64 size;
+		} __attribute__((packed)) upcase;
+		struct {
+			__u8 flags;
+			__u8 vendor_guid[16];
+			__u8 vendor_defined[14];
+		} vendor_ext;
+		struct {
+			__u8 flags;
+			__u8 vendor_guid[16];
+			__u8 vendor_defined[2];
+			__le32 start_clu;
+			__le64 size;
+		} __attribute__((packed)) vendor_alloc;
+		struct {
+			__u8 flags;
+			__u8 custom_defined[18];
+			__le32 start_clu;
+			__le64 size;
+		} __attribute__((packed)) generic_secondary;
+	} dentry;
+};
+
+struct exfat_dentry_namebuf {
+	char *lfn;
+	int lfnbuf_len;
+};
+
+struct exfat_dir_entry {
+	struct exfat_chain dir;
+	int entry;
+	unsigned int type;
+	unsigned int start_clu;
+	unsigned char flags;
+	unsigned short attr;
+	loff_t size;
+	unsigned int num_subdirs;
+	struct timespec64 atime;
+	struct timespec64 mtime;
+	struct timespec64 crtime;
+	struct exfat_dentry_namebuf namebuf;
+};
+
+enum {
+	NLS_NAME_NO_LOSSY = 0,
+	NLS_NAME_LOSSY = 1,
+	NLS_NAME_OVERLEN = 2,
+};
+
+typedef u32 unicode_t;
+
+struct exfat_uni_name {
+	unsigned short name[258];
+	u16 name_hash;
+	unsigned char name_len;
+};
+
+enum exfat_validate_dentry_mode {
+	ES_MODE_STARTED = 0,
+	ES_MODE_GET_FILE_ENTRY = 1,
+	ES_MODE_GET_STRM_ENTRY = 2,
+	ES_MODE_GET_NAME_ENTRY = 3,
+	ES_MODE_GET_CRITICAL_SEC_ENTRY = 4,
+	ES_MODE_GET_BENIGN_SEC_ENTRY = 5,
+};
+
+enum {
+	DIRENT_STEP_FILE = 0,
+	DIRENT_STEP_STRM = 1,
+	DIRENT_STEP_NAME = 2,
+	DIRENT_STEP_SECD = 3,
+};
+
+enum {
+	Opt_uid___4 = 0,
+	Opt_gid___5 = 1,
+	Opt_umask___2 = 2,
+	Opt_dmask___2 = 3,
+	Opt_fmask___2 = 4,
+	Opt_allow_utime___2 = 5,
+	Opt_charset___2 = 6,
+	Opt_errors___2 = 7,
+	Opt_discard___3 = 8,
+	Opt_keep_last_dots = 9,
+	Opt_sys_tz = 10,
+	Opt_time_offset___2 = 11,
+	Opt_utf8 = 12,
+	Opt_debug___3 = 13,
+	Opt_namecase = 14,
+	Opt_codepage___2 = 15,
+};
+
+struct boot_sector {
+	__u8 jmp_boot[3];
+	__u8 fs_name[8];
+	__u8 must_be_zero[53];
+	__le64 partition_offset;
+	__le64 vol_length;
+	__le32 fat_offset;
+	__le32 fat_length;
+	__le32 clu_offset;
+	__le32 clu_count;
+	__le32 root_cluster;
+	__le32 vol_serial;
+	__u8 fs_revision[2];
+	__le16 vol_flags;
+	__u8 sect_size_bits;
+	__u8 sect_per_clus_bits;
+	__u8 num_fats;
+	__u8 drv_sel;
+	__u8 percent_in_use;
+	__u8 reserved[7];
+	__u8 boot_code[390];
+	__le16 signature;
+};
+
+struct exfat_cache {
+	struct list_head cache_list;
+	unsigned int nr_contig;
+	unsigned int fcluster;
+	unsigned int dcluster;
+};
+
+struct exfat_cache_id {
+	unsigned int id;
+	unsigned int nr_contig;
+	unsigned int fcluster;
+	unsigned int dcluster;
+};
+
+struct getdents_callback___2 {
+	struct dir_context ctx;
+	char *name;
+	u64 ino;
+	int found;
+	int sequence;
+};
+
+struct utf8_table {
+	int cmask;
+	int cval;
+	int shift;
+	long lmask;
+	long lval;
+};
+
+enum utf8_normalization {
+	UTF8_NFDI = 0,
+	UTF8_NFDICF = 1,
+	UTF8_NMAX = 2,
+};
+
+typedef const unsigned char utf8leaf_t;
+
+typedef const unsigned char utf8trie_t;
+
+struct utf8cursor {
+	const struct unicode_map *um;
+	enum utf8_normalization n;
+	const char *s;
+	const char *p;
+	const char *ss;
+	const char *sp;
+	unsigned int len;
+	unsigned int slen;
+	short ccc;
+	short nccc;
+	unsigned char hangul[12];
+};
+
+struct fuse_iqueue;
+
+struct fuse_iqueue_ops {
+	void (*wake_forget_and_unlock)(struct fuse_iqueue *, bool);
+	void (*wake_interrupt_and_unlock)(struct fuse_iqueue *, bool);
+	void (*wake_pending_and_unlock)(struct fuse_iqueue *, bool);
+	void (*release)(struct fuse_iqueue *);
+};
+
+struct fuse_forget_one {
+	uint64_t nodeid;
+	uint64_t nlookup;
+};
+
+struct fuse_forget_link {
+	struct fuse_forget_one forget_one;
+	struct fuse_forget_link *next;
+};
+
+struct fuse_iqueue {
+	unsigned int connected;
+	spinlock_t lock;
+	wait_queue_head_t waitq;
+	u64 reqctr;
+	struct list_head pending;
+	struct list_head interrupts;
+	struct fuse_forget_link forget_list_head;
+	struct fuse_forget_link *forget_list_tail;
+	int forget_batch;
+	struct fasync_struct *fasync;
+	const struct fuse_iqueue_ops *ops;
+	void *priv;
+};
+
+enum fuse_req_flag {
+	FR_ISREPLY = 0,
+	FR_FORCE = 1,
+	FR_BACKGROUND = 2,
+	FR_WAITING = 3,
+	FR_ABORTED = 4,
+	FR_INTERRUPTED = 5,
+	FR_LOCKED = 6,
+	FR_PENDING = 7,
+	FR_SENT = 8,
+	FR_FINISHED = 9,
+	FR_PRIVATE = 10,
+	FR_ASYNC = 11,
+};
+
+enum fuse_opcode {
+	FUSE_LOOKUP = 1,
+	FUSE_FORGET = 2,
+	FUSE_GETATTR = 3,
+	FUSE_SETATTR = 4,
+	FUSE_READLINK = 5,
+	FUSE_SYMLINK = 6,
+	FUSE_MKNOD = 8,
+	FUSE_MKDIR = 9,
+	FUSE_UNLINK = 10,
+	FUSE_RMDIR = 11,
+	FUSE_RENAME = 12,
+	FUSE_LINK = 13,
+	FUSE_OPEN = 14,
+	FUSE_READ = 15,
+	FUSE_WRITE = 16,
+	FUSE_STATFS = 17,
+	FUSE_RELEASE = 18,
+	FUSE_FSYNC = 20,
+	FUSE_SETXATTR = 21,
+	FUSE_GETXATTR = 22,
+	FUSE_LISTXATTR = 23,
+	FUSE_REMOVEXATTR = 24,
+	FUSE_FLUSH = 25,
+	FUSE_INIT = 26,
+	FUSE_OPENDIR = 27,
+	FUSE_READDIR = 28,
+	FUSE_RELEASEDIR = 29,
+	FUSE_FSYNCDIR = 30,
+	FUSE_GETLK = 31,
+	FUSE_SETLK = 32,
+	FUSE_SETLKW = 33,
+	FUSE_ACCESS = 34,
+	FUSE_CREATE = 35,
+	FUSE_INTERRUPT = 36,
+	FUSE_BMAP = 37,
+	FUSE_DESTROY = 38,
+	FUSE_IOCTL = 39,
+	FUSE_POLL = 40,
+	FUSE_NOTIFY_REPLY = 41,
+	FUSE_BATCH_FORGET = 42,
+	FUSE_FALLOCATE = 43,
+	FUSE_READDIRPLUS = 44,
+	FUSE_RENAME2 = 45,
+	FUSE_LSEEK = 46,
+	FUSE_COPY_FILE_RANGE = 47,
+	FUSE_SETUPMAPPING = 48,
+	FUSE_REMOVEMAPPING = 49,
+	FUSE_SYNCFS = 50,
+	FUSE_TMPFILE = 51,
+	FUSE_STATX = 52,
+	FUSE_CANONICAL_PATH = 2016,
+	CUSE_INIT = 4096,
+	CUSE_INIT_BSWAP_RESERVED = 1048576,
+	FUSE_INIT_BSWAP_RESERVED = 436207616,
+};
+
+enum fuse_notify_code {
+	FUSE_NOTIFY_POLL = 1,
+	FUSE_NOTIFY_INVAL_INODE = 2,
+	FUSE_NOTIFY_INVAL_ENTRY = 3,
+	FUSE_NOTIFY_STORE = 4,
+	FUSE_NOTIFY_RETRIEVE = 5,
+	FUSE_NOTIFY_DELETE = 6,
+	FUSE_NOTIFY_CODE_MAX = 7,
+};
+
+struct fuse_pqueue {
+	unsigned int connected;
+	spinlock_t lock;
+	struct list_head *processing;
+	struct list_head io;
+};
+
+struct fuse_conn;
+
+struct fuse_dev {
+	struct fuse_conn *fc;
+	struct fuse_pqueue pq;
+	struct list_head entry;
+};
+
+struct fuse_sync_bucket;
+
+struct fuse_conn {
+	spinlock_t lock;
+	refcount_t count;
+	atomic_t dev_count;
+	struct callback_head rcu;
+	kuid_t user_id;
+	kgid_t group_id;
+	struct pid_namespace *pid_ns;
+	struct user_namespace *user_ns;
+	unsigned int max_read;
+	unsigned int max_write;
+	unsigned int max_pages;
+	unsigned int max_pages_limit;
+	struct fuse_iqueue iq;
+	atomic64_t khctr;
+	struct rb_root polled_files;
+	unsigned int max_background;
+	unsigned int congestion_threshold;
+	unsigned int num_background;
+	unsigned int active_background;
+	struct list_head bg_queue;
+	spinlock_t bg_lock;
+	int initialized;
+	int blocked;
+	wait_queue_head_t blocked_waitq;
+	unsigned int connected;
+	bool aborted;
+	unsigned int conn_error: 1;
+	unsigned int conn_init: 1;
+	unsigned int async_read: 1;
+	unsigned int abort_err: 1;
+	unsigned int atomic_o_trunc: 1;
+	unsigned int export_support: 1;
+	unsigned int writeback_cache: 1;
+	unsigned int parallel_dirops: 1;
+	unsigned int handle_killpriv: 1;
+	unsigned int cache_symlinks: 1;
+	unsigned int legacy_opts_show: 1;
+	unsigned int handle_killpriv_v2: 1;
+	unsigned int no_open: 1;
+	unsigned int no_opendir: 1;
+	unsigned int no_fsync: 1;
+	unsigned int no_fsyncdir: 1;
+	unsigned int no_flush: 1;
+	unsigned int no_setxattr: 1;
+	unsigned int setxattr_ext: 1;
+	unsigned int no_getxattr: 1;
+	unsigned int no_listxattr: 1;
+	unsigned int no_removexattr: 1;
+	unsigned int no_lock: 1;
+	unsigned int no_access: 1;
+	unsigned int no_create: 1;
+	unsigned int no_interrupt: 1;
+	unsigned int no_bmap: 1;
+	unsigned int no_poll: 1;
+	unsigned int big_writes: 1;
+	unsigned int dont_mask: 1;
+	unsigned int no_flock: 1;
+	unsigned int no_fallocate: 1;
+	unsigned int no_rename2: 1;
+	unsigned int auto_inval_data: 1;
+	unsigned int explicit_inval_data: 1;
+	unsigned int do_readdirplus: 1;
+	unsigned int readdirplus_auto: 1;
+	unsigned int async_dio: 1;
+	unsigned int no_lseek: 1;
+	unsigned int posix_acl: 1;
+	unsigned int default_permissions: 1;
+	unsigned int allow_other: 1;
+	unsigned int no_copy_file_range: 1;
+	unsigned int destroy: 1;
+	unsigned int delete_stale: 1;
+	unsigned int no_control: 1;
+	unsigned int no_force_umount: 1;
+	unsigned int auto_submounts: 1;
+	unsigned int passthrough: 1;
+	unsigned int sync_fs: 1;
+	unsigned int init_security: 1;
+	unsigned int create_supp_group: 1;
+	unsigned int inode_dax: 1;
+	unsigned int no_tmpfile: 1;
+	unsigned int direct_io_allow_mmap: 1;
+	unsigned int no_statx: 1;
+	unsigned int no_daemon: 1;
+	atomic_t num_waiting;
+	unsigned int minor;
+	struct list_head entry;
+	dev_t dev;
+	struct dentry *ctl_dentry[5];
+	int ctl_ndents;
+	u32 scramble_key[4];
+	atomic64_t attr_version;
+	void (*release)(struct fuse_conn *);
+	struct rw_semaphore killsb;
+	struct list_head devices;
+	struct list_head mounts;
+	struct fuse_sync_bucket __attribute__((btf_type_tag("rcu"))) *curr_bucket;
+	struct idr passthrough_req;
+	spinlock_t passthrough_req_lock;
+};
+
+struct fuse_sync_bucket {
+	atomic_t count;
+	wait_queue_head_t waitq;
+	struct callback_head rcu;
+};
+
+struct fuse_in_header {
+	uint32_t len;
+	uint32_t opcode;
+	uint64_t unique;
+	uint64_t nodeid;
+	uint32_t uid;
+	uint32_t gid;
+	uint32_t pid;
+	union {
+		struct {
+			uint16_t total_extlen;
+			uint16_t padding;
+		};
+		uint32_t error_in;
+	};
+};
+
+struct fuse_out_header {
+	uint32_t len;
+	int32_t error;
+	uint64_t unique;
+};
+
+struct fuse_args;
+
+struct fuse_mount;
+
+struct fuse_req {
+	struct list_head list;
+	struct list_head intr_entry;
+	struct fuse_args *args;
+	refcount_t count;
+	unsigned long flags;
+	struct {
+		struct fuse_in_header h;
+	} in;
+	struct {
+		struct fuse_out_header h;
+	} out;
+	wait_queue_head_t waitq;
+	void *argbuf;
+	struct fuse_mount *fm;
+};
+
+struct fuse_in_arg {
+	unsigned int size;
+	const void *value;
+};
+
+struct fuse_arg {
+	unsigned int size;
+	void *value;
+};
+
+struct fuse_args {
+	uint64_t nodeid;
+	uint32_t opcode;
+	uint32_t error_in;
+	uint8_t in_numargs;
+	uint8_t out_numargs;
+	uint8_t ext_idx;
+	bool force: 1;
+	bool noreply: 1;
+	bool nocreds: 1;
+	bool in_pages: 1;
+	bool out_pages: 1;
+	bool user_pages: 1;
+	bool out_argvar: 1;
+	bool page_zeroing: 1;
+	bool page_replace: 1;
+	bool may_block: 1;
+	bool is_ext: 1;
+	struct fuse_in_arg in_args[5];
+	struct fuse_arg out_args[3];
+	void (*end)(struct fuse_mount *, struct fuse_args *, int);
+	struct path *canonical_path;
+};
+
+struct fuse_mount {
+	struct fuse_conn *fc;
+	struct super_block *sb;
+	struct list_head fc_entry;
+};
+
+struct fuse_passthrough {
+	struct file *filp;
+	struct cred *cred;
+};
+
+struct fuse_release_args;
+
+struct fuse_file {
+	struct fuse_mount *fm;
+	struct fuse_release_args *release_args;
+	u64 kh;
+	u64 fh;
+	u64 nodeid;
+	refcount_t count;
+	u32 open_flags;
+	struct list_head write_entry;
+	struct {
+		struct mutex lock;
+		loff_t pos;
+		loff_t cache_off;
+		u64 version;
+	} readdir;
+	struct fuse_passthrough passthrough;
+	struct file *backing_file;
+	struct rb_node polled_node;
+	wait_queue_head_t poll_wait;
+	bool flock: 1;
+};
+
+struct fuse_page_desc;
+
+struct fuse_args_pages {
+	struct fuse_args args;
+	struct page **pages;
+	struct fuse_page_desc *descs;
+	unsigned int num_pages;
+};
+
+struct fuse_page_desc {
+	unsigned int length;
+	unsigned int offset;
+};
+
+struct fuse_entry_bpf_out {
+	uint64_t backing_action;
+	uint64_t backing_fd;
+	uint64_t bpf_action;
+	uint64_t bpf_fd;
+};
+
+struct fuse_entry_bpf {
+	struct fuse_entry_bpf_out out;
+	struct file *backing_file;
+	struct file *bpf_file;
+};
+
+struct fuse_notify_retrieve_in {
+	uint64_t dummy1;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t dummy2;
+	uint64_t dummy3;
+	uint64_t dummy4;
+};
+
+struct fuse_retrieve_args {
+	struct fuse_args_pages ap;
+	struct fuse_notify_retrieve_in inarg;
+};
+
+struct fuse_copy_state {
+	int write;
+	struct fuse_req *req;
+	struct iov_iter *iter;
+	struct pipe_buffer *pipebufs;
+	struct pipe_buffer *currbuf;
+	struct pipe_inode_info *pipe;
+	unsigned long nr_segs;
+	struct page *pg;
+	unsigned int len;
+	unsigned int offset;
+	unsigned int move_pages: 1;
+};
+
+struct fuse_batch_forget_in {
+	uint32_t count;
+	uint32_t dummy;
+};
+
+struct fuse_forget_in {
+	uint64_t nlookup;
+};
+
+struct fuse_notify_inval_entry_out {
+	uint64_t parent;
+	uint32_t namelen;
+	uint32_t flags;
+};
+
+struct fuse_notify_delete_out {
+	uint64_t parent;
+	uint64_t child;
+	uint32_t namelen;
+	uint32_t padding;
+};
+
+struct fuse_notify_poll_wakeup_out {
+	uint64_t kh;
+};
+
+struct fuse_notify_store_out {
+	uint64_t nodeid;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_notify_inval_inode_out {
+	uint64_t ino;
+	int64_t off;
+	int64_t len;
+};
+
+struct fuse_notify_retrieve_out {
+	uint64_t notify_unique;
+	uint64_t nodeid;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_interrupt_in {
+	uint64_t unique;
+};
+
+enum {
+	FUSE_I_ADVISE_RDPLUS = 0,
+	FUSE_I_INIT_RDPLUS = 1,
+	FUSE_I_SIZE_UNSTABLE = 2,
+	FUSE_I_BAD = 3,
+	FUSE_I_BTIME = 4,
+};
+
+enum fuse_ext_type {
+	FUSE_MAX_NR_SECCTX = 31,
+	FUSE_EXT_GROUPS = 32,
+};
+
+struct fuse_dentry {
+	union {
+		u64 time;
+		struct callback_head rcu;
+	};
+	struct path backing_path;
+	struct bpf_prog *bpf;
+};
+
+struct fuse_submount_lookup;
+
+struct fuse_inode {
+	struct inode inode;
+	struct inode *backing_inode;
+	struct bpf_prog *bpf;
+	u64 nodeid;
+	u64 nlookup;
+	struct fuse_forget_link *forget;
+	u64 i_time;
+	u32 inval_mask;
+	umode_t orig_i_mode;
+	struct timespec64 i_btime;
+	u64 orig_ino;
+	u64 attr_version;
+	union {
+		struct {
+			struct list_head write_files;
+			struct list_head queued_writes;
+			int writectr;
+			wait_queue_head_t page_waitq;
+			struct rb_root writepages;
+		};
+		struct {
+			bool cached;
+			loff_t size;
+			loff_t pos;
+			u64 version;
+			struct timespec64 mtime;
+			u64 iversion;
+			spinlock_t lock;
+		} rdc;
+	};
+	unsigned long state;
+	struct mutex mutex;
+	spinlock_t lock;
+	struct fuse_submount_lookup *submount_lookup;
+};
+
+struct fuse_submount_lookup {
+	refcount_t count;
+	u64 nodeid;
+	struct fuse_forget_link *forget;
+};
+
+struct fuse_supp_groups {
+	uint32_t nr_groups;
+	uint32_t groups[0];
+};
+
+struct fuse_attr {
+	uint64_t ino;
+	uint64_t size;
+	uint64_t blocks;
+	uint64_t atime;
+	uint64_t mtime;
+	uint64_t ctime;
+	uint32_t atimensec;
+	uint32_t mtimensec;
+	uint32_t ctimensec;
+	uint32_t mode;
+	uint32_t nlink;
+	uint32_t uid;
+	uint32_t gid;
+	uint32_t rdev;
+	uint32_t blksize;
+	uint32_t flags;
+};
+
+struct fuse_entry_out {
+	uint64_t nodeid;
+	uint64_t generation;
+	uint64_t entry_valid;
+	uint64_t attr_valid;
+	uint32_t entry_valid_nsec;
+	uint32_t attr_valid_nsec;
+	struct fuse_attr attr;
+};
+
+struct fuse_sx_time {
+	int64_t tv_sec;
+	uint32_t tv_nsec;
+	int32_t __reserved;
+};
+
+struct fuse_statx {
+	uint32_t mask;
+	uint32_t blksize;
+	uint64_t attributes;
+	uint32_t nlink;
+	uint32_t uid;
+	uint32_t gid;
+	uint16_t mode;
+	uint16_t __spare0[1];
+	uint64_t ino;
+	uint64_t size;
+	uint64_t blocks;
+	uint64_t attributes_mask;
+	struct fuse_sx_time atime;
+	struct fuse_sx_time btime;
+	struct fuse_sx_time ctime;
+	struct fuse_sx_time mtime;
+	uint32_t rdev_major;
+	uint32_t rdev_minor;
+	uint32_t dev_major;
+	uint32_t dev_minor;
+	uint64_t __spare2[14];
+};
+
+struct fuse_dummy_io {
+	int unused;
+};
+
+struct fuse_statx_in {
+	uint32_t getattr_flags;
+	uint32_t reserved;
+	uint64_t fh;
+	uint32_t sx_flags;
+	uint32_t sx_mask;
+};
+
+struct fuse_statx_out {
+	uint64_t attr_valid;
+	uint32_t attr_valid_nsec;
+	uint32_t flags;
+	uint64_t spare[2];
+	struct fuse_statx stat;
+};
+
+struct fuse_getattr_in {
+	uint32_t getattr_flags;
+	uint32_t dummy;
+	uint64_t fh;
+};
+
+struct fuse_attr_out {
+	uint64_t attr_valid;
+	uint32_t attr_valid_nsec;
+	uint32_t dummy;
+	struct fuse_attr attr;
+};
+
+struct fuse_getattr_io {
+	struct fuse_getattr_in fgi;
+	struct fuse_attr_out fao;
+};
+
+struct fuse_setattr_in {
+	uint32_t valid;
+	uint32_t padding;
+	uint64_t fh;
+	uint64_t size;
+	uint64_t lock_owner;
+	uint64_t atime;
+	uint64_t mtime;
+	uint64_t ctime;
+	uint32_t atimensec;
+	uint32_t mtimensec;
+	uint32_t ctimensec;
+	uint32_t mode;
+	uint32_t unused4;
+	uint32_t uid;
+	uint32_t gid;
+	uint32_t unused5;
+};
+
+struct fuse_setattr_io {
+	struct fuse_setattr_in fsi;
+	struct fuse_attr_out fao;
+};
+
+struct fuse_access_in {
+	uint32_t mask;
+	uint32_t padding;
+};
+
+struct fuse_err_ret {
+	void *result;
+	bool ret;
+};
+
+struct fuse_lookup_io {
+	struct fuse_entry_out feo;
+	struct fuse_entry_bpf feb;
+};
+
+struct fuse_link_in {
+	uint64_t oldnodeid;
+};
+
+struct fuse_mkdir_in {
+	uint32_t mode;
+	uint32_t umask;
+};
+
+struct fuse_mknod_in {
+	uint32_t mode;
+	uint32_t rdev;
+	uint32_t umask;
+	uint32_t padding;
+};
+
+struct fuse_rename2_in {
+	uint64_t newdir;
+	uint32_t flags;
+	uint32_t padding;
+};
+
+struct fuse_rename_in {
+	uint64_t newdir;
+};
+
+struct fuse_secctx {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_secctx_header {
+	uint32_t size;
+	uint32_t nr_secctx;
+};
+
+struct fuse_ext_header {
+	uint32_t size;
+	uint32_t type;
+};
+
+struct fuse_create_in {
+	uint32_t flags;
+	uint32_t mode;
+	uint32_t umask;
+	uint32_t open_flags;
+};
+
+struct fuse_open_out {
+	uint64_t fh;
+	uint32_t open_flags;
+	uint32_t passthrough_fh;
+};
+
+struct fuse_create_open_io {
+	struct fuse_create_in fci;
+	struct fuse_entry_out feo;
+	struct fuse_open_out foo;
+};
+
+struct fuse_fsync_in {
+	uint64_t fh;
+	uint32_t fsync_flags;
+	uint32_t padding;
+};
+
+struct fuse_read_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t read_flags;
+	uint64_t lock_owner;
+	uint32_t flags;
+	uint32_t padding;
+};
+
+struct fuse_write_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint32_t size;
+	uint32_t write_flags;
+	uint64_t lock_owner;
+	uint32_t flags;
+	uint32_t padding;
+};
+
+struct fuse_write_out {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_io_priv;
+
+struct fuse_io_args {
+	union {
+		struct {
+			struct fuse_read_in in;
+			u64 attr_ver;
+		} read;
+		struct {
+			struct fuse_write_in in;
+			struct fuse_write_out out;
+			bool page_locked;
+		} write;
+	};
+	struct fuse_args_pages ap;
+	struct fuse_io_priv *io;
+	struct fuse_file *ff;
+};
+
+struct fuse_writepage_args {
+	struct fuse_io_args ia;
+	struct rb_node writepages_entry;
+	struct list_head queue_entry;
+	struct fuse_writepage_args *next;
+	struct inode *inode;
+	struct fuse_sync_bucket *bucket;
+};
+
+struct fuse_io_priv {
+	struct kref refcnt;
+	int async;
+	spinlock_t lock;
+	unsigned int reqs;
+	ssize_t bytes;
+	size_t size;
+	__u64 offset;
+	bool write;
+	bool should_dirty;
+	int err;
+	struct kiocb *iocb;
+	struct completion *done;
+	bool blocking;
+};
+
+struct fuse_release_in {
+	uint64_t fh;
+	uint32_t flags;
+	uint32_t release_flags;
+	uint64_t lock_owner;
+};
+
+struct fuse_release_args {
+	struct fuse_args args;
+	struct fuse_release_in inarg;
+	struct inode *inode;
+};
+
+struct fuse_open_in {
+	uint32_t flags;
+	uint32_t open_flags;
+};
+
+struct fuse_open_io {
+	struct fuse_open_in foi;
+	struct fuse_open_out foo;
+};
+
+struct fuse_lseek_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint32_t whence;
+	uint32_t padding;
+};
+
+struct fuse_lseek_out {
+	uint64_t offset;
+};
+
+struct fuse_lseek_io {
+	struct fuse_lseek_in fli;
+	struct fuse_lseek_out flo;
+};
+
+struct fuse_read_iter_out {
+	uint64_t ret;
+};
+
+struct fuse_file_read_iter_io {
+	struct fuse_read_in fri;
+	struct fuse_read_iter_out frio;
+};
+
+struct fuse_write_iter_out {
+	uint64_t ret;
+};
+
+struct fuse_file_write_iter_io {
+	struct fuse_write_in fwi;
+	struct fuse_write_out fwo;
+	struct fuse_write_iter_out fwio;
+};
+
+struct fuse_flush_in {
+	uint64_t fh;
+	uint32_t unused;
+	uint32_t padding;
+	uint64_t lock_owner;
+};
+
+struct fuse_file_lock {
+	uint64_t start;
+	uint64_t end;
+	uint32_t type;
+	uint32_t pid;
+};
+
+struct fuse_lk_in {
+	uint64_t fh;
+	uint64_t owner;
+	struct fuse_file_lock lk;
+	uint32_t lk_flags;
+	uint32_t padding;
+};
+
+struct fuse_lk_out {
+	struct fuse_file_lock lk;
+};
+
+struct fuse_fallocate_in {
+	uint64_t fh;
+	uint64_t offset;
+	uint64_t length;
+	uint32_t mode;
+	uint32_t padding;
+};
+
+struct fuse_copy_file_range_in {
+	uint64_t fh_in;
+	uint64_t off_in;
+	uint64_t nodeid_out;
+	uint64_t fh_out;
+	uint64_t off_out;
+	uint64_t len;
+	uint64_t flags;
+};
+
+struct fuse_copy_file_range_io {
+	struct fuse_copy_file_range_in fci;
+	struct fuse_write_out fwo;
+};
+
+struct fuse_fill_wb_data {
+	struct fuse_writepage_args *wpa;
+	struct fuse_file *ff;
+	struct inode *inode;
+	struct page **orig_pages;
+	unsigned int max_pages;
+};
+
+struct fuse_poll_out {
+	uint32_t revents;
+	uint32_t padding;
+};
+
+struct fuse_poll_in {
+	uint64_t fh;
+	uint64_t kh;
+	uint32_t flags;
+	uint32_t events;
+};
+
+struct fuse_bmap_in {
+	uint64_t block;
+	uint32_t blocksize;
+	uint32_t padding;
+};
+
+struct fuse_bmap_out {
+	uint64_t block;
+};
+
+enum fuse_dax_mode {
+	FUSE_DAX_INODE_DEFAULT = 0,
+	FUSE_DAX_ALWAYS = 1,
+	FUSE_DAX_NEVER = 2,
+	FUSE_DAX_INODE_USER = 3,
+};
+
+enum {
+	OPT_SOURCE = 0,
+	OPT_SUBTYPE = 1,
+	OPT_FD = 2,
+	OPT_ROOTMODE = 3,
+	OPT_USER_ID = 4,
+	OPT_GROUP_ID = 5,
+	OPT_DEFAULT_PERMISSIONS = 6,
+	OPT_ALLOW_OTHER = 7,
+	OPT_MAX_READ = 8,
+	OPT_BLKSIZE = 9,
+	OPT_ROOT_BPF = 10,
+	OPT_ROOT_DIR = 11,
+	OPT_NO_DAEMON = 12,
+	OPT_ERR = 13,
+};
+
+struct fuse_inode_identifier {
+	u64 nodeid;
+	struct inode *backing_inode;
+};
+
+struct fuse_init_in {
+	uint32_t major;
+	uint32_t minor;
+	uint32_t max_readahead;
+	uint32_t flags;
+	uint32_t flags2;
+	uint32_t unused[11];
+};
+
+struct fuse_init_out {
+	uint32_t major;
+	uint32_t minor;
+	uint32_t max_readahead;
+	uint32_t flags;
+	uint16_t max_background;
+	uint16_t congestion_threshold;
+	uint32_t max_write;
+	uint32_t time_gran;
+	uint16_t max_pages;
+	uint16_t map_alignment;
+	uint32_t flags2;
+	uint32_t unused[7];
+};
+
+struct fuse_init_args {
+	struct fuse_args args;
+	struct fuse_init_in in;
+	struct fuse_init_out out;
+};
+
+struct fuse_kstatfs {
+	uint64_t blocks;
+	uint64_t bfree;
+	uint64_t bavail;
+	uint64_t files;
+	uint64_t ffree;
+	uint32_t bsize;
+	uint32_t namelen;
+	uint32_t frsize;
+	uint32_t padding;
+	uint32_t spare[6];
+};
+
+struct fuse_statfs_out {
+	struct fuse_kstatfs st;
+};
+
+struct fuse_fs_context {
+	int fd;
+	struct file *file;
+	unsigned int rootmode;
+	kuid_t user_id;
+	kgid_t group_id;
+	bool is_bdev: 1;
+	bool fd_present: 1;
+	bool rootmode_present: 1;
+	bool user_id_present: 1;
+	bool group_id_present: 1;
+	bool default_permissions: 1;
+	bool allow_other: 1;
+	bool destroy: 1;
+	bool no_control: 1;
+	bool no_force_umount: 1;
+	bool legacy_opts_show: 1;
+	enum fuse_dax_mode dax_mode;
+	bool no_daemon: 1;
+	unsigned int max_read;
+	unsigned int blksize;
+	const char *subtype;
+	struct bpf_prog *root_bpf;
+	struct file *root_dir;
+	struct dax_device *dax_dev;
+	void **fudptr;
+};
+
+struct fuse_syncfs_in {
+	uint64_t padding;
+};
+
+struct fuse_inode_handle {
+	u64 nodeid;
+	u32 generation;
+};
+
+struct fuse_getxattr_in {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_getxattr_out {
+	uint32_t size;
+	uint32_t padding;
+};
+
+struct fuse_getxattr_io {
+	struct fuse_getxattr_in fgi;
+	struct fuse_getxattr_out fgo;
+};
+
+struct fuse_setxattr_in {
+	uint32_t size;
+	uint32_t flags;
+	uint32_t setxattr_flags;
+	uint32_t padding;
+};
+
+enum fuse_parse_result {
+	FOUND_ERR = -1,
+	FOUND_NONE = 0,
+	FOUND_SOME = 1,
+	FOUND_ALL = 2,
+};
+
+struct fuse_dirent {
+	uint64_t ino;
+	uint64_t off;
+	uint32_t namelen;
+	uint32_t type;
+	char name[0];
+};
+
+struct fuse_direntplus {
+	struct fuse_entry_out entry_out;
+	struct fuse_dirent dirent;
+};
+
+struct fuse_read_out {
+	uint64_t offset;
+	uint32_t again;
+	uint32_t padding;
+};
+
+struct fuse_read_io {
+	struct fuse_read_in fri;
+	struct fuse_read_out fro;
+};
+
+struct fuse_ioctl_out {
+	int32_t result;
+	uint32_t flags;
+	uint32_t in_iovs;
+	uint32_t out_iovs;
+};
+
+struct fuse_ioctl_iovec {
+	uint64_t base;
+	uint64_t len;
+};
+
+struct fuse_ioctl_in {
+	uint64_t fh;
+	uint32_t flags;
+	uint32_t cmd;
+	uint64_t arg;
+	uint32_t in_size;
+	uint32_t out_size;
+};
+
+struct fuse_aio_req {
+	struct kiocb iocb;
+	struct kiocb *iocb_fuse;
+};
+
+struct fuse_bpf_aio_req {
+	struct kiocb iocb;
+	refcount_t ref;
+	struct kiocb *iocb_orig;
+};
+
+struct extfuse_ctx {
+	struct dir_context ctx;
+	u8 *addr;
+	size_t offset;
+};
+
+struct virtio_device_id;
+
+struct virtio_device;
+
+struct virtio_driver {
+	struct device_driver driver;
+	const struct virtio_device_id *id_table;
+	const unsigned int *feature_table;
+	unsigned int feature_table_size;
+	const unsigned int *feature_table_legacy;
+	unsigned int feature_table_size_legacy;
+	int (*validate)(struct virtio_device *);
+	int (*probe)(struct virtio_device *);
+	void (*scan)(struct virtio_device *);
+	void (*remove)(struct virtio_device *);
+	void (*config_changed)(struct virtio_device *);
+	int (*freeze)(struct virtio_device *);
+	int (*restore)(struct virtio_device *);
+};
+
+struct virtio_device_id {
+	__u32 device;
+	__u32 vendor;
+};
+
+struct vringh_config_ops;
+
+struct virtio_config_ops;
+
+struct virtio_device {
+	int index;
+	bool failed;
+	bool config_enabled;
+	bool config_change_pending;
+	spinlock_t config_lock;
+	spinlock_t vqs_list_lock;
+	struct device dev;
+	struct virtio_device_id id;
+	const struct virtio_config_ops *config;
+	const struct vringh_config_ops *vringh_config;
+	struct list_head vqs;
+	u64 features;
+	void *priv;
+};
+
+struct virtqueue;
+
+typedef void vq_callback_t(struct virtqueue *);
+
+struct virtio_shm_region;
+
+struct virtio_config_ops {
+	void (*get)(struct virtio_device *, unsigned int, void *, unsigned int);
+	void (*set)(struct virtio_device *, unsigned int, const void *, unsigned int);
+	u32 (*generation)(struct virtio_device *);
+	u8 (*get_status)(struct virtio_device *);
+	void (*set_status)(struct virtio_device *, u8);
+	void (*reset)(struct virtio_device *);
+	int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity *);
+	void (*del_vqs)(struct virtio_device *);
+	void (*synchronize_cbs)(struct virtio_device *);
+	u64 (*get_features)(struct virtio_device *);
+	int (*finalize_features)(struct virtio_device *);
+	const char * (*bus_name)(struct virtio_device *);
+	int (*set_vq_affinity)(struct virtqueue *, const struct cpumask *);
+	const struct cpumask * (*get_vq_affinity)(struct virtio_device *, int);
+	bool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8);
+	int (*disable_vq_and_reset)(struct virtqueue *);
+	int (*enable_vq_after_reset)(struct virtqueue *);
+};
+
+struct virtqueue {
+	struct list_head list;
+	void (*callback)(struct virtqueue *);
+	const char *name;
+	struct virtio_device *vdev;
+	unsigned int index;
+	unsigned int num_free;
+	unsigned int num_max;
+	bool reset;
+	void *priv;
+};
+
+struct virtio_shm_region {
+	u64 addr;
+	u64 len;
+};
+
+enum {
+	OPT_DAX = 0,
+	OPT_DAX_ENUM = 1,
+};
+
+enum {
+	VQ_HIPRIO = 0,
+	VQ_REQUEST = 1,
+};
+
+struct virtio_fs_vq;
+
+struct virtio_fs {
+	struct kref refcount;
+	struct list_head list;
+	char *tag;
+	struct virtio_fs_vq *vqs;
+	unsigned int nvqs;
+	unsigned int num_request_queues;
+	struct dax_device *dax_dev;
+	void *window_kaddr;
+	phys_addr_t window_phys_addr;
+	size_t window_len;
+};
+
+struct virtio_fs_vq {
+	spinlock_t lock;
+	struct virtqueue *vq;
+	struct work_struct done_work;
+	struct list_head queued_reqs;
+	struct list_head end_reqs;
+	struct delayed_work dispatch_work;
+	struct fuse_dev *fud;
+	bool connected;
+	long in_flight;
+	struct completion in_flight_zero;
+	char name[24];
+	long: 64;
+};
+
+struct virtio_fs_req_work {
+	struct fuse_req *req;
+	struct virtio_fs_vq *fsvq;
+	struct work_struct done_work;
+};
+
+struct virtio_fs_forget_req {
+	struct fuse_in_header ih;
+	struct fuse_forget_in arg;
+};
+
+struct virtio_fs_forget {
+	struct list_head list;
+	struct virtio_fs_forget_req req;
+};
+
+enum {
+	OVL_XINO_OFF = 0,
+	OVL_XINO_AUTO = 1,
+	OVL_XINO_ON = 2,
+};
+
+enum {
+	OVL_UUID_OFF = 0,
+	OVL_UUID_NULL = 1,
+	OVL_UUID_AUTO = 2,
+	OVL_UUID_ON = 3,
+};
+
+enum ovl_path_type {
+	__OVL_PATH_UPPER = 1,
+	__OVL_PATH_MERGE = 2,
+	__OVL_PATH_ORIGIN = 4,
+};
+
+enum ovl_xattr {
+	OVL_XATTR_OPAQUE = 0,
+	OVL_XATTR_REDIRECT = 1,
+	OVL_XATTR_ORIGIN = 2,
+	OVL_XATTR_IMPURE = 3,
+	OVL_XATTR_NLINK = 4,
+	OVL_XATTR_UPPER = 5,
+	OVL_XATTR_UUID = 6,
+	OVL_XATTR_METACOPY = 7,
+	OVL_XATTR_PROTATTR = 8,
+};
+
+enum {
+	OVL_REDIRECT_OFF = 0,
+	OVL_REDIRECT_FOLLOW = 1,
+	OVL_REDIRECT_NOFOLLOW = 2,
+	OVL_REDIRECT_ON = 3,
+};
+
+enum ovl_inode_flag {
+	OVL_IMPURE = 0,
+	OVL_WHITEOUTS = 1,
+	OVL_INDEX = 2,
+	OVL_UPPERDATA = 3,
+	OVL_CONST_INO = 4,
+	OVL_HAS_DIGEST = 5,
+	OVL_VERIFIED_DIGEST = 6,
+};
+
+enum ovl_entry_flag {
+	OVL_E_UPPER_ALIAS = 0,
+	OVL_E_OPAQUE = 1,
+	OVL_E_CONNECTED = 2,
+};
+
+struct ovl_dir_cache;
+
+struct ovl_entry;
+
+struct ovl_inode {
+	union {
+		struct ovl_dir_cache *cache;
+		const char *lowerdata_redirect;
+	};
+	const char *redirect;
+	u64 version;
+	unsigned long flags;
+	struct inode vfs_inode;
+	struct dentry *__upperdentry;
+	struct ovl_entry *oe;
+	struct mutex lock;
+};
+
+struct ovl_layer;
+
+struct ovl_path {
+	const struct ovl_layer *layer;
+	struct dentry *dentry;
+};
+
+struct ovl_entry {
+	unsigned int __numlower;
+	struct ovl_path __lowerstack[0];
+};
+
+struct ovl_sb;
+
+struct ovl_layer {
+	struct vfsmount *mnt;
+	struct inode *trap;
+	struct ovl_sb *fs;
+	int idx;
+	int fsid;
+};
+
+struct ovl_sb {
+	struct super_block *sb;
+	dev_t pseudo_dev;
+	bool bad_uuid;
+	bool is_lower;
+};
+
+struct ovl_config {
+	char *upperdir;
+	char *workdir;
+	char **lowerdirs;
+	bool default_permissions;
+	int redirect_mode;
+	int verity_mode;
+	bool index;
+	int uuid;
+	bool nfs_export;
+	int xino;
+	bool metacopy;
+	bool userxattr;
+	bool ovl_volatile;
+	bool override_creds;
+};
+
+struct ovl_fs {
+	unsigned int numlayer;
+	unsigned int numfs;
+	unsigned int numdatalayer;
+	const struct ovl_layer *layers;
+	struct ovl_sb *fs;
+	struct dentry *workbasedir;
+	struct dentry *workdir;
+	struct dentry *indexdir;
+	long namelen;
+	struct ovl_config config;
+	const struct cred *creator_cred;
+	bool tmpfile;
+	bool noxattr;
+	bool nofh;
+	bool upperdir_locked;
+	bool workdir_locked;
+	struct inode *workbasedir_trap;
+	struct inode *workdir_trap;
+	struct inode *indexdir_trap;
+	int xino_mode;
+	atomic_long_t last_ino;
+	struct dentry *whiteout;
+	bool no_shared_whiteout;
+	errseq_t errseq;
+};
+
+struct ovl_opt_set {
+	bool metacopy;
+	bool redirect;
+	bool nfs_export;
+	bool index;
+};
+
+struct ovl_fs_context_layer;
+
+struct ovl_fs_context {
+	struct path upper;
+	struct path work;
+	size_t capacity;
+	size_t nr;
+	size_t nr_data;
+	struct ovl_opt_set set;
+	struct ovl_fs_context_layer *lower;
+	char *lowerdir_all;
+};
+
+struct ovl_fs_context_layer {
+	char *name;
+	struct path path;
+};
+
+struct ovl_cattr {
+	dev_t rdev;
+	umode_t mode;
+	const char *link;
+	struct dentry *hardlink;
+};
+
+struct ovl_inode_params {
+	struct inode *newinode;
+	struct dentry *upperdentry;
+	struct ovl_entry *oe;
+	bool index;
+	char *redirect;
+	char *lowerdata_redirect;
+};
+
+enum {
+	OVL_VERITY_OFF = 0,
+	OVL_VERITY_ON = 1,
+	OVL_VERITY_REQUIRE = 2,
+};
+
+struct ovl_fb {
+	u8 version;
+	u8 magic;
+	u8 len;
+	u8 flags;
+	u8 type;
+	uuid_t uuid;
+	u32 fid[0];
+} __attribute__((packed));
+
+struct ovl_fh {
+	u8 padding[3];
+	union {
+		struct ovl_fb fb;
+		struct {
+			struct {} __empty_buf;
+			u8 buf[0];
+		};
+	};
+};
+
+struct ovl_metacopy {
+	u8 version;
+	u8 len;
+	u8 flags;
+	u8 digest_algo;
+	u8 digest[64];
+};
+
+struct ovl_lookup_data {
+	struct super_block *sb;
+	struct vfsmount *mnt;
+	struct qstr name;
+	bool is_dir;
+	bool opaque;
+	bool stop;
+	bool last;
+	char *redirect;
+	int metacopy;
+	bool absolute_redirect;
+};
+
+enum ovl_copyop {
+	OVL_COPY = 0,
+	OVL_CLONE = 1,
+	OVL_DEDUPE = 2,
+};
+
+struct ovl_aio_req {
+	struct kiocb iocb;
+	refcount_t ref;
+	struct kiocb *orig_iocb;
+};
+
+struct ovl_cache_entry {
+	unsigned int len;
+	unsigned int type;
+	u64 real_ino;
+	u64 ino;
+	struct list_head l_node;
+	struct rb_node node;
+	struct ovl_cache_entry *next_maybe_whiteout;
+	bool is_upper;
+	bool is_whiteout;
+	char name[0];
+};
+
+struct ovl_dir_cache {
+	long refcount;
+	u64 version;
+	struct list_head entries;
+	struct rb_root root;
+};
+
+struct ovl_readdir_translate {
+	struct dir_context *orig_ctx;
+	struct ovl_dir_cache *cache;
+	struct dir_context ctx;
+	u64 parent_ino;
+	int fsid;
+	int xinobits;
+	bool xinowarn;
+};
+
+struct ovl_readdir_data {
+	struct dir_context ctx;
+	struct dentry *dentry;
+	bool is_lowest;
+	struct rb_root *root;
+	struct list_head *list;
+	struct list_head middle;
+	struct ovl_cache_entry *first_maybe_whiteout;
+	int count;
+	int err;
+	bool is_upper;
+	bool d_type_supported;
+};
+
+struct ovl_dir_file {
+	bool is_real;
+	bool is_upper;
+	struct ovl_dir_cache *cache;
+	struct list_head *cursor;
+	struct file *realfile;
+	struct file *upperfile;
+};
+
+struct ovl_copy_up_ctx {
+	struct dentry *parent;
+	struct dentry *dentry;
+	struct path lowerpath;
+	struct kstat stat;
+	struct kstat pstat;
+	const char *link;
+	struct dentry *destdir;
+	struct qstr destname;
+	struct dentry *workdir;
+	bool origin;
+	bool indexed;
+	bool metacopy;
+	bool metacopy_digest;
+};
+
+struct ovl_cu_creds {
+	const struct cred *old;
+	struct cred *new;
+};
+
+enum ovl_opt {
+	Opt_lowerdir = 0,
+	Opt_lowerdir_add = 1,
+	Opt_datadir_add = 2,
+	Opt_upperdir = 3,
+	Opt_workdir = 4,
+	Opt_default_permissions = 5,
+	Opt_redirect_dir = 6,
+	Opt_index = 7,
+	Opt_uuid = 8,
+	Opt_nfs_export = 9,
+	Opt_userxattr = 10,
+	Opt_xino = 11,
+	Opt_metacopy = 12,
+	Opt_verity = 13,
+	Opt_volatile = 14,
+	Opt_override_creds = 15,
+};
+
+enum LOG_RECORD_TYPE {
+	FULL___2 = 0,
+	SAME_FILE = 1,
+	SAME_FILE_CLOSE_BLOCK = 2,
+	SAME_FILE_CLOSE_BLOCK_SHORT = 3,
+	SAME_FILE_NEXT_BLOCK = 4,
+	SAME_FILE_NEXT_BLOCK_SHORT = 5,
+};
+
+enum incfs_hash_tree_algorithm {
+	INCFS_HASH_TREE_NONE = 0,
+	INCFS_HASH_TREE_SHA256 = 1,
+};
+
+enum incfs_file_header_flags {
+	INCFS_FILE_MAPPED = 2,
+};
+
+enum FILL_PERMISSION {
+	CANT_FILL = 0,
+	CAN_FILL = 1,
+};
+
+enum incfs_compression_alg {
+	COMPRESSION_NONE = 0,
+	COMPRESSION_LZ4 = 1,
+	COMPRESSION_ZSTD = 2,
+};
+
+enum incfs_block_map_entry_flags {
+	INCFS_BLOCK_COMPRESSED_LZ4 = 1,
+	INCFS_BLOCK_COMPRESSED_ZSTD = 2,
+	INCFS_BLOCK_COMPRESSED_MASK = 7,
+};
+
+enum incfs_block_flags {
+	INCFS_BLOCK_FLAGS_NONE = 0,
+	INCFS_BLOCK_FLAGS_HASH = 1,
+};
+
+typedef struct {
+	__u8 bytes[16];
+} incfs_uuid_t;
+
+struct pending_read {
+	incfs_uuid_t file_id;
+	s64 timestamp_us;
+	atomic_t done;
+	int block_index;
+	int serial_number;
+	uid_t uid;
+	struct list_head mi_reads_list;
+	struct list_head segment_reads_list;
+	struct callback_head rcu;
+};
+
+struct full_record {
+	enum LOG_RECORD_TYPE type: 3;
+	u32 block_index: 29;
+	incfs_uuid_t file_id;
+	u64 absolute_ts_us;
+	uid_t uid;
+} __attribute__((packed));
+
+struct read_log_state {
+	u32 generation_id;
+	u32 next_offset;
+	u32 current_pass_no;
+	struct full_record base_record;
+	u64 current_record_no;
+};
+
+struct read_log {
+	void *rl_ring_buf;
+	int rl_size;
+	struct read_log_state rl_head;
+	struct read_log_state rl_tail;
+	spinlock_t rl_lock;
+	wait_queue_head_t ml_notif_wq;
+	struct delayed_work ml_wakeup_work;
+};
+
+struct mount_options {
+	unsigned int read_timeout_ms;
+	unsigned int readahead_pages;
+	unsigned int read_log_pages;
+	unsigned int read_log_wakeup_count;
+	bool report_uid;
+	char *sysfs_name;
+};
+
+struct mem_range {
+	u8 *data;
+	size_t len;
+};
+
+struct incfs_per_uid_read_timeouts;
+
+struct ZSTD_DCtx_s;
+
+typedef struct ZSTD_DCtx_s ZSTD_DCtx;
+
+typedef ZSTD_DCtx ZSTD_DStream;
+
+struct incfs_sysfs_node;
+
+struct mount_info {
+	struct super_block *mi_sb;
+	struct path mi_backing_dir_path;
+	struct dentry *mi_index_dir;
+	bool mi_index_free;
+	struct dentry *mi_incomplete_dir;
+	bool mi_incomplete_free;
+	const struct cred *mi_owner;
+	struct mount_options mi_options;
+	struct mutex mi_dir_struct_mutex;
+	wait_queue_head_t mi_pending_reads_notif_wq;
+	spinlock_t pending_read_lock;
+	struct list_head mi_reads_list_head;
+	int mi_pending_reads_count;
+	int mi_last_pending_read_number;
+	struct read_log mi_log;
+	struct mem_range pseudo_file_xattr[3];
+	wait_queue_head_t mi_blocks_written_notif_wq;
+	atomic_t mi_blocks_written;
+	spinlock_t mi_per_uid_read_timeouts_lock;
+	struct incfs_per_uid_read_timeouts *mi_per_uid_read_timeouts;
+	int mi_per_uid_read_timeouts_size;
+	struct mutex mi_zstd_workspace_mutex;
+	void *mi_zstd_workspace;
+	ZSTD_DStream *mi_zstd_stream;
+	struct delayed_work mi_zstd_cleanup_work;
+	struct incfs_sysfs_node *mi_sysfs_node;
+	struct mutex mi_le_mutex;
+	incfs_uuid_t mi_le_file_id;
+	u64 mi_le_time_us;
+	u32 mi_le_page;
+	u32 mi_le_errno;
+	uid_t mi_le_uid;
+	u32 mi_reads_failed_timed_out;
+	u32 mi_reads_failed_hash_verification;
+	u32 mi_reads_failed_other;
+	u32 mi_reads_delayed_pending;
+	u64 mi_reads_delayed_pending_us;
+	u32 mi_reads_delayed_min;
+	u64 mi_reads_delayed_min_us;
+};
+
+struct incfs_per_uid_read_timeouts {
+	__u32 uid;
+	__u32 min_time_us;
+	__u32 min_pending_time_us;
+	__u32 max_pending_time_us;
+};
+
+typedef uint16_t U16;
+
+typedef uint8_t BYTE;
+
+typedef uint32_t U32;
+
+typedef struct {
+	U16 nextState;
+	BYTE nbAdditionalBits;
+	BYTE nbBits;
+	U32 baseValue;
+} ZSTD_seqSymbol;
+
+typedef U32 HUF_DTable;
+
+typedef struct {
+	ZSTD_seqSymbol LLTable[513];
+	ZSTD_seqSymbol OFTable[257];
+	ZSTD_seqSymbol MLTable[513];
+	HUF_DTable hufTable[4097];
+	U32 rep[3];
+	U32 workspace[157];
+} ZSTD_entropyDTables_t;
+
+typedef enum {
+	ZSTD_frame = 0,
+	ZSTD_skippableFrame = 1,
+} ZSTD_frameType_e;
+
+typedef struct {
+	unsigned long long frameContentSize;
+	unsigned long long windowSize;
+	unsigned int blockSizeMax;
+	ZSTD_frameType_e frameType;
+	unsigned int headerSize;
+	unsigned int dictID;
+	unsigned int checksumFlag;
+} ZSTD_frameHeader;
+
+typedef uint64_t U64;
+
+typedef enum {
+	bt_raw = 0,
+	bt_rle = 1,
+	bt_compressed = 2,
+	bt_reserved = 3,
+} blockType_e;
+
+typedef enum {
+	ZSTDds_getFrameHeaderSize = 0,
+	ZSTDds_decodeFrameHeader = 1,
+	ZSTDds_decodeBlockHeader = 2,
+	ZSTDds_decompressBlock = 3,
+	ZSTDds_decompressLastBlock = 4,
+	ZSTDds_checkChecksum = 5,
+	ZSTDds_decodeSkippableHeader = 6,
+	ZSTDds_skipFrame = 7,
+} ZSTD_dStage;
+
+struct xxh64_state {
+	uint64_t total_len;
+	uint64_t v1;
+	uint64_t v2;
+	uint64_t v3;
+	uint64_t v4;
+	uint64_t mem64[4];
+	uint32_t memsize;
+};
+
+typedef enum {
+	ZSTD_f_zstd1 = 0,
+	ZSTD_f_zstd1_magicless = 1,
+} ZSTD_format_e;
+
+typedef enum {
+	ZSTD_d_validateChecksum = 0,
+	ZSTD_d_ignoreChecksum = 1,
+} ZSTD_forceIgnoreChecksum_e;
+
+typedef void * (*ZSTD_allocFunction)(void *, size_t);
+
+typedef void (*ZSTD_freeFunction)(void *, void *);
+
+typedef struct {
+	ZSTD_allocFunction customAlloc;
+	ZSTD_freeFunction customFree;
+	void *opaque;
+} ZSTD_customMem;
+
+typedef enum {
+	ZSTD_use_indefinitely = -1,
+	ZSTD_dont_use = 0,
+	ZSTD_use_once = 1,
+} ZSTD_dictUses_e;
+
+struct ZSTD_DDict_s;
+
+typedef struct ZSTD_DDict_s ZSTD_DDict;
+
+typedef struct {
+	const ZSTD_DDict **ddictPtrTable;
+	size_t ddictPtrTableSize;
+	size_t ddictPtrCount;
+} ZSTD_DDictHashSet;
+
+typedef enum {
+	ZSTD_rmd_refSingleDDict = 0,
+	ZSTD_rmd_refMultipleDDicts = 1,
+} ZSTD_refMultipleDDicts_e;
+
+typedef enum {
+	zdss_init = 0,
+	zdss_loadHeader = 1,
+	zdss_read = 2,
+	zdss_load = 3,
+	zdss_flush = 4,
+} ZSTD_dStreamStage;
+
+typedef enum {
+	ZSTD_bm_buffered = 0,
+	ZSTD_bm_stable = 1,
+} ZSTD_bufferMode_e;
+
+struct ZSTD_outBuffer_s {
+	void *dst;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_outBuffer_s ZSTD_outBuffer;
+
+typedef enum {
+	ZSTD_not_in_dst = 0,
+	ZSTD_in_dst = 1,
+	ZSTD_split = 2,
+} ZSTD_litLocation_e;
+
+struct ZSTD_DCtx_s {
+	const ZSTD_seqSymbol *LLTptr;
+	const ZSTD_seqSymbol *MLTptr;
+	const ZSTD_seqSymbol *OFTptr;
+	const HUF_DTable *HUFptr;
+	ZSTD_entropyDTables_t entropy;
+	U32 workspace[640];
+	const void *previousDstEnd;
+	const void *prefixStart;
+	const void *virtualStart;
+	const void *dictEnd;
+	size_t expected;
+	ZSTD_frameHeader fParams;
+	U64 processedCSize;
+	U64 decodedSize;
+	blockType_e bType;
+	ZSTD_dStage stage;
+	U32 litEntropy;
+	U32 fseEntropy;
+	struct xxh64_state xxhState;
+	size_t headerSize;
+	ZSTD_format_e format;
+	ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum;
+	U32 validateChecksum;
+	const BYTE *litPtr;
+	ZSTD_customMem customMem;
+	size_t litSize;
+	size_t rleSize;
+	size_t staticSize;
+	int bmi2;
+	ZSTD_DDict *ddictLocal;
+	const ZSTD_DDict *ddict;
+	U32 dictID;
+	int ddictIsCold;
+	ZSTD_dictUses_e dictUses;
+	ZSTD_DDictHashSet *ddictSet;
+	ZSTD_refMultipleDDicts_e refMultipleDDicts;
+	ZSTD_dStreamStage streamStage;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inPos;
+	size_t maxWindowSize;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outStart;
+	size_t outEnd;
+	size_t lhSize;
+	U32 hostageByte;
+	int noForwardProgress;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_outBuffer expectedOutBuffer;
+	BYTE *litBuffer;
+	const BYTE *litBufferEnd;
+	ZSTD_litLocation_e litBufferLocation;
+	BYTE litExtraBuffer[65568];
+	BYTE headerBuffer[18];
+	size_t oversizedDuration;
+};
+
+struct incfs_sysfs_node {
+	struct kobject isn_sysfs_node;
+	struct completion isn_completion;
+	struct mount_info *isn_mi;
+};
+
+struct data_file;
+
+struct inode_info {
+	struct mount_info *n_mount_info;
+	struct inode *n_backing_inode;
+	struct data_file *n_file;
+	struct inode n_vfs_inode;
+};
+
+struct data_file_segment {
+	wait_queue_head_t new_data_arrival_wq;
+	struct rw_semaphore rwsem;
+	struct list_head reads_list_head;
+};
+
+struct backing_file_context;
+
+struct mtree;
+
+struct incfs_df_signature;
+
+struct incfs_df_verity_signature;
+
+struct data_file {
+	struct backing_file_context *df_backing_file_context;
+	struct mount_info *df_mount_info;
+	incfs_uuid_t df_id;
+	struct data_file_segment df_segments[3];
+	loff_t df_metadata_off;
+	loff_t df_blockmap_off;
+	loff_t df_size;
+	u32 df_header_flags;
+	int df_data_block_count;
+	int df_total_block_count;
+	loff_t df_mapped_offset;
+	atomic_t df_data_blocks_written;
+	u32 df_initial_data_blocks_written;
+	atomic_t df_hash_blocks_written;
+	u32 df_initial_hash_blocks_written;
+	loff_t df_status_offset;
+	struct mutex df_enable_verity;
+	struct mtree *df_hash_tree;
+	struct incfs_df_signature *df_signature;
+	struct mem_range df_verity_file_digest;
+	struct incfs_df_verity_signature *df_verity_signature;
+};
+
+struct backing_file_context {
+	struct mutex bc_mutex;
+	struct file *bc_file;
+	loff_t bc_last_md_record_offset;
+	const struct cred *bc_cred;
+	bool bc_has_bad_block;
+};
+
+struct incfs_hash_alg;
+
+struct mtree {
+	struct incfs_hash_alg *alg;
+	u8 root_hash[32];
+	u32 hash_level_suboffset[8];
+	u32 hash_tree_area_size;
+	int depth;
+};
+
+struct incfs_hash_alg {
+	const char *name;
+	int digest_size;
+	enum incfs_hash_tree_algorithm id;
+	struct crypto_shash *shash;
+};
+
+struct incfs_df_signature {
+	u32 sig_size;
+	u64 sig_offset;
+	u32 hash_size;
+	u64 hash_offset;
+};
+
+struct incfs_df_verity_signature {
+	u32 size;
+	u64 offset;
+};
+
+struct same_file {
+	enum LOG_RECORD_TYPE type: 3;
+	u32 block_index: 29;
+	uid_t uid;
+	u16 relative_ts_us;
+} __attribute__((packed));
+
+struct same_file_close_block {
+	enum LOG_RECORD_TYPE type: 3;
+	u16 relative_ts_us: 13;
+	s16 block_index_delta;
+};
+
+struct same_file_close_block_short {
+	enum LOG_RECORD_TYPE type: 3;
+	u8 relative_ts_tens_us: 5;
+	s8 block_index_delta;
+} __attribute__((packed));
+
+struct same_file_next_block {
+	enum LOG_RECORD_TYPE type: 3;
+	u16 relative_ts_us: 13;
+} __attribute__((packed));
+
+struct same_file_next_block_short {
+	enum LOG_RECORD_TYPE type: 3;
+	u8 relative_ts_tens_us: 5;
+} __attribute__((packed));
+
+union log_record {
+	struct full_record full_record;
+	struct same_file same_file;
+	struct same_file_close_block same_file_close_block;
+	struct same_file_close_block_short same_file_close_block_short;
+	struct same_file_next_block same_file_next_block;
+	struct same_file_next_block_short same_file_next_block_short;
+};
+
+struct incfs_md_header {
+	__u8 h_md_entry_type;
+	__le16 h_record_size;
+	__le32 h_unused1;
+	__le64 h_next_md_offset;
+	__le64 h_unused2;
+} __attribute__((packed));
+
+struct incfs_blockmap {
+	struct incfs_md_header m_header;
+	__le64 m_base_offset;
+	__le32 m_block_count;
+} __attribute__((packed));
+
+struct incfs_file_signature {
+	struct incfs_md_header sg_header;
+	__le32 sg_sig_size;
+	__le64 sg_sig_offset;
+	__le32 sg_hash_tree_size;
+	__le64 sg_hash_tree_offset;
+} __attribute__((packed));
+
+struct incfs_status {
+	struct incfs_md_header is_header;
+	__le32 is_data_blocks_written;
+	__le32 is_hash_blocks_written;
+	__le32 is_dummy[6];
+} __attribute__((packed));
+
+struct incfs_file_verity_signature {
+	struct incfs_md_header vs_header;
+	__le32 vs_size;
+	__le64 vs_offset;
+} __attribute__((packed));
+
+struct metadata_handler {
+	loff_t md_record_offset;
+	loff_t md_prev_record_offset;
+	void *context;
+	union {
+		struct incfs_md_header md_header;
+		struct incfs_blockmap blockmap;
+		struct incfs_file_signature signature;
+		struct incfs_status status;
+		struct incfs_file_verity_signature verity_signature;
+	} md_buffer;
+	int (*handle_blockmap)(struct incfs_blockmap *, struct metadata_handler *);
+	int (*handle_signature)(struct incfs_file_signature *, struct metadata_handler *);
+	int (*handle_status)(struct incfs_status *, struct metadata_handler *);
+	int (*handle_verity_signature)(struct incfs_file_verity_signature *, struct metadata_handler *);
+};
+
+struct incfs_filled_range {
+	__u32 begin;
+	__u32 end;
+};
+
+struct incfs_blockmap_entry {
+	__le32 me_data_offset_lo;
+	__le16 me_data_offset_hi;
+	__le16 me_data_size;
+	__le16 me_flags;
+} __attribute__((packed));
+
+struct data_file_block {
+	loff_t db_backing_file_data_offset;
+	size_t db_stored_size;
+	enum incfs_compression_alg db_comp_alg;
+};
+
+struct incfs_read_data_file_timeouts {
+	u32 min_time_us;
+	u32 min_pending_time_us;
+	u32 max_pending_time_us;
+};
+
+struct ZSTD_inBuffer_s {
+	const void *src;
+	size_t size;
+	size_t pos;
+};
+
+typedef struct ZSTD_inBuffer_s ZSTD_inBuffer;
+
+typedef ZSTD_DStream zstd_dstream;
+
+typedef ZSTD_outBuffer zstd_out_buffer;
+
+typedef ZSTD_inBuffer zstd_in_buffer;
+
+struct dir_file {
+	struct mount_info *mount_info;
+	struct file *backing_dir;
+};
+
+struct incfs_file_data {
+	enum FILL_PERMISSION fd_fill_permission;
+	int fd_get_block_pos;
+	int fd_filled_data_blocks;
+	int fd_filled_hash_blocks;
+};
+
+struct incfs_get_filled_blocks_args {
+	__u64 range_buffer;
+	__u32 range_buffer_size;
+	__u32 start_index;
+	__u32 end_index;
+	__u32 total_blocks_out;
+	__u32 data_blocks_out;
+	__u32 range_buffer_size_out;
+	__u32 index_out;
+};
+
+struct incfs_fill_block {
+	__u32 block_index;
+	__u32 data_len;
+	__u64 data;
+	__u8 compression;
+	__u8 flags;
+	__u16 reserved1;
+	__u32 reserved2;
+	__u64 reserved3;
+};
+
+struct incfs_pending_read_info {
+	incfs_uuid_t file_id;
+	__u64 timestamp_us;
+	__u32 block_index;
+	__u32 serial_number;
+};
+
+struct incfs_pending_read_info2 {
+	incfs_uuid_t file_id;
+	__u64 timestamp_us;
+	__u32 block_index;
+	__u32 serial_number;
+	__u32 uid;
+	__u32 reserved;
+};
+
+enum incfs_metadata_type {
+	INCFS_MD_NONE = 0,
+	INCFS_MD_BLOCK_MAP = 1,
+	INCFS_MD_FILE_ATTR = 2,
+	INCFS_MD_SIGNATURE = 3,
+	INCFS_MD_STATUS = 4,
+	INCFS_MD_VERITY_SIGNATURE = 5,
+};
+
+struct incfs_file_header {
+	__le64 fh_magic;
+	__le64 fh_version;
+	__le16 fh_header_size;
+	__le16 fh_data_block_size;
+	__le32 fh_flags;
+	union {
+		struct {
+			__le64 fh_first_md_offset;
+			__le64 fh_file_size;
+			incfs_uuid_t fh_uuid;
+		};
+		struct {
+			__le64 fh_original_offset;
+			__le64 fh_mapped_file_size;
+			incfs_uuid_t fh_original_uuid;
+		};
+	};
+};
+
+struct signature_info {
+	u32 version;
+	enum incfs_hash_tree_algorithm hash_algorithm;
+	u8 log2_blocksize;
+	struct mem_range salt;
+	struct mem_range root_hash;
+};
+
+struct inode_search {
+	unsigned long ino;
+};
+
+struct incfs_new_file_args {
+	incfs_uuid_t file_id;
+	__u64 size;
+	__u16 mode;
+	__u16 reserved1;
+	__u32 reserved2;
+	__u64 directory_path;
+	__u64 file_name;
+	__u64 file_attr;
+	__u32 file_attr_len;
+	__u32 reserved4;
+	__u64 signature_info;
+	__u64 signature_size;
+	__u64 reserved6;
+};
+
+struct incfs_get_last_read_error_args {
+	incfs_uuid_t file_id_out;
+	__u64 time_us_out;
+	__u32 page_out;
+	__u32 errno_out;
+	__u32 uid_out;
+	__u32 reserved1;
+	__u64 reserved2;
+};
+
+struct incfs_get_read_timeouts_args {
+	__u64 timeouts_array;
+	__u32 timeouts_array_size;
+	__u32 timeouts_array_size_out;
+};
+
+struct incfs_permit_fill {
+	__u32 file_descriptor;
+};
+
+struct incfs_create_mapped_file_args {
+	__u64 size;
+	__u16 mode;
+	__u16 reserved1;
+	__u32 reserved2;
+	__u64 directory_path;
+	__u64 file_name;
+	incfs_uuid_t source_file_id;
+	__u64 source_offset;
+};
+
+struct incfs_set_read_timeouts_args {
+	__u64 timeouts_array;
+	__u32 timeouts_array_size;
+};
+
+struct pending_reads_state {
+	int last_pending_read_sn;
+};
+
+struct log_file_state {
+	struct read_log_state state;
+};
+
+struct blocks_written_file_state {
+	unsigned long blocks_written;
+};
+
+enum parse_parameter {
+	Opt_read_timeout = 0,
+	Opt_readahead_pages = 1,
+	Opt_rlog_pages = 2,
+	Opt_rlog_wakeup_cnt = 3,
+	Opt_report_uid = 4,
+	Opt_sysfs_name = 5,
+	Opt_err___4 = 6,
+};
+
+struct dentry_info {
+	struct path backing_path;
+};
+
+struct incfs_get_file_sig_args {
+	__u64 file_signature;
+	__u32 file_signature_buf_size;
+	__u32 file_signature_len_out;
+};
+
+struct incfs_get_block_count_args {
+	__u32 total_data_blocks_out;
+	__u32 filled_data_blocks_out;
+	__u32 total_hash_blocks_out;
+	__u32 filled_hash_blocks_out;
+};
+
+struct incfs_fill_blocks {
+	__u64 count;
+	__u64 fill_blocks;
+};
+
+struct inode_search___2 {
+	unsigned long ino;
+	struct dentry *backing_dentry;
+	size_t size;
+	bool verity;
+};
+
+enum {
+	Opt_uid___5 = 0,
+	Opt_gid___6 = 1,
+	Opt_mode___4 = 2,
+	Opt_err___5 = 3,
+};
+
+struct debugfs_fsdata {
+	const struct file_operations *real_fops;
+	union {
+		debugfs_automount_t automount;
+		struct {
+			refcount_t active_users;
+			struct completion active_users_drained;
+		};
+	};
+};
+
+struct debugfs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	unsigned int opts;
+};
+
+struct debugfs_fs_info {
+	struct debugfs_mount_opts mount_opts;
+};
+
+struct debugfs_reg32 {
+	char *name;
+	unsigned long offset;
+};
+
+struct debugfs_blob_wrapper {
+	void *data;
+	unsigned long size;
+};
+
+struct debugfs_regset32 {
+	const struct debugfs_reg32 *regs;
+	int nregs;
+	void *base;
+	struct device *dev;
+};
+
+struct debugfs_devm_entry {
+	int (*read)(struct seq_file *, void *);
+	struct device *dev;
+};
+
+struct tracefs_dir_ops {
+	int (*mkdir)(const char *);
+	int (*rmdir)(const char *);
+};
+
+enum {
+	TRACEFS_EVENT_INODE = 2,
+	TRACEFS_EVENT_TOP_INODE = 4,
+	TRACEFS_GID_PERM_SET = 8,
+	TRACEFS_UID_PERM_SET = 16,
+	TRACEFS_INSTANCE_INODE = 32,
+};
+
+struct tracefs_inode {
+	struct inode vfs_inode;
+	unsigned long flags;
+	void *private;
+};
+
+struct tracefs_mount_opts {
+	kuid_t uid;
+	kgid_t gid;
+	umode_t mode;
+	unsigned int opts;
+};
+
+struct tracefs_fs_info {
+	struct tracefs_mount_opts mount_opts;
+};
+
+struct eventfs_attr {
+	int mode;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct eventfs_inode {
+	union {
+		struct list_head list;
+		struct callback_head rcu;
+	};
+	struct list_head children;
+	const struct eventfs_entry *entries;
+	const char *name;
+	struct dentry *events_dir;
+	struct eventfs_attr *entry_attrs;
+	void *data;
+	struct eventfs_attr attr;
+	struct kref kref;
+	unsigned int is_freed: 1;
+	unsigned int is_events: 1;
+	unsigned int nr_entries: 30;
+	unsigned int ino;
+};
+
+enum {
+	EVENTFS_SAVE_MODE = 65536,
+	EVENTFS_SAVE_UID = 131072,
+	EVENTFS_SAVE_GID = 262144,
+	EVENTFS_TOPLEVEL = 524288,
+};
+
+typedef __le32 f2fs_hash_t;
+
+enum page_type {
+	DATA = 0,
+	NODE = 1,
+	META = 2,
+	NR_PAGE_TYPE = 3,
+	META_FLUSH = 4,
+	IPU = 5,
+	OPU = 6,
+};
+
+enum temp_type {
+	HOT = 0,
+	WARM = 1,
+	COLD = 2,
+	NR_TEMP_TYPE = 3,
+};
+
+enum iostat_type {
+	APP_DIRECT_IO = 0,
+	APP_BUFFERED_IO = 1,
+	APP_WRITE_IO = 2,
+	APP_MAPPED_IO = 3,
+	APP_BUFFERED_CDATA_IO = 4,
+	APP_MAPPED_CDATA_IO = 5,
+	FS_DATA_IO = 6,
+	FS_CDATA_IO = 7,
+	FS_NODE_IO = 8,
+	FS_META_IO = 9,
+	FS_GC_DATA_IO = 10,
+	FS_GC_NODE_IO = 11,
+	FS_CP_DATA_IO = 12,
+	FS_CP_NODE_IO = 13,
+	FS_CP_META_IO = 14,
+	APP_DIRECT_READ_IO = 15,
+	APP_BUFFERED_READ_IO = 16,
+	APP_READ_IO = 17,
+	APP_MAPPED_READ_IO = 18,
+	APP_BUFFERED_CDATA_READ_IO = 19,
+	APP_MAPPED_CDATA_READ_IO = 20,
+	FS_DATA_READ_IO = 21,
+	FS_GDATA_READ_IO = 22,
+	FS_CDATA_READ_IO = 23,
+	FS_NODE_READ_IO = 24,
+	FS_META_READ_IO = 25,
+	FS_DISCARD_IO = 26,
+	FS_FLUSH_IO = 27,
+	FS_ZONE_RESET_IO = 28,
+	NR_IO_TYPE = 29,
+};
+
+enum {
+	FI_NEW_INODE = 0,
+	FI_DIRTY_INODE = 1,
+	FI_AUTO_RECOVER = 2,
+	FI_DIRTY_DIR = 3,
+	FI_INC_LINK = 4,
+	FI_ACL_MODE = 5,
+	FI_NO_ALLOC = 6,
+	FI_FREE_NID = 7,
+	FI_NO_EXTENT = 8,
+	FI_INLINE_XATTR = 9,
+	FI_INLINE_DATA = 10,
+	FI_INLINE_DENTRY = 11,
+	FI_APPEND_WRITE = 12,
+	FI_UPDATE_WRITE = 13,
+	FI_NEED_IPU = 14,
+	FI_ATOMIC_FILE = 15,
+	FI_DATA_EXIST = 16,
+	FI_INLINE_DOTS = 17,
+	FI_SKIP_WRITES = 18,
+	FI_OPU_WRITE = 19,
+	FI_DIRTY_FILE = 20,
+	FI_PREALLOCATED_ALL = 21,
+	FI_HOT_DATA = 22,
+	FI_EXTRA_ATTR = 23,
+	FI_PROJ_INHERIT = 24,
+	FI_PIN_FILE = 25,
+	FI_VERITY_IN_PROGRESS = 26,
+	FI_COMPRESSED_FILE = 27,
+	FI_COMPRESS_CORRUPT = 28,
+	FI_MMAP_FILE = 29,
+	FI_ENABLE_COMPRESS = 30,
+	FI_COMPRESS_RELEASED = 31,
+	FI_ALIGNED_WRITE = 32,
+	FI_COW_FILE = 33,
+	FI_ATOMIC_COMMITTED = 34,
+	FI_ATOMIC_REPLACE = 35,
+	FI_OPENED_FILE = 36,
+	FI_MAX = 37,
+};
+
+enum {
+	FAULT_KMALLOC = 0,
+	FAULT_KVMALLOC = 1,
+	FAULT_PAGE_ALLOC = 2,
+	FAULT_PAGE_GET = 3,
+	FAULT_ALLOC_BIO = 4,
+	FAULT_ALLOC_NID = 5,
+	FAULT_ORPHAN = 6,
+	FAULT_BLOCK = 7,
+	FAULT_DIR_DEPTH = 8,
+	FAULT_EVICT_INODE = 9,
+	FAULT_TRUNCATE = 10,
+	FAULT_READ_IO = 11,
+	FAULT_CHECKPOINT = 12,
+	FAULT_DISCARD = 13,
+	FAULT_WRITE_IO = 14,
+	FAULT_SLAB_ALLOC = 15,
+	FAULT_DQUOT_INIT = 16,
+	FAULT_LOCK_OP = 17,
+	FAULT_BLKADDR_VALIDITY = 18,
+	FAULT_BLKADDR_CONSISTENCE = 19,
+	FAULT_NO_SEGMENT = 20,
+	FAULT_MAX = 21,
+};
+
+enum {
+	CP_TIME = 0,
+	REQ_TIME = 1,
+	DISCARD_TIME = 2,
+	GC_TIME = 3,
+	DISABLE_TIME = 4,
+	UMOUNT_DISCARD_TIMEOUT = 5,
+	MAX_TIME = 6,
+};
+
+enum fsync_mode {
+	FSYNC_MODE_POSIX = 0,
+	FSYNC_MODE_STRICT = 1,
+	FSYNC_MODE_NOBARRIER = 2,
+};
+
+enum {
+	ORPHAN_INO = 0,
+	APPEND_INO = 1,
+	UPDATE_INO = 2,
+	TRANS_DIR_INO = 3,
+	FLUSH_INO = 4,
+	MAX_INO_ENTRY = 5,
+};
+
+enum {
+	SBI_IS_DIRTY = 0,
+	SBI_IS_CLOSE = 1,
+	SBI_NEED_FSCK = 2,
+	SBI_POR_DOING = 3,
+	SBI_NEED_SB_WRITE = 4,
+	SBI_NEED_CP = 5,
+	SBI_IS_SHUTDOWN = 6,
+	SBI_IS_RECOVERED = 7,
+	SBI_CP_DISABLED = 8,
+	SBI_CP_DISABLED_QUICK = 9,
+	SBI_QUOTA_NEED_FLUSH = 10,
+	SBI_QUOTA_SKIP_FLUSH = 11,
+	SBI_QUOTA_NEED_REPAIR = 12,
+	SBI_IS_RESIZEFS = 13,
+	SBI_IS_FREEZING = 14,
+	SBI_IS_WRITABLE = 15,
+	MAX_SBI_FLAG = 16,
+};
+
+enum f2fs_error {
+	ERROR_CORRUPTED_CLUSTER = 0,
+	ERROR_FAIL_DECOMPRESSION = 1,
+	ERROR_INVALID_BLKADDR = 2,
+	ERROR_CORRUPTED_DIRENT = 3,
+	ERROR_CORRUPTED_INODE = 4,
+	ERROR_INCONSISTENT_SUMMARY = 5,
+	ERROR_INCONSISTENT_FOOTER = 6,
+	ERROR_INCONSISTENT_SUM_TYPE = 7,
+	ERROR_CORRUPTED_JOURNAL = 8,
+	ERROR_INCONSISTENT_NODE_COUNT = 9,
+	ERROR_INCONSISTENT_BLOCK_COUNT = 10,
+	ERROR_INVALID_CURSEG = 11,
+	ERROR_INCONSISTENT_SIT = 12,
+	ERROR_CORRUPTED_VERITY_XATTR = 13,
+	ERROR_CORRUPTED_XATTR = 14,
+	ERROR_INVALID_NODE_REFERENCE = 15,
+	ERROR_INCONSISTENT_NAT = 16,
+	ERROR_MAX = 17,
+};
+
+enum extent_type {
+	EX_READ = 0,
+	EX_BLOCK_AGE = 1,
+	NR_EXTENT_CACHES = 2,
+};
+
+enum {
+	PAGE_PRIVATE_NOT_POINTER = 0,
+	PAGE_PRIVATE_ONGOING_MIGRATION = 1,
+	PAGE_PRIVATE_INLINE_INODE = 2,
+	PAGE_PRIVATE_REF_RESOURCE = 3,
+	PAGE_PRIVATE_MAX = 4,
+};
+
+enum count_type {
+	F2FS_DIRTY_DENTS = 0,
+	F2FS_DIRTY_DATA = 1,
+	F2FS_DIRTY_QDATA = 2,
+	F2FS_DIRTY_NODES = 3,
+	F2FS_DIRTY_META = 4,
+	F2FS_DIRTY_IMETA = 5,
+	F2FS_WB_CP_DATA = 6,
+	F2FS_WB_DATA = 7,
+	F2FS_RD_DATA = 8,
+	F2FS_RD_NODE = 9,
+	F2FS_RD_META = 10,
+	F2FS_DIO_WRITE = 11,
+	F2FS_DIO_READ = 12,
+	NR_COUNT_TYPE = 13,
+};
+
+struct f2fs_rwsem {
+	struct rw_semaphore internal_rwsem;
+	wait_queue_head_t read_waiters;
+};
+
+typedef u32 nid_t;
+
+struct extent_tree;
+
+struct f2fs_inode_info {
+	struct inode vfs_inode;
+	unsigned long i_flags;
+	unsigned char i_advise;
+	unsigned char i_dir_level;
+	union {
+		unsigned int i_current_depth;
+		unsigned short i_gc_failures;
+	};
+	unsigned int i_pino;
+	umode_t i_acl_mode;
+	unsigned long flags[1];
+	struct f2fs_rwsem i_sem;
+	atomic_t dirty_pages;
+	f2fs_hash_t chash;
+	unsigned int clevel;
+	struct task_struct *task;
+	struct task_struct *cp_task;
+	struct task_struct *wb_task;
+	nid_t i_xattr_nid;
+	loff_t last_disk_size;
+	spinlock_t i_size_lock;
+	struct dquot __attribute__((btf_type_tag("rcu"))) *i_dquot[3];
+	qsize_t i_reserved_quota;
+	struct list_head dirty_list;
+	struct list_head gdirty_list;
+	struct task_struct *atomic_write_task;
+	struct extent_tree *extent_tree[2];
+	union {
+		struct inode *cow_inode;
+		struct inode *atomic_inode;
+	};
+	struct f2fs_rwsem i_gc_rwsem[2];
+	struct f2fs_rwsem i_xattr_sem;
+	int i_extra_isize;
+	kprojid_t i_projid;
+	int i_inline_xattr_size;
+	struct timespec64 i_crtime;
+	struct timespec64 i_disk_time[3];
+	atomic_t i_compr_blocks;
+	unsigned char i_compress_algorithm;
+	unsigned char i_log_cluster_size;
+	unsigned char i_compress_level;
+	unsigned char i_compress_flag;
+	unsigned int i_cluster_size;
+	unsigned int atomic_write_cnt;
+	loff_t original_i_size;
+};
+
+typedef u32 block_t;
+
+struct extent_info {
+	unsigned int fofs;
+	unsigned int len;
+	union {
+		struct {
+			block_t blk;
+			unsigned int c_len;
+		};
+		struct {
+			unsigned long long age;
+			unsigned long long last_blocks;
+		};
+	};
+};
+
+struct extent_node;
+
+struct extent_tree {
+	nid_t ino;
+	enum extent_type type;
+	struct rb_root_cached root;
+	struct extent_node *cached_en;
+	struct list_head list;
+	rwlock_t lock;
+	atomic_t node_cnt;
+	bool largest_updated;
+	struct extent_info largest;
+};
+
+struct extent_node {
+	struct rb_node rb_node;
+	struct extent_info ei;
+	struct list_head list;
+	struct extent_tree *et;
+};
+
+struct f2fs_dir_entry {
+	__le32 hash_code;
+	__le32 ino;
+	__le16 name_len;
+	__u8 file_type;
+} __attribute__((packed));
+
+struct f2fs_dentry_block {
+	__u8 dentry_bitmap[27];
+	__u8 reserved[3];
+	struct f2fs_dir_entry dentry[214];
+	__u8 filename[1712];
+};
+
+struct f2fs_extent {
+	__le32 fofs;
+	__le32 blk;
+	__le32 len;
+};
+
+struct f2fs_inode {
+	__le16 i_mode;
+	__u8 i_advise;
+	__u8 i_inline;
+	__le32 i_uid;
+	__le32 i_gid;
+	__le32 i_links;
+	__le64 i_size;
+	__le64 i_blocks;
+	__le64 i_atime;
+	__le64 i_ctime;
+	__le64 i_mtime;
+	__le32 i_atime_nsec;
+	__le32 i_ctime_nsec;
+	__le32 i_mtime_nsec;
+	__le32 i_generation;
+	union {
+		__le32 i_current_depth;
+		__le16 i_gc_failures;
+	};
+	__le32 i_xattr_nid;
+	__le32 i_flags;
+	__le32 i_pino;
+	__le32 i_namelen;
+	__u8 i_name[255];
+	__u8 i_dir_level;
+	struct f2fs_extent i_ext;
+	union {
+		struct {
+			__le16 i_extra_isize;
+			__le16 i_inline_xattr_size;
+			__le32 i_projid;
+			__le32 i_inode_checksum;
+			__le64 i_crtime;
+			__le32 i_crtime_nsec;
+			__le64 i_compr_blocks;
+			__u8 i_compress_algorithm;
+			__u8 i_log_cluster_size;
+			__le16 i_compress_flag;
+			__le32 i_extra_end[0];
+		} __attribute__((packed));
+		__le32 i_addr[923];
+	};
+	__le32 i_nid[5];
+};
+
+struct direct_node {
+	__le32 addr[1018];
+};
+
+struct indirect_node {
+	__le32 nid[1018];
+};
+
+struct node_footer {
+	__le32 nid;
+	__le32 ino;
+	__le32 flag;
+	__le64 cp_ver;
+	__le32 next_blkaddr;
+} __attribute__((packed));
+
+struct f2fs_node {
+	union {
+		struct f2fs_inode i;
+		struct direct_node dn;
+		struct indirect_node in;
+	};
+	struct node_footer footer;
+};
+
+struct ckpt_req_control {
+	struct task_struct *f2fs_issue_ckpt;
+	int ckpt_thread_ioprio;
+	wait_queue_head_t ckpt_wait_queue;
+	atomic_t issued_ckpt;
+	atomic_t total_ckpt;
+	atomic_t queued_ckpt;
+	struct llist_head issue_list;
+	spinlock_t stat_lock;
+	unsigned int cur_time;
+	unsigned int peak_time;
+};
+
+struct inode_management {
+	struct xarray ino_root;
+	spinlock_t ino_lock;
+	struct list_head ino_list;
+	unsigned long ino_num;
+};
+
+struct extent_tree_info {
+	struct xarray extent_tree_root;
+	struct mutex extent_tree_lock;
+	struct list_head extent_list;
+	spinlock_t extent_lock;
+	atomic_t total_ext_tree;
+	struct list_head zombie_list;
+	atomic_t total_zombie_tree;
+	atomic_t total_ext_node;
+};
+
+struct f2fs_mount_info {
+	unsigned int opt;
+	block_t root_reserved_blocks;
+	kuid_t s_resuid;
+	kgid_t s_resgid;
+	int active_logs;
+	int inline_xattr_size;
+	char *s_qf_names[3];
+	int s_jquota_fmt;
+	int alloc_mode;
+	int fsync_mode;
+	int fs_mode;
+	int bggc_mode;
+	int memory_mode;
+	int errors;
+	int discard_unit;
+	struct fscrypt_dummy_policy dummy_enc_policy;
+	block_t unusable_cap_perc;
+	block_t unusable_cap;
+	unsigned char compress_algorithm;
+	unsigned char compress_log_size;
+	unsigned char compress_level;
+	bool compress_chksum;
+	unsigned char compress_ext_cnt;
+	unsigned char nocompress_ext_cnt;
+	int compress_mode;
+	unsigned char extensions[128];
+	unsigned char noextensions[128];
+};
+
+struct atgc_management {
+	bool atgc_enabled;
+	struct rb_root_cached root;
+	struct list_head victim_list;
+	unsigned int victim_count;
+	unsigned int candidate_ratio;
+	unsigned int max_candidate_count;
+	unsigned int age_weight;
+	unsigned long long age_threshold;
+};
+
+struct f2fs_super_block;
+
+struct f2fs_nm_info;
+
+struct f2fs_sm_info;
+
+struct f2fs_bio_info;
+
+struct f2fs_checkpoint;
+
+struct f2fs_gc_kthread;
+
+struct f2fs_stat_info;
+
+struct f2fs_dev_info;
+
+struct iostat_lat_info;
+
+struct f2fs_sb_info {
+	struct super_block *sb;
+	struct proc_dir_entry *s_proc;
+	struct f2fs_super_block *raw_super;
+	struct f2fs_rwsem sb_lock;
+	int valid_super_block;
+	unsigned long s_flag;
+	struct mutex writepages;
+	unsigned int blocks_per_blkz;
+	unsigned int max_open_zones;
+	struct f2fs_nm_info *nm_info;
+	struct inode *node_inode;
+	struct f2fs_sm_info *sm_info;
+	struct f2fs_bio_info *write_io[3];
+	struct f2fs_rwsem io_order_lock;
+	unsigned long page_eio_ofs[3];
+	int page_eio_cnt[3];
+	struct f2fs_checkpoint *ckpt;
+	int cur_cp_pack;
+	spinlock_t cp_lock;
+	struct inode *meta_inode;
+	struct f2fs_rwsem cp_global_sem;
+	struct f2fs_rwsem cp_rwsem;
+	struct f2fs_rwsem node_write;
+	struct f2fs_rwsem node_change;
+	wait_queue_head_t cp_wait;
+	unsigned long last_time[6];
+	long interval_time[6];
+	struct ckpt_req_control cprc_info;
+	struct inode_management im[5];
+	spinlock_t fsync_node_lock;
+	struct list_head fsync_node_list;
+	unsigned int fsync_seg_id;
+	unsigned int fsync_node_num;
+	unsigned int max_orphans;
+	struct list_head inode_list[3];
+	spinlock_t inode_lock[3];
+	struct mutex flush_lock;
+	struct extent_tree_info extent_tree[2];
+	atomic64_t allocated_data_blocks;
+	unsigned int hot_data_age_threshold;
+	unsigned int warm_data_age_threshold;
+	unsigned int last_age_weight;
+	unsigned int log_sectors_per_block;
+	unsigned int log_blocksize;
+	unsigned int blocksize;
+	unsigned int root_ino_num;
+	unsigned int node_ino_num;
+	unsigned int meta_ino_num;
+	unsigned int log_blocks_per_seg;
+	unsigned int blocks_per_seg;
+	unsigned int unusable_blocks_per_sec;
+	unsigned int segs_per_sec;
+	unsigned int secs_per_zone;
+	unsigned int total_sections;
+	unsigned int total_node_count;
+	unsigned int total_valid_node_count;
+	int dir_level;
+	bool readdir_ra;
+	u64 max_io_bytes;
+	block_t user_block_count;
+	block_t total_valid_block_count;
+	block_t discard_blks;
+	block_t last_valid_block_count;
+	block_t reserved_blocks;
+	block_t current_reserved_blocks;
+	block_t unusable_block_count;
+	unsigned int nquota_files;
+	struct f2fs_rwsem quota_sem;
+	atomic_t nr_pages[13];
+	struct percpu_counter alloc_valid_block_count;
+	struct percpu_counter rf_node_block_count;
+	atomic_t wb_sync_req[2];
+	struct percpu_counter total_valid_inode_count;
+	struct f2fs_mount_info mount_opt;
+	struct f2fs_rwsem gc_lock;
+	struct f2fs_gc_kthread *gc_thread;
+	struct atgc_management am;
+	unsigned int cur_victim_sec;
+	unsigned int gc_mode;
+	unsigned int next_victim_seg[2];
+	spinlock_t gc_remaining_trials_lock;
+	unsigned int gc_remaining_trials;
+	unsigned long long skipped_gc_rwsem;
+	unsigned short gc_pin_file_threshold;
+	struct f2fs_rwsem pin_sem;
+	unsigned int max_victim_search;
+	unsigned int migration_granularity;
+	struct f2fs_stat_info *stat_info;
+	atomic_t meta_count[4];
+	unsigned int segment_count[2];
+	unsigned int block_count[2];
+	atomic_t inplace_count;
+	atomic64_t total_hit_ext[2];
+	atomic64_t read_hit_rbtree[2];
+	atomic64_t read_hit_cached[2];
+	atomic64_t read_hit_largest;
+	atomic_t inline_xattr;
+	atomic_t inline_inode;
+	atomic_t inline_dir;
+	atomic_t compr_inode;
+	atomic64_t compr_blocks;
+	atomic_t swapfile_inode;
+	atomic_t atomic_files;
+	atomic_t max_aw_cnt;
+	unsigned int io_skip_bggc;
+	unsigned int other_skip_bggc;
+	unsigned int ndirty_inode[3];
+	atomic_t cp_call_count[2];
+	spinlock_t stat_lock;
+	unsigned int data_io_flag;
+	unsigned int node_io_flag;
+	struct kobject s_kobj;
+	struct completion s_kobj_unregister;
+	struct kobject s_stat_kobj;
+	struct completion s_stat_kobj_unregister;
+	struct kobject s_feature_list_kobj;
+	struct completion s_feature_list_kobj_unregister;
+	struct list_head s_list;
+	struct mutex umount_mutex;
+	unsigned int shrinker_run_no;
+	int s_ndevs;
+	struct f2fs_dev_info *devs;
+	unsigned int dirty_device;
+	spinlock_t dev_lock;
+	bool aligned_blksize;
+	u64 sectors_written_start;
+	u64 kbytes_written;
+	struct crypto_shash *s_chksum_driver;
+	__u32 s_chksum_seed;
+	struct workqueue_struct *post_read_wq;
+	struct work_struct s_error_work;
+	unsigned char errors[16];
+	unsigned char stop_reason[32];
+	spinlock_t error_lock;
+	bool error_dirty;
+	struct kmem_cache *inline_xattr_slab;
+	unsigned int inline_xattr_slab_size;
+	unsigned int gc_segment_mode;
+	unsigned int gc_reclaimed_segs[7];
+	unsigned long seq_file_ra_mul;
+	int max_fragment_chunk;
+	int max_fragment_hole;
+	atomic64_t current_atomic_write;
+	s64 peak_atomic_write;
+	u64 committed_atomic_block;
+	u64 revoked_atomic_block;
+	struct kmem_cache *page_array_slab;
+	unsigned int page_array_slab_size;
+	u64 compr_written_block;
+	u64 compr_saved_block;
+	u32 compr_new_inode;
+	struct inode *compress_inode;
+	unsigned int compress_percent;
+	unsigned int compress_watermark;
+	atomic_t compress_page_hit;
+	spinlock_t iostat_lock;
+	unsigned long long iostat_count[29];
+	unsigned long long iostat_bytes[29];
+	unsigned long long prev_iostat_bytes[29];
+	bool iostat_enable;
+	unsigned long iostat_next_period;
+	unsigned int iostat_period_ms;
+	spinlock_t iostat_lat_lock;
+	struct iostat_lat_info *iostat_io_lat;
+};
+
+struct f2fs_device {
+	__u8 path[64];
+	__le32 total_segments;
+};
+
+struct f2fs_super_block {
+	__le32 magic;
+	__le16 major_ver;
+	__le16 minor_ver;
+	__le32 log_sectorsize;
+	__le32 log_sectors_per_block;
+	__le32 log_blocksize;
+	__le32 log_blocks_per_seg;
+	__le32 segs_per_sec;
+	__le32 secs_per_zone;
+	__le32 checksum_offset;
+	__le64 block_count;
+	__le32 section_count;
+	__le32 segment_count;
+	__le32 segment_count_ckpt;
+	__le32 segment_count_sit;
+	__le32 segment_count_nat;
+	__le32 segment_count_ssa;
+	__le32 segment_count_main;
+	__le32 segment0_blkaddr;
+	__le32 cp_blkaddr;
+	__le32 sit_blkaddr;
+	__le32 nat_blkaddr;
+	__le32 ssa_blkaddr;
+	__le32 main_blkaddr;
+	__le32 root_ino;
+	__le32 node_ino;
+	__le32 meta_ino;
+	__u8 uuid[16];
+	__le16 volume_name[512];
+	__le32 extension_count;
+	__u8 extension_list[512];
+	__le32 cp_payload;
+	__u8 version[256];
+	__u8 init_version[256];
+	__le32 feature;
+	__u8 encryption_level;
+	__u8 encrypt_pw_salt[16];
+	struct f2fs_device devs[8];
+	__le32 qf_ino[3];
+	__u8 hot_ext_count;
+	__le16 s_encoding;
+	__le16 s_encoding_flags;
+	__u8 s_stop_reason[32];
+	__u8 s_errors[16];
+	__u8 reserved[258];
+	__le32 crc;
+} __attribute__((packed));
+
+struct f2fs_nm_info {
+	block_t nat_blkaddr;
+	nid_t max_nid;
+	nid_t available_nids;
+	nid_t next_scan_nid;
+	nid_t max_rf_node_blocks;
+	unsigned int ram_thresh;
+	unsigned int ra_nid_pages;
+	unsigned int dirty_nats_ratio;
+	struct xarray nat_root;
+	struct xarray nat_set_root;
+	struct f2fs_rwsem nat_tree_lock;
+	struct list_head nat_entries;
+	spinlock_t nat_list_lock;
+	unsigned int nat_cnt[3];
+	unsigned int nat_blocks;
+	struct xarray free_nid_root;
+	struct list_head free_nid_list;
+	unsigned int nid_cnt[2];
+	spinlock_t nid_list_lock;
+	struct mutex build_lock;
+	unsigned char **free_nid_bitmap;
+	unsigned char *nat_block_bitmap;
+	unsigned short *free_nid_count;
+	char *nat_bitmap;
+	unsigned int nat_bits_blocks;
+	unsigned char *nat_bits;
+	unsigned char *full_nat_bits;
+	unsigned char *empty_nat_bits;
+	int bitmap_size;
+};
+
+struct sit_info;
+
+struct free_segmap_info;
+
+struct dirty_seglist_info;
+
+struct curseg_info;
+
+struct flush_cmd_control;
+
+struct discard_cmd_control;
+
+struct f2fs_sm_info {
+	struct sit_info *sit_info;
+	struct free_segmap_info *free_info;
+	struct dirty_seglist_info *dirty_info;
+	struct curseg_info *curseg_array;
+	struct f2fs_rwsem curseg_lock;
+	block_t seg0_blkaddr;
+	block_t main_blkaddr;
+	block_t ssa_blkaddr;
+	unsigned int segment_count;
+	unsigned int main_segments;
+	unsigned int reserved_segments;
+	unsigned int additional_reserved_segments;
+	unsigned int ovp_segments;
+	unsigned int rec_prefree_segments;
+	struct list_head sit_entry_set;
+	unsigned int ipu_policy;
+	unsigned int min_ipu_util;
+	unsigned int min_fsync_blocks;
+	unsigned int min_seq_blocks;
+	unsigned int min_hot_blocks;
+	unsigned int min_ssr_sections;
+	struct flush_cmd_control *fcc_info;
+	struct discard_cmd_control *dcc_info;
+};
+
+struct flush_cmd_control {
+	struct task_struct *f2fs_issue_flush;
+	wait_queue_head_t flush_wait_queue;
+	atomic_t issued_flush;
+	atomic_t queued_flush;
+	struct llist_head issue_list;
+	struct llist_node *dispatch_list;
+};
+
+struct discard_cmd_control {
+	struct task_struct *f2fs_issue_discard;
+	struct list_head entry_list;
+	struct list_head pend_list[512];
+	struct list_head wait_list;
+	struct list_head fstrim_list;
+	wait_queue_head_t discard_wait_queue;
+	struct mutex cmd_lock;
+	unsigned int nr_discards;
+	unsigned int max_discards;
+	unsigned int max_discard_request;
+	unsigned int min_discard_issue_time;
+	unsigned int mid_discard_issue_time;
+	unsigned int max_discard_issue_time;
+	unsigned int discard_io_aware_gran;
+	unsigned int discard_urgent_util;
+	unsigned int discard_granularity;
+	unsigned int max_ordered_discard;
+	unsigned int discard_io_aware;
+	unsigned int undiscard_blks;
+	unsigned int next_pos;
+	atomic_t issued_discard;
+	atomic_t queued_discard;
+	atomic_t discard_cmd_cnt;
+	struct rb_root_cached root;
+	bool rbtree_check;
+	bool discard_wake;
+};
+
+struct f2fs_io_info {
+	struct f2fs_sb_info *sbi;
+	nid_t ino;
+	enum page_type type;
+	enum temp_type temp;
+	enum req_op op;
+	blk_opf_t op_flags;
+	block_t new_blkaddr;
+	block_t old_blkaddr;
+	struct page *page;
+	struct page *encrypted_page;
+	struct page *compressed_page;
+	struct list_head list;
+	unsigned int compr_blocks;
+	unsigned int need_lock: 8;
+	unsigned int version: 8;
+	unsigned int submitted: 1;
+	unsigned int in_list: 1;
+	unsigned int is_por: 1;
+	unsigned int encrypted: 1;
+	unsigned int meta_gc: 1;
+	enum iostat_type io_type;
+	struct writeback_control *io_wbc;
+	struct bio **bio;
+	sector_t *last_block;
+};
+
+struct f2fs_bio_info {
+	struct f2fs_sb_info *sbi;
+	struct bio *bio;
+	sector_t last_block_in_bio;
+	struct f2fs_io_info fio;
+	struct completion zone_wait;
+	struct bio *zone_pending_bio;
+	void *bi_private;
+	struct f2fs_rwsem io_rwsem;
+	spinlock_t io_lock;
+	struct list_head io_list;
+	struct list_head bio_list;
+	struct f2fs_rwsem bio_list_lock;
+};
+
+struct f2fs_checkpoint {
+	__le64 checkpoint_ver;
+	__le64 user_block_count;
+	__le64 valid_block_count;
+	__le32 rsvd_segment_count;
+	__le32 overprov_segment_count;
+	__le32 free_segment_count;
+	__le32 cur_node_segno[8];
+	__le16 cur_node_blkoff[8];
+	__le32 cur_data_segno[8];
+	__le16 cur_data_blkoff[8];
+	__le32 ckpt_flags;
+	__le32 cp_pack_total_block_count;
+	__le32 cp_pack_start_sum;
+	__le32 valid_node_count;
+	__le32 valid_inode_count;
+	__le32 next_free_nid;
+	__le32 sit_ver_bitmap_bytesize;
+	__le32 nat_ver_bitmap_bytesize;
+	__le32 checksum_offset;
+	__le64 elapsed_time;
+	unsigned char alloc_type[16];
+	unsigned char sit_nat_version_bitmap[0];
+};
+
+struct f2fs_stat_info {
+	struct list_head stat_list;
+	struct f2fs_sb_info *sbi;
+	int all_area_segs;
+	int sit_area_segs;
+	int nat_area_segs;
+	int ssa_area_segs;
+	int main_area_segs;
+	int main_area_sections;
+	int main_area_zones;
+	unsigned long long hit_cached[2];
+	unsigned long long hit_rbtree[2];
+	unsigned long long total_ext[2];
+	unsigned long long hit_total[2];
+	int ext_tree[2];
+	int zombie_tree[2];
+	int ext_node[2];
+	unsigned long long ext_mem[2];
+	unsigned long long hit_largest;
+	unsigned long long allocated_data_blocks;
+	int ndirty_node;
+	int ndirty_dent;
+	int ndirty_meta;
+	int ndirty_imeta;
+	int ndirty_data;
+	int ndirty_qdata;
+	unsigned int ndirty_dirs;
+	unsigned int ndirty_files;
+	unsigned int nquota_files;
+	unsigned int ndirty_all;
+	int nats;
+	int dirty_nats;
+	int sits;
+	int dirty_sits;
+	int free_nids;
+	int avail_nids;
+	int alloc_nids;
+	int total_count;
+	int utilization;
+	int nr_wb_cp_data;
+	int nr_wb_data;
+	int nr_rd_data;
+	int nr_rd_node;
+	int nr_rd_meta;
+	int nr_dio_read;
+	int nr_dio_write;
+	unsigned int io_skip_bggc;
+	unsigned int other_skip_bggc;
+	int nr_flushing;
+	int nr_flushed;
+	int flush_list_empty;
+	int nr_discarding;
+	int nr_discarded;
+	int nr_discard_cmd;
+	unsigned int undiscard_blks;
+	int nr_issued_ckpt;
+	int nr_total_ckpt;
+	int nr_queued_ckpt;
+	unsigned int cur_ckpt_time;
+	unsigned int peak_ckpt_time;
+	int inline_xattr;
+	int inline_inode;
+	int inline_dir;
+	int append;
+	int update;
+	int orphans;
+	int compr_inode;
+	int swapfile_inode;
+	unsigned long long compr_blocks;
+	int aw_cnt;
+	int max_aw_cnt;
+	unsigned int valid_count;
+	unsigned int valid_node_count;
+	unsigned int valid_inode_count;
+	unsigned int discard_blks;
+	unsigned int bimodal;
+	unsigned int avg_vblocks;
+	int util_free;
+	int util_valid;
+	int util_invalid;
+	int rsvd_segs;
+	int overp_segs;
+	int dirty_count;
+	int node_pages;
+	int meta_pages;
+	int compress_pages;
+	int compress_page_hit;
+	int prefree_count;
+	int free_segs;
+	int free_secs;
+	int cp_call_count[2];
+	int cp_count;
+	int gc_call_count[2];
+	int gc_segs[4];
+	int gc_secs[4];
+	int tot_blks;
+	int data_blks;
+	int node_blks;
+	int bg_data_blks;
+	int bg_node_blks;
+	int curseg[8];
+	int cursec[8];
+	int curzone[8];
+	unsigned int dirty_seg[8];
+	unsigned int full_seg[8];
+	unsigned int valid_blks[8];
+	unsigned int meta_count[4];
+	unsigned int segment_count[2];
+	unsigned int block_count[2];
+	unsigned int inplace_count;
+	unsigned long long base_mem;
+	unsigned long long cache_mem;
+	unsigned long long page_mem;
+};
+
+struct f2fs_dev_info {
+	struct block_device *bdev;
+	char path[64];
+	unsigned int total_segments;
+	block_t start_blk;
+	block_t end_blk;
+	unsigned int nr_blkz;
+	unsigned long *blkz_seq;
+};
+
+struct f2fs_filename {
+	const struct qstr *usr_fname;
+	struct fscrypt_str disk_name;
+	f2fs_hash_t hash;
+	struct fscrypt_str crypto_buf;
+	struct fscrypt_str cf_name;
+};
+
+struct f2fs_dentry_ptr {
+	struct inode *inode;
+	void *bitmap;
+	struct f2fs_dir_entry *dentry;
+	__u8 (*filename)[8];
+	int max;
+	int nr_bitmap;
+};
+
+enum {
+	META_CP = 0,
+	META_NAT = 1,
+	META_SIT = 2,
+	META_SSA = 3,
+	META_MAX = 4,
+	META_POR = 5,
+	DATA_GENERIC = 6,
+	DATA_GENERIC_ENHANCE = 7,
+	DATA_GENERIC_ENHANCE_READ = 8,
+	DATA_GENERIC_ENHANCE_UPDATE = 9,
+	META_GENERIC = 10,
+};
+
+enum {
+	ALLOC_NODE = 0,
+	LOOKUP_NODE = 1,
+	LOOKUP_NODE_RA = 2,
+};
+
+enum stop_cp_reason {
+	STOP_CP_REASON_SHUTDOWN = 0,
+	STOP_CP_REASON_FAULT_INJECT = 1,
+	STOP_CP_REASON_META_PAGE = 2,
+	STOP_CP_REASON_WRITE_FAIL = 3,
+	STOP_CP_REASON_CORRUPTED_SUMMARY = 4,
+	STOP_CP_REASON_UPDATE_INODE = 5,
+	STOP_CP_REASON_FLUSH_FAIL = 6,
+	STOP_CP_REASON_NO_SEGMENT = 7,
+	STOP_CP_REASON_MAX = 8,
+};
+
+enum {
+	CURSEG_HOT_DATA = 0,
+	CURSEG_WARM_DATA = 1,
+	CURSEG_COLD_DATA = 2,
+	CURSEG_HOT_NODE = 3,
+	CURSEG_WARM_NODE = 4,
+	CURSEG_COLD_NODE = 5,
+	NR_PERSISTENT_LOG = 6,
+	CURSEG_COLD_DATA_PINNED = 6,
+	CURSEG_ALL_DATA_ATGC = 7,
+	NO_CHECK_TYPE = 8,
+};
+
+enum {
+	F2FS_GET_BLOCK_DEFAULT = 0,
+	F2FS_GET_BLOCK_FIEMAP = 1,
+	F2FS_GET_BLOCK_BMAP = 2,
+	F2FS_GET_BLOCK_DIO = 3,
+	F2FS_GET_BLOCK_PRE_DIO = 4,
+	F2FS_GET_BLOCK_PRE_AIO = 5,
+	F2FS_GET_BLOCK_PRECACHE = 6,
+};
+
+enum cp_reason_type {
+	CP_NO_NEEDED = 0,
+	CP_NON_REGULAR = 1,
+	CP_COMPRESSED = 2,
+	CP_HARDLINK = 3,
+	CP_SB_NEED_CP = 4,
+	CP_WRONG_PINO = 5,
+	CP_NO_SPC_ROLL = 6,
+	CP_NODE_NEED_CP = 7,
+	CP_FASTBOOT_MODE = 8,
+	CP_SPEC_LOG_NUM = 9,
+	CP_RECOVER_DIR = 10,
+};
+
+enum inode_type {
+	DIR_INODE = 0,
+	FILE_INODE = 1,
+	DIRTY_META = 2,
+	NR_INODE_TYPE = 3,
+};
+
+enum {
+	COLD_BIT_SHIFT = 0,
+	FSYNC_BIT_SHIFT = 1,
+	DENT_BIT_SHIFT = 2,
+	OFFSET_BIT_SHIFT = 3,
+};
+
+enum compress_flag {
+	COMPRESS_CHKSUM = 0,
+	COMPRESS_MAX_FLAG = 1,
+};
+
+enum compress_algorithm_type {
+	COMPRESS_LZO = 0,
+	COMPRESS_LZ4 = 1,
+	COMPRESS_ZSTD = 2,
+	COMPRESS_LZORLE = 3,
+	COMPRESS_MAX = 4,
+};
+
+enum {
+	BG_GC = 0,
+	FG_GC = 1,
+};
+
+enum {
+	BACKGROUND = 0,
+	FOREGROUND = 1,
+	MAX_CALL_TYPE = 2,
+	TOTAL_CALL = 1,
+};
+
+enum {
+	FS_MODE_ADAPTIVE = 0,
+	FS_MODE_LFS = 1,
+	FS_MODE_FRAGMENT_SEG = 2,
+	FS_MODE_FRAGMENT_BLK = 3,
+};
+
+enum {
+	GC_CB = 0,
+	GC_GREEDY = 1,
+	GC_AT = 2,
+	ALLOC_NEXT = 3,
+	FLUSH_DEVICE = 4,
+	MAX_GC_POLICY = 5,
+};
+
+enum {
+	COMPR_MODE_FS = 0,
+	COMPR_MODE_USER = 1,
+};
+
+struct seg_entry;
+
+struct sec_entry;
+
+struct sit_info {
+	block_t sit_base_addr;
+	block_t sit_blocks;
+	block_t written_valid_blocks;
+	char *bitmap;
+	char *sit_bitmap;
+	unsigned int bitmap_size;
+	unsigned long *tmp_map;
+	unsigned long *dirty_sentries_bitmap;
+	unsigned int dirty_sentries;
+	unsigned int sents_per_block;
+	struct rw_semaphore sentry_lock;
+	struct seg_entry *sentries;
+	struct sec_entry *sec_entries;
+	unsigned long long elapsed_time;
+	unsigned long long mounted_time;
+	unsigned long long min_mtime;
+	unsigned long long max_mtime;
+	unsigned long long dirty_min_mtime;
+	unsigned long long dirty_max_mtime;
+	unsigned int last_victim[5];
+};
+
+struct seg_entry {
+	unsigned int type: 6;
+	unsigned int valid_blocks: 10;
+	unsigned int ckpt_valid_blocks: 10;
+	unsigned int padding: 6;
+	unsigned char *cur_valid_map;
+	unsigned char *ckpt_valid_map;
+	unsigned char *discard_map;
+	unsigned long long mtime;
+};
+
+struct sec_entry {
+	unsigned int valid_blocks;
+};
+
+struct free_segmap_info {
+	unsigned int start_segno;
+	unsigned int free_segments;
+	unsigned int free_sections;
+	spinlock_t segmap_lock;
+	unsigned long *free_segmap;
+	unsigned long *free_secmap;
+};
+
+struct dirty_seglist_info {
+	unsigned long *dirty_segmap[8];
+	unsigned long *dirty_secmap;
+	struct mutex seglist_lock;
+	int nr_dirty[8];
+	unsigned long *victim_secmap;
+	unsigned long *pinned_secmap;
+	unsigned int pinned_secmap_cnt;
+	bool enable_pin_section;
+};
+
+struct f2fs_summary_block;
+
+struct f2fs_journal;
+
+struct curseg_info {
+	struct mutex curseg_mutex;
+	struct f2fs_summary_block *sum_blk;
+	struct rw_semaphore journal_rwsem;
+	struct f2fs_journal *journal;
+	unsigned char alloc_type;
+	unsigned short seg_type;
+	unsigned int segno;
+	unsigned short next_blkoff;
+	unsigned int zone;
+	unsigned int next_segno;
+	int fragment_remained_chunk;
+	bool inited;
+};
+
+struct f2fs_summary {
+	__le32 nid;
+	union {
+		__u8 reserved[3];
+		struct {
+			__u8 version;
+			__le16 ofs_in_node;
+		} __attribute__((packed));
+	};
+} __attribute__((packed));
+
+struct f2fs_nat_entry {
+	__u8 version;
+	__le32 ino;
+	__le32 block_addr;
+} __attribute__((packed));
+
+struct nat_journal_entry {
+	__le32 nid;
+	struct f2fs_nat_entry ne;
+} __attribute__((packed));
+
+struct nat_journal {
+	struct nat_journal_entry entries[38];
+	__u8 reserved[11];
+};
+
+struct f2fs_sit_entry {
+	__le16 vblocks;
+	__u8 valid_map[64];
+	__le64 mtime;
+} __attribute__((packed));
+
+struct sit_journal_entry {
+	__le32 segno;
+	struct f2fs_sit_entry se;
+} __attribute__((packed));
+
+struct sit_journal {
+	struct sit_journal_entry entries[6];
+	__u8 reserved[37];
+};
+
+struct f2fs_extra_info {
+	__le64 kbytes_written;
+	__u8 reserved[497];
+} __attribute__((packed));
+
+struct f2fs_journal {
+	union {
+		__le16 n_nats;
+		__le16 n_sits;
+	};
+	union {
+		struct nat_journal nat_j;
+		struct sit_journal sit_j;
+		struct f2fs_extra_info info;
+	};
+} __attribute__((packed));
+
+struct summary_footer {
+	unsigned char entry_type;
+	__le32 check_sum;
+} __attribute__((packed));
+
+struct f2fs_summary_block {
+	struct f2fs_summary entries[512];
+	struct f2fs_journal journal;
+	struct summary_footer footer;
+};
+
+struct f2fs_gc_kthread {
+	struct task_struct *f2fs_gc_task;
+	wait_queue_head_t gc_wait_queue_head;
+	unsigned int urgent_sleep_time;
+	unsigned int min_sleep_time;
+	unsigned int max_sleep_time;
+	unsigned int no_gc_sleep_time;
+	bool gc_wake;
+	wait_queue_head_t fggc_wq;
+};
+
+struct iostat_lat_info {
+	unsigned long sum_lat[9];
+	unsigned long peak_lat[9];
+	unsigned int bio_cnt[9];
+};
+
+struct f2fs_gc_range {
+	__u32 sync;
+	__u64 start;
+	__u64 len;
+};
+
+struct f2fs_defragment {
+	__u64 start;
+	__u64 len;
+};
+
+struct f2fs_move_range {
+	__u32 dst_fd;
+	__u64 pos_in;
+	__u64 pos_out;
+	__u64 len;
+};
+
+struct f2fs_flush_device {
+	__u32 dev_num;
+	__u32 segments;
+};
+
+struct f2fs_sectrim_range {
+	__u64 start;
+	__u64 len;
+	__u64 flags;
+};
+
+struct f2fs_comp_option {
+	__u8 algorithm;
+	__u8 log_cluster_size;
+};
+
+struct dnode_of_data {
+	struct inode *inode;
+	struct page *inode_page;
+	struct page *node_page;
+	nid_t nid;
+	unsigned int ofs_in_node;
+	bool inode_page_locked;
+	bool node_changed;
+	char cur_level;
+	char max_level;
+	block_t data_blkaddr;
+};
+
+struct f2fs_map_blocks {
+	struct block_device *m_bdev;
+	block_t m_pblk;
+	block_t m_lblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+	unsigned long *m_next_pgofs;
+	unsigned long *m_next_extent;
+	int m_seg_type;
+	bool m_may_create;
+	bool m_multidev_dio;
+};
+
+struct f2fs_gc_control {
+	unsigned int victim_segno;
+	int init_gc_type;
+	bool no_bg_gc;
+	bool should_migrate_blocks;
+	bool err_gc_skipped;
+	unsigned int nr_free_secs;
+};
+
+struct node_info {
+	nid_t nid;
+	nid_t ino;
+	block_t blk_addr;
+	unsigned char version;
+	unsigned char flag;
+};
+
+struct compat_f2fs_gc_range {
+	u32 sync;
+	compat_u64 start;
+	compat_u64 len;
+} __attribute__((packed));
+
+struct compat_f2fs_move_range {
+	u32 dst_fd;
+	compat_u64 pos_in;
+	compat_u64 pos_out;
+	compat_u64 len;
+} __attribute__((packed));
+
+typedef void (*btf_trace_f2fs_sync_file_enter)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_sync_file_exit)(void *, struct inode *, int, int, int);
+
+typedef void (*btf_trace_f2fs_sync_fs)(void *, struct super_block *, int);
+
+typedef void (*btf_trace_f2fs_iget)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_iget_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_evict_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_new_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_unlink_enter)(void *, struct inode *, struct dentry *);
+
+typedef void (*btf_trace_f2fs_unlink_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_drop_inode)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate)(void *, struct inode *);
+
+typedef void (*btf_trace_f2fs_truncate_data_blocks_range)(void *, struct inode *, nid_t, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_truncate_blocks_enter)(void *, struct inode *, u64);
+
+typedef void (*btf_trace_f2fs_truncate_blocks_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate_inode_blocks_enter)(void *, struct inode *, u64);
+
+typedef void (*btf_trace_f2fs_truncate_inode_blocks_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate_nodes_enter)(void *, struct inode *, nid_t, block_t);
+
+typedef void (*btf_trace_f2fs_truncate_nodes_exit)(void *, struct inode *, int);
+
+typedef void (*btf_trace_f2fs_truncate_node)(void *, struct inode *, nid_t, block_t);
+
+typedef void (*btf_trace_f2fs_truncate_partial_nodes)(void *, struct inode *, nid_t *, int, int);
+
+typedef void (*btf_trace_f2fs_file_write_iter)(void *, struct inode *, loff_t, size_t, ssize_t);
+
+typedef void (*btf_trace_f2fs_map_blocks)(void *, struct inode *, struct f2fs_map_blocks *, int, int);
+
+typedef void (*btf_trace_f2fs_background_gc)(void *, struct super_block *, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_f2fs_gc_begin)(void *, struct super_block *, int, bool, unsigned int, long long, long long, long long, unsigned int, unsigned int, int, unsigned int);
+
+typedef void (*btf_trace_f2fs_gc_end)(void *, struct super_block *, int, int, int, long long, long long, long long, unsigned int, unsigned int, int, unsigned int);
+
+struct victim_sel_policy;
+
+typedef void (*btf_trace_f2fs_get_victim)(void *, struct super_block *, int, int, struct victim_sel_policy *, unsigned int, unsigned int, unsigned int);
+
+struct victim_sel_policy {
+	int alloc_mode;
+	int gc_mode;
+	unsigned long *dirty_bitmap;
+	unsigned int max_search;
+	unsigned int offset;
+	unsigned int ofs_unit;
+	unsigned int min_cost;
+	unsigned long long oldest_age;
+	unsigned int min_segno;
+	unsigned long long age;
+	unsigned long long age_threshold;
+};
+
+typedef void (*btf_trace_f2fs_lookup_start)(void *, struct inode *, struct dentry *, unsigned int);
+
+typedef void (*btf_trace_f2fs_lookup_end)(void *, struct inode *, struct dentry *, nid_t, int);
+
+typedef void (*btf_trace_f2fs_rename_start)(void *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);
+
+typedef void (*btf_trace_f2fs_rename_end)(void *, struct dentry *, struct dentry *, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_readdir)(void *, struct inode *, loff_t, loff_t, int);
+
+typedef void (*btf_trace_f2fs_fallocate)(void *, struct inode *, int, loff_t, loff_t, int);
+
+typedef void (*btf_trace_f2fs_direct_IO_enter)(void *, struct inode *, struct kiocb *, long, int);
+
+typedef void (*btf_trace_f2fs_direct_IO_exit)(void *, struct inode *, loff_t, unsigned long, int, int);
+
+typedef void (*btf_trace_f2fs_reserve_new_blocks)(void *, struct inode *, nid_t, unsigned int, blkcnt_t);
+
+typedef void (*btf_trace_f2fs_submit_page_bio)(void *, struct page *, struct f2fs_io_info *);
+
+typedef void (*btf_trace_f2fs_submit_page_write)(void *, struct page *, struct f2fs_io_info *);
+
+typedef void (*btf_trace_f2fs_prepare_write_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_prepare_read_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_submit_read_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_submit_write_bio)(void *, struct super_block *, int, struct bio *);
+
+typedef void (*btf_trace_f2fs_write_begin)(void *, struct inode *, loff_t, unsigned int);
+
+typedef void (*btf_trace_f2fs_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);
+
+typedef void (*btf_trace_f2fs_writepage)(void *, struct folio *, int);
+
+typedef void (*btf_trace_f2fs_do_write_data_page)(void *, struct folio *, int);
+
+typedef void (*btf_trace_f2fs_readpage)(void *, struct folio *, int);
+
+typedef void (*btf_trace_f2fs_set_page_dirty)(void *, struct folio *, int);
+
+typedef void (*btf_trace_f2fs_replace_atomic_write_block)(void *, struct inode *, struct inode *, unsigned long, block_t, block_t, bool);
+
+typedef void (*btf_trace_f2fs_filemap_fault)(void *, struct inode *, unsigned long, vm_flags_t, vm_fault_t);
+
+typedef void (*btf_trace_f2fs_vm_page_mkwrite)(void *, struct inode *, unsigned long, vm_flags_t, vm_fault_t);
+
+typedef void (*btf_trace_f2fs_writepages)(void *, struct inode *, struct writeback_control *, int);
+
+typedef void (*btf_trace_f2fs_readpages)(void *, struct inode *, unsigned long, unsigned int);
+
+typedef void (*btf_trace_f2fs_write_checkpoint)(void *, struct super_block *, int, const char *);
+
+typedef void (*btf_trace_f2fs_queue_discard)(void *, struct block_device *, block_t, block_t);
+
+typedef void (*btf_trace_f2fs_issue_discard)(void *, struct block_device *, block_t, block_t);
+
+typedef void (*btf_trace_f2fs_remove_discard)(void *, struct block_device *, block_t, block_t);
+
+typedef void (*btf_trace_f2fs_queue_reset_zone)(void *, struct block_device *, block_t);
+
+typedef void (*btf_trace_f2fs_issue_reset_zone)(void *, struct block_device *, block_t);
+
+typedef void (*btf_trace_f2fs_issue_flush)(void *, struct block_device *, unsigned int, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_lookup_extent_tree_start)(void *, struct inode *, unsigned int, enum extent_type);
+
+typedef void (*btf_trace_f2fs_lookup_read_extent_tree_end)(void *, struct inode *, unsigned int, struct extent_info *);
+
+typedef void (*btf_trace_f2fs_lookup_age_extent_tree_end)(void *, struct inode *, unsigned int, struct extent_info *);
+
+typedef void (*btf_trace_f2fs_update_read_extent_tree_range)(void *, struct inode *, unsigned int, unsigned int, block_t, unsigned int);
+
+typedef void (*btf_trace_f2fs_update_age_extent_tree_range)(void *, struct inode *, unsigned int, unsigned int, unsigned long long, unsigned long long);
+
+typedef void (*btf_trace_f2fs_shrink_extent_tree)(void *, struct f2fs_sb_info *, unsigned int, unsigned int, enum extent_type);
+
+typedef void (*btf_trace_f2fs_destroy_extent_tree)(void *, struct inode *, unsigned int, enum extent_type);
+
+typedef void (*btf_trace_f2fs_sync_dirty_inodes_enter)(void *, struct super_block *, int, s64);
+
+typedef void (*btf_trace_f2fs_sync_dirty_inodes_exit)(void *, struct super_block *, int, s64);
+
+typedef void (*btf_trace_f2fs_shutdown)(void *, struct f2fs_sb_info *, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_compress_pages_start)(void *, struct inode *, unsigned long, unsigned int, unsigned char);
+
+typedef void (*btf_trace_f2fs_decompress_pages_start)(void *, struct inode *, unsigned long, unsigned int, unsigned char);
+
+typedef void (*btf_trace_f2fs_compress_pages_end)(void *, struct inode *, unsigned long, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_decompress_pages_end)(void *, struct inode *, unsigned long, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_iostat)(void *, struct f2fs_sb_info *, unsigned long long *);
+
+struct f2fs_iostat_latency {
+	unsigned int peak_lat;
+	unsigned int avg_lat;
+	unsigned int cnt;
+};
+
+typedef void (*btf_trace_f2fs_iostat_latency)(void *, struct f2fs_sb_info *, struct f2fs_iostat_latency(*)[3]);
+
+typedef void (*btf_trace_f2fs_bmap)(void *, struct inode *, sector_t, sector_t);
+
+typedef void (*btf_trace_f2fs_fiemap)(void *, struct inode *, sector_t, sector_t, unsigned long long, unsigned int, int);
+
+typedef void (*btf_trace_f2fs_dataread_start)(void *, struct inode *, loff_t, int, pid_t, char *, char *);
+
+typedef void (*btf_trace_f2fs_dataread_end)(void *, struct inode *, loff_t, int);
+
+typedef void (*btf_trace_f2fs_datawrite_start)(void *, struct inode *, loff_t, int, pid_t, char *, char *);
+
+typedef void (*btf_trace_f2fs_datawrite_end)(void *, struct inode *, loff_t, int);
+
+struct f2fs_sb_encodings {
+	__u16 magic;
+	char *name;
+	unsigned int version;
+};
+
+enum errors_option {
+	MOUNT_ERRORS_READONLY = 0,
+	MOUNT_ERRORS_CONTINUE = 1,
+	MOUNT_ERRORS_PANIC = 2,
+};
+
+enum iostat_lat_type {
+	READ_IO = 0,
+	WRITE_SYNC_IO = 1,
+	WRITE_ASYNC_IO = 2,
+	MAX_IO_TYPE = 3,
+};
+
+enum {
+	BGGC_MODE_ON = 0,
+	BGGC_MODE_OFF = 1,
+	BGGC_MODE_SYNC = 2,
+};
+
+enum {
+	DISCARD_UNIT_BLOCK = 0,
+	DISCARD_UNIT_SEGMENT = 1,
+	DISCARD_UNIT_SECTION = 2,
+};
+
+enum {
+	ALLOC_MODE_DEFAULT = 0,
+	ALLOC_MODE_REUSE = 1,
+};
+
+enum {
+	MEMORY_MODE_NORMAL = 0,
+	MEMORY_MODE_LOW = 1,
+};
+
+enum {
+	Opt_gc_background = 0,
+	Opt_disable_roll_forward = 1,
+	Opt_norecovery = 2,
+	Opt_discard___4 = 3,
+	Opt_nodiscard___2 = 4,
+	Opt_noheap = 5,
+	Opt_heap = 6,
+	Opt_user_xattr___2 = 7,
+	Opt_nouser_xattr = 8,
+	Opt_acl___2 = 9,
+	Opt_noacl = 10,
+	Opt_active_logs = 11,
+	Opt_disable_ext_identify = 12,
+	Opt_inline_xattr = 13,
+	Opt_noinline_xattr = 14,
+	Opt_inline_xattr_size = 15,
+	Opt_inline_data = 16,
+	Opt_inline_dentry = 17,
+	Opt_noinline_dentry = 18,
+	Opt_flush_merge = 19,
+	Opt_noflush_merge = 20,
+	Opt_barrier___2 = 21,
+	Opt_nobarrier___2 = 22,
+	Opt_fastboot = 23,
+	Opt_extent_cache = 24,
+	Opt_noextent_cache = 25,
+	Opt_noinline_data = 26,
+	Opt_data_flush = 27,
+	Opt_reserve_root = 28,
+	Opt_resgid___2 = 29,
+	Opt_resuid___2 = 30,
+	Opt_mode___5 = 31,
+	Opt_fault_injection = 32,
+	Opt_fault_type = 33,
+	Opt_lazytime = 34,
+	Opt_nolazytime = 35,
+	Opt_quota___3 = 36,
+	Opt_noquota___2 = 37,
+	Opt_usrquota___3 = 38,
+	Opt_grpquota___3 = 39,
+	Opt_prjquota___2 = 40,
+	Opt_usrjquota___2 = 41,
+	Opt_grpjquota___2 = 42,
+	Opt_prjjquota = 43,
+	Opt_offusrjquota = 44,
+	Opt_offgrpjquota = 45,
+	Opt_offprjjquota = 46,
+	Opt_jqfmt_vfsold = 47,
+	Opt_jqfmt_vfsv0 = 48,
+	Opt_jqfmt_vfsv1 = 49,
+	Opt_alloc = 50,
+	Opt_fsync = 51,
+	Opt_test_dummy_encryption___2 = 52,
+	Opt_inlinecrypt___2 = 53,
+	Opt_checkpoint_disable = 54,
+	Opt_checkpoint_disable_cap = 55,
+	Opt_checkpoint_disable_cap_perc = 56,
+	Opt_checkpoint_enable = 57,
+	Opt_checkpoint_merge = 58,
+	Opt_nocheckpoint_merge = 59,
+	Opt_compress_algorithm = 60,
+	Opt_compress_log_size = 61,
+	Opt_compress_extension = 62,
+	Opt_nocompress_extension = 63,
+	Opt_compress_chksum = 64,
+	Opt_compress_mode = 65,
+	Opt_compress_cache = 66,
+	Opt_atgc = 67,
+	Opt_gc_merge = 68,
+	Opt_nogc_merge = 69,
+	Opt_discard_unit = 70,
+	Opt_memory_mode = 71,
+	Opt_age_extent_cache = 72,
+	Opt_errors___3 = 73,
+	Opt_err___6 = 74,
+};
+
+enum {
+	GC_NORMAL = 0,
+	GC_IDLE_CB = 1,
+	GC_IDLE_GREEDY = 2,
+	GC_IDLE_AT = 3,
+	GC_URGENT_HIGH = 4,
+	GC_URGENT_LOW = 5,
+	GC_URGENT_MID = 6,
+	MAX_GC_MODE = 7,
+};
+
+enum blk_zone_type {
+	BLK_ZONE_TYPE_CONVENTIONAL = 1,
+	BLK_ZONE_TYPE_SEQWRITE_REQ = 2,
+	BLK_ZONE_TYPE_SEQWRITE_PREF = 3,
+};
+
+enum {
+	F2FS_IPU_FORCE = 0,
+	F2FS_IPU_SSR = 1,
+	F2FS_IPU_UTIL = 2,
+	F2FS_IPU_SSR_UTIL = 3,
+	F2FS_IPU_FSYNC = 4,
+	F2FS_IPU_ASYNC = 5,
+	F2FS_IPU_NOCACHE = 6,
+	F2FS_IPU_HONOR_OPU_WRITE = 7,
+	F2FS_IPU_MAX = 8,
+};
+
+struct trace_event_raw_f2fs__inode {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t pino;
+	umode_t mode;
+	loff_t size;
+	unsigned int nlink;
+	blkcnt_t blocks;
+	__u8 advise;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_sync_file_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int cp_reason;
+	int datasync;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_sync_fs {
+	struct trace_entry ent;
+	dev_t dev;
+	int dirty;
+	int wait;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__inode_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	umode_t mode;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_unlink_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t size;
+	blkcnt_t blocks;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_truncate_data_blocks_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	nid_t nid;
+	unsigned int ofs;
+	int free;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__truncate_op {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t size;
+	blkcnt_t blocks;
+	u64 from;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__truncate_node {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	nid_t nid;
+	block_t blk_addr;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_truncate_partial_nodes {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	nid_t nid[3];
+	int depth;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_file_write_iter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t offset;
+	size_t length;
+	ssize_t ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_map_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	block_t m_lblk;
+	block_t m_pblk;
+	unsigned int m_len;
+	unsigned int m_flags;
+	int m_seg_type;
+	bool m_may_create;
+	bool m_multidev_dio;
+	int flag;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_background_gc {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int wait_ms;
+	unsigned int prefree;
+	unsigned int free;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_gc_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	int gc_type;
+	bool no_bg_gc;
+	unsigned int nr_free_secs;
+	long long dirty_nodes;
+	long long dirty_dents;
+	long long dirty_imeta;
+	unsigned int free_sec;
+	unsigned int free_seg;
+	int reserved_seg;
+	unsigned int prefree_seg;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_gc_end {
+	struct trace_entry ent;
+	dev_t dev;
+	int ret;
+	int seg_freed;
+	int sec_freed;
+	long long dirty_nodes;
+	long long dirty_dents;
+	long long dirty_imeta;
+	unsigned int free_sec;
+	unsigned int free_seg;
+	int reserved_seg;
+	unsigned int prefree_seg;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_get_victim {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	int gc_type;
+	int alloc_mode;
+	int gc_mode;
+	unsigned int victim;
+	unsigned int cost;
+	unsigned int ofs_unit;
+	unsigned int pre_victim;
+	unsigned int prefree;
+	unsigned int free;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	u32 __data_loc_name;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	u32 __data_loc_name;
+	nid_t cino;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_rename_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	u32 __data_loc_old_name;
+	ino_t new_pino;
+	u32 __data_loc_new_name;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_rename_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	u32 __data_loc_old_name;
+	u32 __data_loc_new_name;
+	unsigned int flags;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_readdir {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t start;
+	loff_t end;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_fallocate {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int mode;
+	loff_t offset;
+	loff_t len;
+	loff_t size;
+	blkcnt_t blocks;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_direct_IO_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t ki_pos;
+	int ki_flags;
+	u16 ki_ioprio;
+	unsigned long len;
+	int rw;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_direct_IO_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned long len;
+	int rw;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_reserve_new_blocks {
+	struct trace_entry ent;
+	dev_t dev;
+	nid_t nid;
+	unsigned int ofs_in_node;
+	blkcnt_t count;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__submit_page_bio {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long index;
+	block_t old_blkaddr;
+	block_t new_blkaddr;
+	enum req_op op;
+	blk_opf_t op_flags;
+	int temp;
+	int type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__bio {
+	struct trace_entry ent;
+	dev_t dev;
+	dev_t target;
+	enum req_op op;
+	blk_opf_t op_flags;
+	int type;
+	sector_t sector;
+	unsigned int size;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_write_begin {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_write_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	loff_t pos;
+	unsigned int len;
+	unsigned int copied;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__folio {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int type;
+	int dir;
+	unsigned long index;
+	int dirty;
+	int uptodate;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_replace_atomic_write_block {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	ino_t cow_ino;
+	unsigned long index;
+	block_t old_addr;
+	block_t new_addr;
+	bool recovery;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_mmap {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long index;
+	vm_flags_t flags;
+	vm_fault_t ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_writepages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	int type;
+	int dir;
+	long nr_to_write;
+	long pages_skipped;
+	loff_t range_start;
+	loff_t range_end;
+	unsigned long writeback_index;
+	int sync_mode;
+	char for_kupdate;
+	char for_background;
+	char tagged_writepages;
+	char for_reclaim;
+	char range_cyclic;
+	char for_sync;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_readpages {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long start;
+	unsigned int nrpage;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_write_checkpoint {
+	struct trace_entry ent;
+	dev_t dev;
+	int reason;
+	u32 __data_loc_dest_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_discard {
+	struct trace_entry ent;
+	dev_t dev;
+	block_t blkstart;
+	block_t blklen;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_reset_zone {
+	struct trace_entry ent;
+	dev_t dev;
+	block_t blkstart;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_issue_flush {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int nobarrier;
+	unsigned int flush_merge;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_extent_tree_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	enum extent_type type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_read_extent_tree_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	unsigned int fofs;
+	unsigned int len;
+	u32 blk;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_lookup_age_extent_tree_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	unsigned int fofs;
+	unsigned int len;
+	unsigned long long age;
+	unsigned long long blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_update_read_extent_tree_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	u32 blk;
+	unsigned int len;
+	unsigned int c_len;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_update_age_extent_tree_range {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int pgofs;
+	unsigned int len;
+	unsigned long long age;
+	unsigned long long blocks;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_shrink_extent_tree {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int node_cnt;
+	unsigned int tree_cnt;
+	enum extent_type type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_destroy_extent_tree {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned int node_cnt;
+	enum extent_type type;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_sync_dirty_inodes {
+	struct trace_entry ent;
+	dev_t dev;
+	int type;
+	s64 count;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_shutdown {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int mode;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_zip_start {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long idx;
+	unsigned int size;
+	unsigned int algtype;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_zip_end {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	unsigned long idx;
+	unsigned int size;
+	unsigned int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_iostat {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned long long app_dio;
+	unsigned long long app_bio;
+	unsigned long long app_wio;
+	unsigned long long app_mio;
+	unsigned long long app_bcdio;
+	unsigned long long app_mcdio;
+	unsigned long long fs_dio;
+	unsigned long long fs_cdio;
+	unsigned long long fs_nio;
+	unsigned long long fs_mio;
+	unsigned long long fs_gc_dio;
+	unsigned long long fs_gc_nio;
+	unsigned long long fs_cp_dio;
+	unsigned long long fs_cp_nio;
+	unsigned long long fs_cp_mio;
+	unsigned long long app_drio;
+	unsigned long long app_brio;
+	unsigned long long app_rio;
+	unsigned long long app_mrio;
+	unsigned long long app_bcrio;
+	unsigned long long app_mcrio;
+	unsigned long long fs_drio;
+	unsigned long long fs_gdrio;
+	unsigned long long fs_cdrio;
+	unsigned long long fs_nrio;
+	unsigned long long fs_mrio;
+	unsigned long long fs_discard;
+	unsigned long long fs_reset_zone;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_iostat_latency {
+	struct trace_entry ent;
+	dev_t dev;
+	unsigned int d_rd_peak;
+	unsigned int d_rd_avg;
+	unsigned int d_rd_cnt;
+	unsigned int n_rd_peak;
+	unsigned int n_rd_avg;
+	unsigned int n_rd_cnt;
+	unsigned int m_rd_peak;
+	unsigned int m_rd_avg;
+	unsigned int m_rd_cnt;
+	unsigned int d_wr_s_peak;
+	unsigned int d_wr_s_avg;
+	unsigned int d_wr_s_cnt;
+	unsigned int n_wr_s_peak;
+	unsigned int n_wr_s_avg;
+	unsigned int n_wr_s_cnt;
+	unsigned int m_wr_s_peak;
+	unsigned int m_wr_s_avg;
+	unsigned int m_wr_s_cnt;
+	unsigned int d_wr_as_peak;
+	unsigned int d_wr_as_avg;
+	unsigned int d_wr_as_cnt;
+	unsigned int n_wr_as_peak;
+	unsigned int n_wr_as_avg;
+	unsigned int n_wr_as_cnt;
+	unsigned int m_wr_as_peak;
+	unsigned int m_wr_as_avg;
+	unsigned int m_wr_as_cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_bmap {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	sector_t lblock;
+	sector_t pblock;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs_fiemap {
+	struct trace_entry ent;
+	dev_t dev;
+	ino_t ino;
+	sector_t lblock;
+	sector_t pblock;
+	unsigned long long len;
+	unsigned int flags;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__rw_start {
+	struct trace_entry ent;
+	u32 __data_loc_pathbuf;
+	loff_t offset;
+	int bytes;
+	loff_t i_size;
+	u32 __data_loc_cmdline;
+	pid_t pid;
+	ino_t ino;
+	char __data[0];
+};
+
+struct trace_event_raw_f2fs__rw_end {
+	struct trace_entry ent;
+	ino_t ino;
+	loff_t offset;
+	int bytes;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_f2fs_unlink_enter {
+	u32 name;
+};
+
+struct trace_event_data_offsets_f2fs_lookup_start {
+	u32 name;
+};
+
+struct trace_event_data_offsets_f2fs_lookup_end {
+	u32 name;
+};
+
+struct trace_event_data_offsets_f2fs_write_checkpoint {
+	u32 dest_msg;
+};
+
+struct cp_control {
+	int reason;
+	__u64 trim_start;
+	__u64 trim_end;
+	__u64 trim_minlen;
+};
+
+struct f2fs_report_zones_args {
+	struct f2fs_sb_info *sbi;
+	struct f2fs_dev_info *dev;
+};
+
+struct trace_event_data_offsets_f2fs__inode {};
+
+struct trace_event_data_offsets_f2fs__inode_exit {};
+
+struct trace_event_data_offsets_f2fs_sync_file_exit {};
+
+struct trace_event_data_offsets_f2fs_sync_fs {};
+
+struct trace_event_data_offsets_f2fs_truncate_data_blocks_range {};
+
+struct trace_event_data_offsets_f2fs__truncate_op {};
+
+struct trace_event_data_offsets_f2fs__truncate_node {};
+
+struct trace_event_data_offsets_f2fs_truncate_partial_nodes {};
+
+struct trace_event_data_offsets_f2fs_file_write_iter {};
+
+struct trace_event_data_offsets_f2fs_map_blocks {};
+
+struct trace_event_data_offsets_f2fs_background_gc {};
+
+struct trace_event_data_offsets_f2fs_gc_begin {};
+
+struct trace_event_data_offsets_f2fs_gc_end {};
+
+struct trace_event_data_offsets_f2fs_get_victim {};
+
+struct trace_event_data_offsets_f2fs_rename_start {
+	u32 old_name;
+	u32 new_name;
+};
+
+struct trace_event_data_offsets_f2fs_rename_end {
+	u32 old_name;
+	u32 new_name;
+};
+
+struct trace_event_data_offsets_f2fs_readdir {};
+
+struct trace_event_data_offsets_f2fs_fallocate {};
+
+struct trace_event_data_offsets_f2fs_direct_IO_enter {};
+
+struct trace_event_data_offsets_f2fs_direct_IO_exit {};
+
+struct trace_event_data_offsets_f2fs_reserve_new_blocks {};
+
+struct trace_event_data_offsets_f2fs__submit_page_bio {};
+
+struct trace_event_data_offsets_f2fs__bio {};
+
+struct trace_event_data_offsets_f2fs_write_begin {};
+
+struct trace_event_data_offsets_f2fs_write_end {};
+
+struct trace_event_data_offsets_f2fs__folio {};
+
+struct trace_event_data_offsets_f2fs_replace_atomic_write_block {};
+
+struct trace_event_data_offsets_f2fs_mmap {};
+
+struct trace_event_data_offsets_f2fs_writepages {};
+
+struct trace_event_data_offsets_f2fs_readpages {};
+
+struct trace_event_data_offsets_f2fs_discard {};
+
+struct trace_event_data_offsets_f2fs_reset_zone {};
+
+struct trace_event_data_offsets_f2fs_issue_flush {};
+
+struct trace_event_data_offsets_f2fs_lookup_extent_tree_start {};
+
+struct trace_event_data_offsets_f2fs_lookup_read_extent_tree_end {};
+
+struct trace_event_data_offsets_f2fs_lookup_age_extent_tree_end {};
+
+struct trace_event_data_offsets_f2fs_update_read_extent_tree_range {};
+
+struct trace_event_data_offsets_f2fs_update_age_extent_tree_range {};
+
+struct trace_event_data_offsets_f2fs_shrink_extent_tree {};
+
+struct trace_event_data_offsets_f2fs_destroy_extent_tree {};
+
+struct trace_event_data_offsets_f2fs_sync_dirty_inodes {};
+
+struct trace_event_data_offsets_f2fs_shutdown {};
+
+struct trace_event_data_offsets_f2fs_zip_start {};
+
+struct trace_event_data_offsets_f2fs_zip_end {};
+
+struct trace_event_data_offsets_f2fs_iostat {};
+
+struct trace_event_data_offsets_f2fs_iostat_latency {};
+
+struct trace_event_data_offsets_f2fs_bmap {};
+
+struct trace_event_data_offsets_f2fs_fiemap {};
+
+struct trace_event_data_offsets_f2fs__rw_start {
+	u32 pathbuf;
+	u32 cmdline;
+};
+
+struct trace_event_data_offsets_f2fs__rw_end {};
+
+enum nat_state {
+	TOTAL_NAT = 0,
+	DIRTY_NAT = 1,
+	RECLAIMABLE_NAT = 2,
+	MAX_NAT_STATE = 3,
+};
+
+enum nid_state {
+	FREE_NID = 0,
+	PREALLOC_NID = 1,
+	MAX_NID_STATE = 2,
+};
+
+enum dirty_type {
+	DIRTY_HOT_DATA = 0,
+	DIRTY_WARM_DATA = 1,
+	DIRTY_COLD_DATA = 2,
+	DIRTY_HOT_NODE = 3,
+	DIRTY_WARM_NODE = 4,
+	DIRTY_COLD_NODE = 5,
+	DIRTY___2 = 6,
+	PRE = 7,
+	NR_DIRTY_TYPE = 8,
+};
+
+enum {
+	NAT_BITMAP = 0,
+	SIT_BITMAP = 1,
+};
+
+struct ino_entry {
+	struct list_head list;
+	nid_t ino;
+	unsigned int dirty_device;
+};
+
+struct f2fs_orphan_block {
+	__le32 ino[1020];
+	__le32 reserved;
+	__le16 blk_addr;
+	__le16 blk_count;
+	__le32 entry_count;
+	__le32 check_sum;
+};
+
+struct free_nid {
+	struct list_head list;
+	nid_t nid;
+	int state;
+};
+
+struct ckpt_req {
+	struct completion wait;
+	struct llist_node llnode;
+	int ret;
+	ktime_t queue_time;
+};
+
+enum {
+	LFS = 0,
+	SSR = 1,
+	AT_SSR = 2,
+};
+
+enum need_lock_type {
+	LOCK_REQ = 0,
+	LOCK_DONE = 1,
+	LOCK_RETRY = 2,
+};
+
+struct victim_entry {
+	struct rb_node rb_node;
+	unsigned long long mtime;
+	unsigned int segno;
+	struct list_head list;
+};
+
+struct inode_entry {
+	struct list_head list;
+	struct inode *inode;
+};
+
+struct gc_inode_list {
+	struct list_head ilist;
+	struct xarray iroot;
+};
+
+enum bio_post_read_step___2 {
+	STEP_DECRYPT___2 = 1,
+	STEP_DECOMPRESS = 2,
+	STEP_VERITY___2 = 4,
+};
+
+enum mem_type {
+	FREE_NIDS = 0,
+	NAT_ENTRIES = 1,
+	DIRTY_DENTS = 2,
+	INO_ENTRIES = 3,
+	READ_EXTENT_CACHE = 4,
+	AGE_EXTENT_CACHE = 5,
+	DISCARD_CACHE = 6,
+	COMPRESS_PAGE = 7,
+	BASE_CHECK = 8,
+};
+
+struct bio_entry {
+	struct bio *bio;
+	struct list_head list;
+};
+
+struct bio_post_read_ctx___2 {
+	struct bio *bio;
+	struct f2fs_sb_info *sbi;
+	struct work_struct work;
+	unsigned int enabled_steps;
+	bool decompression_attempted;
+	block_t fs_blkaddr;
+};
+
+struct bio_iostat_ctx {
+	struct f2fs_sb_info *sbi;
+	unsigned long submit_ts;
+	enum page_type type;
+	struct bio_post_read_ctx___2 *post_read_ctx;
+};
+
+struct bvec_iter_all {
+	struct bio_vec bv;
+	int idx;
+	unsigned int done;
+};
+
+struct compress_data;
+
+struct compress_ctx {
+	struct inode *inode;
+	unsigned long cluster_idx;
+	unsigned int cluster_size;
+	unsigned int log_cluster_size;
+	struct page **rpages;
+	unsigned int nr_rpages;
+	struct page **cpages;
+	unsigned int nr_cpages;
+	unsigned int valid_nr_cpages;
+	void *rbuf;
+	struct compress_data *cbuf;
+	size_t rlen;
+	size_t clen;
+	void *private;
+	void *private2;
+};
+
+struct compress_data {
+	__le32 clen;
+	__le32 chksum;
+	__le32 reserved[4];
+	u8 cdata[0];
+};
+
+struct decompress_io_ctx {
+	u32 magic;
+	struct inode *inode;
+	unsigned long cluster_idx;
+	unsigned int cluster_size;
+	unsigned int log_cluster_size;
+	struct page **rpages;
+	unsigned int nr_rpages;
+	struct page **cpages;
+	unsigned int nr_cpages;
+	struct page **tpages;
+	void *rbuf;
+	struct compress_data *cbuf;
+	size_t rlen;
+	size_t clen;
+	atomic_t remaining_pages;
+	refcount_t refcnt;
+	bool failed;
+	bool need_verity;
+	void *private;
+	void *private2;
+	struct work_struct verity_work;
+	struct work_struct free_work;
+};
+
+enum {
+	IS_CHECKPOINTED = 0,
+	HAS_FSYNCED_INODE = 1,
+	HAS_LAST_FSYNC = 2,
+	IS_DIRTY = 3,
+	IS_PREALLOC = 4,
+};
+
+enum {
+	NAT_JOURNAL = 0,
+	SIT_JOURNAL = 1,
+};
+
+struct fsync_node_entry {
+	struct list_head list;
+	struct page *page;
+	unsigned int seq_id;
+};
+
+struct nat_entry {
+	struct list_head list;
+	struct node_info ni;
+};
+
+struct f2fs_nat_block {
+	struct f2fs_nat_entry entries[455];
+};
+
+struct nat_entry_set {
+	struct list_head set_list;
+	struct list_head entry_list;
+	nid_t set;
+	unsigned int entry_cnt;
+};
+
+enum {
+	DPOLICY_BG = 0,
+	DPOLICY_FORCE = 1,
+	DPOLICY_FSTRIM = 2,
+	DPOLICY_UMOUNT = 3,
+	MAX_DPOLICY = 4,
+};
+
+enum {
+	D_PREP = 0,
+	D_PARTIAL = 1,
+	D_SUBMIT = 2,
+	D_DONE = 3,
+};
+
+enum {
+	DPOLICY_IO_AWARE_DISABLE = 0,
+	DPOLICY_IO_AWARE_ENABLE = 1,
+	DPOLICY_IO_AWARE_MAX = 2,
+};
+
+enum blk_zone_cond {
+	BLK_ZONE_COND_NOT_WP = 0,
+	BLK_ZONE_COND_EMPTY = 1,
+	BLK_ZONE_COND_IMP_OPEN = 2,
+	BLK_ZONE_COND_EXP_OPEN = 3,
+	BLK_ZONE_COND_CLOSED = 4,
+	BLK_ZONE_COND_READONLY = 13,
+	BLK_ZONE_COND_FULL = 14,
+	BLK_ZONE_COND_OFFLINE = 15,
+};
+
+struct flush_cmd {
+	struct completion wait;
+	struct llist_node llnode;
+	nid_t ino;
+	int ret;
+};
+
+struct discard_entry {
+	struct list_head list;
+	block_t start_blkaddr;
+	unsigned char discard_map[64];
+};
+
+struct sit_entry_set {
+	struct list_head set_list;
+	unsigned int start_segno;
+	unsigned int entry_cnt;
+};
+
+struct revoke_entry {
+	struct list_head list;
+	block_t old_addr;
+	unsigned long index;
+};
+
+struct discard_info {
+	block_t lstart;
+	block_t len;
+	block_t start;
+};
+
+struct discard_cmd {
+	struct rb_node rb_node;
+	struct discard_info di;
+	struct list_head list;
+	struct completion wait;
+	struct block_device *bdev;
+	unsigned short ref;
+	unsigned char state;
+	unsigned char queued;
+	int error;
+	spinlock_t lock;
+	unsigned short bio_ref;
+};
+
+struct f2fs_sit_block {
+	struct f2fs_sit_entry entries[55];
+};
+
+struct check_zone_write_pointer_args {
+	struct f2fs_sb_info *sbi;
+	struct f2fs_dev_info *fdev;
+};
+
+struct discard_policy {
+	int type;
+	unsigned int min_interval;
+	unsigned int mid_interval;
+	unsigned int max_interval;
+	unsigned int max_requests;
+	unsigned int io_aware_gran;
+	bool io_aware;
+	bool sync;
+	bool ordered;
+	bool timeout;
+	unsigned int granularity;
+};
+
+struct fsync_inode_entry {
+	struct list_head list;
+	struct inode *inode;
+	block_t blkaddr;
+	block_t last_dentry;
+};
+
+struct f2fs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct f2fs_attr *, struct f2fs_sb_info *, char *);
+	ssize_t (*store)(struct f2fs_attr *, struct f2fs_sb_info *, const char *, size_t);
+	int struct_type;
+	int offset;
+	int id;
+};
+
+enum {
+	GC_THREAD = 0,
+	SM_INFO = 1,
+	DCC_INFO = 2,
+	NM_INFO = 3,
+	F2FS_SBI = 4,
+	STAT_INFO = 5,
+	RESERVED_BLOCKS = 6,
+	CPRC_INFO = 7,
+	ATGC_INFO = 8,
+};
+
+struct f2fs_xattr_entry {
+	__u8 e_name_index;
+	__u8 e_name_len;
+	__le16 e_value_size;
+	char e_name[0];
+};
+
+struct f2fs_xattr_header {
+	__le32 h_magic;
+	__le32 h_refcount;
+	__u32 h_reserved[4];
+};
+
+struct f2fs_acl_header {
+	__le32 a_version;
+};
+
+struct f2fs_acl_entry {
+	__le16 e_tag;
+	__le16 e_perm;
+	__le32 e_id;
+};
+
+struct fsverity_descriptor_location {
+	__le32 version;
+	__le32 size;
+	__le64 pos;
+};
+
+struct f2fs_compress_ops {
+	int (*init_compress_ctx)(struct compress_ctx *);
+	void (*destroy_compress_ctx)(struct compress_ctx *);
+	int (*compress_pages)(struct compress_ctx *);
+	int (*init_decompress_ctx)(struct decompress_io_ctx *);
+	void (*destroy_decompress_ctx)(struct decompress_io_ctx *);
+	int (*decompress_pages)(struct decompress_io_ctx *);
+	bool (*is_level_valid)(int);
+};
+
+struct compress_io_ctx {
+	u32 magic;
+	struct inode *inode;
+	struct page **rpages;
+	unsigned int nr_rpages;
+	atomic_t pending_pages;
+};
+
+typedef enum {
+	ZSTD_fast = 1,
+	ZSTD_dfast = 2,
+	ZSTD_greedy = 3,
+	ZSTD_lazy = 4,
+	ZSTD_lazy2 = 5,
+	ZSTD_btlazy2 = 6,
+	ZSTD_btopt = 7,
+	ZSTD_btultra = 8,
+	ZSTD_btultra2 = 9,
+} ZSTD_strategy;
+
+typedef struct {
+	unsigned int windowLog;
+	unsigned int chainLog;
+	unsigned int hashLog;
+	unsigned int searchLog;
+	unsigned int minMatch;
+	unsigned int targetLength;
+	ZSTD_strategy strategy;
+} ZSTD_compressionParameters;
+
+typedef struct {
+	int contentSizeFlag;
+	int checksumFlag;
+	int noDictIDFlag;
+} ZSTD_frameParameters;
+
+typedef struct {
+	ZSTD_compressionParameters cParams;
+	ZSTD_frameParameters fParams;
+} ZSTD_parameters;
+
+typedef ZSTD_parameters zstd_parameters;
+
+typedef ZSTD_compressionParameters zstd_compression_parameters;
+
+typedef enum {
+	ZSTDcs_created = 0,
+	ZSTDcs_init = 1,
+	ZSTDcs_ongoing = 2,
+	ZSTDcs_ending = 3,
+} ZSTD_compressionStage_e;
+
+typedef enum {
+	ZSTD_dictDefaultAttach = 0,
+	ZSTD_dictForceAttach = 1,
+	ZSTD_dictForceCopy = 2,
+	ZSTD_dictForceLoad = 3,
+} ZSTD_dictAttachPref_e;
+
+typedef enum {
+	ZSTD_ps_auto = 0,
+	ZSTD_ps_enable = 1,
+	ZSTD_ps_disable = 2,
+} ZSTD_paramSwitch_e;
+
+typedef struct {
+	ZSTD_paramSwitch_e enableLdm;
+	U32 hashLog;
+	U32 bucketSizeLog;
+	U32 minMatchLength;
+	U32 hashRateLog;
+	U32 windowLog;
+} ldmParams_t;
+
+typedef enum {
+	ZSTD_sf_noBlockDelimiters = 0,
+	ZSTD_sf_explicitBlockDelimiters = 1,
+} ZSTD_sequenceFormat_e;
+
+struct ZSTD_CCtx_params_s {
+	ZSTD_format_e format;
+	ZSTD_compressionParameters cParams;
+	ZSTD_frameParameters fParams;
+	int compressionLevel;
+	int forceWindow;
+	size_t targetCBlockSize;
+	int srcSizeHint;
+	ZSTD_dictAttachPref_e attachDictPref;
+	ZSTD_paramSwitch_e literalCompressionMode;
+	int nbWorkers;
+	size_t jobSize;
+	int overlapLog;
+	int rsyncable;
+	ldmParams_t ldmParams;
+	int enableDedicatedDictSearch;
+	ZSTD_bufferMode_e inBufferMode;
+	ZSTD_bufferMode_e outBufferMode;
+	ZSTD_sequenceFormat_e blockDelimiters;
+	int validateSequences;
+	ZSTD_paramSwitch_e useBlockSplitter;
+	ZSTD_paramSwitch_e useRowMatchFinder;
+	int deterministicRefPrefix;
+	ZSTD_customMem customMem;
+};
+
+typedef struct ZSTD_CCtx_params_s ZSTD_CCtx_params;
+
+typedef enum {
+	ZSTD_cwksp_alloc_objects = 0,
+	ZSTD_cwksp_alloc_buffers = 1,
+	ZSTD_cwksp_alloc_aligned = 2,
+} ZSTD_cwksp_alloc_phase_e;
+
+typedef enum {
+	ZSTD_cwksp_dynamic_alloc = 0,
+	ZSTD_cwksp_static_alloc = 1,
+} ZSTD_cwksp_static_alloc_e;
+
+typedef struct {
+	void *workspace;
+	void *workspaceEnd;
+	void *objectEnd;
+	void *tableEnd;
+	void *tableValidEnd;
+	void *allocStart;
+	BYTE allocFailed;
+	int workspaceOversizedDuration;
+	ZSTD_cwksp_alloc_phase_e phase;
+	ZSTD_cwksp_static_alloc_e isStatic;
+} ZSTD_cwksp;
+
+struct POOL_ctx_s;
+
+typedef struct POOL_ctx_s ZSTD_threadPool;
+
+typedef struct {
+	unsigned int offset;
+	unsigned int litLength;
+	unsigned int matchLength;
+	unsigned int rep;
+} ZSTD_Sequence;
+
+typedef struct {
+	int collectSequences;
+	ZSTD_Sequence *seqStart;
+	size_t seqIndex;
+	size_t maxSequences;
+} SeqCollector;
+
+typedef enum {
+	ZSTD_llt_none = 0,
+	ZSTD_llt_literalLength = 1,
+	ZSTD_llt_matchLength = 2,
+} ZSTD_longLengthType_e;
+
+struct seqDef_s;
+
+typedef struct seqDef_s seqDef;
+
+typedef struct {
+	seqDef *sequencesStart;
+	seqDef *sequences;
+	BYTE *litStart;
+	BYTE *lit;
+	BYTE *llCode;
+	BYTE *mlCode;
+	BYTE *ofCode;
+	size_t maxNbSeq;
+	size_t maxNbLit;
+	ZSTD_longLengthType_e longLengthType;
+	U32 longLengthPos;
+} seqStore_t;
+
+typedef struct {
+	const BYTE *nextSrc;
+	const BYTE *base;
+	const BYTE *dictBase;
+	U32 dictLimit;
+	U32 lowLimit;
+	U32 nbOverflowCorrections;
+} ZSTD_window_t;
+
+typedef struct {
+	U32 offset;
+	U32 checksum;
+} ldmEntry_t;
+
+typedef struct {
+	const BYTE *split;
+	U32 hash;
+	U32 checksum;
+	ldmEntry_t *bucket;
+} ldmMatchCandidate_t;
+
+typedef struct {
+	ZSTD_window_t window;
+	ldmEntry_t *hashTable;
+	U32 loadedDictEnd;
+	BYTE *bucketOffsets;
+	size_t splitIndices[64];
+	ldmMatchCandidate_t matchCandidates[64];
+} ldmState_t;
+
+typedef struct {
+	U32 offset;
+	U32 litLength;
+	U32 matchLength;
+} rawSeq;
+
+typedef struct {
+	rawSeq *seq;
+	size_t pos;
+	size_t posInSequence;
+	size_t size;
+	size_t capacity;
+} rawSeqStore_t;
+
+typedef size_t HUF_CElt;
+
+typedef enum {
+	HUF_repeat_none = 0,
+	HUF_repeat_check = 1,
+	HUF_repeat_valid = 2,
+} HUF_repeat;
+
+typedef struct {
+	HUF_CElt CTable[257];
+	HUF_repeat repeatMode;
+} ZSTD_hufCTables_t;
+
+typedef unsigned int FSE_CTable;
+
+typedef enum {
+	FSE_repeat_none = 0,
+	FSE_repeat_check = 1,
+	FSE_repeat_valid = 2,
+} FSE_repeat;
+
+typedef struct {
+	FSE_CTable offcodeCTable[193];
+	FSE_CTable matchlengthCTable[363];
+	FSE_CTable litlengthCTable[329];
+	FSE_repeat offcode_repeatMode;
+	FSE_repeat matchlength_repeatMode;
+	FSE_repeat litlength_repeatMode;
+} ZSTD_fseCTables_t;
+
+typedef struct {
+	ZSTD_hufCTables_t huf;
+	ZSTD_fseCTables_t fse;
+} ZSTD_entropyCTables_t;
+
+typedef struct {
+	ZSTD_entropyCTables_t entropy;
+	U32 rep[3];
+} ZSTD_compressedBlockState_t;
+
+typedef struct {
+	U32 off;
+	U32 len;
+} ZSTD_match_t;
+
+typedef struct {
+	int price;
+	U32 off;
+	U32 mlen;
+	U32 litlen;
+	U32 rep[3];
+} ZSTD_optimal_t;
+
+typedef enum {
+	zop_dynamic = 0,
+	zop_predef = 1,
+} ZSTD_OptPrice_e;
+
+typedef struct {
+	unsigned int *litFreq;
+	unsigned int *litLengthFreq;
+	unsigned int *matchLengthFreq;
+	unsigned int *offCodeFreq;
+	ZSTD_match_t *matchTable;
+	ZSTD_optimal_t *priceTable;
+	U32 litSum;
+	U32 litLengthSum;
+	U32 matchLengthSum;
+	U32 offCodeSum;
+	U32 litSumBasePrice;
+	U32 litLengthSumBasePrice;
+	U32 matchLengthSumBasePrice;
+	U32 offCodeSumBasePrice;
+	ZSTD_OptPrice_e priceType;
+	const ZSTD_entropyCTables_t *symbolCosts;
+	ZSTD_paramSwitch_e literalCompressionMode;
+} optState_t;
+
+struct ZSTD_matchState_t;
+
+typedef struct ZSTD_matchState_t ZSTD_matchState_t;
+
+struct ZSTD_matchState_t {
+	ZSTD_window_t window;
+	U32 loadedDictEnd;
+	U32 nextToUpdate;
+	U32 hashLog3;
+	U32 rowHashLog;
+	U16 *tagTable;
+	U32 hashCache[8];
+	U32 *hashTable;
+	U32 *hashTable3;
+	U32 *chainTable;
+	U32 forceNonContiguous;
+	int dedicatedDictSearch;
+	optState_t opt;
+	const ZSTD_matchState_t *dictMatchState;
+	ZSTD_compressionParameters cParams;
+	const rawSeqStore_t *ldmSeqStore;
+};
+
+typedef struct {
+	ZSTD_compressedBlockState_t *prevCBlock;
+	ZSTD_compressedBlockState_t *nextCBlock;
+	ZSTD_matchState_t matchState;
+} ZSTD_blockState_t;
+
+typedef enum {
+	ZSTDb_not_buffered = 0,
+	ZSTDb_buffered = 1,
+} ZSTD_buffered_policy_e;
+
+typedef enum {
+	zcss_init = 0,
+	zcss_load = 1,
+	zcss_flush = 2,
+} ZSTD_cStreamStage;
+
+typedef enum {
+	ZSTD_dct_auto = 0,
+	ZSTD_dct_rawContent = 1,
+	ZSTD_dct_fullDict = 2,
+} ZSTD_dictContentType_e;
+
+struct ZSTD_CDict_s;
+
+typedef struct ZSTD_CDict_s ZSTD_CDict;
+
+typedef struct {
+	void *dictBuffer;
+	const void *dict;
+	size_t dictSize;
+	ZSTD_dictContentType_e dictContentType;
+	ZSTD_CDict *cdict;
+} ZSTD_localDict;
+
+struct ZSTD_prefixDict_s {
+	const void *dict;
+	size_t dictSize;
+	ZSTD_dictContentType_e dictContentType;
+};
+
+typedef struct ZSTD_prefixDict_s ZSTD_prefixDict;
+
+typedef enum {
+	set_basic = 0,
+	set_rle = 1,
+	set_compressed = 2,
+	set_repeat = 3,
+} symbolEncodingType_e;
+
+typedef struct {
+	symbolEncodingType_e hType;
+	BYTE hufDesBuffer[128];
+	size_t hufDesSize;
+} ZSTD_hufCTablesMetadata_t;
+
+typedef struct {
+	symbolEncodingType_e llType;
+	symbolEncodingType_e ofType;
+	symbolEncodingType_e mlType;
+	BYTE fseTablesBuffer[133];
+	size_t fseTablesSize;
+	size_t lastCountSize;
+} ZSTD_fseCTablesMetadata_t;
+
+typedef struct {
+	ZSTD_hufCTablesMetadata_t hufMetadata;
+	ZSTD_fseCTablesMetadata_t fseMetadata;
+} ZSTD_entropyCTablesMetadata_t;
+
+typedef struct {
+	seqStore_t fullSeqStoreChunk;
+	seqStore_t firstHalfSeqStore;
+	seqStore_t secondHalfSeqStore;
+	seqStore_t currSeqStore;
+	seqStore_t nextSeqStore;
+	U32 partitions[196];
+	ZSTD_entropyCTablesMetadata_t entropyMetadata;
+} ZSTD_blockSplitCtx;
+
+struct ZSTD_CCtx_s {
+	ZSTD_compressionStage_e stage;
+	int cParamsChanged;
+	int bmi2;
+	ZSTD_CCtx_params requestedParams;
+	ZSTD_CCtx_params appliedParams;
+	ZSTD_CCtx_params simpleApiParams;
+	U32 dictID;
+	size_t dictContentSize;
+	ZSTD_cwksp workspace;
+	size_t blockSize;
+	unsigned long long pledgedSrcSizePlusOne;
+	unsigned long long consumedSrcSize;
+	unsigned long long producedCSize;
+	struct xxh64_state xxhState;
+	ZSTD_customMem customMem;
+	ZSTD_threadPool *pool;
+	size_t staticSize;
+	SeqCollector seqCollector;
+	int isFirstBlock;
+	int initialized;
+	seqStore_t seqStore;
+	ldmState_t ldmState;
+	rawSeq *ldmSequences;
+	size_t maxNbLdmSequences;
+	rawSeqStore_t externSeqStore;
+	ZSTD_blockState_t blockState;
+	U32 *entropyWorkspace;
+	ZSTD_buffered_policy_e bufferedPolicy;
+	char *inBuff;
+	size_t inBuffSize;
+	size_t inToCompress;
+	size_t inBuffPos;
+	size_t inBuffTarget;
+	char *outBuff;
+	size_t outBuffSize;
+	size_t outBuffContentSize;
+	size_t outBuffFlushedSize;
+	ZSTD_cStreamStage streamStage;
+	U32 frameEnded;
+	ZSTD_inBuffer expectedInBuffer;
+	size_t expectedOutBufferSize;
+	ZSTD_localDict localDict;
+	const ZSTD_CDict *cdict;
+	ZSTD_prefixDict prefixDict;
+	ZSTD_blockSplitCtx blockSplitCtx;
+};
+
+typedef struct ZSTD_CCtx_s ZSTD_CCtx;
+
+typedef ZSTD_CCtx ZSTD_CStream;
+
+typedef ZSTD_CStream zstd_cstream;
+
+typedef enum {
+	ZSTD_error_no_error = 0,
+	ZSTD_error_GENERIC = 1,
+	ZSTD_error_prefix_unknown = 10,
+	ZSTD_error_version_unsupported = 12,
+	ZSTD_error_frameParameter_unsupported = 14,
+	ZSTD_error_frameParameter_windowTooLarge = 16,
+	ZSTD_error_corruption_detected = 20,
+	ZSTD_error_checksum_wrong = 22,
+	ZSTD_error_dictionary_corrupted = 30,
+	ZSTD_error_dictionary_wrong = 32,
+	ZSTD_error_dictionaryCreation_failed = 34,
+	ZSTD_error_parameter_unsupported = 40,
+	ZSTD_error_parameter_outOfBound = 42,
+	ZSTD_error_tableLog_tooLarge = 44,
+	ZSTD_error_maxSymbolValue_tooLarge = 46,
+	ZSTD_error_maxSymbolValue_tooSmall = 48,
+	ZSTD_error_stage_wrong = 60,
+	ZSTD_error_init_missing = 62,
+	ZSTD_error_memory_allocation = 64,
+	ZSTD_error_workSpace_tooSmall = 66,
+	ZSTD_error_dstSize_tooSmall = 70,
+	ZSTD_error_srcSize_wrong = 72,
+	ZSTD_error_dstBuffer_null = 74,
+	ZSTD_error_frameIndex_tooLarge = 100,
+	ZSTD_error_seekableIO = 102,
+	ZSTD_error_dstBuffer_wrong = 104,
+	ZSTD_error_srcBuffer_wrong = 105,
+	ZSTD_error_maxCode = 120,
+} ZSTD_ErrorCode;
+
+typedef ZSTD_ErrorCode zstd_error_code;
+
+enum pstore_type_id {
+	PSTORE_TYPE_DMESG = 0,
+	PSTORE_TYPE_MCE = 1,
+	PSTORE_TYPE_CONSOLE = 2,
+	PSTORE_TYPE_FTRACE = 3,
+	PSTORE_TYPE_PPC_RTAS = 4,
+	PSTORE_TYPE_PPC_OF = 5,
+	PSTORE_TYPE_PPC_COMMON = 6,
+	PSTORE_TYPE_PMSG = 7,
+	PSTORE_TYPE_PPC_OPAL = 8,
+	PSTORE_TYPE_MAX = 9,
+};
+
+enum {
+	Opt_kmsg_bytes = 0,
+	Opt_err___7 = 1,
+};
+
+struct pstore_record;
+
+struct pstore_private {
+	struct list_head list;
+	struct dentry *dentry;
+	struct pstore_record *record;
+	size_t total_size;
+};
+
+struct pstore_info;
+
+struct pstore_record {
+	struct pstore_info *psi;
+	enum pstore_type_id type;
+	u64 id;
+	struct timespec64 time;
+	char *buf;
+	ssize_t size;
+	ssize_t ecc_notice_size;
+	void *priv;
+	int count;
+	enum kmsg_dump_reason reason;
+	unsigned int part;
+	bool compressed;
+};
+
+struct pstore_info {
+	struct module *owner;
+	const char *name;
+	spinlock_t buf_lock;
+	char *buf;
+	size_t bufsize;
+	struct mutex read_mutex;
+	int flags;
+	int max_reason;
+	void *data;
+	int (*open)(struct pstore_info *);
+	int (*close)(struct pstore_info *);
+	ssize_t (*read)(struct pstore_record *);
+	int (*write)(struct pstore_record *);
+	int (*write_user)(struct pstore_record *, const char __attribute__((btf_type_tag("user"))) *);
+	int (*erase)(struct pstore_record *);
+};
+
+struct pstore_ftrace_record {
+	unsigned long ip;
+	unsigned long parent_ip;
+	u64 ts;
+};
+
+struct pstore_ftrace_seq_data {
+	const void *ptr;
+	size_t off;
+	size_t size;
+};
+
+typedef unsigned char Byte;
+
+typedef unsigned long uLong;
+
+struct internal_state;
+
+struct z_stream_s {
+	const Byte *next_in;
+	uLong avail_in;
+	uLong total_in;
+	Byte *next_out;
+	uLong avail_out;
+	uLong total_out;
+	char *msg;
+	struct internal_state *state;
+	void *workspace;
+	int data_type;
+	uLong adler;
+	uLong reserved;
+};
+
+struct internal_state {
+	int dummy;
+};
+
+typedef struct z_stream_s z_stream;
+
+typedef z_stream *z_streamp;
+
+struct persistent_ram_ecc_info {
+	int block_size;
+	int ecc_size;
+	int symsize;
+	int poly;
+	uint16_t *par;
+};
+
+struct persistent_ram_zone;
+
+struct ramoops_context {
+	struct persistent_ram_zone **dprzs;
+	struct persistent_ram_zone *cprz;
+	struct persistent_ram_zone **fprzs;
+	struct persistent_ram_zone *mprz;
+	phys_addr_t phys_addr;
+	unsigned long size;
+	unsigned int memtype;
+	size_t record_size;
+	size_t console_size;
+	size_t ftrace_size;
+	size_t pmsg_size;
+	u32 flags;
+	struct persistent_ram_ecc_info ecc_info;
+	unsigned int max_dump_cnt;
+	unsigned int dump_write_cnt;
+	unsigned int dump_read_cnt;
+	unsigned int console_read_cnt;
+	unsigned int max_ftrace_cnt;
+	unsigned int ftrace_read_cnt;
+	unsigned int pmsg_read_cnt;
+	struct pstore_info pstore;
+};
+
+struct persistent_ram_buffer;
+
+struct rs_control;
+
+struct persistent_ram_zone {
+	phys_addr_t paddr;
+	size_t size;
+	void *vaddr;
+	char *label;
+	enum pstore_type_id type;
+	u32 flags;
+	raw_spinlock_t buffer_lock;
+	struct persistent_ram_buffer *buffer;
+	size_t buffer_size;
+	char *par_buffer;
+	char *par_header;
+	struct rs_control *rs_decoder;
+	int corrected_bytes;
+	int bad_blocks;
+	struct persistent_ram_ecc_info ecc_info;
+	char *old_log;
+	size_t old_log_size;
+};
+
+struct ramoops_platform_data {
+	unsigned long mem_size;
+	phys_addr_t mem_address;
+	unsigned int mem_type;
+	unsigned long record_size;
+	unsigned long console_size;
+	unsigned long ftrace_size;
+	unsigned long pmsg_size;
+	int max_reason;
+	u32 flags;
+	struct persistent_ram_ecc_info ecc_info;
+};
+
+struct persistent_ram_buffer {
+	uint32_t sig;
+	atomic_t start;
+	atomic_t size;
+	uint8_t data[0];
+};
+
+struct rs_codec;
+
+struct rs_control {
+	struct rs_codec *codec;
+	uint16_t buffers[0];
+};
+
+struct rs_codec {
+	int mm;
+	int nn;
+	uint16_t *alpha_to;
+	uint16_t *index_of;
+	uint16_t *genpoly;
+	int nroots;
+	int fcr;
+	int prim;
+	int iprim;
+	int gfpoly;
+	int (*gffunc)(int);
+	int users;
+	struct list_head list;
+};
+
+typedef void (*btf_trace_erofs_lookup)(void *, struct inode *, struct dentry *, unsigned int);
+
+typedef void (*btf_trace_erofs_fill_inode)(void *, struct inode *);
+
+typedef void (*btf_trace_erofs_read_folio)(void *, struct folio *, bool);
+
+typedef void (*btf_trace_erofs_readpages)(void *, struct inode *, unsigned long, unsigned int, bool);
+
+struct erofs_map_blocks;
+
+typedef void (*btf_trace_erofs_map_blocks_enter)(void *, struct inode *, struct erofs_map_blocks *, unsigned int);
+
+enum erofs_kmap_type {
+	EROFS_NO_KMAP = 0,
+	EROFS_KMAP = 1,
+};
+
+struct erofs_buf {
+	struct inode *inode;
+	struct page *page;
+	void *base;
+	enum erofs_kmap_type kmap_type;
+};
+
+typedef u64 erofs_off_t;
+
+struct erofs_map_blocks {
+	struct erofs_buf buf;
+	erofs_off_t m_pa;
+	erofs_off_t m_la;
+	u64 m_plen;
+	u64 m_llen;
+	unsigned short m_deviceid;
+	char m_algorithmformat;
+	unsigned int m_flags;
+};
+
+typedef void (*btf_trace_z_erofs_map_blocks_iter_enter)(void *, struct inode *, struct erofs_map_blocks *, unsigned int);
+
+typedef void (*btf_trace_erofs_map_blocks_exit)(void *, struct inode *, struct erofs_map_blocks *, unsigned int, int);
+
+typedef void (*btf_trace_z_erofs_map_blocks_iter_exit)(void *, struct inode *, struct erofs_map_blocks *, unsigned int, int);
+
+typedef void (*btf_trace_erofs_destroy_inode)(void *, struct inode *);
+
+enum {
+	EROFS_ZIP_CACHE_DISABLED = 0,
+	EROFS_ZIP_CACHE_READAHEAD = 1,
+	EROFS_ZIP_CACHE_READAROUND = 2,
+};
+
+enum {
+	EROFS_SYNC_DECOMPRESS_AUTO = 0,
+	EROFS_SYNC_DECOMPRESS_FORCE_ON = 1,
+	EROFS_SYNC_DECOMPRESS_FORCE_OFF = 2,
+};
+
+enum {
+	Opt_user_xattr___3 = 0,
+	Opt_acl___3 = 1,
+	Opt_cache_strategy = 2,
+	Opt_dax___2 = 3,
+	Opt_dax_enum = 4,
+	Opt_device = 5,
+	Opt_fsid = 6,
+	Opt_domain_id = 7,
+	Opt_err___8 = 8,
+};
+
+typedef u32 erofs_blk_t;
+
+typedef u64 erofs_nid_t;
+
+struct erofs_inode {
+	erofs_nid_t nid;
+	unsigned long flags;
+	unsigned char datalayout;
+	unsigned char inode_isize;
+	unsigned int xattr_isize;
+	unsigned int xattr_name_filter;
+	unsigned int xattr_shared_count;
+	unsigned int *xattr_shared_xattrs;
+	union {
+		erofs_blk_t raw_blkaddr;
+		struct {
+			unsigned short chunkformat;
+			unsigned char chunkbits;
+		};
+		struct {
+			unsigned short z_advise;
+			unsigned char z_algorithmtype[2];
+			unsigned char z_logical_clusterbits;
+			unsigned long z_tailextent_headlcn;
+			union {
+				struct {
+					erofs_off_t z_idataoff;
+					unsigned short z_idata_size;
+				};
+				erofs_off_t z_fragmentoff;
+			};
+		};
+	};
+	struct inode vfs_inode;
+};
+
+struct trace_event_raw_erofs_lookup {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	u32 __data_loc_name;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct erofs_mount_opts {
+	unsigned char cache_strategy;
+	unsigned int sync_decompress;
+	unsigned int max_sync_decompress_pages;
+	unsigned int mount_opt;
+};
+
+struct erofs_sb_lz4_info {
+	u16 max_distance_pages;
+	u16 max_pclusterblks;
+};
+
+struct fscache_volume;
+
+struct erofs_dev_context;
+
+struct erofs_xattr_prefix_item;
+
+struct erofs_fscache;
+
+struct erofs_domain;
+
+struct erofs_sb_info {
+	struct erofs_mount_opts opt;
+	struct list_head list;
+	struct mutex umount_mutex;
+	struct xarray managed_pslots;
+	unsigned int shrinker_run_no;
+	u16 available_compr_algs;
+	struct inode *managed_cache;
+	struct erofs_sb_lz4_info lz4;
+	struct inode *packed_inode;
+	struct erofs_dev_context *devs;
+	struct dax_device *dax_dev;
+	u64 dax_part_off;
+	u64 total_blocks;
+	u32 primarydevice_blocks;
+	u32 meta_blkaddr;
+	u32 xattr_blkaddr;
+	u32 xattr_prefix_start;
+	u8 xattr_prefix_count;
+	struct erofs_xattr_prefix_item *xattr_prefixes;
+	unsigned int xattr_filter_reserved;
+	u16 device_id_mask;
+	unsigned char islotbits;
+	unsigned char blkszbits;
+	u32 sb_size;
+	u32 build_time_nsec;
+	u64 build_time;
+	erofs_nid_t root_nid;
+	erofs_nid_t packed_nid;
+	u64 inos;
+	u8 uuid[16];
+	u8 volume_name[16];
+	u32 feature_compat;
+	u32 feature_incompat;
+	struct kobject s_kobj;
+	struct completion s_kobj_unregister;
+	struct fscache_volume *volume;
+	struct erofs_fscache *s_fscache;
+	struct erofs_domain *domain;
+	char *fsid;
+	char *domain_id;
+};
+
+struct erofs_dev_context {
+	struct idr tree;
+	struct rw_semaphore rwsem;
+	unsigned int extra_devices;
+	bool flatdev;
+};
+
+struct erofs_xattr_long_prefix;
+
+struct erofs_xattr_prefix_item {
+	struct erofs_xattr_long_prefix *prefix;
+	u8 infix_len;
+};
+
+struct erofs_xattr_long_prefix {
+	__u8 base_index;
+	char infix[0];
+};
+
+struct fscache_cookie;
+
+struct erofs_fscache {
+	struct fscache_cookie *cookie;
+	struct inode *inode;
+	struct erofs_domain *domain;
+	struct list_head node;
+	refcount_t ref;
+	char *name;
+};
+
+struct erofs_domain {
+	refcount_t ref;
+	struct list_head list;
+	struct fscache_volume *volume;
+	char *domain_id;
+};
+
+struct trace_event_raw_erofs_fill_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	erofs_blk_t blkaddr;
+	unsigned int ofs;
+	char __data[0];
+};
+
+struct trace_event_raw_erofs_read_folio {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	int dir;
+	unsigned long index;
+	int uptodate;
+	bool raw;
+	char __data[0];
+};
+
+struct trace_event_raw_erofs_readpages {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	unsigned long start;
+	unsigned int nrpage;
+	bool raw;
+	char __data[0];
+};
+
+struct trace_event_raw_erofs__map_blocks_enter {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	erofs_off_t la;
+	u64 llen;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_erofs__map_blocks_exit {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	unsigned int flags;
+	erofs_off_t la;
+	erofs_off_t pa;
+	u64 llen;
+	u64 plen;
+	unsigned int mflags;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_erofs_destroy_inode {
+	struct trace_entry ent;
+	dev_t dev;
+	erofs_nid_t nid;
+	char __data[0];
+};
+
+struct erofs_super_block {
+	__le32 magic;
+	__le32 checksum;
+	__le32 feature_compat;
+	__u8 blkszbits;
+	__u8 sb_extslots;
+	__le16 root_nid;
+	__le64 inos;
+	__le64 build_time;
+	__le32 build_time_nsec;
+	__le32 blocks;
+	__le32 meta_blkaddr;
+	__le32 xattr_blkaddr;
+	__u8 uuid[16];
+	__u8 volume_name[16];
+	__le32 feature_incompat;
+	union {
+		__le16 available_compr_algs;
+		__le16 lz4_max_distance;
+	} u1;
+	__le16 extra_devices;
+	__le16 devt_slotoff;
+	__u8 dirblkbits;
+	__u8 xattr_prefix_count;
+	__le32 xattr_prefix_start;
+	__le64 packed_nid;
+	__u8 xattr_filter_reserved;
+	__u8 reserved2[23];
+};
+
+struct trace_event_data_offsets_erofs_lookup {
+	u32 name;
+};
+
+struct erofs_fs_context {
+	struct erofs_mount_opts opt;
+	struct erofs_dev_context *devs;
+	char *fsid;
+	char *domain_id;
+};
+
+struct bdev_handle {
+	struct block_device *bdev;
+	void *holder;
+};
+
+struct trace_event_data_offsets_erofs_fill_inode {};
+
+struct trace_event_data_offsets_erofs_read_folio {};
+
+struct trace_event_data_offsets_erofs_readpages {};
+
+struct trace_event_data_offsets_erofs__map_blocks_enter {};
+
+struct trace_event_data_offsets_erofs__map_blocks_exit {};
+
+struct trace_event_data_offsets_erofs_destroy_inode {};
+
+struct erofs_device_info {
+	char *path;
+	struct erofs_fscache *fscache;
+	struct bdev_handle *bdev_handle;
+	struct dax_device *dax_dev;
+	u64 dax_part_off;
+	u32 blocks;
+	u32 mapped_blkaddr;
+};
+
+struct erofs_deviceslot {
+	u8 tag[64];
+	__le32 blocks;
+	__le32 mapped_blkaddr;
+	u8 reserved[56];
+};
+
+enum {
+	EROFS_INODE_FLAT_PLAIN = 0,
+	EROFS_INODE_COMPRESSED_FULL = 1,
+	EROFS_INODE_FLAT_INLINE = 2,
+	EROFS_INODE_COMPRESSED_COMPACT = 3,
+	EROFS_INODE_CHUNK_BASED = 4,
+	EROFS_INODE_DATALAYOUT_MAX = 5,
+};
+
+struct erofs_inode_chunk_info {
+	__le16 format;
+	__le16 reserved;
+};
+
+union erofs_inode_i_u {
+	__le32 compressed_blocks;
+	__le32 raw_blkaddr;
+	__le32 rdev;
+	struct erofs_inode_chunk_info c;
+};
+
+struct erofs_inode_extended {
+	__le16 i_format;
+	__le16 i_xattr_icount;
+	__le16 i_mode;
+	__le16 i_reserved;
+	__le64 i_size;
+	union erofs_inode_i_u i_u;
+	__le32 i_ino;
+	__le32 i_uid;
+	__le32 i_gid;
+	__le64 i_mtime;
+	__le32 i_mtime_nsec;
+	__le32 i_nlink;
+	__u8 i_reserved2[16];
+};
+
+struct erofs_inode_compact {
+	__le16 i_format;
+	__le16 i_xattr_icount;
+	__le16 i_mode;
+	__le16 i_nlink;
+	__le32 i_size;
+	__le32 i_reserved;
+	union erofs_inode_i_u i_u;
+	__le32 i_ino;
+	__le16 i_uid;
+	__le16 i_gid;
+	__le32 i_reserved2;
+};
+
+struct erofs_inode_chunk_index {
+	__le16 advise;
+	__le16 device_id;
+	__le32 blkaddr;
+};
+
+struct erofs_map_dev {
+	struct erofs_fscache *m_fscache;
+	struct block_device *m_bdev;
+	struct dax_device *m_daxdev;
+	u64 m_dax_part_off;
+	erofs_off_t m_pa;
+	unsigned int m_deviceid;
+};
+
+struct erofs_dirent {
+	__le64 nid;
+	__le16 nameoff;
+	__u8 file_type;
+	__u8 reserved;
+} __attribute__((packed));
+
+struct erofs_qstr {
+	const unsigned char *name;
+	const unsigned char *end;
+};
+
+struct erofs_attr {
+	struct attribute attr;
+	short attr_id;
+	int struct_type;
+	int offset;
+};
+
+enum {
+	attr_feature___2 = 0,
+	attr_pointer_ui___2 = 1,
+	attr_pointer_bool = 2,
+};
+
+enum {
+	struct_erofs_sb_info = 0,
+	struct_erofs_mount_opts = 1,
+};
+
+struct erofs_xattr_entry {
+	__u8 e_name_len;
+	__u8 e_name_index;
+	__le16 e_value_size;
+	char e_name[0];
+};
+
+struct erofs_xattr_iter {
+	struct super_block *sb;
+	struct erofs_buf buf;
+	erofs_off_t pos;
+	void *kaddr;
+	char *buffer;
+	int buffer_size;
+	int buffer_ofs;
+	int index;
+	int infix_len;
+	struct qstr name;
+	struct dentry *dentry;
+};
+
+struct erofs_xattr_ibody_header {
+	__le32 h_name_filter;
+	__u8 h_shared_count;
+	__u8 h_reserved2[7];
+	__le32 h_shared_xattrs[0];
+};
+
+struct z_erofs_decompress_req;
+
+struct z_erofs_decompressor {
+	int (*config)(struct super_block *, struct erofs_super_block *, void *, int);
+	int (*decompress)(struct z_erofs_decompress_req *, struct page **);
+	char *name;
+};
+
+struct z_erofs_decompress_req {
+	struct super_block *sb;
+	struct page **in;
+	struct page **out;
+	unsigned short pageofs_in;
+	unsigned short pageofs_out;
+	unsigned int inputsize;
+	unsigned int outputsize;
+	unsigned int alg;
+	bool inplace_io;
+	bool partial_decoding;
+	bool fillgaps;
+	gfp_t gfp;
+};
+
+enum {
+	Z_EROFS_COMPRESSION_LZ4 = 0,
+	Z_EROFS_COMPRESSION_LZMA = 1,
+	Z_EROFS_COMPRESSION_DEFLATE = 2,
+	Z_EROFS_COMPRESSION_MAX = 3,
+};
+
+enum {
+	Z_EROFS_COMPRESSION_SHIFTED = 3,
+	Z_EROFS_COMPRESSION_INTERLACED = 4,
+	Z_EROFS_COMPRESSION_RUNTIME_MAX = 5,
+};
+
+struct z_erofs_lz4_decompress_ctx {
+	struct z_erofs_decompress_req *rq;
+	unsigned int inpages;
+	unsigned int outpages;
+	unsigned int oend;
+};
+
+struct z_erofs_lz4_cfgs {
+	__le16 max_distance;
+	__le16 max_pclusterblks;
+	u8 reserved[10];
+};
+
+enum {
+	Z_EROFS_LCLUSTER_TYPE_PLAIN = 0,
+	Z_EROFS_LCLUSTER_TYPE_HEAD1 = 1,
+	Z_EROFS_LCLUSTER_TYPE_NONHEAD = 2,
+	Z_EROFS_LCLUSTER_TYPE_HEAD2 = 3,
+	Z_EROFS_LCLUSTER_TYPE_MAX = 4,
+};
+
+struct z_erofs_map_header {
+	union {
+		__le32 h_fragmentoff;
+		struct {
+			__le16 h_reserved1;
+			__le16 h_idata_size;
+		};
+	};
+	__le16 h_advise;
+	__u8 h_algorithmtype;
+	__u8 h_clusterbits;
+};
+
+struct z_erofs_maprecorder {
+	struct inode *inode;
+	struct erofs_map_blocks *map;
+	void *kaddr;
+	unsigned long lcn;
+	u8 type;
+	u8 headtype;
+	u16 clusterofs;
+	u16 delta[2];
+	erofs_blk_t pblk;
+	erofs_blk_t compressedblks;
+	erofs_off_t nextpackoff;
+	bool partialref;
+};
+
+struct z_erofs_lcluster_index {
+	__le16 di_advise;
+	__le16 di_clusterofs;
+	union {
+		__le32 blkaddr;
+		__le16 delta[2];
+	} di_u;
+};
+
+struct z_erofs_pcluster_slab {
+	struct kmem_cache *slab;
+	unsigned int maxpages;
+	char name[48];
+};
+
+enum z_erofs_pclustermode {
+	Z_EROFS_PCLUSTER_INFLIGHT = 0,
+	Z_EROFS_PCLUSTER_FOLLOWED_NOINPLACE = 1,
+	Z_EROFS_PCLUSTER_FOLLOWED = 2,
+};
+
+enum {
+	JQ_BYPASS = 0,
+	JQ_SUBMIT = 1,
+	NR_JOBQUEUES = 2,
+};
+
+struct z_erofs_bvec {
+	struct page *page;
+	int offset;
+	unsigned int end;
+};
+
+struct z_erofs_bvset_inline {
+	struct page *nextpage;
+	struct z_erofs_bvec bvec[2];
+};
+
+struct erofs_workgroup {
+	unsigned long index;
+	struct lockref lockref;
+};
+
+typedef void *z_erofs_next_pcluster_t;
+
+struct z_erofs_pcluster {
+	struct erofs_workgroup obj;
+	struct mutex lock;
+	z_erofs_next_pcluster_t next;
+	unsigned int length;
+	unsigned int vcnt;
+	unsigned int pclustersize;
+	unsigned short pageofs_out;
+	unsigned short pageofs_in;
+	union {
+		struct z_erofs_bvset_inline bvset;
+		struct callback_head rcu;
+	};
+	unsigned char algorithmformat;
+	bool partial;
+	bool multibases;
+	bool besteffort;
+	struct z_erofs_bvec compressed_bvecs[0];
+};
+
+struct z_erofs_bvset {
+	struct page *nextpage;
+	struct z_erofs_bvec bvec[0];
+};
+
+struct z_erofs_decompressqueue {
+	struct super_block *sb;
+	atomic_t pending_bios;
+	z_erofs_next_pcluster_t head;
+	union {
+		struct completion done;
+		struct work_struct work;
+		struct kthread_work kthread_work;
+	} u;
+	bool eio;
+	bool sync;
+};
+
+struct z_erofs_bvec_item {
+	struct z_erofs_bvec bvec;
+	struct list_head list;
+};
+
+struct z_erofs_bvec_iter {
+	struct page *bvpage;
+	struct z_erofs_bvset *bvset;
+	unsigned int nr;
+	unsigned int cur;
+};
+
+struct z_erofs_decompress_frontend {
+	struct inode * const inode;
+	struct erofs_map_blocks map;
+	struct z_erofs_bvec_iter biter;
+	struct page *pagepool;
+	struct page *candidate_bvpage;
+	struct z_erofs_pcluster *pcl;
+	z_erofs_next_pcluster_t owned_head;
+	enum z_erofs_pclustermode mode;
+	erofs_off_t headoffset;
+	unsigned int icur;
+};
+
+struct z_erofs_decompress_backend {
+	struct page *onstack_pages[32];
+	struct super_block *sb;
+	struct z_erofs_pcluster *pcl;
+	struct page **decompressed_pages;
+	struct page **compressed_pages;
+	struct list_head decompressed_secondary_bvecs;
+	struct page **pagepool;
+	unsigned int onstack_used;
+	unsigned int nr_pages;
+};
+
+struct z_erofs_gbuf {
+	spinlock_t lock;
+	void *ptr;
+	struct page **pages;
+	unsigned int nrpages;
+};
+
+struct key_user {
+	struct rb_node node;
+	struct mutex cons_lock;
+	spinlock_t lock;
+	refcount_t usage;
+	atomic_t nkeys;
+	atomic_t nikeys;
+	kuid_t uid;
+	int qnkeys;
+	int qnbytes;
+};
+
+enum key_notification_subtype {
+	NOTIFY_KEY_INSTANTIATED = 0,
+	NOTIFY_KEY_UPDATED = 1,
+	NOTIFY_KEY_LINKED = 2,
+	NOTIFY_KEY_UNLINKED = 3,
+	NOTIFY_KEY_CLEARED = 4,
+	NOTIFY_KEY_REVOKED = 5,
+	NOTIFY_KEY_INVALIDATED = 6,
+	NOTIFY_KEY_SETATTR = 7,
+};
+
+struct assoc_array_ops {
+	unsigned long (*get_key_chunk)(const void *, int);
+	unsigned long (*get_object_key_chunk)(const void *, int);
+	bool (*compare_object)(const void *, const void *);
+	int (*diff_objects)(const void *, const void *);
+	void (*free_object)(void *);
+};
+
+struct assoc_array_shortcut {
+	struct assoc_array_ptr *back_pointer;
+	int parent_slot;
+	int skip_to_level;
+	struct assoc_array_ptr *next_node;
+	unsigned long index_key[0];
+};
+
+struct assoc_array_node {
+	struct assoc_array_ptr *back_pointer;
+	u8 parent_slot;
+	struct assoc_array_ptr *slots[16];
+	unsigned long nr_leaves_on_branch;
+};
+
+struct assoc_array_edit {
+	struct callback_head rcu;
+	struct assoc_array *array;
+	const struct assoc_array_ops *ops;
+	const struct assoc_array_ops *ops_for_excised_subtree;
+	struct assoc_array_ptr *leaf;
+	struct assoc_array_ptr **leaf_p;
+	struct assoc_array_ptr *dead_leaf;
+	struct assoc_array_ptr *new_meta[3];
+	struct assoc_array_ptr *excised_meta[1];
+	struct assoc_array_ptr *excised_subtree;
+	struct assoc_array_ptr **set_backpointers[16];
+	struct assoc_array_ptr *set_backpointers_to;
+	struct assoc_array_node *adjust_count_on;
+	long adjust_count_by;
+	struct {
+		struct assoc_array_ptr **ptr;
+		struct assoc_array_ptr *to;
+	} set[2];
+	struct {
+		u8 *p;
+		u8 to;
+	} set_parent_slot[1];
+	u8 segment_cache[17];
+};
+
+struct keyring_search_context {
+	struct keyring_index_key index_key;
+	const struct cred *cred;
+	struct key_match_data match_data;
+	unsigned int flags;
+	int (*iterator)(const void *, void *);
+	int skipped_ret;
+	bool possessed;
+	key_ref_t result;
+	time64_t now;
+};
+
+struct keyring_read_iterator_context {
+	size_t buflen;
+	size_t count;
+	key_serial_t *buffer;
+};
+
+struct keyctl_dh_params {
+	union {
+		__s32 private;
+		__s32 priv;
+	};
+	__s32 prime;
+	__s32 base;
+};
+
+struct keyctl_kdf_params {
+	char __attribute__((btf_type_tag("user"))) *hashname;
+	char __attribute__((btf_type_tag("user"))) *otherinfo;
+	__u32 otherinfolen;
+	__u32 __spare[8];
+};
+
+struct keyctl_pkey_query {
+	__u32 supported_ops;
+	__u32 key_size;
+	__u16 max_data_size;
+	__u16 max_sig_size;
+	__u16 max_enc_size;
+	__u16 max_dec_size;
+	__u32 __spare[10];
+};
+
+struct keyctl_pkey_params {
+	__s32 key_id;
+	__u32 in_len;
+	union {
+		__u32 out_len;
+		__u32 in2_len;
+	};
+	__u32 __spare[7];
+};
+
+struct request_key_auth {
+	struct callback_head rcu;
+	struct key *target_key;
+	struct key *dest_keyring;
+	const struct cred *cred;
+	void *callout_info;
+	size_t callout_len;
+	pid_t pid;
+	char op[8];
+};
+
+enum {
+	Opt_err___9 = 0,
+	Opt_enc = 1,
+	Opt_hash = 2,
+};
+
+enum lsm_order {
+	LSM_ORDER_FIRST = -1,
+	LSM_ORDER_MUTABLE = 0,
+	LSM_ORDER_LAST = 1,
+};
+
+struct lsm_blob_sizes;
+
+struct lsm_info {
+	const char *name;
+	enum lsm_order order;
+	unsigned long flags;
+	int *enabled;
+	int (*init)();
+	struct lsm_blob_sizes *blobs;
+};
+
+struct lsm_blob_sizes {
+	int lbs_cred;
+	int lbs_file;
+	int lbs_inode;
+	int lbs_superblock;
+	int lbs_ipc;
+	int lbs_msg_msg;
+	int lbs_task;
+	int lbs_xattr_count;
+};
+
+struct msg_msg;
+
+struct sctp_association;
+
+union security_list_options {
+	int (*binder_set_context_mgr)(const struct cred *);
+	int (*binder_transaction)(const struct cred *, const struct cred *);
+	int (*binder_transfer_binder)(const struct cred *, const struct cred *);
+	int (*binder_transfer_file)(const struct cred *, const struct cred *, const struct file *);
+	int (*ptrace_access_check)(struct task_struct *, unsigned int);
+	int (*ptrace_traceme)(struct task_struct *);
+	int (*capget)(const struct task_struct *, kernel_cap_t *, kernel_cap_t *, kernel_cap_t *);
+	int (*capset)(struct cred *, const struct cred *, const kernel_cap_t *, const kernel_cap_t *, const kernel_cap_t *);
+	int (*capable)(const struct cred *, struct user_namespace *, int, unsigned int);
+	int (*quotactl)(int, int, int, struct super_block *);
+	int (*quota_on)(struct dentry *);
+	int (*syslog)(int);
+	int (*settime)(const struct timespec64 *, const struct timezone *);
+	int (*vm_enough_memory)(struct mm_struct *, long);
+	int (*bprm_creds_for_exec)(struct linux_binprm *);
+	int (*bprm_creds_from_file)(struct linux_binprm *, struct file *);
+	int (*bprm_check_security)(struct linux_binprm *);
+	void (*bprm_committing_creds)(struct linux_binprm *);
+	void (*bprm_committed_creds)(struct linux_binprm *);
+	int (*fs_context_submount)(struct fs_context *, struct super_block *);
+	int (*fs_context_dup)(struct fs_context *, struct fs_context *);
+	int (*fs_context_parse_param)(struct fs_context *, struct fs_parameter *);
+	int (*sb_alloc_security)(struct super_block *);
+	void (*sb_delete)(struct super_block *);
+	void (*sb_free_security)(struct super_block *);
+	void (*sb_free_mnt_opts)(void *);
+	int (*sb_eat_lsm_opts)(char *, void **);
+	int (*sb_mnt_opts_compat)(struct super_block *, void *);
+	int (*sb_remount)(struct super_block *, void *);
+	int (*sb_kern_mount)(struct super_block *);
+	int (*sb_show_options)(struct seq_file *, struct super_block *);
+	int (*sb_statfs)(struct dentry *);
+	int (*sb_mount)(const char *, const struct path *, const char *, unsigned long, void *);
+	int (*sb_umount)(struct vfsmount *, int);
+	int (*sb_pivotroot)(const struct path *, const struct path *);
+	int (*sb_set_mnt_opts)(struct super_block *, void *, unsigned long, unsigned long *);
+	int (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, unsigned long, unsigned long *);
+	int (*move_mount)(const struct path *, const struct path *);
+	int (*dentry_init_security)(struct dentry *, int, const struct qstr *, const char **, void **, u32 *);
+	int (*dentry_create_files_as)(struct dentry *, int, struct qstr *, const struct cred *, struct cred *);
+	int (*path_notify)(const struct path *, u64, unsigned int);
+	int (*inode_alloc_security)(struct inode *);
+	void (*inode_free_security)(struct inode *);
+	int (*inode_init_security)(struct inode *, struct inode *, const struct qstr *, struct xattr *, int *);
+	int (*inode_init_security_anon)(struct inode *, const struct qstr *, const struct inode *);
+	int (*inode_create)(struct inode *, struct dentry *, umode_t);
+	int (*inode_link)(struct dentry *, struct inode *, struct dentry *);
+	int (*inode_unlink)(struct inode *, struct dentry *);
+	int (*inode_symlink)(struct inode *, struct dentry *, const char *);
+	int (*inode_mkdir)(struct inode *, struct dentry *, umode_t);
+	int (*inode_rmdir)(struct inode *, struct dentry *);
+	int (*inode_mknod)(struct inode *, struct dentry *, umode_t, dev_t);
+	int (*inode_rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);
+	int (*inode_readlink)(struct dentry *);
+	int (*inode_follow_link)(struct dentry *, struct inode *, bool);
+	int (*inode_permission)(struct inode *, int);
+	int (*inode_setattr)(struct dentry *, struct iattr *);
+	int (*inode_getattr)(const struct path *);
+	int (*inode_setxattr)(struct mnt_idmap *, struct dentry *, const char *, const void *, size_t, int);
+	void (*inode_post_setxattr)(struct dentry *, const char *, const void *, size_t, int);
+	int (*inode_getxattr)(struct dentry *, const char *);
+	int (*inode_listxattr)(struct dentry *);
+	int (*inode_removexattr)(struct mnt_idmap *, struct dentry *, const char *);
+	int (*inode_set_acl)(struct mnt_idmap *, struct dentry *, const char *, struct posix_acl *);
+	int (*inode_get_acl)(struct mnt_idmap *, struct dentry *, const char *);
+	int (*inode_remove_acl)(struct mnt_idmap *, struct dentry *, const char *);
+	int (*inode_need_killpriv)(struct dentry *);
+	int (*inode_killpriv)(struct mnt_idmap *, struct dentry *);
+	int (*inode_getsecurity)(struct mnt_idmap *, struct inode *, const char *, void **, bool);
+	int (*inode_setsecurity)(struct inode *, const char *, const void *, size_t, int);
+	int (*inode_listsecurity)(struct inode *, char *, size_t);
+	void (*inode_getsecid)(struct inode *, u32 *);
+	int (*inode_copy_up)(struct dentry *, struct cred **);
+	int (*inode_copy_up_xattr)(const char *);
+	int (*kernfs_init_security)(struct kernfs_node *, struct kernfs_node *);
+	int (*file_permission)(struct file *, int);
+	int (*file_alloc_security)(struct file *);
+	void (*file_free_security)(struct file *);
+	int (*file_ioctl)(struct file *, unsigned int, unsigned long);
+	int (*file_ioctl_compat)(struct file *, unsigned int, unsigned long);
+	int (*mmap_addr)(unsigned long);
+	int (*mmap_file)(struct file *, unsigned long, unsigned long, unsigned long);
+	int (*file_mprotect)(struct vm_area_struct *, unsigned long, unsigned long);
+	int (*file_lock)(struct file *, unsigned int);
+	int (*file_fcntl)(struct file *, unsigned int, unsigned long);
+	void (*file_set_fowner)(struct file *);
+	int (*file_send_sigiotask)(struct task_struct *, struct fown_struct *, int);
+	int (*file_receive)(struct file *);
+	int (*file_open)(struct file *);
+	int (*file_truncate)(struct file *);
+	int (*task_alloc)(struct task_struct *, unsigned long);
+	void (*task_free)(struct task_struct *);
+	int (*cred_alloc_blank)(struct cred *, gfp_t);
+	void (*cred_free)(struct cred *);
+	int (*cred_prepare)(struct cred *, const struct cred *, gfp_t);
+	void (*cred_transfer)(struct cred *, const struct cred *);
+	void (*cred_getsecid)(const struct cred *, u32 *);
+	int (*kernel_act_as)(struct cred *, u32);
+	int (*kernel_create_files_as)(struct cred *, struct inode *);
+	int (*kernel_module_request)(char *);
+	int (*kernel_load_data)(enum kernel_load_data_id, bool);
+	int (*kernel_post_load_data)(char *, loff_t, enum kernel_load_data_id, char *);
+	int (*kernel_read_file)(struct file *, enum kernel_read_file_id, bool);
+	int (*kernel_post_read_file)(struct file *, char *, loff_t, enum kernel_read_file_id);
+	int (*task_fix_setuid)(struct cred *, const struct cred *, int);
+	int (*task_fix_setgid)(struct cred *, const struct cred *, int);
+	int (*task_fix_setgroups)(struct cred *, const struct cred *);
+	int (*task_setpgid)(struct task_struct *, pid_t);
+	int (*task_getpgid)(struct task_struct *);
+	int (*task_getsid)(struct task_struct *);
+	void (*current_getsecid_subj)(u32 *);
+	void (*task_getsecid_obj)(struct task_struct *, u32 *);
+	int (*task_setnice)(struct task_struct *, int);
+	int (*task_setioprio)(struct task_struct *, int);
+	int (*task_getioprio)(struct task_struct *);
+	int (*task_prlimit)(const struct cred *, const struct cred *, unsigned int);
+	int (*task_setrlimit)(struct task_struct *, unsigned int, struct rlimit *);
+	int (*task_setscheduler)(struct task_struct *);
+	int (*task_getscheduler)(struct task_struct *);
+	int (*task_movememory)(struct task_struct *);
+	int (*task_kill)(struct task_struct *, struct kernel_siginfo *, int, const struct cred *);
+	int (*task_prctl)(int, unsigned long, unsigned long, unsigned long, unsigned long);
+	void (*task_to_inode)(struct task_struct *, struct inode *);
+	int (*userns_create)(const struct cred *);
+	int (*ipc_permission)(struct kern_ipc_perm *, short);
+	void (*ipc_getsecid)(struct kern_ipc_perm *, u32 *);
+	int (*msg_msg_alloc_security)(struct msg_msg *);
+	void (*msg_msg_free_security)(struct msg_msg *);
+	int (*msg_queue_alloc_security)(struct kern_ipc_perm *);
+	void (*msg_queue_free_security)(struct kern_ipc_perm *);
+	int (*msg_queue_associate)(struct kern_ipc_perm *, int);
+	int (*msg_queue_msgctl)(struct kern_ipc_perm *, int);
+	int (*msg_queue_msgsnd)(struct kern_ipc_perm *, struct msg_msg *, int);
+	int (*msg_queue_msgrcv)(struct kern_ipc_perm *, struct msg_msg *, struct task_struct *, long, int);
+	int (*shm_alloc_security)(struct kern_ipc_perm *);
+	void (*shm_free_security)(struct kern_ipc_perm *);
+	int (*shm_associate)(struct kern_ipc_perm *, int);
+	int (*shm_shmctl)(struct kern_ipc_perm *, int);
+	int (*shm_shmat)(struct kern_ipc_perm *, char __attribute__((btf_type_tag("user"))) *, int);
+	int (*sem_alloc_security)(struct kern_ipc_perm *);
+	void (*sem_free_security)(struct kern_ipc_perm *);
+	int (*sem_associate)(struct kern_ipc_perm *, int);
+	int (*sem_semctl)(struct kern_ipc_perm *, int);
+	int (*sem_semop)(struct kern_ipc_perm *, struct sembuf *, unsigned int, int);
+	int (*netlink_send)(struct sock *, struct sk_buff *);
+	void (*d_instantiate)(struct dentry *, struct inode *);
+	int (*getprocattr)(struct task_struct *, const char *, char **);
+	int (*setprocattr)(const char *, void *, size_t);
+	int (*ismaclabel)(const char *);
+	int (*secid_to_secctx)(u32, char **, u32 *);
+	int (*secctx_to_secid)(const char *, u32, u32 *);
+	void (*release_secctx)(char *, u32);
+	void (*inode_invalidate_secctx)(struct inode *);
+	int (*inode_notifysecctx)(struct inode *, void *, u32);
+	int (*inode_setsecctx)(struct dentry *, void *, u32);
+	int (*inode_getsecctx)(struct inode *, void **, u32 *);
+	int (*unix_stream_connect)(struct sock *, struct sock *, struct sock *);
+	int (*unix_may_send)(struct socket *, struct socket *);
+	int (*socket_create)(int, int, int, int);
+	int (*socket_post_create)(struct socket *, int, int, int, int);
+	int (*socket_socketpair)(struct socket *, struct socket *);
+	int (*socket_bind)(struct socket *, struct sockaddr *, int);
+	int (*socket_connect)(struct socket *, struct sockaddr *, int);
+	int (*socket_listen)(struct socket *, int);
+	int (*socket_accept)(struct socket *, struct socket *);
+	int (*socket_sendmsg)(struct socket *, struct msghdr *, int);
+	int (*socket_recvmsg)(struct socket *, struct msghdr *, int, int);
+	int (*socket_getsockname)(struct socket *);
+	int (*socket_getpeername)(struct socket *);
+	int (*socket_getsockopt)(struct socket *, int, int);
+	int (*socket_setsockopt)(struct socket *, int, int);
+	int (*socket_shutdown)(struct socket *, int);
+	int (*socket_sock_rcv_skb)(struct sock *, struct sk_buff *);
+	int (*socket_getpeersec_stream)(struct socket *, sockptr_t, sockptr_t, unsigned int);
+	int (*socket_getpeersec_dgram)(struct socket *, struct sk_buff *, u32 *);
+	int (*sk_alloc_security)(struct sock *, int, gfp_t);
+	void (*sk_free_security)(struct sock *);
+	void (*sk_clone_security)(const struct sock *, struct sock *);
+	void (*sk_getsecid)(const struct sock *, u32 *);
+	void (*sock_graft)(struct sock *, struct socket *);
+	int (*inet_conn_request)(const struct sock *, struct sk_buff *, struct request_sock *);
+	void (*inet_csk_clone)(struct sock *, const struct request_sock *);
+	void (*inet_conn_established)(struct sock *, struct sk_buff *);
+	int (*secmark_relabel_packet)(u32);
+	void (*secmark_refcount_inc)();
+	void (*secmark_refcount_dec)();
+	void (*req_classify_flow)(const struct request_sock *, struct flowi_common *);
+	int (*tun_dev_alloc_security)(void **);
+	void (*tun_dev_free_security)(void *);
+	int (*tun_dev_create)();
+	int (*tun_dev_attach_queue)(void *);
+	int (*tun_dev_attach)(struct sock *, void *);
+	int (*tun_dev_open)(void *);
+	int (*sctp_assoc_request)(struct sctp_association *, struct sk_buff *);
+	int (*sctp_bind_connect)(struct sock *, int, struct sockaddr *, int);
+	void (*sctp_sk_clone)(struct sctp_association *, struct sock *, struct sock *);
+	int (*sctp_assoc_established)(struct sctp_association *, struct sk_buff *);
+	int (*mptcp_add_subflow)(struct sock *, struct sock *);
+	int (*key_alloc)(struct key *, const struct cred *, unsigned long);
+	void (*key_free)(struct key *);
+	int (*key_permission)(key_ref_t, const struct cred *, enum key_need_perm);
+	int (*key_getsecurity)(struct key *, char **);
+	int (*audit_rule_init)(u32, u32, char *, void **);
+	int (*audit_rule_known)(struct audit_krule *);
+	int (*audit_rule_match)(u32, u32, u32, void *);
+	void (*audit_rule_free)(void *);
+	int (*bpf)(int, union bpf_attr *, unsigned int);
+	int (*bpf_map)(struct bpf_map *, fmode_t);
+	int (*bpf_prog)(struct bpf_prog *);
+	int (*bpf_map_alloc_security)(struct bpf_map *);
+	void (*bpf_map_free_security)(struct bpf_map *);
+	int (*bpf_prog_alloc_security)(struct bpf_prog_aux *);
+	void (*bpf_prog_free_security)(struct bpf_prog_aux *);
+	int (*locked_down)(enum lockdown_reason);
+	int (*perf_event_open)(struct perf_event_attr *, int);
+	int (*perf_event_alloc)(struct perf_event *);
+	void (*perf_event_free)(struct perf_event *);
+	int (*perf_event_read)(struct perf_event *);
+	int (*perf_event_write)(struct perf_event *);
+	int (*uring_override_creds)(const struct cred *);
+	int (*uring_sqpoll)();
+	int (*uring_cmd)(struct io_uring_cmd *);
+};
+
+struct security_hook_list {
+	struct hlist_node list;
+	struct hlist_head *head;
+	union security_list_options hook;
+	const char *lsm;
+};
+
+struct vfs_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+};
+
+struct vfs_ns_cap_data {
+	__le32 magic_etc;
+	struct {
+		__le32 permitted;
+		__le32 inheritable;
+	} data[2];
+	__le32 rootid;
+};
+
+struct security_hook_heads {
+	struct hlist_head binder_set_context_mgr;
+	struct hlist_head binder_transaction;
+	struct hlist_head binder_transfer_binder;
+	struct hlist_head binder_transfer_file;
+	struct hlist_head ptrace_access_check;
+	struct hlist_head ptrace_traceme;
+	struct hlist_head capget;
+	struct hlist_head capset;
+	struct hlist_head capable;
+	struct hlist_head quotactl;
+	struct hlist_head quota_on;
+	struct hlist_head syslog;
+	struct hlist_head settime;
+	struct hlist_head vm_enough_memory;
+	struct hlist_head bprm_creds_for_exec;
+	struct hlist_head bprm_creds_from_file;
+	struct hlist_head bprm_check_security;
+	struct hlist_head bprm_committing_creds;
+	struct hlist_head bprm_committed_creds;
+	struct hlist_head fs_context_submount;
+	struct hlist_head fs_context_dup;
+	struct hlist_head fs_context_parse_param;
+	struct hlist_head sb_alloc_security;
+	struct hlist_head sb_delete;
+	struct hlist_head sb_free_security;
+	struct hlist_head sb_free_mnt_opts;
+	struct hlist_head sb_eat_lsm_opts;
+	struct hlist_head sb_mnt_opts_compat;
+	struct hlist_head sb_remount;
+	struct hlist_head sb_kern_mount;
+	struct hlist_head sb_show_options;
+	struct hlist_head sb_statfs;
+	struct hlist_head sb_mount;
+	struct hlist_head sb_umount;
+	struct hlist_head sb_pivotroot;
+	struct hlist_head sb_set_mnt_opts;
+	struct hlist_head sb_clone_mnt_opts;
+	struct hlist_head move_mount;
+	struct hlist_head dentry_init_security;
+	struct hlist_head dentry_create_files_as;
+	struct hlist_head path_notify;
+	struct hlist_head inode_alloc_security;
+	struct hlist_head inode_free_security;
+	struct hlist_head inode_init_security;
+	struct hlist_head inode_init_security_anon;
+	struct hlist_head inode_create;
+	struct hlist_head inode_link;
+	struct hlist_head inode_unlink;
+	struct hlist_head inode_symlink;
+	struct hlist_head inode_mkdir;
+	struct hlist_head inode_rmdir;
+	struct hlist_head inode_mknod;
+	struct hlist_head inode_rename;
+	struct hlist_head inode_readlink;
+	struct hlist_head inode_follow_link;
+	struct hlist_head inode_permission;
+	struct hlist_head inode_setattr;
+	struct hlist_head inode_getattr;
+	struct hlist_head inode_setxattr;
+	struct hlist_head inode_post_setxattr;
+	struct hlist_head inode_getxattr;
+	struct hlist_head inode_listxattr;
+	struct hlist_head inode_removexattr;
+	struct hlist_head inode_set_acl;
+	struct hlist_head inode_get_acl;
+	struct hlist_head inode_remove_acl;
+	struct hlist_head inode_need_killpriv;
+	struct hlist_head inode_killpriv;
+	struct hlist_head inode_getsecurity;
+	struct hlist_head inode_setsecurity;
+	struct hlist_head inode_listsecurity;
+	struct hlist_head inode_getsecid;
+	struct hlist_head inode_copy_up;
+	struct hlist_head inode_copy_up_xattr;
+	struct hlist_head kernfs_init_security;
+	struct hlist_head file_permission;
+	struct hlist_head file_alloc_security;
+	struct hlist_head file_free_security;
+	struct hlist_head file_ioctl;
+	struct hlist_head file_ioctl_compat;
+	struct hlist_head mmap_addr;
+	struct hlist_head mmap_file;
+	struct hlist_head file_mprotect;
+	struct hlist_head file_lock;
+	struct hlist_head file_fcntl;
+	struct hlist_head file_set_fowner;
+	struct hlist_head file_send_sigiotask;
+	struct hlist_head file_receive;
+	struct hlist_head file_open;
+	struct hlist_head file_truncate;
+	struct hlist_head task_alloc;
+	struct hlist_head task_free;
+	struct hlist_head cred_alloc_blank;
+	struct hlist_head cred_free;
+	struct hlist_head cred_prepare;
+	struct hlist_head cred_transfer;
+	struct hlist_head cred_getsecid;
+	struct hlist_head kernel_act_as;
+	struct hlist_head kernel_create_files_as;
+	struct hlist_head kernel_module_request;
+	struct hlist_head kernel_load_data;
+	struct hlist_head kernel_post_load_data;
+	struct hlist_head kernel_read_file;
+	struct hlist_head kernel_post_read_file;
+	struct hlist_head task_fix_setuid;
+	struct hlist_head task_fix_setgid;
+	struct hlist_head task_fix_setgroups;
+	struct hlist_head task_setpgid;
+	struct hlist_head task_getpgid;
+	struct hlist_head task_getsid;
+	struct hlist_head current_getsecid_subj;
+	struct hlist_head task_getsecid_obj;
+	struct hlist_head task_setnice;
+	struct hlist_head task_setioprio;
+	struct hlist_head task_getioprio;
+	struct hlist_head task_prlimit;
+	struct hlist_head task_setrlimit;
+	struct hlist_head task_setscheduler;
+	struct hlist_head task_getscheduler;
+	struct hlist_head task_movememory;
+	struct hlist_head task_kill;
+	struct hlist_head task_prctl;
+	struct hlist_head task_to_inode;
+	struct hlist_head userns_create;
+	struct hlist_head ipc_permission;
+	struct hlist_head ipc_getsecid;
+	struct hlist_head msg_msg_alloc_security;
+	struct hlist_head msg_msg_free_security;
+	struct hlist_head msg_queue_alloc_security;
+	struct hlist_head msg_queue_free_security;
+	struct hlist_head msg_queue_associate;
+	struct hlist_head msg_queue_msgctl;
+	struct hlist_head msg_queue_msgsnd;
+	struct hlist_head msg_queue_msgrcv;
+	struct hlist_head shm_alloc_security;
+	struct hlist_head shm_free_security;
+	struct hlist_head shm_associate;
+	struct hlist_head shm_shmctl;
+	struct hlist_head shm_shmat;
+	struct hlist_head sem_alloc_security;
+	struct hlist_head sem_free_security;
+	struct hlist_head sem_associate;
+	struct hlist_head sem_semctl;
+	struct hlist_head sem_semop;
+	struct hlist_head netlink_send;
+	struct hlist_head d_instantiate;
+	struct hlist_head getprocattr;
+	struct hlist_head setprocattr;
+	struct hlist_head ismaclabel;
+	struct hlist_head secid_to_secctx;
+	struct hlist_head secctx_to_secid;
+	struct hlist_head release_secctx;
+	struct hlist_head inode_invalidate_secctx;
+	struct hlist_head inode_notifysecctx;
+	struct hlist_head inode_setsecctx;
+	struct hlist_head inode_getsecctx;
+	struct hlist_head unix_stream_connect;
+	struct hlist_head unix_may_send;
+	struct hlist_head socket_create;
+	struct hlist_head socket_post_create;
+	struct hlist_head socket_socketpair;
+	struct hlist_head socket_bind;
+	struct hlist_head socket_connect;
+	struct hlist_head socket_listen;
+	struct hlist_head socket_accept;
+	struct hlist_head socket_sendmsg;
+	struct hlist_head socket_recvmsg;
+	struct hlist_head socket_getsockname;
+	struct hlist_head socket_getpeername;
+	struct hlist_head socket_getsockopt;
+	struct hlist_head socket_setsockopt;
+	struct hlist_head socket_shutdown;
+	struct hlist_head socket_sock_rcv_skb;
+	struct hlist_head socket_getpeersec_stream;
+	struct hlist_head socket_getpeersec_dgram;
+	struct hlist_head sk_alloc_security;
+	struct hlist_head sk_free_security;
+	struct hlist_head sk_clone_security;
+	struct hlist_head sk_getsecid;
+	struct hlist_head sock_graft;
+	struct hlist_head inet_conn_request;
+	struct hlist_head inet_csk_clone;
+	struct hlist_head inet_conn_established;
+	struct hlist_head secmark_relabel_packet;
+	struct hlist_head secmark_refcount_inc;
+	struct hlist_head secmark_refcount_dec;
+	struct hlist_head req_classify_flow;
+	struct hlist_head tun_dev_alloc_security;
+	struct hlist_head tun_dev_free_security;
+	struct hlist_head tun_dev_create;
+	struct hlist_head tun_dev_attach_queue;
+	struct hlist_head tun_dev_attach;
+	struct hlist_head tun_dev_open;
+	struct hlist_head sctp_assoc_request;
+	struct hlist_head sctp_bind_connect;
+	struct hlist_head sctp_sk_clone;
+	struct hlist_head sctp_assoc_established;
+	struct hlist_head mptcp_add_subflow;
+	struct hlist_head key_alloc;
+	struct hlist_head key_free;
+	struct hlist_head key_permission;
+	struct hlist_head key_getsecurity;
+	struct hlist_head audit_rule_init;
+	struct hlist_head audit_rule_known;
+	struct hlist_head audit_rule_match;
+	struct hlist_head audit_rule_free;
+	struct hlist_head bpf;
+	struct hlist_head bpf_map;
+	struct hlist_head bpf_prog;
+	struct hlist_head bpf_map_alloc_security;
+	struct hlist_head bpf_map_free_security;
+	struct hlist_head bpf_prog_alloc_security;
+	struct hlist_head bpf_prog_free_security;
+	struct hlist_head locked_down;
+	struct hlist_head perf_event_open;
+	struct hlist_head perf_event_alloc;
+	struct hlist_head perf_event_free;
+	struct hlist_head perf_event_read;
+	struct hlist_head perf_event_write;
+	struct hlist_head uring_override_creds;
+	struct hlist_head uring_sqpoll;
+	struct hlist_head uring_cmd;
+};
+
+enum lsm_event {
+	LSM_POLICY_CHANGE = 0,
+};
+
+struct msg_msgseg;
+
+struct msg_msg {
+	struct list_head m_list;
+	long m_type;
+	size_t m_ts;
+	struct msg_msgseg *next;
+	void *security;
+};
+
+struct security_class_mapping {
+	const char *name;
+	const char *perms[33];
+};
+
+struct ethtool_drvinfo {
+	__u32 cmd;
+	char driver[32];
+	char version[32];
+	char fw_version[32];
+	char bus_info[32];
+	char erom_version[32];
+	char reserved2[12];
+	__u32 n_priv_flags;
+	__u32 n_stats;
+	__u32 testinfo_len;
+	__u32 eedump_len;
+	__u32 regdump_len;
+};
+
+struct ethtool_regs {
+	__u32 cmd;
+	__u32 version;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_wolinfo {
+	__u32 cmd;
+	__u32 supported;
+	__u32 wolopts;
+	__u8 sopass[6];
+};
+
+enum ethtool_link_ext_substate_autoneg {
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 4,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 5,
+	ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 6,
+};
+
+enum ethtool_link_ext_substate_link_training {
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 4,
+};
+
+enum ethtool_link_ext_substate_link_logical_mismatch {
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 4,
+	ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 5,
+};
+
+enum ethtool_link_ext_substate_bad_signal_integrity {
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST = 3,
+	ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS = 4,
+};
+
+enum ethtool_link_ext_substate_cable_issue {
+	ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,
+	ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2,
+};
+
+enum ethtool_link_ext_substate_module {
+	ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1,
+};
+
+enum ethtool_link_ext_state {
+	ETHTOOL_LINK_EXT_STATE_AUTONEG = 0,
+	ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 1,
+	ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 2,
+	ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 3,
+	ETHTOOL_LINK_EXT_STATE_NO_CABLE = 4,
+	ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 5,
+	ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 6,
+	ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7,
+	ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8,
+	ETHTOOL_LINK_EXT_STATE_OVERHEAT = 9,
+	ETHTOOL_LINK_EXT_STATE_MODULE = 10,
+};
+
+struct ethtool_link_ext_state_info {
+	enum ethtool_link_ext_state link_ext_state;
+	union {
+		enum ethtool_link_ext_substate_autoneg autoneg;
+		enum ethtool_link_ext_substate_link_training link_training;
+		enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
+		enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
+		enum ethtool_link_ext_substate_cable_issue cable_issue;
+		enum ethtool_link_ext_substate_module module;
+		u32 __link_ext_substate;
+	};
+};
+
+struct ethtool_link_ext_stats {
+	u64 link_down_events;
+};
+
+struct ethtool_eeprom {
+	__u32 cmd;
+	__u32 magic;
+	__u32 offset;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_coalesce {
+	__u32 cmd;
+	__u32 rx_coalesce_usecs;
+	__u32 rx_max_coalesced_frames;
+	__u32 rx_coalesce_usecs_irq;
+	__u32 rx_max_coalesced_frames_irq;
+	__u32 tx_coalesce_usecs;
+	__u32 tx_max_coalesced_frames;
+	__u32 tx_coalesce_usecs_irq;
+	__u32 tx_max_coalesced_frames_irq;
+	__u32 stats_block_coalesce_usecs;
+	__u32 use_adaptive_rx_coalesce;
+	__u32 use_adaptive_tx_coalesce;
+	__u32 pkt_rate_low;
+	__u32 rx_coalesce_usecs_low;
+	__u32 rx_max_coalesced_frames_low;
+	__u32 tx_coalesce_usecs_low;
+	__u32 tx_max_coalesced_frames_low;
+	__u32 pkt_rate_high;
+	__u32 rx_coalesce_usecs_high;
+	__u32 rx_max_coalesced_frames_high;
+	__u32 tx_coalesce_usecs_high;
+	__u32 tx_max_coalesced_frames_high;
+	__u32 rate_sample_interval;
+};
+
+struct kernel_ethtool_coalesce {
+	u8 use_cqe_mode_tx;
+	u8 use_cqe_mode_rx;
+	u32 tx_aggr_max_bytes;
+	u32 tx_aggr_max_frames;
+	u32 tx_aggr_time_usecs;
+};
+
+struct ethtool_ringparam {
+	__u32 cmd;
+	__u32 rx_max_pending;
+	__u32 rx_mini_max_pending;
+	__u32 rx_jumbo_max_pending;
+	__u32 tx_max_pending;
+	__u32 rx_pending;
+	__u32 rx_mini_pending;
+	__u32 rx_jumbo_pending;
+	__u32 tx_pending;
+};
+
+struct kernel_ethtool_ringparam {
+	u32 rx_buf_len;
+	u8 tcp_data_split;
+	u8 tx_push;
+	u8 rx_push;
+	u32 cqe_size;
+	u32 tx_push_buf_len;
+	u32 tx_push_buf_max_len;
+};
+
+enum ethtool_mac_stats_src {
+	ETHTOOL_MAC_STATS_SRC_AGGREGATE = 0,
+	ETHTOOL_MAC_STATS_SRC_EMAC = 1,
+	ETHTOOL_MAC_STATS_SRC_PMAC = 2,
+};
+
+struct ethtool_pause_stats {
+	enum ethtool_mac_stats_src src;
+	union {
+		struct {
+			u64 tx_pause_frames;
+			u64 rx_pause_frames;
+		};
+		struct {
+			u64 tx_pause_frames;
+			u64 rx_pause_frames;
+		} stats;
+	};
+};
+
+struct ethtool_pauseparam {
+	__u32 cmd;
+	__u32 autoneg;
+	__u32 rx_pause;
+	__u32 tx_pause;
+};
+
+struct ethtool_test {
+	__u32 cmd;
+	__u32 flags;
+	__u32 reserved;
+	__u32 len;
+	__u64 data[0];
+};
+
+struct ethtool_stats {
+	__u32 cmd;
+	__u32 n_stats;
+	__u64 data[0];
+};
+
+struct ethtool_tcpip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be16 psrc;
+	__be16 pdst;
+	__u8 tos;
+};
+
+struct ethtool_ah_espip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be32 spi;
+	__u8 tos;
+};
+
+struct ethtool_usrip4_spec {
+	__be32 ip4src;
+	__be32 ip4dst;
+	__be32 l4_4_bytes;
+	__u8 tos;
+	__u8 ip_ver;
+	__u8 proto;
+};
+
+struct ethtool_tcpip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be16 psrc;
+	__be16 pdst;
+	__u8 tclass;
+};
+
+struct ethtool_ah_espip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be32 spi;
+	__u8 tclass;
+};
+
+struct ethtool_usrip6_spec {
+	__be32 ip6src[4];
+	__be32 ip6dst[4];
+	__be32 l4_4_bytes;
+	__u8 tclass;
+	__u8 l4_proto;
+};
+
+struct ethhdr {
+	unsigned char h_dest[6];
+	unsigned char h_source[6];
+	__be16 h_proto;
+};
+
+union ethtool_flow_union {
+	struct ethtool_tcpip4_spec tcp_ip4_spec;
+	struct ethtool_tcpip4_spec udp_ip4_spec;
+	struct ethtool_tcpip4_spec sctp_ip4_spec;
+	struct ethtool_ah_espip4_spec ah_ip4_spec;
+	struct ethtool_ah_espip4_spec esp_ip4_spec;
+	struct ethtool_usrip4_spec usr_ip4_spec;
+	struct ethtool_tcpip6_spec tcp_ip6_spec;
+	struct ethtool_tcpip6_spec udp_ip6_spec;
+	struct ethtool_tcpip6_spec sctp_ip6_spec;
+	struct ethtool_ah_espip6_spec ah_ip6_spec;
+	struct ethtool_ah_espip6_spec esp_ip6_spec;
+	struct ethtool_usrip6_spec usr_ip6_spec;
+	struct ethhdr ether_spec;
+	__u8 hdata[52];
+};
+
+struct ethtool_flow_ext {
+	__u8 padding[2];
+	unsigned char h_dest[6];
+	__be16 vlan_etype;
+	__be16 vlan_tci;
+	__be32 data[2];
+};
+
+struct ethtool_rx_flow_spec {
+	__u32 flow_type;
+	union ethtool_flow_union h_u;
+	struct ethtool_flow_ext h_ext;
+	union ethtool_flow_union m_u;
+	struct ethtool_flow_ext m_ext;
+	__u64 ring_cookie;
+	__u32 location;
+};
+
+struct ethtool_rxnfc {
+	__u32 cmd;
+	__u32 flow_type;
+	__u64 data;
+	struct ethtool_rx_flow_spec fs;
+	union {
+		__u32 rule_cnt;
+		__u32 rss_context;
+	};
+	__u32 rule_locs[0];
+};
+
+struct ethtool_flash {
+	__u32 cmd;
+	__u32 region;
+	char data[128];
+};
+
+struct ethtool_channels {
+	__u32 cmd;
+	__u32 max_rx;
+	__u32 max_tx;
+	__u32 max_other;
+	__u32 max_combined;
+	__u32 rx_count;
+	__u32 tx_count;
+	__u32 other_count;
+	__u32 combined_count;
+};
+
+struct ethtool_dump {
+	__u32 cmd;
+	__u32 version;
+	__u32 flag;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_ts_info {
+	__u32 cmd;
+	__u32 so_timestamping;
+	__s32 phc_index;
+	__u32 tx_types;
+	__u32 tx_reserved[3];
+	__u32 rx_filters;
+	__u32 rx_reserved[3];
+};
+
+struct ethtool_modinfo {
+	__u32 cmd;
+	__u32 type;
+	__u32 eeprom_len;
+	__u32 reserved[8];
+};
+
+struct ethtool_eee {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertised;
+	__u32 lp_advertised;
+	__u32 eee_active;
+	__u32 eee_enabled;
+	__u32 tx_lpi_enabled;
+	__u32 tx_lpi_timer;
+	__u32 reserved[2];
+};
+
+struct ethtool_tunable {
+	__u32 cmd;
+	__u32 id;
+	__u32 type_id;
+	__u32 len;
+	void *data[0];
+};
+
+struct ethtool_link_settings {
+	__u32 cmd;
+	__u32 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__s8 link_mode_masks_nwords;
+	__u8 transceiver;
+	__u8 master_slave_cfg;
+	__u8 master_slave_state;
+	__u8 rate_matching;
+	__u32 reserved[7];
+	__u32 link_mode_masks[0];
+};
+
+struct ethtool_link_ksettings {
+	struct ethtool_link_settings base;
+	struct {
+		unsigned long supported[2];
+		unsigned long advertising[2];
+		unsigned long lp_advertising[2];
+	} link_modes;
+	u32 lanes;
+};
+
+struct ethtool_fec_stat {
+	u64 total;
+	u64 lanes[8];
+};
+
+struct ethtool_fec_stats {
+	struct ethtool_fec_stat corrected_blocks;
+	struct ethtool_fec_stat uncorrectable_blocks;
+	struct ethtool_fec_stat corrected_bits;
+};
+
+struct ethtool_fecparam {
+	__u32 cmd;
+	__u32 active_fec;
+	__u32 fec;
+	__u32 reserved;
+};
+
+struct ethtool_module_eeprom {
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+	u8 *data;
+};
+
+struct ethtool_eth_phy_stats {
+	enum ethtool_mac_stats_src src;
+	union {
+		struct {
+			u64 SymbolErrorDuringCarrier;
+		};
+		struct {
+			u64 SymbolErrorDuringCarrier;
+		} stats;
+	};
+};
+
+struct ethtool_eth_mac_stats {
+	enum ethtool_mac_stats_src src;
+	union {
+		struct {
+			u64 FramesTransmittedOK;
+			u64 SingleCollisionFrames;
+			u64 MultipleCollisionFrames;
+			u64 FramesReceivedOK;
+			u64 FrameCheckSequenceErrors;
+			u64 AlignmentErrors;
+			u64 OctetsTransmittedOK;
+			u64 FramesWithDeferredXmissions;
+			u64 LateCollisions;
+			u64 FramesAbortedDueToXSColls;
+			u64 FramesLostDueToIntMACXmitError;
+			u64 CarrierSenseErrors;
+			u64 OctetsReceivedOK;
+			u64 FramesLostDueToIntMACRcvError;
+			u64 MulticastFramesXmittedOK;
+			u64 BroadcastFramesXmittedOK;
+			u64 FramesWithExcessiveDeferral;
+			u64 MulticastFramesReceivedOK;
+			u64 BroadcastFramesReceivedOK;
+			u64 InRangeLengthErrors;
+			u64 OutOfRangeLengthField;
+			u64 FrameTooLongErrors;
+		};
+		struct {
+			u64 FramesTransmittedOK;
+			u64 SingleCollisionFrames;
+			u64 MultipleCollisionFrames;
+			u64 FramesReceivedOK;
+			u64 FrameCheckSequenceErrors;
+			u64 AlignmentErrors;
+			u64 OctetsTransmittedOK;
+			u64 FramesWithDeferredXmissions;
+			u64 LateCollisions;
+			u64 FramesAbortedDueToXSColls;
+			u64 FramesLostDueToIntMACXmitError;
+			u64 CarrierSenseErrors;
+			u64 OctetsReceivedOK;
+			u64 FramesLostDueToIntMACRcvError;
+			u64 MulticastFramesXmittedOK;
+			u64 BroadcastFramesXmittedOK;
+			u64 FramesWithExcessiveDeferral;
+			u64 MulticastFramesReceivedOK;
+			u64 BroadcastFramesReceivedOK;
+			u64 InRangeLengthErrors;
+			u64 OutOfRangeLengthField;
+			u64 FrameTooLongErrors;
+		} stats;
+	};
+};
+
+struct ethtool_eth_ctrl_stats {
+	enum ethtool_mac_stats_src src;
+	union {
+		struct {
+			u64 MACControlFramesTransmitted;
+			u64 MACControlFramesReceived;
+			u64 UnsupportedOpcodesReceived;
+		};
+		struct {
+			u64 MACControlFramesTransmitted;
+			u64 MACControlFramesReceived;
+			u64 UnsupportedOpcodesReceived;
+		} stats;
+	};
+};
+
+struct ethtool_rmon_stats {
+	enum ethtool_mac_stats_src src;
+	union {
+		struct {
+			u64 undersize_pkts;
+			u64 oversize_pkts;
+			u64 fragments;
+			u64 jabbers;
+			u64 hist[10];
+			u64 hist_tx[10];
+		};
+		struct {
+			u64 undersize_pkts;
+			u64 oversize_pkts;
+			u64 fragments;
+			u64 jabbers;
+			u64 hist[10];
+			u64 hist_tx[10];
+		} stats;
+	};
+};
+
+struct ethtool_rmon_hist_range {
+	u16 low;
+	u16 high;
+};
+
+enum ethtool_module_power_mode_policy {
+	ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH = 1,
+	ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO = 2,
+};
+
+enum ethtool_module_power_mode {
+	ETHTOOL_MODULE_POWER_MODE_LOW = 1,
+	ETHTOOL_MODULE_POWER_MODE_HIGH = 2,
+};
+
+struct ethtool_module_power_mode_params {
+	enum ethtool_module_power_mode_policy policy;
+	enum ethtool_module_power_mode mode;
+};
+
+enum ethtool_mm_verify_status {
+	ETHTOOL_MM_VERIFY_STATUS_UNKNOWN = 0,
+	ETHTOOL_MM_VERIFY_STATUS_INITIAL = 1,
+	ETHTOOL_MM_VERIFY_STATUS_VERIFYING = 2,
+	ETHTOOL_MM_VERIFY_STATUS_SUCCEEDED = 3,
+	ETHTOOL_MM_VERIFY_STATUS_FAILED = 4,
+	ETHTOOL_MM_VERIFY_STATUS_DISABLED = 5,
+};
+
+struct ethtool_mm_state {
+	u32 verify_time;
+	u32 max_verify_time;
+	enum ethtool_mm_verify_status verify_status;
+	bool tx_enabled;
+	bool tx_active;
+	bool pmac_enabled;
+	bool verify_enabled;
+	u32 tx_min_frag_size;
+	u32 rx_min_frag_size;
+};
+
+struct ethtool_mm_cfg {
+	u32 verify_time;
+	bool verify_enabled;
+	bool tx_enabled;
+	bool pmac_enabled;
+	u32 tx_min_frag_size;
+};
+
+struct ethtool_mm_stats {
+	u64 MACMergeFrameAssErrorCount;
+	u64 MACMergeFrameSmdErrorCount;
+	u64 MACMergeFrameAssOkCount;
+	u64 MACMergeFragCountRx;
+	u64 MACMergeFragCountTx;
+	u64 MACMergeHoldCount;
+};
+
+struct selinux_audit_data;
+
+typedef void (*btf_trace_selinux_audited)(void *, struct selinux_audit_data *, char *, char *, const char *);
+
+struct selinux_audit_data {
+	u32 ssid;
+	u32 tsid;
+	u16 tclass;
+	u32 requested;
+	u32 audited;
+	u32 denied;
+	int result;
+};
+
+struct avc_cache_stats {
+	unsigned int lookups;
+	unsigned int misses;
+	unsigned int allocations;
+	unsigned int reclaims;
+	unsigned int frees;
+};
+
+struct avc_cache {
+	struct hlist_head slots[512];
+	spinlock_t slots_lock[512];
+	atomic_t lru_hint;
+	atomic_t active_nodes;
+	u32 latest_notif;
+};
+
+struct selinux_avc {
+	unsigned int avc_cache_threshold;
+	struct avc_cache avc_cache;
+};
+
+struct avc_callback_node {
+	int (*callback)(u32);
+	u32 events;
+	struct avc_callback_node *next;
+};
+
+struct av_decision {
+	u32 allowed;
+	u32 auditallow;
+	u32 auditdeny;
+	u32 seqno;
+	u32 flags;
+};
+
+struct avc_xperms_node;
+
+struct avc_entry {
+	u32 ssid;
+	u32 tsid;
+	u16 tclass;
+	struct av_decision avd;
+	struct avc_xperms_node *xp_node;
+};
+
+struct avc_node {
+	struct avc_entry ae;
+	struct hlist_node list;
+	struct callback_head rhead;
+};
+
+struct extended_perms_data {
+	u32 p[8];
+};
+
+struct extended_perms {
+	u16 len;
+	struct extended_perms_data drivers;
+};
+
+struct avc_xperms_node {
+	struct extended_perms xp;
+	struct list_head xpd_head;
+};
+
+struct trace_event_raw_selinux_audited {
+	struct trace_entry ent;
+	u32 requested;
+	u32 denied;
+	u32 audited;
+	int result;
+	u32 __data_loc_scontext;
+	u32 __data_loc_tcontext;
+	u32 __data_loc_tclass;
+	char __data[0];
+};
+
+struct extended_perms_decision {
+	u8 used;
+	u8 driver;
+	struct extended_perms_data *allowed;
+	struct extended_perms_data *auditallow;
+	struct extended_perms_data *dontaudit;
+};
+
+struct avc_xperms_decision_node {
+	struct extended_perms_decision xpd;
+	struct list_head xpd_list;
+};
+
+struct lsm_network_audit;
+
+struct lsm_ioctlop_audit;
+
+struct lsm_ibpkey_audit;
+
+struct lsm_ibendport_audit;
+
+struct common_audit_data {
+	char type;
+	union {
+		struct path path;
+		struct dentry *dentry;
+		struct inode *inode;
+		struct lsm_network_audit *net;
+		int cap;
+		int ipc_id;
+		struct task_struct *tsk;
+		struct {
+			key_serial_t key;
+			char *key_desc;
+		} key_struct;
+		char *kmod_name;
+		struct lsm_ioctlop_audit *op;
+		struct file *file;
+		struct lsm_ibpkey_audit *ibpkey;
+		struct lsm_ibendport_audit *ibendport;
+		int reason;
+		const char *anonclass;
+	} u;
+	union {
+		struct selinux_audit_data *selinux_audit_data;
+	};
+};
+
+struct lsm_network_audit {
+	int netif;
+	const struct sock *sk;
+	u16 family;
+	__be16 dport;
+	__be16 sport;
+	union {
+		struct {
+			__be32 daddr;
+			__be32 saddr;
+		} v4;
+		struct {
+			struct in6_addr daddr;
+			struct in6_addr saddr;
+		} v6;
+	} fam;
+};
+
+struct lsm_ioctlop_audit {
+	struct path path;
+	u16 cmd;
+};
+
+struct lsm_ibpkey_audit {
+	u64 subnet_prefix;
+	u16 pkey;
+};
+
+struct lsm_ibendport_audit {
+	const char *dev_name;
+	u8 port;
+};
+
+struct trace_event_data_offsets_selinux_audited {
+	u32 scontext;
+	u32 tcontext;
+	u32 tclass;
+};
+
+struct selinux_policy;
+
+struct selinux_state {
+	bool enforcing;
+	bool initialized;
+	bool policycap[8];
+	bool android_netlink_route;
+	bool android_netlink_getneigh;
+	struct page *status_page;
+	struct mutex status_lock;
+	struct selinux_policy __attribute__((btf_type_tag("rcu"))) *policy;
+	struct mutex policy_mutex;
+};
+
+struct xfrm_address_filter;
+
+struct xfrm_state_walk {
+	struct list_head all;
+	u8 state;
+	u8 dying;
+	u8 proto;
+	u32 seq;
+	struct xfrm_address_filter *filter;
+};
+
+struct xfrm_replay_state {
+	__u32 oseq;
+	__u32 seq;
+	__u32 bitmap;
+};
+
+enum xfrm_replay_mode {
+	XFRM_REPLAY_MODE_LEGACY = 0,
+	XFRM_REPLAY_MODE_BMP = 1,
+	XFRM_REPLAY_MODE_ESN = 2,
+};
+
+struct xfrm_stats {
+	__u32 replay_window;
+	__u32 replay;
+	__u32 integrity_failed;
+};
+
+struct xfrm_mode {
+	u8 encap;
+	u8 family;
+	u8 flags;
+};
+
+struct xfrm_algo_auth;
+
+struct xfrm_algo;
+
+struct xfrm_algo_aead;
+
+struct xfrm_encap_tmpl;
+
+struct xfrm_replay_state_esn;
+
+struct xfrm_type;
+
+struct xfrm_type_offload;
+
+struct xfrm_state {
+	possible_net_t xs_net;
+	union {
+		struct hlist_node gclist;
+		struct hlist_node bydst;
+	};
+	struct hlist_node bysrc;
+	struct hlist_node byspi;
+	struct hlist_node byseq;
+	refcount_t refcnt;
+	spinlock_t lock;
+	struct xfrm_id id;
+	struct xfrm_selector sel;
+	struct xfrm_mark mark;
+	u32 if_id;
+	u32 tfcpad;
+	u32 genid;
+	struct xfrm_state_walk km;
+	struct {
+		u32 reqid;
+		u8 mode;
+		u8 replay_window;
+		u8 aalgo;
+		u8 ealgo;
+		u8 calgo;
+		u8 flags;
+		u16 family;
+		xfrm_address_t saddr;
+		int header_len;
+		int trailer_len;
+		u32 extra_flags;
+		struct xfrm_mark smark;
+	} props;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_algo_auth *aalg;
+	struct xfrm_algo *ealg;
+	struct xfrm_algo *calg;
+	struct xfrm_algo_aead *aead;
+	const char *geniv;
+	__be16 new_mapping_sport;
+	u32 new_mapping;
+	u32 mapping_maxage;
+	struct xfrm_encap_tmpl *encap;
+	struct sock __attribute__((btf_type_tag("rcu"))) *encap_sk;
+	xfrm_address_t *coaddr;
+	struct xfrm_state *tunnel;
+	atomic_t tunnel_users;
+	struct xfrm_replay_state replay;
+	struct xfrm_replay_state_esn *replay_esn;
+	struct xfrm_replay_state preplay;
+	struct xfrm_replay_state_esn *preplay_esn;
+	enum xfrm_replay_mode repl_mode;
+	u32 xflags;
+	u32 replay_maxage;
+	u32 replay_maxdiff;
+	struct timer_list rtimer;
+	struct xfrm_stats stats;
+	struct xfrm_lifetime_cur curlft;
+	struct hrtimer mtimer;
+	struct xfrm_dev_offload xso;
+	long saved_tmo;
+	time64_t lastused;
+	struct page_frag xfrag;
+	const struct xfrm_type *type;
+	struct xfrm_mode inner_mode;
+	struct xfrm_mode inner_mode_iaf;
+	struct xfrm_mode outer_mode;
+	const struct xfrm_type_offload *type_offload;
+	struct xfrm_sec_ctx *security;
+	void *data;
+};
+
+struct xfrm_address_filter {
+	xfrm_address_t saddr;
+	xfrm_address_t daddr;
+	__u16 family;
+	__u8 splen;
+	__u8 dplen;
+};
+
+struct xfrm_algo_auth {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_trunc_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	char alg_key[0];
+};
+
+struct xfrm_algo_aead {
+	char alg_name[64];
+	unsigned int alg_key_len;
+	unsigned int alg_icv_len;
+	char alg_key[0];
+};
+
+struct xfrm_encap_tmpl {
+	__u16 encap_type;
+	__be16 encap_sport;
+	__be16 encap_dport;
+	xfrm_address_t encap_oa;
+};
+
+struct xfrm_replay_state_esn {
+	unsigned int bmp_len;
+	__u32 oseq;
+	__u32 seq;
+	__u32 oseq_hi;
+	__u32 seq_hi;
+	__u32 replay_window;
+	__u32 bmp[0];
+};
+
+struct xfrm_type {
+	struct module *owner;
+	u8 proto;
+	u8 flags;
+	int (*init_state)(struct xfrm_state *, struct netlink_ext_ack *);
+	void (*destructor)(struct xfrm_state *);
+	int (*input)(struct xfrm_state *, struct sk_buff *);
+	int (*output)(struct xfrm_state *, struct sk_buff *);
+	int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);
+};
+
+struct xfrm_type_offload {
+	struct module *owner;
+	u8 proto;
+	void (*encap)(struct xfrm_state *, struct sk_buff *);
+	int (*input_tail)(struct xfrm_state *, struct sk_buff *);
+	int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);
+};
+
+struct xfrm_sec_ctx {
+	__u8 ctx_doi;
+	__u8 ctx_alg;
+	__u16 ctx_len;
+	__u32 ctx_sid;
+	char ctx_str[0];
+};
+
+struct rt6key {
+	struct in6_addr addr;
+	int plen;
+};
+
+struct rtable;
+
+struct fnhe_hash_bucket;
+
+struct fib_nh_common {
+	struct net_device *nhc_dev;
+	netdevice_tracker nhc_dev_tracker;
+	int nhc_oif;
+	unsigned char nhc_scope;
+	u8 nhc_family;
+	u8 nhc_gw_family;
+	unsigned char nhc_flags;
+	struct lwtunnel_state *nhc_lwtstate;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} nhc_gw;
+	int nhc_weight;
+	atomic_t nhc_upper_bound;
+	struct rtable __attribute__((btf_type_tag("rcu"))) * __attribute__((btf_type_tag("percpu"))) *nhc_pcpu_rth_output;
+	struct rtable __attribute__((btf_type_tag("rcu"))) *nhc_rth_input;
+	struct fnhe_hash_bucket __attribute__((btf_type_tag("rcu"))) *nhc_exceptions;
+};
+
+struct rt6_exception_bucket;
+
+struct fib6_nh {
+	struct fib_nh_common nh_common;
+	unsigned long last_probe;
+	struct rt6_info * __attribute__((btf_type_tag("percpu"))) *rt6i_pcpu;
+	struct rt6_exception_bucket __attribute__((btf_type_tag("rcu"))) *rt6i_exception_bucket;
+};
+
+struct fib6_node;
+
+struct dst_metrics;
+
+struct nexthop;
+
+struct fib6_info {
+	struct fib6_table *fib6_table;
+	struct fib6_info __attribute__((btf_type_tag("rcu"))) *fib6_next;
+	struct fib6_node __attribute__((btf_type_tag("rcu"))) *fib6_node;
+	union {
+		struct list_head fib6_siblings;
+		struct list_head nh_list;
+	};
+	unsigned int fib6_nsiblings;
+	refcount_t fib6_ref;
+	unsigned long expires;
+	struct dst_metrics *fib6_metrics;
+	struct rt6key fib6_dst;
+	u32 fib6_flags;
+	struct rt6key fib6_src;
+	struct rt6key fib6_prefsrc;
+	u32 fib6_metric;
+	u8 fib6_protocol;
+	u8 fib6_type;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	u8 should_flush: 1;
+	u8 dst_nocount: 1;
+	u8 dst_nopolicy: 1;
+	u8 fib6_destroying: 1;
+	u8 unused: 4;
+	struct callback_head rcu;
+	struct nexthop *nh;
+	u64 android_kabi_reserved1;
+	struct fib6_nh fib6_nh[0];
+};
+
+struct fib6_node {
+	struct fib6_node __attribute__((btf_type_tag("rcu"))) *parent;
+	struct fib6_node __attribute__((btf_type_tag("rcu"))) *left;
+	struct fib6_node __attribute__((btf_type_tag("rcu"))) *right;
+	struct fib6_info __attribute__((btf_type_tag("rcu"))) *leaf;
+	__u16 fn_bit;
+	__u16 fn_flags;
+	int fn_sernum;
+	struct fib6_info __attribute__((btf_type_tag("rcu"))) *rr_ptr;
+	struct callback_head rcu;
+	u64 android_kabi_reserved1;
+};
+
+struct fib6_table {
+	struct hlist_node tb6_hlist;
+	u32 tb6_id;
+	spinlock_t tb6_lock;
+	struct fib6_node tb6_root;
+	struct inet_peer_base tb6_peers;
+	unsigned int flags;
+	unsigned int fib_seq;
+};
+
+struct dst_metrics {
+	u32 metrics[17];
+	refcount_t refcnt;
+};
+
+struct rtable {
+	struct dst_entry dst;
+	int rt_genid;
+	unsigned int rt_flags;
+	__u16 rt_type;
+	__u8 rt_is_input;
+	__u8 rt_uses_gateway;
+	int rt_iif;
+	u8 rt_gw_family;
+	union {
+		__be32 rt_gw4;
+		struct in6_addr rt_gw6;
+	};
+	u32 rt_mtu_locked: 1;
+	u32 rt_pmtu: 31;
+};
+
+struct fib_nh_exception;
+
+struct fnhe_hash_bucket {
+	struct fib_nh_exception __attribute__((btf_type_tag("rcu"))) *chain;
+};
+
+struct fib_nh_exception {
+	struct fib_nh_exception __attribute__((btf_type_tag("rcu"))) *fnhe_next;
+	int fnhe_genid;
+	__be32 fnhe_daddr;
+	u32 fnhe_pmtu;
+	bool fnhe_mtu_locked;
+	__be32 fnhe_gw;
+	unsigned long fnhe_expires;
+	struct rtable __attribute__((btf_type_tag("rcu"))) *fnhe_rth_input;
+	struct rtable __attribute__((btf_type_tag("rcu"))) *fnhe_rth_output;
+	unsigned long fnhe_stamp;
+	struct callback_head rcu;
+};
+
+struct rt6_info {
+	struct dst_entry dst;
+	struct fib6_info __attribute__((btf_type_tag("rcu"))) *from;
+	int sernum;
+	struct rt6key rt6i_dst;
+	struct rt6key rt6i_src;
+	struct in6_addr rt6i_gateway;
+	struct inet6_dev *rt6i_idev;
+	u32 rt6i_flags;
+	unsigned short rt6i_nfheader_len;
+	u64 android_kabi_reserved1;
+};
+
+struct rt6_exception_bucket {
+	struct hlist_head chain;
+	int depth;
+};
+
+struct rt6_statistics {
+	__u32 fib_nodes;
+	__u32 fib_route_nodes;
+	__u32 fib_rt_entries;
+	__u32 fib_rt_cache;
+	__u32 fib_discarded_routes;
+	atomic_t fib_rt_alloc;
+};
+
+struct hashtab_node;
+
+struct hashtab {
+	struct hashtab_node **htable;
+	u32 size;
+	u32 nel;
+};
+
+struct symtab {
+	struct hashtab table;
+	u32 nprim;
+};
+
+struct avtab_node;
+
+struct avtab {
+	struct avtab_node **htable;
+	u32 nel;
+	u32 nslot;
+	u32 mask;
+};
+
+struct ebitmap_node;
+
+struct ebitmap {
+	struct ebitmap_node *node;
+	u32 highbit;
+};
+
+struct class_datum;
+
+struct role_datum;
+
+struct user_datum;
+
+struct type_datum;
+
+struct cond_bool_datum;
+
+struct cond_node;
+
+struct role_allow;
+
+struct ocontext;
+
+struct genfs;
+
+struct policydb {
+	int mls_enabled;
+	int android_netlink_route;
+	int android_netlink_getneigh;
+	struct symtab symtab[8];
+	char **sym_val_to_name[8];
+	struct class_datum **class_val_to_struct;
+	struct role_datum **role_val_to_struct;
+	struct user_datum **user_val_to_struct;
+	struct type_datum **type_val_to_struct;
+	struct avtab te_avtab;
+	struct hashtab role_tr;
+	struct ebitmap filename_trans_ttypes;
+	struct hashtab filename_trans;
+	u32 compat_filename_trans_count;
+	struct cond_bool_datum **bool_val_to_struct;
+	struct avtab te_cond_avtab;
+	struct cond_node *cond_list;
+	u32 cond_list_len;
+	struct role_allow *role_allow;
+	struct ocontext *ocontexts[9];
+	struct genfs *genfs;
+	struct hashtab range_tr;
+	struct ebitmap *type_attr_map_array;
+	struct ebitmap policycaps;
+	struct ebitmap permissive_map;
+	size_t len;
+	unsigned int policyvers;
+	unsigned int reject_unknown: 1;
+	unsigned int allow_unknown: 1;
+	u16 process_class;
+	u32 process_trans_perms;
+};
+
+struct selinux_mapping;
+
+struct selinux_map {
+	struct selinux_mapping *mapping;
+	u16 size;
+};
+
+struct sidtab;
+
+struct selinux_policy {
+	struct sidtab *sidtab;
+	struct policydb policydb;
+	struct selinux_map map;
+	u32 latest_granting;
+};
+
+struct in_addr {
+	__be32 s_addr;
+};
+
+struct sockaddr_in {
+	__kernel_sa_family_t sin_family;
+	__be16 sin_port;
+	struct in_addr sin_addr;
+	unsigned char __pad[8];
+};
+
+struct sockaddr_in6 {
+	unsigned short sin6_family;
+	__be16 sin6_port;
+	__be32 sin6_flowinfo;
+	struct in6_addr sin6_addr;
+	__u32 sin6_scope_id;
+};
+
+union sctp_addr {
+	struct sockaddr_in v4;
+	struct sockaddr_in6 v6;
+	struct sockaddr sa;
+};
+
+struct sctp_tsnmap {
+	unsigned long *tsn_map;
+	__u32 base_tsn;
+	__u32 cumulative_tsn_ack_point;
+	__u32 max_tsn_seen;
+	__u16 len;
+	__u16 pending_data;
+	__u16 num_dup_tsns;
+	__be32 dup_tsns[16];
+};
+
+struct sctp_inithdr_host {
+	__u32 init_tag;
+	__u32 a_rwnd;
+	__u16 num_outbound_streams;
+	__u16 num_inbound_streams;
+	__u32 initial_tsn;
+};
+
+enum sctp_endpoint_type {
+	SCTP_EP_TYPE_SOCKET = 0,
+	SCTP_EP_TYPE_ASSOCIATION = 1,
+};
+
+struct sctp_chunk;
+
+struct sctp_inq {
+	struct list_head in_chunk_list;
+	struct sctp_chunk *in_progress;
+	struct work_struct immediate;
+};
+
+struct sctp_bind_addr {
+	__u16 port;
+	struct list_head address_list;
+};
+
+struct sctp_ep_common {
+	enum sctp_endpoint_type type;
+	refcount_t refcnt;
+	bool dead;
+	struct sock *sk;
+	struct net *net;
+	struct sctp_inq inqueue;
+	struct sctp_bind_addr bind_addr;
+};
+
+typedef __s32 sctp_assoc_t;
+
+struct sctp_cookie {
+	__u32 my_vtag;
+	__u32 peer_vtag;
+	__u32 my_ttag;
+	__u32 peer_ttag;
+	ktime_t expiration;
+	__u16 sinit_num_ostreams;
+	__u16 sinit_max_instreams;
+	__u32 initial_tsn;
+	union sctp_addr peer_addr;
+	__u16 my_port;
+	__u8 prsctp_capable;
+	__u8 padding;
+	__u32 adaptation_ind;
+	__u8 auth_random[36];
+	__u8 auth_hmacs[10];
+	__u8 auth_chunks[20];
+	__u32 raw_addr_list_len;
+};
+
+enum sctp_state {
+	SCTP_STATE_CLOSED = 0,
+	SCTP_STATE_COOKIE_WAIT = 1,
+	SCTP_STATE_COOKIE_ECHOED = 2,
+	SCTP_STATE_ESTABLISHED = 3,
+	SCTP_STATE_SHUTDOWN_PENDING = 4,
+	SCTP_STATE_SHUTDOWN_SENT = 5,
+	SCTP_STATE_SHUTDOWN_RECEIVED = 6,
+	SCTP_STATE_SHUTDOWN_ACK_SENT = 7,
+};
+
+struct sctp_stream_out_ext;
+
+struct sctp_stream_out {
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	__u32 mid_uo;
+	struct sctp_stream_out_ext *ext;
+	__u8 state;
+};
+
+struct sctp_stream_in {
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	__u32 mid_uo;
+	__u32 fsn;
+	__u32 fsn_uo;
+	char pd_mode;
+	char pd_mode_uo;
+};
+
+struct sctp_stream_interleave;
+
+struct sctp_stream {
+	struct {
+		struct __genradix tree;
+		struct sctp_stream_out type[0];
+	} out;
+	struct {
+		struct __genradix tree;
+		struct sctp_stream_in type[0];
+	} in;
+	__u16 outcnt;
+	__u16 incnt;
+	struct sctp_stream_out *out_curr;
+	union {
+		struct {
+			struct list_head prio_list;
+		};
+		struct {
+			struct list_head rr_list;
+			struct sctp_stream_out_ext *rr_next;
+		};
+		struct {
+			struct list_head fc_list;
+		};
+	};
+	struct sctp_stream_interleave *si;
+};
+
+struct sctp_sched_ops;
+
+struct sctp_outq {
+	struct sctp_association *asoc;
+	struct list_head out_chunk_list;
+	struct sctp_sched_ops *sched;
+	unsigned int out_qlen;
+	unsigned int error;
+	struct list_head control_chunk_list;
+	struct list_head sacked;
+	struct list_head retransmit;
+	struct list_head abandoned;
+	__u32 outstanding_bytes;
+	char fast_rtx;
+	char cork;
+};
+
+struct sctp_ulpq {
+	char pd_mode;
+	struct sctp_association *asoc;
+	struct sk_buff_head reasm;
+	struct sk_buff_head reasm_uo;
+	struct sk_buff_head lobby;
+};
+
+struct sctp_priv_assoc_stats {
+	struct __kernel_sockaddr_storage obs_rto_ipaddr;
+	__u64 max_obs_rto;
+	__u64 isacks;
+	__u64 osacks;
+	__u64 opackets;
+	__u64 ipackets;
+	__u64 rtxchunks;
+	__u64 outofseqtsns;
+	__u64 idupchunks;
+	__u64 gapcnt;
+	__u64 ouodchunks;
+	__u64 iuodchunks;
+	__u64 oodchunks;
+	__u64 iodchunks;
+	__u64 octrlchunks;
+	__u64 ictrlchunks;
+};
+
+struct sctp_endpoint;
+
+struct sctp_transport;
+
+struct sctp_random_param;
+
+struct sctp_chunks_param;
+
+struct sctp_hmac_algo_param;
+
+struct sctp_auth_bytes;
+
+struct sctp_shared_key;
+
+struct sctp_association {
+	struct sctp_ep_common base;
+	struct list_head asocs;
+	sctp_assoc_t assoc_id;
+	struct sctp_endpoint *ep;
+	struct sctp_cookie c;
+	struct {
+		struct list_head transport_addr_list;
+		__u32 rwnd;
+		__u16 transport_count;
+		__u16 port;
+		struct sctp_transport *primary_path;
+		union sctp_addr primary_addr;
+		struct sctp_transport *active_path;
+		struct sctp_transport *retran_path;
+		struct sctp_transport *last_sent_to;
+		struct sctp_transport *last_data_from;
+		struct sctp_tsnmap tsn_map;
+		__be16 addip_disabled_mask;
+		__u16 ecn_capable: 1;
+		__u16 ipv4_address: 1;
+		__u16 ipv6_address: 1;
+		__u16 asconf_capable: 1;
+		__u16 prsctp_capable: 1;
+		__u16 reconf_capable: 1;
+		__u16 intl_capable: 1;
+		__u16 auth_capable: 1;
+		__u16 sack_needed: 1;
+		__u16 sack_generation: 1;
+		__u16 zero_window_announced: 1;
+		__u32 sack_cnt;
+		__u32 adaptation_ind;
+		struct sctp_inithdr_host i;
+		void *cookie;
+		int cookie_len;
+		__u32 addip_serial;
+		struct sctp_random_param *peer_random;
+		struct sctp_chunks_param *peer_chunks;
+		struct sctp_hmac_algo_param *peer_hmacs;
+	} peer;
+	enum sctp_state state;
+	int overall_error_count;
+	ktime_t cookie_life;
+	unsigned long rto_initial;
+	unsigned long rto_max;
+	unsigned long rto_min;
+	int max_burst;
+	int max_retrans;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u16 max_init_attempts;
+	__u16 init_retries;
+	unsigned long max_init_timeo;
+	unsigned long hbinterval;
+	unsigned long probe_interval;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u8 pmtu_pending;
+	__u32 pathmtu;
+	__u32 param_flags;
+	__u32 sackfreq;
+	unsigned long sackdelay;
+	unsigned long timeouts[12];
+	struct timer_list timers[12];
+	struct sctp_transport *shutdown_last_sent_to;
+	struct sctp_transport *init_last_sent_to;
+	int shutdown_retries;
+	__u32 next_tsn;
+	__u32 ctsn_ack_point;
+	__u32 adv_peer_ack_point;
+	__u32 highest_sacked;
+	__u32 fast_recovery_exit;
+	__u8 fast_recovery;
+	__u16 unack_data;
+	__u32 rtx_data_chunks;
+	__u32 rwnd;
+	__u32 a_rwnd;
+	__u32 rwnd_over;
+	__u32 rwnd_press;
+	int sndbuf_used;
+	atomic_t rmem_alloc;
+	wait_queue_head_t wait;
+	__u32 frag_point;
+	__u32 user_frag;
+	int init_err_counter;
+	int init_cycle;
+	__u16 default_stream;
+	__u16 default_flags;
+	__u32 default_ppid;
+	__u32 default_context;
+	__u32 default_timetolive;
+	__u32 default_rcv_context;
+	struct sctp_stream stream;
+	struct sctp_outq outqueue;
+	struct sctp_ulpq ulpq;
+	__u32 last_ecne_tsn;
+	__u32 last_cwr_tsn;
+	int numduptsns;
+	struct sctp_chunk *addip_last_asconf;
+	struct list_head asconf_ack_list;
+	struct list_head addip_chunk_list;
+	__u32 addip_serial;
+	int src_out_of_asoc_ok;
+	union sctp_addr *asconf_addr_del_pending;
+	struct sctp_transport *new_transport;
+	struct list_head endpoint_shared_keys;
+	struct sctp_auth_bytes *asoc_shared_key;
+	struct sctp_shared_key *shkey;
+	__u16 default_hmac_id;
+	__u16 active_key_id;
+	__u8 need_ecne: 1;
+	__u8 temp: 1;
+	__u8 pf_expose: 2;
+	__u8 force_delay: 1;
+	__u8 strreset_enable;
+	__u8 strreset_outstanding;
+	__u32 strreset_outseq;
+	__u32 strreset_inseq;
+	__u32 strreset_result[2];
+	struct sctp_chunk *strreset_chunk;
+	struct sctp_priv_assoc_stats stats;
+	int sent_cnt_removable;
+	__u16 subscribe;
+	__u64 abandoned_unsent[3];
+	__u64 abandoned_sent[3];
+	u32 secid;
+	u32 peer_secid;
+	struct callback_head rcu;
+};
+
+struct sctp_paramhdr;
+
+struct sctp_cookie_preserve_param;
+
+struct sctp_hostname_param;
+
+struct sctp_cookie_param;
+
+struct sctp_supported_addrs_param;
+
+struct sctp_ipv4addr_param;
+
+struct sctp_ipv6addr_param;
+
+union sctp_addr_param;
+
+struct sctp_adaptation_ind_param;
+
+struct sctp_supported_ext_param;
+
+struct sctp_addip_param;
+
+union sctp_params {
+	void *v;
+	struct sctp_paramhdr *p;
+	struct sctp_cookie_preserve_param *life;
+	struct sctp_hostname_param *dns;
+	struct sctp_cookie_param *cookie;
+	struct sctp_supported_addrs_param *sat;
+	struct sctp_ipv4addr_param *v4;
+	struct sctp_ipv6addr_param *v6;
+	union sctp_addr_param *addr;
+	struct sctp_adaptation_ind_param *aind;
+	struct sctp_supported_ext_param *ext;
+	struct sctp_random_param *random;
+	struct sctp_chunks_param *chunks;
+	struct sctp_hmac_algo_param *hmac_algo;
+	struct sctp_addip_param *addip;
+};
+
+struct sctp_sndrcvinfo {
+	__u16 sinfo_stream;
+	__u16 sinfo_ssn;
+	__u16 sinfo_flags;
+	__u32 sinfo_ppid;
+	__u32 sinfo_context;
+	__u32 sinfo_timetolive;
+	__u32 sinfo_tsn;
+	__u32 sinfo_cumtsn;
+	sctp_assoc_t sinfo_assoc_id;
+};
+
+struct sctp_datahdr;
+
+struct sctp_inithdr;
+
+struct sctp_sackhdr;
+
+struct sctp_heartbeathdr;
+
+struct sctp_sender_hb_info;
+
+struct sctp_shutdownhdr;
+
+struct sctp_signed_cookie;
+
+struct sctp_ecnehdr;
+
+struct sctp_cwrhdr;
+
+struct sctp_errhdr;
+
+struct sctp_addiphdr;
+
+struct sctp_fwdtsn_hdr;
+
+struct sctp_authhdr;
+
+struct sctp_idatahdr;
+
+struct sctp_ifwdtsn_hdr;
+
+struct sctp_chunkhdr;
+
+struct sctphdr;
+
+struct sctp_datamsg;
+
+struct sctp_chunk {
+	struct list_head list;
+	refcount_t refcnt;
+	int sent_count;
+	union {
+		struct list_head transmitted_list;
+		struct list_head stream_list;
+	};
+	struct list_head frag_list;
+	struct sk_buff *skb;
+	union {
+		struct sk_buff *head_skb;
+		struct sctp_shared_key *shkey;
+	};
+	union sctp_params param_hdr;
+	union {
+		__u8 *v;
+		struct sctp_datahdr *data_hdr;
+		struct sctp_inithdr *init_hdr;
+		struct sctp_sackhdr *sack_hdr;
+		struct sctp_heartbeathdr *hb_hdr;
+		struct sctp_sender_hb_info *hbs_hdr;
+		struct sctp_shutdownhdr *shutdown_hdr;
+		struct sctp_signed_cookie *cookie_hdr;
+		struct sctp_ecnehdr *ecne_hdr;
+		struct sctp_cwrhdr *ecn_cwr_hdr;
+		struct sctp_errhdr *err_hdr;
+		struct sctp_addiphdr *addip_hdr;
+		struct sctp_fwdtsn_hdr *fwdtsn_hdr;
+		struct sctp_authhdr *auth_hdr;
+		struct sctp_idatahdr *idata_hdr;
+		struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
+	} subh;
+	__u8 *chunk_end;
+	struct sctp_chunkhdr *chunk_hdr;
+	struct sctphdr *sctp_hdr;
+	struct sctp_sndrcvinfo sinfo;
+	struct sctp_association *asoc;
+	struct sctp_ep_common *rcvr;
+	unsigned long sent_at;
+	union sctp_addr source;
+	union sctp_addr dest;
+	struct sctp_datamsg *msg;
+	struct sctp_transport *transport;
+	struct sk_buff *auth_chunk;
+	__u16 rtt_in_progress: 1;
+	__u16 has_tsn: 1;
+	__u16 has_ssn: 1;
+	__u16 singleton: 1;
+	__u16 end_of_packet: 1;
+	__u16 ecn_ce_done: 1;
+	__u16 pdiscard: 1;
+	__u16 tsn_gap_acked: 1;
+	__u16 data_accepted: 1;
+	__u16 auth: 1;
+	__u16 has_asconf: 1;
+	__u16 pmtu_probe: 1;
+	__u16 tsn_missing_report: 2;
+	__u16 fast_retransmit: 2;
+};
+
+struct sctp_shared_key {
+	struct list_head key_list;
+	struct sctp_auth_bytes *key;
+	refcount_t refcnt;
+	__u16 key_id;
+	__u8 deactivated;
+};
+
+struct sctp_auth_bytes {
+	refcount_t refcnt;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct sctp_paramhdr {
+	__be16 type;
+	__be16 length;
+};
+
+struct sctp_cookie_preserve_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 lifespan_increment;
+};
+
+struct sctp_hostname_param {
+	struct sctp_paramhdr param_hdr;
+	uint8_t hostname[0];
+};
+
+struct sctp_cookie_param {
+	struct sctp_paramhdr p;
+	__u8 body[0];
+};
+
+struct sctp_supported_addrs_param {
+	struct sctp_paramhdr param_hdr;
+	__be16 types[0];
+};
+
+struct sctp_ipv4addr_param {
+	struct sctp_paramhdr param_hdr;
+	struct in_addr addr;
+};
+
+struct sctp_ipv6addr_param {
+	struct sctp_paramhdr param_hdr;
+	struct in6_addr addr;
+};
+
+union sctp_addr_param {
+	struct sctp_paramhdr p;
+	struct sctp_ipv4addr_param v4;
+	struct sctp_ipv6addr_param v6;
+};
+
+struct sctp_adaptation_ind_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 adaptation_ind;
+};
+
+struct sctp_supported_ext_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 chunks[0];
+};
+
+struct sctp_random_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 random_val[0];
+};
+
+struct sctp_chunks_param {
+	struct sctp_paramhdr param_hdr;
+	__u8 chunks[0];
+};
+
+struct sctp_hmac_algo_param {
+	struct sctp_paramhdr param_hdr;
+	__be16 hmac_ids[0];
+};
+
+struct sctp_addip_param {
+	struct sctp_paramhdr param_hdr;
+	__be32 crr_id;
+};
+
+struct sctp_datahdr {
+	__be32 tsn;
+	__be16 stream;
+	__be16 ssn;
+	__u32 ppid;
+};
+
+struct sctp_inithdr {
+	__be32 init_tag;
+	__be32 a_rwnd;
+	__be16 num_outbound_streams;
+	__be16 num_inbound_streams;
+	__be32 initial_tsn;
+};
+
+struct sctp_sackhdr {
+	__be32 cum_tsn_ack;
+	__be32 a_rwnd;
+	__be16 num_gap_ack_blocks;
+	__be16 num_dup_tsns;
+};
+
+struct sctp_heartbeathdr {
+	struct sctp_paramhdr info;
+};
+
+struct sctp_sender_hb_info {
+	struct sctp_paramhdr param_hdr;
+	union sctp_addr daddr;
+	unsigned long sent_at;
+	__u64 hb_nonce;
+	__u32 probe_size;
+};
+
+struct sctp_shutdownhdr {
+	__be32 cum_tsn_ack;
+};
+
+struct sctp_signed_cookie {
+	__u8 signature[32];
+	__u32 __pad;
+	struct sctp_cookie c;
+} __attribute__((packed));
+
+struct sctp_ecnehdr {
+	__be32 lowest_tsn;
+};
+
+struct sctp_cwrhdr {
+	__be32 lowest_tsn;
+};
+
+struct sctp_errhdr {
+	__be16 cause;
+	__be16 length;
+};
+
+struct sctp_addiphdr {
+	__be32 serial;
+};
+
+struct sctp_fwdtsn_hdr {
+	__be32 new_cum_tsn;
+};
+
+struct sctp_authhdr {
+	__be16 shkey_id;
+	__be16 hmac_id;
+};
+
+struct sctp_idatahdr {
+	__be32 tsn;
+	__be16 stream;
+	__be16 reserved;
+	__be32 mid;
+	union {
+		__u32 ppid;
+		__be32 fsn;
+	};
+	__u8 payload[0];
+};
+
+struct sctp_ifwdtsn_hdr {
+	__be32 new_cum_tsn;
+};
+
+struct sctp_chunkhdr {
+	__u8 type;
+	__u8 flags;
+	__be16 length;
+};
+
+struct sctphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 vtag;
+	__le32 checksum;
+};
+
+struct sctp_datamsg {
+	struct list_head chunks;
+	refcount_t refcnt;
+	unsigned long expires_at;
+	int send_error;
+	u8 send_failed: 1;
+	u8 can_delay: 1;
+	u8 abandoned: 1;
+};
+
+struct sctp_packet {
+	__u16 source_port;
+	__u16 destination_port;
+	__u32 vtag;
+	struct list_head chunk_list;
+	size_t overhead;
+	size_t size;
+	size_t max_size;
+	struct sctp_transport *transport;
+	struct sctp_chunk *auth;
+	u8 has_cookie_echo: 1;
+	u8 has_sack: 1;
+	u8 has_auth: 1;
+	u8 has_data: 1;
+	u8 ipfragok: 1;
+};
+
+struct sctp_af;
+
+struct sctp_transport {
+	struct list_head transports;
+	struct rhlist_head node;
+	refcount_t refcnt;
+	__u32 rto_pending: 1;
+	__u32 hb_sent: 1;
+	__u32 pmtu_pending: 1;
+	__u32 dst_pending_confirm: 1;
+	__u32 sack_generation: 1;
+	u32 dst_cookie;
+	struct flowi fl;
+	union sctp_addr ipaddr;
+	struct sctp_af *af_specific;
+	struct sctp_association *asoc;
+	unsigned long rto;
+	__u32 rtt;
+	__u32 rttvar;
+	__u32 srtt;
+	__u32 cwnd;
+	__u32 ssthresh;
+	__u32 partial_bytes_acked;
+	__u32 flight_size;
+	__u32 burst_limited;
+	struct dst_entry *dst;
+	union sctp_addr saddr;
+	unsigned long hbinterval;
+	unsigned long probe_interval;
+	unsigned long sackdelay;
+	__u32 sackfreq;
+	atomic_t mtu_info;
+	ktime_t last_time_heard;
+	unsigned long last_time_sent;
+	unsigned long last_time_ecne_reduced;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u32 pathmtu;
+	__u32 param_flags;
+	int init_sent_count;
+	int state;
+	unsigned short error_count;
+	struct timer_list T3_rtx_timer;
+	struct timer_list hb_timer;
+	struct timer_list proto_unreach_timer;
+	struct timer_list reconf_timer;
+	struct timer_list probe_timer;
+	struct list_head transmitted;
+	struct sctp_packet packet;
+	struct list_head send_ready;
+	struct {
+		__u32 next_tsn_at_change;
+		char changeover_active;
+		char cycling_changeover;
+		char cacc_saw_newack;
+	} cacc;
+	struct {
+		__u16 pmtu;
+		__u16 probe_size;
+		__u16 probe_high;
+		__u8 probe_count;
+		__u8 state;
+	} pl;
+	__u64 hb_nonce;
+	struct callback_head rcu;
+};
+
+enum sctp_scope {
+	SCTP_SCOPE_GLOBAL = 0,
+	SCTP_SCOPE_PRIVATE = 1,
+	SCTP_SCOPE_LINK = 2,
+	SCTP_SCOPE_LOOPBACK = 3,
+	SCTP_SCOPE_UNUSABLE = 4,
+};
+
+struct sctp_sock;
+
+struct sctp_af {
+	int (*sctp_xmit)(struct sk_buff *, struct sctp_transport *);
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char __attribute__((btf_type_tag("user"))) *, int __attribute__((btf_type_tag("user"))) *);
+	void (*get_dst)(struct sctp_transport *, union sctp_addr *, struct flowi *, struct sock *);
+	void (*get_saddr)(struct sctp_sock *, struct sctp_transport *, struct flowi *);
+	void (*copy_addrlist)(struct list_head *, struct net_device *);
+	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *);
+	void (*addr_copy)(union sctp_addr *, union sctp_addr *);
+	void (*from_skb)(union sctp_addr *, struct sk_buff *, int);
+	void (*from_sk)(union sctp_addr *, struct sock *);
+	bool (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);
+	int (*to_addr_param)(const union sctp_addr *, union sctp_addr_param *);
+	int (*addr_valid)(union sctp_addr *, struct sctp_sock *, const struct sk_buff *);
+	enum sctp_scope (*scope)(union sctp_addr *);
+	void (*inaddr_any)(union sctp_addr *, __be16);
+	int (*is_any)(const union sctp_addr *);
+	int (*available)(union sctp_addr *, struct sctp_sock *);
+	int (*skb_iif)(const struct sk_buff *);
+	int (*skb_sdif)(const struct sk_buff *);
+	int (*is_ce)(const struct sk_buff *);
+	void (*seq_dump_addr)(struct seq_file *, union sctp_addr *);
+	void (*ecn_capable)(struct sock *);
+	__u16 net_header_len;
+	int sockaddr_len;
+	int (*ip_options_len)(struct sock *);
+	sa_family_t sa_family;
+	struct list_head list;
+};
+
+struct ip_options;
+
+struct inet_cork {
+	unsigned int flags;
+	__be32 addr;
+	struct ip_options *opt;
+	unsigned int fragsize;
+	int length;
+	struct dst_entry *dst;
+	u8 tx_flags;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+	u64 transmit_time;
+	u32 mark;
+};
+
+struct inet_cork_full {
+	struct inet_cork base;
+	struct flowi fl;
+};
+
+struct ipv6_pinfo;
+
+struct ip_options_rcu;
+
+struct ip_mc_socklist;
+
+struct inet_sock {
+	struct sock sk;
+	struct ipv6_pinfo *pinet6;
+	unsigned long inet_flags;
+	__be32 inet_saddr;
+	__s16 uc_ttl;
+	__be16 inet_sport;
+	struct ip_options_rcu __attribute__((btf_type_tag("rcu"))) *inet_opt;
+	atomic_t inet_id;
+	__u8 tos;
+	__u8 min_ttl;
+	__u8 mc_ttl;
+	__u8 pmtudisc;
+	__u8 rcv_tos;
+	__u8 convert_csum;
+	int uc_index;
+	int mc_index;
+	__be32 mc_addr;
+	struct {
+		__u16 lo;
+		__u16 hi;
+	} local_port_range;
+	struct ip_mc_socklist __attribute__((btf_type_tag("rcu"))) *mc_list;
+	struct inet_cork_full cork;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum sctp_socket_type {
+	SCTP_SOCKET_UDP = 0,
+	SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1,
+	SCTP_SOCKET_TCP = 2,
+};
+
+struct sctp_rtoinfo {
+	sctp_assoc_t srto_assoc_id;
+	__u32 srto_initial;
+	__u32 srto_max;
+	__u32 srto_min;
+};
+
+struct sctp_paddrparams {
+	sctp_assoc_t spp_assoc_id;
+	struct __kernel_sockaddr_storage spp_address;
+	__u32 spp_hbinterval;
+	__u16 spp_pathmaxrxt;
+	__u32 spp_pathmtu;
+	__u32 spp_sackdelay;
+	__u32 spp_flags;
+	__u32 spp_ipv6_flowlabel;
+	__u8 spp_dscp;
+	int: 0;
+} __attribute__((packed));
+
+struct sctp_assocparams {
+	sctp_assoc_t sasoc_assoc_id;
+	__u16 sasoc_asocmaxrxt;
+	__u16 sasoc_number_peer_destinations;
+	__u32 sasoc_peer_rwnd;
+	__u32 sasoc_local_rwnd;
+	__u32 sasoc_cookie_life;
+};
+
+struct sctp_initmsg {
+	__u16 sinit_num_ostreams;
+	__u16 sinit_max_instreams;
+	__u16 sinit_max_attempts;
+	__u16 sinit_max_init_timeo;
+};
+
+struct sctp_pf;
+
+struct sctp_bind_bucket;
+
+struct sctp_sock {
+	struct inet_sock inet;
+	enum sctp_socket_type type;
+	struct sctp_pf *pf;
+	struct crypto_shash *hmac;
+	char *sctp_hmac_alg;
+	struct sctp_endpoint *ep;
+	struct sctp_bind_bucket *bind_hash;
+	__u16 default_stream;
+	__u32 default_ppid;
+	__u16 default_flags;
+	__u32 default_context;
+	__u32 default_timetolive;
+	__u32 default_rcv_context;
+	int max_burst;
+	__u32 hbinterval;
+	__u32 probe_interval;
+	__be16 udp_port;
+	__be16 encap_port;
+	__u16 pathmaxrxt;
+	__u32 flowlabel;
+	__u8 dscp;
+	__u16 pf_retrans;
+	__u16 ps_retrans;
+	__u32 pathmtu;
+	__u32 sackdelay;
+	__u32 sackfreq;
+	__u32 param_flags;
+	__u32 default_ss;
+	struct sctp_rtoinfo rtoinfo;
+	struct sctp_paddrparams paddrparam;
+	struct sctp_assocparams assocparams;
+	__u16 subscribe;
+	struct sctp_initmsg initmsg;
+	int user_frag;
+	__u32 autoclose;
+	__u32 adaptation_ind;
+	__u32 pd_point;
+	__u16 nodelay: 1;
+	__u16 pf_expose: 2;
+	__u16 reuse: 1;
+	__u16 disable_fragments: 1;
+	__u16 v4mapped: 1;
+	__u16 frag_interleave: 1;
+	__u16 recvrcvinfo: 1;
+	__u16 recvnxtinfo: 1;
+	__u16 data_ready_signalled: 1;
+	atomic_t pd_mode;
+	struct sk_buff_head pd_lobby;
+	struct list_head auto_asconf_list;
+	int do_auto_asconf;
+};
+
+struct in6_pktinfo {
+	struct in6_addr ipi6_addr;
+	int ipi6_ifindex;
+};
+
+struct ipv6_txoptions;
+
+struct inet6_cork {
+	struct ipv6_txoptions *opt;
+	u8 hop_limit;
+	u8 tclass;
+};
+
+struct ipv6_mc_socklist;
+
+struct ipv6_ac_socklist;
+
+struct ipv6_fl_socklist;
+
+struct ipv6_pinfo {
+	struct in6_addr saddr;
+	struct in6_pktinfo sticky_pktinfo;
+	const struct in6_addr *daddr_cache;
+	__be32 flow_label;
+	__u32 frag_size;
+	__u16 __unused_1: 7;
+	__s16 hop_limit: 9;
+	__u16 mc_loop: 1;
+	__u16 __unused_2: 6;
+	__s16 mcast_hops: 9;
+	int ucast_oif;
+	int mcast_oif;
+	union {
+		struct {
+			__u16 srcrt: 1;
+			__u16 osrcrt: 1;
+			__u16 rxinfo: 1;
+			__u16 rxoinfo: 1;
+			__u16 rxhlim: 1;
+			__u16 rxohlim: 1;
+			__u16 hopopts: 1;
+			__u16 ohopopts: 1;
+			__u16 dstopts: 1;
+			__u16 odstopts: 1;
+			__u16 rxflow: 1;
+			__u16 rxtclass: 1;
+			__u16 rxpmtu: 1;
+			__u16 rxorigdstaddr: 1;
+			__u16 recvfragsize: 1;
+		} bits;
+		__u16 all;
+	} rxopt;
+	__u16 recverr: 1;
+	__u16 sndflow: 1;
+	__u16 repflow: 1;
+	__u16 pmtudisc: 3;
+	__u16 padding: 1;
+	__u16 srcprefs: 3;
+	__u16 dontfrag: 1;
+	__u16 autoflowlabel: 1;
+	__u16 autoflowlabel_set: 1;
+	__u16 mc_all: 1;
+	__u16 recverr_rfc4884: 1;
+	__u16 rtalert_isolate: 1;
+	__u8 min_hopcount;
+	__u8 tclass;
+	__be32 rcv_flowinfo;
+	__u32 dst_cookie;
+	struct ipv6_mc_socklist __attribute__((btf_type_tag("rcu"))) *ipv6_mc_list;
+	struct ipv6_ac_socklist *ipv6_ac_list;
+	struct ipv6_fl_socklist __attribute__((btf_type_tag("rcu"))) *ipv6_fl_list;
+	struct ipv6_txoptions __attribute__((btf_type_tag("rcu"))) *opt;
+	struct sk_buff *pktoptions;
+	struct sk_buff *rxpmtu;
+	struct inet6_cork cork;
+};
+
+struct ip6_sf_socklist;
+
+struct ipv6_mc_socklist {
+	struct in6_addr addr;
+	int ifindex;
+	unsigned int sfmode;
+	struct ipv6_mc_socklist __attribute__((btf_type_tag("rcu"))) *next;
+	struct ip6_sf_socklist __attribute__((btf_type_tag("rcu"))) *sflist;
+	struct callback_head rcu;
+};
+
+struct ip6_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	struct in6_addr sl_addr[0];
+};
+
+struct ipv6_ac_socklist {
+	struct in6_addr acl_addr;
+	int acl_ifindex;
+	struct ipv6_ac_socklist *acl_next;
+};
+
+struct ip6_flowlabel;
+
+struct ipv6_fl_socklist {
+	struct ipv6_fl_socklist __attribute__((btf_type_tag("rcu"))) *next;
+	struct ip6_flowlabel *fl;
+	struct callback_head rcu;
+};
+
+struct ip6_flowlabel {
+	struct ip6_flowlabel __attribute__((btf_type_tag("rcu"))) *next;
+	__be32 label;
+	atomic_t users;
+	struct in6_addr dst;
+	struct ipv6_txoptions *opt;
+	unsigned long linger;
+	struct callback_head rcu;
+	u8 share;
+	union {
+		struct pid *pid;
+		kuid_t uid;
+	} owner;
+	unsigned long lastuse;
+	unsigned long expires;
+	struct net *fl_net;
+};
+
+struct ipv6_opt_hdr;
+
+struct ipv6_rt_hdr;
+
+struct ipv6_txoptions {
+	refcount_t refcnt;
+	int tot_len;
+	__u16 opt_flen;
+	__u16 opt_nflen;
+	struct ipv6_opt_hdr *hopopt;
+	struct ipv6_opt_hdr *dst0opt;
+	struct ipv6_rt_hdr *srcrt;
+	struct ipv6_opt_hdr *dst1opt;
+	struct callback_head rcu;
+};
+
+struct ipv6_opt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+};
+
+struct ipv6_rt_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+};
+
+struct ip_options {
+	__be32 faddr;
+	__be32 nexthop;
+	unsigned char optlen;
+	unsigned char srr;
+	unsigned char rr;
+	unsigned char ts;
+	unsigned char is_strictroute: 1;
+	unsigned char srr_is_hit: 1;
+	unsigned char is_changed: 1;
+	unsigned char rr_needaddr: 1;
+	unsigned char ts_needtime: 1;
+	unsigned char ts_needaddr: 1;
+	unsigned char router_alert;
+	unsigned char cipso;
+	unsigned char __pad2;
+	unsigned char __data[0];
+};
+
+struct ip_options_rcu {
+	struct callback_head rcu;
+	struct ip_options opt;
+};
+
+struct ip_mreqn {
+	struct in_addr imr_multiaddr;
+	struct in_addr imr_address;
+	int imr_ifindex;
+};
+
+struct ip_sf_socklist;
+
+struct ip_mc_socklist {
+	struct ip_mc_socklist __attribute__((btf_type_tag("rcu"))) *next_rcu;
+	struct ip_mreqn multi;
+	unsigned int sfmode;
+	struct ip_sf_socklist __attribute__((btf_type_tag("rcu"))) *sflist;
+	struct callback_head rcu;
+};
+
+struct sctp_ulpevent;
+
+struct sctp_pf {
+	void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
+	void (*skb_msgname)(struct sk_buff *, char *, int *);
+	int (*af_supported)(sa_family_t, struct sctp_sock *);
+	int (*cmp_addr)(const union sctp_addr *, const union sctp_addr *, struct sctp_sock *);
+	int (*bind_verify)(struct sctp_sock *, union sctp_addr *);
+	int (*send_verify)(struct sctp_sock *, union sctp_addr *);
+	int (*supported_addrs)(const struct sctp_sock *, __be16 *);
+	struct sock * (*create_accept_sk)(struct sock *, struct sctp_association *, bool);
+	int (*addr_to_user)(struct sctp_sock *, union sctp_addr *);
+	void (*to_sk_saddr)(union sctp_addr *, struct sock *);
+	void (*to_sk_daddr)(union sctp_addr *, struct sock *);
+	void (*copy_ip_options)(struct sock *, struct sock *);
+	struct sctp_af *af;
+};
+
+struct sctp_ulpevent {
+	struct sctp_association *asoc;
+	struct sctp_chunk *chunk;
+	unsigned int rmem_len;
+	union {
+		__u32 mid;
+		__u16 ssn;
+	};
+	union {
+		__u32 ppid;
+		__u32 fsn;
+	};
+	__u32 tsn;
+	__u32 cumtsn;
+	__u16 stream;
+	__u16 flags;
+	__u16 msg_flags;
+} __attribute__((packed));
+
+struct sctp_endpoint {
+	struct sctp_ep_common base;
+	struct hlist_node node;
+	int hashent;
+	struct list_head asocs;
+	__u8 secret_key[32];
+	__u8 *digest;
+	__u32 sndbuf_policy;
+	__u32 rcvbuf_policy;
+	struct crypto_shash **auth_hmacs;
+	struct sctp_hmac_algo_param *auth_hmacs_list;
+	struct sctp_chunks_param *auth_chunk_list;
+	struct list_head endpoint_shared_keys;
+	__u16 active_key_id;
+	__u8 ecn_enable: 1;
+	__u8 auth_enable: 1;
+	__u8 intl_enable: 1;
+	__u8 prsctp_enable: 1;
+	__u8 asconf_enable: 1;
+	__u8 reconf_enable: 1;
+	__u8 strreset_enable;
+	struct callback_head rcu;
+};
+
+struct sctp_bind_bucket {
+	unsigned short port;
+	signed char fastreuse;
+	signed char fastreuseport;
+	kuid_t fastuid;
+	struct hlist_node node;
+	struct hlist_head owner;
+	struct net *net;
+};
+
+struct sctp_stream_priorities;
+
+struct sctp_stream_out_ext {
+	__u64 abandoned_unsent[3];
+	__u64 abandoned_sent[3];
+	struct list_head outq;
+	union {
+		struct {
+			struct list_head prio_list;
+			struct sctp_stream_priorities *prio_head;
+		};
+		struct {
+			struct list_head rr_list;
+		};
+		struct {
+			struct list_head fc_list;
+			__u32 fc_length;
+			__u16 fc_weight;
+		};
+	};
+};
+
+struct sctp_stream_priorities {
+	struct list_head prio_sched;
+	struct list_head active;
+	struct sctp_stream_out_ext *next;
+	__u16 prio;
+	__u16 users;
+};
+
+struct sctp_stream_interleave {
+	__u16 data_chunk_len;
+	__u16 ftsn_chunk_len;
+	struct sctp_chunk * (*make_datafrag)(const struct sctp_association *, const struct sctp_sndrcvinfo *, int, __u8, gfp_t);
+	void (*assign_number)(struct sctp_chunk *);
+	bool (*validate_data)(struct sctp_chunk *);
+	int (*ulpevent_data)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
+	int (*enqueue_event)(struct sctp_ulpq *, struct sctp_ulpevent *);
+	void (*renege_events)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);
+	void (*start_pd)(struct sctp_ulpq *, gfp_t);
+	void (*abort_pd)(struct sctp_ulpq *, gfp_t);
+	void (*generate_ftsn)(struct sctp_outq *, __u32);
+	bool (*validate_ftsn)(struct sctp_chunk *);
+	void (*report_ftsn)(struct sctp_ulpq *, __u32);
+	void (*handle_ftsn)(struct sctp_ulpq *, struct sctp_chunk *);
+};
+
+enum nf_hook_ops_type {
+	NF_HOOK_OP_UNDEFINED = 0,
+	NF_HOOK_OP_NF_TABLES = 1,
+	NF_HOOK_OP_BPF = 2,
+};
+
+struct nf_hook_ops {
+	nf_hookfn *hook;
+	struct net_device *dev;
+	void *priv;
+	u8 pf;
+	enum nf_hook_ops_type hook_ops_type: 8;
+	unsigned int hooknum;
+	int priority;
+};
+
+enum label_initialized {
+	LABEL_INVALID = 0,
+	LABEL_INITIALIZED = 1,
+	LABEL_PENDING = 2,
+};
+
+enum {
+	POLICYDB_CAP_NETPEER = 0,
+	POLICYDB_CAP_OPENPERM = 1,
+	POLICYDB_CAP_EXTSOCKCLASS = 2,
+	POLICYDB_CAP_ALWAYSNETWORK = 3,
+	POLICYDB_CAP_CGROUPSECLABEL = 4,
+	POLICYDB_CAP_NNP_NOSUID_TRANSITION = 5,
+	POLICYDB_CAP_GENFS_SECLABEL_SYMLINKS = 6,
+	POLICYDB_CAP_IOCTL_SKIP_CLOEXEC = 7,
+	__POLICYDB_CAP_MAX = 8,
+};
+
+struct sk_security_struct {
+	u32 sid;
+	u32 peer_sid;
+	u16 sclass;
+	enum {
+		SCTP_ASSOC_UNSET = 0,
+		SCTP_ASSOC_SET = 1,
+	} sctp_assoc_state;
+};
+
+enum {
+	Opt_error = -1,
+	Opt_context = 0,
+	Opt_defcontext = 1,
+	Opt_fscontext = 2,
+	Opt_rootcontext = 3,
+	Opt_seclabel = 4,
+};
+
+enum {
+	TCP_ESTABLISHED = 1,
+	TCP_SYN_SENT = 2,
+	TCP_SYN_RECV = 3,
+	TCP_FIN_WAIT1 = 4,
+	TCP_FIN_WAIT2 = 5,
+	TCP_TIME_WAIT = 6,
+	TCP_CLOSE = 7,
+	TCP_CLOSE_WAIT = 8,
+	TCP_LAST_ACK = 9,
+	TCP_LISTEN = 10,
+	TCP_CLOSING = 11,
+	TCP_NEW_SYN_RECV = 12,
+	TCP_MAX_STATES = 13,
+};
+
+struct inode_security_struct {
+	struct inode *inode;
+	struct list_head list;
+	u32 task_sid;
+	u32 sid;
+	u16 sclass;
+	unsigned char initialized;
+	spinlock_t lock;
+};
+
+struct tty_file_private {
+	struct tty_struct *tty;
+	struct file *file;
+	struct list_head list;
+};
+
+struct socket_alloc {
+	struct socket socket;
+	struct inode vfs_inode;
+};
+
+struct inet_skb_parm {
+	int iif;
+	struct ip_options opt;
+	u16 flags;
+	u16 frag_max_size;
+};
+
+struct inet6_skb_parm {
+	int iif;
+	__be16 ra;
+	__u16 dst0;
+	__u16 srcrt;
+	__u16 dst1;
+	__u16 lastopt;
+	__u16 nhoff;
+	__u16 flags;
+	__u16 dsthao;
+	__u16 frag_max_size;
+	__u16 srhoff;
+};
+
+struct task_security_struct {
+	u32 osid;
+	u32 sid;
+	u32 exec_sid;
+	u32 create_sid;
+	u32 keycreate_sid;
+	u32 sockcreate_sid;
+};
+
+struct superblock_security_struct {
+	u32 sid;
+	u32 def_sid;
+	u32 mntpoint_sid;
+	unsigned short behavior;
+	unsigned short flags;
+	struct mutex lock;
+	struct list_head isec_head;
+	spinlock_t isec_lock;
+};
+
+struct file_security_struct {
+	u32 sid;
+	u32 fown_sid;
+	u32 isid;
+	u32 pseqno;
+};
+
+struct bpf_security_struct {
+	u32 sid;
+};
+
+struct ipc_security_struct {
+	u16 sclass;
+	u32 sid;
+};
+
+struct msg_security_struct {
+	u32 sid;
+};
+
+typedef __u16 __sum16;
+
+struct iphdr {
+	__u8 ihl: 4;
+	__u8 version: 4;
+	__u8 tos;
+	__be16 tot_len;
+	__be16 id;
+	__be16 frag_off;
+	__u8 ttl;
+	__u8 protocol;
+	__sum16 check;
+	union {
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+		};
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+		} addrs;
+	};
+};
+
+struct tcphdr {
+	__be16 source;
+	__be16 dest;
+	__be32 seq;
+	__be32 ack_seq;
+	__u16 res1: 4;
+	__u16 doff: 4;
+	__u16 fin: 1;
+	__u16 syn: 1;
+	__u16 rst: 1;
+	__u16 psh: 1;
+	__u16 ack: 1;
+	__u16 urg: 1;
+	__u16 ece: 1;
+	__u16 cwr: 1;
+	__be16 window;
+	__sum16 check;
+	__be16 urg_ptr;
+};
+
+struct dccp_hdr {
+	__be16 dccph_sport;
+	__be16 dccph_dport;
+	__u8 dccph_doff;
+	__u8 dccph_cscov: 4;
+	__u8 dccph_ccval: 4;
+	__sum16 dccph_checksum;
+	__u8 dccph_x: 1;
+	__u8 dccph_type: 4;
+	__u8 dccph_reserved: 3;
+	__u8 dccph_seq2;
+	__be16 dccph_seq;
+};
+
+struct udphdr {
+	__be16 source;
+	__be16 dest;
+	__be16 len;
+	__sum16 check;
+};
+
+struct ipv6hdr {
+	__u8 priority: 4;
+	__u8 version: 4;
+	__u8 flow_lbl[3];
+	__be16 payload_len;
+	__u8 nexthdr;
+	__u8 hop_limit;
+	union {
+		struct {
+			struct in6_addr saddr;
+			struct in6_addr daddr;
+		};
+		struct {
+			struct in6_addr saddr;
+			struct in6_addr daddr;
+		} addrs;
+	};
+};
+
+struct selinux_mnt_opts {
+	u32 fscontext_sid;
+	u32 context_sid;
+	u32 rootcontext_sid;
+	u32 defcontext_sid;
+};
+
+struct tun_security_struct {
+	u32 sid;
+};
+
+struct key_security_struct {
+	u32 sid;
+};
+
+struct perf_event_security_struct {
+	u32 sid;
+};
+
+enum sel_inos {
+	SEL_ROOT_INO = 2,
+	SEL_LOAD = 3,
+	SEL_ENFORCE = 4,
+	SEL_CONTEXT = 5,
+	SEL_ACCESS = 6,
+	SEL_CREATE = 7,
+	SEL_RELABEL = 8,
+	SEL_USER = 9,
+	SEL_POLICYVERS = 10,
+	SEL_COMMIT_BOOLS = 11,
+	SEL_MLS = 12,
+	SEL_DISABLE = 13,
+	SEL_MEMBER = 14,
+	SEL_CHECKREQPROT = 15,
+	SEL_COMPAT_NET = 16,
+	SEL_REJECT_UNKNOWN = 17,
+	SEL_DENY_UNKNOWN = 18,
+	SEL_STATUS = 19,
+	SEL_POLICY = 20,
+	SEL_VALIDATE_TRANS = 21,
+	SEL_INO_NEXT = 22,
+};
+
+struct selinux_fs_info {
+	struct dentry *bool_dir;
+	unsigned int bool_num;
+	char **bool_pending_names;
+	int *bool_pending_values;
+	struct dentry *class_dir;
+	unsigned long last_class_ino;
+	bool policy_opened;
+	struct dentry *policycap_dir;
+	unsigned long last_ino;
+	struct super_block *sb;
+};
+
+struct selinux_policy_convert_data;
+
+struct selinux_load_state {
+	struct selinux_policy *policy;
+	struct selinux_policy_convert_data *convert_data;
+};
+
+struct policy_load_memory {
+	size_t len;
+	void *data;
+};
+
+enum {
+	SELNL_MSG_SETENFORCE = 16,
+	SELNL_MSG_POLICYLOAD = 17,
+	SELNL_MSG_MAX = 18,
+};
+
+enum selinux_nlgroups {
+	SELNLGRP_NONE = 0,
+	SELNLGRP_AVC = 1,
+	__SELNLGRP_MAX = 2,
+};
+
+struct selnl_msg_setenforce {
+	__s32 val;
+};
+
+struct selnl_msg_policyload {
+	__u32 seqno;
+};
+
+struct nlmsg_perm {
+	u16 nlmsg_type;
+	u32 perm;
+};
+
+enum {
+	RTM_BASE = 16,
+	RTM_NEWLINK = 16,
+	RTM_DELLINK = 17,
+	RTM_GETLINK = 18,
+	RTM_SETLINK = 19,
+	RTM_NEWADDR = 20,
+	RTM_DELADDR = 21,
+	RTM_GETADDR = 22,
+	RTM_NEWROUTE = 24,
+	RTM_DELROUTE = 25,
+	RTM_GETROUTE = 26,
+	RTM_NEWNEIGH = 28,
+	RTM_DELNEIGH = 29,
+	RTM_GETNEIGH = 30,
+	RTM_NEWRULE = 32,
+	RTM_DELRULE = 33,
+	RTM_GETRULE = 34,
+	RTM_NEWQDISC = 36,
+	RTM_DELQDISC = 37,
+	RTM_GETQDISC = 38,
+	RTM_NEWTCLASS = 40,
+	RTM_DELTCLASS = 41,
+	RTM_GETTCLASS = 42,
+	RTM_NEWTFILTER = 44,
+	RTM_DELTFILTER = 45,
+	RTM_GETTFILTER = 46,
+	RTM_NEWACTION = 48,
+	RTM_DELACTION = 49,
+	RTM_GETACTION = 50,
+	RTM_NEWPREFIX = 52,
+	RTM_GETMULTICAST = 58,
+	RTM_GETANYCAST = 62,
+	RTM_NEWNEIGHTBL = 64,
+	RTM_GETNEIGHTBL = 66,
+	RTM_SETNEIGHTBL = 67,
+	RTM_NEWNDUSEROPT = 68,
+	RTM_NEWADDRLABEL = 72,
+	RTM_DELADDRLABEL = 73,
+	RTM_GETADDRLABEL = 74,
+	RTM_GETDCB = 78,
+	RTM_SETDCB = 79,
+	RTM_NEWNETCONF = 80,
+	RTM_DELNETCONF = 81,
+	RTM_GETNETCONF = 82,
+	RTM_NEWMDB = 84,
+	RTM_DELMDB = 85,
+	RTM_GETMDB = 86,
+	RTM_NEWNSID = 88,
+	RTM_DELNSID = 89,
+	RTM_GETNSID = 90,
+	RTM_NEWSTATS = 92,
+	RTM_GETSTATS = 94,
+	RTM_SETSTATS = 95,
+	RTM_NEWCACHEREPORT = 96,
+	RTM_NEWCHAIN = 100,
+	RTM_DELCHAIN = 101,
+	RTM_GETCHAIN = 102,
+	RTM_NEWNEXTHOP = 104,
+	RTM_DELNEXTHOP = 105,
+	RTM_GETNEXTHOP = 106,
+	RTM_NEWLINKPROP = 108,
+	RTM_DELLINKPROP = 109,
+	RTM_GETLINKPROP = 110,
+	RTM_NEWVLAN = 112,
+	RTM_DELVLAN = 113,
+	RTM_GETVLAN = 114,
+	RTM_NEWNEXTHOPBUCKET = 116,
+	RTM_DELNEXTHOPBUCKET = 117,
+	RTM_GETNEXTHOPBUCKET = 118,
+	RTM_NEWTUNNEL = 120,
+	RTM_DELTUNNEL = 121,
+	RTM_GETTUNNEL = 122,
+	__RTM_MAX = 123,
+};
+
+struct netif_security_struct {
+	struct net *ns;
+	int ifindex;
+	u32 sid;
+};
+
+struct sel_netif {
+	struct list_head list;
+	struct netif_security_struct nsec;
+	struct callback_head callback_head;
+};
+
+struct sel_netnode_bkt {
+	unsigned int size;
+	struct list_head list;
+};
+
+struct netnode_security_struct {
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} addr;
+	u32 sid;
+	u16 family;
+};
+
+struct sel_netnode {
+	struct netnode_security_struct nsec;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct sel_netport_bkt {
+	int size;
+	struct list_head list;
+};
+
+struct netport_security_struct {
+	u32 sid;
+	u16 port;
+	u8 protocol;
+};
+
+struct sel_netport {
+	struct netport_security_struct psec;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct selinux_kernel_status {
+	u32 version;
+	u32 sequence;
+	u32 enforcing;
+	u32 policyload;
+	u32 deny_unknown;
+};
+
+struct ebitmap_node {
+	struct ebitmap_node *next;
+	unsigned long maps[6];
+	u32 startbit;
+};
+
+struct policy_file {
+	char *data;
+	size_t len;
+};
+
+struct hashtab_node {
+	void *key;
+	void *datum;
+	struct hashtab_node *next;
+};
+
+struct hashtab_key_params {
+	u32 (*hash)(const void *);
+	int (*cmp)(const void *, const void *);
+};
+
+struct mls_level {
+	u32 sens;
+	struct ebitmap cat;
+};
+
+struct mls_range {
+	struct mls_level level[2];
+};
+
+struct context {
+	u32 user;
+	u32 role;
+	u32 type;
+	u32 len;
+	struct mls_range range;
+	char *str;
+};
+
+struct sidtab_str_cache;
+
+struct sidtab_entry {
+	u32 sid;
+	u32 hash;
+	struct context context;
+	struct sidtab_str_cache __attribute__((btf_type_tag("rcu"))) *cache;
+	struct hlist_node list;
+};
+
+struct sidtab_str_cache {
+	struct callback_head rcu_member;
+	struct list_head lru_member;
+	struct sidtab_entry *parent;
+	u32 len;
+	char str[0];
+};
+
+struct sidtab_node_inner;
+
+struct sidtab_node_leaf;
+
+union sidtab_entry_inner {
+	struct sidtab_node_inner *ptr_inner;
+	struct sidtab_node_leaf *ptr_leaf;
+};
+
+struct sidtab_isid_entry {
+	int set;
+	struct sidtab_entry entry;
+};
+
+struct sidtab_convert_params;
+
+struct sidtab {
+	union sidtab_entry_inner roots[4];
+	u32 count;
+	struct sidtab_convert_params *convert;
+	bool frozen;
+	spinlock_t lock;
+	u32 cache_free_slots;
+	struct list_head cache_lru_list;
+	spinlock_t cache_lock;
+	struct sidtab_isid_entry isids[27];
+	struct hlist_head context_to_sid[512];
+};
+
+struct sidtab_node_inner {
+	union sidtab_entry_inner entries[512];
+};
+
+struct sidtab_node_leaf {
+	struct sidtab_entry entries[39];
+};
+
+struct convert_context_args;
+
+struct sidtab_convert_params {
+	struct convert_context_args *args;
+	struct sidtab *target;
+};
+
+struct convert_context_args {
+	struct policydb *oldp;
+	struct policydb *newp;
+};
+
+struct common_datum;
+
+struct constraint_node;
+
+struct class_datum {
+	u32 value;
+	char *comkey;
+	struct common_datum *comdatum;
+	struct symtab permissions;
+	struct constraint_node *constraints;
+	struct constraint_node *validatetrans;
+	char default_user;
+	char default_role;
+	char default_type;
+	char default_range;
+};
+
+struct common_datum {
+	u32 value;
+	struct symtab permissions;
+};
+
+struct constraint_expr;
+
+struct constraint_node {
+	u32 permissions;
+	struct constraint_expr *expr;
+	struct constraint_node *next;
+};
+
+struct type_set;
+
+struct constraint_expr {
+	u32 expr_type;
+	u32 attr;
+	u32 op;
+	struct ebitmap names;
+	struct type_set *type_names;
+	struct constraint_expr *next;
+};
+
+struct type_set {
+	struct ebitmap types;
+	struct ebitmap negset;
+	u32 flags;
+};
+
+struct role_datum {
+	u32 value;
+	u32 bounds;
+	struct ebitmap dominates;
+	struct ebitmap types;
+};
+
+struct user_datum {
+	u32 value;
+	u32 bounds;
+	struct ebitmap roles;
+	struct mls_range range;
+	struct mls_level dfltlevel;
+};
+
+struct type_datum {
+	u32 value;
+	u32 bounds;
+	unsigned char primary;
+	unsigned char attribute;
+};
+
+struct avtab_key {
+	u16 source_type;
+	u16 target_type;
+	u16 target_class;
+	u16 specified;
+};
+
+struct avtab_extended_perms;
+
+struct avtab_datum {
+	union {
+		u32 data;
+		struct avtab_extended_perms *xperms;
+	} u;
+};
+
+struct avtab_node {
+	struct avtab_key key;
+	struct avtab_datum datum;
+	struct avtab_node *next;
+};
+
+struct avtab_extended_perms {
+	u8 specified;
+	u8 driver;
+	struct extended_perms_data perms;
+};
+
+struct cond_bool_datum {
+	__u32 value;
+	int state;
+};
+
+struct role_allow {
+	u32 role;
+	u32 new_role;
+	struct role_allow *next;
+};
+
+struct ocontext {
+	union {
+		char *name;
+		struct {
+			u8 protocol;
+			u16 low_port;
+			u16 high_port;
+		} port;
+		struct {
+			u32 addr;
+			u32 mask;
+		} node;
+		struct {
+			u32 addr[4];
+			u32 mask[4];
+		} node6;
+		struct {
+			u64 subnet_prefix;
+			u16 low_pkey;
+			u16 high_pkey;
+		} ibpkey;
+		struct {
+			char *dev_name;
+			u8 port;
+		} ibendport;
+	} u;
+	union {
+		u32 sclass;
+		u32 behavior;
+	} v;
+	struct context context[2];
+	u32 sid[2];
+	struct ocontext *next;
+};
+
+struct genfs {
+	char *fstype;
+	struct ocontext *head;
+	struct genfs *next;
+};
+
+struct policydb_compat_info {
+	unsigned int version;
+	unsigned int sym_num;
+	unsigned int ocon_num;
+};
+
+struct cond_expr_node;
+
+struct cond_expr {
+	struct cond_expr_node *nodes;
+	u32 len;
+};
+
+struct cond_av_list {
+	struct avtab_node **nodes;
+	u32 len;
+};
+
+struct cond_node {
+	int cur_state;
+	struct cond_expr expr;
+	struct cond_av_list true_list;
+	struct cond_av_list false_list;
+};
+
+struct cond_expr_node {
+	u32 expr_type;
+	u32 boolean;
+};
+
+struct filename_trans_key {
+	u32 ttype;
+	u16 tclass;
+	const char *name;
+};
+
+struct range_trans {
+	u32 source_type;
+	u32 target_type;
+	u32 target_class;
+};
+
+struct role_trans_key {
+	u32 role;
+	u32 type;
+	u32 tclass;
+};
+
+struct filename_trans_datum {
+	struct ebitmap stypes;
+	u32 otype;
+	struct filename_trans_datum *next;
+};
+
+struct level_datum {
+	struct mls_level *level;
+	unsigned char isalias;
+};
+
+struct role_trans_datum {
+	u32 new_role;
+};
+
+struct perm_datum {
+	u32 value;
+};
+
+struct policy_data {
+	struct policydb *p;
+	void *fp;
+};
+
+struct cat_datum {
+	u32 value;
+	unsigned char isalias;
+};
+
+struct selinux_mapping {
+	u16 value;
+	u16 num_perms;
+	u32 perms[32];
+};
+
+struct selinux_audit_rule {
+	u32 au_seqno;
+	struct context au_ctxt;
+};
+
+struct selinux_policy_convert_data {
+	struct convert_context_args args;
+	struct sidtab_convert_params sidtab_params;
+};
+
+struct cond_insertf_data {
+	struct policydb *p;
+	struct avtab_node **dst;
+	struct cond_av_list *other;
+};
+
+struct scm_stat {
+	atomic_t nr_fds;
+};
+
+struct unix_address;
+
+struct unix_sock {
+	struct sock sk;
+	struct unix_address *addr;
+	struct path path;
+	struct mutex iolock;
+	struct mutex bindlock;
+	struct sock *peer;
+	struct list_head link;
+	unsigned long inflight;
+	spinlock_t lock;
+	unsigned long gc_flags;
+	struct socket_wq peer_wq;
+	wait_queue_entry_t peer_wake;
+	struct scm_stat scm_stat;
+	struct sk_buff *oob_skb;
+	long: 64;
+};
+
+struct sockaddr_un {
+	__kernel_sa_family_t sun_family;
+	char sun_path[108];
+};
+
+struct unix_address {
+	refcount_t refcnt;
+	int len;
+	struct sockaddr_un name[0];
+};
+
+enum integrity_status {
+	INTEGRITY_PASS = 0,
+	INTEGRITY_PASS_IMMUTABLE = 1,
+	INTEGRITY_FAIL = 2,
+	INTEGRITY_FAIL_IMMUTABLE = 3,
+	INTEGRITY_NOLABEL = 4,
+	INTEGRITY_NOXATTRS = 5,
+	INTEGRITY_UNKNOWN = 6,
+};
+
+struct ima_digest_data;
+
+struct integrity_iint_cache {
+	struct rb_node rb_node;
+	struct mutex mutex;
+	struct inode *inode;
+	u64 version;
+	unsigned long flags;
+	unsigned long measured_pcrs;
+	unsigned long atomic_flags;
+	unsigned long real_ino;
+	dev_t real_dev;
+	enum integrity_status ima_file_status: 4;
+	enum integrity_status ima_mmap_status: 4;
+	enum integrity_status ima_bprm_status: 4;
+	enum integrity_status ima_read_status: 4;
+	enum integrity_status ima_creds_status: 4;
+	enum integrity_status evm_status: 4;
+	struct ima_digest_data *ima_hash;
+};
+
+struct ima_digest_data {
+	u8 algo;
+	u8 length;
+	union {
+		struct {
+			u8 unused;
+			u8 type;
+		} sha1;
+		struct {
+			u8 type;
+			u8 algo;
+		} ng;
+		u8 data[2];
+	} xattr;
+	u8 digest[0];
+};
+
+enum {
+	CRYPTO_MSG_ALG_REQUEST = 0,
+	CRYPTO_MSG_ALG_REGISTER = 1,
+	CRYPTO_MSG_ALG_LOADED = 2,
+};
+
+struct crypto_larval {
+	struct crypto_alg alg;
+	struct crypto_alg *adult;
+	struct completion completion;
+	u32 mask;
+	bool test_started;
+};
+
+struct crypto_cipher {
+	struct crypto_tfm base;
+};
+
+struct crypto_comp {
+	struct crypto_tfm base;
+};
+
+struct crypto_queue {
+	struct list_head list;
+	struct list_head *backlog;
+	unsigned int qlen;
+	unsigned int max_qlen;
+};
+
+struct crypto_engine {
+	char name[30];
+	bool idling;
+	bool busy;
+	bool running;
+	bool retry_support;
+	struct list_head list;
+	spinlock_t queue_lock;
+	struct crypto_queue queue;
+	struct device *dev;
+	bool rt;
+	int (*prepare_crypt_hardware)(struct crypto_engine *);
+	int (*unprepare_crypt_hardware)(struct crypto_engine *);
+	int (*do_batch_requests)(struct crypto_engine *);
+	struct kthread_worker *kworker;
+	struct kthread_work pump_requests;
+	void *priv_data;
+	struct crypto_async_request *cur_req;
+};
+
+struct crypto_engine_op {
+	int (*do_one_request)(struct crypto_engine *, void *);
+};
+
+struct crypto_engine_alg {
+	struct crypto_alg base;
+	struct crypto_engine_op op;
+};
+
+struct aead_engine_alg {
+	struct aead_alg base;
+	struct crypto_engine_op op;
+};
+
+struct ahash_request;
+
+struct crypto_ahash;
+
+struct ahash_alg {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	int (*init_tfm)(struct crypto_ahash *);
+	void (*exit_tfm)(struct crypto_ahash *);
+	int (*clone_tfm)(struct crypto_ahash *, struct crypto_ahash *);
+	struct hash_alg_common halg;
+};
+
+struct ahash_request {
+	struct crypto_async_request base;
+	unsigned int nbytes;
+	struct scatterlist *src;
+	u8 *result;
+	void *priv;
+	void *__ctx[0];
+};
+
+struct crypto_ahash {
+	int (*init)(struct ahash_request *);
+	int (*update)(struct ahash_request *);
+	int (*final)(struct ahash_request *);
+	int (*finup)(struct ahash_request *);
+	int (*digest)(struct ahash_request *);
+	int (*export)(struct ahash_request *, void *);
+	int (*import)(struct ahash_request *, const void *);
+	int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);
+	unsigned int statesize;
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct ahash_engine_alg {
+	struct ahash_alg base;
+	struct crypto_engine_op op;
+};
+
+struct akcipher_request;
+
+struct crypto_akcipher;
+
+struct akcipher_alg {
+	int (*sign)(struct akcipher_request *);
+	int (*verify)(struct akcipher_request *);
+	int (*encrypt)(struct akcipher_request *);
+	int (*decrypt)(struct akcipher_request *);
+	int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);
+	int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);
+	unsigned int (*max_size)(struct crypto_akcipher *);
+	int (*init)(struct crypto_akcipher *);
+	void (*exit)(struct crypto_akcipher *);
+	struct crypto_alg base;
+};
+
+struct akcipher_request {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int src_len;
+	unsigned int dst_len;
+	void *__ctx[0];
+};
+
+struct crypto_akcipher {
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct skcipher_engine_alg {
+	struct skcipher_alg base;
+	struct crypto_engine_op op;
+};
+
+struct akcipher_engine_alg {
+	struct akcipher_alg base;
+	struct crypto_engine_op op;
+};
+
+struct kpp_engine_alg {
+	struct kpp_alg base;
+	struct crypto_engine_op op;
+};
+
+enum {
+	CRYPTOA_UNSPEC = 0,
+	CRYPTOA_ALG = 1,
+	CRYPTOA_TYPE = 2,
+	__CRYPTOA_MAX = 3,
+};
+
+struct rtattr {
+	unsigned short rta_len;
+	unsigned short rta_type;
+};
+
+struct crypto_attr_type {
+	u32 type;
+	u32 mask;
+};
+
+struct crypto_attr_alg {
+	char name[128];
+};
+
+struct aead_instance {
+	void (*free)(struct aead_instance *);
+	union {
+		struct {
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct aead_alg alg;
+	};
+};
+
+struct crypto_istat_aead {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_aead_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_rng;
+
+struct rng_alg {
+	int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);
+	int (*seed)(struct crypto_rng *, const u8 *, unsigned int);
+	void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);
+	unsigned int seedsize;
+	struct crypto_alg base;
+};
+
+struct crypto_rng {
+	struct crypto_tfm base;
+};
+
+struct crypto_sync_skcipher;
+
+struct aead_geniv_ctx {
+	spinlock_t lock;
+	struct crypto_aead *child;
+	struct crypto_sync_skcipher *sknull;
+	u8 salt[0];
+};
+
+enum {
+	SKCIPHER_WALK_PHYS = 1,
+	SKCIPHER_WALK_SLOW = 2,
+	SKCIPHER_WALK_COPY = 4,
+	SKCIPHER_WALK_DIFF = 8,
+	SKCIPHER_WALK_SLEEP = 16,
+};
+
+struct skcipher_walk_buffer {
+	struct list_head entry;
+	struct scatter_walk dst;
+	unsigned int len;
+	u8 *data;
+	u8 buffer[0];
+};
+
+struct crypto_sync_skcipher {
+	struct crypto_skcipher base;
+};
+
+struct skcipher_instance {
+	void (*free)(struct skcipher_instance *);
+	union {
+		struct {
+			char head[64];
+			struct crypto_instance base;
+		} s;
+		struct skcipher_alg alg;
+	};
+};
+
+struct crypto_istat_cipher {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_cipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct skcipher_ctx_simple {
+	struct crypto_cipher *cipher;
+};
+
+struct crypto_skcipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct ahash_instance {
+	void (*free)(struct ahash_instance *);
+	union {
+		struct {
+			char head[96];
+			struct crypto_instance base;
+		} s;
+		struct ahash_alg alg;
+	};
+};
+
+struct crypto_hash_walk {
+	char *data;
+	unsigned int offset;
+	unsigned int alignmask;
+	struct page *pg;
+	unsigned int entrylen;
+	unsigned int total;
+	struct scatterlist *sg;
+	unsigned int flags;
+};
+
+struct crypto_ahash_spawn {
+	struct crypto_spawn base;
+};
+
+struct shash_instance {
+	void (*free)(struct shash_instance *);
+	union {
+		struct {
+			char head[120];
+			struct crypto_instance base;
+		} s;
+		struct shash_alg alg;
+	};
+};
+
+struct crypto_istat_hash {
+	atomic64_t hash_cnt;
+	atomic64_t hash_tlen;
+	atomic64_t err_cnt;
+};
+
+struct crypto_shash_spawn {
+	struct crypto_spawn base;
+};
+
+struct akcipher_instance {
+	void (*free)(struct akcipher_instance *);
+	union {
+		struct {
+			char head[72];
+			struct crypto_instance base;
+		} s;
+		struct akcipher_alg alg;
+	};
+};
+
+struct crypto_istat_akcipher {
+	atomic64_t encrypt_cnt;
+	atomic64_t encrypt_tlen;
+	atomic64_t decrypt_cnt;
+	atomic64_t decrypt_tlen;
+	atomic64_t verify_cnt;
+	atomic64_t sign_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_akcipher_sync_data {
+	struct crypto_akcipher *tfm;
+	const void *src;
+	void *dst;
+	unsigned int slen;
+	unsigned int dlen;
+	struct akcipher_request *req;
+	struct crypto_wait cwait;
+	struct scatterlist sg;
+	u8 *buf;
+};
+
+struct crypto_akcipher_spawn {
+	struct crypto_spawn base;
+};
+
+struct crypto_sig {
+	struct crypto_tfm base;
+};
+
+struct kpp_instance {
+	void (*free)(struct kpp_instance *);
+	union {
+		struct {
+			char head[48];
+			struct crypto_instance base;
+		} s;
+		struct kpp_alg alg;
+	};
+};
+
+struct crypto_istat_kpp {
+	atomic64_t setsecret_cnt;
+	atomic64_t generate_public_key_cnt;
+	atomic64_t compute_shared_secret_cnt;
+	atomic64_t err_cnt;
+};
+
+struct crypto_kpp_spawn {
+	struct crypto_spawn base;
+};
+
+typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);
+
+struct asn1_decoder {
+	const unsigned char *machine;
+	size_t machlen;
+	const asn1_action_t *actions;
+};
+
+struct gcry_mpi;
+
+typedef struct gcry_mpi *MPI;
+
+struct rsa_mpi_key {
+	MPI n;
+	MPI e;
+	MPI d;
+	MPI p;
+	MPI q;
+	MPI dp;
+	MPI dq;
+	MPI qinv;
+};
+
+typedef unsigned long mpi_limb_t;
+
+struct gcry_mpi {
+	int alloced;
+	int nlimbs;
+	int nbits;
+	int sign;
+	unsigned int flags;
+	mpi_limb_t *d;
+};
+
+struct rsa_key {
+	const u8 *n;
+	const u8 *e;
+	const u8 *d;
+	const u8 *p;
+	const u8 *q;
+	const u8 *dp;
+	const u8 *dq;
+	const u8 *qinv;
+	size_t n_sz;
+	size_t e_sz;
+	size_t d_sz;
+	size_t p_sz;
+	size_t q_sz;
+	size_t dp_sz;
+	size_t dq_sz;
+	size_t qinv_sz;
+};
+
+struct rsa_asn1_template {
+	const char *name;
+	const u8 *data;
+	size_t size;
+};
+
+struct pkcs1pad_inst_ctx {
+	struct crypto_akcipher_spawn spawn;
+	const struct rsa_asn1_template *digest_info;
+};
+
+struct pkcs1pad_ctx {
+	struct crypto_akcipher *child;
+	unsigned int key_size;
+};
+
+struct pkcs1pad_request {
+	struct scatterlist in_sg[2];
+	struct scatterlist out_sg[1];
+	uint8_t *in_buf;
+	uint8_t *out_buf;
+	struct akcipher_request child_req;
+};
+
+struct acomp_req;
+
+struct crypto_acomp {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	unsigned int reqsize;
+	struct crypto_tfm base;
+};
+
+struct acomp_req {
+	struct crypto_async_request base;
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	unsigned int slen;
+	unsigned int dlen;
+	u32 flags;
+	void *__ctx[0];
+};
+
+struct comp_alg_common {
+	struct crypto_alg base;
+};
+
+struct acomp_alg {
+	int (*compress)(struct acomp_req *);
+	int (*decompress)(struct acomp_req *);
+	void (*dst_free)(struct scatterlist *);
+	int (*init)(struct crypto_acomp *);
+	void (*exit)(struct crypto_acomp *);
+	unsigned int reqsize;
+	union {
+		struct {
+			struct crypto_alg base;
+		};
+		struct comp_alg_common calg;
+	};
+};
+
+struct crypto_istat_compress {
+	atomic64_t compress_cnt;
+	atomic64_t compress_tlen;
+	atomic64_t decompress_cnt;
+	atomic64_t decompress_tlen;
+	atomic64_t err_cnt;
+};
+
+struct scomp_scratch {
+	spinlock_t lock;
+	void *src;
+	void *dst;
+};
+
+struct crypto_scomp;
+
+struct scomp_alg {
+	void * (*alloc_ctx)(struct crypto_scomp *);
+	void (*free_ctx)(struct crypto_scomp *, void *);
+	int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);
+	union {
+		struct {
+			struct crypto_alg base;
+		};
+		struct comp_alg_common calg;
+	};
+};
+
+struct crypto_scomp {
+	struct crypto_tfm base;
+};
+
+struct cryptomgr_param {
+	struct rtattr *tb[34];
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_type data;
+	} type;
+	struct {
+		struct rtattr attr;
+		struct crypto_attr_alg data;
+	} attrs[32];
+	char template[128];
+	struct crypto_larval *larval;
+	u32 otype;
+	u32 omask;
+};
+
+struct cmac_desc_ctx {
+	unsigned int len;
+	u8 ctx[0];
+};
+
+struct cmac_tfm_ctx {
+	struct crypto_cipher *child;
+	u8 ctx[0];
+};
+
+struct hmac_ctx {
+	struct crypto_shash *hash;
+};
+
+typedef u32 u_int32_t;
+
+struct xcbc_tfm_ctx {
+	struct crypto_cipher *child;
+	u8 ctx[0];
+};
+
+struct xcbc_desc_ctx {
+	unsigned int len;
+	u8 ctx[0];
+};
+
+struct md5_state {
+	u32 hash[4];
+	u32 block[16];
+	u64 byte_count;
+};
+
+struct sha1_state;
+
+typedef void sha1_block_fn(struct sha1_state *, const u8 *, int);
+
+struct sha1_state {
+	u32 state[5];
+	u64 count;
+	u8 buffer[64];
+};
+
+struct sha3_state {
+	u64 st[25];
+	unsigned int rsiz;
+	unsigned int rsizw;
+	unsigned int partial;
+	u8 buf[144];
+};
+
+enum blake2b_lengths {
+	BLAKE2B_BLOCK_SIZE = 128,
+	BLAKE2B_HASH_SIZE = 64,
+	BLAKE2B_KEY_SIZE = 64,
+	BLAKE2B_160_HASH_SIZE = 20,
+	BLAKE2B_256_HASH_SIZE = 32,
+	BLAKE2B_384_HASH_SIZE = 48,
+	BLAKE2B_512_HASH_SIZE = 64,
+};
+
+enum blake2b_iv {
+	BLAKE2B_IV0 = 7640891576956012808ULL,
+	BLAKE2B_IV1 = 13503953896175478587ULL,
+	BLAKE2B_IV2 = 4354685564936845355ULL,
+	BLAKE2B_IV3 = 11912009170470909681ULL,
+	BLAKE2B_IV4 = 5840696475078001361ULL,
+	BLAKE2B_IV5 = 11170449401992604703ULL,
+	BLAKE2B_IV6 = 2270897969802886507ULL,
+	BLAKE2B_IV7 = 6620516959819538809ULL,
+};
+
+struct blake2b_state {
+	u64 h[8];
+	u64 t[2];
+	u64 f[2];
+	u8 buf[128];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+typedef void (*blake2b_compress_t)(struct blake2b_state *, const u8 *, size_t, u32);
+
+struct blake2b_tfm_ctx {
+	u8 key[64];
+	unsigned int keylen;
+};
+
+struct crypto_cts_reqctx {
+	struct scatterlist sg[2];
+	unsigned int offset;
+	struct skcipher_request subreq;
+};
+
+struct crypto_cts_ctx {
+	struct crypto_skcipher *child;
+};
+
+struct xts_instance_ctx {
+	struct crypto_skcipher_spawn spawn;
+	struct crypto_cipher_spawn tweak_spawn;
+};
+
+typedef struct {
+	__le64 b;
+	__le64 a;
+} le128;
+
+struct xts_request_ctx {
+	le128 t;
+	struct scatterlist *tail;
+	struct scatterlist sg[2];
+	struct skcipher_request subreq;
+};
+
+struct xts_tfm_ctx {
+	struct crypto_skcipher *child;
+	struct crypto_cipher *tweak;
+};
+
+struct crypto_rfc3686_ctx {
+	struct crypto_skcipher *child;
+	u8 nonce[4];
+};
+
+struct crypto_rfc3686_req_ctx {
+	u8 iv[16];
+	struct skcipher_request subreq;
+};
+
+struct hctr2_instance_ctx {
+	struct crypto_cipher_spawn blockcipher_spawn;
+	struct crypto_skcipher_spawn xctr_spawn;
+	struct crypto_shash_spawn polyval_spawn;
+};
+
+struct hctr2_tfm_ctx {
+	struct crypto_cipher *blockcipher;
+	struct crypto_skcipher *xctr;
+	struct crypto_shash *polyval;
+	u8 L[16];
+	int hashed_tweak_offset;
+};
+
+struct hctr2_request_ctx {
+	u8 first_block[16];
+	u8 xctr_iv[16];
+	struct scatterlist *bulk_part_dst;
+	struct scatterlist *bulk_part_src;
+	struct scatterlist sg_src[2];
+	struct scatterlist sg_dst[2];
+	union {
+		struct shash_desc hash_desc;
+		struct skcipher_request xctr_req;
+	} u;
+};
+
+struct sg_page_iter {
+	struct scatterlist *sg;
+	unsigned int sg_pgoffset;
+	unsigned int __nents;
+	int __pg_advance;
+};
+
+struct sg_mapping_iter {
+	struct page *page;
+	void *addr;
+	size_t length;
+	size_t consumed;
+	struct sg_page_iter piter;
+	unsigned int __offset;
+	unsigned int __remaining;
+	unsigned int __flags;
+};
+
+struct adiantum_instance_ctx {
+	struct crypto_skcipher_spawn streamcipher_spawn;
+	struct crypto_cipher_spawn blockcipher_spawn;
+	struct crypto_shash_spawn hash_spawn;
+};
+
+struct adiantum_tfm_ctx {
+	struct crypto_skcipher *streamcipher;
+	struct crypto_cipher *blockcipher;
+	struct crypto_shash *hash;
+	struct poly1305_core_key header_hash_key;
+};
+
+struct adiantum_request_ctx {
+	union {
+		u8 bytes[32];
+		__le32 words[8];
+		le128 bignum;
+	} rbuf;
+	bool enc;
+	le128 header_hash;
+	union {
+		struct shash_desc hash_desc;
+		struct skcipher_request streamcipher_req;
+	} u;
+};
+
+struct nhpoly1305_state {
+	struct poly1305_state poly_state;
+	u8 buffer[16];
+	unsigned int buflen;
+	unsigned int nh_remaining;
+	__le64 nh_hash[4];
+};
+
+struct nhpoly1305_key {
+	struct poly1305_core_key poly_key;
+	u32 nh_key[268];
+};
+
+typedef void (*nh_t)(const u32 *, const u8 *, size_t, __le64 *);
+
+struct crypto_rfc4543_instance_ctx {
+	struct crypto_aead_spawn aead;
+};
+
+struct gcm_instance_ctx {
+	struct crypto_skcipher_spawn ctr;
+	struct crypto_ahash_spawn ghash;
+};
+
+typedef struct {
+	__be64 a;
+	__be64 b;
+} be128;
+
+struct crypto_gcm_ghash_ctx {
+	unsigned int cryptlen;
+	struct scatterlist *src;
+	int (*complete)(struct aead_request *, u32);
+};
+
+struct crypto_gcm_req_priv_ctx {
+	u8 iv[16];
+	u8 auth_tag[16];
+	u8 iauth_tag[16];
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	struct scatterlist sg;
+	struct crypto_gcm_ghash_ctx ghash_ctx;
+	union {
+		struct ahash_request ahreq;
+		struct skcipher_request skreq;
+	} u;
+};
+
+struct crypto_gcm_ctx {
+	struct crypto_skcipher *ctr;
+	struct crypto_ahash *ghash;
+};
+
+struct crypto_rfc4543_ctx {
+	struct crypto_aead *child;
+	struct crypto_sync_skcipher *null;
+	u8 nonce[4];
+};
+
+struct crypto_rfc4106_ctx {
+	struct crypto_aead *child;
+	u8 nonce[4];
+};
+
+struct crypto_rfc4106_req_ctx {
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	struct aead_request subreq;
+};
+
+struct crypto_rfc4543_req_ctx {
+	struct aead_request subreq;
+};
+
+struct ccm_instance_ctx {
+	struct crypto_skcipher_spawn ctr;
+	struct crypto_ahash_spawn mac;
+};
+
+struct crypto_ccm_req_priv_ctx {
+	u8 odata[16];
+	u8 idata[16];
+	u8 auth_tag[16];
+	u32 flags;
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	union {
+		struct ahash_request ahreq;
+		struct skcipher_request skreq;
+	};
+};
+
+struct cbcmac_tfm_ctx {
+	struct crypto_cipher *child;
+};
+
+struct cbcmac_desc_ctx {
+	unsigned int len;
+};
+
+struct crypto_ccm_ctx {
+	struct crypto_ahash *mac;
+	struct crypto_skcipher *ctr;
+};
+
+struct crypto_rfc4309_ctx {
+	struct crypto_aead *child;
+	u8 nonce[3];
+};
+
+struct crypto_rfc4309_req_ctx {
+	struct scatterlist src[3];
+	struct scatterlist dst[3];
+	struct aead_request subreq;
+};
+
+struct chachapoly_instance_ctx {
+	struct crypto_skcipher_spawn chacha;
+	struct crypto_ahash_spawn poly;
+	unsigned int saltlen;
+};
+
+struct chachapoly_ctx {
+	struct crypto_skcipher *chacha;
+	struct crypto_ahash *poly;
+	unsigned int saltlen;
+	u8 salt[0];
+};
+
+struct poly_req {
+	u8 pad[16];
+	struct {
+		__le64 assoclen;
+		__le64 cryptlen;
+	} tail;
+	struct scatterlist src[1];
+	struct ahash_request req;
+};
+
+struct chacha_req {
+	u8 iv[16];
+	struct scatterlist src[1];
+	struct skcipher_request req;
+};
+
+struct chachapoly_req_ctx {
+	struct scatterlist src[2];
+	struct scatterlist dst[2];
+	u8 key[32];
+	u8 tag[16];
+	unsigned int cryptlen;
+	unsigned int assoclen;
+	u32 flags;
+	union {
+		struct poly_req poly;
+		struct chacha_req chacha;
+	} u;
+};
+
+struct cryptd_cpu_queue;
+
+struct cryptd_queue {
+	struct cryptd_cpu_queue __attribute__((btf_type_tag("percpu"))) *cpu_queue;
+};
+
+struct cryptd_cpu_queue {
+	struct crypto_queue queue;
+	struct work_struct work;
+};
+
+struct cryptd_skcipher {
+	struct crypto_skcipher base;
+};
+
+struct cryptd_ahash {
+	struct crypto_ahash base;
+};
+
+struct cryptd_aead {
+	struct crypto_aead base;
+};
+
+struct skcipherd_instance_ctx {
+	struct crypto_skcipher_spawn spawn;
+	struct cryptd_queue *queue;
+};
+
+struct aead_instance_ctx {
+	struct crypto_aead_spawn aead_spawn;
+	struct cryptd_queue *queue;
+};
+
+struct hashd_instance_ctx {
+	struct crypto_shash_spawn spawn;
+	struct cryptd_queue *queue;
+};
+
+struct cryptd_skcipher_request_ctx {
+	struct skcipher_request req;
+};
+
+struct cryptd_instance_ctx {
+	struct crypto_spawn spawn;
+	struct cryptd_queue *queue;
+};
+
+struct cryptd_skcipher_ctx {
+	refcount_t refcnt;
+	struct crypto_skcipher *child;
+};
+
+struct cryptd_hash_request_ctx {
+	crypto_completion_t complete;
+	void *data;
+	struct shash_desc desc;
+};
+
+struct cryptd_hash_ctx {
+	refcount_t refcnt;
+	struct crypto_shash *child;
+};
+
+struct cryptd_aead_request_ctx {
+	struct aead_request req;
+};
+
+struct cryptd_aead_ctx {
+	refcount_t refcnt;
+	struct crypto_aead *child;
+};
+
+struct des_ctx {
+	u32 expkey[32];
+};
+
+struct des3_ede_ctx {
+	u32 expkey[96];
+};
+
+struct deflate_ctx {
+	struct z_stream_s comp_stream;
+	struct z_stream_s decomp_stream;
+};
+
+struct chksum_ctx {
+	u32 key;
+};
+
+struct chksum_desc_ctx {
+	u32 crc;
+};
+
+enum {
+	CRYPTO_AUTHENC_KEYA_UNSPEC = 0,
+	CRYPTO_AUTHENC_KEYA_PARAM = 1,
+};
+
+struct authenc_instance_ctx {
+	struct crypto_ahash_spawn auth;
+	struct crypto_skcipher_spawn enc;
+	unsigned int reqoff;
+};
+
+struct crypto_authenc_keys {
+	const u8 *authkey;
+	const u8 *enckey;
+	unsigned int authkeylen;
+	unsigned int enckeylen;
+};
+
+struct crypto_authenc_key_param {
+	__be32 enckeylen;
+};
+
+struct crypto_authenc_ctx {
+	struct crypto_ahash *auth;
+	struct crypto_skcipher *enc;
+	struct crypto_sync_skcipher *null;
+};
+
+struct authenc_request_ctx {
+	struct scatterlist src[2];
+	struct scatterlist dst[2];
+	char tail[0];
+};
+
+struct authenc_esn_instance_ctx {
+	struct crypto_ahash_spawn auth;
+	struct crypto_skcipher_spawn enc;
+};
+
+struct crypto_authenc_esn_ctx {
+	unsigned int reqoff;
+	struct crypto_ahash *auth;
+	struct crypto_skcipher *enc;
+	struct crypto_sync_skcipher *null;
+};
+
+struct authenc_esn_request_ctx {
+	struct scatterlist src[2];
+	struct scatterlist dst[2];
+	char tail[0];
+};
+
+struct lzo_ctx {
+	void *lzo_comp_mem;
+};
+
+struct lzorle_ctx {
+	void *lzorle_comp_mem;
+};
+
+struct lz4_ctx {
+	void *lz4_comp_mem;
+};
+
+struct crypto_istat_rng {
+	atomic64_t generate_cnt;
+	atomic64_t generate_tlen;
+	atomic64_t seed_cnt;
+	atomic64_t err_cnt;
+};
+
+struct prng_context {
+	spinlock_t prng_lock;
+	unsigned char rand_data[16];
+	unsigned char last_rand_data[16];
+	unsigned char DT[16];
+	unsigned char I[16];
+	unsigned char V[16];
+	u32 rand_data_valid;
+	struct crypto_cipher *tfm;
+	u32 flags;
+};
+
+struct drbg_state;
+
+struct drbg_state_ops {
+	int (*update)(struct drbg_state *, struct list_head *, int);
+	int (*generate)(struct drbg_state *, unsigned char *, unsigned int, struct list_head *);
+	int (*crypto_init)(struct drbg_state *);
+	int (*crypto_fini)(struct drbg_state *);
+};
+
+enum drbg_seed_state {
+	DRBG_SEED_STATE_UNSEEDED = 0,
+	DRBG_SEED_STATE_PARTIAL = 1,
+	DRBG_SEED_STATE_FULL = 2,
+};
+
+struct drbg_string {
+	const unsigned char *buf;
+	size_t len;
+	struct list_head list;
+};
+
+struct drbg_core;
+
+struct drbg_state {
+	struct mutex drbg_mutex;
+	unsigned char *V;
+	unsigned char *Vbuf;
+	unsigned char *C;
+	unsigned char *Cbuf;
+	size_t reseed_ctr;
+	size_t reseed_threshold;
+	unsigned char *scratchpad;
+	unsigned char *scratchpadbuf;
+	void *priv_data;
+	struct crypto_skcipher *ctr_handle;
+	struct skcipher_request *ctr_req;
+	__u8 *outscratchpadbuf;
+	__u8 *outscratchpad;
+	struct crypto_wait ctr_wait;
+	struct scatterlist sg_in;
+	struct scatterlist sg_out;
+	enum drbg_seed_state seeded;
+	unsigned long last_seed_time;
+	bool pr;
+	bool fips_primed;
+	unsigned char *prev;
+	struct crypto_rng *jent;
+	const struct drbg_state_ops *d_ops;
+	const struct drbg_core *core;
+	struct drbg_string test_data;
+};
+
+typedef uint32_t drbg_flag_t;
+
+struct drbg_core {
+	drbg_flag_t flags;
+	__u8 statelen;
+	__u8 blocklen_bytes;
+	char cra_name[128];
+	char backend_cra_name[128];
+};
+
+enum drbg_prefixes {
+	DRBG_PREFIX0 = 0,
+	DRBG_PREFIX1 = 1,
+	DRBG_PREFIX2 = 2,
+	DRBG_PREFIX3 = 3,
+};
+
+struct sdesc {
+	struct shash_desc shash;
+	char ctx[0];
+};
+
+typedef unsigned char u8___2;
+
+struct rand_data {
+	void *hash_state;
+	__u64 prev_time;
+	__u64 last_delta;
+	__s64 last_delta2;
+	unsigned int osr;
+	unsigned char *mem;
+	unsigned int memlocation;
+	unsigned int memblocks;
+	unsigned int memblocksize;
+	unsigned int memaccessloops;
+	unsigned int rct_count;
+	unsigned int apt_observations;
+	unsigned int apt_count;
+	unsigned int apt_base;
+	unsigned int apt_base_set: 1;
+};
+
+struct jitterentropy {
+	spinlock_t jent_lock;
+	struct rand_data *entropy_collector;
+	struct crypto_shash *tfm;
+	struct shash_desc *sdesc;
+};
+
+struct gf128mul_4k {
+	be128 t[256];
+};
+
+struct ghash_ctx {
+	struct gf128mul_4k *gf128;
+};
+
+struct ghash_desc_ctx {
+	u8 buffer[16];
+	u32 bytes;
+};
+
+struct polyval_desc_ctx___2 {
+	union {
+		u8 buffer[16];
+		be128 buffer128;
+	};
+	u32 bytes;
+};
+
+struct polyval_tfm_ctx___2 {
+	struct gf128mul_4k *gf128;
+};
+
+typedef ZSTD_CCtx zstd_cctx;
+
+typedef ZSTD_DCtx zstd_dctx;
+
+struct zstd_ctx {
+	zstd_cctx *cctx;
+	zstd_dctx *dctx;
+	void *cwksp;
+	void *dwksp;
+};
+
+struct ecc_point {
+	u64 *x;
+	u64 *y;
+	u8 ndigits;
+};
+
+struct ecc_curve {
+	char *name;
+	struct ecc_point g;
+	u64 *p;
+	u64 *n;
+	u64 *a;
+	u64 *b;
+};
+
+typedef struct {
+	u64 m_low;
+	u64 m_high;
+} uint128_t;
+
+struct essiv_tfm_ctx {
+	union {
+		struct crypto_skcipher *skcipher;
+		struct crypto_aead *aead;
+	} u;
+	struct crypto_cipher *essiv_cipher;
+	struct crypto_shash *hash;
+	int ivoffset;
+};
+
+struct essiv_instance_ctx {
+	union {
+		struct crypto_skcipher_spawn skcipher_spawn;
+		struct crypto_aead_spawn aead_spawn;
+	} u;
+	char essiv_cipher_name[128];
+	char shash_driver_name[128];
+};
+
+struct essiv_aead_request_ctx {
+	struct scatterlist sg[4];
+	u8 *assoc;
+	struct aead_request aead_req;
+};
+
+struct ecdh {
+	char *key;
+	unsigned short key_size;
+};
+
+struct ecdh_ctx {
+	unsigned int curve_id;
+	unsigned int ndigits;
+	u64 private_key[8];
+};
+
+enum {
+	CRYPTO_KPP_SECRET_TYPE_UNKNOWN = 0,
+	CRYPTO_KPP_SECRET_TYPE_DH = 1,
+	CRYPTO_KPP_SECRET_TYPE_ECDH = 2,
+};
+
+struct kpp_secret {
+	unsigned short type;
+	unsigned short len;
+};
+
+enum asymmetric_payload_bits {
+	asym_crypto = 0,
+	asym_subtype = 1,
+	asym_key_ids = 2,
+	asym_auth = 3,
+};
+
+struct asymmetric_key_parser {
+	struct list_head link;
+	struct module *owner;
+	const char *name;
+	int (*parse)(struct key_preparsed_payload *);
+};
+
+struct asymmetric_key_ids {
+	void *id[3];
+};
+
+struct asymmetric_key_id {
+	unsigned short len;
+	unsigned char data[0];
+};
+
+struct public_key_signature;
+
+struct asymmetric_key_subtype {
+	struct module *owner;
+	const char *name;
+	unsigned short name_len;
+	void (*describe)(const struct key *, struct seq_file *);
+	void (*destroy)(void *, void *);
+	int (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);
+	int (*eds_op)(struct kernel_pkey_params *, const void *, void *);
+	int (*verify_signature)(const struct key *, const struct public_key_signature *);
+};
+
+struct public_key_signature {
+	struct asymmetric_key_id *auth_ids[3];
+	u8 *s;
+	u8 *digest;
+	u32 s_size;
+	u32 digest_size;
+	const char *pkey_algo;
+	const char *hash_algo;
+	const char *encoding;
+};
+
+struct public_key {
+	void *key;
+	u32 keylen;
+	enum OID algo;
+	void *params;
+	u32 paramlen;
+	bool key_is_private;
+	const char *id_type;
+	const char *pkey_algo;
+	unsigned long key_eflags;
+};
+
+enum asn1_tag {
+	ASN1_EOC = 0,
+	ASN1_BOOL = 1,
+	ASN1_INT = 2,
+	ASN1_BTS = 3,
+	ASN1_OTS = 4,
+	ASN1_NULL = 5,
+	ASN1_OID = 6,
+	ASN1_ODE = 7,
+	ASN1_EXT = 8,
+	ASN1_REAL = 9,
+	ASN1_ENUM = 10,
+	ASN1_EPDV = 11,
+	ASN1_UTF8STR = 12,
+	ASN1_RELOID = 13,
+	ASN1_SEQ = 16,
+	ASN1_SET = 17,
+	ASN1_NUMSTR = 18,
+	ASN1_PRNSTR = 19,
+	ASN1_TEXSTR = 20,
+	ASN1_VIDSTR = 21,
+	ASN1_IA5STR = 22,
+	ASN1_UNITIM = 23,
+	ASN1_GENTIM = 24,
+	ASN1_GRASTR = 25,
+	ASN1_VISSTR = 26,
+	ASN1_GENSTR = 27,
+	ASN1_UNISTR = 28,
+	ASN1_CHRSTR = 29,
+	ASN1_BMPSTR = 30,
+	ASN1_LONG_TAG = 31,
+};
+
+struct x509_certificate {
+	struct x509_certificate *next;
+	struct x509_certificate *signer;
+	struct public_key *pub;
+	struct public_key_signature *sig;
+	char *issuer;
+	char *subject;
+	struct asymmetric_key_id *id;
+	struct asymmetric_key_id *skid;
+	time64_t valid_from;
+	time64_t valid_to;
+	const void *tbs;
+	unsigned int tbs_size;
+	unsigned int raw_sig_size;
+	const void *raw_sig;
+	const void *raw_serial;
+	unsigned int raw_serial_size;
+	unsigned int raw_issuer_size;
+	const void *raw_issuer;
+	const void *raw_subject;
+	unsigned int raw_subject_size;
+	unsigned int raw_skid_size;
+	const void *raw_skid;
+	unsigned int index;
+	bool seen;
+	bool verified;
+	bool self_signed;
+	bool unsupported_sig;
+	bool blacklisted;
+};
+
+struct x509_parse_context {
+	struct x509_certificate *cert;
+	unsigned long data;
+	const void *key;
+	size_t key_size;
+	const void *params;
+	size_t params_size;
+	enum OID key_algo;
+	enum OID last_oid;
+	enum OID sig_algo;
+	u8 o_size;
+	u8 cn_size;
+	u8 email_size;
+	u16 o_offset;
+	u16 cn_offset;
+	u16 email_offset;
+	unsigned int raw_akid_size;
+	const void *raw_akid;
+	const void *akid_raw_issuer;
+	unsigned int akid_raw_issuer_size;
+};
+
+enum blacklist_hash_type {
+	BLACKLIST_HASH_X509_TBS = 1,
+	BLACKLIST_HASH_BINARY = 2,
+};
+
+enum asn1_class {
+	ASN1_UNIV = 0,
+	ASN1_APPL = 1,
+	ASN1_CONT = 2,
+	ASN1_PRIV = 3,
+};
+
+struct pkcs7_signed_info {
+	struct pkcs7_signed_info *next;
+	struct x509_certificate *signer;
+	unsigned int index;
+	bool unsupported_crypto;
+	bool blacklisted;
+	const void *msgdigest;
+	unsigned int msgdigest_len;
+	unsigned int authattrs_len;
+	const void *authattrs;
+	unsigned long aa_set;
+	time64_t signing_time;
+	struct public_key_signature *sig;
+};
+
+struct pkcs7_parse_context {
+	struct pkcs7_message *msg;
+	struct pkcs7_signed_info *sinfo;
+	struct pkcs7_signed_info **ppsinfo;
+	struct x509_certificate *certs;
+	struct x509_certificate **ppcerts;
+	unsigned long data;
+	enum OID last_oid;
+	unsigned int x509_index;
+	unsigned int sinfo_index;
+	const void *raw_serial;
+	unsigned int raw_serial_size;
+	unsigned int raw_issuer_size;
+	const void *raw_issuer;
+	const void *raw_skid;
+	unsigned int raw_skid_size;
+	bool expect_skid;
+};
+
+struct simd_skcipher_alg {
+	const char *ialg_name;
+	struct skcipher_alg alg;
+};
+
+struct simd_aead_alg {
+	const char *ialg_name;
+	struct aead_alg alg;
+};
+
+struct simd_skcipher_ctx {
+	struct cryptd_skcipher *cryptd_tfm;
+};
+
+struct simd_aead_ctx {
+	struct cryptd_aead *cryptd_tfm;
+};
+
+struct blk_flush_queue {
+	spinlock_t mq_flush_lock;
+	unsigned int flush_pending_idx: 1;
+	unsigned int flush_running_idx: 1;
+	blk_status_t rq_status;
+	unsigned long flush_pending_since;
+	struct list_head flush_queue[2];
+	unsigned long flush_data_in_flight;
+	struct request *flush_rq;
+};
+
+enum {
+	DISK_EVENT_FLAG_POLL = 1,
+	DISK_EVENT_FLAG_UEVENT = 2,
+	DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE = 4,
+};
+
+enum {
+	DISK_EVENT_MEDIA_CHANGE = 1,
+	DISK_EVENT_EJECT_REQUEST = 2,
+};
+
+struct bdev_inode {
+	struct block_device bdev;
+	struct inode vfs_inode;
+};
+
+enum {
+	DIO_SHOULD_DIRTY = 1,
+	DIO_IS_SYNC = 2,
+};
+
+struct blkdev_dio {
+	union {
+		struct kiocb *iocb;
+		struct task_struct *waiter;
+	};
+	size_t size;
+	atomic_t ref;
+	unsigned int flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct bio bio;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum rq_qos_id {
+	RQ_QOS_WBT = 0,
+	RQ_QOS_LATENCY = 1,
+	RQ_QOS_COST = 2,
+};
+
+struct rq_qos_ops;
+
+struct rq_qos {
+	const struct rq_qos_ops *ops;
+	struct gendisk *disk;
+	enum rq_qos_id id;
+	struct rq_qos *next;
+	struct dentry *debugfs_dir;
+};
+
+struct blk_mq_debugfs_attr;
+
+struct rq_qos_ops {
+	void (*throttle)(struct rq_qos *, struct bio *);
+	void (*track)(struct rq_qos *, struct request *, struct bio *);
+	void (*merge)(struct rq_qos *, struct request *, struct bio *);
+	void (*issue)(struct rq_qos *, struct request *);
+	void (*requeue)(struct rq_qos *, struct request *);
+	void (*done)(struct rq_qos *, struct request *);
+	void (*done_bio)(struct rq_qos *, struct bio *);
+	void (*cleanup)(struct rq_qos *, struct bio *);
+	void (*queue_depth_changed)(struct rq_qos *);
+	void (*exit)(struct rq_qos *);
+	const struct blk_mq_debugfs_attr *debugfs_attrs;
+};
+
+struct blk_mq_debugfs_attr {
+	const char *name;
+	umode_t mode;
+	int (*show)(void *, struct seq_file *);
+	ssize_t (*write)(void *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	const struct seq_operations *seq_ops;
+};
+
+struct blkg_iostat {
+	u64 bytes[3];
+	u64 ios[3];
+};
+
+struct blkg_iostat_set {
+	struct u64_stats_sync sync;
+	struct blkcg_gq *blkg;
+	struct llist_node lnode;
+	int lqueued;
+	struct blkg_iostat cur;
+	struct blkg_iostat last;
+};
+
+struct blkcg;
+
+struct blkg_policy_data;
+
+struct blkcg_gq {
+	struct request_queue *q;
+	struct list_head q_node;
+	struct hlist_node blkcg_node;
+	struct blkcg *blkcg;
+	struct blkcg_gq *parent;
+	struct percpu_ref refcnt;
+	bool online;
+	struct blkg_iostat_set __attribute__((btf_type_tag("percpu"))) *iostat_cpu;
+	struct blkg_iostat_set iostat;
+	struct blkg_policy_data *pd[6];
+	union {
+		struct work_struct async_bio_work;
+		struct work_struct free_work;
+	};
+	atomic_t use_delay;
+	atomic64_t delay_nsec;
+	atomic64_t delay_start;
+	u64 last_delay;
+	int last_use;
+	struct callback_head callback_head;
+	u64 android_oem_data1;
+};
+
+struct blkcg_policy_data;
+
+struct blkcg {
+	struct cgroup_subsys_state css;
+	spinlock_t lock;
+	refcount_t online_pin;
+	struct xarray blkg_tree;
+	struct blkcg_gq __attribute__((btf_type_tag("rcu"))) *blkg_hint;
+	struct hlist_head blkg_list;
+	struct blkcg_policy_data *cpd[6];
+	struct list_head all_blkcgs_node;
+	struct llist_head __attribute__((btf_type_tag("percpu"))) *lhead;
+	struct list_head cgwb_list;
+	u64 android_oem_data1;
+};
+
+struct blkcg_policy_data {
+	struct blkcg *blkcg;
+	int plid;
+};
+
+struct blkg_policy_data {
+	struct blkcg_gq *blkg;
+	int plid;
+	bool online;
+};
+
+struct biovec_slab {
+	int nr_vecs;
+	char *name;
+	struct kmem_cache *slab;
+};
+
+struct bio_slab {
+	struct kmem_cache *slab;
+	unsigned int slab_ref;
+	unsigned int slab_size;
+	char name[8];
+};
+
+struct blk_mq_ctxs {
+	struct kobject kobj;
+	struct blk_mq_ctx __attribute__((btf_type_tag("percpu"))) *queue_ctx;
+};
+
+struct elevator_type;
+
+struct elevator_queue {
+	struct elevator_type *type;
+	void *elevator_data;
+	struct kobject kobj;
+	struct mutex sysfs_lock;
+	unsigned long flags;
+	struct hlist_head hash[64];
+};
+
+enum elv_merge {
+	ELEVATOR_NO_MERGE = 0,
+	ELEVATOR_FRONT_MERGE = 1,
+	ELEVATOR_BACK_MERGE = 2,
+	ELEVATOR_DISCARD_MERGE = 3,
+};
+
+typedef unsigned int blk_insert_t;
+
+struct blk_mq_alloc_data;
+
+struct elevator_mq_ops {
+	int (*init_sched)(struct request_queue *, struct elevator_type *);
+	void (*exit_sched)(struct elevator_queue *);
+	int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+	void (*depth_updated)(struct blk_mq_hw_ctx *);
+	bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
+	bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int);
+	int (*request_merge)(struct request_queue *, struct request **, struct bio *);
+	void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
+	void (*requests_merged)(struct request_queue *, struct request *, struct request *);
+	void (*limit_depth)(blk_opf_t, struct blk_mq_alloc_data *);
+	void (*prepare_request)(struct request *);
+	void (*finish_request)(struct request *);
+	void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, blk_insert_t);
+	struct request * (*dispatch_request)(struct blk_mq_hw_ctx *);
+	bool (*has_work)(struct blk_mq_hw_ctx *);
+	void (*completed_request)(struct request *, u64);
+	void (*requeue_request)(struct request *);
+	struct request * (*former_request)(struct request_queue *, struct request *);
+	struct request * (*next_request)(struct request_queue *, struct request *);
+	void (*init_icq)(struct io_cq *);
+	void (*exit_icq)(struct io_cq *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct elv_fs_entry;
+
+struct elevator_type {
+	struct kmem_cache *icq_cache;
+	struct elevator_mq_ops ops;
+	size_t icq_size;
+	size_t icq_align;
+	struct elv_fs_entry *elevator_attrs;
+	const char *elevator_name;
+	const char *elevator_alias;
+	const unsigned int elevator_features;
+	struct module *elevator_owner;
+	const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
+	const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
+	char icq_cache_name[22];
+	struct list_head list;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef __u32 blk_mq_req_flags_t;
+
+struct blk_mq_alloc_data {
+	struct request_queue *q;
+	blk_mq_req_flags_t flags;
+	unsigned int shallow_depth;
+	blk_opf_t cmd_flags;
+	req_flags_t rq_flags;
+	unsigned int nr_tags;
+	struct request **cached_rq;
+	struct blk_mq_ctx *ctx;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+struct elv_fs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct elevator_queue *, char *);
+	ssize_t (*store)(struct elevator_queue *, const char *, size_t);
+};
+
+enum {
+	BLK_MQ_F_SHOULD_MERGE = 1,
+	BLK_MQ_F_TAG_QUEUE_SHARED = 2,
+	BLK_MQ_F_STACKING = 4,
+	BLK_MQ_F_TAG_HCTX_SHARED = 8,
+	BLK_MQ_F_BLOCKING = 32,
+	BLK_MQ_F_NO_SCHED = 64,
+	BLK_MQ_F_NO_SCHED_BY_DEFAULT = 128,
+	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
+	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
+	BLK_MQ_S_STOPPED = 0,
+	BLK_MQ_S_TAG_ACTIVE = 1,
+	BLK_MQ_S_SCHED_RESTART = 2,
+	BLK_MQ_S_INACTIVE = 3,
+	BLK_MQ_MAX_DEPTH = 10240,
+	BLK_MQ_CPU_WORK_BATCH = 8,
+};
+
+typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);
+
+typedef void (*btf_trace_block_rq_requeue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_complete)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_error)(void *, struct request *, blk_status_t, unsigned int);
+
+typedef void (*btf_trace_block_rq_insert)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_issue)(void *, struct request *);
+
+typedef void (*btf_trace_block_rq_merge)(void *, struct request *);
+
+typedef void (*btf_trace_block_io_start)(void *, struct request *);
+
+typedef void (*btf_trace_block_io_done)(void *, struct request *);
+
+typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);
+
+typedef void (*btf_trace_block_bio_bounce)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_backmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_frontmerge)(void *, struct bio *);
+
+typedef void (*btf_trace_block_bio_queue)(void *, struct bio *);
+
+typedef void (*btf_trace_block_getrq)(void *, struct bio *);
+
+typedef void (*btf_trace_block_plug)(void *, struct request_queue *);
+
+typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);
+
+typedef void (*btf_trace_block_split)(void *, struct bio *, unsigned int);
+
+typedef void (*btf_trace_block_bio_remap)(void *, struct bio *, dev_t, sector_t);
+
+typedef void (*btf_trace_block_rq_remap)(void *, struct request *, dev_t, sector_t);
+
+enum {
+	BLK_MQ_REQ_NOWAIT = 1,
+	BLK_MQ_REQ_RESERVED = 2,
+	BLK_MQ_REQ_PM = 4,
+};
+
+enum blkg_rwstat_type {
+	BLKG_RWSTAT_READ = 0,
+	BLKG_RWSTAT_WRITE = 1,
+	BLKG_RWSTAT_SYNC = 2,
+	BLKG_RWSTAT_ASYNC = 3,
+	BLKG_RWSTAT_DISCARD = 4,
+	BLKG_RWSTAT_NR = 5,
+	BLKG_RWSTAT_TOTAL = 5,
+};
+
+struct blk_plug_cb;
+
+typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
+
+struct blk_plug_cb {
+	struct list_head list;
+	blk_plug_cb_fn callback;
+	void *data;
+};
+
+struct trace_event_raw_block_buffer {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_requeue {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	unsigned short ioprio;
+	char rwbs[10];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_completion {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	unsigned short ioprio;
+	char rwbs[10];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	unsigned int bytes;
+	unsigned short ioprio;
+	char rwbs[10];
+	char comm[16];
+	u32 __data_loc_cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_complete {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	int error;
+	char rwbs[10];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	char rwbs[10];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_plug {
+	struct trace_entry ent;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_unplug {
+	struct trace_entry ent;
+	int nr_rq;
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_split {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	sector_t new_sector;
+	char rwbs[10];
+	char comm[16];
+	char __data[0];
+};
+
+struct trace_event_raw_block_bio_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	char rwbs[10];
+	char __data[0];
+};
+
+struct trace_event_raw_block_rq_remap {
+	struct trace_entry ent;
+	dev_t dev;
+	sector_t sector;
+	unsigned int nr_sector;
+	dev_t old_dev;
+	sector_t old_sector;
+	unsigned int nr_bios;
+	char rwbs[10];
+	char __data[0];
+};
+
+struct throtl_service_queue {
+	struct throtl_service_queue *parent_sq;
+	struct list_head queued[2];
+	unsigned int nr_queued[2];
+	struct rb_root_cached pending_tree;
+	unsigned int nr_pending;
+	unsigned long first_pending_disptime;
+	struct timer_list pending_timer;
+};
+
+struct throtl_grp;
+
+struct throtl_qnode {
+	struct list_head node;
+	struct bio_list bios;
+	struct throtl_grp *tg;
+};
+
+struct blkg_rwstat {
+	struct percpu_counter cpu_cnt[5];
+	atomic64_t aux_cnt[5];
+};
+
+struct throtl_grp {
+	struct blkg_policy_data pd;
+	struct rb_node rb_node;
+	struct throtl_data *td;
+	struct throtl_service_queue service_queue;
+	struct throtl_qnode qnode_on_self[2];
+	struct throtl_qnode qnode_on_parent[2];
+	unsigned long disptime;
+	unsigned int flags;
+	bool has_rules_bps[2];
+	bool has_rules_iops[2];
+	uint64_t bps[4];
+	uint64_t bps_conf[4];
+	unsigned int iops[4];
+	unsigned int iops_conf[4];
+	uint64_t bytes_disp[2];
+	unsigned int io_disp[2];
+	unsigned long last_low_overflow_time[2];
+	uint64_t last_bytes_disp[2];
+	unsigned int last_io_disp[2];
+	long long carryover_bytes[2];
+	int carryover_ios[2];
+	unsigned long last_check_time;
+	unsigned long latency_target;
+	unsigned long latency_target_conf;
+	unsigned long slice_start[2];
+	unsigned long slice_end[2];
+	unsigned long last_finish_time;
+	unsigned long checked_last_finish_time;
+	unsigned long avg_idletime;
+	unsigned long idletime_threshold;
+	unsigned long idletime_threshold_conf;
+	unsigned int bio_cnt;
+	unsigned int bad_bio_cnt;
+	unsigned long bio_cnt_reset_time;
+	struct blkg_rwstat stat_bytes;
+	struct blkg_rwstat stat_ios;
+};
+
+typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);
+
+typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);
+
+typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(struct gendisk *, struct blkcg *, gfp_t);
+
+typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);
+
+typedef void blkcg_pol_stat_pd_fn(struct blkg_policy_data *, struct seq_file *);
+
+struct blkcg_policy {
+	int plid;
+	struct cftype *dfl_cftypes;
+	struct cftype *legacy_cftypes;
+	blkcg_pol_alloc_cpd_fn *cpd_alloc_fn;
+	blkcg_pol_free_cpd_fn *cpd_free_fn;
+	blkcg_pol_alloc_pd_fn *pd_alloc_fn;
+	blkcg_pol_init_pd_fn *pd_init_fn;
+	blkcg_pol_online_pd_fn *pd_online_fn;
+	blkcg_pol_offline_pd_fn *pd_offline_fn;
+	blkcg_pol_free_pd_fn *pd_free_fn;
+	blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
+	blkcg_pol_stat_pd_fn *pd_stat_fn;
+};
+
+struct trace_event_data_offsets_block_buffer {};
+
+struct trace_event_data_offsets_block_rq_requeue {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq_completion {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_rq {
+	u32 cmd;
+};
+
+struct trace_event_data_offsets_block_bio_complete {};
+
+struct trace_event_data_offsets_block_bio {};
+
+struct trace_event_data_offsets_block_plug {};
+
+struct trace_event_data_offsets_block_unplug {};
+
+struct trace_event_data_offsets_block_split {};
+
+struct trace_event_data_offsets_block_bio_remap {};
+
+struct trace_event_data_offsets_block_rq_remap {};
+
+struct queue_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct request_queue *, char *);
+	ssize_t (*store)(struct request_queue *, const char *, size_t);
+};
+
+enum {
+	REQ_FSEQ_PREFLUSH = 1,
+	REQ_FSEQ_DATA = 2,
+	REQ_FSEQ_POSTFLUSH = 4,
+	REQ_FSEQ_DONE = 8,
+	REQ_FSEQ_ACTIONS = 7,
+	FLUSH_PENDING_TIMEOUT = 1250,
+};
+
+enum {
+	BLK_MQ_NO_TAG = 4294967295,
+	BLK_MQ_TAG_MIN = 1,
+	BLK_MQ_TAG_MAX = 4294967294,
+};
+
+enum hctx_type {
+	HCTX_TYPE_DEFAULT = 0,
+	HCTX_TYPE_READ = 1,
+	HCTX_TYPE_POLL = 2,
+	HCTX_MAX_TYPES = 3,
+};
+
+enum {
+	ICQ_EXITED = 4,
+	ICQ_DESTROYED = 8,
+};
+
+struct rq_map_data {
+	struct page **pages;
+	unsigned long offset;
+	unsigned short page_order;
+	unsigned short nr_entries;
+	bool null_mapped;
+	bool from_user;
+};
+
+struct bio_map_data {
+	bool is_our_pages: 1;
+	bool is_null_mapped: 1;
+	struct iov_iter iter;
+	struct iovec iov[0];
+};
+
+enum bio_merge_status {
+	BIO_MERGE_OK = 0,
+	BIO_MERGE_NONE = 1,
+	BIO_MERGE_FAILED = 2,
+};
+
+struct req_iterator {
+	struct bvec_iter iter;
+	struct bio *bio;
+};
+
+enum prep_dispatch {
+	PREP_DISPATCH_OK = 0,
+	PREP_DISPATCH_NO_TAG = 1,
+	PREP_DISPATCH_NO_BUDGET = 2,
+};
+
+struct blk_mq_qe_pair {
+	struct list_head node;
+	struct request_queue *q;
+	struct elevator_type *type;
+};
+
+typedef bool busy_tag_iter_fn(struct request *, void *);
+
+typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);
+
+struct flush_busy_ctx_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct list_head *list;
+};
+
+struct dispatch_rq_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request *rq;
+};
+
+struct blk_expired_data {
+	bool has_timedout_rq;
+	unsigned long next;
+	unsigned long timeout_start;
+};
+
+struct rq_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	bool has_rq;
+};
+
+struct mq_inflight {
+	struct block_device *part;
+	unsigned int inflight[2];
+};
+
+struct blk_rq_wait {
+	struct completion done;
+	blk_status_t ret;
+};
+
+enum {
+	BLK_MQ_UNIQUE_TAG_BITS = 16,
+	BLK_MQ_UNIQUE_TAG_MASK = 65535,
+};
+
+struct sbq_wait {
+	struct sbitmap_queue *sbq;
+	struct wait_queue_entry wait;
+};
+
+struct bt_iter_data {
+	struct blk_mq_hw_ctx *hctx;
+	struct request_queue *q;
+	busy_tag_iter_fn *fn;
+	void *data;
+	bool reserved;
+};
+
+struct bt_tags_iter_data {
+	struct blk_mq_tags *tags;
+	busy_tag_iter_fn *fn;
+	void *data;
+	unsigned int flags;
+};
+
+struct blk_rq_stat;
+
+struct blk_stat_callback {
+	struct list_head list;
+	struct timer_list timer;
+	struct blk_rq_stat __attribute__((btf_type_tag("percpu"))) *cpu_stat;
+	int (*bucket_fn)(const struct request *);
+	unsigned int buckets;
+	struct blk_rq_stat *stat;
+	void (*timer_fn)(struct blk_stat_callback *);
+	void *data;
+	struct callback_head rcu;
+};
+
+struct blk_rq_stat {
+	u64 mean;
+	u64 min;
+	u64 max;
+	u32 nr_samples;
+	u64 batch;
+};
+
+struct blk_queue_stats {
+	struct list_head callbacks;
+	spinlock_t lock;
+	int accounting;
+};
+
+struct blk_mq_hw_ctx_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_mq_hw_ctx *, char *);
+};
+
+typedef u32 compat_caddr_t;
+
+struct hd_geometry {
+	unsigned char heads;
+	unsigned char sectors;
+	unsigned short cylinders;
+	unsigned long start;
+};
+
+struct pr_keys {
+	u32 generation;
+	u32 num_keys;
+	u64 keys[0];
+};
+
+struct pr_held_reservation {
+	u64 key;
+	u32 generation;
+	enum pr_type type;
+};
+
+struct blkpg_ioctl_arg {
+	int op;
+	int flags;
+	int datalen;
+	void __attribute__((btf_type_tag("user"))) *data;
+};
+
+struct blkpg_partition {
+	long long start;
+	long long length;
+	int pno;
+	char devname[64];
+	char volname[64];
+};
+
+struct pr_preempt {
+	__u64 old_key;
+	__u64 new_key;
+	__u32 type;
+	__u32 flags;
+};
+
+struct pr_clear {
+	__u64 key;
+	__u32 flags;
+	__u32 __pad;
+};
+
+struct pr_reservation {
+	__u64 key;
+	__u32 type;
+	__u32 flags;
+};
+
+struct pr_registration {
+	__u64 old_key;
+	__u64 new_key;
+	__u32 flags;
+	__u32 __pad;
+};
+
+struct compat_hd_geometry {
+	unsigned char heads;
+	unsigned char sectors;
+	unsigned short cylinders;
+	u32 start;
+};
+
+struct compat_blkpg_ioctl_arg {
+	compat_int_t op;
+	compat_int_t flags;
+	compat_int_t datalen;
+	compat_caddr_t data;
+};
+
+struct badblocks {
+	struct device *dev;
+	int count;
+	int unacked_exist;
+	int shift;
+	u64 *page;
+	int changed;
+	seqlock_t lock;
+	sector_t sector;
+	sector_t size;
+};
+
+struct blk_major_name {
+	struct blk_major_name *next;
+	int major;
+	char name[16];
+	void (*probe)(dev_t);
+};
+
+enum {
+	GENHD_FL_REMOVABLE = 1,
+	GENHD_FL_HIDDEN = 2,
+	GENHD_FL_NO_PART = 4,
+};
+
+struct klist;
+
+struct klist_node;
+
+struct klist_iter {
+	struct klist *i_klist;
+	struct klist_node *i_cur;
+};
+
+struct subsys_private;
+
+struct class_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+	struct subsys_private *sp;
+};
+
+struct klist {
+	spinlock_t k_lock;
+	struct list_head k_list;
+	void (*get)(struct klist_node *);
+	void (*put)(struct klist_node *);
+};
+
+struct klist_node {
+	void *n_klist;
+	struct list_head n_node;
+	struct kref n_ref;
+};
+
+enum {
+	IOPRIO_WHO_PROCESS = 1,
+	IOPRIO_WHO_PGRP = 2,
+	IOPRIO_WHO_USER = 3,
+};
+
+struct parsed_partitions {
+	struct gendisk *disk;
+	char name[32];
+	struct {
+		sector_t from;
+		sector_t size;
+		int flags;
+		bool has_info;
+		struct partition_meta_info info;
+	} *parts;
+	int next;
+	int limit;
+	bool access_beyond_eod;
+	char *pp_buf;
+};
+
+typedef struct {
+	struct folio *v;
+} Sector;
+
+enum msdos_sys_ind {
+	DOS_EXTENDED_PARTITION = 5,
+	LINUX_EXTENDED_PARTITION = 133,
+	WIN98_EXTENDED_PARTITION = 15,
+	LINUX_DATA_PARTITION = 131,
+	LINUX_LVM_PARTITION = 142,
+	LINUX_RAID_PARTITION = 253,
+	SOLARIS_X86_PARTITION = 130,
+	NEW_SOLARIS_X86_PARTITION = 191,
+	DM6_AUX1PARTITION = 81,
+	DM6_AUX3PARTITION = 83,
+	DM6_PARTITION = 84,
+	EZD_PARTITION = 85,
+	FREEBSD_PARTITION = 165,
+	OPENBSD_PARTITION = 166,
+	NETBSD_PARTITION = 169,
+	BSDI_PARTITION = 183,
+	MINIX_PARTITION = 129,
+	UNIXWARE_PARTITION = 99,
+};
+
+struct msdos_partition {
+	u8 boot_ind;
+	u8 head;
+	u8 sector;
+	u8 cyl;
+	u8 sys_ind;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_cyl;
+	__le32 start_sect;
+	__le32 nr_sects;
+};
+
+struct _gpt_header {
+	__le64 signature;
+	__le32 revision;
+	__le32 header_size;
+	__le32 header_crc32;
+	__le32 reserved1;
+	__le64 my_lba;
+	__le64 alternate_lba;
+	__le64 first_usable_lba;
+	__le64 last_usable_lba;
+	efi_guid_t disk_guid;
+	__le64 partition_entry_lba;
+	__le32 num_partition_entries;
+	__le32 sizeof_partition_entry;
+	__le32 partition_entry_array_crc32;
+} __attribute__((packed));
+
+typedef struct _gpt_header gpt_header;
+
+struct _gpt_entry_attributes {
+	u64 required_to_function: 1;
+	u64 reserved: 47;
+	u64 type_guid_specific: 16;
+};
+
+typedef struct _gpt_entry_attributes gpt_entry_attributes;
+
+struct _gpt_entry {
+	efi_guid_t partition_type_guid;
+	efi_guid_t unique_partition_guid;
+	__le64 starting_lba;
+	__le64 ending_lba;
+	gpt_entry_attributes attributes;
+	__le16 partition_name[36];
+};
+
+typedef struct _gpt_entry gpt_entry;
+
+struct _gpt_mbr_record {
+	u8 boot_indicator;
+	u8 start_head;
+	u8 start_sector;
+	u8 start_track;
+	u8 os_type;
+	u8 end_head;
+	u8 end_sector;
+	u8 end_track;
+	__le32 starting_lba;
+	__le32 size_in_lba;
+};
+
+typedef struct _gpt_mbr_record gpt_mbr_record;
+
+struct _legacy_mbr {
+	u8 boot_code[440];
+	__le32 unique_mbr_signature;
+	__le16 unknown;
+	gpt_mbr_record partition_record[4];
+	__le16 signature;
+} __attribute__((packed));
+
+typedef struct _legacy_mbr legacy_mbr;
+
+struct rq_wait;
+
+typedef bool acquire_inflight_cb_t(struct rq_wait *, void *);
+
+struct rq_qos_wait_data {
+	struct wait_queue_entry wq;
+	struct task_struct *task;
+	struct rq_wait *rqw;
+	acquire_inflight_cb_t *cb;
+	void *private_data;
+	bool got_token;
+};
+
+struct rq_wait {
+	wait_queue_head_t wait;
+	atomic_t inflight;
+};
+
+struct rq_depth {
+	unsigned int max_depth;
+	int scale_step;
+	bool scaled_max;
+	unsigned int queue_depth;
+	unsigned int default_depth;
+};
+
+typedef void cleanup_cb_t(struct rq_wait *, void *);
+
+struct disk_events {
+	struct list_head node;
+	struct gendisk *disk;
+	spinlock_t lock;
+	struct mutex block_mutex;
+	int block;
+	unsigned int pending;
+	unsigned int clearing;
+	long poll_msecs;
+	struct delayed_work dwork;
+};
+
+struct blk_ia_range_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_independent_access_range *, char *);
+};
+
+struct uuidcmp {
+	const char *uuid;
+	int len;
+};
+
+struct sg_io_v4;
+
+typedef int bsg_sg_io_fn(struct request_queue *, struct sg_io_v4 *, bool, unsigned int);
+
+struct bsg_device {
+	struct request_queue *queue;
+	struct device device;
+	struct cdev cdev;
+	int max_queue;
+	unsigned int timeout;
+	unsigned int reserved_size;
+	bsg_sg_io_fn *sg_io_fn;
+};
+
+struct sg_io_v4 {
+	__s32 guard;
+	__u32 protocol;
+	__u32 subprotocol;
+	__u32 request_len;
+	__u64 request;
+	__u64 request_tag;
+	__u32 request_attr;
+	__u32 request_priority;
+	__u32 request_extra;
+	__u32 max_response_len;
+	__u64 response;
+	__u32 dout_iovec_count;
+	__u32 dout_xfer_len;
+	__u32 din_iovec_count;
+	__u32 din_xfer_len;
+	__u64 dout_xferp;
+	__u64 din_xferp;
+	__u32 timeout;
+	__u32 flags;
+	__u64 usr_ptr;
+	__u32 spare_in;
+	__u32 driver_status;
+	__u32 transport_status;
+	__u32 device_status;
+	__u32 retry_delay;
+	__u32 info;
+	__u32 duration;
+	__u32 response_len;
+	__s32 din_resid;
+	__s32 dout_resid;
+	__u64 generated_tag;
+	__u32 spare_out;
+	__u32 padding;
+};
+
+struct bsg_job;
+
+typedef int bsg_job_fn(struct bsg_job *);
+
+typedef enum blk_eh_timer_return bsg_timeout_fn(struct request *);
+
+struct bsg_set {
+	struct blk_mq_tag_set tag_set;
+	struct bsg_device *bd;
+	bsg_job_fn *job_fn;
+	bsg_timeout_fn *timeout_fn;
+};
+
+struct bsg_buffer {
+	unsigned int payload_len;
+	int sg_cnt;
+	struct scatterlist *sg_list;
+};
+
+struct bsg_job {
+	struct device *dev;
+	struct kref kref;
+	unsigned int timeout;
+	void *request;
+	void *reply;
+	unsigned int request_len;
+	unsigned int reply_len;
+	struct bsg_buffer request_payload;
+	struct bsg_buffer reply_payload;
+	int result;
+	unsigned int reply_payload_rcv_len;
+	struct request *bidi_rq;
+	struct bio *bidi_bio;
+	void *dd_data;
+};
+
+enum blkg_iostat_type {
+	BLKG_IOSTAT_READ = 0,
+	BLKG_IOSTAT_WRITE = 1,
+	BLKG_IOSTAT_DISCARD = 2,
+	BLKG_IOSTAT_NR = 3,
+};
+
+struct blkg_conf_ctx {
+	char *input;
+	char *body;
+	struct block_device *bdev;
+	struct blkcg_gq *blkg;
+};
+
+struct blkg_rwstat_sample {
+	u64 cnt[5];
+};
+
+struct latency_bucket {
+	unsigned long total_latency;
+	int samples;
+};
+
+struct avg_latency_bucket {
+	unsigned long latency;
+	bool valid;
+};
+
+struct throtl_data {
+	struct throtl_service_queue service_queue;
+	struct request_queue *queue;
+	unsigned int nr_queued[2];
+	unsigned int throtl_slice;
+	struct work_struct dispatch_work;
+	unsigned int limit_index;
+	bool limit_valid[2];
+	unsigned long low_upgrade_time;
+	unsigned long low_downgrade_time;
+	unsigned int scale;
+	struct latency_bucket tmp_buckets[18];
+	struct avg_latency_bucket avg_buckets[18];
+	struct latency_bucket __attribute__((btf_type_tag("percpu"))) *latency_buckets[2];
+	unsigned long last_calculate_time;
+	unsigned long filtered_latency;
+	bool track_bio_latency;
+};
+
+enum tg_state_flags {
+	THROTL_TG_PENDING = 1,
+	THROTL_TG_WAS_EMPTY = 2,
+	THROTL_TG_CANCELING = 4,
+};
+
+enum {
+	LIMIT_LOW = 0,
+	LIMIT_MAX = 1,
+	LIMIT_CNT = 2,
+};
+
+enum prio_policy {
+	POLICY_NO_CHANGE = 0,
+	POLICY_PROMOTE_TO_RT = 1,
+	POLICY_RESTRICT_TO_BE = 2,
+	POLICY_ALL_TO_IDLE = 3,
+	POLICY_NONE_TO_RT = 4,
+};
+
+struct ioprio_blkcg {
+	struct blkcg_policy_data cpd;
+	enum prio_policy prio_policy;
+};
+
+struct ioprio_blkg {
+	struct blkg_policy_data pd;
+};
+
+struct ioc_gq;
+
+struct ioc_now;
+
+typedef void (*btf_trace_iocost_iocg_activate)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
+struct iocg_stat {
+	u64 usage_us;
+	u64 wait_us;
+	u64 indebt_us;
+	u64 indelay_us;
+};
+
+struct ioc;
+
+struct iocg_pcpu_stat;
+
+struct ioc_gq {
+	struct blkg_policy_data pd;
+	struct ioc *ioc;
+	u32 cfg_weight;
+	u32 weight;
+	u32 active;
+	u32 inuse;
+	u32 last_inuse;
+	s64 saved_margin;
+	sector_t cursor;
+	atomic64_t vtime;
+	atomic64_t done_vtime;
+	u64 abs_vdebt;
+	u64 delay;
+	u64 delay_at;
+	atomic64_t active_period;
+	struct list_head active_list;
+	u64 child_active_sum;
+	u64 child_inuse_sum;
+	u64 child_adjusted_sum;
+	int hweight_gen;
+	u32 hweight_active;
+	u32 hweight_inuse;
+	u32 hweight_donating;
+	u32 hweight_after_donation;
+	struct list_head walk_list;
+	struct list_head surplus_list;
+	struct wait_queue_head waitq;
+	struct hrtimer waitq_timer;
+	u64 activated_at;
+	struct iocg_pcpu_stat __attribute__((btf_type_tag("percpu"))) *pcpu_stat;
+	struct iocg_stat stat;
+	struct iocg_stat last_stat;
+	u64 last_stat_abs_vusage;
+	u64 usage_delta_us;
+	u64 wait_since;
+	u64 indebt_since;
+	u64 indelay_since;
+	int level;
+	struct ioc_gq *ancestors[0];
+};
+
+struct ioc_params {
+	u32 qos[6];
+	u64 i_lcoefs[6];
+	u64 lcoefs[6];
+	u32 too_fast_vrate_pct;
+	u32 too_slow_vrate_pct;
+};
+
+struct ioc_margins {
+	s64 min;
+	s64 low;
+	s64 target;
+};
+
+enum ioc_running {
+	IOC_IDLE = 0,
+	IOC_RUNNING = 1,
+	IOC_STOP = 2,
+};
+
+struct ioc_pcpu_stat;
+
+struct ioc {
+	struct rq_qos rqos;
+	bool enabled;
+	struct ioc_params params;
+	struct ioc_margins margins;
+	u32 period_us;
+	u32 timer_slack_ns;
+	u64 vrate_min;
+	u64 vrate_max;
+	spinlock_t lock;
+	struct timer_list timer;
+	struct list_head active_iocgs;
+	struct ioc_pcpu_stat __attribute__((btf_type_tag("percpu"))) *pcpu_stat;
+	enum ioc_running running;
+	atomic64_t vtime_rate;
+	u64 vtime_base_rate;
+	s64 vtime_err;
+	seqcount_spinlock_t period_seqcount;
+	u64 period_at;
+	u64 period_at_vtime;
+	atomic64_t cur_period;
+	int busy_level;
+	bool weights_updated;
+	atomic_t hweight_gen;
+	u64 dfgv_period_at;
+	u64 dfgv_period_rem;
+	u64 dfgv_usage_us_sum;
+	u64 autop_too_fast_at;
+	u64 autop_too_slow_at;
+	int autop_idx;
+	bool user_qos_params: 1;
+	bool user_cost_model: 1;
+};
+
+struct ioc_missed {
+	local_t nr_met;
+	local_t nr_missed;
+	u32 last_met;
+	u32 last_missed;
+};
+
+struct ioc_pcpu_stat {
+	struct ioc_missed missed[2];
+	local64_t rq_wait_ns;
+	u64 last_rq_wait_ns;
+};
+
+struct iocg_pcpu_stat {
+	local64_t abs_vusage;
+};
+
+struct ioc_now {
+	u64 now_ns;
+	u64 now;
+	u64 vnow;
+};
+
+typedef void (*btf_trace_iocost_iocg_idle)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_shortage)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_transfer)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_inuse_adjust)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);
+
+typedef void (*btf_trace_iocost_ioc_vrate_adj)(void *, struct ioc *, u64, u32 *, u32, int, int);
+
+typedef void (*btf_trace_iocost_iocg_forgive_debt)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u64, u64, u64, u64);
+
+enum {
+	MILLION = 1000000,
+	MIN_PERIOD = 1000,
+	MAX_PERIOD = 1000000,
+	MARGIN_MIN_PCT = 10,
+	MARGIN_LOW_PCT = 20,
+	MARGIN_TARGET_PCT = 50,
+	INUSE_ADJ_STEP_PCT = 25,
+	TIMER_SLACK_PCT = 1,
+	WEIGHT_ONE = 65536,
+};
+
+enum {
+	QOS_RPPM = 0,
+	QOS_RLAT = 1,
+	QOS_WPPM = 2,
+	QOS_WLAT = 3,
+	QOS_MIN = 4,
+	QOS_MAX = 5,
+	NR_QOS_PARAMS = 6,
+};
+
+enum {
+	QOS_ENABLE = 0,
+	QOS_CTRL = 1,
+	NR_QOS_CTRL_PARAMS = 2,
+};
+
+enum {
+	VTIME_PER_SEC_SHIFT = 37ULL,
+	VTIME_PER_SEC = 137438953472ULL,
+	VTIME_PER_USEC = 137438ULL,
+	VTIME_PER_NSEC = 137ULL,
+	VRATE_MIN_PPM = 10000ULL,
+	VRATE_MAX_PPM = 100000000ULL,
+	VRATE_MIN = 1374ULL,
+	VRATE_CLAMP_ADJ_PCT = 4ULL,
+	AUTOP_CYCLE_NSEC = 10000000000ULL,
+};
+
+enum {
+	AUTOP_INVALID = 0,
+	AUTOP_HDD = 1,
+	AUTOP_SSD_QD1 = 2,
+	AUTOP_SSD_DFL = 3,
+	AUTOP_SSD_FAST = 4,
+};
+
+enum {
+	RQ_WAIT_BUSY_PCT = 5,
+	UNBUSY_THR_PCT = 75,
+	MIN_DELAY_THR_PCT = 500,
+	MAX_DELAY_THR_PCT = 25000,
+	MIN_DELAY = 250,
+	MAX_DELAY = 250000,
+	DFGV_USAGE_PCT = 50,
+	DFGV_PERIOD = 100000,
+	MAX_LAGGING_PERIODS = 10,
+	IOC_PAGE_SHIFT = 12,
+	IOC_PAGE_SIZE = 4096,
+	IOC_SECT_TO_PAGE_SHIFT = 3,
+	LCOEF_RANDIO_PAGES = 4096,
+};
+
+enum {
+	I_LCOEF_RBPS = 0,
+	I_LCOEF_RSEQIOPS = 1,
+	I_LCOEF_RRANDIOPS = 2,
+	I_LCOEF_WBPS = 3,
+	I_LCOEF_WSEQIOPS = 4,
+	I_LCOEF_WRANDIOPS = 5,
+	NR_I_LCOEFS = 6,
+};
+
+enum {
+	LCOEF_RPAGE = 0,
+	LCOEF_RSEQIO = 1,
+	LCOEF_RRANDIO = 2,
+	LCOEF_WPAGE = 3,
+	LCOEF_WSEQIO = 4,
+	LCOEF_WRANDIO = 5,
+	NR_LCOEFS = 6,
+};
+
+enum {
+	COST_CTRL = 0,
+	COST_MODEL = 1,
+	NR_COST_CTRL_PARAMS = 2,
+};
+
+struct trace_event_raw_iocost_iocg_state {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u64 vnow;
+	u64 vrate;
+	u64 last_period;
+	u64 cur_period;
+	u64 vtime;
+	u32 weight;
+	u32 inuse;
+	u64 hweight_active;
+	u64 hweight_inuse;
+	char __data[0];
+};
+
+struct trace_event_raw_iocg_inuse_update {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u32 old_inuse;
+	u32 new_inuse;
+	u64 old_hweight_inuse;
+	u64 new_hweight_inuse;
+	char __data[0];
+};
+
+struct trace_event_raw_iocost_ioc_vrate_adj {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u64 old_vrate;
+	u64 new_vrate;
+	int busy_level;
+	u32 read_missed_ppm;
+	u32 write_missed_ppm;
+	u32 rq_wait_pct;
+	int nr_lagging;
+	int nr_shortages;
+	char __data[0];
+};
+
+struct trace_event_raw_iocost_iocg_forgive_debt {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	u32 __data_loc_cgroup;
+	u64 now;
+	u64 vnow;
+	u32 usage_pct;
+	u64 old_debt;
+	u64 new_debt;
+	u64 old_delay;
+	u64 new_delay;
+	char __data[0];
+};
+
+struct ioc_cgrp {
+	struct blkcg_policy_data cpd;
+	unsigned int dfl_weight;
+};
+
+struct iocg_wait {
+	struct wait_queue_entry wait;
+	struct bio *bio;
+	u64 abs_cost;
+	bool committed;
+};
+
+struct trace_event_data_offsets_iocost_ioc_vrate_adj {
+	u32 devname;
+};
+
+struct trace_event_data_offsets_iocost_iocg_state {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct trace_event_data_offsets_iocg_inuse_update {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct trace_event_data_offsets_iocost_iocg_forgive_debt {
+	u32 devname;
+	u32 cgroup;
+};
+
+struct iocg_wake_ctx {
+	struct ioc_gq *iocg;
+	u32 hw_inuse;
+	s64 vbudget;
+};
+
+enum dd_prio {
+	DD_RT_PRIO = 0,
+	DD_BE_PRIO = 1,
+	DD_IDLE_PRIO = 2,
+	DD_PRIO_MAX = 2,
+};
+
+enum dd_data_dir {
+	DD_READ = 0,
+	DD_WRITE = 1,
+};
+
+struct io_stats_per_prio {
+	uint32_t inserted;
+	uint32_t merged;
+	uint32_t dispatched;
+	atomic_t completed;
+};
+
+struct dd_per_prio {
+	struct list_head dispatch;
+	struct rb_root sort_list[2];
+	struct list_head fifo_list[2];
+	sector_t latest_pos[2];
+	struct io_stats_per_prio stats;
+};
+
+struct deadline_data {
+	struct dd_per_prio per_prio[3];
+	enum dd_data_dir last_dir;
+	unsigned int batching;
+	unsigned int starved;
+	int fifo_expire[2];
+	int fifo_batch;
+	int writes_starved;
+	int front_merges;
+	u32 async_depth;
+	int prio_aging_expire;
+	spinlock_t lock;
+	spinlock_t zone_lock;
+};
+
+typedef void (*btf_trace_kyber_latency)(void *, dev_t, const char *, const char *, unsigned int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_kyber_adjust)(void *, dev_t, const char *, unsigned int);
+
+typedef void (*btf_trace_kyber_throttled)(void *, dev_t, const char *);
+
+enum {
+	KYBER_READ = 0,
+	KYBER_WRITE = 1,
+	KYBER_DISCARD = 2,
+	KYBER_OTHER = 3,
+	KYBER_NUM_DOMAINS = 4,
+};
+
+enum {
+	KYBER_TOTAL_LATENCY = 0,
+	KYBER_IO_LATENCY = 1,
+};
+
+enum {
+	KYBER_LATENCY_SHIFT = 2,
+	KYBER_GOOD_BUCKETS = 4,
+	KYBER_LATENCY_BUCKETS = 8,
+};
+
+enum {
+	KYBER_ASYNC_PERCENT = 75,
+};
+
+struct trace_event_raw_kyber_latency {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char type[8];
+	u8 percentile;
+	u8 numerator;
+	u8 denominator;
+	unsigned int samples;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_adjust {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	unsigned int depth;
+	char __data[0];
+};
+
+struct trace_event_raw_kyber_throttled {
+	struct trace_entry ent;
+	dev_t dev;
+	char domain[16];
+	char __data[0];
+};
+
+struct kyber_cpu_latency {
+	atomic_t buckets[48];
+};
+
+struct kyber_queue_data {
+	struct request_queue *q;
+	dev_t dev;
+	struct sbitmap_queue domain_tokens[4];
+	unsigned int async_depth;
+	struct kyber_cpu_latency __attribute__((btf_type_tag("percpu"))) *cpu_latency;
+	struct timer_list timer;
+	unsigned int latency_buckets[48];
+	unsigned long latency_timeout[3];
+	int domain_p99[3];
+	u64 latency_targets[3];
+};
+
+struct kyber_ctx_queue {
+	spinlock_t lock;
+	struct list_head rq_list[4];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct kyber_hctx_data {
+	spinlock_t lock;
+	struct list_head rqs[4];
+	unsigned int cur_domain;
+	unsigned int batching;
+	struct kyber_ctx_queue *kcqs;
+	struct sbitmap kcq_map[4];
+	struct sbq_wait domain_wait[4];
+	struct sbq_wait_state *domain_ws[4];
+	atomic_t wait_index[4];
+};
+
+struct flush_kcq_data {
+	struct kyber_hctx_data *khd;
+	unsigned int sched_domain;
+	struct list_head *list;
+};
+
+struct trace_event_data_offsets_kyber_latency {};
+
+struct trace_event_data_offsets_kyber_adjust {};
+
+struct trace_event_data_offsets_kyber_throttled {};
+
+enum bfqq_state_flags {
+	BFQQF_just_created = 0,
+	BFQQF_busy = 1,
+	BFQQF_wait_request = 2,
+	BFQQF_non_blocking_wait_rq = 3,
+	BFQQF_fifo_expire = 4,
+	BFQQF_has_short_ttime = 5,
+	BFQQF_sync = 6,
+	BFQQF_IO_bound = 7,
+	BFQQF_in_large_burst = 8,
+	BFQQF_softrt_update = 9,
+	BFQQF_coop = 10,
+	BFQQF_split_coop = 11,
+};
+
+enum bfqq_expiration {
+	BFQQE_TOO_IDLE = 0,
+	BFQQE_BUDGET_TIMEOUT = 1,
+	BFQQE_BUDGET_EXHAUSTED = 2,
+	BFQQE_NO_MORE_REQUESTS = 3,
+	BFQQE_PREEMPTED = 4,
+};
+
+struct bfq_weight_counter {
+	unsigned int weight;
+	unsigned int num_active;
+	struct rb_node weights_node;
+};
+
+struct bfq_sched_data;
+
+struct bfq_queue;
+
+struct bfq_entity {
+	struct rb_node rb_node;
+	bool on_st_or_in_serv;
+	u64 start;
+	u64 finish;
+	struct rb_root *tree;
+	u64 min_start;
+	int service;
+	int budget;
+	int allocated;
+	int dev_weight;
+	int weight;
+	int new_weight;
+	int orig_weight;
+	struct bfq_entity *parent;
+	struct bfq_sched_data *my_sched_data;
+	struct bfq_sched_data *sched_data;
+	int prio_changed;
+	bool in_groups_with_pending_reqs;
+	struct bfq_queue *last_bfqq_created;
+};
+
+struct bfq_ttime {
+	u64 last_end_request;
+	u64 ttime_total;
+	unsigned long ttime_samples;
+	u64 ttime_mean;
+};
+
+struct bfq_data;
+
+struct bfq_io_cq;
+
+struct bfq_queue {
+	int ref;
+	int stable_ref;
+	struct bfq_data *bfqd;
+	unsigned short ioprio;
+	unsigned short ioprio_class;
+	unsigned short new_ioprio;
+	unsigned short new_ioprio_class;
+	u64 last_serv_time_ns;
+	unsigned int inject_limit;
+	unsigned long decrease_time_jif;
+	struct bfq_queue *new_bfqq;
+	struct rb_node pos_node;
+	struct rb_root *pos_root;
+	struct rb_root sort_list;
+	struct request *next_rq;
+	int queued[2];
+	int meta_pending;
+	struct list_head fifo;
+	struct bfq_entity entity;
+	struct bfq_weight_counter *weight_counter;
+	int max_budget;
+	unsigned long budget_timeout;
+	int dispatched;
+	unsigned long flags;
+	struct list_head bfqq_list;
+	struct bfq_ttime ttime;
+	u64 io_start_time;
+	u64 tot_idle_time;
+	u32 seek_history;
+	struct hlist_node burst_list_node;
+	sector_t last_request_pos;
+	unsigned int requests_within_timer;
+	pid_t pid;
+	struct bfq_io_cq *bic;
+	unsigned long wr_cur_max_time;
+	unsigned long soft_rt_next_start;
+	unsigned long last_wr_start_finish;
+	unsigned int wr_coeff;
+	unsigned long last_idle_bklogged;
+	unsigned long service_from_backlogged;
+	unsigned long service_from_wr;
+	unsigned long wr_start_at_switch_to_srt;
+	unsigned long split_time;
+	unsigned long first_IO_time;
+	unsigned long creation_time;
+	struct bfq_queue *waker_bfqq;
+	struct bfq_queue *tentative_waker_bfqq;
+	unsigned int num_waker_detections;
+	u64 waker_detection_started;
+	struct hlist_node woken_list_node;
+	struct hlist_head woken_list;
+	unsigned int actuator_idx;
+};
+
+struct bfq_group;
+
+struct bfq_data {
+	struct request_queue *queue;
+	struct list_head dispatch;
+	struct bfq_group *root_group;
+	struct rb_root_cached queue_weights_tree;
+	unsigned int num_groups_with_pending_reqs;
+	unsigned int busy_queues[3];
+	int wr_busy_queues;
+	int queued;
+	int tot_rq_in_driver;
+	int rq_in_driver[8];
+	bool nonrot_with_queueing;
+	int max_rq_in_driver;
+	int hw_tag_samples;
+	int hw_tag;
+	int budgets_assigned;
+	struct hrtimer idle_slice_timer;
+	struct bfq_queue *in_service_queue;
+	sector_t last_position;
+	sector_t in_serv_last_pos;
+	u64 last_completion;
+	struct bfq_queue *last_completed_rq_bfqq;
+	struct bfq_queue *last_bfqq_created;
+	u64 last_empty_occupied_ns;
+	bool wait_dispatch;
+	struct request *waited_rq;
+	bool rqs_injected;
+	u64 first_dispatch;
+	u64 last_dispatch;
+	ktime_t last_budget_start;
+	ktime_t last_idling_start;
+	unsigned long last_idling_start_jiffies;
+	int peak_rate_samples;
+	u32 sequential_samples;
+	u64 tot_sectors_dispatched;
+	u32 last_rq_max_size;
+	u64 delta_from_first;
+	u32 peak_rate;
+	int bfq_max_budget;
+	struct list_head active_list[8];
+	struct list_head idle_list;
+	u64 bfq_fifo_expire[2];
+	unsigned int bfq_back_penalty;
+	unsigned int bfq_back_max;
+	u32 bfq_slice_idle;
+	int bfq_user_max_budget;
+	unsigned int bfq_timeout;
+	bool strict_guarantees;
+	unsigned long last_ins_in_burst;
+	unsigned long bfq_burst_interval;
+	int burst_size;
+	struct bfq_entity *burst_parent_entity;
+	unsigned long bfq_large_burst_thresh;
+	bool large_burst;
+	struct hlist_head burst_list;
+	bool low_latency;
+	unsigned int bfq_wr_coeff;
+	unsigned int bfq_wr_rt_max_time;
+	unsigned int bfq_wr_min_idle_time;
+	unsigned long bfq_wr_min_inter_arr_async;
+	unsigned int bfq_wr_max_softrt_rate;
+	u64 rate_dur_prod;
+	struct bfq_queue oom_bfqq;
+	spinlock_t lock;
+	struct bfq_io_cq *bio_bic;
+	struct bfq_queue *bio_bfqq;
+	unsigned int word_depths[4];
+	unsigned int full_depth_shift;
+	unsigned int num_actuators;
+	sector_t sector[8];
+	sector_t nr_sectors[8];
+	struct blk_independent_access_range ia_ranges[8];
+	unsigned int actuator_load_threshold;
+};
+
+struct bfq_service_tree {
+	struct rb_root active;
+	struct rb_root idle;
+	struct bfq_entity *first_idle;
+	struct bfq_entity *last_idle;
+	u64 vtime;
+	unsigned long wsum;
+};
+
+struct bfq_sched_data {
+	struct bfq_entity *in_service_entity;
+	struct bfq_entity *next_in_service;
+	struct bfq_service_tree service_tree[3];
+	unsigned long bfq_class_idle_last_service;
+};
+
+struct bfqg_stats {
+	struct blkg_rwstat bytes;
+	struct blkg_rwstat ios;
+};
+
+struct bfq_group {
+	struct blkg_policy_data pd;
+	char blkg_path[128];
+	refcount_t ref;
+	struct bfq_entity entity;
+	struct bfq_sched_data sched_data;
+	struct bfq_data *bfqd;
+	struct bfq_queue *async_bfqq[128];
+	struct bfq_queue *async_idle_bfqq[8];
+	struct bfq_entity *my_entity;
+	int active_entities;
+	int num_queues_with_pending_reqs;
+	struct rb_root rq_pos_tree;
+	struct bfqg_stats stats;
+};
+
+struct bfq_iocq_bfqq_data {
+	bool saved_has_short_ttime;
+	bool saved_IO_bound;
+	u64 saved_io_start_time;
+	u64 saved_tot_idle_time;
+	bool saved_in_large_burst;
+	bool was_in_burst_list;
+	unsigned int saved_weight;
+	unsigned long saved_wr_coeff;
+	unsigned long saved_last_wr_start_finish;
+	unsigned long saved_service_from_wr;
+	unsigned long saved_wr_start_at_switch_to_srt;
+	unsigned int saved_wr_cur_max_time;
+	struct bfq_ttime saved_ttime;
+	u64 saved_last_serv_time_ns;
+	unsigned int saved_inject_limit;
+	unsigned long saved_decrease_time_jif;
+	struct bfq_queue *stable_merge_bfqq;
+	bool stably_merged;
+};
+
+struct bfq_io_cq {
+	struct io_cq icq;
+	struct bfq_queue *bfqq[16];
+	int ioprio;
+	uint64_t blkcg_serial_nr;
+	struct bfq_iocq_bfqq_data bfqq_data[8];
+	unsigned int requests;
+};
+
+struct bfq_group_data {
+	struct blkcg_policy_data pd;
+	unsigned int weight;
+};
+
+enum blk_zone_report_flags {
+	BLK_ZONE_REP_CAPACITY = 1,
+};
+
+struct zone_report_args {
+	struct blk_zone __attribute__((btf_type_tag("user"))) *zones;
+};
+
+struct blk_zone_report {
+	__u64 sector;
+	__u32 nr_zones;
+	__u32 flags;
+	struct blk_zone zones[0];
+};
+
+struct blk_zone_range {
+	__u64 sector;
+	__u64 nr_sectors;
+};
+
+struct blk_revalidate_zone_args {
+	struct gendisk *disk;
+	unsigned long *conv_zones_bitmap;
+	unsigned long *seq_zones_wlock;
+	unsigned int nr_zones;
+	sector_t zone_sectors;
+	sector_t sector;
+};
+
+typedef void (*btf_trace_wbt_stat)(void *, struct backing_dev_info *, struct blk_rq_stat *);
+
+typedef void (*btf_trace_wbt_lat)(void *, struct backing_dev_info *, unsigned long);
+
+typedef void (*btf_trace_wbt_step)(void *, struct backing_dev_info *, const char *, int, unsigned long, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_wbt_timer)(void *, struct backing_dev_info *, unsigned int, int, unsigned int);
+
+enum {
+	WBT_STATE_ON_DEFAULT = 1,
+	WBT_STATE_ON_MANUAL = 2,
+	WBT_STATE_OFF_DEFAULT = 3,
+	WBT_STATE_OFF_MANUAL = 4,
+};
+
+enum {
+	WBT_RWQ_BG = 0,
+	WBT_RWQ_KSWAPD = 1,
+	WBT_RWQ_DISCARD = 2,
+	WBT_NUM_RWQ = 3,
+};
+
+enum {
+	RWB_DEF_DEPTH = 16,
+	RWB_WINDOW_NSEC = 100000000,
+	RWB_MIN_WRITE_SAMPLES = 3,
+	RWB_UNKNOWN_BUMP = 5,
+};
+
+enum {
+	LAT_OK = 1,
+	LAT_UNKNOWN = 2,
+	LAT_UNKNOWN_WRITES = 3,
+	LAT_EXCEEDED = 4,
+};
+
+enum wbt_flags {
+	WBT_TRACKED = 1,
+	WBT_READ = 2,
+	WBT_KSWAPD = 4,
+	WBT_DISCARD = 8,
+	WBT_NR_BITS = 4,
+};
+
+struct trace_event_raw_wbt_stat {
+	struct trace_entry ent;
+	char name[32];
+	s64 rmean;
+	u64 rmin;
+	u64 rmax;
+	s64 rnr_samples;
+	s64 rtime;
+	s64 wmean;
+	u64 wmin;
+	u64 wmax;
+	s64 wnr_samples;
+	s64 wtime;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_lat {
+	struct trace_entry ent;
+	char name[32];
+	unsigned long lat;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_step {
+	struct trace_entry ent;
+	char name[32];
+	const char *msg;
+	int step;
+	unsigned long window;
+	unsigned int bg;
+	unsigned int normal;
+	unsigned int max;
+	char __data[0];
+};
+
+struct trace_event_raw_wbt_timer {
+	struct trace_entry ent;
+	char name[32];
+	unsigned int status;
+	int step;
+	unsigned int inflight;
+	char __data[0];
+};
+
+struct rq_wb {
+	unsigned int wb_background;
+	unsigned int wb_normal;
+	short enable_state;
+	unsigned int unknown_cnt;
+	u64 win_nsec;
+	u64 cur_win_nsec;
+	struct blk_stat_callback *cb;
+	u64 sync_issue;
+	void *sync_cookie;
+	unsigned int wc;
+	unsigned long last_issue;
+	unsigned long last_comp;
+	unsigned long min_lat_nsec;
+	struct rq_qos rqos;
+	struct rq_wait rq_wait[3];
+	struct rq_depth rq_depth;
+};
+
+struct wbt_wait_data {
+	struct rq_wb *rwb;
+	enum wbt_flags wb_acct;
+	blk_opf_t opf;
+};
+
+struct trace_event_data_offsets_wbt_stat {};
+
+struct trace_event_data_offsets_wbt_lat {};
+
+struct trace_event_data_offsets_wbt_step {};
+
+struct trace_event_data_offsets_wbt_timer {};
+
+struct show_busy_params {
+	struct seq_file *m;
+	struct blk_mq_hw_ctx *hctx;
+};
+
+struct blk_crypto_mode {
+	const char *name;
+	const char *cipher_str;
+	unsigned int keysize;
+	unsigned int security_strength;
+	unsigned int ivsize;
+};
+
+struct blk_crypto_ll_ops {
+	int (*keyslot_program)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+	int (*keyslot_evict)(struct blk_crypto_profile *, const struct blk_crypto_key *, unsigned int);
+	int (*derive_sw_secret)(struct blk_crypto_profile *, const u8 *, size_t, u8 *);
+};
+
+struct blk_crypto_profile {
+	struct blk_crypto_ll_ops ll_ops;
+	unsigned int max_dun_bytes_supported;
+	unsigned int key_types_supported;
+	unsigned int modes_supported[5];
+	struct device *dev;
+	unsigned int num_slots;
+	struct rw_semaphore lock;
+	struct lock_class_key lockdep_key;
+	wait_queue_head_t idle_slots_wait_queue;
+	struct list_head idle_slots;
+	spinlock_t idle_slots_lock;
+	struct hlist_head *slot_hashtable;
+	unsigned int log_slot_ht_size;
+	struct blk_crypto_keyslot *slots;
+};
+
+struct blk_crypto_keyslot {
+	atomic_t slot_refs;
+	struct list_head idle_slot_node;
+	struct hlist_node hash_node;
+	const struct blk_crypto_key *key;
+	struct blk_crypto_profile *profile;
+};
+
+struct blk_crypto_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct blk_crypto_profile *, struct blk_crypto_attr *, char *);
+};
+
+struct blk_crypto_kobj {
+	struct kobject kobj;
+	struct blk_crypto_profile *profile;
+};
+
+struct blk_crypto_fallback_keyslot {
+	enum blk_crypto_mode_num crypto_mode;
+	struct crypto_skcipher *tfms[5];
+};
+
+struct bio_fallback_crypt_ctx {
+	struct bio_crypt_ctx crypt_ctx;
+	struct bvec_iter crypt_iter;
+	union {
+		struct {
+			struct work_struct work;
+			struct bio *bio;
+		};
+		struct {
+			void *bi_private_orig;
+			bio_end_io_t *bi_end_io_orig;
+		};
+	};
+};
+
+union blk_crypto_iv {
+	__le64 dun[4];
+	u8 bytes[32];
+};
+
+struct bd_holder_disk {
+	struct list_head list;
+	struct kobject *holder_dir;
+	int refcnt;
+};
+
+struct io_cache_entry {
+	struct io_wq_work_node node;
+};
+
+struct io_rsrc_put {
+	u64 tag;
+	union {
+		void *rsrc;
+		struct file *file;
+		struct io_mapped_ubuf *buf;
+	};
+};
+
+struct io_rsrc_node {
+	union {
+		struct io_cache_entry cache;
+		struct io_ring_ctx *ctx;
+	};
+	int refs;
+	bool empty;
+	u16 type;
+	struct list_head node;
+	struct io_rsrc_put item;
+};
+
+struct io_mapped_ubuf {
+	u64 ubuf;
+	u64 ubuf_end;
+	unsigned int nr_bvecs;
+	unsigned long acct_pages;
+	struct bio_vec bvec[0];
+};
+
+struct io_buffer {
+	struct list_head list;
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 bgid;
+};
+
+struct io_uring_buf_ring;
+
+struct io_buffer_list {
+	union {
+		struct list_head buf_list;
+		struct {
+			struct page **buf_pages;
+			struct io_uring_buf_ring *buf_ring;
+		};
+		struct callback_head rcu;
+	};
+	__u16 bgid;
+	__u16 buf_nr_pages;
+	__u16 nr_entries;
+	__u16 head;
+	__u16 mask;
+	atomic_t refs;
+	__u8 is_mapped;
+	__u8 is_mmap;
+};
+
+struct io_uring_buf {
+	__u64 addr;
+	__u32 len;
+	__u16 bid;
+	__u16 resv;
+};
+
+struct io_uring_buf_ring {
+	union {
+		struct {
+			__u64 resv1;
+			__u32 resv2;
+			__u16 resv3;
+			__u16 tail;
+		};
+		struct {
+			struct {} __empty_bufs;
+			struct io_uring_buf bufs[0];
+		};
+	};
+};
+
+struct io_poll {
+	struct file *file;
+	struct wait_queue_head *head;
+	__poll_t events;
+	int retries;
+	struct wait_queue_entry wait;
+};
+
+struct async_poll {
+	union {
+		struct io_poll poll;
+		struct io_cache_entry cache;
+	};
+	struct io_poll *double_poll;
+};
+
+struct io_sq_data {
+	refcount_t refs;
+	atomic_t park_pending;
+	struct mutex lock;
+	struct list_head ctx_list;
+	struct task_struct *thread;
+	struct wait_queue_head wait;
+	unsigned int sq_thread_idle;
+	int sq_cpu;
+	pid_t task_pid;
+	pid_t task_tgid;
+	unsigned long state;
+	struct completion exited;
+};
+
+struct io_rsrc_data {
+	struct io_ring_ctx *ctx;
+	u64 **tags;
+	unsigned int nr;
+	u16 rsrc_type;
+	bool quiesce;
+};
+
+typedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);
+
+typedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, long);
+
+typedef void (*btf_trace_io_uring_file_get)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_queue_async_work)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_defer)(void *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);
+
+typedef void (*btf_trace_io_uring_fail_link)(void *, struct io_kiocb *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_complete)(void *, void *, void *, u64, int, unsigned int, u64, u64);
+
+typedef void (*btf_trace_io_uring_submit_req)(void *, struct io_kiocb *);
+
+typedef void (*btf_trace_io_uring_poll_arm)(void *, struct io_kiocb *, int, int);
+
+typedef void (*btf_trace_io_uring_task_add)(void *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_req_failed)(void *, const struct io_uring_sqe *, struct io_kiocb *, int);
+
+typedef void (*btf_trace_io_uring_cqe_overflow)(void *, void *, unsigned long long, s32, u32, void *);
+
+typedef void (*btf_trace_io_uring_task_work_run)(void *, void *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_io_uring_short_write)(void *, void *, u64, u64, u64);
+
+typedef void (*btf_trace_io_uring_local_work_run)(void *, void *, int, unsigned int);
+
+struct creds;
+
+enum {
+	REQ_F_FIXED_FILE = 1,
+	REQ_F_IO_DRAIN = 2,
+	REQ_F_LINK = 4,
+	REQ_F_HARDLINK = 8,
+	REQ_F_FORCE_ASYNC = 16,
+	REQ_F_BUFFER_SELECT = 32,
+	REQ_F_CQE_SKIP = 64,
+	REQ_F_FAIL = 256,
+	REQ_F_INFLIGHT = 512,
+	REQ_F_CUR_POS = 1024,
+	REQ_F_NOWAIT = 2048,
+	REQ_F_LINK_TIMEOUT = 4096,
+	REQ_F_NEED_CLEANUP = 8192,
+	REQ_F_POLLED = 16384,
+	REQ_F_BUFFER_SELECTED = 32768,
+	REQ_F_BUFFER_RING = 65536,
+	REQ_F_REISSUE = 131072,
+	REQ_F_SUPPORT_NOWAIT = 536870912,
+	REQ_F_ISREG = 1073741824,
+	REQ_F_CREDS = 262144,
+	REQ_F_REFCOUNT = 524288,
+	REQ_F_ARM_LTIMEOUT = 1048576,
+	REQ_F_ASYNC_DATA = 2097152,
+	REQ_F_SKIP_LINK_CQES = 4194304,
+	REQ_F_SINGLE_POLL = 8388608,
+	REQ_F_DOUBLE_POLL = 16777216,
+	REQ_F_PARTIAL_IO = 33554432,
+	REQ_F_APOLL_MULTISHOT = 67108864,
+	REQ_F_CLEAR_POLLIN = 134217728,
+	REQ_F_HASH_LOCKED = 268435456,
+};
+
+enum {
+	IO_WQ_WORK_CANCEL = 1,
+	IO_WQ_WORK_HASHED = 2,
+	IO_WQ_WORK_UNBOUND = 4,
+	IO_WQ_WORK_CONCURRENT = 16,
+	IO_WQ_HASH_SHIFT = 24,
+};
+
+enum {
+	IO_CHECK_CQ_OVERFLOW_BIT = 0,
+	IO_CHECK_CQ_DROPPED_BIT = 1,
+};
+
+enum io_uring_cmd_flags {
+	IO_URING_F_COMPLETE_DEFER = 1,
+	IO_URING_F_UNLOCKED = 2,
+	IO_URING_F_MULTISHOT = 4,
+	IO_URING_F_IOWQ = 8,
+	IO_URING_F_NONBLOCK = -2147483648,
+	IO_URING_F_SQE128 = 256,
+	IO_URING_F_CQE32 = 512,
+	IO_URING_F_IOPOLL = 1024,
+};
+
+enum {
+	IO_APOLL_OK = 0,
+	IO_APOLL_ABORTED = 1,
+	IO_APOLL_READY = 2,
+};
+
+enum {
+	IO_EVENTFD_OP_SIGNAL_BIT = 0,
+	IO_EVENTFD_OP_FREE_BIT = 1,
+};
+
+enum {
+	IORING_CQE_BUFFER_SHIFT = 16,
+};
+
+enum {
+	IOU_F_TWQ_LAZY_WAKE = 1,
+};
+
+enum {
+	IOU_OK = 0,
+	IOU_ISSUE_SKIP_COMPLETE = -529,
+	IOU_REQUEUE = -3072,
+	IOU_STOP_MULTISHOT = -125,
+};
+
+enum {
+	REQ_F_FIXED_FILE_BIT = 0,
+	REQ_F_IO_DRAIN_BIT = 1,
+	REQ_F_LINK_BIT = 2,
+	REQ_F_HARDLINK_BIT = 3,
+	REQ_F_FORCE_ASYNC_BIT = 4,
+	REQ_F_BUFFER_SELECT_BIT = 5,
+	REQ_F_CQE_SKIP_BIT = 6,
+	REQ_F_FAIL_BIT = 8,
+	REQ_F_INFLIGHT_BIT = 9,
+	REQ_F_CUR_POS_BIT = 10,
+	REQ_F_NOWAIT_BIT = 11,
+	REQ_F_LINK_TIMEOUT_BIT = 12,
+	REQ_F_NEED_CLEANUP_BIT = 13,
+	REQ_F_POLLED_BIT = 14,
+	REQ_F_BUFFER_SELECTED_BIT = 15,
+	REQ_F_BUFFER_RING_BIT = 16,
+	REQ_F_REISSUE_BIT = 17,
+	REQ_F_CREDS_BIT = 18,
+	REQ_F_REFCOUNT_BIT = 19,
+	REQ_F_ARM_LTIMEOUT_BIT = 20,
+	REQ_F_ASYNC_DATA_BIT = 21,
+	REQ_F_SKIP_LINK_CQES_BIT = 22,
+	REQ_F_SINGLE_POLL_BIT = 23,
+	REQ_F_DOUBLE_POLL_BIT = 24,
+	REQ_F_PARTIAL_IO_BIT = 25,
+	REQ_F_APOLL_MULTISHOT_BIT = 26,
+	REQ_F_CLEAR_POLLIN_BIT = 27,
+	REQ_F_HASH_LOCKED_BIT = 28,
+	REQ_F_SUPPORT_NOWAIT_BIT = 29,
+	REQ_F_ISREG_BIT = 30,
+	__REQ_F_LAST_BIT = 31,
+};
+
+enum io_uring_op {
+	IORING_OP_NOP = 0,
+	IORING_OP_READV = 1,
+	IORING_OP_WRITEV = 2,
+	IORING_OP_FSYNC = 3,
+	IORING_OP_READ_FIXED = 4,
+	IORING_OP_WRITE_FIXED = 5,
+	IORING_OP_POLL_ADD = 6,
+	IORING_OP_POLL_REMOVE = 7,
+	IORING_OP_SYNC_FILE_RANGE = 8,
+	IORING_OP_SENDMSG = 9,
+	IORING_OP_RECVMSG = 10,
+	IORING_OP_TIMEOUT = 11,
+	IORING_OP_TIMEOUT_REMOVE = 12,
+	IORING_OP_ACCEPT = 13,
+	IORING_OP_ASYNC_CANCEL = 14,
+	IORING_OP_LINK_TIMEOUT = 15,
+	IORING_OP_CONNECT = 16,
+	IORING_OP_FALLOCATE = 17,
+	IORING_OP_OPENAT = 18,
+	IORING_OP_CLOSE = 19,
+	IORING_OP_FILES_UPDATE = 20,
+	IORING_OP_STATX = 21,
+	IORING_OP_READ = 22,
+	IORING_OP_WRITE = 23,
+	IORING_OP_FADVISE = 24,
+	IORING_OP_MADVISE = 25,
+	IORING_OP_SEND = 26,
+	IORING_OP_RECV = 27,
+	IORING_OP_OPENAT2 = 28,
+	IORING_OP_EPOLL_CTL = 29,
+	IORING_OP_SPLICE = 30,
+	IORING_OP_PROVIDE_BUFFERS = 31,
+	IORING_OP_REMOVE_BUFFERS = 32,
+	IORING_OP_TEE = 33,
+	IORING_OP_SHUTDOWN = 34,
+	IORING_OP_RENAMEAT = 35,
+	IORING_OP_UNLINKAT = 36,
+	IORING_OP_MKDIRAT = 37,
+	IORING_OP_SYMLINKAT = 38,
+	IORING_OP_LINKAT = 39,
+	IORING_OP_MSG_RING = 40,
+	IORING_OP_FSETXATTR = 41,
+	IORING_OP_SETXATTR = 42,
+	IORING_OP_FGETXATTR = 43,
+	IORING_OP_GETXATTR = 44,
+	IORING_OP_SOCKET = 45,
+	IORING_OP_URING_CMD = 46,
+	IORING_OP_SEND_ZC = 47,
+	IORING_OP_SENDMSG_ZC = 48,
+	IORING_OP_LAST = 49,
+};
+
+enum {
+	IOSQE_FIXED_FILE_BIT = 0,
+	IOSQE_IO_DRAIN_BIT = 1,
+	IOSQE_IO_LINK_BIT = 2,
+	IOSQE_IO_HARDLINK_BIT = 3,
+	IOSQE_ASYNC_BIT = 4,
+	IOSQE_BUFFER_SELECT_BIT = 5,
+	IOSQE_CQE_SKIP_SUCCESS_BIT = 6,
+};
+
+enum io_wq_cancel {
+	IO_WQ_CANCEL_OK = 0,
+	IO_WQ_CANCEL_RUNNING = 1,
+	IO_WQ_CANCEL_NOTFOUND = 2,
+};
+
+enum {
+	IORING_REGISTER_BUFFERS = 0,
+	IORING_UNREGISTER_BUFFERS = 1,
+	IORING_REGISTER_FILES = 2,
+	IORING_UNREGISTER_FILES = 3,
+	IORING_REGISTER_EVENTFD = 4,
+	IORING_UNREGISTER_EVENTFD = 5,
+	IORING_REGISTER_FILES_UPDATE = 6,
+	IORING_REGISTER_EVENTFD_ASYNC = 7,
+	IORING_REGISTER_PROBE = 8,
+	IORING_REGISTER_PERSONALITY = 9,
+	IORING_UNREGISTER_PERSONALITY = 10,
+	IORING_REGISTER_RESTRICTIONS = 11,
+	IORING_REGISTER_ENABLE_RINGS = 12,
+	IORING_REGISTER_FILES2 = 13,
+	IORING_REGISTER_FILES_UPDATE2 = 14,
+	IORING_REGISTER_BUFFERS2 = 15,
+	IORING_REGISTER_BUFFERS_UPDATE = 16,
+	IORING_REGISTER_IOWQ_AFF = 17,
+	IORING_UNREGISTER_IOWQ_AFF = 18,
+	IORING_REGISTER_IOWQ_MAX_WORKERS = 19,
+	IORING_REGISTER_RING_FDS = 20,
+	IORING_UNREGISTER_RING_FDS = 21,
+	IORING_REGISTER_PBUF_RING = 22,
+	IORING_UNREGISTER_PBUF_RING = 23,
+	IORING_REGISTER_SYNC_CANCEL = 24,
+	IORING_REGISTER_FILE_ALLOC_RANGE = 25,
+	IORING_REGISTER_LAST = 26,
+	IORING_REGISTER_USE_REGISTERED_RING = 2147483648,
+};
+
+enum {
+	IORING_RSRC_FILE = 0,
+	IORING_RSRC_BUFFER = 1,
+};
+
+enum {
+	IORING_RESTRICTION_REGISTER_OP = 0,
+	IORING_RESTRICTION_SQE_OP = 1,
+	IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2,
+	IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3,
+	IORING_RESTRICTION_LAST = 4,
+};
+
+struct trace_event_raw_io_uring_create {
+	struct trace_entry ent;
+	int fd;
+	void *ctx;
+	u32 sq_entries;
+	u32 cq_entries;
+	u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_register {
+	struct trace_entry ent;
+	void *ctx;
+	unsigned int opcode;
+	unsigned int nr_files;
+	unsigned int nr_bufs;
+	long ret;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_file_get {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int fd;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_queue_async_work {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	u8 opcode;
+	unsigned int flags;
+	struct io_wq_work *work;
+	int rw;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_defer {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long data;
+	u8 opcode;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	void *target_req;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqring_wait {
+	struct trace_entry ent;
+	void *ctx;
+	int min_events;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_fail_link {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long user_data;
+	u8 opcode;
+	void *link;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_complete {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	u64 user_data;
+	int res;
+	unsigned int cflags;
+	u64 extra1;
+	u64 extra2;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_submit_req {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long user_data;
+	u8 opcode;
+	u32 flags;
+	bool sq_thread;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_poll_arm {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long user_data;
+	u8 opcode;
+	int mask;
+	int events;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_add {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long user_data;
+	u8 opcode;
+	int mask;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_req_failed {
+	struct trace_entry ent;
+	void *ctx;
+	void *req;
+	unsigned long long user_data;
+	u8 opcode;
+	u8 flags;
+	u8 ioprio;
+	u64 off;
+	u64 addr;
+	u32 len;
+	u32 op_flags;
+	u16 buf_index;
+	u16 personality;
+	u32 file_index;
+	u64 pad1;
+	u64 addr3;
+	int error;
+	u32 __data_loc_op_str;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_cqe_overflow {
+	struct trace_entry ent;
+	void *ctx;
+	unsigned long long user_data;
+	s32 res;
+	u32 cflags;
+	void *ocqe;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_task_work_run {
+	struct trace_entry ent;
+	void *tctx;
+	unsigned int count;
+	unsigned int loops;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_short_write {
+	struct trace_entry ent;
+	void *ctx;
+	u64 fpos;
+	u64 wanted;
+	u64 got;
+	char __data[0];
+};
+
+struct trace_event_raw_io_uring_local_work_run {
+	struct trace_entry ent;
+	void *ctx;
+	int count;
+	unsigned int loops;
+	char __data[0];
+};
+
+struct io_defer_entry {
+	struct list_head list;
+	struct io_kiocb *req;
+	u32 seq;
+};
+
+struct io_tctx_node {
+	struct list_head ctx_node;
+	struct task_struct *task;
+	struct io_ring_ctx *ctx;
+};
+
+struct io_overflow_cqe {
+	struct list_head list;
+	struct io_uring_cqe cqe;
+};
+
+struct io_wait_queue {
+	struct wait_queue_entry wq;
+	struct io_ring_ctx *ctx;
+	unsigned int cq_tail;
+	unsigned int nr_timeouts;
+	ktime_t timeout;
+};
+
+struct io_tctx_exit {
+	struct callback_head task_work;
+	struct completion completion;
+	struct io_ring_ctx *ctx;
+};
+
+struct io_sqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 flags;
+	__u32 dropped;
+	__u32 array;
+	__u32 resv1;
+	__u64 user_addr;
+};
+
+struct io_cqring_offsets {
+	__u32 head;
+	__u32 tail;
+	__u32 ring_mask;
+	__u32 ring_entries;
+	__u32 overflow;
+	__u32 cqes;
+	__u32 flags;
+	__u32 resv1;
+	__u64 user_addr;
+};
+
+struct io_uring_params {
+	__u32 sq_entries;
+	__u32 cq_entries;
+	__u32 flags;
+	__u32 sq_thread_cpu;
+	__u32 sq_thread_idle;
+	__u32 features;
+	__u32 wq_fd;
+	__u32 resv[3];
+	struct io_sqring_offsets sq_off;
+	struct io_cqring_offsets cq_off;
+};
+
+struct trace_event_data_offsets_io_uring_queue_async_work {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_defer {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_fail_link {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_submit_req {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_poll_arm {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_task_add {
+	u32 op_str;
+};
+
+struct trace_event_data_offsets_io_uring_req_failed {
+	u32 op_str;
+};
+
+struct io_cold_def {
+	unsigned short async_size;
+	const char *name;
+	int (*prep_async)(struct io_kiocb *);
+	void (*cleanup)(struct io_kiocb *);
+	void (*fail)(struct io_kiocb *);
+};
+
+struct io_issue_def {
+	unsigned int needs_file: 1;
+	unsigned int plug: 1;
+	unsigned int hash_reg_file: 1;
+	unsigned int unbound_nonreg_file: 1;
+	unsigned int pollin: 1;
+	unsigned int pollout: 1;
+	unsigned int poll_exclusive: 1;
+	unsigned int buffer_select: 1;
+	unsigned int not_supported: 1;
+	unsigned int audit_skip: 1;
+	unsigned int ioprio: 1;
+	unsigned int iopoll: 1;
+	unsigned int iopoll_queue: 1;
+	unsigned int manual_alloc: 1;
+	int (*issue)(struct io_kiocb *, unsigned int);
+	int (*prep)(struct io_kiocb *, const struct io_uring_sqe *);
+};
+
+typedef bool work_cancel_fn(struct io_wq_work *, void *);
+
+struct io_uring_getevents_arg {
+	__u64 sigmask;
+	__u32 sigmask_sz;
+	__u32 pad;
+	__u64 ts;
+};
+
+struct io_uring_file_index_range {
+	__u32 off;
+	__u32 len;
+	__u64 resv;
+};
+
+struct trace_event_data_offsets_io_uring_create {};
+
+struct trace_event_data_offsets_io_uring_register {};
+
+struct trace_event_data_offsets_io_uring_file_get {};
+
+struct trace_event_data_offsets_io_uring_link {};
+
+struct trace_event_data_offsets_io_uring_cqring_wait {};
+
+struct trace_event_data_offsets_io_uring_complete {};
+
+struct trace_event_data_offsets_io_uring_cqe_overflow {};
+
+struct trace_event_data_offsets_io_uring_task_work_run {};
+
+struct trace_event_data_offsets_io_uring_short_write {};
+
+struct trace_event_data_offsets_io_uring_local_work_run {};
+
+struct io_task_cancel {
+	struct task_struct *task;
+	bool all;
+};
+
+struct io_uring_probe_op {
+	__u8 op;
+	__u8 resv;
+	__u16 flags;
+	__u32 resv2;
+};
+
+struct io_uring_probe {
+	__u8 last_op;
+	__u8 ops_len;
+	__u16 resv;
+	__u32 resv2[3];
+	struct io_uring_probe_op ops[0];
+};
+
+struct io_uring_restriction {
+	__u16 opcode;
+	union {
+		__u8 register_op;
+		__u8 sqe_op;
+		__u8 sqe_flags;
+	};
+	__u8 resv;
+	__u32 resv2[3];
+};
+
+struct io_xattr {
+	struct file *file;
+	struct xattr_ctx ctx;
+	struct filename *filename;
+};
+
+struct io_rename {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_unlink {
+	struct file *file;
+	int dfd;
+	int flags;
+	struct filename *filename;
+};
+
+struct io_mkdir {
+	struct file *file;
+	int dfd;
+	umode_t mode;
+	struct filename *filename;
+};
+
+struct io_link {
+	struct file *file;
+	int old_dfd;
+	int new_dfd;
+	struct filename *oldpath;
+	struct filename *newpath;
+	int flags;
+};
+
+struct io_splice {
+	struct file *file_out;
+	loff_t off_out;
+	loff_t off_in;
+	u64 len;
+	int splice_fd_in;
+	unsigned int flags;
+};
+
+struct io_sync {
+	struct file *file;
+	loff_t len;
+	loff_t off;
+	int flags;
+	int mode;
+};
+
+struct io_madvise {
+	struct file *file;
+	u64 addr;
+	u32 len;
+	u32 advice;
+};
+
+struct io_fadvise {
+	struct file *file;
+	u64 offset;
+	u32 len;
+	u32 advice;
+};
+
+struct io_open {
+	struct file *file;
+	int dfd;
+	u32 file_slot;
+	struct filename *filename;
+	struct open_how how;
+	unsigned long nofile;
+};
+
+struct io_close {
+	struct file *file;
+	int fd;
+	u32 file_slot;
+};
+
+enum {
+	SOCKET_URING_OP_SIOCINQ = 0,
+	SOCKET_URING_OP_SIOCOUTQ = 1,
+};
+
+struct io_epoll {
+	struct file *file;
+	int epfd;
+	int op;
+	int fd;
+	struct epoll_event event;
+};
+
+struct io_statx {
+	struct file *file;
+	int dfd;
+	unsigned int mask;
+	unsigned int flags;
+	struct filename *filename;
+	struct statx __attribute__((btf_type_tag("user"))) *buffer;
+};
+
+enum {
+	SKBFL_ZEROCOPY_ENABLE = 1,
+	SKBFL_SHARED_FRAG = 2,
+	SKBFL_PURE_ZEROCOPY = 4,
+	SKBFL_DONT_ORPHAN = 8,
+	SKBFL_MANAGED_FRAG_REFS = 16,
+};
+
+struct io_shutdown {
+	struct file *file;
+	int how;
+};
+
+struct compat_msghdr;
+
+struct user_msghdr;
+
+struct io_sr_msg {
+	struct file *file;
+	union {
+		struct compat_msghdr __attribute__((btf_type_tag("user"))) *umsg_compat;
+		struct user_msghdr __attribute__((btf_type_tag("user"))) *umsg;
+		void __attribute__((btf_type_tag("user"))) *buf;
+	};
+	unsigned int len;
+	unsigned int done_io;
+	unsigned int msg_flags;
+	unsigned int nr_multishot_loops;
+	u16 flags;
+	u16 addr_len;
+	u16 buf_group;
+	void __attribute__((btf_type_tag("user"))) *addr;
+	void __attribute__((btf_type_tag("user"))) *msg_control;
+	struct io_kiocb *notif;
+};
+
+struct compat_msghdr {
+	compat_uptr_t msg_name;
+	compat_int_t msg_namelen;
+	compat_uptr_t msg_iov;
+	compat_size_t msg_iovlen;
+	compat_uptr_t msg_control;
+	compat_size_t msg_controllen;
+	compat_uint_t msg_flags;
+};
+
+struct user_msghdr {
+	void __attribute__((btf_type_tag("user"))) *msg_name;
+	int msg_namelen;
+	struct iovec __attribute__((btf_type_tag("user"))) *msg_iov;
+	__kernel_size_t msg_iovlen;
+	void __attribute__((btf_type_tag("user"))) *msg_control;
+	__kernel_size_t msg_controllen;
+	unsigned int msg_flags;
+};
+
+struct io_accept {
+	struct file *file;
+	struct sockaddr __attribute__((btf_type_tag("user"))) *addr;
+	int __attribute__((btf_type_tag("user"))) *addr_len;
+	int flags;
+	u32 file_slot;
+	unsigned long nofile;
+};
+
+struct io_socket {
+	struct file *file;
+	int domain;
+	int type;
+	int protocol;
+	int flags;
+	u32 file_slot;
+	unsigned long nofile;
+};
+
+struct io_connect {
+	struct file *file;
+	struct sockaddr __attribute__((btf_type_tag("user"))) *addr;
+	int addr_len;
+	bool in_progress;
+	bool seen_econnaborted;
+};
+
+struct io_async_msghdr {
+	union {
+		struct iovec fast_iov[8];
+		struct {
+			struct iovec fast_iov_one;
+			__kernel_size_t controllen;
+			int namelen;
+			__kernel_size_t payloadlen;
+		};
+		struct io_cache_entry cache;
+	};
+	struct iovec *free_iov;
+	struct sockaddr __attribute__((btf_type_tag("user"))) *uaddr;
+	struct msghdr msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+struct io_notif_data {
+	struct file *file;
+	struct ubuf_info uarg;
+	unsigned long account_pages;
+	bool zc_report;
+	bool zc_used;
+	bool zc_copied;
+};
+
+struct io_uring_recvmsg_out {
+	__u32 namelen;
+	__u32 controllen;
+	__u32 payloadlen;
+	__u32 flags;
+};
+
+struct io_recvmsg_multishot_hdr {
+	struct io_uring_recvmsg_out msg;
+	struct __kernel_sockaddr_storage addr;
+};
+
+struct io_async_connect {
+	struct __kernel_sockaddr_storage address;
+};
+
+typedef s32 compat_ssize_t;
+
+enum {
+	IORING_MSG_DATA = 0,
+	IORING_MSG_SEND_FD = 1,
+};
+
+struct io_msg {
+	struct file *file;
+	struct file *src_file;
+	struct callback_head tw;
+	u64 user_data;
+	u32 len;
+	u32 cmd;
+	u32 src_fd;
+	union {
+		u32 dst_fd;
+		u32 cqe_flags;
+	};
+	u32 flags;
+};
+
+struct io_timeout {
+	struct file *file;
+	u32 off;
+	u32 target_seq;
+	u32 repeats;
+	struct list_head list;
+	struct io_kiocb *head;
+	struct io_kiocb *prev;
+};
+
+struct io_timeout_rem {
+	struct file *file;
+	u64 addr;
+	struct timespec64 ts;
+	u32 flags;
+	bool ltimeout;
+};
+
+struct io_timeout_data {
+	struct io_kiocb *req;
+	struct hrtimer timer;
+	struct timespec64 ts;
+	enum hrtimer_mode mode;
+	u32 flags;
+};
+
+struct io_cancel_data {
+	struct io_ring_ctx *ctx;
+	union {
+		u64 data;
+		struct file *file;
+	};
+	u8 opcode;
+	u32 flags;
+	int seq;
+};
+
+enum {
+	IO_SQ_THREAD_SHOULD_STOP = 0,
+	IO_SQ_THREAD_SHOULD_PARK = 1,
+};
+
+typedef void io_wq_work_fn(struct io_wq_work *);
+
+typedef struct io_wq_work *free_work_fn(struct io_wq_work *);
+
+struct io_wq_data {
+	struct io_wq_hash *hash;
+	struct task_struct *task;
+	io_wq_work_fn *do_work;
+	free_work_fn *free_work;
+};
+
+struct io_uring_rsrc_update {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+};
+
+enum {
+	IOU_POLL_DONE = 0,
+	IOU_POLL_NO_ACTION = 1,
+	IOU_POLL_REMOVE_POLL_USE_RES = 2,
+	IOU_POLL_REISSUE = 3,
+	IOU_POLL_REQUEUE = 4,
+};
+
+struct io_poll_update {
+	struct file *file;
+	u64 old_user_data;
+	u64 new_user_data;
+	__poll_t events;
+	bool update_events;
+	bool update_user_data;
+};
+
+struct io_poll_table {
+	struct poll_table_struct pt;
+	struct io_kiocb *req;
+	int nr_entries;
+	int error;
+	bool owning;
+	__poll_t result_mask;
+};
+
+struct io_cancel {
+	struct file *file;
+	u64 addr;
+	u32 flags;
+	s32 fd;
+	u8 opcode;
+};
+
+struct io_uring_sync_cancel_reg {
+	__u64 addr;
+	__s32 fd;
+	__u32 flags;
+	struct __kernel_timespec timeout;
+	__u8 opcode;
+	__u8 pad[7];
+	__u64 pad2[3];
+};
+
+enum {
+	IOU_PBUF_RING_MMAP = 1,
+};
+
+struct io_provide_buf {
+	struct file *file;
+	__u64 addr;
+	__u32 len;
+	__u32 bgid;
+	__u32 nbufs;
+	__u16 bid;
+};
+
+struct io_buf_free {
+	struct hlist_node list;
+	void *mem;
+	size_t size;
+	int inuse;
+};
+
+struct io_uring_buf_reg {
+	__u64 ring_addr;
+	__u32 ring_entries;
+	__u16 bgid;
+	__u16 flags;
+	__u64 resv[3];
+};
+
+struct io_rsrc_update {
+	struct file *file;
+	u64 arg;
+	u32 nr_args;
+	u32 offset;
+};
+
+struct io_uring_rsrc_update2 {
+	__u32 offset;
+	__u32 resv;
+	__u64 data;
+	__u64 tags;
+	__u32 nr;
+	__u32 resv2;
+};
+
+struct io_uring_rsrc_register {
+	__u32 nr;
+	__u32 flags;
+	__u64 resv2;
+	__u64 data;
+	__u64 tags;
+};
+
+struct io_rw {
+	struct kiocb kiocb;
+	u64 addr;
+	u32 len;
+	rwf_t flags;
+};
+
+struct iov_iter_state {
+	size_t iov_offset;
+	size_t count;
+	unsigned long nr_segs;
+};
+
+struct io_rw_state {
+	struct iov_iter iter;
+	struct iov_iter_state iter_state;
+	struct iovec fast_iov[8];
+};
+
+struct io_async_rw {
+	struct io_rw_state s;
+	const struct iovec *free_iovec;
+	size_t bytes_done;
+	struct wait_page_queue wpq;
+};
+
+enum {
+	IO_WQ_BIT_EXIT = 0,
+};
+
+enum {
+	IO_WORKER_F_UP = 1,
+	IO_WORKER_F_RUNNING = 2,
+	IO_WORKER_F_FREE = 4,
+	IO_WORKER_F_BOUND = 8,
+};
+
+enum {
+	IO_ACCT_STALLED_BIT = 0,
+};
+
+enum {
+	IO_WQ_ACCT_BOUND = 0,
+	IO_WQ_ACCT_UNBOUND = 1,
+	IO_WQ_ACCT_NR = 2,
+};
+
+struct io_wq_acct {
+	unsigned int nr_workers;
+	unsigned int max_workers;
+	int index;
+	atomic_t nr_running;
+	raw_spinlock_t lock;
+	struct io_wq_work_list work_list;
+	unsigned long flags;
+};
+
+struct io_wq {
+	unsigned long state;
+	free_work_fn *free_work;
+	io_wq_work_fn *do_work;
+	struct io_wq_hash *hash;
+	atomic_t worker_refs;
+	struct completion worker_done;
+	struct hlist_node cpuhp_node;
+	struct task_struct *task;
+	struct io_wq_acct acct[2];
+	raw_spinlock_t lock;
+	struct hlist_nulls_head free_list;
+	struct list_head all_list;
+	struct wait_queue_entry wait;
+	struct io_wq_work *hash_tail[64];
+	cpumask_var_t cpu_mask;
+};
+
+struct io_worker {
+	refcount_t ref;
+	unsigned int flags;
+	struct hlist_nulls_node nulls_node;
+	struct list_head all_list;
+	struct task_struct *task;
+	struct io_wq *wq;
+	struct io_wq_work *cur_work;
+	struct io_wq_work *next_work;
+	raw_spinlock_t lock;
+	struct completion ref_done;
+	unsigned long create_state;
+	struct callback_head create_work;
+	int create_index;
+	union {
+		struct callback_head rcu;
+		struct work_struct work;
+	};
+};
+
+struct io_cb_cancel_data {
+	work_cancel_fn *fn;
+	void *data;
+	int nr_running;
+	int nr_pending;
+	bool cancel_all;
+};
+
+struct online_data {
+	unsigned int cpu;
+	bool online;
+};
+
+struct wrapper {
+	cmp_func_t cmp;
+	swap_func_t swap;
+};
+
+enum {
+	MAX_OPT_ARGS = 3,
+};
+
+enum {
+	REG_OP_ISFREE = 0,
+	REG_OP_ALLOC = 1,
+	REG_OP_RELEASE = 2,
+};
+
+struct region {
+	unsigned int start;
+	unsigned int off;
+	unsigned int group_len;
+	unsigned int end;
+	unsigned int nbits;
+};
+
+typedef void sg_free_fn(struct scatterlist *, unsigned int);
+
+struct sg_append_table {
+	struct sg_table sgt;
+	struct scatterlist *prv;
+	unsigned int total_nents;
+};
+
+typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);
+
+struct sg_dma_page_iter {
+	struct sg_page_iter base;
+};
+
+struct csum_state {
+	__wsum csum;
+	size_t off;
+};
+
+union nested_table {
+	union nested_table __attribute__((btf_type_tag("rcu"))) *table;
+	struct rhash_lock_head __attribute__((btf_type_tag("rcu"))) *bucket;
+};
+
+struct rhashtable_walker {
+	struct list_head list;
+	struct bucket_table *tbl;
+};
+
+struct rhashtable_iter {
+	struct rhashtable *ht;
+	struct rhash_head *p;
+	struct rhlist_head *list;
+	struct rhashtable_walker walker;
+	unsigned int slot;
+	unsigned int skip;
+	bool end_of_table;
+};
+
+struct once_work {
+	struct work_struct work;
+	struct static_key_true *key;
+	struct module *module;
+};
+
+struct genradix_node {
+	union {
+		struct genradix_node *children[512];
+		u8 data[4096];
+	};
+};
+
+struct genradix_iter {
+	size_t offset;
+	size_t pos;
+};
+
+enum string_size_units {
+	STRING_UNITS_10 = 0,
+	STRING_UNITS_2 = 1,
+};
+
+struct strarray {
+	char **array;
+	size_t n;
+};
+
+struct kunit_hooks_table {
+	void (*fail_current_test)(const char *, int, const char *, ...);
+	void * (*get_static_stub_address)(struct kunit *, void *);
+};
+
+struct reciprocal_value_adv {
+	u32 m;
+	u8 sh;
+	u8 exp;
+	bool is_wide_m;
+};
+
+struct gf128mul_64k {
+	struct gf128mul_4k *t[16];
+};
+
+enum blake2s_iv {
+	BLAKE2S_IV0 = 1779033703,
+	BLAKE2S_IV1 = 3144134277,
+	BLAKE2S_IV2 = 1013904242,
+	BLAKE2S_IV3 = 2773480762,
+	BLAKE2S_IV4 = 1359893119,
+	BLAKE2S_IV5 = 2600822924,
+	BLAKE2S_IV6 = 528734635,
+	BLAKE2S_IV7 = 1541459225,
+};
+
+typedef mpi_limb_t *mpi_ptr_t;
+
+typedef int mpi_size_t;
+
+typedef mpi_limb_t UWtype;
+
+typedef unsigned int UHWtype;
+
+struct mpi_ec_ctx;
+
+struct field_table {
+	const char *p;
+	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
+	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
+};
+
+struct barrett_ctx_s;
+
+typedef struct barrett_ctx_s *mpi_barrett_t;
+
+enum gcry_mpi_ec_models {
+	MPI_EC_WEIERSTRASS = 0,
+	MPI_EC_MONTGOMERY = 1,
+	MPI_EC_EDWARDS = 2,
+};
+
+enum ecc_dialects {
+	ECC_DIALECT_STANDARD = 0,
+	ECC_DIALECT_ED25519 = 1,
+	ECC_DIALECT_SAFECURVE = 2,
+};
+
+struct gcry_mpi_point;
+
+typedef struct gcry_mpi_point *MPI_POINT;
+
+struct mpi_ec_ctx {
+	enum gcry_mpi_ec_models model;
+	enum ecc_dialects dialect;
+	int flags;
+	unsigned int nbits;
+	MPI p;
+	MPI a;
+	MPI b;
+	MPI_POINT G;
+	MPI n;
+	unsigned int h;
+	MPI_POINT Q;
+	MPI d;
+	const char *name;
+	struct {
+		struct {
+			unsigned int a_is_pminus3: 1;
+			unsigned int two_inv_p: 1;
+		} valid;
+		int a_is_pminus3;
+		MPI two_inv_p;
+		mpi_barrett_t p_barrett;
+		MPI scratch[11];
+	} t;
+	void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);
+	void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);
+	void (*mul2)(MPI, MPI, struct mpi_ec_ctx *);
+};
+
+struct gcry_mpi_point {
+	MPI x;
+	MPI y;
+	MPI z;
+};
+
+enum gcry_mpi_constants {
+	MPI_C_ZERO = 0,
+	MPI_C_ONE = 1,
+	MPI_C_TWO = 2,
+	MPI_C_THREE = 3,
+	MPI_C_FOUR = 4,
+	MPI_C_EIGHT = 5,
+};
+
+enum gcry_mpi_format {
+	GCRYMPI_FMT_NONE = 0,
+	GCRYMPI_FMT_STD = 1,
+	GCRYMPI_FMT_PGP = 2,
+	GCRYMPI_FMT_SSH = 3,
+	GCRYMPI_FMT_HEX = 4,
+	GCRYMPI_FMT_USG = 5,
+	GCRYMPI_FMT_OPAQUE = 8,
+};
+
+struct barrett_ctx_s {
+	MPI m;
+	int m_copied;
+	int k;
+	MPI y;
+	MPI r1;
+	MPI r2;
+	MPI r3;
+};
+
+struct karatsuba_ctx {
+	struct karatsuba_ctx *next;
+	mpi_ptr_t tspace;
+	mpi_size_t tspace_size;
+	mpi_ptr_t tp;
+	mpi_size_t tp_size;
+};
+
+typedef long mpi_limb_signed_t;
+
+enum devm_ioremap_type {
+	DEVM_IOREMAP = 0,
+	DEVM_IOREMAP_UC = 1,
+	DEVM_IOREMAP_WC = 2,
+	DEVM_IOREMAP_NP = 3,
+};
+
+enum {
+	PCI_STD_RESOURCES = 0,
+	PCI_STD_RESOURCE_END = 5,
+	PCI_ROM_RESOURCE = 6,
+	PCI_IOV_RESOURCES = 7,
+	PCI_IOV_RESOURCE_END = 12,
+	PCI_BRIDGE_RESOURCES = 13,
+	PCI_BRIDGE_RESOURCE_END = 16,
+	PCI_NUM_RESOURCES = 17,
+	DEVICE_COUNT_RESOURCE = 17,
+};
+
+struct pcim_iomap_devres {
+	void *table[6];
+};
+
+struct arch_io_reserve_memtype_wc_devres {
+	resource_size_t start;
+	resource_size_t size;
+};
+
+enum assoc_array_walk_status {
+	assoc_array_walk_tree_empty = 0,
+	assoc_array_walk_found_terminal_node = 1,
+	assoc_array_walk_found_wrong_shortcut = 2,
+};
+
+struct assoc_array_walk_result {
+	struct {
+		struct assoc_array_node *node;
+		int level;
+		int slot;
+	} terminal_node;
+	struct {
+		struct assoc_array_shortcut *shortcut;
+		int level;
+		int sc_level;
+		unsigned long sc_segments;
+		unsigned long dissimilarity;
+	} wrong_shortcut;
+};
+
+struct assoc_array_delete_collapse_context {
+	struct assoc_array_node *node;
+	const void *skip_leaf;
+	int slot;
+};
+
+struct linear_range {
+	unsigned int min;
+	unsigned int min_sel;
+	unsigned int max_sel;
+	unsigned int step;
+};
+
+struct xxh32_state {
+	uint32_t total_len_32;
+	uint32_t large_len;
+	uint32_t v1;
+	uint32_t v2;
+	uint32_t v3;
+	uint32_t v4;
+	uint32_t mem32[4];
+	uint32_t memsize;
+};
+
+struct gen_pool_chunk {
+	struct list_head next_chunk;
+	atomic_long_t avail;
+	phys_addr_t phys_addr;
+	void *owner;
+	unsigned long start_addr;
+	unsigned long end_addr;
+	unsigned long bits[0];
+};
+
+struct gen_pool;
+
+typedef unsigned long (*genpool_algo_t)(unsigned long *, unsigned long, unsigned long, unsigned int, void *, struct gen_pool *, unsigned long);
+
+struct gen_pool {
+	spinlock_t lock;
+	struct list_head chunks;
+	int min_alloc_order;
+	genpool_algo_t algo;
+	void *data;
+	const char *name;
+};
+
+struct genpool_data_align {
+	int align;
+};
+
+struct genpool_data_fixed {
+	unsigned long offset;
+};
+
+typedef enum {
+	HEAD = 0,
+	FLAGS = 1,
+	TIME = 2,
+	OS = 3,
+	EXLEN = 4,
+	EXTRA = 5,
+	NAME = 6,
+	COMMENT = 7,
+	HCRC = 8,
+	DICTID = 9,
+	DICT = 10,
+	TYPE = 11,
+	TYPEDO = 12,
+	STORED = 13,
+	COPY = 14,
+	TABLE = 15,
+	LENLENS = 16,
+	CODELENS = 17,
+	LEN = 18,
+	LENEXT = 19,
+	DIST = 20,
+	DISTEXT = 21,
+	MATCH = 22,
+	LIT = 23,
+	CHECK = 24,
+	LENGTH = 25,
+	DONE = 26,
+	BAD = 27,
+	MEM = 28,
+	SYNC = 29,
+} inflate_mode;
+
+typedef struct {
+	unsigned char op;
+	unsigned char bits;
+	unsigned short val;
+} code;
+
+struct inflate_state {
+	inflate_mode mode;
+	int last;
+	int wrap;
+	int havedict;
+	int flags;
+	unsigned int dmax;
+	unsigned long check;
+	unsigned long total;
+	unsigned int wbits;
+	unsigned int wsize;
+	unsigned int whave;
+	unsigned int write;
+	unsigned char *window;
+	unsigned long hold;
+	unsigned int bits;
+	unsigned int length;
+	unsigned int offset;
+	unsigned int extra;
+	const code *lencode;
+	const code *distcode;
+	unsigned int lenbits;
+	unsigned int distbits;
+	unsigned int ncode;
+	unsigned int nlen;
+	unsigned int ndist;
+	unsigned int have;
+	code *next;
+	unsigned short lens[320];
+	unsigned short work[288];
+	code codes[2048];
+};
+
+struct inflate_workspace {
+	struct inflate_state inflate_state;
+	unsigned char working_window[32768];
+};
+
+typedef enum {
+	CODES = 0,
+	LENS = 1,
+	DISTS = 2,
+} codetype;
+
+typedef unsigned int uInt;
+
+typedef unsigned short ush;
+
+typedef enum {
+	need_more = 0,
+	block_done = 1,
+	finish_started = 2,
+	finish_done = 3,
+} block_state;
+
+struct deflate_state;
+
+typedef struct deflate_state deflate_state;
+
+typedef block_state (*compress_func)(deflate_state *, int);
+
+struct config_s {
+	ush good_length;
+	ush max_lazy;
+	ush nice_length;
+	ush max_chain;
+	compress_func func;
+};
+
+typedef struct config_s config;
+
+typedef unsigned long ulg;
+
+typedef ush Pos;
+
+typedef unsigned int IPos;
+
+struct ct_data_s {
+	union {
+		ush freq;
+		ush code;
+	} fc;
+	union {
+		ush dad;
+		ush len;
+	} dl;
+};
+
+typedef struct ct_data_s ct_data;
+
+struct static_tree_desc_s;
+
+typedef struct static_tree_desc_s static_tree_desc;
+
+struct tree_desc_s {
+	ct_data *dyn_tree;
+	int max_code;
+	static_tree_desc *stat_desc;
+};
+
+typedef unsigned char uch;
+
+struct deflate_state {
+	z_streamp strm;
+	int status;
+	Byte *pending_buf;
+	ulg pending_buf_size;
+	Byte *pending_out;
+	int pending;
+	int noheader;
+	Byte data_type;
+	Byte method;
+	int last_flush;
+	uInt w_size;
+	uInt w_bits;
+	uInt w_mask;
+	Byte *window;
+	ulg window_size;
+	Pos *prev;
+	Pos *head;
+	uInt ins_h;
+	uInt hash_size;
+	uInt hash_bits;
+	uInt hash_mask;
+	uInt hash_shift;
+	long block_start;
+	uInt match_length;
+	IPos prev_match;
+	int match_available;
+	uInt strstart;
+	uInt match_start;
+	uInt lookahead;
+	uInt prev_length;
+	uInt max_chain_length;
+	uInt max_lazy_match;
+	int level;
+	int strategy;
+	uInt good_match;
+	int nice_match;
+	struct ct_data_s dyn_ltree[573];
+	struct ct_data_s dyn_dtree[61];
+	struct ct_data_s bl_tree[39];
+	struct tree_desc_s l_desc;
+	struct tree_desc_s d_desc;
+	struct tree_desc_s bl_desc;
+	ush bl_count[16];
+	int heap[573];
+	int heap_len;
+	int heap_max;
+	uch depth[573];
+	uch *l_buf;
+	uInt lit_bufsize;
+	uInt last_lit;
+	ush *d_buf;
+	ulg opt_len;
+	ulg static_len;
+	ulg compressed_len;
+	uInt matches;
+	int last_eob_len;
+	ush bi_buf;
+	int bi_valid;
+};
+
+struct static_tree_desc_s {
+	const ct_data *static_tree;
+	const int *extra_bits;
+	int extra_base;
+	int elems;
+	int max_length;
+};
+
+struct deflate_workspace {
+	deflate_state deflate_memory;
+	Byte *window_memory;
+	Pos *prev_memory;
+	Pos *head_memory;
+	char *overlay_memory;
+};
+
+typedef struct deflate_workspace deflate_workspace;
+
+typedef struct tree_desc_s tree_desc;
+
+enum {
+	RS_DECODE_LAMBDA = 0,
+	RS_DECODE_SYN = 1,
+	RS_DECODE_B = 2,
+	RS_DECODE_T = 3,
+	RS_DECODE_OMEGA = 4,
+	RS_DECODE_ROOT = 5,
+	RS_DECODE_REG = 6,
+	RS_DECODE_LOC = 7,
+	RS_DECODE_NUM_BUFFERS = 8,
+};
+
+typedef struct {
+	uint32_t hashTable[4096];
+	uint32_t currentOffset;
+	uint32_t initCheck;
+	const uint8_t *dictionary;
+	uint8_t *bufferStart;
+	uint32_t dictSize;
+} LZ4_stream_t_internal;
+
+typedef union {
+	unsigned long long table[2052];
+	LZ4_stream_t_internal internal_donotuse;
+} LZ4_stream_t;
+
+typedef uintptr_t uptrval;
+
+typedef enum {
+	noLimit = 0,
+	limitedOutput = 1,
+} limitedOutput_directive;
+
+typedef enum {
+	byPtr = 0,
+	byU32 = 1,
+	byU16 = 2,
+} tableType_t;
+
+typedef enum {
+	noDict = 0,
+	withPrefix64k = 1,
+	usingExtDict = 2,
+} dict_directive;
+
+typedef enum {
+	noDictIssue = 0,
+	dictSmall = 1,
+} dictIssue_directive;
+
+typedef struct {
+	unsigned int hashTable[32768];
+	unsigned short chainTable[65536];
+	const unsigned char *end;
+	const unsigned char *base;
+	const unsigned char *dictBase;
+	unsigned int dictLimit;
+	unsigned int lowLimit;
+	unsigned int nextToUpdate;
+	unsigned int compressionLevel;
+} LZ4HC_CCtx_internal;
+
+typedef union {
+	size_t table[32774];
+	LZ4HC_CCtx_internal internal_donotuse;
+} LZ4_streamHC_t;
+
+typedef enum {
+	endOnOutputSize = 0,
+	endOnInputSize = 1,
+} endCondition_directive;
+
+typedef enum {
+	decode_full_block = 0,
+	partial_decode = 1,
+} earlyEnd_directive;
+
+typedef struct {
+	const uint8_t *externalDict;
+	size_t extDictSize;
+	const uint8_t *prefixEnd;
+	size_t prefixSize;
+} LZ4_streamDecode_t_internal;
+
+typedef union {
+	unsigned long long table[4];
+	LZ4_streamDecode_t_internal internal_donotuse;
+} LZ4_streamDecode_t;
+
+typedef enum {
+	ZSTD_reset_session_only = 1,
+	ZSTD_reset_parameters = 2,
+	ZSTD_reset_session_and_parameters = 3,
+} ZSTD_ResetDirective;
+
+typedef enum {
+	ZSTD_c_compressionLevel = 100,
+	ZSTD_c_windowLog = 101,
+	ZSTD_c_hashLog = 102,
+	ZSTD_c_chainLog = 103,
+	ZSTD_c_searchLog = 104,
+	ZSTD_c_minMatch = 105,
+	ZSTD_c_targetLength = 106,
+	ZSTD_c_strategy = 107,
+	ZSTD_c_enableLongDistanceMatching = 160,
+	ZSTD_c_ldmHashLog = 161,
+	ZSTD_c_ldmMinMatch = 162,
+	ZSTD_c_ldmBucketSizeLog = 163,
+	ZSTD_c_ldmHashRateLog = 164,
+	ZSTD_c_contentSizeFlag = 200,
+	ZSTD_c_checksumFlag = 201,
+	ZSTD_c_dictIDFlag = 202,
+	ZSTD_c_nbWorkers = 400,
+	ZSTD_c_jobSize = 401,
+	ZSTD_c_overlapLog = 402,
+	ZSTD_c_experimentalParam1 = 500,
+	ZSTD_c_experimentalParam2 = 10,
+	ZSTD_c_experimentalParam3 = 1000,
+	ZSTD_c_experimentalParam4 = 1001,
+	ZSTD_c_experimentalParam5 = 1002,
+	ZSTD_c_experimentalParam6 = 1003,
+	ZSTD_c_experimentalParam7 = 1004,
+	ZSTD_c_experimentalParam8 = 1005,
+	ZSTD_c_experimentalParam9 = 1006,
+	ZSTD_c_experimentalParam10 = 1007,
+	ZSTD_c_experimentalParam11 = 1008,
+	ZSTD_c_experimentalParam12 = 1009,
+	ZSTD_c_experimentalParam13 = 1010,
+	ZSTD_c_experimentalParam14 = 1011,
+	ZSTD_c_experimentalParam15 = 1012,
+} ZSTD_cParameter;
+
+typedef struct {
+	int deltaFindState;
+	U32 deltaNbBits;
+} FSE_symbolCompressionTransform;
+
+typedef struct {
+	size_t bitContainer;
+	unsigned int bitPos;
+	char *startPtr;
+	char *ptr;
+	char *endPtr;
+} BIT_CStream_t;
+
+typedef struct {
+	ptrdiff_t value;
+	const void *stateTable;
+	const void *symbolTT;
+	unsigned int stateLog;
+} FSE_CState_t;
+
+typedef enum {
+	trustInput = 0,
+	checkMaxSymbolValue = 1,
+} HIST_checkInput_e;
+
+typedef s16 int16_t;
+
+typedef int16_t S16;
+
+typedef struct {
+	FSE_CTable CTable[59];
+	U32 scratchBuffer[41];
+	unsigned int count[13];
+	S16 norm[13];
+} HUF_CompressWeightsWksp;
+
+typedef struct {
+	HUF_CompressWeightsWksp wksp;
+	BYTE bitsToWeight[13];
+	BYTE huffWeight[255];
+} HUF_WriteCTableWksp;
+
+struct nodeElt_s {
+	U32 count;
+	U16 parent;
+	BYTE byte;
+	BYTE nbBits;
+};
+
+typedef struct nodeElt_s nodeElt;
+
+typedef nodeElt huffNodeTable[512];
+
+typedef struct {
+	U16 base;
+	U16 curr;
+} rankPos;
+
+typedef struct {
+	huffNodeTable huffNodeTbl;
+	rankPos rankPosition[192];
+} HUF_buildCTable_wksp_tables;
+
+typedef struct {
+	unsigned int count[256];
+	HUF_CElt CTable[257];
+	union {
+		HUF_buildCTable_wksp_tables buildCTable_wksp;
+		HUF_WriteCTableWksp writeCTable_wksp;
+		U32 hist_wksp[1024];
+	} wksps;
+} HUF_compress_tables_t;
+
+typedef struct {
+	size_t bitContainer[2];
+	size_t bitPos[2];
+	BYTE *startPtr;
+	BYTE *ptr;
+	BYTE *endPtr;
+} HUF_CStream_t;
+
+typedef enum {
+	HUF_singleStream = 0,
+	HUF_fourStreams = 1,
+} HUF_nbStreams_e;
+
+typedef size_t (*ZSTD_blockCompressor)(ZSTD_matchState_t *, seqStore_t *, U32 *, const void *, size_t);
+
+struct seqDef_s {
+	U32 offBase;
+	U16 litLength;
+	U16 mlBase;
+};
+
+typedef uint8_t U8;
+
+enum {
+	ZSTDbss_compress = 0,
+	ZSTDbss_noCompress = 1,
+};
+
+struct ZSTD_CDict_s {
+	const void *dictContent;
+	size_t dictContentSize;
+	ZSTD_dictContentType_e dictContentType;
+	U32 *entropyWorkspace;
+	ZSTD_cwksp workspace;
+	ZSTD_matchState_t matchState;
+	ZSTD_compressedBlockState_t cBlockState;
+	ZSTD_customMem customMem;
+	U32 dictID;
+	int compressionLevel;
+	ZSTD_paramSwitch_e useRowMatchFinder;
+};
+
+typedef struct {
+	U32 f1c;
+	U32 f1d;
+	U32 f7b;
+	U32 f7c;
+} ZSTD_cpuid_t;
+
+typedef struct {
+	size_t error;
+	int lowerBound;
+	int upperBound;
+} ZSTD_bounds;
+
+typedef enum {
+	ZSTD_cpm_noAttachDict = 0,
+	ZSTD_cpm_attachDict = 1,
+	ZSTD_cpm_createCDict = 2,
+	ZSTD_cpm_unknown = 3,
+} ZSTD_cParamMode_e;
+
+typedef enum {
+	ZSTD_e_continue = 0,
+	ZSTD_e_flush = 1,
+	ZSTD_e_end = 2,
+} ZSTD_EndDirective;
+
+typedef struct {
+	U32 LLtype;
+	U32 Offtype;
+	U32 MLtype;
+	size_t size;
+	size_t lastCountSize;
+} ZSTD_symbolEncodingTypeStats_t;
+
+struct repcodes_s {
+	U32 rep[3];
+};
+
+typedef struct repcodes_s repcodes_t;
+
+typedef struct {
+	U32 *splitLocations;
+	size_t idx;
+} seqStoreSplits;
+
+typedef enum {
+	ZSTD_dtlm_fast = 0,
+	ZSTD_dtlm_full = 1,
+} ZSTD_dictTableLoadMethod_e;
+
+typedef enum {
+	ZSTD_dlm_byCopy = 0,
+	ZSTD_dlm_byRef = 1,
+} ZSTD_dictLoadMethod_e;
+
+typedef struct {
+	U32 idx;
+	U32 posInSequence;
+	size_t posInSrc;
+} ZSTD_sequencePosition;
+
+typedef size_t (*ZSTD_sequenceCopier)(ZSTD_CCtx *, ZSTD_sequencePosition *, const ZSTD_Sequence * const, size_t, const void *, size_t);
+
+typedef enum {
+	ZSTD_defaultDisallowed = 0,
+	ZSTD_defaultAllowed = 1,
+} ZSTD_defaultPolicy_e;
+
+typedef enum {
+	ZSTD_noDict = 0,
+	ZSTD_extDict = 1,
+	ZSTD_dictMatchState = 2,
+	ZSTD_dedicatedDictSearch = 3,
+} ZSTD_dictMode_e;
+
+typedef enum {
+	ZSTD_no_overlap = 0,
+	ZSTD_overlap_src_before_dst = 1,
+} ZSTD_overlap_e;
+
+typedef struct {
+	unsigned long long ingested;
+	unsigned long long consumed;
+	unsigned long long produced;
+	unsigned long long flushed;
+	unsigned int currentJobID;
+	unsigned int nbActiveWorkers;
+} ZSTD_frameProgression;
+
+typedef enum {
+	ZSTDcrp_makeClean = 0,
+	ZSTDcrp_leaveDirty = 1,
+} ZSTD_compResetPolicy_e;
+
+typedef enum {
+	ZSTDirp_continue = 0,
+	ZSTDirp_reset = 1,
+} ZSTD_indexResetPolicy_e;
+
+typedef enum {
+	ZSTD_resetTarget_CDict = 0,
+	ZSTD_resetTarget_CCtx = 1,
+} ZSTD_resetTarget_e;
+
+typedef struct {
+	S16 norm[53];
+	U32 wksp[285];
+} ZSTD_BuildCTableWksp;
+
+typedef struct {
+	U32 litLength;
+	U32 matchLength;
+} ZSTD_sequenceLength;
+
+typedef enum {
+	search_hashChain = 0,
+	search_binaryTree = 1,
+	search_rowHash = 2,
+} searchMethod_e;
+
+typedef U64 ZSTD_VecMask;
+
+typedef struct {
+	U64 rolling;
+	U64 stopMask;
+} ldmRollingHashState_t;
+
+typedef U32 (*ZSTD_getAllMatchesFn)(ZSTD_match_t *, ZSTD_matchState_t *, U32 *, const BYTE *, const BYTE *, const U32 *, const U32, const U32);
+
+typedef struct {
+	rawSeqStore_t seqStore;
+	U32 startPosInBlock;
+	U32 endPosInBlock;
+	U32 offset;
+} ZSTD_optLdm_t;
+
+typedef ZSTD_frameHeader zstd_frame_header;
+
+typedef struct {
+	U32 tableTime;
+	U32 decode256Time;
+} algo_time_t;
+
+typedef struct {
+	BYTE nbBits;
+	BYTE byte;
+} HUF_DEltX1;
+
+typedef struct {
+	U32 rankVal[13];
+	U32 rankStart[13];
+	U32 statsWksp[218];
+	BYTE symbols[256];
+	BYTE huffWeight[256];
+} HUF_ReadDTableX1_Workspace;
+
+typedef struct {
+	U16 sequence;
+	BYTE nbBits;
+	BYTE length;
+} HUF_DEltX2;
+
+typedef U32 rankValCol_t[13];
+
+typedef struct {
+	BYTE symbol;
+} sortedSymbol_t;
+
+typedef struct {
+	rankValCol_t rankVal[12];
+	U32 rankStats[13];
+	U32 rankStart0[15];
+	sortedSymbol_t sortedSymbol[256];
+	BYTE weightList[256];
+	U32 calleeWksp[218];
+} HUF_ReadDTableX2_Workspace;
+
+typedef struct {
+	BYTE maxTableLog;
+	BYTE tableType;
+	BYTE tableLog;
+	BYTE reserved;
+} DTableDesc;
+
+typedef struct {
+	size_t bitContainer;
+	unsigned int bitsConsumed;
+	const char *ptr;
+	const char *start;
+	const char *limitPtr;
+} BIT_DStream_t;
+
+typedef enum {
+	BIT_DStream_unfinished = 0,
+	BIT_DStream_endOfBuffer = 1,
+	BIT_DStream_completed = 2,
+	BIT_DStream_overflow = 3,
+} BIT_DStream_status;
+
+struct ZSTD_DDict_s {
+	void *dictBuffer;
+	const void *dictContent;
+	size_t dictSize;
+	ZSTD_entropyDTables_t entropy;
+	U32 dictID;
+	U32 entropyPresent;
+	ZSTD_customMem cMem;
+};
+
+typedef struct {
+	size_t compressedSize;
+	unsigned long long decompressedBound;
+} ZSTD_frameSizeInfo;
+
+typedef struct {
+	blockType_e blockType;
+	U32 lastBlock;
+	U32 origSize;
+} blockProperties_t;
+
+typedef enum {
+	not_streaming = 0,
+	is_streaming = 1,
+} streaming_operation;
+
+typedef enum {
+	ZSTD_d_windowLogMax = 100,
+	ZSTD_d_experimentalParam1 = 1000,
+	ZSTD_d_experimentalParam2 = 1001,
+	ZSTD_d_experimentalParam3 = 1002,
+	ZSTD_d_experimentalParam4 = 1003,
+} ZSTD_dParameter;
+
+typedef enum {
+	ZSTDnit_frameHeader = 0,
+	ZSTDnit_blockHeader = 1,
+	ZSTDnit_block = 2,
+	ZSTDnit_lastBlock = 3,
+	ZSTDnit_checksum = 4,
+	ZSTDnit_skippableFrame = 5,
+} ZSTD_nextInputType_e;
+
+typedef enum {
+	ZSTD_lo_isRegularOffset = 0,
+	ZSTD_lo_isLongOffset = 1,
+} ZSTD_longOffset_e;
+
+typedef struct {
+	U32 fastMode;
+	U32 tableLog;
+} ZSTD_seqSymbol_header;
+
+typedef struct {
+	size_t litLength;
+	size_t matchLength;
+	size_t offset;
+} seq_t;
+
+typedef struct {
+	size_t state;
+	const ZSTD_seqSymbol *table;
+} ZSTD_fseState;
+
+typedef struct {
+	BIT_DStream_t DStream;
+	ZSTD_fseState stateLL;
+	ZSTD_fseState stateOffb;
+	ZSTD_fseState stateML;
+	size_t prevOffset[3];
+} seqState_t;
+
+typedef ZSTD_ErrorCode ERR_enum;
+
+typedef unsigned int FSE_DTable;
+
+typedef struct {
+	U16 tableLog;
+	U16 fastMode;
+} FSE_DTableHeader;
+
+typedef struct {
+	unsigned short newState;
+	unsigned char symbol;
+	unsigned char nbBits;
+} FSE_decode_t;
+
+typedef struct {
+	short ncount[256];
+	FSE_DTable dtable[0];
+} FSE_DecompressWksp;
+
+typedef struct {
+	size_t state;
+	const void *table;
+} FSE_DState_t;
+
+enum xz_ret {
+	XZ_OK = 0,
+	XZ_STREAM_END = 1,
+	XZ_UNSUPPORTED_CHECK = 2,
+	XZ_MEM_ERROR = 3,
+	XZ_MEMLIMIT_ERROR = 4,
+	XZ_FORMAT_ERROR = 5,
+	XZ_OPTIONS_ERROR = 6,
+	XZ_DATA_ERROR = 7,
+	XZ_BUF_ERROR = 8,
+};
+
+typedef uint64_t vli_type;
+
+struct xz_dec_hash {
+	vli_type unpadded;
+	vli_type uncompressed;
+	uint32_t crc32;
+};
+
+enum xz_check {
+	XZ_CHECK_NONE = 0,
+	XZ_CHECK_CRC32 = 1,
+	XZ_CHECK_CRC64 = 4,
+	XZ_CHECK_SHA256 = 10,
+};
+
+enum xz_mode {
+	XZ_SINGLE = 0,
+	XZ_PREALLOC = 1,
+	XZ_DYNALLOC = 2,
+};
+
+struct xz_dec_lzma2;
+
+struct xz_dec_bcj;
+
+struct xz_dec {
+	enum {
+		SEQ_STREAM_HEADER = 0,
+		SEQ_BLOCK_START = 1,
+		SEQ_BLOCK_HEADER = 2,
+		SEQ_BLOCK_UNCOMPRESS = 3,
+		SEQ_BLOCK_PADDING = 4,
+		SEQ_BLOCK_CHECK = 5,
+		SEQ_INDEX = 6,
+		SEQ_INDEX_PADDING = 7,
+		SEQ_INDEX_CRC32 = 8,
+		SEQ_STREAM_FOOTER = 9,
+	} sequence;
+	uint32_t pos;
+	vli_type vli;
+	size_t in_start;
+	size_t out_start;
+	uint32_t crc32;
+	enum xz_check check_type;
+	enum xz_mode mode;
+	bool allow_buf_error;
+	struct {
+		vli_type compressed;
+		vli_type uncompressed;
+		uint32_t size;
+	} block_header;
+	struct {
+		vli_type compressed;
+		vli_type uncompressed;
+		vli_type count;
+		struct xz_dec_hash hash;
+	} block;
+	struct {
+		enum {
+			SEQ_INDEX_COUNT = 0,
+			SEQ_INDEX_UNPADDED = 1,
+			SEQ_INDEX_UNCOMPRESSED = 2,
+		} sequence;
+		vli_type size;
+		vli_type count;
+		struct xz_dec_hash hash;
+	} index;
+	struct {
+		size_t pos;
+		size_t size;
+		uint8_t buf[1024];
+	} temp;
+	struct xz_dec_lzma2 *lzma2;
+	struct xz_dec_bcj *bcj;
+	bool bcj_active;
+};
+
+struct xz_buf {
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_size;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+};
+
+enum lzma2_seq {
+	SEQ_CONTROL = 0,
+	SEQ_UNCOMPRESSED_1 = 1,
+	SEQ_UNCOMPRESSED_2 = 2,
+	SEQ_COMPRESSED_0 = 3,
+	SEQ_COMPRESSED_1 = 4,
+	SEQ_PROPERTIES = 5,
+	SEQ_LZMA_PREPARE = 6,
+	SEQ_LZMA_RUN = 7,
+	SEQ_COPY = 8,
+};
+
+enum lzma_state {
+	STATE_LIT_LIT = 0,
+	STATE_MATCH_LIT_LIT = 1,
+	STATE_REP_LIT_LIT = 2,
+	STATE_SHORTREP_LIT_LIT = 3,
+	STATE_MATCH_LIT = 4,
+	STATE_REP_LIT = 5,
+	STATE_SHORTREP_LIT = 6,
+	STATE_LIT_MATCH = 7,
+	STATE_LIT_LONGREP = 8,
+	STATE_LIT_SHORTREP = 9,
+	STATE_NONLIT_MATCH = 10,
+	STATE_NONLIT_REP = 11,
+};
+
+struct rc_dec {
+	uint32_t range;
+	uint32_t code;
+	uint32_t init_bytes_left;
+	const uint8_t *in;
+	size_t in_pos;
+	size_t in_limit;
+};
+
+struct dictionary {
+	uint8_t *buf;
+	size_t start;
+	size_t pos;
+	size_t full;
+	size_t limit;
+	size_t end;
+	uint32_t size;
+	uint32_t size_max;
+	uint32_t allocated;
+	enum xz_mode mode;
+};
+
+struct lzma2_dec {
+	enum lzma2_seq sequence;
+	enum lzma2_seq next_sequence;
+	uint32_t uncompressed;
+	uint32_t compressed;
+	bool need_dict_reset;
+	bool need_props;
+};
+
+struct lzma_len_dec {
+	uint16_t choice;
+	uint16_t choice2;
+	uint16_t low[128];
+	uint16_t mid[128];
+	uint16_t high[256];
+};
+
+struct lzma_dec {
+	uint32_t rep0;
+	uint32_t rep1;
+	uint32_t rep2;
+	uint32_t rep3;
+	enum lzma_state state;
+	uint32_t len;
+	uint32_t lc;
+	uint32_t literal_pos_mask;
+	uint32_t pos_mask;
+	uint16_t is_match[192];
+	uint16_t is_rep[12];
+	uint16_t is_rep0[12];
+	uint16_t is_rep1[12];
+	uint16_t is_rep2[12];
+	uint16_t is_rep0_long[192];
+	uint16_t dist_slot[256];
+	uint16_t dist_special[114];
+	uint16_t dist_align[16];
+	struct lzma_len_dec match_len_dec;
+	struct lzma_len_dec rep_len_dec;
+	uint16_t literal[12288];
+};
+
+struct xz_dec_lzma2 {
+	struct rc_dec rc;
+	struct dictionary dict;
+	struct lzma2_dec lzma2;
+	struct lzma_dec lzma;
+	struct {
+		uint32_t size;
+		uint8_t buf[63];
+	} temp;
+};
+
+struct xz_dec_bcj {
+	enum {
+		BCJ_X86 = 4,
+		BCJ_POWERPC = 5,
+		BCJ_IA64 = 6,
+		BCJ_ARM = 7,
+		BCJ_ARMTHUMB = 8,
+		BCJ_SPARC = 9,
+	} type;
+	enum xz_ret ret;
+	bool single_call;
+	uint32_t pos;
+	uint32_t x86_prev_mask;
+	uint8_t *out;
+	size_t out_pos;
+	size_t out_size;
+	struct {
+		size_t filtered;
+		size_t size;
+		uint8_t buf[16];
+	} temp;
+};
+
+struct ts_config;
+
+struct ts_state;
+
+struct ts_ops {
+	const char *name;
+	struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
+	unsigned int (*find)(struct ts_config *, struct ts_state *);
+	void (*destroy)(struct ts_config *);
+	void * (*get_pattern)(struct ts_config *);
+	unsigned int (*get_pattern_len)(struct ts_config *);
+	struct module *owner;
+	struct list_head list;
+};
+
+struct ts_config {
+	struct ts_ops *ops;
+	int flags;
+	unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);
+	void (*finish)(struct ts_config *, struct ts_state *);
+};
+
+struct ts_state {
+	unsigned int offset;
+	char cb[48];
+};
+
+struct ts_linear_state {
+	unsigned int len;
+	const void *data;
+};
+
+struct ts_kmp {
+	u8 *pattern;
+	unsigned int pattern_len;
+	unsigned int prefix_tbl[0];
+};
+
+struct ts_bm {
+	u8 *pattern;
+	unsigned int patlen;
+	unsigned int bad_shift[256];
+	unsigned int good_shift[0];
+};
+
+enum {
+	TS_FSM_SPECIFIC = 0,
+	TS_FSM_WILDCARD = 1,
+	TS_FSM_DIGIT = 2,
+	TS_FSM_XDIGIT = 3,
+	TS_FSM_PRINT = 4,
+	TS_FSM_ALPHA = 5,
+	TS_FSM_ALNUM = 6,
+	TS_FSM_ASCII = 7,
+	TS_FSM_CNTRL = 8,
+	TS_FSM_GRAPH = 9,
+	TS_FSM_LOWER = 10,
+	TS_FSM_UPPER = 11,
+	TS_FSM_PUNCT = 12,
+	TS_FSM_SPACE = 13,
+	__TS_FSM_TYPE_MAX = 14,
+};
+
+enum {
+	TS_FSM_SINGLE = 0,
+	TS_FSM_PERHAPS = 1,
+	TS_FSM_ANY = 2,
+	TS_FSM_MULTI = 3,
+	TS_FSM_HEAD_IGNORE = 4,
+	__TS_FSM_RECUR_MAX = 5,
+};
+
+struct ts_fsm_token {
+	__u16 type;
+	__u8 recur;
+	__u8 value;
+};
+
+struct ts_fsm {
+	unsigned int ntokens;
+	struct ts_fsm_token tokens[0];
+};
+
+struct ddebug_table {
+	struct list_head link;
+	struct list_head maps;
+	const char *mod_name;
+	unsigned int num_ddebugs;
+	struct _ddebug *ddebugs;
+};
+
+struct ddebug_class_param {
+	union {
+		unsigned long *bits;
+		unsigned int *lvl;
+	};
+	char flags[8];
+	const struct ddebug_class_map *map;
+};
+
+struct ddebug_query {
+	const char *filename;
+	const char *module;
+	const char *function;
+	const char *format;
+	const char *class_string;
+	unsigned int first_lineno;
+	unsigned int last_lineno;
+};
+
+struct flag_settings {
+	unsigned int flags;
+	unsigned int mask;
+};
+
+struct flagsbuf {
+	char buf[8];
+};
+
+struct ddebug_iter {
+	struct ddebug_table *table;
+	int idx;
+};
+
+enum nla_policy_validation {
+	NLA_VALIDATE_NONE = 0,
+	NLA_VALIDATE_RANGE = 1,
+	NLA_VALIDATE_RANGE_WARN_TOO_LONG = 2,
+	NLA_VALIDATE_MIN = 3,
+	NLA_VALIDATE_MAX = 4,
+	NLA_VALIDATE_MASK = 5,
+	NLA_VALIDATE_RANGE_PTR = 6,
+	NLA_VALIDATE_FUNCTION = 7,
+};
+
+enum {
+	NLA_UNSPEC = 0,
+	NLA_U8 = 1,
+	NLA_U16 = 2,
+	NLA_U32 = 3,
+	NLA_U64 = 4,
+	NLA_STRING = 5,
+	NLA_FLAG = 6,
+	NLA_MSECS = 7,
+	NLA_NESTED = 8,
+	NLA_NESTED_ARRAY = 9,
+	NLA_NUL_STRING = 10,
+	NLA_BINARY = 11,
+	NLA_S8 = 12,
+	NLA_S16 = 13,
+	NLA_S32 = 14,
+	NLA_S64 = 15,
+	NLA_BITFIELD32 = 16,
+	NLA_REJECT = 17,
+	NLA_BE16 = 18,
+	NLA_BE32 = 19,
+	__NLA_TYPE_MAX = 20,
+};
+
+enum netlink_validation {
+	NL_VALIDATE_LIBERAL = 0,
+	NL_VALIDATE_TRAILING = 1,
+	NL_VALIDATE_MAXTYPE = 2,
+	NL_VALIDATE_UNSPEC = 4,
+	NL_VALIDATE_STRICT_ATTRS = 8,
+	NL_VALIDATE_NESTED = 16,
+};
+
+struct nla_bitfield32 {
+	__u32 value;
+	__u32 selector;
+};
+
+struct cpu_rmap {
+	struct kref refcount;
+	u16 size;
+	void **obj;
+	struct {
+		u16 index;
+		u16 dist;
+	} near[0];
+};
+
+struct irq_glue {
+	struct irq_affinity_notify notify;
+	struct cpu_rmap *rmap;
+	u16 index;
+};
+
+struct sg_pool {
+	size_t size;
+	char *name;
+	struct kmem_cache *slab;
+	mempool_t *pool;
+};
+
+union handle_parts {
+	depot_stack_handle_t handle;
+	struct {
+		u32 pool_index: 16;
+		u32 offset: 10;
+		u32 valid: 1;
+		u32 extra: 5;
+	};
+};
+
+struct stack_record {
+	struct stack_record *next;
+	u32 hash;
+	u32 size;
+	union handle_parts handle;
+	unsigned long entries[0];
+};
+
+enum asn1_opcode {
+	ASN1_OP_MATCH = 0,
+	ASN1_OP_MATCH_OR_SKIP = 1,
+	ASN1_OP_MATCH_ACT = 2,
+	ASN1_OP_MATCH_ACT_OR_SKIP = 3,
+	ASN1_OP_MATCH_JUMP = 4,
+	ASN1_OP_MATCH_JUMP_OR_SKIP = 5,
+	ASN1_OP_MATCH_ANY = 8,
+	ASN1_OP_MATCH_ANY_OR_SKIP = 9,
+	ASN1_OP_MATCH_ANY_ACT = 10,
+	ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,
+	ASN1_OP_COND_MATCH_OR_SKIP = 17,
+	ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,
+	ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,
+	ASN1_OP_COND_MATCH_ANY = 24,
+	ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,
+	ASN1_OP_COND_MATCH_ANY_ACT = 26,
+	ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,
+	ASN1_OP_COND_FAIL = 28,
+	ASN1_OP_COMPLETE = 29,
+	ASN1_OP_ACT = 30,
+	ASN1_OP_MAYBE_ACT = 31,
+	ASN1_OP_END_SEQ = 32,
+	ASN1_OP_END_SET = 33,
+	ASN1_OP_END_SEQ_OF = 34,
+	ASN1_OP_END_SET_OF = 35,
+	ASN1_OP_END_SEQ_ACT = 36,
+	ASN1_OP_END_SET_ACT = 37,
+	ASN1_OP_END_SEQ_OF_ACT = 38,
+	ASN1_OP_END_SET_OF_ACT = 39,
+	ASN1_OP_RETURN = 40,
+	ASN1_OP__NR = 41,
+};
+
+enum asn1_method {
+	ASN1_PRIM = 0,
+	ASN1_CONS = 1,
+};
+
+struct font_desc {
+	int idx;
+	const char *name;
+	unsigned int width;
+	unsigned int height;
+	unsigned int charcount;
+	const void *data;
+	int pref;
+};
+
+struct font_data {
+	unsigned int extra[4];
+	const unsigned char data[0];
+};
+
+typedef u16 ucs2_char_t;
+
+enum ubsan_checks {
+	ubsan_add_overflow = 0,
+	ubsan_builtin_unreachable = 1,
+	ubsan_cfi_check_fail = 2,
+	ubsan_divrem_overflow = 3,
+	ubsan_dynamic_type_cache_miss = 4,
+	ubsan_float_cast_overflow = 5,
+	ubsan_function_type_mismatch = 6,
+	ubsan_implicit_conversion = 7,
+	ubsan_invalid_builtin = 8,
+	ubsan_invalid_objc_cast = 9,
+	ubsan_load_invalid_value = 10,
+	ubsan_missing_return = 11,
+	ubsan_mul_overflow = 12,
+	ubsan_negate_overflow = 13,
+	ubsan_nullability_arg = 14,
+	ubsan_nullability_return = 15,
+	ubsan_nonnull_arg = 16,
+	ubsan_nonnull_return = 17,
+	ubsan_out_of_bounds = 18,
+	ubsan_pointer_overflow = 19,
+	ubsan_shift_out_of_bounds = 20,
+	ubsan_sub_overflow = 21,
+	ubsan_type_mismatch = 22,
+	ubsan_alignment_assumption = 23,
+	ubsan_vla_bound_not_positive = 24,
+};
+
+struct node_groups {
+	unsigned int id;
+	union {
+		unsigned int ngroups;
+		unsigned int ncpus;
+	};
+};
+
+struct msr {
+	union {
+		struct {
+			u32 l;
+			u32 h;
+		};
+		u64 q;
+	};
+};
+
+struct msr_info {
+	u32 msr_no;
+	struct msr reg;
+	struct msr *msrs;
+	int err;
+};
+
+struct msr_info_completion {
+	struct msr_info msr;
+	struct completion done;
+};
+
+struct msr_regs_info {
+	u32 *regs;
+	int err;
+};
+
+typedef void (*btf_trace_read_msr)(void *, unsigned int, u64, int);
+
+typedef void (*btf_trace_write_msr)(void *, unsigned int, u64, int);
+
+typedef void (*btf_trace_rdpmc)(void *, unsigned int, u64, int);
+
+struct trace_event_raw_msr_trace_class {
+	struct trace_entry ent;
+	unsigned int msr;
+	u64 val;
+	int failed;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_msr_trace_class {};
+
+struct acpi_probe_entry;
+
+typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, struct acpi_probe_entry *);
+
+struct acpi_probe_entry {
+	__u8 id[5];
+	__u8 type;
+	acpi_probe_entry_validate_subtbl subtable_valid;
+	union {
+		acpi_tbl_table_handler probe_table;
+		acpi_tbl_entry_handler probe_subtbl;
+	};
+	kernel_ulong_t driver_data;
+};
+
+typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
+
+struct of_dev_auxdata {
+	char *compatible;
+	resource_size_t phys_addr;
+	char *name;
+	void *platform_data;
+};
+
+struct clk_bulk_data;
+
+struct simple_pm_bus {
+	struct clk_bulk_data *clks;
+	int num_clks;
+};
+
+struct clk_bulk_data {
+	const char *id;
+	struct clk *clk;
+};
+
+enum phy_mode {
+	PHY_MODE_INVALID = 0,
+	PHY_MODE_USB_HOST = 1,
+	PHY_MODE_USB_HOST_LS = 2,
+	PHY_MODE_USB_HOST_FS = 3,
+	PHY_MODE_USB_HOST_HS = 4,
+	PHY_MODE_USB_HOST_SS = 5,
+	PHY_MODE_USB_DEVICE = 6,
+	PHY_MODE_USB_DEVICE_LS = 7,
+	PHY_MODE_USB_DEVICE_FS = 8,
+	PHY_MODE_USB_DEVICE_HS = 9,
+	PHY_MODE_USB_DEVICE_SS = 10,
+	PHY_MODE_USB_OTG = 11,
+	PHY_MODE_UFS_HS_A = 12,
+	PHY_MODE_UFS_HS_B = 13,
+	PHY_MODE_PCIE = 14,
+	PHY_MODE_ETHERNET = 15,
+	PHY_MODE_MIPI_DPHY = 16,
+	PHY_MODE_SATA = 17,
+	PHY_MODE_LVDS = 18,
+	PHY_MODE_DP = 19,
+};
+
+enum phy_media {
+	PHY_MEDIA_DEFAULT = 0,
+	PHY_MEDIA_SR = 1,
+	PHY_MEDIA_DAC = 2,
+};
+
+enum device_link_state {
+	DL_STATE_NONE = -1,
+	DL_STATE_DORMANT = 0,
+	DL_STATE_AVAILABLE = 1,
+	DL_STATE_CONSUMER_PROBE = 2,
+	DL_STATE_ACTIVE = 3,
+	DL_STATE_SUPPLIER_UNBIND = 4,
+};
+
+struct phy;
+
+struct phy_lookup {
+	struct list_head node;
+	const char *dev_id;
+	const char *con_id;
+	struct phy *phy;
+};
+
+struct phy_attrs {
+	u32 bus_width;
+	u32 max_link_rate;
+	enum phy_mode mode;
+};
+
+struct phy_ops;
+
+struct regulator;
+
+struct phy {
+	struct device dev;
+	int id;
+	const struct phy_ops *ops;
+	struct mutex mutex;
+	int init_count;
+	int power_count;
+	struct phy_attrs attrs;
+	struct regulator *pwr;
+	struct dentry *debugfs;
+};
+
+union phy_configure_opts;
+
+struct phy_ops {
+	int (*init)(struct phy *);
+	int (*exit)(struct phy *);
+	int (*power_on)(struct phy *);
+	int (*power_off)(struct phy *);
+	int (*set_mode)(struct phy *, enum phy_mode, int);
+	int (*set_media)(struct phy *, enum phy_media);
+	int (*set_speed)(struct phy *, int);
+	int (*configure)(struct phy *, union phy_configure_opts *);
+	int (*validate)(struct phy *, enum phy_mode, int, union phy_configure_opts *);
+	int (*reset)(struct phy *);
+	int (*calibrate)(struct phy *);
+	void (*release)(struct phy *);
+	struct module *owner;
+};
+
+struct phy_configure_opts_mipi_dphy {
+	unsigned int clk_miss;
+	unsigned int clk_post;
+	unsigned int clk_pre;
+	unsigned int clk_prepare;
+	unsigned int clk_settle;
+	unsigned int clk_term_en;
+	unsigned int clk_trail;
+	unsigned int clk_zero;
+	unsigned int d_term_en;
+	unsigned int eot;
+	unsigned int hs_exit;
+	unsigned int hs_prepare;
+	unsigned int hs_settle;
+	unsigned int hs_skip;
+	unsigned int hs_trail;
+	unsigned int hs_zero;
+	unsigned int init;
+	unsigned int lpx;
+	unsigned int ta_get;
+	unsigned int ta_go;
+	unsigned int ta_sure;
+	unsigned int wakeup;
+	unsigned long hs_clk_rate;
+	unsigned long lp_clk_rate;
+	unsigned char lanes;
+};
+
+struct phy_configure_opts_dp {
+	unsigned int link_rate;
+	unsigned int lanes;
+	unsigned int voltage[4];
+	unsigned int pre[4];
+	u8 ssc: 1;
+	u8 set_rate: 1;
+	u8 set_lanes: 1;
+	u8 set_voltages: 1;
+};
+
+struct phy_configure_opts_lvds {
+	unsigned int bits_per_lane_and_dclk_cycle;
+	unsigned long differential_clk_rate;
+	unsigned int lanes;
+	bool is_slave;
+};
+
+union phy_configure_opts {
+	struct phy_configure_opts_mipi_dphy mipi_dphy;
+	struct phy_configure_opts_dp dp;
+	struct phy_configure_opts_lvds lvds;
+};
+
+struct phy_provider {
+	struct device *dev;
+	struct device_node *children;
+	struct module *owner;
+	struct list_head list;
+	struct phy * (*of_xlate)(struct device *, struct of_phandle_args *);
+};
+
+struct device_link {
+	struct device *supplier;
+	struct list_head s_node;
+	struct device *consumer;
+	struct list_head c_node;
+	struct device link_dev;
+	enum device_link_state status;
+	u32 flags;
+	refcount_t rpm_active;
+	struct kref kref;
+	struct work_struct rm_work;
+	bool supplier_preactivated;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef void (*btf_trace_gpio_direction)(void *, unsigned int, int, int);
+
+typedef void (*btf_trace_gpio_value)(void *, unsigned int, int, int);
+
+enum gpio_lookup_flags {
+	GPIO_ACTIVE_HIGH = 0,
+	GPIO_ACTIVE_LOW = 1,
+	GPIO_OPEN_DRAIN = 2,
+	GPIO_OPEN_SOURCE = 4,
+	GPIO_PERSISTENT = 0,
+	GPIO_TRANSITORY = 8,
+	GPIO_PULL_UP = 16,
+	GPIO_PULL_DOWN = 32,
+	GPIO_PULL_DISABLE = 64,
+	GPIO_LOOKUP_FLAGS_DEFAULT = 0,
+};
+
+enum gpiod_flags {
+	GPIOD_ASIS = 0,
+	GPIOD_IN = 1,
+	GPIOD_OUT_LOW = 3,
+	GPIOD_OUT_HIGH = 7,
+	GPIOD_OUT_LOW_OPEN_DRAIN = 11,
+	GPIOD_OUT_HIGH_OPEN_DRAIN = 15,
+};
+
+enum pin_config_param {
+	PIN_CONFIG_BIAS_BUS_HOLD = 0,
+	PIN_CONFIG_BIAS_DISABLE = 1,
+	PIN_CONFIG_BIAS_HIGH_IMPEDANCE = 2,
+	PIN_CONFIG_BIAS_PULL_DOWN = 3,
+	PIN_CONFIG_BIAS_PULL_PIN_DEFAULT = 4,
+	PIN_CONFIG_BIAS_PULL_UP = 5,
+	PIN_CONFIG_DRIVE_OPEN_DRAIN = 6,
+	PIN_CONFIG_DRIVE_OPEN_SOURCE = 7,
+	PIN_CONFIG_DRIVE_PUSH_PULL = 8,
+	PIN_CONFIG_DRIVE_STRENGTH = 9,
+	PIN_CONFIG_DRIVE_STRENGTH_UA = 10,
+	PIN_CONFIG_INPUT_DEBOUNCE = 11,
+	PIN_CONFIG_INPUT_ENABLE = 12,
+	PIN_CONFIG_INPUT_SCHMITT = 13,
+	PIN_CONFIG_INPUT_SCHMITT_ENABLE = 14,
+	PIN_CONFIG_MODE_LOW_POWER = 15,
+	PIN_CONFIG_MODE_PWM = 16,
+	PIN_CONFIG_OUTPUT = 17,
+	PIN_CONFIG_OUTPUT_ENABLE = 18,
+	PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS = 19,
+	PIN_CONFIG_PERSIST_STATE = 20,
+	PIN_CONFIG_POWER_SOURCE = 21,
+	PIN_CONFIG_SKEW_DELAY = 22,
+	PIN_CONFIG_SLEEP_HARDWARE_STATE = 23,
+	PIN_CONFIG_SLEW_RATE = 24,
+	PIN_CONFIG_END = 127,
+	PIN_CONFIG_MAX = 255,
+};
+
+enum {
+	GPIOLINE_CHANGED_REQUESTED = 1,
+	GPIOLINE_CHANGED_RELEASED = 2,
+	GPIOLINE_CHANGED_CONFIG = 3,
+};
+
+struct gpio_chip;
+
+struct gpio_desc;
+
+struct gpio_device {
+	struct device dev;
+	struct cdev chrdev;
+	int id;
+	struct device *mockdev;
+	struct module *owner;
+	struct gpio_chip *chip;
+	struct gpio_desc *descs;
+	int base;
+	u16 ngpio;
+	const char *label;
+	void *data;
+	struct list_head list;
+	struct blocking_notifier_head line_state_notifier;
+	struct blocking_notifier_head device_notifier;
+	struct rw_semaphore sem;
+	u64 android_kabi_reserved1;
+};
+
+struct gpio_chip {
+	const char *label;
+	struct gpio_device *gpiodev;
+	struct device *parent;
+	struct fwnode_handle *fwnode;
+	struct module *owner;
+	int (*request)(struct gpio_chip *, unsigned int);
+	void (*free)(struct gpio_chip *, unsigned int);
+	int (*get_direction)(struct gpio_chip *, unsigned int);
+	int (*direction_input)(struct gpio_chip *, unsigned int);
+	int (*direction_output)(struct gpio_chip *, unsigned int, int);
+	int (*get)(struct gpio_chip *, unsigned int);
+	int (*get_multiple)(struct gpio_chip *, unsigned long *, unsigned long *);
+	void (*set)(struct gpio_chip *, unsigned int, int);
+	void (*set_multiple)(struct gpio_chip *, unsigned long *, unsigned long *);
+	int (*set_config)(struct gpio_chip *, unsigned int, unsigned long);
+	int (*to_irq)(struct gpio_chip *, unsigned int);
+	void (*dbg_show)(struct seq_file *, struct gpio_chip *);
+	int (*init_valid_mask)(struct gpio_chip *, unsigned long *, unsigned int);
+	int (*add_pin_ranges)(struct gpio_chip *);
+	int (*en_hw_timestamp)(struct gpio_chip *, u32, unsigned long);
+	int (*dis_hw_timestamp)(struct gpio_chip *, u32, unsigned long);
+	int base;
+	u16 ngpio;
+	u16 offset;
+	const char * const *names;
+	bool can_sleep;
+	unsigned long (*read_reg)(void *);
+	void (*write_reg)(void *, unsigned long);
+	bool be_bits;
+	void *reg_dat;
+	void *reg_set;
+	void *reg_clr;
+	void *reg_dir_out;
+	void *reg_dir_in;
+	bool bgpio_dir_unreadable;
+	int bgpio_bits;
+	raw_spinlock_t bgpio_lock;
+	unsigned long bgpio_data;
+	unsigned long bgpio_dir;
+	unsigned long *valid_mask;
+	unsigned int of_gpio_n_cells;
+	int (*of_xlate)(struct gpio_chip *, const struct of_phandle_args *, u32 *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct gpio_desc {
+	struct gpio_device *gdev;
+	unsigned long flags;
+	const char *label;
+	const char *name;
+	unsigned int debounce_period_us;
+	u64 android_kabi_reserved1;
+};
+
+struct trace_event_raw_gpio_direction {
+	struct trace_entry ent;
+	unsigned int gpio;
+	int in;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_gpio_value {
+	struct trace_entry ent;
+	unsigned int gpio;
+	int get;
+	int value;
+	char __data[0];
+};
+
+struct gpiod_hog {
+	struct list_head list;
+	const char *chip_label;
+	u16 chip_hwnum;
+	const char *line_name;
+	unsigned long lflags;
+	int dflags;
+};
+
+struct gpiod_lookup {
+	const char *key;
+	u16 chip_hwnum;
+	const char *con_id;
+	unsigned int idx;
+	unsigned long flags;
+};
+
+struct gpiod_lookup_table {
+	struct list_head list;
+	const char *dev_id;
+	struct gpiod_lookup table[0];
+};
+
+typedef struct {
+	spinlock_t *lock;
+	unsigned long flags;
+} class_spinlock_irqsave_t;
+
+struct gpio_array;
+
+struct gpio_descs {
+	struct gpio_array *info;
+	unsigned int ndescs;
+	struct gpio_desc *desc[0];
+};
+
+struct gpio_array {
+	struct gpio_desc **desc;
+	unsigned int size;
+	struct gpio_chip *chip;
+	unsigned long *get_mask;
+	unsigned long *set_mask;
+	u64 android_kabi_reserved1;
+	unsigned long invert_mask[0];
+};
+
+struct trace_event_data_offsets_gpio_direction {};
+
+struct trace_event_data_offsets_gpio_value {};
+
+struct gpio {
+	unsigned int gpio;
+	unsigned long flags;
+	const char *label;
+};
+
+enum of_gpio_flags {
+	OF_GPIO_ACTIVE_LOW = 1,
+	OF_GPIO_SINGLE_ENDED = 2,
+	OF_GPIO_OPEN_DRAIN = 4,
+	OF_GPIO_TRANSITORY = 8,
+	OF_GPIO_PULL_UP = 16,
+	OF_GPIO_PULL_DOWN = 32,
+	OF_GPIO_PULL_DISABLE = 64,
+};
+
+typedef struct gpio_desc * (*of_find_gpio_quirk)(struct device_node *, const char *, unsigned int, enum of_gpio_flags *);
+
+struct of_rename_gpio {
+	const char *con_id;
+	const char *legacy_id;
+	const char *compatible;
+};
+
+enum gpio_v2_line_flag {
+	GPIO_V2_LINE_FLAG_USED = 1,
+	GPIO_V2_LINE_FLAG_ACTIVE_LOW = 2,
+	GPIO_V2_LINE_FLAG_INPUT = 4,
+	GPIO_V2_LINE_FLAG_OUTPUT = 8,
+	GPIO_V2_LINE_FLAG_EDGE_RISING = 16,
+	GPIO_V2_LINE_FLAG_EDGE_FALLING = 32,
+	GPIO_V2_LINE_FLAG_OPEN_DRAIN = 64,
+	GPIO_V2_LINE_FLAG_OPEN_SOURCE = 128,
+	GPIO_V2_LINE_FLAG_BIAS_PULL_UP = 256,
+	GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN = 512,
+	GPIO_V2_LINE_FLAG_BIAS_DISABLED = 1024,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME = 2048,
+	GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE = 4096,
+};
+
+enum gpio_v2_line_changed_type {
+	GPIO_V2_LINE_CHANGED_REQUESTED = 1,
+	GPIO_V2_LINE_CHANGED_RELEASED = 2,
+	GPIO_V2_LINE_CHANGED_CONFIG = 3,
+};
+
+enum gpio_v2_line_attr_id {
+	GPIO_V2_LINE_ATTR_ID_FLAGS = 1,
+	GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES = 2,
+	GPIO_V2_LINE_ATTR_ID_DEBOUNCE = 3,
+};
+
+enum gpio_v2_line_event_id {
+	GPIO_V2_LINE_EVENT_RISING_EDGE = 1,
+	GPIO_V2_LINE_EVENT_FALLING_EDGE = 2,
+};
+
+struct gpioevent_data {
+	__u64 timestamp;
+	__u32 id;
+};
+
+struct lineevent_state {
+	struct gpio_device *gdev;
+	const char *label;
+	struct gpio_desc *desc;
+	u32 eflags;
+	int irq;
+	wait_queue_head_t wait;
+	struct notifier_block device_unregistered_nb;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpioevent_data *type;
+			const struct gpioevent_data *const_type;
+			char (*rectype)[0];
+			struct gpioevent_data *ptr;
+			const struct gpioevent_data *ptr_const;
+		};
+		struct gpioevent_data buf[16];
+	} events;
+	u64 timestamp;
+};
+
+struct linereq;
+
+struct line {
+	struct gpio_desc *desc;
+	struct linereq *req;
+	unsigned int irq;
+	u64 edflags;
+	u64 timestamp_ns;
+	u32 req_seqno;
+	u32 line_seqno;
+	struct delayed_work work;
+	unsigned int sw_debounced;
+	unsigned int level;
+};
+
+struct gpio_v2_line_event {
+	__u64 timestamp_ns;
+	__u32 id;
+	__u32 offset;
+	__u32 seqno;
+	__u32 line_seqno;
+	__u32 padding[6];
+};
+
+struct linereq {
+	struct gpio_device *gdev;
+	const char *label;
+	u32 num_lines;
+	wait_queue_head_t wait;
+	struct notifier_block device_unregistered_nb;
+	u32 event_buffer_size;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpio_v2_line_event *type;
+			const struct gpio_v2_line_event *const_type;
+			char (*rectype)[0];
+			struct gpio_v2_line_event *ptr;
+			const struct gpio_v2_line_event *ptr_const;
+		};
+		struct gpio_v2_line_event buf[0];
+	} events;
+	atomic_t seqno;
+	struct mutex config_mutex;
+	struct line lines[0];
+};
+
+struct gpio_v2_line_attribute {
+	__u32 id;
+	__u32 padding;
+	union {
+		__u64 flags;
+		__u64 values;
+		__u32 debounce_period_us;
+	};
+};
+
+struct gpio_v2_line_info {
+	char name[32];
+	char consumer[32];
+	__u32 offset;
+	__u32 num_attrs;
+	__u64 flags;
+	struct gpio_v2_line_attribute attrs[10];
+	__u32 padding[4];
+};
+
+struct gpio_v2_line_info_changed {
+	struct gpio_v2_line_info info;
+	__u64 timestamp_ns;
+	__u32 event_type;
+	__u32 padding[5];
+};
+
+struct gpio_chardev_data {
+	struct gpio_device *gdev;
+	wait_queue_head_t wait;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct gpio_v2_line_info_changed *type;
+			const struct gpio_v2_line_info_changed *const_type;
+			char (*rectype)[0];
+			struct gpio_v2_line_info_changed *ptr;
+			const struct gpio_v2_line_info_changed *ptr_const;
+		};
+		struct gpio_v2_line_info_changed buf[32];
+	} events;
+	struct notifier_block lineinfo_changed_nb;
+	struct notifier_block device_unregistered_nb;
+	unsigned long *watched_lines;
+	atomic_t watch_abi_version;
+};
+
+typedef ssize_t (*read_fn)(struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+
+struct gpioline_info {
+	__u32 line_offset;
+	__u32 flags;
+	char name[32];
+	char consumer[32];
+};
+
+struct gpioline_info_changed {
+	struct gpioline_info info;
+	__u64 timestamp;
+	__u32 event_type;
+	__u32 padding[5];
+};
+
+typedef __poll_t (*poll_fn)(struct file *, struct poll_table_struct *);
+
+typedef long (*ioctl_fn)(struct file *, unsigned int, unsigned long);
+
+struct gpio_v2_line_config_attribute {
+	struct gpio_v2_line_attribute attr;
+	__u64 mask;
+};
+
+struct gpio_v2_line_config {
+	__u64 flags;
+	__u32 num_attrs;
+	__u32 padding[5];
+	struct gpio_v2_line_config_attribute attrs[10];
+};
+
+struct gpio_v2_line_request {
+	__u32 offsets[64];
+	char consumer[32];
+	struct gpio_v2_line_config config;
+	__u32 num_lines;
+	__u32 event_buffer_size;
+	__u32 padding[5];
+	__s32 fd;
+};
+
+struct gpiohandle_request {
+	__u32 lineoffsets[64];
+	__u32 flags;
+	__u8 default_values[64];
+	char consumer_label[32];
+	__u32 lines;
+	int fd;
+};
+
+struct linehandle_state {
+	struct gpio_device *gdev;
+	const char *label;
+	struct gpio_desc *descs[64];
+	u32 num_descs;
+};
+
+struct gpiochip_info {
+	char name[32];
+	char label[32];
+	__u32 lines;
+};
+
+struct gpioevent_request {
+	__u32 lineoffset;
+	__u32 handleflags;
+	__u32 eventflags;
+	char consumer_label[32];
+	int fd;
+};
+
+struct gpiohandle_data {
+	__u8 values[64];
+};
+
+struct gpiohandle_config {
+	__u32 flags;
+	__u8 default_values[64];
+	__u32 padding[4];
+};
+
+struct gpio_v2_line_values {
+	__u64 bits;
+	__u64 mask;
+};
+
+struct acpi_device_status {
+	u32 present: 1;
+	u32 enabled: 1;
+	u32 show_in_ui: 1;
+	u32 functional: 1;
+	u32 battery_present: 1;
+	u32 reserved: 27;
+};
+
+struct acpi_device_flags {
+	u32 dynamic_status: 1;
+	u32 removable: 1;
+	u32 ejectable: 1;
+	u32 power_manageable: 1;
+	u32 match_driver: 1;
+	u32 initialized: 1;
+	u32 visited: 1;
+	u32 hotplug_notify: 1;
+	u32 is_dock_station: 1;
+	u32 of_compatible_ok: 1;
+	u32 coherent_dma: 1;
+	u32 cca_seen: 1;
+	u32 enumeration_by_parent: 1;
+	u32 honor_deps: 1;
+	u32 reserved: 18;
+};
+
+typedef char acpi_bus_id[8];
+
+struct acpi_pnp_type {
+	u32 hardware_id: 1;
+	u32 bus_address: 1;
+	u32 platform_id: 1;
+	u32 backlight: 1;
+	u32 reserved: 28;
+};
+
+typedef u64 acpi_bus_address;
+
+typedef char acpi_device_name[40];
+
+typedef char acpi_device_class[20];
+
+struct acpi_device_pnp {
+	acpi_bus_id bus_id;
+	int instance_no;
+	struct acpi_pnp_type type;
+	acpi_bus_address bus_address;
+	char *unique_id;
+	struct list_head ids;
+	acpi_device_name device_name;
+	acpi_device_class device_class;
+	union acpi_object *str_obj;
+};
+
+struct acpi_device_power_flags {
+	u32 explicit_get: 1;
+	u32 power_resources: 1;
+	u32 inrush_current: 1;
+	u32 power_removed: 1;
+	u32 ignore_parent: 1;
+	u32 dsw_present: 1;
+	u32 reserved: 26;
+};
+
+struct acpi_device_power_state {
+	struct {
+		u8 valid: 1;
+		u8 explicit_set: 1;
+		u8 reserved: 6;
+	} flags;
+	int power;
+	int latency;
+	struct list_head resources;
+};
+
+struct acpi_device_power {
+	int state;
+	struct acpi_device_power_flags flags;
+	struct acpi_device_power_state states[5];
+	u8 state_for_enumeration;
+};
+
+struct acpi_device_wakeup_flags {
+	u8 valid: 1;
+	u8 notifier_present: 1;
+};
+
+struct acpi_device_wakeup_context {
+	void (*func)(struct acpi_device_wakeup_context *);
+	struct device *dev;
+};
+
+struct acpi_device_wakeup {
+	acpi_handle gpe_device;
+	u64 gpe_number;
+	u64 sleep_state;
+	struct list_head resources;
+	struct acpi_device_wakeup_flags flags;
+	struct acpi_device_wakeup_context context;
+	struct wakeup_source *ws;
+	int prepare_count;
+	int enable_count;
+};
+
+struct acpi_device_perf_flags {
+	u8 reserved: 8;
+};
+
+struct acpi_device_perf_state;
+
+struct acpi_device_perf {
+	int state;
+	struct acpi_device_perf_flags flags;
+	int state_count;
+	struct acpi_device_perf_state *states;
+};
+
+struct acpi_device_dir {
+	struct proc_dir_entry *entry;
+};
+
+struct acpi_device_data {
+	const union acpi_object *pointer;
+	struct list_head properties;
+	const union acpi_object *of_compatible;
+	struct list_head subnodes;
+};
+
+struct acpi_scan_handler;
+
+struct acpi_hotplug_context;
+
+struct acpi_gpio_mapping;
+
+struct acpi_device {
+	u32 pld_crc;
+	int device_type;
+	acpi_handle handle;
+	struct fwnode_handle fwnode;
+	struct list_head wakeup_list;
+	struct list_head del_list;
+	struct acpi_device_status status;
+	struct acpi_device_flags flags;
+	struct acpi_device_pnp pnp;
+	struct acpi_device_power power;
+	struct acpi_device_wakeup wakeup;
+	struct acpi_device_perf performance;
+	struct acpi_device_dir dir;
+	struct acpi_device_data data;
+	struct acpi_scan_handler *handler;
+	struct acpi_hotplug_context *hp;
+	const struct acpi_gpio_mapping *driver_gpios;
+	void *driver_data;
+	struct device dev;
+	unsigned int physical_node_count;
+	unsigned int dep_unmet;
+	struct list_head physical_node_list;
+	struct mutex physical_node_lock;
+	void (*remove)(struct acpi_device *);
+};
+
+struct acpi_device_perf_state {
+	struct {
+		u8 valid: 1;
+		u8 reserved: 7;
+	} flags;
+	u8 power;
+	u8 performance;
+	int latency;
+};
+
+struct acpi_hotplug_profile {
+	struct kobject kobj;
+	int (*scan_dependent)(struct acpi_device *);
+	void (*notify_online)(struct acpi_device *);
+	bool enabled: 1;
+	bool demand_offline: 1;
+};
+
+struct acpi_scan_handler {
+	const struct acpi_device_id *ids;
+	struct list_head list_node;
+	bool (*match)(const char *, const struct acpi_device_id **);
+	int (*attach)(struct acpi_device *, const struct acpi_device_id *);
+	void (*detach)(struct acpi_device *);
+	void (*bind)(struct device *);
+	void (*unbind)(struct device *);
+	struct acpi_hotplug_profile hotplug;
+};
+
+struct acpi_hotplug_context {
+	struct acpi_device *self;
+	int (*notify)(struct acpi_device *, u32);
+	void (*uevent)(struct acpi_device *, u32);
+	void (*fixup)(struct acpi_device *);
+};
+
+struct acpi_gpio_params;
+
+struct acpi_gpio_mapping {
+	const char *name;
+	const struct acpi_gpio_params *data;
+	unsigned int size;
+	unsigned int quirks;
+};
+
+struct acpi_gpio_params {
+	unsigned int crs_entry_index;
+	unsigned int line_index;
+	bool active_low;
+};
+
+struct acpi_gpio_event {
+	struct list_head node;
+	acpi_handle handle;
+	irq_handler_t handler;
+	unsigned int pin;
+	unsigned int irq;
+	unsigned long irqflags;
+	bool irq_is_wake;
+	bool irq_requested;
+	struct gpio_desc *desc;
+};
+
+typedef u8 acpi_adr_space_type;
+
+struct acpi_gpio_connection {
+	struct list_head node;
+	unsigned int pin;
+	struct gpio_desc *desc;
+};
+
+struct acpi_connection_info {
+	u8 *connection;
+	u16 length;
+	u8 access_length;
+};
+
+struct acpi_gpio_chip {
+	struct acpi_connection_info conn_info;
+	struct list_head conns;
+	struct mutex conn_lock;
+	struct gpio_chip *chip;
+	struct list_head events;
+	struct list_head deferred_req_irqs_list_entry;
+};
+
+typedef void (*acpi_object_handler)(acpi_handle, void *);
+
+struct acpi_resource;
+
+typedef acpi_status (*acpi_walk_resource_callback)(struct acpi_resource *, void *);
+
+struct acpi_resource_irq {
+	u8 descriptor_length;
+	u8 triggering;
+	u8 polarity;
+	u8 shareable;
+	u8 wake_capable;
+	u8 interrupt_count;
+	union {
+		u8 interrupt;
+		struct {
+			struct {} __Empty_interrupts;
+			u8 interrupts[0];
+		};
+	};
+};
+
+struct acpi_resource_dma {
+	u8 type;
+	u8 bus_master;
+	u8 transfer;
+	u8 channel_count;
+	union {
+		u8 channel;
+		struct {
+			struct {} __Empty_channels;
+			u8 channels[0];
+		};
+	};
+};
+
+struct acpi_resource_start_dependent {
+	u8 descriptor_length;
+	u8 compatibility_priority;
+	u8 performance_robustness;
+};
+
+struct acpi_resource_io {
+	u8 io_decode;
+	u8 alignment;
+	u8 address_length;
+	u16 minimum;
+	u16 maximum;
+} __attribute__((packed));
+
+struct acpi_resource_fixed_io {
+	u16 address;
+	u8 address_length;
+} __attribute__((packed));
+
+struct acpi_resource_fixed_dma {
+	u16 request_lines;
+	u16 channels;
+	u8 width;
+} __attribute__((packed));
+
+struct acpi_resource_vendor {
+	u16 byte_length;
+	u8 byte_data[0];
+};
+
+struct acpi_resource_vendor_typed {
+	u16 byte_length;
+	u8 uuid_subtype;
+	u8 uuid[16];
+	u8 byte_data[0];
+} __attribute__((packed));
+
+struct acpi_resource_end_tag {
+	u8 checksum;
+};
+
+struct acpi_resource_memory24 {
+	u8 write_protect;
+	u16 minimum;
+	u16 maximum;
+	u16 alignment;
+	u16 address_length;
+} __attribute__((packed));
+
+struct acpi_resource_memory32 {
+	u8 write_protect;
+	u32 minimum;
+	u32 maximum;
+	u32 alignment;
+	u32 address_length;
+} __attribute__((packed));
+
+struct acpi_resource_fixed_memory32 {
+	u8 write_protect;
+	u32 address;
+	u32 address_length;
+} __attribute__((packed));
+
+struct acpi_memory_attribute {
+	u8 write_protect;
+	u8 caching;
+	u8 range_type;
+	u8 translation;
+};
+
+struct acpi_io_attribute {
+	u8 range_type;
+	u8 translation;
+	u8 translation_type;
+	u8 reserved1;
+};
+
+union acpi_resource_attribute {
+	struct acpi_memory_attribute mem;
+	struct acpi_io_attribute io;
+	u8 type_specific;
+};
+
+struct acpi_address16_attribute {
+	u16 granularity;
+	u16 minimum;
+	u16 maximum;
+	u16 translation_offset;
+	u16 address_length;
+};
+
+struct acpi_resource_source {
+	u8 index;
+	u16 string_length;
+	char *string_ptr;
+} __attribute__((packed));
+
+struct acpi_resource_address16 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	struct acpi_address16_attribute address;
+	struct acpi_resource_source resource_source;
+} __attribute__((packed));
+
+struct acpi_address32_attribute {
+	u32 granularity;
+	u32 minimum;
+	u32 maximum;
+	u32 translation_offset;
+	u32 address_length;
+};
+
+struct acpi_resource_address32 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	struct acpi_address32_attribute address;
+	struct acpi_resource_source resource_source;
+} __attribute__((packed));
+
+struct acpi_address64_attribute {
+	u64 granularity;
+	u64 minimum;
+	u64 maximum;
+	u64 translation_offset;
+	u64 address_length;
+};
+
+struct acpi_resource_address64 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	struct acpi_address64_attribute address;
+	struct acpi_resource_source resource_source;
+} __attribute__((packed));
+
+struct acpi_resource_extended_address64 {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+	u8 revision_ID;
+	struct acpi_address64_attribute address;
+	u64 type_specific;
+} __attribute__((packed));
+
+struct acpi_resource_extended_irq {
+	u8 producer_consumer;
+	u8 triggering;
+	u8 polarity;
+	u8 shareable;
+	u8 wake_capable;
+	u8 interrupt_count;
+	struct acpi_resource_source resource_source;
+	union {
+		u32 interrupt;
+		struct {
+			struct {} __Empty_interrupts;
+			u32 interrupts[0];
+		};
+	};
+} __attribute__((packed));
+
+struct acpi_resource_generic_register {
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_resource_gpio {
+	u8 revision_id;
+	u8 connection_type;
+	u8 producer_consumer;
+	u8 pin_config;
+	u8 shareable;
+	u8 wake_capable;
+	u8 io_restriction;
+	u8 triggering;
+	u8 polarity;
+	u16 drive_strength;
+	u16 debounce_timeout;
+	u16 pin_table_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u16 *pin_table;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_i2c_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 access_mode;
+	u16 slave_address;
+	u32 connection_speed;
+} __attribute__((packed));
+
+struct acpi_resource_spi_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 wire_mode;
+	u8 device_polarity;
+	u8 data_bit_length;
+	u8 clock_phase;
+	u8 clock_polarity;
+	u16 device_selection;
+	u32 connection_speed;
+} __attribute__((packed));
+
+struct acpi_resource_uart_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 endian;
+	u8 data_bits;
+	u8 stop_bits;
+	u8 flow_control;
+	u8 parity;
+	u8 lines_enabled;
+	u16 rx_fifo_size;
+	u16 tx_fifo_size;
+	u32 default_baud_rate;
+} __attribute__((packed));
+
+struct acpi_resource_csi2_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+	u8 local_port_instance;
+	u8 phy_type;
+} __attribute__((packed));
+
+struct acpi_resource_common_serialbus {
+	u8 revision_id;
+	u8 type;
+	u8 producer_consumer;
+	u8 slave_mode;
+	u8 connection_sharing;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_function {
+	u8 revision_id;
+	u8 pin_config;
+	u8 shareable;
+	u16 function_number;
+	u16 pin_table_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u16 *pin_table;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_config {
+	u8 revision_id;
+	u8 producer_consumer;
+	u8 shareable;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u16 pin_table_length;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	u16 *pin_table;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_label {
+	u16 string_length;
+	char *string_ptr;
+} __attribute__((packed));
+
+struct acpi_resource_pin_group {
+	u8 revision_id;
+	u8 producer_consumer;
+	u16 pin_table_length;
+	u16 vendor_length;
+	u16 *pin_table;
+	struct acpi_resource_label resource_label;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_group_function {
+	u8 revision_id;
+	u8 producer_consumer;
+	u8 shareable;
+	u16 function_number;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	struct acpi_resource_label resource_source_label;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_pin_group_config {
+	u8 revision_id;
+	u8 producer_consumer;
+	u8 shareable;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u16 vendor_length;
+	struct acpi_resource_source resource_source;
+	struct acpi_resource_label resource_source_label;
+	u8 *vendor_data;
+} __attribute__((packed));
+
+struct acpi_resource_clock_input {
+	u8 revision_id;
+	u8 mode;
+	u8 scale;
+	u16 frequency_divisor;
+	u32 frequency_numerator;
+	struct acpi_resource_source resource_source;
+} __attribute__((packed));
+
+struct acpi_resource_address {
+	u8 resource_type;
+	u8 producer_consumer;
+	u8 decode;
+	u8 min_address_fixed;
+	u8 max_address_fixed;
+	union acpi_resource_attribute info;
+};
+
+union acpi_resource_data {
+	struct acpi_resource_irq irq;
+	struct acpi_resource_dma dma;
+	struct acpi_resource_start_dependent start_dpf;
+	struct acpi_resource_io io;
+	struct acpi_resource_fixed_io fixed_io;
+	struct acpi_resource_fixed_dma fixed_dma;
+	struct acpi_resource_vendor vendor;
+	struct acpi_resource_vendor_typed vendor_typed;
+	struct acpi_resource_end_tag end_tag;
+	struct acpi_resource_memory24 memory24;
+	struct acpi_resource_memory32 memory32;
+	struct acpi_resource_fixed_memory32 fixed_memory32;
+	struct acpi_resource_address16 address16;
+	struct acpi_resource_address32 address32;
+	struct acpi_resource_address64 address64;
+	struct acpi_resource_extended_address64 ext_address64;
+	struct acpi_resource_extended_irq extended_irq;
+	struct acpi_resource_generic_register generic_reg;
+	struct acpi_resource_gpio gpio;
+	struct acpi_resource_i2c_serialbus i2c_serial_bus;
+	struct acpi_resource_spi_serialbus spi_serial_bus;
+	struct acpi_resource_uart_serialbus uart_serial_bus;
+	struct acpi_resource_csi2_serialbus csi2_serial_bus;
+	struct acpi_resource_common_serialbus common_serial_bus;
+	struct acpi_resource_pin_function pin_function;
+	struct acpi_resource_pin_config pin_config;
+	struct acpi_resource_pin_group pin_group;
+	struct acpi_resource_pin_group_function pin_group_function;
+	struct acpi_resource_pin_group_config pin_group_config;
+	struct acpi_resource_clock_input clock_input;
+	struct acpi_resource_address address;
+};
+
+struct acpi_resource {
+	u32 type;
+	u32 length;
+	union acpi_resource_data data;
+};
+
+struct acpi_gpio_info {
+	struct acpi_device *adev;
+	enum gpiod_flags flags;
+	bool gpioint;
+	int pin_config;
+	int polarity;
+	int triggering;
+	bool wake_capable;
+	unsigned int debounce;
+	unsigned int quirks;
+};
+
+struct acpi_gpio_lookup {
+	struct acpi_gpio_info info;
+	int index;
+	u16 pin_index;
+	bool active_low;
+	struct gpio_desc *desc;
+	int n;
+};
+
+typedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *);
+
+typedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **);
+
+typedef u64 acpi_size;
+
+struct acpi_buffer {
+	acpi_size length;
+	void *pointer;
+};
+
+struct acpi_gpiolib_dmi_quirk {
+	bool no_edge_events_on_boot;
+	char *ignore_wake;
+	char *ignore_interrupt;
+};
+
+struct software_node {
+	const char *name;
+	const struct software_node *parent;
+	const struct property_entry *properties;
+};
+
+struct bgpio_pdata {
+	const char *label;
+	int base;
+	int ngpio;
+};
+
+enum {
+	pci_channel_io_normal = 1,
+	pci_channel_io_frozen = 2,
+	pci_channel_io_perm_failure = 3,
+};
+
+struct rcec_ea {
+	u8 nextbusn;
+	u8 lastbusn;
+	u32 bitmap;
+};
+
+struct pci_sriov {
+	int pos;
+	int nres;
+	u32 cap;
+	u16 ctrl;
+	u16 total_VFs;
+	u16 initial_VFs;
+	u16 num_VFs;
+	u16 offset;
+	u16 stride;
+	u16 vf_device;
+	u32 pgsz;
+	u8 link;
+	u8 max_VF_buses;
+	u16 driver_max_VFs;
+	struct pci_dev *dev;
+	struct pci_dev *self;
+	u32 class;
+	u8 hdr_type;
+	u16 subsystem_vendor;
+	u16 subsystem_device;
+	resource_size_t barsz[6];
+	bool drivers_autoprobe;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef u64 pci_bus_addr_t;
+
+struct pci_bus_region {
+	pci_bus_addr_t start;
+	pci_bus_addr_t end;
+};
+
+enum pci_fixup_pass {
+	pci_fixup_early = 0,
+	pci_fixup_header = 1,
+	pci_fixup_final = 2,
+	pci_fixup_enable = 3,
+	pci_fixup_resume = 4,
+	pci_fixup_suspend = 5,
+	pci_fixup_resume_early = 6,
+	pci_fixup_suspend_late = 7,
+};
+
+struct pci_bus_resource {
+	struct list_head list;
+	struct resource *res;
+	unsigned int flags;
+};
+
+enum pci_bar_type {
+	pci_bar_unknown = 0,
+	pci_bar_io = 1,
+	pci_bar_mem32 = 2,
+	pci_bar_mem64 = 3,
+};
+
+enum pci_bus_speed {
+	PCI_SPEED_33MHz = 0,
+	PCI_SPEED_66MHz = 1,
+	PCI_SPEED_66MHz_PCIX = 2,
+	PCI_SPEED_100MHz_PCIX = 3,
+	PCI_SPEED_133MHz_PCIX = 4,
+	PCI_SPEED_66MHz_PCIX_ECC = 5,
+	PCI_SPEED_100MHz_PCIX_ECC = 6,
+	PCI_SPEED_133MHz_PCIX_ECC = 7,
+	PCI_SPEED_66MHz_PCIX_266 = 9,
+	PCI_SPEED_100MHz_PCIX_266 = 10,
+	PCI_SPEED_133MHz_PCIX_266 = 11,
+	AGP_UNKNOWN = 12,
+	AGP_1X = 13,
+	AGP_2X = 14,
+	AGP_4X = 15,
+	AGP_8X = 16,
+	PCI_SPEED_66MHz_PCIX_533 = 17,
+	PCI_SPEED_100MHz_PCIX_533 = 18,
+	PCI_SPEED_133MHz_PCIX_533 = 19,
+	PCIE_SPEED_2_5GT = 20,
+	PCIE_SPEED_5_0GT = 21,
+	PCIE_SPEED_8_0GT = 22,
+	PCIE_SPEED_16_0GT = 23,
+	PCIE_SPEED_32_0GT = 24,
+	PCIE_SPEED_64_0GT = 25,
+	PCI_SPEED_UNKNOWN = 255,
+};
+
+enum pci_bus_flags {
+	PCI_BUS_FLAGS_NO_MSI = 1,
+	PCI_BUS_FLAGS_NO_MMRBC = 2,
+	PCI_BUS_FLAGS_NO_AERSID = 4,
+	PCI_BUS_FLAGS_NO_EXTCFG = 8,
+};
+
+enum pcie_bus_config_types {
+	PCIE_BUS_TUNE_OFF = 0,
+	PCIE_BUS_DEFAULT = 1,
+	PCIE_BUS_SAFE = 2,
+	PCIE_BUS_PERFORMANCE = 3,
+	PCIE_BUS_PEER2PEER = 4,
+};
+
+enum {
+	PCI_REASSIGN_ALL_RSRC = 1,
+	PCI_REASSIGN_ALL_BUS = 2,
+	PCI_PROBE_ONLY = 4,
+	PCI_CAN_SKIP_ISA_ALIGN = 8,
+	PCI_ENABLE_PROC_DOMAINS = 16,
+	PCI_COMPAT_DOMAIN_0 = 32,
+	PCI_SCAN_ALL_PCIE_DEVS = 64,
+};
+
+enum pci_dev_flags {
+	PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,
+	PCI_DEV_FLAGS_NO_D3 = 2,
+	PCI_DEV_FLAGS_ASSIGNED = 4,
+	PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,
+	PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,
+	PCI_DEV_FLAGS_NO_BUS_RESET = 64,
+	PCI_DEV_FLAGS_NO_PM_RESET = 128,
+	PCI_DEV_FLAGS_VPD_REF_F0 = 256,
+	PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,
+	PCI_DEV_FLAGS_NO_FLR_RESET = 1024,
+	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,
+	PCI_DEV_FLAGS_HAS_MSI_MASKING = 4096,
+};
+
+struct hotplug_slot_ops;
+
+struct hotplug_slot {
+	const struct hotplug_slot_ops *ops;
+	struct list_head slot_list;
+	struct pci_slot *pci_slot;
+	struct module *owner;
+	const char *mod_name;
+};
+
+struct hotplug_slot_ops {
+	int (*enable_slot)(struct hotplug_slot *);
+	int (*disable_slot)(struct hotplug_slot *);
+	int (*set_attention_status)(struct hotplug_slot *, u8);
+	int (*hardware_test)(struct hotplug_slot *, u32);
+	int (*get_power_status)(struct hotplug_slot *, u8 *);
+	int (*get_attention_status)(struct hotplug_slot *, u8 *);
+	int (*get_latch_status)(struct hotplug_slot *, u8 *);
+	int (*get_adapter_status)(struct hotplug_slot *, u8 *);
+	int (*reset_slot)(struct hotplug_slot *, bool);
+};
+
+struct pci_host_bridge {
+	struct device dev;
+	struct pci_bus *bus;
+	struct pci_ops *ops;
+	struct pci_ops *child_ops;
+	void *sysdata;
+	int busnr;
+	int domain_nr;
+	struct list_head windows;
+	struct list_head dma_ranges;
+	u8 (*swizzle_irq)(struct pci_dev *, u8 *);
+	int (*map_irq)(const struct pci_dev *, u8, u8);
+	void (*release_fn)(struct pci_host_bridge *);
+	void *release_data;
+	unsigned int ignore_reset_delay: 1;
+	unsigned int no_ext_tags: 1;
+	unsigned int no_inc_mrrs: 1;
+	unsigned int native_aer: 1;
+	unsigned int native_pcie_hotplug: 1;
+	unsigned int native_shpc_hotplug: 1;
+	unsigned int native_pme: 1;
+	unsigned int native_ltr: 1;
+	unsigned int native_dpc: 1;
+	unsigned int native_cxl_error: 1;
+	unsigned int preserve_config: 1;
+	unsigned int size_windows: 1;
+	unsigned int msi_domain: 1;
+	resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long private[0];
+};
+
+struct pci_domain_busn_res {
+	struct list_head list;
+	struct resource res;
+	int domain_nr;
+};
+
+typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);
+
+struct pci_reset_fn_method {
+	int (*reset_fn)(struct pci_dev *, bool);
+	char *name;
+};
+
+struct bus_attribute {
+	struct attribute attr;
+	ssize_t (*show)(const struct bus_type *, char *);
+	ssize_t (*store)(const struct bus_type *, const char *, size_t);
+};
+
+enum pcie_reset_state {
+	pcie_deassert_reset = 1,
+	pcie_warm_reset = 2,
+	pcie_hot_reset = 3,
+};
+
+enum pcie_link_width {
+	PCIE_LNK_WIDTH_RESRV = 0,
+	PCIE_LNK_X1 = 1,
+	PCIE_LNK_X2 = 2,
+	PCIE_LNK_X4 = 4,
+	PCIE_LNK_X8 = 8,
+	PCIE_LNK_X12 = 12,
+	PCIE_LNK_X16 = 16,
+	PCIE_LNK_X32 = 32,
+	PCIE_LNK_WIDTH_UNKNOWN = 255,
+};
+
+struct pci_cap_saved_data {
+	u16 cap_nr;
+	bool cap_extended;
+	unsigned int size;
+	u32 data[0];
+};
+
+struct pci_cap_saved_state {
+	struct hlist_node next;
+	struct pci_cap_saved_data cap;
+};
+
+struct pci_pme_device {
+	struct list_head list;
+	struct pci_dev *dev;
+};
+
+struct pci_devres {
+	unsigned int enabled: 1;
+	unsigned int pinned: 1;
+	unsigned int orig_intx: 1;
+	unsigned int restore_intx: 1;
+	unsigned int mwi: 1;
+	u32 region_mask;
+};
+
+struct pci_saved_state {
+	u32 config_space[16];
+	struct pci_cap_saved_data cap[0];
+};
+
+struct driver_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct device_driver *, char *);
+	ssize_t (*store)(struct device_driver *, const char *, size_t);
+};
+
+enum pci_ers_result {
+	PCI_ERS_RESULT_NONE = 1,
+	PCI_ERS_RESULT_CAN_RECOVER = 2,
+	PCI_ERS_RESULT_NEED_RESET = 3,
+	PCI_ERS_RESULT_DISCONNECT = 4,
+	PCI_ERS_RESULT_RECOVERED = 5,
+	PCI_ERS_RESULT_NO_AER_DRIVER = 6,
+};
+
+struct pci_dynid {
+	struct list_head node;
+	struct pci_device_id id;
+};
+
+struct pcie_device {
+	int irq;
+	struct pci_dev *port;
+	u32 service;
+	void *priv_data;
+	struct device device;
+};
+
+struct pcie_port_service_driver {
+	const char *name;
+	int (*probe)(struct pcie_device *);
+	void (*remove)(struct pcie_device *);
+	int (*suspend)(struct pcie_device *);
+	int (*resume_noirq)(struct pcie_device *);
+	int (*resume)(struct pcie_device *);
+	int (*runtime_suspend)(struct pcie_device *);
+	int (*runtime_resume)(struct pcie_device *);
+	int (*slot_reset)(struct pcie_device *);
+	int port_type;
+	u32 service;
+	struct device_driver driver;
+};
+
+struct drv_dev_and_id {
+	struct pci_driver *drv;
+	struct pci_dev *dev;
+	const struct pci_device_id *id;
+};
+
+enum pci_mmap_api {
+	PCI_MMAP_SYSFS = 0,
+	PCI_MMAP_PROCFS = 1,
+};
+
+enum pci_mmap_state {
+	pci_mmap_io = 0,
+	pci_mmap_mem = 1,
+};
+
+enum enable_type {
+	undefined = -1,
+	user_disabled = 0,
+	auto_disabled = 1,
+	user_enabled = 2,
+	auto_enabled = 3,
+};
+
+enum release_type {
+	leaf_only = 0,
+	whole_subtree = 1,
+};
+
+struct pci_dev_resource {
+	struct list_head list;
+	struct resource *res;
+	struct pci_dev *dev;
+	resource_size_t start;
+	resource_size_t end;
+	resource_size_t add_size;
+	resource_size_t min_align;
+	unsigned long flags;
+};
+
+enum support_mode {
+	ALLOW_LEGACY = 0,
+	DENY_LEGACY = 1,
+};
+
+struct msix_entry {
+	u32 vector;
+	u16 entry;
+};
+
+struct portdrv_service_data {
+	struct pcie_port_service_driver *drv;
+	struct device *dev;
+	u32 service;
+};
+
+typedef int (*pcie_callback_t)(struct pcie_device *);
+
+struct walk_rcec_data {
+	struct pci_dev *rcec;
+	int (*user_callback)(struct pci_dev *, void *);
+	void *user_data;
+};
+
+struct pcie_link_state {
+	struct pci_dev *pdev;
+	struct pci_dev *downstream;
+	struct pcie_link_state *root;
+	struct pcie_link_state *parent;
+	struct list_head sibling;
+	u32 aspm_support: 7;
+	u32 aspm_enabled: 7;
+	u32 aspm_capable: 7;
+	u32 aspm_default: 7;
+	int: 4;
+	u32 aspm_disable: 7;
+	u32 clkpm_capable: 1;
+	u32 clkpm_enabled: 1;
+	u32 clkpm_default: 1;
+	u32 clkpm_disable: 1;
+};
+
+struct aer_stats {
+	u64 dev_cor_errs[16];
+	u64 dev_fatal_errs[27];
+	u64 dev_nonfatal_errs[27];
+	u64 dev_total_cor_errs;
+	u64 dev_total_fatal_errs;
+	u64 dev_total_nonfatal_errs;
+	u64 rootport_total_cor_errs;
+	u64 rootport_total_fatal_errs;
+	u64 rootport_total_nonfatal_errs;
+};
+
+struct aer_err_source {
+	unsigned int status;
+	unsigned int id;
+};
+
+struct aer_header_log_regs {
+	unsigned int dw0;
+	unsigned int dw1;
+	unsigned int dw2;
+	unsigned int dw3;
+};
+
+struct aer_err_info {
+	struct pci_dev *dev[5];
+	int error_dev_num;
+	unsigned int id: 16;
+	unsigned int severity: 2;
+	unsigned int __pad1: 5;
+	unsigned int multi_error_valid: 1;
+	unsigned int first_error: 5;
+	unsigned int __pad2: 2;
+	unsigned int tlp_header_valid: 1;
+	unsigned int status;
+	unsigned int mask;
+	struct aer_header_log_regs tlp;
+};
+
+struct aer_rpc {
+	struct pci_dev *rpd;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct aer_err_source *type;
+			const struct aer_err_source *const_type;
+			char (*rectype)[0];
+			struct aer_err_source *ptr;
+			const struct aer_err_source *ptr_const;
+		};
+		struct aer_err_source buf[128];
+	} aer_fifo;
+};
+
+struct pcie_pme_service_data {
+	spinlock_t lock;
+	struct pcie_device *srv;
+	struct work_struct work;
+	bool noirq;
+};
+
+struct pci_filp_private {
+	enum pci_mmap_state mmap_state;
+	int write_combine;
+};
+
+struct pci_slot_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct pci_slot *, char *);
+	ssize_t (*store)(struct pci_slot *, const char *, size_t);
+};
+
+struct hpx_type0 {
+	u32 revision;
+	u8 cache_line_size;
+	u8 latency_timer;
+	u8 enable_serr;
+	u8 enable_perr;
+};
+
+enum pm_qos_flags_status {
+	PM_QOS_FLAGS_UNDEFINED = -1,
+	PM_QOS_FLAGS_NONE = 0,
+	PM_QOS_FLAGS_SOME = 1,
+	PM_QOS_FLAGS_ALL = 2,
+};
+
+enum hpx_type3_cfg_loc {
+	HPX_CFG_PCICFG = 0,
+	HPX_CFG_PCIE_CAP = 1,
+	HPX_CFG_PCIE_CAP_EXT = 2,
+	HPX_CFG_VEND_CAP = 3,
+	HPX_CFG_DVSEC = 4,
+	HPX_CFG_MAX = 5,
+};
+
+enum hpx_type3_fn_type {
+	HPX_FN_NORMAL = 1,
+	HPX_FN_SRIOV_PHYS = 2,
+	HPX_FN_SRIOV_VIRT = 4,
+};
+
+struct hpx_type1 {
+	u32 revision;
+	u8 max_mem_read;
+	u8 avg_max_split;
+	u16 tot_max_split;
+};
+
+struct hpx_type2 {
+	u32 revision;
+	u32 unc_err_mask_and;
+	u32 unc_err_mask_or;
+	u32 unc_err_sever_and;
+	u32 unc_err_sever_or;
+	u32 cor_err_mask_and;
+	u32 cor_err_mask_or;
+	u32 adv_err_cap_and;
+	u32 adv_err_cap_or;
+	u16 pci_exp_devctl_and;
+	u16 pci_exp_devctl_or;
+	u16 pci_exp_lnkctl_and;
+	u16 pci_exp_lnkctl_or;
+	u32 sec_unc_err_sever_and;
+	u32 sec_unc_err_sever_or;
+	u32 sec_unc_err_mask_and;
+	u32 sec_unc_err_mask_or;
+};
+
+struct hpx_type3 {
+	u16 device_type;
+	u16 function_type;
+	u16 config_space_location;
+	u16 pci_exp_cap_id;
+	u16 pci_exp_cap_ver;
+	u16 pci_exp_vendor_id;
+	u16 dvsec_id;
+	u16 dvsec_rev;
+	u16 match_offset;
+	u32 match_mask_and;
+	u32 match_value;
+	u16 reg_offset;
+	u32 reg_mask_and;
+	u32 reg_mask_or;
+};
+
+struct acpi_pci_root {
+	struct acpi_device *device;
+	struct pci_bus *bus;
+	u16 segment;
+	int bridge_type;
+	struct resource secondary;
+	u32 osc_support_set;
+	u32 osc_control_set;
+	u32 osc_ext_support_set;
+	u32 osc_ext_control_set;
+	phys_addr_t mcfg_addr;
+};
+
+struct of_pci_range {
+	union {
+		u64 pci_addr;
+		u64 bus_addr;
+	};
+	u64 cpu_addr;
+	u64 size;
+	u32 flags;
+};
+
+struct of_bus;
+
+struct of_pci_range_parser {
+	struct device_node *node;
+	struct of_bus *bus;
+	const __be32 *range;
+	const __be32 *end;
+	int na;
+	int ns;
+	int pna;
+	bool dma;
+};
+
+struct pci_dev_reset_methods {
+	u16 vendor;
+	u16 device;
+	int (*reset)(struct pci_dev *, bool);
+};
+
+struct pci_dev_acs_enabled {
+	u16 vendor;
+	u16 device;
+	int (*acs_enabled)(struct pci_dev *, u16);
+};
+
+struct pci_dev_acs_ops {
+	u16 vendor;
+	u16 device;
+	int (*enable_acs)(struct pci_dev *);
+	int (*disable_acs_redir)(struct pci_dev *);
+};
+
+enum pci_irq_reroute_variant {
+	INTEL_IRQ_REROUTE_VARIANT = 1,
+	MAX_IRQ_REROUTE_VARIANTS = 3,
+};
+
+enum {
+	NVME_REG_CAP = 0,
+	NVME_REG_VS = 8,
+	NVME_REG_INTMS = 12,
+	NVME_REG_INTMC = 16,
+	NVME_REG_CC = 20,
+	NVME_REG_CSTS = 28,
+	NVME_REG_NSSR = 32,
+	NVME_REG_AQA = 36,
+	NVME_REG_ASQ = 40,
+	NVME_REG_ACQ = 48,
+	NVME_REG_CMBLOC = 56,
+	NVME_REG_CMBSZ = 60,
+	NVME_REG_BPINFO = 64,
+	NVME_REG_BPRSEL = 68,
+	NVME_REG_BPMBL = 72,
+	NVME_REG_CMBMSC = 80,
+	NVME_REG_CRTO = 104,
+	NVME_REG_PMRCAP = 3584,
+	NVME_REG_PMRCTL = 3588,
+	NVME_REG_PMRSTS = 3592,
+	NVME_REG_PMREBS = 3596,
+	NVME_REG_PMRSWTP = 3600,
+	NVME_REG_DBS = 4096,
+};
+
+enum {
+	NVME_CC_ENABLE = 1,
+	NVME_CC_EN_SHIFT = 0,
+	NVME_CC_CSS_SHIFT = 4,
+	NVME_CC_MPS_SHIFT = 7,
+	NVME_CC_AMS_SHIFT = 11,
+	NVME_CC_SHN_SHIFT = 14,
+	NVME_CC_IOSQES_SHIFT = 16,
+	NVME_CC_IOCQES_SHIFT = 20,
+	NVME_CC_CSS_NVM = 0,
+	NVME_CC_CSS_CSI = 96,
+	NVME_CC_CSS_MASK = 112,
+	NVME_CC_AMS_RR = 0,
+	NVME_CC_AMS_WRRU = 2048,
+	NVME_CC_AMS_VS = 14336,
+	NVME_CC_SHN_NONE = 0,
+	NVME_CC_SHN_NORMAL = 16384,
+	NVME_CC_SHN_ABRUPT = 32768,
+	NVME_CC_SHN_MASK = 49152,
+	NVME_CC_IOSQES = 393216,
+	NVME_CC_IOCQES = 4194304,
+	NVME_CC_CRIME = 16777216,
+};
+
+enum {
+	NVME_CSTS_RDY = 1,
+	NVME_CSTS_CFS = 2,
+	NVME_CSTS_NSSRO = 16,
+	NVME_CSTS_PP = 32,
+	NVME_CSTS_SHST_NORMAL = 0,
+	NVME_CSTS_SHST_OCCUR = 4,
+	NVME_CSTS_SHST_CMPLT = 8,
+	NVME_CSTS_SHST_MASK = 12,
+};
+
+enum {
+	SWITCHTEC_GAS_MRPC_OFFSET = 0,
+	SWITCHTEC_GAS_TOP_CFG_OFFSET = 4096,
+	SWITCHTEC_GAS_SW_EVENT_OFFSET = 6144,
+	SWITCHTEC_GAS_SYS_INFO_OFFSET = 8192,
+	SWITCHTEC_GAS_FLASH_INFO_OFFSET = 8704,
+	SWITCHTEC_GAS_PART_CFG_OFFSET = 16384,
+	SWITCHTEC_GAS_NTB_OFFSET = 65536,
+	SWITCHTEC_GAS_PFF_CSR_OFFSET = 1261568,
+};
+
+enum {
+	SWITCHTEC_NTB_REG_INFO_OFFSET = 0,
+	SWITCHTEC_NTB_REG_CTRL_OFFSET = 16384,
+	SWITCHTEC_NTB_REG_DBMSG_OFFSET = 409600,
+};
+
+struct pci_fixup {
+	u16 vendor;
+	u16 device;
+	u32 class;
+	unsigned int class_shift;
+	int hook_offset;
+};
+
+struct nt_partition_info {
+	u32 xlink_enabled;
+	u32 target_part_low;
+	u32 target_part_high;
+	u32 reserved;
+};
+
+struct ntb_info_regs {
+	u8 partition_count;
+	u8 partition_id;
+	u16 reserved1;
+	u64 ep_map;
+	u16 requester_id;
+	u16 reserved2;
+	u32 reserved3[4];
+	struct nt_partition_info ntp_info[48];
+} __attribute__((packed));
+
+struct ntb_ctrl_regs {
+	u32 partition_status;
+	u32 partition_op;
+	u32 partition_ctrl;
+	u32 bar_setup;
+	u32 bar_error;
+	u16 lut_table_entries;
+	u16 lut_table_offset;
+	u32 lut_error;
+	u16 req_id_table_size;
+	u16 req_id_table_offset;
+	u32 req_id_error;
+	u32 reserved1[7];
+	struct {
+		u32 ctl;
+		u32 win_size;
+		u64 xlate_addr;
+	} bar_entry[6];
+	struct {
+		u32 win_size;
+		u32 reserved[3];
+	} bar_ext_entry[6];
+	u32 reserved2[192];
+	u32 req_id_table[512];
+	u32 reserved3[256];
+	u64 lut_entry[512];
+};
+
+enum smbios_attr_enum {
+	SMBIOS_ATTR_NONE = 0,
+	SMBIOS_ATTR_LABEL_SHOW = 1,
+	SMBIOS_ATTR_INSTANCE_SHOW = 2,
+};
+
+enum dmi_device_type {
+	DMI_DEV_TYPE_ANY = 0,
+	DMI_DEV_TYPE_OTHER = 1,
+	DMI_DEV_TYPE_UNKNOWN = 2,
+	DMI_DEV_TYPE_VIDEO = 3,
+	DMI_DEV_TYPE_SCSI = 4,
+	DMI_DEV_TYPE_ETHERNET = 5,
+	DMI_DEV_TYPE_TOKENRING = 6,
+	DMI_DEV_TYPE_SOUND = 7,
+	DMI_DEV_TYPE_PATA = 8,
+	DMI_DEV_TYPE_SATA = 9,
+	DMI_DEV_TYPE_SAS = 10,
+	DMI_DEV_TYPE_IPMI = -1,
+	DMI_DEV_TYPE_OEM_STRING = -2,
+	DMI_DEV_TYPE_DEV_ONBOARD = -3,
+	DMI_DEV_TYPE_DEV_SLOT = -4,
+};
+
+enum acpi_attr_enum {
+	ACPI_ATTR_LABEL_SHOW = 0,
+	ACPI_ATTR_INDEX_SHOW = 1,
+};
+
+struct dmi_device {
+	struct list_head list;
+	int type;
+	const char *name;
+	void *device_data;
+};
+
+struct dmi_dev_onboard {
+	struct dmi_device dev;
+	int instance;
+	int segment;
+	int bus;
+	int devfn;
+};
+
+struct vga_device {
+	struct list_head list;
+	struct pci_dev *pdev;
+	unsigned int decodes;
+	unsigned int owns;
+	unsigned int locks;
+	unsigned int io_lock_cnt;
+	unsigned int mem_lock_cnt;
+	unsigned int io_norm_cnt;
+	unsigned int mem_norm_cnt;
+	bool bridge_has_one_vga;
+	bool is_firmware_default;
+	unsigned int (*set_decode)(struct pci_dev *, bool);
+};
+
+struct vga_arb_user_card {
+	struct pci_dev *pdev;
+	unsigned int mem_cnt;
+	unsigned int io_cnt;
+};
+
+struct vga_arb_private {
+	struct list_head list;
+	struct pci_dev *target;
+	struct vga_arb_user_card cards[16];
+	spinlock_t lock;
+};
+
+enum pci_interrupt_pin {
+	PCI_INTERRUPT_UNKNOWN = 0,
+	PCI_INTERRUPT_INTA = 1,
+	PCI_INTERRUPT_INTB = 2,
+	PCI_INTERRUPT_INTC = 3,
+	PCI_INTERRUPT_INTD = 4,
+};
+
+enum pci_barno {
+	NO_BAR = -1,
+	BAR_0 = 0,
+	BAR_1 = 1,
+	BAR_2 = 2,
+	BAR_3 = 3,
+	BAR_4 = 4,
+	BAR_5 = 5,
+};
+
+enum pci_epc_irq_type {
+	PCI_EPC_IRQ_UNKNOWN = 0,
+	PCI_EPC_IRQ_LEGACY = 1,
+	PCI_EPC_IRQ_MSI = 2,
+	PCI_EPC_IRQ_MSIX = 3,
+};
+
+enum pci_epc_interface_type {
+	UNKNOWN_INTERFACE = -1,
+	PRIMARY_INTERFACE = 0,
+	SECONDARY_INTERFACE = 1,
+};
+
+struct pci_epc_ops;
+
+struct pci_epc_mem;
+
+struct pci_epc {
+	struct device dev;
+	struct list_head pci_epf;
+	struct mutex list_lock;
+	const struct pci_epc_ops *ops;
+	struct pci_epc_mem **windows;
+	struct pci_epc_mem *mem;
+	unsigned int num_windows;
+	u8 max_functions;
+	u8 *max_vfs;
+	struct config_group *group;
+	struct mutex lock;
+	unsigned long function_num_map;
+};
+
+struct pci_epf_header;
+
+struct pci_epf_bar;
+
+struct pci_epc_features;
+
+struct pci_epc_ops {
+	int (*write_header)(struct pci_epc *, u8, u8, struct pci_epf_header *);
+	int (*set_bar)(struct pci_epc *, u8, u8, struct pci_epf_bar *);
+	void (*clear_bar)(struct pci_epc *, u8, u8, struct pci_epf_bar *);
+	int (*map_addr)(struct pci_epc *, u8, u8, phys_addr_t, u64, size_t);
+	void (*unmap_addr)(struct pci_epc *, u8, u8, phys_addr_t);
+	int (*set_msi)(struct pci_epc *, u8, u8, u8);
+	int (*get_msi)(struct pci_epc *, u8, u8);
+	int (*set_msix)(struct pci_epc *, u8, u8, u16, enum pci_barno, u32);
+	int (*get_msix)(struct pci_epc *, u8, u8);
+	int (*raise_irq)(struct pci_epc *, u8, u8, enum pci_epc_irq_type, u16);
+	int (*map_msi_irq)(struct pci_epc *, u8, u8, phys_addr_t, u8, u32, u32 *, u32 *);
+	int (*start)(struct pci_epc *);
+	void (*stop)(struct pci_epc *);
+	const struct pci_epc_features * (*get_features)(struct pci_epc *, u8, u8);
+	struct module *owner;
+};
+
+struct pci_epf_header {
+	u16 vendorid;
+	u16 deviceid;
+	u8 revid;
+	u8 progif_code;
+	u8 subclass_code;
+	u8 baseclass_code;
+	u8 cache_line_size;
+	u16 subsys_vendor_id;
+	u16 subsys_id;
+	enum pci_interrupt_pin interrupt_pin;
+};
+
+struct pci_epf_bar {
+	dma_addr_t phys_addr;
+	void *addr;
+	size_t size;
+	enum pci_barno barno;
+	int flags;
+};
+
+struct pci_epc_features {
+	unsigned int linkup_notifier: 1;
+	unsigned int core_init_notifier: 1;
+	unsigned int msi_capable: 1;
+	unsigned int msix_capable: 1;
+	u8 reserved_bar;
+	u8 bar_fixed_64bit;
+	u64 bar_fixed_size[6];
+	size_t align;
+};
+
+struct pci_epc_mem_window {
+	phys_addr_t phys_base;
+	size_t size;
+	size_t page_size;
+};
+
+struct pci_epc_mem {
+	struct pci_epc_mem_window window;
+	unsigned long *bitmap;
+	int pages;
+	struct mutex lock;
+};
+
+struct pci_epf_driver;
+
+struct pci_epf_device_id;
+
+struct pci_epc_event_ops;
+
+struct pci_epf {
+	struct device dev;
+	const char *name;
+	struct pci_epf_header *header;
+	struct pci_epf_bar bar[6];
+	u8 msi_interrupts;
+	u16 msix_interrupts;
+	u8 func_no;
+	u8 vfunc_no;
+	struct pci_epc *epc;
+	struct pci_epf *epf_pf;
+	struct pci_epf_driver *driver;
+	const struct pci_epf_device_id *id;
+	struct list_head list;
+	struct mutex lock;
+	struct pci_epc *sec_epc;
+	struct list_head sec_epc_list;
+	struct pci_epf_bar sec_epc_bar[6];
+	u8 sec_epc_func_no;
+	struct config_group *group;
+	unsigned int is_bound;
+	unsigned int is_vf;
+	unsigned long vfunction_num_map;
+	struct list_head pci_vepf;
+	const struct pci_epc_event_ops *event_ops;
+};
+
+struct pci_epf_ops;
+
+struct pci_epf_driver {
+	int (*probe)(struct pci_epf *, const struct pci_epf_device_id *);
+	void (*remove)(struct pci_epf *);
+	struct device_driver driver;
+	struct pci_epf_ops *ops;
+	struct module *owner;
+	struct list_head epf_group;
+	const struct pci_epf_device_id *id_table;
+};
+
+struct pci_epf_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct pci_epf_ops {
+	int (*bind)(struct pci_epf *);
+	void (*unbind)(struct pci_epf *);
+	struct config_group * (*add_cfs)(struct pci_epf *, struct config_group *);
+};
+
+struct pci_epc_event_ops {
+	int (*core_init)(struct pci_epf *);
+	int (*link_up)(struct pci_epf *);
+	int (*link_down)(struct pci_epf *);
+	int (*bme)(struct pci_epf *);
+};
+
+struct dw_edma_plat_ops {
+	int (*irq_vector)(struct device *, unsigned int);
+	u64 (*pci_address)(struct device *, phys_addr_t);
+};
+
+enum dw_pcie_ltssm {
+	DW_PCIE_LTSSM_DETECT_QUIET = 0,
+	DW_PCIE_LTSSM_DETECT_ACT = 1,
+	DW_PCIE_LTSSM_L0 = 17,
+	DW_PCIE_LTSSM_L2_IDLE = 21,
+	DW_PCIE_LTSSM_UNKNOWN = 4294967295,
+};
+
+enum dw_edma_map_format {
+	EDMA_MF_EDMA_LEGACY = 0,
+	EDMA_MF_EDMA_UNROLL = 1,
+	EDMA_MF_HDMA_COMPAT = 5,
+	EDMA_MF_HDMA_NATIVE = 7,
+};
+
+enum dw_pcie_app_clk {
+	DW_PCIE_DBI_CLK = 0,
+	DW_PCIE_MSTR_CLK = 1,
+	DW_PCIE_SLV_CLK = 2,
+	DW_PCIE_NUM_APP_CLKS = 3,
+};
+
+enum dw_pcie_core_clk {
+	DW_PCIE_PIPE_CLK = 0,
+	DW_PCIE_CORE_CLK = 1,
+	DW_PCIE_AUX_CLK = 2,
+	DW_PCIE_REF_CLK = 3,
+	DW_PCIE_NUM_CORE_CLKS = 4,
+};
+
+enum dw_pcie_app_rst {
+	DW_PCIE_DBI_RST = 0,
+	DW_PCIE_MSTR_RST = 1,
+	DW_PCIE_SLV_RST = 2,
+	DW_PCIE_NUM_APP_RSTS = 3,
+};
+
+enum dw_pcie_core_rst {
+	DW_PCIE_NON_STICKY_RST = 0,
+	DW_PCIE_STICKY_RST = 1,
+	DW_PCIE_CORE_RST = 2,
+	DW_PCIE_PIPE_RST = 3,
+	DW_PCIE_PHY_RST = 4,
+	DW_PCIE_HOT_RST = 5,
+	DW_PCIE_PWR_RST = 6,
+	DW_PCIE_NUM_CORE_RSTS = 7,
+};
+
+enum dw_edma_chip_flags {
+	DW_EDMA_CHIP_LOCAL = 1,
+};
+
+struct dw_pcie_host_ops;
+
+struct dw_pcie_rp {
+	bool has_msi_ctrl: 1;
+	bool cfg0_io_shared: 1;
+	u64 cfg0_base;
+	void *va_cfg0_base;
+	u32 cfg0_size;
+	resource_size_t io_base;
+	phys_addr_t io_bus_addr;
+	u32 io_size;
+	int irq;
+	const struct dw_pcie_host_ops *ops;
+	int msi_irq[8];
+	struct irq_domain *irq_domain;
+	struct irq_domain *msi_domain;
+	dma_addr_t msi_data;
+	struct irq_chip *msi_irq_chip;
+	u32 num_vectors;
+	u32 irq_mask[8];
+	struct pci_host_bridge *bridge;
+	raw_spinlock_t lock;
+	unsigned long msi_irq_in_use[4];
+};
+
+struct dw_pcie_ep_ops;
+
+struct dw_pcie_ep {
+	struct pci_epc *epc;
+	struct list_head func_list;
+	const struct dw_pcie_ep_ops *ops;
+	phys_addr_t phys_base;
+	size_t addr_size;
+	size_t page_size;
+	u8 bar_to_atu[6];
+	phys_addr_t *outbound_addr;
+	unsigned long *ib_window_map;
+	unsigned long *ob_window_map;
+	void *msi_mem;
+	phys_addr_t msi_mem_phys;
+	struct pci_epf_bar *epf_bar[6];
+};
+
+struct dw_edma_region {
+	u64 paddr;
+	union {
+		void *mem;
+		void *io;
+	} vaddr;
+	size_t sz;
+};
+
+struct dw_edma;
+
+struct dw_edma_chip {
+	struct device *dev;
+	int nr_irqs;
+	const struct dw_edma_plat_ops *ops;
+	u32 flags;
+	void *reg_base;
+	u16 ll_wr_cnt;
+	u16 ll_rd_cnt;
+	struct dw_edma_region ll_region_wr[8];
+	struct dw_edma_region ll_region_rd[8];
+	struct dw_edma_region dt_region_wr[8];
+	struct dw_edma_region dt_region_rd[8];
+	enum dw_edma_map_format mf;
+	struct dw_edma *dw;
+};
+
+struct reset_control;
+
+struct reset_control_bulk_data {
+	const char *id;
+	struct reset_control *rstc;
+};
+
+struct dw_pcie_ops;
+
+struct dw_pcie {
+	struct device *dev;
+	void *dbi_base;
+	void *dbi_base2;
+	void *atu_base;
+	size_t atu_size;
+	u32 num_ib_windows;
+	u32 num_ob_windows;
+	u32 region_align;
+	u64 region_limit;
+	struct dw_pcie_rp pp;
+	struct dw_pcie_ep ep;
+	const struct dw_pcie_ops *ops;
+	u32 version;
+	u32 type;
+	unsigned long caps;
+	int num_lanes;
+	int link_gen;
+	u8 n_fts[2];
+	struct dw_edma_chip edma;
+	struct clk_bulk_data app_clks[3];
+	struct clk_bulk_data core_clks[4];
+	struct reset_control_bulk_data app_rsts[3];
+	struct reset_control_bulk_data core_rsts[7];
+	struct gpio_desc *pe_rst;
+	bool suspended;
+};
+
+struct dw_pcie_host_ops {
+	int (*host_init)(struct dw_pcie_rp *);
+	void (*host_deinit)(struct dw_pcie_rp *);
+	int (*msi_host_init)(struct dw_pcie_rp *);
+	void (*pme_turn_off)(struct dw_pcie_rp *);
+};
+
+struct dw_pcie_ep_ops {
+	void (*ep_init)(struct dw_pcie_ep *);
+	int (*raise_irq)(struct dw_pcie_ep *, u8, enum pci_epc_irq_type, u16);
+	const struct pci_epc_features * (*get_features)(struct dw_pcie_ep *);
+	unsigned int (*func_conf_select)(struct dw_pcie_ep *, u8);
+};
+
+struct dw_pcie_ops {
+	u64 (*cpu_addr_fixup)(struct dw_pcie *, u64);
+	u32 (*read_dbi)(struct dw_pcie *, void *, u32, size_t);
+	void (*write_dbi)(struct dw_pcie *, void *, u32, size_t, u32);
+	void (*write_dbi2)(struct dw_pcie *, void *, u32, size_t, u32);
+	int (*link_up)(struct dw_pcie *);
+	enum dw_pcie_ltssm (*get_ltssm)(struct dw_pcie *);
+	int (*start_link)(struct dw_pcie *);
+	void (*stop_link)(struct dw_pcie *);
+};
+
+struct dw_pcie_ep_func {
+	struct list_head list;
+	u8 func_no;
+	u8 msi_cap;
+	u8 msix_cap;
+};
+
+struct pci_epf_msix_tbl {
+	u64 msg_addr;
+	u32 msg_data;
+	u32 vector_ctrl;
+};
+
+enum dw_pcie_device_mode {
+	DW_PCIE_UNKNOWN_TYPE = 0,
+	DW_PCIE_EP_TYPE = 1,
+	DW_PCIE_LEG_EP_TYPE = 2,
+	DW_PCIE_RC_TYPE = 3,
+};
+
+struct dw_plat_pcie_of_data {
+	enum dw_pcie_device_mode mode;
+};
+
+struct dw_plat_pcie {
+	struct dw_pcie *pci;
+	enum dw_pcie_device_mode mode;
+};
+
+enum hdmi_infoframe_type {
+	HDMI_INFOFRAME_TYPE_VENDOR = 129,
+	HDMI_INFOFRAME_TYPE_AVI = 130,
+	HDMI_INFOFRAME_TYPE_SPD = 131,
+	HDMI_INFOFRAME_TYPE_AUDIO = 132,
+	HDMI_INFOFRAME_TYPE_DRM = 135,
+};
+
+enum hdmi_colorspace {
+	HDMI_COLORSPACE_RGB = 0,
+	HDMI_COLORSPACE_YUV422 = 1,
+	HDMI_COLORSPACE_YUV444 = 2,
+	HDMI_COLORSPACE_YUV420 = 3,
+	HDMI_COLORSPACE_RESERVED4 = 4,
+	HDMI_COLORSPACE_RESERVED5 = 5,
+	HDMI_COLORSPACE_RESERVED6 = 6,
+	HDMI_COLORSPACE_IDO_DEFINED = 7,
+};
+
+enum hdmi_scan_mode {
+	HDMI_SCAN_MODE_NONE = 0,
+	HDMI_SCAN_MODE_OVERSCAN = 1,
+	HDMI_SCAN_MODE_UNDERSCAN = 2,
+	HDMI_SCAN_MODE_RESERVED = 3,
+};
+
+enum hdmi_colorimetry {
+	HDMI_COLORIMETRY_NONE = 0,
+	HDMI_COLORIMETRY_ITU_601 = 1,
+	HDMI_COLORIMETRY_ITU_709 = 2,
+	HDMI_COLORIMETRY_EXTENDED = 3,
+};
+
+enum hdmi_picture_aspect {
+	HDMI_PICTURE_ASPECT_NONE = 0,
+	HDMI_PICTURE_ASPECT_4_3 = 1,
+	HDMI_PICTURE_ASPECT_16_9 = 2,
+	HDMI_PICTURE_ASPECT_64_27 = 3,
+	HDMI_PICTURE_ASPECT_256_135 = 4,
+	HDMI_PICTURE_ASPECT_RESERVED = 5,
+};
+
+enum hdmi_active_aspect {
+	HDMI_ACTIVE_ASPECT_16_9_TOP = 2,
+	HDMI_ACTIVE_ASPECT_14_9_TOP = 3,
+	HDMI_ACTIVE_ASPECT_16_9_CENTER = 4,
+	HDMI_ACTIVE_ASPECT_PICTURE = 8,
+	HDMI_ACTIVE_ASPECT_4_3 = 9,
+	HDMI_ACTIVE_ASPECT_16_9 = 10,
+	HDMI_ACTIVE_ASPECT_14_9 = 11,
+	HDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13,
+	HDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14,
+	HDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15,
+};
+
+enum hdmi_extended_colorimetry {
+	HDMI_EXTENDED_COLORIMETRY_XV_YCC_601 = 0,
+	HDMI_EXTENDED_COLORIMETRY_XV_YCC_709 = 1,
+	HDMI_EXTENDED_COLORIMETRY_S_YCC_601 = 2,
+	HDMI_EXTENDED_COLORIMETRY_OPYCC_601 = 3,
+	HDMI_EXTENDED_COLORIMETRY_OPRGB = 4,
+	HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM = 5,
+	HDMI_EXTENDED_COLORIMETRY_BT2020 = 6,
+	HDMI_EXTENDED_COLORIMETRY_RESERVED = 7,
+};
+
+enum hdmi_quantization_range {
+	HDMI_QUANTIZATION_RANGE_DEFAULT = 0,
+	HDMI_QUANTIZATION_RANGE_LIMITED = 1,
+	HDMI_QUANTIZATION_RANGE_FULL = 2,
+	HDMI_QUANTIZATION_RANGE_RESERVED = 3,
+};
+
+enum hdmi_nups {
+	HDMI_NUPS_UNKNOWN = 0,
+	HDMI_NUPS_HORIZONTAL = 1,
+	HDMI_NUPS_VERTICAL = 2,
+	HDMI_NUPS_BOTH = 3,
+};
+
+enum hdmi_ycc_quantization_range {
+	HDMI_YCC_QUANTIZATION_RANGE_LIMITED = 0,
+	HDMI_YCC_QUANTIZATION_RANGE_FULL = 1,
+};
+
+enum hdmi_content_type {
+	HDMI_CONTENT_TYPE_GRAPHICS = 0,
+	HDMI_CONTENT_TYPE_PHOTO = 1,
+	HDMI_CONTENT_TYPE_CINEMA = 2,
+	HDMI_CONTENT_TYPE_GAME = 3,
+};
+
+enum hdmi_spd_sdi {
+	HDMI_SPD_SDI_UNKNOWN = 0,
+	HDMI_SPD_SDI_DSTB = 1,
+	HDMI_SPD_SDI_DVDP = 2,
+	HDMI_SPD_SDI_DVHS = 3,
+	HDMI_SPD_SDI_HDDVR = 4,
+	HDMI_SPD_SDI_DVC = 5,
+	HDMI_SPD_SDI_DSC = 6,
+	HDMI_SPD_SDI_VCD = 7,
+	HDMI_SPD_SDI_GAME = 8,
+	HDMI_SPD_SDI_PC = 9,
+	HDMI_SPD_SDI_BD = 10,
+	HDMI_SPD_SDI_SACD = 11,
+	HDMI_SPD_SDI_HDDVD = 12,
+	HDMI_SPD_SDI_PMP = 13,
+};
+
+enum hdmi_audio_coding_type {
+	HDMI_AUDIO_CODING_TYPE_STREAM = 0,
+	HDMI_AUDIO_CODING_TYPE_PCM = 1,
+	HDMI_AUDIO_CODING_TYPE_AC3 = 2,
+	HDMI_AUDIO_CODING_TYPE_MPEG1 = 3,
+	HDMI_AUDIO_CODING_TYPE_MP3 = 4,
+	HDMI_AUDIO_CODING_TYPE_MPEG2 = 5,
+	HDMI_AUDIO_CODING_TYPE_AAC_LC = 6,
+	HDMI_AUDIO_CODING_TYPE_DTS = 7,
+	HDMI_AUDIO_CODING_TYPE_ATRAC = 8,
+	HDMI_AUDIO_CODING_TYPE_DSD = 9,
+	HDMI_AUDIO_CODING_TYPE_EAC3 = 10,
+	HDMI_AUDIO_CODING_TYPE_DTS_HD = 11,
+	HDMI_AUDIO_CODING_TYPE_MLP = 12,
+	HDMI_AUDIO_CODING_TYPE_DST = 13,
+	HDMI_AUDIO_CODING_TYPE_WMA_PRO = 14,
+	HDMI_AUDIO_CODING_TYPE_CXT = 15,
+};
+
+enum hdmi_audio_sample_size {
+	HDMI_AUDIO_SAMPLE_SIZE_STREAM = 0,
+	HDMI_AUDIO_SAMPLE_SIZE_16 = 1,
+	HDMI_AUDIO_SAMPLE_SIZE_20 = 2,
+	HDMI_AUDIO_SAMPLE_SIZE_24 = 3,
+};
+
+enum hdmi_audio_sample_frequency {
+	HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM = 0,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_32000 = 1,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_44100 = 2,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_48000 = 3,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_88200 = 4,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_96000 = 5,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_176400 = 6,
+	HDMI_AUDIO_SAMPLE_FREQUENCY_192000 = 7,
+};
+
+enum hdmi_audio_coding_type_ext {
+	HDMI_AUDIO_CODING_TYPE_EXT_CT = 0,
+	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC = 1,
+	HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2 = 2,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND = 3,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC = 4,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2 = 5,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC = 6,
+	HDMI_AUDIO_CODING_TYPE_EXT_DRA = 7,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND = 8,
+	HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND = 10,
+};
+
+enum hdmi_3d_structure {
+	HDMI_3D_STRUCTURE_INVALID = -1,
+	HDMI_3D_STRUCTURE_FRAME_PACKING = 0,
+	HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE = 1,
+	HDMI_3D_STRUCTURE_LINE_ALTERNATIVE = 2,
+	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL = 3,
+	HDMI_3D_STRUCTURE_L_DEPTH = 4,
+	HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH = 5,
+	HDMI_3D_STRUCTURE_TOP_AND_BOTTOM = 6,
+	HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF = 8,
+};
+
+enum hdmi_eotf {
+	HDMI_EOTF_TRADITIONAL_GAMMA_SDR = 0,
+	HDMI_EOTF_TRADITIONAL_GAMMA_HDR = 1,
+	HDMI_EOTF_SMPTE_ST2084 = 2,
+	HDMI_EOTF_BT_2100_HLG = 3,
+};
+
+enum hdmi_metadata_type {
+	HDMI_STATIC_METADATA_TYPE1 = 0,
+};
+
+struct hdmi_any_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+};
+
+struct hdmi_avi_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	bool itc;
+	unsigned char pixel_repeat;
+	enum hdmi_colorspace colorspace;
+	enum hdmi_scan_mode scan_mode;
+	enum hdmi_colorimetry colorimetry;
+	enum hdmi_picture_aspect picture_aspect;
+	enum hdmi_active_aspect active_aspect;
+	enum hdmi_extended_colorimetry extended_colorimetry;
+	enum hdmi_quantization_range quantization_range;
+	enum hdmi_nups nups;
+	unsigned char video_code;
+	enum hdmi_ycc_quantization_range ycc_quantization_range;
+	enum hdmi_content_type content_type;
+	unsigned short top_bar;
+	unsigned short bottom_bar;
+	unsigned short left_bar;
+	unsigned short right_bar;
+};
+
+struct hdmi_spd_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	char vendor[8];
+	char product[16];
+	enum hdmi_spd_sdi sdi;
+};
+
+struct hdmi_audio_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	unsigned char channels;
+	enum hdmi_audio_coding_type coding_type;
+	enum hdmi_audio_sample_size sample_size;
+	enum hdmi_audio_sample_frequency sample_frequency;
+	enum hdmi_audio_coding_type_ext coding_type_ext;
+	unsigned char channel_allocation;
+	unsigned char level_shift_value;
+	bool downmix_inhibit;
+};
+
+struct hdmi_vendor_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	unsigned int oui;
+	u8 vic;
+	enum hdmi_3d_structure s3d_struct;
+	unsigned int s3d_ext_data;
+};
+
+struct hdmi_drm_infoframe {
+	enum hdmi_infoframe_type type;
+	unsigned char version;
+	unsigned char length;
+	enum hdmi_eotf eotf;
+	enum hdmi_metadata_type metadata_type;
+	struct {
+		u16 x;
+		u16 y;
+	} display_primaries[3];
+	struct {
+		u16 x;
+		u16 y;
+	} white_point;
+	u16 max_display_mastering_luminance;
+	u16 min_display_mastering_luminance;
+	u16 max_cll;
+	u16 max_fall;
+};
+
+union hdmi_vendor_any_infoframe {
+	struct {
+		enum hdmi_infoframe_type type;
+		unsigned char version;
+		unsigned char length;
+		unsigned int oui;
+	} any;
+	struct hdmi_vendor_infoframe hdmi;
+};
+
+struct dp_sdp_header {
+	u8 HB0;
+	u8 HB1;
+	u8 HB2;
+	u8 HB3;
+};
+
+struct dp_sdp {
+	struct dp_sdp_header sdp_header;
+	u8 db[32];
+};
+
+union hdmi_infoframe {
+	struct hdmi_any_infoframe any;
+	struct hdmi_avi_infoframe avi;
+	struct hdmi_spd_infoframe spd;
+	union hdmi_vendor_any_infoframe vendor;
+	struct hdmi_audio_infoframe audio;
+	struct hdmi_drm_infoframe drm;
+};
+
+enum backlight_type {
+	BACKLIGHT_RAW = 1,
+	BACKLIGHT_PLATFORM = 2,
+	BACKLIGHT_FIRMWARE = 3,
+	BACKLIGHT_TYPE_MAX = 4,
+};
+
+enum backlight_scale {
+	BACKLIGHT_SCALE_UNKNOWN = 0,
+	BACKLIGHT_SCALE_LINEAR = 1,
+	BACKLIGHT_SCALE_NON_LINEAR = 2,
+};
+
+enum backlight_update_reason {
+	BACKLIGHT_UPDATE_HOTKEY = 0,
+	BACKLIGHT_UPDATE_SYSFS = 1,
+};
+
+enum backlight_notification {
+	BACKLIGHT_REGISTERED = 0,
+	BACKLIGHT_UNREGISTERED = 1,
+};
+
+struct backlight_properties {
+	int brightness;
+	int max_brightness;
+	int power;
+	int fb_blank;
+	enum backlight_type type;
+	unsigned int state;
+	enum backlight_scale scale;
+};
+
+struct backlight_ops;
+
+struct backlight_device {
+	struct backlight_properties props;
+	struct mutex update_lock;
+	struct mutex ops_lock;
+	const struct backlight_ops *ops;
+	struct notifier_block fb_notif;
+	struct list_head entry;
+	struct device dev;
+	bool fb_bl_on[32];
+	int use_count;
+};
+
+struct fb_info;
+
+struct backlight_ops {
+	unsigned int options;
+	int (*update_status)(struct backlight_device *);
+	int (*get_brightness)(struct backlight_device *);
+	int (*check_fb)(struct backlight_device *, struct fb_info *);
+};
+
+struct fb_bitfield {
+	__u32 offset;
+	__u32 length;
+	__u32 msb_right;
+};
+
+struct fb_var_screeninfo {
+	__u32 xres;
+	__u32 yres;
+	__u32 xres_virtual;
+	__u32 yres_virtual;
+	__u32 xoffset;
+	__u32 yoffset;
+	__u32 bits_per_pixel;
+	__u32 grayscale;
+	struct fb_bitfield red;
+	struct fb_bitfield green;
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;
+	__u32 nonstd;
+	__u32 activate;
+	__u32 height;
+	__u32 width;
+	__u32 accel_flags;
+	__u32 pixclock;
+	__u32 left_margin;
+	__u32 right_margin;
+	__u32 upper_margin;
+	__u32 lower_margin;
+	__u32 hsync_len;
+	__u32 vsync_len;
+	__u32 sync;
+	__u32 vmode;
+	__u32 rotate;
+	__u32 colorspace;
+	__u32 reserved[4];
+};
+
+struct fb_fix_screeninfo {
+	char id[16];
+	unsigned long smem_start;
+	__u32 smem_len;
+	__u32 type;
+	__u32 type_aux;
+	__u32 visual;
+	__u16 xpanstep;
+	__u16 ypanstep;
+	__u16 ywrapstep;
+	__u32 line_length;
+	unsigned long mmio_start;
+	__u32 mmio_len;
+	__u32 accel;
+	__u16 capabilities;
+	__u16 reserved[2];
+};
+
+struct fb_chroma {
+	__u32 redx;
+	__u32 greenx;
+	__u32 bluex;
+	__u32 whitex;
+	__u32 redy;
+	__u32 greeny;
+	__u32 bluey;
+	__u32 whitey;
+};
+
+struct fb_videomode;
+
+struct fb_monspecs {
+	struct fb_chroma chroma;
+	struct fb_videomode *modedb;
+	__u8 manufacturer[4];
+	__u8 monitor[14];
+	__u8 serial_no[14];
+	__u8 ascii[14];
+	__u32 modedb_len;
+	__u32 model;
+	__u32 serial;
+	__u32 year;
+	__u32 week;
+	__u32 hfmin;
+	__u32 hfmax;
+	__u32 dclkmin;
+	__u32 dclkmax;
+	__u16 input;
+	__u16 dpms;
+	__u16 signal;
+	__u16 vfmin;
+	__u16 vfmax;
+	__u16 gamma;
+	__u16 gtf: 1;
+	__u16 misc;
+	__u8 version;
+	__u8 revision;
+	__u8 max_x;
+	__u8 max_y;
+};
+
+struct fb_pixmap {
+	u8 *addr;
+	u32 size;
+	u32 offset;
+	u32 buf_align;
+	u32 scan_align;
+	u32 access_align;
+	u32 flags;
+	u32 blit_x;
+	u32 blit_y;
+	void (*writeio)(struct fb_info *, void *, void *, unsigned int);
+	void (*readio)(struct fb_info *, void *, void *, unsigned int);
+};
+
+struct fb_cmap {
+	__u32 start;
+	__u32 len;
+	__u16 *red;
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;
+};
+
+struct fb_ops;
+
+struct fb_info {
+	refcount_t count;
+	int node;
+	int flags;
+	int fbcon_rotate_hint;
+	struct mutex lock;
+	struct mutex mm_lock;
+	struct fb_var_screeninfo var;
+	struct fb_fix_screeninfo fix;
+	struct fb_monspecs monspecs;
+	struct fb_pixmap pixmap;
+	struct fb_pixmap sprite;
+	struct fb_cmap cmap;
+	struct list_head modelist;
+	struct fb_videomode *mode;
+	const struct fb_ops *fbops;
+	struct device *device;
+	struct device *dev;
+	int class_flag;
+	union {
+		char *screen_base;
+		char *screen_buffer;
+	};
+	unsigned long screen_size;
+	void *pseudo_palette;
+	u32 state;
+	void *fbcon_par;
+	void *par;
+	bool skip_vt_switch;
+};
+
+struct fb_videomode {
+	const char *name;
+	u32 refresh;
+	u32 xres;
+	u32 yres;
+	u32 pixclock;
+	u32 left_margin;
+	u32 right_margin;
+	u32 upper_margin;
+	u32 lower_margin;
+	u32 hsync_len;
+	u32 vsync_len;
+	u32 sync;
+	u32 vmode;
+	u32 flag;
+};
+
+struct fb_fillrect;
+
+struct fb_copyarea;
+
+struct fb_image;
+
+struct fb_cursor;
+
+struct fb_blit_caps;
+
+struct fb_ops {
+	struct module *owner;
+	int (*fb_open)(struct fb_info *, int);
+	int (*fb_release)(struct fb_info *, int);
+	ssize_t (*fb_read)(struct fb_info *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*fb_write)(struct fb_info *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	int (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);
+	int (*fb_set_par)(struct fb_info *);
+	int (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);
+	int (*fb_setcmap)(struct fb_cmap *, struct fb_info *);
+	int (*fb_blank)(int, struct fb_info *);
+	int (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);
+	void (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);
+	void (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);
+	void (*fb_imageblit)(struct fb_info *, const struct fb_image *);
+	int (*fb_cursor)(struct fb_info *, struct fb_cursor *);
+	int (*fb_sync)(struct fb_info *);
+	int (*fb_ioctl)(struct fb_info *, unsigned int, unsigned long);
+	int (*fb_compat_ioctl)(struct fb_info *, unsigned int, unsigned long);
+	int (*fb_mmap)(struct fb_info *, struct vm_area_struct *);
+	void (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);
+	void (*fb_destroy)(struct fb_info *);
+	int (*fb_debug_enter)(struct fb_info *);
+	int (*fb_debug_leave)(struct fb_info *);
+};
+
+struct fb_fillrect {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 color;
+	__u32 rop;
+};
+
+struct fb_copyarea {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 sx;
+	__u32 sy;
+};
+
+struct fb_image {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 fg_color;
+	__u32 bg_color;
+	__u8 depth;
+	const char *data;
+	struct fb_cmap cmap;
+};
+
+struct fbcurpos {
+	__u16 x;
+	__u16 y;
+};
+
+struct fb_cursor {
+	__u16 set;
+	__u16 enable;
+	__u16 rop;
+	const char *mask;
+	struct fbcurpos hot;
+	struct fb_image image;
+};
+
+struct fb_blit_caps {
+	u32 x;
+	u32 y;
+	u32 len;
+	u32 flags;
+};
+
+enum display_flags {
+	DISPLAY_FLAGS_HSYNC_LOW = 1,
+	DISPLAY_FLAGS_HSYNC_HIGH = 2,
+	DISPLAY_FLAGS_VSYNC_LOW = 4,
+	DISPLAY_FLAGS_VSYNC_HIGH = 8,
+	DISPLAY_FLAGS_DE_LOW = 16,
+	DISPLAY_FLAGS_DE_HIGH = 32,
+	DISPLAY_FLAGS_PIXDATA_POSEDGE = 64,
+	DISPLAY_FLAGS_PIXDATA_NEGEDGE = 128,
+	DISPLAY_FLAGS_INTERLACED = 256,
+	DISPLAY_FLAGS_DOUBLESCAN = 512,
+	DISPLAY_FLAGS_DOUBLECLK = 1024,
+	DISPLAY_FLAGS_SYNC_POSEDGE = 2048,
+	DISPLAY_FLAGS_SYNC_NEGEDGE = 4096,
+};
+
+struct display_timing;
+
+struct display_timings {
+	unsigned int num_timings;
+	unsigned int native_mode;
+	struct display_timing **timings;
+};
+
+struct timing_entry {
+	u32 min;
+	u32 typ;
+	u32 max;
+};
+
+struct display_timing {
+	struct timing_entry pixelclock;
+	struct timing_entry hactive;
+	struct timing_entry hfront_porch;
+	struct timing_entry hback_porch;
+	struct timing_entry hsync_len;
+	struct timing_entry vactive;
+	struct timing_entry vfront_porch;
+	struct timing_entry vback_porch;
+	struct timing_entry vsync_len;
+	enum display_flags flags;
+};
+
+struct videomode {
+	unsigned long pixelclock;
+	u32 hactive;
+	u32 hfront_porch;
+	u32 hback_porch;
+	u32 hsync_len;
+	u32 vactive;
+	u32 vfront_porch;
+	u32 vback_porch;
+	u32 vsync_len;
+	enum display_flags flags;
+};
+
+union acpi_name_union {
+	u32 integer;
+	char ascii[4];
+};
+
+typedef u16 acpi_owner_id;
+
+struct acpi_table_desc {
+	acpi_physical_address address;
+	struct acpi_table_header *pointer;
+	u32 length;
+	union acpi_name_union signature;
+	acpi_owner_id owner_id;
+	u8 flags;
+	u16 validation_count;
+};
+
+enum acpi_cedt_type {
+	ACPI_CEDT_TYPE_CHBS = 0,
+	ACPI_CEDT_TYPE_CFMWS = 1,
+	ACPI_CEDT_TYPE_CXIMS = 2,
+	ACPI_CEDT_TYPE_RDPAS = 3,
+	ACPI_CEDT_TYPE_RESERVED = 4,
+};
+
+enum acpi_subtable_type {
+	ACPI_SUBTABLE_COMMON = 0,
+	ACPI_SUBTABLE_HMAT = 1,
+	ACPI_SUBTABLE_PRMT = 2,
+	ACPI_SUBTABLE_CEDT = 3,
+};
+
+struct acpi_madt_io_sapic {
+	struct acpi_subtable_header header;
+	u8 id;
+	u8 reserved;
+	u32 global_irq_base;
+	u64 address;
+};
+
+struct acpi_madt_interrupt_source {
+	struct acpi_subtable_header header;
+	u16 inti_flags;
+	u8 type;
+	u8 id;
+	u8 eid;
+	u8 io_sapic_vector;
+	u32 global_irq;
+	u32 flags;
+};
+
+struct acpi_madt_generic_interrupt {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 cpu_interface_number;
+	u32 uid;
+	u32 flags;
+	u32 parking_version;
+	u32 performance_interrupt;
+	u64 parked_address;
+	u64 base_address;
+	u64 gicv_base_address;
+	u64 gich_base_address;
+	u32 vgic_interrupt;
+	u64 gicr_base_address;
+	u64 arm_mpidr;
+	u8 efficiency_class;
+	u8 reserved2[1];
+	u16 spe_interrupt;
+	u16 trbe_interrupt;
+} __attribute__((packed));
+
+struct acpi_madt_generic_distributor {
+	struct acpi_subtable_header header;
+	u16 reserved;
+	u32 gic_id;
+	u64 base_address;
+	u32 global_irq_base;
+	u8 version;
+	u8 reserved2[3];
+};
+
+struct acpi_madt_core_pic {
+	struct acpi_subtable_header header;
+	u8 version;
+	u32 processor_id;
+	u32 core_id;
+	u32 flags;
+} __attribute__((packed));
+
+struct acpi_madt_rintc {
+	struct acpi_subtable_header header;
+	u8 version;
+	u8 reserved;
+	u32 flags;
+	u64 hart_id;
+	u32 uid;
+	u32 ext_intc_id;
+	u64 imsic_addr;
+	u32 imsic_size;
+} __attribute__((packed));
+
+struct acpi_subtable_entry {
+	union acpi_subtable_headers *hdr;
+	enum acpi_subtable_type type;
+};
+
+enum acpi_predicate {
+	all_versions = 0,
+	less_than_or_equal = 1,
+	equal = 2,
+	greater_than_or_equal = 3,
+};
+
+struct acpi_platform_list {
+	char oem_id[7];
+	char oem_table_id[9];
+	u32 oem_revision;
+	char *table;
+	enum acpi_predicate pred;
+	char *reason;
+	u32 data;
+};
+
+struct acpi_osi_config {
+	u8 default_disabling;
+	unsigned int linux_enable: 1;
+	unsigned int linux_dmi: 1;
+	unsigned int linux_cmdline: 1;
+	unsigned int darwin_enable: 1;
+	unsigned int darwin_dmi: 1;
+	unsigned int darwin_cmdline: 1;
+};
+
+struct acpi_osi_entry {
+	char string[64];
+	bool enable;
+};
+
+typedef u32 (*acpi_interface_handler)(acpi_string, u32);
+
+typedef u32 (*acpi_osd_handler)(void *);
+
+struct acpi_ioremap {
+	struct list_head list;
+	void *virt;
+	acpi_physical_address phys;
+	acpi_size size;
+	union {
+		unsigned long refcount;
+		struct rcu_work rwork;
+	} track;
+};
+
+typedef void (*acpi_osd_exec_callback)(void *);
+
+struct acpi_os_dpc {
+	acpi_osd_exec_callback function;
+	void *context;
+	struct work_struct work;
+};
+
+struct acpi_hp_work {
+	struct work_struct work;
+	struct acpi_device *adev;
+	u32 src;
+};
+
+struct acpi_predefined_names {
+	const char *name;
+	u8 type;
+	char *val;
+};
+
+struct acpi_pci_id {
+	u16 segment;
+	u16 bus;
+	u16 device;
+	u16 function;
+};
+
+typedef enum {
+	OSL_GLOBAL_LOCK_HANDLER = 0,
+	OSL_NOTIFY_HANDLER = 1,
+	OSL_GPE_HANDLER = 2,
+	OSL_DEBUGGER_MAIN_THREAD = 3,
+	OSL_DEBUGGER_EXEC_THREAD = 4,
+	OSL_EC_POLL_HANDLER = 5,
+	OSL_EC_BURST_HANDLER = 6,
+} acpi_execute_type;
+
+struct acpi_device_bus_id {
+	const char *bus_id;
+	struct ida instance_ida;
+	struct list_head node;
+};
+
+struct acpi_pld_info {
+	u8 revision;
+	u8 ignore_color;
+	u8 red;
+	u8 green;
+	u8 blue;
+	u16 width;
+	u16 height;
+	u8 user_visible;
+	u8 dock;
+	u8 lid;
+	u8 panel;
+	u8 vertical_position;
+	u8 horizontal_position;
+	u8 shape;
+	u8 group_orientation;
+	u8 group_token;
+	u8 group_position;
+	u8 bay;
+	u8 ejectable;
+	u8 ospm_eject_required;
+	u8 cabinet_number;
+	u8 card_cage_number;
+	u8 reference;
+	u8 rotation;
+	u8 order;
+	u8 reserved;
+	u16 vertical_offset;
+	u16 horizontal_offset;
+};
+
+struct acpi_handle_list {
+	u32 count;
+	acpi_handle handles[10];
+};
+
+struct acpi_dev_match_info {
+	struct acpi_device_id hid[2];
+	const char *uid;
+	s64 hrv;
+};
+
+struct nvs_region {
+	__u64 phys_start;
+	__u64 size;
+	struct list_head node;
+};
+
+struct nvs_page {
+	unsigned long phys_start;
+	unsigned int size;
+	void *kaddr;
+	void *data;
+	bool unmap;
+	struct list_head node;
+};
+
+struct acpi_wakeup_handler {
+	struct list_head list_node;
+	bool (*wakeup)(void *);
+	void *context;
+};
+
+typedef u32 acpi_event_status;
+
+struct acpi_data_node;
+
+struct acpi_data_node_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct acpi_data_node *, char *);
+	ssize_t (*store)(struct acpi_data_node *, const char *, size_t);
+};
+
+struct acpi_data_node {
+	const char *name;
+	acpi_handle handle;
+	struct fwnode_handle fwnode;
+	struct fwnode_handle *parent;
+	struct acpi_device_data data;
+	struct list_head sibling;
+	struct kobject kobj;
+	struct completion kobj_done;
+};
+
+struct acpi_hardware_id {
+	struct list_head list;
+	const char *id;
+};
+
+typedef void (*acpi_notify_handler)(acpi_handle, u32, void *);
+
+struct acpi_device_physical_node {
+	unsigned int node_id;
+	struct list_head node;
+	struct device *dev;
+	bool put_online: 1;
+};
+
+typedef int (*acpi_op_add)(struct acpi_device *);
+
+typedef void (*acpi_op_remove)(struct acpi_device *);
+
+typedef void (*acpi_op_notify)(struct acpi_device *, u32);
+
+struct acpi_device_ops {
+	acpi_op_add add;
+	acpi_op_remove remove;
+	acpi_op_notify notify;
+};
+
+struct acpi_driver {
+	char name[80];
+	char class[80];
+	const struct acpi_device_id *ids;
+	unsigned int flags;
+	struct acpi_device_ops ops;
+	struct device_driver drv;
+	struct module *owner;
+};
+
+struct acpi_osc_context {
+	char *uuid_str;
+	int rev;
+	struct acpi_buffer cap;
+	struct acpi_buffer ret;
+};
+
+typedef acpi_status (*acpi_table_handler)(u32, void *, void *);
+
+struct acpi_dev_walk_context {
+	int (*fn)(struct acpi_device *, void *);
+	void *data;
+};
+
+struct acpi_bus_type {
+	struct list_head list;
+	const char *name;
+	bool (*match)(struct device *);
+	struct acpi_device * (*find_companion)(struct device *);
+	void (*setup)(struct device *);
+};
+
+struct find_child_walk_data {
+	struct acpi_device *adev;
+	u64 address;
+	int score;
+	bool check_sta;
+	bool check_children;
+};
+
+enum acpi_reconfig_event {
+	ACPI_RECONFIG_DEVICE_ADD = 0,
+	ACPI_RECONFIG_DEVICE_REMOVE = 1,
+};
+
+enum acpi_bus_device_type {
+	ACPI_BUS_TYPE_DEVICE = 0,
+	ACPI_BUS_TYPE_POWER = 1,
+	ACPI_BUS_TYPE_PROCESSOR = 2,
+	ACPI_BUS_TYPE_THERMAL = 3,
+	ACPI_BUS_TYPE_POWER_BUTTON = 4,
+	ACPI_BUS_TYPE_SLEEP_BUTTON = 5,
+	ACPI_BUS_TYPE_ECDT_EC = 6,
+	ACPI_BUS_DEVICE_TYPE_COUNT = 7,
+};
+
+struct acpi_dep_data {
+	struct list_head node;
+	acpi_handle supplier;
+	acpi_handle consumer;
+	bool honor_dep;
+	bool met;
+	bool free_when_met;
+};
+
+struct acpi_scan_clear_dep_work {
+	struct work_struct work;
+	struct acpi_device *adev;
+};
+
+typedef acpi_status (*acpi_walk_callback)(acpi_handle, u32, void *, void **);
+
+struct acpi_pnp_device_id {
+	u32 length;
+	char *string;
+};
+
+struct acpi_pnp_device_id_list {
+	u32 count;
+	u32 list_size;
+	struct acpi_pnp_device_id ids[0];
+};
+
+struct acpi_device_info {
+	u32 info_size;
+	u32 name;
+	acpi_object_type type;
+	u8 param_count;
+	u16 valid;
+	u8 flags;
+	u8 highest_dstates[4];
+	u8 lowest_dstates[5];
+	u64 address;
+	struct acpi_pnp_device_id hardware_id;
+	struct acpi_pnp_device_id unique_id;
+	struct acpi_pnp_device_id class_code;
+	struct acpi_pnp_device_id_list compatible_id_list;
+};
+
+struct acpi_table_stao {
+	struct acpi_table_header header;
+	u8 ignore_uart;
+} __attribute__((packed));
+
+struct acpi_table_spcr {
+	struct acpi_table_header header;
+	u8 interface_type;
+	u8 reserved[3];
+	struct acpi_generic_address serial_port;
+	u8 interrupt_type;
+	u8 pc_interrupt;
+	u32 interrupt;
+	u8 baud_rate;
+	u8 parity;
+	u8 stop_bits;
+	u8 flow_control;
+	u8 terminal_type;
+	u8 reserved1;
+	u16 pci_device_id;
+	u16 pci_vendor_id;
+	u8 pci_bus;
+	u8 pci_device;
+	u8 pci_function;
+	u32 pci_flags;
+	u8 pci_segment;
+	u32 reserved2;
+} __attribute__((packed));
+
+struct irq_override_cmp {
+	const struct dmi_system_id *system;
+	unsigned char irq;
+	unsigned char triggering;
+	unsigned char polarity;
+	unsigned char shareable;
+	bool override;
+};
+
+struct res_proc_context {
+	struct list_head *list;
+	int (*preproc)(struct acpi_resource *, void *);
+	void *preproc_data;
+	int count;
+	int error;
+};
+
+struct resource_win {
+	struct resource res;
+	resource_size_t offset;
+};
+
+struct acpi_lpi_state {
+	u32 min_residency;
+	u32 wake_latency;
+	u32 flags;
+	u32 arch_flags;
+	u32 res_cnt_freq;
+	u32 enable_parent_state;
+	u64 address;
+	u8 index;
+	u8 entry_method;
+	char desc[32];
+};
+
+struct acpi_processor_power {
+	int count;
+	union {
+		struct acpi_processor_cx states[8];
+		struct acpi_lpi_state lpi_states[8];
+	};
+	int timer_broadcast_on_state;
+};
+
+struct acpi_pct_register {
+	u8 descriptor;
+	u16 length;
+	u8 space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 reserved;
+	u64 address;
+} __attribute__((packed));
+
+struct acpi_tsd_package {
+	u64 num_entries;
+	u64 revision;
+	u64 domain;
+	u64 coord_type;
+	u64 num_processors;
+};
+
+struct acpi_processor_tx {
+	u16 power;
+	u16 performance;
+};
+
+struct acpi_processor_tx_tss;
+
+struct acpi_processor;
+
+struct acpi_processor_throttling {
+	unsigned int state;
+	unsigned int platform_limit;
+	struct acpi_pct_register control_register;
+	struct acpi_pct_register status_register;
+	unsigned int state_count;
+	struct acpi_processor_tx_tss *states_tss;
+	struct acpi_tsd_package domain_info;
+	cpumask_var_t shared_cpu_map;
+	int (*acpi_processor_get_throttling)(struct acpi_processor *);
+	int (*acpi_processor_set_throttling)(struct acpi_processor *, int, bool);
+	u32 address;
+	u8 duty_offset;
+	u8 duty_width;
+	u8 tsd_valid_flag;
+	unsigned int shared_type;
+	struct acpi_processor_tx states[16];
+};
+
+struct acpi_processor_lx {
+	int px;
+	int tx;
+};
+
+struct acpi_processor_limit {
+	struct acpi_processor_lx state;
+	struct acpi_processor_lx thermal;
+	struct acpi_processor_lx user;
+};
+
+struct acpi_processor_performance;
+
+struct acpi_processor {
+	acpi_handle handle;
+	u32 acpi_id;
+	phys_cpuid_t phys_id;
+	u32 id;
+	u32 pblk;
+	int performance_platform_limit;
+	int throttling_platform_limit;
+	struct acpi_processor_flags flags;
+	struct acpi_processor_power power;
+	struct acpi_processor_performance *performance;
+	struct acpi_processor_throttling throttling;
+	struct acpi_processor_limit limit;
+	struct thermal_cooling_device *cdev;
+	struct device *dev;
+	struct freq_qos_request perflib_req;
+	struct freq_qos_request thermal_req;
+};
+
+struct acpi_psd_package {
+	u64 num_entries;
+	u64 revision;
+	u64 domain;
+	u64 coord_type;
+	u64 num_processors;
+};
+
+struct acpi_processor_px;
+
+struct acpi_processor_performance {
+	unsigned int state;
+	unsigned int platform_limit;
+	struct acpi_pct_register control_register;
+	struct acpi_pct_register status_register;
+	unsigned int state_count;
+	struct acpi_processor_px *states;
+	struct acpi_psd_package domain_info;
+	cpumask_var_t shared_cpu_map;
+	unsigned int shared_type;
+};
+
+struct acpi_processor_px {
+	u64 core_frequency;
+	u64 power;
+	u64 transition_latency;
+	u64 bus_master_latency;
+	u64 control;
+	u64 status;
+};
+
+struct acpi_processor_tx_tss {
+	u64 freqpercentage;
+	u64 power;
+	u64 transition_latency;
+	u64 control;
+	u64 status;
+};
+
+struct thermal_cooling_device_ops;
+
+struct thermal_cooling_device {
+	int id;
+	char *type;
+	unsigned long max_state;
+	struct device device;
+	struct device_node *np;
+	void *devdata;
+	void *stats;
+	const struct thermal_cooling_device_ops *ops;
+	bool updated;
+	struct mutex lock;
+	struct list_head thermal_instances;
+	struct list_head node;
+	u64 android_kabi_reserved1;
+};
+
+struct thermal_cooling_device_ops {
+	int (*get_max_state)(struct thermal_cooling_device *, unsigned long *);
+	int (*get_cur_state)(struct thermal_cooling_device *, unsigned long *);
+	int (*set_cur_state)(struct thermal_cooling_device *, unsigned long);
+	int (*get_requested_power)(struct thermal_cooling_device *, u32 *);
+	int (*state2power)(struct thermal_cooling_device *, unsigned long, u32 *);
+	int (*power2state)(struct thermal_cooling_device *, u32, unsigned long *);
+	u64 android_kabi_reserved1;
+};
+
+struct acpi_processor_errata {
+	u8 smp;
+	struct {
+		u8 throttle: 1;
+		u8 fdma: 1;
+		u8 reserved: 6;
+		u32 bmisx;
+	} piix4;
+};
+
+enum acpi_ec_event_state {
+	EC_EVENT_READY = 0,
+	EC_EVENT_IN_PROGRESS = 1,
+	EC_EVENT_COMPLETE = 2,
+};
+
+struct transaction;
+
+struct acpi_ec {
+	acpi_handle handle;
+	acpi_handle address_space_handler_holder;
+	int gpe;
+	int irq;
+	unsigned long command_addr;
+	unsigned long data_addr;
+	bool global_lock;
+	unsigned long flags;
+	unsigned long reference_count;
+	struct mutex mutex;
+	wait_queue_head_t wait;
+	struct list_head list;
+	struct transaction *curr;
+	spinlock_t lock;
+	struct work_struct work;
+	unsigned long timestamp;
+	enum acpi_ec_event_state event_state;
+	unsigned int events_to_process;
+	unsigned int events_in_progress;
+	unsigned int queries_in_progress;
+	bool busy_polling;
+	unsigned int polling_guard;
+};
+
+struct transaction {
+	const u8 *wdata;
+	u8 *rdata;
+	unsigned short irq_count;
+	u8 command;
+	u8 wi;
+	u8 ri;
+	u8 wlen;
+	u8 rlen;
+	u8 flags;
+};
+
+enum ec_command {
+	ACPI_EC_COMMAND_READ = 128,
+	ACPI_EC_COMMAND_WRITE = 129,
+	ACPI_EC_BURST_ENABLE = 130,
+	ACPI_EC_BURST_DISABLE = 131,
+	ACPI_EC_COMMAND_QUERY = 132,
+};
+
+enum {
+	EC_FLAGS_QUERY_ENABLED = 0,
+	EC_FLAGS_EVENT_HANDLER_INSTALLED = 1,
+	EC_FLAGS_EC_HANDLER_INSTALLED = 2,
+	EC_FLAGS_EC_REG_CALLED = 3,
+	EC_FLAGS_QUERY_METHODS_INSTALLED = 4,
+	EC_FLAGS_STARTED = 5,
+	EC_FLAGS_STOPPED = 6,
+	EC_FLAGS_EVENTS_MASKED = 7,
+};
+
+typedef int (*acpi_ec_query_func)(void *);
+
+struct acpi_ec_query_handler {
+	struct list_head node;
+	acpi_ec_query_func func;
+	acpi_handle handle;
+	void *data;
+	u8 query_bit;
+	struct kref kref;
+};
+
+struct acpi_ec_query {
+	struct transaction transaction;
+	struct work_struct work;
+	struct acpi_ec_query_handler *handler;
+	struct acpi_ec *ec;
+};
+
+typedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *);
+
+struct acpi_table_ecdt {
+	struct acpi_table_header header;
+	struct acpi_generic_address control;
+	struct acpi_generic_address data;
+	u32 uid;
+	u8 gpe;
+	u8 id[0];
+} __attribute__((packed));
+
+struct pci_osc_bit_struct {
+	u32 bit;
+	char *desc;
+};
+
+enum acpi_bridge_type {
+	ACPI_BRIDGE_TYPE_PCIE = 1,
+	ACPI_BRIDGE_TYPE_CXL = 2,
+};
+
+struct acpi_pci_root_ops;
+
+struct acpi_pci_root_info {
+	struct acpi_pci_root *root;
+	struct acpi_device *bridge;
+	struct acpi_pci_root_ops *ops;
+	struct list_head resources;
+	char name[16];
+};
+
+struct acpi_pci_root_ops {
+	struct pci_ops *pci_ops;
+	int (*init_info)(struct acpi_pci_root_info *);
+	void (*release_info)(struct acpi_pci_root_info *);
+	int (*prepare_resources)(struct acpi_pci_root_info *);
+};
+
+struct acpi_pci_link_irq {
+	u32 active;
+	u8 triggering;
+	u8 polarity;
+	u8 resource_type;
+	u8 possible_count;
+	u32 possible[16];
+	u8 initialized: 1;
+	u8 reserved: 7;
+};
+
+struct acpi_pci_link {
+	struct list_head list;
+	struct acpi_device *device;
+	struct acpi_pci_link_irq irq;
+	int refcnt;
+};
+
+struct prt_quirk {
+	const struct dmi_system_id *system;
+	unsigned int segment;
+	unsigned int bus;
+	unsigned int device;
+	unsigned char pin;
+	const char *source;
+	const char *actual_source;
+};
+
+struct acpi_pci_routing_table {
+	u32 length;
+	u32 pin;
+	u64 address;
+	u32 source_index;
+	union {
+		char pad[4];
+		struct {
+			struct {} __Empty_source;
+			char source[0];
+		};
+	};
+};
+
+struct acpi_prt_entry {
+	struct acpi_pci_id id;
+	u8 pin;
+	acpi_handle link;
+	u32 index;
+};
+
+struct apd_private_data;
+
+struct apd_device_desc {
+	unsigned int fixed_clk_rate;
+	struct property_entry *properties;
+	int (*setup)(struct apd_private_data *);
+};
+
+struct apd_private_data {
+	struct clk *clk;
+	struct acpi_device *adev;
+	const struct apd_device_desc *dev_desc;
+};
+
+struct acpi_power_resource;
+
+struct acpi_power_resource_entry {
+	struct list_head node;
+	struct acpi_power_resource *resource;
+};
+
+struct acpi_power_resource {
+	struct acpi_device device;
+	struct list_head list_node;
+	u32 system_level;
+	u32 order;
+	unsigned int ref_count;
+	u8 state;
+	struct mutex resource_lock;
+	struct list_head dependents;
+};
+
+struct acpi_power_dependent_device {
+	struct device *dev;
+	struct list_head node;
+};
+
+enum {
+	ACPI_GENL_CMD_UNSPEC = 0,
+	ACPI_GENL_CMD_EVENT = 1,
+	__ACPI_GENL_CMD_MAX = 2,
+};
+
+enum {
+	ACPI_GENL_ATTR_UNSPEC = 0,
+	ACPI_GENL_ATTR_EVENT = 1,
+	__ACPI_GENL_ATTR_MAX = 2,
+};
+
+struct acpi_bus_event {
+	struct list_head node;
+	acpi_device_class device_class;
+	acpi_bus_id bus_id;
+	u32 type;
+	u32 data;
+};
+
+struct acpi_genl_event {
+	acpi_device_class device_class;
+	char bus_id[15];
+	u32 type;
+	u32 data;
+};
+
+struct acpi_ged_event {
+	struct list_head node;
+	struct device *dev;
+	unsigned int gsi;
+	unsigned int irq;
+	acpi_handle handle;
+};
+
+struct acpi_ged_device {
+	struct device *dev;
+	struct list_head event_list;
+};
+
+struct event_counter {
+	u32 count;
+	u32 flags;
+};
+
+struct acpi_data_attr;
+
+struct acpi_data_obj {
+	char *name;
+	int (*fn)(void *, struct acpi_data_attr *);
+};
+
+struct acpi_data_attr {
+	struct bin_attribute attr;
+	u64 addr;
+};
+
+struct acpi_table_attr {
+	struct bin_attribute attr;
+	char name[4];
+	int instance;
+	char filename[8];
+	struct list_head node;
+};
+
+typedef void (*acpi_gbl_event_handler)(u32, acpi_handle, u32, void *);
+
+struct acpi_table_bert {
+	struct acpi_table_header header;
+	u32 region_length;
+	u64 address;
+};
+
+struct acpi_table_ccel {
+	struct acpi_table_header header;
+	u8 CCtype;
+	u8 Ccsub_type;
+	u16 reserved;
+	u64 log_area_minimum_length;
+	u64 log_area_start_address;
+};
+
+struct acpi_device_properties {
+	const guid_t *guid;
+	union acpi_object *properties;
+	struct list_head list;
+	void **bufs;
+};
+
+struct override_status_id {
+	struct acpi_device_id hid[2];
+	struct x86_cpu_id cpu_ids[2];
+	struct dmi_system_id dmi_ids[2];
+	const char *uid;
+	const char *path;
+	unsigned long long status;
+};
+
+struct lpi_constraints {
+	acpi_handle handle;
+	int min_dstate;
+};
+
+struct amd_lps0_hid_device_data {
+	const bool check_off_by_one;
+};
+
+struct acpi_s2idle_dev_ops {
+	struct list_head list_node;
+	void (*prepare)();
+	void (*check)();
+	void (*restore)();
+};
+
+struct lpi_device_constraint_amd {
+	char *name;
+	int enabled;
+	int function_states;
+	int min_dstate;
+};
+
+struct lpi_device_info {
+	char *name;
+	int enabled;
+	union acpi_object *package;
+};
+
+struct lpi_device_constraint {
+	int uid;
+	int min_dstate;
+	int function_states;
+};
+
+struct acpi_lpat {
+	int temp;
+	int raw;
+};
+
+struct acpi_lpat_conversion_table {
+	struct acpi_lpat *lpat;
+	int lpat_count;
+};
+
+struct lpit_residency_info {
+	struct acpi_generic_address gaddr;
+	u64 frequency;
+	void *iomem_addr;
+};
+
+struct acpi_lpit_header {
+	u32 type;
+	u32 length;
+	u16 unique_id;
+	u16 reserved;
+	u32 flags;
+};
+
+struct acpi_lpit_native {
+	struct acpi_lpit_header header;
+	struct acpi_generic_address entry_trigger;
+	u32 residency;
+	u32 latency;
+	struct acpi_generic_address residency_counter;
+	u64 counter_frequency;
+};
+
+struct acpi_table_lpit {
+	struct acpi_table_header header;
+};
+
+struct acpi_prmt_module_info {
+	u16 revision;
+	u16 length;
+	u8 module_guid[16];
+	u16 major_rev;
+	u16 minor_rev;
+	u16 handler_info_count;
+	u32 handler_info_offset;
+	u64 mmio_list_pointer;
+} __attribute__((packed));
+
+struct acpi_prmt_handler_info {
+	u16 revision;
+	u16 length;
+	u8 handler_guid[16];
+	u64 handler_address;
+	u64 static_data_buffer_address;
+	u64 acpi_param_buffer_address;
+} __attribute__((packed));
+
+struct prm_buffer {
+	u8 prm_status;
+	u64 efi_status;
+	u8 prm_cmd;
+	guid_t handler_guid;
+} __attribute__((packed));
+
+struct prm_handler_info {
+	guid_t guid;
+	efi_status_t (*handler_addr)(u64, void *);
+	u64 static_data_buffer_addr;
+	u64 acpi_param_buffer_addr;
+	struct list_head handler_list;
+};
+
+struct prm_mmio_info;
+
+struct prm_module_info {
+	guid_t guid;
+	u16 major_rev;
+	u16 minor_rev;
+	u16 handler_count;
+	struct prm_mmio_info *mmio_info;
+	bool updatable;
+	struct list_head module_list;
+	struct prm_handler_info handlers[0];
+};
+
+struct prm_mmio_addr_range {
+	u64 phys_addr;
+	u64 virt_addr;
+	u32 length;
+} __attribute__((packed));
+
+struct prm_mmio_info {
+	u64 mmio_count;
+	struct prm_mmio_addr_range addr_ranges[0];
+};
+
+typedef u64 acpi_integer;
+
+struct prm_context_buffer {
+	char signature[4];
+	u16 revision;
+	u16 reserved;
+	guid_t identifier;
+	u64 static_data_buffer;
+	struct prm_mmio_info *mmio_ranges;
+};
+
+struct acpi_pcc_info {
+	u8 subspace_id;
+	u16 length;
+	u8 *internal_buffer;
+};
+
+struct mbox_client {
+	struct device *dev;
+	bool tx_block;
+	unsigned long tx_tout;
+	bool knows_txdone;
+	void (*rx_callback)(struct mbox_client *, void *);
+	void (*tx_prepare)(struct mbox_client *, void *);
+	void (*tx_done)(struct mbox_client *, void *, int);
+};
+
+struct pcc_mbox_chan;
+
+struct pcc_data {
+	struct pcc_mbox_chan *pcc_chan;
+	void *pcc_comm_addr;
+	struct completion done;
+	struct mbox_client cl;
+	struct acpi_pcc_info ctx;
+};
+
+struct mbox_chan;
+
+struct pcc_mbox_chan {
+	struct mbox_chan *mchan;
+	u64 shmem_base_addr;
+	u64 shmem_size;
+	u32 latency;
+	u32 max_access_rate;
+	u16 min_turnaround_time;
+};
+
+struct mbox_controller;
+
+struct mbox_chan {
+	struct mbox_controller *mbox;
+	unsigned int txdone_method;
+	struct mbox_client *cl;
+	struct completion tx_complete;
+	void *active_req;
+	unsigned int msg_count;
+	unsigned int msg_free;
+	void *msg_data[20];
+	spinlock_t lock;
+	void *con_priv;
+};
+
+struct mbox_chan_ops;
+
+struct mbox_controller {
+	struct device *dev;
+	const struct mbox_chan_ops *ops;
+	struct mbox_chan *chans;
+	int num_chans;
+	bool txdone_irq;
+	bool txdone_poll;
+	unsigned int txpoll_period;
+	struct mbox_chan * (*of_xlate)(struct mbox_controller *, const struct of_phandle_args *);
+	struct hrtimer poll_hrt;
+	spinlock_t poll_hrt_lock;
+	struct list_head node;
+};
+
+struct mbox_chan_ops {
+	int (*send_data)(struct mbox_chan *, void *);
+	int (*flush)(struct mbox_chan *, unsigned long);
+	int (*startup)(struct mbox_chan *);
+	void (*shutdown)(struct mbox_chan *);
+	bool (*last_tx_done)(struct mbox_chan *);
+	bool (*peek_data)(struct mbox_chan *);
+};
+
+union acpi_operand_object;
+
+struct acpi_object_common {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+};
+
+struct acpi_object_integer {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 fill[3];
+	u64 value;
+};
+
+struct acpi_object_string {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	char *pointer;
+	u32 length;
+};
+
+struct acpi_namespace_node;
+
+struct acpi_object_buffer {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 *pointer;
+	u32 length;
+	u32 aml_length;
+	u8 *aml_start;
+	struct acpi_namespace_node *node;
+};
+
+struct acpi_object_package {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object **elements;
+	u8 *aml_start;
+	u32 aml_length;
+	u32 count;
+};
+
+struct acpi_object_event {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	void *os_semaphore;
+};
+
+struct acpi_walk_state;
+
+typedef acpi_status (*acpi_internal_method)(struct acpi_walk_state *);
+
+struct acpi_object_method {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 info_flags;
+	u8 param_count;
+	u8 sync_level;
+	union acpi_operand_object *mutex;
+	union acpi_operand_object *node;
+	u8 *aml_start;
+	union {
+		acpi_internal_method implementation;
+		union acpi_operand_object *handler;
+	} dispatch;
+	u32 aml_length;
+	acpi_owner_id owner_id;
+	u8 thread_count;
+};
+
+struct acpi_thread_state;
+
+struct acpi_object_mutex {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 sync_level;
+	u16 acquisition_depth;
+	void *os_mutex;
+	u64 thread_id;
+	struct acpi_thread_state *owner_thread;
+	union acpi_operand_object *prev;
+	union acpi_operand_object *next;
+	struct acpi_namespace_node *node;
+	u8 original_sync_level;
+};
+
+struct acpi_object_region {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 space_id;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object *handler;
+	union acpi_operand_object *next;
+	acpi_physical_address address;
+	u32 length;
+	void *pointer;
+};
+
+struct acpi_object_notify_common {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+};
+
+struct acpi_gpe_block_info;
+
+struct acpi_object_device {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+	struct acpi_gpe_block_info *gpe_block;
+};
+
+struct acpi_object_power_resource {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+	u32 system_level;
+	u32 resource_order;
+};
+
+struct acpi_object_processor {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 proc_id;
+	u8 length;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+	acpi_io_address address;
+};
+
+struct acpi_object_thermal_zone {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *notify_list[2];
+	union acpi_operand_object *handler;
+};
+
+struct acpi_object_field_common {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	union acpi_operand_object *region_obj;
+};
+
+struct acpi_object_region_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	u16 resource_length;
+	union acpi_operand_object *region_obj;
+	u8 *resource_buffer;
+	u16 pin_number_index;
+	u8 *internal_pcc_buffer;
+};
+
+struct acpi_object_buffer_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	u8 is_create_field;
+	union acpi_operand_object *buffer_obj;
+};
+
+struct acpi_object_bank_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	union acpi_operand_object *region_obj;
+	union acpi_operand_object *bank_obj;
+};
+
+struct acpi_object_index_field {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 field_flags;
+	u8 attribute;
+	u8 access_byte_width;
+	struct acpi_namespace_node *node;
+	u32 bit_length;
+	u32 base_byte_offset;
+	u32 value;
+	u8 start_field_bit_offset;
+	u8 access_length;
+	union acpi_operand_object *index_obj;
+	union acpi_operand_object *data_obj;
+};
+
+struct acpi_object_notify_handler {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	struct acpi_namespace_node *node;
+	u32 handler_type;
+	acpi_notify_handler handler;
+	void *context;
+	union acpi_operand_object *next[2];
+};
+
+struct acpi_object_addr_handler {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 space_id;
+	u8 handler_flags;
+	acpi_adr_space_handler handler;
+	struct acpi_namespace_node *node;
+	void *context;
+	void *context_mutex;
+	acpi_adr_space_setup setup;
+	union acpi_operand_object *region_list;
+	union acpi_operand_object *next;
+};
+
+struct acpi_object_reference {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	u8 class;
+	u8 target_type;
+	u8 resolved;
+	void *object;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object **where;
+	u8 *index_pointer;
+	u8 *aml;
+	u32 value;
+};
+
+struct acpi_object_extra {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	struct acpi_namespace_node *method_REG;
+	struct acpi_namespace_node *scope_node;
+	void *region_context;
+	u8 *aml_start;
+	u32 aml_length;
+};
+
+struct acpi_object_data {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	acpi_object_handler handler;
+	void *pointer;
+};
+
+struct acpi_object_cache_list {
+	union acpi_operand_object *next_object;
+	u8 descriptor_type;
+	u8 type;
+	u16 reference_count;
+	u8 flags;
+	union acpi_operand_object *next;
+};
+
+struct acpi_namespace_node {
+	union acpi_operand_object *object;
+	u8 descriptor_type;
+	u8 type;
+	u16 flags;
+	union acpi_name_union name;
+	struct acpi_namespace_node *parent;
+	struct acpi_namespace_node *child;
+	struct acpi_namespace_node *peer;
+	acpi_owner_id owner_id;
+};
+
+union acpi_operand_object {
+	struct acpi_object_common common;
+	struct acpi_object_integer integer;
+	struct acpi_object_string string;
+	struct acpi_object_buffer buffer;
+	struct acpi_object_package package;
+	struct acpi_object_event event;
+	struct acpi_object_method method;
+	struct acpi_object_mutex mutex;
+	struct acpi_object_region region;
+	struct acpi_object_notify_common common_notify;
+	struct acpi_object_device device;
+	struct acpi_object_power_resource power_resource;
+	struct acpi_object_processor processor;
+	struct acpi_object_thermal_zone thermal_zone;
+	struct acpi_object_field_common common_field;
+	struct acpi_object_region_field field;
+	struct acpi_object_buffer_field buffer_field;
+	struct acpi_object_bank_field bank_field;
+	struct acpi_object_index_field index_field;
+	struct acpi_object_notify_handler notify;
+	struct acpi_object_addr_handler address_space;
+	struct acpi_object_reference reference;
+	struct acpi_object_extra extra;
+	struct acpi_object_data data;
+	struct acpi_object_cache_list cache;
+	struct acpi_namespace_node node;
+};
+
+union acpi_parse_object;
+
+union acpi_generic_state;
+
+struct acpi_parse_state {
+	u8 *aml_start;
+	u8 *aml;
+	u8 *aml_end;
+	u8 *pkg_start;
+	u8 *pkg_end;
+	union acpi_parse_object *start_op;
+	struct acpi_namespace_node *start_node;
+	union acpi_generic_state *scope;
+	union acpi_parse_object *start_scope;
+	u32 aml_size;
+};
+
+typedef acpi_status (*acpi_parse_downwards)(struct acpi_walk_state *, union acpi_parse_object **);
+
+typedef acpi_status (*acpi_parse_upwards)(struct acpi_walk_state *);
+
+struct acpi_opcode_info;
+
+struct acpi_walk_state {
+	struct acpi_walk_state *next;
+	u8 descriptor_type;
+	u8 walk_type;
+	u16 opcode;
+	u8 next_op_info;
+	u8 num_operands;
+	u8 operand_index;
+	acpi_owner_id owner_id;
+	u8 last_predicate;
+	u8 current_result;
+	u8 return_used;
+	u8 scope_depth;
+	u8 pass_number;
+	u8 namespace_override;
+	u8 result_size;
+	u8 result_count;
+	u8 *aml;
+	u32 arg_types;
+	u32 method_breakpoint;
+	u32 user_breakpoint;
+	u32 parse_flags;
+	struct acpi_parse_state parser_state;
+	u32 prev_arg_types;
+	u32 arg_count;
+	u16 method_nesting_depth;
+	u8 method_is_nested;
+	struct acpi_namespace_node arguments[7];
+	struct acpi_namespace_node local_variables[8];
+	union acpi_operand_object *operands[9];
+	union acpi_operand_object **params;
+	u8 *aml_last_while;
+	union acpi_operand_object **caller_return_desc;
+	union acpi_generic_state *control_state;
+	struct acpi_namespace_node *deferred_node;
+	union acpi_operand_object *implicit_return_obj;
+	struct acpi_namespace_node *method_call_node;
+	union acpi_parse_object *method_call_op;
+	union acpi_operand_object *method_desc;
+	struct acpi_namespace_node *method_node;
+	char *method_pathname;
+	union acpi_parse_object *op;
+	const struct acpi_opcode_info *op_info;
+	union acpi_parse_object *origin;
+	union acpi_operand_object *result_obj;
+	union acpi_generic_state *results;
+	union acpi_operand_object *return_desc;
+	union acpi_generic_state *scope_info;
+	union acpi_parse_object *prev_op;
+	union acpi_parse_object *next_op;
+	struct acpi_thread_state *thread;
+	acpi_parse_downwards descending_callback;
+	acpi_parse_upwards ascending_callback;
+};
+
+union acpi_parse_value {
+	u64 integer;
+	u32 size;
+	char *string;
+	u8 *buffer;
+	char *name;
+	union acpi_parse_object *arg;
+};
+
+struct acpi_parse_obj_common {
+	union acpi_parse_object *parent;
+	u8 descriptor_type;
+	u8 flags;
+	u16 aml_opcode;
+	u8 *aml;
+	union acpi_parse_object *next;
+	struct acpi_namespace_node *node;
+	union acpi_parse_value value;
+	u8 arg_list_length;
+};
+
+struct acpi_parse_obj_named {
+	union acpi_parse_object *parent;
+	u8 descriptor_type;
+	u8 flags;
+	u16 aml_opcode;
+	u8 *aml;
+	union acpi_parse_object *next;
+	struct acpi_namespace_node *node;
+	union acpi_parse_value value;
+	u8 arg_list_length;
+	char *path;
+	u8 *data;
+	u32 length;
+	u32 name;
+};
+
+struct acpi_parse_obj_asl {
+	union acpi_parse_object *parent;
+	u8 descriptor_type;
+	u8 flags;
+	u16 aml_opcode;
+	u8 *aml;
+	union acpi_parse_object *next;
+	struct acpi_namespace_node *node;
+	union acpi_parse_value value;
+	u8 arg_list_length;
+	union acpi_parse_object *child;
+	union acpi_parse_object *parent_method;
+	char *filename;
+	u8 file_changed;
+	char *parent_filename;
+	char *external_name;
+	char *namepath;
+	char name_seg[4];
+	u32 extra_value;
+	u32 column;
+	u32 line_number;
+	u32 logical_line_number;
+	u32 logical_byte_offset;
+	u32 end_line;
+	u32 end_logical_line;
+	u32 acpi_btype;
+	u32 aml_length;
+	u32 aml_subtree_length;
+	u32 final_aml_length;
+	u32 final_aml_offset;
+	u32 compile_flags;
+	u16 parse_opcode;
+	u8 aml_opcode_length;
+	u8 aml_pkg_len_bytes;
+	u8 extra;
+	char parse_op_name[20];
+};
+
+union acpi_parse_object {
+	struct acpi_parse_obj_common common;
+	struct acpi_parse_obj_named named;
+	struct acpi_parse_obj_asl asl;
+};
+
+struct acpi_common_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+};
+
+struct acpi_control_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u16 opcode;
+	union acpi_parse_object *predicate_op;
+	u8 *aml_predicate_start;
+	u8 *package_end;
+	u64 loop_timeout;
+};
+
+struct acpi_update_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	union acpi_operand_object *object;
+};
+
+struct acpi_scope_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	struct acpi_namespace_node *node;
+};
+
+struct acpi_pscope_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u32 arg_count;
+	union acpi_parse_object *op;
+	u8 *arg_end;
+	u8 *pkg_end;
+	u32 arg_list;
+};
+
+struct acpi_pkg_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u32 index;
+	union acpi_operand_object *source_object;
+	union acpi_operand_object *dest_object;
+	struct acpi_walk_state *walk_state;
+	void *this_target_obj;
+	u32 num_packages;
+};
+
+struct acpi_thread_state {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u8 current_sync_level;
+	struct acpi_walk_state *walk_state_list;
+	union acpi_operand_object *acquired_mutex_list;
+	u64 thread_id;
+};
+
+struct acpi_result_values {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	union acpi_operand_object *obj_desc[8];
+};
+
+struct acpi_global_notify_handler;
+
+struct acpi_notify_info {
+	void *next;
+	u8 descriptor_type;
+	u8 flags;
+	u16 value;
+	u16 state;
+	u8 handler_list_id;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object *handler_list_head;
+	struct acpi_global_notify_handler *global;
+};
+
+union acpi_generic_state {
+	struct acpi_common_state common;
+	struct acpi_control_state control;
+	struct acpi_update_state update;
+	struct acpi_scope_state scope;
+	struct acpi_pscope_state parse_scope;
+	struct acpi_pkg_state pkg;
+	struct acpi_thread_state thread;
+	struct acpi_result_values results;
+	struct acpi_notify_info notify;
+};
+
+struct acpi_global_notify_handler {
+	acpi_notify_handler handler;
+	void *context;
+};
+
+struct acpi_opcode_info {
+	u32 parse_args;
+	u32 runtime_args;
+	u16 flags;
+	u8 object_type;
+	u8 class;
+	u8 type;
+};
+
+struct acpi_gpe_xrupt_info;
+
+struct acpi_gpe_register_info;
+
+struct acpi_gpe_event_info;
+
+struct acpi_gpe_block_info {
+	struct acpi_namespace_node *node;
+	struct acpi_gpe_block_info *previous;
+	struct acpi_gpe_block_info *next;
+	struct acpi_gpe_xrupt_info *xrupt_block;
+	struct acpi_gpe_register_info *register_info;
+	struct acpi_gpe_event_info *event_info;
+	u64 address;
+	u32 register_count;
+	u16 gpe_count;
+	u16 block_base_number;
+	u8 space_id;
+	u8 initialized;
+};
+
+struct acpi_gpe_xrupt_info {
+	struct acpi_gpe_xrupt_info *previous;
+	struct acpi_gpe_xrupt_info *next;
+	struct acpi_gpe_block_info *gpe_block_list_head;
+	u32 interrupt_number;
+};
+
+struct acpi_gpe_address {
+	u8 space_id;
+	u64 address;
+};
+
+struct acpi_gpe_register_info {
+	struct acpi_gpe_address status_address;
+	struct acpi_gpe_address enable_address;
+	u16 base_gpe_number;
+	u8 enable_for_wake;
+	u8 enable_for_run;
+	u8 mask_for_run;
+	u8 enable_mask;
+};
+
+struct acpi_gpe_handler_info;
+
+struct acpi_gpe_notify_info;
+
+union acpi_gpe_dispatch_info {
+	struct acpi_namespace_node *method_node;
+	struct acpi_gpe_handler_info *handler;
+	struct acpi_gpe_notify_info *notify_list;
+};
+
+struct acpi_gpe_event_info {
+	union acpi_gpe_dispatch_info dispatch;
+	struct acpi_gpe_register_info *register_info;
+	u8 flags;
+	u8 gpe_number;
+	u8 runtime_count;
+	u8 disable_for_dispatch;
+};
+
+struct acpi_gpe_handler_info {
+	acpi_gpe_handler address;
+	void *context;
+	struct acpi_namespace_node *method_node;
+	u8 original_flags;
+	u8 originally_enabled;
+};
+
+struct acpi_gpe_notify_info {
+	struct acpi_namespace_node *device_node;
+	struct acpi_gpe_notify_info *next;
+};
+
+union acpi_predefined_info;
+
+struct acpi_evaluate_info {
+	struct acpi_namespace_node *prefix_node;
+	const char *relative_pathname;
+	union acpi_operand_object **parameters;
+	struct acpi_namespace_node *node;
+	union acpi_operand_object *obj_desc;
+	char *full_pathname;
+	const union acpi_predefined_info *predefined;
+	union acpi_operand_object *return_object;
+	union acpi_operand_object *parent_package;
+	u32 return_flags;
+	u32 return_btype;
+	u16 param_count;
+	u16 node_flags;
+	u8 pass_number;
+	u8 return_object_type;
+	u8 flags;
+};
+
+struct acpi_name_info {
+	char name[4];
+	u16 argument_list;
+	u8 expected_btypes;
+} __attribute__((packed));
+
+struct acpi_package_info {
+	u8 type;
+	u8 object_type1;
+	u8 count1;
+	u8 object_type2;
+	u8 count2;
+	u16 reserved;
+} __attribute__((packed));
+
+struct acpi_package_info2 {
+	u8 type;
+	u8 count;
+	u8 object_type[4];
+	u8 reserved;
+};
+
+struct acpi_package_info3 {
+	u8 type;
+	u8 count;
+	u8 object_type[2];
+	u8 tail_object_type;
+	u16 reserved;
+} __attribute__((packed));
+
+struct acpi_package_info4 {
+	u8 type;
+	u8 object_type1;
+	u8 count1;
+	u8 sub_object_types;
+	u8 pkg_count;
+	u16 reserved;
+} __attribute__((packed));
+
+union acpi_predefined_info {
+	struct acpi_name_info info;
+	struct acpi_package_info ret_info;
+	struct acpi_package_info2 ret_info2;
+	struct acpi_package_info3 ret_info3;
+	struct acpi_package_info4 ret_info4;
+};
+
+enum {
+	ACPI_REFCLASS_LOCAL = 0,
+	ACPI_REFCLASS_ARG = 1,
+	ACPI_REFCLASS_REFOF = 2,
+	ACPI_REFCLASS_INDEX = 3,
+	ACPI_REFCLASS_TABLE = 4,
+	ACPI_REFCLASS_NAME = 5,
+	ACPI_REFCLASS_DEBUG = 6,
+	ACPI_REFCLASS_MAX = 6,
+};
+
+struct acpi_common_descriptor {
+	void *common_pointer;
+	u8 descriptor_type;
+};
+
+union acpi_descriptor {
+	struct acpi_common_descriptor common;
+	union acpi_operand_object object;
+	struct acpi_namespace_node node;
+	union acpi_parse_object op;
+};
+
+typedef enum {
+	ACPI_IMODE_LOAD_PASS1 = 1,
+	ACPI_IMODE_LOAD_PASS2 = 2,
+	ACPI_IMODE_EXECUTE = 3,
+} acpi_interpreter_mode;
+
+struct acpi_create_field_info {
+	struct acpi_namespace_node *region_node;
+	struct acpi_namespace_node *field_node;
+	struct acpi_namespace_node *register_node;
+	struct acpi_namespace_node *data_register_node;
+	struct acpi_namespace_node *connection_node;
+	u8 *resource_buffer;
+	u32 bank_value;
+	u32 field_bit_position;
+	u32 field_bit_length;
+	u16 resource_length;
+	u16 pin_number_index;
+	u8 field_flags;
+	u8 attribute;
+	u8 field_type;
+	u8 access_length;
+};
+
+struct acpi_init_walk_info {
+	u32 table_index;
+	u32 object_count;
+	u32 method_count;
+	u32 serial_method_count;
+	u32 non_serial_method_count;
+	u32 serialized_method_count;
+	u32 device_count;
+	u32 op_region_count;
+	u32 field_count;
+	u32 buffer_count;
+	u32 package_count;
+	u32 op_region_init;
+	u32 field_init;
+	u32 buffer_init;
+	u32 package_init;
+	acpi_owner_id owner_id;
+};
+
+typedef u32 acpi_name;
+
+enum {
+	AML_FIELD_ACCESS_ANY = 0,
+	AML_FIELD_ACCESS_BYTE = 1,
+	AML_FIELD_ACCESS_WORD = 2,
+	AML_FIELD_ACCESS_DWORD = 3,
+	AML_FIELD_ACCESS_QWORD = 4,
+	AML_FIELD_ACCESS_BUFFER = 5,
+};
+
+typedef acpi_status (*acpi_execute_op)(struct acpi_walk_state *);
+
+typedef u32 acpi_mutex_handle;
+
+struct acpi_gpe_walk_info {
+	struct acpi_namespace_node *gpe_device;
+	struct acpi_gpe_block_info *gpe_block;
+	u16 count;
+	acpi_owner_id owner_id;
+	u8 execute_by_owner_id;
+};
+
+typedef acpi_status (*acpi_gpe_callback)(struct acpi_gpe_xrupt_info *, struct acpi_gpe_block_info *, void *);
+
+struct acpi_gpe_device_info {
+	u32 index;
+	u32 next_block_base_index;
+	acpi_status status;
+	struct acpi_namespace_node *gpe_device;
+};
+
+typedef u32 (*acpi_event_handler)(void *);
+
+struct acpi_reg_walk_info {
+	u32 function;
+	u32 reg_run_count;
+	acpi_adr_space_type space_id;
+};
+
+struct acpi_ffh_info {
+	u64 offset;
+	u64 length;
+};
+
+struct acpi_mem_mapping;
+
+struct acpi_mem_space_context {
+	u32 length;
+	acpi_physical_address address;
+	struct acpi_mem_mapping *cur_mm;
+	struct acpi_mem_mapping *first_mm;
+};
+
+struct acpi_mem_mapping {
+	acpi_physical_address physical_address;
+	u8 *logical_address;
+	acpi_size length;
+	struct acpi_mem_mapping *next_mm;
+};
+
+struct acpi_data_table_mapping {
+	void *pointer;
+};
+
+typedef u32 (*acpi_sci_handler)(void *);
+
+struct acpi_sci_handler_info {
+	struct acpi_sci_handler_info *next;
+	acpi_sci_handler address;
+	void *context;
+};
+
+enum {
+	AML_FIELD_UPDATE_PRESERVE = 0,
+	AML_FIELD_UPDATE_WRITE_AS_ONES = 32,
+	AML_FIELD_UPDATE_WRITE_AS_ZEROS = 64,
+};
+
+struct acpi_signal_fatal_info {
+	u32 type;
+	u32 code;
+	u32 argument;
+};
+
+enum {
+	MATCH_MTR = 0,
+	MATCH_MEQ = 1,
+	MATCH_MLE = 2,
+	MATCH_MLT = 3,
+	MATCH_MGE = 4,
+	MATCH_MGT = 5,
+};
+
+enum {
+	AML_FIELD_ATTRIB_QUICK = 2,
+	AML_FIELD_ATTRIB_SEND_RECEIVE = 4,
+	AML_FIELD_ATTRIB_BYTE = 6,
+	AML_FIELD_ATTRIB_WORD = 8,
+	AML_FIELD_ATTRIB_BLOCK = 10,
+	AML_FIELD_ATTRIB_BYTES = 11,
+	AML_FIELD_ATTRIB_PROCESS_CALL = 12,
+	AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL = 13,
+	AML_FIELD_ATTRIB_RAW_BYTES = 14,
+	AML_FIELD_ATTRIB_RAW_PROCESS_BYTES = 15,
+};
+
+typedef enum {
+	ACPI_TRACE_AML_METHOD = 0,
+	ACPI_TRACE_AML_OPCODE = 1,
+	ACPI_TRACE_AML_REGION = 2,
+} acpi_trace_event_type;
+
+struct acpi_gpe_block_status_context {
+	struct acpi_gpe_register_info *gpe_skip_register_info;
+	u8 gpe_skip_mask;
+	u8 retval;
+};
+
+struct acpi_bit_register_info {
+	u8 parent_register;
+	u8 bit_position;
+	u16 access_bit_mask;
+};
+
+struct acpi_port_info {
+	char *name;
+	u16 start;
+	u16 end;
+	u8 osi_dependency;
+};
+
+struct acpi_table_facs {
+	char signature[4];
+	u32 length;
+	u32 hardware_signature;
+	u32 firmware_waking_vector;
+	u32 global_lock;
+	u32 flags;
+	u64 xfirmware_waking_vector;
+	u8 version;
+	u8 reserved[3];
+	u32 ospm_flags;
+	u8 reserved1[24];
+};
+
+struct acpi_pci_device {
+	acpi_handle device;
+	struct acpi_pci_device *next;
+};
+
+struct acpi_device_walk_info {
+	struct acpi_table_desc *table_desc;
+	struct acpi_evaluate_info *evaluate_info;
+	u32 device_count;
+	u32 num_STA;
+	u32 num_INI;
+};
+
+typedef acpi_status (*acpi_pkg_callback)(u8, union acpi_operand_object *, union acpi_generic_state *, void *);
+
+enum acpi_return_package_types {
+	ACPI_PTYPE1_FIXED = 1,
+	ACPI_PTYPE1_VAR = 2,
+	ACPI_PTYPE1_OPTION = 3,
+	ACPI_PTYPE2 = 4,
+	ACPI_PTYPE2_COUNT = 5,
+	ACPI_PTYPE2_PKG_COUNT = 6,
+	ACPI_PTYPE2_FIXED = 7,
+	ACPI_PTYPE2_MIN = 8,
+	ACPI_PTYPE2_REV_FIXED = 9,
+	ACPI_PTYPE2_FIX_VAR = 10,
+	ACPI_PTYPE2_VAR_VAR = 11,
+	ACPI_PTYPE2_UUID_PAIR = 12,
+	ACPI_PTYPE_CUSTOM = 13,
+};
+
+typedef acpi_status (*acpi_object_converter)(struct acpi_namespace_node *, union acpi_operand_object *, union acpi_operand_object **);
+
+struct acpi_simple_repair_info {
+	char name[4];
+	u32 unexpected_btypes;
+	u32 package_index;
+	acpi_object_converter object_converter;
+};
+
+typedef acpi_status (*acpi_repair_function)(struct acpi_evaluate_info *, union acpi_operand_object **);
+
+struct acpi_repair_info {
+	char name[4];
+	acpi_repair_function repair_function;
+};
+
+struct acpi_namestring_info {
+	const char *external_name;
+	const char *next_external_char;
+	char *internal_name;
+	u32 length;
+	u32 num_segments;
+	u32 num_carats;
+	u8 fully_qualified;
+};
+
+struct acpi_rw_lock {
+	void *writer_mutex;
+	void *reader_mutex;
+	u32 num_readers;
+};
+
+struct acpi_get_devices_info {
+	acpi_walk_callback user_function;
+	void *context;
+	const char *hid;
+};
+
+struct acpi_rsconvert_info {
+	u8 opcode;
+	u8 resource_offset;
+	u8 aml_offset;
+	u8 value;
+};
+
+struct aml_resource_small_header {
+	u8 descriptor_type;
+};
+
+struct aml_resource_large_header {
+	u8 descriptor_type;
+	u16 resource_length;
+} __attribute__((packed));
+
+struct aml_resource_irq {
+	u8 descriptor_type;
+	u16 irq_mask;
+	u8 flags;
+} __attribute__((packed));
+
+struct aml_resource_dma {
+	u8 descriptor_type;
+	u8 dma_channel_mask;
+	u8 flags;
+};
+
+struct aml_resource_start_dependent {
+	u8 descriptor_type;
+	u8 flags;
+};
+
+struct aml_resource_end_dependent {
+	u8 descriptor_type;
+};
+
+struct aml_resource_io {
+	u8 descriptor_type;
+	u8 flags;
+	u16 minimum;
+	u16 maximum;
+	u8 alignment;
+	u8 address_length;
+};
+
+struct aml_resource_fixed_io {
+	u8 descriptor_type;
+	u16 address;
+	u8 address_length;
+} __attribute__((packed));
+
+struct aml_resource_fixed_dma {
+	u8 descriptor_type;
+	u16 request_lines;
+	u16 channels;
+	u8 width;
+} __attribute__((packed));
+
+struct aml_resource_vendor_small {
+	u8 descriptor_type;
+};
+
+struct aml_resource_end_tag {
+	u8 descriptor_type;
+	u8 checksum;
+};
+
+struct aml_resource_memory24 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u16 minimum;
+	u16 maximum;
+	u16 alignment;
+	u16 address_length;
+} __attribute__((packed));
+
+struct aml_resource_generic_register {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 address_space_id;
+	u8 bit_width;
+	u8 bit_offset;
+	u8 access_size;
+	u64 address;
+} __attribute__((packed));
+
+struct aml_resource_vendor_large {
+	u8 descriptor_type;
+	u16 resource_length;
+} __attribute__((packed));
+
+struct aml_resource_memory32 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u32 minimum;
+	u32 maximum;
+	u32 alignment;
+	u32 address_length;
+} __attribute__((packed));
+
+struct aml_resource_fixed_memory32 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u32 address;
+	u32 address_length;
+} __attribute__((packed));
+
+struct aml_resource_address16 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u16 granularity;
+	u16 minimum;
+	u16 maximum;
+	u16 translation_offset;
+	u16 address_length;
+} __attribute__((packed));
+
+struct aml_resource_address32 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u32 granularity;
+	u32 minimum;
+	u32 maximum;
+	u32 translation_offset;
+	u32 address_length;
+} __attribute__((packed));
+
+struct aml_resource_address64 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u64 granularity;
+	u64 minimum;
+	u64 maximum;
+	u64 translation_offset;
+	u64 address_length;
+} __attribute__((packed));
+
+struct aml_resource_extended_address64 {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+	u8 revision_ID;
+	u8 reserved;
+	u64 granularity;
+	u64 minimum;
+	u64 maximum;
+	u64 translation_offset;
+	u64 address_length;
+	u64 type_specific;
+} __attribute__((packed));
+
+struct aml_resource_extended_irq {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 flags;
+	u8 interrupt_count;
+	union {
+		u32 interrupt;
+		struct {
+			struct {} __Empty_interrupts;
+			u32 interrupts[0];
+		};
+	};
+} __attribute__((packed));
+
+struct aml_resource_gpio {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 connection_type;
+	u16 flags;
+	u16 int_flags;
+	u8 pin_config;
+	u16 drive_strength;
+	u16 debounce_timeout;
+	u16 pin_table_offset;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_i2c_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u32 connection_speed;
+	u16 slave_address;
+} __attribute__((packed));
+
+struct aml_resource_spi_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u32 connection_speed;
+	u8 data_bit_length;
+	u8 clock_phase;
+	u8 clock_polarity;
+	u16 device_selection;
+} __attribute__((packed));
+
+struct aml_resource_uart_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+	u32 default_baud_rate;
+	u16 rx_fifo_size;
+	u16 tx_fifo_size;
+	u8 parity;
+	u8 lines_enabled;
+} __attribute__((packed));
+
+struct aml_resource_csi2_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+} __attribute__((packed));
+
+struct aml_resource_common_serialbus {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u8 res_source_index;
+	u8 type;
+	u8 flags;
+	u16 type_specific_flags;
+	u8 type_revision_id;
+	u16 type_data_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_function {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u8 pin_config;
+	u16 function_number;
+	u16 pin_table_offset;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_config {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u16 pin_table_offset;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_group {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u16 pin_table_offset;
+	u16 label_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_group_function {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u16 function_number;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 res_source_label_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_pin_group_config {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u8 pin_config_type;
+	u32 pin_config_value;
+	u8 res_source_index;
+	u16 res_source_offset;
+	u16 res_source_label_offset;
+	u16 vendor_offset;
+	u16 vendor_length;
+} __attribute__((packed));
+
+struct aml_resource_clock_input {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 revision_id;
+	u16 flags;
+	u16 frequency_divisor;
+	u32 frequency_numerator;
+} __attribute__((packed));
+
+struct aml_resource_address {
+	u8 descriptor_type;
+	u16 resource_length;
+	u8 resource_type;
+	u8 flags;
+	u8 specific_flags;
+} __attribute__((packed));
+
+union aml_resource {
+	u8 descriptor_type;
+	struct aml_resource_small_header small_header;
+	struct aml_resource_large_header large_header;
+	struct aml_resource_irq irq;
+	struct aml_resource_dma dma;
+	struct aml_resource_start_dependent start_dpf;
+	struct aml_resource_end_dependent end_dpf;
+	struct aml_resource_io io;
+	struct aml_resource_fixed_io fixed_io;
+	struct aml_resource_fixed_dma fixed_dma;
+	struct aml_resource_vendor_small vendor_small;
+	struct aml_resource_end_tag end_tag;
+	struct aml_resource_memory24 memory24;
+	struct aml_resource_generic_register generic_reg;
+	struct aml_resource_vendor_large vendor_large;
+	struct aml_resource_memory32 memory32;
+	struct aml_resource_fixed_memory32 fixed_memory32;
+	struct aml_resource_address16 address16;
+	struct aml_resource_address32 address32;
+	struct aml_resource_address64 address64;
+	struct aml_resource_extended_address64 ext_address64;
+	struct aml_resource_extended_irq extended_irq;
+	struct aml_resource_gpio gpio;
+	struct aml_resource_i2c_serialbus i2c_serial_bus;
+	struct aml_resource_spi_serialbus spi_serial_bus;
+	struct aml_resource_uart_serialbus uart_serial_bus;
+	struct aml_resource_csi2_serialbus csi2_serial_bus;
+	struct aml_resource_common_serialbus common_serial_bus;
+	struct aml_resource_pin_function pin_function;
+	struct aml_resource_pin_config pin_config;
+	struct aml_resource_pin_group pin_group;
+	struct aml_resource_pin_group_function pin_group_function;
+	struct aml_resource_pin_group_config pin_group_config;
+	struct aml_resource_clock_input clock_input;
+	struct aml_resource_address address;
+	u32 dword_item;
+	u16 word_item;
+	u8 byte_item;
+};
+
+typedef u16 acpi_rs_length;
+
+typedef acpi_status (*acpi_walk_aml_callback)(u8 *, u32, u32, u8, void **);
+
+enum {
+	ACPI_RSC_INITGET = 0,
+	ACPI_RSC_INITSET = 1,
+	ACPI_RSC_FLAGINIT = 2,
+	ACPI_RSC_1BITFLAG = 3,
+	ACPI_RSC_2BITFLAG = 4,
+	ACPI_RSC_3BITFLAG = 5,
+	ACPI_RSC_6BITFLAG = 6,
+	ACPI_RSC_ADDRESS = 7,
+	ACPI_RSC_BITMASK = 8,
+	ACPI_RSC_BITMASK16 = 9,
+	ACPI_RSC_COUNT = 10,
+	ACPI_RSC_COUNT16 = 11,
+	ACPI_RSC_COUNT_GPIO_PIN = 12,
+	ACPI_RSC_COUNT_GPIO_RES = 13,
+	ACPI_RSC_COUNT_GPIO_VEN = 14,
+	ACPI_RSC_COUNT_SERIAL_RES = 15,
+	ACPI_RSC_COUNT_SERIAL_VEN = 16,
+	ACPI_RSC_DATA8 = 17,
+	ACPI_RSC_EXIT_EQ = 18,
+	ACPI_RSC_EXIT_LE = 19,
+	ACPI_RSC_EXIT_NE = 20,
+	ACPI_RSC_LENGTH = 21,
+	ACPI_RSC_MOVE_GPIO_PIN = 22,
+	ACPI_RSC_MOVE_GPIO_RES = 23,
+	ACPI_RSC_MOVE_SERIAL_RES = 24,
+	ACPI_RSC_MOVE_SERIAL_VEN = 25,
+	ACPI_RSC_MOVE8 = 26,
+	ACPI_RSC_MOVE16 = 27,
+	ACPI_RSC_MOVE32 = 28,
+	ACPI_RSC_MOVE64 = 29,
+	ACPI_RSC_SET8 = 30,
+	ACPI_RSC_SOURCE = 31,
+	ACPI_RSC_SOURCEX = 32,
+};
+
+typedef u32 acpi_rsdesc_size;
+
+struct acpi_vendor_uuid {
+	u8 subtype;
+	u8 data[16];
+};
+
+struct acpi_vendor_walk_info {
+	struct acpi_vendor_uuid *uuid;
+	struct acpi_buffer *buffer;
+	acpi_status status;
+};
+
+struct acpi_fadt_info {
+	const char *name;
+	u16 address64;
+	u16 address32;
+	u16 length;
+	u8 default_length;
+	u8 flags;
+};
+
+struct acpi_fadt_pm_info {
+	struct acpi_generic_address *target;
+	u16 source;
+	u8 register_num;
+};
+
+struct acpi_table_rsdp {
+	char signature[8];
+	u8 checksum;
+	char oem_id[6];
+	u8 revision;
+	u32 rsdt_physical_address;
+	u32 length;
+	u64 xsdt_physical_address;
+	u8 extended_checksum;
+	u8 reserved[3];
+} __attribute__((packed));
+
+struct acpi_address_range {
+	struct acpi_address_range *next;
+	struct acpi_namespace_node *region_node;
+	acpi_physical_address start_address;
+	acpi_physical_address end_address;
+};
+
+struct acpi_table_cdat {
+	u32 length;
+	u8 revision;
+	u8 checksum;
+	u8 reserved[6];
+	u32 sequence;
+};
+
+struct acpi_pkg_info {
+	u8 *free_space;
+	acpi_size length;
+	u32 object_space;
+	u32 num_packages;
+};
+
+struct acpi_exception_info {
+	char *name;
+};
+
+struct acpi_comment_node {
+	char *comment;
+	struct acpi_comment_node *next;
+};
+
+struct acpi_fixed_event_info {
+	u8 status_register_id;
+	u8 enable_register_id;
+	u16 status_bit_mask;
+	u16 enable_bit_mask;
+};
+
+struct acpi_table_fadt {
+	struct acpi_table_header header;
+	u32 facs;
+	u32 dsdt;
+	u8 model;
+	u8 preferred_profile;
+	u16 sci_interrupt;
+	u32 smi_command;
+	u8 acpi_enable;
+	u8 acpi_disable;
+	u8 s4_bios_request;
+	u8 pstate_control;
+	u32 pm1a_event_block;
+	u32 pm1b_event_block;
+	u32 pm1a_control_block;
+	u32 pm1b_control_block;
+	u32 pm2_control_block;
+	u32 pm_timer_block;
+	u32 gpe0_block;
+	u32 gpe1_block;
+	u8 pm1_event_length;
+	u8 pm1_control_length;
+	u8 pm2_control_length;
+	u8 pm_timer_length;
+	u8 gpe0_block_length;
+	u8 gpe1_block_length;
+	u8 gpe1_base;
+	u8 cst_control;
+	u16 c2_latency;
+	u16 c3_latency;
+	u16 flush_size;
+	u16 flush_stride;
+	u8 duty_offset;
+	u8 duty_width;
+	u8 day_alarm;
+	u8 month_alarm;
+	u8 century;
+	u16 boot_flags;
+	u8 reserved;
+	u32 flags;
+	struct acpi_generic_address reset_register;
+	u8 reset_value;
+	u16 arm_boot_flags;
+	u8 minor_revision;
+	u64 Xfacs;
+	u64 Xdsdt;
+	struct acpi_generic_address xpm1a_event_block;
+	struct acpi_generic_address xpm1b_event_block;
+	struct acpi_generic_address xpm1a_control_block;
+	struct acpi_generic_address xpm1b_control_block;
+	struct acpi_generic_address xpm2_control_block;
+	struct acpi_generic_address xpm_timer_block;
+	struct acpi_generic_address xgpe0_block;
+	struct acpi_generic_address xgpe1_block;
+	struct acpi_generic_address sleep_control;
+	struct acpi_generic_address sleep_status;
+	u64 hypervisor_id;
+} __attribute__((packed));
+
+struct acpi_table_list {
+	struct acpi_table_desc *tables;
+	u32 current_table_count;
+	u32 max_table_count;
+	u8 flags;
+};
+
+struct acpi_mutex_info {
+	void *mutex;
+	u32 use_count;
+	u64 thread_id;
+};
+
+typedef acpi_status (*acpi_exception_handler)(acpi_status, acpi_name, u16, u32, void *);
+
+typedef acpi_status (*acpi_init_handler)(acpi_handle, u32);
+
+struct acpi_ged_handler_info {
+	struct acpi_ged_handler_info *next;
+	u32 int_id;
+	struct acpi_namespace_node *evt_method;
+};
+
+struct acpi_interface_info {
+	char *name;
+	struct acpi_interface_info *next;
+	u8 flags;
+	u8 value;
+};
+
+struct acpi_fixed_event_handler {
+	acpi_event_handler handler;
+	void *context;
+};
+
+enum {
+	ACPI_BUTTON_LID_INIT_IGNORE = 0,
+	ACPI_BUTTON_LID_INIT_OPEN = 1,
+	ACPI_BUTTON_LID_INIT_METHOD = 2,
+	ACPI_BUTTON_LID_INIT_DISABLED = 3,
+};
+
+struct input_dev;
+
+struct acpi_button {
+	unsigned int type;
+	struct input_dev *input;
+	char phys[32];
+	unsigned long pushed;
+	int last_state;
+	ktime_t last_time;
+	bool suspended;
+	bool lid_state_initialized;
+};
+
+struct input_id {
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+};
+
+struct input_keymap_entry;
+
+struct ff_device;
+
+struct input_dev_poller;
+
+struct input_mt;
+
+struct input_absinfo;
+
+struct input_handle;
+
+struct input_value;
+
+struct input_dev {
+	const char *name;
+	const char *phys;
+	const char *uniq;
+	struct input_id id;
+	unsigned long propbit[1];
+	unsigned long evbit[1];
+	unsigned long keybit[12];
+	unsigned long relbit[1];
+	unsigned long absbit[1];
+	unsigned long mscbit[1];
+	unsigned long ledbit[1];
+	unsigned long sndbit[1];
+	unsigned long ffbit[2];
+	unsigned long swbit[1];
+	unsigned int hint_events_per_packet;
+	unsigned int keycodemax;
+	unsigned int keycodesize;
+	void *keycode;
+	int (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);
+	int (*getkeycode)(struct input_dev *, struct input_keymap_entry *);
+	struct ff_device *ff;
+	struct input_dev_poller *poller;
+	unsigned int repeat_key;
+	struct timer_list timer;
+	int rep[2];
+	struct input_mt *mt;
+	struct input_absinfo *absinfo;
+	unsigned long key[12];
+	unsigned long led[1];
+	unsigned long snd[1];
+	unsigned long sw[1];
+	int (*open)(struct input_dev *);
+	void (*close)(struct input_dev *);
+	int (*flush)(struct input_dev *, struct file *);
+	int (*event)(struct input_dev *, unsigned int, unsigned int, int);
+	struct input_handle __attribute__((btf_type_tag("rcu"))) *grab;
+	spinlock_t event_lock;
+	struct mutex mutex;
+	unsigned int users;
+	bool going_away;
+	struct device dev;
+	struct list_head h_list;
+	struct list_head node;
+	unsigned int num_vals;
+	unsigned int max_vals;
+	struct input_value *vals;
+	bool devres_managed;
+	ktime_t timestamp[3];
+	bool inhibited;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct input_keymap_entry {
+	__u8 flags;
+	__u8 len;
+	__u16 index;
+	__u32 keycode;
+	__u8 scancode[32];
+};
+
+struct ff_effect;
+
+struct ff_device {
+	int (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);
+	int (*erase)(struct input_dev *, int);
+	int (*playback)(struct input_dev *, int, int);
+	void (*set_gain)(struct input_dev *, u16);
+	void (*set_autocenter)(struct input_dev *, u16);
+	void (*destroy)(struct ff_device *);
+	void *private;
+	unsigned long ffbit[2];
+	struct mutex mutex;
+	int max_effects;
+	struct ff_effect *effects;
+	u64 android_kabi_reserved1;
+	struct file *effect_owners[0];
+};
+
+struct ff_envelope {
+	__u16 attack_length;
+	__u16 attack_level;
+	__u16 fade_length;
+	__u16 fade_level;
+};
+
+struct ff_constant_effect {
+	__s16 level;
+	struct ff_envelope envelope;
+};
+
+struct ff_ramp_effect {
+	__s16 start_level;
+	__s16 end_level;
+	struct ff_envelope envelope;
+};
+
+struct ff_periodic_effect {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+	struct ff_envelope envelope;
+	__u32 custom_len;
+	__s16 __attribute__((btf_type_tag("user"))) *custom_data;
+};
+
+struct ff_condition_effect {
+	__u16 right_saturation;
+	__u16 left_saturation;
+	__s16 right_coeff;
+	__s16 left_coeff;
+	__u16 deadband;
+	__s16 center;
+};
+
+struct ff_rumble_effect {
+	__u16 strong_magnitude;
+	__u16 weak_magnitude;
+};
+
+struct ff_trigger {
+	__u16 button;
+	__u16 interval;
+};
+
+struct ff_replay {
+	__u16 length;
+	__u16 delay;
+};
+
+struct ff_effect {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect periodic;
+		struct ff_condition_effect condition[2];
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+struct input_absinfo {
+	__s32 value;
+	__s32 minimum;
+	__s32 maximum;
+	__s32 fuzz;
+	__s32 flat;
+	__s32 resolution;
+};
+
+struct input_handler;
+
+struct input_handle {
+	void *private;
+	int open;
+	const char *name;
+	struct input_dev *dev;
+	struct input_handler *handler;
+	struct list_head d_node;
+	struct list_head h_node;
+	u64 android_kabi_reserved1;
+};
+
+struct input_device_id;
+
+struct input_handler {
+	void *private;
+	void (*event)(struct input_handle *, unsigned int, unsigned int, int);
+	void (*events)(struct input_handle *, const struct input_value *, unsigned int);
+	bool (*filter)(struct input_handle *, unsigned int, unsigned int, int);
+	bool (*match)(struct input_handler *, struct input_dev *);
+	int (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);
+	void (*disconnect)(struct input_handle *);
+	void (*start)(struct input_handle *);
+	bool legacy_minors;
+	int minor;
+	const char *name;
+	const struct input_device_id *id_table;
+	struct list_head h_list;
+	struct list_head node;
+	u64 android_kabi_reserved1;
+};
+
+struct input_value {
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct input_device_id {
+	kernel_ulong_t flags;
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+	kernel_ulong_t evbit[1];
+	kernel_ulong_t keybit[12];
+	kernel_ulong_t relbit[1];
+	kernel_ulong_t absbit[1];
+	kernel_ulong_t mscbit[1];
+	kernel_ulong_t ledbit[1];
+	kernel_ulong_t sndbit[1];
+	kernel_ulong_t ffbit[2];
+	kernel_ulong_t swbit[1];
+	kernel_ulong_t propbit[1];
+	kernel_ulong_t driver_info;
+};
+
+struct acpi_lpi_states_array {
+	unsigned int size;
+	unsigned int composite_states_size;
+	struct acpi_lpi_state *entries;
+	struct acpi_lpi_state *composite_states[8];
+};
+
+struct throttling_tstate {
+	unsigned int cpu;
+	int target_state;
+};
+
+struct acpi_processor_throttling_arg {
+	struct acpi_processor *pr;
+	int target_state;
+	bool force;
+};
+
+struct container_dev {
+	struct device dev;
+	int (*offline)(struct container_dev *);
+};
+
+struct acpi_pci_ioapic {
+	acpi_handle root_handle;
+	acpi_handle handle;
+	u32 gsi_base;
+	struct resource res;
+	struct pci_dev *pdev;
+	struct list_head list;
+};
+
+struct cppc_pcc_data {
+	struct pcc_mbox_chan *pcc_channel;
+	void *pcc_comm_addr;
+	bool pcc_channel_acquired;
+	unsigned int deadline_us;
+	unsigned int pcc_mpar;
+	unsigned int pcc_mrtt;
+	unsigned int pcc_nominal;
+	bool pending_pcc_write_cmd;
+	bool platform_owns_pcc;
+	unsigned int pcc_write_cnt;
+	struct rw_semaphore pcc_lock;
+	wait_queue_head_t pcc_write_wait_q;
+	ktime_t last_cmd_cmpl_time;
+	ktime_t last_mpar_reset;
+	int mpar_count;
+	int refcount;
+};
+
+struct cpc_register_resource {
+	acpi_object_type type;
+	u64 *sys_mem_vaddr;
+	union {
+		struct cpc_reg reg;
+		u64 int_value;
+	} cpc_entry;
+};
+
+struct cpc_desc {
+	int num_entries;
+	int version;
+	int cpu_id;
+	int write_cmd_status;
+	int write_cmd_id;
+	struct cpc_register_resource cpc_regs[21];
+	struct acpi_psd_package domain_info;
+	struct kobject kobj;
+};
+
+enum cppc_regs {
+	HIGHEST_PERF = 0,
+	NOMINAL_PERF = 1,
+	LOW_NON_LINEAR_PERF = 2,
+	LOWEST_PERF = 3,
+	GUARANTEED_PERF = 4,
+	DESIRED_PERF = 5,
+	MIN_PERF = 6,
+	MAX_PERF = 7,
+	PERF_REDUC_TOLERANCE = 8,
+	TIME_WINDOW = 9,
+	CTR_WRAP_TIME = 10,
+	REFERENCE_CTR = 11,
+	DELIVERED_CTR = 12,
+	PERF_LIMITED = 13,
+	ENABLE = 14,
+	AUTO_SEL_ENABLE = 15,
+	AUTO_ACT_WINDOW = 16,
+	ENERGY_PERF = 17,
+	REFERENCE_PERF = 18,
+	LOWEST_FREQ = 19,
+	NOMINAL_FREQ = 20,
+};
+
+struct cppc_perf_ctrls {
+	u32 max_perf;
+	u32 min_perf;
+	u32 desired_perf;
+	u32 energy_perf;
+};
+
+struct cppc_perf_fb_ctrs {
+	u64 reference;
+	u64 delivered;
+	u64 reference_perf;
+	u64 wraparound_time;
+};
+
+struct cppc_cpudata {
+	struct list_head node;
+	struct cppc_perf_caps perf_caps;
+	struct cppc_perf_ctrls perf_ctrls;
+	struct cppc_perf_fb_ctrs perf_fb_ctrs;
+	unsigned int shared_type;
+	cpumask_var_t shared_cpu_map;
+};
+
+struct acpi_pcct_shared_memory {
+	u32 signature;
+	u16 command;
+	u16 status;
+};
+
+struct pnp_resource {
+	struct list_head list;
+	struct resource res;
+};
+
+struct pnp_port {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t size;
+	unsigned char flags;
+};
+
+typedef struct {
+	unsigned long bits[4];
+} pnp_irq_mask_t;
+
+struct pnp_irq {
+	pnp_irq_mask_t map;
+	unsigned char flags;
+};
+
+struct pnp_dma {
+	unsigned char map;
+	unsigned char flags;
+};
+
+struct pnp_mem {
+	resource_size_t min;
+	resource_size_t max;
+	resource_size_t align;
+	resource_size_t size;
+	unsigned char flags;
+};
+
+struct pnp_option {
+	struct list_head list;
+	unsigned int flags;
+	unsigned long type;
+	union {
+		struct pnp_port port;
+		struct pnp_irq irq;
+		struct pnp_dma dma;
+		struct pnp_mem mem;
+	} u;
+};
+
+struct pnp_info_buffer {
+	char *buffer;
+	char *curr;
+	unsigned long size;
+	unsigned long len;
+	int stop;
+	int error;
+};
+
+typedef struct pnp_info_buffer pnp_info_buffer_t;
+
+struct pnp_fixup {
+	char id[7];
+	void (*quirk_function)(struct pnp_dev *);
+};
+
+struct acpipnp_parse_option_s {
+	struct pnp_dev *dev;
+	unsigned int option_flags;
+};
+
+struct dma_chan___2;
+
+struct dma_chan_tbl_ent {
+	struct dma_chan___2 *chan;
+};
+
+typedef s32 dma_cookie_t;
+
+struct dma_device;
+
+struct dma_chan_dev;
+
+struct dma_chan_percpu;
+
+struct dma_router;
+
+struct dma_chan___2 {
+	struct dma_device *device;
+	struct device *slave;
+	dma_cookie_t cookie;
+	dma_cookie_t completed_cookie;
+	int chan_id;
+	struct dma_chan_dev *dev;
+	const char *name;
+	char *dbg_client_name;
+	struct list_head device_node;
+	struct dma_chan_percpu __attribute__((btf_type_tag("percpu"))) *local;
+	int client_count;
+	int table_count;
+	struct dma_router *router;
+	void *route_data;
+	void *private;
+};
+
+typedef bool (*dma_filter_fn)(struct dma_chan___2 *, void *);
+
+struct dma_slave_map;
+
+struct dma_filter {
+	dma_filter_fn fn;
+	int mapcnt;
+	const struct dma_slave_map *map;
+};
+
+typedef struct {
+	unsigned long bits[1];
+} dma_cap_mask_t;
+
+enum dma_desc_metadata_mode {
+	DESC_METADATA_NONE = 0,
+	DESC_METADATA_CLIENT = 1,
+	DESC_METADATA_ENGINE = 2,
+};
+
+enum dmaengine_alignment {
+	DMAENGINE_ALIGN_1_BYTE = 0,
+	DMAENGINE_ALIGN_2_BYTES = 1,
+	DMAENGINE_ALIGN_4_BYTES = 2,
+	DMAENGINE_ALIGN_8_BYTES = 3,
+	DMAENGINE_ALIGN_16_BYTES = 4,
+	DMAENGINE_ALIGN_32_BYTES = 5,
+	DMAENGINE_ALIGN_64_BYTES = 6,
+	DMAENGINE_ALIGN_128_BYTES = 7,
+	DMAENGINE_ALIGN_256_BYTES = 8,
+};
+
+enum dma_residue_granularity {
+	DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
+	DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
+	DMA_RESIDUE_GRANULARITY_BURST = 2,
+};
+
+enum sum_check_flags {
+	SUM_CHECK_P_RESULT = 1,
+	SUM_CHECK_Q_RESULT = 2,
+};
+
+enum dma_transfer_direction {
+	DMA_MEM_TO_MEM = 0,
+	DMA_MEM_TO_DEV = 1,
+	DMA_DEV_TO_MEM = 2,
+	DMA_DEV_TO_DEV = 3,
+	DMA_TRANS_NONE = 4,
+};
+
+enum dma_status {
+	DMA_COMPLETE = 0,
+	DMA_IN_PROGRESS = 1,
+	DMA_PAUSED = 2,
+	DMA_ERROR = 3,
+	DMA_OUT_OF_ORDER = 4,
+};
+
+struct dma_async_tx_descriptor;
+
+struct dma_interleaved_template;
+
+struct dma_slave_caps;
+
+struct dma_slave_config;
+
+struct dma_tx_state;
+
+struct dma_device {
+	struct kref ref;
+	unsigned int chancnt;
+	unsigned int privatecnt;
+	struct list_head channels;
+	struct list_head global_node;
+	struct dma_filter filter;
+	dma_cap_mask_t cap_mask;
+	enum dma_desc_metadata_mode desc_metadata_modes;
+	unsigned short max_xor;
+	unsigned short max_pq;
+	enum dmaengine_alignment copy_align;
+	enum dmaengine_alignment xor_align;
+	enum dmaengine_alignment pq_align;
+	enum dmaengine_alignment fill_align;
+	int dev_id;
+	struct device *dev;
+	struct module *owner;
+	struct ida chan_ida;
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool descriptor_reuse;
+	enum dma_residue_granularity residue_granularity;
+	int (*device_alloc_chan_resources)(struct dma_chan___2 *);
+	int (*device_router_config)(struct dma_chan___2 *);
+	void (*device_free_chan_resources)(struct dma_chan___2 *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan___2 *, dma_addr_t, dma_addr_t, size_t, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan___2 *, dma_addr_t, dma_addr_t *, unsigned int, size_t, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan___2 *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan___2 *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan___2 *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan___2 *, dma_addr_t, int, size_t, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, int, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan___2 *, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, enum dma_transfer_direction, unsigned long, void *);
+	struct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan___2 *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan___2 *, struct dma_interleaved_template *, unsigned long);
+	struct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan___2 *, dma_addr_t, u64, unsigned long);
+	void (*device_caps)(struct dma_chan___2 *, struct dma_slave_caps *);
+	int (*device_config)(struct dma_chan___2 *, struct dma_slave_config *);
+	int (*device_pause)(struct dma_chan___2 *);
+	int (*device_resume)(struct dma_chan___2 *);
+	int (*device_terminate_all)(struct dma_chan___2 *);
+	void (*device_synchronize)(struct dma_chan___2 *);
+	enum dma_status (*device_tx_status)(struct dma_chan___2 *, dma_cookie_t, struct dma_tx_state *);
+	void (*device_issue_pending)(struct dma_chan___2 *);
+	void (*device_release)(struct dma_device *);
+	void (*dbg_summary_show)(struct seq_file *, struct dma_device *);
+	struct dentry *dbg_dev_root;
+};
+
+struct dma_slave_map {
+	const char *devname;
+	const char *slave;
+	void *param;
+};
+
+enum dma_ctrl_flags {
+	DMA_PREP_INTERRUPT = 1,
+	DMA_CTRL_ACK = 2,
+	DMA_PREP_PQ_DISABLE_P = 4,
+	DMA_PREP_PQ_DISABLE_Q = 8,
+	DMA_PREP_CONTINUE = 16,
+	DMA_PREP_FENCE = 32,
+	DMA_CTRL_REUSE = 64,
+	DMA_PREP_CMD = 128,
+	DMA_PREP_REPEAT = 256,
+	DMA_PREP_LOAD_EOT = 512,
+};
+
+typedef void (*dma_async_tx_callback)(void *);
+
+struct dmaengine_result;
+
+typedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);
+
+struct dmaengine_unmap_data;
+
+struct dma_descriptor_metadata_ops;
+
+struct dma_async_tx_descriptor {
+	dma_cookie_t cookie;
+	enum dma_ctrl_flags flags;
+	dma_addr_t phys;
+	struct dma_chan___2 *chan;
+	dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);
+	int (*desc_free)(struct dma_async_tx_descriptor *);
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+	struct dmaengine_unmap_data *unmap;
+	enum dma_desc_metadata_mode desc_metadata_mode;
+	struct dma_descriptor_metadata_ops *metadata_ops;
+	struct dma_async_tx_descriptor *next;
+	struct dma_async_tx_descriptor *parent;
+	spinlock_t lock;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum dmaengine_tx_result {
+	DMA_TRANS_NOERROR = 0,
+	DMA_TRANS_READ_FAILED = 1,
+	DMA_TRANS_WRITE_FAILED = 2,
+	DMA_TRANS_ABORTED = 3,
+};
+
+struct dmaengine_result {
+	enum dmaengine_tx_result result;
+	u32 residue;
+};
+
+struct dmaengine_unmap_data {
+	u8 map_cnt;
+	u8 to_cnt;
+	u8 from_cnt;
+	u8 bidi_cnt;
+	struct device *dev;
+	struct kref kref;
+	size_t len;
+	dma_addr_t addr[0];
+};
+
+struct dma_descriptor_metadata_ops {
+	int (*attach)(struct dma_async_tx_descriptor *, void *, size_t);
+	void * (*get_ptr)(struct dma_async_tx_descriptor *, size_t *, size_t *);
+	int (*set_len)(struct dma_async_tx_descriptor *, size_t);
+};
+
+struct data_chunk {
+	size_t size;
+	size_t icg;
+	size_t dst_icg;
+	size_t src_icg;
+};
+
+struct dma_interleaved_template {
+	dma_addr_t src_start;
+	dma_addr_t dst_start;
+	enum dma_transfer_direction dir;
+	bool src_inc;
+	bool dst_inc;
+	bool src_sgl;
+	bool dst_sgl;
+	size_t numf;
+	size_t frame_size;
+	struct data_chunk sgl[0];
+};
+
+struct dma_slave_caps {
+	u32 src_addr_widths;
+	u32 dst_addr_widths;
+	u32 directions;
+	u32 min_burst;
+	u32 max_burst;
+	u32 max_sg_burst;
+	bool cmd_pause;
+	bool cmd_resume;
+	bool cmd_terminate;
+	enum dma_residue_granularity residue_granularity;
+	bool descriptor_reuse;
+};
+
+enum dma_slave_buswidth {
+	DMA_SLAVE_BUSWIDTH_UNDEFINED = 0,
+	DMA_SLAVE_BUSWIDTH_1_BYTE = 1,
+	DMA_SLAVE_BUSWIDTH_2_BYTES = 2,
+	DMA_SLAVE_BUSWIDTH_3_BYTES = 3,
+	DMA_SLAVE_BUSWIDTH_4_BYTES = 4,
+	DMA_SLAVE_BUSWIDTH_8_BYTES = 8,
+	DMA_SLAVE_BUSWIDTH_16_BYTES = 16,
+	DMA_SLAVE_BUSWIDTH_32_BYTES = 32,
+	DMA_SLAVE_BUSWIDTH_64_BYTES = 64,
+	DMA_SLAVE_BUSWIDTH_128_BYTES = 128,
+};
+
+struct dma_slave_config {
+	enum dma_transfer_direction direction;
+	phys_addr_t src_addr;
+	phys_addr_t dst_addr;
+	enum dma_slave_buswidth src_addr_width;
+	enum dma_slave_buswidth dst_addr_width;
+	u32 src_maxburst;
+	u32 dst_maxburst;
+	u32 src_port_window_size;
+	u32 dst_port_window_size;
+	bool device_fc;
+	void *peripheral_config;
+	size_t peripheral_size;
+};
+
+struct dma_tx_state {
+	dma_cookie_t last;
+	dma_cookie_t used;
+	u32 residue;
+	u32 in_flight_bytes;
+};
+
+struct dma_chan_dev {
+	struct dma_chan___2 *chan;
+	struct device device;
+	int dev_id;
+	bool chan_dma_dev;
+};
+
+struct dma_chan_percpu {
+	unsigned long memcpy_count;
+	unsigned long bytes_transferred;
+};
+
+struct dma_router {
+	struct device *dev;
+	void (*route_free)(struct device *, void *);
+};
+
+struct dmaengine_unmap_pool {
+	struct kmem_cache *cache;
+	const char *name;
+	mempool_t *pool;
+	size_t size;
+};
+
+enum dma_transaction_type {
+	DMA_MEMCPY = 0,
+	DMA_XOR = 1,
+	DMA_PQ = 2,
+	DMA_XOR_VAL = 3,
+	DMA_PQ_VAL = 4,
+	DMA_MEMSET = 5,
+	DMA_MEMSET_SG = 6,
+	DMA_INTERRUPT = 7,
+	DMA_PRIVATE = 8,
+	DMA_ASYNC_TX = 9,
+	DMA_SLAVE = 10,
+	DMA_CYCLIC = 11,
+	DMA_INTERLEAVE = 12,
+	DMA_COMPLETION_NO_ORDER = 13,
+	DMA_REPEAT = 14,
+	DMA_LOAD_EOT = 15,
+	DMA_TX_TYPE_END = 16,
+};
+
+struct virt_dma_desc {
+	struct dma_async_tx_descriptor tx;
+	struct dmaengine_result tx_result;
+	struct list_head node;
+};
+
+struct virt_dma_chan {
+	struct dma_chan___2 chan;
+	struct tasklet_struct task;
+	void (*desc_free)(struct virt_dma_desc *);
+	spinlock_t lock;
+	struct list_head desc_allocated;
+	struct list_head desc_submitted;
+	struct list_head desc_issued;
+	struct list_head desc_completed;
+	struct list_head desc_terminated;
+	struct virt_dma_desc *cyclic;
+};
+
+struct dmaengine_desc_callback {
+	dma_async_tx_callback callback;
+	dma_async_tx_callback_result callback_result;
+	void *callback_param;
+};
+
+struct acpi_dma_spec;
+
+struct acpi_dma {
+	struct list_head dma_controllers;
+	struct device *dev;
+	struct dma_chan___2 * (*acpi_dma_xlate)(struct acpi_dma_spec *, struct acpi_dma *);
+	void *data;
+	unsigned short base_request_line;
+	unsigned short end_request_line;
+};
+
+struct acpi_dma_spec {
+	int chan_id;
+	int slave_id;
+	struct device *dev;
+};
+
+struct acpi_csrt_group {
+	u32 length;
+	u32 vendor_id;
+	u32 subvendor_id;
+	u16 device_id;
+	u16 subdevice_id;
+	u16 revision;
+	u16 reserved;
+	u32 shared_info_length;
+};
+
+struct acpi_csrt_shared_info {
+	u16 major_version;
+	u16 minor_version;
+	u32 mmio_base_low;
+	u32 mmio_base_high;
+	u32 gsi_interrupt;
+	u8 interrupt_polarity;
+	u8 interrupt_mode;
+	u8 num_channels;
+	u8 dma_address_width;
+	u16 base_request_line;
+	u16 num_handshake_signals;
+	u32 max_block_size;
+};
+
+struct acpi_table_csrt {
+	struct acpi_table_header header;
+};
+
+struct acpi_dma_parser_data {
+	struct acpi_dma_spec dma_spec;
+	size_t index;
+	size_t n;
+};
+
+struct acpi_dma_filter_info {
+	dma_cap_mask_t dma_cap;
+	dma_filter_fn filter_fn;
+};
+
+struct of_dma {
+	struct list_head of_dma_controllers;
+	struct device_node *of_node;
+	struct dma_chan___2 * (*of_dma_xlate)(struct of_phandle_args *, struct of_dma *);
+	void * (*of_dma_route_allocate)(struct of_phandle_args *, struct of_dma *);
+	struct dma_router *dma_router;
+	void *of_dma_data;
+};
+
+struct of_dma_filter_info {
+	dma_cap_mask_t dma_cap;
+	dma_filter_fn filter_fn;
+};
+
+enum dw_dmac_flags {
+	DW_DMA_IS_CYCLIC = 0,
+	DW_DMA_IS_SOFT_LLP = 1,
+	DW_DMA_IS_PAUSED = 2,
+	DW_DMA_IS_INITIALIZED = 3,
+};
+
+enum dw_dma_fc {
+	DW_DMA_FC_D_M2M = 0,
+	DW_DMA_FC_D_M2P = 1,
+	DW_DMA_FC_D_P2M = 2,
+	DW_DMA_FC_D_P2P = 3,
+	DW_DMA_FC_P_P2M = 4,
+	DW_DMA_FC_SP_P2P = 5,
+	DW_DMA_FC_P_M2P = 6,
+	DW_DMA_FC_DP_P2P = 7,
+};
+
+struct dw_dma_slave {
+	struct device *dma_dev;
+	u8 src_id;
+	u8 dst_id;
+	u8 m_master;
+	u8 p_master;
+	u8 channels;
+	bool hs_polarity;
+};
+
+struct dw_dma_chan {
+	struct dma_chan___2 chan;
+	void *ch_regs;
+	u8 mask;
+	u8 priority;
+	enum dma_transfer_direction direction;
+	struct list_head *tx_node_active;
+	spinlock_t lock;
+	unsigned long flags;
+	struct list_head active_list;
+	struct list_head queue;
+	unsigned int descs_allocated;
+	unsigned int block_size;
+	bool nollp;
+	u32 max_burst;
+	struct dw_dma_slave dws;
+	struct dma_slave_config dma_sconfig;
+};
+
+struct dw_dma_platform_data;
+
+struct dw_dma {
+	struct dma_device dma;
+	char name[20];
+	void *regs;
+	struct dma_pool *desc_pool;
+	struct tasklet_struct tasklet;
+	struct dw_dma_chan *chan;
+	u8 all_chan_mask;
+	u8 in_use;
+	void (*initialize_chan)(struct dw_dma_chan *);
+	void (*suspend_chan)(struct dw_dma_chan *, bool);
+	void (*resume_chan)(struct dw_dma_chan *, bool);
+	u32 (*prepare_ctllo)(struct dw_dma_chan *);
+	void (*encode_maxburst)(struct dw_dma_chan *, u32 *);
+	u32 (*bytes2block)(struct dw_dma_chan *, size_t, unsigned int, size_t *);
+	size_t (*block2bytes)(struct dw_dma_chan *, u32, u32);
+	void (*set_device_name)(struct dw_dma *, int);
+	void (*disable)(struct dw_dma *);
+	void (*enable)(struct dw_dma *);
+	struct dw_dma_platform_data *pdata;
+};
+
+struct dw_dma_platform_data {
+	u32 nr_masters;
+	u32 nr_channels;
+	u32 chan_allocation_order;
+	u32 chan_priority;
+	u32 block_size;
+	u32 data_width[4];
+	u32 multi_block[8];
+	u32 max_burst[8];
+	u32 protctl;
+	u32 quirks;
+};
+
+struct dw_lli {
+	__le32 sar;
+	__le32 dar;
+	__le32 llp;
+	__le32 ctllo;
+	__le32 ctlhi;
+	__le32 sstat;
+	__le32 dstat;
+};
+
+struct dw_desc {
+	struct dw_lli lli;
+	struct list_head desc_node;
+	struct list_head tx_list;
+	struct dma_async_tx_descriptor txd;
+	size_t len;
+	size_t total_len;
+	u32 residue;
+};
+
+struct dw_dma_chan_regs {
+	u32 SAR;
+	u32 __pad_SAR;
+	u32 DAR;
+	u32 __pad_DAR;
+	u32 LLP;
+	u32 __pad_LLP;
+	u32 CTL_LO;
+	u32 CTL_HI;
+	u32 SSTAT;
+	u32 __pad_SSTAT;
+	u32 DSTAT;
+	u32 __pad_DSTAT;
+	u32 SSTATAR;
+	u32 __pad_SSTATAR;
+	u32 DSTATAR;
+	u32 __pad_DSTATAR;
+	u32 CFG_LO;
+	u32 CFG_HI;
+	u32 SGR;
+	u32 __pad_SGR;
+	u32 DSR;
+	u32 __pad_DSR;
+};
+
+struct dw_dma_irq_regs {
+	u32 XFER;
+	u32 __pad_XFER;
+	u32 BLOCK;
+	u32 __pad_BLOCK;
+	u32 SRC_TRAN;
+	u32 __pad_SRC_TRAN;
+	u32 DST_TRAN;
+	u32 __pad_DST_TRAN;
+	u32 ERROR;
+	u32 __pad_ERROR;
+};
+
+struct dw_dma_regs {
+	struct dw_dma_chan_regs CHAN[8];
+	struct dw_dma_irq_regs RAW;
+	struct dw_dma_irq_regs STATUS;
+	struct dw_dma_irq_regs MASK;
+	struct dw_dma_irq_regs CLEAR;
+	u32 STATUS_INT;
+	u32 __pad_STATUS_INT;
+	u32 REQ_SRC;
+	u32 __pad_REQ_SRC;
+	u32 REQ_DST;
+	u32 __pad_REQ_DST;
+	u32 SGL_REQ_SRC;
+	u32 __pad_SGL_REQ_SRC;
+	u32 SGL_REQ_DST;
+	u32 __pad_SGL_REQ_DST;
+	u32 LAST_SRC;
+	u32 __pad_LAST_SRC;
+	u32 LAST_DST;
+	u32 __pad_LAST_DST;
+	u32 CFG;
+	u32 __pad_CFG;
+	u32 CH_EN;
+	u32 __pad_CH_EN;
+	u32 ID;
+	u32 __pad_ID;
+	u32 TEST;
+	u32 __pad_TEST;
+	u32 CLASS_PRIORITY0;
+	u32 __pad_CLASS_PRIORITY0;
+	u32 CLASS_PRIORITY1;
+	u32 __pad_CLASS_PRIORITY1;
+	u32 __reserved;
+	u32 DWC_PARAMS[8];
+	u32 MULTI_BLK_TYPE;
+	u32 MAX_BLK_SIZE;
+	u32 DW_PARAMS;
+	u32 COMP_TYPE;
+	u32 COMP_VERSION;
+	u32 FIFO_PARTITION0;
+	u32 __pad_FIFO_PARTITION0;
+	u32 FIFO_PARTITION1;
+	u32 __pad_FIFO_PARTITION1;
+	u32 SAI_ERR;
+	u32 __pad_SAI_ERR;
+	u32 GLOBAL_CFG;
+	u32 __pad_GLOBAL_CFG;
+};
+
+struct dw_dma_chip {
+	struct device *dev;
+	int id;
+	int irq;
+	void *regs;
+	struct clk *clk;
+	struct dw_dma *dw;
+	const struct dw_dma_platform_data *pdata;
+};
+
+struct hsu_dma_sg;
+
+struct hsu_dma_desc {
+	struct virt_dma_desc vdesc;
+	enum dma_transfer_direction direction;
+	struct hsu_dma_sg *sg;
+	unsigned int nents;
+	size_t length;
+	unsigned int active;
+	enum dma_status status;
+};
+
+struct hsu_dma_sg {
+	dma_addr_t addr;
+	unsigned int len;
+};
+
+struct hsu_dma_chan {
+	struct virt_dma_chan vchan;
+	void *reg;
+	enum dma_transfer_direction direction;
+	struct dma_slave_config config;
+	struct hsu_dma_desc *desc;
+};
+
+struct hsu_dma;
+
+struct hsu_dma_chip {
+	struct device *dev;
+	int irq;
+	void *regs;
+	unsigned int length;
+	unsigned int offset;
+	struct hsu_dma *hsu;
+};
+
+struct hsu_dma {
+	struct dma_device dma;
+	struct hsu_dma_chan *chan;
+	unsigned short nr_channels;
+};
+
+struct qcom_smem_state_ops {
+	int (*update_bits)(void *, u32, u32);
+};
+
+struct qcom_smem_state {
+	struct kref refcount;
+	bool orphan;
+	struct list_head list;
+	struct device_node *of_node;
+	void *priv;
+	struct qcom_smem_state_ops ops;
+};
+
+struct vring_desc;
+
+typedef struct vring_desc vring_desc_t;
+
+struct vring_avail;
+
+typedef struct vring_avail vring_avail_t;
+
+struct vring_used;
+
+typedef struct vring_used vring_used_t;
+
+struct vring {
+	unsigned int num;
+	vring_desc_t *desc;
+	vring_avail_t *avail;
+	vring_used_t *used;
+};
+
+struct vring_desc_state_split;
+
+struct vring_desc_extra;
+
+struct vring_virtqueue_split {
+	struct vring vring;
+	u16 avail_flags_shadow;
+	u16 avail_idx_shadow;
+	struct vring_desc_state_split *desc_state;
+	struct vring_desc_extra *desc_extra;
+	dma_addr_t queue_dma_addr;
+	size_t queue_size_in_bytes;
+	u32 vring_align;
+	bool may_reduce_num;
+};
+
+struct vring_packed_desc;
+
+struct vring_packed_desc_event;
+
+struct vring_desc_state_packed;
+
+struct vring_virtqueue_packed {
+	struct {
+		unsigned int num;
+		struct vring_packed_desc *desc;
+		struct vring_packed_desc_event *driver;
+		struct vring_packed_desc_event *device;
+	} vring;
+	bool avail_wrap_counter;
+	u16 avail_used_flags;
+	u16 next_avail_idx;
+	u16 event_flags_shadow;
+	struct vring_desc_state_packed *desc_state;
+	struct vring_desc_extra *desc_extra;
+	dma_addr_t ring_dma_addr;
+	dma_addr_t driver_event_dma_addr;
+	dma_addr_t device_event_dma_addr;
+	size_t ring_size_in_bytes;
+	size_t event_size_in_bytes;
+};
+
+struct vring_virtqueue {
+	struct virtqueue vq;
+	bool packed_ring;
+	bool use_dma_api;
+	bool weak_barriers;
+	bool broken;
+	bool indirect;
+	bool event;
+	bool premapped;
+	bool do_unmap;
+	unsigned int free_head;
+	unsigned int num_added;
+	u16 last_used_idx;
+	bool event_triggered;
+	union {
+		struct vring_virtqueue_split split;
+		struct vring_virtqueue_packed packed;
+	};
+	bool (*notify)(struct virtqueue *);
+	bool we_own_ring;
+	struct device *dma_dev;
+};
+
+typedef __u64 __virtio64;
+
+typedef __u32 __virtio32;
+
+typedef __u16 __virtio16;
+
+struct vring_desc {
+	__virtio64 addr;
+	__virtio32 len;
+	__virtio16 flags;
+	__virtio16 next;
+};
+
+struct vring_avail {
+	__virtio16 flags;
+	__virtio16 idx;
+	__virtio16 ring[0];
+};
+
+struct vring_used_elem {
+	__virtio32 id;
+	__virtio32 len;
+};
+
+typedef struct vring_used_elem vring_used_elem_t;
+
+struct vring_used {
+	__virtio16 flags;
+	__virtio16 idx;
+	vring_used_elem_t ring[0];
+};
+
+struct vring_desc_state_split {
+	void *data;
+	struct vring_desc *indir_desc;
+};
+
+struct vring_desc_extra {
+	dma_addr_t addr;
+	u32 len;
+	u16 flags;
+	u16 next;
+};
+
+struct vring_packed_desc {
+	__le64 addr;
+	__le32 len;
+	__le16 id;
+	__le16 flags;
+};
+
+struct vring_packed_desc_event {
+	__le16 off_wrap;
+	__le16 flags;
+};
+
+struct vring_desc_state_packed {
+	void *data;
+	struct vring_packed_desc *indir_desc;
+	u16 num;
+	u16 last;
+};
+
+typedef void (*btf_trace_regulator_enable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_enable_delay)(void *, const char *);
+
+typedef void (*btf_trace_regulator_enable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_disable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_disable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_enable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_enable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_disable)(void *, const char *);
+
+typedef void (*btf_trace_regulator_bypass_disable_complete)(void *, const char *);
+
+typedef void (*btf_trace_regulator_set_voltage)(void *, const char *, int, int);
+
+typedef void (*btf_trace_regulator_set_voltage_complete)(void *, const char *, unsigned int);
+
+struct ww_class {
+	atomic_long_t stamp;
+	struct lock_class_key acquire_key;
+	struct lock_class_key mutex_key;
+	const char *acquire_name;
+	const char *mutex_name;
+	unsigned int is_wait_die;
+};
+
+struct regulator_dev;
+
+struct regulator_coupler {
+	struct list_head list;
+	int (*attach_regulator)(struct regulator_coupler *, struct regulator_dev *);
+	int (*detach_regulator)(struct regulator_coupler *, struct regulator_dev *);
+	int (*balance_voltage)(struct regulator_coupler *, struct regulator_dev *, suspend_state_t);
+};
+
+struct coupling_desc {
+	struct regulator_dev **coupled_rdevs;
+	struct regulator_coupler *coupler;
+	int n_resolved;
+	int n_coupled;
+};
+
+struct regulator_desc;
+
+struct regulation_constraints;
+
+struct regmap;
+
+struct regulator_enable_gpio;
+
+struct regulator_dev {
+	const struct regulator_desc *desc;
+	int exclusive;
+	u32 use_count;
+	u32 open_count;
+	u32 bypass_count;
+	struct list_head list;
+	struct list_head consumer_list;
+	struct coupling_desc coupling_desc;
+	struct blocking_notifier_head notifier;
+	struct ww_mutex mutex;
+	struct task_struct *mutex_owner;
+	int ref_cnt;
+	struct module *owner;
+	struct device dev;
+	struct regulation_constraints *constraints;
+	struct regulator *supply;
+	const char *supply_name;
+	struct regmap *regmap;
+	struct delayed_work disable_work;
+	void *reg_data;
+	struct dentry *debugfs;
+	struct regulator_enable_gpio *ena_pin;
+	unsigned int ena_gpio_state: 1;
+	unsigned int is_switch: 1;
+	ktime_t last_off;
+	int cached_err;
+	bool use_cached_err;
+	spinlock_t err_lock;
+	u64 android_kabi_reserved1;
+};
+
+enum regulator_type {
+	REGULATOR_VOLTAGE = 0,
+	REGULATOR_CURRENT = 1,
+};
+
+struct regulator_config;
+
+struct regulator_ops;
+
+struct regulator_desc {
+	const char *name;
+	const char *supply_name;
+	const char *of_match;
+	bool of_match_full_name;
+	const char *regulators_node;
+	int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);
+	int id;
+	unsigned int continuous_voltage_range: 1;
+	unsigned int n_voltages;
+	unsigned int n_current_limits;
+	const struct regulator_ops *ops;
+	int irq;
+	enum regulator_type type;
+	struct module *owner;
+	unsigned int min_uV;
+	unsigned int uV_step;
+	unsigned int linear_min_sel;
+	int fixed_uV;
+	unsigned int ramp_delay;
+	int min_dropout_uV;
+	const struct linear_range *linear_ranges;
+	const unsigned int *linear_range_selectors_bitfield;
+	int n_linear_ranges;
+	const unsigned int *volt_table;
+	const unsigned int *curr_table;
+	unsigned int vsel_range_reg;
+	unsigned int vsel_range_mask;
+	unsigned int vsel_reg;
+	unsigned int vsel_mask;
+	unsigned int vsel_step;
+	unsigned int csel_reg;
+	unsigned int csel_mask;
+	unsigned int apply_reg;
+	unsigned int apply_bit;
+	unsigned int enable_reg;
+	unsigned int enable_mask;
+	unsigned int enable_val;
+	unsigned int disable_val;
+	bool enable_is_inverted;
+	unsigned int bypass_reg;
+	unsigned int bypass_mask;
+	unsigned int bypass_val_on;
+	unsigned int bypass_val_off;
+	unsigned int active_discharge_on;
+	unsigned int active_discharge_off;
+	unsigned int active_discharge_mask;
+	unsigned int active_discharge_reg;
+	unsigned int soft_start_reg;
+	unsigned int soft_start_mask;
+	unsigned int soft_start_val_on;
+	unsigned int pull_down_reg;
+	unsigned int pull_down_mask;
+	unsigned int pull_down_val_on;
+	unsigned int ramp_reg;
+	unsigned int ramp_mask;
+	const unsigned int *ramp_delay_table;
+	unsigned int n_ramp_values;
+	unsigned int enable_time;
+	unsigned int off_on_delay;
+	unsigned int poll_enabled_time;
+	unsigned int (*of_map_mode)(unsigned int);
+	u64 android_kabi_reserved1;
+};
+
+struct regulator_init_data;
+
+struct regulator_config {
+	struct device *dev;
+	const struct regulator_init_data *init_data;
+	void *driver_data;
+	struct device_node *of_node;
+	struct regmap *regmap;
+	struct gpio_desc *ena_gpiod;
+};
+
+struct regulator_state {
+	int uV;
+	int min_uV;
+	int max_uV;
+	unsigned int mode;
+	int enabled;
+	bool changeable;
+};
+
+struct notification_limit {
+	int prot;
+	int err;
+	int warn;
+};
+
+struct regulation_constraints {
+	const char *name;
+	int min_uV;
+	int max_uV;
+	int uV_offset;
+	int min_uA;
+	int max_uA;
+	int ilim_uA;
+	int system_load;
+	u32 *max_spread;
+	int max_uV_step;
+	unsigned int valid_modes_mask;
+	unsigned int valid_ops_mask;
+	int input_uV;
+	struct regulator_state state_disk;
+	struct regulator_state state_mem;
+	struct regulator_state state_standby;
+	struct notification_limit over_curr_limits;
+	struct notification_limit over_voltage_limits;
+	struct notification_limit under_voltage_limits;
+	struct notification_limit temp_limits;
+	suspend_state_t initial_state;
+	unsigned int initial_mode;
+	unsigned int ramp_delay;
+	unsigned int settling_time;
+	unsigned int settling_time_up;
+	unsigned int settling_time_down;
+	unsigned int enable_time;
+	unsigned int active_discharge;
+	unsigned int always_on: 1;
+	unsigned int boot_on: 1;
+	unsigned int apply_uV: 1;
+	unsigned int ramp_disable: 1;
+	unsigned int soft_start: 1;
+	unsigned int pull_down: 1;
+	unsigned int over_current_protection: 1;
+	unsigned int over_current_detection: 1;
+	unsigned int over_voltage_detection: 1;
+	unsigned int under_voltage_detection: 1;
+	unsigned int over_temp_detection: 1;
+};
+
+struct regulator_consumer_supply;
+
+struct regulator_init_data {
+	const char *supply_regulator;
+	struct regulation_constraints constraints;
+	int num_consumer_supplies;
+	struct regulator_consumer_supply *consumer_supplies;
+	int (*regulator_init)(void *);
+	void *driver_data;
+};
+
+struct regulator_consumer_supply {
+	const char *dev_name;
+	const char *supply;
+};
+
+struct regulator_ops {
+	int (*list_voltage)(struct regulator_dev *, unsigned int);
+	int (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);
+	int (*map_voltage)(struct regulator_dev *, int, int);
+	int (*set_voltage_sel)(struct regulator_dev *, unsigned int);
+	int (*get_voltage)(struct regulator_dev *);
+	int (*get_voltage_sel)(struct regulator_dev *);
+	int (*set_current_limit)(struct regulator_dev *, int, int);
+	int (*get_current_limit)(struct regulator_dev *);
+	int (*set_input_current_limit)(struct regulator_dev *, int);
+	int (*set_over_current_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_over_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_under_voltage_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_thermal_protection)(struct regulator_dev *, int, int, bool);
+	int (*set_active_discharge)(struct regulator_dev *, bool);
+	int (*enable)(struct regulator_dev *);
+	int (*disable)(struct regulator_dev *);
+	int (*is_enabled)(struct regulator_dev *);
+	int (*set_mode)(struct regulator_dev *, unsigned int);
+	unsigned int (*get_mode)(struct regulator_dev *);
+	int (*get_error_flags)(struct regulator_dev *, unsigned int *);
+	int (*enable_time)(struct regulator_dev *);
+	int (*set_ramp_delay)(struct regulator_dev *, int);
+	int (*set_voltage_time)(struct regulator_dev *, int, int);
+	int (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);
+	int (*set_soft_start)(struct regulator_dev *);
+	int (*get_status)(struct regulator_dev *);
+	unsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);
+	int (*set_load)(struct regulator_dev *, int);
+	int (*set_bypass)(struct regulator_dev *, bool);
+	int (*get_bypass)(struct regulator_dev *, bool *);
+	int (*set_suspend_voltage)(struct regulator_dev *, int);
+	int (*set_suspend_enable)(struct regulator_dev *);
+	int (*set_suspend_disable)(struct regulator_dev *);
+	int (*set_suspend_mode)(struct regulator_dev *, unsigned int);
+	int (*resume)(struct regulator_dev *);
+	int (*set_pull_down)(struct regulator_dev *);
+	u64 android_kabi_reserved1;
+};
+
+struct regulator_voltage {
+	int min_uV;
+	int max_uV;
+};
+
+struct regulator {
+	struct device *dev;
+	struct list_head list;
+	unsigned int always_on: 1;
+	unsigned int bypass: 1;
+	unsigned int device_link: 1;
+	int uA_load;
+	unsigned int enable_count;
+	unsigned int deferred_disables;
+	struct regulator_voltage voltage[5];
+	const char *supply_name;
+	struct device_attribute dev_attr;
+	struct regulator_dev *rdev;
+	struct dentry *debugfs;
+};
+
+struct regulator_enable_gpio {
+	struct list_head list;
+	struct gpio_desc *gpiod;
+	u32 enable_count;
+	u32 request_count;
+};
+
+enum regulator_get_type {
+	NORMAL_GET = 0,
+	EXCLUSIVE_GET = 1,
+	OPTIONAL_GET = 2,
+	MAX_GET_TYPE = 3,
+};
+
+enum regulator_status {
+	REGULATOR_STATUS_OFF = 0,
+	REGULATOR_STATUS_ON = 1,
+	REGULATOR_STATUS_ERROR = 2,
+	REGULATOR_STATUS_FAST = 3,
+	REGULATOR_STATUS_NORMAL = 4,
+	REGULATOR_STATUS_IDLE = 5,
+	REGULATOR_STATUS_STANDBY = 6,
+	REGULATOR_STATUS_BYPASS = 7,
+	REGULATOR_STATUS_UNDEFINED = 8,
+};
+
+enum regulator_detection_severity {
+	REGULATOR_SEVERITY_PROT = 0,
+	REGULATOR_SEVERITY_ERR = 1,
+	REGULATOR_SEVERITY_WARN = 2,
+};
+
+enum regulator_active_discharge {
+	REGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,
+	REGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,
+	REGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,
+};
+
+struct trace_event_raw_regulator_basic {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_regulator_range {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int min;
+	int max;
+	char __data[0];
+};
+
+struct trace_event_raw_regulator_value {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int val;
+	char __data[0];
+};
+
+struct regulator_map {
+	struct list_head list;
+	const char *dev_name;
+	const char *supply;
+	struct regulator_dev *regulator;
+};
+
+struct regulator_supply_alias {
+	struct list_head list;
+	struct device *src_dev;
+	const char *src_supply;
+	struct device *alias_dev;
+	const char *alias_supply;
+};
+
+struct trace_event_data_offsets_regulator_basic {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regulator_range {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regulator_value {
+	u32 name;
+};
+
+struct pre_voltage_change_data {
+	unsigned long old_uV;
+	unsigned long min_uV;
+	unsigned long max_uV;
+};
+
+struct summary_lock_data {
+	struct ww_acquire_ctx *ww_ctx;
+	struct regulator_dev **new_contended_rdev;
+	struct regulator_dev **old_contended_rdev;
+};
+
+struct regulator_bulk_data {
+	const char *supply;
+	int init_load_uA;
+	struct regulator *consumer;
+	int ret;
+};
+
+struct summary_data {
+	struct seq_file *s;
+	struct regulator_dev *parent;
+	int level;
+};
+
+struct fixed_voltage_config {
+	const char *supply_name;
+	const char *input_supply;
+	int microvolts;
+	unsigned int startup_delay;
+	unsigned int off_on_delay;
+	unsigned int enabled_at_boot: 1;
+	struct regulator_init_data *init_data;
+};
+
+struct fixed_regulator_data {
+	struct fixed_voltage_config cfg;
+	struct regulator_init_data init_data;
+	struct platform_device pdev;
+};
+
+struct regulator_bulk_devres {
+	struct regulator_bulk_data *consumers;
+	int num_consumers;
+};
+
+struct regulator_supply_alias_match {
+	struct device *dev;
+	const char *id;
+};
+
+struct regulator_irq_data;
+
+struct regulator_irq_desc {
+	const char *name;
+	int fatal_cnt;
+	int reread_ms;
+	int irq_off_ms;
+	bool skip_off;
+	bool high_prio;
+	void *data;
+	int (*die)(struct regulator_irq_data *);
+	int (*map_event)(int, struct regulator_irq_data *, unsigned long *);
+	int (*renable)(struct regulator_irq_data *);
+};
+
+struct regulator_err_state;
+
+struct regulator_irq_data {
+	struct regulator_err_state *states;
+	int num_states;
+	void *data;
+	long opaque;
+};
+
+struct regulator_err_state {
+	struct regulator_dev *rdev;
+	unsigned long notifs;
+	unsigned long errors;
+	int possible_errs;
+};
+
+struct regulator_notifier_match {
+	struct regulator *regulator;
+	struct notifier_block *nb;
+};
+
+enum {
+	REGULATOR_ERROR_CLEARED = 0,
+	REGULATOR_FAILED_RETRY = 1,
+	REGULATOR_ERROR_ON = 2,
+};
+
+struct regulator_irq {
+	struct regulator_irq_data rdata;
+	struct regulator_irq_desc desc;
+	int irq;
+	int retry_cnt;
+	struct delayed_work isr_work;
+};
+
+struct of_regulator_match {
+	const char *name;
+	void *driver_data;
+	struct regulator_init_data *init_data;
+	struct device_node *of_node;
+	const struct regulator_desc *desc;
+};
+
+struct devm_of_regulator_matches {
+	struct of_regulator_match *matches;
+	unsigned int num_matches;
+};
+
+struct fixed_dev_type {
+	bool has_enable_clock;
+	bool has_performance_state;
+};
+
+struct fixed_voltage_data {
+	struct regulator_desc desc;
+	struct regulator_dev *dev;
+	struct clk *enable_clock;
+	unsigned int enable_counter;
+	int performance_state;
+};
+
+struct serial_struct32 {
+	compat_int_t type;
+	compat_int_t line;
+	compat_uint_t port;
+	compat_int_t irq;
+	compat_int_t flags;
+	compat_int_t xmit_fifo_size;
+	compat_int_t custom_divisor;
+	compat_int_t baud_base;
+	unsigned short close_delay;
+	char io_type;
+	char reserved_char;
+	compat_int_t hub6;
+	unsigned short closing_wait;
+	unsigned short closing_wait2;
+	compat_uint_t iomem_base;
+	unsigned short iomem_reg_shift;
+	unsigned int port_high;
+	compat_int_t reserved;
+};
+
+enum {
+	ERASE = 0,
+	WERASE = 1,
+	KILL = 2,
+};
+
+struct n_tty_data {
+	size_t read_head;
+	size_t commit_head;
+	size_t canon_head;
+	size_t echo_head;
+	size_t echo_commit;
+	size_t echo_mark;
+	unsigned long char_map[4];
+	unsigned long overrun_time;
+	unsigned int num_overrun;
+	bool no_room;
+	unsigned char lnext: 1;
+	unsigned char erasing: 1;
+	unsigned char raw: 1;
+	unsigned char real_raw: 1;
+	unsigned char icanon: 1;
+	unsigned char push: 1;
+	u8 read_buf[4096];
+	unsigned long read_flags[64];
+	u8 echo_buf[4096];
+	size_t read_tail;
+	size_t line_start;
+	size_t lookahead_count;
+	unsigned int column;
+	unsigned int canon_column;
+	size_t echo_tail;
+	struct mutex atomic_read_lock;
+	struct mutex output_lock;
+};
+
+struct termios {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+};
+
+struct termios2 {
+	tcflag_t c_iflag;
+	tcflag_t c_oflag;
+	tcflag_t c_cflag;
+	tcflag_t c_lflag;
+	cc_t c_line;
+	cc_t c_cc[19];
+	speed_t c_ispeed;
+	speed_t c_ospeed;
+};
+
+struct termio {
+	unsigned short c_iflag;
+	unsigned short c_oflag;
+	unsigned short c_cflag;
+	unsigned short c_lflag;
+	unsigned char c_line;
+	unsigned char c_cc[8];
+};
+
+struct ldsem_waiter {
+	struct list_head list;
+	struct task_struct *task;
+};
+
+struct tty_audit_buf {
+	struct mutex mutex;
+	dev_t dev;
+	bool icanon;
+	size_t valid;
+	u8 *data;
+};
+
+struct sysrq_state {
+	struct input_handle handle;
+	struct work_struct reinject_work;
+	unsigned long key_down[12];
+	unsigned int alt;
+	unsigned int alt_use;
+	unsigned int shift;
+	unsigned int shift_use;
+	bool active;
+	bool need_reinject;
+	bool reinjecting;
+	bool reset_canceled;
+	bool reset_requested;
+	unsigned long reset_keybit[12];
+	int reset_seq_len;
+	int reset_seq_cnt;
+	int reset_seq_version;
+	struct timer_list keyreset_timer;
+};
+
+struct hvc_struct;
+
+struct hv_ops {
+	int (*get_chars)(uint32_t, char *, int);
+	int (*put_chars)(uint32_t, const char *, int);
+	int (*flush)(uint32_t, bool);
+	int (*notifier_add)(struct hvc_struct *, int);
+	void (*notifier_del)(struct hvc_struct *, int);
+	void (*notifier_hangup)(struct hvc_struct *, int);
+	int (*tiocmget)(struct hvc_struct *);
+	int (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int);
+	void (*dtr_rts)(struct hvc_struct *, bool);
+};
+
+struct hvc_struct {
+	struct tty_port port;
+	spinlock_t lock;
+	int index;
+	int do_wakeup;
+	char *outbuf;
+	int outbuf_size;
+	int n_outbuf;
+	uint32_t vtermno;
+	const struct hv_ops *ops;
+	int irq_requested;
+	int data;
+	struct winsize ws;
+	struct work_struct tty_resize;
+	struct list_head next;
+	unsigned long flags;
+};
+
+enum uart_pm_state {
+	UART_PM_STATE_ON = 0,
+	UART_PM_STATE_OFF = 3,
+	UART_PM_STATE_UNDEFINED = 4,
+};
+
+typedef u64 upf_t;
+
+typedef unsigned int upstat_t;
+
+struct circ_buf {
+	char *buf;
+	int head;
+	int tail;
+};
+
+struct uart_port;
+
+struct uart_state {
+	struct tty_port port;
+	enum uart_pm_state pm_state;
+	struct circ_buf xmit;
+	atomic_t refcount;
+	wait_queue_head_t remove_wait;
+	struct uart_port *uart_port;
+};
+
+struct uart_icount {
+	__u32 cts;
+	__u32 dsr;
+	__u32 rng;
+	__u32 dcd;
+	__u32 rx;
+	__u32 tx;
+	__u32 frame;
+	__u32 overrun;
+	__u32 parity;
+	__u32 brk;
+	__u32 buf_overrun;
+};
+
+struct serial_rs485 {
+	__u32 flags;
+	__u32 delay_rts_before_send;
+	__u32 delay_rts_after_send;
+	union {
+		__u32 padding[5];
+		struct {
+			__u8 addr_recv;
+			__u8 addr_dest;
+			__u8 padding0[2];
+			__u32 padding1[4];
+		};
+	};
+};
+
+struct serial_iso7816 {
+	__u32 flags;
+	__u32 tg;
+	__u32 sc_fi;
+	__u32 sc_di;
+	__u32 clk;
+	__u32 reserved[5];
+};
+
+struct uart_ops;
+
+struct serial_port_device;
+
+struct uart_port {
+	spinlock_t lock;
+	unsigned long iobase;
+	unsigned char *membase;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);
+	void (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+	int (*rs485_config)(struct uart_port *, struct ktermios *, struct serial_rs485 *);
+	int (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);
+	unsigned int ctrl_id;
+	unsigned int port_id;
+	unsigned int irq;
+	unsigned long irqflags;
+	unsigned int uartclk;
+	unsigned int fifosize;
+	unsigned char x_char;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char quirks;
+	unsigned int read_status_mask;
+	unsigned int ignore_status_mask;
+	struct uart_state *state;
+	struct uart_icount icount;
+	struct console *cons;
+	upf_t flags;
+	upstat_t status;
+	bool hw_stopped;
+	unsigned int mctrl;
+	unsigned int frame_time;
+	unsigned int type;
+	const struct uart_ops *ops;
+	unsigned int custom_divisor;
+	unsigned int line;
+	unsigned int minor;
+	resource_size_t mapbase;
+	resource_size_t mapsize;
+	struct device *dev;
+	struct serial_port_device *port_dev;
+	unsigned long sysrq;
+	u8 sysrq_ch;
+	unsigned char has_sysrq;
+	unsigned char sysrq_seq;
+	unsigned char hub6;
+	unsigned char suspended;
+	unsigned char console_reinit;
+	const char *name;
+	struct attribute_group *attr_group;
+	const struct attribute_group **tty_groups;
+	struct serial_rs485 rs485;
+	struct serial_rs485 rs485_supported;
+	struct gpio_desc *rs485_term_gpio;
+	struct gpio_desc *rs485_rx_during_tx_gpio;
+	struct serial_iso7816 iso7816;
+	void *private_data;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct uart_ops {
+	unsigned int (*tx_empty)(struct uart_port *);
+	void (*set_mctrl)(struct uart_port *, unsigned int);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	void (*stop_tx)(struct uart_port *);
+	void (*start_tx)(struct uart_port *);
+	void (*throttle)(struct uart_port *);
+	void (*unthrottle)(struct uart_port *);
+	void (*send_xchar)(struct uart_port *, char);
+	void (*stop_rx)(struct uart_port *);
+	void (*start_rx)(struct uart_port *);
+	void (*enable_ms)(struct uart_port *);
+	void (*break_ctl)(struct uart_port *, int);
+	int (*startup)(struct uart_port *);
+	void (*shutdown)(struct uart_port *);
+	void (*flush_buffer)(struct uart_port *);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	const char * (*type)(struct uart_port *);
+	void (*release_port)(struct uart_port *);
+	int (*request_port)(struct uart_port *);
+	void (*config_port)(struct uart_port *, int);
+	int (*verify_port)(struct uart_port *, struct serial_struct *);
+	int (*ioctl)(struct uart_port *, unsigned int, unsigned long);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct serial_port_device {
+	struct device dev;
+	struct uart_port *port;
+	unsigned int tx_enabled: 1;
+};
+
+struct serial_ctrl_device {
+	struct device dev;
+	struct ida port_ida;
+};
+
+struct uart_driver {
+	struct module *owner;
+	const char *driver_name;
+	const char *dev_name;
+	int major;
+	int minor;
+	int nr;
+	struct console *cons;
+	struct uart_state *state;
+	struct tty_driver *tty_driver;
+	u64 android_kabi_reserved1;
+};
+
+struct uart_match {
+	struct uart_port *port;
+	struct uart_driver *driver;
+};
+
+struct earlycon_device {
+	struct console *con;
+	struct uart_port port;
+	char options[32];
+	unsigned int baud;
+};
+
+struct earlycon_id {
+	char name[15];
+	char name_term;
+	char compatible[128];
+	int (*setup)(struct earlycon_device *, const char *);
+};
+
+struct mctrl_gpios;
+
+struct uart_8250_dma;
+
+struct uart_8250_ops;
+
+struct uart_8250_em485;
+
+struct uart_8250_port {
+	struct uart_port port;
+	struct timer_list timer;
+	struct list_head list;
+	u32 capabilities;
+	u16 bugs;
+	unsigned int tx_loadsz;
+	unsigned char acr;
+	unsigned char fcr;
+	unsigned char ier;
+	unsigned char lcr;
+	unsigned char mcr;
+	unsigned char cur_iotype;
+	unsigned int rpm_tx_active;
+	unsigned char canary;
+	unsigned char probe;
+	struct mctrl_gpios *gpios;
+	u16 lsr_saved_flags;
+	u16 lsr_save_mask;
+	unsigned char msr_saved_flags;
+	struct uart_8250_dma *dma;
+	const struct uart_8250_ops *ops;
+	u32 (*dl_read)(struct uart_8250_port *);
+	void (*dl_write)(struct uart_8250_port *, u32);
+	struct uart_8250_em485 *em485;
+	void (*rs485_start_tx)(struct uart_8250_port *);
+	void (*rs485_stop_tx)(struct uart_8250_port *);
+	struct delayed_work overrun_backoff;
+	u32 overrun_backoff_time_ms;
+};
+
+struct uart_8250_dma {
+	int (*tx_dma)(struct uart_8250_port *);
+	int (*rx_dma)(struct uart_8250_port *);
+	void (*prepare_tx_dma)(struct uart_8250_port *);
+	void (*prepare_rx_dma)(struct uart_8250_port *);
+	dma_filter_fn fn;
+	void *rx_param;
+	void *tx_param;
+	struct dma_slave_config rxconf;
+	struct dma_slave_config txconf;
+	struct dma_chan___2 *rxchan;
+	struct dma_chan___2 *txchan;
+	phys_addr_t rx_dma_addr;
+	phys_addr_t tx_dma_addr;
+	dma_addr_t rx_addr;
+	dma_addr_t tx_addr;
+	dma_cookie_t rx_cookie;
+	dma_cookie_t tx_cookie;
+	void *rx_buf;
+	size_t rx_size;
+	size_t tx_size;
+	unsigned char tx_running;
+	unsigned char tx_err;
+	unsigned char rx_running;
+};
+
+struct uart_8250_ops {
+	int (*setup_irq)(struct uart_8250_port *);
+	void (*release_irq)(struct uart_8250_port *);
+	void (*setup_timer)(struct uart_8250_port *);
+};
+
+struct uart_8250_em485 {
+	struct hrtimer start_tx_timer;
+	struct hrtimer stop_tx_timer;
+	struct hrtimer *active_timer;
+	struct uart_8250_port *port;
+	unsigned int tx_stopped: 1;
+};
+
+struct old_serial_port {
+	unsigned int uart;
+	unsigned int baud_base;
+	unsigned int port;
+	unsigned int irq;
+	upf_t flags;
+	unsigned char io_type;
+	unsigned char *iomem_base;
+	unsigned short iomem_reg_shift;
+};
+
+enum {
+	PLAT8250_DEV_LEGACY = -1,
+	PLAT8250_DEV_PLATFORM = 0,
+	PLAT8250_DEV_PLATFORM1 = 1,
+	PLAT8250_DEV_PLATFORM2 = 2,
+	PLAT8250_DEV_FOURPORT = 3,
+	PLAT8250_DEV_ACCENT = 4,
+	PLAT8250_DEV_BOCA = 5,
+	PLAT8250_DEV_EXAR_ST16C554 = 6,
+	PLAT8250_DEV_HUB6 = 7,
+	PLAT8250_DEV_AU1X00 = 8,
+	PLAT8250_DEV_SM501 = 9,
+};
+
+struct irq_info {
+	struct hlist_node node;
+	int irq;
+	spinlock_t lock;
+	struct list_head *head;
+};
+
+struct plat_serial8250_port {
+	unsigned long iobase;
+	void *membase;
+	resource_size_t mapbase;
+	resource_size_t mapsize;
+	unsigned int uartclk;
+	unsigned int irq;
+	unsigned long irqflags;
+	void *private_data;
+	unsigned char regshift;
+	unsigned char iotype;
+	unsigned char hub6;
+	unsigned char has_sysrq;
+	unsigned int type;
+	upf_t flags;
+	u16 bugs;
+	unsigned int (*serial_in)(struct uart_port *, int);
+	void (*serial_out)(struct uart_port *, int, int);
+	u32 (*dl_read)(struct uart_8250_port *);
+	void (*dl_write)(struct uart_8250_port *, u32);
+	void (*set_termios)(struct uart_port *, struct ktermios *, const struct ktermios *);
+	void (*set_ldisc)(struct uart_port *, struct ktermios *);
+	unsigned int (*get_mctrl)(struct uart_port *);
+	int (*handle_irq)(struct uart_port *);
+	void (*pm)(struct uart_port *, unsigned int, unsigned int);
+	void (*handle_break)(struct uart_port *);
+};
+
+struct serial8250_config {
+	const char *name;
+	unsigned short fifo_size;
+	unsigned short tx_loadsz;
+	unsigned char fcr;
+	unsigned char rxtrig_bytes[4];
+	unsigned int flags;
+};
+
+struct dw8250_port_data {
+	int line;
+	struct uart_8250_dma dma;
+	u8 dlf_size;
+	bool hw_rs485_support;
+};
+
+struct dw8250_platform_data;
+
+struct dw8250_data {
+	struct dw8250_port_data data;
+	const struct dw8250_platform_data *pdata;
+	int msr_mask_on;
+	int msr_mask_off;
+	struct clk *clk;
+	struct clk *pclk;
+	struct notifier_block clk_notifier;
+	struct work_struct clk_work;
+	struct reset_control *rst;
+	unsigned int skip_autocfg: 1;
+	unsigned int uart_16550_compatible: 1;
+};
+
+struct dw8250_platform_data {
+	u8 usr_reg;
+	u32 cpr_val;
+	unsigned int quirks;
+};
+
+struct serial_private;
+
+struct pciserial_board;
+
+struct pci_serial_quirk {
+	u32 vendor;
+	u32 device;
+	u32 subvendor;
+	u32 subdevice;
+	int (*probe)(struct pci_dev *);
+	int (*init)(struct pci_dev *);
+	int (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);
+	void (*exit)(struct pci_dev *);
+};
+
+struct serial_private {
+	struct pci_dev *dev;
+	unsigned int nr;
+	struct pci_serial_quirk *quirk;
+	const struct pciserial_board *board;
+	int line[0];
+};
+
+struct pciserial_board {
+	unsigned int flags;
+	unsigned int num_ports;
+	unsigned int base_baud;
+	unsigned int uart_offset;
+	unsigned int reg_shift;
+	unsigned int first_offset;
+};
+
+struct timedia_struct {
+	int num;
+	const unsigned short *ids;
+};
+
+enum pci_board_num_t {
+	pbn_default = 0,
+	pbn_b0_1_115200 = 1,
+	pbn_b0_2_115200 = 2,
+	pbn_b0_4_115200 = 3,
+	pbn_b0_5_115200 = 4,
+	pbn_b0_8_115200 = 5,
+	pbn_b0_1_921600 = 6,
+	pbn_b0_2_921600 = 7,
+	pbn_b0_4_921600 = 8,
+	pbn_b0_2_1130000 = 9,
+	pbn_b0_4_1152000 = 10,
+	pbn_b0_4_1250000 = 11,
+	pbn_b0_2_1843200 = 12,
+	pbn_b0_4_1843200 = 13,
+	pbn_b0_1_15625000 = 14,
+	pbn_b0_bt_1_115200 = 15,
+	pbn_b0_bt_2_115200 = 16,
+	pbn_b0_bt_4_115200 = 17,
+	pbn_b0_bt_8_115200 = 18,
+	pbn_b0_bt_1_460800 = 19,
+	pbn_b0_bt_2_460800 = 20,
+	pbn_b0_bt_4_460800 = 21,
+	pbn_b0_bt_1_921600 = 22,
+	pbn_b0_bt_2_921600 = 23,
+	pbn_b0_bt_4_921600 = 24,
+	pbn_b0_bt_8_921600 = 25,
+	pbn_b1_1_115200 = 26,
+	pbn_b1_2_115200 = 27,
+	pbn_b1_4_115200 = 28,
+	pbn_b1_8_115200 = 29,
+	pbn_b1_16_115200 = 30,
+	pbn_b1_1_921600 = 31,
+	pbn_b1_2_921600 = 32,
+	pbn_b1_4_921600 = 33,
+	pbn_b1_8_921600 = 34,
+	pbn_b1_2_1250000 = 35,
+	pbn_b1_bt_1_115200 = 36,
+	pbn_b1_bt_2_115200 = 37,
+	pbn_b1_bt_4_115200 = 38,
+	pbn_b1_bt_2_921600 = 39,
+	pbn_b1_1_1382400 = 40,
+	pbn_b1_2_1382400 = 41,
+	pbn_b1_4_1382400 = 42,
+	pbn_b1_8_1382400 = 43,
+	pbn_b2_1_115200 = 44,
+	pbn_b2_2_115200 = 45,
+	pbn_b2_4_115200 = 46,
+	pbn_b2_8_115200 = 47,
+	pbn_b2_1_460800 = 48,
+	pbn_b2_4_460800 = 49,
+	pbn_b2_8_460800 = 50,
+	pbn_b2_16_460800 = 51,
+	pbn_b2_1_921600 = 52,
+	pbn_b2_4_921600 = 53,
+	pbn_b2_8_921600 = 54,
+	pbn_b2_8_1152000 = 55,
+	pbn_b2_bt_1_115200 = 56,
+	pbn_b2_bt_2_115200 = 57,
+	pbn_b2_bt_4_115200 = 58,
+	pbn_b2_bt_2_921600 = 59,
+	pbn_b2_bt_4_921600 = 60,
+	pbn_b3_2_115200 = 61,
+	pbn_b3_4_115200 = 62,
+	pbn_b3_8_115200 = 63,
+	pbn_b4_bt_2_921600 = 64,
+	pbn_b4_bt_4_921600 = 65,
+	pbn_b4_bt_8_921600 = 66,
+	pbn_panacom = 67,
+	pbn_panacom2 = 68,
+	pbn_panacom4 = 69,
+	pbn_plx_romulus = 70,
+	pbn_oxsemi = 71,
+	pbn_oxsemi_1_15625000 = 72,
+	pbn_oxsemi_2_15625000 = 73,
+	pbn_oxsemi_4_15625000 = 74,
+	pbn_oxsemi_8_15625000 = 75,
+	pbn_intel_i960 = 76,
+	pbn_sgi_ioc3 = 77,
+	pbn_computone_4 = 78,
+	pbn_computone_6 = 79,
+	pbn_computone_8 = 80,
+	pbn_sbsxrsio = 81,
+	pbn_pasemi_1682M = 82,
+	pbn_ni8430_2 = 83,
+	pbn_ni8430_4 = 84,
+	pbn_ni8430_8 = 85,
+	pbn_ni8430_16 = 86,
+	pbn_ADDIDATA_PCIe_1_3906250 = 87,
+	pbn_ADDIDATA_PCIe_2_3906250 = 88,
+	pbn_ADDIDATA_PCIe_4_3906250 = 89,
+	pbn_ADDIDATA_PCIe_8_3906250 = 90,
+	pbn_ce4100_1_115200 = 91,
+	pbn_omegapci = 92,
+	pbn_NETMOS9900_2s_115200 = 93,
+	pbn_brcm_trumanage = 94,
+	pbn_fintek_4 = 95,
+	pbn_fintek_8 = 96,
+	pbn_fintek_12 = 97,
+	pbn_fintek_F81504A = 98,
+	pbn_fintek_F81508A = 99,
+	pbn_fintek_F81512A = 100,
+	pbn_wch382_2 = 101,
+	pbn_wch384_4 = 102,
+	pbn_wch384_8 = 103,
+	pbn_sunix_pci_1s = 104,
+	pbn_sunix_pci_2s = 105,
+	pbn_sunix_pci_4s = 106,
+	pbn_sunix_pci_8s = 107,
+	pbn_sunix_pci_16s = 108,
+	pbn_titan_1_4000000 = 109,
+	pbn_titan_2_4000000 = 110,
+	pbn_titan_4_4000000 = 111,
+	pbn_titan_8_4000000 = 112,
+	pbn_moxa8250_2p = 113,
+	pbn_moxa8250_4p = 114,
+	pbn_moxa8250_8p = 115,
+};
+
+struct f815xxa_data {
+	spinlock_t lock;
+	int idx;
+};
+
+struct exar8250;
+
+struct exar8250_board {
+	unsigned int num_ports;
+	unsigned int reg_shift;
+	int (*setup)(struct exar8250 *, struct pci_dev *, struct uart_8250_port *, int);
+	void (*exit)(struct pci_dev *);
+};
+
+struct exar8250 {
+	unsigned int nr;
+	struct exar8250_board *board;
+	void *virt;
+	int line[0];
+};
+
+struct exar8250_platform {
+	int (*rs485_config)(struct uart_port *, struct ktermios *, struct serial_rs485 *);
+	const struct serial_rs485 *rs485_supported;
+	int (*register_gpio)(struct pci_dev *, struct uart_8250_port *);
+	void (*unregister_gpio)(struct uart_8250_port *);
+};
+
+struct lpss8250;
+
+struct lpss8250_board {
+	unsigned long freq;
+	unsigned int base_baud;
+	int (*setup)(struct lpss8250 *, struct uart_port *);
+	void (*exit)(struct lpss8250 *);
+};
+
+struct lpss8250 {
+	struct dw8250_port_data data;
+	struct lpss8250_board *board;
+	struct dw_dma_chip dma_chip;
+	struct dw_dma_slave dma_param;
+	u8 dma_maxburst;
+};
+
+struct mid8250;
+
+struct mid8250_board {
+	unsigned int flags;
+	unsigned long freq;
+	unsigned int base_baud;
+	int (*setup)(struct mid8250 *, struct uart_port *);
+	void (*exit)(struct mid8250 *);
+};
+
+struct mid8250 {
+	int line;
+	int dma_index;
+	struct pci_dev *dma_dev;
+	struct uart_8250_dma dma;
+	struct mid8250_board *board;
+	struct hsu_dma_chip dma_chip;
+};
+
+struct hsu_dma_slave {
+	struct device *dma_dev;
+	int chan_id;
+};
+
+struct pericom8250 {
+	void *virt;
+	unsigned int nr;
+	int line[0];
+};
+
+struct of_serial_info {
+	struct clk *clk;
+	struct reset_control *rst;
+	int type;
+	int line;
+};
+
+struct s3c24xx_uart_info;
+
+struct s3c24xx_serial_drv_data;
+
+struct s3c2410_uartcfg;
+
+struct s3c24xx_uart_dma;
+
+struct s3c24xx_uart_port {
+	unsigned char rx_claimed;
+	unsigned char tx_claimed;
+	unsigned char rx_enabled;
+	unsigned char tx_enabled;
+	unsigned int pm_level;
+	unsigned long baudclk_rate;
+	unsigned int min_dma_size;
+	unsigned int rx_irq;
+	unsigned int tx_irq;
+	unsigned int tx_in_progress;
+	unsigned int tx_mode;
+	unsigned int rx_mode;
+	const struct s3c24xx_uart_info *info;
+	struct clk *clk;
+	struct clk *baudclk;
+	struct uart_port port;
+	const struct s3c24xx_serial_drv_data *drv_data;
+	const struct s3c2410_uartcfg *cfg;
+	struct s3c24xx_uart_dma *dma;
+};
+
+enum s3c24xx_port_type {
+	TYPE_S3C24XX = 0,
+	TYPE_S3C6400 = 1,
+	TYPE_APPLE_S5L = 2,
+};
+
+struct s3c24xx_uart_info {
+	const char *name;
+	enum s3c24xx_port_type type;
+	unsigned int port_type;
+	unsigned int fifosize;
+	unsigned long rx_fifomask;
+	unsigned long rx_fifoshift;
+	unsigned long rx_fifofull;
+	unsigned long tx_fifomask;
+	unsigned long tx_fifoshift;
+	unsigned long tx_fifofull;
+	unsigned int def_clk_sel;
+	unsigned long num_clks;
+	unsigned long clksel_mask;
+	unsigned long clksel_shift;
+	unsigned long ucon_mask;
+	unsigned int has_divslot: 1;
+};
+
+struct s3c2410_uartcfg {
+	unsigned char hwport;
+	unsigned char unused;
+	unsigned short flags;
+	upf_t uart_flags;
+	unsigned int clk_sel;
+	unsigned int has_fracval;
+	unsigned long ucon;
+	unsigned long ulcon;
+	unsigned long ufcon;
+};
+
+struct s3c24xx_serial_drv_data {
+	const struct s3c24xx_uart_info info;
+	const struct s3c2410_uartcfg def_cfg;
+	const unsigned int fifosize[4];
+};
+
+struct s3c24xx_uart_dma {
+	unsigned int rx_chan_id;
+	unsigned int tx_chan_id;
+	struct dma_slave_config rx_conf;
+	struct dma_slave_config tx_conf;
+	struct dma_chan___2 *rx_chan;
+	struct dma_chan___2 *tx_chan;
+	dma_addr_t rx_addr;
+	dma_addr_t tx_addr;
+	dma_cookie_t rx_cookie;
+	dma_cookie_t tx_cookie;
+	char *rx_buf;
+	dma_addr_t tx_transfer_addr;
+	size_t rx_size;
+	size_t tx_size;
+	struct dma_async_tx_descriptor *tx_desc;
+	struct dma_async_tx_descriptor *rx_desc;
+	int tx_bytes_requested;
+	int rx_bytes_requested;
+};
+
+struct samsung_early_console_data {
+	u32 txfull_mask;
+	u32 rxfifo_mask;
+};
+
+enum mctrl_gpio_idx {
+	UART_GPIO_CTS = 0,
+	UART_GPIO_DSR = 1,
+	UART_GPIO_DCD = 2,
+	UART_GPIO_RNG = 3,
+	UART_GPIO_RI = 3,
+	UART_GPIO_RTS = 4,
+	UART_GPIO_DTR = 5,
+	UART_GPIO_MAX = 6,
+};
+
+struct mctrl_gpios {
+	struct uart_port *port;
+	struct gpio_desc *gpio[6];
+	int irq[6];
+	unsigned int mctrl_prev;
+	bool mctrl_on;
+};
+
+enum serdev_parity {
+	SERDEV_PARITY_NONE = 0,
+	SERDEV_PARITY_EVEN = 1,
+	SERDEV_PARITY_ODD = 2,
+};
+
+struct serdev_controller;
+
+struct serdev_device_ops;
+
+struct serdev_device {
+	struct device dev;
+	int nr;
+	struct serdev_controller *ctrl;
+	const struct serdev_device_ops *ops;
+	struct completion write_comp;
+	struct mutex write_lock;
+};
+
+struct serdev_controller_ops;
+
+struct serdev_controller {
+	struct device dev;
+	unsigned int nr;
+	struct serdev_device *serdev;
+	const struct serdev_controller_ops *ops;
+};
+
+struct serdev_controller_ops {
+	int (*write_buf)(struct serdev_controller *, const unsigned char *, size_t);
+	void (*write_flush)(struct serdev_controller *);
+	int (*write_room)(struct serdev_controller *);
+	int (*open)(struct serdev_controller *);
+	void (*close)(struct serdev_controller *);
+	void (*set_flow_control)(struct serdev_controller *, bool);
+	int (*set_parity)(struct serdev_controller *, enum serdev_parity);
+	unsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);
+	void (*wait_until_sent)(struct serdev_controller *, long);
+	int (*get_tiocm)(struct serdev_controller *);
+	int (*set_tiocm)(struct serdev_controller *, unsigned int, unsigned int);
+	int (*break_ctl)(struct serdev_controller *, unsigned int);
+};
+
+struct serdev_device_ops {
+	int (*receive_buf)(struct serdev_device *, const unsigned char *, size_t);
+	void (*write_wakeup)(struct serdev_device *);
+};
+
+struct serdev_device_driver {
+	struct device_driver driver;
+	int (*probe)(struct serdev_device *);
+	void (*remove)(struct serdev_device *);
+};
+
+struct acpi_serdev_lookup {
+	acpi_handle device_handle;
+	acpi_handle controller_handle;
+	int n;
+	int index;
+};
+
+struct serport {
+	struct tty_port *port;
+	struct tty_struct *tty;
+	struct tty_driver *tty_drv;
+	int tty_idx;
+	unsigned long flags;
+};
+
+struct memdev {
+	const char *name;
+	const struct file_operations *fops;
+	fmode_t fmode;
+	umode_t mode;
+};
+
+struct timer_rand_state {
+	unsigned long last_time;
+	long last_delta;
+	long last_delta2;
+};
+
+enum {
+	CRNG_EMPTY = 0,
+	CRNG_EARLY = 1,
+	CRNG_READY = 2,
+};
+
+struct batch_u8 {
+	u8 entropy[96];
+	local_lock_t lock;
+	unsigned long generation;
+	unsigned int position;
+};
+
+struct batch_u16 {
+	u16 entropy[48];
+	local_lock_t lock;
+	unsigned long generation;
+	unsigned int position;
+};
+
+struct batch_u32 {
+	u32 entropy[24];
+	local_lock_t lock;
+	unsigned long generation;
+	unsigned int position;
+};
+
+struct batch_u64 {
+	u64 entropy[12];
+	local_lock_t lock;
+	unsigned long generation;
+	unsigned int position;
+};
+
+struct crng {
+	u8 key[32];
+	unsigned long generation;
+	local_lock_t lock;
+};
+
+struct fast_pool {
+	unsigned long pool[4];
+	unsigned long last;
+	unsigned int count;
+	struct timer_list mix;
+};
+
+enum {
+	MIX_INFLIGHT = 2147483648,
+};
+
+enum {
+	POOL_BITS = 256,
+	POOL_READY_BITS = 256,
+	POOL_EARLY_BITS = 128,
+};
+
+enum {
+	CRNG_RESEED_START_INTERVAL = 250,
+	CRNG_RESEED_INTERVAL = 15000,
+};
+
+enum {
+	NUM_TRIAL_SAMPLES = 8192,
+	MAX_SAMPLES_PER_BIT = 16,
+};
+
+struct entropy_timer_state {
+	unsigned long entropy;
+	struct timer_list timer;
+	atomic_t samples;
+	unsigned int samples_per_bit;
+};
+
+struct hpets;
+
+struct hpet;
+
+struct hpet_timer;
+
+struct hpet_dev {
+	struct hpets *hd_hpets;
+	struct hpet *hd_hpet;
+	struct hpet_timer *hd_timer;
+	unsigned long hd_ireqfreq;
+	unsigned long hd_irqdata;
+	wait_queue_head_t hd_waitqueue;
+	struct fasync_struct *hd_async_queue;
+	unsigned int hd_flags;
+	unsigned int hd_irq;
+	unsigned int hd_hdwirq;
+	char hd_name[7];
+};
+
+struct hpets {
+	struct hpets *hp_next;
+	struct hpet *hp_hpet;
+	unsigned long hp_hpet_phys;
+	struct clocksource *hp_clocksource;
+	unsigned long long hp_tick_freq;
+	unsigned long hp_delta;
+	unsigned int hp_ntimer;
+	unsigned int hp_which;
+	struct hpet_dev hp_dev[0];
+};
+
+struct hpet_timer {
+	u64 hpet_config;
+	union {
+		u64 _hpet_hc64;
+		u32 _hpet_hc32;
+		unsigned long _hpet_compare;
+	} _u1;
+	u64 hpet_fsb[2];
+};
+
+struct hpet {
+	u64 hpet_cap;
+	u64 res0;
+	u64 hpet_config;
+	u64 res1;
+	u64 hpet_isr;
+	u64 res2[25];
+	union {
+		u64 _hpet_mc64;
+		u32 _hpet_mc32;
+		unsigned long _hpet_mc;
+	} _u0;
+	u64 res3;
+	struct hpet_timer hpet_timers[0];
+};
+
+struct hpet_info {
+	unsigned long hi_ireqfreq;
+	unsigned long hi_flags;
+	unsigned short hi_hpet;
+	unsigned short hi_timer;
+};
+
+struct compat_hpet_info {
+	compat_ulong_t hi_ireqfreq;
+	compat_ulong_t hi_flags;
+	unsigned short hi_hpet;
+	unsigned short hi_timer;
+};
+
+struct hwrng {
+	const char *name;
+	int (*init)(struct hwrng *);
+	void (*cleanup)(struct hwrng *);
+	int (*data_present)(struct hwrng *, int);
+	int (*data_read)(struct hwrng *, u32 *);
+	int (*read)(struct hwrng *, void *, size_t, bool);
+	unsigned long priv;
+	unsigned short quality;
+	struct list_head list;
+	struct kref ref;
+	struct completion cleanup_done;
+	struct completion dying;
+};
+
+struct intel_rng_hw {
+	struct pci_dev *dev;
+	void *mem;
+	u8 bios_cntl_off;
+	u8 bios_cntl_val;
+	u8 fwh_dec_en1_off;
+	u8 fwh_dec_en1_val;
+};
+
+struct amd768_priv {
+	void *iobase;
+	struct pci_dev *pcidev;
+	u32 pmbase;
+};
+
+struct iommu_group {
+	struct kobject kobj;
+	struct kobject *devices_kobj;
+	struct list_head devices;
+	struct xarray pasid_array;
+	struct mutex mutex;
+	void *iommu_data;
+	void (*iommu_data_release)(void *);
+	char *name;
+	int id;
+	struct iommu_domain *default_domain;
+	struct iommu_domain *blocking_domain;
+	struct iommu_domain *domain;
+	struct list_head entry;
+	unsigned int owner_cnt;
+	void *owner;
+};
+
+struct iommu_group_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct iommu_group *, char *);
+	ssize_t (*store)(struct iommu_group *, const char *, size_t);
+};
+
+enum iommu_fault_type {
+	IOMMU_FAULT_DMA_UNRECOV = 1,
+	IOMMU_FAULT_PAGE_REQ = 2,
+};
+
+enum fsl_mc_pool_type {
+	FSL_MC_POOL_DPMCP = 0,
+	FSL_MC_POOL_DPBP = 1,
+	FSL_MC_POOL_DPCON = 2,
+	FSL_MC_POOL_IRQ = 3,
+	FSL_MC_NUM_POOL_TYPES = 4,
+};
+
+enum iommu_resv_type {
+	IOMMU_RESV_DIRECT = 0,
+	IOMMU_RESV_DIRECT_RELAXABLE = 1,
+	IOMMU_RESV_RESERVED = 2,
+	IOMMU_RESV_MSI = 3,
+	IOMMU_RESV_SW_MSI = 4,
+};
+
+enum {
+	IOMMU_SET_DOMAIN_MUST_SUCCEED = 1,
+};
+
+struct group_device {
+	struct list_head list;
+	struct device *dev;
+	char *name;
+};
+
+struct fsl_mc_obj_desc {
+	char type[16];
+	int id;
+	u16 vendor;
+	u16 ver_major;
+	u16 ver_minor;
+	u8 irq_count;
+	u8 region_count;
+	u32 state;
+	char label[16];
+	u16 flags;
+};
+
+struct fsl_mc_io;
+
+struct fsl_mc_device_irq;
+
+struct fsl_mc_resource;
+
+struct fsl_mc_device {
+	struct device dev;
+	u64 dma_mask;
+	u16 flags;
+	u32 icid;
+	u16 mc_handle;
+	struct fsl_mc_io *mc_io;
+	struct fsl_mc_obj_desc obj_desc;
+	struct resource *regions;
+	struct fsl_mc_device_irq **irqs;
+	struct fsl_mc_resource *resource;
+	struct device_link *consumer_link;
+	const char *driver_override;
+};
+
+struct fsl_mc_io {
+	struct device *dev;
+	u16 flags;
+	u32 portal_size;
+	phys_addr_t portal_phys_addr;
+	void *portal_virt_addr;
+	struct fsl_mc_device *dpmcp_dev;
+	union {
+		struct mutex mutex;
+		raw_spinlock_t spinlock;
+	};
+};
+
+struct fsl_mc_resource_pool;
+
+struct fsl_mc_resource {
+	enum fsl_mc_pool_type type;
+	s32 id;
+	void *data;
+	struct fsl_mc_resource_pool *parent_pool;
+	struct list_head node;
+};
+
+struct fsl_mc_device_irq {
+	unsigned int virq;
+	struct fsl_mc_device *mc_dev;
+	u8 dev_irq_index;
+	struct fsl_mc_resource resource;
+};
+
+struct iommu_resv_region {
+	struct list_head list;
+	phys_addr_t start;
+	size_t length;
+	int prot;
+	enum iommu_resv_type type;
+	void (*free)(struct device *, struct iommu_resv_region *);
+};
+
+struct group_for_pci_data {
+	struct pci_dev *pdev;
+	struct iommu_group *group;
+};
+
+typedef void (*btf_trace_add_device_to_group)(void *, int, struct device *);
+
+typedef void (*btf_trace_remove_device_from_group)(void *, int, struct device *);
+
+typedef void (*btf_trace_attach_device_to_domain)(void *, struct device *);
+
+typedef void (*btf_trace_map)(void *, unsigned long, phys_addr_t, size_t);
+
+typedef void (*btf_trace_unmap)(void *, unsigned long, size_t, size_t);
+
+typedef void (*btf_trace_io_page_fault)(void *, struct device *, unsigned long, int);
+
+struct trace_event_raw_iommu_group_event {
+	struct trace_entry ent;
+	int gid;
+	u32 __data_loc_device;
+	char __data[0];
+};
+
+struct trace_event_raw_iommu_device_event {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	char __data[0];
+};
+
+struct trace_event_raw_map {
+	struct trace_entry ent;
+	u64 iova;
+	u64 paddr;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_unmap {
+	struct trace_entry ent;
+	u64 iova;
+	size_t size;
+	size_t unmapped_size;
+	char __data[0];
+};
+
+struct trace_event_raw_iommu_error {
+	struct trace_entry ent;
+	u32 __data_loc_device;
+	u32 __data_loc_driver;
+	u64 iova;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_iommu_group_event {
+	u32 device;
+};
+
+struct trace_event_data_offsets_iommu_device_event {
+	u32 device;
+};
+
+struct trace_event_data_offsets_map {};
+
+struct trace_event_data_offsets_unmap {};
+
+struct trace_event_data_offsets_iommu_error {
+	u32 device;
+	u32 driver;
+};
+
+struct iova {
+	struct rb_node node;
+	unsigned long pfn_hi;
+	unsigned long pfn_lo;
+};
+
+struct iova_rcache;
+
+struct iova_domain {
+	spinlock_t iova_rbtree_lock;
+	struct rb_root rbroot;
+	struct rb_node *cached_node;
+	struct rb_node *cached32_node;
+	unsigned long granule;
+	unsigned long start_pfn;
+	unsigned long dma_32bit_pfn;
+	unsigned long max32_alloc_size;
+	struct iova anchor;
+	struct iova_rcache *rcaches;
+	struct hlist_node cpuhp_dead;
+	u64 android_vendor_data1;
+};
+
+enum iommu_dma_cookie_type {
+	IOMMU_DMA_IOVA_COOKIE = 0,
+	IOMMU_DMA_MSI_COOKIE = 1,
+};
+
+struct iova_fq;
+
+struct iommu_dma_cookie {
+	enum iommu_dma_cookie_type type;
+	union {
+		struct {
+			struct iova_domain iovad;
+			struct iova_fq __attribute__((btf_type_tag("percpu"))) *fq;
+			atomic64_t fq_flush_start_cnt;
+			atomic64_t fq_flush_finish_cnt;
+			struct timer_list fq_timer;
+			atomic_t fq_timer_on;
+		};
+		dma_addr_t msi_iova;
+	};
+	struct list_head msi_page_list;
+	struct iommu_domain *fq_domain;
+	struct mutex mutex;
+};
+
+struct iova_fq_entry {
+	unsigned long iova_pfn;
+	unsigned long pages;
+	struct list_head freelist;
+	u64 counter;
+};
+
+struct iova_fq {
+	struct iova_fq_entry entries[256];
+	unsigned int head;
+	unsigned int tail;
+	spinlock_t lock;
+};
+
+struct iommu_dma_msi_page {
+	struct list_head list;
+	dma_addr_t iova;
+	phys_addr_t phys;
+};
+
+struct iova_magazine;
+
+struct iova_cpu_rcache {
+	spinlock_t lock;
+	struct iova_magazine *loaded;
+	struct iova_magazine *prev;
+};
+
+struct iova_magazine {
+	unsigned long size;
+	unsigned long pfns[127];
+};
+
+struct iova_rcache {
+	spinlock_t lock;
+	unsigned long depot_size;
+	struct iova_magazine *depot[32];
+	struct iova_cpu_rcache __attribute__((btf_type_tag("percpu"))) *cpu_rcaches;
+};
+
+struct of_phandle_iterator {
+	const char *cells_name;
+	int cell_count;
+	const struct device_node *parent;
+	const __be32 *list_end;
+	const __be32 *phandle_end;
+	const __be32 *cur;
+	uint32_t cur_count;
+	phandle phandle;
+	struct device_node *node;
+};
+
+struct of_pci_iommu_alias_info {
+	struct device *dev;
+	struct device_node *np;
+};
+
+enum switch_power_state {
+	DRM_SWITCH_POWER_ON = 0,
+	DRM_SWITCH_POWER_OFF = 1,
+	DRM_SWITCH_POWER_CHANGING = 2,
+	DRM_SWITCH_POWER_DYNAMIC_OFF = 3,
+};
+
+struct drm_modeset_lock {
+	struct ww_mutex mutex;
+	struct list_head head;
+};
+
+struct drm_modeset_acquire_ctx;
+
+struct drm_mode_config_funcs;
+
+struct drm_property;
+
+struct drm_atomic_state;
+
+struct drm_mode_config_helper_funcs;
+
+struct drm_mode_config {
+	struct mutex mutex;
+	struct drm_modeset_lock connection_mutex;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct mutex idr_mutex;
+	struct idr object_idr;
+	struct idr tile_idr;
+	struct mutex fb_lock;
+	int num_fb;
+	struct list_head fb_list;
+	spinlock_t connector_list_lock;
+	int num_connector;
+	struct ida connector_ida;
+	struct list_head connector_list;
+	struct llist_head connector_free_list;
+	struct work_struct connector_free_work;
+	int num_encoder;
+	struct list_head encoder_list;
+	int num_total_plane;
+	struct list_head plane_list;
+	int num_crtc;
+	struct list_head crtc_list;
+	struct list_head property_list;
+	struct list_head privobj_list;
+	int min_width;
+	int min_height;
+	int max_width;
+	int max_height;
+	const struct drm_mode_config_funcs *funcs;
+	bool poll_enabled;
+	bool poll_running;
+	bool delayed_event;
+	struct delayed_work output_poll_work;
+	struct mutex blob_lock;
+	struct list_head property_blob_list;
+	struct drm_property *edid_property;
+	struct drm_property *dpms_property;
+	struct drm_property *path_property;
+	struct drm_property *tile_property;
+	struct drm_property *link_status_property;
+	struct drm_property *plane_type_property;
+	struct drm_property *prop_src_x;
+	struct drm_property *prop_src_y;
+	struct drm_property *prop_src_w;
+	struct drm_property *prop_src_h;
+	struct drm_property *prop_crtc_x;
+	struct drm_property *prop_crtc_y;
+	struct drm_property *prop_crtc_w;
+	struct drm_property *prop_crtc_h;
+	struct drm_property *prop_fb_id;
+	struct drm_property *prop_in_fence_fd;
+	struct drm_property *prop_out_fence_ptr;
+	struct drm_property *prop_crtc_id;
+	struct drm_property *prop_fb_damage_clips;
+	struct drm_property *prop_active;
+	struct drm_property *prop_mode_id;
+	struct drm_property *prop_vrr_enabled;
+	struct drm_property *dvi_i_subconnector_property;
+	struct drm_property *dvi_i_select_subconnector_property;
+	struct drm_property *dp_subconnector_property;
+	struct drm_property *tv_subconnector_property;
+	struct drm_property *tv_select_subconnector_property;
+	struct drm_property *legacy_tv_mode_property;
+	struct drm_property *tv_mode_property;
+	struct drm_property *tv_left_margin_property;
+	struct drm_property *tv_right_margin_property;
+	struct drm_property *tv_top_margin_property;
+	struct drm_property *tv_bottom_margin_property;
+	struct drm_property *tv_brightness_property;
+	struct drm_property *tv_contrast_property;
+	struct drm_property *tv_flicker_reduction_property;
+	struct drm_property *tv_overscan_property;
+	struct drm_property *tv_saturation_property;
+	struct drm_property *tv_hue_property;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *aspect_ratio_property;
+	struct drm_property *content_type_property;
+	struct drm_property *degamma_lut_property;
+	struct drm_property *degamma_lut_size_property;
+	struct drm_property *ctm_property;
+	struct drm_property *gamma_lut_property;
+	struct drm_property *gamma_lut_size_property;
+	struct drm_property *suggested_x_property;
+	struct drm_property *suggested_y_property;
+	struct drm_property *non_desktop_property;
+	struct drm_property *panel_orientation_property;
+	struct drm_property *writeback_fb_id_property;
+	struct drm_property *writeback_pixel_formats_property;
+	struct drm_property *writeback_out_fence_ptr_property;
+	struct drm_property *hdr_output_metadata_property;
+	struct drm_property *content_protection_property;
+	struct drm_property *hdcp_content_type_property;
+	uint32_t preferred_depth;
+	uint32_t prefer_shadow;
+	bool quirk_addfb_prefer_xbgr_30bpp;
+	bool quirk_addfb_prefer_host_byte_order;
+	bool async_page_flip;
+	bool fb_modifiers_not_supported;
+	bool normalize_zpos;
+	struct drm_property *modifiers_property;
+	uint32_t cursor_width;
+	uint32_t cursor_height;
+	struct drm_atomic_state *suspend_state;
+	const struct drm_mode_config_helper_funcs *helper_private;
+};
+
+struct drm_vram_mm;
+
+struct drm_driver;
+
+struct drm_minor;
+
+struct drm_master;
+
+struct drm_vblank_crtc;
+
+struct drm_vma_offset_manager;
+
+struct drm_fb_helper;
+
+struct drm_device {
+	int if_version;
+	struct kref ref;
+	struct device *dev;
+	struct {
+		struct list_head resources;
+		void *final_kfree;
+		spinlock_t lock;
+	} managed;
+	const struct drm_driver *driver;
+	void *dev_private;
+	struct drm_minor *primary;
+	struct drm_minor *render;
+	struct drm_minor *accel;
+	bool registered;
+	struct drm_master *master;
+	u32 driver_features;
+	bool unplugged;
+	struct inode *anon_inode;
+	char *unique;
+	struct mutex struct_mutex;
+	struct mutex master_mutex;
+	atomic_t open_count;
+	struct mutex filelist_mutex;
+	struct list_head filelist;
+	struct list_head filelist_internal;
+	struct mutex clientlist_mutex;
+	struct list_head clientlist;
+	bool vblank_disable_immediate;
+	struct drm_vblank_crtc *vblank;
+	spinlock_t vblank_time_lock;
+	spinlock_t vbl_lock;
+	u32 max_vblank_count;
+	struct list_head vblank_event_list;
+	spinlock_t event_lock;
+	unsigned int num_crtcs;
+	struct drm_mode_config mode_config;
+	struct mutex object_name_lock;
+	struct idr object_name_idr;
+	struct drm_vma_offset_manager *vma_offset_manager;
+	struct drm_vram_mm *vram_mm;
+	enum switch_power_state switch_power_state;
+	struct drm_fb_helper *fb_helper;
+	struct mutex debugfs_mutex;
+	struct list_head debugfs_list;
+};
+
+struct drm_file;
+
+struct drm_gem_object;
+
+struct dma_buf;
+
+struct dma_buf_attachment;
+
+struct drm_mode_create_dumb;
+
+struct drm_printer;
+
+struct drm_ioctl_desc;
+
+struct drm_driver {
+	int (*load)(struct drm_device *, unsigned long);
+	int (*open)(struct drm_device *, struct drm_file *);
+	void (*postclose)(struct drm_device *, struct drm_file *);
+	void (*lastclose)(struct drm_device *);
+	void (*unload)(struct drm_device *);
+	void (*release)(struct drm_device *);
+	void (*master_set)(struct drm_device *, struct drm_file *, bool);
+	void (*master_drop)(struct drm_device *, struct drm_file *);
+	void (*debugfs_init)(struct drm_minor *);
+	struct drm_gem_object * (*gem_create_object)(struct drm_device *, size_t);
+	int (*prime_handle_to_fd)(struct drm_device *, struct drm_file *, uint32_t, uint32_t, int *);
+	int (*prime_fd_to_handle)(struct drm_device *, struct drm_file *, int, uint32_t *);
+	struct drm_gem_object * (*gem_prime_import)(struct drm_device *, struct dma_buf *);
+	struct drm_gem_object * (*gem_prime_import_sg_table)(struct drm_device *, struct dma_buf_attachment *, struct sg_table *);
+	int (*dumb_create)(struct drm_file *, struct drm_device *, struct drm_mode_create_dumb *);
+	int (*dumb_map_offset)(struct drm_file *, struct drm_device *, uint32_t, uint64_t *);
+	void (*show_fdinfo)(struct drm_printer *, struct drm_file *);
+	int major;
+	int minor;
+	int patchlevel;
+	char *name;
+	char *desc;
+	char *date;
+	u32 driver_features;
+	const struct drm_ioctl_desc *ioctls;
+	int num_ioctls;
+	const struct file_operations *fops;
+};
+
+struct drm_mode_create_dumb {
+	__u32 height;
+	__u32 width;
+	__u32 bpp;
+	__u32 flags;
+	__u32 handle;
+	__u32 pitch;
+	__u64 size;
+};
+
+struct drm_printer {
+	void (*printfn)(struct drm_printer *, struct va_format *);
+	void (*puts)(struct drm_printer *, const char *);
+	void *arg;
+	const char *prefix;
+};
+
+enum drm_ioctl_flags {
+	DRM_AUTH = 1,
+	DRM_MASTER = 2,
+	DRM_ROOT_ONLY = 4,
+	DRM_UNLOCKED = 16,
+	DRM_RENDER_ALLOW = 32,
+};
+
+typedef int drm_ioctl_t(struct drm_device *, void *, struct drm_file *);
+
+struct drm_ioctl_desc {
+	unsigned int cmd;
+	enum drm_ioctl_flags flags;
+	drm_ioctl_t *func;
+	const char *name;
+};
+
+struct drm_master {
+	struct kref refcount;
+	struct drm_device *dev;
+	char *unique;
+	int unique_len;
+	struct idr magic_map;
+	void *driver_priv;
+	struct drm_master *lessor;
+	int lessee_id;
+	struct list_head lessee_list;
+	struct list_head lessees;
+	struct idr leases;
+	struct idr lessee_idr;
+};
+
+struct drm_modeset_acquire_ctx {
+	struct ww_acquire_ctx ww_ctx;
+	struct drm_modeset_lock *contended;
+	depot_stack_handle_t stack_depot;
+	struct list_head locked;
+	bool trylock_only;
+	bool interruptible;
+};
+
+enum drm_mode_status {
+	MODE_OK = 0,
+	MODE_HSYNC = 1,
+	MODE_VSYNC = 2,
+	MODE_H_ILLEGAL = 3,
+	MODE_V_ILLEGAL = 4,
+	MODE_BAD_WIDTH = 5,
+	MODE_NOMODE = 6,
+	MODE_NO_INTERLACE = 7,
+	MODE_NO_DBLESCAN = 8,
+	MODE_NO_VSCAN = 9,
+	MODE_MEM = 10,
+	MODE_VIRTUAL_X = 11,
+	MODE_VIRTUAL_Y = 12,
+	MODE_MEM_VIRT = 13,
+	MODE_NOCLOCK = 14,
+	MODE_CLOCK_HIGH = 15,
+	MODE_CLOCK_LOW = 16,
+	MODE_CLOCK_RANGE = 17,
+	MODE_BAD_HVALUE = 18,
+	MODE_BAD_VVALUE = 19,
+	MODE_BAD_VSCAN = 20,
+	MODE_HSYNC_NARROW = 21,
+	MODE_HSYNC_WIDE = 22,
+	MODE_HBLANK_NARROW = 23,
+	MODE_HBLANK_WIDE = 24,
+	MODE_VSYNC_NARROW = 25,
+	MODE_VSYNC_WIDE = 26,
+	MODE_VBLANK_NARROW = 27,
+	MODE_VBLANK_WIDE = 28,
+	MODE_PANEL = 29,
+	MODE_INTERLACE_WIDTH = 30,
+	MODE_ONE_WIDTH = 31,
+	MODE_ONE_HEIGHT = 32,
+	MODE_ONE_SIZE = 33,
+	MODE_NO_REDUCED = 34,
+	MODE_NO_STEREO = 35,
+	MODE_NO_420 = 36,
+	MODE_STALE = -3,
+	MODE_BAD = -2,
+	MODE_ERROR = -1,
+};
+
+struct drm_framebuffer;
+
+struct drm_mode_fb_cmd2;
+
+struct drm_format_info;
+
+struct drm_display_mode;
+
+struct drm_mode_config_funcs {
+	struct drm_framebuffer * (*fb_create)(struct drm_device *, struct drm_file *, const struct drm_mode_fb_cmd2 *);
+	const struct drm_format_info * (*get_format_info)(const struct drm_mode_fb_cmd2 *);
+	void (*output_poll_changed)(struct drm_device *);
+	enum drm_mode_status (*mode_valid)(struct drm_device *, const struct drm_display_mode *);
+	int (*atomic_check)(struct drm_device *, struct drm_atomic_state *);
+	int (*atomic_commit)(struct drm_device *, struct drm_atomic_state *, bool);
+	struct drm_atomic_state * (*atomic_state_alloc)(struct drm_device *);
+	void (*atomic_state_clear)(struct drm_atomic_state *);
+	void (*atomic_state_free)(struct drm_atomic_state *);
+};
+
+struct drm_mode_fb_cmd2 {
+	__u32 fb_id;
+	__u32 width;
+	__u32 height;
+	__u32 pixel_format;
+	__u32 flags;
+	__u32 handles[4];
+	__u32 pitches[4];
+	__u32 offsets[4];
+	__u64 modifier[4];
+};
+
+struct drm_format_info {
+	u32 format;
+	u8 depth;
+	u8 num_planes;
+	union {
+		u8 cpp[4];
+		u8 char_per_block[4];
+	};
+	u8 block_w[4];
+	u8 block_h[4];
+	u8 hsub;
+	u8 vsub;
+	bool has_alpha;
+	bool is_yuv;
+	bool is_color_indexed;
+};
+
+struct drm_display_mode {
+	int clock;
+	u16 hdisplay;
+	u16 hsync_start;
+	u16 hsync_end;
+	u16 htotal;
+	u16 hskew;
+	u16 vdisplay;
+	u16 vsync_start;
+	u16 vsync_end;
+	u16 vtotal;
+	u16 vscan;
+	u32 flags;
+	int crtc_clock;
+	u16 crtc_hdisplay;
+	u16 crtc_hblank_start;
+	u16 crtc_hblank_end;
+	u16 crtc_hsync_start;
+	u16 crtc_hsync_end;
+	u16 crtc_htotal;
+	u16 crtc_hskew;
+	u16 crtc_vdisplay;
+	u16 crtc_vblank_start;
+	u16 crtc_vblank_end;
+	u16 crtc_vsync_start;
+	u16 crtc_vsync_end;
+	u16 crtc_vtotal;
+	u16 width_mm;
+	u16 height_mm;
+	u8 type;
+	bool expose_to_userspace;
+	struct list_head head;
+	char name[32];
+	enum drm_mode_status status;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+};
+
+struct drm_mode_config_helper_funcs {
+	void (*atomic_commit_tail)(struct drm_atomic_state *);
+	int (*atomic_commit_setup)(struct drm_atomic_state *);
+};
+
+struct drm_debugfs_info {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+	u32 driver_features;
+	void *data;
+};
+
+enum drm_gem_object_status {
+	DRM_GEM_OBJECT_RESIDENT = 1,
+	DRM_GEM_OBJECT_PURGEABLE = 2,
+};
+
+enum drm_color_encoding {
+	DRM_COLOR_YCBCR_BT601 = 0,
+	DRM_COLOR_YCBCR_BT709 = 1,
+	DRM_COLOR_YCBCR_BT2020 = 2,
+	DRM_COLOR_ENCODING_MAX = 3,
+};
+
+enum drm_color_range {
+	DRM_COLOR_YCBCR_LIMITED_RANGE = 0,
+	DRM_COLOR_YCBCR_FULL_RANGE = 1,
+	DRM_COLOR_RANGE_MAX = 2,
+};
+
+enum drm_scaling_filter {
+	DRM_SCALING_FILTER_DEFAULT = 0,
+	DRM_SCALING_FILTER_NEAREST_NEIGHBOR = 1,
+};
+
+enum drm_plane_type {
+	DRM_PLANE_TYPE_OVERLAY = 0,
+	DRM_PLANE_TYPE_PRIMARY = 1,
+	DRM_PLANE_TYPE_CURSOR = 2,
+};
+
+enum drm_connector_registration_state {
+	DRM_CONNECTOR_INITIALIZING = 0,
+	DRM_CONNECTOR_REGISTERED = 1,
+	DRM_CONNECTOR_UNREGISTERED = 2,
+};
+
+enum drm_connector_status {
+	connector_status_connected = 1,
+	connector_status_disconnected = 2,
+	connector_status_unknown = 3,
+};
+
+enum subpixel_order {
+	SubPixelUnknown = 0,
+	SubPixelHorizontalRGB = 1,
+	SubPixelHorizontalBGR = 2,
+	SubPixelVerticalRGB = 3,
+	SubPixelVerticalBGR = 4,
+	SubPixelNone = 5,
+};
+
+enum drm_link_status {
+	DRM_LINK_STATUS_GOOD = 0,
+	DRM_LINK_STATUS_BAD = 1,
+};
+
+enum drm_mode_subconnector {
+	DRM_MODE_SUBCONNECTOR_Automatic = 0,
+	DRM_MODE_SUBCONNECTOR_Unknown = 0,
+	DRM_MODE_SUBCONNECTOR_VGA = 1,
+	DRM_MODE_SUBCONNECTOR_DVID = 3,
+	DRM_MODE_SUBCONNECTOR_DVIA = 4,
+	DRM_MODE_SUBCONNECTOR_Composite = 5,
+	DRM_MODE_SUBCONNECTOR_SVIDEO = 6,
+	DRM_MODE_SUBCONNECTOR_Component = 8,
+	DRM_MODE_SUBCONNECTOR_SCART = 9,
+	DRM_MODE_SUBCONNECTOR_DisplayPort = 10,
+	DRM_MODE_SUBCONNECTOR_HDMIA = 11,
+	DRM_MODE_SUBCONNECTOR_Native = 15,
+	DRM_MODE_SUBCONNECTOR_Wireless = 18,
+};
+
+enum drm_colorspace {
+	DRM_MODE_COLORIMETRY_DEFAULT = 0,
+	DRM_MODE_COLORIMETRY_NO_DATA = 0,
+	DRM_MODE_COLORIMETRY_SMPTE_170M_YCC = 1,
+	DRM_MODE_COLORIMETRY_BT709_YCC = 2,
+	DRM_MODE_COLORIMETRY_XVYCC_601 = 3,
+	DRM_MODE_COLORIMETRY_XVYCC_709 = 4,
+	DRM_MODE_COLORIMETRY_SYCC_601 = 5,
+	DRM_MODE_COLORIMETRY_OPYCC_601 = 6,
+	DRM_MODE_COLORIMETRY_OPRGB = 7,
+	DRM_MODE_COLORIMETRY_BT2020_CYCC = 8,
+	DRM_MODE_COLORIMETRY_BT2020_RGB = 9,
+	DRM_MODE_COLORIMETRY_BT2020_YCC = 10,
+	DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65 = 11,
+	DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER = 12,
+	DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED = 13,
+	DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT = 14,
+	DRM_MODE_COLORIMETRY_BT601_YCC = 15,
+	DRM_MODE_COLORIMETRY_COUNT = 16,
+};
+
+enum drm_privacy_screen_status {
+	PRIVACY_SCREEN_DISABLED = 0,
+	PRIVACY_SCREEN_ENABLED = 1,
+	PRIVACY_SCREEN_DISABLED_LOCKED = 2,
+	PRIVACY_SCREEN_ENABLED_LOCKED = 3,
+};
+
+enum drm_connector_force {
+	DRM_FORCE_UNSPECIFIED = 0,
+	DRM_FORCE_OFF = 1,
+	DRM_FORCE_ON = 2,
+	DRM_FORCE_ON_DIGITAL = 3,
+};
+
+enum drm_panel_orientation {
+	DRM_MODE_PANEL_ORIENTATION_UNKNOWN = -1,
+	DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
+	DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP = 1,
+	DRM_MODE_PANEL_ORIENTATION_LEFT_UP = 2,
+	DRM_MODE_PANEL_ORIENTATION_RIGHT_UP = 3,
+};
+
+enum drm_connector_tv_mode {
+	DRM_MODE_TV_MODE_NTSC = 0,
+	DRM_MODE_TV_MODE_NTSC_443 = 1,
+	DRM_MODE_TV_MODE_NTSC_J = 2,
+	DRM_MODE_TV_MODE_PAL = 3,
+	DRM_MODE_TV_MODE_PAL_M = 4,
+	DRM_MODE_TV_MODE_PAL_N = 5,
+	DRM_MODE_TV_MODE_SECAM = 6,
+	DRM_MODE_TV_MODE_MAX = 7,
+};
+
+enum drm_debug_category {
+	DRM_UT_CORE = 0,
+	DRM_UT_DRIVER = 1,
+	DRM_UT_KMS = 2,
+	DRM_UT_PRIME = 3,
+	DRM_UT_ATOMIC = 4,
+	DRM_UT_VBL = 5,
+	DRM_UT_STATE = 6,
+	DRM_UT_LEASE = 7,
+	DRM_UT_DP = 8,
+	DRM_UT_DRMRES = 9,
+};
+
+enum drm_bridge_attach_flags {
+	DRM_BRIDGE_ATTACH_NO_CONNECTOR = 1,
+};
+
+enum drm_bridge_ops {
+	DRM_BRIDGE_OP_DETECT = 1,
+	DRM_BRIDGE_OP_EDID = 2,
+	DRM_BRIDGE_OP_HPD = 4,
+	DRM_BRIDGE_OP_MODES = 8,
+};
+
+enum drm_driver_feature {
+	DRIVER_GEM = 1,
+	DRIVER_MODESET = 2,
+	DRIVER_RENDER = 8,
+	DRIVER_ATOMIC = 16,
+	DRIVER_SYNCOBJ = 32,
+	DRIVER_SYNCOBJ_TIMELINE = 64,
+	DRIVER_COMPUTE_ACCEL = 128,
+	DRIVER_GEM_GPUVA = 256,
+	DRIVER_CURSOR_HOTSPOT = 512,
+	DRIVER_USE_AGP = 33554432,
+	DRIVER_LEGACY = 67108864,
+	DRIVER_PCI_DMA = 134217728,
+	DRIVER_SG = 268435456,
+	DRIVER_HAVE_DMA = 536870912,
+	DRIVER_HAVE_IRQ = 1073741824,
+};
+
+struct drm_crtc;
+
+struct drm_pending_vblank_event;
+
+struct drm_crtc_commit {
+	struct drm_crtc *crtc;
+	struct kref ref;
+	struct completion flip_done;
+	struct completion hw_done;
+	struct completion cleanup_done;
+	struct list_head commit_entry;
+	struct drm_pending_vblank_event *event;
+	bool abort_completion;
+};
+
+struct drm_object_properties;
+
+struct drm_mode_object {
+	uint32_t id;
+	uint32_t type;
+	struct drm_object_properties *properties;
+	struct kref refcount;
+	void (*free_cb)(struct kref *);
+};
+
+struct drm_object_properties {
+	int count;
+	struct drm_property *properties[96];
+	uint64_t values[96];
+};
+
+struct drm_crtc_crc_entry;
+
+struct drm_crtc_crc {
+	spinlock_t lock;
+	const char *source;
+	bool opened;
+	bool overflow;
+	struct drm_crtc_crc_entry *entries;
+	int head;
+	int tail;
+	size_t values_cnt;
+	wait_queue_head_t wq;
+};
+
+struct drm_plane;
+
+struct drm_crtc_funcs;
+
+struct drm_crtc_helper_funcs;
+
+struct drm_crtc_state;
+
+struct drm_self_refresh_data;
+
+struct drm_crtc {
+	struct drm_device *dev;
+	struct device_node *port;
+	struct list_head head;
+	char *name;
+	struct drm_modeset_lock mutex;
+	struct drm_mode_object base;
+	struct drm_plane *primary;
+	struct drm_plane *cursor;
+	unsigned int index;
+	int cursor_x;
+	int cursor_y;
+	bool enabled;
+	struct drm_display_mode mode;
+	struct drm_display_mode hwmode;
+	int x;
+	int y;
+	const struct drm_crtc_funcs *funcs;
+	uint32_t gamma_size;
+	uint16_t *gamma_store;
+	const struct drm_crtc_helper_funcs *helper_private;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_filter_property;
+	struct drm_crtc_state *state;
+	struct list_head commit_list;
+	spinlock_t commit_lock;
+	struct dentry *debugfs_entry;
+	struct drm_crtc_crc crc;
+	unsigned int fence_context;
+	spinlock_t fence_lock;
+	unsigned long fence_seqno;
+	char timeline_name[32];
+	struct drm_self_refresh_data *self_refresh_data;
+};
+
+typedef unsigned int drm_magic_t;
+
+struct drm_prime_file_private {
+	struct mutex lock;
+	struct rb_root dmabufs;
+	struct rb_root handles;
+};
+
+struct drm_file {
+	bool authenticated;
+	bool stereo_allowed;
+	bool universal_planes;
+	bool atomic;
+	bool aspect_ratio_allowed;
+	bool writeback_connectors;
+	bool was_master;
+	bool is_master;
+	bool supports_virtualized_cursor_plane;
+	struct drm_master *master;
+	spinlock_t master_lookup_lock;
+	struct pid __attribute__((btf_type_tag("rcu"))) *pid;
+	u64 client_id;
+	drm_magic_t magic;
+	struct list_head lhead;
+	struct drm_minor *minor;
+	struct idr object_idr;
+	spinlock_t table_lock;
+	struct idr syncobj_idr;
+	spinlock_t syncobj_table_lock;
+	struct file *filp;
+	void *driver_priv;
+	struct list_head fbs;
+	struct mutex fbs_lock;
+	struct list_head blobs;
+	wait_queue_head_t event_wait;
+	struct list_head pending_event_list;
+	struct list_head event_list;
+	int event_space;
+	struct mutex event_read_lock;
+	struct drm_prime_file_private prime;
+};
+
+struct drm_minor {
+	int index;
+	int type;
+	struct device *kdev;
+	struct drm_device *dev;
+	struct dentry *debugfs_root;
+	struct list_head debugfs_list;
+	struct mutex debugfs_lock;
+};
+
+struct drm_mm;
+
+struct drm_mm_node {
+	unsigned long color;
+	u64 start;
+	u64 size;
+	struct drm_mm *mm;
+	struct list_head node_list;
+	struct list_head hole_stack;
+	struct rb_node rb;
+	struct rb_node rb_hole_size;
+	struct rb_node rb_hole_addr;
+	u64 __subtree_last;
+	u64 hole_size;
+	u64 subtree_max_hole;
+	unsigned long flags;
+};
+
+struct drm_vma_offset_node {
+	rwlock_t vm_lock;
+	struct drm_mm_node vm_node;
+	struct rb_root vm_files;
+	void *driver_private;
+};
+
+struct dma_resv_list;
+
+struct dma_resv {
+	struct ww_mutex lock;
+	struct dma_resv_list __attribute__((btf_type_tag("rcu"))) *fences;
+};
+
+struct drm_gem_object_funcs;
+
+struct drm_gem_lru;
+
+struct drm_gem_object {
+	struct kref refcount;
+	unsigned int handle_count;
+	struct drm_device *dev;
+	struct file *filp;
+	struct drm_vma_offset_node vma_node;
+	size_t size;
+	int name;
+	struct dma_buf *dma_buf;
+	struct dma_buf_attachment *import_attach;
+	struct dma_resv *resv;
+	struct dma_resv _resv;
+	struct {
+		struct list_head list;
+	} gpuva;
+	const struct drm_gem_object_funcs *funcs;
+	struct list_head lru_node;
+	struct drm_gem_lru *lru;
+};
+
+struct drm_mm {
+	void (*color_adjust)(const struct drm_mm_node *, unsigned long, u64 *, u64 *);
+	struct list_head hole_stack;
+	struct drm_mm_node head_node;
+	struct rb_root_cached interval_tree;
+	struct rb_root_cached holes_size;
+	struct rb_root holes_addr;
+	unsigned long scan_active;
+};
+
+struct dma_fence;
+
+struct dma_resv_list {
+	struct callback_head rcu;
+	u32 num_fences;
+	u32 max_fences;
+	struct dma_fence __attribute__((btf_type_tag("rcu"))) *table[0];
+};
+
+struct iosys_map;
+
+struct drm_gem_object_funcs {
+	void (*free)(struct drm_gem_object *);
+	int (*open)(struct drm_gem_object *, struct drm_file *);
+	void (*close)(struct drm_gem_object *, struct drm_file *);
+	void (*print_info)(struct drm_printer *, unsigned int, const struct drm_gem_object *);
+	struct dma_buf * (*export)(struct drm_gem_object *, int);
+	int (*pin)(struct drm_gem_object *);
+	void (*unpin)(struct drm_gem_object *);
+	struct sg_table * (*get_sg_table)(struct drm_gem_object *);
+	int (*vmap)(struct drm_gem_object *, struct iosys_map *);
+	void (*vunmap)(struct drm_gem_object *, struct iosys_map *);
+	int (*mmap)(struct drm_gem_object *, struct vm_area_struct *);
+	int (*evict)(struct drm_gem_object *);
+	enum drm_gem_object_status (*status)(struct drm_gem_object *);
+	const struct vm_operations_struct *vm_ops;
+};
+
+struct drm_gem_lru {
+	struct mutex *lock;
+	long count;
+	struct list_head list;
+};
+
+struct drm_vblank_crtc {
+	struct drm_device *dev;
+	wait_queue_head_t queue;
+	struct timer_list disable_timer;
+	seqlock_t seqlock;
+	atomic64_t count;
+	ktime_t time;
+	atomic_t refcount;
+	u32 last;
+	u32 max_vblank_count;
+	unsigned int inmodeset;
+	unsigned int pipe;
+	int framedur_ns;
+	int linedur_ns;
+	struct drm_display_mode hwmode;
+	bool enabled;
+	struct kthread_worker *worker;
+	struct list_head pending_work;
+	wait_queue_head_t work_wait_queue;
+};
+
+struct drm_framebuffer_funcs;
+
+struct drm_framebuffer {
+	struct drm_device *dev;
+	struct list_head head;
+	struct drm_mode_object base;
+	char comm[16];
+	const struct drm_format_info *format;
+	const struct drm_framebuffer_funcs *funcs;
+	unsigned int pitches[4];
+	unsigned int offsets[4];
+	uint64_t modifier;
+	unsigned int width;
+	unsigned int height;
+	int flags;
+	int hot_x;
+	int hot_y;
+	struct list_head filp_head;
+	struct drm_gem_object *obj[4];
+};
+
+struct drm_property {
+	struct list_head head;
+	struct drm_mode_object base;
+	uint32_t flags;
+	char name[32];
+	uint32_t num_values;
+	uint64_t *values;
+	struct drm_device *dev;
+	struct list_head enum_list;
+};
+
+struct drm_clip_rect;
+
+struct drm_framebuffer_funcs {
+	void (*destroy)(struct drm_framebuffer *);
+	int (*create_handle)(struct drm_framebuffer *, struct drm_file *, unsigned int *);
+	int (*dirty)(struct drm_framebuffer *, struct drm_file *, unsigned int, unsigned int, struct drm_clip_rect *, unsigned int);
+};
+
+struct drm_clip_rect {
+	unsigned short x1;
+	unsigned short y1;
+	unsigned short x2;
+	unsigned short y2;
+};
+
+struct __drm_planes_state;
+
+struct __drm_crtcs_state;
+
+struct __drm_connnectors_state;
+
+struct __drm_private_objs_state;
+
+struct drm_atomic_state {
+	struct kref ref;
+	struct drm_device *dev;
+	bool allow_modeset: 1;
+	bool legacy_cursor_update: 1;
+	bool async_update: 1;
+	bool duplicated: 1;
+	struct __drm_planes_state *planes;
+	struct __drm_crtcs_state *crtcs;
+	int num_connector;
+	struct __drm_connnectors_state *connectors;
+	int num_private_objs;
+	struct __drm_private_objs_state *private_objs;
+	struct drm_modeset_acquire_ctx *acquire_ctx;
+	struct drm_crtc_commit *fake_commit;
+	struct work_struct commit_work;
+};
+
+struct drm_plane_state;
+
+struct __drm_planes_state {
+	struct drm_plane *ptr;
+	struct drm_plane_state *state;
+	struct drm_plane_state *old_state;
+	struct drm_plane_state *new_state;
+};
+
+struct drm_plane_funcs;
+
+struct drm_plane_helper_funcs;
+
+struct drm_plane {
+	struct drm_device *dev;
+	struct list_head head;
+	char *name;
+	struct drm_modeset_lock mutex;
+	struct drm_mode_object base;
+	uint32_t possible_crtcs;
+	uint32_t *format_types;
+	unsigned int format_count;
+	bool format_default;
+	uint64_t *modifiers;
+	unsigned int modifier_count;
+	struct drm_crtc *crtc;
+	struct drm_framebuffer *fb;
+	struct drm_framebuffer *old_fb;
+	const struct drm_plane_funcs *funcs;
+	struct drm_object_properties properties;
+	enum drm_plane_type type;
+	unsigned int index;
+	const struct drm_plane_helper_funcs *helper_private;
+	struct drm_plane_state *state;
+	struct drm_property *alpha_property;
+	struct drm_property *zpos_property;
+	struct drm_property *rotation_property;
+	struct drm_property *blend_mode_property;
+	struct drm_property *color_encoding_property;
+	struct drm_property *color_range_property;
+	struct drm_property *scaling_filter_property;
+};
+
+struct drm_plane_funcs {
+	int (*update_plane)(struct drm_plane *, struct drm_crtc *, struct drm_framebuffer *, int, int, unsigned int, unsigned int, uint32_t, uint32_t, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*disable_plane)(struct drm_plane *, struct drm_modeset_acquire_ctx *);
+	void (*destroy)(struct drm_plane *);
+	void (*reset)(struct drm_plane *);
+	int (*set_property)(struct drm_plane *, struct drm_property *, uint64_t);
+	struct drm_plane_state * (*atomic_duplicate_state)(struct drm_plane *);
+	void (*atomic_destroy_state)(struct drm_plane *, struct drm_plane_state *);
+	int (*atomic_set_property)(struct drm_plane *, struct drm_plane_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_plane *, const struct drm_plane_state *, struct drm_property *, uint64_t *);
+	int (*late_register)(struct drm_plane *);
+	void (*early_unregister)(struct drm_plane *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_plane_state *);
+	bool (*format_mod_supported)(struct drm_plane *, uint32_t, uint64_t);
+};
+
+struct drm_rect {
+	int x1;
+	int y1;
+	int x2;
+	int y2;
+};
+
+struct drm_property_blob;
+
+struct drm_plane_state {
+	struct drm_plane *plane;
+	struct drm_crtc *crtc;
+	struct drm_framebuffer *fb;
+	struct dma_fence *fence;
+	int32_t crtc_x;
+	int32_t crtc_y;
+	uint32_t crtc_w;
+	uint32_t crtc_h;
+	uint32_t src_x;
+	uint32_t src_y;
+	uint32_t src_h;
+	uint32_t src_w;
+	u16 alpha;
+	uint16_t pixel_blend_mode;
+	unsigned int rotation;
+	unsigned int zpos;
+	unsigned int normalized_zpos;
+	enum drm_color_encoding color_encoding;
+	enum drm_color_range color_range;
+	struct drm_property_blob *fb_damage_clips;
+	bool ignore_damage_clips;
+	struct drm_rect src;
+	struct drm_rect dst;
+	bool visible;
+	enum drm_scaling_filter scaling_filter;
+	struct drm_crtc_commit *commit;
+	struct drm_atomic_state *state;
+};
+
+struct dma_fence_ops;
+
+struct dma_fence {
+	spinlock_t *lock;
+	const struct dma_fence_ops *ops;
+	union {
+		struct list_head cb_list;
+		ktime_t timestamp;
+		struct callback_head rcu;
+	};
+	u64 context;
+	u64 seqno;
+	unsigned long flags;
+	struct kref refcount;
+	int error;
+};
+
+struct dma_fence_ops {
+	bool use_64bit_seqno;
+	const char * (*get_driver_name)(struct dma_fence *);
+	const char * (*get_timeline_name)(struct dma_fence *);
+	bool (*enable_signaling)(struct dma_fence *);
+	bool (*signaled)(struct dma_fence *);
+	long (*wait)(struct dma_fence *, bool, long);
+	void (*release)(struct dma_fence *);
+	void (*fence_value_str)(struct dma_fence *, char *, int);
+	void (*timeline_value_str)(struct dma_fence *, char *, int);
+	void (*set_deadline)(struct dma_fence *, ktime_t);
+};
+
+struct drm_property_blob {
+	struct drm_mode_object base;
+	struct drm_device *dev;
+	struct list_head head_global;
+	struct list_head head_file;
+	size_t length;
+	void *data;
+};
+
+struct drm_plane_helper_funcs {
+	int (*prepare_fb)(struct drm_plane *, struct drm_plane_state *);
+	void (*cleanup_fb)(struct drm_plane *, struct drm_plane_state *);
+	int (*begin_fb_access)(struct drm_plane *, struct drm_plane_state *);
+	void (*end_fb_access)(struct drm_plane *, struct drm_plane_state *);
+	int (*atomic_check)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_update)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_disable)(struct drm_plane *, struct drm_atomic_state *);
+	int (*atomic_async_check)(struct drm_plane *, struct drm_atomic_state *);
+	void (*atomic_async_update)(struct drm_plane *, struct drm_atomic_state *);
+};
+
+struct __drm_crtcs_state {
+	struct drm_crtc *ptr;
+	struct drm_crtc_state *state;
+	struct drm_crtc_state *old_state;
+	struct drm_crtc_state *new_state;
+	struct drm_crtc_commit *commit;
+	s32 __attribute__((btf_type_tag("user"))) *out_fence_ptr;
+	u64 last_vblank_count;
+};
+
+struct drm_crtc_state {
+	struct drm_crtc *crtc;
+	bool enable;
+	bool active;
+	bool planes_changed: 1;
+	bool mode_changed: 1;
+	bool active_changed: 1;
+	bool connectors_changed: 1;
+	bool zpos_changed: 1;
+	bool color_mgmt_changed: 1;
+	bool no_vblank: 1;
+	u32 plane_mask;
+	u32 connector_mask;
+	u32 encoder_mask;
+	struct drm_display_mode adjusted_mode;
+	struct drm_display_mode mode;
+	struct drm_property_blob *mode_blob;
+	struct drm_property_blob *degamma_lut;
+	struct drm_property_blob *ctm;
+	struct drm_property_blob *gamma_lut;
+	u32 target_vblank;
+	bool async_flip;
+	bool vrr_enabled;
+	bool self_refresh_active;
+	enum drm_scaling_filter scaling_filter;
+	struct drm_pending_vblank_event *event;
+	struct drm_crtc_commit *commit;
+	struct drm_atomic_state *state;
+};
+
+struct drm_event {
+	__u32 type;
+	__u32 length;
+};
+
+struct drm_event_vblank {
+	struct drm_event base;
+	__u64 user_data;
+	__u32 tv_sec;
+	__u32 tv_usec;
+	__u32 sequence;
+	__u32 crtc_id;
+};
+
+struct drm_event_crtc_sequence {
+	struct drm_event base;
+	__u64 user_data;
+	__s64 time_ns;
+	__u64 sequence;
+};
+
+struct drm_pending_event {
+	struct completion *completion;
+	void (*completion_release)(struct completion *);
+	struct drm_event *event;
+	struct dma_fence *fence;
+	struct drm_file *file_priv;
+	struct list_head link;
+	struct list_head pending_link;
+};
+
+struct drm_pending_vblank_event {
+	struct drm_pending_event base;
+	unsigned int pipe;
+	u64 sequence;
+	union {
+		struct drm_event base;
+		struct drm_event_vblank vbl;
+		struct drm_event_crtc_sequence seq;
+	} event;
+};
+
+struct drm_connector;
+
+struct drm_connector_state;
+
+struct __drm_connnectors_state {
+	struct drm_connector *ptr;
+	struct drm_connector_state *state;
+	struct drm_connector_state *old_state;
+	struct drm_connector_state *new_state;
+	s32 __attribute__((btf_type_tag("user"))) *out_fence_ptr;
+};
+
+struct drm_scrambling {
+	bool supported;
+	bool low_rates;
+};
+
+struct drm_scdc {
+	bool supported;
+	bool read_request;
+	struct drm_scrambling scrambling;
+};
+
+struct drm_hdmi_dsc_cap {
+	bool v_1p2;
+	bool native_420;
+	bool all_bpp;
+	u8 bpc_supported;
+	u8 max_slices;
+	int clk_per_slice;
+	u8 max_lanes;
+	u8 max_frl_rate_per_lane;
+	u8 total_chunk_kbytes;
+};
+
+struct drm_hdmi_info {
+	struct drm_scdc scdc;
+	unsigned long y420_vdb_modes[4];
+	unsigned long y420_cmdb_modes[4];
+	u8 y420_dc_modes;
+	u8 max_frl_rate_per_lane;
+	u8 max_lanes;
+	struct drm_hdmi_dsc_cap dsc_cap;
+};
+
+struct drm_monitor_range_info {
+	u16 min_vfreq;
+	u16 max_vfreq;
+};
+
+struct drm_luminance_range_info {
+	u32 min_luminance;
+	u32 max_luminance;
+};
+
+struct drm_display_info {
+	unsigned int width_mm;
+	unsigned int height_mm;
+	unsigned int bpc;
+	enum subpixel_order subpixel_order;
+	int panel_orientation;
+	u32 color_formats;
+	const u32 *bus_formats;
+	unsigned int num_bus_formats;
+	u32 bus_flags;
+	int max_tmds_clock;
+	bool dvi_dual;
+	bool is_hdmi;
+	bool has_audio;
+	bool has_hdmi_infoframe;
+	bool rgb_quant_range_selectable;
+	u8 edid_hdmi_rgb444_dc_modes;
+	u8 edid_hdmi_ycbcr444_dc_modes;
+	u8 cea_rev;
+	struct drm_hdmi_info hdmi;
+	bool non_desktop;
+	struct drm_monitor_range_info monitor_range;
+	struct drm_luminance_range_info luminance_range;
+	u8 mso_stream_count;
+	u8 mso_pixel_overlap;
+	u32 max_dsc_bpp;
+	u8 *vics;
+	int vics_len;
+	u32 quirks;
+};
+
+struct drm_privacy_screen;
+
+struct drm_connector_tv_margins {
+	unsigned int bottom;
+	unsigned int left;
+	unsigned int right;
+	unsigned int top;
+};
+
+struct drm_cmdline_mode {
+	char name[32];
+	bool specified;
+	bool refresh_specified;
+	bool bpp_specified;
+	unsigned int pixel_clock;
+	int xres;
+	int yres;
+	int bpp;
+	int refresh;
+	bool rb;
+	bool interlace;
+	bool cvt;
+	bool margins;
+	enum drm_connector_force force;
+	unsigned int rotation_reflection;
+	enum drm_panel_orientation panel_orientation;
+	struct drm_connector_tv_margins tv_margins;
+	enum drm_connector_tv_mode tv_mode;
+	bool tv_mode_specified;
+};
+
+struct hdr_static_metadata {
+	__u8 eotf;
+	__u8 metadata_type;
+	__u16 max_cll;
+	__u16 max_fall;
+	__u16 min_cll;
+};
+
+struct hdr_sink_metadata {
+	__u32 metadata_type;
+	union {
+		struct hdr_static_metadata hdmi_type1;
+	};
+};
+
+struct drm_connector_funcs;
+
+struct drm_connector_helper_funcs;
+
+struct drm_edid;
+
+struct drm_encoder;
+
+struct i2c_adapter;
+
+struct drm_tile_group;
+
+struct drm_connector {
+	struct drm_device *dev;
+	struct device *kdev;
+	struct device_attribute *attr;
+	struct fwnode_handle *fwnode;
+	struct list_head head;
+	struct list_head global_connector_list_entry;
+	struct drm_mode_object base;
+	char *name;
+	struct mutex mutex;
+	unsigned int index;
+	int connector_type;
+	int connector_type_id;
+	bool interlace_allowed;
+	bool doublescan_allowed;
+	bool stereo_allowed;
+	bool ycbcr_420_allowed;
+	enum drm_connector_registration_state registration_state;
+	struct list_head modes;
+	enum drm_connector_status status;
+	struct list_head probed_modes;
+	struct drm_display_info display_info;
+	const struct drm_connector_funcs *funcs;
+	struct drm_property_blob *edid_blob_ptr;
+	struct drm_object_properties properties;
+	struct drm_property *scaling_mode_property;
+	struct drm_property *vrr_capable_property;
+	struct drm_property *colorspace_property;
+	struct drm_property_blob *path_blob_ptr;
+	struct drm_property *max_bpc_property;
+	struct drm_privacy_screen *privacy_screen;
+	struct notifier_block privacy_screen_notifier;
+	struct drm_property *privacy_screen_sw_state_property;
+	struct drm_property *privacy_screen_hw_state_property;
+	uint8_t polled;
+	int dpms;
+	const struct drm_connector_helper_funcs *helper_private;
+	struct drm_cmdline_mode cmdline_mode;
+	enum drm_connector_force force;
+	const struct drm_edid *edid_override;
+	struct mutex edid_override_mutex;
+	u64 epoch_counter;
+	u32 possible_encoders;
+	struct drm_encoder *encoder;
+	uint8_t eld[128];
+	bool latency_present[2];
+	int video_latency[2];
+	int audio_latency[2];
+	struct i2c_adapter *ddc;
+	int null_edid_counter;
+	unsigned int bad_edid_counter;
+	bool edid_corrupt;
+	u8 real_edid_checksum;
+	struct dentry *debugfs_entry;
+	struct drm_connector_state *state;
+	struct drm_property_blob *tile_blob_ptr;
+	bool has_tile;
+	struct drm_tile_group *tile_group;
+	bool tile_is_single_monitor;
+	uint8_t num_h_tile;
+	uint8_t num_v_tile;
+	uint8_t tile_h_loc;
+	uint8_t tile_v_loc;
+	uint16_t tile_h_size;
+	uint16_t tile_v_size;
+	struct llist_node free_node;
+	struct hdr_sink_metadata hdr_sink_metadata;
+};
+
+struct drm_connector_funcs {
+	int (*dpms)(struct drm_connector *, int);
+	void (*reset)(struct drm_connector *);
+	enum drm_connector_status (*detect)(struct drm_connector *, bool);
+	void (*force)(struct drm_connector *);
+	int (*fill_modes)(struct drm_connector *, uint32_t, uint32_t);
+	int (*set_property)(struct drm_connector *, struct drm_property *, uint64_t);
+	int (*late_register)(struct drm_connector *);
+	void (*early_unregister)(struct drm_connector *);
+	void (*destroy)(struct drm_connector *);
+	struct drm_connector_state * (*atomic_duplicate_state)(struct drm_connector *);
+	void (*atomic_destroy_state)(struct drm_connector *, struct drm_connector_state *);
+	int (*atomic_set_property)(struct drm_connector *, struct drm_connector_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_connector *, const struct drm_connector_state *, struct drm_property *, uint64_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_connector_state *);
+	void (*oob_hotplug_event)(struct drm_connector *);
+	void (*debugfs_init)(struct drm_connector *, struct dentry *);
+};
+
+struct drm_tv_connector_state {
+	enum drm_mode_subconnector select_subconnector;
+	enum drm_mode_subconnector subconnector;
+	struct drm_connector_tv_margins margins;
+	unsigned int legacy_mode;
+	unsigned int mode;
+	unsigned int brightness;
+	unsigned int contrast;
+	unsigned int flicker_reduction;
+	unsigned int overscan;
+	unsigned int saturation;
+	unsigned int hue;
+};
+
+struct drm_writeback_job;
+
+struct drm_connector_state {
+	struct drm_connector *connector;
+	struct drm_crtc *crtc;
+	struct drm_encoder *best_encoder;
+	enum drm_link_status link_status;
+	struct drm_atomic_state *state;
+	struct drm_crtc_commit *commit;
+	struct drm_tv_connector_state tv;
+	bool self_refresh_aware;
+	enum hdmi_picture_aspect picture_aspect_ratio;
+	unsigned int content_type;
+	unsigned int hdcp_content_type;
+	unsigned int scaling_mode;
+	unsigned int content_protection;
+	enum drm_colorspace colorspace;
+	struct drm_writeback_job *writeback_job;
+	u8 max_requested_bpc;
+	u8 max_bpc;
+	enum drm_privacy_screen_status privacy_screen_sw_state;
+	struct drm_property_blob *hdr_output_metadata;
+};
+
+struct drm_encoder_funcs;
+
+struct drm_encoder_helper_funcs;
+
+struct drm_encoder {
+	struct drm_device *dev;
+	struct list_head head;
+	struct drm_mode_object base;
+	char *name;
+	int encoder_type;
+	unsigned int index;
+	uint32_t possible_crtcs;
+	uint32_t possible_clones;
+	struct drm_crtc *crtc;
+	struct list_head bridge_chain;
+	const struct drm_encoder_funcs *funcs;
+	const struct drm_encoder_helper_funcs *helper_private;
+};
+
+struct drm_encoder_funcs {
+	void (*reset)(struct drm_encoder *);
+	void (*destroy)(struct drm_encoder *);
+	int (*late_register)(struct drm_encoder *);
+	void (*early_unregister)(struct drm_encoder *);
+};
+
+struct drm_encoder_helper_funcs {
+	void (*dpms)(struct drm_encoder *, int);
+	enum drm_mode_status (*mode_valid)(struct drm_encoder *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_encoder *, const struct drm_display_mode *, struct drm_display_mode *);
+	void (*prepare)(struct drm_encoder *);
+	void (*commit)(struct drm_encoder *);
+	void (*mode_set)(struct drm_encoder *, struct drm_display_mode *, struct drm_display_mode *);
+	void (*atomic_mode_set)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
+	enum drm_connector_status (*detect)(struct drm_encoder *, struct drm_connector *);
+	void (*atomic_disable)(struct drm_encoder *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_encoder *, struct drm_atomic_state *);
+	void (*disable)(struct drm_encoder *);
+	void (*enable)(struct drm_encoder *);
+	int (*atomic_check)(struct drm_encoder *, struct drm_crtc_state *, struct drm_connector_state *);
+};
+
+struct drm_writeback_connector;
+
+struct drm_writeback_job {
+	struct drm_writeback_connector *connector;
+	bool prepared;
+	struct work_struct cleanup_work;
+	struct list_head list_entry;
+	struct drm_framebuffer *fb;
+	struct dma_fence *out_fence;
+	void *priv;
+};
+
+struct drm_writeback_connector {
+	struct drm_connector base;
+	struct drm_encoder encoder;
+	struct drm_property_blob *pixel_formats_blob_ptr;
+	spinlock_t job_lock;
+	struct list_head job_queue;
+	unsigned int fence_context;
+	spinlock_t fence_lock;
+	unsigned long fence_seqno;
+	char timeline_name[32];
+};
+
+struct drm_connector_helper_funcs {
+	int (*get_modes)(struct drm_connector *);
+	int (*detect_ctx)(struct drm_connector *, struct drm_modeset_acquire_ctx *, bool);
+	enum drm_mode_status (*mode_valid)(struct drm_connector *, struct drm_display_mode *);
+	int (*mode_valid_ctx)(struct drm_connector *, struct drm_display_mode *, struct drm_modeset_acquire_ctx *, enum drm_mode_status *);
+	struct drm_encoder * (*best_encoder)(struct drm_connector *);
+	struct drm_encoder * (*atomic_best_encoder)(struct drm_connector *, struct drm_atomic_state *);
+	int (*atomic_check)(struct drm_connector *, struct drm_atomic_state *);
+	void (*atomic_commit)(struct drm_connector *, struct drm_atomic_state *);
+	int (*prepare_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
+	void (*cleanup_writeback_job)(struct drm_writeback_connector *, struct drm_writeback_job *);
+	void (*enable_hpd)(struct drm_connector *);
+	void (*disable_hpd)(struct drm_connector *);
+};
+
+struct edid;
+
+struct drm_edid {
+	size_t size;
+	const struct edid *edid;
+};
+
+struct drm_tile_group {
+	struct kref refcount;
+	struct drm_device *dev;
+	int id;
+	u8 group_data[8];
+};
+
+struct drm_private_obj;
+
+struct drm_private_state;
+
+struct __drm_private_objs_state {
+	struct drm_private_obj *ptr;
+	struct drm_private_state *state;
+	struct drm_private_state *old_state;
+	struct drm_private_state *new_state;
+};
+
+struct drm_private_state_funcs;
+
+struct drm_private_obj {
+	struct list_head head;
+	struct drm_modeset_lock lock;
+	struct drm_private_state *state;
+	const struct drm_private_state_funcs *funcs;
+};
+
+struct drm_private_state {
+	struct drm_atomic_state *state;
+	struct drm_private_obj *obj;
+};
+
+struct drm_private_state_funcs {
+	struct drm_private_state * (*atomic_duplicate_state)(struct drm_private_obj *);
+	void (*atomic_destroy_state)(struct drm_private_obj *, struct drm_private_state *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_private_state *);
+};
+
+struct drm_vma_offset_manager {
+	rwlock_t vm_lock;
+	struct drm_mm vm_addr_space_mm;
+};
+
+struct drm_mode_set;
+
+struct drm_crtc_funcs {
+	void (*reset)(struct drm_crtc *);
+	int (*cursor_set)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t);
+	int (*cursor_set2)(struct drm_crtc *, struct drm_file *, uint32_t, uint32_t, uint32_t, int32_t, int32_t);
+	int (*cursor_move)(struct drm_crtc *, int, int);
+	int (*gamma_set)(struct drm_crtc *, u16 *, u16 *, u16 *, uint32_t, struct drm_modeset_acquire_ctx *);
+	void (*destroy)(struct drm_crtc *);
+	int (*set_config)(struct drm_mode_set *, struct drm_modeset_acquire_ctx *);
+	int (*page_flip)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*page_flip_target)(struct drm_crtc *, struct drm_framebuffer *, struct drm_pending_vblank_event *, uint32_t, uint32_t, struct drm_modeset_acquire_ctx *);
+	int (*set_property)(struct drm_crtc *, struct drm_property *, uint64_t);
+	struct drm_crtc_state * (*atomic_duplicate_state)(struct drm_crtc *);
+	void (*atomic_destroy_state)(struct drm_crtc *, struct drm_crtc_state *);
+	int (*atomic_set_property)(struct drm_crtc *, struct drm_crtc_state *, struct drm_property *, uint64_t);
+	int (*atomic_get_property)(struct drm_crtc *, const struct drm_crtc_state *, struct drm_property *, uint64_t *);
+	int (*late_register)(struct drm_crtc *);
+	void (*early_unregister)(struct drm_crtc *);
+	int (*set_crc_source)(struct drm_crtc *, const char *);
+	int (*verify_crc_source)(struct drm_crtc *, const char *, size_t *);
+	const char * const * (*get_crc_sources)(struct drm_crtc *, size_t *);
+	void (*atomic_print_state)(struct drm_printer *, const struct drm_crtc_state *);
+	u32 (*get_vblank_counter)(struct drm_crtc *);
+	int (*enable_vblank)(struct drm_crtc *);
+	void (*disable_vblank)(struct drm_crtc *);
+	bool (*get_vblank_timestamp)(struct drm_crtc *, int *, ktime_t *, bool);
+};
+
+struct drm_mode_set {
+	struct drm_framebuffer *fb;
+	struct drm_crtc *crtc;
+	struct drm_display_mode *mode;
+	uint32_t x;
+	uint32_t y;
+	struct drm_connector **connectors;
+	size_t num_connectors;
+};
+
+enum mode_set_atomic {
+	LEAVE_ATOMIC_MODE_SET = 0,
+	ENTER_ATOMIC_MODE_SET = 1,
+};
+
+struct drm_crtc_helper_funcs {
+	void (*dpms)(struct drm_crtc *, int);
+	void (*prepare)(struct drm_crtc *);
+	void (*commit)(struct drm_crtc *);
+	enum drm_mode_status (*mode_valid)(struct drm_crtc *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_crtc *, const struct drm_display_mode *, struct drm_display_mode *);
+	int (*mode_set)(struct drm_crtc *, struct drm_display_mode *, struct drm_display_mode *, int, int, struct drm_framebuffer *);
+	void (*mode_set_nofb)(struct drm_crtc *);
+	int (*mode_set_base)(struct drm_crtc *, int, int, struct drm_framebuffer *);
+	int (*mode_set_base_atomic)(struct drm_crtc *, struct drm_framebuffer *, int, int, enum mode_set_atomic);
+	void (*disable)(struct drm_crtc *);
+	int (*atomic_check)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_begin)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_flush)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_enable)(struct drm_crtc *, struct drm_atomic_state *);
+	void (*atomic_disable)(struct drm_crtc *, struct drm_atomic_state *);
+	bool (*get_scanout_position)(struct drm_crtc *, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
+};
+
+struct drm_crtc_crc_entry {
+	bool has_frame_counter;
+	uint32_t frame;
+	uint32_t crcs[10];
+};
+
+struct drm_bridge_timings;
+
+struct drm_bridge_funcs;
+
+struct drm_bridge {
+	struct drm_private_obj base;
+	struct drm_device *dev;
+	struct drm_encoder *encoder;
+	struct list_head chain_node;
+	struct device_node *of_node;
+	struct list_head list;
+	const struct drm_bridge_timings *timings;
+	const struct drm_bridge_funcs *funcs;
+	void *driver_private;
+	enum drm_bridge_ops ops;
+	int type;
+	bool interlace_allowed;
+	bool pre_enable_prev_first;
+	struct i2c_adapter *ddc;
+	struct mutex hpd_mutex;
+	void (*hpd_cb)(void *, enum drm_connector_status);
+	void *hpd_data;
+};
+
+struct drm_bridge_timings {
+	u32 input_bus_flags;
+	u32 setup_time_ps;
+	u32 hold_time_ps;
+	bool dual_link;
+};
+
+struct drm_bridge_state;
+
+struct drm_bridge_funcs {
+	int (*attach)(struct drm_bridge *, enum drm_bridge_attach_flags);
+	void (*detach)(struct drm_bridge *);
+	enum drm_mode_status (*mode_valid)(struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *);
+	bool (*mode_fixup)(struct drm_bridge *, const struct drm_display_mode *, struct drm_display_mode *);
+	void (*disable)(struct drm_bridge *);
+	void (*post_disable)(struct drm_bridge *);
+	void (*mode_set)(struct drm_bridge *, const struct drm_display_mode *, const struct drm_display_mode *);
+	void (*pre_enable)(struct drm_bridge *);
+	void (*enable)(struct drm_bridge *);
+	void (*atomic_pre_enable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_enable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_disable)(struct drm_bridge *, struct drm_bridge_state *);
+	void (*atomic_post_disable)(struct drm_bridge *, struct drm_bridge_state *);
+	struct drm_bridge_state * (*atomic_duplicate_state)(struct drm_bridge *);
+	void (*atomic_destroy_state)(struct drm_bridge *, struct drm_bridge_state *);
+	u32 * (*atomic_get_output_bus_fmts)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *, unsigned int *);
+	u32 * (*atomic_get_input_bus_fmts)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *, u32, unsigned int *);
+	int (*atomic_check)(struct drm_bridge *, struct drm_bridge_state *, struct drm_crtc_state *, struct drm_connector_state *);
+	struct drm_bridge_state * (*atomic_reset)(struct drm_bridge *);
+	enum drm_connector_status (*detect)(struct drm_bridge *);
+	int (*get_modes)(struct drm_bridge *, struct drm_connector *);
+	const struct drm_edid * (*edid_read)(struct drm_bridge *, struct drm_connector *);
+	struct edid * (*get_edid)(struct drm_bridge *, struct drm_connector *);
+	void (*hpd_notify)(struct drm_bridge *, enum drm_connector_status);
+	void (*hpd_enable)(struct drm_bridge *);
+	void (*hpd_disable)(struct drm_bridge *);
+	void (*debugfs_init)(struct drm_bridge *, struct dentry *);
+};
+
+struct drm_bus_cfg {
+	u32 format;
+	u32 flags;
+};
+
+struct drm_bridge_state {
+	struct drm_private_state base;
+	struct drm_bridge *bridge;
+	struct drm_bus_cfg input_bus_cfg;
+	struct drm_bus_cfg output_bus_cfg;
+};
+
+struct drm_connector_list_iter {
+	struct drm_device *dev;
+	struct drm_connector *conn;
+};
+
+struct drm_mode_rect {
+	__s32 x1;
+	__s32 y1;
+	__s32 x2;
+	__s32 y2;
+};
+
+struct drm_debugfs_entry {
+	struct drm_device *dev;
+	struct drm_debugfs_info file;
+	struct list_head list;
+};
+
+struct drm_mode_modeinfo {
+	__u32 clock;
+	__u16 hdisplay;
+	__u16 hsync_start;
+	__u16 hsync_end;
+	__u16 htotal;
+	__u16 hskew;
+	__u16 vdisplay;
+	__u16 vsync_start;
+	__u16 vsync_end;
+	__u16 vtotal;
+	__u16 vscan;
+	__u32 vrefresh;
+	__u32 flags;
+	__u32 type;
+	char name[32];
+};
+
+struct sync_file;
+
+struct drm_out_fence_state {
+	s32 __attribute__((btf_type_tag("user"))) *out_fence_ptr;
+	struct sync_file *sync_file;
+	int fd;
+};
+
+struct dma_fence_cb;
+
+typedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);
+
+struct dma_fence_cb {
+	struct list_head node;
+	dma_fence_func_t func;
+};
+
+struct sync_file {
+	struct file *file;
+	char user_name[32];
+	struct list_head sync_file_list;
+	wait_queue_head_t wq;
+	unsigned long flags;
+	struct dma_fence *fence;
+	struct dma_fence_cb cb;
+};
+
+struct drm_mode_atomic {
+	__u32 flags;
+	__u32 count_objs;
+	__u64 objs_ptr;
+	__u64 count_props_ptr;
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u64 reserved;
+	__u64 user_data;
+};
+
+struct drm_auth {
+	drm_magic_t magic;
+};
+
+struct drm_prop_enum_list {
+	int type;
+	const char *name;
+};
+
+struct est_timings {
+	u8 t1;
+	u8 t2;
+	u8 mfg_rsvd;
+};
+
+struct std_timing {
+	u8 hsize;
+	u8 vfreq_aspect;
+};
+
+struct detailed_pixel_timing {
+	u8 hactive_lo;
+	u8 hblank_lo;
+	u8 hactive_hblank_hi;
+	u8 vactive_lo;
+	u8 vblank_lo;
+	u8 vactive_vblank_hi;
+	u8 hsync_offset_lo;
+	u8 hsync_pulse_width_lo;
+	u8 vsync_offset_pulse_width_lo;
+	u8 hsync_vsync_offset_pulse_width_hi;
+	u8 width_mm_lo;
+	u8 height_mm_lo;
+	u8 width_height_mm_hi;
+	u8 hborder;
+	u8 vborder;
+	u8 misc;
+};
+
+struct detailed_data_string {
+	u8 str[13];
+};
+
+struct detailed_data_monitor_range {
+	u8 min_vfreq;
+	u8 max_vfreq;
+	u8 min_hfreq_khz;
+	u8 max_hfreq_khz;
+	u8 pixel_clock_mhz;
+	u8 flags;
+	union {
+		struct {
+			u8 reserved;
+			u8 hfreq_start_khz;
+			u8 c;
+			__le16 m;
+			u8 k;
+			u8 j;
+		} __attribute__((packed)) gtf2;
+		struct {
+			u8 version;
+			u8 data1;
+			u8 data2;
+			u8 supported_aspects;
+			u8 flags;
+			u8 supported_scalings;
+			u8 preferred_refresh;
+		} cvt;
+	} formula;
+};
+
+struct detailed_data_wpindex {
+	u8 white_yx_lo;
+	u8 white_x_hi;
+	u8 white_y_hi;
+	u8 gamma;
+};
+
+struct cvt_timing {
+	u8 code[3];
+};
+
+struct detailed_non_pixel {
+	u8 pad1;
+	u8 type;
+	u8 pad2;
+	union {
+		struct detailed_data_string str;
+		struct detailed_data_monitor_range range;
+		struct detailed_data_wpindex color;
+		struct std_timing timings[6];
+		struct cvt_timing cvt[4];
+	} data;
+};
+
+struct detailed_timing {
+	__le16 pixel_clock;
+	union {
+		struct detailed_pixel_timing pixel_data;
+		struct detailed_non_pixel other_data;
+	} data;
+};
+
+struct edid {
+	u8 header[8];
+	u8 mfg_id[2];
+	u8 prod_code[2];
+	u32 serial;
+	u8 mfg_week;
+	u8 mfg_year;
+	u8 version;
+	u8 revision;
+	u8 input;
+	u8 width_cm;
+	u8 height_cm;
+	u8 gamma;
+	u8 features;
+	u8 red_green_lo;
+	u8 blue_white_lo;
+	u8 red_x;
+	u8 red_y;
+	u8 green_x;
+	u8 green_y;
+	u8 blue_x;
+	u8 blue_y;
+	u8 white_x;
+	u8 white_y;
+	struct est_timings established_timings;
+	struct std_timing standard_timings[8];
+	struct detailed_timing detailed_timings[4];
+	u8 extensions;
+	u8 checksum;
+};
+
+struct iosys_map {
+	union {
+		void *vaddr_iomem;
+		void *vaddr;
+	};
+	bool is_iomem;
+};
+
+struct drm_client_funcs;
+
+struct drm_client_dev {
+	struct drm_device *dev;
+	const char *name;
+	struct list_head list;
+	const struct drm_client_funcs *funcs;
+	struct drm_file *file;
+	struct mutex modeset_mutex;
+	struct drm_mode_set *modesets;
+	bool hotplug_failed;
+};
+
+struct drm_client_funcs {
+	struct module *owner;
+	void (*unregister)(struct drm_client_dev *);
+	int (*restore)(struct drm_client_dev *);
+	int (*hotplug)(struct drm_client_dev *);
+};
+
+struct drm_client_buffer {
+	struct drm_client_dev *client;
+	u32 pitch;
+	struct drm_gem_object *gem;
+	struct iosys_map map;
+	struct drm_framebuffer *fb;
+};
+
+struct drm_mode_fb_cmd {
+	__u32 fb_id;
+	__u32 width;
+	__u32 height;
+	__u32 pitch;
+	__u32 bpp;
+	__u32 depth;
+	__u32 handle;
+};
+
+struct drm_client_offset {
+	int x;
+	int y;
+};
+
+enum drm_color_lut_tests {
+	DRM_COLOR_LUT_EQUAL_CHANNELS = 1,
+	DRM_COLOR_LUT_NON_DECREASING = 2,
+};
+
+struct drm_color_lut {
+	__u16 red;
+	__u16 green;
+	__u16 blue;
+	__u16 reserved;
+};
+
+struct drm_mode_crtc_lut {
+	__u32 crtc_id;
+	__u32 gamma_size;
+	__u64 red;
+	__u64 green;
+	__u64 blue;
+};
+
+struct drm_conn_prop_enum_list {
+	int type;
+	const char *name;
+	struct ida ida;
+};
+
+typedef void (*drmres_release_t)(struct drm_device *, void *);
+
+struct drm_panel_funcs;
+
+struct drm_panel {
+	struct device *dev;
+	struct backlight_device *backlight;
+	const struct drm_panel_funcs *funcs;
+	int connector_type;
+	struct list_head list;
+	struct list_head followers;
+	struct mutex follower_lock;
+	bool prepare_prev_first;
+	bool prepared;
+	bool enabled;
+};
+
+struct drm_panel_funcs {
+	int (*prepare)(struct drm_panel *);
+	int (*enable)(struct drm_panel *);
+	int (*disable)(struct drm_panel *);
+	int (*unprepare)(struct drm_panel *);
+	int (*get_modes)(struct drm_panel *, struct drm_connector *);
+	enum drm_panel_orientation (*get_orientation)(struct drm_panel *);
+	int (*get_timings)(struct drm_panel *, unsigned int, struct display_timing *);
+	void (*debugfs_init)(struct drm_panel *, struct dentry *);
+};
+
+struct drm_mode_obj_set_property {
+	__u64 value;
+	__u32 prop_id;
+	__u32 obj_id;
+	__u32 obj_type;
+};
+
+struct drm_mode_connector_set_property {
+	__u64 value;
+	__u32 prop_id;
+	__u32 connector_id;
+};
+
+struct drm_mode_get_connector {
+	__u64 encoders_ptr;
+	__u64 modes_ptr;
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u32 count_modes;
+	__u32 count_props;
+	__u32 count_encoders;
+	__u32 encoder_id;
+	__u32 connector_id;
+	__u32 connector_type;
+	__u32 connector_type_id;
+	__u32 connection;
+	__u32 mm_width;
+	__u32 mm_height;
+	__u32 subpixel;
+	__u32 pad;
+};
+
+struct drm_mode_crtc {
+	__u64 set_connectors_ptr;
+	__u32 count_connectors;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 x;
+	__u32 y;
+	__u32 gamma_size;
+	__u32 mode_valid;
+	struct drm_mode_modeinfo mode;
+};
+
+struct displayid_block {
+	u8 tag;
+	u8 rev;
+	u8 num_bytes;
+};
+
+struct displayid_header {
+	u8 rev;
+	u8 bytes;
+	u8 prod_id;
+	u8 ext_count;
+};
+
+struct displayid_iter {
+	const struct drm_edid *drm_edid;
+	const u8 *section;
+	int length;
+	int idx;
+	int ext_index;
+	u8 version;
+	u8 primary_use;
+};
+
+enum drm_minor_type {
+	DRM_MINOR_PRIMARY = 0,
+	DRM_MINOR_CONTROL = 1,
+	DRM_MINOR_RENDER = 2,
+	DRM_MINOR_ACCEL = 32,
+};
+
+struct drm_mode_map_dumb {
+	__u32 handle;
+	__u32 pad;
+	__u64 offset;
+};
+
+struct drm_mode_destroy_dumb {
+	__u32 handle;
+};
+
+struct edid_quirk {
+	u32 panel_id;
+	u32 quirks;
+};
+
+struct minimode {
+	short w;
+	short h;
+	short r;
+	short rb;
+};
+
+struct stereo_mandatory_mode {
+	int width;
+	int height;
+	int vrefresh;
+	unsigned int flags;
+};
+
+enum edid_block_status {
+	EDID_BLOCK_OK = 0,
+	EDID_BLOCK_READ_FAIL = 1,
+	EDID_BLOCK_NULL = 2,
+	EDID_BLOCK_ZERO = 3,
+	EDID_BLOCK_HEADER_CORRUPT = 4,
+	EDID_BLOCK_HEADER_REPAIR = 5,
+	EDID_BLOCK_HEADER_FIXED = 6,
+	EDID_BLOCK_CHECKSUM = 7,
+	EDID_BLOCK_VERSION = 8,
+};
+
+struct cea_db {
+	u8 tag_length;
+	u8 data[0];
+};
+
+struct displayid_vesa_vendor_specific_block {
+	struct displayid_block base;
+	u8 oui[3];
+	u8 data_structure_type;
+	u8 mso;
+};
+
+struct displayid_detailed_timings_1 {
+	u8 pixel_clock[3];
+	u8 flags;
+	u8 hactive[2];
+	u8 hblank[2];
+	u8 hsync[2];
+	u8 hsw[2];
+	u8 vactive[2];
+	u8 vblank[2];
+	u8 vsync[2];
+	u8 vsw[2];
+};
+
+struct displayid_detailed_timing_block {
+	struct displayid_block base;
+	struct displayid_detailed_timings_1 timings[0];
+};
+
+struct displayid_tiled_block {
+	struct displayid_block base;
+	u8 tile_cap;
+	u8 topo[3];
+	u8 tile_size[4];
+	u8 tile_pixel_bezel[5];
+	u8 topology_id[8];
+};
+
+struct i2c_algorithm;
+
+struct i2c_lock_operations;
+
+struct i2c_bus_recovery_info;
+
+struct i2c_adapter_quirks;
+
+struct i2c_adapter {
+	struct module *owner;
+	unsigned int class;
+	const struct i2c_algorithm *algo;
+	void *algo_data;
+	const struct i2c_lock_operations *lock_ops;
+	struct rt_mutex bus_lock;
+	struct rt_mutex mux_lock;
+	int timeout;
+	int retries;
+	struct device dev;
+	unsigned long locked_flags;
+	int nr;
+	char name[48];
+	struct completion dev_released;
+	struct mutex userspace_clients_lock;
+	struct list_head userspace_clients;
+	struct i2c_bus_recovery_info *bus_recovery_info;
+	const struct i2c_adapter_quirks *quirks;
+	struct irq_domain *host_notify_domain;
+	struct regulator *bus_regulator;
+};
+
+struct i2c_msg;
+
+union i2c_smbus_data;
+
+struct i2c_algorithm {
+	int (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);
+	int (*smbus_xfer)(struct i2c_adapter *, u16, unsigned short, char, u8, int, union i2c_smbus_data *);
+	int (*smbus_xfer_atomic)(struct i2c_adapter *, u16, unsigned short, char, u8, int, union i2c_smbus_data *);
+	u32 (*functionality)(struct i2c_adapter *);
+};
+
+struct i2c_msg {
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	__u8 *buf;
+};
+
+union i2c_smbus_data {
+	__u8 byte;
+	__u16 word;
+	__u8 block[34];
+};
+
+struct i2c_lock_operations {
+	void (*lock_bus)(struct i2c_adapter *, unsigned int);
+	int (*trylock_bus)(struct i2c_adapter *, unsigned int);
+	void (*unlock_bus)(struct i2c_adapter *, unsigned int);
+};
+
+struct pinctrl;
+
+struct pinctrl_state;
+
+struct i2c_bus_recovery_info {
+	int (*recover_bus)(struct i2c_adapter *);
+	int (*get_scl)(struct i2c_adapter *);
+	void (*set_scl)(struct i2c_adapter *, int);
+	int (*get_sda)(struct i2c_adapter *);
+	void (*set_sda)(struct i2c_adapter *, int);
+	int (*get_bus_free)(struct i2c_adapter *);
+	void (*prepare_recovery)(struct i2c_adapter *);
+	void (*unprepare_recovery)(struct i2c_adapter *);
+	struct gpio_desc *scl_gpiod;
+	struct gpio_desc *sda_gpiod;
+	struct pinctrl *pinctrl;
+	struct pinctrl_state *pins_default;
+	struct pinctrl_state *pins_gpio;
+};
+
+struct i2c_adapter_quirks {
+	u64 flags;
+	int max_num_msgs;
+	u16 max_write_len;
+	u16 max_read_len;
+	u16 max_comb_1st_msg_len;
+	u16 max_comb_2nd_msg_len;
+};
+
+typedef void detailed_cb(const struct detailed_timing *, void *);
+
+struct drm_edid_iter {
+	const struct drm_edid *drm_edid;
+	int index;
+};
+
+struct cea_db_iter {
+	struct drm_edid_iter edid_iter;
+	struct displayid_iter displayid_iter;
+	const u8 *collection;
+	int index;
+	int end;
+};
+
+struct cea_sad {
+	u8 format;
+	u8 channels;
+	u8 freq;
+	u8 byte2;
+};
+
+struct detailed_mode_closure {
+	struct drm_connector *connector;
+	const struct drm_edid *drm_edid;
+	bool preferred;
+	int modes;
+};
+
+typedef int read_block_fn(void *, u8 *, unsigned int, size_t);
+
+struct drm_mode_get_encoder {
+	__u32 encoder_id;
+	__u32 encoder_type;
+	__u32 crtc_id;
+	__u32 possible_crtcs;
+	__u32 possible_clones;
+};
+
+enum dma_resv_usage {
+	DMA_RESV_USAGE_KERNEL = 0,
+	DMA_RESV_USAGE_WRITE = 1,
+	DMA_RESV_USAGE_READ = 2,
+	DMA_RESV_USAGE_BOOKKEEP = 3,
+};
+
+struct drm_memory_stats {
+	u64 shared;
+	u64 private;
+	u64 resident;
+	u64 purgeable;
+	u64 active;
+};
+
+struct drm_mode_rmfb_work {
+	struct work_struct work;
+	struct list_head fbs;
+};
+
+struct drm_mode_fb_dirty_cmd {
+	__u32 fb_id;
+	__u32 flags;
+	__u32 color;
+	__u32 num_clips;
+	__u64 clips_ptr;
+};
+
+struct dma_buf_poll_cb_t {
+	struct dma_fence_cb cb;
+	wait_queue_head_t *poll;
+	__poll_t active;
+};
+
+struct dma_buf_ops;
+
+struct dma_buf_sysfs_entry;
+
+struct dma_buf {
+	size_t size;
+	struct file *file;
+	struct list_head attachments;
+	const struct dma_buf_ops *ops;
+	unsigned int vmapping_counter;
+	struct iosys_map vmap_ptr;
+	const char *exp_name;
+	const char *name;
+	spinlock_t name_lock;
+	struct module *owner;
+	struct list_head list_node;
+	void *priv;
+	struct dma_resv *resv;
+	wait_queue_head_t poll;
+	struct dma_buf_poll_cb_t cb_in;
+	struct dma_buf_poll_cb_t cb_out;
+	struct dma_buf_sysfs_entry *sysfs_entry;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct dma_buf_ops {
+	bool cache_sgt_mapping;
+	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
+	void (*detach)(struct dma_buf *, struct dma_buf_attachment *);
+	int (*pin)(struct dma_buf_attachment *);
+	void (*unpin)(struct dma_buf_attachment *);
+	struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);
+	void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);
+	void (*release)(struct dma_buf *);
+	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*begin_cpu_access_partial)(struct dma_buf *, enum dma_data_direction, unsigned int, unsigned int);
+	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
+	int (*end_cpu_access_partial)(struct dma_buf *, enum dma_data_direction, unsigned int, unsigned int);
+	int (*mmap)(struct dma_buf *, struct vm_area_struct *);
+	int (*vmap)(struct dma_buf *, struct iosys_map *);
+	void (*vunmap)(struct dma_buf *, struct iosys_map *);
+	int (*get_flags)(struct dma_buf *, unsigned long *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct dma_buf_attach_ops;
+
+struct dma_buf_attachment {
+	struct dma_buf *dmabuf;
+	struct device *dev;
+	struct list_head node;
+	struct sg_table *sgt;
+	enum dma_data_direction dir;
+	bool peer2peer;
+	const struct dma_buf_attach_ops *importer_ops;
+	void *importer_priv;
+	void *priv;
+	unsigned long dma_map_attrs;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct dma_buf_attach_ops {
+	bool allow_peer2peer;
+	void (*move_notify)(struct dma_buf_attachment *);
+	u64 android_kabi_reserved1;
+};
+
+struct dma_buf_sysfs_entry {
+	union {
+		struct kobject kobj;
+		struct work_struct sysfs_add_work;
+	};
+	struct dma_buf *dmabuf;
+};
+
+struct drm_gem_close {
+	__u32 handle;
+	__u32 pad;
+};
+
+struct drm_gem_flink {
+	__u32 handle;
+	__u32 name;
+};
+
+struct drm_gem_open {
+	__u32 name;
+	__u32 handle;
+	__u64 size;
+};
+
+enum drm_stat_type {
+	_DRM_STAT_LOCK = 0,
+	_DRM_STAT_OPENS = 1,
+	_DRM_STAT_CLOSES = 2,
+	_DRM_STAT_IOCTLS = 3,
+	_DRM_STAT_LOCKS = 4,
+	_DRM_STAT_UNLOCKS = 5,
+	_DRM_STAT_VALUE = 6,
+	_DRM_STAT_BYTE = 7,
+	_DRM_STAT_COUNT = 8,
+	_DRM_STAT_IRQ = 9,
+	_DRM_STAT_PRIMARY = 10,
+	_DRM_STAT_SECONDARY = 11,
+	_DRM_STAT_DMA = 12,
+	_DRM_STAT_SPECIAL = 13,
+	_DRM_STAT_MISSED = 14,
+};
+
+struct drm_unique {
+	__kernel_size_t unique_len;
+	char __attribute__((btf_type_tag("user"))) *unique;
+};
+
+struct drm_client {
+	int idx;
+	int auth;
+	unsigned long pid;
+	unsigned long uid;
+	unsigned long magic;
+	unsigned long iocs;
+};
+
+struct drm_version {
+	int version_major;
+	int version_minor;
+	int version_patchlevel;
+	__kernel_size_t name_len;
+	char __attribute__((btf_type_tag("user"))) *name;
+	__kernel_size_t date_len;
+	char __attribute__((btf_type_tag("user"))) *date;
+	__kernel_size_t desc_len;
+	char __attribute__((btf_type_tag("user"))) *desc;
+};
+
+struct drm_stats {
+	unsigned long count;
+	struct {
+		unsigned long value;
+		enum drm_stat_type type;
+	} data[15];
+};
+
+struct drm_set_version {
+	int drm_di_major;
+	int drm_di_minor;
+	int drm_dd_major;
+	int drm_dd_minor;
+};
+
+struct drm_get_cap {
+	__u64 capability;
+	__u64 value;
+};
+
+struct drm_set_client_cap {
+	__u64 capability;
+	__u64 value;
+};
+
+struct drm_mode_create_lease {
+	__u64 object_ids;
+	__u32 object_count;
+	__u32 flags;
+	__u32 lessee_id;
+	__u32 fd;
+};
+
+struct drm_mode_list_lessees {
+	__u32 count_lessees;
+	__u32 pad;
+	__u64 lessees_ptr;
+};
+
+struct drm_mode_get_lease {
+	__u32 count_objects;
+	__u32 pad;
+	__u64 objects_ptr;
+};
+
+struct drm_mode_revoke_lease {
+	__u32 lessee_id;
+};
+
+struct drmres_node {
+	struct list_head entry;
+	drmres_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct drmres {
+	struct drmres_node node;
+	u8 data[0];
+};
+
+enum drm_mm_insert_mode {
+	DRM_MM_INSERT_BEST = 0,
+	DRM_MM_INSERT_LOW = 1,
+	DRM_MM_INSERT_HIGH = 2,
+	DRM_MM_INSERT_EVICT = 3,
+	DRM_MM_INSERT_ONCE = 2147483648,
+	DRM_MM_INSERT_HIGHEST = 2147483650,
+	DRM_MM_INSERT_LOWEST = 2147483649,
+};
+
+struct drm_mm_scan {
+	struct drm_mm *mm;
+	u64 size;
+	u64 alignment;
+	u64 remainder_mask;
+	u64 range_start;
+	u64 range_end;
+	u64 hit_start;
+	u64 hit_end;
+	unsigned long color;
+	enum drm_mm_insert_mode mode;
+};
+
+struct drm_mode_card_res {
+	__u64 fb_id_ptr;
+	__u64 crtc_id_ptr;
+	__u64 connector_id_ptr;
+	__u64 encoder_id_ptr;
+	__u32 count_fbs;
+	__u32 count_crtcs;
+	__u32 count_connectors;
+	__u32 count_encoders;
+	__u32 min_width;
+	__u32 max_width;
+	__u32 min_height;
+	__u32 max_height;
+};
+
+struct drm_mode_obj_get_properties {
+	__u64 props_ptr;
+	__u64 prop_values_ptr;
+	__u32 count_props;
+	__u32 obj_id;
+	__u32 obj_type;
+};
+
+struct analog_param_range {
+	unsigned int min;
+	unsigned int typ;
+	unsigned int max;
+};
+
+struct analog_param_field {
+	unsigned int even;
+	unsigned int odd;
+};
+
+struct analog_parameters {
+	unsigned int num_lines;
+	unsigned int line_duration_ns;
+	struct analog_param_range hact_ns;
+	struct analog_param_range hfp_ns;
+	struct analog_param_range hslen_ns;
+	struct analog_param_range hbp_ns;
+	struct analog_param_range hblk_ns;
+	unsigned int bt601_hfp;
+	struct analog_param_field vfp_lines;
+	struct analog_param_field vslen_lines;
+	struct analog_param_field vbp_lines;
+};
+
+struct drm_named_mode {
+	const char *name;
+	unsigned int pixel_clock_khz;
+	unsigned int xres;
+	unsigned int yres;
+	unsigned int flags;
+	unsigned int tv_mode;
+};
+
+enum drm_mode_analog {
+	DRM_MODE_ANALOG_NTSC = 0,
+	DRM_MODE_ANALOG_PAL = 1,
+};
+
+enum drm_bus_flags {
+	DRM_BUS_FLAG_DE_LOW = 1,
+	DRM_BUS_FLAG_DE_HIGH = 2,
+	DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE = 4,
+	DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE = 8,
+	DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE = 8,
+	DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE = 4,
+	DRM_BUS_FLAG_DATA_MSB_TO_LSB = 16,
+	DRM_BUS_FLAG_DATA_LSB_TO_MSB = 32,
+	DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE = 64,
+	DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE = 128,
+	DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE = 128,
+	DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE = 64,
+	DRM_BUS_FLAG_SHARP_SIGNALS = 256,
+};
+
+struct drm_format_modifier {
+	__u64 formats;
+	__u32 offset;
+	__u32 pad;
+	__u64 modifier;
+};
+
+struct drm_format_modifier_blob {
+	__u32 version;
+	__u32 flags;
+	__u32 count_formats;
+	__u32 formats_offset;
+	__u32 count_modifiers;
+	__u32 modifiers_offset;
+};
+
+struct drm_mode_cursor2 {
+	__u32 flags;
+	__u32 crtc_id;
+	__s32 x;
+	__s32 y;
+	__u32 width;
+	__u32 height;
+	__u32 handle;
+	__s32 hot_x;
+	__s32 hot_y;
+};
+
+struct drm_mode_get_plane_res {
+	__u64 plane_id_ptr;
+	__u32 count_planes;
+};
+
+struct drm_mode_get_plane {
+	__u32 plane_id;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 possible_crtcs;
+	__u32 gamma_size;
+	__u32 count_format_types;
+	__u64 format_type_ptr;
+};
+
+struct drm_mode_set_plane {
+	__u32 plane_id;
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 flags;
+	__s32 crtc_x;
+	__s32 crtc_y;
+	__u32 crtc_w;
+	__u32 crtc_h;
+	__u32 src_x;
+	__u32 src_y;
+	__u32 src_h;
+	__u32 src_w;
+};
+
+struct drm_mode_cursor {
+	__u32 flags;
+	__u32 crtc_id;
+	__s32 x;
+	__s32 y;
+	__u32 width;
+	__u32 height;
+	__u32 handle;
+};
+
+struct drm_mode_crtc_page_flip_target {
+	__u32 crtc_id;
+	__u32 fb_id;
+	__u32 flags;
+	__u32 sequence;
+	__u64 user_data;
+};
+
+struct drm_prime_member {
+	struct dma_buf *dma_buf;
+	uint32_t handle;
+	struct rb_node dmabuf_rb;
+	struct rb_node handle_rb;
+};
+
+struct dma_buf_export_info {
+	const char *exp_name;
+	struct module *owner;
+	const struct dma_buf_ops *ops;
+	size_t size;
+	int flags;
+	struct dma_resv *resv;
+	void *priv;
+	unsigned long dma_map_attrs;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct drm_prime_handle {
+	__u32 handle;
+	__u32 flags;
+	__s32 fd;
+};
+
+struct drm_print_iterator {
+	void *data;
+	ssize_t start;
+	ssize_t remain;
+	ssize_t offset;
+};
+
+struct drm_property_enum {
+	uint64_t value;
+	struct list_head head;
+	char name[32];
+};
+
+struct drm_mode_get_property {
+	__u64 values_ptr;
+	__u64 enum_blob_ptr;
+	__u32 prop_id;
+	__u32 flags;
+	char name[32];
+	__u32 count_values;
+	__u32 count_enum_blobs;
+};
+
+struct drm_mode_property_enum {
+	__u64 value;
+	char name[32];
+};
+
+struct drm_mode_get_blob {
+	__u32 blob_id;
+	__u32 length;
+	__u64 data;
+};
+
+struct drm_mode_create_blob {
+	__u64 data;
+	__u32 length;
+	__u32 blob_id;
+};
+
+struct drm_mode_destroy_blob {
+	__u32 blob_id;
+};
+
+enum dma_fence_flag_bits {
+	DMA_FENCE_FLAG_SIGNALED_BIT = 0,
+	DMA_FENCE_FLAG_TIMESTAMP_BIT = 1,
+	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,
+	DMA_FENCE_FLAG_USER_BITS = 3,
+};
+
+struct syncobj_wait_entry {
+	struct list_head node;
+	struct task_struct *task;
+	struct dma_fence *fence;
+	struct dma_fence_cb fence_cb;
+	u64 point;
+};
+
+struct drm_syncobj;
+
+struct syncobj_eventfd_entry {
+	struct list_head node;
+	struct dma_fence *fence;
+	struct dma_fence_cb fence_cb;
+	struct drm_syncobj *syncobj;
+	struct eventfd_ctx *ev_fd_ctx;
+	u64 point;
+	u32 flags;
+};
+
+struct drm_syncobj {
+	struct kref refcount;
+	struct dma_fence __attribute__((btf_type_tag("rcu"))) *fence;
+	struct list_head cb_list;
+	struct list_head ev_fd_list;
+	spinlock_t lock;
+	struct file *file;
+};
+
+struct dma_fence_chain {
+	struct dma_fence base;
+	struct dma_fence __attribute__((btf_type_tag("rcu"))) *prev;
+	u64 prev_seqno;
+	struct dma_fence *fence;
+	union {
+		struct dma_fence_cb cb;
+		struct irq_work work;
+	};
+	spinlock_t lock;
+};
+
+struct drm_syncobj_transfer {
+	__u32 src_handle;
+	__u32 dst_handle;
+	__u64 src_point;
+	__u64 dst_point;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct dma_fence_unwrap {
+	struct dma_fence *chain;
+	struct dma_fence *array;
+	unsigned int index;
+};
+
+struct drm_syncobj_wait {
+	__u64 handles;
+	__s64 timeout_nsec;
+	__u32 count_handles;
+	__u32 flags;
+	__u32 first_signaled;
+	__u32 pad;
+};
+
+struct drm_syncobj_timeline_wait {
+	__u64 handles;
+	__u64 points;
+	__s64 timeout_nsec;
+	__u32 count_handles;
+	__u32 flags;
+	__u32 first_signaled;
+	__u32 pad;
+};
+
+struct drm_syncobj_create {
+	__u32 handle;
+	__u32 flags;
+};
+
+struct drm_syncobj_destroy {
+	__u32 handle;
+	__u32 pad;
+};
+
+struct drm_syncobj_handle {
+	__u32 handle;
+	__u32 flags;
+	__s32 fd;
+	__u32 pad;
+};
+
+struct drm_syncobj_eventfd {
+	__u32 handle;
+	__u32 flags;
+	__u64 point;
+	__s32 fd;
+	__u32 pad;
+};
+
+struct drm_syncobj_array {
+	__u64 handles;
+	__u32 count_handles;
+	__u32 pad;
+};
+
+struct drm_syncobj_timeline_array {
+	__u64 handles;
+	__u64 points;
+	__u32 count_handles;
+	__u32 flags;
+};
+
+struct class_attribute {
+	struct attribute attr;
+	ssize_t (*show)(const struct class *, const struct class_attribute *, char *);
+	ssize_t (*store)(const struct class *, const struct class_attribute *, const char *, size_t);
+};
+
+struct class_attribute_string {
+	struct class_attribute attr;
+	char *str;
+};
+
+struct component_ops {
+	int (*bind)(struct device *, struct device *, void *);
+	void (*unbind)(struct device *, struct device *, void *);
+};
+
+typedef void (*btf_trace_drm_vblank_event)(void *, int, unsigned int, ktime_t, bool);
+
+typedef void (*btf_trace_drm_vblank_event_queued)(void *, struct drm_file *, int, unsigned int);
+
+typedef void (*btf_trace_drm_vblank_event_delivered)(void *, struct drm_file *, int, unsigned int);
+
+struct trace_event_raw_drm_vblank_event {
+	struct trace_entry ent;
+	int crtc;
+	unsigned int seq;
+	ktime_t time;
+	bool high_prec;
+	char __data[0];
+};
+
+struct trace_event_raw_drm_vblank_event_queued {
+	struct trace_entry ent;
+	struct drm_file *file;
+	int crtc;
+	unsigned int seq;
+	char __data[0];
+};
+
+struct trace_event_raw_drm_vblank_event_delivered {
+	struct trace_entry ent;
+	struct drm_file *file;
+	int crtc;
+	unsigned int seq;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_drm_vblank_event {};
+
+struct trace_event_data_offsets_drm_vblank_event_queued {};
+
+struct trace_event_data_offsets_drm_vblank_event_delivered {};
+
+enum drm_vblank_seq_type {
+	_DRM_VBLANK_ABSOLUTE = 0,
+	_DRM_VBLANK_RELATIVE = 1,
+	_DRM_VBLANK_HIGH_CRTC_MASK = 62,
+	_DRM_VBLANK_EVENT = 67108864,
+	_DRM_VBLANK_FLIP = 134217728,
+	_DRM_VBLANK_NEXTONMISS = 268435456,
+	_DRM_VBLANK_SECONDARY = 536870912,
+	_DRM_VBLANK_SIGNAL = 1073741824,
+};
+
+struct drm_wait_vblank_request {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	unsigned long signal;
+};
+
+struct drm_wait_vblank_reply {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	long tval_sec;
+	long tval_usec;
+};
+
+union drm_wait_vblank {
+	struct drm_wait_vblank_request request;
+	struct drm_wait_vblank_reply reply;
+};
+
+typedef bool (*drm_vblank_get_scanout_position_func)(struct drm_crtc *, bool, int *, int *, ktime_t *, ktime_t *, const struct drm_display_mode *);
+
+struct drm_modeset_ctl {
+	__u32 crtc;
+	__u32 cmd;
+};
+
+struct drm_crtc_get_sequence {
+	__u32 crtc_id;
+	__u32 active;
+	__u64 sequence;
+	__s64 sequence_ns;
+};
+
+struct drm_crtc_queue_sequence {
+	__u32 crtc_id;
+	__u32 flags;
+	__u64 sequence;
+	__u64 user_data;
+};
+
+struct drm_vblank_work {
+	struct kthread_work base;
+	struct drm_vblank_crtc *vblank;
+	u64 count;
+	int cancelling;
+	struct list_head node;
+};
+
+struct drm_vma_offset_file {
+	struct rb_node vm_rb;
+	struct drm_file *vm_tag;
+	unsigned long vm_count;
+};
+
+struct drm_gpuva_op;
+
+struct drm_gpuva_fn_ops {
+	struct drm_gpuva_op * (*op_alloc)();
+	void (*op_free)(struct drm_gpuva_op *);
+	int (*sm_step_map)(struct drm_gpuva_op *, void *);
+	int (*sm_step_remap)(struct drm_gpuva_op *, void *);
+	int (*sm_step_unmap)(struct drm_gpuva_op *, void *);
+};
+
+struct drm_gpuva_op_map {
+	struct {
+		u64 addr;
+		u64 range;
+	} va;
+	struct {
+		u64 offset;
+		struct drm_gem_object *obj;
+	} gem;
+};
+
+struct drm_gpuva_op_unmap;
+
+struct drm_gpuva_op_remap {
+	struct drm_gpuva_op_map *prev;
+	struct drm_gpuva_op_map *next;
+	struct drm_gpuva_op_unmap *unmap;
+};
+
+struct drm_gpuva;
+
+struct drm_gpuva_op_unmap {
+	struct drm_gpuva *va;
+	bool keep;
+};
+
+struct drm_gpuva_op_prefetch {
+	struct drm_gpuva *va;
+};
+
+enum drm_gpuva_op_type {
+	DRM_GPUVA_OP_MAP = 0,
+	DRM_GPUVA_OP_REMAP = 1,
+	DRM_GPUVA_OP_UNMAP = 2,
+	DRM_GPUVA_OP_PREFETCH = 3,
+};
+
+struct drm_gpuva_op {
+	struct list_head entry;
+	enum drm_gpuva_op_type op;
+	union {
+		struct drm_gpuva_op_map map;
+		struct drm_gpuva_op_remap remap;
+		struct drm_gpuva_op_unmap unmap;
+		struct drm_gpuva_op_prefetch prefetch;
+	};
+};
+
+enum drm_gpuva_flags {
+	DRM_GPUVA_INVALIDATED = 1,
+	DRM_GPUVA_SPARSE = 2,
+	DRM_GPUVA_USERBITS = 4,
+};
+
+struct drm_gpuva_manager;
+
+struct drm_gpuva {
+	struct drm_gpuva_manager *mgr;
+	enum drm_gpuva_flags flags;
+	struct {
+		u64 addr;
+		u64 range;
+	} va;
+	struct {
+		u64 offset;
+		struct drm_gem_object *obj;
+		struct list_head entry;
+	} gem;
+	struct {
+		struct rb_node node;
+		struct list_head entry;
+		u64 __subtree_last;
+	} rb;
+};
+
+struct drm_gpuva_manager {
+	const char *name;
+	u64 mm_start;
+	u64 mm_range;
+	struct {
+		struct rb_root_cached tree;
+		struct list_head list;
+	} rb;
+	struct drm_gpuva kernel_alloc_node;
+	const struct drm_gpuva_fn_ops *ops;
+};
+
+struct drm_gpuva_ops {
+	struct list_head list;
+};
+
+typedef int drm_ioctl_compat_t(struct file *, unsigned int, unsigned long);
+
+struct drm_version_32 {
+	int version_major;
+	int version_minor;
+	int version_patchlevel;
+	u32 name_len;
+	u32 name;
+	u32 date_len;
+	u32 date;
+	u32 desc_len;
+	u32 desc;
+};
+
+typedef struct drm_version_32 drm_version32_t;
+
+struct drm_unique32 {
+	u32 unique_len;
+	u32 unique;
+};
+
+typedef struct drm_unique32 drm_unique32_t;
+
+struct drm_client32 {
+	int idx;
+	int auth;
+	u32 pid;
+	u32 uid;
+	u32 magic;
+	u32 iocs;
+};
+
+typedef struct drm_client32 drm_client32_t;
+
+struct drm_stats32 {
+	u32 count;
+	struct {
+		u32 value;
+		enum drm_stat_type type;
+	} data[15];
+};
+
+typedef struct drm_stats32 drm_stats32_t;
+
+struct drm_wait_vblank_request32 {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	u32 signal;
+};
+
+struct drm_wait_vblank_reply32 {
+	enum drm_vblank_seq_type type;
+	unsigned int sequence;
+	s32 tval_sec;
+	s32 tval_usec;
+};
+
+union drm_wait_vblank32 {
+	struct drm_wait_vblank_request32 request;
+	struct drm_wait_vblank_reply32 reply;
+};
+
+typedef union drm_wait_vblank32 drm_wait_vblank32_t;
+
+struct drm_mode_fb_cmd232 {
+	u32 fb_id;
+	u32 width;
+	u32 height;
+	u32 pixel_format;
+	u32 flags;
+	u32 handles[4];
+	u32 pitches[4];
+	u32 offsets[4];
+	u64 modifier[4];
+} __attribute__((packed));
+
+enum {
+	FB_BLANK_UNBLANK = 0,
+	FB_BLANK_NORMAL = 1,
+	FB_BLANK_VSYNC_SUSPEND = 2,
+	FB_BLANK_HSYNC_SUSPEND = 3,
+	FB_BLANK_POWERDOWN = 4,
+};
+
+struct drm_panel_follower_funcs;
+
+struct drm_panel_follower {
+	const struct drm_panel_follower_funcs *funcs;
+	struct list_head list;
+	struct drm_panel *panel;
+};
+
+struct drm_panel_follower_funcs {
+	int (*panel_prepared)(struct drm_panel_follower *);
+	int (*panel_unpreparing)(struct drm_panel_follower *);
+};
+
+enum drm_of_lvds_pixels {
+	DRM_OF_LVDS_EVEN = 1,
+	DRM_OF_LVDS_ODD = 2,
+};
+
+enum drm_lvds_dual_link_pixels {
+	DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS = 0,
+	DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS = 1,
+};
+
+enum mipi_dsi_pixel_format {
+	MIPI_DSI_FMT_RGB888 = 0,
+	MIPI_DSI_FMT_RGB666 = 1,
+	MIPI_DSI_FMT_RGB666_PACKED = 2,
+	MIPI_DSI_FMT_RGB565 = 3,
+};
+
+struct component_master_ops {
+	int (*bind)(struct device *);
+	void (*unbind)(struct device *);
+};
+
+struct of_endpoint {
+	unsigned int port;
+	unsigned int id;
+	const struct device_node *local_node;
+};
+
+struct mipi_dsi_host_ops;
+
+struct mipi_dsi_host {
+	struct device *dev;
+	const struct mipi_dsi_host_ops *ops;
+	struct list_head list;
+};
+
+struct mipi_dsi_device;
+
+struct mipi_dsi_msg;
+
+struct mipi_dsi_host_ops {
+	int (*attach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
+	int (*detach)(struct mipi_dsi_host *, struct mipi_dsi_device *);
+	ssize_t (*transfer)(struct mipi_dsi_host *, const struct mipi_dsi_msg *);
+};
+
+struct drm_dsc_config;
+
+struct mipi_dsi_device {
+	struct mipi_dsi_host *host;
+	struct device dev;
+	bool attached;
+	char name[20];
+	unsigned int channel;
+	unsigned int lanes;
+	enum mipi_dsi_pixel_format format;
+	unsigned long mode_flags;
+	unsigned long hs_rate;
+	unsigned long lp_rate;
+	struct drm_dsc_config *dsc;
+};
+
+struct mipi_dsi_msg {
+	u8 channel;
+	u8 type;
+	u16 flags;
+	size_t tx_len;
+	const void *tx_buf;
+	size_t rx_len;
+	void *rx_buf;
+};
+
+struct drm_info_list;
+
+struct drm_info_node {
+	struct drm_minor *minor;
+	const struct drm_info_list *info_ent;
+	struct list_head list;
+	struct dentry *dent;
+};
+
+struct drm_info_list {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+	u32 driver_features;
+	void *data;
+};
+
+struct drm_dmi_panel_orientation_data {
+	int width;
+	int height;
+	const char * const *bios_dates;
+	int orientation;
+};
+
+struct drm_gem_shmem_object {
+	struct drm_gem_object base;
+	struct page **pages;
+	unsigned int pages_use_count;
+	int madv;
+	struct list_head madv_list;
+	struct sg_table *sgt;
+	void *vaddr;
+	unsigned int vmap_use_count;
+	bool pages_mark_dirty_on_put: 1;
+	bool pages_mark_accessed_on_put: 1;
+	bool map_wc: 1;
+};
+
+struct drm_bridge_connector {
+	struct drm_connector base;
+	struct drm_encoder *encoder;
+	struct drm_bridge *bridge_edid;
+	struct drm_bridge *bridge_hpd;
+	struct drm_bridge *bridge_detect;
+	struct drm_bridge *bridge_modes;
+};
+
+struct drm_atomic_helper_damage_iter {
+	struct drm_rect plane_src;
+	const struct drm_rect *clips;
+	uint32_t num_clips;
+	uint32_t curr_clip;
+	bool full_update;
+};
+
+enum i2c_alert_protocol {
+	I2C_PROTOCOL_SMBUS_ALERT = 0,
+	I2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,
+};
+
+struct i2c_client;
+
+struct i2c_device_id;
+
+struct i2c_board_info;
+
+struct i2c_driver {
+	unsigned int class;
+	int (*probe)(struct i2c_client *);
+	void (*remove)(struct i2c_client *);
+	void (*shutdown)(struct i2c_client *);
+	void (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);
+	int (*command)(struct i2c_client *, unsigned int, void *);
+	struct device_driver driver;
+	const struct i2c_device_id *id_table;
+	int (*detect)(struct i2c_client *, struct i2c_board_info *);
+	const unsigned short *address_list;
+	struct list_head clients;
+	u32 flags;
+};
+
+struct i2c_client {
+	unsigned short flags;
+	unsigned short addr;
+	char name[20];
+	struct i2c_adapter *adapter;
+	struct device dev;
+	int init_irq;
+	int irq;
+	struct list_head detected;
+	void *devres_group_id;
+};
+
+struct i2c_device_id {
+	char name[20];
+	kernel_ulong_t driver_data;
+};
+
+struct i2c_board_info {
+	char type[20];
+	unsigned short flags;
+	unsigned short addr;
+	const char *dev_name;
+	void *platform_data;
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	const struct software_node *swnode;
+	const struct resource *resources;
+	unsigned int num_resources;
+	int irq;
+};
+
+struct drm_encoder_slave;
+
+struct drm_i2c_encoder_driver {
+	struct i2c_driver i2c_driver;
+	int (*encoder_init)(struct i2c_client *, struct drm_device *, struct drm_encoder_slave *);
+};
+
+struct drm_encoder_slave_funcs;
+
+struct drm_encoder_slave {
+	struct drm_encoder base;
+	const struct drm_encoder_slave_funcs *slave_funcs;
+	void *slave_priv;
+	void *bus_priv;
+};
+
+struct drm_encoder_slave_funcs {
+	void (*set_config)(struct drm_encoder *, void *);
+	void (*destroy)(struct drm_encoder *);
+	void (*dpms)(struct drm_encoder *, int);
+	void (*save)(struct drm_encoder *);
+	void (*restore)(struct drm_encoder *);
+	bool (*mode_fixup)(struct drm_encoder *, const struct drm_display_mode *, struct drm_display_mode *);
+	int (*mode_valid)(struct drm_encoder *, struct drm_display_mode *);
+	void (*mode_set)(struct drm_encoder *, struct drm_display_mode *, struct drm_display_mode *);
+	enum drm_connector_status (*detect)(struct drm_encoder *, struct drm_connector *);
+	int (*get_modes)(struct drm_encoder *, struct drm_connector *);
+	int (*create_resources)(struct drm_encoder *, struct drm_connector *);
+	int (*set_property)(struct drm_encoder *, struct drm_connector *, struct drm_property *, uint64_t);
+};
+
+struct drm_flip_work;
+
+typedef void (*drm_flip_func_t)(struct drm_flip_work *, void *);
+
+struct drm_flip_work {
+	const char *name;
+	drm_flip_func_t func;
+	struct work_struct worker;
+	struct list_head queued;
+	struct list_head commited;
+	spinlock_t lock;
+};
+
+struct drm_flip_task {
+	struct list_head node;
+	void *data;
+};
+
+struct drm_shadow_plane_state {
+	struct drm_plane_state base;
+	struct iosys_map map[4];
+	struct iosys_map data[4];
+};
+
+struct drm_simple_display_pipe_funcs;
+
+struct drm_simple_display_pipe {
+	struct drm_crtc crtc;
+	struct drm_plane plane;
+	struct drm_encoder encoder;
+	struct drm_connector *connector;
+	const struct drm_simple_display_pipe_funcs *funcs;
+};
+
+struct drm_simple_display_pipe_funcs {
+	enum drm_mode_status (*mode_valid)(struct drm_simple_display_pipe *, const struct drm_display_mode *);
+	void (*enable)(struct drm_simple_display_pipe *, struct drm_crtc_state *, struct drm_plane_state *);
+	void (*disable)(struct drm_simple_display_pipe *);
+	int (*check)(struct drm_simple_display_pipe *, struct drm_plane_state *, struct drm_crtc_state *);
+	void (*update)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	int (*prepare_fb)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	void (*cleanup_fb)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	int (*begin_fb_access)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	void (*end_fb_access)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+	int (*enable_vblank)(struct drm_simple_display_pipe *);
+	void (*disable_vblank)(struct drm_simple_display_pipe *);
+	void (*reset_crtc)(struct drm_simple_display_pipe *);
+	struct drm_crtc_state * (*duplicate_crtc_state)(struct drm_simple_display_pipe *);
+	void (*destroy_crtc_state)(struct drm_simple_display_pipe *, struct drm_crtc_state *);
+	void (*reset_plane)(struct drm_simple_display_pipe *);
+	struct drm_plane_state * (*duplicate_plane_state)(struct drm_simple_display_pipe *);
+	void (*destroy_plane_state)(struct drm_simple_display_pipe *, struct drm_plane_state *);
+};
+
+struct drm_afbc_framebuffer {
+	struct drm_framebuffer base;
+	u32 block_width;
+	u32 block_height;
+	u32 aligned_width;
+	u32 aligned_height;
+	u32 offset;
+	u32 afbc_size;
+};
+
+struct drm_fb_helper_funcs;
+
+struct drm_fb_helper {
+	struct drm_client_dev client;
+	struct drm_client_buffer *buffer;
+	struct drm_framebuffer *fb;
+	struct drm_device *dev;
+	const struct drm_fb_helper_funcs *funcs;
+	struct fb_info *info;
+	u32 pseudo_palette[17];
+	struct drm_clip_rect damage_clip;
+	spinlock_t damage_lock;
+	struct work_struct damage_work;
+	struct work_struct resume_work;
+	struct mutex lock;
+	struct list_head kernel_fb_list;
+	bool delayed_hotplug;
+	bool deferred_setup;
+	int preferred_bpp;
+};
+
+struct drm_fb_helper_surface_size;
+
+struct drm_fb_helper_funcs {
+	int (*fb_probe)(struct drm_fb_helper *, struct drm_fb_helper_surface_size *);
+	int (*fb_dirty)(struct drm_fb_helper *, struct drm_clip_rect *);
+};
+
+struct drm_fb_helper_surface_size {
+	u32 fb_width;
+	u32 fb_height;
+	u32 surface_width;
+	u32 surface_height;
+	u32 surface_bpp;
+	u32 surface_depth;
+};
+
+struct ewma_psr_time {
+	unsigned long internal;
+};
+
+struct drm_self_refresh_data {
+	struct drm_crtc *crtc;
+	struct delayed_work entry_work;
+	struct mutex avg_mutex;
+	struct ewma_psr_time entry_avg_ms;
+	struct ewma_psr_time exit_avg_ms;
+};
+
+struct panel_bridge {
+	struct drm_bridge bridge;
+	struct drm_connector connector;
+	struct drm_panel *panel;
+	u32 connector_type;
+};
+
+enum {
+	MIPI_DSI_V_SYNC_START = 1,
+	MIPI_DSI_V_SYNC_END = 17,
+	MIPI_DSI_H_SYNC_START = 33,
+	MIPI_DSI_H_SYNC_END = 49,
+	MIPI_DSI_COMPRESSION_MODE = 7,
+	MIPI_DSI_END_OF_TRANSMISSION = 8,
+	MIPI_DSI_COLOR_MODE_OFF = 2,
+	MIPI_DSI_COLOR_MODE_ON = 18,
+	MIPI_DSI_SHUTDOWN_PERIPHERAL = 34,
+	MIPI_DSI_TURN_ON_PERIPHERAL = 50,
+	MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM = 3,
+	MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM = 19,
+	MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM = 35,
+	MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM = 4,
+	MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM = 20,
+	MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM = 36,
+	MIPI_DSI_DCS_SHORT_WRITE = 5,
+	MIPI_DSI_DCS_SHORT_WRITE_PARAM = 21,
+	MIPI_DSI_DCS_READ = 6,
+	MIPI_DSI_EXECUTE_QUEUE = 22,
+	MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE = 55,
+	MIPI_DSI_NULL_PACKET = 9,
+	MIPI_DSI_BLANKING_PACKET = 25,
+	MIPI_DSI_GENERIC_LONG_WRITE = 41,
+	MIPI_DSI_DCS_LONG_WRITE = 57,
+	MIPI_DSI_PICTURE_PARAMETER_SET = 10,
+	MIPI_DSI_COMPRESSED_PIXEL_STREAM = 11,
+	MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20 = 12,
+	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24 = 28,
+	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16 = 44,
+	MIPI_DSI_PACKED_PIXEL_STREAM_30 = 13,
+	MIPI_DSI_PACKED_PIXEL_STREAM_36 = 29,
+	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12 = 61,
+	MIPI_DSI_PACKED_PIXEL_STREAM_16 = 14,
+	MIPI_DSI_PACKED_PIXEL_STREAM_18 = 30,
+	MIPI_DSI_PIXEL_STREAM_3BYTE_18 = 46,
+	MIPI_DSI_PACKED_PIXEL_STREAM_24 = 62,
+};
+
+enum {
+	MIPI_DCS_NOP = 0,
+	MIPI_DCS_SOFT_RESET = 1,
+	MIPI_DCS_GET_COMPRESSION_MODE = 3,
+	MIPI_DCS_GET_DISPLAY_ID = 4,
+	MIPI_DCS_GET_ERROR_COUNT_ON_DSI = 5,
+	MIPI_DCS_GET_RED_CHANNEL = 6,
+	MIPI_DCS_GET_GREEN_CHANNEL = 7,
+	MIPI_DCS_GET_BLUE_CHANNEL = 8,
+	MIPI_DCS_GET_DISPLAY_STATUS = 9,
+	MIPI_DCS_GET_POWER_MODE = 10,
+	MIPI_DCS_GET_ADDRESS_MODE = 11,
+	MIPI_DCS_GET_PIXEL_FORMAT = 12,
+	MIPI_DCS_GET_DISPLAY_MODE = 13,
+	MIPI_DCS_GET_SIGNAL_MODE = 14,
+	MIPI_DCS_GET_DIAGNOSTIC_RESULT = 15,
+	MIPI_DCS_ENTER_SLEEP_MODE = 16,
+	MIPI_DCS_EXIT_SLEEP_MODE = 17,
+	MIPI_DCS_ENTER_PARTIAL_MODE = 18,
+	MIPI_DCS_ENTER_NORMAL_MODE = 19,
+	MIPI_DCS_GET_IMAGE_CHECKSUM_RGB = 20,
+	MIPI_DCS_GET_IMAGE_CHECKSUM_CT = 21,
+	MIPI_DCS_EXIT_INVERT_MODE = 32,
+	MIPI_DCS_ENTER_INVERT_MODE = 33,
+	MIPI_DCS_SET_GAMMA_CURVE = 38,
+	MIPI_DCS_SET_DISPLAY_OFF = 40,
+	MIPI_DCS_SET_DISPLAY_ON = 41,
+	MIPI_DCS_SET_COLUMN_ADDRESS = 42,
+	MIPI_DCS_SET_PAGE_ADDRESS = 43,
+	MIPI_DCS_WRITE_MEMORY_START = 44,
+	MIPI_DCS_WRITE_LUT = 45,
+	MIPI_DCS_READ_MEMORY_START = 46,
+	MIPI_DCS_SET_PARTIAL_ROWS = 48,
+	MIPI_DCS_SET_PARTIAL_COLUMNS = 49,
+	MIPI_DCS_SET_SCROLL_AREA = 51,
+	MIPI_DCS_SET_TEAR_OFF = 52,
+	MIPI_DCS_SET_TEAR_ON = 53,
+	MIPI_DCS_SET_ADDRESS_MODE = 54,
+	MIPI_DCS_SET_SCROLL_START = 55,
+	MIPI_DCS_EXIT_IDLE_MODE = 56,
+	MIPI_DCS_ENTER_IDLE_MODE = 57,
+	MIPI_DCS_SET_PIXEL_FORMAT = 58,
+	MIPI_DCS_WRITE_MEMORY_CONTINUE = 60,
+	MIPI_DCS_SET_3D_CONTROL = 61,
+	MIPI_DCS_READ_MEMORY_CONTINUE = 62,
+	MIPI_DCS_GET_3D_CONTROL = 63,
+	MIPI_DCS_SET_VSYNC_TIMING = 64,
+	MIPI_DCS_SET_TEAR_SCANLINE = 68,
+	MIPI_DCS_GET_SCANLINE = 69,
+	MIPI_DCS_SET_DISPLAY_BRIGHTNESS = 81,
+	MIPI_DCS_GET_DISPLAY_BRIGHTNESS = 82,
+	MIPI_DCS_WRITE_CONTROL_DISPLAY = 83,
+	MIPI_DCS_GET_CONTROL_DISPLAY = 84,
+	MIPI_DCS_WRITE_POWER_SAVE = 85,
+	MIPI_DCS_GET_POWER_SAVE = 86,
+	MIPI_DCS_SET_CABC_MIN_BRIGHTNESS = 94,
+	MIPI_DCS_GET_CABC_MIN_BRIGHTNESS = 95,
+	MIPI_DCS_READ_DDB_START = 161,
+	MIPI_DCS_READ_PPS_START = 162,
+	MIPI_DCS_READ_DDB_CONTINUE = 168,
+	MIPI_DCS_READ_PPS_CONTINUE = 169,
+};
+
+enum mipi_dsi_dcs_tear_mode {
+	MIPI_DSI_DCS_TEAR_MODE_VBLANK = 0,
+	MIPI_DSI_DCS_TEAR_MODE_VHBLANK = 1,
+};
+
+struct drm_dsc_rc_range_parameters {
+	u8 range_min_qp;
+	u8 range_max_qp;
+	u8 range_bpg_offset;
+};
+
+struct drm_dsc_config {
+	u8 line_buf_depth;
+	u8 bits_per_component;
+	bool convert_rgb;
+	u8 slice_count;
+	u16 slice_width;
+	u16 slice_height;
+	bool simple_422;
+	u16 pic_width;
+	u16 pic_height;
+	u8 rc_tgt_offset_high;
+	u8 rc_tgt_offset_low;
+	u16 bits_per_pixel;
+	u8 rc_edge_factor;
+	u8 rc_quant_incr_limit1;
+	u8 rc_quant_incr_limit0;
+	u16 initial_xmit_delay;
+	u16 initial_dec_delay;
+	bool block_pred_enable;
+	u8 first_line_bpg_offset;
+	u16 initial_offset;
+	u16 rc_buf_thresh[14];
+	struct drm_dsc_rc_range_parameters rc_range_params[15];
+	u16 rc_model_size;
+	u8 flatness_min_qp;
+	u8 flatness_max_qp;
+	u8 initial_scale_value;
+	u16 scale_decrement_interval;
+	u16 scale_increment_interval;
+	u16 nfl_bpg_offset;
+	u16 slice_bpg_offset;
+	u16 final_offset;
+	bool vbr_enable;
+	u8 mux_word_size;
+	u16 slice_chunk_size;
+	u16 rc_bits;
+	u8 dsc_version_minor;
+	u8 dsc_version_major;
+	bool native_422;
+	bool native_420;
+	u8 second_line_bpg_offset;
+	u16 nsl_bpg_offset;
+	u16 second_line_offset_adj;
+};
+
+struct mipi_dsi_driver {
+	struct device_driver driver;
+	int (*probe)(struct mipi_dsi_device *);
+	void (*remove)(struct mipi_dsi_device *);
+	void (*shutdown)(struct mipi_dsi_device *);
+};
+
+struct mipi_dsi_device_info {
+	char type[20];
+	u32 channel;
+	struct device_node *node;
+};
+
+struct mipi_dsi_packet {
+	size_t size;
+	u8 header[4];
+	size_t payload_length;
+	const u8 *payload;
+};
+
+struct drm_dsc_picture_parameter_set {
+	u8 dsc_version;
+	u8 pps_identifier;
+	u8 pps_reserved;
+	u8 pps_3;
+	u8 pps_4;
+	u8 bits_per_pixel_low;
+	__be16 pic_height;
+	__be16 pic_width;
+	__be16 slice_height;
+	__be16 slice_width;
+	__be16 chunk_size;
+	u8 initial_xmit_delay_high;
+	u8 initial_xmit_delay_low;
+	__be16 initial_dec_delay;
+	u8 pps20_reserved;
+	u8 initial_scale_value;
+	__be16 scale_increment_interval;
+	u8 scale_decrement_interval_high;
+	u8 scale_decrement_interval_low;
+	u8 pps26_reserved;
+	u8 first_line_bpg_offset;
+	__be16 nfl_bpg_offset;
+	__be16 slice_bpg_offset;
+	__be16 initial_offset;
+	__be16 final_offset;
+	u8 flatness_min_qp;
+	u8 flatness_max_qp;
+	__be16 rc_model_size;
+	u8 rc_edge_factor;
+	u8 rc_quant_incr_limit0;
+	u8 rc_quant_incr_limit1;
+	u8 rc_tgt_offset;
+	u8 rc_buf_thresh[14];
+	__be16 rc_range_parameters[15];
+	u8 native_422_420;
+	u8 second_line_bpg_offset;
+	__be16 nsl_bpg_offset;
+	__be16 second_line_offset_adj;
+	u32 pps_long_94_reserved;
+	u32 pps_long_98_reserved;
+	u32 pps_long_102_reserved;
+	u32 pps_long_106_reserved;
+	u32 pps_long_110_reserved;
+	u32 pps_long_114_reserved;
+	u32 pps_long_118_reserved;
+	u32 pps_long_122_reserved;
+	__be16 pps_short_126_reserved;
+} __attribute__((packed));
+
+struct ttm_kmap_iter;
+
+struct ttm_kmap_iter_ops {
+	void (*map_local)(struct ttm_kmap_iter *, struct iosys_map *, unsigned long);
+	void (*unmap_local)(struct ttm_kmap_iter *, struct iosys_map *);
+	bool maps_tt;
+};
+
+struct ttm_kmap_iter {
+	const struct ttm_kmap_iter_ops *ops;
+};
+
+enum ttm_caching {
+	ttm_uncached = 0,
+	ttm_write_combined = 1,
+	ttm_cached = 2,
+};
+
+enum ttm_bo_type {
+	ttm_bo_type_device = 0,
+	ttm_bo_type_kernel = 1,
+	ttm_bo_type_sg = 2,
+};
+
+struct ttm_tt;
+
+struct ttm_kmap_iter_tt {
+	struct ttm_kmap_iter base;
+	struct ttm_tt *tt;
+	pgprot_t prot;
+};
+
+struct ttm_tt {
+	struct page **pages;
+	uint32_t page_flags;
+	uint32_t num_pages;
+	struct sg_table *sg;
+	dma_addr_t *dma_address;
+	struct file *swap_storage;
+	enum ttm_caching caching;
+};
+
+struct ttm_device;
+
+struct ttm_resource;
+
+struct ttm_lru_bulk_move;
+
+struct ttm_buffer_object {
+	struct drm_gem_object base;
+	struct ttm_device *bdev;
+	enum ttm_bo_type type;
+	uint32_t page_alignment;
+	void (*destroy)(struct ttm_buffer_object *);
+	struct kref kref;
+	struct ttm_resource *resource;
+	struct ttm_tt *ttm;
+	bool deleted;
+	struct ttm_lru_bulk_move *bulk_move;
+	unsigned int priority;
+	unsigned int pin_count;
+	struct work_struct delayed_delete;
+	struct sg_table *sg;
+};
+
+struct ttm_resource_manager_func;
+
+struct ttm_resource_manager {
+	bool use_type;
+	bool use_tt;
+	struct ttm_device *bdev;
+	uint64_t size;
+	const struct ttm_resource_manager_func *func;
+	spinlock_t move_lock;
+	struct dma_fence *move;
+	struct list_head lru[4];
+	uint64_t usage;
+};
+
+struct ttm_pool;
+
+struct ttm_pool_type {
+	struct ttm_pool *pool;
+	unsigned int order;
+	enum ttm_caching caching;
+	struct list_head shrinker_list;
+	spinlock_t lock;
+	struct list_head pages;
+};
+
+struct ttm_pool {
+	struct device *dev;
+	int nid;
+	bool use_dma_alloc;
+	bool use_dma32;
+	struct {
+		struct ttm_pool_type orders[11];
+	} caching[3];
+};
+
+struct ttm_device_funcs;
+
+struct ttm_device {
+	struct list_head device_list;
+	const struct ttm_device_funcs *funcs;
+	struct ttm_resource_manager sysman;
+	struct ttm_resource_manager *man_drv[8];
+	struct drm_vma_offset_manager *vma_manager;
+	struct ttm_pool pool;
+	spinlock_t lru_lock;
+	struct list_head pinned;
+	struct address_space *dev_mapping;
+	struct workqueue_struct *wq;
+};
+
+struct ttm_operation_ctx;
+
+struct ttm_place;
+
+struct ttm_placement;
+
+struct ttm_device_funcs {
+	struct ttm_tt * (*ttm_tt_create)(struct ttm_buffer_object *, uint32_t);
+	int (*ttm_tt_populate)(struct ttm_device *, struct ttm_tt *, struct ttm_operation_ctx *);
+	void (*ttm_tt_unpopulate)(struct ttm_device *, struct ttm_tt *);
+	void (*ttm_tt_destroy)(struct ttm_device *, struct ttm_tt *);
+	bool (*eviction_valuable)(struct ttm_buffer_object *, const struct ttm_place *);
+	void (*evict_flags)(struct ttm_buffer_object *, struct ttm_placement *);
+	int (*move)(struct ttm_buffer_object *, bool, struct ttm_operation_ctx *, struct ttm_resource *, struct ttm_place *);
+	void (*delete_mem_notify)(struct ttm_buffer_object *);
+	void (*swap_notify)(struct ttm_buffer_object *);
+	int (*io_mem_reserve)(struct ttm_device *, struct ttm_resource *);
+	void (*io_mem_free)(struct ttm_device *, struct ttm_resource *);
+	unsigned long (*io_mem_pfn)(struct ttm_buffer_object *, unsigned long);
+	int (*access_memory)(struct ttm_buffer_object *, unsigned long, void *, int, int);
+	void (*release_notify)(struct ttm_buffer_object *);
+};
+
+struct ttm_operation_ctx {
+	bool interruptible;
+	bool no_wait_gpu;
+	bool gfp_retry_mayfail;
+	bool allow_res_evict;
+	bool force_alloc;
+	struct dma_resv *resv;
+	uint64_t bytes_moved;
+};
+
+struct ttm_place {
+	unsigned int fpfn;
+	unsigned int lpfn;
+	uint32_t mem_type;
+	uint32_t flags;
+};
+
+struct ttm_bus_placement {
+	void *addr;
+	phys_addr_t offset;
+	bool is_iomem;
+	enum ttm_caching caching;
+};
+
+struct ttm_resource {
+	unsigned long start;
+	size_t size;
+	uint32_t mem_type;
+	uint32_t placement;
+	struct ttm_bus_placement bus;
+	struct ttm_buffer_object *bo;
+	struct list_head lru;
+};
+
+struct ttm_resource_manager_func {
+	int (*alloc)(struct ttm_resource_manager *, struct ttm_buffer_object *, const struct ttm_place *, struct ttm_resource **);
+	void (*free)(struct ttm_resource_manager *, struct ttm_resource *);
+	bool (*intersects)(struct ttm_resource_manager *, struct ttm_resource *, const struct ttm_place *, size_t);
+	bool (*compatible)(struct ttm_resource_manager *, struct ttm_resource *, const struct ttm_place *, size_t);
+	void (*debug)(struct ttm_resource_manager *, struct drm_printer *);
+};
+
+struct ttm_lru_bulk_move_pos {
+	struct ttm_resource *first;
+	struct ttm_resource *last;
+};
+
+struct ttm_lru_bulk_move {
+	struct ttm_lru_bulk_move_pos pos[32];
+};
+
+struct ttm_placement {
+	unsigned int num_placement;
+	const struct ttm_place *placement;
+	unsigned int num_busy_placement;
+	const struct ttm_place *busy_placement;
+};
+
+struct dma_resv_iter {
+	struct dma_resv *obj;
+	enum dma_resv_usage usage;
+	struct dma_fence *fence;
+	enum dma_resv_usage fence_usage;
+	unsigned int index;
+	struct dma_resv_list *fences;
+	unsigned int num_fences;
+	bool is_restarted;
+};
+
+struct ttm_resource_cursor {
+	unsigned int priority;
+};
+
+struct ttm_bo_kmap_obj {
+	void *virtual;
+	struct page *page;
+	enum {
+		ttm_bo_map_iomap = 129,
+		ttm_bo_map_vmap = 2,
+		ttm_bo_map_kmap = 3,
+		ttm_bo_map_premapped = 132,
+	} bo_kmap_type;
+	struct ttm_buffer_object *bo;
+};
+
+struct ttm_transfer_obj {
+	struct ttm_buffer_object base;
+	struct ttm_buffer_object *bo;
+};
+
+struct ttm_kmap_iter_linear_io {
+	struct ttm_kmap_iter base;
+	struct iosys_map dmap;
+	bool needs_unmap;
+};
+
+struct ttm_validate_buffer {
+	struct list_head head;
+	struct ttm_buffer_object *bo;
+	unsigned int num_shared;
+};
+
+struct ttm_range_mgr_node {
+	struct ttm_resource base;
+	struct drm_mm_node mm_nodes[0];
+};
+
+struct ttm_range_manager {
+	struct ttm_resource_manager manager;
+	struct drm_mm mm;
+	spinlock_t lock;
+};
+
+struct io_mapping;
+
+struct ttm_kmap_iter_iomap {
+	struct ttm_kmap_iter base;
+	struct io_mapping *iomap;
+	struct sg_table *st;
+	resource_size_t start;
+	struct {
+		struct scatterlist *sg;
+		unsigned long i;
+		unsigned long end;
+		unsigned long offs;
+	} cache;
+};
+
+struct io_mapping {
+	resource_size_t base;
+	unsigned long size;
+	pgprot_t prot;
+	void *iomem;
+};
+
+struct ttm_pool_dma {
+	dma_addr_t addr;
+	unsigned long vaddr;
+};
+
+struct ttm_global {
+	struct page *dummy_read_page;
+	struct list_head device_list;
+	atomic_t bo_count;
+};
+
+typedef void (*btf_trace_gpu_mem_total)(void *, uint32_t, uint32_t, uint64_t);
+
+struct trace_event_raw_gpu_mem_total {
+	struct trace_entry ent;
+	uint32_t gpu_id;
+	uint32_t pid;
+	uint64_t size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_gpu_mem_total {};
+
+struct aggregate_device;
+
+struct component {
+	struct list_head node;
+	struct aggregate_device *adev;
+	bool bound;
+	const struct component_ops *ops;
+	int subcomponent;
+	struct device *dev;
+};
+
+struct component_match;
+
+struct aggregate_device {
+	struct list_head node;
+	bool bound;
+	const struct component_master_ops *ops;
+	struct device *parent;
+	struct component_match *match;
+};
+
+struct component_match_array;
+
+struct component_match {
+	size_t alloc;
+	size_t num;
+	struct component_match_array *compare;
+};
+
+struct component_match_array {
+	void *data;
+	int (*compare)(struct device *, void *);
+	int (*compare_typed)(struct device *, int, void *);
+	void (*release)(struct device *, void *);
+	struct component *component;
+	bool duplicate;
+};
+
+struct device_private {
+	struct klist klist_children;
+	struct klist_node knode_parent;
+	struct klist_node knode_driver;
+	struct klist_node knode_bus;
+	struct klist_node knode_class;
+	struct list_head deferred_probe;
+	struct device_driver *async_driver;
+	char *deferred_probe_reason;
+	struct device *device;
+	u8 dead: 1;
+};
+
+struct driver_private {
+	struct kobject kobj;
+	struct klist klist_devices;
+	struct klist_node knode_bus;
+	struct module_kobject *mkobj;
+	struct device_driver *driver;
+};
+
+struct wake_irq {
+	struct device *dev;
+	unsigned int status;
+	int irq;
+	const char *name;
+};
+
+enum dpm_order {
+	DPM_ORDER_NONE = 0,
+	DPM_ORDER_DEV_AFTER_PARENT = 1,
+	DPM_ORDER_PARENT_BEFORE_DEV = 2,
+	DPM_ORDER_DEV_LAST = 3,
+};
+
+struct fwnode_link {
+	struct fwnode_handle *supplier;
+	struct list_head s_hook;
+	struct fwnode_handle *consumer;
+	struct list_head c_hook;
+	u8 flags;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+};
+
+struct class_dir {
+	struct kobject kobj;
+	const struct class *class;
+};
+
+struct root_device {
+	struct device dev;
+	struct module *owner;
+};
+
+struct subsys_private {
+	struct kset subsys;
+	struct kset *devices_kset;
+	struct list_head interfaces;
+	struct mutex mutex;
+	struct kset *drivers_kset;
+	struct klist klist_devices;
+	struct klist klist_drivers;
+	struct blocking_notifier_head bus_notifier;
+	unsigned int drivers_autoprobe: 1;
+	const struct bus_type *bus;
+	struct device *dev_root;
+	struct kset glue_dirs;
+	const struct class *class;
+	struct lock_class_key lock_key;
+};
+
+union device_attr_group_devres {
+	const struct attribute_group *group;
+	const struct attribute_group **groups;
+};
+
+struct subsys_interface {
+	const char *name;
+	struct bus_type *subsys;
+	struct list_head node;
+	int (*add_dev)(struct device *, struct subsys_interface *);
+	void (*remove_dev)(struct device *, struct subsys_interface *);
+};
+
+struct subsys_dev_iter {
+	struct klist_iter ki;
+	const struct device_type *type;
+};
+
+struct device_attach_data {
+	struct device *dev;
+	bool check_async;
+	bool want_async;
+	bool have_async;
+};
+
+struct class_compat {
+	struct kobject *kobj;
+};
+
+struct platform_object {
+	struct platform_device pdev;
+	char name[0];
+};
+
+struct irq_affinity_devres {
+	unsigned int count;
+	unsigned int irq[0];
+};
+
+struct cpu_attr {
+	struct device_attribute attr;
+	const struct cpumask * const map;
+};
+
+struct probe;
+
+struct kobj_map {
+	struct probe *probes[255];
+	struct mutex *lock;
+};
+
+struct probe {
+	struct probe *next;
+	dev_t dev;
+	unsigned long range;
+	struct module *owner;
+	kobj_probe_t *get;
+	int (*lock)(dev_t, void *);
+	void *data;
+};
+
+struct devres_node {
+	struct list_head entry;
+	dr_release_t release;
+	const char *name;
+	size_t size;
+};
+
+struct devres {
+	struct devres_node node;
+	u8 data[0];
+};
+
+struct devres_group {
+	struct devres_node node[2];
+	void *id;
+	int color;
+};
+
+struct action_devres {
+	void *data;
+	void (*action)(void *);
+};
+
+struct pages_devres {
+	unsigned long addr;
+	unsigned int order;
+};
+
+struct attribute_container;
+
+struct internal_container {
+	struct klist_node node;
+	struct attribute_container *cont;
+	struct device classdev;
+};
+
+struct attribute_container {
+	struct list_head node;
+	struct klist containers;
+	struct class *class;
+	const struct attribute_group *grp;
+	struct device_attribute **attrs;
+	int (*match)(struct attribute_container *, struct device *);
+	unsigned long flags;
+};
+
+struct transport_container;
+
+struct transport_class {
+	struct class class;
+	int (*setup)(struct transport_container *, struct device *, struct device *);
+	int (*configure)(struct transport_container *, struct device *, struct device *);
+	int (*remove)(struct transport_container *, struct device *, struct device *);
+};
+
+struct transport_container {
+	struct attribute_container ac;
+	const struct attribute_group *statistics;
+};
+
+struct anon_transport_class {
+	struct transport_class tclass;
+	struct attribute_container container;
+};
+
+typedef enum {
+	PHY_INTERFACE_MODE_NA = 0,
+	PHY_INTERFACE_MODE_INTERNAL = 1,
+	PHY_INTERFACE_MODE_MII = 2,
+	PHY_INTERFACE_MODE_GMII = 3,
+	PHY_INTERFACE_MODE_SGMII = 4,
+	PHY_INTERFACE_MODE_TBI = 5,
+	PHY_INTERFACE_MODE_REVMII = 6,
+	PHY_INTERFACE_MODE_RMII = 7,
+	PHY_INTERFACE_MODE_REVRMII = 8,
+	PHY_INTERFACE_MODE_RGMII = 9,
+	PHY_INTERFACE_MODE_RGMII_ID = 10,
+	PHY_INTERFACE_MODE_RGMII_RXID = 11,
+	PHY_INTERFACE_MODE_RGMII_TXID = 12,
+	PHY_INTERFACE_MODE_RTBI = 13,
+	PHY_INTERFACE_MODE_SMII = 14,
+	PHY_INTERFACE_MODE_XGMII = 15,
+	PHY_INTERFACE_MODE_XLGMII = 16,
+	PHY_INTERFACE_MODE_MOCA = 17,
+	PHY_INTERFACE_MODE_PSGMII = 18,
+	PHY_INTERFACE_MODE_QSGMII = 19,
+	PHY_INTERFACE_MODE_TRGMII = 20,
+	PHY_INTERFACE_MODE_100BASEX = 21,
+	PHY_INTERFACE_MODE_1000BASEX = 22,
+	PHY_INTERFACE_MODE_2500BASEX = 23,
+	PHY_INTERFACE_MODE_5GBASER = 24,
+	PHY_INTERFACE_MODE_RXAUI = 25,
+	PHY_INTERFACE_MODE_XAUI = 26,
+	PHY_INTERFACE_MODE_10GBASER = 27,
+	PHY_INTERFACE_MODE_25GBASER = 28,
+	PHY_INTERFACE_MODE_USXGMII = 29,
+	PHY_INTERFACE_MODE_10GKR = 30,
+	PHY_INTERFACE_MODE_QUSGMII = 31,
+	PHY_INTERFACE_MODE_1000BASEKX = 32,
+	PHY_INTERFACE_MODE_MAX = 33,
+} phy_interface_t;
+
+typedef void * (*devcon_match_fn_t)(const struct fwnode_handle *, const char *, void *);
+
+struct cache_type_info {
+	const char *size_prop;
+	const char *line_size_props[2];
+	const char *nr_sets_prop;
+};
+
+struct swnode {
+	struct kobject kobj;
+	struct fwnode_handle fwnode;
+	const struct software_node *node;
+	int id;
+	struct ida child_ids;
+	struct list_head entry;
+	struct list_head children;
+	struct swnode *parent;
+	unsigned int allocated: 1;
+	unsigned int managed: 1;
+};
+
+struct software_node_ref_args {
+	const struct software_node *node;
+	unsigned int nargs;
+	u64 args[8];
+};
+
+struct dev_pm_domain_attach_data {
+	const char * const *pd_names;
+	const u32 num_pd_names;
+	const u32 pd_flags;
+};
+
+struct dev_pm_domain_list {
+	struct device **pd_devs;
+	struct device_link **pd_links;
+	u32 num_pds;
+};
+
+typedef int (*pm_callback_t)(struct device *);
+
+struct suspend_stats {
+	int success;
+	int fail;
+	int failed_freeze;
+	int failed_prepare;
+	int failed_suspend;
+	int failed_suspend_late;
+	int failed_suspend_noirq;
+	int failed_resume;
+	int failed_resume_early;
+	int failed_resume_noirq;
+	int last_failed_dev;
+	char failed_devs[80];
+	int last_failed_errno;
+	int errno[2];
+	int last_failed_step;
+	u64 last_hw_sleep;
+	u64 total_hw_sleep;
+	u64 max_hw_sleep;
+	enum suspend_stat_step failed_steps[2];
+};
+
+struct firmware_fallback_config {
+	unsigned int force_sysfs_fallback;
+	unsigned int ignore_sysfs_fallback;
+	int old_timeout;
+	int loading_timeout;
+};
+
+struct firmware_cache {
+	spinlock_t lock;
+	struct list_head head;
+	int state;
+};
+
+enum fw_status {
+	FW_STATUS_UNKNOWN = 0,
+	FW_STATUS_LOADING = 1,
+	FW_STATUS_DONE = 2,
+	FW_STATUS_ABORTED = 3,
+};
+
+enum fw_opt {
+	FW_OPT_UEVENT = 1,
+	FW_OPT_NOWAIT = 2,
+	FW_OPT_USERHELPER = 4,
+	FW_OPT_NO_WARN = 8,
+	FW_OPT_NOCACHE = 16,
+	FW_OPT_NOFALLBACK_SYSFS = 32,
+	FW_OPT_FALLBACK_PLATFORM = 64,
+	FW_OPT_PARTIAL = 128,
+};
+
+struct fw_state {
+	struct completion completion;
+	enum fw_status status;
+};
+
+struct fw_priv {
+	struct kref ref;
+	struct list_head list;
+	struct firmware_cache *fwc;
+	struct fw_state fw_st;
+	void *data;
+	size_t size;
+	size_t allocated_size;
+	size_t offset;
+	u32 opt_flags;
+	bool is_paged_buf;
+	struct page **pages;
+	int nr_pages;
+	int page_array_size;
+	bool need_uevent;
+	struct list_head pending_list;
+	const char *fw_name;
+};
+
+struct firmware_work {
+	struct work_struct work;
+	struct module *module;
+	const char *name;
+	struct device *device;
+	void *context;
+	void (*cont)(const struct firmware *, void *);
+	u32 opt_flags;
+};
+
+struct fw_sysfs {
+	bool nowait;
+	struct device dev;
+	struct fw_priv *fw_priv;
+	struct firmware *fw;
+	void *fw_upload_priv;
+};
+
+struct builtin_fw {
+	char *name;
+	void *data;
+	unsigned long size;
+};
+
+struct for_each_memory_block_cb_data {
+	walk_memory_blocks_func_t func;
+	void *arg;
+};
+
+typedef void (*btf_trace_regmap_reg_write)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*regmap_lock)(void *);
+
+typedef void (*regmap_unlock)(void *);
+
+struct regmap_format {
+	size_t buf_size;
+	size_t reg_bytes;
+	size_t pad_bytes;
+	size_t val_bytes;
+	s8 reg_shift;
+	void (*format_write)(struct regmap *, unsigned int, unsigned int);
+	void (*format_reg)(void *, unsigned int, unsigned int);
+	void (*format_val)(void *, unsigned int, unsigned int);
+	unsigned int (*parse_val)(const void *);
+	void (*parse_inplace)(void *);
+};
+
+enum regcache_type {
+	REGCACHE_NONE = 0,
+	REGCACHE_RBTREE = 1,
+	REGCACHE_FLAT = 2,
+	REGCACHE_MAPLE = 3,
+};
+
+struct hwspinlock;
+
+struct regmap_bus;
+
+struct regmap_access_table;
+
+struct regcache_ops;
+
+struct reg_default;
+
+struct reg_sequence;
+
+struct regmap {
+	union {
+		struct mutex mutex;
+		struct {
+			spinlock_t spinlock;
+			unsigned long spinlock_flags;
+		};
+		struct {
+			raw_spinlock_t raw_spinlock;
+			unsigned long raw_spinlock_flags;
+		};
+	};
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	gfp_t alloc_flags;
+	unsigned int reg_base;
+	struct device *dev;
+	void *work_buf;
+	struct regmap_format format;
+	const struct regmap_bus *bus;
+	void *bus_context;
+	const char *name;
+	bool async;
+	spinlock_t async_lock;
+	wait_queue_head_t async_waitq;
+	struct list_head async_list;
+	struct list_head async_free;
+	int async_ret;
+	bool debugfs_disable;
+	struct dentry *debugfs;
+	const char *debugfs_name;
+	unsigned int debugfs_reg_len;
+	unsigned int debugfs_val_len;
+	unsigned int debugfs_tot_len;
+	struct list_head debugfs_off_cache;
+	struct mutex cache_lock;
+	unsigned int max_register;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	bool defer_caching;
+	unsigned long read_flag_mask;
+	unsigned long write_flag_mask;
+	int reg_shift;
+	int reg_stride;
+	int reg_stride_order;
+	bool force_write_field;
+	const struct regcache_ops *cache_ops;
+	enum regcache_type cache_type;
+	unsigned int cache_size_raw;
+	unsigned int cache_word_size;
+	unsigned int num_reg_defaults;
+	unsigned int num_reg_defaults_raw;
+	bool cache_only;
+	bool cache_bypass;
+	bool cache_free;
+	struct reg_default *reg_defaults;
+	const void *reg_defaults_raw;
+	void *cache;
+	bool cache_dirty;
+	bool no_sync_defaults;
+	struct reg_sequence *patch;
+	int patch_regs;
+	bool use_single_read;
+	bool use_single_write;
+	bool can_multi_write;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	struct rb_root range_tree;
+	void *selector_work_buf;
+	struct hwspinlock *hwlock;
+	bool can_sleep;
+};
+
+typedef int (*regmap_hw_write)(void *, const void *, size_t);
+
+typedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);
+
+struct regmap_async;
+
+typedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);
+
+typedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);
+
+typedef int (*regmap_hw_reg_noinc_write)(void *, unsigned int, const void *, size_t);
+
+typedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+
+typedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);
+
+typedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);
+
+typedef int (*regmap_hw_reg_noinc_read)(void *, unsigned int, void *, size_t);
+
+typedef void (*regmap_hw_free_context)(void *);
+
+typedef struct regmap_async * (*regmap_hw_async_alloc)();
+
+enum regmap_endian {
+	REGMAP_ENDIAN_DEFAULT = 0,
+	REGMAP_ENDIAN_BIG = 1,
+	REGMAP_ENDIAN_LITTLE = 2,
+	REGMAP_ENDIAN_NATIVE = 3,
+};
+
+struct regmap_bus {
+	bool fast_io;
+	bool free_on_exit;
+	regmap_hw_write write;
+	regmap_hw_gather_write gather_write;
+	regmap_hw_async_write async_write;
+	regmap_hw_reg_write reg_write;
+	regmap_hw_reg_noinc_write reg_noinc_write;
+	regmap_hw_reg_update_bits reg_update_bits;
+	regmap_hw_read read;
+	regmap_hw_reg_read reg_read;
+	regmap_hw_reg_noinc_read reg_noinc_read;
+	regmap_hw_free_context free_context;
+	regmap_hw_async_alloc async_alloc;
+	u8 read_flag_mask;
+	enum regmap_endian reg_format_endian_default;
+	enum regmap_endian val_format_endian_default;
+	size_t max_raw_read;
+	size_t max_raw_write;
+	u64 android_kabi_reserved1;
+};
+
+struct regmap_async {
+	struct list_head list;
+	struct regmap *map;
+	void *work_buf;
+};
+
+struct regmap_range;
+
+struct regmap_access_table {
+	const struct regmap_range *yes_ranges;
+	unsigned int n_yes_ranges;
+	const struct regmap_range *no_ranges;
+	unsigned int n_no_ranges;
+};
+
+struct regmap_range {
+	unsigned int range_min;
+	unsigned int range_max;
+};
+
+struct regcache_ops {
+	const char *name;
+	enum regcache_type type;
+	int (*init)(struct regmap *);
+	int (*exit)(struct regmap *);
+	void (*debugfs_init)(struct regmap *);
+	int (*read)(struct regmap *, unsigned int, unsigned int *);
+	int (*write)(struct regmap *, unsigned int, unsigned int);
+	int (*sync)(struct regmap *, unsigned int, unsigned int);
+	int (*drop)(struct regmap *, unsigned int, unsigned int);
+};
+
+struct reg_default {
+	unsigned int reg;
+	unsigned int def;
+};
+
+struct reg_sequence {
+	unsigned int reg;
+	unsigned int def;
+	unsigned int delay_us;
+};
+
+typedef void (*btf_trace_regmap_reg_read)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap *, unsigned int, unsigned int);
+
+typedef void (*btf_trace_regmap_bulk_write)(void *, struct regmap *, unsigned int, const void *, int);
+
+typedef void (*btf_trace_regmap_bulk_read)(void *, struct regmap *, unsigned int, const void *, int);
+
+typedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regcache_sync)(void *, struct regmap *, const char *, const char *);
+
+typedef void (*btf_trace_regmap_cache_only)(void *, struct regmap *, bool);
+
+typedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap *, bool);
+
+typedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap *, unsigned int, int);
+
+typedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap *);
+
+typedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap *);
+
+typedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap *);
+
+typedef void (*btf_trace_regcache_drop_region)(void *, struct regmap *, unsigned int, unsigned int);
+
+struct trace_event_raw_regmap_reg {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	unsigned int val;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_bulk {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	u32 __data_loc_buf;
+	int val_len;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_block {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int reg;
+	int count;
+	char __data[0];
+};
+
+struct trace_event_raw_regcache_sync {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_status;
+	u32 __data_loc_type;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_bool {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int flag;
+	char __data[0];
+};
+
+struct trace_event_raw_regmap_async {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_regcache_drop_region {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int from;
+	unsigned int to;
+	char __data[0];
+};
+
+struct regmap_range_node {
+	struct rb_node node;
+	const char *name;
+	struct regmap *map;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
+};
+
+struct trace_event_data_offsets_regmap_reg {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_bulk {
+	u32 name;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_regmap_block {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_bool {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regmap_async {
+	u32 name;
+};
+
+struct trace_event_data_offsets_regcache_drop_region {
+	u32 name;
+};
+
+struct regmap_range_cfg;
+
+struct regmap_config {
+	const char *name;
+	int reg_bits;
+	int reg_stride;
+	int reg_shift;
+	unsigned int reg_base;
+	int pad_bits;
+	int val_bits;
+	bool (*writeable_reg)(struct device *, unsigned int);
+	bool (*readable_reg)(struct device *, unsigned int);
+	bool (*volatile_reg)(struct device *, unsigned int);
+	bool (*precious_reg)(struct device *, unsigned int);
+	bool (*writeable_noinc_reg)(struct device *, unsigned int);
+	bool (*readable_noinc_reg)(struct device *, unsigned int);
+	bool disable_locking;
+	regmap_lock lock;
+	regmap_unlock unlock;
+	void *lock_arg;
+	int (*reg_read)(void *, unsigned int, unsigned int *);
+	int (*reg_write)(void *, unsigned int, unsigned int);
+	int (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);
+	int (*read)(void *, const void *, size_t, void *, size_t);
+	int (*write)(void *, const void *, size_t);
+	size_t max_raw_read;
+	size_t max_raw_write;
+	bool fast_io;
+	bool io_port;
+	unsigned int max_register;
+	const struct regmap_access_table *wr_table;
+	const struct regmap_access_table *rd_table;
+	const struct regmap_access_table *volatile_table;
+	const struct regmap_access_table *precious_table;
+	const struct regmap_access_table *wr_noinc_table;
+	const struct regmap_access_table *rd_noinc_table;
+	const struct reg_default *reg_defaults;
+	unsigned int num_reg_defaults;
+	enum regcache_type cache_type;
+	const void *reg_defaults_raw;
+	unsigned int num_reg_defaults_raw;
+	unsigned long read_flag_mask;
+	unsigned long write_flag_mask;
+	bool zero_flag_mask;
+	bool use_single_read;
+	bool use_single_write;
+	bool use_relaxed_mmio;
+	bool can_multi_write;
+	enum regmap_endian reg_format_endian;
+	enum regmap_endian val_format_endian;
+	const struct regmap_range_cfg *ranges;
+	unsigned int num_ranges;
+	bool use_hwlock;
+	bool use_raw_spinlock;
+	unsigned int hwlock_id;
+	unsigned int hwlock_mode;
+	bool can_sleep;
+	u64 android_kabi_reserved1;
+};
+
+struct regmap_range_cfg {
+	const char *name;
+	unsigned int range_min;
+	unsigned int range_max;
+	unsigned int selector_reg;
+	unsigned int selector_mask;
+	int selector_shift;
+	unsigned int window_start;
+	unsigned int window_len;
+	u64 android_kabi_reserved1;
+};
+
+struct regmap_field {
+	struct regmap *regmap;
+	unsigned int mask;
+	unsigned int shift;
+	unsigned int reg;
+	unsigned int id_size;
+	unsigned int id_offset;
+};
+
+struct reg_field {
+	unsigned int reg;
+	unsigned int lsb;
+	unsigned int msb;
+	unsigned int id_size;
+	unsigned int id_offset;
+};
+
+struct trace_event_data_offsets_regcache_sync {
+	u32 name;
+	u32 status;
+	u32 type;
+};
+
+struct regcache_rbtree_node {
+	void *block;
+	unsigned long *cache_present;
+	unsigned int base_reg;
+	unsigned int blklen;
+	struct rb_node node;
+};
+
+struct regcache_rbtree_ctx {
+	struct rb_root root;
+	struct regcache_rbtree_node *cached_rbnode;
+};
+
+struct regmap_debugfs_node {
+	struct regmap *map;
+	struct list_head link;
+};
+
+struct regmap_debugfs_off_cache {
+	struct list_head list;
+	off_t min;
+	off_t max;
+	unsigned int base_reg;
+	unsigned int max_reg;
+};
+
+struct spi_delay {
+	u16 value;
+	u8 unit;
+};
+
+struct spi_controller;
+
+struct spi_statistics;
+
+struct spi_device {
+	struct device dev;
+	struct spi_controller *controller;
+	struct spi_controller *master;
+	u32 max_speed_hz;
+	u8 chip_select;
+	u8 bits_per_word;
+	bool rt;
+	u32 mode;
+	int irq;
+	void *controller_state;
+	void *controller_data;
+	char modalias[32];
+	const char *driver_override;
+	struct gpio_desc *cs_gpiod;
+	struct spi_delay word_delay;
+	struct spi_delay cs_setup;
+	struct spi_delay cs_hold;
+	struct spi_delay cs_inactive;
+	struct spi_statistics __attribute__((btf_type_tag("percpu"))) *pcpu_statistics;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct spi_message;
+
+struct spi_transfer;
+
+struct spi_controller_mem_ops;
+
+struct spi_controller_mem_caps;
+
+struct spi_controller {
+	struct device dev;
+	struct list_head list;
+	s16 bus_num;
+	u16 num_chipselect;
+	u16 dma_alignment;
+	u32 mode_bits;
+	u32 buswidth_override_bits;
+	u32 bits_per_word_mask;
+	u32 min_speed_hz;
+	u32 max_speed_hz;
+	u16 flags;
+	bool devm_allocated;
+	union {
+		bool slave;
+		bool target;
+	};
+	size_t (*max_transfer_size)(struct spi_device *);
+	size_t (*max_message_size)(struct spi_device *);
+	struct mutex io_mutex;
+	struct mutex add_lock;
+	spinlock_t bus_lock_spinlock;
+	struct mutex bus_lock_mutex;
+	bool bus_lock_flag;
+	int (*setup)(struct spi_device *);
+	int (*set_cs_timing)(struct spi_device *);
+	int (*transfer)(struct spi_device *, struct spi_message *);
+	void (*cleanup)(struct spi_device *);
+	bool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	struct device *dma_map_dev;
+	struct device *cur_rx_dma_dev;
+	struct device *cur_tx_dma_dev;
+	bool queued;
+	struct kthread_worker *kworker;
+	struct kthread_work pump_messages;
+	spinlock_t queue_lock;
+	struct list_head queue;
+	struct spi_message *cur_msg;
+	struct completion cur_msg_completion;
+	bool cur_msg_incomplete;
+	bool cur_msg_need_completion;
+	bool busy;
+	bool running;
+	bool rt;
+	bool auto_runtime_pm;
+	bool cur_msg_mapped;
+	char last_cs;
+	bool last_cs_mode_high;
+	bool fallback;
+	struct completion xfer_completion;
+	size_t max_dma_len;
+	int (*prepare_transfer_hardware)(struct spi_controller *);
+	int (*transfer_one_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_transfer_hardware)(struct spi_controller *);
+	int (*prepare_message)(struct spi_controller *, struct spi_message *);
+	int (*unprepare_message)(struct spi_controller *, struct spi_message *);
+	union {
+		int (*slave_abort)(struct spi_controller *);
+		int (*target_abort)(struct spi_controller *);
+	};
+	void (*set_cs)(struct spi_device *, bool);
+	int (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);
+	void (*handle_err)(struct spi_controller *, struct spi_message *);
+	const struct spi_controller_mem_ops *mem_ops;
+	const struct spi_controller_mem_caps *mem_caps;
+	struct gpio_desc **cs_gpiods;
+	bool use_gpio_descriptors;
+	s8 unused_native_cs;
+	s8 max_native_cs;
+	struct spi_statistics __attribute__((btf_type_tag("percpu"))) *pcpu_statistics;
+	struct dma_chan___2 *dma_tx;
+	struct dma_chan___2 *dma_rx;
+	void *dummy_rx;
+	void *dummy_tx;
+	int (*fw_translate_cs)(struct spi_controller *, unsigned int);
+	bool ptp_sts_supported;
+	unsigned long irq_flags;
+	bool queue_empty;
+	bool must_async;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct ptp_system_timestamp;
+
+struct spi_transfer {
+	const void *tx_buf;
+	void *rx_buf;
+	unsigned int len;
+	u16 error;
+	dma_addr_t tx_dma;
+	dma_addr_t rx_dma;
+	struct sg_table tx_sg;
+	struct sg_table rx_sg;
+	unsigned int dummy_data: 1;
+	unsigned int cs_off: 1;
+	unsigned int cs_change: 1;
+	unsigned int tx_nbits: 3;
+	unsigned int rx_nbits: 3;
+	unsigned int timestamped: 1;
+	u8 bits_per_word;
+	struct spi_delay delay;
+	struct spi_delay cs_change_delay;
+	struct spi_delay word_delay;
+	u32 speed_hz;
+	u32 effective_speed_hz;
+	unsigned int ptp_sts_word_pre;
+	unsigned int ptp_sts_word_post;
+	struct ptp_system_timestamp *ptp_sts;
+	struct list_head transfer_list;
+	u64 android_kabi_reserved1;
+};
+
+struct spi_message {
+	struct list_head transfers;
+	struct spi_device *spi;
+	unsigned int is_dma_mapped: 1;
+	bool prepared;
+	int status;
+	void (*complete)(void *);
+	void *context;
+	unsigned int frame_length;
+	unsigned int actual_length;
+	struct list_head queue;
+	void *state;
+	struct list_head resources;
+	u64 android_kabi_reserved1;
+	struct spi_transfer t[0];
+};
+
+struct spi_mem;
+
+struct spi_mem_op;
+
+struct spi_mem_dirmap_desc;
+
+struct spi_controller_mem_ops {
+	int (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);
+	bool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);
+	int (*exec_op)(struct spi_mem *, const struct spi_mem_op *);
+	const char * (*get_name)(struct spi_mem *);
+	int (*dirmap_create)(struct spi_mem_dirmap_desc *);
+	void (*dirmap_destroy)(struct spi_mem_dirmap_desc *);
+	ssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);
+	ssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);
+	int (*poll_status)(struct spi_mem *, const struct spi_mem_op *, u16, u16, unsigned long, unsigned long, unsigned long);
+};
+
+struct spi_controller_mem_caps {
+	bool dtr;
+	bool ecc;
+};
+
+struct spi_statistics {
+	struct u64_stats_sync syncp;
+	u64_stats_t messages;
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t timedout;
+	u64_stats_t spi_sync;
+	u64_stats_t spi_sync_immediate;
+	u64_stats_t spi_async;
+	u64_stats_t bytes;
+	u64_stats_t bytes_rx;
+	u64_stats_t bytes_tx;
+	u64_stats_t transfer_bytes_histo[17];
+	u64_stats_t transfers_split_maxsize;
+};
+
+struct regmap_async_spi {
+	struct regmap_async core;
+	struct spi_message m;
+	struct spi_transfer t[2];
+};
+
+struct spmi_controller;
+
+struct spmi_device {
+	struct device dev;
+	struct spmi_controller *ctrl;
+	u8 usid;
+};
+
+struct spmi_controller {
+	struct device dev;
+	unsigned int nr;
+	int (*cmd)(struct spmi_controller *, u8, u8);
+	int (*read_cmd)(struct spmi_controller *, u8, u8, u16, u8 *, size_t);
+	int (*write_cmd)(struct spmi_controller *, u8, u8, u16, const u8 *, size_t);
+	u64 android_kabi_reserved1;
+};
+
+struct regmap_mmio_context {
+	void *regs;
+	unsigned int val_bytes;
+	bool big_endian;
+	bool attached_clk;
+	struct clk *clk;
+	void (*reg_write)(struct regmap_mmio_context *, unsigned int, unsigned int);
+	unsigned int (*reg_read)(struct regmap_mmio_context *, unsigned int);
+};
+
+struct regmap_irq_chip;
+
+struct regmap_irq_chip_data {
+	struct mutex lock;
+	struct irq_chip irq_chip;
+	struct regmap *map;
+	const struct regmap_irq_chip *chip;
+	int irq_base;
+	struct irq_domain *domain;
+	int irq;
+	int wake_count;
+	void *status_reg_buf;
+	unsigned int *main_status_buf;
+	unsigned int *status_buf;
+	unsigned int *mask_buf;
+	unsigned int *mask_buf_def;
+	unsigned int *wake_buf;
+	unsigned int *type_buf;
+	unsigned int *type_buf_def;
+	unsigned int **config_buf;
+	unsigned int irq_reg_stride;
+	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *, unsigned int, int);
+	unsigned int clear_status: 1;
+};
+
+struct regmap_irq_sub_irq_map;
+
+struct regmap_irq;
+
+struct regmap_irq_chip {
+	const char *name;
+	unsigned int main_status;
+	unsigned int num_main_status_bits;
+	struct regmap_irq_sub_irq_map *sub_reg_offsets;
+	int num_main_regs;
+	unsigned int status_base;
+	unsigned int mask_base;
+	unsigned int unmask_base;
+	unsigned int ack_base;
+	unsigned int wake_base;
+	const unsigned int *config_base;
+	unsigned int irq_reg_stride;
+	unsigned int init_ack_masked: 1;
+	unsigned int mask_unmask_non_inverted: 1;
+	unsigned int use_ack: 1;
+	unsigned int ack_invert: 1;
+	unsigned int clear_ack: 1;
+	unsigned int status_invert: 1;
+	unsigned int wake_invert: 1;
+	unsigned int type_in_mask: 1;
+	unsigned int clear_on_unmask: 1;
+	unsigned int runtime_pm: 1;
+	unsigned int no_status: 1;
+	int num_regs;
+	const struct regmap_irq *irqs;
+	int num_irqs;
+	int num_config_bases;
+	int num_config_regs;
+	int (*handle_pre_irq)(void *);
+	int (*handle_post_irq)(void *);
+	int (*handle_mask_sync)(int, unsigned int, unsigned int, void *);
+	int (*set_type_config)(unsigned int **, unsigned int, const struct regmap_irq *, int, void *);
+	unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *, unsigned int, int);
+	void *irq_drv_data;
+};
+
+struct regmap_irq_sub_irq_map {
+	unsigned int num_regs;
+	unsigned int *offset;
+};
+
+struct regmap_irq_type {
+	unsigned int type_reg_offset;
+	unsigned int type_reg_mask;
+	unsigned int type_rising_val;
+	unsigned int type_falling_val;
+	unsigned int type_level_low_val;
+	unsigned int type_level_high_val;
+	unsigned int types_supported;
+};
+
+struct regmap_irq {
+	unsigned int reg_offset;
+	unsigned int mask;
+	struct regmap_irq_type type;
+};
+
+struct soc_device_attribute {
+	const char *machine;
+	const char *family;
+	const char *revision;
+	const char *serial_number;
+	const char *soc_id;
+	const void *data;
+	const struct attribute_group *custom_attr_group;
+};
+
+struct soc_device {
+	struct device dev;
+	struct soc_device_attribute *attr;
+	int soc_dev_num;
+};
+
+struct devcd_entry {
+	struct device devcd_dev;
+	void *data;
+	size_t datalen;
+	struct mutex mutex;
+	bool delete_work;
+	struct module *owner;
+	ssize_t (*read)(char *, loff_t, size_t, void *, size_t);
+	void (*free)(void *);
+	struct delayed_work del_wk;
+	struct device *failing_dev;
+};
+
+typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);
+
+struct platform_msi_priv_data {
+	struct device *dev;
+	void *host_data;
+	msi_alloc_info_t arg;
+	irq_write_msi_msg_t write_msg;
+	int devid;
+};
+
+typedef void (*btf_trace_devres_log)(void *, struct device *, const char *, void *, const char *, size_t);
+
+struct trace_event_raw_devres {
+	struct trace_entry ent;
+	u32 __data_loc_devname;
+	struct device *dev;
+	const char *op;
+	void *node;
+	const char *name;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devres {
+	u32 devname;
+};
+
+struct brd_device {
+	int brd_number;
+	struct gendisk *brd_disk;
+	struct list_head brd_list;
+	struct xarray brd_pages;
+	u64 brd_nr_pages;
+};
+
+enum {
+	Lo_unbound = 0,
+	Lo_bound = 1,
+	Lo_rundown = 2,
+	Lo_deleting = 3,
+};
+
+enum {
+	LO_FLAGS_READ_ONLY = 1,
+	LO_FLAGS_AUTOCLEAR = 4,
+	LO_FLAGS_PARTSCAN = 8,
+	LO_FLAGS_DIRECT_IO = 16,
+};
+
+struct loop_device {
+	int lo_number;
+	loff_t lo_offset;
+	loff_t lo_sizelimit;
+	int lo_flags;
+	char lo_file_name[64];
+	struct file *lo_backing_file;
+	struct block_device *lo_device;
+	gfp_t old_gfp_mask;
+	spinlock_t lo_lock;
+	int lo_state;
+	spinlock_t lo_work_lock;
+	struct workqueue_struct *workqueue;
+	struct work_struct rootcg_work;
+	struct list_head rootcg_cmd_list;
+	struct list_head idle_worker_list;
+	struct rb_root worker_tree;
+	struct timer_list timer;
+	bool use_dio;
+	bool sysfs_inited;
+	struct request_queue *lo_queue;
+	struct blk_mq_tag_set tag_set;
+	struct gendisk *lo_disk;
+	struct mutex lo_mutex;
+	bool idr_visible;
+};
+
+struct loop_worker {
+	struct rb_node rb_node;
+	struct work_struct work;
+	struct list_head cmd_list;
+	struct list_head idle_list;
+	struct loop_device *lo;
+	struct cgroup_subsys_state *blkcg_css;
+	unsigned long last_ran_at;
+};
+
+struct loop_cmd {
+	struct list_head list_entry;
+	bool use_aio;
+	atomic_t ref;
+	long ret;
+	struct kiocb iocb;
+	struct bio_vec *bvec;
+	struct cgroup_subsys_state *blkcg_css;
+	struct cgroup_subsys_state *memcg_css;
+};
+
+typedef u16 compat_dev_t;
+
+struct compat_loop_info {
+	compat_int_t lo_number;
+	compat_dev_t lo_device;
+	compat_ulong_t lo_inode;
+	compat_dev_t lo_rdevice;
+	compat_int_t lo_offset;
+	compat_int_t lo_encrypt_type;
+	compat_int_t lo_encrypt_key_size;
+	compat_int_t lo_flags;
+	char lo_name[64];
+	unsigned char lo_encrypt_key[32];
+	compat_ulong_t lo_init[2];
+	char reserved[4];
+};
+
+struct loop_info64 {
+	__u64 lo_device;
+	__u64 lo_inode;
+	__u64 lo_rdevice;
+	__u64 lo_offset;
+	__u64 lo_sizelimit;
+	__u32 lo_number;
+	__u32 lo_encrypt_type;
+	__u32 lo_encrypt_key_size;
+	__u32 lo_flags;
+	__u8 lo_file_name[64];
+	__u8 lo_crypt_name[64];
+	__u8 lo_encrypt_key[32];
+	__u64 lo_init[2];
+};
+
+typedef unsigned long __kernel_old_dev_t;
+
+struct loop_info {
+	int lo_number;
+	__kernel_old_dev_t lo_device;
+	unsigned long lo_inode;
+	__kernel_old_dev_t lo_rdevice;
+	int lo_offset;
+	int lo_encrypt_type;
+	int lo_encrypt_key_size;
+	int lo_flags;
+	char lo_name[64];
+	unsigned char lo_encrypt_key[32];
+	unsigned long lo_init[2];
+	char reserved[4];
+};
+
+struct loop_config {
+	__u32 fd;
+	__u32 block_size;
+	struct loop_info64 info;
+	__u64 __reserved[8];
+};
+
+struct ublk_io {
+	__u64 addr;
+	unsigned int flags;
+	int res;
+	struct io_uring_cmd *cmd;
+};
+
+struct ublk_device;
+
+struct ublk_queue {
+	int q_id;
+	int q_depth;
+	unsigned long flags;
+	struct task_struct *ubq_daemon;
+	char *io_cmd_buf;
+	struct llist_head io_cmds;
+	unsigned long io_addr;
+	unsigned int max_io_sz;
+	bool force_abort;
+	bool timeout;
+	unsigned short nr_io_ready;
+	spinlock_t cancel_lock;
+	struct ublk_device *dev;
+	struct ublk_io ios[0];
+};
+
+struct ublksrv_ctrl_dev_info {
+	__u16 nr_hw_queues;
+	__u16 queue_depth;
+	__u16 state;
+	__u16 pad0;
+	__u32 max_io_buf_bytes;
+	__u32 dev_id;
+	__s32 ublksrv_pid;
+	__u32 pad1;
+	__u64 flags;
+	__u64 ublksrv_flags;
+	__u32 owner_uid;
+	__u32 owner_gid;
+	__u64 reserved1;
+	__u64 reserved2;
+};
+
+struct ublk_param_basic {
+	__u32 attrs;
+	__u8 logical_bs_shift;
+	__u8 physical_bs_shift;
+	__u8 io_opt_shift;
+	__u8 io_min_shift;
+	__u32 max_sectors;
+	__u32 chunk_sectors;
+	__u64 dev_sectors;
+	__u64 virt_boundary_mask;
+};
+
+struct ublk_param_discard {
+	__u32 discard_alignment;
+	__u32 discard_granularity;
+	__u32 max_discard_sectors;
+	__u32 max_write_zeroes_sectors;
+	__u16 max_discard_segments;
+	__u16 reserved0;
+};
+
+struct ublk_param_devt {
+	__u32 char_major;
+	__u32 char_minor;
+	__u32 disk_major;
+	__u32 disk_minor;
+};
+
+struct ublk_param_zoned {
+	__u32 max_open_zones;
+	__u32 max_active_zones;
+	__u32 max_zone_append_sectors;
+	__u8 reserved[20];
+};
+
+struct ublk_params {
+	__u32 len;
+	__u32 types;
+	struct ublk_param_basic basic;
+	struct ublk_param_discard discard;
+	struct ublk_param_devt devt;
+	struct ublk_param_zoned zoned;
+};
+
+struct ublk_device {
+	struct gendisk *ub_disk;
+	char *__queues;
+	unsigned int queue_size;
+	struct ublksrv_ctrl_dev_info dev_info;
+	struct blk_mq_tag_set tag_set;
+	struct cdev cdev;
+	struct device cdev_dev;
+	unsigned long state;
+	int ub_number;
+	struct mutex mutex;
+	spinlock_t mm_lock;
+	struct mm_struct *mm;
+	struct ublk_params params;
+	struct completion completion;
+	unsigned int nr_queues_ready;
+	unsigned int nr_privileged_daemon;
+	struct delayed_work monitor_work;
+	struct work_struct quiesce_work;
+	struct work_struct stop_work;
+};
+
+struct ublksrv_ctrl_cmd {
+	__u32 dev_id;
+	__u16 queue_id;
+	__u16 len;
+	__u64 addr;
+	__u64 data[1];
+	__u16 dev_path_len;
+	__u16 pad;
+	__u32 reserved;
+};
+
+struct ublk_rq_data {
+	struct llist_node node;
+	struct kref ref;
+	__u64 sector;
+	__u32 operation;
+	__u32 nr_zones;
+};
+
+struct ublksrv_io_desc {
+	__u32 op_flags;
+	union {
+		__u32 nr_sectors;
+		__u32 nr_zones;
+	};
+	__u64 start_sector;
+	__u64 addr;
+};
+
+struct ublk_uring_cmd_pdu {
+	struct ublk_queue *ubq;
+};
+
+struct ublk_io_iter {
+	struct page *pages[32];
+	struct bio *bio;
+	struct bvec_iter iter;
+};
+
+struct ublksrv_io_cmd {
+	__u16 q_id;
+	__u16 tag;
+	__s32 result;
+	union {
+		__u64 addr;
+		__u64 zone_append_lba;
+	};
+};
+
+struct ublk_params_header {
+	__u32 len;
+	__u32 types;
+};
+
+struct sram_config {
+	int (*init)();
+	bool map_only_reserved;
+};
+
+struct sram_reserve {
+	struct list_head list;
+	u32 start;
+	u32 size;
+	struct resource res;
+	bool export;
+	bool pool;
+	bool protect_exec;
+	const char *label;
+};
+
+struct sram_partition {
+	void *base;
+	struct gen_pool *pool;
+	struct bin_attribute battr;
+	struct mutex lock;
+	struct list_head list;
+};
+
+struct sram_dev {
+	const struct sram_config *config;
+	struct device *dev;
+	void *virt_base;
+	bool no_memory_wc;
+	struct gen_pool *pool;
+	struct sram_partition *partition;
+	u32 partitions;
+};
+
+struct io_stats {
+	u64 read_bytes;
+	u64 write_bytes;
+	u64 rchar;
+	u64 wchar;
+	u64 fsync;
+};
+
+struct uid_entry {
+	uid_t uid;
+	u64 utime;
+	u64 stime;
+	int state;
+	struct io_stats io[4];
+	struct hlist_node hash;
+};
+
+struct update_stats_work {
+	uid_t uid;
+	struct task_io_accounting ioac;
+	u64 utime;
+	u64 stime;
+	struct llist_node node;
+};
+
+struct task_entry {
+	char comm[256];
+	pid_t pid;
+	struct io_stats io[4];
+	struct hlist_node hash;
+};
+
+struct syscon {
+	struct device_node *np;
+	struct regmap *regmap;
+	struct reset_control *reset;
+	struct list_head list;
+};
+
+struct syscon_platform_data {
+	const char *label;
+};
+
+enum nvdimm_passphrase_type {
+	NVDIMM_USER = 0,
+	NVDIMM_MASTER = 1,
+};
+
+enum nvdimm_fwa_state {
+	NVDIMM_FWA_INVALID = 0,
+	NVDIMM_FWA_IDLE = 1,
+	NVDIMM_FWA_ARMED = 2,
+	NVDIMM_FWA_BUSY = 3,
+	NVDIMM_FWA_ARM_OVERFLOW = 4,
+};
+
+enum nvdimm_fwa_result {
+	NVDIMM_FWA_RESULT_INVALID = 0,
+	NVDIMM_FWA_RESULT_NONE = 1,
+	NVDIMM_FWA_RESULT_SUCCESS = 2,
+	NVDIMM_FWA_RESULT_NOTSTAGED = 3,
+	NVDIMM_FWA_RESULT_NEEDRESET = 4,
+	NVDIMM_FWA_RESULT_FAIL = 5,
+};
+
+enum nvdimm_fwa_trigger {
+	NVDIMM_FWA_ARM = 0,
+	NVDIMM_FWA_DISARM = 1,
+};
+
+enum nvdimm_fwa_capability {
+	NVDIMM_FWA_CAP_INVALID = 0,
+	NVDIMM_FWA_CAP_NONE = 1,
+	NVDIMM_FWA_CAP_QUIESCE = 2,
+	NVDIMM_FWA_CAP_LIVE = 3,
+};
+
+enum {
+	ND_CMD_IMPLEMENTED = 0,
+	ND_CMD_ARS_CAP = 1,
+	ND_CMD_ARS_START = 2,
+	ND_CMD_ARS_STATUS = 3,
+	ND_CMD_CLEAR_ERROR = 4,
+	ND_CMD_SMART = 1,
+	ND_CMD_SMART_THRESHOLD = 2,
+	ND_CMD_DIMM_FLAGS = 3,
+	ND_CMD_GET_CONFIG_SIZE = 4,
+	ND_CMD_GET_CONFIG_DATA = 5,
+	ND_CMD_SET_CONFIG_DATA = 6,
+	ND_CMD_VENDOR_EFFECT_LOG_SIZE = 7,
+	ND_CMD_VENDOR_EFFECT_LOG = 8,
+	ND_CMD_VENDOR = 9,
+	ND_CMD_CALL = 10,
+};
+
+struct nvdimm_bus;
+
+struct nvdimm_map {
+	struct nvdimm_bus *nvdimm_bus;
+	struct list_head list;
+	resource_size_t offset;
+	unsigned long flags;
+	size_t size;
+	union {
+		void *mem;
+		void *iomem;
+	};
+	struct kref kref;
+};
+
+struct badrange {
+	struct list_head list;
+	spinlock_t lock;
+};
+
+struct nvdimm_bus_descriptor;
+
+struct nvdimm_bus {
+	struct nvdimm_bus_descriptor *nd_desc;
+	wait_queue_head_t wait;
+	struct list_head list;
+	struct device dev;
+	int id;
+	int probe_active;
+	atomic_t ioctl_active;
+	struct list_head mapping_list;
+	struct mutex reconfig_mutex;
+	struct badrange badrange;
+};
+
+struct nvdimm;
+
+typedef int (*ndctl_fn)(struct nvdimm_bus_descriptor *, struct nvdimm *, unsigned int, void *, unsigned int, int *);
+
+struct nvdimm_bus_fw_ops;
+
+struct nvdimm_bus_descriptor {
+	const struct attribute_group **attr_groups;
+	unsigned long cmd_mask;
+	unsigned long dimm_family_mask;
+	unsigned long bus_family_mask;
+	struct module *module;
+	char *provider_name;
+	struct device_node *of_node;
+	ndctl_fn ndctl;
+	int (*flush_probe)(struct nvdimm_bus_descriptor *);
+	int (*clear_to_send)(struct nvdimm_bus_descriptor *, struct nvdimm *, unsigned int, void *);
+	const struct nvdimm_bus_fw_ops *fw_ops;
+};
+
+struct nvdimm_security_ops;
+
+struct nvdimm_fw_ops;
+
+struct nvdimm {
+	unsigned long flags;
+	void *provider_data;
+	unsigned long cmd_mask;
+	struct device dev;
+	atomic_t busy;
+	int id;
+	int num_flush;
+	struct resource *flush_wpq;
+	const char *dimm_id;
+	struct {
+		const struct nvdimm_security_ops *ops;
+		unsigned long flags;
+		unsigned long ext_flags;
+		unsigned int overwrite_tmo;
+		struct kernfs_node *overwrite_state;
+	} sec;
+	struct delayed_work dwork;
+	const struct nvdimm_fw_ops *fw_ops;
+};
+
+struct nvdimm_key_data;
+
+struct nvdimm_security_ops {
+	unsigned long (*get_flags)(struct nvdimm *, enum nvdimm_passphrase_type);
+	int (*freeze)(struct nvdimm *);
+	int (*change_key)(struct nvdimm *, const struct nvdimm_key_data *, const struct nvdimm_key_data *, enum nvdimm_passphrase_type);
+	int (*unlock)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*disable)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*erase)(struct nvdimm *, const struct nvdimm_key_data *, enum nvdimm_passphrase_type);
+	int (*overwrite)(struct nvdimm *, const struct nvdimm_key_data *);
+	int (*query_overwrite)(struct nvdimm *);
+	int (*disable_master)(struct nvdimm *, const struct nvdimm_key_data *);
+};
+
+struct nvdimm_key_data {
+	u8 data[32];
+};
+
+struct nvdimm_fw_ops {
+	enum nvdimm_fwa_state (*activate_state)(struct nvdimm *);
+	enum nvdimm_fwa_result (*activate_result)(struct nvdimm *);
+	int (*arm)(struct nvdimm *, enum nvdimm_fwa_trigger);
+};
+
+struct nvdimm_bus_fw_ops {
+	enum nvdimm_fwa_state (*activate_state)(struct nvdimm_bus_descriptor *);
+	enum nvdimm_fwa_capability (*capability)(struct nvdimm_bus_descriptor *);
+	int (*activate)(struct nvdimm_bus_descriptor *);
+};
+
+struct nd_cmd_desc {
+	int in_num;
+	int out_num;
+	u32 in_sizes[5];
+	int out_sizes[5];
+};
+
+enum nvdimm_event {
+	NVDIMM_REVALIDATE_POISON = 0,
+	NVDIMM_REVALIDATE_REGION = 1,
+};
+
+struct nd_device_driver {
+	struct device_driver drv;
+	unsigned long type;
+	int (*probe)(struct device *);
+	void (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+	void (*notify)(struct device *, enum nvdimm_event);
+};
+
+enum nd_async_mode {
+	ND_SYNC = 0,
+	ND_ASYNC = 1,
+};
+
+enum nd_ioctl_mode {
+	BUS_IOCTL = 0,
+	DIMM_IOCTL = 1,
+};
+
+enum {
+	NDD_UNARMED = 1,
+	NDD_LOCKED = 2,
+	NDD_SECURITY_OVERWRITE = 3,
+	NDD_WORK_PENDING = 4,
+	NDD_LABELING = 6,
+	NDD_INCOHERENT = 7,
+	NDD_REGISTER_SYNC = 8,
+	ND_IOCTL_MAX_BUFLEN = 4194304,
+	ND_CMD_MAX_ELEM = 5,
+	ND_CMD_MAX_ENVELOPE = 256,
+	ND_MAX_MAPPINGS = 32,
+	ND_REGION_PAGEMAP = 0,
+	ND_REGION_PERSIST_CACHE = 1,
+	ND_REGION_PERSIST_MEMCTRL = 2,
+	ND_REGION_ASYNC = 3,
+	ND_REGION_CXL = 4,
+	DPA_RESOURCE_ADJUSTED = 1,
+};
+
+enum nvdimm_claim_class {
+	NVDIMM_CCLASS_NONE = 0,
+	NVDIMM_CCLASS_BTT = 1,
+	NVDIMM_CCLASS_BTT2 = 2,
+	NVDIMM_CCLASS_PFN = 3,
+	NVDIMM_CCLASS_DAX = 4,
+	NVDIMM_CCLASS_UNKNOWN = 5,
+};
+
+enum nd_pfn_mode {
+	PFN_MODE_NONE = 0,
+	PFN_MODE_RAM = 1,
+	PFN_MODE_PMEM = 2,
+};
+
+struct nd_cmd_pkg {
+	__u64 nd_family;
+	__u64 nd_command;
+	__u32 nd_size_in;
+	__u32 nd_size_out;
+	__u32 nd_reserved2[9];
+	__u32 nd_fw_size;
+	unsigned char nd_payload[0];
+};
+
+struct nd_cmd_clear_error {
+	__u64 address;
+	__u64 length;
+	__u32 status;
+	__u8 reserved[4];
+	__u64 cleared;
+};
+
+struct nd_namespace_common {
+	int force_raw;
+	struct device dev;
+	struct device *claim;
+	enum nvdimm_claim_class claim_class;
+	int (*rw_bytes)(struct nd_namespace_common *, resource_size_t, void *, size_t, int, unsigned long);
+};
+
+struct nd_namespace_io {
+	struct nd_namespace_common common;
+	struct resource res;
+	resource_size_t size;
+	void *addr;
+	struct badblocks bb;
+};
+
+struct badrange_entry {
+	u64 start;
+	u64 length;
+	struct list_head list;
+};
+
+struct clear_badblocks_context {
+	resource_size_t phys;
+	resource_size_t cleared;
+};
+
+struct nvdimm_drvdata;
+
+struct nd_mapping {
+	struct nvdimm *nvdimm;
+	u64 start;
+	u64 size;
+	int position;
+	struct list_head labels;
+	struct mutex lock;
+	struct nvdimm_drvdata *ndd;
+};
+
+struct nd_interleave_set;
+
+struct nd_percpu_lane;
+
+struct nd_region {
+	struct device dev;
+	struct ida ns_ida;
+	struct ida btt_ida;
+	struct ida pfn_ida;
+	struct ida dax_ida;
+	unsigned long flags;
+	struct device *ns_seed;
+	struct device *btt_seed;
+	struct device *pfn_seed;
+	struct device *dax_seed;
+	unsigned long align;
+	u16 ndr_mappings;
+	u64 ndr_size;
+	u64 ndr_start;
+	int id;
+	int num_lanes;
+	int ro;
+	int numa_node;
+	int target_node;
+	void *provider_data;
+	struct kernfs_node *bb_state;
+	struct badblocks bb;
+	struct nd_interleave_set *nd_set;
+	struct nd_percpu_lane __attribute__((btf_type_tag("percpu"))) *lane;
+	int (*flush)(struct nd_region *, struct bio *);
+	struct nd_mapping mapping[0];
+};
+
+struct nd_interleave_set {
+	u64 cookie1;
+	u64 cookie2;
+	u64 altcookie;
+	guid_t type_guid;
+};
+
+struct nd_percpu_lane {
+	int count;
+	spinlock_t lock;
+};
+
+struct nd_cmd_get_config_size {
+	__u32 status;
+	__u32 config_size;
+	__u32 max_xfer;
+};
+
+struct nvdimm_drvdata {
+	struct device *dev;
+	int nslabel_size;
+	struct nd_cmd_get_config_size nsarea;
+	void *data;
+	bool cxl;
+	int ns_current;
+	int ns_next;
+	struct resource dpa;
+	struct kref kref;
+};
+
+struct nd_cmd_vendor_hdr {
+	__u32 opcode;
+	__u32 in_length;
+	__u8 in_buf[0];
+};
+
+struct nd_cmd_set_config_hdr {
+	__u32 in_offset;
+	__u32 in_length;
+	__u8 in_buf[0];
+};
+
+struct btt;
+
+struct nd_btt {
+	struct device dev;
+	struct nd_namespace_common *ndns;
+	struct btt *btt;
+	unsigned long lbasize;
+	u64 size;
+	uuid_t *uuid;
+	int id;
+	int initial_offset;
+	u16 version_major;
+	u16 version_minor;
+};
+
+struct nd_cmd_ars_cap {
+	__u64 address;
+	__u64 length;
+	__u32 status;
+	__u32 max_ars_out;
+	__u32 clear_err_unit;
+	__u16 flags;
+	__u16 reserved;
+};
+
+struct nd_pfn_sb;
+
+struct nd_pfn {
+	int id;
+	uuid_t *uuid;
+	struct device dev;
+	unsigned long align;
+	unsigned long npfns;
+	enum nd_pfn_mode mode;
+	struct nd_pfn_sb *pfn_sb;
+	struct nd_namespace_common *ndns;
+};
+
+struct nd_pfn_sb {
+	u8 signature[16];
+	u8 uuid[16];
+	u8 parent_uuid[16];
+	__le32 flags;
+	__le16 version_major;
+	__le16 version_minor;
+	__le64 dataoff;
+	__le64 npfns;
+	__le32 mode;
+	__le32 start_pad;
+	__le32 end_trunc;
+	__le32 align;
+	__le32 page_size;
+	__le16 page_struct_size;
+	u8 padding[3994];
+	__le64 checksum;
+};
+
+struct nd_dax {
+	struct nd_pfn nd_pfn;
+};
+
+enum nvdimm_security_bits {
+	NVDIMM_SECURITY_DISABLED = 0,
+	NVDIMM_SECURITY_UNLOCKED = 1,
+	NVDIMM_SECURITY_LOCKED = 2,
+	NVDIMM_SECURITY_FROZEN = 3,
+	NVDIMM_SECURITY_OVERWRITE = 4,
+};
+
+struct nd_cmd_get_config_data_hdr {
+	__u32 in_offset;
+	__u32 in_length;
+	__u32 status;
+	__u8 out_buf[0];
+};
+
+struct nd_label_id {
+	char id[50];
+};
+
+struct nvdimm_pmu {
+	struct pmu pmu;
+	struct device *dev;
+	int cpu;
+	struct hlist_node node;
+	enum cpuhp_state cpuhp_state;
+	struct cpumask arch_cpumask;
+};
+
+enum {
+	ND_MAX_LANES = 256,
+	INT_LBASIZE_ALIGNMENT = 64,
+	NVDIMM_IO_ATOMIC = 1,
+};
+
+struct nd_namespace_label;
+
+struct nd_label_ent {
+	struct list_head list;
+	unsigned long flags;
+	struct nd_namespace_label *label;
+};
+
+struct nvdimm_cxl_label {
+	u8 type[16];
+	u8 uuid[16];
+	u8 name[64];
+	__le32 flags;
+	__le16 nrange;
+	__le16 position;
+	__le64 dpa;
+	__le64 rawsize;
+	__le32 slot;
+	__le32 align;
+	u8 region_uuid[16];
+	u8 abstraction_uuid[16];
+	__le16 lbasize;
+	u8 reserved[86];
+	__le64 checksum;
+};
+
+struct nvdimm_efi_label {
+	u8 uuid[16];
+	u8 name[64];
+	__le32 flags;
+	__le16 nlabel;
+	__le16 position;
+	__le64 isetcookie;
+	__le64 lbasize;
+	__le64 dpa;
+	__le64 rawsize;
+	__le32 slot;
+	u8 align;
+	u8 reserved[3];
+	guid_t type_guid;
+	guid_t abstraction_guid;
+	u8 reserved2[88];
+	__le64 checksum;
+};
+
+struct nd_namespace_label {
+	union {
+		struct nvdimm_cxl_label cxl;
+		struct nvdimm_efi_label efi;
+	};
+};
+
+struct nd_region_data {
+	int ns_count;
+	int ns_active;
+	unsigned int hints_shift;
+	void *flush_wpq[0];
+};
+
+struct nd_namespace_index {
+	u8 sig[16];
+	u8 flags[3];
+	u8 labelsize;
+	__le32 seq;
+	__le64 myoff;
+	__le64 mysize;
+	__le64 otheroff;
+	__le64 labeloff;
+	__le32 nslot;
+	__le16 major;
+	__le16 minor;
+	__le64 checksum;
+	u8 free[0];
+};
+
+struct nd_mapping_desc;
+
+struct nd_region_desc {
+	struct resource *res;
+	struct nd_mapping_desc *mapping;
+	u16 num_mappings;
+	const struct attribute_group **attr_groups;
+	struct nd_interleave_set *nd_set;
+	void *provider_data;
+	int num_lanes;
+	int numa_node;
+	int target_node;
+	unsigned long flags;
+	int memregion;
+	struct device_node *of_node;
+	int (*flush)(struct nd_region *, struct bio *);
+};
+
+struct nd_mapping_desc {
+	struct nvdimm *nvdimm;
+	u64 start;
+	u64 size;
+	int position;
+};
+
+struct conflict_context {
+	struct nd_region *nd_region;
+	resource_size_t start;
+	resource_size_t size;
+};
+
+enum {
+	ND_MIN_NAMESPACE_SIZE = 4096,
+};
+
+enum alloc_loc {
+	ALLOC_ERR = 0,
+	ALLOC_BEFORE = 1,
+	ALLOC_MID = 2,
+	ALLOC_AFTER = 3,
+};
+
+enum nd_label_flags {
+	ND_LABEL_REAP = 0,
+};
+
+enum {
+	NSINDEX_SIG_LEN = 16,
+	NSINDEX_ALIGN = 256,
+	NSINDEX_SEQ_MASK = 3,
+	NSLABEL_UUID_LEN = 16,
+	NSLABEL_NAME_LEN = 64,
+	NSLABEL_FLAG_ROLABEL = 1,
+	NSLABEL_FLAG_LOCAL = 2,
+	NSLABEL_FLAG_BTT = 4,
+	NSLABEL_FLAG_UPDATING = 8,
+	BTT_ALIGN = 4096,
+	BTTINFO_SIG_LEN = 16,
+	BTTINFO_UUID_LEN = 16,
+	BTTINFO_FLAG_ERROR = 1,
+	BTTINFO_MAJOR_VERSION = 1,
+	ND_LABEL_MIN_SIZE = 1024,
+	ND_LABEL_ID_SIZE = 50,
+	ND_NSINDEX_INIT = 1,
+};
+
+struct nd_namespace_pmem {
+	struct nd_namespace_io nsio;
+	unsigned long lbasize;
+	char *alt_name;
+	uuid_t *uuid;
+	int id;
+};
+
+struct btt {
+	struct gendisk *btt_disk;
+	struct list_head arena_list;
+	struct dentry *debugfs_dir;
+	struct nd_btt *nd_btt;
+	u64 nlba;
+	unsigned long long rawsize;
+	u32 lbasize;
+	u32 sector_size;
+	struct nd_region *nd_region;
+	struct mutex init_lock;
+	int init_state;
+	int num_arenas;
+	struct badblocks *phys_bb;
+};
+
+struct nd_gen_sb {
+	char reserved[4088];
+	__le64 checksum;
+};
+
+struct btt_sb {
+	u8 signature[16];
+	u8 uuid[16];
+	u8 parent_uuid[16];
+	__le32 flags;
+	__le16 version_major;
+	__le16 version_minor;
+	__le32 external_lbasize;
+	__le32 external_nlba;
+	__le32 internal_lbasize;
+	__le32 internal_nlba;
+	__le32 nfree;
+	__le32 infosize;
+	__le64 nextoff;
+	__le64 dataoff;
+	__le64 mapoff;
+	__le64 logoff;
+	__le64 info2off;
+	u8 padding[3968];
+	__le64 checksum;
+};
+
+enum dax_access_mode {
+	DAX_ACCESS = 0,
+	DAX_RECOVERY_WRITE = 1,
+};
+
+struct dax_operations {
+	long (*direct_access)(struct dax_device *, unsigned long, long, enum dax_access_mode, void **, pfn_t *);
+	bool (*dax_supported)(struct dax_device *, struct block_device *, int, sector_t, sector_t);
+	int (*zero_page_range)(struct dax_device *, unsigned long, size_t);
+	size_t (*recovery_write)(struct dax_device *, unsigned long, void *, size_t, struct iov_iter *);
+};
+
+struct pmem_device {
+	phys_addr_t phys_addr;
+	phys_addr_t data_offset;
+	u64 pfn_flags;
+	void *virt_addr;
+	size_t size;
+	u32 pfn_pad;
+	struct kernfs_node *bb_state;
+	struct badblocks bb;
+	struct dax_device *dax_dev;
+	struct gendisk *disk;
+	struct dev_pagemap pgmap;
+};
+
+enum btt_init_state {
+	INIT_UNCHECKED = 0,
+	INIT_NOTFOUND = 1,
+	INIT_READY = 2,
+};
+
+enum log_ent_request {
+	LOG_NEW_ENT = 0,
+	LOG_OLD_ENT = 1,
+};
+
+struct free_entry;
+
+struct aligned_lock;
+
+struct arena_info {
+	u64 size;
+	u64 external_lba_start;
+	u32 internal_nlba;
+	u32 internal_lbasize;
+	u32 external_nlba;
+	u32 external_lbasize;
+	u32 nfree;
+	u16 version_major;
+	u16 version_minor;
+	u32 sector_size;
+	u64 nextoff;
+	u64 infooff;
+	u64 dataoff;
+	u64 mapoff;
+	u64 logoff;
+	u64 info2off;
+	struct free_entry *freelist;
+	u32 *rtt;
+	struct aligned_lock *map_locks;
+	struct nd_btt *nd_btt;
+	struct list_head list;
+	struct dentry *debugfs_dir;
+	u32 flags;
+	struct mutex err_lock;
+	int log_index[2];
+};
+
+struct free_entry {
+	u32 block;
+	u8 sub;
+	u8 seq;
+	u8 has_err;
+};
+
+struct aligned_lock {
+	union {
+		spinlock_t lock;
+		u8 cacheline_padding[64];
+	};
+};
+
+struct log_entry {
+	__le32 lba;
+	__le32 old_map;
+	__le32 new_map;
+	__le32 seq;
+};
+
+struct log_group {
+	struct log_entry ent[4];
+};
+
+struct bio_integrity_payload {
+	struct bio *bip_bio;
+	struct bvec_iter bip_iter;
+	unsigned short bip_vcnt;
+	unsigned short bip_max_vcnt;
+	unsigned short bip_flags;
+	int: 0;
+	struct bvec_iter bio_iter;
+	struct work_struct bip_work;
+	struct bio_vec *bip_vec;
+	struct bio_vec bip_inline_vecs[0];
+};
+
+struct of_pmem_private {
+	struct nvdimm_bus_descriptor bus_desc;
+	struct nvdimm_bus *bus;
+};
+
+enum dax_device_flags {
+	DAXDEV_ALIVE = 0,
+	DAXDEV_WRITE_CACHE = 1,
+	DAXDEV_SYNC = 2,
+	DAXDEV_NOCACHE = 3,
+	DAXDEV_NOMC = 4,
+};
+
+struct dax_holder_operations;
+
+struct dax_device {
+	struct inode inode;
+	struct cdev cdev;
+	void *private;
+	unsigned long flags;
+	const struct dax_operations *ops;
+	void *holder_data;
+	const struct dax_holder_operations *holder_ops;
+};
+
+struct dax_holder_operations {
+	int (*notify_failure)(struct dax_device *, u64, u64, int);
+};
+
+enum dax_driver_type {
+	DAXDRV_KMEM_TYPE = 0,
+	DAXDRV_DEVICE_TYPE = 1,
+};
+
+enum id_action {
+	ID_REMOVE = 0,
+	ID_ADD = 1,
+};
+
+struct dax_id {
+	struct list_head list;
+	char dev_name[30];
+};
+
+struct dax_region;
+
+struct dev_dax_range;
+
+struct dev_dax {
+	struct dax_region *region;
+	struct dax_device *dax_dev;
+	unsigned int align;
+	int target_node;
+	bool dyn_id;
+	int id;
+	struct ida ida;
+	struct device dev;
+	struct dev_pagemap *pgmap;
+	int nr_range;
+	struct dev_dax_range *ranges;
+};
+
+struct dax_region {
+	int id;
+	int target_node;
+	struct kref kref;
+	struct device *dev;
+	unsigned int align;
+	struct ida ida;
+	struct resource res;
+	struct device *seed;
+	struct device *youngest;
+};
+
+struct dax_mapping;
+
+struct dev_dax_range {
+	unsigned long pgoff;
+	struct range range;
+	struct dax_mapping *mapping;
+};
+
+struct dax_mapping {
+	struct device dev;
+	int range_id;
+	int id;
+};
+
+struct dax_device_driver {
+	struct device_driver drv;
+	struct list_head ids;
+	enum dax_driver_type type;
+	int (*probe)(struct dev_dax *);
+	void (*remove)(struct dev_dax *);
+};
+
+struct dev_dax_data {
+	struct dax_region *dax_region;
+	struct dev_pagemap *pgmap;
+	resource_size_t size;
+	int id;
+};
+
+struct dma_buf_list {
+	struct list_head head;
+	struct mutex lock;
+};
+
+struct dma_buf_import_sync_file {
+	__u32 flags;
+	__s32 fd;
+};
+
+struct dma_buf_export_sync_file {
+	__u32 flags;
+	__s32 fd;
+};
+
+struct dma_buf_sync {
+	__u64 flags;
+};
+
+typedef void (*btf_trace_dma_fence_emit)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_init)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_destroy)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_enable_signal)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_signaled)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_wait_start)(void *, struct dma_fence *);
+
+typedef void (*btf_trace_dma_fence_wait_end)(void *, struct dma_fence *);
+
+struct trace_event_raw_dma_fence {
+	struct trace_entry ent;
+	u32 __data_loc_driver;
+	u32 __data_loc_timeline;
+	unsigned int context;
+	unsigned int seqno;
+	char __data[0];
+};
+
+struct default_wait_cb {
+	struct dma_fence_cb base;
+	struct task_struct *task;
+};
+
+struct trace_event_data_offsets_dma_fence {
+	u32 driver;
+	u32 timeline;
+};
+
+struct dma_fence_array;
+
+struct dma_fence_array_cb {
+	struct dma_fence_cb cb;
+	struct dma_fence_array *array;
+};
+
+struct dma_fence_array {
+	struct dma_fence base;
+	spinlock_t lock;
+	unsigned int num_fences;
+	atomic_t num_pending;
+	struct dma_fence **fences;
+	struct irq_work work;
+};
+
+struct dma_heap_ops;
+
+struct dma_heap {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+	dev_t heap_devt;
+	struct list_head list;
+	struct cdev heap_cdev;
+	struct kref refcount;
+	struct device *heap_dev;
+};
+
+struct dma_heap_ops {
+	struct dma_buf * (*allocate)(struct dma_heap *, unsigned long, u32, u64);
+	long (*get_pool_size)(struct dma_heap *);
+};
+
+struct dma_heap_allocation_data {
+	__u64 len;
+	__u32 fd;
+	__u32 fd_flags;
+	__u64 heap_flags;
+};
+
+struct dma_heap_export_info {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+};
+
+enum df_reason {
+	DF_NORMAL = 0,
+	DF_UNDER_PRESSURE = 1,
+};
+
+struct deferred_freelist_item {
+	size_t nr_pages;
+	void (*free)(struct deferred_freelist_item *, enum df_reason);
+	struct list_head list;
+};
+
+enum {
+	POOL_LOWPAGE = 0,
+	POOL_HIGHPAGE = 1,
+	POOL_TYPE_SIZE = 2,
+};
+
+struct dmabuf_page_pool {
+	int count[2];
+	struct list_head items[2];
+	spinlock_t lock;
+	gfp_t gfp_mask;
+	unsigned int order;
+	struct list_head list;
+};
+
+struct sync_merge_data {
+	char name[32];
+	__s32 fd2;
+	__s32 fence;
+	__u32 flags;
+	__u32 pad;
+};
+
+struct sync_file_info {
+	char name[32];
+	__s32 status;
+	__u32 flags;
+	__u32 num_fences;
+	__u32 pad;
+	__u64 sync_fence_info;
+};
+
+struct sync_fence_info {
+	char obj_name[32];
+	char driver_name[32];
+	__s32 status;
+	__u32 flags;
+	__u64 timestamp_ns;
+};
+
+struct dma_buf_stats_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dma_buf *, struct dma_buf_stats_attribute *, char *);
+};
+
+struct scsi_cmnd;
+
+typedef void (*btf_trace_scsi_dispatch_cmd_start)(void *, struct scsi_cmnd *);
+
+enum scsi_cmnd_submitter {
+	SUBMITTED_BY_BLOCK_LAYER = 0,
+	SUBMITTED_BY_SCSI_ERROR_HANDLER = 1,
+	SUBMITTED_BY_SCSI_RESET_IOCTL = 2,
+} __attribute__((mode(byte)));
+
+struct scsi_data_buffer {
+	struct sg_table table;
+	unsigned int length;
+};
+
+struct scsi_device;
+
+struct scsi_cmnd {
+	struct scsi_device *device;
+	struct list_head eh_entry;
+	struct delayed_work abort_work;
+	struct callback_head rcu;
+	int eh_eflags;
+	int budget_token;
+	unsigned long jiffies_at_alloc;
+	int retries;
+	int allowed;
+	unsigned char prot_op;
+	unsigned char prot_type;
+	unsigned char prot_flags;
+	enum scsi_cmnd_submitter submitter;
+	unsigned short cmd_len;
+	enum dma_data_direction sc_data_direction;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scsi_data_buffer *prot_sdb;
+	unsigned int underflow;
+	unsigned int transfersize;
+	unsigned int resid_len;
+	unsigned int sense_len;
+	unsigned char *sense_buffer;
+	int flags;
+	unsigned long state;
+	unsigned int extra_len;
+	unsigned char *host_scribble;
+	int result;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+typedef __u64 blist_flags_t;
+
+enum scsi_device_state {
+	SDEV_CREATED = 1,
+	SDEV_RUNNING = 2,
+	SDEV_CANCEL = 3,
+	SDEV_DEL = 4,
+	SDEV_QUIESCE = 5,
+	SDEV_OFFLINE = 6,
+	SDEV_TRANSPORT_OFFLINE = 7,
+	SDEV_BLOCK = 8,
+	SDEV_CREATED_BLOCK = 9,
+};
+
+struct Scsi_Host;
+
+struct scsi_vpd;
+
+struct scsi_target;
+
+struct scsi_device_handler;
+
+struct scsi_device {
+	struct Scsi_Host *host;
+	struct request_queue *request_queue;
+	struct list_head siblings;
+	struct list_head same_target_siblings;
+	struct sbitmap budget_map;
+	atomic_t device_blocked;
+	atomic_t restarts;
+	spinlock_t list_lock;
+	struct list_head starved_entry;
+	unsigned short queue_depth;
+	unsigned short max_queue_depth;
+	unsigned short last_queue_full_depth;
+	unsigned short last_queue_full_count;
+	unsigned long last_queue_full_time;
+	unsigned long queue_ramp_up_period;
+	unsigned long last_queue_ramp_up;
+	unsigned int id;
+	unsigned int channel;
+	u64 lun;
+	unsigned int manufacturer;
+	unsigned int sector_size;
+	void *hostdata;
+	unsigned char type;
+	char scsi_level;
+	char inq_periph_qual;
+	struct mutex inquiry_mutex;
+	unsigned char inquiry_len;
+	unsigned char *inquiry;
+	const char *vendor;
+	const char *model;
+	const char *rev;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pg0;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pg83;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pg80;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pg89;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pgb0;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pgb1;
+	struct scsi_vpd __attribute__((btf_type_tag("rcu"))) *vpd_pgb2;
+	struct scsi_target *sdev_target;
+	blist_flags_t sdev_bflags;
+	unsigned int eh_timeout;
+	unsigned int manage_system_start_stop: 1;
+	unsigned int manage_runtime_start_stop: 1;
+	unsigned int manage_shutdown: 1;
+	unsigned int force_runtime_start_on_system_start: 1;
+	unsigned int removable: 1;
+	unsigned int changed: 1;
+	unsigned int busy: 1;
+	unsigned int lockable: 1;
+	unsigned int locked: 1;
+	unsigned int borken: 1;
+	unsigned int disconnect: 1;
+	unsigned int soft_reset: 1;
+	unsigned int sdtr: 1;
+	unsigned int wdtr: 1;
+	unsigned int ppr: 1;
+	unsigned int tagged_supported: 1;
+	unsigned int simple_tags: 1;
+	unsigned int was_reset: 1;
+	unsigned int expecting_cc_ua: 1;
+	unsigned int use_10_for_rw: 1;
+	unsigned int use_10_for_ms: 1;
+	unsigned int set_dbd_for_ms: 1;
+	unsigned int read_before_ms: 1;
+	unsigned int no_report_opcodes: 1;
+	unsigned int no_write_same: 1;
+	unsigned int use_16_for_rw: 1;
+	unsigned int use_16_for_sync: 1;
+	unsigned int skip_ms_page_8: 1;
+	unsigned int skip_ms_page_3f: 1;
+	unsigned int skip_vpd_pages: 1;
+	unsigned int try_vpd_pages: 1;
+	unsigned int use_192_bytes_for_3f: 1;
+	unsigned int no_start_on_add: 1;
+	unsigned int allow_restart: 1;
+	unsigned int no_start_on_resume: 1;
+	unsigned int start_stop_pwr_cond: 1;
+	unsigned int no_uld_attach: 1;
+	unsigned int select_no_atn: 1;
+	unsigned int fix_capacity: 1;
+	unsigned int guess_capacity: 1;
+	unsigned int retry_hwerror: 1;
+	unsigned int last_sector_bug: 1;
+	unsigned int no_read_disc_info: 1;
+	unsigned int no_read_capacity_16: 1;
+	unsigned int try_rc_10_first: 1;
+	unsigned int security_supported: 1;
+	unsigned int is_visible: 1;
+	unsigned int wce_default_on: 1;
+	unsigned int no_dif: 1;
+	unsigned int broken_fua: 1;
+	unsigned int lun_in_cdb: 1;
+	unsigned int unmap_limit_for_ws: 1;
+	unsigned int rpm_autosuspend: 1;
+	unsigned int ignore_media_change: 1;
+	unsigned int silence_suspend: 1;
+	unsigned int no_vpd_size: 1;
+	unsigned int cdl_supported: 1;
+	unsigned int cdl_enable: 1;
+	unsigned int queue_stopped;
+	bool offline_already;
+	atomic_t disk_events_disable_depth;
+	unsigned long supported_events[1];
+	unsigned long pending_events[1];
+	struct list_head event_list;
+	struct work_struct event_work;
+	unsigned int max_device_blocked;
+	atomic_t iorequest_cnt;
+	atomic_t iodone_cnt;
+	atomic_t ioerr_cnt;
+	atomic_t iotmo_cnt;
+	struct device sdev_gendev;
+	struct device sdev_dev;
+	struct work_struct requeue_work;
+	struct scsi_device_handler *handler;
+	void *handler_data;
+	size_t dma_drain_len;
+	void *dma_drain_buf;
+	unsigned int sg_timeout;
+	unsigned int sg_reserved_size;
+	struct bsg_device *bsg_dev;
+	unsigned char access_state;
+	struct mutex state_mutex;
+	enum scsi_device_state sdev_state;
+	struct task_struct *quiesced_by;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	unsigned long sdev_data[0];
+};
+
+enum scsi_host_state {
+	SHOST_CREATED = 1,
+	SHOST_RUNNING = 2,
+	SHOST_CANCEL = 3,
+	SHOST_DEL = 4,
+	SHOST_RECOVERY = 5,
+	SHOST_CANCEL_RECOVERY = 6,
+	SHOST_DEL_RECOVERY = 7,
+};
+
+struct scsi_host_template;
+
+struct scsi_transport_template;
+
+struct Scsi_Host {
+	struct list_head __devices;
+	struct list_head __targets;
+	struct list_head starved_list;
+	spinlock_t default_lock;
+	spinlock_t *host_lock;
+	struct mutex scan_mutex;
+	struct list_head eh_abort_list;
+	struct list_head eh_cmd_q;
+	struct task_struct *ehandler;
+	struct completion *eh_action;
+	wait_queue_head_t host_wait;
+	const struct scsi_host_template *hostt;
+	struct scsi_transport_template *transportt;
+	struct kref tagset_refcnt;
+	struct completion tagset_freed;
+	struct blk_mq_tag_set tag_set;
+	atomic_t host_blocked;
+	unsigned int host_failed;
+	unsigned int host_eh_scheduled;
+	unsigned int host_no;
+	int eh_deadline;
+	unsigned long last_reset;
+	unsigned int max_channel;
+	unsigned int max_id;
+	u64 max_lun;
+	unsigned int unique_id;
+	unsigned short max_cmd_len;
+	int this_id;
+	int can_queue;
+	short cmd_per_lun;
+	unsigned short sg_tablesize;
+	unsigned short sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int opt_sectors;
+	unsigned int max_segment_size;
+	unsigned long dma_boundary;
+	unsigned long virt_boundary_mask;
+	unsigned int nr_hw_queues;
+	unsigned int nr_maps;
+	unsigned int active_mode: 2;
+	unsigned int host_self_blocked: 1;
+	unsigned int reverse_ordering: 1;
+	unsigned int tmf_in_progress: 1;
+	unsigned int async_scan: 1;
+	unsigned int eh_noresume: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int queuecommand_may_block: 1;
+	unsigned int short_inquiry: 1;
+	unsigned int no_scsi2_lun_in_cdb: 1;
+	char work_q_name[20];
+	struct workqueue_struct *work_q;
+	struct workqueue_struct *tmf_work_q;
+	unsigned int max_host_blocked;
+	unsigned int prot_capabilities;
+	unsigned char prot_guard_type;
+	unsigned long base;
+	unsigned long io_port;
+	unsigned char n_io_port;
+	unsigned char dma_channel;
+	unsigned int irq;
+	enum scsi_host_state shost_state;
+	struct device shost_gendev;
+	struct device shost_dev;
+	void *shost_data;
+	struct device *dma_dev;
+	int rpm_autosuspend_delay;
+	u64 android_kabi_reserved1;
+	unsigned long hostdata[0];
+};
+
+enum scsi_timeout_action {
+	SCSI_EH_DONE = 0,
+	SCSI_EH_RESET_TIMER = 1,
+	SCSI_EH_NOT_HANDLED = 2,
+};
+
+struct scsi_host_template {
+	unsigned int cmd_size;
+	int (*queuecommand)(struct Scsi_Host *, struct scsi_cmnd *);
+	void (*commit_rqs)(struct Scsi_Host *, u16);
+	struct module *module;
+	const char *name;
+	const char * (*info)(struct Scsi_Host *);
+	int (*ioctl)(struct scsi_device *, unsigned int, void __attribute__((btf_type_tag("user"))) *);
+	int (*compat_ioctl)(struct scsi_device *, unsigned int, void __attribute__((btf_type_tag("user"))) *);
+	int (*init_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*exit_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);
+	int (*eh_abort_handler)(struct scsi_cmnd *);
+	int (*eh_device_reset_handler)(struct scsi_cmnd *);
+	int (*eh_target_reset_handler)(struct scsi_cmnd *);
+	int (*eh_bus_reset_handler)(struct scsi_cmnd *);
+	int (*eh_host_reset_handler)(struct scsi_cmnd *);
+	int (*slave_alloc)(struct scsi_device *);
+	int (*slave_configure)(struct scsi_device *);
+	void (*slave_destroy)(struct scsi_device *);
+	int (*target_alloc)(struct scsi_target *);
+	void (*target_destroy)(struct scsi_target *);
+	int (*scan_finished)(struct Scsi_Host *, unsigned long);
+	void (*scan_start)(struct Scsi_Host *);
+	int (*change_queue_depth)(struct scsi_device *, int);
+	void (*map_queues)(struct Scsi_Host *);
+	int (*mq_poll)(struct Scsi_Host *, unsigned int);
+	bool (*dma_need_drain)(struct request *);
+	int (*bios_param)(struct scsi_device *, struct block_device *, sector_t, int *);
+	void (*unlock_native_capacity)(struct scsi_device *);
+	int (*show_info)(struct seq_file *, struct Scsi_Host *);
+	int (*write_info)(struct Scsi_Host *, char *, int);
+	enum scsi_timeout_action (*eh_timed_out)(struct scsi_cmnd *);
+	bool (*eh_should_retry_cmd)(struct scsi_cmnd *);
+	int (*host_reset)(struct Scsi_Host *, int);
+	const char *proc_name;
+	int can_queue;
+	int this_id;
+	unsigned short sg_tablesize;
+	unsigned short sg_prot_tablesize;
+	unsigned int max_sectors;
+	unsigned int max_segment_size;
+	unsigned long dma_boundary;
+	unsigned long virt_boundary_mask;
+	short cmd_per_lun;
+	int tag_alloc_policy;
+	unsigned int track_queue_depth: 1;
+	unsigned int supported_mode: 2;
+	unsigned int emulated: 1;
+	unsigned int skip_settle_delay: 1;
+	unsigned int no_write_same: 1;
+	unsigned int host_tagset: 1;
+	unsigned int queuecommand_may_block: 1;
+	unsigned int max_host_blocked;
+	const struct attribute_group **shost_groups;
+	const struct attribute_group **sdev_groups;
+	u64 vendor_id;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum scsi_target_state {
+	STARGET_CREATED = 1,
+	STARGET_RUNNING = 2,
+	STARGET_REMOVE = 3,
+	STARGET_CREATED_REMOVE = 4,
+	STARGET_DEL = 5,
+};
+
+struct scsi_target {
+	struct scsi_device *starget_sdev_user;
+	struct list_head siblings;
+	struct list_head devices;
+	struct device dev;
+	struct kref reap_ref;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int create: 1;
+	unsigned int single_lun: 1;
+	unsigned int pdt_1f_for_no_lun: 1;
+	unsigned int no_report_luns: 1;
+	unsigned int expecting_lun_change: 1;
+	atomic_t target_busy;
+	atomic_t target_blocked;
+	unsigned int can_queue;
+	unsigned int max_target_blocked;
+	char scsi_level;
+	enum scsi_target_state state;
+	void *hostdata;
+	unsigned long starget_data[0];
+};
+
+struct scsi_vpd {
+	struct callback_head rcu;
+	int len;
+	unsigned char data[0];
+};
+
+typedef void (*btf_trace_scsi_dispatch_cmd_error)(void *, struct scsi_cmnd *, int);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_done)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_dispatch_cmd_timeout)(void *, struct scsi_cmnd *);
+
+typedef void (*btf_trace_scsi_eh_wakeup)(void *, struct Scsi_Host *);
+
+enum scsi_vpd_parameters {
+	SCSI_VPD_HEADER_SIZE = 4,
+	SCSI_VPD_LIST_SIZE = 36,
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_start {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_dispatch_cmd_error {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int rtn;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_cmd_done_timeout_template {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	int result;
+	unsigned int opcode;
+	unsigned int cmd_len;
+	int driver_tag;
+	int scheduler_tag;
+	unsigned int data_sglen;
+	unsigned int prot_sglen;
+	unsigned char prot_op;
+	u32 __data_loc_cmnd;
+	u8 sense_key;
+	u8 asc;
+	u8 ascq;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_eh_wakeup {
+	struct trace_entry ent;
+	unsigned int host_no;
+	char __data[0];
+};
+
+struct scsi_driver {
+	struct device_driver gendrv;
+	int (*resume)(struct device *);
+	void (*rescan)(struct device *);
+	blk_status_t (*init_command)(struct scsi_cmnd *);
+	void (*uninit_command)(struct scsi_cmnd *);
+	int (*done)(struct scsi_cmnd *);
+	int (*eh_action)(struct scsi_cmnd *, int);
+	void (*eh_reset)(struct scsi_cmnd *);
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_start {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_dispatch_cmd_error {
+	u32 cmnd;
+};
+
+struct trace_event_data_offsets_scsi_cmd_done_timeout_template {
+	u32 cmnd;
+};
+
+struct scsi_sense_hdr {
+	u8 response_code;
+	u8 sense_key;
+	u8 asc;
+	u8 ascq;
+	u8 byte4;
+	u8 byte5;
+	u8 byte6;
+	u8 additional_length;
+};
+
+struct scsi_exec_args {
+	unsigned char *sense;
+	unsigned int sense_len;
+	struct scsi_sense_hdr *sshdr;
+	blk_mq_req_flags_t req_flags;
+	int scmd_flags;
+	int *resid;
+};
+
+struct scsi_mode_data {
+	__u32 length;
+	__u16 block_descriptor_length;
+	__u8 medium_type;
+	__u8 device_specific;
+	__u8 header_length;
+	__u8 longlba: 1;
+};
+
+struct trace_event_data_offsets_scsi_eh_wakeup {};
+
+enum scsi_host_status {
+	DID_OK = 0,
+	DID_NO_CONNECT = 1,
+	DID_BUS_BUSY = 2,
+	DID_TIME_OUT = 3,
+	DID_BAD_TARGET = 4,
+	DID_ABORT = 5,
+	DID_PARITY = 6,
+	DID_ERROR = 7,
+	DID_RESET = 8,
+	DID_BAD_INTR = 9,
+	DID_PASSTHROUGH = 10,
+	DID_SOFT_ERROR = 11,
+	DID_IMM_RETRY = 12,
+	DID_REQUEUE = 13,
+	DID_TRANSPORT_DISRUPTED = 14,
+	DID_TRANSPORT_FAILFAST = 15,
+	DID_TRANSPORT_MARGINAL = 20,
+};
+
+struct scsi_transport_template {
+	struct transport_container host_attrs;
+	struct transport_container target_attrs;
+	struct transport_container device_attrs;
+	int (*user_scan)(struct Scsi_Host *, uint, uint, u64);
+	int device_size;
+	int device_private_offset;
+	int target_size;
+	int target_private_offset;
+	int host_size;
+	unsigned int create_work_queue: 1;
+	void (*eh_strategy_handler)(struct Scsi_Host *);
+};
+
+struct scsi_host_busy_iter_data {
+	bool (*fn)(struct scsi_cmnd *, void *);
+	void *priv;
+};
+
+enum scsi_msg_byte {
+	COMMAND_COMPLETE = 0,
+	EXTENDED_MESSAGE = 1,
+	SAVE_POINTERS = 2,
+	RESTORE_POINTERS = 3,
+	DISCONNECT = 4,
+	INITIATOR_ERROR = 5,
+	ABORT_TASK_SET = 6,
+	MESSAGE_REJECT = 7,
+	NOP___2 = 8,
+	MSG_PARITY_ERROR = 9,
+	LINKED_CMD_COMPLETE = 10,
+	LINKED_FLG_CMD_COMPLETE = 11,
+	TARGET_RESET = 12,
+	ABORT_TASK = 13,
+	CLEAR_TASK_SET = 14,
+	INITIATE_RECOVERY = 15,
+	RELEASE_RECOVERY = 16,
+	TERMINATE_IO_PROC = 17,
+	CLEAR_ACA = 22,
+	LOGICAL_UNIT_RESET = 23,
+	SIMPLE_QUEUE_TAG = 32,
+	HEAD_OF_QUEUE_TAG = 33,
+	ORDERED_QUEUE_TAG = 34,
+	IGNORE_WIDE_RESIDUE = 35,
+	ACA = 36,
+	QAS_REQUEST = 85,
+	BUS_DEVICE_RESET = 12,
+	ABORT = 6,
+};
+
+enum sam_status {
+	SAM_STAT_GOOD = 0,
+	SAM_STAT_CHECK_CONDITION = 2,
+	SAM_STAT_CONDITION_MET = 4,
+	SAM_STAT_BUSY = 8,
+	SAM_STAT_INTERMEDIATE = 16,
+	SAM_STAT_INTERMEDIATE_CONDITION_MET = 20,
+	SAM_STAT_RESERVATION_CONFLICT = 24,
+	SAM_STAT_COMMAND_TERMINATED = 34,
+	SAM_STAT_TASK_SET_FULL = 40,
+	SAM_STAT_ACA_ACTIVE = 48,
+	SAM_STAT_TASK_ABORTED = 64,
+};
+
+struct request_sense;
+
+struct cdrom_generic_command {
+	unsigned char cmd[12];
+	unsigned char __attribute__((btf_type_tag("user"))) *buffer;
+	unsigned int buflen;
+	int stat;
+	struct request_sense __attribute__((btf_type_tag("user"))) *sense;
+	unsigned char data_direction;
+	int quiet;
+	int timeout;
+	union {
+		void __attribute__((btf_type_tag("user"))) *reserved[1];
+		void __attribute__((btf_type_tag("user"))) *unused;
+	};
+};
+
+struct request_sense {
+	__u8 error_code: 7;
+	__u8 valid: 1;
+	__u8 segment_number;
+	__u8 sense_key: 4;
+	__u8 reserved2: 1;
+	__u8 ili: 1;
+	__u8 reserved1: 2;
+	__u8 information[4];
+	__u8 add_sense_len;
+	__u8 command_info[4];
+	__u8 asc;
+	__u8 ascq;
+	__u8 fruc;
+	__u8 sks[3];
+	__u8 asb[46];
+};
+
+struct sg_io_hdr {
+	int interface_id;
+	int dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	unsigned short iovec_count;
+	unsigned int dxfer_len;
+	void __attribute__((btf_type_tag("user"))) *dxferp;
+	unsigned char __attribute__((btf_type_tag("user"))) *cmdp;
+	void __attribute__((btf_type_tag("user"))) *sbp;
+	unsigned int timeout;
+	unsigned int flags;
+	int pack_id;
+	void __attribute__((btf_type_tag("user"))) *usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	unsigned short host_status;
+	unsigned short driver_status;
+	int resid;
+	unsigned int duration;
+	unsigned int info;
+};
+
+struct compat_cdrom_generic_command {
+	unsigned char cmd[12];
+	compat_caddr_t buffer;
+	compat_uint_t buflen;
+	compat_int_t stat;
+	compat_caddr_t sense;
+	unsigned char data_direction;
+	unsigned char pad[3];
+	compat_int_t quiet;
+	compat_int_t timeout;
+	compat_caddr_t unused;
+};
+
+struct scsi_idlun {
+	__u32 dev_id;
+	__u32 host_unique_id;
+};
+
+struct scsi_ioctl_command {
+	unsigned int inlen;
+	unsigned int outlen;
+	unsigned char data[0];
+};
+
+struct compat_sg_io_hdr {
+	compat_int_t interface_id;
+	compat_int_t dxfer_direction;
+	unsigned char cmd_len;
+	unsigned char mx_sb_len;
+	unsigned short iovec_count;
+	compat_uint_t dxfer_len;
+	compat_uint_t dxferp;
+	compat_uptr_t cmdp;
+	compat_uptr_t sbp;
+	compat_uint_t timeout;
+	compat_uint_t flags;
+	compat_int_t pack_id;
+	compat_uptr_t usr_ptr;
+	unsigned char status;
+	unsigned char masked_status;
+	unsigned char msg_status;
+	unsigned char sb_len_wr;
+	unsigned short host_status;
+	unsigned short driver_status;
+	compat_int_t resid;
+	compat_uint_t duration;
+	compat_uint_t info;
+};
+
+enum scsi_disposition {
+	NEEDS_RETRY = 8193,
+	SUCCESS = 8194,
+	FAILED = 8195,
+	QUEUED = 8196,
+	SOFT_ERROR = 8197,
+	ADD_TO_MLQUEUE = 8198,
+	TIMEOUT_ERROR = 8199,
+	SCSI_RETURN_NOT_HANDLED = 8200,
+	FAST_IO_FAIL = 8201,
+};
+
+enum scsi_ml_status {
+	SCSIML_STAT_OK = 0,
+	SCSIML_STAT_RESV_CONFLICT = 1,
+	SCSIML_STAT_NOSPC = 2,
+	SCSIML_STAT_MED_ERROR = 3,
+	SCSIML_STAT_TGT_FAILURE = 4,
+	SCSIML_STAT_DL_TIMEOUT = 5,
+};
+
+enum scsi_prot_operations {
+	SCSI_PROT_NORMAL = 0,
+	SCSI_PROT_READ_INSERT = 1,
+	SCSI_PROT_WRITE_STRIP = 2,
+	SCSI_PROT_READ_STRIP = 3,
+	SCSI_PROT_WRITE_INSERT = 4,
+	SCSI_PROT_READ_PASS = 5,
+	SCSI_PROT_WRITE_PASS = 6,
+};
+
+enum scsi_device_event {
+	SDEV_EVT_MEDIA_CHANGE = 1,
+	SDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,
+	SDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,
+	SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,
+	SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,
+	SDEV_EVT_LUN_CHANGE_REPORTED = 6,
+	SDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,
+	SDEV_EVT_POWER_ON_RESET_OCCURRED = 8,
+	SDEV_EVT_FIRST = 1,
+	SDEV_EVT_LAST = 8,
+	SDEV_EVT_MAXBITS = 9,
+};
+
+typedef void (*activate_complete)(void *, int);
+
+struct scsi_device_handler {
+	struct list_head list;
+	struct module *module;
+	const char *name;
+	enum scsi_disposition (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *);
+	int (*attach)(struct scsi_device *);
+	void (*detach)(struct scsi_device *);
+	int (*activate)(struct scsi_device *, activate_complete, void *);
+	blk_status_t (*prep_fn)(struct scsi_device *, struct request *);
+	int (*set_params)(struct scsi_device *, const char *);
+	void (*rescan)(struct scsi_device *);
+};
+
+struct scsi_eh_save {
+	int result;
+	unsigned int resid_len;
+	int eh_eflags;
+	enum dma_data_direction data_direction;
+	unsigned int underflow;
+	unsigned char cmd_len;
+	unsigned char prot_op;
+	unsigned char cmnd[32];
+	struct scsi_data_buffer sdb;
+	struct scatterlist sense_sgl;
+};
+
+enum {
+	ACTION_FAIL = 0,
+	ACTION_REPREP = 1,
+	ACTION_DELAYED_REPREP = 2,
+	ACTION_RETRY = 3,
+	ACTION_DELAYED_RETRY = 4,
+};
+
+enum scsi_host_prot_capabilities {
+	SHOST_DIF_TYPE1_PROTECTION = 1,
+	SHOST_DIF_TYPE2_PROTECTION = 2,
+	SHOST_DIF_TYPE3_PROTECTION = 4,
+	SHOST_DIX_TYPE0_PROTECTION = 8,
+	SHOST_DIX_TYPE1_PROTECTION = 16,
+	SHOST_DIX_TYPE2_PROTECTION = 32,
+	SHOST_DIX_TYPE3_PROTECTION = 64,
+};
+
+struct scsi_event {
+	enum scsi_device_event evt_type;
+	struct list_head node;
+};
+
+enum scsi_scan_mode {
+	SCSI_SCAN_INITIAL = 0,
+	SCSI_SCAN_RESCAN = 1,
+	SCSI_SCAN_MANUAL = 2,
+};
+
+enum scsi_timeouts {
+	SCSI_DEFAULT_EH_TIMEOUT = 2500,
+};
+
+struct async_scan_data {
+	struct list_head list;
+	struct Scsi_Host *shost;
+	struct completion prev_finished;
+};
+
+struct scsi_lun {
+	__u8 scsi_lun[8];
+};
+
+enum scsi_devinfo_key {
+	SCSI_DEVINFO_GLOBAL = 0,
+	SCSI_DEVINFO_SPI = 1,
+};
+
+struct scsi_dev_info_list {
+	struct list_head dev_info_list;
+	char vendor[8];
+	char model[16];
+	blist_flags_t flags;
+	unsigned int compatible;
+};
+
+struct scsi_dev_info_list_table {
+	struct list_head node;
+	struct list_head scsi_dev_info_list;
+	const char *name;
+	int key;
+};
+
+struct scsi_varlen_cdb_hdr {
+	__u8 opcode;
+	__u8 control;
+	__u8 misc[5];
+	__u8 additional_cdb_length;
+	__be16 service_action;
+};
+
+enum scsi_pr_type {
+	SCSI_PR_WRITE_EXCLUSIVE = 1,
+	SCSI_PR_EXCLUSIVE_ACCESS = 3,
+	SCSI_PR_WRITE_EXCLUSIVE_REG_ONLY = 5,
+	SCSI_PR_EXCLUSIVE_ACCESS_REG_ONLY = 6,
+	SCSI_PR_WRITE_EXCLUSIVE_ALL_REGS = 7,
+	SCSI_PR_EXCLUSIVE_ACCESS_ALL_REGS = 8,
+};
+
+enum pr_status {
+	PR_STS_SUCCESS = 0,
+	PR_STS_IOERR = 2,
+	PR_STS_RESERVATION_CONFLICT = 24,
+	PR_STS_RETRY_PATH_FAILURE = 917504,
+	PR_STS_PATH_FAST_FAILED = 983040,
+	PR_STS_PATH_FAILED = 65536,
+};
+
+enum {
+	SD_DEF_XFER_BLOCKS = 65535,
+	SD_MAX_XFER_BLOCKS = 4294967295,
+	SD_MAX_WS10_BLOCKS = 65535,
+	SD_MAX_WS16_BLOCKS = 8388607,
+};
+
+enum {
+	SD_LBP_FULL = 0,
+	SD_LBP_UNMAP = 1,
+	SD_LBP_WS16 = 2,
+	SD_LBP_WS10 = 3,
+	SD_LBP_ZERO = 4,
+	SD_LBP_DISABLE = 5,
+};
+
+enum t10_dif_type {
+	T10_PI_TYPE0_PROTECTION = 0,
+	T10_PI_TYPE1_PROTECTION = 1,
+	T10_PI_TYPE2_PROTECTION = 2,
+	T10_PI_TYPE3_PROTECTION = 3,
+};
+
+enum {
+	SD_ZERO_WRITE = 0,
+	SD_ZERO_WS = 1,
+	SD_ZERO_WS16_UNMAP = 2,
+	SD_ZERO_WS10_UNMAP = 3,
+};
+
+enum bip_flags {
+	BIP_BLOCK_INTEGRITY = 1,
+	BIP_MAPPED_INTEGRITY = 2,
+	BIP_CTRL_NOCHECK = 4,
+	BIP_DISK_NOCHECK = 8,
+	BIP_IP_CHECKSUM = 16,
+};
+
+enum scsi_prot_flags {
+	SCSI_PROT_TRANSFER_PI = 1,
+	SCSI_PROT_GUARD_CHECK = 2,
+	SCSI_PROT_REF_CHECK = 4,
+	SCSI_PROT_REF_INCREMENT = 8,
+	SCSI_PROT_IP_CHECKSUM = 16,
+};
+
+enum {
+	SD_EXT_CDB_SIZE = 32,
+	SD_MEMPOOL_SIZE = 2,
+};
+
+struct opal_dev;
+
+struct zoned_disk_info {
+	u32 nr_zones;
+	u32 zone_blocks;
+};
+
+struct scsi_disk {
+	struct scsi_device *device;
+	struct device disk_dev;
+	struct gendisk *disk;
+	struct opal_dev *opal_dev;
+	struct zoned_disk_info early_zone_info;
+	struct zoned_disk_info zone_info;
+	u32 zones_optimal_open;
+	u32 zones_optimal_nonseq;
+	u32 zones_max_open;
+	u32 zone_starting_lba_gran;
+	u32 *zones_wp_offset;
+	spinlock_t zones_wp_offset_lock;
+	u32 *rev_wp_offset;
+	struct mutex rev_mutex;
+	struct work_struct zone_wp_offset_work;
+	char *zone_wp_update_buf;
+	atomic_t openers;
+	sector_t capacity;
+	int max_retries;
+	u32 min_xfer_blocks;
+	u32 max_xfer_blocks;
+	u32 opt_xfer_blocks;
+	u32 max_ws_blocks;
+	u32 max_unmap_blocks;
+	u32 unmap_granularity;
+	u32 unmap_alignment;
+	u32 index;
+	unsigned int physical_block_size;
+	unsigned int max_medium_access_timeouts;
+	unsigned int medium_access_timed_out;
+	u8 media_present;
+	u8 write_prot;
+	u8 protection_type;
+	u8 provisioning_mode;
+	u8 zeroing_mode;
+	u8 nr_actuators;
+	bool suspended;
+	unsigned int ATO: 1;
+	unsigned int cache_override: 1;
+	unsigned int WCE: 1;
+	unsigned int RCD: 1;
+	unsigned int DPOFUA: 1;
+	unsigned int first_scan: 1;
+	unsigned int lbpme: 1;
+	unsigned int lbprz: 1;
+	unsigned int lbpu: 1;
+	unsigned int lbpws: 1;
+	unsigned int lbpws10: 1;
+	unsigned int lbpvpd: 1;
+	unsigned int ws10: 1;
+	unsigned int ws16: 1;
+	unsigned int rc_basis: 2;
+	unsigned int zoned: 2;
+	unsigned int urswrz: 1;
+	unsigned int security: 1;
+	unsigned int ignore_medium_access_errors: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef void (*btf_trace_scsi_prepare_zone_append)(void *, struct scsi_cmnd *, sector_t, unsigned int);
+
+typedef void (*btf_trace_scsi_zone_wp_update)(void *, struct scsi_cmnd *, sector_t, unsigned int, unsigned int);
+
+enum zbc_zone_type {
+	ZBC_ZONE_TYPE_CONV = 1,
+	ZBC_ZONE_TYPE_SEQWRITE_REQ = 2,
+	ZBC_ZONE_TYPE_SEQWRITE_PREF = 3,
+	ZBC_ZONE_TYPE_SEQ_OR_BEFORE_REQ = 4,
+	ZBC_ZONE_TYPE_GAP = 5,
+};
+
+enum zbc_zone_cond {
+	ZBC_ZONE_COND_NO_WP = 0,
+	ZBC_ZONE_COND_EMPTY = 1,
+	ZBC_ZONE_COND_IMP_OPEN = 2,
+	ZBC_ZONE_COND_EXP_OPEN = 3,
+	ZBC_ZONE_COND_CLOSED = 4,
+	ZBC_ZONE_COND_READONLY = 13,
+	ZBC_ZONE_COND_FULL = 14,
+	ZBC_ZONE_COND_OFFLINE = 15,
+};
+
+enum zbc_zone_alignment_method {
+	ZBC_CONSTANT_ZONE_LENGTH = 1,
+	ZBC_CONSTANT_ZONE_START_OFFSET = 8,
+};
+
+struct trace_event_raw_scsi_prepare_zone_append {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	sector_t lba;
+	unsigned int wp_offset;
+	char __data[0];
+};
+
+struct trace_event_raw_scsi_zone_wp_update {
+	struct trace_entry ent;
+	unsigned int host_no;
+	unsigned int channel;
+	unsigned int id;
+	unsigned int lun;
+	sector_t rq_sector;
+	unsigned int wp_offset;
+	unsigned int good_bytes;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_scsi_prepare_zone_append {};
+
+struct trace_event_data_offsets_scsi_zone_wp_update {};
+
+struct nvme_command;
+
+typedef void (*btf_trace_nvme_setup_cmd)(void *, struct request *, struct nvme_command *);
+
+struct nvme_sgl_desc {
+	__le64 addr;
+	__le32 length;
+	__u8 rsvd[3];
+	__u8 type;
+};
+
+struct nvme_keyed_sgl_desc {
+	__le64 addr;
+	__u8 length[3];
+	__u8 key[4];
+	__u8 type;
+};
+
+union nvme_data_ptr {
+	struct {
+		__le64 prp1;
+		__le64 prp2;
+	};
+	struct nvme_sgl_desc sgl;
+	struct nvme_keyed_sgl_desc ksgl;
+};
+
+struct nvme_common_command {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le32 cdw2[2];
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	union {
+		struct {
+			__le32 cdw10;
+			__le32 cdw11;
+			__le32 cdw12;
+			__le32 cdw13;
+			__le32 cdw14;
+			__le32 cdw15;
+		};
+		struct {
+			__le32 cdw10;
+			__le32 cdw11;
+			__le32 cdw12;
+			__le32 cdw13;
+			__le32 cdw14;
+			__le32 cdw15;
+		} cdws;
+	};
+};
+
+struct nvme_rw_command {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le32 cdw2;
+	__le32 cdw3;
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le16 length;
+	__le16 control;
+	__le32 dsmgmt;
+	__le32 reftag;
+	__le16 apptag;
+	__le16 appmask;
+};
+
+struct nvme_identify {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__u8 cns;
+	__u8 rsvd3;
+	__le16 ctrlid;
+	__u8 rsvd11[3];
+	__u8 csi;
+	__u32 rsvd12[4];
+};
+
+struct nvme_features {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le32 fid;
+	__le32 dword11;
+	__le32 dword12;
+	__le32 dword13;
+	__le32 dword14;
+	__le32 dword15;
+};
+
+struct nvme_create_cq {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	__le64 prp1;
+	__u64 rsvd8;
+	__le16 cqid;
+	__le16 qsize;
+	__le16 cq_flags;
+	__le16 irq_vector;
+	__u32 rsvd12[4];
+};
+
+struct nvme_create_sq {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	__le64 prp1;
+	__u64 rsvd8;
+	__le16 sqid;
+	__le16 qsize;
+	__le16 sq_flags;
+	__le16 cqid;
+	__u32 rsvd12[4];
+};
+
+struct nvme_delete_queue {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[9];
+	__le16 qid;
+	__u16 rsvd10;
+	__u32 rsvd11[5];
+};
+
+struct nvme_download_firmware {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	union nvme_data_ptr dptr;
+	__le32 numd;
+	__le32 offset;
+	__u32 rsvd12[4];
+};
+
+struct nvme_format_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[4];
+	__le32 cdw10;
+	__u32 rsvd11[5];
+};
+
+struct nvme_dsm_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le32 nr;
+	__le32 attributes;
+	__u32 rsvd12[4];
+};
+
+struct nvme_write_zeroes_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2;
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le16 length;
+	__le16 control;
+	__le32 dsmgmt;
+	__le32 reftag;
+	__le16 apptag;
+	__le16 appmask;
+};
+
+struct nvme_zone_mgmt_send_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le32 cdw2[2];
+	__le64 metadata;
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le32 cdw12;
+	__u8 zsa;
+	__u8 select_all;
+	__u8 rsvd13[2];
+	__le32 cdw14[2];
+};
+
+struct nvme_zone_mgmt_recv_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__le64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le64 slba;
+	__le32 numd;
+	__u8 zra;
+	__u8 zrasf;
+	__u8 pr;
+	__u8 rsvd13;
+	__le32 cdw14[2];
+};
+
+struct nvme_abort_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[9];
+	__le16 sqid;
+	__u16 cid;
+	__u32 rsvd11[5];
+};
+
+struct nvme_get_log_page_command {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__u8 lid;
+	__u8 lsp;
+	__le16 numdl;
+	__le16 numdu;
+	__u16 rsvd11;
+	union {
+		struct {
+			__le32 lpol;
+			__le32 lpou;
+		};
+		__le64 lpo;
+	};
+	__u8 rsvd14[3];
+	__u8 csi;
+	__u32 rsvd15;
+};
+
+struct nvmf_common_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[35];
+	__u8 ts[24];
+};
+
+struct nvmf_connect_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__le16 recfmt;
+	__le16 qid;
+	__le16 sqsize;
+	__u8 cattr;
+	__u8 resv3;
+	__le32 kato;
+	__u8 resv4[12];
+};
+
+struct nvmf_property_set_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[35];
+	__u8 attrib;
+	__u8 resv3[3];
+	__le32 offset;
+	__le64 value;
+	__u8 resv4[8];
+};
+
+struct nvmf_property_get_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[35];
+	__u8 attrib;
+	__u8 resv3[3];
+	__le32 offset;
+	__u8 resv4[16];
+};
+
+struct nvmf_auth_common_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__u8 resv3;
+	__u8 spsp0;
+	__u8 spsp1;
+	__u8 secp;
+	__le32 al_tl;
+	__u8 resv4[16];
+};
+
+struct nvmf_auth_send_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__u8 resv3;
+	__u8 spsp0;
+	__u8 spsp1;
+	__u8 secp;
+	__le32 tl;
+	__u8 resv4[16];
+};
+
+struct nvmf_auth_receive_command {
+	__u8 opcode;
+	__u8 resv1;
+	__u16 command_id;
+	__u8 fctype;
+	__u8 resv2[19];
+	union nvme_data_ptr dptr;
+	__u8 resv3;
+	__u8 spsp0;
+	__u8 spsp1;
+	__u8 secp;
+	__le32 al;
+	__u8 resv4[16];
+};
+
+struct nvme_dbbuf {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__u32 rsvd1[5];
+	__le64 prp1;
+	__le64 prp2;
+	__u32 rsvd12[6];
+};
+
+struct nvme_directive_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 command_id;
+	__le32 nsid;
+	__u64 rsvd2[2];
+	union nvme_data_ptr dptr;
+	__le32 numd;
+	__u8 doper;
+	__u8 dtype;
+	__le16 dspec;
+	__u8 endir;
+	__u8 tdtype;
+	__u16 rsvd15;
+	__u32 rsvd16[3];
+};
+
+struct nvme_command {
+	union {
+		struct nvme_common_command common;
+		struct nvme_rw_command rw;
+		struct nvme_identify identify;
+		struct nvme_features features;
+		struct nvme_create_cq create_cq;
+		struct nvme_create_sq create_sq;
+		struct nvme_delete_queue delete_queue;
+		struct nvme_download_firmware dlfw;
+		struct nvme_format_cmd format;
+		struct nvme_dsm_cmd dsm;
+		struct nvme_write_zeroes_cmd write_zeroes;
+		struct nvme_zone_mgmt_send_cmd zms;
+		struct nvme_zone_mgmt_recv_cmd zmr;
+		struct nvme_abort_cmd abort;
+		struct nvme_get_log_page_command get_log_page;
+		struct nvmf_common_command fabrics;
+		struct nvmf_connect_command connect;
+		struct nvmf_property_set_command prop_set;
+		struct nvmf_property_get_command prop_get;
+		struct nvmf_auth_common_command auth_common;
+		struct nvmf_auth_send_command auth_send;
+		struct nvmf_auth_receive_command auth_receive;
+		struct nvme_dbbuf dbbuf;
+		struct nvme_directive_cmd directive;
+	};
+};
+
+typedef void (*btf_trace_nvme_complete_rq)(void *, struct request *);
+
+struct nvme_ctrl;
+
+typedef void (*btf_trace_nvme_async_event)(void *, struct nvme_ctrl *, u32);
+
+enum nvme_ctrl_state {
+	NVME_CTRL_NEW = 0,
+	NVME_CTRL_LIVE = 1,
+	NVME_CTRL_RESETTING = 2,
+	NVME_CTRL_CONNECTING = 3,
+	NVME_CTRL_DELETING = 4,
+	NVME_CTRL_DELETING_NOIO = 5,
+	NVME_CTRL_DEAD = 6,
+};
+
+struct nvme_id_power_state {
+	__le16 max_power;
+	__u8 rsvd2;
+	__u8 flags;
+	__le32 entry_lat;
+	__le32 exit_lat;
+	__u8 read_tput;
+	__u8 read_lat;
+	__u8 write_tput;
+	__u8 write_lat;
+	__le16 idle_power;
+	__u8 idle_scale;
+	__u8 rsvd19;
+	__le16 active_power;
+	__u8 active_work_scale;
+	__u8 rsvd23[9];
+};
+
+struct nvme_fault_inject {};
+
+enum nvme_ctrl_type {
+	NVME_CTRL_IO = 1,
+	NVME_CTRL_DISC = 2,
+	NVME_CTRL_ADMIN = 3,
+};
+
+enum nvme_dctype {
+	NVME_DCTYPE_NOT_REPORTED = 0,
+	NVME_DCTYPE_DDC = 1,
+	NVME_DCTYPE_CDC = 2,
+};
+
+struct nvme_ctrl_ops;
+
+struct nvme_subsystem;
+
+struct nvme_effects_log;
+
+struct nvme_ana_rsp_hdr;
+
+struct nvmf_ctrl_options;
+
+struct nvme_ctrl {
+	bool comp_seen;
+	bool identified;
+	enum nvme_ctrl_state state;
+	spinlock_t lock;
+	struct mutex scan_lock;
+	const struct nvme_ctrl_ops *ops;
+	struct request_queue *admin_q;
+	struct request_queue *connect_q;
+	struct request_queue *fabrics_q;
+	struct device *dev;
+	int instance;
+	int numa_node;
+	struct blk_mq_tag_set *tagset;
+	struct blk_mq_tag_set *admin_tagset;
+	struct list_head namespaces;
+	struct rw_semaphore namespaces_rwsem;
+	struct device ctrl_device;
+	struct device *device;
+	struct cdev cdev;
+	struct work_struct reset_work;
+	struct work_struct delete_work;
+	wait_queue_head_t state_wq;
+	struct nvme_subsystem *subsys;
+	struct list_head subsys_entry;
+	struct opal_dev *opal_dev;
+	char name[12];
+	u16 cntlid;
+	u16 mtfa;
+	u32 ctrl_config;
+	u32 queue_count;
+	u64 cap;
+	u32 max_hw_sectors;
+	u32 max_segments;
+	u32 max_integrity_segments;
+	u32 max_discard_sectors;
+	u32 max_discard_segments;
+	u32 max_zeroes_sectors;
+	u32 max_zone_append;
+	u16 crdt[3];
+	u16 oncs;
+	u32 dmrsl;
+	u16 oacs;
+	u16 sqsize;
+	u32 max_namespaces;
+	atomic_t abort_limit;
+	u8 vwc;
+	u32 vs;
+	u32 sgls;
+	u16 kas;
+	u8 npss;
+	u8 apsta;
+	u16 wctemp;
+	u16 cctemp;
+	u32 oaes;
+	u32 aen_result;
+	u32 ctratt;
+	unsigned int shutdown_timeout;
+	unsigned int kato;
+	bool subsystem;
+	unsigned long quirks;
+	struct nvme_id_power_state psd[32];
+	struct nvme_effects_log *effects;
+	struct xarray cels;
+	struct work_struct scan_work;
+	struct work_struct async_event_work;
+	struct delayed_work ka_work;
+	struct delayed_work failfast_work;
+	struct nvme_command ka_cmd;
+	unsigned long ka_last_check_time;
+	struct work_struct fw_act_work;
+	unsigned long events;
+	u8 anacap;
+	u8 anatt;
+	u32 anagrpmax;
+	u32 nanagrpid;
+	struct mutex ana_lock;
+	struct nvme_ana_rsp_hdr *ana_log_buf;
+	size_t ana_log_size;
+	struct timer_list anatt_timer;
+	struct work_struct ana_work;
+	u64 ps_max_latency_us;
+	bool apst_enabled;
+	u16 hmmaxd;
+	u32 hmpre;
+	u32 hmmin;
+	u32 hmminds;
+	u32 ioccsz;
+	u32 iorcsz;
+	u16 icdoff;
+	u16 maxcmd;
+	int nr_reconnects;
+	unsigned long flags;
+	struct nvmf_ctrl_options *opts;
+	struct page *discard_page;
+	unsigned long discard_page_busy;
+	struct nvme_fault_inject fault_inject;
+	enum nvme_ctrl_type cntrltype;
+	enum nvme_dctype dctype;
+};
+
+struct nvme_ctrl_ops {
+	const char *name;
+	struct module *module;
+	unsigned int flags;
+	const struct attribute_group **dev_attr_groups;
+	int (*reg_read32)(struct nvme_ctrl *, u32, u32 *);
+	int (*reg_write32)(struct nvme_ctrl *, u32, u32);
+	int (*reg_read64)(struct nvme_ctrl *, u32, u64 *);
+	void (*free_ctrl)(struct nvme_ctrl *);
+	void (*submit_async_event)(struct nvme_ctrl *);
+	void (*delete_ctrl)(struct nvme_ctrl *);
+	void (*stop_ctrl)(struct nvme_ctrl *);
+	int (*get_address)(struct nvme_ctrl *, char *, int);
+	void (*print_device_info)(struct nvme_ctrl *);
+	bool (*supports_pci_p2pdma)(struct nvme_ctrl *);
+};
+
+enum nvme_subsys_type {
+	NVME_NQN_DISC = 1,
+	NVME_NQN_NVME = 2,
+	NVME_NQN_CURR = 3,
+};
+
+enum nvme_iopolicy {
+	NVME_IOPOLICY_NUMA = 0,
+	NVME_IOPOLICY_RR = 1,
+};
+
+struct nvme_subsystem {
+	int instance;
+	struct device dev;
+	struct kref ref;
+	struct list_head entry;
+	struct mutex lock;
+	struct list_head ctrls;
+	struct list_head nsheads;
+	char subnqn[223];
+	char serial[20];
+	char model[40];
+	char firmware_rev[8];
+	u8 cmic;
+	enum nvme_subsys_type subtype;
+	u16 vendor_id;
+	u16 awupf;
+	struct ida ns_ida;
+	enum nvme_iopolicy iopolicy;
+};
+
+struct nvme_effects_log {
+	__le32 acs[256];
+	__le32 iocs[256];
+	__u8 resv[2048];
+};
+
+struct nvme_ana_rsp_hdr {
+	__le64 chgcnt;
+	__le16 ngrps;
+	__le16 rsvd10[3];
+};
+
+struct nvmf_host;
+
+struct nvmf_ctrl_options {
+	unsigned int mask;
+	int max_reconnects;
+	char *transport;
+	char *subsysnqn;
+	char *traddr;
+	char *trsvcid;
+	char *host_traddr;
+	char *host_iface;
+	size_t queue_size;
+	unsigned int nr_io_queues;
+	unsigned int reconnect_delay;
+	bool discovery_nqn;
+	bool duplicate_connect;
+	unsigned int kato;
+	struct nvmf_host *host;
+	char *dhchap_secret;
+	char *dhchap_ctrl_secret;
+	bool disable_sqflow;
+	bool hdr_digest;
+	bool data_digest;
+	unsigned int nr_write_queues;
+	unsigned int nr_poll_queues;
+	int tos;
+	int fast_io_fail_tmo;
+};
+
+struct nvmf_host {
+	struct kref ref;
+	struct list_head list;
+	char nqn[223];
+	uuid_t id;
+};
+
+typedef void (*btf_trace_nvme_sq)(void *, struct request *, __le16, int);
+
+struct nvme_core_quirk_entry {
+	u16 vid;
+	const char *mn;
+	const char *fr;
+	unsigned long quirks;
+};
+
+enum nvme_disposition {
+	COMPLETE = 0,
+	RETRY = 1,
+	FAILOVER = 2,
+	AUTHENTICATE = 3,
+};
+
+enum {
+	NVME_SC_SUCCESS = 0,
+	NVME_SC_INVALID_OPCODE = 1,
+	NVME_SC_INVALID_FIELD = 2,
+	NVME_SC_CMDID_CONFLICT = 3,
+	NVME_SC_DATA_XFER_ERROR = 4,
+	NVME_SC_POWER_LOSS = 5,
+	NVME_SC_INTERNAL = 6,
+	NVME_SC_ABORT_REQ = 7,
+	NVME_SC_ABORT_QUEUE = 8,
+	NVME_SC_FUSED_FAIL = 9,
+	NVME_SC_FUSED_MISSING = 10,
+	NVME_SC_INVALID_NS = 11,
+	NVME_SC_CMD_SEQ_ERROR = 12,
+	NVME_SC_SGL_INVALID_LAST = 13,
+	NVME_SC_SGL_INVALID_COUNT = 14,
+	NVME_SC_SGL_INVALID_DATA = 15,
+	NVME_SC_SGL_INVALID_METADATA = 16,
+	NVME_SC_SGL_INVALID_TYPE = 17,
+	NVME_SC_CMB_INVALID_USE = 18,
+	NVME_SC_PRP_INVALID_OFFSET = 19,
+	NVME_SC_ATOMIC_WU_EXCEEDED = 20,
+	NVME_SC_OP_DENIED = 21,
+	NVME_SC_SGL_INVALID_OFFSET = 22,
+	NVME_SC_RESERVED = 23,
+	NVME_SC_HOST_ID_INCONSIST = 24,
+	NVME_SC_KA_TIMEOUT_EXPIRED = 25,
+	NVME_SC_KA_TIMEOUT_INVALID = 26,
+	NVME_SC_ABORTED_PREEMPT_ABORT = 27,
+	NVME_SC_SANITIZE_FAILED = 28,
+	NVME_SC_SANITIZE_IN_PROGRESS = 29,
+	NVME_SC_SGL_INVALID_GRANULARITY = 30,
+	NVME_SC_CMD_NOT_SUP_CMB_QUEUE = 31,
+	NVME_SC_NS_WRITE_PROTECTED = 32,
+	NVME_SC_CMD_INTERRUPTED = 33,
+	NVME_SC_TRANSIENT_TR_ERR = 34,
+	NVME_SC_ADMIN_COMMAND_MEDIA_NOT_READY = 36,
+	NVME_SC_INVALID_IO_CMD_SET = 44,
+	NVME_SC_LBA_RANGE = 128,
+	NVME_SC_CAP_EXCEEDED = 129,
+	NVME_SC_NS_NOT_READY = 130,
+	NVME_SC_RESERVATION_CONFLICT = 131,
+	NVME_SC_FORMAT_IN_PROGRESS = 132,
+	NVME_SC_CQ_INVALID = 256,
+	NVME_SC_QID_INVALID = 257,
+	NVME_SC_QUEUE_SIZE = 258,
+	NVME_SC_ABORT_LIMIT = 259,
+	NVME_SC_ABORT_MISSING = 260,
+	NVME_SC_ASYNC_LIMIT = 261,
+	NVME_SC_FIRMWARE_SLOT = 262,
+	NVME_SC_FIRMWARE_IMAGE = 263,
+	NVME_SC_INVALID_VECTOR = 264,
+	NVME_SC_INVALID_LOG_PAGE = 265,
+	NVME_SC_INVALID_FORMAT = 266,
+	NVME_SC_FW_NEEDS_CONV_RESET = 267,
+	NVME_SC_INVALID_QUEUE = 268,
+	NVME_SC_FEATURE_NOT_SAVEABLE = 269,
+	NVME_SC_FEATURE_NOT_CHANGEABLE = 270,
+	NVME_SC_FEATURE_NOT_PER_NS = 271,
+	NVME_SC_FW_NEEDS_SUBSYS_RESET = 272,
+	NVME_SC_FW_NEEDS_RESET = 273,
+	NVME_SC_FW_NEEDS_MAX_TIME = 274,
+	NVME_SC_FW_ACTIVATE_PROHIBITED = 275,
+	NVME_SC_OVERLAPPING_RANGE = 276,
+	NVME_SC_NS_INSUFFICIENT_CAP = 277,
+	NVME_SC_NS_ID_UNAVAILABLE = 278,
+	NVME_SC_NS_ALREADY_ATTACHED = 280,
+	NVME_SC_NS_IS_PRIVATE = 281,
+	NVME_SC_NS_NOT_ATTACHED = 282,
+	NVME_SC_THIN_PROV_NOT_SUPP = 283,
+	NVME_SC_CTRL_LIST_INVALID = 284,
+	NVME_SC_SELT_TEST_IN_PROGRESS = 285,
+	NVME_SC_BP_WRITE_PROHIBITED = 286,
+	NVME_SC_CTRL_ID_INVALID = 287,
+	NVME_SC_SEC_CTRL_STATE_INVALID = 288,
+	NVME_SC_CTRL_RES_NUM_INVALID = 289,
+	NVME_SC_RES_ID_INVALID = 290,
+	NVME_SC_PMR_SAN_PROHIBITED = 291,
+	NVME_SC_ANA_GROUP_ID_INVALID = 292,
+	NVME_SC_ANA_ATTACH_FAILED = 293,
+	NVME_SC_BAD_ATTRIBUTES = 384,
+	NVME_SC_INVALID_PI = 385,
+	NVME_SC_READ_ONLY = 386,
+	NVME_SC_ONCS_NOT_SUPPORTED = 387,
+	NVME_SC_CONNECT_FORMAT = 384,
+	NVME_SC_CONNECT_CTRL_BUSY = 385,
+	NVME_SC_CONNECT_INVALID_PARAM = 386,
+	NVME_SC_CONNECT_RESTART_DISC = 387,
+	NVME_SC_CONNECT_INVALID_HOST = 388,
+	NVME_SC_DISCOVERY_RESTART = 400,
+	NVME_SC_AUTH_REQUIRED = 401,
+	NVME_SC_ZONE_BOUNDARY_ERROR = 440,
+	NVME_SC_ZONE_FULL = 441,
+	NVME_SC_ZONE_READ_ONLY = 442,
+	NVME_SC_ZONE_OFFLINE = 443,
+	NVME_SC_ZONE_INVALID_WRITE = 444,
+	NVME_SC_ZONE_TOO_MANY_ACTIVE = 445,
+	NVME_SC_ZONE_TOO_MANY_OPEN = 446,
+	NVME_SC_ZONE_INVALID_TRANSITION = 447,
+	NVME_SC_WRITE_FAULT = 640,
+	NVME_SC_READ_ERROR = 641,
+	NVME_SC_GUARD_CHECK = 642,
+	NVME_SC_APPTAG_CHECK = 643,
+	NVME_SC_REFTAG_CHECK = 644,
+	NVME_SC_COMPARE_FAILED = 645,
+	NVME_SC_ACCESS_DENIED = 646,
+	NVME_SC_UNWRITTEN_BLOCK = 647,
+	NVME_SC_INTERNAL_PATH_ERROR = 768,
+	NVME_SC_ANA_PERSISTENT_LOSS = 769,
+	NVME_SC_ANA_INACCESSIBLE = 770,
+	NVME_SC_ANA_TRANSITION = 771,
+	NVME_SC_CTRL_PATH_ERROR = 864,
+	NVME_SC_HOST_PATH_ERROR = 880,
+	NVME_SC_HOST_ABORTED_CMD = 881,
+	NVME_SC_CRD = 6144,
+	NVME_SC_MORE = 8192,
+	NVME_SC_DNR = 16384,
+};
+
+enum {
+	NVME_REQ_CANCELLED = 1,
+	NVME_REQ_USERCMD = 2,
+	NVME_MPATH_IO_STATS = 4,
+};
+
+enum nvme_ana_state {
+	NVME_ANA_OPTIMIZED = 1,
+	NVME_ANA_NONOPTIMIZED = 2,
+	NVME_ANA_INACCESSIBLE = 3,
+	NVME_ANA_PERSISTENT_LOSS = 4,
+	NVME_ANA_CHANGE = 15,
+};
+
+enum {
+	NVME_CMD_FUSE_FIRST = 1,
+	NVME_CMD_FUSE_SECOND = 2,
+	NVME_CMD_SGL_METABUF = 64,
+	NVME_CMD_SGL_METASEG = 128,
+	NVME_CMD_SGL_ALL = 192,
+};
+
+enum nvme_ctrl_flags {
+	NVME_CTRL_FAILFAST_EXPIRED = 0,
+	NVME_CTRL_ADMIN_Q_STOPPED = 1,
+	NVME_CTRL_STARTED_ONCE = 2,
+	NVME_CTRL_STOPPED = 3,
+	NVME_CTRL_SKIP_ID_CNS_CS = 4,
+	NVME_CTRL_DIRTY_CAPABILITY = 5,
+	NVME_CTRL_FROZEN = 6,
+};
+
+enum nvmf_capsule_command {
+	nvme_fabrics_type_property_set = 0,
+	nvme_fabrics_type_connect = 1,
+	nvme_fabrics_type_property_get = 4,
+	nvme_fabrics_type_auth_send = 5,
+	nvme_fabrics_type_auth_receive = 6,
+};
+
+enum nvme_zone_mgmt_action {
+	NVME_ZONE_CLOSE = 1,
+	NVME_ZONE_FINISH = 2,
+	NVME_ZONE_OPEN = 3,
+	NVME_ZONE_RESET = 4,
+	NVME_ZONE_OFFLINE = 5,
+	NVME_ZONE_SET_DESC_EXT = 16,
+};
+
+enum nvme_opcode {
+	nvme_cmd_flush = 0,
+	nvme_cmd_write = 1,
+	nvme_cmd_read = 2,
+	nvme_cmd_write_uncor = 4,
+	nvme_cmd_compare = 5,
+	nvme_cmd_write_zeroes = 8,
+	nvme_cmd_dsm = 9,
+	nvme_cmd_verify = 12,
+	nvme_cmd_resv_register = 13,
+	nvme_cmd_resv_report = 14,
+	nvme_cmd_resv_acquire = 17,
+	nvme_cmd_resv_release = 21,
+	nvme_cmd_zone_mgmt_send = 121,
+	nvme_cmd_zone_mgmt_recv = 122,
+	nvme_cmd_zone_append = 125,
+	nvme_cmd_vendor_start = 128,
+};
+
+enum {
+	NVME_CMD_EFFECTS_CSUPP = 1,
+	NVME_CMD_EFFECTS_LBCC = 2,
+	NVME_CMD_EFFECTS_NCC = 4,
+	NVME_CMD_EFFECTS_NIC = 8,
+	NVME_CMD_EFFECTS_CCC = 16,
+	NVME_CMD_EFFECTS_CSE_MASK = 458752,
+	NVME_CMD_EFFECTS_UUID_SEL = 524288,
+	NVME_CMD_EFFECTS_SCOPE_MASK = 4293918720,
+};
+
+enum nvme_admin_opcode {
+	nvme_admin_delete_sq = 0,
+	nvme_admin_create_sq = 1,
+	nvme_admin_get_log_page = 2,
+	nvme_admin_delete_cq = 4,
+	nvme_admin_create_cq = 5,
+	nvme_admin_identify = 6,
+	nvme_admin_abort_cmd = 8,
+	nvme_admin_set_features = 9,
+	nvme_admin_get_features = 10,
+	nvme_admin_async_event = 12,
+	nvme_admin_ns_mgmt = 13,
+	nvme_admin_activate_fw = 16,
+	nvme_admin_download_fw = 17,
+	nvme_admin_dev_self_test = 20,
+	nvme_admin_ns_attach = 21,
+	nvme_admin_keep_alive = 24,
+	nvme_admin_directive_send = 25,
+	nvme_admin_directive_recv = 26,
+	nvme_admin_virtual_mgmt = 28,
+	nvme_admin_nvme_mi_send = 29,
+	nvme_admin_nvme_mi_recv = 30,
+	nvme_admin_dbbuf = 124,
+	nvme_admin_format_nvm = 128,
+	nvme_admin_security_send = 129,
+	nvme_admin_security_recv = 130,
+	nvme_admin_sanitize_nvm = 132,
+	nvme_admin_get_lba_status = 134,
+	nvme_admin_vendor_start = 192,
+};
+
+enum {
+	NVME_QUEUE_PHYS_CONTIG = 1,
+	NVME_CQ_IRQ_ENABLED = 2,
+	NVME_SQ_PRIO_URGENT = 0,
+	NVME_SQ_PRIO_HIGH = 2,
+	NVME_SQ_PRIO_MEDIUM = 4,
+	NVME_SQ_PRIO_LOW = 6,
+	NVME_FEAT_ARBITRATION = 1,
+	NVME_FEAT_POWER_MGMT = 2,
+	NVME_FEAT_LBA_RANGE = 3,
+	NVME_FEAT_TEMP_THRESH = 4,
+	NVME_FEAT_ERR_RECOVERY = 5,
+	NVME_FEAT_VOLATILE_WC = 6,
+	NVME_FEAT_NUM_QUEUES = 7,
+	NVME_FEAT_IRQ_COALESCE = 8,
+	NVME_FEAT_IRQ_CONFIG = 9,
+	NVME_FEAT_WRITE_ATOMIC = 10,
+	NVME_FEAT_ASYNC_EVENT = 11,
+	NVME_FEAT_AUTO_PST = 12,
+	NVME_FEAT_HOST_MEM_BUF = 13,
+	NVME_FEAT_TIMESTAMP = 14,
+	NVME_FEAT_KATO = 15,
+	NVME_FEAT_HCTM = 16,
+	NVME_FEAT_NOPSC = 17,
+	NVME_FEAT_RRL = 18,
+	NVME_FEAT_PLM_CONFIG = 19,
+	NVME_FEAT_PLM_WINDOW = 20,
+	NVME_FEAT_HOST_BEHAVIOR = 22,
+	NVME_FEAT_SANITIZE = 23,
+	NVME_FEAT_SW_PROGRESS = 128,
+	NVME_FEAT_HOST_ID = 129,
+	NVME_FEAT_RESV_MASK = 130,
+	NVME_FEAT_RESV_PERSIST = 131,
+	NVME_FEAT_WRITE_PROTECT = 132,
+	NVME_FEAT_VENDOR_START = 192,
+	NVME_FEAT_VENDOR_END = 255,
+	NVME_LOG_ERROR = 1,
+	NVME_LOG_SMART = 2,
+	NVME_LOG_FW_SLOT = 3,
+	NVME_LOG_CHANGED_NS = 4,
+	NVME_LOG_CMD_EFFECTS = 5,
+	NVME_LOG_DEVICE_SELF_TEST = 6,
+	NVME_LOG_TELEMETRY_HOST = 7,
+	NVME_LOG_TELEMETRY_CTRL = 8,
+	NVME_LOG_ENDURANCE_GROUP = 9,
+	NVME_LOG_ANA = 12,
+	NVME_LOG_DISC = 112,
+	NVME_LOG_RESERVATION = 128,
+	NVME_FWACT_REPL = 0,
+	NVME_FWACT_REPL_ACTV = 8,
+	NVME_FWACT_ACTV = 16,
+};
+
+enum nvme_quirks {
+	NVME_QUIRK_STRIPE_SIZE = 1,
+	NVME_QUIRK_IDENTIFY_CNS = 2,
+	NVME_QUIRK_DEALLOCATE_ZEROES = 4,
+	NVME_QUIRK_DELAY_BEFORE_CHK_RDY = 8,
+	NVME_QUIRK_NO_APST = 16,
+	NVME_QUIRK_NO_DEEPEST_PS = 32,
+	NVME_QUIRK_MEDIUM_PRIO_SQ = 128,
+	NVME_QUIRK_IGNORE_DEV_SUBNQN = 256,
+	NVME_QUIRK_DISABLE_WRITE_ZEROES = 512,
+	NVME_QUIRK_SIMPLE_SUSPEND = 1024,
+	NVME_QUIRK_SINGLE_VECTOR = 2048,
+	NVME_QUIRK_128_BYTES_SQES = 4096,
+	NVME_QUIRK_SHARED_TAGS = 8192,
+	NVME_QUIRK_NO_TEMP_THRESH_CHANGE = 16384,
+	NVME_QUIRK_NO_NS_DESC_LIST = 32768,
+	NVME_QUIRK_DMA_ADDRESS_BITS_48 = 65536,
+	NVME_QUIRK_SKIP_CID_GEN = 131072,
+	NVME_QUIRK_BOGUS_NID = 262144,
+	NVME_QUIRK_NO_SECONDARY_TEMP_THRESH = 524288,
+	NVME_QUIRK_FORCE_NO_SIMPLE_SUSPEND = 1048576,
+};
+
+enum {
+	NVME_CAP_CSS_NVM = 1,
+	NVME_CAP_CSS_CSI = 64,
+};
+
+enum {
+	NVME_CAP_CRMS_CRWMS = 576460752303423488ULL,
+	NVME_CAP_CRMS_CRIMS = 1152921504606846976ULL,
+};
+
+enum {
+	NVME_AER_ERROR = 0,
+	NVME_AER_SMART = 1,
+	NVME_AER_NOTICE = 2,
+	NVME_AER_CSS = 6,
+	NVME_AER_VS = 7,
+};
+
+enum {
+	NVME_AER_ERROR_PERSIST_INT_ERR = 3,
+};
+
+enum nvmf_fabrics_opcode {
+	nvme_fabrics_command = 127,
+};
+
+enum nvme_ns_features {
+	NVME_NS_EXT_LBAS = 1,
+	NVME_NS_METADATA_SUPPORTED = 2,
+	NVME_NS_DEAC = 3,
+};
+
+enum {
+	NVME_RW_LR = 32768,
+	NVME_RW_FUA = 16384,
+	NVME_RW_APPEND_PIREMAP = 512,
+	NVME_RW_DSM_FREQ_UNSPEC = 0,
+	NVME_RW_DSM_FREQ_TYPICAL = 1,
+	NVME_RW_DSM_FREQ_RARE = 2,
+	NVME_RW_DSM_FREQ_READS = 3,
+	NVME_RW_DSM_FREQ_WRITES = 4,
+	NVME_RW_DSM_FREQ_RW = 5,
+	NVME_RW_DSM_FREQ_ONCE = 6,
+	NVME_RW_DSM_FREQ_PREFETCH = 7,
+	NVME_RW_DSM_FREQ_TEMP = 8,
+	NVME_RW_DSM_LATENCY_NONE = 0,
+	NVME_RW_DSM_LATENCY_IDLE = 16,
+	NVME_RW_DSM_LATENCY_NORM = 32,
+	NVME_RW_DSM_LATENCY_LOW = 48,
+	NVME_RW_DSM_SEQ_REQ = 64,
+	NVME_RW_DSM_COMPRESSED = 128,
+	NVME_RW_PRINFO_PRCHK_REF = 1024,
+	NVME_RW_PRINFO_PRCHK_APP = 2048,
+	NVME_RW_PRINFO_PRCHK_GUARD = 4096,
+	NVME_RW_PRINFO_PRACT = 8192,
+	NVME_RW_DTYPE_STREAMS = 16,
+	NVME_WZ_DEAC = 512,
+};
+
+enum {
+	NVME_NS_FEAT_THIN = 1,
+	NVME_NS_FEAT_ATOMICS = 2,
+	NVME_NS_FEAT_IO_OPT = 16,
+	NVME_NS_ATTR_RO = 1,
+	NVME_NS_FLBAS_LBA_MASK = 15,
+	NVME_NS_FLBAS_LBA_UMASK = 96,
+	NVME_NS_FLBAS_LBA_SHIFT = 1,
+	NVME_NS_FLBAS_META_EXT = 16,
+	NVME_NS_NMIC_SHARED = 1,
+	NVME_LBAF_RP_BEST = 0,
+	NVME_LBAF_RP_BETTER = 1,
+	NVME_LBAF_RP_GOOD = 2,
+	NVME_LBAF_RP_DEGRADED = 3,
+	NVME_NS_DPC_PI_LAST = 16,
+	NVME_NS_DPC_PI_FIRST = 8,
+	NVME_NS_DPC_PI_TYPE3 = 4,
+	NVME_NS_DPC_PI_TYPE2 = 2,
+	NVME_NS_DPC_PI_TYPE1 = 1,
+	NVME_NS_DPS_PI_FIRST = 8,
+	NVME_NS_DPS_PI_MASK = 7,
+	NVME_NS_DPS_PI_TYPE1 = 1,
+	NVME_NS_DPS_PI_TYPE2 = 2,
+	NVME_NS_DPS_PI_TYPE3 = 3,
+};
+
+enum {
+	NVME_NVM_NS_16B_GUARD = 0,
+	NVME_NVM_NS_32B_GUARD = 1,
+	NVME_NVM_NS_64B_GUARD = 2,
+};
+
+enum {
+	NVME_DSMGMT_IDR = 1,
+	NVME_DSMGMT_IDW = 2,
+	NVME_DSMGMT_AD = 4,
+};
+
+enum {
+	NVME_ID_CNS_NS = 0,
+	NVME_ID_CNS_CTRL = 1,
+	NVME_ID_CNS_NS_ACTIVE_LIST = 2,
+	NVME_ID_CNS_NS_DESC_LIST = 3,
+	NVME_ID_CNS_CS_NS = 5,
+	NVME_ID_CNS_CS_CTRL = 6,
+	NVME_ID_CNS_NS_CS_INDEP = 8,
+	NVME_ID_CNS_NS_PRESENT_LIST = 16,
+	NVME_ID_CNS_NS_PRESENT = 17,
+	NVME_ID_CNS_CTRL_NS_LIST = 18,
+	NVME_ID_CNS_CTRL_LIST = 19,
+	NVME_ID_CNS_SCNDRY_CTRL_LIST = 21,
+	NVME_ID_CNS_NS_GRANULARITY = 22,
+	NVME_ID_CNS_UUID_LIST = 23,
+};
+
+enum {
+	NVME_CTRL_CMIC_MULTI_PORT = 1,
+	NVME_CTRL_CMIC_MULTI_CTRL = 2,
+	NVME_CTRL_CMIC_ANA = 8,
+	NVME_CTRL_ONCS_COMPARE = 1,
+	NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 2,
+	NVME_CTRL_ONCS_DSM = 4,
+	NVME_CTRL_ONCS_WRITE_ZEROES = 8,
+	NVME_CTRL_ONCS_RESERVATIONS = 32,
+	NVME_CTRL_ONCS_TIMESTAMP = 64,
+	NVME_CTRL_VWC_PRESENT = 1,
+	NVME_CTRL_OACS_SEC_SUPP = 1,
+	NVME_CTRL_OACS_NS_MNGT_SUPP = 8,
+	NVME_CTRL_OACS_DIRECTIVES = 32,
+	NVME_CTRL_OACS_DBBUF_SUPP = 256,
+	NVME_CTRL_LPA_CMD_EFFECTS_LOG = 2,
+	NVME_CTRL_CTRATT_128_ID = 1,
+	NVME_CTRL_CTRATT_NON_OP_PSP = 2,
+	NVME_CTRL_CTRATT_NVM_SETS = 4,
+	NVME_CTRL_CTRATT_READ_RECV_LVLS = 8,
+	NVME_CTRL_CTRATT_ENDURANCE_GROUPS = 16,
+	NVME_CTRL_CTRATT_PREDICTABLE_LAT = 32,
+	NVME_CTRL_CTRATT_NAMESPACE_GRANULARITY = 128,
+	NVME_CTRL_CTRATT_UUID_LIST = 512,
+};
+
+enum {
+	NVME_CSI_NVM = 0,
+	NVME_CSI_ZNS = 2,
+};
+
+enum {
+	NVME_PS_FLAGS_MAX_POWER_SCALE = 1,
+	NVME_PS_FLAGS_NON_OP_STATE = 2,
+};
+
+enum {
+	NVME_ENABLE_ACRE = 1,
+	NVME_ENABLE_LBAFEE = 1,
+};
+
+enum nvme_ctrl_attr {
+	NVME_CTRL_ATTR_HID_128_BIT = 1,
+	NVME_CTRL_ATTR_TBKAS = 64,
+	NVME_CTRL_ATTR_ELBAS = 32768,
+};
+
+enum {
+	NVME_AER_NOTICE_NS_CHANGED = 0,
+	NVME_AER_NOTICE_FW_ACT_STARTING = 1,
+	NVME_AER_NOTICE_ANA = 3,
+	NVME_AER_NOTICE_DISC_CHANGED = 240,
+};
+
+enum {
+	NVME_AEN_CFG_NS_ATTR = 256,
+	NVME_AEN_CFG_FW_ACT = 512,
+	NVME_AEN_CFG_ANA_CHANGE = 2048,
+	NVME_AEN_CFG_DISC_CHANGE = -2147483648,
+};
+
+enum {
+	NVME_NIDT_EUI64 = 1,
+	NVME_NIDT_NGUID = 2,
+	NVME_NIDT_UUID = 3,
+	NVME_NIDT_CSI = 4,
+};
+
+enum {
+	NVME_NSTAT_NRDY = 1,
+};
+
+enum {
+	NVME_ID_NS_NVM_STS_MASK = 127,
+	NVME_ID_NS_NVM_GUARD_SHIFT = 7,
+	NVME_ID_NS_NVM_GUARD_MASK = 3,
+};
+
+struct nvme_ns_head;
+
+struct nvme_ns {
+	struct list_head list;
+	struct nvme_ctrl *ctrl;
+	struct request_queue *queue;
+	struct gendisk *disk;
+	enum nvme_ana_state ana_state;
+	u32 ana_grpid;
+	struct list_head siblings;
+	struct kref kref;
+	struct nvme_ns_head *head;
+	int lba_shift;
+	u16 ms;
+	u16 pi_size;
+	u16 sgs;
+	u32 sws;
+	u8 pi_type;
+	u8 guard_type;
+	u64 zsze;
+	unsigned long features;
+	unsigned long flags;
+	struct cdev cdev;
+	struct device cdev_device;
+	struct nvme_fault_inject fault_inject;
+};
+
+struct nvme_ns_ids {
+	u8 eui64[8];
+	u8 nguid[16];
+	uuid_t uuid;
+	u8 csi;
+};
+
+struct nvme_ns_head {
+	struct list_head list;
+	struct srcu_struct srcu;
+	struct nvme_subsystem *subsys;
+	unsigned int ns_id;
+	struct nvme_ns_ids ids;
+	struct list_head entry;
+	struct kref ref;
+	bool shared;
+	int instance;
+	struct nvme_effects_log *effects;
+	struct cdev cdev;
+	struct device cdev_device;
+	struct gendisk *disk;
+	struct bio_list requeue_list;
+	spinlock_t requeue_lock;
+	struct work_struct requeue_work;
+	struct mutex lock;
+	unsigned long flags;
+	struct nvme_ns __attribute__((btf_type_tag("rcu"))) *current_path[0];
+};
+
+struct trace_event_raw_nvme_setup_cmd {
+	struct trace_entry ent;
+	char disk[32];
+	int ctrl_id;
+	int qid;
+	u8 opcode;
+	u8 flags;
+	u8 fctype;
+	u16 cid;
+	u32 nsid;
+	bool metadata;
+	u8 cdw10[24];
+	char __data[0];
+};
+
+struct trace_event_raw_nvme_complete_rq {
+	struct trace_entry ent;
+	char disk[32];
+	int ctrl_id;
+	int qid;
+	int cid;
+	u64 result;
+	u8 retries;
+	u8 flags;
+	u16 status;
+	char __data[0];
+};
+
+struct trace_event_raw_nvme_async_event {
+	struct trace_entry ent;
+	int ctrl_id;
+	u32 result;
+	char __data[0];
+};
+
+struct trace_event_raw_nvme_sq {
+	struct trace_entry ent;
+	int ctrl_id;
+	char disk[32];
+	int qid;
+	u16 sq_head;
+	u16 sq_tail;
+	char __data[0];
+};
+
+union nvme_result {
+	__le16 u16;
+	__le32 u32;
+	__le64 u64;
+};
+
+struct nvme_id_ctrl {
+	__le16 vid;
+	__le16 ssvid;
+	char sn[20];
+	char mn[40];
+	char fr[8];
+	__u8 rab;
+	__u8 ieee[3];
+	__u8 cmic;
+	__u8 mdts;
+	__le16 cntlid;
+	__le32 ver;
+	__le32 rtd3r;
+	__le32 rtd3e;
+	__le32 oaes;
+	__le32 ctratt;
+	__u8 rsvd100[11];
+	__u8 cntrltype;
+	__u8 fguid[16];
+	__le16 crdt1;
+	__le16 crdt2;
+	__le16 crdt3;
+	__u8 rsvd134[122];
+	__le16 oacs;
+	__u8 acl;
+	__u8 aerl;
+	__u8 frmw;
+	__u8 lpa;
+	__u8 elpe;
+	__u8 npss;
+	__u8 avscc;
+	__u8 apsta;
+	__le16 wctemp;
+	__le16 cctemp;
+	__le16 mtfa;
+	__le32 hmpre;
+	__le32 hmmin;
+	__u8 tnvmcap[16];
+	__u8 unvmcap[16];
+	__le32 rpmbs;
+	__le16 edstt;
+	__u8 dsto;
+	__u8 fwug;
+	__le16 kas;
+	__le16 hctma;
+	__le16 mntmt;
+	__le16 mxtmt;
+	__le32 sanicap;
+	__le32 hmminds;
+	__le16 hmmaxd;
+	__u8 rsvd338[4];
+	__u8 anatt;
+	__u8 anacap;
+	__le32 anagrpmax;
+	__le32 nanagrpid;
+	__u8 rsvd352[160];
+	__u8 sqes;
+	__u8 cqes;
+	__le16 maxcmd;
+	__le32 nn;
+	__le16 oncs;
+	__le16 fuses;
+	__u8 fna;
+	__u8 vwc;
+	__le16 awun;
+	__le16 awupf;
+	__u8 nvscc;
+	__u8 nwpc;
+	__le16 acwu;
+	__u8 rsvd534[2];
+	__le32 sgls;
+	__le32 mnan;
+	__u8 rsvd544[224];
+	char subnqn[256];
+	__u8 rsvd1024[768];
+	__le32 ioccsz;
+	__le32 iorcsz;
+	__le16 icdoff;
+	__u8 ctrattr;
+	__u8 msdbd;
+	__u8 rsvd1804[2];
+	__u8 dctype;
+	__u8 rsvd1807[241];
+	struct nvme_id_power_state psd[32];
+	__u8 vs[1024];
+};
+
+struct nvme_feat_host_behavior {
+	__u8 acre;
+	__u8 etdas;
+	__u8 lbafee;
+	__u8 resv1[509];
+};
+
+struct nvme_id_ctrl_nvm {
+	__u8 vsl;
+	__u8 wzsl;
+	__u8 wusl;
+	__u8 dmrl;
+	__le32 dmrsl;
+	__le64 dmsl;
+	__u8 rsvd16[4080];
+};
+
+struct nvme_fw_slot_info_log {
+	__u8 afi;
+	__u8 rsvd1[7];
+	__le64 frs[7];
+	__u8 rsvd64[448];
+};
+
+struct nvme_ns_info {
+	struct nvme_ns_ids ids;
+	u32 nsid;
+	__le32 anagrpid;
+	bool is_shared;
+	bool is_readonly;
+	bool is_ready;
+	bool is_removed;
+};
+
+struct nvme_ns_id_desc {
+	__u8 nidt;
+	__u8 nidl;
+	__le16 reserved;
+};
+
+struct nvme_lbaf {
+	__le16 ms;
+	__u8 ds;
+	__u8 rp;
+};
+
+struct nvme_id_ns {
+	__le64 nsze;
+	__le64 ncap;
+	__le64 nuse;
+	__u8 nsfeat;
+	__u8 nlbaf;
+	__u8 flbas;
+	__u8 mc;
+	__u8 dpc;
+	__u8 dps;
+	__u8 nmic;
+	__u8 rescap;
+	__u8 fpi;
+	__u8 dlfeat;
+	__le16 nawun;
+	__le16 nawupf;
+	__le16 nacwu;
+	__le16 nabsn;
+	__le16 nabo;
+	__le16 nabspf;
+	__le16 noiob;
+	__u8 nvmcap[16];
+	__le16 npwg;
+	__le16 npwa;
+	__le16 npdg;
+	__le16 npda;
+	__le16 nows;
+	__u8 rsvd74[18];
+	__le32 anagrpid;
+	__u8 rsvd96[3];
+	__u8 nsattr;
+	__le16 nvmsetid;
+	__le16 endgid;
+	__u8 nguid[16];
+	__u8 eui64[8];
+	struct nvme_lbaf lbaf[64];
+	__u8 vs[3712];
+};
+
+struct nvme_id_ns_cs_indep {
+	__u8 nsfeat;
+	__u8 nmic;
+	__u8 rescap;
+	__u8 fpi;
+	__le32 anagrpid;
+	__u8 nsattr;
+	__u8 rsvd9;
+	__le16 nvmsetid;
+	__le16 endgid;
+	__u8 nstat;
+	__u8 rsvd15[4081];
+};
+
+struct nvme_id_ns_nvm {
+	__le64 lbstm;
+	__u8 pic;
+	__u8 rsvd9[3];
+	__le32 elbaf[64];
+	__u8 rsvd268[3828];
+};
+
+struct trace_event_data_offsets_nvme_setup_cmd {};
+
+struct trace_event_data_offsets_nvme_complete_rq {};
+
+struct trace_event_data_offsets_nvme_async_event {};
+
+struct trace_event_data_offsets_nvme_sq {};
+
+struct nvme_request {
+	struct nvme_command *cmd;
+	union nvme_result result;
+	u8 genctr;
+	u8 retries;
+	u8 flags;
+	u16 status;
+	unsigned long start_time;
+	struct nvme_ctrl *ctrl;
+};
+
+struct nvme_dsm_range {
+	__le32 cattr;
+	__le32 nlb;
+	__le64 slba;
+};
+
+struct nvme_feat_auto_pst {
+	__le64 entries[32];
+};
+
+enum {
+	NVME_IOCTL_VEC = 1,
+	NVME_IOCTL_PARTITION = 2,
+};
+
+struct nvme_uring_cmd_pdu {
+	union {
+		struct bio *bio;
+		struct request *req;
+	};
+	u32 meta_len;
+	u32 nvme_status;
+	union {
+		struct {
+			void *meta;
+			void __attribute__((btf_type_tag("user"))) *meta_buffer;
+		};
+		u64 result;
+	} u;
+};
+
+struct nvme_user_io {
+	__u8 opcode;
+	__u8 flags;
+	__u16 control;
+	__u16 nblocks;
+	__u16 rsvd;
+	__u64 metadata;
+	__u64 addr;
+	__u64 slba;
+	__u32 dsmgmt;
+	__u32 reftag;
+	__u16 apptag;
+	__u16 appmask;
+};
+
+struct nvme_uring_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 rsvd1;
+	__u32 nsid;
+	__u32 cdw2;
+	__u32 cdw3;
+	__u64 metadata;
+	__u64 addr;
+	__u32 metadata_len;
+	__u32 data_len;
+	__u32 cdw10;
+	__u32 cdw11;
+	__u32 cdw12;
+	__u32 cdw13;
+	__u32 cdw14;
+	__u32 cdw15;
+	__u32 timeout_ms;
+	__u32 rsvd2;
+};
+
+struct nvme_uring_data {
+	__u64 metadata;
+	__u64 addr;
+	__u32 data_len;
+	__u32 metadata_len;
+	__u32 timeout_ms;
+};
+
+struct nvme_passthru_cmd {
+	__u8 opcode;
+	__u8 flags;
+	__u16 rsvd1;
+	__u32 nsid;
+	__u32 cdw2;
+	__u32 cdw3;
+	__u64 metadata;
+	__u64 addr;
+	__u32 metadata_len;
+	__u32 data_len;
+	__u32 cdw10;
+	__u32 cdw11;
+	__u32 cdw12;
+	__u32 cdw13;
+	__u32 cdw14;
+	__u32 cdw15;
+	__u32 timeout_ms;
+	__u32 result;
+};
+
+struct nvme_passthru_cmd64 {
+	__u8 opcode;
+	__u8 flags;
+	__u16 rsvd1;
+	__u32 nsid;
+	__u32 cdw2;
+	__u32 cdw3;
+	__u64 metadata;
+	__u64 addr;
+	__u32 metadata_len;
+	union {
+		__u32 data_len;
+		__u32 vec_cnt;
+	};
+	__u32 cdw10;
+	__u32 cdw11;
+	__u32 cdw12;
+	__u32 cdw13;
+	__u32 cdw14;
+	__u32 cdw15;
+	__u32 timeout_ms;
+	__u32 rsvd2;
+	__u64 result;
+};
+
+enum nvme_pr_type {
+	NVME_PR_WRITE_EXCLUSIVE = 1,
+	NVME_PR_EXCLUSIVE_ACCESS = 2,
+	NVME_PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
+	NVME_PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
+	NVME_PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
+	NVME_PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
+};
+
+enum nvme_eds {
+	NVME_EXTENDED_DATA_STRUCT = 1,
+};
+
+struct nvme_registered_ctrl {
+	__le16 cntlid;
+	__u8 rcsts;
+	__u8 rsvd3[5];
+	__le64 hostid;
+	__le64 rkey;
+};
+
+struct nvme_reservation_status {
+	__le32 gen;
+	__u8 rtype;
+	__u8 regctl[2];
+	__u8 resv5[2];
+	__u8 ptpls;
+	__u8 resv10[14];
+	struct nvme_registered_ctrl regctl_ds[0];
+};
+
+struct nvme_registered_ctrl_ext {
+	__le16 cntlid;
+	__u8 rcsts;
+	__u8 rsvd3[5];
+	__le64 rkey;
+	__u8 hostid[16];
+	__u8 rsvd32[32];
+};
+
+struct nvme_reservation_status_ext {
+	__le32 gen;
+	__u8 rtype;
+	__u8 regctl[2];
+	__u8 resv5[2];
+	__u8 ptpls;
+	__u8 resv10[14];
+	__u8 rsvd24[40];
+	struct nvme_registered_ctrl_ext regctl_eds[0];
+};
+
+struct nvme_ana_group_desc {
+	__le32 grpid;
+	__le32 nnsids;
+	__le64 chgcnt;
+	__u8 state;
+	__u8 rsvd17[15];
+	__le32 nsids[0];
+};
+
+enum {
+	NVME_ZRA_ZONE_REPORT = 0,
+	NVME_ZRASF_ZONE_REPORT_ALL = 0,
+	NVME_ZRASF_ZONE_STATE_EMPTY = 1,
+	NVME_ZRASF_ZONE_STATE_IMP_OPEN = 2,
+	NVME_ZRASF_ZONE_STATE_EXP_OPEN = 3,
+	NVME_ZRASF_ZONE_STATE_CLOSED = 4,
+	NVME_ZRASF_ZONE_STATE_READONLY = 5,
+	NVME_ZRASF_ZONE_STATE_FULL = 6,
+	NVME_ZRASF_ZONE_STATE_OFFLINE = 7,
+	NVME_REPORT_ZONE_PARTIAL = 1,
+};
+
+enum {
+	NVME_ZONE_TYPE_SEQWRITE_REQ = 2,
+};
+
+struct nvme_id_ctrl_zns {
+	__u8 zasl;
+	__u8 rsvd1[4095];
+};
+
+struct nvme_zone_descriptor {
+	__u8 zt;
+	__u8 zs;
+	__u8 za;
+	__u8 rsvd3[5];
+	__le64 zcap;
+	__le64 zslba;
+	__le64 wp;
+	__u8 rsvd32[32];
+};
+
+struct nvme_zns_lbafe {
+	__le64 zsze;
+	__u8 zdes;
+	__u8 rsvd9[7];
+};
+
+struct nvme_id_ns_zns {
+	__le16 zoc;
+	__le16 ozcs;
+	__le32 mar;
+	__le32 mor;
+	__le32 rrl;
+	__le32 frl;
+	__u8 rsvd20[2796];
+	struct nvme_zns_lbafe lbafe[64];
+	__u8 vs[256];
+};
+
+struct nvme_zone_report {
+	__le64 nr_zones;
+	__u8 resv8[56];
+	struct nvme_zone_descriptor entries[0];
+};
+
+enum {
+	NVME_HOST_MEM_ENABLE = 1,
+	NVME_HOST_MEM_RETURN = 2,
+};
+
+enum {
+	NVME_CMBMSC_CRE = 1,
+	NVME_CMBMSC_CMSE = 2,
+};
+
+enum {
+	NVME_CMBSZ_SQS = 1,
+	NVME_CMBSZ_CQS = 2,
+	NVME_CMBSZ_LISTS = 4,
+	NVME_CMBSZ_RDS = 8,
+	NVME_CMBSZ_WDS = 16,
+	NVME_CMBSZ_SZ_SHIFT = 12,
+	NVME_CMBSZ_SZ_MASK = 1048575,
+	NVME_CMBSZ_SZU_SHIFT = 8,
+	NVME_CMBSZ_SZU_MASK = 15,
+};
+
+enum {
+	NVME_SGL_FMT_DATA_DESC = 0,
+	NVME_SGL_FMT_SEG_DESC = 2,
+	NVME_SGL_FMT_LAST_SEG_DESC = 3,
+	NVME_KEY_SGL_FMT_DATA_DESC = 4,
+	NVME_TRANSPORT_SGL_DATA_DESC = 5,
+};
+
+struct nvme_queue;
+
+struct nvme_host_mem_buf_desc;
+
+struct nvme_dev {
+	struct nvme_queue *queues;
+	struct blk_mq_tag_set tagset;
+	struct blk_mq_tag_set admin_tagset;
+	u32 *dbs;
+	struct device *dev;
+	struct dma_pool *prp_page_pool;
+	struct dma_pool *prp_small_pool;
+	unsigned int online_queues;
+	unsigned int max_qid;
+	unsigned int io_queues[3];
+	unsigned int num_vecs;
+	u32 q_depth;
+	int io_sqes;
+	u32 db_stride;
+	void *bar;
+	unsigned long bar_mapped_size;
+	struct mutex shutdown_lock;
+	bool subsystem;
+	u64 cmb_size;
+	bool cmb_use_sqes;
+	u32 cmbsz;
+	u32 cmbloc;
+	struct nvme_ctrl ctrl;
+	u32 last_ps;
+	bool hmb;
+	mempool_t *iod_mempool;
+	__le32 *dbbuf_dbs;
+	dma_addr_t dbbuf_dbs_dma_addr;
+	__le32 *dbbuf_eis;
+	dma_addr_t dbbuf_eis_dma_addr;
+	u64 host_mem_size;
+	u32 nr_host_mem_descs;
+	dma_addr_t host_mem_descs_dma;
+	struct nvme_host_mem_buf_desc *host_mem_descs;
+	void **host_mem_desc_bufs;
+	unsigned int nr_allocated_queues;
+	unsigned int nr_write_queues;
+	unsigned int nr_poll_queues;
+};
+
+struct nvme_completion;
+
+struct nvme_queue {
+	struct nvme_dev *dev;
+	spinlock_t sq_lock;
+	void *sq_cmds;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t cq_poll_lock;
+	struct nvme_completion *cqes;
+	dma_addr_t sq_dma_addr;
+	dma_addr_t cq_dma_addr;
+	u32 *q_db;
+	u32 q_depth;
+	u16 cq_vector;
+	u16 sq_tail;
+	u16 last_sq_tail;
+	u16 cq_head;
+	u16 qid;
+	u8 cq_phase;
+	u8 sqes;
+	unsigned long flags;
+	__le32 *dbbuf_sq_db;
+	__le32 *dbbuf_cq_db;
+	__le32 *dbbuf_sq_ei;
+	__le32 *dbbuf_cq_ei;
+	struct completion delete_done;
+};
+
+struct nvme_completion {
+	union nvme_result result;
+	__le16 sq_head;
+	__le16 sq_id;
+	__u16 command_id;
+	__le16 status;
+};
+
+struct nvme_host_mem_buf_desc {
+	__le64 addr;
+	__le32 size;
+	__u32 rsvd;
+};
+
+union nvme_descriptor {
+	struct nvme_sgl_desc *sg_list;
+	__le64 *prp_list;
+};
+
+struct nvme_iod {
+	struct nvme_request req;
+	struct nvme_command cmd;
+	bool aborted;
+	s8 nr_allocations;
+	unsigned int dma_len;
+	dma_addr_t first_dma;
+	dma_addr_t meta_dma;
+	struct sg_table sgt;
+	union nvme_descriptor list[5];
+};
+
+typedef void (*btf_trace_spi_controller_idle)(void *, struct spi_controller *);
+
+struct ptp_system_timestamp {
+	struct timespec64 pre_ts;
+	struct timespec64 post_ts;
+};
+
+struct spi_mem {
+	struct spi_device *spi;
+	void *drvpriv;
+	const char *name;
+};
+
+enum spi_mem_data_dir {
+	SPI_MEM_NO_DATA = 0,
+	SPI_MEM_DATA_IN = 1,
+	SPI_MEM_DATA_OUT = 2,
+};
+
+struct spi_mem_op {
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 __pad: 7;
+		u16 opcode;
+	} cmd;
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 __pad: 7;
+		u64 val;
+	} addr;
+	struct {
+		u8 nbytes;
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 __pad: 7;
+	} dummy;
+	struct {
+		u8 buswidth;
+		u8 dtr: 1;
+		u8 ecc: 1;
+		u8 __pad: 6;
+		enum spi_mem_data_dir dir;
+		unsigned int nbytes;
+		union {
+			void *in;
+			const void *out;
+		} buf;
+	} data;
+};
+
+struct spi_mem_dirmap_info {
+	struct spi_mem_op op_tmpl;
+	u64 offset;
+	u64 length;
+};
+
+struct spi_mem_dirmap_desc {
+	struct spi_mem *mem;
+	struct spi_mem_dirmap_info info;
+	unsigned int nodirmap;
+	void *priv;
+};
+
+typedef void (*btf_trace_spi_controller_busy)(void *, struct spi_controller *);
+
+typedef void (*btf_trace_spi_setup)(void *, struct spi_device *, int);
+
+typedef void (*btf_trace_spi_set_cs)(void *, struct spi_device *, bool);
+
+typedef void (*btf_trace_spi_message_submit)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_message_start)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_message_done)(void *, struct spi_message *);
+
+typedef void (*btf_trace_spi_transfer_start)(void *, struct spi_message *, struct spi_transfer *);
+
+typedef void (*btf_trace_spi_transfer_stop)(void *, struct spi_message *, struct spi_transfer *);
+
+struct spi_board_info {
+	char modalias[32];
+	const void *platform_data;
+	const struct software_node *swnode;
+	void *controller_data;
+	int irq;
+	u32 max_speed_hz;
+	u16 bus_num;
+	u16 chip_select;
+	u32 mode;
+	u64 android_kabi_reserved1;
+};
+
+struct boardinfo {
+	struct list_head list;
+	struct spi_board_info board_info;
+};
+
+struct trace_event_raw_spi_controller {
+	struct trace_entry ent;
+	int bus_num;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_setup {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	unsigned long mode;
+	unsigned int bits_per_word;
+	unsigned int max_speed_hz;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_set_cs {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	unsigned long mode;
+	bool enable;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_message {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_message *msg;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_message_done {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_message *msg;
+	unsigned int frame;
+	unsigned int actual;
+	char __data[0];
+};
+
+struct trace_event_raw_spi_transfer {
+	struct trace_entry ent;
+	int bus_num;
+	int chip_select;
+	struct spi_transfer *xfer;
+	int len;
+	u32 __data_loc_rx_buf;
+	u32 __data_loc_tx_buf;
+	char __data[0];
+};
+
+struct spi_device_id;
+
+struct spi_driver {
+	const struct spi_device_id *id_table;
+	int (*probe)(struct spi_device *);
+	void (*remove)(struct spi_device *);
+	void (*shutdown)(struct spi_device *);
+	struct device_driver driver;
+	u64 android_kabi_reserved1;
+};
+
+struct spi_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+typedef void (*spi_res_release_t)(struct spi_controller *, struct spi_message *, void *);
+
+struct spi_res {
+	struct list_head entry;
+	spi_res_release_t release;
+	unsigned long long data[0];
+};
+
+struct trace_event_data_offsets_spi_transfer {
+	u32 rx_buf;
+	u32 tx_buf;
+};
+
+struct spi_replaced_transfers;
+
+typedef void (*spi_replaced_release_t)(struct spi_controller *, struct spi_message *, struct spi_replaced_transfers *);
+
+struct spi_replaced_transfers {
+	spi_replaced_release_t release;
+	void *extradata;
+	struct list_head replaced_transfers;
+	struct list_head *replaced_after;
+	size_t inserted;
+	struct spi_transfer inserted_transfers[0];
+};
+
+struct trace_event_data_offsets_spi_controller {};
+
+struct trace_event_data_offsets_spi_setup {};
+
+struct trace_event_data_offsets_spi_set_cs {};
+
+struct trace_event_data_offsets_spi_message {};
+
+struct trace_event_data_offsets_spi_message_done {};
+
+struct acpi_spi_lookup {
+	struct spi_controller *ctlr;
+	u32 max_speed_hz;
+	u32 mode;
+	int irq;
+	u8 bits_per_word;
+	u8 chip_select;
+	int n;
+	int index;
+};
+
+struct spi_mem_driver {
+	struct spi_driver spidrv;
+	int (*probe)(struct spi_mem *);
+	int (*remove)(struct spi_mem *);
+	void (*shutdown)(struct spi_mem *);
+};
+
+typedef void (*btf_trace_spmi_write_begin)(void *, u8, u8, u16, u8, const u8 *);
+
+typedef void (*btf_trace_spmi_write_end)(void *, u8, u8, u16, int);
+
+typedef void (*btf_trace_spmi_read_begin)(void *, u8, u8, u16);
+
+typedef void (*btf_trace_spmi_read_end)(void *, u8, u8, u16, int, u8, const u8 *);
+
+typedef void (*btf_trace_spmi_cmd)(void *, u8, u8, int);
+
+struct trace_event_raw_spmi_write_begin {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	u8 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_write_end {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_read_begin {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_read_end {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	u16 addr;
+	int ret;
+	u8 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_spmi_cmd {
+	struct trace_entry ent;
+	u8 opcode;
+	u8 sid;
+	int ret;
+	char __data[0];
+};
+
+struct spmi_driver {
+	struct device_driver driver;
+	int (*probe)(struct spmi_device *);
+	void (*remove)(struct spmi_device *);
+	void (*shutdown)(struct spmi_device *);
+	u64 android_kabi_reserved1;
+};
+
+struct trace_event_data_offsets_spmi_write_begin {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_spmi_read_end {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_spmi_write_end {};
+
+struct trace_event_data_offsets_spmi_read_begin {};
+
+struct trace_event_data_offsets_spmi_cmd {};
+
+enum {
+	NETIF_F_SG_BIT = 0,
+	NETIF_F_IP_CSUM_BIT = 1,
+	__UNUSED_NETIF_F_1 = 2,
+	NETIF_F_HW_CSUM_BIT = 3,
+	NETIF_F_IPV6_CSUM_BIT = 4,
+	NETIF_F_HIGHDMA_BIT = 5,
+	NETIF_F_FRAGLIST_BIT = 6,
+	NETIF_F_HW_VLAN_CTAG_TX_BIT = 7,
+	NETIF_F_HW_VLAN_CTAG_RX_BIT = 8,
+	NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,
+	NETIF_F_VLAN_CHALLENGED_BIT = 10,
+	NETIF_F_GSO_BIT = 11,
+	NETIF_F_LLTX_BIT = 12,
+	NETIF_F_NETNS_LOCAL_BIT = 13,
+	NETIF_F_GRO_BIT = 14,
+	NETIF_F_LRO_BIT = 15,
+	NETIF_F_GSO_SHIFT = 16,
+	NETIF_F_TSO_BIT = 16,
+	NETIF_F_GSO_ROBUST_BIT = 17,
+	NETIF_F_TSO_ECN_BIT = 18,
+	NETIF_F_TSO_MANGLEID_BIT = 19,
+	NETIF_F_TSO6_BIT = 20,
+	NETIF_F_FSO_BIT = 21,
+	NETIF_F_GSO_GRE_BIT = 22,
+	NETIF_F_GSO_GRE_CSUM_BIT = 23,
+	NETIF_F_GSO_IPXIP4_BIT = 24,
+	NETIF_F_GSO_IPXIP6_BIT = 25,
+	NETIF_F_GSO_UDP_TUNNEL_BIT = 26,
+	NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,
+	NETIF_F_GSO_PARTIAL_BIT = 28,
+	NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,
+	NETIF_F_GSO_SCTP_BIT = 30,
+	NETIF_F_GSO_ESP_BIT = 31,
+	NETIF_F_GSO_UDP_BIT = 32,
+	NETIF_F_GSO_UDP_L4_BIT = 33,
+	NETIF_F_GSO_FRAGLIST_BIT = 34,
+	NETIF_F_GSO_LAST = 34,
+	NETIF_F_FCOE_CRC_BIT = 35,
+	NETIF_F_SCTP_CRC_BIT = 36,
+	NETIF_F_FCOE_MTU_BIT = 37,
+	NETIF_F_NTUPLE_BIT = 38,
+	NETIF_F_RXHASH_BIT = 39,
+	NETIF_F_RXCSUM_BIT = 40,
+	NETIF_F_NOCACHE_COPY_BIT = 41,
+	NETIF_F_LOOPBACK_BIT = 42,
+	NETIF_F_RXFCS_BIT = 43,
+	NETIF_F_RXALL_BIT = 44,
+	NETIF_F_HW_VLAN_STAG_TX_BIT = 45,
+	NETIF_F_HW_VLAN_STAG_RX_BIT = 46,
+	NETIF_F_HW_VLAN_STAG_FILTER_BIT = 47,
+	NETIF_F_HW_L2FW_DOFFLOAD_BIT = 48,
+	NETIF_F_HW_TC_BIT = 49,
+	NETIF_F_HW_ESP_BIT = 50,
+	NETIF_F_HW_ESP_TX_CSUM_BIT = 51,
+	NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52,
+	NETIF_F_HW_TLS_TX_BIT = 53,
+	NETIF_F_HW_TLS_RX_BIT = 54,
+	NETIF_F_GRO_HW_BIT = 55,
+	NETIF_F_HW_TLS_RECORD_BIT = 56,
+	NETIF_F_GRO_FRAGLIST_BIT = 57,
+	NETIF_F_HW_MACSEC_BIT = 58,
+	NETIF_F_GRO_UDP_FWD_BIT = 59,
+	NETIF_F_HW_HSR_TAG_INS_BIT = 60,
+	NETIF_F_HW_HSR_TAG_RM_BIT = 61,
+	NETIF_F_HW_HSR_FWD_BIT = 62,
+	NETIF_F_HW_HSR_DUP_BIT = 63,
+	NETDEV_FEATURE_COUNT = 64,
+};
+
+enum {
+	SKBTX_HW_TSTAMP = 1,
+	SKBTX_SW_TSTAMP = 2,
+	SKBTX_IN_PROGRESS = 4,
+	SKBTX_HW_TSTAMP_USE_CYCLES = 8,
+	SKBTX_WIFI_STATUS = 16,
+	SKBTX_HW_TSTAMP_NETDEV = 32,
+	SKBTX_SCHED_TSTAMP = 64,
+};
+
+enum {
+	IFLA_UNSPEC = 0,
+	IFLA_ADDRESS = 1,
+	IFLA_BROADCAST = 2,
+	IFLA_IFNAME = 3,
+	IFLA_MTU = 4,
+	IFLA_LINK = 5,
+	IFLA_QDISC = 6,
+	IFLA_STATS = 7,
+	IFLA_COST = 8,
+	IFLA_PRIORITY = 9,
+	IFLA_MASTER = 10,
+	IFLA_WIRELESS = 11,
+	IFLA_PROTINFO = 12,
+	IFLA_TXQLEN = 13,
+	IFLA_MAP = 14,
+	IFLA_WEIGHT = 15,
+	IFLA_OPERSTATE = 16,
+	IFLA_LINKMODE = 17,
+	IFLA_LINKINFO = 18,
+	IFLA_NET_NS_PID = 19,
+	IFLA_IFALIAS = 20,
+	IFLA_NUM_VF = 21,
+	IFLA_VFINFO_LIST = 22,
+	IFLA_STATS64 = 23,
+	IFLA_VF_PORTS = 24,
+	IFLA_PORT_SELF = 25,
+	IFLA_AF_SPEC = 26,
+	IFLA_GROUP = 27,
+	IFLA_NET_NS_FD = 28,
+	IFLA_EXT_MASK = 29,
+	IFLA_PROMISCUITY = 30,
+	IFLA_NUM_TX_QUEUES = 31,
+	IFLA_NUM_RX_QUEUES = 32,
+	IFLA_CARRIER = 33,
+	IFLA_PHYS_PORT_ID = 34,
+	IFLA_CARRIER_CHANGES = 35,
+	IFLA_PHYS_SWITCH_ID = 36,
+	IFLA_LINK_NETNSID = 37,
+	IFLA_PHYS_PORT_NAME = 38,
+	IFLA_PROTO_DOWN = 39,
+	IFLA_GSO_MAX_SEGS = 40,
+	IFLA_GSO_MAX_SIZE = 41,
+	IFLA_PAD = 42,
+	IFLA_XDP = 43,
+	IFLA_EVENT = 44,
+	IFLA_NEW_NETNSID = 45,
+	IFLA_IF_NETNSID = 46,
+	IFLA_TARGET_NETNSID = 46,
+	IFLA_CARRIER_UP_COUNT = 47,
+	IFLA_CARRIER_DOWN_COUNT = 48,
+	IFLA_NEW_IFINDEX = 49,
+	IFLA_MIN_MTU = 50,
+	IFLA_MAX_MTU = 51,
+	IFLA_PROP_LIST = 52,
+	IFLA_ALT_IFNAME = 53,
+	IFLA_PERM_ADDRESS = 54,
+	IFLA_PROTO_DOWN_REASON = 55,
+	IFLA_PARENT_DEV_NAME = 56,
+	IFLA_PARENT_DEV_BUS_NAME = 57,
+	IFLA_GRO_MAX_SIZE = 58,
+	IFLA_TSO_MAX_SIZE = 59,
+	IFLA_TSO_MAX_SEGS = 60,
+	IFLA_ALLMULTI = 61,
+	IFLA_DEVLINK_PORT = 62,
+	IFLA_GSO_IPV4_MAX_SIZE = 63,
+	IFLA_GRO_IPV4_MAX_SIZE = 64,
+	__IFLA_MAX = 65,
+};
+
+struct ip_tunnel_parm {
+	char name[16];
+	int link;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	struct iphdr iph;
+};
+
+struct nh_info;
+
+struct nh_group;
+
+struct nexthop {
+	struct rb_node rb_node;
+	struct list_head fi_list;
+	struct list_head f6i_list;
+	struct list_head fdb_list;
+	struct list_head grp_list;
+	struct net *net;
+	u32 id;
+	u8 protocol;
+	u8 nh_flags;
+	bool is_group;
+	refcount_t refcnt;
+	struct callback_head rcu;
+	union {
+		struct nh_info __attribute__((btf_type_tag("rcu"))) *nh_info;
+		struct nh_group __attribute__((btf_type_tag("rcu"))) *nh_grp;
+	};
+};
+
+struct fib_info;
+
+struct fib_nh {
+	struct fib_nh_common nh_common;
+	struct hlist_node nh_hash;
+	struct fib_info *nh_parent;
+	__be32 nh_saddr;
+	int nh_saddr_genid;
+};
+
+struct nh_info {
+	struct hlist_node dev_hash;
+	struct nexthop *nh_parent;
+	u8 family;
+	bool reject_nh;
+	bool fdb_nh;
+	union {
+		struct fib_nh_common fib_nhc;
+		struct fib_nh fib_nh;
+		struct fib6_nh fib6_nh;
+	};
+};
+
+struct fib_info {
+	struct hlist_node fib_hash;
+	struct hlist_node fib_lhash;
+	struct list_head nh_list;
+	struct net *fib_net;
+	refcount_t fib_treeref;
+	refcount_t fib_clntref;
+	unsigned int fib_flags;
+	unsigned char fib_dead;
+	unsigned char fib_protocol;
+	unsigned char fib_scope;
+	unsigned char fib_type;
+	__be32 fib_prefsrc;
+	u32 fib_tb_id;
+	u32 fib_priority;
+	struct dst_metrics *fib_metrics;
+	int fib_nhs;
+	bool fib_nh_is_v6;
+	bool nh_updated;
+	bool pfsrc_removed;
+	struct nexthop *nh;
+	struct callback_head rcu;
+	struct fib_nh fib_nh[0];
+};
+
+struct nh_grp_entry {
+	struct nexthop *nh;
+	u8 weight;
+	union {
+		struct {
+			atomic_t upper_bound;
+		} hthr;
+		struct {
+			struct list_head uw_nh_entry;
+			u16 count_buckets;
+			u16 wants_buckets;
+		} res;
+	};
+	struct list_head nh_list;
+	struct nexthop *nh_parent;
+};
+
+struct nh_res_table;
+
+struct nh_group {
+	struct nh_group *spare;
+	u16 num_nh;
+	bool is_multipath;
+	bool hash_threshold;
+	bool resilient;
+	bool fdb_nh;
+	bool has_v4;
+	struct nh_res_table __attribute__((btf_type_tag("rcu"))) *res_table;
+	struct nh_grp_entry nh_entries[0];
+};
+
+struct nh_res_bucket {
+	struct nh_grp_entry __attribute__((btf_type_tag("rcu"))) *nh_entry;
+	atomic_long_t used_time;
+	unsigned long migrated_time;
+	bool occupied;
+	u8 nh_flags;
+};
+
+struct nh_res_table {
+	struct net *net;
+	u32 nhg_id;
+	struct delayed_work upkeep_dw;
+	struct list_head uw_nh_entries;
+	unsigned long unbalanced_since;
+	u32 idle_timer;
+	u32 unbalanced_timer;
+	u16 num_nh_buckets;
+	struct nh_res_bucket nh_buckets[0];
+};
+
+enum noise_lengths {
+	NOISE_PUBLIC_KEY_LEN = 32,
+	NOISE_SYMMETRIC_KEY_LEN = 32,
+	NOISE_TIMESTAMP_LEN = 12,
+	NOISE_AUTHTAG_LEN = 16,
+	NOISE_HASH_LEN = 32,
+};
+
+enum index_hashtable_type {
+	INDEX_HASHTABLE_HANDSHAKE = 1,
+	INDEX_HASHTABLE_KEYPAIR = 2,
+};
+
+enum noise_handshake_state {
+	HANDSHAKE_ZEROED = 0,
+	HANDSHAKE_CREATED_INITIATION = 1,
+	HANDSHAKE_CONSUMED_INITIATION = 2,
+	HANDSHAKE_CREATED_RESPONSE = 3,
+	HANDSHAKE_CONSUMED_RESPONSE = 4,
+};
+
+enum message_type {
+	MESSAGE_INVALID = 0,
+	MESSAGE_HANDSHAKE_INITIATION = 1,
+	MESSAGE_HANDSHAKE_RESPONSE = 2,
+	MESSAGE_HANDSHAKE_COOKIE = 3,
+	MESSAGE_DATA = 4,
+};
+
+enum limits {
+	REKEY_AFTER_MESSAGES = 1152921504606846976ULL,
+	REJECT_AFTER_MESSAGES = 18446744073709543486ULL,
+	REKEY_TIMEOUT = 5ULL,
+	REKEY_TIMEOUT_JITTER_MAX_JIFFIES = 83ULL,
+	REKEY_AFTER_TIME = 120ULL,
+	REJECT_AFTER_TIME = 180ULL,
+	INITIATIONS_PER_SECOND = 50ULL,
+	MAX_PEERS_PER_DEVICE = 1048576ULL,
+	KEEPALIVE_TIMEOUT = 10ULL,
+	MAX_TIMER_HANDSHAKES = 18ULL,
+	MAX_QUEUED_INCOMING_HANDSHAKES = 4096ULL,
+	MAX_STAGED_PACKETS = 128ULL,
+	MAX_QUEUED_PACKETS = 1024ULL,
+};
+
+struct wg_peer;
+
+struct index_hashtable_entry {
+	struct wg_peer *peer;
+	struct hlist_node index_hash;
+	enum index_hashtable_type type;
+	__le32 index;
+};
+
+struct noise_symmetric_key {
+	u8 key[32];
+	u64 birthdate;
+	bool is_valid;
+};
+
+struct noise_replay_counter {
+	u64 counter;
+	spinlock_t lock;
+	unsigned long backtrack[128];
+};
+
+struct noise_keypair {
+	struct index_hashtable_entry entry;
+	struct noise_symmetric_key sending;
+	atomic64_t sending_counter;
+	struct noise_symmetric_key receiving;
+	struct noise_replay_counter receiving_counter;
+	__le32 remote_index;
+	bool i_am_the_initiator;
+	struct kref refcount;
+	struct callback_head rcu;
+	u64 internal_id;
+};
+
+struct prev_queue {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	struct sk_buff *peeked;
+	struct {
+		struct sk_buff *next;
+		struct sk_buff *prev;
+	} empty;
+	atomic_t count;
+};
+
+struct noise_keypairs {
+	struct noise_keypair __attribute__((btf_type_tag("rcu"))) *current_keypair;
+	struct noise_keypair __attribute__((btf_type_tag("rcu"))) *previous_keypair;
+	struct noise_keypair __attribute__((btf_type_tag("rcu"))) *next_keypair;
+	spinlock_t keypair_update_lock;
+};
+
+struct endpoint {
+	union {
+		struct sockaddr addr;
+		struct sockaddr_in addr4;
+		struct sockaddr_in6 addr6;
+	};
+	union {
+		struct {
+			struct in_addr src4;
+			int src_if4;
+		};
+		struct in6_addr src6;
+	};
+};
+
+struct dst_cache_pcpu;
+
+struct dst_cache {
+	struct dst_cache_pcpu __attribute__((btf_type_tag("percpu"))) *cache;
+	unsigned long reset_ts;
+};
+
+struct noise_static_identity;
+
+struct noise_handshake {
+	struct index_hashtable_entry entry;
+	enum noise_handshake_state state;
+	u64 last_initiation_consumption;
+	struct noise_static_identity *static_identity;
+	u8 ephemeral_private[32];
+	u8 remote_static[32];
+	u8 remote_ephemeral[32];
+	u8 precomputed_static_static[32];
+	u8 preshared_key[32];
+	u8 hash[32];
+	u8 chaining_key[32];
+	u8 latest_timestamp[12];
+	__le32 remote_index;
+	struct rw_semaphore lock;
+};
+
+struct cookie {
+	u64 birthdate;
+	bool is_valid;
+	u8 cookie[16];
+	bool have_sent_mac1;
+	u8 last_mac1_sent[16];
+	u8 cookie_decryption_key[32];
+	u8 message_mac1_key[32];
+	struct rw_semaphore lock;
+};
+
+struct gro_list {
+	struct list_head list;
+	int count;
+};
+
+struct napi_struct {
+	struct list_head poll_list;
+	unsigned long state;
+	int weight;
+	int defer_hard_irqs_count;
+	unsigned long gro_bitmask;
+	int (*poll)(struct napi_struct *, int);
+	int list_owner;
+	struct net_device *dev;
+	struct gro_list gro_hash[8];
+	struct sk_buff *skb;
+	struct list_head rx_list;
+	int rx_count;
+	unsigned int napi_id;
+	struct hrtimer timer;
+	struct task_struct *thread;
+	struct list_head dev_list;
+	struct hlist_node napi_hash_node;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct wg_device;
+
+struct wg_peer {
+	struct wg_device *device;
+	struct prev_queue tx_queue;
+	struct prev_queue rx_queue;
+	struct sk_buff_head staged_packet_queue;
+	int serial_work_cpu;
+	bool is_dead;
+	struct noise_keypairs keypairs;
+	struct endpoint endpoint;
+	struct dst_cache endpoint_cache;
+	rwlock_t endpoint_lock;
+	struct noise_handshake handshake;
+	atomic64_t last_sent_handshake;
+	struct work_struct transmit_handshake_work;
+	struct work_struct clear_peer_work;
+	struct work_struct transmit_packet_work;
+	struct cookie latest_cookie;
+	struct hlist_node pubkey_hash;
+	u64 rx_bytes;
+	u64 tx_bytes;
+	struct timer_list timer_retransmit_handshake;
+	struct timer_list timer_send_keepalive;
+	struct timer_list timer_new_handshake;
+	struct timer_list timer_zero_key_material;
+	struct timer_list timer_persistent_keepalive;
+	unsigned int timer_handshake_attempts;
+	u16 persistent_keepalive_interval;
+	bool timer_need_another_keepalive;
+	bool sent_lastminute_handshake;
+	struct timespec64 walltime_last_handshake;
+	struct kref refcount;
+	struct callback_head rcu;
+	struct list_head peer_list;
+	struct list_head allowedips_list;
+	struct napi_struct napi;
+	u64 internal_id;
+};
+
+struct multicore_worker;
+
+struct crypt_queue {
+	struct ptr_ring ring;
+	struct multicore_worker __attribute__((btf_type_tag("percpu"))) *worker;
+	int last_cpu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct noise_static_identity {
+	u8 static_public[32];
+	u8 static_private[32];
+	struct rw_semaphore lock;
+	bool has_identity;
+};
+
+struct cookie_checker {
+	u8 secret[32];
+	u8 cookie_encryption_key[32];
+	u8 message_mac1_key[32];
+	u64 secret_birthdate;
+	struct rw_semaphore secret_lock;
+	struct wg_device *device;
+};
+
+struct allowedips_node;
+
+struct allowedips {
+	struct allowedips_node __attribute__((btf_type_tag("rcu"))) *root4;
+	struct allowedips_node __attribute__((btf_type_tag("rcu"))) *root6;
+	u64 seq;
+};
+
+struct pubkey_hashtable;
+
+struct index_hashtable;
+
+struct wg_device {
+	struct net_device *dev;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct crypt_queue encrypt_queue;
+	struct crypt_queue decrypt_queue;
+	struct crypt_queue handshake_queue;
+	struct sock __attribute__((btf_type_tag("rcu"))) *sock4;
+	struct sock __attribute__((btf_type_tag("rcu"))) *sock6;
+	struct net __attribute__((btf_type_tag("rcu"))) *creating_net;
+	struct noise_static_identity static_identity;
+	struct workqueue_struct *packet_crypt_wq;
+	struct workqueue_struct *handshake_receive_wq;
+	struct workqueue_struct *handshake_send_wq;
+	struct cookie_checker cookie_checker;
+	struct pubkey_hashtable *peer_hashtable;
+	struct index_hashtable *index_hashtable;
+	struct allowedips peer_allowedips;
+	struct mutex device_update_lock;
+	struct mutex socket_update_lock;
+	struct list_head device_list;
+	struct list_head peer_list;
+	atomic_t handshake_queue_len;
+	unsigned int num_peers;
+	unsigned int device_update_gen;
+	u32 fwmark;
+	u16 incoming_port;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct multicore_worker {
+	void *ptr;
+	struct work_struct work;
+};
+
+struct pubkey_hashtable {
+	struct hlist_head hashtable[2048];
+	siphash_key_t key;
+	struct mutex lock;
+};
+
+struct index_hashtable {
+	struct hlist_head hashtable[8192];
+	spinlock_t lock;
+};
+
+struct allowedips_node {
+	struct wg_peer __attribute__((btf_type_tag("rcu"))) *peer;
+	struct allowedips_node __attribute__((btf_type_tag("rcu"))) *bit[2];
+	u8 cidr;
+	u8 bit_at_a;
+	u8 bit_at_b;
+	u8 bitlen;
+	long: 0;
+	u8 bits[16];
+	unsigned long parent_bit_packed;
+	union {
+		struct list_head peer_list;
+		struct callback_head rcu;
+	};
+};
+
+struct dst_cache_pcpu {
+	unsigned long refresh_ts;
+	struct dst_entry *dst;
+	u32 cookie;
+	union {
+		struct in_addr in_saddr;
+		struct in6_addr in6_saddr;
+	};
+};
+
+struct message_header {
+	__le32 type;
+};
+
+struct message_macs {
+	u8 mac1[16];
+	u8 mac2[16];
+};
+
+struct message_handshake_initiation {
+	struct message_header header;
+	__le32 sender_index;
+	u8 unencrypted_ephemeral[32];
+	u8 encrypted_static[48];
+	u8 encrypted_timestamp[28];
+	struct message_macs macs;
+};
+
+struct message_handshake_response {
+	struct message_header header;
+	__le32 sender_index;
+	__le32 receiver_index;
+	u8 unencrypted_ephemeral[32];
+	u8 encrypted_nothing[16];
+	struct message_macs macs;
+};
+
+struct in_ifaddr {
+	struct hlist_node hash;
+	struct in_ifaddr __attribute__((btf_type_tag("rcu"))) *ifa_next;
+	struct in_device *ifa_dev;
+	struct callback_head callback_head;
+	__be32 ifa_local;
+	__be32 ifa_address;
+	__be32 ifa_mask;
+	__u32 ifa_rt_priority;
+	__be32 ifa_broadcast;
+	unsigned char ifa_scope;
+	unsigned char ifa_prefixlen;
+	unsigned char ifa_proto;
+	__u32 ifa_flags;
+	char ifa_label[16];
+	__u32 ifa_valid_lft;
+	__u32 ifa_preferred_lft;
+	unsigned long ifa_cstamp;
+	unsigned long ifa_tstamp;
+};
+
+struct ip_sf_list;
+
+struct ip_mc_list {
+	struct in_device *interface;
+	__be32 multiaddr;
+	unsigned int sfmode;
+	struct ip_sf_list *sources;
+	struct ip_sf_list *tomb;
+	unsigned long sfcount[2];
+	union {
+		struct ip_mc_list *next;
+		struct ip_mc_list __attribute__((btf_type_tag("rcu"))) *next_rcu;
+	};
+	struct ip_mc_list __attribute__((btf_type_tag("rcu"))) *next_hash;
+	struct timer_list timer;
+	int users;
+	refcount_t refcnt;
+	spinlock_t lock;
+	char tm_running;
+	char reporter;
+	char unsolicit_count;
+	char loaded;
+	unsigned char gsquery;
+	unsigned char crcount;
+	struct callback_head rcu;
+};
+
+enum macsec_offload {
+	MACSEC_OFFLOAD_OFF = 0,
+	MACSEC_OFFLOAD_PHY = 1,
+	MACSEC_OFFLOAD_MAC = 2,
+	__MACSEC_OFFLOAD_END = 3,
+	MACSEC_OFFLOAD_MAX = 2,
+};
+
+struct macsec_secy;
+
+struct macsec_rx_sc;
+
+struct macsec_rx_sa;
+
+struct macsec_tx_sa;
+
+struct macsec_tx_sc_stats;
+
+struct macsec_tx_sa_stats;
+
+struct macsec_rx_sc_stats;
+
+struct macsec_rx_sa_stats;
+
+struct macsec_dev_stats;
+
+struct macsec_context {
+	union {
+		struct net_device *netdev;
+		struct phy_device *phydev;
+	};
+	enum macsec_offload offload;
+	struct macsec_secy *secy;
+	struct macsec_rx_sc *rx_sc;
+	struct {
+		bool update_pn;
+		unsigned char assoc_num;
+		u8 key[128];
+		union {
+			struct macsec_rx_sa *rx_sa;
+			struct macsec_tx_sa *tx_sa;
+		};
+	} sa;
+	union {
+		struct macsec_tx_sc_stats *tx_sc_stats;
+		struct macsec_tx_sa_stats *tx_sa_stats;
+		struct macsec_rx_sc_stats *rx_sc_stats;
+		struct macsec_rx_sa_stats *rx_sa_stats;
+		struct macsec_dev_stats *dev_stats;
+	} stats;
+};
+
+typedef u64 sci_t;
+
+enum macsec_validation_type {
+	MACSEC_VALIDATE_DISABLED = 0,
+	MACSEC_VALIDATE_CHECK = 1,
+	MACSEC_VALIDATE_STRICT = 2,
+	__MACSEC_VALIDATE_END = 3,
+	MACSEC_VALIDATE_MAX = 2,
+};
+
+struct pcpu_tx_sc_stats;
+
+struct metadata_dst;
+
+struct macsec_tx_sc {
+	bool active;
+	u8 encoding_sa;
+	bool encrypt;
+	bool send_sci;
+	bool end_station;
+	bool scb;
+	struct macsec_tx_sa __attribute__((btf_type_tag("rcu"))) *sa[4];
+	struct pcpu_tx_sc_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	struct metadata_dst *md_dst;
+};
+
+struct macsec_secy {
+	struct net_device *netdev;
+	unsigned int n_rx_sc;
+	sci_t sci;
+	u16 key_len;
+	u16 icv_len;
+	enum macsec_validation_type validate_frames;
+	bool xpn;
+	bool operational;
+	bool protect_frames;
+	bool replay_protect;
+	u32 replay_window;
+	struct macsec_tx_sc tx_sc;
+	struct macsec_rx_sc __attribute__((btf_type_tag("rcu"))) *rx_sc;
+};
+
+union salt {
+	struct {
+		u32 ssci;
+		u64 pn;
+	} __attribute__((packed));
+	u8 bytes[12];
+};
+
+typedef union salt salt_t;
+
+struct macsec_key {
+	u8 id[16];
+	struct crypto_aead *tfm;
+	salt_t salt;
+};
+
+typedef u32 ssci_t;
+
+union pn {
+	struct {
+		u32 lower;
+		u32 upper;
+	};
+	u64 full64;
+};
+
+typedef union pn pn_t;
+
+struct macsec_tx_sa {
+	struct macsec_key key;
+	ssci_t ssci;
+	spinlock_t lock;
+	union {
+		pn_t next_pn_halves;
+		u64 next_pn;
+	};
+	refcount_t refcnt;
+	bool active;
+	struct macsec_tx_sa_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	struct callback_head rcu;
+};
+
+struct macsec_tx_sa_stats {
+	__u32 OutPktsProtected;
+	__u32 OutPktsEncrypted;
+};
+
+struct macsec_tx_sc_stats {
+	__u64 OutPktsProtected;
+	__u64 OutPktsEncrypted;
+	__u64 OutOctetsProtected;
+	__u64 OutOctetsEncrypted;
+};
+
+struct pcpu_tx_sc_stats {
+	struct macsec_tx_sc_stats stats;
+	struct u64_stats_sync syncp;
+};
+
+struct ip_tunnel_key {
+	__be64 tun_id;
+	union {
+		struct {
+			__be32 src;
+			__be32 dst;
+		} ipv4;
+		struct {
+			struct in6_addr src;
+			struct in6_addr dst;
+		} ipv6;
+	} u;
+	__be16 tun_flags;
+	u8 tos;
+	u8 ttl;
+	__be32 label;
+	u32 nhid;
+	__be16 tp_src;
+	__be16 tp_dst;
+	__u8 flow_flags;
+};
+
+struct ip_tunnel_encap {
+	u16 type;
+	u16 flags;
+	__be16 sport;
+	__be16 dport;
+};
+
+struct ip_tunnel_info {
+	struct ip_tunnel_key key;
+	struct ip_tunnel_encap encap;
+	struct dst_cache dst_cache;
+	u8 options_len;
+	u8 mode;
+};
+
+struct hw_port_info {
+	struct net_device *lower_dev;
+	u32 port_id;
+};
+
+struct macsec_info {
+	sci_t sci;
+};
+
+struct xfrm_md_info {
+	u32 if_id;
+	int link;
+	struct dst_entry *dst_orig;
+};
+
+enum metadata_type {
+	METADATA_IP_TUNNEL = 0,
+	METADATA_HW_PORT_MUX = 1,
+	METADATA_MACSEC = 2,
+	METADATA_XFRM = 3,
+};
+
+struct metadata_dst {
+	struct dst_entry dst;
+	enum metadata_type type;
+	union {
+		struct ip_tunnel_info tun_info;
+		struct hw_port_info port_info;
+		struct macsec_info macsec_info;
+		struct xfrm_md_info xfrm_info;
+	} u;
+};
+
+struct pcpu_rx_sc_stats;
+
+struct macsec_rx_sc {
+	struct macsec_rx_sc __attribute__((btf_type_tag("rcu"))) *next;
+	sci_t sci;
+	bool active;
+	struct macsec_rx_sa __attribute__((btf_type_tag("rcu"))) *sa[4];
+	struct pcpu_rx_sc_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	refcount_t refcnt;
+	struct callback_head callback_head;
+};
+
+struct macsec_rx_sa {
+	struct macsec_key key;
+	ssci_t ssci;
+	spinlock_t lock;
+	union {
+		pn_t next_pn_halves;
+		u64 next_pn;
+	};
+	refcount_t refcnt;
+	bool active;
+	struct macsec_rx_sa_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	struct macsec_rx_sc *sc;
+	struct callback_head rcu;
+};
+
+struct macsec_rx_sa_stats {
+	__u32 InPktsOK;
+	__u32 InPktsInvalid;
+	__u32 InPktsNotValid;
+	__u32 InPktsNotUsingSA;
+	__u32 InPktsUnusedSA;
+};
+
+struct macsec_rx_sc_stats {
+	__u64 InOctetsValidated;
+	__u64 InOctetsDecrypted;
+	__u64 InPktsUnchecked;
+	__u64 InPktsDelayed;
+	__u64 InPktsOK;
+	__u64 InPktsInvalid;
+	__u64 InPktsLate;
+	__u64 InPktsNotValid;
+	__u64 InPktsNotUsingSA;
+	__u64 InPktsUnusedSA;
+};
+
+struct pcpu_rx_sc_stats {
+	struct macsec_rx_sc_stats stats;
+	struct u64_stats_sync syncp;
+};
+
+struct macsec_dev_stats {
+	__u64 OutPktsUntagged;
+	__u64 InPktsUntagged;
+	__u64 OutPktsTooLong;
+	__u64 InPktsNoTag;
+	__u64 InPktsBadTag;
+	__u64 InPktsUnknownSCI;
+	__u64 InPktsNoSCI;
+	__u64 InPktsOverrun;
+};
+
+enum message_alignments {
+	MESSAGE_PADDING_MULTIPLE = 16,
+	MESSAGE_MINIMUM_LENGTH = 32,
+};
+
+enum {
+	WG_NETDEV_FEATURES = 1126357076009ULL,
+};
+
+enum {
+	IPV4_DEVCONF_FORWARDING = 1,
+	IPV4_DEVCONF_MC_FORWARDING = 2,
+	IPV4_DEVCONF_PROXY_ARP = 3,
+	IPV4_DEVCONF_ACCEPT_REDIRECTS = 4,
+	IPV4_DEVCONF_SECURE_REDIRECTS = 5,
+	IPV4_DEVCONF_SEND_REDIRECTS = 6,
+	IPV4_DEVCONF_SHARED_MEDIA = 7,
+	IPV4_DEVCONF_RP_FILTER = 8,
+	IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,
+	IPV4_DEVCONF_BOOTP_RELAY = 10,
+	IPV4_DEVCONF_LOG_MARTIANS = 11,
+	IPV4_DEVCONF_TAG = 12,
+	IPV4_DEVCONF_ARPFILTER = 13,
+	IPV4_DEVCONF_MEDIUM_ID = 14,
+	IPV4_DEVCONF_NOXFRM = 15,
+	IPV4_DEVCONF_NOPOLICY = 16,
+	IPV4_DEVCONF_FORCE_IGMP_VERSION = 17,
+	IPV4_DEVCONF_ARP_ANNOUNCE = 18,
+	IPV4_DEVCONF_ARP_IGNORE = 19,
+	IPV4_DEVCONF_PROMOTE_SECONDARIES = 20,
+	IPV4_DEVCONF_ARP_ACCEPT = 21,
+	IPV4_DEVCONF_ARP_NOTIFY = 22,
+	IPV4_DEVCONF_ACCEPT_LOCAL = 23,
+	IPV4_DEVCONF_SRC_VMARK = 24,
+	IPV4_DEVCONF_PROXY_ARP_PVLAN = 25,
+	IPV4_DEVCONF_ROUTE_LOCALNET = 26,
+	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,
+	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,
+	IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,
+	IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,
+	IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,
+	IPV4_DEVCONF_BC_FORWARDING = 32,
+	IPV4_DEVCONF_ARP_EVICT_NOCARRIER = 33,
+	__IPV4_DEVCONF_MAX = 34,
+};
+
+enum in6_addr_gen_mode {
+	IN6_ADDR_GEN_MODE_EUI64 = 0,
+	IN6_ADDR_GEN_MODE_NONE = 1,
+	IN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,
+	IN6_ADDR_GEN_MODE_RANDOM = 3,
+};
+
+struct packet_cb {
+	u64 nonce;
+	struct noise_keypair *keypair;
+	atomic_t state;
+	u32 mtu;
+	u8 ds;
+};
+
+enum {
+	NAPI_STATE_SCHED = 0,
+	NAPI_STATE_MISSED = 1,
+	NAPI_STATE_DISABLE = 2,
+	NAPI_STATE_NPSVC = 3,
+	NAPI_STATE_LISTED = 4,
+	NAPI_STATE_NO_BUSY_POLL = 5,
+	NAPI_STATE_IN_BUSY_POLL = 6,
+	NAPI_STATE_PREFER_BUSY_POLL = 7,
+	NAPI_STATE_THREADED = 8,
+	NAPI_STATE_SCHED_THREADED = 9,
+};
+
+enum netdev_state_t {
+	__LINK_STATE_START = 0,
+	__LINK_STATE_PRESENT = 1,
+	__LINK_STATE_NOCARRIER = 2,
+	__LINK_STATE_LINKWATCH_PENDING = 3,
+	__LINK_STATE_DORMANT = 4,
+	__LINK_STATE_TESTING = 5,
+};
+
+struct udp_hslot;
+
+struct udp_table {
+	struct udp_hslot *hash;
+	struct udp_hslot *hash2;
+	unsigned int mask;
+	unsigned int log;
+};
+
+struct udp_hslot {
+	struct hlist_head head;
+	int count;
+	spinlock_t lock;
+};
+
+enum {
+	HANDSHAKE_DSCP = 136,
+};
+
+enum packet_state {
+	PACKET_STATE_UNCRYPTED = 0,
+	PACKET_STATE_CRYPTED = 1,
+	PACKET_STATE_DEAD = 2,
+};
+
+enum {
+	INET_ECN_NOT_ECT = 0,
+	INET_ECN_ECT_1 = 1,
+	INET_ECN_ECT_0 = 2,
+	INET_ECN_CE = 3,
+	INET_ECN_MASK = 3,
+};
+
+struct message_data {
+	struct message_header header;
+	__le32 key_idx;
+	__le64 counter;
+	u8 encrypted_data[0];
+};
+
+struct message_handshake_cookie {
+	struct message_header header;
+	__le32 receiver_index;
+	u8 nonce[24];
+	u8 encrypted_cookie[32];
+};
+
+struct vlan_hdr {
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+struct flow_dissector_key_control {
+	u16 thoff;
+	u16 addr_type;
+	u32 flags;
+};
+
+struct flow_dissector_key_basic {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+};
+
+struct flow_keys_basic {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+};
+
+struct flow_dissector {
+	unsigned long long used_keys;
+	unsigned short offset[33];
+};
+
+enum cookie_mac_state {
+	INVALID_MAC = 0,
+	VALID_MAC_BUT_NO_COOKIE = 1,
+	VALID_MAC_WITH_COOKIE_BUT_RATELIMITED = 2,
+	VALID_MAC_WITH_COOKIE = 3,
+};
+
+enum counter_values {
+	COUNTER_BITS_TOTAL = 8192,
+	COUNTER_REDUNDANT_BITS = 64,
+	COUNTER_WINDOW_SIZE = 8128,
+};
+
+enum gro_result {
+	GRO_MERGED = 0,
+	GRO_MERGED_FREE = 1,
+	GRO_HELD = 2,
+	GRO_NORMAL = 3,
+	GRO_CONSUMED = 4,
+};
+
+typedef enum gro_result gro_result_t;
+
+struct udp_tunnel_info {
+	unsigned short type;
+	sa_family_t sa_family;
+	__be16 port;
+	u8 hw_priv;
+};
+
+struct udp_tunnel_nic_shared {
+	struct udp_tunnel_nic *udp_tunnel_nic_info;
+	struct list_head devices;
+};
+
+enum rt_scope_t {
+	RT_SCOPE_UNIVERSE = 0,
+	RT_SCOPE_SITE = 200,
+	RT_SCOPE_LINK = 253,
+	RT_SCOPE_HOST = 254,
+	RT_SCOPE_NOWHERE = 255,
+};
+
+enum {
+	RTAX_UNSPEC = 0,
+	RTAX_LOCK = 1,
+	RTAX_MTU = 2,
+	RTAX_WINDOW = 3,
+	RTAX_RTT = 4,
+	RTAX_RTTVAR = 5,
+	RTAX_SSTHRESH = 6,
+	RTAX_CWND = 7,
+	RTAX_ADVMSS = 8,
+	RTAX_REORDERING = 9,
+	RTAX_HOPLIMIT = 10,
+	RTAX_INITCWND = 11,
+	RTAX_FEATURES = 12,
+	RTAX_RTO_MIN = 13,
+	RTAX_INITRWND = 14,
+	RTAX_QUICKACK = 15,
+	RTAX_CC_ALGO = 16,
+	RTAX_FASTOPEN_NO_COOKIE = 17,
+	__RTAX_MAX = 18,
+};
+
+struct udp_port_cfg {
+	u8 family;
+	union {
+		struct in_addr local_ip;
+		struct in6_addr local_ip6;
+	};
+	union {
+		struct in_addr peer_ip;
+		struct in6_addr peer_ip6;
+	};
+	__be16 local_udp_port;
+	__be16 peer_udp_port;
+	int bind_ifindex;
+	unsigned int use_udp_checksums: 1;
+	unsigned int use_udp6_tx_checksums: 1;
+	unsigned int use_udp6_rx_checksums: 1;
+	unsigned int ipv6_v6only: 1;
+};
+
+typedef int (*udp_tunnel_encap_rcv_t)(struct sock *, struct sk_buff *);
+
+typedef int (*udp_tunnel_encap_err_lookup_t)(struct sock *, struct sk_buff *);
+
+typedef void (*udp_tunnel_encap_err_rcv_t)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+
+typedef void (*udp_tunnel_encap_destroy_t)(struct sock *);
+
+typedef struct sk_buff * (*udp_tunnel_gro_receive_t)(struct sock *, struct list_head *, struct sk_buff *);
+
+typedef int (*udp_tunnel_gro_complete_t)(struct sock *, struct sk_buff *, int);
+
+struct udp_tunnel_sock_cfg {
+	void *sk_user_data;
+	__u8 encap_type;
+	udp_tunnel_encap_rcv_t encap_rcv;
+	udp_tunnel_encap_err_lookup_t encap_err_lookup;
+	udp_tunnel_encap_err_rcv_t encap_err_rcv;
+	udp_tunnel_encap_destroy_t encap_destroy;
+	udp_tunnel_gro_receive_t gro_receive;
+	udp_tunnel_gro_complete_t gro_complete;
+};
+
+typedef struct {
+	unsigned long key[2];
+} hsiphash_key_t;
+
+enum {
+	PACKETS_PER_SECOND = 20,
+	PACKETS_BURSTABLE = 5,
+	PACKET_COST = 50000000,
+	TOKEN_MAX = 250000000,
+};
+
+struct ratelimiter_entry {
+	u64 last_time_ns;
+	u64 tokens;
+	u64 ip;
+	void *net;
+	spinlock_t lock;
+	struct hlist_node hash;
+	struct callback_head rcu;
+};
+
+enum cookie_values {
+	COOKIE_SECRET_MAX_AGE = 120,
+	COOKIE_SECRET_LATENCY = 5,
+	COOKIE_NONCE_LEN = 24,
+	COOKIE_LEN = 16,
+};
+
+enum {
+	COOKIE_KEY_LABEL_LEN = 8,
+};
+
+enum wgdevice_attribute {
+	WGDEVICE_A_UNSPEC = 0,
+	WGDEVICE_A_IFINDEX = 1,
+	WGDEVICE_A_IFNAME = 2,
+	WGDEVICE_A_PRIVATE_KEY = 3,
+	WGDEVICE_A_PUBLIC_KEY = 4,
+	WGDEVICE_A_FLAGS = 5,
+	WGDEVICE_A_LISTEN_PORT = 6,
+	WGDEVICE_A_FWMARK = 7,
+	WGDEVICE_A_PEERS = 8,
+	__WGDEVICE_A_LAST = 9,
+};
+
+enum wg_cmd {
+	WG_CMD_GET_DEVICE = 0,
+	WG_CMD_SET_DEVICE = 1,
+	__WG_CMD_MAX = 2,
+};
+
+enum wgpeer_attribute {
+	WGPEER_A_UNSPEC = 0,
+	WGPEER_A_PUBLIC_KEY = 1,
+	WGPEER_A_PRESHARED_KEY = 2,
+	WGPEER_A_FLAGS = 3,
+	WGPEER_A_ENDPOINT = 4,
+	WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL = 5,
+	WGPEER_A_LAST_HANDSHAKE_TIME = 6,
+	WGPEER_A_RX_BYTES = 7,
+	WGPEER_A_TX_BYTES = 8,
+	WGPEER_A_ALLOWEDIPS = 9,
+	WGPEER_A_PROTOCOL_VERSION = 10,
+	__WGPEER_A_LAST = 11,
+};
+
+enum wgallowedip_attribute {
+	WGALLOWEDIP_A_UNSPEC = 0,
+	WGALLOWEDIP_A_FAMILY = 1,
+	WGALLOWEDIP_A_IPADDR = 2,
+	WGALLOWEDIP_A_CIDR_MASK = 3,
+	__WGALLOWEDIP_A_LAST = 4,
+};
+
+enum wgdevice_flag {
+	WGDEVICE_F_REPLACE_PEERS = 1,
+	__WGDEVICE_F_ALL = 1,
+};
+
+enum wgpeer_flag {
+	WGPEER_F_REMOVE_ME = 1,
+	WGPEER_F_REPLACE_ALLOWEDIPS = 2,
+	WGPEER_F_UPDATE_ONLY = 4,
+	__WGPEER_F_ALL = 7,
+};
+
+struct dump_ctx {
+	struct wg_device *wg;
+	struct wg_peer *next_peer;
+	u64 allowedips_seq;
+	struct allowedips_node *next_allowedip;
+};
+
+struct genl_dumpit_info {
+	struct genl_split_ops op;
+	struct genl_info info;
+};
+
+struct qdisc_walker {
+	int stop;
+	int skip;
+	int count;
+	int (*fn)(struct Qdisc *, unsigned long, struct qdisc_walker *);
+};
+
+struct ifb_q_stats_desc {
+	char desc[32];
+	size_t offset;
+};
+
+enum netdev_queue_state_t {
+	__QUEUE_STATE_DRV_XOFF = 0,
+	__QUEUE_STATE_STACK_XOFF = 1,
+	__QUEUE_STATE_FROZEN = 2,
+};
+
+enum ethtool_stringset {
+	ETH_SS_TEST = 0,
+	ETH_SS_STATS = 1,
+	ETH_SS_PRIV_FLAGS = 2,
+	ETH_SS_NTUPLE_FILTERS = 3,
+	ETH_SS_FEATURES = 4,
+	ETH_SS_RSS_HASH_FUNCS = 5,
+	ETH_SS_TUNABLES = 6,
+	ETH_SS_PHY_STATS = 7,
+	ETH_SS_PHY_TUNABLES = 8,
+	ETH_SS_LINK_MODES = 9,
+	ETH_SS_MSG_CLASSES = 10,
+	ETH_SS_WOL_MODES = 11,
+	ETH_SS_SOF_TIMESTAMPING = 12,
+	ETH_SS_TS_TX_TYPES = 13,
+	ETH_SS_TS_RX_FILTERS = 14,
+	ETH_SS_UDP_TUNNEL_TYPES = 15,
+	ETH_SS_STATS_STD = 16,
+	ETH_SS_STATS_ETH_PHY = 17,
+	ETH_SS_STATS_ETH_MAC = 18,
+	ETH_SS_STATS_ETH_CTRL = 19,
+	ETH_SS_STATS_RMON = 20,
+	ETH_SS_COUNT = 21,
+};
+
+struct ifb_q_stats {
+	u64 packets;
+	u64 bytes;
+	struct u64_stats_sync sync;
+};
+
+struct ifb_q_private {
+	struct net_device *dev;
+	struct tasklet_struct ifb_tasklet;
+	int tasklet_pending;
+	int txqnum;
+	struct sk_buff_head rq;
+	struct sk_buff_head tq;
+	struct ifb_q_stats rx_stats;
+	struct ifb_q_stats tx_stats;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ifb_dev_private {
+	struct ifb_q_private *tx_private;
+};
+
+struct mdio_bus_stats {
+	u64_stats_t transfers;
+	u64_stats_t errors;
+	u64_stats_t writes;
+	u64_stats_t reads;
+	struct u64_stats_sync syncp;
+};
+
+struct mdio_device;
+
+struct phy_package_shared;
+
+struct mii_bus {
+	struct module *owner;
+	const char *name;
+	char id[61];
+	void *priv;
+	int (*read)(struct mii_bus *, int, int);
+	int (*write)(struct mii_bus *, int, int, u16);
+	int (*read_c45)(struct mii_bus *, int, int, int);
+	int (*write_c45)(struct mii_bus *, int, int, int, u16);
+	int (*reset)(struct mii_bus *);
+	struct mdio_bus_stats stats[32];
+	struct mutex mdio_lock;
+	struct device *parent;
+	enum {
+		MDIOBUS_ALLOCATED = 1,
+		MDIOBUS_REGISTERED = 2,
+		MDIOBUS_UNREGISTERED = 3,
+		MDIOBUS_RELEASED = 4,
+	} state;
+	struct device dev;
+	struct mdio_device *mdio_map[32];
+	u32 phy_mask;
+	u32 phy_ignore_ta_mask;
+	int irq[32];
+	int reset_delay_us;
+	int reset_post_delay_us;
+	struct gpio_desc *reset_gpiod;
+	struct mutex shared_lock;
+	struct phy_package_shared *shared[32];
+};
+
+struct mdio_device {
+	struct device dev;
+	struct mii_bus *bus;
+	char modalias[32];
+	int (*bus_match)(struct device *, struct device_driver *);
+	void (*device_free)(struct mdio_device *);
+	void (*device_remove)(struct mdio_device *);
+	int addr;
+	int flags;
+	struct gpio_desc *reset_gpio;
+	struct reset_control *reset_ctrl;
+	unsigned int reset_assert_delay;
+	unsigned int reset_deassert_delay;
+};
+
+struct phy_package_shared {
+	int addr;
+	refcount_t refcnt;
+	unsigned long flags;
+	size_t priv_size;
+	void *priv;
+};
+
+struct mdio_board_info {
+	const char *bus_id;
+	char modalias[32];
+	int mdio_addr;
+	const void *platform_data;
+};
+
+struct mdio_board_entry {
+	struct list_head list;
+	struct mdio_board_info board_info;
+};
+
+struct phylib_stubs {
+	int (*hwtstamp_get)(struct phy_device *, struct kernel_hwtstamp_config *);
+	int (*hwtstamp_set)(struct phy_device *, struct kernel_hwtstamp_config *, struct netlink_ext_ack *);
+};
+
+struct mdiobus_devres {
+	struct mii_bus *mii;
+};
+
+struct sfp_eeprom_id;
+
+struct sfp_upstream_ops {
+	void (*attach)(void *, struct sfp_bus *);
+	void (*detach)(void *, struct sfp_bus *);
+	int (*module_insert)(void *, const struct sfp_eeprom_id *);
+	void (*module_remove)(void *);
+	int (*module_start)(void *);
+	void (*module_stop)(void *);
+	void (*link_down)(void *);
+	void (*link_up)(void *);
+	int (*connect_phy)(void *, struct phy_device *);
+	void (*disconnect_phy)(void *);
+};
+
+struct sfp_eeprom_base {
+	u8 phys_id;
+	u8 phys_ext_id;
+	u8 connector;
+	u8 if_1x_copper_passive: 1;
+	u8 if_1x_copper_active: 1;
+	u8 if_1x_lx: 1;
+	u8 if_1x_sx: 1;
+	u8 e10g_base_sr: 1;
+	u8 e10g_base_lr: 1;
+	u8 e10g_base_lrm: 1;
+	u8 e10g_base_er: 1;
+	u8 sonet_oc3_short_reach: 1;
+	u8 sonet_oc3_smf_intermediate_reach: 1;
+	u8 sonet_oc3_smf_long_reach: 1;
+	u8 unallocated_5_3: 1;
+	u8 sonet_oc12_short_reach: 1;
+	u8 sonet_oc12_smf_intermediate_reach: 1;
+	u8 sonet_oc12_smf_long_reach: 1;
+	u8 unallocated_5_7: 1;
+	u8 sonet_oc48_short_reach: 1;
+	u8 sonet_oc48_intermediate_reach: 1;
+	u8 sonet_oc48_long_reach: 1;
+	u8 sonet_reach_bit2: 1;
+	u8 sonet_reach_bit1: 1;
+	u8 sonet_oc192_short_reach: 1;
+	u8 escon_smf_1310_laser: 1;
+	u8 escon_mmf_1310_led: 1;
+	u8 e1000_base_sx: 1;
+	u8 e1000_base_lx: 1;
+	u8 e1000_base_cx: 1;
+	u8 e1000_base_t: 1;
+	u8 e100_base_lx: 1;
+	u8 e100_base_fx: 1;
+	u8 e_base_bx10: 1;
+	u8 e_base_px: 1;
+	u8 fc_tech_electrical_inter_enclosure: 1;
+	u8 fc_tech_lc: 1;
+	u8 fc_tech_sa: 1;
+	u8 fc_ll_m: 1;
+	u8 fc_ll_l: 1;
+	u8 fc_ll_i: 1;
+	u8 fc_ll_s: 1;
+	u8 fc_ll_v: 1;
+	u8 unallocated_8_0: 1;
+	u8 unallocated_8_1: 1;
+	u8 sfp_ct_passive: 1;
+	u8 sfp_ct_active: 1;
+	u8 fc_tech_ll: 1;
+	u8 fc_tech_sl: 1;
+	u8 fc_tech_sn: 1;
+	u8 fc_tech_electrical_intra_enclosure: 1;
+	u8 fc_media_sm: 1;
+	u8 unallocated_9_1: 1;
+	u8 fc_media_m5: 1;
+	u8 fc_media_m6: 1;
+	u8 fc_media_tv: 1;
+	u8 fc_media_mi: 1;
+	u8 fc_media_tp: 1;
+	u8 fc_media_tw: 1;
+	u8 fc_speed_100: 1;
+	u8 unallocated_10_1: 1;
+	u8 fc_speed_200: 1;
+	u8 fc_speed_3200: 1;
+	u8 fc_speed_400: 1;
+	u8 fc_speed_1600: 1;
+	u8 fc_speed_800: 1;
+	u8 fc_speed_1200: 1;
+	u8 encoding;
+	u8 br_nominal;
+	u8 rate_id;
+	u8 link_len[6];
+	char vendor_name[16];
+	u8 extended_cc;
+	char vendor_oui[3];
+	char vendor_pn[16];
+	char vendor_rev[4];
+	union {
+		__be16 optical_wavelength;
+		__be16 cable_compliance;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 reserved60_2: 6;
+			u8 reserved61: 8;
+		} passive;
+		struct {
+			u8 sff8431_app_e: 1;
+			u8 fc_pi_4_app_h: 1;
+			u8 sff8431_lim: 1;
+			u8 fc_pi_4_lim: 1;
+			u8 reserved60_4: 4;
+			u8 reserved61: 8;
+		} active;
+	};
+	u8 reserved62;
+	u8 cc_base;
+};
+
+struct sfp_eeprom_ext {
+	__be16 options;
+	u8 br_max;
+	u8 br_min;
+	char vendor_sn[16];
+	char datecode[8];
+	u8 diagmon;
+	u8 enhopts;
+	u8 sff8472_compliance;
+	u8 cc_ext;
+};
+
+struct sfp_eeprom_id {
+	struct sfp_eeprom_base base;
+	struct sfp_eeprom_ext ext;
+};
+
+struct phy_c45_device_ids {
+	u32 devices_in_package;
+	u32 mmds_present;
+	u32 device_ids[32];
+};
+
+enum phy_state {
+	PHY_DOWN = 0,
+	PHY_READY = 1,
+	PHY_HALTED = 2,
+	PHY_ERROR = 3,
+	PHY_UP = 4,
+	PHY_RUNNING = 5,
+	PHY_NOLINK = 6,
+	PHY_CABLETEST = 7,
+};
+
+struct pse_control;
+
+struct phy_driver;
+
+struct phy_led_trigger;
+
+struct phylink;
+
+struct mii_timestamper;
+
+struct phy_device {
+	struct mdio_device mdio;
+	struct phy_driver *drv;
+	struct device_link *devlink;
+	u32 phy_id;
+	struct phy_c45_device_ids c45_ids;
+	unsigned int is_c45: 1;
+	unsigned int is_internal: 1;
+	unsigned int is_pseudo_fixed_link: 1;
+	unsigned int is_gigabit_capable: 1;
+	unsigned int has_fixups: 1;
+	unsigned int suspended: 1;
+	unsigned int suspended_by_mdio_bus: 1;
+	unsigned int sysfs_links: 1;
+	unsigned int loopback_enabled: 1;
+	unsigned int downshifted_rate: 1;
+	unsigned int is_on_sfp_module: 1;
+	unsigned int mac_managed_pm: 1;
+	unsigned int wol_enabled: 1;
+	unsigned int autoneg: 1;
+	unsigned int link: 1;
+	unsigned int autoneg_complete: 1;
+	unsigned int interrupts: 1;
+	unsigned int irq_suspended: 1;
+	unsigned int irq_rerun: 1;
+	int rate_matching;
+	enum phy_state state;
+	u32 dev_flags;
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int port;
+	int pause;
+	int asym_pause;
+	u8 master_slave_get;
+	u8 master_slave_set;
+	u8 master_slave_state;
+	unsigned long supported[2];
+	unsigned long advertising[2];
+	unsigned long lp_advertising[2];
+	unsigned long adv_old[2];
+	unsigned long supported_eee[2];
+	unsigned long advertising_eee[2];
+	bool eee_enabled;
+	unsigned long host_interfaces[1];
+	u32 eee_broken_modes;
+	struct phy_led_trigger *phy_led_triggers;
+	unsigned int phy_num_led_triggers;
+	struct phy_led_trigger *last_triggered;
+	struct phy_led_trigger *led_link_trigger;
+	struct list_head leds;
+	int irq;
+	void *priv;
+	struct phy_package_shared *shared;
+	struct sk_buff *skb;
+	void *ehdr;
+	struct nlattr *nest;
+	struct delayed_work state_queue;
+	struct mutex lock;
+	bool sfp_bus_attached;
+	struct sfp_bus *sfp_bus;
+	struct phylink *phylink;
+	struct net_device *attached_dev;
+	struct mii_timestamper *mii_ts;
+	struct pse_control *psec;
+	u8 mdix;
+	u8 mdix_ctrl;
+	int pma_extable;
+	unsigned int link_down_events;
+	void (*phy_link_change)(struct phy_device *, bool);
+	void (*adjust_link)(struct net_device *);
+	const struct macsec_ops *macsec_ops;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct mdio_driver_common {
+	struct device_driver driver;
+	int flags;
+};
+
+enum led_brightness {
+	LED_OFF = 0,
+	LED_ON = 1,
+	LED_HALF = 127,
+	LED_FULL = 255,
+};
+
+struct phy_tdr_config;
+
+struct phy_plca_cfg;
+
+struct phy_plca_status;
+
+struct phy_driver {
+	struct mdio_driver_common mdiodrv;
+	u32 phy_id;
+	char *name;
+	u32 phy_id_mask;
+	const unsigned long * const features;
+	u32 flags;
+	const void *driver_data;
+	int (*soft_reset)(struct phy_device *);
+	int (*config_init)(struct phy_device *);
+	int (*probe)(struct phy_device *);
+	int (*get_features)(struct phy_device *);
+	int (*get_rate_matching)(struct phy_device *, phy_interface_t);
+	int (*suspend)(struct phy_device *);
+	int (*resume)(struct phy_device *);
+	int (*config_aneg)(struct phy_device *);
+	int (*aneg_done)(struct phy_device *);
+	int (*read_status)(struct phy_device *);
+	int (*config_intr)(struct phy_device *);
+	irqreturn_t (*handle_interrupt)(struct phy_device *);
+	void (*remove)(struct phy_device *);
+	int (*match_phy_device)(struct phy_device *);
+	int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);
+	void (*link_change_notify)(struct phy_device *);
+	int (*read_mmd)(struct phy_device *, int, u16);
+	int (*write_mmd)(struct phy_device *, int, u16, u16);
+	int (*read_page)(struct phy_device *);
+	int (*write_page)(struct phy_device *, int);
+	int (*module_info)(struct phy_device *, struct ethtool_modinfo *);
+	int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);
+	int (*cable_test_start)(struct phy_device *);
+	int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);
+	int (*cable_test_get_status)(struct phy_device *, bool *);
+	int (*get_sset_count)(struct phy_device *);
+	void (*get_strings)(struct phy_device *, u8 *);
+	void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);
+	int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);
+	int (*set_loopback)(struct phy_device *, bool);
+	int (*get_sqi)(struct phy_device *);
+	int (*get_sqi_max)(struct phy_device *);
+	int (*get_plca_cfg)(struct phy_device *, struct phy_plca_cfg *);
+	int (*set_plca_cfg)(struct phy_device *, const struct phy_plca_cfg *);
+	int (*get_plca_status)(struct phy_device *, struct phy_plca_status *);
+	int (*led_brightness_set)(struct phy_device *, u8, enum led_brightness);
+	int (*led_blink_set)(struct phy_device *, u8, unsigned long *, unsigned long *);
+	int (*led_hw_is_supported)(struct phy_device *, u8, unsigned long);
+	int (*led_hw_control_set)(struct phy_device *, u8, unsigned long);
+	int (*led_hw_control_get)(struct phy_device *, u8, unsigned long *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct phy_tdr_config {
+	u32 first;
+	u32 last;
+	u32 step;
+	s8 pair;
+};
+
+struct phy_plca_cfg {
+	int version;
+	int enabled;
+	int node_id;
+	int node_cnt;
+	int to_tmr;
+	int burst_cnt;
+	int burst_tmr;
+};
+
+struct phy_plca_status {
+	bool pst;
+};
+
+struct phylink_link_state {
+	unsigned long advertising[2];
+	unsigned long lp_advertising[2];
+	phy_interface_t interface;
+	int speed;
+	int duplex;
+	int pause;
+	int rate_matching;
+	unsigned int link: 1;
+	unsigned int an_complete: 1;
+};
+
+struct phylink_mac_ops;
+
+struct phylink_config;
+
+struct phylink_pcs;
+
+struct phylink {
+	struct net_device *netdev;
+	const struct phylink_mac_ops *mac_ops;
+	struct phylink_config *config;
+	struct phylink_pcs *pcs;
+	struct device *dev;
+	unsigned int old_link_state: 1;
+	unsigned long phylink_disable_state;
+	struct phy_device *phydev;
+	phy_interface_t link_interface;
+	u8 cfg_link_an_mode;
+	u8 cur_link_an_mode;
+	u8 link_port;
+	unsigned long supported[2];
+	struct phylink_link_state link_config;
+	phy_interface_t cur_interface;
+	struct gpio_desc *link_gpio;
+	unsigned int link_irq;
+	struct timer_list link_poll;
+	void (*get_fixed_state)(struct net_device *, struct phylink_link_state *);
+	struct mutex state_mutex;
+	struct phylink_link_state phy_state;
+	struct work_struct resolve;
+	unsigned int pcs_neg_mode;
+	unsigned int pcs_state;
+	bool mac_link_dropped;
+	bool using_mac_select_pcs;
+	struct sfp_bus *sfp_bus;
+	bool sfp_may_have_phy;
+	unsigned long sfp_interfaces[1];
+	unsigned long sfp_support[2];
+	u8 sfp_port;
+};
+
+struct phylink_mac_ops {
+	void (*validate)(struct phylink_config *, unsigned long *, struct phylink_link_state *);
+	struct phylink_pcs * (*mac_select_pcs)(struct phylink_config *, phy_interface_t);
+	int (*mac_prepare)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_config)(struct phylink_config *, unsigned int, const struct phylink_link_state *);
+	int (*mac_finish)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_link_down)(struct phylink_config *, unsigned int, phy_interface_t);
+	void (*mac_link_up)(struct phylink_config *, struct phy_device *, unsigned int, phy_interface_t, int, int, bool, bool);
+};
+
+enum phylink_op_type {
+	PHYLINK_NETDEV = 0,
+	PHYLINK_DEV = 1,
+};
+
+struct phylink_config {
+	struct device *dev;
+	enum phylink_op_type type;
+	bool poll_fixed_state;
+	bool mac_managed_pm;
+	bool ovr_an_inband;
+	void (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);
+	unsigned long supported_interfaces[1];
+	unsigned long mac_capabilities;
+};
+
+struct phylink_pcs_ops;
+
+struct phylink_pcs {
+	const struct phylink_pcs_ops *ops;
+	struct phylink *phylink;
+	bool neg_mode;
+	bool poll;
+};
+
+struct phylink_pcs_ops {
+	int (*pcs_validate)(struct phylink_pcs *, unsigned long *, const struct phylink_link_state *);
+	int (*pcs_enable)(struct phylink_pcs *);
+	void (*pcs_disable)(struct phylink_pcs *);
+	void (*pcs_pre_config)(struct phylink_pcs *, phy_interface_t);
+	int (*pcs_post_config)(struct phylink_pcs *, phy_interface_t);
+	void (*pcs_get_state)(struct phylink_pcs *, struct phylink_link_state *);
+	int (*pcs_config)(struct phylink_pcs *, unsigned int, phy_interface_t, const unsigned long *, bool);
+	void (*pcs_an_restart)(struct phylink_pcs *);
+	void (*pcs_link_up)(struct phylink_pcs *, unsigned int, phy_interface_t, int, int);
+};
+
+struct mii_timestamper {
+	bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);
+	int (*hwtstamp)(struct mii_timestamper *, struct ifreq *);
+	void (*link_state)(struct mii_timestamper *, struct phy_device *);
+	int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);
+	struct device *device;
+};
+
+enum ethtool_link_mode_bit_indices {
+	ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
+	ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
+	ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
+	ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
+	ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
+	ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
+	ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
+	ETHTOOL_LINK_MODE_TP_BIT = 7,
+	ETHTOOL_LINK_MODE_AUI_BIT = 8,
+	ETHTOOL_LINK_MODE_MII_BIT = 9,
+	ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
+	ETHTOOL_LINK_MODE_BNC_BIT = 11,
+	ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
+	ETHTOOL_LINK_MODE_Pause_BIT = 13,
+	ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
+	ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
+	ETHTOOL_LINK_MODE_Backplane_BIT = 16,
+	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
+	ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
+	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
+	ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
+	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
+	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
+	ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
+	ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
+	ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
+	ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
+	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
+	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
+	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
+	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
+	ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,
+	ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,
+	ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,
+	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,
+	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,
+	ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,
+	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,
+	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,
+	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,
+	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,
+	ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,
+	ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,
+	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,
+	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
+	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
+	ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
+	ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
+	ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
+	ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,
+	ETHTOOL_LINK_MODE_FEC_RS_BIT = 50,
+	ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,
+	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,
+	ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,
+	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,
+	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,
+	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,
+	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,
+	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,
+	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,
+	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,
+	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,
+	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,
+	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,
+	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,
+	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,
+	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,
+	ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,
+	ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,
+	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,
+	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,
+	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
+	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
+	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
+	ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
+	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
+	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
+	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
+	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
+	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
+	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
+	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
+	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
+	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
+	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
+	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
+	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
+	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
+	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
+	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
+	ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,
+	ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,
+	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT = 92,
+	ETHTOOL_LINK_MODE_800000baseCR8_Full_BIT = 93,
+	ETHTOOL_LINK_MODE_800000baseKR8_Full_BIT = 94,
+	ETHTOOL_LINK_MODE_800000baseDR8_Full_BIT = 95,
+	ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT = 96,
+	ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT = 97,
+	ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT = 98,
+	ETHTOOL_LINK_MODE_10baseT1S_Full_BIT = 99,
+	ETHTOOL_LINK_MODE_10baseT1S_Half_BIT = 100,
+	ETHTOOL_LINK_MODE_10baseT1S_P2MP_Half_BIT = 101,
+	__ETHTOOL_LINK_MODE_MASK_NBITS = 102,
+};
+
+enum {
+	MLO_PAUSE_NONE = 0,
+	MLO_PAUSE_RX = 1,
+	MLO_PAUSE_TX = 2,
+	MLO_PAUSE_TXRX_MASK = 3,
+	MLO_PAUSE_AN = 4,
+	MLO_AN_PHY = 0,
+	MLO_AN_FIXED = 1,
+	MLO_AN_INBAND = 2,
+	PHYLINK_PCS_NEG_NONE = 0,
+	PHYLINK_PCS_NEG_ENABLED = 16,
+	PHYLINK_PCS_NEG_OUTBAND = 32,
+	PHYLINK_PCS_NEG_INBAND = 64,
+	PHYLINK_PCS_NEG_INBAND_DISABLED = 64,
+	PHYLINK_PCS_NEG_INBAND_ENABLED = 80,
+	MAC_SYM_PAUSE = 1,
+	MAC_ASYM_PAUSE = 2,
+	MAC_10HD = 4,
+	MAC_10FD = 8,
+	MAC_10 = 12,
+	MAC_100HD = 16,
+	MAC_100FD = 32,
+	MAC_100 = 48,
+	MAC_1000HD = 64,
+	MAC_1000FD = 128,
+	MAC_1000 = 192,
+	MAC_2500FD = 256,
+	MAC_5000FD = 512,
+	MAC_10000FD = 1024,
+	MAC_20000FD = 2048,
+	MAC_25000FD = 4096,
+	MAC_40000FD = 8192,
+	MAC_50000FD = 16384,
+	MAC_56000FD = 32768,
+	MAC_100000FD = 65536,
+	MAC_200000FD = 131072,
+	MAC_400000FD = 262144,
+};
+
+enum {
+	PHYLINK_DISABLE_STOPPED = 0,
+	PHYLINK_DISABLE_LINK = 1,
+	PHYLINK_DISABLE_MAC_WOL = 2,
+	PCS_STATE_DOWN = 0,
+	PCS_STATE_STARTING = 1,
+	PCS_STATE_STARTED = 2,
+};
+
+struct mii_ioctl_data {
+	__u16 phy_id;
+	__u16 reg_num;
+	__u16 val_in;
+	__u16 val_out;
+};
+
+struct phy_setting {
+	u32 speed;
+	u8 duplex;
+	u8 bit;
+};
+
+struct fixed_phy_status {
+	int link;
+	int speed;
+	int duplex;
+	int pause;
+	int asym_pause;
+};
+
+struct led_classdev;
+
+struct led_hw_trigger_type;
+
+struct led_trigger {
+	const char *name;
+	int (*activate)(struct led_classdev *);
+	void (*deactivate)(struct led_classdev *);
+	struct led_hw_trigger_type *trigger_type;
+	spinlock_t leddev_list_lock;
+	struct list_head led_cdevs;
+	struct list_head next_trig;
+	const struct attribute_group **groups;
+};
+
+struct phy_led_trigger {
+	struct led_trigger trigger;
+	char name[76];
+	unsigned int speed;
+};
+
+struct led_pattern;
+
+struct led_classdev {
+	const char *name;
+	unsigned int brightness;
+	unsigned int max_brightness;
+	unsigned int color;
+	int flags;
+	unsigned long work_flags;
+	void (*brightness_set)(struct led_classdev *, enum led_brightness);
+	int (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);
+	enum led_brightness (*brightness_get)(struct led_classdev *);
+	int (*blink_set)(struct led_classdev *, unsigned long *, unsigned long *);
+	int (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);
+	int (*pattern_clear)(struct led_classdev *);
+	struct device *dev;
+	const struct attribute_group **groups;
+	struct list_head node;
+	const char *default_trigger;
+	unsigned long blink_delay_on;
+	unsigned long blink_delay_off;
+	struct timer_list blink_timer;
+	int blink_brightness;
+	int new_blink_brightness;
+	void (*flash_resume)(struct led_classdev *);
+	struct work_struct set_brightness_work;
+	int delayed_set_value;
+	unsigned long delayed_delay_on;
+	unsigned long delayed_delay_off;
+	struct rw_semaphore trigger_lock;
+	struct led_trigger *trigger;
+	struct list_head trig_list;
+	void *trigger_data;
+	bool activated;
+	struct led_hw_trigger_type *trigger_type;
+	const char *hw_control_trigger;
+	int (*hw_control_is_supported)(struct led_classdev *, unsigned long);
+	int (*hw_control_set)(struct led_classdev *, unsigned long);
+	int (*hw_control_get)(struct led_classdev *, unsigned long *);
+	struct device * (*hw_control_get_device)(struct led_classdev *);
+	struct mutex led_access;
+};
+
+struct led_pattern {
+	u32 delta_t;
+	int brightness;
+};
+
+struct led_hw_trigger_type {
+	int dummy;
+};
+
+enum {
+	ETHTOOL_MSG_KERNEL_NONE = 0,
+	ETHTOOL_MSG_STRSET_GET_REPLY = 1,
+	ETHTOOL_MSG_LINKINFO_GET_REPLY = 2,
+	ETHTOOL_MSG_LINKINFO_NTF = 3,
+	ETHTOOL_MSG_LINKMODES_GET_REPLY = 4,
+	ETHTOOL_MSG_LINKMODES_NTF = 5,
+	ETHTOOL_MSG_LINKSTATE_GET_REPLY = 6,
+	ETHTOOL_MSG_DEBUG_GET_REPLY = 7,
+	ETHTOOL_MSG_DEBUG_NTF = 8,
+	ETHTOOL_MSG_WOL_GET_REPLY = 9,
+	ETHTOOL_MSG_WOL_NTF = 10,
+	ETHTOOL_MSG_FEATURES_GET_REPLY = 11,
+	ETHTOOL_MSG_FEATURES_SET_REPLY = 12,
+	ETHTOOL_MSG_FEATURES_NTF = 13,
+	ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14,
+	ETHTOOL_MSG_PRIVFLAGS_NTF = 15,
+	ETHTOOL_MSG_RINGS_GET_REPLY = 16,
+	ETHTOOL_MSG_RINGS_NTF = 17,
+	ETHTOOL_MSG_CHANNELS_GET_REPLY = 18,
+	ETHTOOL_MSG_CHANNELS_NTF = 19,
+	ETHTOOL_MSG_COALESCE_GET_REPLY = 20,
+	ETHTOOL_MSG_COALESCE_NTF = 21,
+	ETHTOOL_MSG_PAUSE_GET_REPLY = 22,
+	ETHTOOL_MSG_PAUSE_NTF = 23,
+	ETHTOOL_MSG_EEE_GET_REPLY = 24,
+	ETHTOOL_MSG_EEE_NTF = 25,
+	ETHTOOL_MSG_TSINFO_GET_REPLY = 26,
+	ETHTOOL_MSG_CABLE_TEST_NTF = 27,
+	ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,
+	ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,
+	ETHTOOL_MSG_FEC_GET_REPLY = 30,
+	ETHTOOL_MSG_FEC_NTF = 31,
+	ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 32,
+	ETHTOOL_MSG_STATS_GET_REPLY = 33,
+	ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 34,
+	ETHTOOL_MSG_MODULE_GET_REPLY = 35,
+	ETHTOOL_MSG_MODULE_NTF = 36,
+	ETHTOOL_MSG_PSE_GET_REPLY = 37,
+	ETHTOOL_MSG_RSS_GET_REPLY = 38,
+	ETHTOOL_MSG_PLCA_GET_CFG_REPLY = 39,
+	ETHTOOL_MSG_PLCA_GET_STATUS_REPLY = 40,
+	ETHTOOL_MSG_PLCA_NTF = 41,
+	ETHTOOL_MSG_MM_GET_REPLY = 42,
+	ETHTOOL_MSG_MM_NTF = 43,
+	__ETHTOOL_MSG_KERNEL_CNT = 44,
+	ETHTOOL_MSG_KERNEL_MAX = 43,
+};
+
+struct ethtool_phy_ops {
+	int (*get_sset_count)(struct phy_device *);
+	int (*get_strings)(struct phy_device *, u8 *);
+	int (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);
+	int (*get_plca_cfg)(struct phy_device *, struct phy_plca_cfg *);
+	int (*set_plca_cfg)(struct phy_device *, const struct phy_plca_cfg *, struct netlink_ext_ack *);
+	int (*get_plca_status)(struct phy_device *, struct phy_plca_status *);
+	int (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *);
+	int (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *);
+};
+
+struct phy_fixup {
+	struct list_head list;
+	char bus_id[64];
+	u32 phy_uid;
+	u32 phy_uid_mask;
+	int (*run)(struct phy_device *);
+};
+
+struct phy_led {
+	struct list_head list;
+	struct phy_device *phydev;
+	struct led_classdev led_cdev;
+	u8 index;
+};
+
+struct led_init_data {
+	struct fwnode_handle *fwnode;
+	const char *default_label;
+	const char *devicename;
+	bool devname_mandatory;
+};
+
+typedef void (*btf_trace_mdio_access)(void *, struct mii_bus *, char, u8, unsigned int, u16, int);
+
+struct trace_event_raw_mdio_access {
+	struct trace_entry ent;
+	char busid[61];
+	char read;
+	u8 addr;
+	u16 val;
+	unsigned int regnum;
+	char __data[0];
+};
+
+struct mdio_driver {
+	struct mdio_driver_common mdiodrv;
+	int (*probe)(struct mdio_device *);
+	void (*remove)(struct mdio_device *);
+	void (*shutdown)(struct mdio_device *);
+};
+
+struct trace_event_data_offsets_mdio_access {};
+
+struct mdio_bus_stat_attr {
+	int addr;
+	unsigned int field_offset;
+};
+
+struct swmii_regs {
+	u16 bmsr;
+	u16 lpa;
+	u16 lpagb;
+	u16 estat;
+};
+
+enum {
+	SWMII_SPEED_10 = 0,
+	SWMII_SPEED_100 = 1,
+	SWMII_SPEED_1000 = 2,
+	SWMII_DUPLEX_HALF = 0,
+	SWMII_DUPLEX_FULL = 1,
+};
+
+struct fixed_mdio_bus {
+	struct mii_bus *mii_bus;
+	struct list_head phys;
+};
+
+struct fixed_phy {
+	int addr;
+	struct phy_device *phydev;
+	struct fixed_phy_status status;
+	bool no_carrier;
+	int (*link_update)(struct net_device *, struct fixed_phy_status *);
+	struct list_head node;
+	struct gpio_desc *link_gpiod;
+};
+
+struct wpan_phy;
+
+struct wpan_dev_header_ops;
+
+struct wpan_dev {
+	struct wpan_phy *wpan_phy;
+	int iftype;
+	struct list_head list;
+	struct net_device *netdev;
+	const struct wpan_dev_header_ops *header_ops;
+	struct net_device *lowpan_dev;
+	u32 identifier;
+	__le16 pan_id;
+	__le16 short_addr;
+	__le64 extended_addr;
+	atomic_t bsn;
+	atomic_t dsn;
+	u8 min_be;
+	u8 max_be;
+	u8 csma_retries;
+	s8 frame_retries;
+	bool lbt;
+	bool ackreq;
+};
+
+enum nl802154_supported_bool_states {
+	NL802154_SUPPORTED_BOOL_FALSE = 0,
+	NL802154_SUPPORTED_BOOL_TRUE = 1,
+	__NL802154_SUPPORTED_BOOL_INVALD = 2,
+	NL802154_SUPPORTED_BOOL_BOTH = 3,
+	__NL802154_SUPPORTED_BOOL_AFTER_LAST = 4,
+	NL802154_SUPPORTED_BOOL_MAX = 3,
+};
+
+struct wpan_phy_supported {
+	u32 channels[32];
+	u32 cca_modes;
+	u32 cca_opts;
+	u32 iftypes;
+	enum nl802154_supported_bool_states lbt;
+	u8 min_minbe;
+	u8 max_minbe;
+	u8 min_maxbe;
+	u8 max_maxbe;
+	u8 min_csma_backoffs;
+	u8 max_csma_backoffs;
+	s8 min_frame_retries;
+	s8 max_frame_retries;
+	size_t tx_powers_size;
+	size_t cca_ed_levels_size;
+	const s32 *tx_powers;
+	const s32 *cca_ed_levels;
+};
+
+enum nl802154_cca_modes {
+	__NL802154_CCA_INVALID = 0,
+	NL802154_CCA_ENERGY = 1,
+	NL802154_CCA_CARRIER = 2,
+	NL802154_CCA_ENERGY_CARRIER = 3,
+	NL802154_CCA_ALOHA = 4,
+	NL802154_CCA_UWB_SHR = 5,
+	NL802154_CCA_UWB_MULTIPLEXED = 6,
+	__NL802154_CCA_ATTR_AFTER_LAST = 7,
+	NL802154_CCA_ATTR_MAX = 6,
+};
+
+enum nl802154_cca_opts {
+	NL802154_CCA_OPT_ENERGY_CARRIER_AND = 0,
+	NL802154_CCA_OPT_ENERGY_CARRIER_OR = 1,
+	__NL802154_CCA_OPT_ATTR_AFTER_LAST = 2,
+	NL802154_CCA_OPT_ATTR_MAX = 1,
+};
+
+struct wpan_phy_cca {
+	enum nl802154_cca_modes mode;
+	enum nl802154_cca_opts opt;
+};
+
+enum ieee802154_filtering_level {
+	IEEE802154_FILTERING_NONE = 0,
+	IEEE802154_FILTERING_1_FCS = 1,
+	IEEE802154_FILTERING_2_PROMISCUOUS = 2,
+	IEEE802154_FILTERING_3_SCAN = 3,
+	IEEE802154_FILTERING_4_FRAME_FIELDS = 4,
+};
+
+struct wpan_phy {
+	const void *privid;
+	unsigned long flags;
+	u8 current_channel;
+	u8 current_page;
+	struct wpan_phy_supported supported;
+	s32 transmit_power;
+	struct wpan_phy_cca cca;
+	__le64 perm_extended_addr;
+	s32 cca_ed_level;
+	u32 symbol_duration;
+	u16 lifs_period;
+	u16 sifs_period;
+	struct device dev;
+	possible_net_t _net;
+	spinlock_t queue_lock;
+	atomic_t ongoing_txs;
+	atomic_t hold_txs;
+	wait_queue_head_t sync_txq;
+	enum ieee802154_filtering_level filtering;
+	long: 0;
+	char priv[0];
+};
+
+struct ieee802154_addr;
+
+struct wpan_dev_header_ops {
+	int (*create)(struct sk_buff *, struct net_device *, const struct ieee802154_addr *, const struct ieee802154_addr *, unsigned int);
+};
+
+struct ieee802154_addr {
+	u8 mode;
+	__le16 pan_id;
+	union {
+		__le16 short_addr;
+		__le64 extended_addr;
+	};
+};
+
+enum {
+	NETIF_MSG_DRV_BIT = 0,
+	NETIF_MSG_PROBE_BIT = 1,
+	NETIF_MSG_LINK_BIT = 2,
+	NETIF_MSG_TIMER_BIT = 3,
+	NETIF_MSG_IFDOWN_BIT = 4,
+	NETIF_MSG_IFUP_BIT = 5,
+	NETIF_MSG_RX_ERR_BIT = 6,
+	NETIF_MSG_TX_ERR_BIT = 7,
+	NETIF_MSG_TX_QUEUED_BIT = 8,
+	NETIF_MSG_INTR_BIT = 9,
+	NETIF_MSG_TX_DONE_BIT = 10,
+	NETIF_MSG_RX_STATUS_BIT = 11,
+	NETIF_MSG_PKTDATA_BIT = 12,
+	NETIF_MSG_HW_BIT = 13,
+	NETIF_MSG_WOL_BIT = 14,
+	NETIF_MSG_CLASS_COUNT = 15,
+};
+
+enum {
+	IFLA_TUN_UNSPEC = 0,
+	IFLA_TUN_OWNER = 1,
+	IFLA_TUN_GROUP = 2,
+	IFLA_TUN_TYPE = 3,
+	IFLA_TUN_PI = 4,
+	IFLA_TUN_VNET_HDR = 5,
+	IFLA_TUN_PERSIST = 6,
+	IFLA_TUN_MULTI_QUEUE = 7,
+	IFLA_TUN_NUM_QUEUES = 8,
+	IFLA_TUN_NUM_DISABLED_QUEUES = 9,
+	__IFLA_TUN_MAX = 10,
+};
+
+enum {
+	SKB_GSO_TCPV4 = 1,
+	SKB_GSO_DODGY = 2,
+	SKB_GSO_TCP_ECN = 4,
+	SKB_GSO_TCP_FIXEDID = 8,
+	SKB_GSO_TCPV6 = 16,
+	SKB_GSO_FCOE = 32,
+	SKB_GSO_GRE = 64,
+	SKB_GSO_GRE_CSUM = 128,
+	SKB_GSO_IPXIP4 = 256,
+	SKB_GSO_IPXIP6 = 512,
+	SKB_GSO_UDP_TUNNEL = 1024,
+	SKB_GSO_UDP_TUNNEL_CSUM = 2048,
+	SKB_GSO_PARTIAL = 4096,
+	SKB_GSO_TUNNEL_REMCSUM = 8192,
+	SKB_GSO_SCTP = 16384,
+	SKB_GSO_ESP = 32768,
+	SKB_GSO_UDP = 65536,
+	SKB_GSO_UDP_L4 = 131072,
+	SKB_GSO_FRAGLIST = 262144,
+};
+
+enum xdp_mem_type {
+	MEM_TYPE_PAGE_SHARED = 0,
+	MEM_TYPE_PAGE_ORDER0 = 1,
+	MEM_TYPE_PAGE_POOL = 2,
+	MEM_TYPE_XSK_BUFF_POOL = 3,
+	MEM_TYPE_MAX = 4,
+};
+
+struct tun_struct;
+
+struct tun_flow_entry {
+	struct hlist_node hash_link;
+	struct callback_head rcu;
+	struct tun_struct *tun;
+	u32 rxhash;
+	u32 rps_rxhash;
+	int queue_index;
+	long: 64;
+	unsigned long updated;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tap_filter {
+	unsigned int count;
+	u32 mask[2];
+	unsigned char addr[48];
+};
+
+struct tun_file;
+
+struct tun_prog;
+
+struct tun_struct {
+	struct tun_file __attribute__((btf_type_tag("rcu"))) *tfiles[256];
+	unsigned int numqueues;
+	unsigned int flags;
+	kuid_t owner;
+	kgid_t group;
+	struct net_device *dev;
+	netdev_features_t set_features;
+	int align;
+	int vnet_hdr_sz;
+	int sndbuf;
+	struct tap_filter txflt;
+	struct sock_fprog fprog;
+	bool filter_attached;
+	u32 msg_enable;
+	spinlock_t lock;
+	struct hlist_head flows[1024];
+	struct timer_list flow_gc_timer;
+	unsigned long ageing_time;
+	unsigned int numdisabled;
+	struct list_head disabled;
+	void *security;
+	u32 flow_count;
+	u32 rx_batched;
+	atomic_long_t rx_frame_errors;
+	struct bpf_prog __attribute__((btf_type_tag("rcu"))) *xdp_prog;
+	struct tun_prog __attribute__((btf_type_tag("rcu"))) *steering_prog;
+	struct tun_prog __attribute__((btf_type_tag("rcu"))) *filter_prog;
+	struct ethtool_link_ksettings link_ksettings;
+	struct file *file;
+	struct ifreq *ifr;
+};
+
+struct tun_file {
+	struct sock sk;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct socket socket;
+	struct tun_struct __attribute__((btf_type_tag("rcu"))) *tun;
+	struct fasync_struct *fasync;
+	unsigned int flags;
+	union {
+		u16 queue_index;
+		unsigned int ifindex;
+	};
+	struct napi_struct napi;
+	bool napi_enabled;
+	bool napi_frags_enabled;
+	struct mutex napi_mutex;
+	struct list_head next;
+	struct tun_struct *detached;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring tx_ring;
+	struct xdp_rxq_info xdp_rxq;
+};
+
+struct tun_prog {
+	struct callback_head rcu;
+	struct bpf_prog *prog;
+};
+
+struct rps_sock_flow_table {
+	u32 mask;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 ents[0];
+};
+
+struct tun_pi {
+	__u16 flags;
+	__be16 proto;
+};
+
+struct virtio_net_hdr {
+	__u8 flags;
+	__u8 gso_type;
+	__virtio16 hdr_len;
+	__virtio16 gso_size;
+	__virtio16 csum_start;
+	__virtio16 csum_offset;
+};
+
+struct veth {
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+};
+
+struct nf_conntrack {
+	refcount_t use;
+};
+
+struct tun_page {
+	struct page *page;
+	int count;
+};
+
+struct tun_xdp_hdr {
+	int buflen;
+	struct virtio_net_hdr gso;
+};
+
+struct tun_filter {
+	__u16 flags;
+	__u16 count;
+	__u8 addr[0];
+};
+
+struct tun_msg_ctl {
+	unsigned short type;
+	unsigned short num;
+	void *ptr;
+};
+
+struct page_pool_params {
+	unsigned int flags;
+	unsigned int order;
+	unsigned int pool_size;
+	int nid;
+	struct device *dev;
+	struct napi_struct *napi;
+	enum dma_data_direction dma_dir;
+	unsigned int max_len;
+	unsigned int offset;
+	void (*init_callback)(struct page *, void *);
+	void *init_arg;
+};
+
+struct pp_alloc_cache {
+	u32 count;
+	struct page *cache[128];
+};
+
+struct page_pool {
+	struct page_pool_params p;
+	long frag_users;
+	struct page *frag_page;
+	unsigned int frag_offset;
+	u32 pages_state_hold_cnt;
+	struct delayed_work release_dw;
+	void (*disconnect)(void *);
+	unsigned long defer_start;
+	unsigned long defer_warn;
+	u32 xdp_mem_id;
+	struct pp_alloc_cache alloc;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring ring;
+	atomic_t pages_state_release_cnt;
+	refcount_t user_cnt;
+	u64 destroy_cnt;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct veth_q_stat_desc {
+	char desc[32];
+	size_t offset;
+};
+
+enum {
+	VETH_INFO_UNSPEC = 0,
+	VETH_INFO_PEER = 1,
+	__VETH_INFO_MAX = 2,
+};
+
+struct veth_stats {
+	u64 rx_drops;
+	u64 xdp_packets;
+	u64 xdp_bytes;
+	u64 xdp_redirect;
+	u64 xdp_drops;
+	u64 xdp_tx;
+	u64 xdp_tx_err;
+	u64 peer_tq_xdp_xmit;
+	u64 peer_tq_xdp_xmit_err;
+};
+
+struct veth_rq_stats {
+	struct veth_stats vs;
+	struct u64_stats_sync syncp;
+};
+
+struct veth_rq {
+	struct napi_struct xdp_napi;
+	struct napi_struct __attribute__((btf_type_tag("rcu"))) *napi;
+	struct net_device *dev;
+	struct bpf_prog __attribute__((btf_type_tag("rcu"))) *xdp_prog;
+	struct xdp_mem_info xdp_mem;
+	struct veth_rq_stats stats;
+	bool rx_notify_masked;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct ptr_ring xdp_ring;
+	struct xdp_rxq_info xdp_rxq;
+	struct page_pool *page_pool;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ifinfomsg {
+	unsigned char ifi_family;
+	unsigned char __ifi_pad;
+	unsigned short ifi_type;
+	int ifi_index;
+	unsigned int ifi_flags;
+	unsigned int ifi_change;
+};
+
+struct veth_priv {
+	struct net_device __attribute__((btf_type_tag("rcu"))) *peer;
+	atomic64_t dropped;
+	struct bpf_prog *_xdp_prog;
+	struct veth_rq *rq;
+	unsigned int requested_headroom;
+};
+
+struct veth_xdp_tx_bq {
+	struct xdp_frame *q[16];
+	unsigned int count;
+};
+
+struct veth_xdp_buff {
+	struct xdp_buff xdp;
+	struct sk_buff *skb;
+};
+
+struct uio_mem;
+
+struct map_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct uio_mem *, char *);
+	ssize_t (*store)(struct uio_mem *, const char *, size_t);
+};
+
+struct uio_map;
+
+struct uio_mem {
+	const char *name;
+	phys_addr_t addr;
+	unsigned long offs;
+	resource_size_t size;
+	int memtype;
+	void *internal_addr;
+	struct uio_map *map;
+};
+
+struct uio_map {
+	struct kobject kobj;
+	struct uio_mem *mem;
+};
+
+struct uio_port;
+
+struct portio_sysfs_entry {
+	struct attribute attr;
+	ssize_t (*show)(struct uio_port *, char *);
+	ssize_t (*store)(struct uio_port *, const char *, size_t);
+};
+
+struct uio_portio;
+
+struct uio_port {
+	const char *name;
+	unsigned long start;
+	unsigned long size;
+	int porttype;
+	struct uio_portio *portio;
+};
+
+struct uio_portio {
+	struct kobject kobj;
+	struct uio_port *port;
+};
+
+struct uio_info;
+
+struct uio_device {
+	struct module *owner;
+	struct device dev;
+	int minor;
+	atomic_t event;
+	struct fasync_struct *async_queue;
+	wait_queue_head_t wait;
+	struct uio_info *info;
+	struct mutex info_lock;
+	struct kobject *map_dir;
+	struct kobject *portio_dir;
+	u64 android_kabi_reserved1;
+};
+
+struct uio_info {
+	struct uio_device *uio_dev;
+	const char *name;
+	const char *version;
+	struct uio_mem mem[5];
+	struct uio_port port[5];
+	long irq;
+	unsigned long irq_flags;
+	void *priv;
+	irqreturn_t (*handler)(int, struct uio_info *);
+	int (*mmap)(struct uio_info *, struct vm_area_struct *);
+	int (*open)(struct uio_info *, struct inode *);
+	int (*release)(struct uio_info *, struct inode *);
+	int (*irqcontrol)(struct uio_info *, s32);
+	u64 android_kabi_reserved1;
+};
+
+struct uio_listener {
+	struct uio_device *dev;
+	s32 event_count;
+};
+
+enum usb_otg_state {
+	OTG_STATE_UNDEFINED = 0,
+	OTG_STATE_B_IDLE = 1,
+	OTG_STATE_B_SRP_INIT = 2,
+	OTG_STATE_B_PERIPHERAL = 3,
+	OTG_STATE_B_WAIT_ACON = 4,
+	OTG_STATE_B_HOST = 5,
+	OTG_STATE_A_IDLE = 6,
+	OTG_STATE_A_WAIT_VRISE = 7,
+	OTG_STATE_A_WAIT_BCON = 8,
+	OTG_STATE_A_HOST = 9,
+	OTG_STATE_A_SUSPEND = 10,
+	OTG_STATE_A_PERIPHERAL = 11,
+	OTG_STATE_A_WAIT_VFALL = 12,
+	OTG_STATE_A_VBUS_ERR = 13,
+};
+
+enum usb_device_speed {
+	USB_SPEED_UNKNOWN = 0,
+	USB_SPEED_LOW = 1,
+	USB_SPEED_FULL = 2,
+	USB_SPEED_HIGH = 3,
+	USB_SPEED_WIRELESS = 4,
+	USB_SPEED_SUPER = 5,
+	USB_SPEED_SUPER_PLUS = 6,
+};
+
+enum usb_ssp_rate {
+	USB_SSP_GEN_UNKNOWN = 0,
+	USB_SSP_GEN_2x1 = 1,
+	USB_SSP_GEN_1x2 = 2,
+	USB_SSP_GEN_2x2 = 3,
+};
+
+enum usb_device_state {
+	USB_STATE_NOTATTACHED = 0,
+	USB_STATE_ATTACHED = 1,
+	USB_STATE_POWERED = 2,
+	USB_STATE_RECONNECTING = 3,
+	USB_STATE_UNAUTHENTICATED = 4,
+	USB_STATE_DEFAULT = 5,
+	USB_STATE_ADDRESS = 6,
+	USB_STATE_CONFIGURED = 7,
+	USB_STATE_SUSPENDED = 8,
+};
+
+enum usb_dr_mode {
+	USB_DR_MODE_UNKNOWN = 0,
+	USB_DR_MODE_HOST = 1,
+	USB_DR_MODE_PERIPHERAL = 2,
+	USB_DR_MODE_OTG = 3,
+};
+
+struct usb_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bEndpointAddress;
+	__u8 bmAttributes;
+	__le16 wMaxPacketSize;
+	__u8 bInterval;
+	__u8 bRefresh;
+	__u8 bSynchAddress;
+} __attribute__((packed));
+
+struct usb_otg_caps {
+	u16 otg_rev;
+	bool hnp_support;
+	bool srp_support;
+	bool adp_support;
+};
+
+enum usb_interface_condition {
+	USB_INTERFACE_UNBOUND = 0,
+	USB_INTERFACE_BINDING = 1,
+	USB_INTERFACE_BOUND = 2,
+	USB_INTERFACE_UNBINDING = 3,
+};
+
+enum usb_wireless_status {
+	USB_WIRELESS_STATUS_NA = 0,
+	USB_WIRELESS_STATUS_DISCONNECTED = 1,
+	USB_WIRELESS_STATUS_CONNECTED = 2,
+};
+
+enum usb3_link_state {
+	USB3_LPM_U0 = 0,
+	USB3_LPM_U1 = 1,
+	USB3_LPM_U2 = 2,
+	USB3_LPM_U3 = 3,
+};
+
+enum usb_phy_type {
+	USB_PHY_TYPE_UNDEFINED = 0,
+	USB_PHY_TYPE_USB2 = 1,
+	USB_PHY_TYPE_USB3 = 2,
+};
+
+enum usb_phy_events {
+	USB_EVENT_NONE = 0,
+	USB_EVENT_VBUS = 1,
+	USB_EVENT_ID = 2,
+	USB_EVENT_CHARGER = 3,
+	USB_EVENT_ENUMERATED = 4,
+};
+
+enum usb_charger_type {
+	UNKNOWN_TYPE = 0,
+	SDP_TYPE = 1,
+	DCP_TYPE = 2,
+	CDP_TYPE = 3,
+	ACA_TYPE = 4,
+};
+
+enum usb_charger_state {
+	USB_CHARGER_DEFAULT = 0,
+	USB_CHARGER_PRESENT = 1,
+	USB_CHARGER_ABSENT = 2,
+};
+
+enum usb_dev_authorize_policy {
+	USB_DEVICE_AUTHORIZE_NONE = 0,
+	USB_DEVICE_AUTHORIZE_ALL = 1,
+	USB_DEVICE_AUTHORIZE_INTERNAL = 2,
+};
+
+enum usb_port_connect_type {
+	USB_PORT_CONNECT_TYPE_UNKNOWN = 0,
+	USB_PORT_CONNECT_TYPE_HOT_PLUG = 1,
+	USB_PORT_CONNECT_TYPE_HARD_WIRED = 2,
+	USB_PORT_NOT_USED = 3,
+};
+
+struct usb_host_interface;
+
+struct usb_interface_assoc_descriptor;
+
+struct usb_interface {
+	struct usb_host_interface *altsetting;
+	struct usb_host_interface *cur_altsetting;
+	unsigned int num_altsetting;
+	struct usb_interface_assoc_descriptor *intf_assoc;
+	int minor;
+	enum usb_interface_condition condition;
+	unsigned int sysfs_files_created: 1;
+	unsigned int ep_devs_created: 1;
+	unsigned int unregistering: 1;
+	unsigned int needs_remote_wakeup: 1;
+	unsigned int needs_altsetting0: 1;
+	unsigned int needs_binding: 1;
+	unsigned int resetting_device: 1;
+	unsigned int authorized: 1;
+	enum usb_wireless_status wireless_status;
+	struct work_struct wireless_status_work;
+	struct device dev;
+	struct device *usb_dev;
+	struct work_struct reset_ws;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_interface_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bInterfaceNumber;
+	__u8 bAlternateSetting;
+	__u8 bNumEndpoints;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 iInterface;
+};
+
+struct usb_host_endpoint;
+
+struct usb_host_interface {
+	struct usb_interface_descriptor desc;
+	int extralen;
+	unsigned char *extra;
+	struct usb_host_endpoint *endpoint;
+	char *string;
+};
+
+struct usb_ss_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bMaxBurst;
+	__u8 bmAttributes;
+	__le16 wBytesPerInterval;
+};
+
+struct usb_ssp_isoc_ep_comp_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wReseved;
+	__le32 dwBytesPerInterval;
+};
+
+struct ep_device;
+
+struct usb_host_endpoint {
+	struct usb_endpoint_descriptor desc;
+	struct usb_ss_ep_comp_descriptor ss_ep_comp;
+	struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;
+	long: 0;
+	struct list_head urb_list;
+	void *hcpriv;
+	struct ep_device *ep_dev;
+	unsigned char *extra;
+	int extralen;
+	int enabled;
+	int streams;
+	long: 0;
+} __attribute__((packed));
+
+struct usb_interface_assoc_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bFirstInterface;
+	__u8 bInterfaceCount;
+	__u8 bFunctionClass;
+	__u8 bFunctionSubClass;
+	__u8 bFunctionProtocol;
+	__u8 iFunction;
+};
+
+struct usb_descriptor_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+};
+
+struct usb_device;
+
+struct each_dev_arg {
+	void *data;
+	int (*fn)(struct usb_device *, void *);
+};
+
+struct usb_device_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__le16 idVendor;
+	__le16 idProduct;
+	__le16 bcdDevice;
+	__u8 iManufacturer;
+	__u8 iProduct;
+	__u8 iSerialNumber;
+	__u8 bNumConfigurations;
+};
+
+struct usb2_lpm_parameters {
+	unsigned int besl;
+	int timeout;
+};
+
+struct usb3_lpm_parameters {
+	unsigned int mel;
+	unsigned int pel;
+	unsigned int sel;
+	int timeout;
+};
+
+struct usb_tt;
+
+struct usb_bus;
+
+struct usb_host_bos;
+
+struct usb_host_config;
+
+struct usb_device {
+	int devnum;
+	char devpath[16];
+	u32 route;
+	enum usb_device_state state;
+	enum usb_device_speed speed;
+	unsigned int rx_lanes;
+	unsigned int tx_lanes;
+	enum usb_ssp_rate ssp_rate;
+	struct usb_tt *tt;
+	int ttport;
+	unsigned int toggle[2];
+	struct usb_device *parent;
+	struct usb_bus *bus;
+	struct usb_host_endpoint ep0;
+	struct device dev;
+	struct usb_device_descriptor descriptor;
+	struct usb_host_bos *bos;
+	struct usb_host_config *config;
+	struct usb_host_config *actconfig;
+	struct usb_host_endpoint *ep_in[16];
+	struct usb_host_endpoint *ep_out[16];
+	char **rawdescriptors;
+	unsigned short bus_mA;
+	u8 portnum;
+	u8 level;
+	u8 devaddr;
+	unsigned int can_submit: 1;
+	unsigned int persist_enabled: 1;
+	unsigned int reset_in_progress: 1;
+	unsigned int have_langid: 1;
+	unsigned int authorized: 1;
+	unsigned int authenticated: 1;
+	unsigned int lpm_capable: 1;
+	unsigned int lpm_devinit_allow: 1;
+	unsigned int usb2_hw_lpm_capable: 1;
+	unsigned int usb2_hw_lpm_besl_capable: 1;
+	unsigned int usb2_hw_lpm_enabled: 1;
+	unsigned int usb2_hw_lpm_allowed: 1;
+	unsigned int usb3_lpm_u1_enabled: 1;
+	unsigned int usb3_lpm_u2_enabled: 1;
+	int string_langid;
+	char *product;
+	char *manufacturer;
+	char *serial;
+	struct list_head filelist;
+	int maxchild;
+	u32 quirks;
+	atomic_t urbnum;
+	unsigned long active_duration;
+	unsigned long connect_time;
+	unsigned int do_remote_wakeup: 1;
+	unsigned int reset_resume: 1;
+	unsigned int port_is_suspended: 1;
+	int slot_id;
+	struct usb2_lpm_parameters l1_params;
+	struct usb3_lpm_parameters u1_params;
+	struct usb3_lpm_parameters u2_params;
+	unsigned int lpm_disable_count;
+	u16 hub_delay;
+	unsigned int use_generic_driver: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_tt {
+	struct usb_device *hub;
+	int multi;
+	unsigned int think_time;
+	void *hcpriv;
+	spinlock_t lock;
+	struct list_head clear_list;
+	struct work_struct clear_work;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_devmap {
+	unsigned long devicemap[2];
+};
+
+struct mon_bus;
+
+struct usb_bus {
+	struct device *controller;
+	struct device *sysdev;
+	int busnum;
+	const char *bus_name;
+	u8 uses_pio_for_control;
+	u8 otg_port;
+	unsigned int is_b_host: 1;
+	unsigned int b_hnp_enable: 1;
+	unsigned int no_stop_on_short: 1;
+	unsigned int no_sg_constraint: 1;
+	unsigned int sg_tablesize;
+	int devnum_next;
+	struct mutex devnum_next_mutex;
+	struct usb_devmap devmap;
+	struct usb_device *root_hub;
+	struct usb_bus *hs_companion;
+	int bandwidth_allocated;
+	int bandwidth_int_reqs;
+	int bandwidth_isoc_reqs;
+	unsigned int resuming_ports;
+	struct mon_bus *mon_bus;
+	int monitored;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_bos_descriptor;
+
+struct usb_ext_cap_descriptor;
+
+struct usb_ss_cap_descriptor;
+
+struct usb_ssp_cap_descriptor;
+
+struct usb_ss_container_id_descriptor;
+
+struct usb_ptm_cap_descriptor;
+
+struct usb_host_bos {
+	struct usb_bos_descriptor *desc;
+	struct usb_ext_cap_descriptor *ext_cap;
+	struct usb_ss_cap_descriptor *ss_cap;
+	struct usb_ssp_cap_descriptor *ssp_cap;
+	struct usb_ss_container_id_descriptor *ss_id;
+	struct usb_ptm_cap_descriptor *ptm_cap;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_bos_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumDeviceCaps;
+} __attribute__((packed));
+
+struct usb_ext_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__le32 bmAttributes;
+} __attribute__((packed));
+
+struct usb_ss_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bmAttributes;
+	__le16 wSpeedSupported;
+	__u8 bFunctionalitySupport;
+	__u8 bU1devExitLat;
+	__le16 bU2DevExitLat;
+};
+
+struct usb_ssp_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__le32 bmAttributes;
+	__le16 wFunctionalitySupport;
+	__le16 wReserved;
+	union {
+		__le32 legacy_padding;
+		struct {
+			struct {} __empty_bmSublinkSpeedAttr;
+			__le32 bmSublinkSpeedAttr[0];
+		};
+	};
+};
+
+struct usb_ss_container_id_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__u8 ContainerID[16];
+};
+
+struct usb_ptm_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+struct usb_config_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 wTotalLength;
+	__u8 bNumInterfaces;
+	__u8 bConfigurationValue;
+	__u8 iConfiguration;
+	__u8 bmAttributes;
+	__u8 bMaxPower;
+} __attribute__((packed));
+
+struct usb_interface_cache;
+
+struct usb_host_config {
+	struct usb_config_descriptor desc;
+	char *string;
+	struct usb_interface_assoc_descriptor *intf_assoc[16];
+	struct usb_interface *interface[32];
+	struct usb_interface_cache *intf_cache[32];
+	unsigned char *extra;
+	int extralen;
+};
+
+struct usb_interface_cache {
+	unsigned int num_altsetting;
+	struct kref ref;
+	struct usb_host_interface altsetting[0];
+};
+
+struct giveback_urb_bh {
+	bool running;
+	bool high_prio;
+	spinlock_t lock;
+	struct list_head head;
+	struct tasklet_struct bh;
+	struct usb_host_endpoint *completing_ep;
+};
+
+struct urb;
+
+struct hc_driver;
+
+struct usb_phy;
+
+struct usb_phy_roothub;
+
+struct usb_hcd {
+	struct usb_bus self;
+	struct kref kref;
+	const char *product_desc;
+	int speed;
+	char irq_descr[24];
+	struct timer_list rh_timer;
+	struct urb *status_urb;
+	struct work_struct wakeup_work;
+	struct work_struct died_work;
+	const struct hc_driver *driver;
+	struct usb_phy *usb_phy;
+	struct usb_phy_roothub *phy_roothub;
+	unsigned long flags;
+	enum usb_dev_authorize_policy dev_policy;
+	unsigned int rh_registered: 1;
+	unsigned int rh_pollable: 1;
+	unsigned int msix_enabled: 1;
+	unsigned int msi_enabled: 1;
+	unsigned int skip_phy_initialization: 1;
+	unsigned int uses_new_polling: 1;
+	unsigned int has_tt: 1;
+	unsigned int amd_resume_bug: 1;
+	unsigned int can_do_streams: 1;
+	unsigned int tpl_support: 1;
+	unsigned int cant_recv_wakeups: 1;
+	unsigned int irq;
+	void *regs;
+	resource_size_t rsrc_start;
+	resource_size_t rsrc_len;
+	unsigned int power_budget;
+	struct giveback_urb_bh high_prio_bh;
+	struct giveback_urb_bh low_prio_bh;
+	struct mutex *address0_mutex;
+	struct mutex *bandwidth_mutex;
+	struct usb_hcd *shared_hcd;
+	struct usb_hcd *primary_hcd;
+	struct dma_pool *pool[4];
+	int state;
+	struct gen_pool *localmem_pool;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	unsigned long hcd_priv[0];
+};
+
+typedef void (*usb_complete_t)(struct urb *);
+
+struct usb_iso_packet_descriptor {
+	unsigned int offset;
+	unsigned int length;
+	unsigned int actual_length;
+	int status;
+};
+
+struct usb_anchor;
+
+struct urb {
+	struct kref kref;
+	int unlinked;
+	void *hcpriv;
+	atomic_t use_count;
+	atomic_t reject;
+	struct list_head urb_list;
+	struct list_head anchor_list;
+	struct usb_anchor *anchor;
+	struct usb_device *dev;
+	struct usb_host_endpoint *ep;
+	unsigned int pipe;
+	unsigned int stream_id;
+	int status;
+	unsigned int transfer_flags;
+	void *transfer_buffer;
+	dma_addr_t transfer_dma;
+	struct scatterlist *sg;
+	int num_mapped_sgs;
+	int num_sgs;
+	u32 transfer_buffer_length;
+	u32 actual_length;
+	unsigned char *setup_packet;
+	dma_addr_t setup_dma;
+	int start_frame;
+	int number_of_packets;
+	int interval;
+	int error_count;
+	void *context;
+	usb_complete_t complete;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	struct usb_iso_packet_descriptor iso_frame_desc[0];
+};
+
+struct usb_anchor {
+	struct list_head urb_list;
+	wait_queue_head_t wait;
+	spinlock_t lock;
+	atomic_t suspend_wakeups;
+	unsigned int poisoned: 1;
+};
+
+struct hc_driver {
+	const char *description;
+	const char *product_desc;
+	size_t hcd_priv_size;
+	irqreturn_t (*irq)(struct usb_hcd *);
+	int flags;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*pci_suspend)(struct usb_hcd *, bool);
+	int (*pci_resume)(struct usb_hcd *, pm_message_t);
+	int (*pci_poweroff_late)(struct usb_hcd *, bool);
+	void (*stop)(struct usb_hcd *);
+	void (*shutdown)(struct usb_hcd *);
+	int (*get_frame_number)(struct usb_hcd *);
+	int (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);
+	int (*urb_dequeue)(struct usb_hcd *, struct urb *, int);
+	int (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);
+	void (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);
+	void (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
+	void (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*hub_status_data)(struct usb_hcd *, char *);
+	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
+	int (*bus_suspend)(struct usb_hcd *);
+	int (*bus_resume)(struct usb_hcd *);
+	int (*start_port_reset)(struct usb_hcd *, unsigned int);
+	unsigned long (*get_resuming_ports)(struct usb_hcd *);
+	void (*relinquish_port)(struct usb_hcd *, int);
+	int (*port_handed_over)(struct usb_hcd *, int);
+	void (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);
+	int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
+	void (*free_dev)(struct usb_hcd *, struct usb_device *);
+	int (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);
+	int (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*address_device)(struct usb_hcd *, struct usb_device *, unsigned int);
+	int (*enable_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+	int (*reset_device)(struct usb_hcd *, struct usb_device *);
+	int (*update_device)(struct usb_hcd *, struct usb_device *);
+	int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
+	int (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);
+	int (*find_raw_port_number)(struct usb_hcd *, int);
+	int (*port_power)(struct usb_hcd *, int, bool);
+	int (*submit_single_step_set_feature)(struct usb_hcd *, struct urb *, int);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_charger_current {
+	unsigned int sdp_min;
+	unsigned int sdp_max;
+	unsigned int dcp_min;
+	unsigned int dcp_max;
+	unsigned int cdp_min;
+	unsigned int cdp_max;
+	unsigned int aca_min;
+	unsigned int aca_max;
+};
+
+struct usb_otg;
+
+struct usb_phy_io_ops;
+
+struct extcon_dev;
+
+struct usb_phy {
+	struct device *dev;
+	const char *label;
+	unsigned int flags;
+	enum usb_phy_type type;
+	enum usb_phy_events last_event;
+	struct usb_otg *otg;
+	struct device *io_dev;
+	struct usb_phy_io_ops *io_ops;
+	void *io_priv;
+	struct extcon_dev *edev;
+	struct extcon_dev *id_edev;
+	struct notifier_block vbus_nb;
+	struct notifier_block id_nb;
+	struct notifier_block type_nb;
+	enum usb_charger_type chg_type;
+	enum usb_charger_state chg_state;
+	struct usb_charger_current chg_cur;
+	struct work_struct chg_work;
+	struct atomic_notifier_head notifier;
+	u16 port_status;
+	u16 port_change;
+	struct list_head head;
+	int (*init)(struct usb_phy *);
+	void (*shutdown)(struct usb_phy *);
+	int (*set_vbus)(struct usb_phy *, int);
+	int (*set_power)(struct usb_phy *, unsigned int);
+	int (*set_suspend)(struct usb_phy *, int);
+	int (*set_wakeup)(struct usb_phy *, bool);
+	int (*notify_connect)(struct usb_phy *, enum usb_device_speed);
+	int (*notify_disconnect)(struct usb_phy *, enum usb_device_speed);
+	enum usb_charger_type (*charger_detect)(struct usb_phy *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_gadget;
+
+struct usb_otg {
+	u8 default_a;
+	struct phy *phy;
+	struct usb_phy *usb_phy;
+	struct usb_bus *host;
+	struct usb_gadget *gadget;
+	enum usb_otg_state state;
+	int (*set_host)(struct usb_otg *, struct usb_bus *);
+	int (*set_peripheral)(struct usb_otg *, struct usb_gadget *);
+	int (*set_vbus)(struct usb_otg *, bool);
+	int (*start_srp)(struct usb_otg *);
+	int (*start_hnp)(struct usb_otg *);
+	u64 android_kabi_reserved1;
+};
+
+struct usb_phy_io_ops {
+	int (*read)(struct usb_phy *, u32);
+	int (*write)(struct usb_phy *, u32, u32);
+};
+
+struct usb_hub_status {
+	__le16 wHubStatus;
+	__le16 wHubChange;
+};
+
+struct usb_port_status {
+	__le16 wPortStatus;
+	__le16 wPortChange;
+	__le32 dwExtPortStatus;
+};
+
+struct usb_hub_descriptor;
+
+struct usb_port;
+
+struct usb_hub {
+	struct device *intfdev;
+	struct usb_device *hdev;
+	struct kref kref;
+	struct urb *urb;
+	u8 (*buffer)[8];
+	union {
+		struct usb_hub_status hub;
+		struct usb_port_status port;
+	} *status;
+	struct mutex status_mutex;
+	int error;
+	int nerrors;
+	unsigned long event_bits[1];
+	unsigned long change_bits[1];
+	unsigned long removed_bits[1];
+	unsigned long wakeup_bits[1];
+	unsigned long power_bits[1];
+	unsigned long child_usage_bits[1];
+	unsigned long warm_reset_bits[1];
+	struct usb_hub_descriptor *descriptor;
+	struct usb_tt tt;
+	unsigned int mA_per_port;
+	unsigned int wakeup_enabled_descendants;
+	unsigned int limited_power: 1;
+	unsigned int quiescing: 1;
+	unsigned int disconnected: 1;
+	unsigned int in_reset: 1;
+	unsigned int quirk_disable_autosuspend: 1;
+	unsigned int quirk_check_port_auto_suspend: 1;
+	unsigned int has_indicators: 1;
+	u8 indicator[31];
+	struct delayed_work leds;
+	struct delayed_work init_work;
+	struct work_struct events;
+	spinlock_t irq_urb_lock;
+	struct timer_list irq_urb_retry;
+	struct usb_port **ports;
+	struct list_head onboard_hub_devs;
+};
+
+struct usb_hub_descriptor {
+	__u8 bDescLength;
+	__u8 bDescriptorType;
+	__u8 bNbrPorts;
+	__le16 wHubCharacteristics;
+	__u8 bPwrOn2PwrGood;
+	__u8 bHubContrCurrent;
+	union {
+		struct {
+			__u8 DeviceRemovable[4];
+			__u8 PortPwrCtrlMask[4];
+		} hs;
+		struct {
+			__u8 bHubHdrDecLat;
+			__le16 wHubDelay;
+			__le16 DeviceRemovable;
+		} __attribute__((packed)) ss;
+	} u;
+} __attribute__((packed));
+
+typedef u32 usb_port_location_t;
+
+struct usb_dev_state;
+
+struct usb_port {
+	struct usb_device *child;
+	struct device dev;
+	struct usb_dev_state *port_owner;
+	struct usb_port *peer;
+	struct dev_pm_qos_request *req;
+	enum usb_port_connect_type connect_type;
+	enum usb_device_state state;
+	struct kernfs_node *state_kn;
+	usb_port_location_t location;
+	struct mutex status_lock;
+	u32 over_current_count;
+	u8 portnum;
+	u32 quirks;
+	unsigned int early_stop: 1;
+	unsigned int ignore_event: 1;
+	unsigned int is_superspeed: 1;
+	unsigned int usb3_lpm_u1_permit: 1;
+	unsigned int usb3_lpm_u2_permit: 1;
+};
+
+struct usbdrv_wrap {
+	struct device_driver driver;
+	int for_devices;
+};
+
+struct usb_device_id;
+
+struct usb_device_driver {
+	const char *name;
+	bool (*match)(struct usb_device *);
+	int (*probe)(struct usb_device *);
+	void (*disconnect)(struct usb_device *);
+	int (*suspend)(struct usb_device *, pm_message_t);
+	int (*resume)(struct usb_device *, pm_message_t);
+	const struct attribute_group **dev_groups;
+	struct usbdrv_wrap drvwrap;
+	const struct usb_device_id *id_table;
+	unsigned int supports_autosuspend: 1;
+	unsigned int generic_subclass: 1;
+};
+
+struct usb_device_id {
+	__u16 match_flags;
+	__u16 idVendor;
+	__u16 idProduct;
+	__u16 bcdDevice_lo;
+	__u16 bcdDevice_hi;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bInterfaceClass;
+	__u8 bInterfaceSubClass;
+	__u8 bInterfaceProtocol;
+	__u8 bInterfaceNumber;
+	kernel_ulong_t driver_info;
+};
+
+struct usb_dynids {
+	spinlock_t lock;
+	struct list_head list;
+};
+
+struct usb_driver {
+	const char *name;
+	int (*probe)(struct usb_interface *, const struct usb_device_id *);
+	void (*disconnect)(struct usb_interface *);
+	int (*unlocked_ioctl)(struct usb_interface *, unsigned int, void *);
+	int (*suspend)(struct usb_interface *, pm_message_t);
+	int (*resume)(struct usb_interface *);
+	int (*reset_resume)(struct usb_interface *);
+	int (*pre_reset)(struct usb_interface *);
+	int (*post_reset)(struct usb_interface *);
+	const struct usb_device_id *id_table;
+	const struct attribute_group **dev_groups;
+	struct usb_dynids dynids;
+	struct usbdrv_wrap drvwrap;
+	unsigned int no_dynamic_id: 1;
+	unsigned int supports_autosuspend: 1;
+	unsigned int disable_hub_initiated_lpm: 1;
+	unsigned int soft_unbind: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct find_interface_arg {
+	int minor;
+	struct device_driver *drv;
+};
+
+enum hub_led_mode {
+	INDICATOR_AUTO = 0,
+	INDICATOR_CYCLE = 1,
+	INDICATOR_GREEN_BLINK = 2,
+	INDICATOR_GREEN_BLINK_OFF = 3,
+	INDICATOR_AMBER_BLINK = 4,
+	INDICATOR_AMBER_BLINK_OFF = 5,
+	INDICATOR_ALT_BLINK = 6,
+	INDICATOR_ALT_BLINK_OFF = 7,
+} __attribute__((mode(byte)));
+
+enum hub_quiescing_type {
+	HUB_DISCONNECT = 0,
+	HUB_PRE_RESET = 1,
+	HUB_SUSPEND = 2,
+};
+
+enum hub_activation_type {
+	HUB_INIT = 0,
+	HUB_INIT2 = 1,
+	HUB_INIT3 = 2,
+	HUB_POST_RESET = 3,
+	HUB_RESUME = 4,
+	HUB_RESET_RESUME = 5,
+};
+
+struct usb_tt_clear {
+	struct list_head clear_list;
+	unsigned int tt;
+	u16 devinfo;
+	struct usb_hcd *hcd;
+	struct usb_host_endpoint *ep;
+};
+
+struct usb_qualifier_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdUSB;
+	__u8 bDeviceClass;
+	__u8 bDeviceSubClass;
+	__u8 bDeviceProtocol;
+	__u8 bMaxPacketSize0;
+	__u8 bNumConfigurations;
+	__u8 bRESERVED;
+};
+
+struct usbdevfs_hub_portinfo {
+	char nports;
+	char port[127];
+};
+
+struct usb_set_sel_req {
+	__u8 u1_sel;
+	__u8 u1_pel;
+	__le16 u2_sel;
+	__le16 u2_pel;
+};
+
+struct usb_mon_operations {
+	void (*urb_submit)(struct usb_bus *, struct urb *);
+	void (*urb_submit_error)(struct usb_bus *, struct urb *, int);
+	void (*urb_complete)(struct usb_bus *, struct urb *, int);
+};
+
+enum usb_led_event {
+	USB_LED_EVENT_HOST = 0,
+	USB_LED_EVENT_GADGET = 1,
+};
+
+struct usb_ctrlrequest {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__le16 wValue;
+	__le16 wIndex;
+	__le16 wLength;
+};
+
+struct usb_cdc_union_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bMasterInterface0;
+	__u8 bSlaveInterface0;
+};
+
+struct usb_cdc_country_functional_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iCountryCodeRelDate;
+	__le16 wCountyCode0;
+};
+
+struct usb_cdc_header_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdCDC;
+} __attribute__((packed));
+
+struct usb_cdc_acm_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+};
+
+struct usb_cdc_ether_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 iMACAddress;
+	__le32 bmEthernetStatistics;
+	__le16 wMaxSegmentSize;
+	__le16 wNumberMCFilters;
+	__u8 bNumberPowerFilters;
+} __attribute__((packed));
+
+struct usb_cdc_call_mgmt_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bmCapabilities;
+	__u8 bDataInterface;
+};
+
+struct usb_cdc_dmm_desc {
+	__u8 bFunctionLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u16 bcdVersion;
+	__le16 wMaxCommand;
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+	__u8 bGUID[16];
+} __attribute__((packed));
+
+struct usb_cdc_mdlm_detail_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bGuidDescriptorType;
+	__u8 bDetailData[0];
+};
+
+struct usb_cdc_ncm_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdNcmVersion;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMVersion;
+	__le16 wMaxControlMessage;
+	__u8 bNumberFilters;
+	__u8 bMaxFilterSize;
+	__le16 wMaxSegmentSize;
+	__u8 bmNetworkCapabilities;
+} __attribute__((packed));
+
+struct usb_cdc_mbim_extended_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdMBIMExtendedVersion;
+	__u8 bMaxOutstandingCommandMessages;
+	__le16 wMTU;
+} __attribute__((packed));
+
+struct set_config_request {
+	struct usb_device *udev;
+	int config;
+	struct work_struct work;
+	struct list_head node;
+};
+
+struct usb_sg_request {
+	int status;
+	size_t bytes;
+	spinlock_t lock;
+	struct usb_device *dev;
+	int pipe;
+	int entries;
+	struct urb **urbs;
+	int count;
+	struct completion complete;
+};
+
+struct api_context {
+	struct completion done;
+	int status;
+};
+
+struct usb_cdc_network_terminal_desc;
+
+struct usb_cdc_obex_desc;
+
+struct usb_cdc_parsed_header {
+	struct usb_cdc_union_desc *usb_cdc_union_desc;
+	struct usb_cdc_header_desc *usb_cdc_header_desc;
+	struct usb_cdc_call_mgmt_descriptor *usb_cdc_call_mgmt_descriptor;
+	struct usb_cdc_acm_descriptor *usb_cdc_acm_descriptor;
+	struct usb_cdc_country_functional_desc *usb_cdc_country_functional_desc;
+	struct usb_cdc_network_terminal_desc *usb_cdc_network_terminal_desc;
+	struct usb_cdc_ether_desc *usb_cdc_ether_desc;
+	struct usb_cdc_dmm_desc *usb_cdc_dmm_desc;
+	struct usb_cdc_mdlm_desc *usb_cdc_mdlm_desc;
+	struct usb_cdc_mdlm_detail_desc *usb_cdc_mdlm_detail_desc;
+	struct usb_cdc_obex_desc *usb_cdc_obex_desc;
+	struct usb_cdc_ncm_desc *usb_cdc_ncm_desc;
+	struct usb_cdc_mbim_desc *usb_cdc_mbim_desc;
+	struct usb_cdc_mbim_extended_desc *usb_cdc_mbim_extended_desc;
+	bool phonet_magic_present;
+};
+
+struct usb_cdc_network_terminal_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bEntityId;
+	__u8 iName;
+	__u8 bChannelIndex;
+	__u8 bPhysicalInterface;
+};
+
+struct usb_cdc_obex_desc {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdVersion;
+} __attribute__((packed));
+
+struct usb_dynid {
+	struct list_head node;
+	struct usb_device_id id;
+};
+
+struct usb_dev_cap_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+};
+
+struct usb_class_driver {
+	char *name;
+	char * (*devnode)(const struct device *, umode_t *);
+	const struct file_operations *fops;
+	int minor_base;
+};
+
+struct ep_device {
+	struct usb_endpoint_descriptor *desc;
+	struct usb_device *udev;
+	struct device dev;
+};
+
+enum snoop_when {
+	SUBMIT = 0,
+	COMPLETE___2 = 1,
+};
+
+struct usb_dev_state {
+	struct list_head list;
+	struct usb_device *dev;
+	struct file *file;
+	spinlock_t lock;
+	struct list_head async_pending;
+	struct list_head async_completed;
+	struct list_head memory_list;
+	wait_queue_head_t wait;
+	wait_queue_head_t wait_for_resume;
+	unsigned int discsignr;
+	struct pid *disc_pid;
+	const struct cred *cred;
+	sigval_t disccontext;
+	unsigned long ifclaimed;
+	u32 disabled_bulk_eps;
+	unsigned long interface_allowed_mask;
+	int not_yet_resumed;
+	bool suspend_allowed;
+	bool privileges_dropped;
+};
+
+struct usb_memory;
+
+struct async {
+	struct list_head asynclist;
+	struct usb_dev_state *ps;
+	struct pid *pid;
+	const struct cred *cred;
+	unsigned int signr;
+	unsigned int ifnum;
+	void __attribute__((btf_type_tag("user"))) *userbuffer;
+	void __attribute__((btf_type_tag("user"))) *userurb;
+	sigval_t userurb_sigval;
+	struct urb *urb;
+	struct usb_memory *usbm;
+	unsigned int mem_usage;
+	int status;
+	u8 bulk_addr;
+	u8 bulk_status;
+};
+
+struct usb_memory {
+	struct list_head memlist;
+	int vma_use_count;
+	int urb_use_count;
+	u32 size;
+	void *mem;
+	dma_addr_t dma_handle;
+	unsigned long vm_start;
+	struct usb_dev_state *ps;
+};
+
+struct usbdevfs_iso_packet_desc {
+	unsigned int length;
+	unsigned int actual_length;
+	unsigned int status;
+};
+
+struct usbdevfs_urb {
+	unsigned char type;
+	unsigned char endpoint;
+	int status;
+	unsigned int flags;
+	void __attribute__((btf_type_tag("user"))) *buffer;
+	int buffer_length;
+	int actual_length;
+	int start_frame;
+	union {
+		int number_of_packets;
+		unsigned int stream_id;
+	};
+	int error_count;
+	unsigned int signr;
+	void __attribute__((btf_type_tag("user"))) *usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_urb32 {
+	unsigned char type;
+	unsigned char endpoint;
+	compat_int_t status;
+	compat_uint_t flags;
+	compat_caddr_t buffer;
+	compat_int_t buffer_length;
+	compat_int_t actual_length;
+	compat_int_t start_frame;
+	compat_int_t number_of_packets;
+	compat_int_t error_count;
+	compat_uint_t signr;
+	compat_caddr_t usercontext;
+	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+struct usbdevfs_ioctl32 {
+	s32 ifno;
+	s32 ioctl_code;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_ioctl {
+	int ifno;
+	int ioctl_code;
+	void __attribute__((btf_type_tag("user"))) *data;
+};
+
+struct usbdevfs_setinterface {
+	unsigned int interface;
+	unsigned int altsetting;
+};
+
+struct usbdevfs_ctrltransfer {
+	__u8 bRequestType;
+	__u8 bRequest;
+	__u16 wValue;
+	__u16 wIndex;
+	__u16 wLength;
+	__u32 timeout;
+	void __attribute__((btf_type_tag("user"))) *data;
+};
+
+struct usbdevfs_disconnectsignal {
+	unsigned int signr;
+	void __attribute__((btf_type_tag("user"))) *context;
+};
+
+struct usbdevfs_bulktransfer32 {
+	compat_uint_t ep;
+	compat_uint_t len;
+	compat_uint_t timeout;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_bulktransfer {
+	unsigned int ep;
+	unsigned int len;
+	unsigned int timeout;
+	void __attribute__((btf_type_tag("user"))) *data;
+};
+
+struct usbdevfs_getdriver {
+	unsigned int interface;
+	char driver[256];
+};
+
+struct usbdevfs_disconnect_claim {
+	unsigned int interface;
+	unsigned int flags;
+	char driver[256];
+};
+
+struct usbdevfs_ctrltransfer32 {
+	u8 bRequestType;
+	u8 bRequest;
+	u16 wValue;
+	u16 wIndex;
+	u16 wLength;
+	u32 timeout;
+	compat_caddr_t data;
+};
+
+struct usbdevfs_disconnectsignal32 {
+	compat_int_t signr;
+	compat_caddr_t context;
+};
+
+struct usbdevfs_connectinfo {
+	unsigned int devnum;
+	unsigned char slow;
+};
+
+struct usbdevfs_conninfo_ex {
+	__u32 size;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 speed;
+	__u8 num_ports;
+	__u8 ports[7];
+};
+
+struct usbdevfs_streams {
+	unsigned int num_streams;
+	unsigned int num_eps;
+	unsigned char eps[0];
+};
+
+struct quirk_entry {
+	u16 vid;
+	u16 pid;
+	u32 flags;
+};
+
+struct class_info {
+	int class;
+	char *class_name;
+};
+
+struct usb_phy_roothub {
+	struct phy *phy;
+	struct list_head list;
+};
+
+typedef void (*companion_fn)(struct pci_dev *, struct usb_hcd *, struct pci_dev *, struct usb_hcd *);
+
+struct phy_devm {
+	struct usb_phy *phy;
+	struct notifier_block *nb;
+};
+
+enum usb_phy_interface {
+	USBPHY_INTERFACE_MODE_UNKNOWN = 0,
+	USBPHY_INTERFACE_MODE_UTMI = 1,
+	USBPHY_INTERFACE_MODE_UTMIW = 2,
+	USBPHY_INTERFACE_MODE_ULPI = 3,
+	USBPHY_INTERFACE_MODE_SERIAL = 4,
+	USBPHY_INTERFACE_MODE_HSIC = 5,
+};
+
+struct usb_ep;
+
+struct usb_request {
+	void *buf;
+	unsigned int length;
+	dma_addr_t dma;
+	struct scatterlist *sg;
+	unsigned int num_sgs;
+	unsigned int num_mapped_sgs;
+	unsigned int stream_id: 16;
+	unsigned int is_last: 1;
+	unsigned int no_interrupt: 1;
+	unsigned int zero: 1;
+	unsigned int short_not_ok: 1;
+	unsigned int dma_mapped: 1;
+	void (*complete)(struct usb_ep *, struct usb_request *);
+	void *context;
+	struct list_head list;
+	unsigned int frame_number;
+	int status;
+	unsigned int actual;
+	u64 android_kabi_reserved1;
+};
+
+struct dwc3_ep;
+
+struct dwc3_trb;
+
+struct dwc3_request {
+	struct usb_request request;
+	struct list_head list;
+	struct dwc3_ep *dep;
+	struct scatterlist *sg;
+	struct scatterlist *start_sg;
+	unsigned int num_pending_sgs;
+	unsigned int num_queued_sgs;
+	unsigned int remaining;
+	unsigned int status;
+	u8 epnum;
+	struct dwc3_trb *trb;
+	dma_addr_t trb_dma;
+	unsigned int num_trbs;
+	unsigned int needs_extra_trb: 1;
+	unsigned int direction: 1;
+	unsigned int mapped: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct ulpi;
+
+enum dwc3_ep0_next {
+	DWC3_EP0_UNKNOWN = 0,
+	DWC3_EP0_COMPLETE = 1,
+	DWC3_EP0_NRDY_DATA = 2,
+	DWC3_EP0_NRDY_STATUS = 3,
+};
+
+enum dwc3_ep0_state {
+	EP0_UNCONNECTED = 0,
+	EP0_SETUP_PHASE = 1,
+	EP0_DATA_PHASE = 2,
+	EP0_STATUS_PHASE = 3,
+};
+
+enum dwc3_link_state {
+	DWC3_LINK_STATE_U0 = 0,
+	DWC3_LINK_STATE_U1 = 1,
+	DWC3_LINK_STATE_U2 = 2,
+	DWC3_LINK_STATE_U3 = 3,
+	DWC3_LINK_STATE_SS_DIS = 4,
+	DWC3_LINK_STATE_RX_DET = 5,
+	DWC3_LINK_STATE_SS_INACT = 6,
+	DWC3_LINK_STATE_POLL = 7,
+	DWC3_LINK_STATE_RECOV = 8,
+	DWC3_LINK_STATE_HRESET = 9,
+	DWC3_LINK_STATE_CMPLY = 10,
+	DWC3_LINK_STATE_LPBK = 11,
+	DWC3_LINK_STATE_RESET = 14,
+	DWC3_LINK_STATE_RESUME = 15,
+	DWC3_LINK_STATE_MASK = 15,
+};
+
+struct dwc3_hwparams {
+	u32 hwparams0;
+	u32 hwparams1;
+	u32 hwparams2;
+	u32 hwparams3;
+	u32 hwparams4;
+	u32 hwparams5;
+	u32 hwparams6;
+	u32 hwparams7;
+	u32 hwparams8;
+	u32 hwparams9;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct dwc3_event_buffer;
+
+struct usb_gadget_driver;
+
+struct usb_role_switch;
+
+struct power_supply;
+
+struct dwc3 {
+	struct work_struct drd_work;
+	struct dwc3_trb *ep0_trb;
+	void *bounce;
+	u8 *setup_buf;
+	dma_addr_t ep0_trb_addr;
+	dma_addr_t bounce_addr;
+	struct dwc3_request ep0_usb_req;
+	struct completion ep0_in_setup;
+	spinlock_t lock;
+	struct mutex mutex;
+	struct device *dev;
+	struct device *sysdev;
+	struct platform_device *xhci;
+	struct resource xhci_resources[2];
+	struct dwc3_event_buffer *ev_buf;
+	struct dwc3_ep *eps[32];
+	struct usb_gadget *gadget;
+	struct usb_gadget_driver *gadget_driver;
+	struct clk *bus_clk;
+	struct clk *ref_clk;
+	struct clk *susp_clk;
+	struct reset_control *reset;
+	struct usb_phy *usb2_phy;
+	struct usb_phy *usb3_phy;
+	struct phy *usb2_generic_phy;
+	struct phy *usb3_generic_phy;
+	bool phys_ready;
+	struct ulpi *ulpi;
+	bool ulpi_ready;
+	void *regs;
+	size_t regs_size;
+	enum usb_dr_mode dr_mode;
+	u32 current_dr_role;
+	u32 desired_dr_role;
+	struct extcon_dev *edev;
+	struct notifier_block edev_nb;
+	enum usb_phy_interface hsphy_mode;
+	struct usb_role_switch *role_sw;
+	enum usb_dr_mode role_switch_default_mode;
+	struct power_supply *usb_psy;
+	u32 fladj;
+	u32 ref_clk_per;
+	u32 irq_gadget;
+	u32 otg_irq;
+	u32 current_otg_role;
+	u32 desired_otg_role;
+	bool otg_restart_host;
+	u32 u1u2;
+	u32 maximum_speed;
+	u32 gadget_max_speed;
+	enum usb_ssp_rate max_ssp_rate;
+	enum usb_ssp_rate gadget_ssp_rate;
+	u32 ip;
+	u32 revision;
+	u32 version_type;
+	enum dwc3_ep0_next ep0_next_event;
+	enum dwc3_ep0_state ep0state;
+	enum dwc3_link_state link_state;
+	u16 u2sel;
+	u16 u2pel;
+	u8 u1sel;
+	u8 u1pel;
+	u8 speed;
+	u8 num_eps;
+	struct dwc3_hwparams hwparams;
+	struct debugfs_regset32 *regset;
+	u32 dbg_lsp_select;
+	u8 test_mode;
+	u8 test_mode_nr;
+	u8 lpm_nyet_threshold;
+	u8 hird_threshold;
+	u8 rx_thr_num_pkt;
+	u8 rx_max_burst;
+	u8 tx_thr_num_pkt;
+	u8 tx_max_burst;
+	u8 rx_thr_num_pkt_prd;
+	u8 rx_max_burst_prd;
+	u8 tx_thr_num_pkt_prd;
+	u8 tx_max_burst_prd;
+	u8 tx_fifo_resize_max_num;
+	u8 clear_stall_protocol;
+	u16 num_hc_interrupters;
+	const char *hsphy_interface;
+	unsigned int connected: 1;
+	unsigned int softconnect: 1;
+	unsigned int delayed_status: 1;
+	unsigned int ep0_bounced: 1;
+	unsigned int ep0_expect_in: 1;
+	unsigned int sysdev_is_parent: 1;
+	unsigned int has_lpm_erratum: 1;
+	unsigned int is_utmi_l1_suspend: 1;
+	unsigned int is_fpga: 1;
+	unsigned int pending_events: 1;
+	unsigned int do_fifo_resize: 1;
+	unsigned int pullups_connected: 1;
+	unsigned int setup_packet_pending: 1;
+	unsigned int three_stage_setup: 1;
+	unsigned int dis_start_transfer_quirk: 1;
+	unsigned int usb3_lpm_capable: 1;
+	unsigned int usb2_lpm_disable: 1;
+	unsigned int usb2_gadget_lpm_disable: 1;
+	unsigned int disable_scramble_quirk: 1;
+	unsigned int u2exit_lfps_quirk: 1;
+	unsigned int u2ss_inp3_quirk: 1;
+	unsigned int req_p1p2p3_quirk: 1;
+	unsigned int del_p1p2p3_quirk: 1;
+	unsigned int del_phy_power_chg_quirk: 1;
+	unsigned int lfps_filter_quirk: 1;
+	unsigned int rx_detect_poll_quirk: 1;
+	unsigned int dis_u3_susphy_quirk: 1;
+	unsigned int dis_u2_susphy_quirk: 1;
+	unsigned int dis_enblslpm_quirk: 1;
+	unsigned int dis_u1_entry_quirk: 1;
+	unsigned int dis_u2_entry_quirk: 1;
+	unsigned int dis_rxdet_inp3_quirk: 1;
+	unsigned int dis_u2_freeclk_exists_quirk: 1;
+	unsigned int dis_del_phy_power_chg_quirk: 1;
+	unsigned int dis_tx_ipgap_linecheck_quirk: 1;
+	unsigned int resume_hs_terminations: 1;
+	unsigned int ulpi_ext_vbus_drv: 1;
+	unsigned int parkmode_disable_ss_quirk: 1;
+	unsigned int parkmode_disable_hs_quirk: 1;
+	unsigned int gfladj_refclk_lpm_sel: 1;
+	unsigned int tx_de_emphasis_quirk: 1;
+	unsigned int tx_de_emphasis: 2;
+	unsigned int dis_metastability_quirk: 1;
+	unsigned int dis_split_quirk: 1;
+	unsigned int async_callbacks: 1;
+	unsigned int sys_wakeup: 1;
+	unsigned int wakeup_configured: 1;
+	unsigned int suspended: 1;
+	u16 imod_interval;
+	int max_cfg_eps;
+	int last_fifo_depth;
+	int num_ep_resized;
+	struct dentry *debug_root;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct dwc3_trb {
+	u32 bpl;
+	u32 bph;
+	u32 size;
+	u32 ctrl;
+};
+
+struct usb_ep_caps {
+	unsigned int type_control: 1;
+	unsigned int type_iso: 1;
+	unsigned int type_bulk: 1;
+	unsigned int type_int: 1;
+	unsigned int dir_in: 1;
+	unsigned int dir_out: 1;
+};
+
+struct usb_ep_ops;
+
+struct usb_ep {
+	void *driver_data;
+	const char *name;
+	const struct usb_ep_ops *ops;
+	struct list_head ep_list;
+	struct usb_ep_caps caps;
+	bool claimed;
+	bool enabled;
+	unsigned int maxpacket: 16;
+	unsigned int maxpacket_limit: 16;
+	unsigned int max_streams: 16;
+	unsigned int mult: 2;
+	unsigned int maxburst: 5;
+	u8 address;
+	const struct usb_endpoint_descriptor *desc;
+	const struct usb_ss_ep_comp_descriptor *comp_desc;
+	u64 android_kabi_reserved1;
+};
+
+struct usb_ep_ops {
+	int (*enable)(struct usb_ep *, const struct usb_endpoint_descriptor *);
+	int (*disable)(struct usb_ep *);
+	void (*dispose)(struct usb_ep *);
+	struct usb_request * (*alloc_request)(struct usb_ep *, gfp_t);
+	void (*free_request)(struct usb_ep *, struct usb_request *);
+	int (*queue)(struct usb_ep *, struct usb_request *, gfp_t);
+	int (*dequeue)(struct usb_ep *, struct usb_request *);
+	int (*set_halt)(struct usb_ep *, int);
+	int (*set_wedge)(struct usb_ep *);
+	int (*fifo_status)(struct usb_ep *);
+	void (*fifo_flush)(struct usb_ep *);
+	u64 android_kabi_reserved1;
+};
+
+struct dwc3_ep {
+	struct usb_ep endpoint;
+	struct list_head cancelled_list;
+	struct list_head pending_list;
+	struct list_head started_list;
+	void *regs;
+	struct dwc3_trb *trb_pool;
+	dma_addr_t trb_pool_dma;
+	struct dwc3 *dwc;
+	u32 saved_state;
+	unsigned int flags;
+	u8 trb_enqueue;
+	u8 trb_dequeue;
+	u8 number;
+	u8 type;
+	u8 resource_index;
+	u32 frame_number;
+	u32 interval;
+	char name[20];
+	unsigned int direction: 1;
+	unsigned int stream_capable: 1;
+	u8 combo_num;
+	int start_cmd_status;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct dwc3_event_buffer {
+	void *buf;
+	void *cache;
+	unsigned int length;
+	unsigned int lpos;
+	unsigned int count;
+	unsigned int flags;
+	dma_addr_t dma;
+	struct dwc3 *dwc;
+	u64 android_kabi_reserved1;
+};
+
+struct usb_udc;
+
+struct usb_gadget_ops;
+
+struct usb_gadget {
+	struct work_struct work;
+	struct usb_udc *udc;
+	const struct usb_gadget_ops *ops;
+	struct usb_ep *ep0;
+	struct list_head ep_list;
+	enum usb_device_speed speed;
+	enum usb_device_speed max_speed;
+	enum usb_ssp_rate ssp_rate;
+	enum usb_ssp_rate max_ssp_rate;
+	enum usb_device_state state;
+	const char *name;
+	struct device dev;
+	unsigned int isoch_delay;
+	unsigned int out_epnum;
+	unsigned int in_epnum;
+	unsigned int mA;
+	struct usb_otg_caps *otg_caps;
+	unsigned int sg_supported: 1;
+	unsigned int is_otg: 1;
+	unsigned int is_a_peripheral: 1;
+	unsigned int b_hnp_enable: 1;
+	unsigned int a_hnp_support: 1;
+	unsigned int a_alt_hnp_support: 1;
+	unsigned int hnp_polling_support: 1;
+	unsigned int host_request_flag: 1;
+	unsigned int quirk_ep_out_aligned_size: 1;
+	unsigned int quirk_altset_not_supp: 1;
+	unsigned int quirk_stall_not_supp: 1;
+	unsigned int quirk_zlp_not_supp: 1;
+	unsigned int quirk_avoids_skb_reserve: 1;
+	unsigned int is_selfpowered: 1;
+	unsigned int deactivated: 1;
+	unsigned int connected: 1;
+	unsigned int lpm_capable: 1;
+	unsigned int wakeup_capable: 1;
+	unsigned int wakeup_armed: 1;
+	int irq;
+	int id_number;
+};
+
+struct usb_dcd_config_params;
+
+struct usb_gadget_ops {
+	int (*get_frame)(struct usb_gadget *);
+	int (*wakeup)(struct usb_gadget *);
+	int (*func_wakeup)(struct usb_gadget *, int);
+	int (*set_remote_wakeup)(struct usb_gadget *, int);
+	int (*set_selfpowered)(struct usb_gadget *, int);
+	int (*vbus_session)(struct usb_gadget *, int);
+	int (*vbus_draw)(struct usb_gadget *, unsigned int);
+	int (*pullup)(struct usb_gadget *, int);
+	int (*ioctl)(struct usb_gadget *, unsigned int, unsigned long);
+	void (*get_config_params)(struct usb_gadget *, struct usb_dcd_config_params *);
+	int (*udc_start)(struct usb_gadget *, struct usb_gadget_driver *);
+	int (*udc_stop)(struct usb_gadget *);
+	void (*udc_set_speed)(struct usb_gadget *, enum usb_device_speed);
+	void (*udc_set_ssp_rate)(struct usb_gadget *, enum usb_ssp_rate);
+	void (*udc_async_callbacks)(struct usb_gadget *, bool);
+	struct usb_ep * (*match_ep)(struct usb_gadget *, struct usb_endpoint_descriptor *, struct usb_ss_ep_comp_descriptor *);
+	int (*check_config)(struct usb_gadget *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_dcd_config_params {
+	__u8 bU1devExitLat;
+	__le16 bU2DevExitLat;
+	__u8 besl_baseline;
+	__u8 besl_deep;
+};
+
+struct usb_gadget_driver {
+	char *function;
+	enum usb_device_speed max_speed;
+	int (*bind)(struct usb_gadget *, struct usb_gadget_driver *);
+	void (*unbind)(struct usb_gadget *);
+	int (*setup)(struct usb_gadget *, const struct usb_ctrlrequest *);
+	void (*disconnect)(struct usb_gadget *);
+	void (*suspend)(struct usb_gadget *);
+	void (*resume)(struct usb_gadget *);
+	void (*reset)(struct usb_gadget *);
+	struct device_driver driver;
+	char *udc_name;
+	unsigned int match_existing_only: 1;
+	bool is_bound: 1;
+};
+
+struct power_supply_desc;
+
+struct power_supply_battery_info;
+
+struct thermal_zone_device;
+
+struct power_supply {
+	const struct power_supply_desc *desc;
+	char **supplied_to;
+	size_t num_supplicants;
+	char **supplied_from;
+	size_t num_supplies;
+	struct device_node *of_node;
+	void *drv_data;
+	struct device dev;
+	struct work_struct changed_work;
+	struct delayed_work deferred_register_work;
+	spinlock_t changed_lock;
+	bool changed;
+	bool initialized;
+	bool removing;
+	atomic_t use_cnt;
+	struct power_supply_battery_info *battery_info;
+	struct thermal_zone_device *tzd;
+	struct thermal_cooling_device *tcd;
+	struct led_trigger *charging_full_trig;
+	char *charging_full_trig_name;
+	struct led_trigger *charging_trig;
+	char *charging_trig_name;
+	struct led_trigger *full_trig;
+	char *full_trig_name;
+	struct led_trigger *online_trig;
+	char *online_trig_name;
+	struct led_trigger *charging_blink_full_solid_trig;
+	char *charging_blink_full_solid_trig_name;
+	u64 android_kabi_reserved1;
+};
+
+enum power_supply_type {
+	POWER_SUPPLY_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_TYPE_BATTERY = 1,
+	POWER_SUPPLY_TYPE_UPS = 2,
+	POWER_SUPPLY_TYPE_MAINS = 3,
+	POWER_SUPPLY_TYPE_USB = 4,
+	POWER_SUPPLY_TYPE_USB_DCP = 5,
+	POWER_SUPPLY_TYPE_USB_CDP = 6,
+	POWER_SUPPLY_TYPE_USB_ACA = 7,
+	POWER_SUPPLY_TYPE_USB_TYPE_C = 8,
+	POWER_SUPPLY_TYPE_USB_PD = 9,
+	POWER_SUPPLY_TYPE_USB_PD_DRP = 10,
+	POWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,
+	POWER_SUPPLY_TYPE_WIRELESS = 12,
+};
+
+enum power_supply_usb_type {
+	POWER_SUPPLY_USB_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_USB_TYPE_SDP = 1,
+	POWER_SUPPLY_USB_TYPE_DCP = 2,
+	POWER_SUPPLY_USB_TYPE_CDP = 3,
+	POWER_SUPPLY_USB_TYPE_ACA = 4,
+	POWER_SUPPLY_USB_TYPE_C = 5,
+	POWER_SUPPLY_USB_TYPE_PD = 6,
+	POWER_SUPPLY_USB_TYPE_PD_DRP = 7,
+	POWER_SUPPLY_USB_TYPE_PD_PPS = 8,
+	POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,
+};
+
+enum power_supply_property {
+	POWER_SUPPLY_PROP_STATUS = 0,
+	POWER_SUPPLY_PROP_CHARGE_TYPE = 1,
+	POWER_SUPPLY_PROP_HEALTH = 2,
+	POWER_SUPPLY_PROP_PRESENT = 3,
+	POWER_SUPPLY_PROP_ONLINE = 4,
+	POWER_SUPPLY_PROP_AUTHENTIC = 5,
+	POWER_SUPPLY_PROP_TECHNOLOGY = 6,
+	POWER_SUPPLY_PROP_CYCLE_COUNT = 7,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX = 8,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN = 9,
+	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,
+	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,
+	POWER_SUPPLY_PROP_VOLTAGE_NOW = 12,
+	POWER_SUPPLY_PROP_VOLTAGE_AVG = 13,
+	POWER_SUPPLY_PROP_VOLTAGE_OCV = 14,
+	POWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,
+	POWER_SUPPLY_PROP_CURRENT_MAX = 16,
+	POWER_SUPPLY_PROP_CURRENT_NOW = 17,
+	POWER_SUPPLY_PROP_CURRENT_AVG = 18,
+	POWER_SUPPLY_PROP_CURRENT_BOOT = 19,
+	POWER_SUPPLY_PROP_POWER_NOW = 20,
+	POWER_SUPPLY_PROP_POWER_AVG = 21,
+	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,
+	POWER_SUPPLY_PROP_CHARGE_FULL = 24,
+	POWER_SUPPLY_PROP_CHARGE_EMPTY = 25,
+	POWER_SUPPLY_PROP_CHARGE_NOW = 26,
+	POWER_SUPPLY_PROP_CHARGE_AVG = 27,
+	POWER_SUPPLY_PROP_CHARGE_COUNTER = 28,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,
+	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,
+	POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,
+	POWER_SUPPLY_PROP_CHARGE_BEHAVIOUR = 37,
+	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 38,
+	POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 39,
+	POWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 40,
+	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 41,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 42,
+	POWER_SUPPLY_PROP_ENERGY_FULL = 43,
+	POWER_SUPPLY_PROP_ENERGY_EMPTY = 44,
+	POWER_SUPPLY_PROP_ENERGY_NOW = 45,
+	POWER_SUPPLY_PROP_ENERGY_AVG = 46,
+	POWER_SUPPLY_PROP_CAPACITY = 47,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 48,
+	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 49,
+	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 50,
+	POWER_SUPPLY_PROP_CAPACITY_LEVEL = 51,
+	POWER_SUPPLY_PROP_TEMP = 52,
+	POWER_SUPPLY_PROP_TEMP_MAX = 53,
+	POWER_SUPPLY_PROP_TEMP_MIN = 54,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MIN = 55,
+	POWER_SUPPLY_PROP_TEMP_ALERT_MAX = 56,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT = 57,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 58,
+	POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 59,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 60,
+	POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 61,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 62,
+	POWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 63,
+	POWER_SUPPLY_PROP_TYPE = 64,
+	POWER_SUPPLY_PROP_USB_TYPE = 65,
+	POWER_SUPPLY_PROP_SCOPE = 66,
+	POWER_SUPPLY_PROP_PRECHARGE_CURRENT = 67,
+	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 68,
+	POWER_SUPPLY_PROP_CALIBRATE = 69,
+	POWER_SUPPLY_PROP_MANUFACTURE_YEAR = 70,
+	POWER_SUPPLY_PROP_MANUFACTURE_MONTH = 71,
+	POWER_SUPPLY_PROP_MANUFACTURE_DAY = 72,
+	POWER_SUPPLY_PROP_MODEL_NAME = 73,
+	POWER_SUPPLY_PROP_MANUFACTURER = 74,
+	POWER_SUPPLY_PROP_SERIAL_NUMBER = 75,
+};
+
+union power_supply_propval;
+
+struct power_supply_desc {
+	const char *name;
+	enum power_supply_type type;
+	const enum power_supply_usb_type *usb_types;
+	size_t num_usb_types;
+	const enum power_supply_property *properties;
+	size_t num_properties;
+	int (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);
+	int (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);
+	int (*property_is_writeable)(struct power_supply *, enum power_supply_property);
+	void (*external_power_changed)(struct power_supply *);
+	void (*set_charged)(struct power_supply *);
+	bool no_thermal;
+	int use_for_apm;
+	u64 android_kabi_reserved1;
+};
+
+union power_supply_propval {
+	int intval;
+	const char *strval;
+};
+
+struct power_supply_maintenance_charge_table;
+
+struct power_supply_battery_ocv_table;
+
+struct power_supply_resistance_temp_table;
+
+struct power_supply_vbat_ri_table;
+
+struct power_supply_battery_info {
+	unsigned int technology;
+	int energy_full_design_uwh;
+	int charge_full_design_uah;
+	int voltage_min_design_uv;
+	int voltage_max_design_uv;
+	int tricklecharge_current_ua;
+	int precharge_current_ua;
+	int precharge_voltage_max_uv;
+	int charge_term_current_ua;
+	int charge_restart_voltage_uv;
+	int overvoltage_limit_uv;
+	int constant_charge_current_max_ua;
+	int constant_charge_voltage_max_uv;
+	struct power_supply_maintenance_charge_table *maintenance_charge;
+	int maintenance_charge_size;
+	int alert_low_temp_charge_current_ua;
+	int alert_low_temp_charge_voltage_uv;
+	int alert_high_temp_charge_current_ua;
+	int alert_high_temp_charge_voltage_uv;
+	int factory_internal_resistance_uohm;
+	int factory_internal_resistance_charging_uohm;
+	int ocv_temp[20];
+	int temp_ambient_alert_min;
+	int temp_ambient_alert_max;
+	int temp_alert_min;
+	int temp_alert_max;
+	int temp_min;
+	int temp_max;
+	struct power_supply_battery_ocv_table *ocv_table[20];
+	int ocv_table_size[20];
+	struct power_supply_resistance_temp_table *resist_table;
+	int resist_table_size;
+	struct power_supply_vbat_ri_table *vbat2ri_discharging;
+	int vbat2ri_discharging_size;
+	struct power_supply_vbat_ri_table *vbat2ri_charging;
+	int vbat2ri_charging_size;
+	int bti_resistance_ohm;
+	int bti_resistance_tolerance;
+	u64 android_kabi_reserved1;
+};
+
+struct power_supply_maintenance_charge_table {
+	int charge_current_max_ua;
+	int charge_voltage_max_uv;
+	int charge_safety_timer_minutes;
+};
+
+struct power_supply_battery_ocv_table {
+	int ocv;
+	int capacity;
+};
+
+struct power_supply_resistance_temp_table {
+	int temp;
+	int resistance;
+};
+
+struct power_supply_vbat_ri_table {
+	int vbat_uv;
+	int ri_uohm;
+};
+
+typedef void (*btf_trace_dwc3_readl)(void *, void *, u32, u32);
+
+typedef void (*btf_trace_dwc3_writel)(void *, void *, u32, u32);
+
+typedef void (*btf_trace_dwc3_event)(void *, u32, struct dwc3 *);
+
+typedef void (*btf_trace_dwc3_ctrl_req)(void *, struct usb_ctrlrequest *);
+
+typedef void (*btf_trace_dwc3_alloc_request)(void *, struct dwc3_request *);
+
+typedef void (*btf_trace_dwc3_free_request)(void *, struct dwc3_request *);
+
+typedef void (*btf_trace_dwc3_ep_queue)(void *, struct dwc3_request *);
+
+typedef void (*btf_trace_dwc3_ep_dequeue)(void *, struct dwc3_request *);
+
+typedef void (*btf_trace_dwc3_gadget_giveback)(void *, struct dwc3_request *);
+
+typedef void (*btf_trace_dwc3_gadget_generic_cmd)(void *, unsigned int, u32, int);
+
+struct dwc3_gadget_ep_cmd_params;
+
+typedef void (*btf_trace_dwc3_gadget_ep_cmd)(void *, struct dwc3_ep *, unsigned int, struct dwc3_gadget_ep_cmd_params *, int);
+
+struct dwc3_gadget_ep_cmd_params {
+	u32 param2;
+	u32 param1;
+	u32 param0;
+};
+
+typedef void (*btf_trace_dwc3_prepare_trb)(void *, struct dwc3_ep *, struct dwc3_trb *);
+
+typedef void (*btf_trace_dwc3_complete_trb)(void *, struct dwc3_ep *, struct dwc3_trb *);
+
+typedef void (*btf_trace_dwc3_gadget_ep_enable)(void *, struct dwc3_ep *);
+
+typedef void (*btf_trace_dwc3_gadget_ep_disable)(void *, struct dwc3_ep *);
+
+struct trace_event_raw_dwc3_log_io {
+	struct trace_entry ent;
+	void *base;
+	u32 offset;
+	u32 value;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_event {
+	struct trace_entry ent;
+	u32 event;
+	u32 ep0state;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_ctrl {
+	struct trace_entry ent;
+	__u8 bRequestType;
+	__u8 bRequest;
+	__u16 wValue;
+	__u16 wIndex;
+	__u16 wLength;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_request {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	struct dwc3_request *req;
+	unsigned int actual;
+	unsigned int length;
+	int status;
+	int zero;
+	int short_not_ok;
+	int no_interrupt;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_generic_cmd {
+	struct trace_entry ent;
+	unsigned int cmd;
+	u32 param;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_gadget_ep_cmd {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int cmd;
+	u32 param0;
+	u32 param1;
+	u32 param2;
+	int cmd_status;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_trb {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	struct dwc3_trb *trb;
+	u32 bpl;
+	u32 bph;
+	u32 size;
+	u32 ctrl;
+	u32 type;
+	u32 enqueue;
+	u32 dequeue;
+	char __data[0];
+};
+
+struct trace_event_raw_dwc3_log_ep {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int maxpacket;
+	unsigned int maxpacket_limit;
+	unsigned int max_streams;
+	unsigned int maxburst;
+	unsigned int flags;
+	unsigned int direction;
+	u8 trb_enqueue;
+	u8 trb_dequeue;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_dwc3_log_request {
+	u32 name;
+};
+
+struct trace_event_data_offsets_dwc3_log_gadget_ep_cmd {
+	u32 name;
+};
+
+struct trace_event_data_offsets_dwc3_log_trb {
+	u32 name;
+};
+
+struct trace_event_data_offsets_dwc3_log_ep {
+	u32 name;
+};
+
+struct dwc3_event_type {
+	u32 is_devspec: 1;
+	u32 type: 7;
+	u32 reserved8_31: 24;
+};
+
+struct dwc3_event_depevt {
+	u32 one_bit: 1;
+	u32 endpoint_number: 5;
+	u32 endpoint_event: 4;
+	u32 reserved11_10: 2;
+	u32 status: 4;
+	u32 parameters: 16;
+};
+
+struct dwc3_event_devt {
+	u32 one_bit: 1;
+	u32 device_event: 7;
+	u32 type: 4;
+	u32 reserved15_12: 4;
+	u32 event_info: 9;
+	u32 reserved31_25: 7;
+};
+
+struct dwc3_event_gevt {
+	u32 one_bit: 1;
+	u32 device_event: 7;
+	u32 phy_port_number: 4;
+	u32 reserved31_12: 20;
+};
+
+union dwc3_event {
+	u32 raw;
+	struct dwc3_event_type type;
+	struct dwc3_event_depevt depevt;
+	struct dwc3_event_devt devt;
+	struct dwc3_event_gevt gevt;
+};
+
+struct trace_event_data_offsets_dwc3_log_io {};
+
+struct trace_event_data_offsets_dwc3_log_event {};
+
+struct trace_event_data_offsets_dwc3_log_ctrl {};
+
+struct trace_event_data_offsets_dwc3_log_generic_cmd {};
+
+struct timing {
+	u8 u1sel;
+	u8 u1pel;
+	__le16 u2sel;
+	__le16 u2pel;
+};
+
+enum usb_role {
+	USB_ROLE_NONE = 0,
+	USB_ROLE_HOST = 1,
+	USB_ROLE_DEVICE = 2,
+};
+
+typedef int (*usb_role_switch_set_t)(struct usb_role_switch *, enum usb_role);
+
+typedef enum usb_role (*usb_role_switch_get_t)(struct usb_role_switch *);
+
+struct usb_role_switch_desc {
+	struct fwnode_handle *fwnode;
+	struct device *usb2_port;
+	struct device *usb3_port;
+	struct device *udc;
+	usb_role_switch_set_t set;
+	usb_role_switch_get_t get;
+	bool allow_userspace_control;
+	void *driver_data;
+	const char *name;
+};
+
+struct dwc3_ep_file_map {
+	const char name[25];
+	const struct file_operations * const fops;
+};
+
+struct dwc3_pci {
+	struct platform_device *dwc3;
+	struct pci_dev *pci;
+	guid_t guid;
+	unsigned int has_dsm_for_pm: 1;
+	struct work_struct wakeup_work;
+};
+
+struct dwc3_haps {
+	struct platform_device *dwc3;
+	struct pci_dev *pci;
+};
+
+enum amd_chipset_gen {
+	NOT_AMD_CHIPSET = 0,
+	AMD_CHIPSET_SB600 = 1,
+	AMD_CHIPSET_SB700 = 2,
+	AMD_CHIPSET_SB800 = 3,
+	AMD_CHIPSET_HUDSON2 = 4,
+	AMD_CHIPSET_BOLTON = 5,
+	AMD_CHIPSET_YANGTZE = 6,
+	AMD_CHIPSET_TAISHAN = 7,
+	AMD_CHIPSET_UNKNOWN = 8,
+};
+
+struct amd_chipset_type {
+	enum amd_chipset_gen gen;
+	u8 rev;
+};
+
+struct amd_chipset_info {
+	struct pci_dev *nb_dev;
+	struct pci_dev *smbus_dev;
+	int nb_type;
+	struct amd_chipset_type sb_type;
+	int isoc_reqs;
+	int probe_count;
+	bool need_pll_quirk;
+};
+
+enum ehci_hrtimer_event {
+	EHCI_HRTIMER_POLL_ASS = 0,
+	EHCI_HRTIMER_POLL_PSS = 1,
+	EHCI_HRTIMER_POLL_DEAD = 2,
+	EHCI_HRTIMER_UNLINK_INTR = 3,
+	EHCI_HRTIMER_FREE_ITDS = 4,
+	EHCI_HRTIMER_ACTIVE_UNLINK = 5,
+	EHCI_HRTIMER_START_UNLINK_INTR = 6,
+	EHCI_HRTIMER_ASYNC_UNLINKS = 7,
+	EHCI_HRTIMER_IAA_WATCHDOG = 8,
+	EHCI_HRTIMER_DISABLE_PERIODIC = 9,
+	EHCI_HRTIMER_DISABLE_ASYNC = 10,
+	EHCI_HRTIMER_IO_WATCHDOG = 11,
+	EHCI_HRTIMER_NUM_EVENTS = 12,
+};
+
+enum ehci_rh_state {
+	EHCI_RH_HALTED = 0,
+	EHCI_RH_SUSPENDED = 1,
+	EHCI_RH_RUNNING = 2,
+	EHCI_RH_STOPPING = 3,
+};
+
+struct ehci_caps;
+
+struct ehci_regs;
+
+struct ehci_dbg_port;
+
+struct ehci_qh;
+
+union ehci_shadow;
+
+struct ehci_itd;
+
+struct ehci_sitd;
+
+struct ehci_hcd {
+	enum ehci_hrtimer_event next_hrtimer_event;
+	unsigned int enabled_hrtimer_events;
+	ktime_t hr_timeouts[12];
+	struct hrtimer hrtimer;
+	int PSS_poll_count;
+	int ASS_poll_count;
+	int died_poll_count;
+	struct ehci_caps *caps;
+	struct ehci_regs *regs;
+	struct ehci_dbg_port *debug;
+	__u32 hcs_params;
+	spinlock_t lock;
+	enum ehci_rh_state rh_state;
+	bool scanning: 1;
+	bool need_rescan: 1;
+	bool intr_unlinking: 1;
+	bool iaa_in_progress: 1;
+	bool async_unlinking: 1;
+	bool shutdown: 1;
+	struct ehci_qh *qh_scan_next;
+	struct ehci_qh *async;
+	struct ehci_qh *dummy;
+	struct list_head async_unlink;
+	struct list_head async_idle;
+	unsigned int async_unlink_cycle;
+	unsigned int async_count;
+	__le32 old_current;
+	__le32 old_token;
+	unsigned int periodic_size;
+	__le32 *periodic;
+	dma_addr_t periodic_dma;
+	struct list_head intr_qh_list;
+	unsigned int i_thresh;
+	union ehci_shadow *pshadow;
+	struct list_head intr_unlink_wait;
+	struct list_head intr_unlink;
+	unsigned int intr_unlink_wait_cycle;
+	unsigned int intr_unlink_cycle;
+	unsigned int now_frame;
+	unsigned int last_iso_frame;
+	unsigned int intr_count;
+	unsigned int isoc_count;
+	unsigned int periodic_count;
+	unsigned int uframe_periodic_max;
+	struct list_head cached_itd_list;
+	struct ehci_itd *last_itd_to_free;
+	struct list_head cached_sitd_list;
+	struct ehci_sitd *last_sitd_to_free;
+	unsigned long reset_done[15];
+	unsigned long bus_suspended;
+	unsigned long companion_ports;
+	unsigned long owned_ports;
+	unsigned long port_c_suspend;
+	unsigned long suspended_ports;
+	unsigned long resuming_ports;
+	struct dma_pool *qh_pool;
+	struct dma_pool *qtd_pool;
+	struct dma_pool *itd_pool;
+	struct dma_pool *sitd_pool;
+	unsigned int random_frame;
+	unsigned long next_statechange;
+	ktime_t last_periodic_enable;
+	u32 command;
+	unsigned int no_selective_suspend: 1;
+	unsigned int has_fsl_port_bug: 1;
+	unsigned int has_fsl_hs_errata: 1;
+	unsigned int has_fsl_susp_errata: 1;
+	unsigned int has_ci_pec_bug: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_capbase: 1;
+	unsigned int has_amcc_usb23: 1;
+	unsigned int need_io_watchdog: 1;
+	unsigned int amd_pll_fix: 1;
+	unsigned int use_dummy_qh: 1;
+	unsigned int has_synopsys_hc_bug: 1;
+	unsigned int frame_index_bug: 1;
+	unsigned int need_oc_pp_cycle: 1;
+	unsigned int imx28_write_fix: 1;
+	unsigned int spurious_oc: 1;
+	unsigned int is_aspeed: 1;
+	unsigned int zx_wakeup_clear_needed: 1;
+	__le32 *ohci_hcctrl_reg;
+	unsigned int has_hostpc: 1;
+	unsigned int has_tdi_phy_lpm: 1;
+	unsigned int has_ppcd: 1;
+	u8 sbrn;
+	u8 bandwidth[64];
+	u8 tt_budget[64];
+	struct list_head tt_list;
+	unsigned long priv[0];
+};
+
+struct ehci_caps {
+	u32 hc_capbase;
+	u32 hcs_params;
+	u32 hcc_params;
+	u8 portroute[8];
+};
+
+struct ehci_regs {
+	u32 command;
+	u32 status;
+	u32 intr_enable;
+	u32 frame_index;
+	u32 segment;
+	u32 frame_list;
+	u32 async_next;
+	u32 reserved1[2];
+	u32 txfill_tuning;
+	u32 reserved2[6];
+	u32 configured_flag;
+	union {
+		u32 port_status[15];
+		struct {
+			u32 reserved3[9];
+			u32 usbmode;
+		};
+	};
+	union {
+		struct {
+			u32 reserved4;
+			u32 hostpc[15];
+		};
+		u32 brcm_insnreg[4];
+	};
+	u32 reserved5[2];
+	u32 usbmode_ex;
+};
+
+struct ehci_dbg_port {
+	u32 control;
+	u32 pids;
+	u32 data03;
+	u32 data47;
+	u32 address;
+};
+
+struct ehci_fstn;
+
+union ehci_shadow {
+	struct ehci_qh *qh;
+	struct ehci_itd *itd;
+	struct ehci_sitd *sitd;
+	struct ehci_fstn *fstn;
+	__le32 *hw_next;
+	void *ptr;
+};
+
+struct ehci_per_sched {
+	struct usb_device *udev;
+	struct usb_host_endpoint *ep;
+	struct list_head ps_list;
+	u16 tt_usecs;
+	u16 cs_mask;
+	u16 period;
+	u16 phase;
+	u8 bw_phase;
+	u8 phase_uf;
+	u8 usecs;
+	u8 c_usecs;
+	u8 bw_uperiod;
+	u8 bw_period;
+};
+
+struct ehci_qh_hw;
+
+struct ehci_qtd;
+
+struct ehci_qh {
+	struct ehci_qh_hw *hw;
+	dma_addr_t qh_dma;
+	union ehci_shadow qh_next;
+	struct list_head qtd_list;
+	struct list_head intr_node;
+	struct ehci_qtd *dummy;
+	struct list_head unlink_node;
+	struct ehci_per_sched ps;
+	unsigned int unlink_cycle;
+	u8 qh_state;
+	u8 xacterrs;
+	u8 unlink_reason;
+	u8 gap_uf;
+	unsigned int is_out: 1;
+	unsigned int clearing_tt: 1;
+	unsigned int dequeue_during_giveback: 1;
+	unsigned int should_be_inactive: 1;
+};
+
+struct ehci_qh_hw {
+	__le32 hw_next;
+	__le32 hw_info1;
+	__le32 hw_info2;
+	__le32 hw_current;
+	__le32 hw_qtd_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct ehci_iso_stream;
+
+struct ehci_itd {
+	__le32 hw_next;
+	__le32 hw_transaction[8];
+	__le32 hw_bufp[7];
+	__le32 hw_bufp_hi[7];
+	dma_addr_t itd_dma;
+	union ehci_shadow itd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head itd_list;
+	unsigned int frame;
+	unsigned int pg;
+	unsigned int index[8];
+	long: 64;
+};
+
+struct ehci_iso_stream {
+	struct ehci_qh_hw *hw;
+	u8 bEndpointAddress;
+	u8 highspeed;
+	struct list_head td_list;
+	struct list_head free_list;
+	struct ehci_per_sched ps;
+	unsigned int next_uframe;
+	__le32 splits;
+	u16 uperiod;
+	u16 maxp;
+	unsigned int bandwidth;
+	__le32 buf0;
+	__le32 buf1;
+	__le32 buf2;
+	__le32 address;
+};
+
+struct ehci_sitd {
+	__le32 hw_next;
+	__le32 hw_fullspeed_ep;
+	__le32 hw_uframe;
+	__le32 hw_results;
+	__le32 hw_buf[2];
+	__le32 hw_backpointer;
+	__le32 hw_buf_hi[2];
+	dma_addr_t sitd_dma;
+	union ehci_shadow sitd_next;
+	struct urb *urb;
+	struct ehci_iso_stream *stream;
+	struct list_head sitd_list;
+	unsigned int frame;
+	unsigned int index;
+};
+
+struct ehci_fstn {
+	__le32 hw_next;
+	__le32 hw_prev;
+	dma_addr_t fstn_dma;
+	union ehci_shadow fstn_next;
+	long: 64;
+};
+
+struct ehci_qtd {
+	__le32 hw_next;
+	__le32 hw_alt_next;
+	__le32 hw_token;
+	__le32 hw_buf[5];
+	__le32 hw_buf_hi[5];
+	dma_addr_t qtd_dma;
+	struct list_head qtd_list;
+	struct urb *urb;
+	size_t length;
+};
+
+struct ehci_tt {
+	u16 bandwidth[8];
+	struct list_head tt_list;
+	struct list_head ps_list;
+	struct usb_tt *usb_tt;
+	int tt_port;
+};
+
+struct ehci_iso_packet {
+	u64 bufp;
+	__le32 transaction;
+	u8 cross;
+	u32 buf1;
+};
+
+struct ehci_iso_sched {
+	struct list_head td_list;
+	unsigned int span;
+	unsigned int first_packet;
+	struct ehci_iso_packet packet[0];
+};
+
+struct ehci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*port_power)(struct usb_hcd *, int, bool);
+};
+
+struct usb_ehci_pdata {
+	int caps_offset;
+	unsigned int has_tt: 1;
+	unsigned int has_synopsys_hc_bug: 1;
+	unsigned int big_endian_desc: 1;
+	unsigned int big_endian_mmio: 1;
+	unsigned int no_io_watchdog: 1;
+	unsigned int reset_on_resume: 1;
+	unsigned int dma_mask_64: 1;
+	unsigned int spurious_oc: 1;
+	int (*power_on)(struct platform_device *);
+	void (*power_off)(struct platform_device *);
+	void (*power_suspend)(struct platform_device *);
+	int (*pre_setup)(struct usb_hcd *);
+};
+
+struct ehci_platform_priv {
+	struct clk *clks[4];
+	struct reset_control *rsts;
+	bool reset_on_resume;
+	bool quirk_poll;
+	struct timer_list poll_timer;
+	struct delayed_work poll_work;
+};
+
+enum xhci_ring_type {
+	TYPE_CTRL = 0,
+	TYPE_ISOC = 1,
+	TYPE_BULK = 2,
+	TYPE_INTR = 3,
+	TYPE_STREAM = 4,
+	TYPE_COMMAND = 5,
+	TYPE_EVENT = 6,
+};
+
+enum xhci_overhead_type {
+	LS_OVERHEAD_TYPE = 0,
+	FS_OVERHEAD_TYPE = 1,
+	HS_OVERHEAD_TYPE = 2,
+};
+
+enum xhci_cancelled_td_status {
+	TD_DIRTY = 0,
+	TD_HALTED = 1,
+	TD_CLEARING_CACHE = 2,
+	TD_CLEARED = 3,
+};
+
+enum xhci_setup_dev {
+	SETUP_CONTEXT_ONLY = 0,
+	SETUP_CONTEXT_ADDRESS = 1,
+};
+
+struct s3_save {
+	u32 command;
+	u32 dev_nt;
+	u64 dcbaa_ptr;
+	u32 config_reg;
+};
+
+struct xhci_bus_state {
+	unsigned long bus_suspended;
+	unsigned long next_statechange;
+	u32 port_c_suspend;
+	u32 suspended_ports;
+	u32 port_remote_wakeup;
+	unsigned long resuming_ports;
+};
+
+struct xhci_port;
+
+struct xhci_hub {
+	struct xhci_port **ports;
+	unsigned int num_ports;
+	struct usb_hcd *hcd;
+	struct xhci_bus_state bus_state;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_cap_regs;
+
+struct xhci_op_regs;
+
+struct xhci_run_regs;
+
+struct xhci_doorbell_array;
+
+struct xhci_device_context_array;
+
+struct xhci_interrupter;
+
+struct xhci_ring;
+
+struct xhci_command;
+
+struct xhci_scratchpad;
+
+struct xhci_virt_device;
+
+struct xhci_root_port_bw_info;
+
+struct xhci_port_cap;
+
+struct xhci_hcd {
+	struct usb_hcd *main_hcd;
+	struct usb_hcd *shared_hcd;
+	struct xhci_cap_regs *cap_regs;
+	struct xhci_op_regs *op_regs;
+	struct xhci_run_regs *run_regs;
+	struct xhci_doorbell_array *dba;
+	__u32 hcs_params1;
+	__u32 hcs_params2;
+	__u32 hcs_params3;
+	__u32 hcc_params;
+	__u32 hcc_params2;
+	spinlock_t lock;
+	u8 sbrn;
+	u16 hci_version;
+	u8 max_slots;
+	u16 max_interrupters;
+	u8 max_ports;
+	u8 isoc_threshold;
+	u32 imod_interval;
+	int event_ring_max;
+	int page_size;
+	int page_shift;
+	int msix_count;
+	struct clk *clk;
+	struct clk *reg_clk;
+	struct reset_control *reset;
+	struct xhci_device_context_array *dcbaa;
+	struct xhci_interrupter **interrupters;
+	struct xhci_ring *cmd_ring;
+	unsigned int cmd_ring_state;
+	struct list_head cmd_list;
+	unsigned int cmd_ring_reserved_trbs;
+	struct delayed_work cmd_timer;
+	struct completion cmd_ring_stop_completion;
+	struct xhci_command *current_cmd;
+	struct xhci_scratchpad *scratchpad;
+	struct mutex mutex;
+	struct xhci_virt_device *devs[256];
+	struct xhci_root_port_bw_info *rh_bw;
+	struct dma_pool *device_pool;
+	struct dma_pool *segment_pool;
+	struct dma_pool *small_streams_pool;
+	struct dma_pool *medium_streams_pool;
+	unsigned int xhc_state;
+	unsigned long run_graceperiod;
+	struct s3_save s3;
+	unsigned long long quirks;
+	unsigned int num_active_eps;
+	unsigned int limit_active_eps;
+	struct xhci_port *hw_ports;
+	struct xhci_hub usb2_rhub;
+	struct xhci_hub usb3_rhub;
+	unsigned int hw_lpm_support: 1;
+	unsigned int broken_suspend: 1;
+	unsigned int allow_single_roothub: 1;
+	u32 *ext_caps;
+	unsigned int num_ext_caps;
+	struct xhci_port_cap *port_caps;
+	unsigned int num_port_caps;
+	struct timer_list comp_mode_recovery_timer;
+	u32 port_status_u0;
+	u16 test_mode;
+	struct dentry *debugfs_root;
+	struct dentry *debugfs_slots;
+	struct list_head regset_list;
+	void *dbc;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	unsigned long priv[0];
+};
+
+struct xhci_cap_regs {
+	__le32 hc_capbase;
+	__le32 hcs_params1;
+	__le32 hcs_params2;
+	__le32 hcs_params3;
+	__le32 hcc_params;
+	__le32 db_off;
+	__le32 run_regs_off;
+	__le32 hcc_params2;
+};
+
+struct xhci_op_regs {
+	__le32 command;
+	__le32 status;
+	__le32 page_size;
+	__le32 reserved1;
+	__le32 reserved2;
+	__le32 dev_notification;
+	__le64 cmd_ring;
+	__le32 reserved3[4];
+	__le64 dcbaa_ptr;
+	__le32 config_reg;
+	__le32 reserved4[241];
+	__le32 port_status_base;
+	__le32 port_power_base;
+	__le32 port_link_base;
+	__le32 reserved5;
+	__le32 reserved6[1016];
+};
+
+struct xhci_intr_reg {
+	__le32 irq_pending;
+	__le32 irq_control;
+	__le32 erst_size;
+	__le32 rsvd;
+	__le64 erst_base;
+	__le64 erst_dequeue;
+};
+
+struct xhci_run_regs {
+	__le32 microframe_index;
+	__le32 rsvd[7];
+	struct xhci_intr_reg ir_set[128];
+};
+
+struct xhci_doorbell_array {
+	__le32 doorbell[256];
+};
+
+struct xhci_device_context_array {
+	__le64 dev_context_ptrs[256];
+	dma_addr_t dma;
+};
+
+struct xhci_erst_entry;
+
+struct xhci_erst {
+	struct xhci_erst_entry *entries;
+	unsigned int num_entries;
+	dma_addr_t erst_dma_addr;
+	unsigned int erst_size;
+	u64 android_kabi_reserved1;
+};
+
+struct xhci_interrupter {
+	struct xhci_ring *event_ring;
+	struct xhci_erst erst;
+	struct xhci_intr_reg *ir_set;
+	unsigned int intr_num;
+	bool ip_autoclear;
+	bool skip_events;
+	u32 isoc_bei_interval;
+	u32 s3_irq_pending;
+	u32 s3_irq_control;
+	u32 s3_erst_size;
+	u64 s3_erst_base;
+	u64 s3_erst_dequeue;
+};
+
+struct xhci_segment;
+
+union xhci_trb;
+
+struct xhci_ring {
+	struct xhci_segment *first_seg;
+	struct xhci_segment *last_seg;
+	union xhci_trb *enqueue;
+	struct xhci_segment *enq_seg;
+	union xhci_trb *dequeue;
+	struct xhci_segment *deq_seg;
+	struct list_head td_list;
+	u32 cycle_state;
+	unsigned int stream_id;
+	unsigned int num_segs;
+	unsigned int num_trbs_free;
+	unsigned int bounce_buf_len;
+	enum xhci_ring_type type;
+	bool last_td_was_short;
+	struct xarray *trb_address_map;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct xhci_segment {
+	union xhci_trb *trbs;
+	struct xhci_segment *next;
+	unsigned int num;
+	dma_addr_t dma;
+	dma_addr_t bounce_dma;
+	void *bounce_buf;
+	unsigned int bounce_offs;
+	unsigned int bounce_len;
+	u64 android_kabi_reserved1;
+};
+
+struct xhci_link_trb {
+	__le64 segment_ptr;
+	__le32 intr_target;
+	__le32 control;
+};
+
+struct xhci_transfer_event {
+	__le64 buffer;
+	__le32 transfer_len;
+	__le32 flags;
+};
+
+struct xhci_event_cmd {
+	__le64 cmd_trb;
+	__le32 status;
+	__le32 flags;
+};
+
+struct xhci_generic_trb {
+	__le32 field[4];
+};
+
+union xhci_trb {
+	struct xhci_link_trb link;
+	struct xhci_transfer_event trans_event;
+	struct xhci_event_cmd event_cmd;
+	struct xhci_generic_trb generic;
+};
+
+struct xhci_erst_entry {
+	__le64 seg_addr;
+	__le32 seg_size;
+	__le32 rsvd;
+};
+
+struct xhci_container_ctx;
+
+struct xhci_command {
+	struct xhci_container_ctx *in_ctx;
+	u32 status;
+	int slot_id;
+	struct completion *completion;
+	union xhci_trb *command_trb;
+	struct list_head cmd_list;
+	unsigned int timeout_ms;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct xhci_container_ctx {
+	unsigned int type;
+	int size;
+	u8 *bytes;
+	dma_addr_t dma;
+};
+
+struct xhci_scratchpad {
+	u64 *sp_array;
+	dma_addr_t sp_dma;
+	void **sp_buffers;
+};
+
+struct xhci_bw_info {
+	unsigned int ep_interval;
+	unsigned int mult;
+	unsigned int num_packets;
+	unsigned int max_packet_size;
+	unsigned int max_esit_payload;
+	unsigned int type;
+};
+
+struct xhci_sideband;
+
+struct xhci_stream_info;
+
+struct xhci_virt_ep {
+	struct xhci_virt_device *vdev;
+	unsigned int ep_index;
+	struct xhci_ring *ring;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *new_ring;
+	unsigned int err_count;
+	unsigned int ep_state;
+	struct list_head cancelled_td_list;
+	struct xhci_hcd *xhci;
+	struct xhci_segment *queued_deq_seg;
+	union xhci_trb *queued_deq_ptr;
+	bool skip;
+	struct xhci_bw_info bw_info;
+	struct list_head bw_endpoint_list;
+	int next_frame_id;
+	bool use_extended_tbc;
+	struct xhci_sideband *sideband;
+};
+
+struct xhci_interval_bw_table;
+
+struct xhci_tt_bw_info;
+
+struct xhci_virt_device {
+	int slot_id;
+	struct usb_device *udev;
+	struct xhci_container_ctx *out_ctx;
+	struct xhci_container_ctx *in_ctx;
+	struct xhci_virt_ep eps[31];
+	u8 fake_port;
+	u8 real_port;
+	struct xhci_interval_bw_table *bw_table;
+	struct xhci_tt_bw_info *tt_info;
+	unsigned long flags;
+	u16 current_mel;
+	void *debugfs_private;
+	struct xhci_sideband *sideband;
+};
+
+struct xhci_stream_ctx;
+
+struct xhci_stream_info {
+	struct xhci_ring **stream_rings;
+	unsigned int num_streams;
+	struct xhci_stream_ctx *stream_ctx_array;
+	unsigned int num_stream_ctxs;
+	dma_addr_t ctx_array_dma;
+	struct xarray trb_address_map;
+	struct xhci_command *free_streams_command;
+};
+
+struct xhci_stream_ctx {
+	__le64 stream_ring;
+	__le32 reserved[2];
+};
+
+struct xhci_interval_bw {
+	unsigned int num_packets;
+	struct list_head endpoints;
+	unsigned int overhead[3];
+};
+
+struct xhci_interval_bw_table {
+	unsigned int interval0_esit_payload;
+	struct xhci_interval_bw interval_bw[16];
+	unsigned int bw_used;
+	unsigned int ss_bw_in;
+	unsigned int ss_bw_out;
+};
+
+struct xhci_tt_bw_info {
+	struct list_head tt_list;
+	int slot_id;
+	int ttport;
+	struct xhci_interval_bw_table bw_table;
+	int active_eps;
+};
+
+struct xhci_root_port_bw_info {
+	struct list_head tts;
+	unsigned int num_active_tts;
+	struct xhci_interval_bw_table bw_table;
+};
+
+struct xhci_port {
+	__le32 *addr;
+	int hw_portnum;
+	int hcd_portnum;
+	struct xhci_hub *rhub;
+	struct xhci_port_cap *port_cap;
+	unsigned int lpm_incapable: 1;
+	unsigned long resume_timestamp;
+	bool rexit_active;
+	struct completion rexit_done;
+	struct completion u3exit_done;
+};
+
+struct xhci_port_cap {
+	u32 *psi;
+	u8 psi_count;
+	u8 psi_uid_count;
+	u8 maj_rev;
+	u8 min_rev;
+};
+
+struct xhci_input_control_ctx {
+	__le32 drop_flags;
+	__le32 add_flags;
+	__le32 rsvd2[6];
+};
+
+struct xhci_ep_ctx {
+	__le32 ep_info;
+	__le32 ep_info2;
+	__le64 deq;
+	__le32 tx_info;
+	__le32 reserved[3];
+};
+
+struct xhci_slot_ctx {
+	__le32 dev_info;
+	__le32 dev_info2;
+	__le32 tt_info;
+	__le32 dev_state;
+	__le32 reserved[4];
+};
+
+struct xhci_td {
+	struct list_head td_list;
+	struct list_head cancelled_td_list;
+	int status;
+	enum xhci_cancelled_td_status cancel_status;
+	struct urb *urb;
+	struct xhci_segment *start_seg;
+	union xhci_trb *first_trb;
+	union xhci_trb *last_trb;
+	struct xhci_segment *last_trb_seg;
+	struct xhci_segment *bounce_seg;
+	bool urb_length_set;
+	bool error_mid_td;
+	unsigned int num_trbs;
+};
+
+struct urb_priv {
+	int num_tds;
+	int num_tds_done;
+	struct xhci_td td[0];
+};
+
+typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);
+
+struct xhci_driver_overrides {
+	size_t extra_priv_size;
+	int (*reset)(struct usb_hcd *);
+	int (*start)(struct usb_hcd *);
+	int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
+	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
+	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
+	int (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);
+	int (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+enum xhci_ep_reset_type {
+	EP_HARD_RESET = 0,
+	EP_SOFT_RESET = 1,
+};
+
+typedef void (*btf_trace_xhci_dbg_address)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_context_change)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_quirks)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_reset_ep)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_cancel_urb)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_init)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_dbg_ring_expansion)(void *, struct va_format *);
+
+typedef void (*btf_trace_xhci_address_ctx)(void *, struct xhci_hcd *, struct xhci_container_ctx *, unsigned int);
+
+typedef void (*btf_trace_xhci_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_command)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_queue_trb)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_dbc_gadget_ep_queue)(void *, struct xhci_ring *, struct xhci_generic_trb *);
+
+typedef void (*btf_trace_xhci_free_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_alloc_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_setup_addressable_virt_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_stop_device)(void *, struct xhci_virt_device *);
+
+typedef void (*btf_trace_xhci_urb_enqueue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_giveback)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_urb_dequeue)(void *, struct urb *);
+
+typedef void (*btf_trace_xhci_handle_cmd_stop_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_config_ep)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_add_endpoint)(void *, struct xhci_ep_ctx *);
+
+typedef void (*btf_trace_xhci_alloc_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_free_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_disable_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_discover_or_reset_device)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_setup_device_slot)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_addr_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_reset_dev)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_handle_cmd_set_deq)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint)(void *, struct xhci_slot_ctx *);
+
+typedef void (*btf_trace_xhci_address_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_configure_endpoint_ctrl_ctx)(void *, struct xhci_input_control_ctx *);
+
+typedef void (*btf_trace_xhci_ring_alloc)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_free)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_ring_expansion)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_enq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_inc_deq)(void *, struct xhci_ring *);
+
+typedef void (*btf_trace_xhci_handle_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_get_port_status)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_hub_status_data)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_ep_doorbell)(void *, u32, u32);
+
+typedef void (*btf_trace_xhci_ring_host_doorbell)(void *, u32, u32);
+
+struct dbc_request;
+
+typedef void (*btf_trace_xhci_dbc_alloc_request)(void *, struct dbc_request *);
+
+struct xhci_dbc;
+
+struct dbc_request {
+	void *buf;
+	unsigned int length;
+	dma_addr_t dma;
+	void (*complete)(struct xhci_dbc *, struct dbc_request *);
+	struct list_head list_pool;
+	int status;
+	unsigned int actual;
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	dma_addr_t trb_dma;
+	union xhci_trb *trb;
+	unsigned int direction: 1;
+};
+
+enum dbc_state {
+	DS_DISABLED = 0,
+	DS_INITIALIZED = 1,
+	DS_ENABLED = 2,
+	DS_CONNECTED = 3,
+	DS_CONFIGURED = 4,
+	DS_STALLED = 5,
+};
+
+struct dbc_ep {
+	struct xhci_dbc *dbc;
+	struct list_head list_pending;
+	struct xhci_ring *ring;
+	unsigned int direction: 1;
+};
+
+struct dbc_regs;
+
+struct dbc_str_descs;
+
+struct dbc_driver;
+
+struct xhci_dbc {
+	spinlock_t lock;
+	struct device *dev;
+	struct xhci_hcd *xhci;
+	struct dbc_regs *regs;
+	struct xhci_ring *ring_evt;
+	struct xhci_ring *ring_in;
+	struct xhci_ring *ring_out;
+	struct xhci_erst erst;
+	struct xhci_container_ctx *ctx;
+	struct dbc_str_descs *string;
+	dma_addr_t string_dma;
+	size_t string_size;
+	u16 idVendor;
+	u16 idProduct;
+	u16 bcdDevice;
+	u8 bInterfaceProtocol;
+	enum dbc_state state;
+	struct delayed_work event_work;
+	unsigned int resume_required: 1;
+	struct dbc_ep eps[2];
+	const struct dbc_driver *driver;
+	void *priv;
+};
+
+struct dbc_regs {
+	__le32 capability;
+	__le32 doorbell;
+	__le32 ersts;
+	__le32 __reserved_0;
+	__le64 erstba;
+	__le64 erdp;
+	__le32 control;
+	__le32 status;
+	__le32 portsc;
+	__le32 __reserved_1;
+	__le64 dccp;
+	__le32 devinfo1;
+	__le32 devinfo2;
+};
+
+struct dbc_str_descs {
+	char string0[64];
+	char manufacturer[64];
+	char product[64];
+	char serial[64];
+};
+
+struct dbc_driver {
+	int (*configure)(struct xhci_dbc *);
+	void (*disconnect)(struct xhci_dbc *);
+};
+
+typedef void (*btf_trace_xhci_dbc_free_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_queue_request)(void *, struct dbc_request *);
+
+typedef void (*btf_trace_xhci_dbc_giveback_request)(void *, struct dbc_request *);
+
+struct trace_event_raw_xhci_log_msg {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctx {
+	struct trace_entry ent;
+	int ctx_64;
+	unsigned int ctx_type;
+	dma_addr_t ctx_dma;
+	u8 *ctx_va;
+	unsigned int ctx_ep_num;
+	u32 __data_loc_ctx_data;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_trb {
+	struct trace_entry ent;
+	u32 type;
+	u32 field0;
+	u32 field1;
+	u32 field2;
+	u32 field3;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_free_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	unsigned long long out_ctx;
+	unsigned long long in_ctx;
+	u8 fake_port;
+	u8 real_port;
+	u16 current_mel;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_virt_dev {
+	struct trace_entry ent;
+	void *vdev;
+	unsigned long long out_ctx;
+	unsigned long long in_ctx;
+	int devnum;
+	int state;
+	int speed;
+	u8 portnum;
+	u8 level;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_urb {
+	struct trace_entry ent;
+	void *urb;
+	unsigned int pipe;
+	unsigned int stream;
+	int status;
+	unsigned int flags;
+	int num_mapped_sgs;
+	int num_sgs;
+	int length;
+	int actual;
+	int epnum;
+	int dir_in;
+	int type;
+	int slot_id;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ep_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u64 deq;
+	u32 tx_info;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_slot_ctx {
+	struct trace_entry ent;
+	u32 info;
+	u32 info2;
+	u32 tt_info;
+	u32 state;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ctrl_ctx {
+	struct trace_entry ent;
+	u32 drop;
+	u32 add;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_ring {
+	struct trace_entry ent;
+	u32 type;
+	void *ring;
+	dma_addr_t enq;
+	dma_addr_t deq;
+	dma_addr_t enq_seg;
+	dma_addr_t deq_seg;
+	unsigned int num_segs;
+	unsigned int stream_id;
+	unsigned int cycle_state;
+	unsigned int bounce_buf_len;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_portsc {
+	struct trace_entry ent;
+	u32 portnum;
+	u32 portsc;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_log_doorbell {
+	struct trace_entry ent;
+	u32 slot;
+	u32 doorbell;
+	char __data[0];
+};
+
+struct trace_event_raw_xhci_dbc_log_request {
+	struct trace_entry ent;
+	struct dbc_request *req;
+	bool dir;
+	unsigned int actual;
+	unsigned int length;
+	int status;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_xhci_log_msg {
+	u32 msg;
+};
+
+struct trace_event_data_offsets_xhci_log_ctx {
+	u32 ctx_data;
+};
+
+struct trace_event_data_offsets_xhci_log_trb {};
+
+struct trace_event_data_offsets_xhci_log_free_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_virt_dev {};
+
+struct trace_event_data_offsets_xhci_log_urb {};
+
+struct trace_event_data_offsets_xhci_log_ep_ctx {};
+
+struct trace_event_data_offsets_xhci_log_slot_ctx {};
+
+struct trace_event_data_offsets_xhci_log_ctrl_ctx {};
+
+struct trace_event_data_offsets_xhci_log_ring {};
+
+struct trace_event_data_offsets_xhci_log_portsc {};
+
+struct trace_event_data_offsets_xhci_log_doorbell {};
+
+struct trace_event_data_offsets_xhci_dbc_log_request {};
+
+struct xhci_file_map {
+	const char *name;
+	int (*show)(struct seq_file *, void *);
+};
+
+struct xhci_regset {
+	char name[32];
+	struct debugfs_regset32 regset;
+	size_t nregs;
+	struct list_head list;
+};
+
+struct xhci_ep_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_stream_info *stream_info;
+	struct xhci_ring *show_ring;
+	unsigned int stream_id;
+};
+
+struct xhci_slot_priv {
+	char name[32];
+	struct dentry *root;
+	struct xhci_ep_priv *eps[31];
+	struct xhci_virt_device *dev;
+};
+
+struct xhci_driver_data {
+	u64 quirks;
+	const char *firmware;
+};
+
+struct xhci_plat_priv {
+	const char *firmware_name;
+	unsigned long long quirks;
+	void (*plat_start)(struct usb_hcd *);
+	int (*init_quirk)(struct usb_hcd *);
+	int (*suspend_quirk)(struct usb_hcd *);
+	int (*resume_quirk)(struct usb_hcd *);
+};
+
+enum {
+	US_FL_SINGLE_LUN = 1,
+	US_FL_NEED_OVERRIDE = 2,
+	US_FL_SCM_MULT_TARG = 4,
+	US_FL_FIX_INQUIRY = 8,
+	US_FL_FIX_CAPACITY = 16,
+	US_FL_IGNORE_RESIDUE = 32,
+	US_FL_BULK32 = 64,
+	US_FL_NOT_LOCKABLE = 128,
+	US_FL_GO_SLOW = 256,
+	US_FL_NO_WP_DETECT = 512,
+	US_FL_MAX_SECTORS_64 = 1024,
+	US_FL_IGNORE_DEVICE = 2048,
+	US_FL_CAPACITY_HEURISTICS = 4096,
+	US_FL_MAX_SECTORS_MIN = 8192,
+	US_FL_BULK_IGNORE_TAG = 16384,
+	US_FL_SANE_SENSE = 32768,
+	US_FL_CAPACITY_OK = 65536,
+	US_FL_BAD_SENSE = 131072,
+	US_FL_NO_READ_DISC_INFO = 262144,
+	US_FL_NO_READ_CAPACITY_16 = 524288,
+	US_FL_INITIAL_READ10 = 1048576,
+	US_FL_WRITE_CACHE = 2097152,
+	US_FL_NEEDS_CAP16 = 4194304,
+	US_FL_IGNORE_UAS = 8388608,
+	US_FL_BROKEN_FUA = 16777216,
+	US_FL_NO_ATA_1X = 33554432,
+	US_FL_NO_REPORT_OPCODES = 67108864,
+	US_FL_MAX_SECTORS_240 = 134217728,
+	US_FL_NO_REPORT_LUNS = 268435456,
+	US_FL_ALWAYS_SYNC = 536870912,
+	US_FL_NO_SAME = 1073741824,
+	US_FL_SENSE_AFTER_SYNC = 2147483648,
+};
+
+enum {
+	SUBMIT_STATUS_URB = 2,
+	ALLOC_DATA_IN_URB = 4,
+	SUBMIT_DATA_IN_URB = 8,
+	ALLOC_DATA_OUT_URB = 16,
+	SUBMIT_DATA_OUT_URB = 32,
+	ALLOC_CMD_URB = 64,
+	SUBMIT_CMD_URB = 128,
+	COMMAND_INFLIGHT = 256,
+	DATA_IN_URB_INFLIGHT = 512,
+	DATA_OUT_URB_INFLIGHT = 1024,
+	COMMAND_ABORTED = 2048,
+	IS_IN_WORK_LIST = 4096,
+};
+
+enum {
+	IU_ID_COMMAND = 1,
+	IU_ID_STATUS = 3,
+	IU_ID_RESPONSE = 4,
+	IU_ID_TASK_MGMT = 5,
+	IU_ID_READ_READY = 6,
+	IU_ID_WRITE_READY = 7,
+};
+
+enum {
+	RC_TMF_COMPLETE = 0,
+	RC_INVALID_INFO_UNIT = 2,
+	RC_TMF_NOT_SUPPORTED = 4,
+	RC_TMF_FAILED = 5,
+	RC_TMF_SUCCEEDED = 8,
+	RC_INCORRECT_LUN = 9,
+	RC_OVERLAPPED_TAG = 10,
+};
+
+enum {
+	CMD_PIPE_ID = 1,
+	STATUS_PIPE_ID = 2,
+	DATA_IN_PIPE_ID = 3,
+	DATA_OUT_PIPE_ID = 4,
+	UAS_SIMPLE_TAG = 0,
+	UAS_HEAD_TAG = 1,
+	UAS_ORDERED_TAG = 2,
+	UAS_ACA = 4,
+};
+
+struct uas_dev_info {
+	struct usb_interface *intf;
+	struct usb_device *udev;
+	struct usb_anchor cmd_urbs;
+	struct usb_anchor sense_urbs;
+	struct usb_anchor data_urbs;
+	unsigned long flags;
+	int qdepth;
+	int resetting;
+	unsigned int cmd_pipe;
+	unsigned int status_pipe;
+	unsigned int data_in_pipe;
+	unsigned int data_out_pipe;
+	unsigned int use_streams: 1;
+	unsigned int shutdown: 1;
+	struct scsi_cmnd *cmnd[256];
+	spinlock_t lock;
+	struct work_struct work;
+	struct work_struct scan_work;
+};
+
+struct response_iu {
+	__u8 iu_id;
+	__u8 rsvd1;
+	__be16 tag;
+	__u8 add_response_info[3];
+	__u8 response_code;
+};
+
+struct uas_cmd_info {
+	unsigned int state;
+	unsigned int uas_tag;
+	struct urb *cmd_urb;
+	struct urb *data_in_urb;
+	struct urb *data_out_urb;
+};
+
+struct sense_iu {
+	__u8 iu_id;
+	__u8 rsvd1;
+	__be16 tag;
+	__be16 status_qual;
+	__u8 status;
+	__u8 rsvd7[7];
+	__be16 len;
+	__u8 sense[96];
+};
+
+struct command_iu {
+	__u8 iu_id;
+	__u8 rsvd1;
+	__be16 tag;
+	__u8 prio_attr;
+	__u8 rsvd5;
+	__u8 len;
+	__u8 rsvd7;
+	struct scsi_lun lun;
+	__u8 cdb[16];
+};
+
+struct iu {
+	__u8 iu_id;
+	__u8 rsvd1;
+	__be16 tag;
+};
+
+struct us_data;
+
+typedef int (*trans_cmnd)(struct scsi_cmnd *, struct us_data *);
+
+typedef int (*trans_reset)(struct us_data *);
+
+typedef void (*proto_cmnd)(struct scsi_cmnd *, struct us_data *);
+
+typedef void (*extra_data_destructor)(void *);
+
+typedef void (*pm_hook)(struct us_data *, int);
+
+struct us_unusual_dev;
+
+struct us_data {
+	struct mutex dev_mutex;
+	struct usb_device *pusb_dev;
+	struct usb_interface *pusb_intf;
+	const struct us_unusual_dev *unusual_dev;
+	unsigned long fflags;
+	unsigned long dflags;
+	unsigned int send_bulk_pipe;
+	unsigned int recv_bulk_pipe;
+	unsigned int send_ctrl_pipe;
+	unsigned int recv_ctrl_pipe;
+	unsigned int recv_intr_pipe;
+	char *transport_name;
+	char *protocol_name;
+	__le32 bcs_signature;
+	u8 subclass;
+	u8 protocol;
+	u8 max_lun;
+	u8 ifnum;
+	u8 ep_bInterval;
+	trans_cmnd transport;
+	trans_reset transport_reset;
+	proto_cmnd proto_handler;
+	struct scsi_cmnd *srb;
+	unsigned int tag;
+	char scsi_name[32];
+	struct urb *current_urb;
+	struct usb_ctrlrequest *cr;
+	struct usb_sg_request current_sg;
+	unsigned char *iobuf;
+	dma_addr_t iobuf_dma;
+	struct task_struct *ctl_thread;
+	struct completion cmnd_ready;
+	struct completion notify;
+	wait_queue_head_t delay_wait;
+	struct delayed_work scan_dwork;
+	void *extra;
+	extra_data_destructor extra_destructor;
+	pm_hook suspend_resume_hook;
+	int use_last_sector_hacks;
+	int last_sector_retries;
+};
+
+struct us_unusual_dev {
+	const char *vendorName;
+	const char *productName;
+	__u8 useProtocol;
+	__u8 useTransport;
+	int (*initFunction)(struct us_data *);
+};
+
+enum xfer_buf_dir {
+	TO_XFER_BUF = 0,
+	FROM_XFER_BUF = 1,
+};
+
+struct bulk_cb_wrap {
+	__le32 Signature;
+	__u32 Tag;
+	__le32 DataTransferLength;
+	__u8 Flags;
+	__u8 Lun;
+	__u8 Length;
+	__u8 CDB[16];
+};
+
+struct bulk_cs_wrap {
+	__le32 Signature;
+	__u32 Tag;
+	__le32 Residue;
+	__u8 Status;
+};
+
+struct swoc_info {
+	__u8 rev;
+	__u8 reserved[8];
+	__u16 LinuxSKU;
+	__u16 LinuxVer;
+	__u8 reserved2[47];
+} __attribute__((packed));
+
+struct ignore_entry {
+	u16 vid;
+	u16 pid;
+	u16 bcdmin;
+	u16 bcdmax;
+};
+
+struct usb_string;
+
+struct usb_gadget_strings {
+	u16 language;
+	struct usb_string *strings;
+};
+
+struct usb_string {
+	u8 id;
+	const char *s;
+};
+
+struct usb_otg20_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bmAttributes;
+	__le16 bcdOTG;
+} __attribute__((packed));
+
+struct usb_otg_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bmAttributes;
+};
+
+struct usb_configuration;
+
+struct usb_os_desc_table;
+
+struct usb_function_instance;
+
+struct usb_function {
+	const char *name;
+	struct usb_gadget_strings **strings;
+	struct usb_descriptor_header **fs_descriptors;
+	struct usb_descriptor_header **hs_descriptors;
+	struct usb_descriptor_header **ss_descriptors;
+	struct usb_descriptor_header **ssp_descriptors;
+	struct usb_configuration *config;
+	struct usb_os_desc_table *os_desc_table;
+	unsigned int os_desc_n;
+	int (*bind)(struct usb_configuration *, struct usb_function *);
+	void (*unbind)(struct usb_configuration *, struct usb_function *);
+	void (*free_func)(struct usb_function *);
+	struct module *mod;
+	int (*set_alt)(struct usb_function *, unsigned int, unsigned int);
+	int (*get_alt)(struct usb_function *, unsigned int);
+	void (*disable)(struct usb_function *);
+	int (*setup)(struct usb_function *, const struct usb_ctrlrequest *);
+	bool (*req_match)(struct usb_function *, const struct usb_ctrlrequest *, bool);
+	void (*suspend)(struct usb_function *);
+	void (*resume)(struct usb_function *);
+	int (*get_status)(struct usb_function *);
+	int (*func_suspend)(struct usb_function *, u8);
+	bool func_suspended;
+	bool func_wakeup_armed;
+	struct list_head list;
+	unsigned long endpoints[1];
+	const struct usb_function_instance *fi;
+	unsigned int bind_deactivated: 1;
+};
+
+struct usb_composite_dev;
+
+struct usb_configuration {
+	const char *label;
+	struct usb_gadget_strings **strings;
+	const struct usb_descriptor_header **descriptors;
+	void (*unbind)(struct usb_configuration *);
+	int (*setup)(struct usb_configuration *, const struct usb_ctrlrequest *);
+	u8 bConfigurationValue;
+	u8 iConfiguration;
+	u8 bmAttributes;
+	u16 MaxPower;
+	struct usb_composite_dev *cdev;
+	struct list_head list;
+	struct list_head functions;
+	u8 next_interface_id;
+	unsigned int superspeed: 1;
+	unsigned int highspeed: 1;
+	unsigned int fullspeed: 1;
+	unsigned int superspeed_plus: 1;
+	struct usb_function *interface[16];
+};
+
+struct android_uevent_opts {
+	struct device *dev;
+	int device_id;
+	bool connected;
+	bool configured;
+	bool sw_connected;
+	struct work_struct work;
+	struct ida function_ida;
+};
+
+struct usb_composite_driver;
+
+struct usb_composite_dev {
+	struct usb_gadget *gadget;
+	struct usb_request *req;
+	struct usb_request *os_desc_req;
+	struct usb_configuration *config;
+	u8 qw_sign[14];
+	u8 b_vendor_code;
+	struct usb_configuration *os_desc_config;
+	unsigned int use_os_string: 1;
+	u16 bcd_webusb_version;
+	u8 b_webusb_vendor_code;
+	char landing_page[260];
+	unsigned int use_webusb: 1;
+	unsigned int suspended: 1;
+	struct usb_device_descriptor desc;
+	struct list_head configs;
+	struct list_head gstrings;
+	struct usb_composite_driver *driver;
+	u8 next_string_id;
+	char *def_manufacturer;
+	struct usb_string *usb_strings;
+	unsigned int deactivations;
+	int delayed_status;
+	spinlock_t lock;
+	struct android_uevent_opts android_opts;
+	unsigned int setup_pending: 1;
+	unsigned int os_desc_pending: 1;
+};
+
+struct usb_composite_driver {
+	const char *name;
+	const struct usb_device_descriptor *dev;
+	struct usb_gadget_strings **strings;
+	enum usb_device_speed max_speed;
+	unsigned int needs_serial: 1;
+	int (*bind)(struct usb_composite_dev *);
+	int (*unbind)(struct usb_composite_dev *);
+	void (*disconnect)(struct usb_composite_dev *);
+	void (*suspend)(struct usb_composite_dev *);
+	void (*resume)(struct usb_composite_dev *);
+	struct usb_gadget_driver gadget_driver;
+};
+
+struct usb_os_desc;
+
+struct usb_os_desc_table {
+	int if_id;
+	struct usb_os_desc *os_desc;
+};
+
+struct usb_os_desc {
+	char *ext_compat_id;
+	struct list_head ext_prop;
+	int ext_prop_len;
+	int ext_prop_count;
+	struct mutex *opts_mutex;
+	struct config_group group;
+	struct module *owner;
+};
+
+struct usb_function_driver;
+
+struct usb_function_instance {
+	struct config_group group;
+	struct list_head cfs_list;
+	struct usb_function_driver *fd;
+	int (*set_inst_name)(struct usb_function_instance *, const char *);
+	void (*free_func_inst)(struct usb_function_instance *);
+};
+
+struct usb_function_driver {
+	const char *name;
+	struct module *mod;
+	struct list_head list;
+	struct usb_function_instance * (*alloc_inst)();
+	struct usb_function * (*alloc_func)(struct usb_function_instance *);
+};
+
+enum {
+	USB_GADGET_MANUFACTURER_IDX = 0,
+	USB_GADGET_PRODUCT_IDX = 1,
+	USB_GADGET_SERIAL_IDX = 2,
+	USB_GADGET_FIRST_AVAIL_IDX = 3,
+};
+
+struct webusb_url_descriptor {
+	u8 bLength;
+	u8 bDescriptorType;
+	u8 bScheme;
+	u8 URL[252];
+};
+
+struct usb_gadget_string_container {
+	struct list_head list;
+	u8 *stash[0];
+};
+
+struct usb_webusb_cap_data {
+	__le16 bcdVersion;
+	u8 bVendorCode;
+	u8 iLandingPage;
+};
+
+struct usb_os_desc_ext_prop {
+	struct list_head entry;
+	u8 type;
+	int name_len;
+	char *name;
+	int data_len;
+	char *data;
+	struct config_item item;
+};
+
+struct usb_os_string {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 qwSignature[14];
+	__u8 bMS_VendorCode;
+	__u8 bPad;
+};
+
+struct usb_string_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	union {
+		__le16 legacy_padding;
+		struct {
+			struct {} __empty_wData;
+			__le16 wData[0];
+		};
+	};
+};
+
+struct usb_plat_dev_cap_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDevCapabilityType;
+	__u8 bReserved;
+	__u8 UUID[16];
+	__u8 CapabilityData[0];
+};
+
+struct usb_composite_overwrite {
+	u16 idVendor;
+	u16 idProduct;
+	u16 bcdDevice;
+	char *serial_number;
+	char *manufacturer;
+	char *product;
+};
+
+struct gadget_info {
+	struct config_group group;
+	struct config_group functions_group;
+	struct config_group configs_group;
+	struct config_group strings_group;
+	struct config_group os_desc_group;
+	struct config_group webusb_group;
+	struct mutex lock;
+	struct usb_gadget_strings *gstrings[3];
+	struct list_head string_list;
+	struct list_head available_func;
+	struct usb_composite_driver composite;
+	struct usb_composite_dev cdev;
+	bool use_os_desc;
+	char b_vendor_code;
+	char qw_sign[14];
+	bool use_webusb;
+	u16 bcd_webusb_version;
+	u8 b_webusb_vendor_code;
+	char landing_page[260];
+	spinlock_t spinlock;
+	bool unbind;
+};
+
+struct config_usb_cfg {
+	struct config_group group;
+	struct config_group strings_group;
+	struct list_head string_list;
+	struct usb_configuration c;
+	struct list_head func_list;
+	struct usb_gadget_strings *gstrings[3];
+};
+
+struct gadget_config_name {
+	struct usb_gadget_strings stringtab_dev;
+	struct usb_string strings;
+	char *configuration;
+	struct config_group group;
+	struct list_head list;
+};
+
+struct gadget_language {
+	struct usb_gadget_strings stringtab_dev;
+	struct usb_string strings[3];
+	char *manufacturer;
+	char *product;
+	char *serialnumber;
+	struct config_group group;
+	struct list_head list;
+	struct list_head gadget_strings;
+	unsigned int nstrings;
+};
+
+struct gadget_string {
+	struct config_item item;
+	struct list_head list;
+	char string[126];
+	struct usb_string usb_string;
+};
+
+struct usb_udc {
+	struct usb_gadget_driver *driver;
+	struct usb_gadget *gadget;
+	struct device dev;
+	struct list_head list;
+	bool vbus;
+	bool started;
+	bool allow_connect;
+	struct work_struct vbus_work;
+	struct mutex connect_lock;
+};
+
+typedef void (*btf_trace_usb_gadget_frame_number)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_wakeup)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_set_remote_wakeup)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_set_selfpowered)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_clear_selfpowered)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_vbus_connect)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_vbus_draw)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_vbus_disconnect)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_connect)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_disconnect)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_deactivate)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_gadget_activate)(void *, struct usb_gadget *, int);
+
+typedef void (*btf_trace_usb_ep_set_maxpacket_limit)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_enable)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_disable)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_set_halt)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_clear_halt)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_set_wedge)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_fifo_status)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_fifo_flush)(void *, struct usb_ep *, int);
+
+typedef void (*btf_trace_usb_ep_alloc_request)(void *, struct usb_ep *, struct usb_request *, int);
+
+typedef void (*btf_trace_usb_ep_free_request)(void *, struct usb_ep *, struct usb_request *, int);
+
+typedef void (*btf_trace_usb_ep_queue)(void *, struct usb_ep *, struct usb_request *, int);
+
+typedef void (*btf_trace_usb_ep_dequeue)(void *, struct usb_ep *, struct usb_request *, int);
+
+typedef void (*btf_trace_usb_gadget_giveback_request)(void *, struct usb_ep *, struct usb_request *, int);
+
+struct trace_event_raw_udc_log_gadget {
+	struct trace_entry ent;
+	enum usb_device_speed speed;
+	enum usb_device_speed max_speed;
+	enum usb_device_state state;
+	unsigned int mA;
+	unsigned int sg_supported;
+	unsigned int is_otg;
+	unsigned int is_a_peripheral;
+	unsigned int b_hnp_enable;
+	unsigned int a_hnp_support;
+	unsigned int hnp_polling_support;
+	unsigned int host_request_flag;
+	unsigned int quirk_ep_out_aligned_size;
+	unsigned int quirk_altset_not_supp;
+	unsigned int quirk_stall_not_supp;
+	unsigned int quirk_zlp_not_supp;
+	unsigned int is_selfpowered;
+	unsigned int deactivated;
+	unsigned int connected;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_udc_log_ep {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int maxpacket;
+	unsigned int maxpacket_limit;
+	unsigned int max_streams;
+	unsigned int mult;
+	unsigned int maxburst;
+	u8 address;
+	bool claimed;
+	bool enabled;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_udc_log_req {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int length;
+	unsigned int actual;
+	unsigned int num_sgs;
+	unsigned int num_mapped_sgs;
+	unsigned int stream_id;
+	unsigned int no_interrupt;
+	unsigned int zero;
+	unsigned int short_not_ok;
+	int status;
+	int ret;
+	struct usb_request *req;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_udc_log_ep {
+	u32 name;
+};
+
+struct trace_event_data_offsets_udc_log_req {
+	u32 name;
+};
+
+struct trace_event_data_offsets_udc_log_gadget {};
+
+struct f_serial_opts {
+	struct usb_function_instance func_inst;
+	u8 port_num;
+};
+
+struct usb_cdc_line_coding {
+	__le32 dwDTERate;
+	__u8 bCharFormat;
+	__u8 bParityType;
+	__u8 bDataBits;
+} __attribute__((packed));
+
+struct gs_port;
+
+struct gserial {
+	struct usb_function func;
+	struct gs_port *ioport;
+	struct usb_ep *in;
+	struct usb_ep *out;
+	struct usb_cdc_line_coding port_line_coding;
+	void (*connect)(struct gserial *);
+	void (*disconnect)(struct gserial *);
+	int (*send_break)(struct gserial *, int);
+};
+
+struct f_acm {
+	struct gserial port;
+	u8 ctrl_id;
+	u8 data_id;
+	u8 port_num;
+	u8 pending;
+	spinlock_t lock;
+	struct usb_ep *notify;
+	struct usb_request *notify_req;
+	struct usb_cdc_line_coding port_line_coding;
+	u16 port_handshake_bits;
+	u16 serial_state;
+};
+
+struct usb_cdc_notification {
+	__u8 bmRequestType;
+	__u8 bNotificationType;
+	__le16 wValue;
+	__le16 wIndex;
+	__le16 wLength;
+};
+
+struct portmaster {
+	struct mutex lock;
+	struct gs_port *port;
+};
+
+struct kfifo {
+	union {
+		struct __kfifo kfifo;
+		unsigned char *type;
+		const unsigned char *const_type;
+		char (*rectype)[0];
+		void *ptr;
+		const void *ptr_const;
+	};
+	unsigned char buf[0];
+};
+
+struct gs_port {
+	struct tty_port port;
+	spinlock_t port_lock;
+	struct gserial *port_usb;
+	u8 port_num;
+	struct list_head read_pool;
+	int read_started;
+	int read_allocated;
+	struct list_head read_queue;
+	unsigned int n_read;
+	struct delayed_work push;
+	struct list_head write_pool;
+	int write_started;
+	int write_allocated;
+	struct kfifo port_write_buf;
+	wait_queue_head_t drain_wait;
+	bool write_busy;
+	wait_queue_head_t close_wait;
+	bool suspended;
+	bool start_delayed;
+	struct usb_cdc_line_coding port_line_coding;
+};
+
+struct f_gser {
+	struct gserial port;
+	u8 data_id;
+	u8 port_num;
+};
+
+struct gether;
+
+struct eth_dev {
+	spinlock_t lock;
+	struct gether *port_usb;
+	struct net_device *net;
+	struct usb_gadget *gadget;
+	spinlock_t req_lock;
+	struct list_head tx_reqs;
+	struct list_head rx_reqs;
+	atomic_t tx_qlen;
+	struct sk_buff_head rx_frames;
+	unsigned int qmult;
+	unsigned int header_len;
+	struct sk_buff * (*wrap)(struct gether *, struct sk_buff *);
+	int (*unwrap)(struct gether *, struct sk_buff *, struct sk_buff_head *);
+	struct work_struct work;
+	unsigned long todo;
+	bool zlp;
+	bool no_skb_reserve;
+	bool ifname_set;
+	u8 host_mac[6];
+	u8 dev_mac[6];
+};
+
+struct gether {
+	struct usb_function func;
+	struct eth_dev *ioport;
+	struct usb_ep *in_ep;
+	struct usb_ep *out_ep;
+	bool is_zlp_ok;
+	u16 cdc_filter;
+	u32 header_len;
+	bool is_fixed;
+	u32 fixed_out_len;
+	u32 fixed_in_len;
+	bool supports_multi_frame;
+	struct sk_buff * (*wrap)(struct gether *, struct sk_buff *);
+	int (*unwrap)(struct gether *, struct sk_buff *, struct sk_buff_head *);
+	void (*open)(struct gether *);
+	void (*close)(struct gether *);
+	bool is_suspend;
+};
+
+struct ndp_parser_opts {
+	u32 nth_sign;
+	u32 ndp_sign;
+	unsigned int nth_size;
+	unsigned int ndp_size;
+	unsigned int dpe_size;
+	unsigned int ndplen_align;
+	unsigned int dgram_item_len;
+	unsigned int block_length;
+	unsigned int ndp_index;
+	unsigned int reserved1;
+	unsigned int reserved2;
+	unsigned int next_ndp_index;
+};
+
+struct usb_cdc_ncm_ntb_parameters {
+	__le16 wLength;
+	__le16 bmNtbFormatsSupported;
+	__le32 dwNtbInMaxSize;
+	__le16 wNdpInDivisor;
+	__le16 wNdpInPayloadRemainder;
+	__le16 wNdpInAlignment;
+	__le16 wPadding1;
+	__le32 dwNtbOutMaxSize;
+	__le16 wNdpOutDivisor;
+	__le16 wNdpOutPayloadRemainder;
+	__le16 wNdpOutAlignment;
+	__le16 wNtbOutMaxDatagrams;
+};
+
+enum ncm_notify_state {
+	NCM_NOTIFY_NONE = 0,
+	NCM_NOTIFY_CONNECT = 1,
+	NCM_NOTIFY_SPEED = 2,
+};
+
+struct f_ncm_opts {
+	struct usb_function_instance func_inst;
+	struct net_device *net;
+	bool bound;
+	struct config_group *ncm_interf_group;
+	struct usb_os_desc ncm_os_desc;
+	char ncm_ext_compat_id[16];
+	struct mutex lock;
+	int refcnt;
+};
+
+struct f_ncm {
+	struct gether port;
+	u8 ctrl_id;
+	u8 data_id;
+	char ethaddr[14];
+	struct usb_ep *notify;
+	struct usb_request *notify_req;
+	u8 notify_state;
+	atomic_t notify_count;
+	bool is_open;
+	const struct ndp_parser_opts *parser_opts;
+	bool is_crc;
+	u32 ndp_sign;
+	spinlock_t lock;
+	struct net_device *netdev;
+	struct sk_buff *skb_tx_data;
+	struct sk_buff *skb_tx_ndp;
+	u16 ndp_dgram_count;
+	struct hrtimer task_timer;
+};
+
+enum ecm_notify_state {
+	ECM_NOTIFY_NONE = 0,
+	ECM_NOTIFY_CONNECT = 1,
+	ECM_NOTIFY_SPEED = 2,
+};
+
+struct f_ecm_opts {
+	struct usb_function_instance func_inst;
+	struct net_device *net;
+	bool bound;
+	struct mutex lock;
+	int refcnt;
+};
+
+struct f_ecm {
+	struct gether port;
+	u8 ctrl_id;
+	u8 data_id;
+	char ethaddr[14];
+	struct usb_ep *notify;
+	struct usb_request *notify_req;
+	u8 notify_state;
+	atomic_t notify_count;
+	bool is_open;
+};
+
+struct f_eem_opts {
+	struct usb_function_instance func_inst;
+	struct net_device *net;
+	bool bound;
+	struct mutex lock;
+	int refcnt;
+};
+
+struct f_eem {
+	struct gether port;
+	u8 ctrl_id;
+};
+
+struct in_context {
+	struct sk_buff *skb;
+	struct usb_ep *ep;
+};
+
+enum fsg_buffer_state {
+	BUF_STATE_SENDING = -2,
+	BUF_STATE_RECEIVING = -1,
+	BUF_STATE_EMPTY = 0,
+	BUF_STATE_FULL = 1,
+};
+
+enum fsg_state {
+	FSG_STATE_NORMAL = 0,
+	FSG_STATE_ABORT_BULK_OUT = 1,
+	FSG_STATE_PROTOCOL_RESET = 2,
+	FSG_STATE_CONFIG_CHANGE = 3,
+	FSG_STATE_EXIT = 4,
+	FSG_STATE_TERMINATED = 5,
+};
+
+enum data_direction {
+	DATA_DIR_UNKNOWN = 0,
+	DATA_DIR_FROM_HOST = 1,
+	DATA_DIR_TO_HOST = 2,
+	DATA_DIR_NONE = 3,
+};
+
+enum {
+	FSG_STRING_INTERFACE = 0,
+};
+
+struct fsg_lun {
+	struct file *filp;
+	loff_t file_length;
+	loff_t num_sectors;
+	unsigned int initially_ro: 1;
+	unsigned int ro: 1;
+	unsigned int removable: 1;
+	unsigned int cdrom: 1;
+	unsigned int prevent_medium_removal: 1;
+	unsigned int registered: 1;
+	unsigned int info_valid: 1;
+	unsigned int nofua: 1;
+	u32 sense_data;
+	u32 sense_data_info;
+	u32 unit_attention_data;
+	unsigned int blkbits;
+	unsigned int blksize;
+	struct device dev;
+	const char *name;
+	const char **name_pfx;
+	char inquiry_string[29];
+};
+
+struct fsg_lun_opts {
+	struct config_group group;
+	struct fsg_lun *lun;
+	int lun_id;
+};
+
+struct fsg_common;
+
+struct fsg_opts {
+	struct fsg_common *common;
+	struct usb_function_instance func_inst;
+	struct fsg_lun_opts lun0;
+	struct config_group *default_groups[2];
+	bool no_configfs;
+	struct mutex lock;
+	int refcnt;
+};
+
+struct fsg_dev;
+
+struct fsg_buffhd;
+
+struct fsg_common {
+	struct usb_gadget *gadget;
+	struct usb_composite_dev *cdev;
+	struct fsg_dev *fsg;
+	wait_queue_head_t io_wait;
+	wait_queue_head_t fsg_wait;
+	struct rw_semaphore filesem;
+	spinlock_t lock;
+	struct usb_ep *ep0;
+	struct usb_request *ep0req;
+	unsigned int ep0_req_tag;
+	struct fsg_buffhd *next_buffhd_to_fill;
+	struct fsg_buffhd *next_buffhd_to_drain;
+	struct fsg_buffhd *buffhds;
+	unsigned int fsg_num_buffers;
+	int cmnd_size;
+	u8 cmnd[16];
+	unsigned int lun;
+	struct fsg_lun *luns[16];
+	struct fsg_lun *curlun;
+	unsigned int bulk_out_maxpacket;
+	enum fsg_state state;
+	unsigned int exception_req_tag;
+	void *exception_arg;
+	enum data_direction data_dir;
+	u32 data_size;
+	u32 data_size_from_cmnd;
+	u32 tag;
+	u32 residue;
+	u32 usb_amount_left;
+	unsigned int can_stall: 1;
+	unsigned int free_storage_on_release: 1;
+	unsigned int phase_error: 1;
+	unsigned int short_packet_received: 1;
+	unsigned int bad_lun_okay: 1;
+	unsigned int running: 1;
+	unsigned int sysfs: 1;
+	struct completion thread_notifier;
+	struct task_struct *thread_task;
+	void *private_data;
+	char inquiry_string[29];
+};
+
+struct fsg_dev {
+	struct usb_function function;
+	struct usb_gadget *gadget;
+	struct fsg_common *common;
+	u16 interface_number;
+	unsigned int bulk_in_enabled: 1;
+	unsigned int bulk_out_enabled: 1;
+	unsigned long atomic_bitflags;
+	struct usb_ep *bulk_in;
+	struct usb_ep *bulk_out;
+};
+
+struct fsg_buffhd {
+	void *buf;
+	enum fsg_buffer_state state;
+	struct fsg_buffhd *next;
+	unsigned int bulk_out_intended_length;
+	struct usb_request *inreq;
+	struct usb_request *outreq;
+};
+
+struct fsg_lun_config {
+	const char *filename;
+	char ro;
+	char removable;
+	char cdrom;
+	char nofua;
+	char inquiry_string[29];
+};
+
+struct fsg_operations;
+
+struct fsg_config {
+	unsigned int nluns;
+	struct fsg_lun_config luns[16];
+	const struct fsg_operations *ops;
+	void *private_data;
+	const char *vendor_name;
+	const char *product_name;
+	char can_stall;
+	unsigned int fsg_num_buffers;
+};
+
+struct fsg_module_parameters {
+	char *file[16];
+	bool ro[16];
+	bool removable[16];
+	bool cdrom[16];
+	bool nofua[16];
+	unsigned int file_count;
+	unsigned int ro_count;
+	unsigned int removable_count;
+	unsigned int cdrom_count;
+	unsigned int nofua_count;
+	unsigned int luns;
+	bool stall;
+};
+
+enum ffs_state {
+	FFS_READ_DESCRIPTORS = 0,
+	FFS_READ_STRINGS = 1,
+	FFS_ACTIVE = 2,
+	FFS_DEACTIVATED = 3,
+	FFS_CLOSING = 4,
+};
+
+enum ffs_setup_state {
+	FFS_NO_SETUP = 0,
+	FFS_SETUP_PENDING = 1,
+	FFS_SETUP_CANCELLED = 2,
+};
+
+enum {
+	Opt_no_disconnect = 0,
+	Opt_rmode = 1,
+	Opt_fmode = 2,
+	Opt_mode___6 = 3,
+	Opt_uid___6 = 4,
+	Opt_gid___7 = 5,
+};
+
+enum usb_functionfs_event_type {
+	FUNCTIONFS_BIND = 0,
+	FUNCTIONFS_UNBIND = 1,
+	FUNCTIONFS_ENABLE = 2,
+	FUNCTIONFS_DISABLE = 3,
+	FUNCTIONFS_SETUP = 4,
+	FUNCTIONFS_SUSPEND = 5,
+	FUNCTIONFS_RESUME = 6,
+};
+
+enum {
+	FUNCTIONFS_DESCRIPTORS_MAGIC = 1,
+	FUNCTIONFS_STRINGS_MAGIC = 2,
+	FUNCTIONFS_DESCRIPTORS_MAGIC_V2 = 3,
+};
+
+enum functionfs_flags {
+	FUNCTIONFS_HAS_FS_DESC = 1,
+	FUNCTIONFS_HAS_HS_DESC = 2,
+	FUNCTIONFS_HAS_SS_DESC = 4,
+	FUNCTIONFS_HAS_MS_OS_DESC = 8,
+	FUNCTIONFS_VIRTUAL_ADDR = 16,
+	FUNCTIONFS_EVENTFD = 32,
+	FUNCTIONFS_ALL_CTRL_RECIP = 64,
+	FUNCTIONFS_CONFIG0_SETUP = 128,
+};
+
+enum ffs_entity_type {
+	FFS_DESCRIPTOR = 0,
+	FFS_INTERFACE = 1,
+	FFS_STRING = 2,
+	FFS_ENDPOINT = 3,
+};
+
+enum ffs_os_desc_type {
+	FFS_OS_DESC = 0,
+	FFS_OS_DESC_EXT_COMPAT = 1,
+	FFS_OS_DESC_EXT_PROP = 2,
+};
+
+struct ffs_data;
+
+struct f_fs_opts;
+
+struct ffs_dev {
+	struct ffs_data *ffs_data;
+	struct f_fs_opts *opts;
+	struct list_head entry;
+	char name[41];
+	bool mounted;
+	bool desc_ready;
+	bool single;
+	int (*ffs_ready_callback)(struct ffs_data *);
+	void (*ffs_closed_callback)(struct ffs_data *);
+	void * (*ffs_acquire_dev_callback)(struct ffs_dev *);
+	void (*ffs_release_dev_callback)(struct ffs_dev *);
+};
+
+struct ffs_file_perms {
+	umode_t mode;
+	kuid_t uid;
+	kgid_t gid;
+};
+
+struct ffs_function;
+
+struct ffs_epfile;
+
+struct ffs_data {
+	struct usb_gadget *gadget;
+	struct mutex mutex;
+	spinlock_t eps_lock;
+	struct usb_request *ep0req;
+	struct completion ep0req_completion;
+	refcount_t ref;
+	atomic_t opened;
+	enum ffs_state state;
+	enum ffs_setup_state setup_state;
+	struct {
+		u8 types[4];
+		unsigned short count;
+		unsigned short can_stall;
+		struct usb_ctrlrequest setup;
+		wait_queue_head_t waitq;
+	} ev;
+	unsigned long flags;
+	wait_queue_head_t wait;
+	struct ffs_function *func;
+	const char *dev_name;
+	void *private_data;
+	const void *raw_descs_data;
+	const void *raw_descs;
+	unsigned int raw_descs_length;
+	unsigned int fs_descs_count;
+	unsigned int hs_descs_count;
+	unsigned int ss_descs_count;
+	unsigned int ms_os_descs_count;
+	unsigned int ms_os_descs_ext_prop_count;
+	unsigned int ms_os_descs_ext_prop_name_len;
+	unsigned int ms_os_descs_ext_prop_data_len;
+	void *ms_os_descs_ext_prop_avail;
+	void *ms_os_descs_ext_prop_name_avail;
+	void *ms_os_descs_ext_prop_data_avail;
+	unsigned int user_flags;
+	u8 eps_addrmap[31];
+	unsigned short strings_count;
+	unsigned short interfaces_count;
+	unsigned short eps_count;
+	unsigned short _pad1;
+	const void *raw_strings;
+	struct usb_gadget_strings **stringtabs;
+	struct super_block *sb;
+	struct ffs_file_perms file_perms;
+	struct eventfd_ctx *ffs_eventfd;
+	struct workqueue_struct *io_completion_wq;
+	bool no_disconnect;
+	struct work_struct reset_work;
+	struct ffs_epfile *epfiles;
+};
+
+struct ffs_ep;
+
+struct ffs_function {
+	struct usb_configuration *conf;
+	struct usb_gadget *gadget;
+	struct ffs_data *ffs;
+	struct ffs_ep *eps;
+	u8 eps_revmap[16];
+	short *interfaces_nums;
+	struct usb_function function;
+};
+
+struct ffs_ep {
+	struct usb_ep *ep;
+	struct usb_request *req;
+	struct usb_endpoint_descriptor *descs[3];
+	u8 num;
+};
+
+struct ffs_buffer;
+
+struct ffs_epfile {
+	struct mutex mutex;
+	struct ffs_data *ffs;
+	struct ffs_ep *ep;
+	struct dentry *dentry;
+	struct ffs_buffer *read_buffer;
+	char name[5];
+	unsigned char in;
+	unsigned char isoc;
+	unsigned char _pad;
+};
+
+struct ffs_buffer {
+	size_t length;
+	char *data;
+	char storage[0];
+};
+
+struct f_fs_opts {
+	struct usb_function_instance func_inst;
+	struct ffs_dev *dev;
+	unsigned int refcnt;
+	bool no_configfs;
+};
+
+struct ffs_io_data {
+	bool aio;
+	bool read;
+	struct kiocb *kiocb;
+	struct iov_iter data;
+	const void *to_free;
+	char *buf;
+	struct mm_struct *mm;
+	struct work_struct work;
+	struct usb_ep *ep;
+	struct usb_request *req;
+	struct sg_table sgt;
+	bool use_sg;
+	struct ffs_data *ffs;
+	int status;
+	struct completion done;
+};
+
+typedef int (*ffs_entity_callback)(enum ffs_entity_type, u8 *, struct usb_descriptor_header *, void *);
+
+struct ffs_desc_helper {
+	struct ffs_data *ffs;
+	unsigned int interfaces_count;
+	unsigned int eps_count;
+};
+
+struct usb_os_desc_header {
+	__u8 interface;
+	__le32 dwLength;
+	__le16 bcdVersion;
+	__le16 wIndex;
+	union {
+		struct {
+			__u8 bCount;
+			__u8 Reserved;
+		};
+		__le16 wCount;
+	};
+} __attribute__((packed));
+
+typedef int (*ffs_os_desc_callback)(enum ffs_os_desc_type, struct usb_os_desc_header *, void *, unsigned int, void *);
+
+struct usb_ext_prop_desc {
+	__le32 dwSize;
+	__le32 dwPropertyDataType;
+	__le16 wPropertyNameLength;
+} __attribute__((packed));
+
+struct usb_ext_compat_desc {
+	__u8 bFirstInterfaceNumber;
+	__u8 Reserved1;
+	__u8 CompatibleID[8];
+	__u8 SubCompatibleID[8];
+	__u8 Reserved2[6];
+};
+
+struct ffs_sb_fill_data {
+	struct ffs_file_perms perms;
+	umode_t root_mode;
+	const char *dev_name;
+	bool no_disconnect;
+	struct ffs_data *ffs_data;
+};
+
+struct usb_functionfs_event {
+	union {
+		struct usb_ctrlrequest setup;
+	} u;
+	__u8 type;
+	__u8 _pad[3];
+};
+
+typedef unsigned long snd_pcm_uframes_t;
+
+struct snd_pcm_substream;
+
+struct snd_pcm_hw_params;
+
+struct snd_pcm_audio_tstamp_config;
+
+struct snd_pcm_audio_tstamp_report;
+
+struct snd_pcm_ops {
+	int (*open)(struct snd_pcm_substream *);
+	int (*close)(struct snd_pcm_substream *);
+	int (*ioctl)(struct snd_pcm_substream *, unsigned int, void *);
+	int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
+	int (*hw_free)(struct snd_pcm_substream *);
+	int (*prepare)(struct snd_pcm_substream *);
+	int (*trigger)(struct snd_pcm_substream *, int);
+	int (*sync_stop)(struct snd_pcm_substream *);
+	snd_pcm_uframes_t (*pointer)(struct snd_pcm_substream *);
+	int (*get_time_info)(struct snd_pcm_substream *, struct timespec64 *, struct timespec64 *, struct snd_pcm_audio_tstamp_config *, struct snd_pcm_audio_tstamp_report *);
+	int (*fill_silence)(struct snd_pcm_substream *, int, unsigned long, unsigned long);
+	int (*copy)(struct snd_pcm_substream *, int, unsigned long, struct iov_iter *, unsigned long);
+	struct page * (*page)(struct snd_pcm_substream *, unsigned long);
+	int (*mmap)(struct snd_pcm_substream *, struct vm_area_struct *);
+	int (*ack)(struct snd_pcm_substream *);
+	u64 android_kabi_reserved1;
+};
+
+struct snd_dma_device {
+	int type;
+	enum dma_data_direction dir;
+	bool need_sync;
+	struct device *dev;
+};
+
+struct snd_dma_buffer {
+	struct snd_dma_device dev;
+	unsigned char *area;
+	dma_addr_t addr;
+	size_t bytes;
+	void *private_data;
+};
+
+struct snd_pcm_group {
+	spinlock_t lock;
+	struct mutex mutex;
+	struct list_head substreams;
+	refcount_t refs;
+};
+
+struct snd_pcm;
+
+struct snd_pcm_str;
+
+struct snd_pcm_runtime;
+
+struct snd_timer;
+
+struct snd_pcm_substream {
+	struct snd_pcm *pcm;
+	struct snd_pcm_str *pstr;
+	void *private_data;
+	int number;
+	char name[32];
+	int stream;
+	struct pm_qos_request latency_pm_qos_req;
+	size_t buffer_bytes_max;
+	struct snd_dma_buffer dma_buffer;
+	size_t dma_max;
+	const struct snd_pcm_ops *ops;
+	struct snd_pcm_runtime *runtime;
+	struct snd_timer *timer;
+	unsigned int timer_running: 1;
+	long wait_time;
+	struct snd_pcm_substream *next;
+	struct list_head link_list;
+	struct snd_pcm_group self_group;
+	struct snd_pcm_group *group;
+	int ref_count;
+	atomic_t mmap_count;
+	unsigned int f_flags;
+	void (*pcm_release)(struct snd_pcm_substream *);
+	struct pid *pid;
+	unsigned int hw_opened: 1;
+	unsigned int managed_buffer_alloc: 1;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_kcontrol;
+
+struct snd_pcm_str {
+	int stream;
+	struct snd_pcm *pcm;
+	unsigned int substream_count;
+	unsigned int substream_opened;
+	struct snd_pcm_substream *substream;
+	struct snd_kcontrol *chmap_kctl;
+	struct device *dev;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_card;
+
+struct snd_pcm {
+	struct snd_card *card;
+	struct list_head list;
+	int device;
+	unsigned int info_flags;
+	unsigned short dev_class;
+	unsigned short dev_subclass;
+	char id[64];
+	char name[80];
+	struct snd_pcm_str streams[2];
+	struct mutex open_mutex;
+	wait_queue_head_t open_wait;
+	void *private_data;
+	void (*private_free)(struct snd_pcm *);
+	bool internal;
+	bool nonatomic;
+	bool no_device_suspend;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_shutdown_f_ops;
+
+struct snd_info_entry;
+
+struct snd_card {
+	int number;
+	char id[16];
+	char driver[16];
+	char shortname[32];
+	char longname[80];
+	char irq_descr[32];
+	char mixername[80];
+	char components[128];
+	struct module *module;
+	void *private_data;
+	void (*private_free)(struct snd_card *);
+	struct list_head devices;
+	struct device *ctl_dev;
+	unsigned int last_numid;
+	struct rw_semaphore controls_rwsem;
+	rwlock_t ctl_files_rwlock;
+	int controls_count;
+	size_t user_ctl_alloc_size;
+	struct list_head controls;
+	struct list_head ctl_files;
+	struct xarray ctl_numids;
+	struct xarray ctl_hash;
+	bool ctl_hash_collision;
+	struct snd_info_entry *proc_root;
+	struct proc_dir_entry *proc_root_link;
+	struct list_head files_list;
+	struct snd_shutdown_f_ops *s_f_ops;
+	spinlock_t files_lock;
+	int shutdown;
+	struct completion *release_completion;
+	struct device *dev;
+	struct device card_dev;
+	const struct attribute_group *dev_groups[4];
+	bool registered;
+	bool managed;
+	bool releasing;
+	int sync_irq;
+	wait_queue_head_t remove_sleep;
+	size_t total_pcm_alloc_bytes;
+	struct mutex memory_mutex;
+	unsigned int power_state;
+	atomic_t power_ref;
+	wait_queue_head_t power_sleep;
+	wait_queue_head_t power_ref_sleep;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef int snd_kcontrol_tlv_rw_t(struct snd_kcontrol *, int, unsigned int, unsigned int __attribute__((btf_type_tag("user"))) *);
+
+typedef int snd_ctl_elem_iface_t;
+
+struct snd_ctl_elem_id {
+	unsigned int numid;
+	snd_ctl_elem_iface_t iface;
+	unsigned int device;
+	unsigned int subdevice;
+	unsigned char name[44];
+	unsigned int index;
+};
+
+struct snd_ctl_elem_info;
+
+typedef int snd_kcontrol_info_t(struct snd_kcontrol *, struct snd_ctl_elem_info *);
+
+struct snd_ctl_elem_value;
+
+typedef int snd_kcontrol_get_t(struct snd_kcontrol *, struct snd_ctl_elem_value *);
+
+typedef int snd_kcontrol_put_t(struct snd_kcontrol *, struct snd_ctl_elem_value *);
+
+struct snd_ctl_file;
+
+struct snd_kcontrol_volatile {
+	struct snd_ctl_file *owner;
+	unsigned int access;
+};
+
+struct snd_kcontrol {
+	struct list_head list;
+	struct snd_ctl_elem_id id;
+	unsigned int count;
+	snd_kcontrol_info_t *info;
+	snd_kcontrol_get_t *get;
+	snd_kcontrol_put_t *put;
+	union {
+		snd_kcontrol_tlv_rw_t *c;
+		const unsigned int *p;
+	} tlv;
+	unsigned long private_value;
+	void *private_data;
+	void (*private_free)(struct snd_kcontrol *);
+	struct snd_kcontrol_volatile vd[0];
+};
+
+typedef int snd_ctl_elem_type_t;
+
+struct snd_ctl_elem_info {
+	struct snd_ctl_elem_id id;
+	snd_ctl_elem_type_t type;
+	unsigned int access;
+	unsigned int count;
+	__kernel_pid_t owner;
+	union {
+		struct {
+			long min;
+			long max;
+			long step;
+		} integer;
+		struct {
+			long long min;
+			long long max;
+			long long step;
+		} integer64;
+		struct {
+			unsigned int items;
+			unsigned int item;
+			char name[64];
+			__u64 names_ptr;
+			unsigned int names_length;
+		} enumerated;
+		unsigned char reserved[128];
+	} value;
+	unsigned char reserved[64];
+};
+
+struct snd_aes_iec958 {
+	unsigned char status[24];
+	unsigned char subcode[147];
+	unsigned char pad;
+	unsigned char dig_subframe[4];
+};
+
+struct snd_ctl_elem_value {
+	struct snd_ctl_elem_id id;
+	unsigned int indirect: 1;
+	union {
+		union {
+			long value[128];
+			long *value_ptr;
+		} integer;
+		union {
+			long long value[64];
+			long long *value_ptr;
+		} integer64;
+		union {
+			unsigned int item[128];
+			unsigned int *item_ptr;
+		} enumerated;
+		union {
+			unsigned char data[512];
+			unsigned char *data_ptr;
+		} bytes;
+		struct snd_aes_iec958 iec958;
+	} value;
+	unsigned char reserved[128];
+};
+
+struct snd_fasync;
+
+struct snd_ctl_file {
+	struct list_head list;
+	struct snd_card *card;
+	struct pid *pid;
+	int preferred_subdevice[2];
+	wait_queue_head_t change_sleep;
+	spinlock_t read_lock;
+	struct snd_fasync *fasync;
+	int subscribed;
+	struct list_head events;
+};
+
+typedef int snd_pcm_state_t;
+
+typedef long snd_pcm_sframes_t;
+
+typedef int snd_pcm_access_t;
+
+typedef int snd_pcm_format_t;
+
+typedef int snd_pcm_subformat_t;
+
+union snd_pcm_sync_id {
+	unsigned char id[16];
+	unsigned short id16[8];
+	unsigned int id32[4];
+};
+
+struct snd_pcm_hardware {
+	unsigned int info;
+	u64 formats;
+	unsigned int rates;
+	unsigned int rate_min;
+	unsigned int rate_max;
+	unsigned int channels_min;
+	unsigned int channels_max;
+	size_t buffer_bytes_max;
+	size_t period_bytes_min;
+	size_t period_bytes_max;
+	unsigned int periods_min;
+	unsigned int periods_max;
+	size_t fifo_size;
+};
+
+struct snd_mask {
+	__u32 bits[8];
+};
+
+struct snd_interval {
+	unsigned int min;
+	unsigned int max;
+	unsigned int openmin: 1;
+	unsigned int openmax: 1;
+	unsigned int integer: 1;
+	unsigned int empty: 1;
+};
+
+struct snd_pcm_hw_rule;
+
+struct snd_pcm_hw_constraints {
+	struct snd_mask masks[3];
+	struct snd_interval intervals[12];
+	unsigned int rules_num;
+	unsigned int rules_all;
+	struct snd_pcm_hw_rule *rules;
+};
+
+struct snd_pcm_audio_tstamp_config {
+	u32 type_requested: 4;
+	u32 report_delay: 1;
+};
+
+struct snd_pcm_audio_tstamp_report {
+	u32 valid: 1;
+	u32 actual_type: 4;
+	u32 accuracy_report: 1;
+	u32 accuracy;
+};
+
+struct snd_pcm_mmap_status;
+
+struct snd_pcm_mmap_control;
+
+struct snd_pcm_runtime {
+	snd_pcm_state_t state;
+	snd_pcm_state_t suspended_state;
+	struct snd_pcm_substream *trigger_master;
+	struct timespec64 trigger_tstamp;
+	bool trigger_tstamp_latched;
+	int overrange;
+	snd_pcm_uframes_t avail_max;
+	snd_pcm_uframes_t hw_ptr_base;
+	snd_pcm_uframes_t hw_ptr_interrupt;
+	unsigned long hw_ptr_jiffies;
+	unsigned long hw_ptr_buffer_jiffies;
+	snd_pcm_sframes_t delay;
+	u64 hw_ptr_wrap;
+	snd_pcm_access_t access;
+	snd_pcm_format_t format;
+	snd_pcm_subformat_t subformat;
+	unsigned int rate;
+	unsigned int channels;
+	snd_pcm_uframes_t period_size;
+	unsigned int periods;
+	snd_pcm_uframes_t buffer_size;
+	snd_pcm_uframes_t min_align;
+	size_t byte_align;
+	unsigned int frame_bits;
+	unsigned int sample_bits;
+	unsigned int info;
+	unsigned int rate_num;
+	unsigned int rate_den;
+	unsigned int no_period_wakeup: 1;
+	int tstamp_mode;
+	unsigned int period_step;
+	snd_pcm_uframes_t start_threshold;
+	snd_pcm_uframes_t stop_threshold;
+	snd_pcm_uframes_t silence_threshold;
+	snd_pcm_uframes_t silence_size;
+	snd_pcm_uframes_t boundary;
+	snd_pcm_uframes_t silence_start;
+	snd_pcm_uframes_t silence_filled;
+	union snd_pcm_sync_id sync;
+	struct snd_pcm_mmap_status *status;
+	struct snd_pcm_mmap_control *control;
+	snd_pcm_uframes_t twake;
+	wait_queue_head_t sleep;
+	wait_queue_head_t tsleep;
+	struct snd_fasync *fasync;
+	bool stop_operating;
+	struct mutex buffer_mutex;
+	atomic_t buffer_accessing;
+	void *private_data;
+	void (*private_free)(struct snd_pcm_runtime *);
+	struct snd_pcm_hardware hw;
+	struct snd_pcm_hw_constraints hw_constraints;
+	unsigned int timer_resolution;
+	int tstamp_type;
+	unsigned char *dma_area;
+	dma_addr_t dma_addr;
+	size_t dma_bytes;
+	struct snd_dma_buffer *dma_buffer_p;
+	unsigned int buffer_changed: 1;
+	struct snd_pcm_audio_tstamp_config audio_tstamp_config;
+	struct snd_pcm_audio_tstamp_report audio_tstamp_report;
+	struct timespec64 driver_tstamp;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef char __pad_before_uframe[0];
+
+typedef char __pad_after_uframe[0];
+
+struct snd_pcm_mmap_status {
+	snd_pcm_state_t state;
+	__u32 pad1;
+	__pad_before_uframe __pad1;
+	snd_pcm_uframes_t hw_ptr;
+	__pad_after_uframe __pad2;
+	struct __kernel_timespec tstamp;
+	snd_pcm_state_t suspended_state;
+	__u32 pad3;
+	struct __kernel_timespec audio_tstamp;
+};
+
+struct snd_pcm_mmap_control {
+	__pad_before_uframe __pad1;
+	snd_pcm_uframes_t appl_ptr;
+	__pad_before_uframe __pad2;
+	__pad_before_uframe __pad3;
+	snd_pcm_uframes_t avail_min;
+	__pad_after_uframe __pad4;
+};
+
+typedef int (*snd_pcm_hw_rule_func_t)(struct snd_pcm_hw_params *, struct snd_pcm_hw_rule *);
+
+struct snd_pcm_hw_rule {
+	unsigned int cond;
+	int var;
+	int deps[5];
+	snd_pcm_hw_rule_func_t func;
+	void *private;
+};
+
+struct snd_pcm_hw_params {
+	unsigned int flags;
+	struct snd_mask masks[3];
+	struct snd_mask mres[5];
+	struct snd_interval intervals[12];
+	struct snd_interval ires[9];
+	unsigned int rmask;
+	unsigned int cmask;
+	unsigned int info;
+	unsigned int msbits;
+	unsigned int rate_num;
+	unsigned int rate_den;
+	snd_pcm_uframes_t fifo_size;
+	unsigned char reserved[64];
+};
+
+struct snd_kcontrol_new {
+	snd_ctl_elem_iface_t iface;
+	unsigned int device;
+	unsigned int subdevice;
+	const char *name;
+	unsigned int index;
+	unsigned int access;
+	unsigned int count;
+	snd_kcontrol_info_t *info;
+	snd_kcontrol_get_t *get;
+	snd_kcontrol_put_t *put;
+	union {
+		snd_kcontrol_tlv_rw_t *c;
+		const unsigned int *p;
+	} tlv;
+	unsigned long private_value;
+};
+
+enum {
+	SNDRV_PCM_STREAM_PLAYBACK = 0,
+	SNDRV_PCM_STREAM_CAPTURE = 1,
+	SNDRV_PCM_STREAM_LAST = 1,
+};
+
+enum {
+	UAC_FBACK_CTRL = 0,
+	UAC_P_PITCH_CTRL = 1,
+	UAC_MUTE_CTRL = 2,
+	UAC_VOLUME_CTRL = 3,
+	UAC_RATE_CTRL = 4,
+};
+
+struct snd_uac_chip;
+
+struct uac_rtd_params {
+	struct snd_uac_chip *uac;
+	bool ep_enabled;
+	struct snd_pcm_substream *ss;
+	ssize_t hw_ptr;
+	void *rbuf;
+	unsigned int pitch;
+	unsigned int max_psize;
+	struct usb_request **reqs;
+	struct usb_request *req_fback;
+	bool fb_ep_enabled;
+	int fu_id;
+	struct snd_kcontrol *snd_kctl_volume;
+	struct snd_kcontrol *snd_kctl_mute;
+	s16 volume_min;
+	s16 volume_max;
+	s16 volume_res;
+	s16 volume;
+	int mute;
+	struct snd_kcontrol *snd_kctl_rate;
+	int srate;
+	int active;
+	spinlock_t lock;
+};
+
+struct g_audio;
+
+struct snd_uac_chip {
+	struct g_audio *audio_dev;
+	struct uac_rtd_params p_prm;
+	struct uac_rtd_params c_prm;
+	struct snd_card *card;
+	struct snd_pcm *pcm;
+	unsigned long long p_residue_mil;
+	unsigned int p_interval;
+	unsigned int p_framesize;
+};
+
+struct uac_fu_params {
+	int id;
+	bool mute_present;
+	bool volume_present;
+	s16 volume_min;
+	s16 volume_max;
+	s16 volume_res;
+};
+
+struct uac_params {
+	int p_chmask;
+	int p_srates[10];
+	int p_ssize;
+	struct uac_fu_params p_fu;
+	int c_chmask;
+	int c_srates[10];
+	int c_ssize;
+	struct uac_fu_params c_fu;
+	int req_number;
+	int fb_max;
+};
+
+struct g_audio {
+	struct usb_function func;
+	struct usb_gadget *gadget;
+	struct usb_ep *in_ep;
+	struct usb_ep *out_ep;
+	struct usb_ep *in_ep_fback;
+	unsigned int in_ep_maxpsize;
+	unsigned int out_ep_maxpsize;
+	int (*notify)(struct g_audio *, int, int);
+	struct snd_uac_chip *uac;
+	struct uac_params params;
+};
+
+typedef int snd_pcm_hw_param_t;
+
+struct uac2_feature_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__u8 bmaControls[0];
+};
+
+struct uac_clock_source_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bmAttributes;
+	__u8 bmControls;
+	__u8 bAssocTerminal;
+	__u8 iClockSource;
+};
+
+struct uac2_input_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bCSourceID;
+	__u8 bNrChannels;
+	__le32 bmChannelConfig;
+	__u8 iChannelNames;
+	__le16 bmControls;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uac2_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 bCSourceID;
+	__le16 bmControls;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uac2_as_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalLink;
+	__u8 bmControls;
+	__u8 bFormatType;
+	__le32 bmFormats;
+	__u8 bNrChannels;
+	__le32 bmChannelConfig;
+	__u8 iChannelNames;
+} __attribute__((packed));
+
+struct uac2_format_type_i_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bSubslotSize;
+	__u8 bBitResolution;
+};
+
+struct uac2_ac_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 bcdADC;
+	__u8 bCategory;
+	__le16 wTotalLength;
+	__u8 bmControls;
+} __attribute__((packed));
+
+struct uac2_iso_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bmAttributes;
+	__u8 bmControls;
+	__u8 bLockDelayUnits;
+	__le16 wLockDelay;
+};
+
+enum {
+	STR_ASSOC = 0,
+	STR_IF_CTRL = 1,
+	STR_CLKSRC_IN = 2,
+	STR_CLKSRC_OUT = 3,
+	STR_USB_IT = 4,
+	STR_IO_IT = 5,
+	STR_USB_OT = 6,
+	STR_IO_OT = 7,
+	STR_FU_IN = 8,
+	STR_FU_OUT = 9,
+	STR_AS_OUT_ALT0 = 10,
+	STR_AS_OUT_ALT1 = 11,
+	STR_AS_IN_ALT0 = 12,
+	STR_AS_IN_ALT1 = 13,
+};
+
+struct f_uac2_opts {
+	struct usb_function_instance func_inst;
+	int p_chmask;
+	int p_srates[10];
+	int p_ssize;
+	u8 p_hs_bint;
+	int c_chmask;
+	int c_srates[10];
+	int c_ssize;
+	int c_sync;
+	u8 c_hs_bint;
+	bool p_mute_present;
+	bool p_volume_present;
+	s16 p_volume_min;
+	s16 p_volume_max;
+	s16 p_volume_res;
+	bool c_mute_present;
+	bool c_volume_present;
+	s16 c_volume_min;
+	s16 c_volume_max;
+	s16 c_volume_res;
+	int req_number;
+	int fb_max;
+	bool bound;
+	char function_name[32];
+	struct mutex lock;
+	int refcnt;
+};
+
+struct f_uac2 {
+	struct g_audio g_audio;
+	u8 ac_intf;
+	u8 as_in_intf;
+	u8 as_out_intf;
+	u8 ac_alt;
+	u8 as_in_alt;
+	u8 as_out_alt;
+	struct usb_ctrlrequest setup_cr;
+	struct usb_ep *int_ep;
+	atomic_t int_count;
+	int clock_id;
+};
+
+struct cntrl_cur_lay2 {
+	__le16 wCUR;
+};
+
+struct cntrl_cur_lay3 {
+	__le32 dCUR;
+};
+
+struct cntrl_range_lay2 {
+	__le16 wNumSubRanges;
+	__le16 wMIN;
+	__le16 wMAX;
+	__le16 wRES;
+};
+
+struct cntrl_subrange_lay3 {
+	__le32 dMIN;
+	__le32 dMAX;
+	__le32 dRES;
+};
+
+struct cntrl_ranges_lay3_srates {
+	__le16 wNumSubRanges;
+	struct cntrl_subrange_lay3 r[10];
+} __attribute__((packed));
+
+struct uac2_interrupt_data_msg {
+	__u8 bInfo;
+	__u8 bAttribute;
+	__le16 wValue;
+	__le16 wIndex;
+};
+
+struct uvc_control_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 wMaxTransferSize;
+} __attribute__((packed));
+
+enum media_pad_signal_type {
+	PAD_SIGNAL_DEFAULT = 0,
+	PAD_SIGNAL_ANALOG = 1,
+	PAD_SIGNAL_DV = 2,
+	PAD_SIGNAL_AUDIO = 3,
+};
+
+enum media_request_state {
+	MEDIA_REQUEST_STATE_IDLE = 0,
+	MEDIA_REQUEST_STATE_VALIDATING = 1,
+	MEDIA_REQUEST_STATE_QUEUED = 2,
+	MEDIA_REQUEST_STATE_COMPLETE = 3,
+	MEDIA_REQUEST_STATE_CLEANING = 4,
+	MEDIA_REQUEST_STATE_UPDATING = 5,
+	NR_OF_MEDIA_REQUEST_STATE = 6,
+};
+
+enum media_entity_type {
+	MEDIA_ENTITY_TYPE_BASE = 0,
+	MEDIA_ENTITY_TYPE_VIDEO_DEVICE = 1,
+	MEDIA_ENTITY_TYPE_V4L2_SUBDEV = 2,
+};
+
+enum v4l2_priority {
+	V4L2_PRIORITY_UNSET = 0,
+	V4L2_PRIORITY_BACKGROUND = 1,
+	V4L2_PRIORITY_INTERACTIVE = 2,
+	V4L2_PRIORITY_RECORD = 3,
+	V4L2_PRIORITY_DEFAULT = 2,
+};
+
+enum v4l2_subdev_ir_mode {
+	V4L2_SUBDEV_IR_MODE_PULSE_WIDTH = 0,
+};
+
+enum v4l2_mbus_frame_desc_type {
+	V4L2_MBUS_FRAME_DESC_TYPE_UNDEFINED = 0,
+	V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL = 1,
+	V4L2_MBUS_FRAME_DESC_TYPE_CSI2 = 2,
+};
+
+enum v4l2_mbus_frame_desc_flags {
+	V4L2_MBUS_FRAME_DESC_FL_LEN_MAX = 1,
+	V4L2_MBUS_FRAME_DESC_FL_BLOB = 2,
+};
+
+enum v4l2_mbus_type {
+	V4L2_MBUS_UNKNOWN = 0,
+	V4L2_MBUS_PARALLEL = 1,
+	V4L2_MBUS_BT656 = 2,
+	V4L2_MBUS_CSI1 = 3,
+	V4L2_MBUS_CCP2 = 4,
+	V4L2_MBUS_CSI2_DPHY = 5,
+	V4L2_MBUS_CSI2_CPHY = 6,
+	V4L2_MBUS_DPI = 7,
+	V4L2_MBUS_INVALID = 8,
+};
+
+enum v4l2_subdev_format_whence {
+	V4L2_SUBDEV_FORMAT_TRY = 0,
+	V4L2_SUBDEV_FORMAT_ACTIVE = 1,
+};
+
+enum v4l2_async_match_type {
+	V4L2_ASYNC_MATCH_TYPE_I2C = 0,
+	V4L2_ASYNC_MATCH_TYPE_FWNODE = 1,
+};
+
+enum vb2_buffer_state {
+	VB2_BUF_STATE_DEQUEUED = 0,
+	VB2_BUF_STATE_IN_REQUEST = 1,
+	VB2_BUF_STATE_PREPARING = 2,
+	VB2_BUF_STATE_QUEUED = 3,
+	VB2_BUF_STATE_ACTIVE = 4,
+	VB2_BUF_STATE_DONE = 5,
+	VB2_BUF_STATE_ERROR = 6,
+};
+
+enum vfl_devnode_type {
+	VFL_TYPE_VIDEO = 0,
+	VFL_TYPE_VBI = 1,
+	VFL_TYPE_RADIO = 2,
+	VFL_TYPE_SUBDEV = 3,
+	VFL_TYPE_SDR = 4,
+	VFL_TYPE_TOUCH = 5,
+	VFL_TYPE_MAX = 6,
+};
+
+enum vfl_devnode_direction {
+	VFL_DIR_RX = 0,
+	VFL_DIR_TX = 1,
+	VFL_DIR_M2M = 2,
+};
+
+enum uvc_state {
+	UVC_STATE_DISCONNECTED = 0,
+	UVC_STATE_CONNECTED = 1,
+	UVC_STATE_STREAMING = 2,
+};
+
+enum uvc_buffer_state {
+	UVC_BUF_STATE_IDLE = 0,
+	UVC_BUF_STATE_QUEUED = 1,
+	UVC_BUF_STATE_ACTIVE = 2,
+	UVC_BUF_STATE_DONE = 3,
+	UVC_BUF_STATE_ERROR = 4,
+};
+
+struct uvc_descriptor_header {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+};
+
+struct uvc_camera_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 iTerminal;
+	__le16 wObjectiveFocalLengthMin;
+	__le16 wObjectiveFocalLengthMax;
+	__le16 wOcularFocalLength;
+	__u8 bControlSize;
+	__u8 bmControls[3];
+};
+
+struct uvc_processing_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__le16 wMaxMultiplier;
+	__u8 bControlSize;
+	__u8 bmControls[2];
+	__u8 iProcessing;
+	__u8 bmVideoStandards;
+} __attribute__((packed));
+
+struct uvc_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uvcg_streaming_header;
+
+struct f_uvc_opts {
+	struct usb_function_instance func_inst;
+	unsigned int streaming_interval;
+	unsigned int streaming_maxpacket;
+	unsigned int streaming_maxburst;
+	unsigned int control_interface;
+	unsigned int streaming_interface;
+	char function_name[32];
+	unsigned int last_unit_id;
+	bool enable_interrupt_ep;
+	const struct uvc_descriptor_header * const *fs_control;
+	const struct uvc_descriptor_header * const *ss_control;
+	const struct uvc_descriptor_header * const *fs_streaming;
+	const struct uvc_descriptor_header * const *hs_streaming;
+	const struct uvc_descriptor_header * const *ss_streaming;
+	struct uvc_camera_terminal_descriptor uvc_camera_terminal;
+	struct uvc_processing_unit_descriptor uvc_processing;
+	struct uvc_output_terminal_descriptor uvc_output_terminal;
+	struct uvc_descriptor_header *uvc_fs_control_cls[5];
+	struct uvc_descriptor_header *uvc_ss_control_cls[5];
+	struct list_head extension_units;
+	struct uvc_descriptor_header **uvc_fs_streaming_cls;
+	struct uvc_descriptor_header **uvc_hs_streaming_cls;
+	struct uvc_descriptor_header **uvc_ss_streaming_cls;
+	u8 iad_index;
+	u8 vs0_index;
+	u8 vs1_index;
+	struct mutex lock;
+	int refcnt;
+	struct uvcg_streaming_header *header;
+};
+
+struct uvc_input_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bNumFormats;
+	__le16 wTotalLength;
+	__u8 bEndpointAddress;
+	__u8 bmInfo;
+	__u8 bTerminalLink;
+	__u8 bStillCaptureMethod;
+	__u8 bTriggerSupport;
+	__u8 bTriggerUsage;
+	__u8 bControlSize;
+	__u8 bmaControls[0];
+} __attribute__((packed));
+
+struct uvcg_streaming_header {
+	struct config_item item;
+	struct uvc_input_header_descriptor desc;
+	unsigned int linked;
+	struct list_head formats;
+	unsigned int num_fmt;
+};
+
+struct uvcg_extension_unit_descriptor {
+	u8 bLength;
+	u8 bDescriptorType;
+	u8 bDescriptorSubType;
+	u8 bUnitID;
+	u8 guidExtensionCode[16];
+	u8 bNumControls;
+	u8 bNrInPins;
+	u8 *baSourceID;
+	u8 bControlSize;
+	u8 *bmControls;
+	u8 iExtension;
+} __attribute__((packed));
+
+struct uvcg_extension {
+	struct config_item item;
+	struct list_head list;
+	u8 string_descriptor_index;
+	struct uvcg_extension_unit_descriptor desc;
+};
+
+struct media_device;
+
+struct media_gobj {
+	struct media_device *mdev;
+	u32 id;
+	struct list_head list;
+};
+
+struct media_pad;
+
+struct media_entity_operations;
+
+struct media_entity {
+	struct media_gobj graph_obj;
+	const char *name;
+	enum media_entity_type obj_type;
+	u32 function;
+	unsigned long flags;
+	u16 num_pads;
+	u16 num_links;
+	u16 num_backlinks;
+	int internal_idx;
+	struct media_pad *pads;
+	struct list_head links;
+	const struct media_entity_operations *ops;
+	int use_count;
+	union {
+		struct {
+			u32 major;
+			u32 minor;
+		} dev;
+	} info;
+};
+
+struct media_pipeline {
+	bool allocated;
+	struct media_device *mdev;
+	struct list_head pads;
+	int start_count;
+};
+
+typedef __u64 v4l2_std_id;
+
+struct media_intf_devnode;
+
+struct v4l2_file_operations;
+
+struct v4l2_device;
+
+struct v4l2_ctrl_handler;
+
+struct vb2_queue;
+
+struct v4l2_prio_state;
+
+struct v4l2_ioctl_ops;
+
+struct video_device {
+	struct media_entity entity;
+	struct media_intf_devnode *intf_devnode;
+	struct media_pipeline pipe;
+	const struct v4l2_file_operations *fops;
+	u32 device_caps;
+	struct device dev;
+	struct cdev *cdev;
+	struct v4l2_device *v4l2_dev;
+	struct device *dev_parent;
+	struct v4l2_ctrl_handler *ctrl_handler;
+	struct vb2_queue *queue;
+	struct v4l2_prio_state *prio;
+	char name[32];
+	enum vfl_devnode_type vfl_type;
+	enum vfl_devnode_direction vfl_dir;
+	int minor;
+	u16 num;
+	unsigned long flags;
+	int index;
+	spinlock_t fh_lock;
+	struct list_head fh_list;
+	int dev_debug;
+	v4l2_std_id tvnorms;
+	void (*release)(struct video_device *);
+	const struct v4l2_ioctl_ops *ioctl_ops;
+	unsigned long valid_ioctls[3];
+	struct mutex *lock;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct v4l2_prio_state {
+	atomic_t prios[4];
+};
+
+struct v4l2_subdev;
+
+struct v4l2_device {
+	struct device *dev;
+	struct media_device *mdev;
+	struct list_head subdevs;
+	spinlock_t lock;
+	char name[36];
+	void (*notify)(struct v4l2_subdev *, unsigned int, void *);
+	struct v4l2_ctrl_handler *ctrl_handler;
+	struct v4l2_prio_state prio;
+	struct kref ref;
+	void (*release)(struct v4l2_device *);
+};
+
+struct vb2_ops;
+
+struct vb2_mem_ops;
+
+struct vb2_buf_ops;
+
+struct vb2_buffer;
+
+struct vb2_fileio_data;
+
+struct vb2_threadio_data;
+
+struct vb2_queue {
+	unsigned int type;
+	unsigned int io_modes;
+	struct device *dev;
+	unsigned long dma_attrs;
+	unsigned int bidirectional: 1;
+	unsigned int fileio_read_once: 1;
+	unsigned int fileio_write_immediately: 1;
+	unsigned int allow_zero_bytesused: 1;
+	unsigned int quirk_poll_must_check_waiting_for_buffers: 1;
+	unsigned int supports_requests: 1;
+	unsigned int requires_requests: 1;
+	unsigned int uses_qbuf: 1;
+	unsigned int uses_requests: 1;
+	unsigned int allow_cache_hints: 1;
+	unsigned int non_coherent_mem: 1;
+	struct mutex *lock;
+	void *owner;
+	const struct vb2_ops *ops;
+	const struct vb2_mem_ops *mem_ops;
+	const struct vb2_buf_ops *buf_ops;
+	void *drv_priv;
+	u32 subsystem_flags;
+	unsigned int buf_struct_size;
+	u32 timestamp_flags;
+	gfp_t gfp_flags;
+	u32 min_buffers_needed;
+	struct device *alloc_devs[8];
+	struct mutex mmap_lock;
+	unsigned int memory;
+	enum dma_data_direction dma_dir;
+	struct vb2_buffer *bufs[64];
+	unsigned int num_buffers;
+	struct list_head queued_list;
+	unsigned int queued_count;
+	atomic_t owned_by_drv_count;
+	struct list_head done_list;
+	spinlock_t done_lock;
+	wait_queue_head_t done_wq;
+	unsigned int streaming: 1;
+	unsigned int start_streaming_called: 1;
+	unsigned int error: 1;
+	unsigned int waiting_for_buffers: 1;
+	unsigned int waiting_in_dqbuf: 1;
+	unsigned int is_multiplanar: 1;
+	unsigned int is_output: 1;
+	unsigned int copy_timestamp: 1;
+	unsigned int last_buffer_dequeued: 1;
+	struct vb2_fileio_data *fileio;
+	struct vb2_threadio_data *threadio;
+	char name[32];
+};
+
+struct uvc_video_queue {
+	struct vb2_queue queue;
+	unsigned int flags;
+	__u32 sequence;
+	unsigned int buf_used;
+	bool use_sg;
+	spinlock_t irqlock;
+	struct list_head irqqueue;
+};
+
+struct uvc_device;
+
+struct uvc_buffer;
+
+struct uvc_video {
+	struct uvc_device *uvc;
+	struct usb_ep *ep;
+	struct work_struct pump;
+	struct workqueue_struct *async_wq;
+	u8 bpp;
+	u32 fcc;
+	unsigned int width;
+	unsigned int height;
+	unsigned int imagesize;
+	struct mutex mutex;
+	unsigned int uvc_num_requests;
+	bool is_enabled;
+	unsigned int req_size;
+	struct list_head ureqs;
+	struct list_head req_free;
+	struct list_head req_ready;
+	spinlock_t req_lock;
+	unsigned int req_int_count;
+	void (*encode)(struct usb_request *, struct uvc_video *, struct uvc_buffer *);
+	__u32 payload_size;
+	__u32 max_payload_size;
+	struct uvc_video_queue queue;
+	unsigned int fid;
+};
+
+struct uvc_device {
+	struct video_device vdev;
+	struct v4l2_device v4l2_dev;
+	enum uvc_state state;
+	struct usb_function func;
+	struct uvc_video video;
+	bool func_connected;
+	wait_queue_head_t func_connected_queue;
+	struct uvcg_streaming_header *header;
+	struct {
+		const struct uvc_descriptor_header * const *fs_control;
+		const struct uvc_descriptor_header * const *ss_control;
+		const struct uvc_descriptor_header * const *fs_streaming;
+		const struct uvc_descriptor_header * const *hs_streaming;
+		const struct uvc_descriptor_header * const *ss_streaming;
+		struct list_head *extension_units;
+	} desc;
+	unsigned int control_intf;
+	struct usb_ep *interrupt_ep;
+	struct usb_request *control_req;
+	void *control_buf;
+	bool enable_interrupt_ep;
+	unsigned int streaming_intf;
+	unsigned int event_length;
+	unsigned int event_setup_out: 1;
+};
+
+struct media_entity_enum {
+	unsigned long *bmap;
+	int idx_max;
+};
+
+struct media_graph {
+	struct {
+		struct media_entity *entity;
+		struct list_head *link;
+	} stack[16];
+	struct media_entity_enum ent_enum;
+	int top;
+};
+
+struct media_devnode;
+
+struct media_device_ops;
+
+struct media_device {
+	struct device *dev;
+	struct media_devnode *devnode;
+	char model[32];
+	char driver_name[32];
+	char serial[40];
+	char bus_info[32];
+	u32 hw_revision;
+	u64 topology_version;
+	u32 id;
+	struct ida entity_internal_idx;
+	int entity_internal_idx_max;
+	struct list_head entities;
+	struct list_head interfaces;
+	struct list_head pads;
+	struct list_head links;
+	struct list_head entity_notify;
+	struct mutex graph_mutex;
+	struct media_graph pm_count_walk;
+	void *source_priv;
+	int (*enable_source)(struct media_entity *, struct media_pipeline *);
+	void (*disable_source)(struct media_entity *);
+	const struct media_device_ops *ops;
+	struct mutex req_queue_mutex;
+	atomic_t request_id;
+};
+
+struct media_file_operations;
+
+struct media_devnode {
+	struct media_device *media_dev;
+	const struct media_file_operations *fops;
+	struct device dev;
+	struct cdev cdev;
+	struct device *parent;
+	int minor;
+	unsigned long flags;
+	void (*release)(struct media_devnode *);
+};
+
+struct media_file_operations {
+	struct module *owner;
+	ssize_t (*read)(struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*write)(struct file *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	__poll_t (*poll)(struct file *, struct poll_table_struct *);
+	long (*ioctl)(struct file *, unsigned int, unsigned long);
+	long (*compat_ioctl)(struct file *, unsigned int, unsigned long);
+	int (*open)(struct file *);
+	int (*release)(struct file *);
+};
+
+struct media_link;
+
+struct media_request;
+
+struct media_device_ops {
+	int (*link_notify)(struct media_link *, u32, unsigned int);
+	struct media_request * (*req_alloc)(struct media_device *);
+	void (*req_free)(struct media_request *);
+	int (*req_validate)(struct media_request *);
+	void (*req_queue)(struct media_request *);
+};
+
+struct media_interface;
+
+struct media_link {
+	struct media_gobj graph_obj;
+	struct list_head list;
+	union {
+		struct media_gobj *gobj0;
+		struct media_pad *source;
+		struct media_interface *intf;
+	};
+	union {
+		struct media_gobj *gobj1;
+		struct media_pad *sink;
+		struct media_entity *entity;
+	};
+	struct media_link *reverse;
+	unsigned long flags;
+	bool is_backlink;
+};
+
+struct media_pad {
+	struct media_gobj graph_obj;
+	struct media_entity *entity;
+	u16 index;
+	u16 num_links;
+	enum media_pad_signal_type sig_type;
+	unsigned long flags;
+	struct media_pipeline *pipe;
+};
+
+struct media_interface {
+	struct media_gobj graph_obj;
+	struct list_head links;
+	u32 type;
+	u32 flags;
+};
+
+struct media_request {
+	struct media_device *mdev;
+	struct kref kref;
+	char debug_str[27];
+	enum media_request_state state;
+	unsigned int updating_count;
+	unsigned int access_count;
+	struct list_head objects;
+	unsigned int num_incomplete_objects;
+	wait_queue_head_t poll_wait;
+	spinlock_t lock;
+};
+
+struct media_entity_operations {
+	int (*get_fwnode_pad)(struct media_entity *, struct fwnode_endpoint *);
+	int (*link_setup)(struct media_entity *, const struct media_pad *, const struct media_pad *, u32);
+	int (*link_validate)(struct media_link *);
+	bool (*has_pad_interdep)(struct media_entity *, unsigned int, unsigned int);
+};
+
+struct media_intf_devnode {
+	struct media_interface intf;
+	u32 major;
+	u32 minor;
+};
+
+struct v4l2_file_operations {
+	struct module *owner;
+	ssize_t (*read)(struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	ssize_t (*write)(struct file *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t *);
+	__poll_t (*poll)(struct file *, struct poll_table_struct *);
+	long (*unlocked_ioctl)(struct file *, unsigned int, unsigned long);
+	long (*compat_ioctl32)(struct file *, unsigned int, unsigned long);
+	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+	int (*mmap)(struct file *, struct vm_area_struct *);
+	int (*open)(struct file *);
+	int (*release)(struct file *);
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_subdev_ops;
+
+struct v4l2_subdev_internal_ops;
+
+struct v4l2_async_notifier;
+
+struct v4l2_subdev_platform_data;
+
+struct v4l2_subdev_state;
+
+struct v4l2_subdev {
+	struct media_entity entity;
+	struct list_head list;
+	struct module *owner;
+	bool owner_v4l2_dev;
+	u32 flags;
+	struct v4l2_device *v4l2_dev;
+	const struct v4l2_subdev_ops *ops;
+	const struct v4l2_subdev_internal_ops *internal_ops;
+	struct v4l2_ctrl_handler *ctrl_handler;
+	char name[32];
+	u32 grp_id;
+	void *dev_priv;
+	void *host_priv;
+	struct video_device *devnode;
+	struct device *dev;
+	struct fwnode_handle *fwnode;
+	struct list_head async_list;
+	struct list_head async_subdev_endpoint_list;
+	struct v4l2_async_notifier *subdev_notifier;
+	struct list_head asc_list;
+	struct v4l2_subdev_platform_data *pdata;
+	struct mutex *state_lock;
+	struct led_classdev *privacy_led;
+	struct v4l2_subdev_state *active_state;
+	u64 enabled_streams;
+};
+
+struct v4l2_subdev_core_ops;
+
+struct v4l2_subdev_tuner_ops;
+
+struct v4l2_subdev_audio_ops;
+
+struct v4l2_subdev_video_ops;
+
+struct v4l2_subdev_vbi_ops;
+
+struct v4l2_subdev_ir_ops;
+
+struct v4l2_subdev_sensor_ops;
+
+struct v4l2_subdev_pad_ops;
+
+struct v4l2_subdev_ops {
+	const struct v4l2_subdev_core_ops *core;
+	const struct v4l2_subdev_tuner_ops *tuner;
+	const struct v4l2_subdev_audio_ops *audio;
+	const struct v4l2_subdev_video_ops *video;
+	const struct v4l2_subdev_vbi_ops *vbi;
+	const struct v4l2_subdev_ir_ops *ir;
+	const struct v4l2_subdev_sensor_ops *sensor;
+	const struct v4l2_subdev_pad_ops *pad;
+};
+
+struct v4l2_subdev_io_pin_config;
+
+struct v4l2_fh;
+
+struct v4l2_event_subscription;
+
+struct v4l2_subdev_core_ops {
+	int (*log_status)(struct v4l2_subdev *);
+	int (*s_io_pin_config)(struct v4l2_subdev *, size_t, struct v4l2_subdev_io_pin_config *);
+	int (*init)(struct v4l2_subdev *, u32);
+	int (*load_fw)(struct v4l2_subdev *);
+	int (*reset)(struct v4l2_subdev *, u32);
+	int (*s_gpio)(struct v4l2_subdev *, u32);
+	long (*command)(struct v4l2_subdev *, unsigned int, void *);
+	long (*ioctl)(struct v4l2_subdev *, unsigned int, void *);
+	long (*compat_ioctl32)(struct v4l2_subdev *, unsigned int, unsigned long);
+	int (*s_power)(struct v4l2_subdev *, int);
+	int (*interrupt_service_routine)(struct v4l2_subdev *, u32, bool *);
+	int (*subscribe_event)(struct v4l2_subdev *, struct v4l2_fh *, struct v4l2_event_subscription *);
+	int (*unsubscribe_event)(struct v4l2_subdev *, struct v4l2_fh *, struct v4l2_event_subscription *);
+};
+
+struct v4l2_subdev_io_pin_config {
+	u32 flags;
+	u8 pin;
+	u8 function;
+	u8 value;
+	u8 strength;
+};
+
+struct v4l2_m2m_ctx;
+
+struct v4l2_fh {
+	struct list_head list;
+	struct video_device *vdev;
+	struct v4l2_ctrl_handler *ctrl_handler;
+	enum v4l2_priority prio;
+	wait_queue_head_t wait;
+	struct mutex subscribe_lock;
+	struct list_head subscribed;
+	struct list_head available;
+	unsigned int navailable;
+	u32 sequence;
+	struct v4l2_m2m_ctx *m2m_ctx;
+};
+
+struct v4l2_event_subscription {
+	__u32 type;
+	__u32 id;
+	__u32 flags;
+	__u32 reserved[5];
+};
+
+struct tuner_setup;
+
+struct v4l2_frequency;
+
+struct v4l2_frequency_band;
+
+struct v4l2_tuner;
+
+struct v4l2_modulator;
+
+struct v4l2_priv_tun_config;
+
+struct v4l2_subdev_tuner_ops {
+	int (*standby)(struct v4l2_subdev *);
+	int (*s_radio)(struct v4l2_subdev *);
+	int (*s_frequency)(struct v4l2_subdev *, const struct v4l2_frequency *);
+	int (*g_frequency)(struct v4l2_subdev *, struct v4l2_frequency *);
+	int (*enum_freq_bands)(struct v4l2_subdev *, struct v4l2_frequency_band *);
+	int (*g_tuner)(struct v4l2_subdev *, struct v4l2_tuner *);
+	int (*s_tuner)(struct v4l2_subdev *, const struct v4l2_tuner *);
+	int (*g_modulator)(struct v4l2_subdev *, struct v4l2_modulator *);
+	int (*s_modulator)(struct v4l2_subdev *, const struct v4l2_modulator *);
+	int (*s_type_addr)(struct v4l2_subdev *, struct tuner_setup *);
+	int (*s_config)(struct v4l2_subdev *, const struct v4l2_priv_tun_config *);
+};
+
+struct v4l2_frequency {
+	__u32 tuner;
+	__u32 type;
+	__u32 frequency;
+	__u32 reserved[8];
+};
+
+struct v4l2_frequency_band {
+	__u32 tuner;
+	__u32 type;
+	__u32 index;
+	__u32 capability;
+	__u32 rangelow;
+	__u32 rangehigh;
+	__u32 modulation;
+	__u32 reserved[9];
+};
+
+struct v4l2_tuner {
+	__u32 index;
+	__u8 name[32];
+	__u32 type;
+	__u32 capability;
+	__u32 rangelow;
+	__u32 rangehigh;
+	__u32 rxsubchans;
+	__u32 audmode;
+	__s32 signal;
+	__s32 afc;
+	__u32 reserved[4];
+};
+
+struct v4l2_modulator {
+	__u32 index;
+	__u8 name[32];
+	__u32 capability;
+	__u32 rangelow;
+	__u32 rangehigh;
+	__u32 txsubchans;
+	__u32 type;
+	__u32 reserved[3];
+};
+
+struct v4l2_priv_tun_config {
+	int tuner;
+	void *priv;
+};
+
+struct v4l2_subdev_audio_ops {
+	int (*s_clock_freq)(struct v4l2_subdev *, u32);
+	int (*s_i2s_clock_freq)(struct v4l2_subdev *, u32);
+	int (*s_routing)(struct v4l2_subdev *, u32, u32, u32);
+	int (*s_stream)(struct v4l2_subdev *, int);
+};
+
+struct v4l2_fract;
+
+struct v4l2_subdev_frame_interval;
+
+struct v4l2_dv_timings;
+
+struct v4l2_subdev_video_ops {
+	int (*s_routing)(struct v4l2_subdev *, u32, u32, u32);
+	int (*s_crystal_freq)(struct v4l2_subdev *, u32, u32);
+	int (*g_std)(struct v4l2_subdev *, v4l2_std_id *);
+	int (*s_std)(struct v4l2_subdev *, v4l2_std_id);
+	int (*s_std_output)(struct v4l2_subdev *, v4l2_std_id);
+	int (*g_std_output)(struct v4l2_subdev *, v4l2_std_id *);
+	int (*querystd)(struct v4l2_subdev *, v4l2_std_id *);
+	int (*g_tvnorms)(struct v4l2_subdev *, v4l2_std_id *);
+	int (*g_tvnorms_output)(struct v4l2_subdev *, v4l2_std_id *);
+	int (*g_input_status)(struct v4l2_subdev *, u32 *);
+	int (*s_stream)(struct v4l2_subdev *, int);
+	int (*g_pixelaspect)(struct v4l2_subdev *, struct v4l2_fract *);
+	int (*g_frame_interval)(struct v4l2_subdev *, struct v4l2_subdev_frame_interval *);
+	int (*s_frame_interval)(struct v4l2_subdev *, struct v4l2_subdev_frame_interval *);
+	int (*s_dv_timings)(struct v4l2_subdev *, struct v4l2_dv_timings *);
+	int (*g_dv_timings)(struct v4l2_subdev *, struct v4l2_dv_timings *);
+	int (*query_dv_timings)(struct v4l2_subdev *, struct v4l2_dv_timings *);
+	int (*s_rx_buffer)(struct v4l2_subdev *, void *, unsigned int *);
+	int (*pre_streamon)(struct v4l2_subdev *, u32);
+	int (*post_streamoff)(struct v4l2_subdev *);
+};
+
+struct v4l2_fract {
+	__u32 numerator;
+	__u32 denominator;
+};
+
+struct v4l2_subdev_frame_interval {
+	__u32 pad;
+	struct v4l2_fract interval;
+	__u32 stream;
+	__u32 reserved[8];
+};
+
+struct v4l2_bt_timings {
+	__u32 width;
+	__u32 height;
+	__u32 interlaced;
+	__u32 polarities;
+	__u64 pixelclock;
+	__u32 hfrontporch;
+	__u32 hsync;
+	__u32 hbackporch;
+	__u32 vfrontporch;
+	__u32 vsync;
+	__u32 vbackporch;
+	__u32 il_vfrontporch;
+	__u32 il_vsync;
+	__u32 il_vbackporch;
+	__u32 standards;
+	__u32 flags;
+	struct v4l2_fract picture_aspect;
+	__u8 cea861_vic;
+	__u8 hdmi_vic;
+	__u8 reserved[46];
+} __attribute__((packed));
+
+struct v4l2_dv_timings {
+	__u32 type;
+	union {
+		struct v4l2_bt_timings bt;
+		__u32 reserved[32];
+	};
+};
+
+struct v4l2_decode_vbi_line;
+
+struct v4l2_sliced_vbi_data;
+
+struct v4l2_sliced_vbi_cap;
+
+struct v4l2_vbi_format;
+
+struct v4l2_sliced_vbi_format;
+
+struct v4l2_subdev_vbi_ops {
+	int (*decode_vbi_line)(struct v4l2_subdev *, struct v4l2_decode_vbi_line *);
+	int (*s_vbi_data)(struct v4l2_subdev *, const struct v4l2_sliced_vbi_data *);
+	int (*g_vbi_data)(struct v4l2_subdev *, struct v4l2_sliced_vbi_data *);
+	int (*g_sliced_vbi_cap)(struct v4l2_subdev *, struct v4l2_sliced_vbi_cap *);
+	int (*s_raw_fmt)(struct v4l2_subdev *, struct v4l2_vbi_format *);
+	int (*g_sliced_fmt)(struct v4l2_subdev *, struct v4l2_sliced_vbi_format *);
+	int (*s_sliced_fmt)(struct v4l2_subdev *, struct v4l2_sliced_vbi_format *);
+};
+
+struct v4l2_decode_vbi_line {
+	u32 is_second_field;
+	u8 *p;
+	u32 line;
+	u32 type;
+};
+
+struct v4l2_sliced_vbi_data {
+	__u32 id;
+	__u32 field;
+	__u32 line;
+	__u32 reserved;
+	__u8 data[48];
+};
+
+struct v4l2_sliced_vbi_cap {
+	__u16 service_set;
+	__u16 service_lines[48];
+	__u32 type;
+	__u32 reserved[3];
+};
+
+struct v4l2_vbi_format {
+	__u32 sampling_rate;
+	__u32 offset;
+	__u32 samples_per_line;
+	__u32 sample_format;
+	__s32 start[2];
+	__u32 count[2];
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct v4l2_sliced_vbi_format {
+	__u16 service_set;
+	__u16 service_lines[48];
+	__u32 io_size;
+	__u32 reserved[2];
+};
+
+struct v4l2_subdev_ir_parameters;
+
+struct v4l2_subdev_ir_ops {
+	int (*rx_read)(struct v4l2_subdev *, u8 *, size_t, ssize_t *);
+	int (*rx_g_parameters)(struct v4l2_subdev *, struct v4l2_subdev_ir_parameters *);
+	int (*rx_s_parameters)(struct v4l2_subdev *, struct v4l2_subdev_ir_parameters *);
+	int (*tx_write)(struct v4l2_subdev *, u8 *, size_t, ssize_t *);
+	int (*tx_g_parameters)(struct v4l2_subdev *, struct v4l2_subdev_ir_parameters *);
+	int (*tx_s_parameters)(struct v4l2_subdev *, struct v4l2_subdev_ir_parameters *);
+};
+
+struct v4l2_subdev_ir_parameters {
+	unsigned int bytes_per_data_element;
+	enum v4l2_subdev_ir_mode mode;
+	bool enable;
+	bool interrupt_enable;
+	bool shutdown;
+	bool modulation;
+	u32 max_pulse_width;
+	unsigned int carrier_freq;
+	unsigned int duty_cycle;
+	bool invert_level;
+	bool invert_carrier_sense;
+	u32 noise_filter_min_width;
+	unsigned int carrier_range_lower;
+	unsigned int carrier_range_upper;
+	u32 resolution;
+};
+
+struct v4l2_subdev_sensor_ops {
+	int (*g_skip_top_lines)(struct v4l2_subdev *, u32 *);
+	int (*g_skip_frames)(struct v4l2_subdev *, u32 *);
+};
+
+struct v4l2_subdev_mbus_code_enum;
+
+struct v4l2_subdev_frame_size_enum;
+
+struct v4l2_subdev_frame_interval_enum;
+
+struct v4l2_subdev_format;
+
+struct v4l2_subdev_selection;
+
+struct v4l2_edid;
+
+struct v4l2_dv_timings_cap;
+
+struct v4l2_enum_dv_timings;
+
+struct v4l2_mbus_frame_desc;
+
+struct v4l2_mbus_config;
+
+struct v4l2_subdev_krouting;
+
+struct v4l2_subdev_pad_ops {
+	int (*init_cfg)(struct v4l2_subdev *, struct v4l2_subdev_state *);
+	int (*enum_mbus_code)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_mbus_code_enum *);
+	int (*enum_frame_size)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_frame_size_enum *);
+	int (*enum_frame_interval)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_frame_interval_enum *);
+	int (*get_fmt)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_format *);
+	int (*set_fmt)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_format *);
+	int (*get_selection)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_selection *);
+	int (*set_selection)(struct v4l2_subdev *, struct v4l2_subdev_state *, struct v4l2_subdev_selection *);
+	int (*get_edid)(struct v4l2_subdev *, struct v4l2_edid *);
+	int (*set_edid)(struct v4l2_subdev *, struct v4l2_edid *);
+	int (*dv_timings_cap)(struct v4l2_subdev *, struct v4l2_dv_timings_cap *);
+	int (*enum_dv_timings)(struct v4l2_subdev *, struct v4l2_enum_dv_timings *);
+	int (*link_validate)(struct v4l2_subdev *, struct media_link *, struct v4l2_subdev_format *, struct v4l2_subdev_format *);
+	int (*get_frame_desc)(struct v4l2_subdev *, unsigned int, struct v4l2_mbus_frame_desc *);
+	int (*set_frame_desc)(struct v4l2_subdev *, unsigned int, struct v4l2_mbus_frame_desc *);
+	int (*get_mbus_config)(struct v4l2_subdev *, unsigned int, struct v4l2_mbus_config *);
+	int (*set_routing)(struct v4l2_subdev *, struct v4l2_subdev_state *, enum v4l2_subdev_format_whence, struct v4l2_subdev_krouting *);
+	int (*enable_streams)(struct v4l2_subdev *, struct v4l2_subdev_state *, u32, u64);
+	int (*disable_streams)(struct v4l2_subdev *, struct v4l2_subdev_state *, u32, u64);
+};
+
+struct v4l2_subdev_route;
+
+struct v4l2_subdev_krouting {
+	unsigned int num_routes;
+	struct v4l2_subdev_route *routes;
+};
+
+struct v4l2_subdev_stream_config;
+
+struct v4l2_subdev_stream_configs {
+	u32 num_configs;
+	struct v4l2_subdev_stream_config *configs;
+};
+
+struct v4l2_subdev_pad_config;
+
+struct v4l2_subdev_state {
+	struct mutex _lock;
+	struct mutex *lock;
+	struct v4l2_subdev_pad_config *pads;
+	struct v4l2_subdev_krouting routing;
+	struct v4l2_subdev_stream_configs stream_configs;
+};
+
+struct v4l2_mbus_framefmt {
+	__u32 width;
+	__u32 height;
+	__u32 code;
+	__u32 field;
+	__u32 colorspace;
+	union {
+		__u16 ycbcr_enc;
+		__u16 hsv_enc;
+	};
+	__u16 quantization;
+	__u16 xfer_func;
+	__u16 flags;
+	__u16 reserved[10];
+};
+
+struct v4l2_rect {
+	__s32 left;
+	__s32 top;
+	__u32 width;
+	__u32 height;
+};
+
+struct v4l2_subdev_pad_config {
+	struct v4l2_mbus_framefmt try_fmt;
+	struct v4l2_rect try_crop;
+	struct v4l2_rect try_compose;
+};
+
+struct v4l2_subdev_route {
+	__u32 sink_pad;
+	__u32 sink_stream;
+	__u32 source_pad;
+	__u32 source_stream;
+	__u32 flags;
+	__u32 reserved[5];
+};
+
+struct v4l2_subdev_stream_config {
+	u32 pad;
+	u32 stream;
+	bool enabled;
+	struct v4l2_mbus_framefmt fmt;
+	struct v4l2_rect crop;
+	struct v4l2_rect compose;
+};
+
+struct v4l2_subdev_mbus_code_enum {
+	__u32 pad;
+	__u32 index;
+	__u32 code;
+	__u32 which;
+	__u32 flags;
+	__u32 stream;
+	__u32 reserved[6];
+};
+
+struct v4l2_subdev_frame_size_enum {
+	__u32 index;
+	__u32 pad;
+	__u32 code;
+	__u32 min_width;
+	__u32 max_width;
+	__u32 min_height;
+	__u32 max_height;
+	__u32 which;
+	__u32 stream;
+	__u32 reserved[7];
+};
+
+struct v4l2_subdev_frame_interval_enum {
+	__u32 index;
+	__u32 pad;
+	__u32 code;
+	__u32 width;
+	__u32 height;
+	struct v4l2_fract interval;
+	__u32 which;
+	__u32 stream;
+	__u32 reserved[7];
+};
+
+struct v4l2_subdev_format {
+	__u32 which;
+	__u32 pad;
+	struct v4l2_mbus_framefmt format;
+	__u32 stream;
+	__u32 reserved[7];
+};
+
+struct v4l2_subdev_selection {
+	__u32 which;
+	__u32 pad;
+	__u32 target;
+	__u32 flags;
+	struct v4l2_rect r;
+	__u32 stream;
+	__u32 reserved[7];
+};
+
+struct v4l2_edid {
+	__u32 pad;
+	__u32 start_block;
+	__u32 blocks;
+	__u32 reserved[5];
+	__u8 *edid;
+};
+
+struct v4l2_bt_timings_cap {
+	__u32 min_width;
+	__u32 max_width;
+	__u32 min_height;
+	__u32 max_height;
+	__u64 min_pixelclock;
+	__u64 max_pixelclock;
+	__u32 standards;
+	__u32 capabilities;
+	__u32 reserved[16];
+};
+
+struct v4l2_dv_timings_cap {
+	__u32 type;
+	__u32 pad;
+	__u32 reserved[2];
+	union {
+		struct v4l2_bt_timings_cap bt;
+		__u32 raw_data[32];
+	};
+};
+
+struct v4l2_enum_dv_timings {
+	__u32 index;
+	__u32 pad;
+	__u32 reserved[2];
+	struct v4l2_dv_timings timings;
+};
+
+struct v4l2_mbus_frame_desc_entry_csi2 {
+	u8 vc;
+	u8 dt;
+};
+
+struct v4l2_mbus_frame_desc_entry {
+	enum v4l2_mbus_frame_desc_flags flags;
+	u32 stream;
+	u32 pixelcode;
+	u32 length;
+	union {
+		struct v4l2_mbus_frame_desc_entry_csi2 csi2;
+	} bus;
+};
+
+struct v4l2_mbus_frame_desc {
+	enum v4l2_mbus_frame_desc_type type;
+	struct v4l2_mbus_frame_desc_entry entry[8];
+	unsigned short num_entries;
+};
+
+struct v4l2_mbus_config_parallel {
+	unsigned int flags;
+	unsigned char bus_width;
+	unsigned char data_shift;
+};
+
+struct v4l2_mbus_config_mipi_csi1 {
+	unsigned char clock_inv: 1;
+	unsigned char strobe: 1;
+	bool lane_polarity[2];
+	unsigned char data_lane;
+	unsigned char clock_lane;
+};
+
+struct v4l2_mbus_config_mipi_csi2 {
+	unsigned int flags;
+	unsigned char data_lanes[8];
+	unsigned char clock_lane;
+	unsigned char num_data_lanes;
+	bool lane_polarities[9];
+};
+
+struct v4l2_mbus_config {
+	enum v4l2_mbus_type type;
+	union {
+		struct v4l2_mbus_config_parallel parallel;
+		struct v4l2_mbus_config_mipi_csi1 mipi_csi1;
+		struct v4l2_mbus_config_mipi_csi2 mipi_csi2;
+	} bus;
+};
+
+struct v4l2_subdev_fh;
+
+struct v4l2_subdev_internal_ops {
+	int (*registered)(struct v4l2_subdev *);
+	void (*unregistered)(struct v4l2_subdev *);
+	int (*open)(struct v4l2_subdev *, struct v4l2_subdev_fh *);
+	int (*close)(struct v4l2_subdev *, struct v4l2_subdev_fh *);
+	void (*release)(struct v4l2_subdev *);
+};
+
+struct v4l2_subdev_fh {
+	struct v4l2_fh vfh;
+	struct module *owner;
+	struct v4l2_subdev_state *state;
+	u64 client_caps;
+};
+
+struct v4l2_async_notifier_operations;
+
+struct v4l2_async_notifier {
+	const struct v4l2_async_notifier_operations *ops;
+	struct v4l2_device *v4l2_dev;
+	struct v4l2_subdev *sd;
+	struct v4l2_async_notifier *parent;
+	struct list_head waiting_list;
+	struct list_head done_list;
+	struct list_head notifier_entry;
+};
+
+struct v4l2_async_connection;
+
+struct v4l2_async_notifier_operations {
+	int (*bound)(struct v4l2_async_notifier *, struct v4l2_subdev *, struct v4l2_async_connection *);
+	int (*complete)(struct v4l2_async_notifier *);
+	void (*unbind)(struct v4l2_async_notifier *, struct v4l2_subdev *, struct v4l2_async_connection *);
+	void (*destroy)(struct v4l2_async_connection *);
+};
+
+struct v4l2_async_match_desc {
+	enum v4l2_async_match_type type;
+	union {
+		struct fwnode_handle *fwnode;
+		struct {
+			int adapter_id;
+			unsigned short address;
+		} i2c;
+	};
+};
+
+struct v4l2_async_connection {
+	struct v4l2_async_match_desc match;
+	struct v4l2_async_notifier *notifier;
+	struct list_head asc_entry;
+	struct list_head asc_subdev_entry;
+	struct v4l2_subdev *sd;
+};
+
+struct v4l2_subdev_platform_data {
+	struct regulator_bulk_data *regulators;
+	int num_regulators;
+	void *host_priv;
+};
+
+struct vb2_ops {
+	int (*queue_setup)(struct vb2_queue *, unsigned int *, unsigned int *, unsigned int *, struct device **);
+	void (*wait_prepare)(struct vb2_queue *);
+	void (*wait_finish)(struct vb2_queue *);
+	int (*buf_out_validate)(struct vb2_buffer *);
+	int (*buf_init)(struct vb2_buffer *);
+	int (*buf_prepare)(struct vb2_buffer *);
+	void (*buf_finish)(struct vb2_buffer *);
+	void (*buf_cleanup)(struct vb2_buffer *);
+	int (*prepare_streaming)(struct vb2_queue *);
+	int (*start_streaming)(struct vb2_queue *, unsigned int);
+	void (*stop_streaming)(struct vb2_queue *);
+	void (*unprepare_streaming)(struct vb2_queue *);
+	void (*buf_queue)(struct vb2_buffer *);
+	void (*buf_request_complete)(struct vb2_buffer *);
+};
+
+struct media_request_object_ops;
+
+struct media_request_object {
+	const struct media_request_object_ops *ops;
+	void *priv;
+	struct media_request *req;
+	struct list_head list;
+	struct kref kref;
+	bool completed;
+};
+
+struct vb2_plane {
+	void *mem_priv;
+	struct dma_buf *dbuf;
+	unsigned int dbuf_mapped;
+	unsigned int bytesused;
+	unsigned int length;
+	unsigned int min_length;
+	union {
+		unsigned int offset;
+		unsigned long userptr;
+		int fd;
+	} m;
+	unsigned int data_offset;
+};
+
+struct vb2_buffer {
+	struct vb2_queue *vb2_queue;
+	unsigned int index;
+	unsigned int type;
+	unsigned int memory;
+	unsigned int num_planes;
+	u64 timestamp;
+	struct media_request *request;
+	struct media_request_object req_obj;
+	enum vb2_buffer_state state;
+	unsigned int synced: 1;
+	unsigned int prepared: 1;
+	unsigned int copied_timestamp: 1;
+	unsigned int skip_cache_sync_on_prepare: 1;
+	unsigned int skip_cache_sync_on_finish: 1;
+	struct vb2_plane planes[8];
+	struct list_head queued_entry;
+	struct list_head done_entry;
+};
+
+struct media_request_object_ops {
+	int (*prepare)(struct media_request_object *);
+	void (*unprepare)(struct media_request_object *);
+	void (*queue)(struct media_request_object *);
+	void (*unbind)(struct media_request_object *);
+	void (*release)(struct media_request_object *);
+};
+
+struct vb2_mem_ops {
+	void * (*alloc)(struct vb2_buffer *, struct device *, unsigned long);
+	void (*put)(void *);
+	struct dma_buf * (*get_dmabuf)(struct vb2_buffer *, void *, unsigned long);
+	void * (*get_userptr)(struct vb2_buffer *, struct device *, unsigned long, unsigned long);
+	void (*put_userptr)(void *);
+	void (*prepare)(void *);
+	void (*finish)(void *);
+	void * (*attach_dmabuf)(struct vb2_buffer *, struct device *, struct dma_buf *, unsigned long);
+	void (*detach_dmabuf)(void *);
+	int (*map_dmabuf)(void *);
+	void (*unmap_dmabuf)(void *);
+	void * (*vaddr)(struct vb2_buffer *, void *);
+	void * (*cookie)(struct vb2_buffer *, void *);
+	unsigned int (*num_users)(void *);
+	int (*mmap)(void *, struct vm_area_struct *);
+};
+
+struct vb2_buf_ops {
+	int (*verify_planes_array)(struct vb2_buffer *, const void *);
+	void (*init_buffer)(struct vb2_buffer *);
+	void (*fill_user_buffer)(struct vb2_buffer *, void *);
+	int (*fill_vb2_buffer)(struct vb2_buffer *, struct vb2_plane *);
+	void (*copy_timestamp)(struct vb2_buffer *, const void *);
+};
+
+enum v4l2_buf_type {
+	V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
+	V4L2_BUF_TYPE_VIDEO_OUTPUT = 2,
+	V4L2_BUF_TYPE_VIDEO_OVERLAY = 3,
+	V4L2_BUF_TYPE_VBI_CAPTURE = 4,
+	V4L2_BUF_TYPE_VBI_OUTPUT = 5,
+	V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6,
+	V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7,
+	V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
+	V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
+	V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
+	V4L2_BUF_TYPE_SDR_CAPTURE = 11,
+	V4L2_BUF_TYPE_SDR_OUTPUT = 12,
+	V4L2_BUF_TYPE_META_CAPTURE = 13,
+	V4L2_BUF_TYPE_META_OUTPUT = 14,
+	V4L2_BUF_TYPE_PRIVATE = 128,
+};
+
+struct v4l2_capability;
+
+struct v4l2_fmtdesc;
+
+struct v4l2_format;
+
+struct v4l2_requestbuffers;
+
+struct v4l2_buffer;
+
+struct v4l2_exportbuffer;
+
+struct v4l2_create_buffers;
+
+struct v4l2_framebuffer;
+
+struct v4l2_input;
+
+struct v4l2_output;
+
+struct v4l2_queryctrl;
+
+struct v4l2_query_ext_ctrl;
+
+struct v4l2_control;
+
+struct v4l2_ext_controls;
+
+struct v4l2_querymenu;
+
+struct v4l2_audio;
+
+struct v4l2_audioout;
+
+struct v4l2_selection;
+
+struct v4l2_jpegcompression;
+
+struct v4l2_enc_idx;
+
+struct v4l2_encoder_cmd;
+
+struct v4l2_decoder_cmd;
+
+struct v4l2_streamparm;
+
+struct v4l2_hw_freq_seek;
+
+struct v4l2_frmsizeenum;
+
+struct v4l2_frmivalenum;
+
+struct v4l2_ioctl_ops {
+	int (*vidioc_querycap)(struct file *, void *, struct v4l2_capability *);
+	int (*vidioc_enum_fmt_vid_cap)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_vid_overlay)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_vid_out)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_sdr_cap)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_sdr_out)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_meta_cap)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_enum_fmt_meta_out)(struct file *, void *, struct v4l2_fmtdesc *);
+	int (*vidioc_g_fmt_vid_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vid_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vid_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vid_out_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_sliced_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_sliced_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vid_cap_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_vid_out_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_sdr_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_sdr_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_meta_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_g_fmt_meta_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_out_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_sliced_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_sliced_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_cap_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_vid_out_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_sdr_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_sdr_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_meta_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_s_fmt_meta_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_out_overlay)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_sliced_vbi_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_sliced_vbi_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_cap_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_vid_out_mplane)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_sdr_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_sdr_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_meta_cap)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_try_fmt_meta_out)(struct file *, void *, struct v4l2_format *);
+	int (*vidioc_reqbufs)(struct file *, void *, struct v4l2_requestbuffers *);
+	int (*vidioc_querybuf)(struct file *, void *, struct v4l2_buffer *);
+	int (*vidioc_qbuf)(struct file *, void *, struct v4l2_buffer *);
+	int (*vidioc_expbuf)(struct file *, void *, struct v4l2_exportbuffer *);
+	int (*vidioc_dqbuf)(struct file *, void *, struct v4l2_buffer *);
+	int (*vidioc_create_bufs)(struct file *, void *, struct v4l2_create_buffers *);
+	int (*vidioc_prepare_buf)(struct file *, void *, struct v4l2_buffer *);
+	int (*vidioc_overlay)(struct file *, void *, unsigned int);
+	int (*vidioc_g_fbuf)(struct file *, void *, struct v4l2_framebuffer *);
+	int (*vidioc_s_fbuf)(struct file *, void *, const struct v4l2_framebuffer *);
+	int (*vidioc_streamon)(struct file *, void *, enum v4l2_buf_type);
+	int (*vidioc_streamoff)(struct file *, void *, enum v4l2_buf_type);
+	int (*vidioc_g_std)(struct file *, void *, v4l2_std_id *);
+	int (*vidioc_s_std)(struct file *, void *, v4l2_std_id);
+	int (*vidioc_querystd)(struct file *, void *, v4l2_std_id *);
+	int (*vidioc_enum_input)(struct file *, void *, struct v4l2_input *);
+	int (*vidioc_g_input)(struct file *, void *, unsigned int *);
+	int (*vidioc_s_input)(struct file *, void *, unsigned int);
+	int (*vidioc_enum_output)(struct file *, void *, struct v4l2_output *);
+	int (*vidioc_g_output)(struct file *, void *, unsigned int *);
+	int (*vidioc_s_output)(struct file *, void *, unsigned int);
+	int (*vidioc_queryctrl)(struct file *, void *, struct v4l2_queryctrl *);
+	int (*vidioc_query_ext_ctrl)(struct file *, void *, struct v4l2_query_ext_ctrl *);
+	int (*vidioc_g_ctrl)(struct file *, void *, struct v4l2_control *);
+	int (*vidioc_s_ctrl)(struct file *, void *, struct v4l2_control *);
+	int (*vidioc_g_ext_ctrls)(struct file *, void *, struct v4l2_ext_controls *);
+	int (*vidioc_s_ext_ctrls)(struct file *, void *, struct v4l2_ext_controls *);
+	int (*vidioc_try_ext_ctrls)(struct file *, void *, struct v4l2_ext_controls *);
+	int (*vidioc_querymenu)(struct file *, void *, struct v4l2_querymenu *);
+	int (*vidioc_enumaudio)(struct file *, void *, struct v4l2_audio *);
+	int (*vidioc_g_audio)(struct file *, void *, struct v4l2_audio *);
+	int (*vidioc_s_audio)(struct file *, void *, const struct v4l2_audio *);
+	int (*vidioc_enumaudout)(struct file *, void *, struct v4l2_audioout *);
+	int (*vidioc_g_audout)(struct file *, void *, struct v4l2_audioout *);
+	int (*vidioc_s_audout)(struct file *, void *, const struct v4l2_audioout *);
+	int (*vidioc_g_modulator)(struct file *, void *, struct v4l2_modulator *);
+	int (*vidioc_s_modulator)(struct file *, void *, const struct v4l2_modulator *);
+	int (*vidioc_g_pixelaspect)(struct file *, void *, int, struct v4l2_fract *);
+	int (*vidioc_g_selection)(struct file *, void *, struct v4l2_selection *);
+	int (*vidioc_s_selection)(struct file *, void *, struct v4l2_selection *);
+	int (*vidioc_g_jpegcomp)(struct file *, void *, struct v4l2_jpegcompression *);
+	int (*vidioc_s_jpegcomp)(struct file *, void *, const struct v4l2_jpegcompression *);
+	int (*vidioc_g_enc_index)(struct file *, void *, struct v4l2_enc_idx *);
+	int (*vidioc_encoder_cmd)(struct file *, void *, struct v4l2_encoder_cmd *);
+	int (*vidioc_try_encoder_cmd)(struct file *, void *, struct v4l2_encoder_cmd *);
+	int (*vidioc_decoder_cmd)(struct file *, void *, struct v4l2_decoder_cmd *);
+	int (*vidioc_try_decoder_cmd)(struct file *, void *, struct v4l2_decoder_cmd *);
+	int (*vidioc_g_parm)(struct file *, void *, struct v4l2_streamparm *);
+	int (*vidioc_s_parm)(struct file *, void *, struct v4l2_streamparm *);
+	int (*vidioc_g_tuner)(struct file *, void *, struct v4l2_tuner *);
+	int (*vidioc_s_tuner)(struct file *, void *, const struct v4l2_tuner *);
+	int (*vidioc_g_frequency)(struct file *, void *, struct v4l2_frequency *);
+	int (*vidioc_s_frequency)(struct file *, void *, const struct v4l2_frequency *);
+	int (*vidioc_enum_freq_bands)(struct file *, void *, struct v4l2_frequency_band *);
+	int (*vidioc_g_sliced_vbi_cap)(struct file *, void *, struct v4l2_sliced_vbi_cap *);
+	int (*vidioc_log_status)(struct file *, void *);
+	int (*vidioc_s_hw_freq_seek)(struct file *, void *, const struct v4l2_hw_freq_seek *);
+	int (*vidioc_enum_framesizes)(struct file *, void *, struct v4l2_frmsizeenum *);
+	int (*vidioc_enum_frameintervals)(struct file *, void *, struct v4l2_frmivalenum *);
+	int (*vidioc_s_dv_timings)(struct file *, void *, struct v4l2_dv_timings *);
+	int (*vidioc_g_dv_timings)(struct file *, void *, struct v4l2_dv_timings *);
+	int (*vidioc_query_dv_timings)(struct file *, void *, struct v4l2_dv_timings *);
+	int (*vidioc_enum_dv_timings)(struct file *, void *, struct v4l2_enum_dv_timings *);
+	int (*vidioc_dv_timings_cap)(struct file *, void *, struct v4l2_dv_timings_cap *);
+	int (*vidioc_g_edid)(struct file *, void *, struct v4l2_edid *);
+	int (*vidioc_s_edid)(struct file *, void *, struct v4l2_edid *);
+	int (*vidioc_subscribe_event)(struct v4l2_fh *, const struct v4l2_event_subscription *);
+	int (*vidioc_unsubscribe_event)(struct v4l2_fh *, const struct v4l2_event_subscription *);
+	long (*vidioc_default)(struct file *, void *, bool, unsigned int, void *);
+};
+
+struct v4l2_timecode {
+	__u32 type;
+	__u32 flags;
+	__u8 frames;
+	__u8 seconds;
+	__u8 minutes;
+	__u8 hours;
+	__u8 userbits[4];
+};
+
+struct vb2_v4l2_buffer {
+	struct vb2_buffer vb2_buf;
+	__u32 flags;
+	__u32 field;
+	struct v4l2_timecode timecode;
+	__u32 sequence;
+	__s32 request_fd;
+	bool is_held;
+	struct vb2_plane planes[8];
+	u64 android_kabi_reserved1;
+};
+
+struct uvc_buffer {
+	struct vb2_v4l2_buffer buf;
+	struct list_head queue;
+	enum uvc_buffer_state state;
+	void *mem;
+	struct sg_table *sgt;
+	struct scatterlist *sg;
+	unsigned int offset;
+	unsigned int length;
+	unsigned int bytesused;
+};
+
+struct v4l2_event_vsync {
+	__u8 field;
+};
+
+struct v4l2_event_ctrl {
+	__u32 changes;
+	__u32 type;
+	union {
+		__s32 value;
+		__s64 value64;
+	};
+	__u32 flags;
+	__s32 minimum;
+	__s32 maximum;
+	__s32 step;
+	__s32 default_value;
+};
+
+struct v4l2_event_frame_sync {
+	__u32 frame_sequence;
+};
+
+struct v4l2_event_src_change {
+	__u32 changes;
+};
+
+struct v4l2_event_motion_det {
+	__u32 flags;
+	__u32 frame_sequence;
+	__u32 region_mask;
+};
+
+struct v4l2_event {
+	__u32 type;
+	union {
+		struct v4l2_event_vsync vsync;
+		struct v4l2_event_ctrl ctrl;
+		struct v4l2_event_frame_sync frame_sync;
+		struct v4l2_event_src_change src_change;
+		struct v4l2_event_motion_det motion_det;
+		__u8 data[64];
+	} u;
+	__u32 pending;
+	__u32 sequence;
+	struct __kernel_timespec timestamp;
+	__u32 id;
+	__u32 reserved[8];
+};
+
+struct uvc_request_data {
+	__s32 length;
+	__u8 data[60];
+};
+
+struct uvc_event {
+	union {
+		enum usb_device_speed speed;
+		struct usb_ctrlrequest req;
+		struct uvc_request_data data;
+	};
+};
+
+struct uvc_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdUVC;
+	__le16 wTotalLength;
+	__le32 dwClockFrequency;
+	__u8 bInCollection;
+	__u8 baInterfaceNr[0];
+} __attribute__((packed));
+
+enum vb2_io_modes {
+	VB2_MMAP = 1,
+	VB2_USERPTR = 2,
+	VB2_READ = 4,
+	VB2_WRITE = 8,
+	VB2_DMABUF = 16,
+};
+
+enum v4l2_field {
+	V4L2_FIELD_ANY = 0,
+	V4L2_FIELD_NONE = 1,
+	V4L2_FIELD_TOP = 2,
+	V4L2_FIELD_BOTTOM = 3,
+	V4L2_FIELD_INTERLACED = 4,
+	V4L2_FIELD_SEQ_TB = 5,
+	V4L2_FIELD_SEQ_BT = 6,
+	V4L2_FIELD_ALTERNATE = 7,
+	V4L2_FIELD_INTERLACED_TB = 8,
+	V4L2_FIELD_INTERLACED_BT = 9,
+};
+
+struct v4l2_requestbuffers {
+	__u32 count;
+	__u32 type;
+	__u32 memory;
+	__u32 capabilities;
+	__u8 flags;
+	__u8 reserved[3];
+};
+
+struct __kernel_v4l2_timeval {
+	long long tv_sec;
+	long long tv_usec;
+};
+
+struct v4l2_plane;
+
+struct v4l2_buffer {
+	__u32 index;
+	__u32 type;
+	__u32 bytesused;
+	__u32 flags;
+	__u32 field;
+	struct __kernel_v4l2_timeval timestamp;
+	struct v4l2_timecode timecode;
+	__u32 sequence;
+	__u32 memory;
+	union {
+		__u32 offset;
+		unsigned long userptr;
+		struct v4l2_plane *planes;
+		__s32 fd;
+	} m;
+	__u32 length;
+	__u32 reserved2;
+	union {
+		__s32 request_fd;
+		__u32 reserved;
+	};
+};
+
+struct v4l2_plane {
+	__u32 bytesused;
+	__u32 length;
+	union {
+		__u32 mem_offset;
+		unsigned long userptr;
+		__s32 fd;
+	} m;
+	__u32 data_offset;
+	__u32 reserved[11];
+};
+
+struct v4l2_capability {
+	__u8 driver[16];
+	__u8 card[32];
+	__u8 bus_info[32];
+	__u32 version;
+	__u32 capabilities;
+	__u32 device_caps;
+	__u32 reserved[3];
+};
+
+struct v4l2_fmtdesc {
+	__u32 index;
+	__u32 type;
+	__u32 flags;
+	__u8 description[32];
+	__u32 pixelformat;
+	__u32 mbus_code;
+	__u32 reserved[3];
+};
+
+struct v4l2_pix_format {
+	__u32 width;
+	__u32 height;
+	__u32 pixelformat;
+	__u32 field;
+	__u32 bytesperline;
+	__u32 sizeimage;
+	__u32 colorspace;
+	__u32 priv;
+	__u32 flags;
+	union {
+		__u32 ycbcr_enc;
+		__u32 hsv_enc;
+	};
+	__u32 quantization;
+	__u32 xfer_func;
+};
+
+struct v4l2_plane_pix_format {
+	__u32 sizeimage;
+	__u32 bytesperline;
+	__u16 reserved[6];
+};
+
+struct v4l2_pix_format_mplane {
+	__u32 width;
+	__u32 height;
+	__u32 pixelformat;
+	__u32 field;
+	__u32 colorspace;
+	struct v4l2_plane_pix_format plane_fmt[8];
+	__u8 num_planes;
+	__u8 flags;
+	union {
+		__u8 ycbcr_enc;
+		__u8 hsv_enc;
+	};
+	__u8 quantization;
+	__u8 xfer_func;
+	__u8 reserved[7];
+};
+
+struct v4l2_clip;
+
+struct v4l2_window {
+	struct v4l2_rect w;
+	__u32 field;
+	__u32 chromakey;
+	struct v4l2_clip *clips;
+	__u32 clipcount;
+	void __attribute__((btf_type_tag("user"))) *bitmap;
+	__u8 global_alpha;
+};
+
+struct v4l2_sdr_format {
+	__u32 pixelformat;
+	__u32 buffersize;
+	__u8 reserved[24];
+};
+
+struct v4l2_meta_format {
+	__u32 dataformat;
+	__u32 buffersize;
+};
+
+struct v4l2_format {
+	__u32 type;
+	union {
+		struct v4l2_pix_format pix;
+		struct v4l2_pix_format_mplane pix_mp;
+		struct v4l2_window win;
+		struct v4l2_vbi_format vbi;
+		struct v4l2_sliced_vbi_format sliced;
+		struct v4l2_sdr_format sdr;
+		struct v4l2_meta_format meta;
+		__u8 raw_data[200];
+	} fmt;
+};
+
+struct v4l2_clip {
+	struct v4l2_rect c;
+	struct v4l2_clip __attribute__((btf_type_tag("user"))) *next;
+};
+
+struct v4l2_exportbuffer {
+	__u32 type;
+	__u32 index;
+	__u32 plane;
+	__u32 flags;
+	__s32 fd;
+	__u32 reserved[11];
+};
+
+struct v4l2_create_buffers {
+	__u32 index;
+	__u32 count;
+	__u32 memory;
+	struct v4l2_format format;
+	__u32 capabilities;
+	__u32 flags;
+	__u32 reserved[6];
+};
+
+struct v4l2_framebuffer {
+	__u32 capability;
+	__u32 flags;
+	void *base;
+	struct {
+		__u32 width;
+		__u32 height;
+		__u32 pixelformat;
+		__u32 field;
+		__u32 bytesperline;
+		__u32 sizeimage;
+		__u32 colorspace;
+		__u32 priv;
+	} fmt;
+};
+
+struct v4l2_input {
+	__u32 index;
+	__u8 name[32];
+	__u32 type;
+	__u32 audioset;
+	__u32 tuner;
+	v4l2_std_id std;
+	__u32 status;
+	__u32 capabilities;
+	__u32 reserved[3];
+};
+
+struct v4l2_output {
+	__u32 index;
+	__u8 name[32];
+	__u32 type;
+	__u32 audioset;
+	__u32 modulator;
+	v4l2_std_id std;
+	__u32 capabilities;
+	__u32 reserved[3];
+};
+
+struct v4l2_queryctrl {
+	__u32 id;
+	__u32 type;
+	__u8 name[32];
+	__s32 minimum;
+	__s32 maximum;
+	__s32 step;
+	__s32 default_value;
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct v4l2_query_ext_ctrl {
+	__u32 id;
+	__u32 type;
+	char name[32];
+	__s64 minimum;
+	__s64 maximum;
+	__u64 step;
+	__s64 default_value;
+	__u32 flags;
+	__u32 elem_size;
+	__u32 elems;
+	__u32 nr_of_dims;
+	__u32 dims[4];
+	__u32 reserved[32];
+};
+
+struct v4l2_control {
+	__u32 id;
+	__s32 value;
+};
+
+struct v4l2_ext_control;
+
+struct v4l2_ext_controls {
+	union {
+		__u32 which;
+	};
+	__u32 count;
+	__u32 error_idx;
+	__s32 request_fd;
+	__u32 reserved[1];
+	struct v4l2_ext_control *controls;
+};
+
+struct v4l2_area;
+
+struct v4l2_ctrl_h264_sps;
+
+struct v4l2_ctrl_h264_pps;
+
+struct v4l2_ctrl_h264_scaling_matrix;
+
+struct v4l2_ctrl_h264_pred_weights;
+
+struct v4l2_ctrl_h264_slice_params;
+
+struct v4l2_ctrl_h264_decode_params;
+
+struct v4l2_ctrl_fwht_params;
+
+struct v4l2_ctrl_vp8_frame;
+
+struct v4l2_ctrl_mpeg2_sequence;
+
+struct v4l2_ctrl_mpeg2_picture;
+
+struct v4l2_ctrl_mpeg2_quantisation;
+
+struct v4l2_ctrl_vp9_compressed_hdr;
+
+struct v4l2_ctrl_vp9_frame;
+
+struct v4l2_ctrl_hevc_sps;
+
+struct v4l2_ctrl_hevc_pps;
+
+struct v4l2_ctrl_hevc_slice_params;
+
+struct v4l2_ctrl_hevc_scaling_matrix;
+
+struct v4l2_ctrl_hevc_decode_params;
+
+struct v4l2_ctrl_av1_sequence;
+
+struct v4l2_ctrl_av1_tile_group_entry;
+
+struct v4l2_ctrl_av1_frame;
+
+struct v4l2_ctrl_av1_film_grain;
+
+struct v4l2_ext_control {
+	__u32 id;
+	__u32 size;
+	__u32 reserved2[1];
+	union {
+		__s32 value;
+		__s64 value64;
+		char __attribute__((btf_type_tag("user"))) *string;
+		__u8 __attribute__((btf_type_tag("user"))) *p_u8;
+		__u16 __attribute__((btf_type_tag("user"))) *p_u16;
+		__u32 __attribute__((btf_type_tag("user"))) *p_u32;
+		__s32 __attribute__((btf_type_tag("user"))) *p_s32;
+		__s64 __attribute__((btf_type_tag("user"))) *p_s64;
+		struct v4l2_area __attribute__((btf_type_tag("user"))) *p_area;
+		struct v4l2_ctrl_h264_sps __attribute__((btf_type_tag("user"))) *p_h264_sps;
+		struct v4l2_ctrl_h264_pps *p_h264_pps;
+		struct v4l2_ctrl_h264_scaling_matrix __attribute__((btf_type_tag("user"))) *p_h264_scaling_matrix;
+		struct v4l2_ctrl_h264_pred_weights __attribute__((btf_type_tag("user"))) *p_h264_pred_weights;
+		struct v4l2_ctrl_h264_slice_params __attribute__((btf_type_tag("user"))) *p_h264_slice_params;
+		struct v4l2_ctrl_h264_decode_params __attribute__((btf_type_tag("user"))) *p_h264_decode_params;
+		struct v4l2_ctrl_fwht_params __attribute__((btf_type_tag("user"))) *p_fwht_params;
+		struct v4l2_ctrl_vp8_frame __attribute__((btf_type_tag("user"))) *p_vp8_frame;
+		struct v4l2_ctrl_mpeg2_sequence __attribute__((btf_type_tag("user"))) *p_mpeg2_sequence;
+		struct v4l2_ctrl_mpeg2_picture __attribute__((btf_type_tag("user"))) *p_mpeg2_picture;
+		struct v4l2_ctrl_mpeg2_quantisation __attribute__((btf_type_tag("user"))) *p_mpeg2_quantisation;
+		struct v4l2_ctrl_vp9_compressed_hdr __attribute__((btf_type_tag("user"))) *p_vp9_compressed_hdr_probs;
+		struct v4l2_ctrl_vp9_frame __attribute__((btf_type_tag("user"))) *p_vp9_frame;
+		struct v4l2_ctrl_hevc_sps __attribute__((btf_type_tag("user"))) *p_hevc_sps;
+		struct v4l2_ctrl_hevc_pps __attribute__((btf_type_tag("user"))) *p_hevc_pps;
+		struct v4l2_ctrl_hevc_slice_params __attribute__((btf_type_tag("user"))) *p_hevc_slice_params;
+		struct v4l2_ctrl_hevc_scaling_matrix __attribute__((btf_type_tag("user"))) *p_hevc_scaling_matrix;
+		struct v4l2_ctrl_hevc_decode_params __attribute__((btf_type_tag("user"))) *p_hevc_decode_params;
+		struct v4l2_ctrl_av1_sequence __attribute__((btf_type_tag("user"))) *p_av1_sequence;
+		struct v4l2_ctrl_av1_tile_group_entry __attribute__((btf_type_tag("user"))) *p_av1_tile_group_entry;
+		struct v4l2_ctrl_av1_frame __attribute__((btf_type_tag("user"))) *p_av1_frame;
+		struct v4l2_ctrl_av1_film_grain __attribute__((btf_type_tag("user"))) *p_av1_film_grain;
+		void __attribute__((btf_type_tag("user"))) *ptr;
+	};
+} __attribute__((packed));
+
+struct v4l2_area {
+	__u32 width;
+	__u32 height;
+};
+
+struct v4l2_ctrl_h264_sps {
+	__u8 profile_idc;
+	__u8 constraint_set_flags;
+	__u8 level_idc;
+	__u8 seq_parameter_set_id;
+	__u8 chroma_format_idc;
+	__u8 bit_depth_luma_minus8;
+	__u8 bit_depth_chroma_minus8;
+	__u8 log2_max_frame_num_minus4;
+	__u8 pic_order_cnt_type;
+	__u8 log2_max_pic_order_cnt_lsb_minus4;
+	__u8 max_num_ref_frames;
+	__u8 num_ref_frames_in_pic_order_cnt_cycle;
+	__s32 offset_for_ref_frame[255];
+	__s32 offset_for_non_ref_pic;
+	__s32 offset_for_top_to_bottom_field;
+	__u16 pic_width_in_mbs_minus1;
+	__u16 pic_height_in_map_units_minus1;
+	__u32 flags;
+};
+
+struct v4l2_ctrl_h264_pps {
+	__u8 pic_parameter_set_id;
+	__u8 seq_parameter_set_id;
+	__u8 num_slice_groups_minus1;
+	__u8 num_ref_idx_l0_default_active_minus1;
+	__u8 num_ref_idx_l1_default_active_minus1;
+	__u8 weighted_bipred_idc;
+	__s8 pic_init_qp_minus26;
+	__s8 pic_init_qs_minus26;
+	__s8 chroma_qp_index_offset;
+	__s8 second_chroma_qp_index_offset;
+	__u16 flags;
+};
+
+struct v4l2_ctrl_h264_scaling_matrix {
+	__u8 scaling_list_4x4[96];
+	__u8 scaling_list_8x8[384];
+};
+
+struct v4l2_h264_weight_factors {
+	__s16 luma_weight[32];
+	__s16 luma_offset[32];
+	__s16 chroma_weight[64];
+	__s16 chroma_offset[64];
+};
+
+struct v4l2_ctrl_h264_pred_weights {
+	__u16 luma_log2_weight_denom;
+	__u16 chroma_log2_weight_denom;
+	struct v4l2_h264_weight_factors weight_factors[2];
+};
+
+struct v4l2_h264_reference {
+	__u8 fields;
+	__u8 index;
+};
+
+struct v4l2_ctrl_h264_slice_params {
+	__u32 header_bit_size;
+	__u32 first_mb_in_slice;
+	__u8 slice_type;
+	__u8 colour_plane_id;
+	__u8 redundant_pic_cnt;
+	__u8 cabac_init_idc;
+	__s8 slice_qp_delta;
+	__s8 slice_qs_delta;
+	__u8 disable_deblocking_filter_idc;
+	__s8 slice_alpha_c0_offset_div2;
+	__s8 slice_beta_offset_div2;
+	__u8 num_ref_idx_l0_active_minus1;
+	__u8 num_ref_idx_l1_active_minus1;
+	__u8 reserved;
+	struct v4l2_h264_reference ref_pic_list0[32];
+	struct v4l2_h264_reference ref_pic_list1[32];
+	__u32 flags;
+};
+
+struct v4l2_h264_dpb_entry {
+	__u64 reference_ts;
+	__u32 pic_num;
+	__u16 frame_num;
+	__u8 fields;
+	__u8 reserved[5];
+	__s32 top_field_order_cnt;
+	__s32 bottom_field_order_cnt;
+	__u32 flags;
+};
+
+struct v4l2_ctrl_h264_decode_params {
+	struct v4l2_h264_dpb_entry dpb[16];
+	__u16 nal_ref_idc;
+	__u16 frame_num;
+	__s32 top_field_order_cnt;
+	__s32 bottom_field_order_cnt;
+	__u16 idr_pic_id;
+	__u16 pic_order_cnt_lsb;
+	__s32 delta_pic_order_cnt_bottom;
+	__s32 delta_pic_order_cnt0;
+	__s32 delta_pic_order_cnt1;
+	__u32 dec_ref_pic_marking_bit_size;
+	__u32 pic_order_cnt_bit_size;
+	__u32 slice_group_change_cycle;
+	__u32 reserved;
+	__u32 flags;
+};
+
+struct v4l2_ctrl_fwht_params {
+	__u64 backward_ref_ts;
+	__u32 version;
+	__u32 width;
+	__u32 height;
+	__u32 flags;
+	__u32 colorspace;
+	__u32 xfer_func;
+	__u32 ycbcr_enc;
+	__u32 quantization;
+};
+
+struct v4l2_vp8_segment {
+	__s8 quant_update[4];
+	__s8 lf_update[4];
+	__u8 segment_probs[3];
+	__u8 padding;
+	__u32 flags;
+};
+
+struct v4l2_vp8_loop_filter {
+	__s8 ref_frm_delta[4];
+	__s8 mb_mode_delta[4];
+	__u8 sharpness_level;
+	__u8 level;
+	__u16 padding;
+	__u32 flags;
+};
+
+struct v4l2_vp8_quantization {
+	__u8 y_ac_qi;
+	__s8 y_dc_delta;
+	__s8 y2_dc_delta;
+	__s8 y2_ac_delta;
+	__s8 uv_dc_delta;
+	__s8 uv_ac_delta;
+	__u16 padding;
+};
+
+struct v4l2_vp8_entropy {
+	__u8 coeff_probs[1056];
+	__u8 y_mode_probs[4];
+	__u8 uv_mode_probs[3];
+	__u8 mv_probs[38];
+	__u8 padding[3];
+};
+
+struct v4l2_vp8_entropy_coder_state {
+	__u8 range;
+	__u8 value;
+	__u8 bit_count;
+	__u8 padding;
+};
+
+struct v4l2_ctrl_vp8_frame {
+	struct v4l2_vp8_segment segment;
+	struct v4l2_vp8_loop_filter lf;
+	struct v4l2_vp8_quantization quant;
+	struct v4l2_vp8_entropy entropy;
+	struct v4l2_vp8_entropy_coder_state coder_state;
+	__u16 width;
+	__u16 height;
+	__u8 horizontal_scale;
+	__u8 vertical_scale;
+	__u8 version;
+	__u8 prob_skip_false;
+	__u8 prob_intra;
+	__u8 prob_last;
+	__u8 prob_gf;
+	__u8 num_dct_parts;
+	__u32 first_part_size;
+	__u32 first_part_header_bits;
+	__u32 dct_part_sizes[8];
+	__u64 last_frame_ts;
+	__u64 golden_frame_ts;
+	__u64 alt_frame_ts;
+	__u64 flags;
+};
+
+struct v4l2_ctrl_mpeg2_sequence {
+	__u16 horizontal_size;
+	__u16 vertical_size;
+	__u32 vbv_buffer_size;
+	__u16 profile_and_level_indication;
+	__u8 chroma_format;
+	__u8 flags;
+};
+
+struct v4l2_ctrl_mpeg2_picture {
+	__u64 backward_ref_ts;
+	__u64 forward_ref_ts;
+	__u32 flags;
+	__u8 f_code[4];
+	__u8 picture_coding_type;
+	__u8 picture_structure;
+	__u8 intra_dc_precision;
+	__u8 reserved[5];
+};
+
+struct v4l2_ctrl_mpeg2_quantisation {
+	__u8 intra_quantiser_matrix[64];
+	__u8 non_intra_quantiser_matrix[64];
+	__u8 chroma_intra_quantiser_matrix[64];
+	__u8 chroma_non_intra_quantiser_matrix[64];
+};
+
+struct v4l2_vp9_mv_probs {
+	__u8 joint[3];
+	__u8 sign[2];
+	__u8 classes[20];
+	__u8 class0_bit[2];
+	__u8 bits[20];
+	__u8 class0_fr[12];
+	__u8 fr[6];
+	__u8 class0_hp[2];
+	__u8 hp[2];
+};
+
+struct v4l2_ctrl_vp9_compressed_hdr {
+	__u8 tx_mode;
+	__u8 tx8[2];
+	__u8 tx16[4];
+	__u8 tx32[6];
+	__u8 coef[1728];
+	__u8 skip[3];
+	__u8 inter_mode[21];
+	__u8 interp_filter[8];
+	__u8 is_inter[4];
+	__u8 comp_mode[5];
+	__u8 single_ref[10];
+	__u8 comp_ref[5];
+	__u8 y_mode[36];
+	__u8 uv_mode[90];
+	__u8 partition[48];
+	struct v4l2_vp9_mv_probs mv;
+};
+
+struct v4l2_vp9_loop_filter {
+	__s8 ref_deltas[4];
+	__s8 mode_deltas[2];
+	__u8 level;
+	__u8 sharpness;
+	__u8 flags;
+	__u8 reserved[7];
+};
+
+struct v4l2_vp9_quantization {
+	__u8 base_q_idx;
+	__s8 delta_q_y_dc;
+	__s8 delta_q_uv_dc;
+	__s8 delta_q_uv_ac;
+	__u8 reserved[4];
+};
+
+struct v4l2_vp9_segmentation {
+	__s16 feature_data[32];
+	__u8 feature_enabled[8];
+	__u8 tree_probs[7];
+	__u8 pred_probs[3];
+	__u8 flags;
+	__u8 reserved[5];
+};
+
+struct v4l2_ctrl_vp9_frame {
+	struct v4l2_vp9_loop_filter lf;
+	struct v4l2_vp9_quantization quant;
+	struct v4l2_vp9_segmentation seg;
+	__u32 flags;
+	__u16 compressed_header_size;
+	__u16 uncompressed_header_size;
+	__u16 frame_width_minus_1;
+	__u16 frame_height_minus_1;
+	__u16 render_width_minus_1;
+	__u16 render_height_minus_1;
+	__u64 last_frame_ts;
+	__u64 golden_frame_ts;
+	__u64 alt_frame_ts;
+	__u8 ref_frame_sign_bias;
+	__u8 reset_frame_context;
+	__u8 frame_context_idx;
+	__u8 profile;
+	__u8 bit_depth;
+	__u8 interpolation_filter;
+	__u8 tile_cols_log2;
+	__u8 tile_rows_log2;
+	__u8 reference_mode;
+	__u8 reserved[7];
+};
+
+struct v4l2_ctrl_hevc_sps {
+	__u8 video_parameter_set_id;
+	__u8 seq_parameter_set_id;
+	__u16 pic_width_in_luma_samples;
+	__u16 pic_height_in_luma_samples;
+	__u8 bit_depth_luma_minus8;
+	__u8 bit_depth_chroma_minus8;
+	__u8 log2_max_pic_order_cnt_lsb_minus4;
+	__u8 sps_max_dec_pic_buffering_minus1;
+	__u8 sps_max_num_reorder_pics;
+	__u8 sps_max_latency_increase_plus1;
+	__u8 log2_min_luma_coding_block_size_minus3;
+	__u8 log2_diff_max_min_luma_coding_block_size;
+	__u8 log2_min_luma_transform_block_size_minus2;
+	__u8 log2_diff_max_min_luma_transform_block_size;
+	__u8 max_transform_hierarchy_depth_inter;
+	__u8 max_transform_hierarchy_depth_intra;
+	__u8 pcm_sample_bit_depth_luma_minus1;
+	__u8 pcm_sample_bit_depth_chroma_minus1;
+	__u8 log2_min_pcm_luma_coding_block_size_minus3;
+	__u8 log2_diff_max_min_pcm_luma_coding_block_size;
+	__u8 num_short_term_ref_pic_sets;
+	__u8 num_long_term_ref_pics_sps;
+	__u8 chroma_format_idc;
+	__u8 sps_max_sub_layers_minus1;
+	__u8 reserved[6];
+	__u64 flags;
+};
+
+struct v4l2_ctrl_hevc_pps {
+	__u8 pic_parameter_set_id;
+	__u8 num_extra_slice_header_bits;
+	__u8 num_ref_idx_l0_default_active_minus1;
+	__u8 num_ref_idx_l1_default_active_minus1;
+	__s8 init_qp_minus26;
+	__u8 diff_cu_qp_delta_depth;
+	__s8 pps_cb_qp_offset;
+	__s8 pps_cr_qp_offset;
+	__u8 num_tile_columns_minus1;
+	__u8 num_tile_rows_minus1;
+	__u8 column_width_minus1[20];
+	__u8 row_height_minus1[22];
+	__s8 pps_beta_offset_div2;
+	__s8 pps_tc_offset_div2;
+	__u8 log2_parallel_merge_level_minus2;
+	__u8 reserved;
+	__u64 flags;
+};
+
+struct v4l2_hevc_pred_weight_table {
+	__s8 delta_luma_weight_l0[16];
+	__s8 luma_offset_l0[16];
+	__s8 delta_chroma_weight_l0[32];
+	__s8 chroma_offset_l0[32];
+	__s8 delta_luma_weight_l1[16];
+	__s8 luma_offset_l1[16];
+	__s8 delta_chroma_weight_l1[32];
+	__s8 chroma_offset_l1[32];
+	__u8 luma_log2_weight_denom;
+	__s8 delta_chroma_log2_weight_denom;
+};
+
+struct v4l2_ctrl_hevc_slice_params {
+	__u32 bit_size;
+	__u32 data_byte_offset;
+	__u32 num_entry_point_offsets;
+	__u8 nal_unit_type;
+	__u8 nuh_temporal_id_plus1;
+	__u8 slice_type;
+	__u8 colour_plane_id;
+	__s32 slice_pic_order_cnt;
+	__u8 num_ref_idx_l0_active_minus1;
+	__u8 num_ref_idx_l1_active_minus1;
+	__u8 collocated_ref_idx;
+	__u8 five_minus_max_num_merge_cand;
+	__s8 slice_qp_delta;
+	__s8 slice_cb_qp_offset;
+	__s8 slice_cr_qp_offset;
+	__s8 slice_act_y_qp_offset;
+	__s8 slice_act_cb_qp_offset;
+	__s8 slice_act_cr_qp_offset;
+	__s8 slice_beta_offset_div2;
+	__s8 slice_tc_offset_div2;
+	__u8 pic_struct;
+	__u8 reserved0[3];
+	__u32 slice_segment_addr;
+	__u8 ref_idx_l0[16];
+	__u8 ref_idx_l1[16];
+	__u16 short_term_ref_pic_set_size;
+	__u16 long_term_ref_pic_set_size;
+	struct v4l2_hevc_pred_weight_table pred_weight_table;
+	__u8 reserved1[2];
+	__u64 flags;
+};
+
+struct v4l2_ctrl_hevc_scaling_matrix {
+	__u8 scaling_list_4x4[96];
+	__u8 scaling_list_8x8[384];
+	__u8 scaling_list_16x16[384];
+	__u8 scaling_list_32x32[128];
+	__u8 scaling_list_dc_coef_16x16[6];
+	__u8 scaling_list_dc_coef_32x32[2];
+};
+
+struct v4l2_hevc_dpb_entry {
+	__u64 timestamp;
+	__u8 flags;
+	__u8 field_pic;
+	__u16 reserved;
+	__s32 pic_order_cnt_val;
+};
+
+struct v4l2_ctrl_hevc_decode_params {
+	__s32 pic_order_cnt_val;
+	__u16 short_term_ref_pic_set_size;
+	__u16 long_term_ref_pic_set_size;
+	__u8 num_active_dpb_entries;
+	__u8 num_poc_st_curr_before;
+	__u8 num_poc_st_curr_after;
+	__u8 num_poc_lt_curr;
+	__u8 poc_st_curr_before[16];
+	__u8 poc_st_curr_after[16];
+	__u8 poc_lt_curr[16];
+	__u8 num_delta_pocs_of_ref_rps_idx;
+	__u8 reserved[3];
+	struct v4l2_hevc_dpb_entry dpb[16];
+	__u64 flags;
+};
+
+struct v4l2_ctrl_av1_sequence {
+	__u32 flags;
+	__u8 seq_profile;
+	__u8 order_hint_bits;
+	__u8 bit_depth;
+	__u8 reserved;
+	__u16 max_frame_width_minus_1;
+	__u16 max_frame_height_minus_1;
+};
+
+struct v4l2_ctrl_av1_tile_group_entry {
+	__u32 tile_offset;
+	__u32 tile_size;
+	__u32 tile_row;
+	__u32 tile_col;
+};
+
+struct v4l2_av1_tile_info {
+	__u8 flags;
+	__u8 context_update_tile_id;
+	__u8 tile_cols;
+	__u8 tile_rows;
+	__u32 mi_col_starts[65];
+	__u32 mi_row_starts[65];
+	__u32 width_in_sbs_minus_1[64];
+	__u32 height_in_sbs_minus_1[64];
+	__u8 tile_size_bytes;
+	__u8 reserved[3];
+};
+
+struct v4l2_av1_quantization {
+	__u8 flags;
+	__u8 base_q_idx;
+	__s8 delta_q_y_dc;
+	__s8 delta_q_u_dc;
+	__s8 delta_q_u_ac;
+	__s8 delta_q_v_dc;
+	__s8 delta_q_v_ac;
+	__u8 qm_y;
+	__u8 qm_u;
+	__u8 qm_v;
+	__u8 delta_q_res;
+};
+
+struct v4l2_av1_segmentation {
+	__u8 flags;
+	__u8 last_active_seg_id;
+	__u8 feature_enabled[8];
+	__s16 feature_data[64];
+};
+
+struct v4l2_av1_loop_filter {
+	__u8 flags;
+	__u8 level[4];
+	__u8 sharpness;
+	__s8 ref_deltas[8];
+	__s8 mode_deltas[2];
+	__u8 delta_lf_res;
+};
+
+struct v4l2_av1_cdef {
+	__u8 damping_minus_3;
+	__u8 bits;
+	__u8 y_pri_strength[8];
+	__u8 y_sec_strength[8];
+	__u8 uv_pri_strength[8];
+	__u8 uv_sec_strength[8];
+};
+
+enum v4l2_av1_frame_restoration_type {
+	V4L2_AV1_FRAME_RESTORE_NONE = 0,
+	V4L2_AV1_FRAME_RESTORE_WIENER = 1,
+	V4L2_AV1_FRAME_RESTORE_SGRPROJ = 2,
+	V4L2_AV1_FRAME_RESTORE_SWITCHABLE = 3,
+};
+
+struct v4l2_av1_loop_restoration {
+	__u8 flags;
+	__u8 lr_unit_shift;
+	__u8 lr_uv_shift;
+	__u8 reserved;
+	enum v4l2_av1_frame_restoration_type frame_restoration_type[3];
+	__u32 loop_restoration_size[3];
+};
+
+enum v4l2_av1_warp_model {
+	V4L2_AV1_WARP_MODEL_IDENTITY = 0,
+	V4L2_AV1_WARP_MODEL_TRANSLATION = 1,
+	V4L2_AV1_WARP_MODEL_ROTZOOM = 2,
+	V4L2_AV1_WARP_MODEL_AFFINE = 3,
+};
+
+struct v4l2_av1_global_motion {
+	__u8 flags[8];
+	enum v4l2_av1_warp_model type[8];
+	__s32 params[48];
+	__u8 invalid;
+	__u8 reserved[3];
+};
+
+enum v4l2_av1_frame_type {
+	V4L2_AV1_KEY_FRAME = 0,
+	V4L2_AV1_INTER_FRAME = 1,
+	V4L2_AV1_INTRA_ONLY_FRAME = 2,
+	V4L2_AV1_SWITCH_FRAME = 3,
+};
+
+enum v4l2_av1_interpolation_filter {
+	V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP = 0,
+	V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1,
+	V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2,
+	V4L2_AV1_INTERPOLATION_FILTER_BILINEAR = 3,
+	V4L2_AV1_INTERPOLATION_FILTER_SWITCHABLE = 4,
+};
+
+enum v4l2_av1_tx_mode {
+	V4L2_AV1_TX_MODE_ONLY_4X4 = 0,
+	V4L2_AV1_TX_MODE_LARGEST = 1,
+	V4L2_AV1_TX_MODE_SELECT = 2,
+};
+
+struct v4l2_ctrl_av1_frame {
+	struct v4l2_av1_tile_info tile_info;
+	struct v4l2_av1_quantization quantization;
+	__u8 superres_denom;
+	struct v4l2_av1_segmentation segmentation;
+	struct v4l2_av1_loop_filter loop_filter;
+	struct v4l2_av1_cdef cdef;
+	__u8 skip_mode_frame[2];
+	__u8 primary_ref_frame;
+	struct v4l2_av1_loop_restoration loop_restoration;
+	struct v4l2_av1_global_motion global_motion;
+	__u32 flags;
+	enum v4l2_av1_frame_type frame_type;
+	__u32 order_hint;
+	__u32 upscaled_width;
+	enum v4l2_av1_interpolation_filter interpolation_filter;
+	enum v4l2_av1_tx_mode tx_mode;
+	__u32 frame_width_minus_1;
+	__u32 frame_height_minus_1;
+	__u16 render_width_minus_1;
+	__u16 render_height_minus_1;
+	__u32 current_frame_id;
+	__u32 buffer_removal_time[32];
+	__u8 reserved[4];
+	__u32 order_hints[8];
+	__u64 reference_frame_ts[8];
+	__s8 ref_frame_idx[7];
+	__u8 refresh_frame_flags;
+};
+
+struct v4l2_ctrl_av1_film_grain {
+	__u8 flags;
+	__u8 cr_mult;
+	__u16 grain_seed;
+	__u8 film_grain_params_ref_idx;
+	__u8 num_y_points;
+	__u8 point_y_value[16];
+	__u8 point_y_scaling[16];
+	__u8 num_cb_points;
+	__u8 point_cb_value[16];
+	__u8 point_cb_scaling[16];
+	__u8 num_cr_points;
+	__u8 point_cr_value[16];
+	__u8 point_cr_scaling[16];
+	__u8 grain_scaling_minus_8;
+	__u8 ar_coeff_lag;
+	__u8 ar_coeffs_y_plus_128[25];
+	__u8 ar_coeffs_cb_plus_128[25];
+	__u8 ar_coeffs_cr_plus_128[25];
+	__u8 ar_coeff_shift_minus_6;
+	__u8 grain_scale_shift;
+	__u8 cb_mult;
+	__u8 cb_luma_mult;
+	__u8 cr_luma_mult;
+	__u16 cb_offset;
+	__u16 cr_offset;
+	__u8 reserved[4];
+};
+
+struct v4l2_querymenu {
+	__u32 id;
+	__u32 index;
+	union {
+		__u8 name[32];
+		__s64 value;
+	};
+	__u32 reserved;
+} __attribute__((packed));
+
+struct v4l2_audio {
+	__u32 index;
+	__u8 name[32];
+	__u32 capability;
+	__u32 mode;
+	__u32 reserved[2];
+};
+
+struct v4l2_audioout {
+	__u32 index;
+	__u8 name[32];
+	__u32 capability;
+	__u32 mode;
+	__u32 reserved[2];
+};
+
+struct v4l2_selection {
+	__u32 type;
+	__u32 target;
+	__u32 flags;
+	struct v4l2_rect r;
+	__u32 reserved[9];
+};
+
+struct v4l2_jpegcompression {
+	int quality;
+	int APPn;
+	int APP_len;
+	char APP_data[60];
+	int COM_len;
+	char COM_data[60];
+	__u32 jpeg_markers;
+};
+
+struct v4l2_enc_idx_entry {
+	__u64 offset;
+	__u64 pts;
+	__u32 length;
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct v4l2_enc_idx {
+	__u32 entries;
+	__u32 entries_cap;
+	__u32 reserved[4];
+	struct v4l2_enc_idx_entry entry[64];
+};
+
+struct v4l2_encoder_cmd {
+	__u32 cmd;
+	__u32 flags;
+	union {
+		struct {
+			__u32 data[8];
+		} raw;
+	};
+};
+
+struct v4l2_decoder_cmd {
+	__u32 cmd;
+	__u32 flags;
+	union {
+		struct {
+			__u64 pts;
+		} stop;
+		struct {
+			__s32 speed;
+			__u32 format;
+		} start;
+		struct {
+			__u32 data[16];
+		} raw;
+	};
+};
+
+struct v4l2_captureparm {
+	__u32 capability;
+	__u32 capturemode;
+	struct v4l2_fract timeperframe;
+	__u32 extendedmode;
+	__u32 readbuffers;
+	__u32 reserved[4];
+};
+
+struct v4l2_outputparm {
+	__u32 capability;
+	__u32 outputmode;
+	struct v4l2_fract timeperframe;
+	__u32 extendedmode;
+	__u32 writebuffers;
+	__u32 reserved[4];
+};
+
+struct v4l2_streamparm {
+	__u32 type;
+	union {
+		struct v4l2_captureparm capture;
+		struct v4l2_outputparm output;
+		__u8 raw_data[200];
+	} parm;
+};
+
+struct v4l2_hw_freq_seek {
+	__u32 tuner;
+	__u32 type;
+	__u32 seek_upward;
+	__u32 wrap_around;
+	__u32 spacing;
+	__u32 rangelow;
+	__u32 rangehigh;
+	__u32 reserved[5];
+};
+
+struct v4l2_frmsize_discrete {
+	__u32 width;
+	__u32 height;
+};
+
+struct v4l2_frmsize_stepwise {
+	__u32 min_width;
+	__u32 max_width;
+	__u32 step_width;
+	__u32 min_height;
+	__u32 max_height;
+	__u32 step_height;
+};
+
+struct v4l2_frmsizeenum {
+	__u32 index;
+	__u32 pixel_format;
+	__u32 type;
+	union {
+		struct v4l2_frmsize_discrete discrete;
+		struct v4l2_frmsize_stepwise stepwise;
+	};
+	__u32 reserved[2];
+};
+
+struct v4l2_frmival_stepwise {
+	struct v4l2_fract min;
+	struct v4l2_fract max;
+	struct v4l2_fract step;
+};
+
+struct v4l2_frmivalenum {
+	__u32 index;
+	__u32 pixel_format;
+	__u32 width;
+	__u32 height;
+	__u32 type;
+	union {
+		struct v4l2_fract discrete;
+		struct v4l2_frmival_stepwise stepwise;
+	};
+	__u32 reserved[2];
+};
+
+enum uvcg_format_type {
+	UVCG_UNCOMPRESSED = 0,
+	UVCG_MJPEG = 1,
+};
+
+enum v4l2_colorspace {
+	V4L2_COLORSPACE_DEFAULT = 0,
+	V4L2_COLORSPACE_SMPTE170M = 1,
+	V4L2_COLORSPACE_SMPTE240M = 2,
+	V4L2_COLORSPACE_REC709 = 3,
+	V4L2_COLORSPACE_BT878 = 4,
+	V4L2_COLORSPACE_470_SYSTEM_M = 5,
+	V4L2_COLORSPACE_470_SYSTEM_BG = 6,
+	V4L2_COLORSPACE_JPEG = 7,
+	V4L2_COLORSPACE_SRGB = 8,
+	V4L2_COLORSPACE_OPRGB = 9,
+	V4L2_COLORSPACE_BT2020 = 10,
+	V4L2_COLORSPACE_RAW = 11,
+	V4L2_COLORSPACE_DCI_P3 = 12,
+	V4L2_COLORSPACE_LAST = 13,
+};
+
+enum v4l2_frmsizetypes {
+	V4L2_FRMSIZE_TYPE_DISCRETE = 1,
+	V4L2_FRMSIZE_TYPE_CONTINUOUS = 2,
+	V4L2_FRMSIZE_TYPE_STEPWISE = 3,
+};
+
+enum v4l2_frmivaltypes {
+	V4L2_FRMIVAL_TYPE_DISCRETE = 1,
+	V4L2_FRMIVAL_TYPE_CONTINUOUS = 2,
+	V4L2_FRMIVAL_TYPE_STEPWISE = 3,
+};
+
+struct uvcg_format;
+
+struct uvcg_format_ptr {
+	struct uvcg_format *fmt;
+	struct list_head entry;
+};
+
+struct uvcg_color_matching;
+
+struct uvcg_format {
+	struct config_group group;
+	enum uvcg_format_type type;
+	unsigned int linked;
+	struct list_head frames;
+	unsigned int num_frames;
+	__u8 bmaControls[1];
+	struct uvcg_color_matching *color_matching;
+};
+
+struct uvc_color_matching_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bColorPrimaries;
+	__u8 bTransferCharacteristics;
+	__u8 bMatrixCoefficients;
+};
+
+struct uvcg_color_matching {
+	struct config_group group;
+	struct uvc_color_matching_descriptor desc;
+	unsigned int refcnt;
+};
+
+struct uvc_format_uncompressed {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bFormatIndex;
+	__u8 bNumFrameDescriptors;
+	__u8 guidFormat[16];
+	__u8 bBitsPerPixel;
+	__u8 bDefaultFrameIndex;
+	__u8 bAspectRatioX;
+	__u8 bAspectRatioY;
+	__u8 bmInterlaceFlags;
+	__u8 bCopyProtect;
+};
+
+struct uvcg_uncompressed {
+	struct uvcg_format fmt;
+	struct uvc_format_uncompressed desc;
+};
+
+struct uvcg_frame;
+
+struct uvcg_frame_ptr {
+	struct uvcg_frame *frm;
+	struct list_head entry;
+};
+
+struct uvcg_frame {
+	struct config_item item;
+	enum uvcg_format_type fmt_type;
+	struct {
+		u8 b_length;
+		u8 b_descriptor_type;
+		u8 b_descriptor_subtype;
+		u8 b_frame_index;
+		u8 bm_capabilities;
+		u16 w_width;
+		u16 w_height;
+		u32 dw_min_bit_rate;
+		u32 dw_max_bit_rate;
+		u32 dw_max_video_frame_buffer_size;
+		u32 dw_default_frame_interval;
+		u8 b_frame_interval_type;
+	} __attribute__((packed)) frame;
+	u32 *dw_frame_interval;
+};
+
+struct uvc_file_handle {
+	struct v4l2_fh vfh;
+	struct uvc_video *device;
+	bool is_uvc_app_handle;
+};
+
+struct uvc_format_desc {
+	u8 guid[16];
+	u32 fcc;
+};
+
+struct v4l2_subscribed_event;
+
+struct v4l2_subscribed_event_ops {
+	int (*add)(struct v4l2_subscribed_event *, unsigned int);
+	void (*del)(struct v4l2_subscribed_event *);
+	void (*replace)(struct v4l2_event *, const struct v4l2_event *);
+	void (*merge)(const struct v4l2_event *, struct v4l2_event *);
+};
+
+struct v4l2_kevent {
+	struct list_head list;
+	struct v4l2_subscribed_event *sev;
+	struct v4l2_event event;
+	u64 ts;
+};
+
+struct v4l2_subscribed_event {
+	struct list_head list;
+	u32 type;
+	u32 id;
+	u32 flags;
+	struct v4l2_fh *fh;
+	struct list_head node;
+	const struct v4l2_subscribed_event_ops *ops;
+	unsigned int elems;
+	unsigned int first;
+	unsigned int in_use;
+	struct v4l2_kevent events[0];
+};
+
+struct uvc_request {
+	struct usb_request *req;
+	u8 *req_buffer;
+	struct uvc_video *video;
+	struct sg_table sgt;
+	u8 header[12];
+	struct uvc_buffer *last_buf;
+	struct list_head list;
+};
+
+struct uvcg_config_group_type {
+	struct config_item_type type;
+	const char *name;
+	const struct uvcg_config_group_type **children;
+	int (*create_children)(struct config_group *);
+};
+
+enum uvc_color_primaries_values {
+	UVC_COLOR_PRIMARIES_UNSPECIFIED = 0,
+	UVC_COLOR_PRIMARIES_BT_709_SRGB = 1,
+	UVC_COLOR_PRIMARIES_BT_470_2_M = 2,
+	UVC_COLOR_PRIMARIES_BT_470_2_B_G = 3,
+	UVC_COLOR_PRIMARIES_SMPTE_170M = 4,
+	UVC_COLOR_PRIMARIES_SMPTE_240M = 5,
+};
+
+enum uvc_transfer_characteristics_values {
+	UVC_TRANSFER_CHARACTERISTICS_UNSPECIFIED = 0,
+	UVC_TRANSFER_CHARACTERISTICS_BT_709 = 1,
+	UVC_TRANSFER_CHARACTERISTICS_BT_470_2_M = 2,
+	UVC_TRANSFER_CHARACTERISTICS_BT_470_2_B_G = 3,
+	UVC_TRANSFER_CHARACTERISTICS_SMPTE_170M = 4,
+	UVC_TRANSFER_CHARACTERISTICS_SMPTE_240M = 5,
+	UVC_TRANSFER_CHARACTERISTICS_LINEAR = 6,
+	UVC_TRANSFER_CHARACTERISTICS_SRGB = 7,
+};
+
+enum uvc_matrix_coefficients {
+	UVC_MATRIX_COEFFICIENTS_UNSPECIFIED = 0,
+	UVC_MATRIX_COEFFICIENTS_BT_709 = 1,
+	UVC_MATRIX_COEFFICIENTS_FCC = 2,
+	UVC_MATRIX_COEFFICIENTS_BT_470_2_B_G = 3,
+	UVC_MATRIX_COEFFICIENTS_SMPTE_170M = 4,
+	UVC_MATRIX_COEFFICIENTS_SMPTE_240M = 5,
+};
+
+enum uvcg_strm_type {
+	UVCG_HEADER = 0,
+	UVCG_FORMAT = 1,
+	UVCG_FRAME = 2,
+	UVCG_COLOR_MATCHING = 3,
+};
+
+struct uvc_header_descriptor_1 {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__le16 bcdUVC;
+	__le16 wTotalLength;
+	__le32 dwClockFrequency;
+	__u8 bInCollection;
+	__u8 baInterfaceNr[1];
+} __attribute__((packed));
+
+struct uvcg_control_header {
+	struct config_item item;
+	struct uvc_header_descriptor_1 desc;
+	unsigned int linked;
+};
+
+struct uvcg_control_class_group {
+	struct config_group group;
+	const char *name;
+};
+
+struct uvc_format_mjpeg {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubType;
+	__u8 bFormatIndex;
+	__u8 bNumFrameDescriptors;
+	__u8 bmFlags;
+	__u8 bDefaultFrameIndex;
+	__u8 bAspectRatioX;
+	__u8 bAspectRatioY;
+	__u8 bmInterlaceFlags;
+	__u8 bCopyProtect;
+};
+
+struct uvcg_mjpeg {
+	struct uvcg_format fmt;
+	struct uvc_format_mjpeg desc;
+};
+
+struct uvcg_streaming_class_group {
+	struct config_group group;
+	const char *name;
+};
+
+struct snd_device;
+
+struct snd_device_ops {
+	int (*dev_free)(struct snd_device *);
+	int (*dev_register)(struct snd_device *);
+	int (*dev_disconnect)(struct snd_device *);
+	u64 android_kabi_reserved1;
+};
+
+enum snd_device_state {
+	SNDRV_DEV_BUILD = 0,
+	SNDRV_DEV_REGISTERED = 1,
+	SNDRV_DEV_DISCONNECTED = 2,
+};
+
+enum snd_device_type {
+	SNDRV_DEV_LOWLEVEL = 0,
+	SNDRV_DEV_INFO = 1,
+	SNDRV_DEV_BUS = 2,
+	SNDRV_DEV_CODEC = 3,
+	SNDRV_DEV_PCM = 4,
+	SNDRV_DEV_COMPRESS = 5,
+	SNDRV_DEV_RAWMIDI = 6,
+	SNDRV_DEV_TIMER = 7,
+	SNDRV_DEV_SEQUENCER = 8,
+	SNDRV_DEV_HWDEP = 9,
+	SNDRV_DEV_JACK = 10,
+	SNDRV_DEV_CONTROL = 11,
+};
+
+struct snd_device {
+	struct list_head list;
+	struct snd_card *card;
+	enum snd_device_state state;
+	enum snd_device_type type;
+	void *device_data;
+	const struct snd_device_ops *ops;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_info_buffer;
+
+struct snd_info_entry_text {
+	void (*read)(struct snd_info_entry *, struct snd_info_buffer *);
+	void (*write)(struct snd_info_entry *, struct snd_info_buffer *);
+};
+
+struct snd_info_entry_ops;
+
+struct snd_info_entry {
+	const char *name;
+	umode_t mode;
+	long size;
+	unsigned short content;
+	union {
+		struct snd_info_entry_text text;
+		const struct snd_info_entry_ops *ops;
+	} c;
+	struct snd_info_entry *parent;
+	struct module *module;
+	void *private_data;
+	void (*private_free)(struct snd_info_entry *);
+	struct proc_dir_entry *p;
+	struct mutex access;
+	struct list_head children;
+	struct list_head list;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_info_buffer {
+	char *buffer;
+	unsigned int curr;
+	unsigned int size;
+	unsigned int len;
+	int stop;
+	int error;
+};
+
+struct snd_info_entry_ops {
+	int (*open)(struct snd_info_entry *, unsigned short, void **);
+	int (*release)(struct snd_info_entry *, unsigned short, void *);
+	ssize_t (*read)(struct snd_info_entry *, void *, struct file *, char __attribute__((btf_type_tag("user"))) *, size_t, loff_t);
+	ssize_t (*write)(struct snd_info_entry *, void *, struct file *, const char __attribute__((btf_type_tag("user"))) *, size_t, loff_t);
+	loff_t (*llseek)(struct snd_info_entry *, void *, struct file *, loff_t, int);
+	__poll_t (*poll)(struct snd_info_entry *, void *, struct file *, poll_table *);
+	int (*ioctl)(struct snd_info_entry *, void *, struct file *, unsigned int, unsigned long);
+	int (*mmap)(struct snd_info_entry *, void *, struct inode *, struct file *, struct vm_area_struct *);
+	u64 android_kabi_reserved1;
+};
+
+struct snd_rawmidi_substream;
+
+struct snd_rawmidi_ops {
+	int (*open)(struct snd_rawmidi_substream *);
+	int (*close)(struct snd_rawmidi_substream *);
+	void (*trigger)(struct snd_rawmidi_substream *, int);
+	void (*drain)(struct snd_rawmidi_substream *);
+};
+
+struct snd_rawmidi;
+
+struct snd_rawmidi_str;
+
+struct snd_rawmidi_runtime;
+
+struct snd_rawmidi_substream {
+	struct list_head list;
+	int stream;
+	int number;
+	bool opened;
+	bool append;
+	bool active_sensing;
+	unsigned int framing;
+	unsigned int clock_type;
+	int use_count;
+	size_t bytes;
+	spinlock_t lock;
+	struct snd_rawmidi *rmidi;
+	struct snd_rawmidi_str *pstr;
+	char name[32];
+	struct snd_rawmidi_runtime *runtime;
+	struct pid *pid;
+	const struct snd_rawmidi_ops *ops;
+};
+
+struct snd_rawmidi_str {
+	unsigned int substream_count;
+	unsigned int substream_opened;
+	struct list_head substreams;
+};
+
+struct snd_rawmidi_global_ops;
+
+struct snd_rawmidi {
+	struct snd_card *card;
+	struct list_head list;
+	unsigned int device;
+	unsigned int info_flags;
+	char id[64];
+	char name[80];
+	const struct snd_rawmidi_global_ops *ops;
+	struct snd_rawmidi_str streams[2];
+	void *private_data;
+	void (*private_free)(struct snd_rawmidi *);
+	struct mutex open_mutex;
+	wait_queue_head_t open_wait;
+	struct device *dev;
+	struct snd_info_entry *proc_entry;
+};
+
+struct snd_seq_port_info;
+
+struct snd_rawmidi_global_ops {
+	int (*dev_register)(struct snd_rawmidi *);
+	int (*dev_unregister)(struct snd_rawmidi *);
+	void (*get_port_info)(struct snd_rawmidi *, int, struct snd_seq_port_info *);
+	long (*ioctl)(struct snd_rawmidi *, unsigned int, void __attribute__((btf_type_tag("user"))) *);
+	void (*proc_read)(struct snd_info_entry *, struct snd_info_buffer *);
+};
+
+struct snd_rawmidi_runtime {
+	struct snd_rawmidi_substream *substream;
+	unsigned int drain: 1;
+	unsigned int oss: 1;
+	unsigned char *buffer;
+	size_t buffer_size;
+	size_t appl_ptr;
+	size_t hw_ptr;
+	size_t avail_min;
+	size_t avail;
+	size_t xruns;
+	size_t align;
+	int buffer_ref;
+	wait_queue_head_t sleep;
+	void (*event)(struct snd_rawmidi_substream *);
+	struct work_struct event_work;
+	void *private_data;
+	void (*private_free)(struct snd_rawmidi_substream *);
+};
+
+struct uac1_ac_header_descriptor_1 {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 bcdADC;
+	__le16 wTotalLength;
+	__u8 bInCollection;
+	__u8 baInterfaceNr[1];
+} __attribute__((packed));
+
+struct usb_ms_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 bcdMSC;
+	__le16 wTotalLength;
+} __attribute__((packed));
+
+struct usb_ms_endpoint_descriptor_16 {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bNumEmbMIDIJack;
+	__u8 baAssocJackID[16];
+};
+
+enum {
+	STATE_INITIAL = 0,
+	STATE_1PARAM = 1,
+	STATE_2PARAM_1 = 2,
+	STATE_2PARAM_2 = 3,
+	STATE_SYSEX_0 = 4,
+	STATE_SYSEX_1 = 5,
+	STATE_SYSEX_2 = 6,
+	STATE_REAL_TIME = 7,
+	STATE_FINISHED = 8,
+};
+
+enum {
+	SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
+	SNDRV_RAWMIDI_STREAM_INPUT = 1,
+	SNDRV_RAWMIDI_STREAM_LAST = 1,
+};
+
+struct f_midi_info {
+	struct device *dev;
+	int card_number;
+	u32 rmidi_device;
+	bool configured;
+	spinlock_t lock;
+};
+
+struct f_midi_opts {
+	struct usb_function_instance func_inst;
+	int index;
+	char *id;
+	bool id_allocated;
+	unsigned int in_ports;
+	unsigned int out_ports;
+	unsigned int buflen;
+	unsigned int qlen;
+	struct mutex lock;
+	int refcnt;
+	struct f_midi_info android_midi_info;
+};
+
+struct gmidi_in_port {
+	struct snd_rawmidi_substream *substream;
+	int active;
+	uint8_t cable;
+	uint8_t state;
+	uint8_t data[2];
+};
+
+struct f_midi {
+	struct usb_function func;
+	struct usb_gadget *gadget;
+	struct usb_ep *in_ep;
+	struct usb_ep *out_ep;
+	struct snd_card *card;
+	struct snd_rawmidi *rmidi;
+	u8 ms_id;
+	struct snd_rawmidi_substream *out_substream[16];
+	unsigned long out_triggered;
+	struct work_struct work;
+	unsigned int in_ports;
+	unsigned int out_ports;
+	int index;
+	char *id;
+	unsigned int buflen;
+	unsigned int qlen;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct usb_request **type;
+			const struct usb_request **const_type;
+			char (*rectype)[0];
+			struct usb_request **ptr;
+			struct usb_request * const *ptr_const;
+		};
+		struct usb_request *buf[0];
+	} in_req_fifo;
+	spinlock_t transmit_lock;
+	unsigned int in_last_port;
+	unsigned char free_ref;
+	struct gmidi_in_port in_ports_array[0];
+};
+
+struct usb_midi_in_jack_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bJackType;
+	__u8 bJackID;
+	__u8 iJack;
+};
+
+struct usb_midi_source_pin {
+	__u8 baSourceID;
+	__u8 baSourcePin;
+};
+
+struct usb_midi_out_jack_descriptor_1 {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bJackType;
+	__u8 bJackID;
+	__u8 bNrInputPins;
+	struct usb_midi_source_pin pins[1];
+	__u8 iJack;
+};
+
+struct hid_class_descriptor {
+	__u8 bDescriptorType;
+	__le16 wDescriptorLength;
+} __attribute__((packed));
+
+struct hid_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__le16 bcdHID;
+	__u8 bCountryCode;
+	__u8 bNumDescriptors;
+	struct hid_class_descriptor desc[1];
+} __attribute__((packed));
+
+struct f_hid_opts {
+	struct usb_function_instance func_inst;
+	int minor;
+	unsigned char subclass;
+	unsigned char protocol;
+	unsigned char no_out_endpoint;
+	unsigned short report_length;
+	unsigned short report_desc_length;
+	unsigned char *report_desc;
+	bool report_desc_alloc;
+	struct mutex lock;
+	int refcnt;
+};
+
+struct f_hidg {
+	unsigned char bInterfaceSubClass;
+	unsigned char bInterfaceProtocol;
+	unsigned char protocol;
+	unsigned char idle;
+	unsigned short report_desc_length;
+	char *report_desc;
+	unsigned short report_length;
+	bool use_out_ep;
+	spinlock_t read_spinlock;
+	wait_queue_head_t read_queue;
+	struct list_head completed_out_req;
+	unsigned int qlen;
+	char *set_report_buf;
+	unsigned int set_report_length;
+	spinlock_t write_spinlock;
+	bool write_pending;
+	wait_queue_head_t write_queue;
+	struct usb_request *req;
+	struct device dev;
+	struct cdev cdev;
+	struct usb_function func;
+	struct usb_ep *in_ep;
+	struct usb_ep *out_ep;
+};
+
+struct f_hidg_req_list {
+	struct usb_request *req;
+	unsigned int pos;
+	struct list_head list;
+};
+
+struct acc_dev {
+	struct usb_function function;
+	struct usb_composite_dev *cdev;
+	spinlock_t lock;
+	struct kref kref;
+	struct usb_ep *ep_in;
+	struct usb_ep *ep_out;
+	bool online;
+	bool disconnected;
+	char manufacturer[256];
+	char model[256];
+	char description[256];
+	char version[256];
+	char uri[256];
+	char serial[256];
+	int string_index;
+	int start_requested;
+	int audio_mode;
+	struct list_head tx_idle;
+	wait_queue_head_t read_wq;
+	wait_queue_head_t write_wq;
+	struct usb_request *rx_req[2];
+	int rx_done;
+	struct delayed_work start_work;
+	struct work_struct getprotocol_work;
+	struct work_struct sendstring_work;
+	struct work_struct hid_work;
+	struct list_head hid_list;
+	struct list_head new_hid_list;
+	struct list_head dead_hid_list;
+};
+
+struct hid_device;
+
+struct hid_report;
+
+struct hid_ll_driver {
+	int (*start)(struct hid_device *);
+	void (*stop)(struct hid_device *);
+	int (*open)(struct hid_device *);
+	void (*close)(struct hid_device *);
+	int (*power)(struct hid_device *, int);
+	int (*parse)(struct hid_device *);
+	void (*request)(struct hid_device *, struct hid_report *, int);
+	int (*wait)(struct hid_device *);
+	int (*raw_request)(struct hid_device *, unsigned char, __u8 *, size_t, unsigned char, int);
+	int (*output_report)(struct hid_device *, __u8 *, size_t);
+	int (*idle)(struct hid_device *, int, int, int);
+	bool (*may_wakeup)(struct hid_device *);
+	unsigned int max_buffer_size;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum hid_type {
+	HID_TYPE_OTHER = 0,
+	HID_TYPE_USBMOUSE = 1,
+	HID_TYPE_USBNONE = 2,
+};
+
+struct hid_report_enum {
+	unsigned int numbered;
+	struct list_head report_list;
+	struct hid_report *report_id_hash[256];
+};
+
+enum hid_battery_status {
+	HID_BATTERY_UNKNOWN = 0,
+	HID_BATTERY_QUERIED = 1,
+	HID_BATTERY_REPORTED = 2,
+};
+
+struct hid_bpf_prog_list;
+
+struct hid_bpf {
+	u8 *device_data;
+	u32 allocated_data;
+	struct hid_bpf_prog_list __attribute__((btf_type_tag("rcu"))) *progs[2];
+	bool destroyed;
+	spinlock_t progs_lock;
+};
+
+struct hid_collection;
+
+struct hid_driver;
+
+struct hid_field;
+
+struct hid_usage;
+
+struct hid_device {
+	__u8 *dev_rdesc;
+	unsigned int dev_rsize;
+	__u8 *rdesc;
+	unsigned int rsize;
+	struct hid_collection *collection;
+	unsigned int collection_size;
+	unsigned int maxcollection;
+	unsigned int maxapplication;
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	enum hid_type type;
+	unsigned int country;
+	struct hid_report_enum report_enum[3];
+	struct work_struct led_work;
+	struct semaphore driver_input_lock;
+	struct device dev;
+	struct hid_driver *driver;
+	void *devres_group_id;
+	const struct hid_ll_driver *ll_driver;
+	struct mutex ll_open_lock;
+	unsigned int ll_open_count;
+	struct power_supply *battery;
+	__s32 battery_capacity;
+	__s32 battery_min;
+	__s32 battery_max;
+	__s32 battery_report_type;
+	__s32 battery_report_id;
+	__s32 battery_charge_status;
+	enum hid_battery_status battery_status;
+	bool battery_avoid_query;
+	ktime_t battery_ratelimit_time;
+	unsigned long status;
+	unsigned int claimed;
+	unsigned int quirks;
+	unsigned int initial_quirks;
+	bool io_started;
+	struct list_head inputs;
+	void *hiddev;
+	void *hidraw;
+	char name[128];
+	char phys[64];
+	char uniq[64];
+	void *driver_data;
+	int (*ff_init)(struct hid_device *);
+	int (*hiddev_connect)(struct hid_device *, unsigned int);
+	void (*hiddev_disconnect)(struct hid_device *);
+	void (*hiddev_hid_event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*hiddev_report_event)(struct hid_device *, struct hid_report *);
+	unsigned short debug;
+	struct dentry *debug_dir;
+	struct dentry *debug_rdesc;
+	struct dentry *debug_events;
+	struct list_head debug_list;
+	spinlock_t debug_list_lock;
+	wait_queue_head_t debug_wait;
+	struct kref ref;
+	unsigned int id;
+	struct hid_bpf bpf;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct hid_collection {
+	int parent_idx;
+	unsigned int type;
+	unsigned int usage;
+	unsigned int level;
+};
+
+enum hid_report_type {
+	HID_INPUT_REPORT = 0,
+	HID_OUTPUT_REPORT = 1,
+	HID_FEATURE_REPORT = 2,
+	HID_REPORT_TYPES = 3,
+};
+
+struct hid_field_entry;
+
+struct hid_report {
+	struct list_head list;
+	struct list_head hidinput_list;
+	struct list_head field_entry_list;
+	unsigned int id;
+	enum hid_report_type type;
+	unsigned int application;
+	struct hid_field *field[256];
+	struct hid_field_entry *field_entries;
+	unsigned int maxfield;
+	unsigned int size;
+	struct hid_device *device;
+	bool tool_active;
+	unsigned int tool;
+	u64 android_kabi_reserved1;
+};
+
+struct hid_input;
+
+struct hid_field {
+	unsigned int physical;
+	unsigned int logical;
+	unsigned int application;
+	struct hid_usage *usage;
+	unsigned int maxusage;
+	unsigned int flags;
+	unsigned int report_offset;
+	unsigned int report_size;
+	unsigned int report_count;
+	unsigned int report_type;
+	__s32 *value;
+	__s32 *new_value;
+	__s32 *usages_priorities;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	bool ignored;
+	struct hid_report *report;
+	unsigned int index;
+	struct hid_input *hidinput;
+	__u16 dpad;
+	unsigned int slot_idx;
+};
+
+struct hid_usage {
+	unsigned int hid;
+	unsigned int collection_index;
+	unsigned int usage_index;
+	__s8 resolution_multiplier;
+	__s8 wheel_factor;
+	__u16 code;
+	__u8 type;
+	__s8 hat_min;
+	__s8 hat_max;
+	__s8 hat_dir;
+	__s16 wheel_accumulated;
+};
+
+struct hid_input {
+	struct list_head list;
+	struct hid_report *report;
+	struct input_dev *input;
+	const char *name;
+	struct list_head reports;
+	unsigned int application;
+	bool registered;
+	u64 android_kabi_reserved1;
+};
+
+struct hid_field_entry {
+	struct list_head list;
+	struct hid_field *field;
+	unsigned int index;
+	__s32 priority;
+};
+
+struct hid_device_id;
+
+struct hid_report_id;
+
+struct hid_usage_id;
+
+struct hid_driver {
+	char *name;
+	const struct hid_device_id *id_table;
+	struct list_head dyn_list;
+	spinlock_t dyn_lock;
+	bool (*match)(struct hid_device *, bool);
+	int (*probe)(struct hid_device *, const struct hid_device_id *);
+	void (*remove)(struct hid_device *);
+	const struct hid_report_id *report_table;
+	int (*raw_event)(struct hid_device *, struct hid_report *, u8 *, int);
+	const struct hid_usage_id *usage_table;
+	int (*event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
+	void (*report)(struct hid_device *, struct hid_report *);
+	__u8 * (*report_fixup)(struct hid_device *, __u8 *, unsigned int *);
+	int (*input_mapping)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, unsigned long **, int *);
+	int (*input_mapped)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, unsigned long **, int *);
+	int (*input_configured)(struct hid_device *, struct hid_input *);
+	void (*feature_mapping)(struct hid_device *, struct hid_field *, struct hid_usage *);
+	int (*suspend)(struct hid_device *, pm_message_t);
+	int (*resume)(struct hid_device *);
+	int (*reset_resume)(struct hid_device *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	struct device_driver driver;
+};
+
+struct hid_device_id {
+	__u16 bus;
+	__u16 group;
+	__u32 vendor;
+	__u32 product;
+	kernel_ulong_t driver_data;
+};
+
+struct hid_report_id {
+	__u32 report_type;
+};
+
+struct hid_usage_id {
+	__u32 usage_hid;
+	__u32 usage_type;
+	__u32 usage_code;
+};
+
+struct hid_bpf_prog_list {
+	u16 prog_idx[64];
+	u8 prog_cnt;
+};
+
+struct acc_hid_dev {
+	struct list_head list;
+	struct hid_device *hid;
+	struct acc_dev *dev;
+	int id;
+	u8 *report_desc;
+	int report_desc_len;
+	int report_desc_offset;
+};
+
+struct acc_instance {
+	struct usb_function_instance func_inst;
+	const char *name;
+};
+
+enum typec_data_role {
+	TYPEC_DEVICE = 0,
+	TYPEC_HOST = 1,
+};
+
+enum typec_role {
+	TYPEC_SINK = 0,
+	TYPEC_SOURCE = 1,
+};
+
+enum typec_pwr_opmode {
+	TYPEC_PWR_MODE_USB = 0,
+	TYPEC_PWR_MODE_1_5A = 1,
+	TYPEC_PWR_MODE_3_0A = 2,
+	TYPEC_PWR_MODE_PD = 3,
+};
+
+enum typec_port_type {
+	TYPEC_PORT_SRC = 0,
+	TYPEC_PORT_SNK = 1,
+	TYPEC_PORT_DRP = 2,
+};
+
+enum typec_orientation {
+	TYPEC_ORIENTATION_NONE = 0,
+	TYPEC_ORIENTATION_NORMAL = 1,
+	TYPEC_ORIENTATION_REVERSE = 2,
+};
+
+enum typec_port_data {
+	TYPEC_PORT_DFP = 0,
+	TYPEC_PORT_UFP = 1,
+	TYPEC_PORT_DRD = 2,
+};
+
+enum usb_pd_svdm_ver {
+	SVDM_VER_1_0 = 0,
+	SVDM_VER_2_0 = 1,
+	SVDM_VER_MAX = 1,
+};
+
+enum typec_accessory {
+	TYPEC_ACCESSORY_NONE = 0,
+	TYPEC_ACCESSORY_AUDIO = 1,
+	TYPEC_ACCESSORY_DEBUG = 2,
+};
+
+enum typec_plug_index {
+	TYPEC_PLUG_SOP_P = 0,
+	TYPEC_PLUG_SOP_PP = 1,
+};
+
+enum typec_plug_type {
+	USB_PLUG_NONE = 0,
+	USB_PLUG_TYPE_A = 1,
+	USB_PLUG_TYPE_B = 2,
+	USB_PLUG_TYPE_C = 3,
+	USB_PLUG_CAPTIVE = 4,
+};
+
+struct usb_power_delivery;
+
+struct typec_switch;
+
+struct typec_mux;
+
+struct typec_retimer;
+
+struct typec_capability;
+
+struct typec_operations;
+
+struct typec_port {
+	unsigned int id;
+	struct device dev;
+	struct ida mode_ids;
+	struct usb_power_delivery *pd;
+	int prefer_role;
+	enum typec_data_role data_role;
+	enum typec_role pwr_role;
+	enum typec_role vconn_role;
+	enum typec_pwr_opmode pwr_opmode;
+	enum typec_port_type port_type;
+	struct mutex port_type_lock;
+	enum typec_orientation orientation;
+	struct typec_switch *sw;
+	struct typec_mux *mux;
+	struct typec_retimer *retimer;
+	const struct typec_capability *cap;
+	const struct typec_operations *ops;
+	u64 android_kabi_reserved1;
+};
+
+struct usb_power_delivery {
+	struct device dev;
+	int id;
+	u16 revision;
+	u16 version;
+};
+
+struct typec_capability {
+	enum typec_port_type type;
+	enum typec_port_data data;
+	u16 revision;
+	u16 pd_revision;
+	enum usb_pd_svdm_ver svdm_version;
+	int prefer_role;
+	enum typec_accessory accessory[3];
+	unsigned int orientation_aware: 1;
+	struct fwnode_handle *fwnode;
+	void *driver_data;
+	struct usb_power_delivery *pd;
+	const struct typec_operations *ops;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct typec_operations {
+	int (*try_role)(struct typec_port *, int);
+	int (*dr_set)(struct typec_port *, enum typec_data_role);
+	int (*pr_set)(struct typec_port *, enum typec_role);
+	int (*vconn_set)(struct typec_port *, enum typec_role);
+	int (*port_type_set)(struct typec_port *, enum typec_port_type);
+	struct usb_power_delivery ** (*pd_get)(struct typec_port *);
+	int (*pd_set)(struct typec_port *, struct usb_power_delivery *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct typec_altmode_ops;
+
+struct typec_altmode {
+	struct device dev;
+	u16 svid;
+	int mode;
+	u32 vdo;
+	unsigned int active: 1;
+	char *desc;
+	const struct typec_altmode_ops *ops;
+	u64 android_kabi_reserved1;
+};
+
+struct altmode {
+	unsigned int id;
+	struct typec_altmode adev;
+	struct typec_mux *mux;
+	struct typec_retimer *retimer;
+	enum typec_port_data roles;
+	struct attribute *attrs[5];
+	char group_name[8];
+	struct attribute_group group;
+	const struct attribute_group *groups[2];
+	struct altmode *partner;
+	struct altmode *plug[2];
+	u64 android_kabi_reserved1;
+};
+
+struct typec_altmode_ops {
+	int (*enter)(struct typec_altmode *, u32 *);
+	int (*exit)(struct typec_altmode *);
+	void (*attention)(struct typec_altmode *, u32);
+	int (*vdm)(struct typec_altmode *, const u32, const u32 *, int);
+	int (*notify)(struct typec_altmode *, unsigned long, void *);
+	int (*activate)(struct typec_altmode *, int);
+	u64 android_kabi_reserved1;
+};
+
+struct usb_pd_identity;
+
+struct typec_cable {
+	struct device dev;
+	enum typec_plug_type type;
+	struct usb_pd_identity *identity;
+	unsigned int active: 1;
+	u16 pd_revision;
+	u64 android_kabi_reserved1;
+};
+
+struct usb_pd_identity {
+	u32 id_header;
+	u32 cert_stat;
+	u32 product;
+	u32 vdo[3];
+};
+
+struct typec_partner {
+	struct device dev;
+	unsigned int usb_pd: 1;
+	struct usb_pd_identity *identity;
+	enum typec_accessory accessory;
+	struct ida mode_ids;
+	int num_altmodes;
+	u16 pd_revision;
+	enum usb_pd_svdm_ver svdm_version;
+	struct usb_power_delivery *pd;
+	u64 android_kabi_reserved1;
+};
+
+struct typec_plug {
+	struct device dev;
+	enum typec_plug_index index;
+	struct ida mode_ids;
+	int num_altmodes;
+	u64 android_kabi_reserved1;
+};
+
+struct typec_device_id {
+	__u16 svid;
+	__u8 mode;
+	kernel_ulong_t driver_data;
+};
+
+struct usb_power_delivery_desc {
+	u16 revision;
+	u16 version;
+};
+
+struct typec_mux_state {
+	struct typec_altmode *alt;
+	unsigned long mode;
+	void *data;
+};
+
+struct typec_altmode_desc {
+	u16 svid;
+	u8 mode;
+	u32 vdo;
+	enum typec_port_data roles;
+};
+
+struct typec_partner_desc {
+	unsigned int usb_pd: 1;
+	enum typec_accessory accessory;
+	struct usb_pd_identity *identity;
+	u16 pd_revision;
+};
+
+struct typec_plug_desc {
+	enum typec_plug_index index;
+};
+
+struct typec_cable_desc {
+	enum typec_plug_type type;
+	unsigned int active: 1;
+	struct usb_pd_identity *identity;
+	u16 pd_revision;
+};
+
+struct typec_switch_dev;
+
+typedef int (*typec_switch_set_fn_t)(struct typec_switch_dev *, enum typec_orientation);
+
+struct typec_switch_dev {
+	struct device dev;
+	typec_switch_set_fn_t set;
+	u64 android_kabi_reserved1;
+};
+
+struct typec_mux_dev;
+
+typedef int (*typec_mux_set_fn_t)(struct typec_mux_dev *, struct typec_mux_state *);
+
+struct typec_mux_dev {
+	struct device dev;
+	typec_mux_set_fn_t set;
+	u64 android_kabi_reserved1;
+};
+
+struct typec_switch {
+	struct typec_switch_dev *sw_devs[3];
+	unsigned int num_sw_devs;
+};
+
+struct typec_mux {
+	struct typec_mux_dev *mux_devs[3];
+	unsigned int num_mux_devs;
+};
+
+struct typec_switch_desc {
+	struct fwnode_handle *fwnode;
+	typec_switch_set_fn_t set;
+	const char *name;
+	void *drvdata;
+};
+
+struct typec_mux_desc {
+	struct fwnode_handle *fwnode;
+	typec_mux_set_fn_t set;
+	const char *name;
+	void *drvdata;
+};
+
+enum {
+	TYPEC_STATE_SAFE = 0,
+	TYPEC_STATE_USB = 1,
+	TYPEC_STATE_MODAL = 2,
+};
+
+struct typec_retimer_state;
+
+typedef int (*typec_retimer_set_fn_t)(struct typec_retimer *, struct typec_retimer_state *);
+
+struct typec_retimer {
+	struct device dev;
+	typec_retimer_set_fn_t set;
+};
+
+struct typec_retimer_state {
+	struct typec_altmode *alt;
+	unsigned long mode;
+	void *data;
+};
+
+struct typec_altmode_driver {
+	const struct typec_device_id *id_table;
+	int (*probe)(struct typec_altmode *);
+	void (*remove)(struct typec_altmode *);
+	struct device_driver driver;
+};
+
+enum pd_pdo_type {
+	PDO_TYPE_FIXED = 0,
+	PDO_TYPE_BATT = 1,
+	PDO_TYPE_VAR = 2,
+	PDO_TYPE_APDO = 3,
+};
+
+enum pd_apdo_type {
+	APDO_TYPE_PPS = 0,
+};
+
+struct usb_power_delivery_capabilities {
+	struct device dev;
+	struct usb_power_delivery *pd;
+	enum typec_role role;
+};
+
+struct pdo {
+	struct device dev;
+	int object_position;
+	u32 pdo;
+};
+
+struct usb_power_delivery_capabilities_desc {
+	u32 pdo[7];
+	enum typec_role role;
+};
+
+struct typec_retimer_desc {
+	struct fwnode_handle *fwnode;
+	typec_retimer_set_fn_t set;
+	const char *name;
+	void *drvdata;
+};
+
+struct each_port_arg {
+	struct typec_port *port;
+	struct component_match *match;
+};
+
+enum dp_state {
+	DP_STATE_IDLE = 0,
+	DP_STATE_ENTER = 1,
+	DP_STATE_UPDATE = 2,
+	DP_STATE_CONFIGURE = 3,
+	DP_STATE_EXIT = 4,
+};
+
+enum {
+	DP_PIN_ASSIGN_A = 0,
+	DP_PIN_ASSIGN_B = 1,
+	DP_PIN_ASSIGN_C = 2,
+	DP_PIN_ASSIGN_D = 3,
+	DP_PIN_ASSIGN_E = 4,
+	DP_PIN_ASSIGN_F = 5,
+};
+
+enum {
+	DP_CONF_USB = 0,
+	DP_CONF_DFP_D = 1,
+	DP_CONF_UFP_D = 2,
+	DP_CONF_DUAL_D = 3,
+};
+
+struct typec_displayport_data {
+	u32 status;
+	u32 conf;
+};
+
+struct dp_altmode {
+	struct typec_displayport_data data;
+	enum dp_state state;
+	bool hpd;
+	bool pending_hpd;
+	struct mutex lock;
+	struct work_struct work;
+	struct typec_altmode *alt;
+	const struct typec_altmode *port;
+	struct fwnode_handle *connector_fwnode;
+};
+
+enum typec_cc_status {
+	TYPEC_CC_OPEN = 0,
+	TYPEC_CC_RA = 1,
+	TYPEC_CC_RD = 2,
+	TYPEC_CC_RP_DEF = 3,
+	TYPEC_CC_RP_1_5 = 4,
+	TYPEC_CC_RP_3_0 = 5,
+};
+
+enum typec_cc_polarity {
+	TYPEC_POLARITY_CC1 = 0,
+	TYPEC_POLARITY_CC2 = 1,
+};
+
+enum tcpm_transmit_type {
+	TCPC_TX_SOP = 0,
+	TCPC_TX_SOP_PRIME = 1,
+	TCPC_TX_SOP_PRIME_PRIME = 2,
+	TCPC_TX_SOP_DEBUG_PRIME = 3,
+	TCPC_TX_SOP_DEBUG_PRIME_PRIME = 4,
+	TCPC_TX_HARD_RESET = 5,
+	TCPC_TX_CABLE_RESET = 6,
+	TCPC_TX_BIST_MODE_2 = 7,
+};
+
+enum pd_msg_request {
+	PD_MSG_NONE = 0,
+	PD_MSG_CTRL_REJECT = 1,
+	PD_MSG_CTRL_WAIT = 2,
+	PD_MSG_CTRL_NOT_SUPP = 3,
+	PD_MSG_DATA_SINK_CAP = 4,
+	PD_MSG_DATA_SOURCE_CAP = 5,
+};
+
+enum tcpm_state {
+	INVALID_STATE = 0,
+	TOGGLING = 1,
+	CHECK_CONTAMINANT = 2,
+	SRC_UNATTACHED = 3,
+	SRC_ATTACH_WAIT = 4,
+	SRC_ATTACHED = 5,
+	SRC_STARTUP = 6,
+	SRC_SEND_CAPABILITIES = 7,
+	SRC_SEND_CAPABILITIES_TIMEOUT = 8,
+	SRC_NEGOTIATE_CAPABILITIES = 9,
+	SRC_TRANSITION_SUPPLY = 10,
+	SRC_READY = 11,
+	SRC_WAIT_NEW_CAPABILITIES = 12,
+	SNK_UNATTACHED = 13,
+	SNK_ATTACH_WAIT = 14,
+	SNK_DEBOUNCED = 15,
+	SNK_ATTACHED = 16,
+	SNK_STARTUP = 17,
+	SNK_DISCOVERY = 18,
+	SNK_DISCOVERY_DEBOUNCE = 19,
+	SNK_DISCOVERY_DEBOUNCE_DONE = 20,
+	SNK_WAIT_CAPABILITIES = 21,
+	SNK_NEGOTIATE_CAPABILITIES = 22,
+	SNK_NEGOTIATE_PPS_CAPABILITIES = 23,
+	SNK_TRANSITION_SINK = 24,
+	SNK_TRANSITION_SINK_VBUS = 25,
+	SNK_READY = 26,
+	ACC_UNATTACHED = 27,
+	DEBUG_ACC_ATTACHED = 28,
+	AUDIO_ACC_ATTACHED = 29,
+	AUDIO_ACC_DEBOUNCE = 30,
+	HARD_RESET_SEND = 31,
+	HARD_RESET_START = 32,
+	SRC_HARD_RESET_VBUS_OFF = 33,
+	SRC_HARD_RESET_VBUS_ON = 34,
+	SNK_HARD_RESET_SINK_OFF = 35,
+	SNK_HARD_RESET_WAIT_VBUS = 36,
+	SNK_HARD_RESET_SINK_ON = 37,
+	SOFT_RESET = 38,
+	SRC_SOFT_RESET_WAIT_SNK_TX = 39,
+	SNK_SOFT_RESET = 40,
+	SOFT_RESET_SEND = 41,
+	DR_SWAP_ACCEPT = 42,
+	DR_SWAP_SEND = 43,
+	DR_SWAP_SEND_TIMEOUT = 44,
+	DR_SWAP_CANCEL = 45,
+	DR_SWAP_CHANGE_DR = 46,
+	PR_SWAP_ACCEPT = 47,
+	PR_SWAP_SEND = 48,
+	PR_SWAP_SEND_TIMEOUT = 49,
+	PR_SWAP_CANCEL = 50,
+	PR_SWAP_START = 51,
+	PR_SWAP_SRC_SNK_TRANSITION_OFF = 52,
+	PR_SWAP_SRC_SNK_SOURCE_OFF = 53,
+	PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED = 54,
+	PR_SWAP_SRC_SNK_SINK_ON = 55,
+	PR_SWAP_SNK_SRC_SINK_OFF = 56,
+	PR_SWAP_SNK_SRC_SOURCE_ON = 57,
+	PR_SWAP_SNK_SRC_SOURCE_ON_VBUS_RAMPED_UP = 58,
+	VCONN_SWAP_ACCEPT = 59,
+	VCONN_SWAP_SEND = 60,
+	VCONN_SWAP_SEND_TIMEOUT = 61,
+	VCONN_SWAP_CANCEL = 62,
+	VCONN_SWAP_START = 63,
+	VCONN_SWAP_WAIT_FOR_VCONN = 64,
+	VCONN_SWAP_TURN_ON_VCONN = 65,
+	VCONN_SWAP_TURN_OFF_VCONN = 66,
+	FR_SWAP_SEND = 67,
+	FR_SWAP_SEND_TIMEOUT = 68,
+	FR_SWAP_SNK_SRC_TRANSITION_TO_OFF = 69,
+	FR_SWAP_SNK_SRC_NEW_SINK_READY = 70,
+	FR_SWAP_SNK_SRC_SOURCE_VBUS_APPLIED = 71,
+	FR_SWAP_CANCEL = 72,
+	SNK_TRY = 73,
+	SNK_TRY_WAIT = 74,
+	SNK_TRY_WAIT_DEBOUNCE = 75,
+	SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS = 76,
+	SRC_TRYWAIT = 77,
+	SRC_TRYWAIT_DEBOUNCE = 78,
+	SRC_TRYWAIT_UNATTACHED = 79,
+	SRC_TRY = 80,
+	SRC_TRY_WAIT = 81,
+	SRC_TRY_DEBOUNCE = 82,
+	SNK_TRYWAIT = 83,
+	SNK_TRYWAIT_DEBOUNCE = 84,
+	SNK_TRYWAIT_VBUS = 85,
+	BIST_RX = 86,
+	GET_STATUS_SEND = 87,
+	GET_STATUS_SEND_TIMEOUT = 88,
+	GET_PPS_STATUS_SEND = 89,
+	GET_PPS_STATUS_SEND_TIMEOUT = 90,
+	GET_SINK_CAP = 91,
+	GET_SINK_CAP_TIMEOUT = 92,
+	ERROR_RECOVERY = 93,
+	PORT_RESET = 94,
+	PORT_RESET_WAIT_OFF = 95,
+	AMS_START = 96,
+	CHUNK_NOT_SUPP = 97,
+};
+
+enum tcpm_transmit_status {
+	TCPC_TX_SUCCESS = 0,
+	TCPC_TX_DISCARDED = 1,
+	TCPC_TX_FAILED = 2,
+};
+
+enum vdm_states {
+	VDM_STATE_ERR_BUSY = -3,
+	VDM_STATE_ERR_SEND = -2,
+	VDM_STATE_ERR_TMOUT = -1,
+	VDM_STATE_DONE = 0,
+	VDM_STATE_READY = 1,
+	VDM_STATE_BUSY = 2,
+	VDM_STATE_WAIT_RSP_BUSY = 3,
+	VDM_STATE_SEND_MESSAGE = 4,
+};
+
+enum frs_typec_current {
+	FRS_NOT_SUPPORTED = 0,
+	FRS_DEFAULT_POWER = 1,
+	FRS_5V_1P5A = 2,
+	FRS_5V_3A = 3,
+};
+
+enum tcpm_ams {
+	NONE_AMS = 0,
+	POWER_NEGOTIATION = 1,
+	GOTOMIN = 2,
+	SOFT_RESET_AMS = 3,
+	HARD_RESET = 4,
+	CABLE_RESET = 5,
+	GET_SOURCE_CAPABILITIES = 6,
+	GET_SINK_CAPABILITIES = 7,
+	POWER_ROLE_SWAP = 8,
+	FAST_ROLE_SWAP = 9,
+	DATA_ROLE_SWAP = 10,
+	VCONN_SWAP = 11,
+	SOURCE_ALERT = 12,
+	GETTING_SOURCE_EXTENDED_CAPABILITIES = 13,
+	GETTING_SOURCE_SINK_STATUS = 14,
+	GETTING_BATTERY_CAPABILITIES = 15,
+	GETTING_BATTERY_STATUS = 16,
+	GETTING_MANUFACTURER_INFORMATION = 17,
+	SECURITY = 18,
+	FIRMWARE_UPDATE = 19,
+	DISCOVER_IDENTITY = 20,
+	SOURCE_STARTUP_CABLE_PLUG_DISCOVER_IDENTITY = 21,
+	DISCOVER_SVIDS = 22,
+	DISCOVER_MODES = 23,
+	DFP_TO_UFP_ENTER_MODE = 24,
+	DFP_TO_UFP_EXIT_MODE = 25,
+	DFP_TO_CABLE_PLUG_ENTER_MODE = 26,
+	DFP_TO_CABLE_PLUG_EXIT_MODE = 27,
+	ATTENTION = 28,
+	BIST = 29,
+	UNSTRUCTURED_VDMS = 30,
+	STRUCTURED_VDMS = 31,
+	COUNTRY_INFO = 32,
+	COUNTRY_CODES = 33,
+};
+
+enum pd_ctrl_msg_type {
+	PD_CTRL_GOOD_CRC = 1,
+	PD_CTRL_GOTO_MIN = 2,
+	PD_CTRL_ACCEPT = 3,
+	PD_CTRL_REJECT = 4,
+	PD_CTRL_PING = 5,
+	PD_CTRL_PS_RDY = 6,
+	PD_CTRL_GET_SOURCE_CAP = 7,
+	PD_CTRL_GET_SINK_CAP = 8,
+	PD_CTRL_DR_SWAP = 9,
+	PD_CTRL_PR_SWAP = 10,
+	PD_CTRL_VCONN_SWAP = 11,
+	PD_CTRL_WAIT = 12,
+	PD_CTRL_SOFT_RESET = 13,
+	PD_CTRL_NOT_SUPP = 16,
+	PD_CTRL_GET_SOURCE_CAP_EXT = 17,
+	PD_CTRL_GET_STATUS = 18,
+	PD_CTRL_FR_SWAP = 19,
+	PD_CTRL_GET_PPS_STATUS = 20,
+	PD_CTRL_GET_COUNTRY_CODES = 21,
+};
+
+enum pd_ext_msg_type {
+	PD_EXT_SOURCE_CAP_EXT = 1,
+	PD_EXT_STATUS = 2,
+	PD_EXT_GET_BATT_CAP = 3,
+	PD_EXT_GET_BATT_STATUS = 4,
+	PD_EXT_BATT_CAP = 5,
+	PD_EXT_GET_MANUFACTURER_INFO = 6,
+	PD_EXT_MANUFACTURER_INFO = 7,
+	PD_EXT_SECURITY_REQUEST = 8,
+	PD_EXT_SECURITY_RESPONSE = 9,
+	PD_EXT_FW_UPDATE_REQUEST = 10,
+	PD_EXT_FW_UPDATE_RESPONSE = 11,
+	PD_EXT_PPS_STATUS = 12,
+	PD_EXT_COUNTRY_INFO = 13,
+	PD_EXT_COUNTRY_CODES = 14,
+};
+
+enum pd_data_msg_type {
+	PD_DATA_SOURCE_CAP = 1,
+	PD_DATA_REQUEST = 2,
+	PD_DATA_BIST = 3,
+	PD_DATA_SINK_CAP = 4,
+	PD_DATA_BATT_STATUS = 5,
+	PD_DATA_ALERT = 6,
+	PD_DATA_GET_COUNTRY_INFO = 7,
+	PD_DATA_ENTER_USB = 8,
+	PD_DATA_VENDOR_DEF = 15,
+};
+
+enum pdo_err {
+	PDO_NO_ERR = 0,
+	PDO_ERR_NO_VSAFE5V = 1,
+	PDO_ERR_VSAFE5V_NOT_FIRST = 2,
+	PDO_ERR_PDO_TYPE_NOT_IN_ORDER = 3,
+	PDO_ERR_FIXED_NOT_SORTED = 4,
+	PDO_ERR_VARIABLE_BATT_NOT_SORTED = 5,
+	PDO_ERR_DUPE_PDO = 6,
+	PDO_ERR_PPS_APDO_NOT_SORTED = 7,
+	PDO_ERR_DUPE_PPS_APDO = 8,
+};
+
+enum adev_actions {
+	ADEV_NONE = 0,
+	ADEV_NOTIFY_USB_AND_QUEUE_VDM = 1,
+	ADEV_QUEUE_VDM = 2,
+	ADEV_QUEUE_VDM_SEND_EXIT_MODE_ON_FAIL = 3,
+	ADEV_ATTENTION = 4,
+};
+
+enum tcpm_psy_online_states {
+	TCPM_PSY_OFFLINE = 0,
+	TCPM_PSY_FIXED_ONLINE = 1,
+	TCPM_PSY_PROG_ONLINE = 2,
+};
+
+struct pd_chunked_ext_message_data {
+	__le16 header;
+	u8 data[26];
+};
+
+struct pd_message {
+	__le16 header;
+	union {
+		__le32 payload[7];
+		struct pd_chunked_ext_message_data ext_msg;
+	};
+} __attribute__((packed));
+
+struct tcpm_port;
+
+struct pd_rx_event {
+	struct kthread_work work;
+	struct tcpm_port *port;
+	struct pd_message msg;
+};
+
+struct pd_pps_data {
+	u32 min_volt;
+	u32 req_min_volt;
+	u32 max_volt;
+	u32 req_max_volt;
+	u32 max_curr;
+	u32 req_max_curr;
+	u32 req_out_volt;
+	u32 req_op_curr;
+	bool supported;
+	bool active;
+};
+
+struct pd_mode_data {
+	int svid_index;
+	int nsvids;
+	u16 svids[16];
+	int altmodes;
+	struct typec_altmode_desc altmode_desc[96];
+};
+
+struct tcpc_dev;
+
+struct pd_data;
+
+struct tcpm_port {
+	struct device *dev;
+	struct mutex lock;
+	struct kthread_worker *wq;
+	struct typec_capability typec_caps;
+	struct typec_port *typec_port;
+	struct tcpc_dev *tcpc;
+	struct usb_role_switch *role_sw;
+	enum typec_role vconn_role;
+	enum typec_role pwr_role;
+	enum typec_data_role data_role;
+	enum typec_pwr_opmode pwr_opmode;
+	struct usb_pd_identity partner_ident;
+	struct typec_partner_desc partner_desc;
+	struct typec_partner *partner;
+	enum typec_cc_status cc_req;
+	enum typec_cc_status src_rp;
+	enum typec_cc_status cc1;
+	enum typec_cc_status cc2;
+	enum typec_cc_polarity polarity;
+	bool attached;
+	bool connected;
+	bool registered;
+	bool pd_supported;
+	enum typec_port_type port_type;
+	bool vbus_present;
+	bool vbus_vsafe0v;
+	bool vbus_never_low;
+	bool vbus_source;
+	bool vbus_charge;
+	bool send_discover;
+	bool op_vsafe5v;
+	int try_role;
+	int try_snk_count;
+	int try_src_count;
+	enum pd_msg_request queued_message;
+	enum tcpm_state enter_state;
+	enum tcpm_state prev_state;
+	enum tcpm_state state;
+	enum tcpm_state delayed_state;
+	ktime_t delayed_runtime;
+	unsigned long delay_ms;
+	spinlock_t pd_event_lock;
+	u32 pd_events;
+	struct kthread_work event_work;
+	struct hrtimer state_machine_timer;
+	struct kthread_work state_machine;
+	struct hrtimer vdm_state_machine_timer;
+	struct kthread_work vdm_state_machine;
+	struct hrtimer enable_frs_timer;
+	struct kthread_work enable_frs;
+	struct hrtimer send_discover_timer;
+	struct kthread_work send_discover_work;
+	bool state_machine_running;
+	bool vdm_sm_running;
+	struct completion tx_complete;
+	enum tcpm_transmit_status tx_status;
+	struct mutex swap_lock;
+	bool swap_pending;
+	bool non_pd_role_swap;
+	struct completion swap_complete;
+	int swap_status;
+	unsigned int negotiated_rev;
+	unsigned int message_id;
+	unsigned int caps_count;
+	unsigned int hard_reset_count;
+	bool pd_capable;
+	bool explicit_contract;
+	unsigned int rx_msgid;
+	struct usb_power_delivery **pds;
+	struct pd_data **pd_list;
+	struct usb_power_delivery_capabilities *port_source_caps;
+	struct usb_power_delivery_capabilities *port_sink_caps;
+	struct usb_power_delivery *partner_pd;
+	struct usb_power_delivery_capabilities *partner_source_caps;
+	struct usb_power_delivery_capabilities *partner_sink_caps;
+	struct usb_power_delivery *selected_pd;
+	u32 sink_request;
+	u32 source_caps[7];
+	unsigned int nr_source_caps;
+	u32 sink_caps[7];
+	unsigned int nr_sink_caps;
+	unsigned int pd_count;
+	u32 src_pdo[7];
+	unsigned int nr_src_pdo;
+	u32 snk_pdo[7];
+	unsigned int nr_snk_pdo;
+	u32 snk_vdo_v1[6];
+	unsigned int nr_snk_vdo_v1;
+	u32 snk_vdo[6];
+	unsigned int nr_snk_vdo;
+	unsigned int operating_snk_mw;
+	bool update_sink_caps;
+	u32 req_current_limit;
+	u32 req_supply_voltage;
+	u32 current_limit;
+	u32 supply_voltage;
+	struct power_supply *psy;
+	struct power_supply_desc psy_desc;
+	enum power_supply_usb_type usb_type;
+	u32 bist_request;
+	enum vdm_states vdm_state;
+	u32 vdm_retries;
+	u32 vdo_data[7];
+	u8 vdo_count;
+	u32 vdo_retry;
+	struct pd_pps_data pps_data;
+	struct completion pps_complete;
+	bool pps_pending;
+	int pps_status;
+	struct pd_mode_data mode_data;
+	struct typec_altmode *partner_altmode[96];
+	struct typec_altmode *port_altmode[96];
+	unsigned long max_wait;
+	bool self_powered;
+	enum frs_typec_current new_source_frs_current;
+	bool sink_cap_done;
+	enum tcpm_state upcoming_state;
+	enum tcpm_ams ams;
+	enum tcpm_ams next_ams;
+	bool in_ams;
+	bool auto_vbus_discharge_enabled;
+	bool slow_charger_loop;
+	bool potential_contaminant;
+	struct dentry *dentry;
+	struct mutex logbuffer_lock;
+	int logbuffer_head;
+	int logbuffer_tail;
+	u8 *logbuffer[1024];
+};
+
+struct tcpc_dev {
+	struct fwnode_handle *fwnode;
+	int (*init)(struct tcpc_dev *);
+	int (*get_vbus)(struct tcpc_dev *);
+	int (*get_current_limit)(struct tcpc_dev *);
+	int (*set_cc)(struct tcpc_dev *, enum typec_cc_status);
+	int (*apply_rc)(struct tcpc_dev *, enum typec_cc_status, enum typec_cc_polarity);
+	int (*get_cc)(struct tcpc_dev *, enum typec_cc_status *, enum typec_cc_status *);
+	int (*set_polarity)(struct tcpc_dev *, enum typec_cc_polarity);
+	int (*set_vconn)(struct tcpc_dev *, bool);
+	int (*set_vbus)(struct tcpc_dev *, bool, bool);
+	int (*set_current_limit)(struct tcpc_dev *, u32, u32);
+	int (*set_pd_rx)(struct tcpc_dev *, bool);
+	int (*set_roles)(struct tcpc_dev *, bool, enum typec_role, enum typec_data_role);
+	int (*start_toggling)(struct tcpc_dev *, enum typec_port_type, enum typec_cc_status);
+	int (*try_role)(struct tcpc_dev *, int);
+	int (*pd_transmit)(struct tcpc_dev *, enum tcpm_transmit_type, const struct pd_message *, unsigned int);
+	int (*set_bist_data)(struct tcpc_dev *, bool);
+	int (*enable_frs)(struct tcpc_dev *, bool);
+	void (*frs_sourcing_vbus)(struct tcpc_dev *);
+	int (*enable_auto_vbus_discharge)(struct tcpc_dev *, bool);
+	int (*set_auto_vbus_discharge_threshold)(struct tcpc_dev *, enum typec_pwr_opmode, bool, u32);
+	bool (*is_vbus_vsafe0v)(struct tcpc_dev *);
+	void (*set_partner_usb_comm_capable)(struct tcpc_dev *, bool);
+	void (*check_contaminant)(struct tcpc_dev *);
+};
+
+struct pd_data {
+	struct usb_power_delivery *pd;
+	struct usb_power_delivery_capabilities *source_cap;
+	struct usb_power_delivery_capabilities_desc source_desc;
+	struct usb_power_delivery_capabilities *sink_cap;
+	struct usb_power_delivery_capabilities_desc sink_desc;
+	unsigned int operating_snk_mw;
+};
+
+struct power_supply_config {
+	struct device_node *of_node;
+	struct fwnode_handle *fwnode;
+	void *drv_data;
+	const struct attribute_group **attr_grp;
+	char **supplied_to;
+	size_t num_supplicants;
+	u64 android_kabi_reserved1;
+};
+
+struct tcpci_data;
+
+struct tcpci {
+	struct device *dev;
+	struct tcpm_port *port;
+	struct regmap *regmap;
+	unsigned int alert_mask;
+	bool controls_vbus;
+	struct tcpc_dev tcpc;
+	struct tcpci_data *data;
+};
+
+struct tcpci_data {
+	struct regmap *regmap;
+	unsigned char TX_BUF_BYTE_x_hidden: 1;
+	unsigned char auto_discharge_disconnect: 1;
+	unsigned char vbus_vsafe0v: 1;
+	int (*init)(struct tcpci *, struct tcpci_data *);
+	int (*set_vconn)(struct tcpci *, struct tcpci_data *, bool);
+	int (*start_drp_toggling)(struct tcpci *, struct tcpci_data *, enum typec_cc_status);
+	int (*set_vbus)(struct tcpci *, struct tcpci_data *, bool, bool);
+	void (*frs_sourcing_vbus)(struct tcpci *, struct tcpci_data *);
+	void (*set_partner_usb_comm_capable)(struct tcpci *, struct tcpci_data *, bool);
+	void (*check_contaminant)(struct tcpci *, struct tcpci_data *);
+};
+
+struct tcpci_chip {
+	struct tcpci *tcpci;
+	struct tcpci_data data;
+};
+
+enum {
+	TYPEC_MODE_USB2 = 2,
+	TYPEC_MODE_USB3 = 3,
+	TYPEC_MODE_USB4 = 4,
+	TYPEC_MODE_AUDIO = 5,
+	TYPEC_MODE_DEBUG = 6,
+};
+
+struct ucsi_connector;
+
+struct ucsi_work {
+	struct delayed_work work;
+	struct list_head node;
+	unsigned long delay;
+	unsigned int count;
+	struct ucsi_connector *con;
+	int (*cb)(struct ucsi_connector *);
+};
+
+struct ucsi_connector_status {
+	u16 change;
+	u16 flags;
+	u32 request_data_obj;
+	u8 pwr_status;
+} __attribute__((packed));
+
+struct ucsi_connector_capability {
+	u8 op_mode;
+	u8 flags;
+};
+
+struct ucsi;
+
+struct ucsi_connector {
+	int num;
+	struct ucsi *ucsi;
+	struct mutex lock;
+	struct work_struct work;
+	struct completion complete;
+	struct workqueue_struct *wq;
+	struct list_head partner_tasks;
+	struct typec_port *port;
+	struct typec_partner *partner;
+	struct typec_altmode *port_altmode[30];
+	struct typec_altmode *partner_altmode[30];
+	struct typec_capability typec_cap;
+	struct ucsi_connector_status status;
+	struct ucsi_connector_capability cap;
+	struct power_supply *psy;
+	struct power_supply_desc psy_desc;
+	u32 rdo;
+	u32 src_pdos[7];
+	int num_pdos;
+	struct usb_power_delivery *pd;
+	struct usb_power_delivery_capabilities *port_source_caps;
+	struct usb_power_delivery_capabilities *port_sink_caps;
+	struct usb_power_delivery *partner_pd;
+	struct usb_power_delivery_capabilities *partner_source_caps;
+	struct usb_power_delivery_capabilities *partner_sink_caps;
+	struct usb_role_switch *usb_role_sw;
+};
+
+struct driver_data;
+
+struct ucsi_capability {
+	u32 attributes;
+	u8 num_connectors;
+	u8 features;
+	u16 reserved_1;
+	u8 num_alt_modes;
+	u8 reserved_2;
+	u16 bc_version;
+	u16 pd_version;
+	u16 typec_version;
+};
+
+struct ucsi_operations;
+
+struct ucsi_debugfs_entry;
+
+struct ucsi {
+	u16 version;
+	struct device *dev;
+	struct driver_data *driver_data;
+	const struct ucsi_operations *ops;
+	struct ucsi_capability cap;
+	struct ucsi_connector *connector;
+	struct ucsi_debugfs_entry *debugfs;
+	struct work_struct resume_work;
+	struct delayed_work work;
+	int work_count;
+	struct mutex ppm_lock;
+	u64 ntfy;
+	unsigned long flags;
+};
+
+struct ucsi_altmode;
+
+struct ucsi_operations {
+	int (*read)(struct ucsi *, unsigned int, void *, size_t);
+	int (*sync_write)(struct ucsi *, unsigned int, const void *, size_t);
+	int (*async_write)(struct ucsi *, unsigned int, const void *, size_t);
+	bool (*update_altmodes)(struct ucsi *, struct ucsi_altmode *, struct ucsi_altmode *);
+};
+
+struct ucsi_altmode {
+	u16 svid;
+	u32 mid;
+} __attribute__((packed));
+
+struct ucsi_data {
+	u64 low;
+	u64 high;
+};
+
+struct ucsi_debugfs_entry {
+	u64 command;
+	struct ucsi_data response;
+	u32 status;
+	struct dentry *dentry;
+};
+
+typedef void (*btf_trace_ucsi_run_command)(void *, u64, int);
+
+typedef void (*btf_trace_ucsi_reset_ppm)(void *, u64, int);
+
+typedef void (*btf_trace_ucsi_connector_change)(void *, int, struct ucsi_connector_status *);
+
+typedef void (*btf_trace_ucsi_register_port)(void *, int, struct ucsi_connector_status *);
+
+typedef void (*btf_trace_ucsi_register_altmode)(void *, u8, struct typec_altmode *);
+
+struct trace_event_raw_ucsi_log_command {
+	struct trace_entry ent;
+	u64 ctrl;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_ucsi_log_connector_status {
+	struct trace_entry ent;
+	int port;
+	u16 change;
+	u8 opmode;
+	u8 connected;
+	u8 pwr_dir;
+	u8 partner_flags;
+	u8 partner_type;
+	u32 request_data_obj;
+	u8 bc_status;
+	char __data[0];
+};
+
+struct trace_event_raw_ucsi_log_register_altmode {
+	struct trace_entry ent;
+	u8 recipient;
+	u16 svid;
+	u8 mode;
+	u32 vdo;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_ucsi_log_command {};
+
+struct trace_event_data_offsets_ucsi_log_connector_status {};
+
+struct trace_event_data_offsets_ucsi_log_register_altmode {};
+
+enum ucsi_psy_online_states {
+	UCSI_PSY_OFFLINE = 0,
+	UCSI_PSY_FIXED_ONLINE = 1,
+	UCSI_PSY_PROG_ONLINE = 2,
+};
+
+enum {
+	POWER_SUPPLY_SCOPE_UNKNOWN = 0,
+	POWER_SUPPLY_SCOPE_SYSTEM = 1,
+	POWER_SUPPLY_SCOPE_DEVICE = 2,
+};
+
+struct ucsi_dp {
+	struct typec_displayport_data data;
+	struct ucsi_connector *con;
+	struct typec_altmode *alt;
+	struct work_struct work;
+	int offset;
+	bool override;
+	bool initialized;
+	u32 header;
+	u32 *vdo_data;
+	u8 vdo_size;
+};
+
+struct usb_role_switch {
+	struct device dev;
+	struct mutex lock;
+	struct module *module;
+	enum usb_role role;
+	bool registered;
+	struct device *usb2_port;
+	struct device *usb3_port;
+	struct device *udc;
+	usb_role_switch_set_t set;
+	usb_role_switch_get_t get;
+	bool allow_userspace_control;
+};
+
+enum serio_event_type {
+	SERIO_RESCAN_PORT = 0,
+	SERIO_RECONNECT_PORT = 1,
+	SERIO_RECONNECT_SUBTREE = 2,
+	SERIO_REGISTER_PORT = 3,
+	SERIO_ATTACH_DRIVER = 4,
+};
+
+struct serio_device_id {
+	__u8 type;
+	__u8 extra;
+	__u8 id;
+	__u8 proto;
+};
+
+struct serio_driver;
+
+struct serio {
+	void *port_data;
+	char name[32];
+	char phys[32];
+	char firmware_id[128];
+	bool manual_bind;
+	struct serio_device_id id;
+	spinlock_t lock;
+	int (*write)(struct serio *, unsigned char);
+	int (*open)(struct serio *);
+	void (*close)(struct serio *);
+	int (*start)(struct serio *);
+	void (*stop)(struct serio *);
+	struct serio *parent;
+	struct list_head child_node;
+	struct list_head children;
+	unsigned int depth;
+	struct serio_driver *drv;
+	struct mutex drv_mutex;
+	struct device dev;
+	struct list_head node;
+	struct mutex *ps2_cmd_mutex;
+	u64 android_kabi_reserved1;
+};
+
+struct serio_driver {
+	const char *description;
+	const struct serio_device_id *id_table;
+	bool manual_bind;
+	void (*write_wakeup)(struct serio *);
+	irqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);
+	int (*connect)(struct serio *, struct serio_driver *);
+	int (*reconnect)(struct serio *);
+	int (*fast_reconnect)(struct serio *);
+	void (*disconnect)(struct serio *);
+	void (*cleanup)(struct serio *);
+	struct device_driver driver;
+	u64 android_kabi_reserved1;
+};
+
+struct serio_event {
+	enum serio_event_type type;
+	void *object;
+	struct module *owner;
+	struct list_head node;
+};
+
+enum i8042_controller_reset_mode {
+	I8042_RESET_NEVER = 0,
+	I8042_RESET_ALWAYS = 1,
+	I8042_RESET_ON_S2RAM = 2,
+};
+
+struct i8042_port {
+	struct serio *serio;
+	int irq;
+	bool exists;
+	bool driver_bound;
+	signed char mux;
+};
+
+struct serport___2 {
+	struct tty_struct *tty;
+	wait_queue_head_t wait;
+	struct serio *serio;
+	struct serio_device_id id;
+	spinlock_t lock;
+	unsigned long flags;
+};
+
+enum ps2_disposition {
+	PS2_PROCESS = 0,
+	PS2_IGNORE = 1,
+	PS2_ERROR = 2,
+};
+
+struct ps2dev;
+
+typedef enum ps2_disposition (*ps2_pre_receive_handler_t)(struct ps2dev *, u8, unsigned int);
+
+typedef void (*ps2_receive_handler_t)(struct ps2dev *, u8);
+
+struct ps2dev {
+	struct serio *serio;
+	struct mutex cmd_mutex;
+	wait_queue_head_t wait;
+	unsigned long flags;
+	u8 cmdbuf[8];
+	u8 cmdcnt;
+	u8 nak;
+	ps2_pre_receive_handler_t pre_receive_handler;
+	ps2_receive_handler_t receive_handler;
+};
+
+enum input_clock_type {
+	INPUT_CLK_REAL = 0,
+	INPUT_CLK_MONO = 1,
+	INPUT_CLK_BOOT = 2,
+	INPUT_CLK_MAX = 3,
+};
+
+struct input_mt_slot {
+	int abs[14];
+	unsigned int frame;
+	unsigned int key;
+};
+
+struct input_mt {
+	int trkid;
+	int num_slots;
+	int slot;
+	unsigned int flags;
+	unsigned int frame;
+	int *red;
+	struct input_mt_slot slots[0];
+};
+
+union input_seq_state {
+	struct {
+		unsigned short pos;
+		bool mutex_acquired;
+	};
+	void *p;
+};
+
+struct input_devres {
+	struct input_dev *input;
+};
+
+struct ff_periodic_effect_compat {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+	struct ff_envelope envelope;
+	__u32 custom_len;
+	compat_uptr_t custom_data;
+};
+
+struct ff_effect_compat {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect_compat periodic;
+		struct ff_condition_effect condition[2];
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+struct input_event_compat {
+	compat_ulong_t sec;
+	compat_ulong_t usec;
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct input_event {
+	__kernel_ulong_t __sec;
+	__kernel_ulong_t __usec;
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct input_mt_pos {
+	s16 x;
+	s16 y;
+};
+
+struct input_dev_poller {
+	void (*poll)(struct input_dev *);
+	unsigned int poll_interval;
+	unsigned int poll_interval_max;
+	unsigned int poll_interval_min;
+	struct input_dev *input;
+	struct delayed_work work;
+};
+
+struct touchscreen_properties {
+	unsigned int max_x;
+	unsigned int max_y;
+	bool invert_x;
+	bool invert_y;
+	bool swap_x_y;
+};
+
+struct ml_effect_state {
+	struct ff_effect *effect;
+	unsigned long flags;
+	int count;
+	unsigned long play_at;
+	unsigned long stop_at;
+	unsigned long adj_at;
+};
+
+struct ml_device {
+	void *private;
+	struct ml_effect_state states[16];
+	int gain;
+	struct timer_list timer;
+	struct input_dev *dev;
+	int (*play_effect)(struct input_dev *, void *, struct ff_effect *);
+};
+
+struct vivaldi_data {
+	u32 function_row_physmap[24];
+	unsigned int num_function_row_keys;
+};
+
+struct input_led {
+	struct led_classdev cdev;
+	struct input_handle *handle;
+	unsigned int code;
+};
+
+struct input_leds {
+	struct input_handle handle;
+	unsigned int num_leds;
+	struct input_led leds[0];
+};
+
+struct evdev;
+
+struct evdev_client {
+	unsigned int head;
+	unsigned int tail;
+	unsigned int packet_head;
+	spinlock_t buffer_lock;
+	wait_queue_head_t wait;
+	struct fasync_struct *fasync;
+	struct evdev *evdev;
+	struct list_head node;
+	enum input_clock_type clk_type;
+	bool revoked;
+	unsigned long *evmasks[32];
+	unsigned int bufsize;
+	struct input_event buffer[0];
+};
+
+struct evdev {
+	int open;
+	struct input_handle handle;
+	struct evdev_client __attribute__((btf_type_tag("rcu"))) *grab;
+	struct list_head client_list;
+	spinlock_t client_lock;
+	struct mutex mutex;
+	struct device dev;
+	struct cdev cdev;
+	bool exist;
+};
+
+struct input_mask {
+	__u32 type;
+	__u32 codes_size;
+	__u64 codes_ptr;
+};
+
+struct atkbd {
+	struct ps2dev ps2dev;
+	struct input_dev *dev;
+	char name[64];
+	char phys[32];
+	unsigned short id;
+	unsigned short keycode[512];
+	unsigned long force_release_mask[8];
+	unsigned char set;
+	bool translated;
+	bool extra;
+	bool write;
+	bool softrepeat;
+	bool softraw;
+	bool scroll;
+	bool enabled;
+	unsigned char emul;
+	bool resend;
+	bool release;
+	unsigned long xl_bit;
+	unsigned int last;
+	unsigned long time;
+	unsigned long err_count;
+	struct delayed_work event_work;
+	unsigned long event_jiffies;
+	unsigned long event_mask;
+	struct mutex mutex;
+	struct vivaldi_data vdata;
+};
+
+struct gpio_keys_button {
+	unsigned int code;
+	int gpio;
+	int active_low;
+	const char *desc;
+	unsigned int type;
+	int wakeup;
+	int wakeup_event_action;
+	int debounce_interval;
+	bool can_disable;
+	int value;
+	unsigned int irq;
+};
+
+struct gpio_button_data {
+	const struct gpio_keys_button *button;
+	struct input_dev *input;
+	struct gpio_desc *gpiod;
+	unsigned short *code;
+	struct hrtimer release_timer;
+	unsigned int release_delay;
+	struct delayed_work work;
+	struct hrtimer debounce_timer;
+	unsigned int software_debounce;
+	unsigned int irq;
+	unsigned int wakeup_trigger_type;
+	spinlock_t lock;
+	bool disabled;
+	bool key_pressed;
+	bool suspended;
+	bool debounce_use_hrtimer;
+};
+
+struct gpio_keys_platform_data;
+
+struct gpio_keys_drvdata {
+	const struct gpio_keys_platform_data *pdata;
+	struct input_dev *input;
+	struct mutex disable_lock;
+	unsigned short *keymap;
+	struct gpio_button_data data[0];
+};
+
+struct gpio_keys_platform_data {
+	const struct gpio_keys_button *buttons;
+	int nbuttons;
+	unsigned int poll_interval;
+	unsigned int rep: 1;
+	int (*enable)(struct device *);
+	void (*disable)(struct device *);
+	const char *name;
+};
+
+struct xpad_device {
+	u16 idVendor;
+	u16 idProduct;
+	char *name;
+	u8 mapping;
+	u8 xtype;
+};
+
+struct xboxone_init_packet {
+	u16 idVendor;
+	u16 idProduct;
+	const u8 *data;
+	u8 len;
+};
+
+struct xpad_output_packet {
+	u8 data[64];
+	u8 len;
+	bool pending;
+};
+
+struct usb_xpad {
+	struct input_dev *dev;
+	struct input_dev __attribute__((btf_type_tag("rcu"))) *x360w_dev;
+	struct usb_device *udev;
+	struct usb_interface *intf;
+	bool pad_present;
+	bool input_created;
+	struct urb *irq_in;
+	unsigned char *idata;
+	dma_addr_t idata_dma;
+	struct urb *irq_out;
+	struct usb_anchor irq_out_anchor;
+	bool irq_out_active;
+	u8 odata_serial;
+	unsigned char *odata;
+	dma_addr_t odata_dma;
+	spinlock_t odata_lock;
+	struct xpad_output_packet out_packets[1];
+	int last_out_packet;
+	int init_seq;
+	char phys[64];
+	int mapping;
+	int xtype;
+	int packet_type;
+	int pad_nr;
+	const char *name;
+	struct work_struct work;
+	time64_t mode_btn_down_ts;
+};
+
+enum uinput_state {
+	UIST_NEW_DEVICE = 0,
+	UIST_SETUP_COMPLETE = 1,
+	UIST_CREATED = 2,
+};
+
+struct uinput_request;
+
+struct uinput_device {
+	struct input_dev *dev;
+	struct mutex mutex;
+	enum uinput_state state;
+	wait_queue_head_t waitq;
+	unsigned char ready;
+	unsigned char head;
+	unsigned char tail;
+	struct input_event buff[16];
+	unsigned int ff_effects_max;
+	struct uinput_request *requests[16];
+	wait_queue_head_t requests_waitq;
+	spinlock_t requests_lock;
+};
+
+struct uinput_request {
+	unsigned int id;
+	unsigned int code;
+	int retval;
+	struct completion done;
+	union {
+		unsigned int effect_id;
+		struct {
+			struct ff_effect *effect;
+			struct ff_effect *old;
+		} upload;
+	} u;
+};
+
+struct uinput_user_dev {
+	char name[80];
+	struct input_id id;
+	__u32 ff_effects_max;
+	__s32 absmax[64];
+	__s32 absmin[64];
+	__s32 absfuzz[64];
+	__s32 absflat[64];
+};
+
+struct uinput_ff_upload {
+	__u32 request_id;
+	__s32 retval;
+	struct ff_effect effect;
+	struct ff_effect old;
+};
+
+struct uinput_ff_erase {
+	__u32 request_id;
+	__s32 retval;
+	__u32 effect_id;
+};
+
+struct uinput_setup {
+	struct input_id id;
+	char name[80];
+	__u32 ff_effects_max;
+};
+
+struct uinput_ff_upload_compat {
+	__u32 request_id;
+	__s32 retval;
+	struct ff_effect_compat effect;
+	struct ff_effect_compat old;
+};
+
+struct uinput_abs_setup {
+	__u16 code;
+	struct input_absinfo absinfo;
+};
+
+typedef void (*btf_trace_rtc_set_time)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_read_time)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_set_alarm)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_read_alarm)(void *, time64_t, int);
+
+typedef void (*btf_trace_rtc_irq_set_freq)(void *, int, int);
+
+typedef void (*btf_trace_rtc_irq_set_state)(void *, int, int);
+
+typedef void (*btf_trace_rtc_alarm_irq_enable)(void *, unsigned int, int);
+
+typedef void (*btf_trace_rtc_set_offset)(void *, long, int);
+
+typedef void (*btf_trace_rtc_read_offset)(void *, long, int);
+
+typedef void (*btf_trace_rtc_timer_enqueue)(void *, struct rtc_timer *);
+
+typedef void (*btf_trace_rtc_timer_dequeue)(void *, struct rtc_timer *);
+
+typedef void (*btf_trace_rtc_timer_fired)(void *, struct rtc_timer *);
+
+enum {
+	none = 0,
+	day = 1,
+	month = 2,
+	year = 3,
+};
+
+struct trace_event_raw_rtc_time_alarm_class {
+	struct trace_entry ent;
+	time64_t secs;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_irq_set_freq {
+	struct trace_entry ent;
+	int freq;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_irq_set_state {
+	struct trace_entry ent;
+	int enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_alarm_irq_enable {
+	struct trace_entry ent;
+	unsigned int enabled;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_offset_class {
+	struct trace_entry ent;
+	long offset;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_rtc_timer_class {
+	struct trace_entry ent;
+	struct rtc_timer *timer;
+	ktime_t expires;
+	ktime_t period;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_rtc_time_alarm_class {};
+
+struct trace_event_data_offsets_rtc_irq_set_freq {};
+
+struct trace_event_data_offsets_rtc_irq_set_state {};
+
+struct trace_event_data_offsets_rtc_alarm_irq_enable {};
+
+struct trace_event_data_offsets_rtc_offset_class {};
+
+struct trace_event_data_offsets_rtc_timer_class {};
+
+enum nvmem_type {
+	NVMEM_TYPE_UNKNOWN = 0,
+	NVMEM_TYPE_EEPROM = 1,
+	NVMEM_TYPE_OTP = 2,
+	NVMEM_TYPE_BATTERY_BACKED = 3,
+	NVMEM_TYPE_FRAM = 4,
+};
+
+typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);
+
+typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);
+
+struct nvmem_cell_info;
+
+struct nvmem_keepout;
+
+struct nvmem_layout;
+
+struct nvmem_config {
+	struct device *dev;
+	const char *name;
+	int id;
+	struct module *owner;
+	const struct nvmem_cell_info *cells;
+	int ncells;
+	bool add_legacy_fixed_of_cells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	enum nvmem_type type;
+	bool read_only;
+	bool root_only;
+	bool ignore_wp;
+	struct nvmem_layout *layout;
+	struct device_node *of_node;
+	bool no_of_node;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	int size;
+	int word_size;
+	int stride;
+	void *priv;
+	bool compat;
+	struct device *base_dev;
+};
+
+typedef int (*nvmem_cell_post_process_t)(void *, const char *, int, unsigned int, void *, size_t);
+
+struct nvmem_cell_info {
+	const char *name;
+	unsigned int offset;
+	size_t raw_len;
+	unsigned int bytes;
+	unsigned int bit_offset;
+	unsigned int nbits;
+	struct device_node *np;
+	nvmem_cell_post_process_t read_post_process;
+	void *priv;
+};
+
+struct nvmem_keepout {
+	unsigned int start;
+	unsigned int end;
+	unsigned char value;
+};
+
+struct nvmem_device;
+
+struct nvmem_layout {
+	const char *name;
+	const struct of_device_id *of_match_table;
+	int (*add_cells)(struct device *, struct nvmem_device *, struct nvmem_layout *);
+	void (*fixup_cell_info)(struct nvmem_device *, struct nvmem_layout *, struct nvmem_cell_info *);
+	struct module *owner;
+	struct list_head node;
+};
+
+struct mc146818_get_time_callback_param {
+	struct rtc_time *time;
+	unsigned char ctrl;
+	unsigned char century;
+};
+
+struct cmos_rtc {
+	struct rtc_device *rtc;
+	struct device *dev;
+	int irq;
+	struct resource *iomem;
+	time64_t alarm_expires;
+	void (*wake_on)(struct device *);
+	void (*wake_off)(struct device *);
+	u8 enabled_wake;
+	u8 suspend_ctrl;
+	u8 day_alrm;
+	u8 mon_alrm;
+	u8 century;
+	struct rtc_wkalrm saved_wkalrm;
+};
+
+struct cmos_read_alarm_callback_param {
+	struct cmos_rtc *cmos;
+	struct rtc_time *time;
+	unsigned char rtc_control;
+};
+
+struct cmos_set_alarm_callback_param {
+	struct cmos_rtc *cmos;
+	unsigned char mon;
+	unsigned char mday;
+	unsigned char hrs;
+	unsigned char min;
+	unsigned char sec;
+	struct rtc_wkalrm *t;
+};
+
+struct cmos_rtc_board_info {
+	void (*wake_on)(struct device *);
+	void (*wake_off)(struct device *);
+	u32 flags;
+	int address_space;
+	u8 rtc_day_alarm;
+	u8 rtc_mon_alarm;
+	u8 rtc_century;
+};
+
+struct i2c_devinfo {
+	struct list_head list;
+	int busnum;
+	struct i2c_board_info board_info;
+};
+
+typedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);
+
+typedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);
+
+struct trace_event_raw_i2c_write {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_read {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_reply {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 msg_nr;
+	__u16 addr;
+	__u16 flags;
+	__u16 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_i2c_result {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 nr_msgs;
+	__s16 ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_i2c_write {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_reply {
+	u32 buf;
+};
+
+struct trace_event_data_offsets_i2c_read {};
+
+struct trace_event_data_offsets_i2c_result {};
+
+struct i2c_timings {
+	u32 bus_freq_hz;
+	u32 scl_rise_ns;
+	u32 scl_fall_ns;
+	u32 scl_int_delay_ns;
+	u32 sda_fall_ns;
+	u32 sda_hold_ns;
+	u32 digital_filter_width_ns;
+	u32 analog_filter_cutoff_freq_hz;
+};
+
+struct i2c_cmd_arg {
+	unsigned int cmd;
+	void *arg;
+};
+
+struct i2c_device_identity {
+	u16 manufacturer_id;
+	u16 part_id;
+	u8 die_revision;
+};
+
+typedef void (*btf_trace_smbus_write)(void *, const struct i2c_adapter *, u16, unsigned short, char, u8, int, const union i2c_smbus_data *);
+
+typedef void (*btf_trace_smbus_read)(void *, const struct i2c_adapter *, u16, unsigned short, char, u8, int);
+
+typedef void (*btf_trace_smbus_reply)(void *, const struct i2c_adapter *, u16, unsigned short, char, u8, int, const union i2c_smbus_data *, int);
+
+typedef void (*btf_trace_smbus_result)(void *, const struct i2c_adapter *, u16, unsigned short, char, u8, int, int);
+
+struct trace_event_raw_smbus_write {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 command;
+	__u8 len;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_read {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 flags;
+	__u16 addr;
+	__u8 command;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_reply {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 command;
+	__u8 len;
+	__u32 protocol;
+	__u8 buf[34];
+	char __data[0];
+};
+
+struct trace_event_raw_smbus_result {
+	struct trace_entry ent;
+	int adapter_nr;
+	__u16 addr;
+	__u16 flags;
+	__u8 read_write;
+	__u8 command;
+	__s16 res;
+	__u32 protocol;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_smbus_write {};
+
+struct trace_event_data_offsets_smbus_read {};
+
+struct trace_event_data_offsets_smbus_reply {};
+
+struct trace_event_data_offsets_smbus_result {};
+
+struct i2c_smbus_alert_setup {
+	int irq;
+};
+
+enum i2c_driver_flags {
+	I2C_DRV_ACPI_WAIVE_D0_PROBE = 1,
+};
+
+struct gsb_buffer {
+	u8 status;
+	u8 len;
+	union {
+		u16 wdata;
+		u8 bdata;
+		struct {
+			struct {} __empty_data;
+			u8 data[0];
+		};
+	};
+};
+
+struct i2c_acpi_irq_context {
+	int irq;
+	bool wake_capable;
+};
+
+struct i2c_acpi_lookup {
+	struct i2c_board_info *info;
+	acpi_handle adapter_handle;
+	acpi_handle device_handle;
+	acpi_handle search_handle;
+	int n;
+	int index;
+	u32 speed;
+	u32 min_speed;
+	u32 force_speed;
+};
+
+struct i2c_acpi_handler_data {
+	struct acpi_connection_info info;
+	struct i2c_adapter *adapter;
+};
+
+enum i3c_error_code {
+	I3C_ERROR_UNKNOWN = 0,
+	I3C_ERROR_M0 = 1,
+	I3C_ERROR_M1 = 2,
+	I3C_ERROR_M2 = 3,
+};
+
+enum i3c_bus_mode {
+	I3C_BUS_MODE_PURE = 0,
+	I3C_BUS_MODE_MIXED_FAST = 1,
+	I3C_BUS_MODE_MIXED_LIMITED = 2,
+	I3C_BUS_MODE_MIXED_SLOW = 3,
+};
+
+struct i3c_dev_desc;
+
+struct i3c_bus {
+	struct i3c_dev_desc *cur_master;
+	int id;
+	unsigned long addrslots[4];
+	enum i3c_bus_mode mode;
+	struct {
+		unsigned long i3c;
+		unsigned long i2c;
+	} scl_rate;
+	struct {
+		struct list_head i3c;
+		struct list_head i2c;
+	} devs;
+	struct rw_semaphore lock;
+};
+
+struct i3c_master_controller;
+
+struct i3c_i2c_dev_desc {
+	struct list_head node;
+	struct i3c_master_controller *master;
+	void *master_priv;
+};
+
+struct i3c_device_info {
+	u64 pid;
+	u8 bcr;
+	u8 dcr;
+	u8 static_addr;
+	u8 dyn_addr;
+	u8 hdr_cap;
+	u8 max_read_ds;
+	u8 max_write_ds;
+	u8 max_ibi_len;
+	u32 max_read_turnaround;
+	u16 max_read_len;
+	u16 max_write_len;
+};
+
+struct i3c_device_ibi_info;
+
+struct i3c_device;
+
+struct i3c_dev_boardinfo;
+
+struct i3c_dev_desc {
+	struct i3c_i2c_dev_desc common;
+	struct i3c_device_info info;
+	struct mutex ibi_lock;
+	struct i3c_device_ibi_info *ibi;
+	struct i3c_device *dev;
+	const struct i3c_dev_boardinfo *boardinfo;
+};
+
+struct i3c_master_controller_ops;
+
+struct i3c_master_controller {
+	struct device dev;
+	struct i3c_dev_desc *this;
+	struct i2c_adapter i2c;
+	const struct i3c_master_controller_ops *ops;
+	unsigned int secondary: 1;
+	unsigned int init_done: 1;
+	struct {
+		struct list_head i3c;
+		struct list_head i2c;
+	} boardinfo;
+	struct i3c_bus bus;
+	struct workqueue_struct *wq;
+};
+
+struct i3c_ccc_cmd;
+
+struct i3c_priv_xfer;
+
+struct i2c_dev_desc;
+
+struct i3c_ibi_setup;
+
+struct i3c_ibi_slot;
+
+struct i3c_master_controller_ops {
+	int (*bus_init)(struct i3c_master_controller *);
+	void (*bus_cleanup)(struct i3c_master_controller *);
+	int (*attach_i3c_dev)(struct i3c_dev_desc *);
+	int (*reattach_i3c_dev)(struct i3c_dev_desc *, u8);
+	void (*detach_i3c_dev)(struct i3c_dev_desc *);
+	int (*do_daa)(struct i3c_master_controller *);
+	bool (*supports_ccc_cmd)(struct i3c_master_controller *, const struct i3c_ccc_cmd *);
+	int (*send_ccc_cmd)(struct i3c_master_controller *, struct i3c_ccc_cmd *);
+	int (*priv_xfers)(struct i3c_dev_desc *, struct i3c_priv_xfer *, int);
+	int (*attach_i2c_dev)(struct i2c_dev_desc *);
+	void (*detach_i2c_dev)(struct i2c_dev_desc *);
+	int (*i2c_xfers)(struct i2c_dev_desc *, const struct i2c_msg *, int);
+	int (*request_ibi)(struct i3c_dev_desc *, const struct i3c_ibi_setup *);
+	void (*free_ibi)(struct i3c_dev_desc *);
+	int (*enable_ibi)(struct i3c_dev_desc *);
+	int (*disable_ibi)(struct i3c_dev_desc *);
+	void (*recycle_ibi_slot)(struct i3c_dev_desc *, struct i3c_ibi_slot *);
+};
+
+struct i3c_ccc_cmd_dest;
+
+struct i3c_ccc_cmd {
+	u8 rnw;
+	u8 id;
+	unsigned int ndests;
+	struct i3c_ccc_cmd_dest *dests;
+	enum i3c_error_code err;
+};
+
+struct i3c_ccc_cmd_payload {
+	u16 len;
+	void *data;
+};
+
+struct i3c_ccc_cmd_dest {
+	u8 addr;
+	struct i3c_ccc_cmd_payload payload;
+};
+
+struct i3c_priv_xfer {
+	u8 rnw;
+	u16 len;
+	union {
+		void *in;
+		const void *out;
+	} data;
+	enum i3c_error_code err;
+};
+
+struct i2c_dev_desc {
+	struct i3c_i2c_dev_desc common;
+	struct i2c_client *dev;
+	u16 addr;
+	u8 lvr;
+};
+
+struct i3c_ibi_payload;
+
+struct i3c_ibi_setup {
+	unsigned int max_payload_len;
+	unsigned int num_slots;
+	void (*handler)(struct i3c_device *, const struct i3c_ibi_payload *);
+};
+
+struct i3c_device {
+	struct device dev;
+	struct i3c_dev_desc *desc;
+	struct i3c_bus *bus;
+};
+
+struct i3c_ibi_payload {
+	unsigned int len;
+	const void *data;
+};
+
+struct i3c_ibi_slot {
+	struct work_struct work;
+	struct i3c_dev_desc *dev;
+	unsigned int len;
+	void *data;
+};
+
+struct i3c_device_ibi_info {
+	struct completion all_ibis_handled;
+	atomic_t pending_ibis;
+	unsigned int max_payload_len;
+	unsigned int num_slots;
+	unsigned int enabled;
+	void (*handler)(struct i3c_device *, const struct i3c_ibi_payload *);
+};
+
+struct i3c_dev_boardinfo {
+	struct list_head node;
+	u8 init_dyn_addr;
+	u8 static_addr;
+	u64 pid;
+	struct device_node *of_node;
+};
+
+struct i3c_device_id {
+	__u8 match_flags;
+	__u8 dcr;
+	__u16 manuf_id;
+	__u16 part_id;
+	__u16 extra_info;
+	const void *data;
+};
+
+struct i3c_driver {
+	struct device_driver driver;
+	int (*probe)(struct i3c_device *);
+	void (*remove)(struct i3c_device *);
+	const struct i3c_device_id *id_table;
+};
+
+enum i3c_addr_slot_status {
+	I3C_ADDR_SLOT_FREE = 0,
+	I3C_ADDR_SLOT_RSVD = 1,
+	I3C_ADDR_SLOT_I2C_DEV = 2,
+	I3C_ADDR_SLOT_I3C_DEV = 3,
+	I3C_ADDR_SLOT_STATUS_MASK = 3,
+};
+
+struct i3c_generic_ibi_slot {
+	struct list_head node;
+	struct i3c_ibi_slot base;
+};
+
+struct i2c_dev_boardinfo {
+	struct list_head node;
+	struct i2c_board_info base;
+	u8 lvr;
+};
+
+struct i3c_ccc_getpid {
+	u8 pid[6];
+};
+
+struct i3c_ccc_getbcr {
+	u8 bcr;
+};
+
+struct i3c_ccc_getdcr {
+	u8 dcr;
+};
+
+struct i3c_generic_ibi_pool {
+	spinlock_t lock;
+	unsigned int num_slots;
+	struct i3c_generic_ibi_slot *slots;
+	void *payload_buf;
+	struct list_head free_slots;
+	struct list_head pending;
+};
+
+struct i3c_ccc_events {
+	u8 events;
+};
+
+struct i3c_ccc_dev_desc {
+	u8 dyn_addr;
+	union {
+		u8 dcr;
+		u8 lvr;
+	};
+	u8 bcr;
+	u8 static_addr;
+};
+
+struct i3c_ccc_defslvs {
+	u8 count;
+	struct i3c_ccc_dev_desc master;
+	struct i3c_ccc_dev_desc slaves[0];
+};
+
+struct i3c_ccc_getmxds {
+	u8 maxwr;
+	u8 maxrd;
+	u8 maxrdturn[3];
+};
+
+struct i3c_ccc_mrl {
+	__be16 read_len;
+	u8 ibi_len;
+} __attribute__((packed));
+
+struct i3c_ccc_mwl {
+	__be16 len;
+};
+
+struct i3c_ccc_gethdrcap {
+	u8 modes;
+};
+
+struct i3c_ccc_setda {
+	u8 addr;
+};
+
+enum rc_proto {
+	RC_PROTO_UNKNOWN = 0,
+	RC_PROTO_OTHER = 1,
+	RC_PROTO_RC5 = 2,
+	RC_PROTO_RC5X_20 = 3,
+	RC_PROTO_RC5_SZ = 4,
+	RC_PROTO_JVC = 5,
+	RC_PROTO_SONY12 = 6,
+	RC_PROTO_SONY15 = 7,
+	RC_PROTO_SONY20 = 8,
+	RC_PROTO_NEC = 9,
+	RC_PROTO_NECX = 10,
+	RC_PROTO_NEC32 = 11,
+	RC_PROTO_SANYO = 12,
+	RC_PROTO_MCIR2_KBD = 13,
+	RC_PROTO_MCIR2_MSE = 14,
+	RC_PROTO_RC6_0 = 15,
+	RC_PROTO_RC6_6A_20 = 16,
+	RC_PROTO_RC6_6A_24 = 17,
+	RC_PROTO_RC6_6A_32 = 18,
+	RC_PROTO_RC6_MCE = 19,
+	RC_PROTO_SHARP = 20,
+	RC_PROTO_XMP = 21,
+	RC_PROTO_CEC = 22,
+	RC_PROTO_IMON = 23,
+	RC_PROTO_RCMM12 = 24,
+	RC_PROTO_RCMM24 = 25,
+	RC_PROTO_RCMM32 = 26,
+	RC_PROTO_XBOX_DVD = 27,
+	RC_PROTO_MAX = 27,
+};
+
+enum rc_driver_type {
+	RC_DRIVER_SCANCODE = 0,
+	RC_DRIVER_IR_RAW = 1,
+	RC_DRIVER_IR_RAW_TX = 2,
+};
+
+enum ir_kbd_get_key_fn {
+	IR_KBD_GET_KEY_CUSTOM = 0,
+	IR_KBD_GET_KEY_PIXELVIEW = 1,
+	IR_KBD_GET_KEY_HAUP = 2,
+	IR_KBD_GET_KEY_KNC1 = 3,
+	IR_KBD_GET_KEY_GENIATECH = 4,
+	IR_KBD_GET_KEY_FUSIONHDTV = 5,
+	IR_KBD_GET_KEY_HAUP_XVR = 6,
+	IR_KBD_GET_KEY_AVERMEDIA_CARDBUS = 7,
+};
+
+struct rc_dev;
+
+struct IR_i2c {
+	char *ir_codes;
+	struct i2c_client *c;
+	struct rc_dev *rc;
+	unsigned char old;
+	u32 polling_interval;
+	struct delayed_work work;
+	char phys[32];
+	int (*get_key)(struct IR_i2c *, enum rc_proto *, u32 *, u8 *);
+	struct i2c_client *tx_c;
+	struct mutex lock;
+	unsigned int carrier;
+	unsigned int duty_cycle;
+};
+
+struct rc_map_table;
+
+struct rc_map {
+	struct rc_map_table *scan;
+	unsigned int size;
+	unsigned int len;
+	unsigned int alloc;
+	enum rc_proto rc_proto;
+	const char *name;
+	spinlock_t lock;
+};
+
+struct rc_scancode_filter {
+	u32 data;
+	u32 mask;
+};
+
+struct ir_raw_event_ctrl;
+
+struct rc_dev {
+	struct device dev;
+	bool managed_alloc;
+	const struct attribute_group *sysfs_groups[5];
+	const char *device_name;
+	const char *input_phys;
+	struct input_id input_id;
+	const char *driver_name;
+	const char *map_name;
+	struct rc_map rc_map;
+	struct mutex lock;
+	unsigned int minor;
+	struct ir_raw_event_ctrl *raw;
+	struct input_dev *input_dev;
+	enum rc_driver_type driver_type;
+	bool idle;
+	bool encode_wakeup;
+	u64 allowed_protocols;
+	u64 enabled_protocols;
+	u64 allowed_wakeup_protocols;
+	enum rc_proto wakeup_protocol;
+	struct rc_scancode_filter scancode_filter;
+	struct rc_scancode_filter scancode_wakeup_filter;
+	u32 scancode_mask;
+	u32 users;
+	void *priv;
+	spinlock_t keylock;
+	bool keypressed;
+	unsigned long keyup_jiffies;
+	struct timer_list timer_keyup;
+	struct timer_list timer_repeat;
+	u32 last_keycode;
+	enum rc_proto last_protocol;
+	u64 last_scancode;
+	u8 last_toggle;
+	u32 timeout;
+	u32 min_timeout;
+	u32 max_timeout;
+	u32 rx_resolution;
+	u32 tx_resolution;
+	struct device lirc_dev;
+	struct cdev lirc_cdev;
+	ktime_t gap_start;
+	spinlock_t lirc_fh_lock;
+	struct list_head lirc_fh;
+	bool registered;
+	int (*change_protocol)(struct rc_dev *, u64 *);
+	int (*open)(struct rc_dev *);
+	void (*close)(struct rc_dev *);
+	int (*s_tx_mask)(struct rc_dev *, u32);
+	int (*s_tx_carrier)(struct rc_dev *, u32);
+	int (*s_tx_duty_cycle)(struct rc_dev *, u32);
+	int (*s_rx_carrier_range)(struct rc_dev *, u32, u32);
+	int (*tx_ir)(struct rc_dev *, unsigned int *, unsigned int);
+	void (*s_idle)(struct rc_dev *, bool);
+	int (*s_wideband_receiver)(struct rc_dev *, int);
+	int (*s_carrier_report)(struct rc_dev *, int);
+	int (*s_filter)(struct rc_dev *, struct rc_scancode_filter *);
+	int (*s_wakeup_filter)(struct rc_dev *, struct rc_scancode_filter *);
+	int (*s_timeout)(struct rc_dev *, unsigned int);
+};
+
+struct rc_map_table {
+	u64 scancode;
+	u32 keycode;
+};
+
+struct code_block {
+	u8 length;
+	u16 pulse[7];
+	u8 carrier_pulse;
+	u8 carrier_space;
+	u16 space[8];
+	u8 codes[61];
+	u8 csum[2];
+} __attribute__((packed));
+
+struct IR_i2c_init_data {
+	char *ir_codes;
+	const char *name;
+	u64 type;
+	u32 polling_interval;
+	int (*get_key)(struct IR_i2c *, enum rc_proto *, u32 *, u8 *);
+	enum ir_kbd_get_key_fn internal_get_key_func;
+	struct rc_dev *rc_dev;
+};
+
+struct media_ioctl_info {
+	unsigned int cmd;
+	unsigned short flags;
+	long (*fn)(struct media_device *, void *);
+	long (*arg_from_user)(void *, void __attribute__((btf_type_tag("user"))) *, unsigned int);
+	long (*arg_to_user)(void __attribute__((btf_type_tag("user"))) *, void *, unsigned int);
+};
+
+enum media_gobj_type {
+	MEDIA_GRAPH_ENTITY = 0,
+	MEDIA_GRAPH_PAD = 1,
+	MEDIA_GRAPH_LINK = 2,
+	MEDIA_GRAPH_INTF_DEVNODE = 3,
+};
+
+struct media_entity_notify {
+	struct list_head list;
+	void *notify_data;
+	void (*notify)(struct media_entity *, void *);
+};
+
+struct media_links_enum32 {
+	__u32 entity;
+	compat_uptr_t pads;
+	compat_uptr_t links;
+	__u32 reserved[4];
+};
+
+struct media_pad_desc;
+
+struct media_link_desc;
+
+struct media_links_enum {
+	__u32 entity;
+	struct media_pad_desc __attribute__((btf_type_tag("user"))) *pads;
+	struct media_link_desc __attribute__((btf_type_tag("user"))) *links;
+	__u32 reserved[4];
+};
+
+struct media_pad_desc {
+	__u32 entity;
+	__u16 index;
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct media_link_desc {
+	struct media_pad_desc source;
+	struct media_pad_desc sink;
+	__u32 flags;
+	__u32 reserved[2];
+};
+
+struct media_device_info {
+	char driver[16];
+	char model[32];
+	char serial[40];
+	char bus_info[32];
+	__u32 media_version;
+	__u32 hw_revision;
+	__u32 driver_version;
+	__u32 reserved[31];
+};
+
+struct media_entity_desc {
+	__u32 id;
+	char name[32];
+	__u32 type;
+	__u32 revision;
+	__u32 flags;
+	__u32 group_id;
+	__u16 pads;
+	__u16 links;
+	__u32 reserved[4];
+	union {
+		struct {
+			__u32 major;
+			__u32 minor;
+		} dev;
+		__u8 raw[184];
+	};
+};
+
+struct media_v2_entity {
+	__u32 id;
+	char name[64];
+	__u32 function;
+	__u32 flags;
+	__u32 reserved[5];
+};
+
+struct media_v2_intf_devnode {
+	__u32 major;
+	__u32 minor;
+};
+
+struct media_v2_interface {
+	__u32 id;
+	__u32 intf_type;
+	__u32 flags;
+	__u32 reserved[9];
+	union {
+		struct media_v2_intf_devnode devnode;
+		__u32 raw[16];
+	};
+};
+
+struct media_v2_pad {
+	__u32 id;
+	__u32 entity_id;
+	__u32 flags;
+	__u32 index;
+	__u32 reserved[4];
+};
+
+struct media_v2_link {
+	__u32 id;
+	__u32 source_id;
+	__u32 sink_id;
+	__u32 flags;
+	__u32 reserved[6];
+};
+
+struct media_v2_topology {
+	__u64 topology_version;
+	__u32 num_entities;
+	__u32 reserved1;
+	__u64 ptr_entities;
+	__u32 num_interfaces;
+	__u32 reserved2;
+	__u64 ptr_interfaces;
+	__u32 num_pads;
+	__u32 reserved3;
+	__u64 ptr_pads;
+	__u32 num_links;
+	__u32 reserved4;
+	__u64 ptr_links;
+};
+
+struct media_pipeline_pad {
+	struct list_head list;
+	struct media_pipeline *pipe;
+	struct media_pad *pad;
+};
+
+struct media_pipeline_walk_entry;
+
+struct media_pipeline_walk {
+	struct media_device *mdev;
+	struct {
+		unsigned int size;
+		int top;
+		struct media_pipeline_walk_entry *entries;
+	} stack;
+};
+
+struct media_pipeline_walk_entry {
+	struct media_pad *pad;
+	struct list_head *links;
+};
+
+struct media_pipeline_pad_iter {
+	struct list_head *cursor;
+};
+
+struct media_pipeline_entity_iter {
+	struct media_entity_enum ent_enum;
+	struct list_head *cursor;
+};
+
+struct media_device_instance {
+	struct media_device mdev;
+	struct module *owner;
+	struct list_head list;
+	struct kref refcount;
+};
+
+struct v4l2_async_subdev_endpoint {
+	struct list_head async_subdev_endpoint_entry;
+	struct fwnode_handle *endpoint;
+};
+
+enum v4l2_fwnode_bus_type {
+	V4L2_FWNODE_BUS_TYPE_GUESS = 0,
+	V4L2_FWNODE_BUS_TYPE_CSI2_CPHY = 1,
+	V4L2_FWNODE_BUS_TYPE_CSI1 = 2,
+	V4L2_FWNODE_BUS_TYPE_CCP2 = 3,
+	V4L2_FWNODE_BUS_TYPE_CSI2_DPHY = 4,
+	V4L2_FWNODE_BUS_TYPE_PARALLEL = 5,
+	V4L2_FWNODE_BUS_TYPE_BT656 = 6,
+	V4L2_FWNODE_BUS_TYPE_DPI = 7,
+	NR_OF_V4L2_FWNODE_BUS_TYPE = 8,
+};
+
+struct v4l2_fwnode_bus_conv {
+	enum v4l2_fwnode_bus_type fwnode_bus_type;
+	enum v4l2_mbus_type mbus_type;
+	const char *name;
+};
+
+enum v4l2_connector_type {
+	V4L2_CONN_UNKNOWN = 0,
+	V4L2_CONN_COMPOSITE = 1,
+	V4L2_CONN_SVIDEO = 2,
+};
+
+struct v4l2_fwnode_connector_conv {
+	enum v4l2_connector_type type;
+	const char *compatible;
+};
+
+struct v4l2_fwnode_int_props {
+	const char *name;
+	const char * const *props;
+	unsigned int nprops;
+};
+
+enum v4l2_fwnode_orientation {
+	V4L2_FWNODE_ORIENTATION_FRONT = 0,
+	V4L2_FWNODE_ORIENTATION_BACK = 1,
+	V4L2_FWNODE_ORIENTATION_EXTERNAL = 2,
+};
+
+struct v4l2_fwnode_link {
+	struct fwnode_handle *local_node;
+	unsigned int local_port;
+	unsigned int local_id;
+	struct fwnode_handle *remote_node;
+	unsigned int remote_port;
+	unsigned int remote_id;
+};
+
+struct v4l2_connector_link {
+	struct list_head head;
+	struct v4l2_fwnode_link fwnode_link;
+};
+
+struct v4l2_fwnode_endpoint {
+	struct fwnode_endpoint base;
+	enum v4l2_mbus_type bus_type;
+	struct {
+		struct v4l2_mbus_config_parallel parallel;
+		struct v4l2_mbus_config_mipi_csi1 mipi_csi1;
+		struct v4l2_mbus_config_mipi_csi2 mipi_csi2;
+	} bus;
+	u64 *link_frequencies;
+	unsigned int nr_of_link_frequencies;
+};
+
+struct v4l2_fwnode_connector_analog {
+	v4l2_std_id sdtv_stds;
+};
+
+struct v4l2_fwnode_connector {
+	const char *name;
+	const char *label;
+	enum v4l2_connector_type type;
+	struct list_head links;
+	unsigned int nr_of_links;
+	union {
+		struct v4l2_fwnode_connector_analog analog;
+	} connector;
+};
+
+struct v4l2_fwnode_device_properties {
+	enum v4l2_fwnode_orientation orientation;
+	unsigned int rotation;
+};
+
+enum v4l2_video_device_flags {
+	V4L2_FL_REGISTERED = 0,
+	V4L2_FL_USES_V4L2_FH = 1,
+	V4L2_FL_QUIRK_INVERTED_CROP = 2,
+	V4L2_FL_SUBDEV_RO_DEVNODE = 3,
+};
+
+enum v4l2_m2m_entity_type {
+	MEM2MEM_ENT_TYPE_SOURCE = 0,
+	MEM2MEM_ENT_TYPE_SINK = 1,
+	MEM2MEM_ENT_TYPE_PROC = 2,
+};
+
+enum v4l2_memory {
+	V4L2_MEMORY_MMAP = 1,
+	V4L2_MEMORY_USERPTR = 2,
+	V4L2_MEMORY_OVERLAY = 3,
+	V4L2_MEMORY_DMABUF = 4,
+};
+
+struct v4l2_m2m_buffer {
+	struct vb2_v4l2_buffer vb;
+	struct list_head list;
+};
+
+struct v4l2_m2m_queue_ctx {
+	struct vb2_queue q;
+	struct list_head rdy_queue;
+	spinlock_t rdy_spinlock;
+	u8 num_rdy;
+	bool buffered;
+};
+
+struct v4l2_m2m_dev;
+
+struct v4l2_m2m_ctx {
+	struct mutex *q_lock;
+	bool new_frame;
+	bool is_draining;
+	struct vb2_v4l2_buffer *last_src_buf;
+	bool next_buf_last;
+	bool has_stopped;
+	struct v4l2_m2m_dev *m2m_dev;
+	struct v4l2_m2m_queue_ctx cap_q_ctx;
+	struct v4l2_m2m_queue_ctx out_q_ctx;
+	struct list_head queue;
+	unsigned long job_flags;
+	wait_queue_head_t finished;
+	void *priv;
+};
+
+struct v4l2_m2m_ops;
+
+struct v4l2_m2m_dev {
+	struct v4l2_m2m_ctx *curr_ctx;
+	struct media_entity *source;
+	struct media_pad source_pad;
+	struct media_entity sink;
+	struct media_pad sink_pad;
+	struct media_entity proc;
+	struct media_pad proc_pads[2];
+	struct media_intf_devnode *intf_devnode;
+	struct list_head job_queue;
+	spinlock_t job_spinlock;
+	struct work_struct job_work;
+	unsigned long job_queue_flags;
+	const struct v4l2_m2m_ops *m2m_ops;
+};
+
+struct v4l2_m2m_ops {
+	void (*device_run)(void *);
+	int (*job_ready)(void *);
+	void (*job_abort)(void *);
+};
+
+enum v4l2_ycbcr_encoding {
+	V4L2_YCBCR_ENC_DEFAULT = 0,
+	V4L2_YCBCR_ENC_601 = 1,
+	V4L2_YCBCR_ENC_709 = 2,
+	V4L2_YCBCR_ENC_XV601 = 3,
+	V4L2_YCBCR_ENC_XV709 = 4,
+	V4L2_YCBCR_ENC_BT2020 = 6,
+	V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
+	V4L2_YCBCR_ENC_SMPTE240M = 8,
+	V4L2_YCBCR_ENC_LAST = 9,
+};
+
+enum v4l2_quantization {
+	V4L2_QUANTIZATION_DEFAULT = 0,
+	V4L2_QUANTIZATION_FULL_RANGE = 1,
+	V4L2_QUANTIZATION_LIM_RANGE = 2,
+};
+
+enum v4l2_xfer_func {
+	V4L2_XFER_FUNC_DEFAULT = 0,
+	V4L2_XFER_FUNC_709 = 1,
+	V4L2_XFER_FUNC_SRGB = 2,
+	V4L2_XFER_FUNC_OPRGB = 3,
+	V4L2_XFER_FUNC_SMPTE240M = 4,
+	V4L2_XFER_FUNC_NONE = 5,
+	V4L2_XFER_FUNC_DCI_P3 = 6,
+	V4L2_XFER_FUNC_SMPTE2084 = 7,
+	V4L2_XFER_FUNC_LAST = 8,
+};
+
+struct v4l2_hdmi_colorimetry {
+	enum v4l2_colorspace colorspace;
+	enum v4l2_ycbcr_encoding ycbcr_enc;
+	enum v4l2_quantization quantization;
+	enum v4l2_xfer_func xfer_func;
+};
+
+typedef bool v4l2_check_dv_timings_fnc(const struct v4l2_dv_timings *, void *);
+
+struct std_descr {
+	v4l2_std_id std;
+	const char *descr;
+};
+
+struct v4l2_ioctl_info {
+	unsigned int ioctl;
+	u32 flags;
+	const char * const name;
+	int (*func)(const struct v4l2_ioctl_ops *, struct file *, void *, void *);
+	void (*debug)(const void *, bool);
+};
+
+struct v4l2_ctrl;
+
+typedef void (*v4l2_ctrl_notify_fnc)(struct v4l2_ctrl *, void *);
+
+struct v4l2_ctrl_ref;
+
+struct v4l2_ctrl_handler {
+	struct mutex _lock;
+	struct mutex *lock;
+	struct list_head ctrls;
+	struct list_head ctrl_refs;
+	struct v4l2_ctrl_ref *cached;
+	struct v4l2_ctrl_ref **buckets;
+	v4l2_ctrl_notify_fnc notify;
+	void *notify_priv;
+	u16 nr_of_buckets;
+	int error;
+	bool request_is_queued;
+	struct list_head requests;
+	struct list_head requests_queued;
+	struct media_request_object req_obj;
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_ctrl_hdr10_cll_info;
+
+struct v4l2_ctrl_hdr10_mastering_display;
+
+union v4l2_ctrl_ptr {
+	s32 *p_s32;
+	s64 *p_s64;
+	u8 *p_u8;
+	u16 *p_u16;
+	u32 *p_u32;
+	char *p_char;
+	struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
+	struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
+	struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quantisation;
+	struct v4l2_ctrl_fwht_params *p_fwht_params;
+	struct v4l2_ctrl_h264_sps *p_h264_sps;
+	struct v4l2_ctrl_h264_pps *p_h264_pps;
+	struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix;
+	struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
+	struct v4l2_ctrl_h264_decode_params *p_h264_decode_params;
+	struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights;
+	struct v4l2_ctrl_vp8_frame *p_vp8_frame;
+	struct v4l2_ctrl_hevc_sps *p_hevc_sps;
+	struct v4l2_ctrl_hevc_pps *p_hevc_pps;
+	struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
+	struct v4l2_ctrl_vp9_compressed_hdr *p_vp9_compressed_hdr_probs;
+	struct v4l2_ctrl_vp9_frame *p_vp9_frame;
+	struct v4l2_ctrl_hdr10_cll_info *p_hdr10_cll;
+	struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
+	struct v4l2_area *p_area;
+	struct v4l2_ctrl_av1_sequence *p_av1_sequence;
+	struct v4l2_ctrl_av1_tile_group_entry *p_av1_tile_group_entry;
+	struct v4l2_ctrl_av1_frame *p_av1_frame;
+	struct v4l2_ctrl_av1_film_grain *p_av1_film_grain;
+	void *p;
+	const void *p_const;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct v4l2_ctrl_helper;
+
+struct v4l2_ctrl_ref {
+	struct list_head node;
+	struct v4l2_ctrl_ref *next;
+	struct v4l2_ctrl *ctrl;
+	struct v4l2_ctrl_helper *helper;
+	bool from_other_dev;
+	bool req_done;
+	bool p_req_valid;
+	bool p_req_array_enomem;
+	u32 p_req_array_alloc_elems;
+	u32 p_req_elems;
+	union v4l2_ctrl_ptr p_req;
+	u64 android_kabi_reserved1;
+};
+
+enum v4l2_ctrl_type {
+	V4L2_CTRL_TYPE_INTEGER = 1,
+	V4L2_CTRL_TYPE_BOOLEAN = 2,
+	V4L2_CTRL_TYPE_MENU = 3,
+	V4L2_CTRL_TYPE_BUTTON = 4,
+	V4L2_CTRL_TYPE_INTEGER64 = 5,
+	V4L2_CTRL_TYPE_CTRL_CLASS = 6,
+	V4L2_CTRL_TYPE_STRING = 7,
+	V4L2_CTRL_TYPE_BITMASK = 8,
+	V4L2_CTRL_TYPE_INTEGER_MENU = 9,
+	V4L2_CTRL_COMPOUND_TYPES = 256,
+	V4L2_CTRL_TYPE_U8 = 256,
+	V4L2_CTRL_TYPE_U16 = 257,
+	V4L2_CTRL_TYPE_U32 = 258,
+	V4L2_CTRL_TYPE_AREA = 262,
+	V4L2_CTRL_TYPE_HDR10_CLL_INFO = 272,
+	V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY = 273,
+	V4L2_CTRL_TYPE_H264_SPS = 512,
+	V4L2_CTRL_TYPE_H264_PPS = 513,
+	V4L2_CTRL_TYPE_H264_SCALING_MATRIX = 514,
+	V4L2_CTRL_TYPE_H264_SLICE_PARAMS = 515,
+	V4L2_CTRL_TYPE_H264_DECODE_PARAMS = 516,
+	V4L2_CTRL_TYPE_H264_PRED_WEIGHTS = 517,
+	V4L2_CTRL_TYPE_FWHT_PARAMS = 544,
+	V4L2_CTRL_TYPE_VP8_FRAME = 576,
+	V4L2_CTRL_TYPE_MPEG2_QUANTISATION = 592,
+	V4L2_CTRL_TYPE_MPEG2_SEQUENCE = 593,
+	V4L2_CTRL_TYPE_MPEG2_PICTURE = 594,
+	V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR = 608,
+	V4L2_CTRL_TYPE_VP9_FRAME = 609,
+	V4L2_CTRL_TYPE_HEVC_SPS = 624,
+	V4L2_CTRL_TYPE_HEVC_PPS = 625,
+	V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS = 626,
+	V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX = 627,
+	V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS = 628,
+	V4L2_CTRL_TYPE_AV1_SEQUENCE = 640,
+	V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY = 641,
+	V4L2_CTRL_TYPE_AV1_FRAME = 642,
+	V4L2_CTRL_TYPE_AV1_FILM_GRAIN = 643,
+};
+
+struct v4l2_ctrl_ops;
+
+struct v4l2_ctrl_type_ops;
+
+struct v4l2_ctrl {
+	struct list_head node;
+	struct list_head ev_subs;
+	struct v4l2_ctrl_handler *handler;
+	struct v4l2_ctrl **cluster;
+	unsigned int ncontrols;
+	unsigned int done: 1;
+	unsigned int is_new: 1;
+	unsigned int has_changed: 1;
+	unsigned int is_private: 1;
+	unsigned int is_auto: 1;
+	unsigned int is_int: 1;
+	unsigned int is_string: 1;
+	unsigned int is_ptr: 1;
+	unsigned int is_array: 1;
+	unsigned int is_dyn_array: 1;
+	unsigned int has_volatiles: 1;
+	unsigned int call_notify: 1;
+	unsigned int manual_mode_value: 8;
+	const struct v4l2_ctrl_ops *ops;
+	const struct v4l2_ctrl_type_ops *type_ops;
+	u32 id;
+	const char *name;
+	enum v4l2_ctrl_type type;
+	s64 minimum;
+	s64 maximum;
+	s64 default_value;
+	u32 elems;
+	u32 elem_size;
+	u32 new_elems;
+	u32 dims[4];
+	u32 nr_of_dims;
+	union {
+		u64 step;
+		u64 menu_skip_mask;
+	};
+	union {
+		const char * const *qmenu;
+		const s64 *qmenu_int;
+	};
+	unsigned long flags;
+	void *priv;
+	void *p_array;
+	u32 p_array_alloc_elems;
+	s32 val;
+	struct {
+		s32 val;
+	} cur;
+	union v4l2_ctrl_ptr p_def;
+	union v4l2_ctrl_ptr p_new;
+	union v4l2_ctrl_ptr p_cur;
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_ctrl_ops {
+	int (*g_volatile_ctrl)(struct v4l2_ctrl *);
+	int (*try_ctrl)(struct v4l2_ctrl *);
+	int (*s_ctrl)(struct v4l2_ctrl *);
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_ctrl_type_ops {
+	bool (*equal)(const struct v4l2_ctrl *, union v4l2_ctrl_ptr, union v4l2_ctrl_ptr);
+	void (*init)(const struct v4l2_ctrl *, u32, union v4l2_ctrl_ptr);
+	void (*log)(const struct v4l2_ctrl *);
+	int (*validate)(const struct v4l2_ctrl *, union v4l2_ctrl_ptr);
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_ctrl_hdr10_cll_info {
+	__u16 max_content_light_level;
+	__u16 max_pic_average_light_level;
+};
+
+struct v4l2_ctrl_hdr10_mastering_display {
+	__u16 display_primaries_x[3];
+	__u16 display_primaries_y[3];
+	__u16 white_point_x;
+	__u16 white_point_y;
+	__u32 max_display_mastering_luminance;
+	__u32 min_display_mastering_luminance;
+};
+
+enum v4l2_hsv_encoding {
+	V4L2_HSV_ENC_180 = 128,
+	V4L2_HSV_ENC_256 = 129,
+};
+
+enum v4l2_tuner_type {
+	V4L2_TUNER_RADIO = 1,
+	V4L2_TUNER_ANALOG_TV = 2,
+	V4L2_TUNER_DIGITAL_TV = 3,
+	V4L2_TUNER_SDR = 4,
+	V4L2_TUNER_RF = 5,
+};
+
+struct v4l2_subdev_routing {
+	__u32 which;
+	__u32 num_routes;
+	__u64 routes;
+	__u32 reserved[6];
+};
+
+struct v4l2_standard {
+	__u32 index;
+	v4l2_std_id id;
+	__u8 name[24];
+	struct v4l2_fract frameperiod;
+	__u32 framelines;
+	__u32 reserved[4];
+};
+
+typedef long (*v4l2_kioctl)(struct file *, unsigned int, void *);
+
+struct v4l2_cropcap {
+	__u32 type;
+	struct v4l2_rect bounds;
+	struct v4l2_rect defrect;
+	struct v4l2_fract pixelaspect;
+};
+
+struct v4l2_crop {
+	__u32 type;
+	struct v4l2_rect c;
+};
+
+struct v4l2_dbg_match {
+	__u32 type;
+	union {
+		__u32 addr;
+		char name[32];
+	};
+};
+
+struct v4l2_dbg_register {
+	struct v4l2_dbg_match match;
+	__u32 size;
+	__u64 reg;
+	__u64 val;
+};
+
+struct v4l2_dbg_chip_info {
+	struct v4l2_dbg_match match;
+	char name[32];
+	__u32 flags;
+	__u32 reserved[32];
+};
+
+typedef bool (*v4l2_ctrl_filter)(const struct v4l2_ctrl *);
+
+enum v4l2_subdev_routing_restriction {
+	V4L2_SUBDEV_ROUTING_NO_1_TO_N = 1,
+	V4L2_SUBDEV_ROUTING_NO_N_TO_1 = 2,
+	V4L2_SUBDEV_ROUTING_NO_SINK_STREAM_MIX = 4,
+	V4L2_SUBDEV_ROUTING_NO_SOURCE_STREAM_MIX = 8,
+	V4L2_SUBDEV_ROUTING_NO_SINK_MULTIPLEXING = 16,
+	V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING = 32,
+	V4L2_SUBDEV_ROUTING_ONLY_1_TO_1 = 3,
+	V4L2_SUBDEV_ROUTING_NO_STREAM_MIX = 12,
+	V4L2_SUBDEV_ROUTING_NO_MULTIPLEXING = 48,
+};
+
+struct v4l2_subdev_crop {
+	__u32 which;
+	__u32 pad;
+	struct v4l2_rect rect;
+	__u32 stream;
+	__u32 reserved[7];
+};
+
+struct v4l2_subdev_client_capability {
+	__u64 capabilities;
+};
+
+struct v4l2_subdev_capability {
+	__u32 version;
+	__u32 capabilities;
+	__u32 reserved[14];
+};
+
+struct v4l2_format_info {
+	u32 format;
+	u8 pixel_enc;
+	u8 mem_planes;
+	u8 comp_planes;
+	u8 bpp[4];
+	u8 bpp_div[4];
+	u8 hdiv;
+	u8 vdiv;
+	u8 block_w[4];
+	u8 block_h[4];
+};
+
+struct v4l2_ctrl_config {
+	const struct v4l2_ctrl_ops *ops;
+	const struct v4l2_ctrl_type_ops *type_ops;
+	u32 id;
+	const char *name;
+	enum v4l2_ctrl_type type;
+	s64 min;
+	s64 max;
+	u64 step;
+	s64 def;
+	union v4l2_ctrl_ptr p_def;
+	u32 dims[4];
+	u32 elem_size;
+	u32 flags;
+	u64 menu_skip_mask;
+	const char * const *qmenu;
+	const s64 *qmenu_int;
+	unsigned int is_private: 1;
+	u64 android_kabi_reserved1;
+};
+
+struct v4l2_ctrl_helper {
+	struct v4l2_ctrl_ref *mref;
+	struct v4l2_ctrl_ref *ref;
+	u32 next;
+};
+
+struct v4l2_ext_controls32 {
+	__u32 which;
+	__u32 count;
+	__u32 error_idx;
+	__s32 request_fd;
+	__u32 reserved[1];
+	compat_caddr_t controls;
+};
+
+struct v4l2_buffer32_time32 {
+	__u32 index;
+	__u32 type;
+	__u32 bytesused;
+	__u32 flags;
+	__u32 field;
+	struct old_timeval32 timestamp;
+	struct v4l2_timecode timecode;
+	__u32 sequence;
+	__u32 memory;
+	union {
+		__u32 offset;
+		compat_long_t userptr;
+		compat_caddr_t planes;
+		__s32 fd;
+	} m;
+	__u32 length;
+	__u32 reserved2;
+	__s32 request_fd;
+};
+
+struct v4l2_edid32 {
+	__u32 pad;
+	__u32 start_block;
+	__u32 blocks;
+	__u32 reserved[5];
+	compat_caddr_t edid;
+};
+
+struct v4l2_framebuffer32 {
+	__u32 capability;
+	__u32 flags;
+	compat_caddr_t base;
+	struct {
+		__u32 width;
+		__u32 height;
+		__u32 pixelformat;
+		__u32 field;
+		__u32 bytesperline;
+		__u32 sizeimage;
+		__u32 colorspace;
+		__u32 priv;
+	} fmt;
+};
+
+typedef s64 compat_s64;
+
+struct v4l2_buffer32 {
+	__u32 index;
+	__u32 type;
+	__u32 bytesused;
+	__u32 flags;
+	__u32 field;
+	struct {
+		compat_s64 tv_sec;
+		compat_s64 tv_usec;
+	} timestamp;
+	struct v4l2_timecode timecode;
+	__u32 sequence;
+	__u32 memory;
+	union {
+		__u32 offset;
+		compat_long_t userptr;
+		compat_caddr_t planes;
+		__s32 fd;
+	} m;
+	__u32 length;
+	__u32 reserved2;
+	__s32 request_fd;
+} __attribute__((packed));
+
+struct v4l2_input32 {
+	__u32 index;
+	__u8 name[32];
+	__u32 type;
+	__u32 audioset;
+	__u32 tuner;
+	compat_u64 std;
+	__u32 status;
+	__u32 capabilities;
+	__u32 reserved[3];
+} __attribute__((packed));
+
+struct v4l2_standard32 {
+	__u32 index;
+	compat_u64 id;
+	__u8 name[24];
+	struct v4l2_fract frameperiod;
+	__u32 framelines;
+	__u32 reserved[4];
+} __attribute__((packed));
+
+struct v4l2_window32 {
+	struct v4l2_rect w;
+	__u32 field;
+	__u32 chromakey;
+	compat_caddr_t clips;
+	__u32 clipcount;
+	compat_caddr_t bitmap;
+	__u8 global_alpha;
+};
+
+struct v4l2_format32 {
+	__u32 type;
+	union {
+		struct v4l2_pix_format pix;
+		struct v4l2_pix_format_mplane pix_mp;
+		struct v4l2_window32 win;
+		struct v4l2_vbi_format vbi;
+		struct v4l2_sliced_vbi_format sliced;
+		struct v4l2_sdr_format sdr;
+		struct v4l2_meta_format meta;
+		__u8 raw_data[200];
+	} fmt;
+};
+
+struct v4l2_create_buffers32 {
+	__u32 index;
+	__u32 count;
+	__u32 memory;
+	struct v4l2_format32 format;
+	__u32 capabilities;
+	__u32 flags;
+	__u32 reserved[6];
+};
+
+struct v4l2_event32 {
+	__u32 type;
+	union {
+		compat_s64 value64;
+		__u8 data[64];
+	} u;
+	__u32 pending;
+	__u32 sequence;
+	struct {
+		compat_s64 tv_sec;
+		compat_s64 tv_nsec;
+	} timestamp;
+	__u32 id;
+	__u32 reserved[8];
+} __attribute__((packed));
+
+struct v4l2_event32_time32 {
+	__u32 type;
+	union {
+		compat_s64 value64;
+		__u8 data[64];
+	} u;
+	__u32 pending;
+	__u32 sequence;
+	struct old_timespec32 timestamp;
+	__u32 id;
+	__u32 reserved[8];
+} __attribute__((packed));
+
+struct v4l2_plane32 {
+	__u32 bytesused;
+	__u32 length;
+	union {
+		__u32 mem_offset;
+		compat_long_t userptr;
+		__s32 fd;
+	} m;
+	__u32 data_offset;
+	__u32 reserved[11];
+};
+
+struct v4l2_ext_control32 {
+	__u32 id;
+	__u32 size;
+	__u32 reserved2[1];
+	union {
+		__s32 value;
+		__s64 value64;
+		compat_caddr_t string;
+	};
+} __attribute__((packed));
+
+typedef void (*btf_trace_v4l2_dqbuf)(void *, int, struct v4l2_buffer *);
+
+typedef void (*btf_trace_v4l2_qbuf)(void *, int, struct v4l2_buffer *);
+
+typedef void (*btf_trace_vb2_v4l2_buf_done)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_v4l2_buf_queue)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_v4l2_dqbuf)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_v4l2_qbuf)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+struct trace_event_raw_v4l2_event_class {
+	struct trace_entry ent;
+	int minor;
+	u32 index;
+	u32 type;
+	u32 bytesused;
+	u32 flags;
+	u32 field;
+	s64 timestamp;
+	u32 timecode_type;
+	u32 timecode_flags;
+	u8 timecode_frames;
+	u8 timecode_seconds;
+	u8 timecode_minutes;
+	u8 timecode_hours;
+	u8 timecode_userbits0;
+	u8 timecode_userbits1;
+	u8 timecode_userbits2;
+	u8 timecode_userbits3;
+	u32 sequence;
+	char __data[0];
+};
+
+struct trace_event_raw_vb2_v4l2_event_class {
+	struct trace_entry ent;
+	int minor;
+	u32 flags;
+	u32 field;
+	u64 timestamp;
+	u32 timecode_type;
+	u32 timecode_flags;
+	u8 timecode_frames;
+	u8 timecode_seconds;
+	u8 timecode_minutes;
+	u8 timecode_hours;
+	u8 timecode_userbits0;
+	u8 timecode_userbits1;
+	u8 timecode_userbits2;
+	u8 timecode_userbits3;
+	u32 sequence;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_v4l2_event_class {};
+
+struct trace_event_data_offsets_vb2_v4l2_event_class {};
+
+enum v4l2_i2c_tuner_type {
+	ADDRS_RADIO = 0,
+	ADDRS_DEMOD = 1,
+	ADDRS_TV = 2,
+	ADDRS_TV_WITH_DEMOD = 3,
+};
+
+enum rc_filter_type {
+	RC_FILTER_NORMAL = 0,
+	RC_FILTER_WAKEUP = 1,
+	RC_FILTER_MAX = 2,
+};
+
+struct rc_filter_attribute {
+	struct device_attribute attr;
+	enum rc_filter_type type;
+	bool mask;
+};
+
+struct rc_map_list {
+	struct list_head list;
+	struct rc_map map;
+};
+
+struct ir_raw_event {
+	union {
+		u32 duration;
+		u32 carrier;
+	};
+	u8 duty_cycle;
+	unsigned int pulse: 1;
+	unsigned int overflow: 1;
+	unsigned int timeout: 1;
+	unsigned int carrier_report: 1;
+};
+
+struct ir_raw_event_ctrl {
+	struct list_head list;
+	struct task_struct *thread;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct ir_raw_event *type;
+			const struct ir_raw_event *const_type;
+			char (*rectype)[0];
+			struct ir_raw_event *ptr;
+			const struct ir_raw_event *ptr_const;
+		};
+		struct ir_raw_event buf[512];
+	} kfifo;
+	ktime_t last_event;
+	struct rc_dev *dev;
+	spinlock_t edge_spinlock;
+	struct timer_list edge_handle;
+	struct ir_raw_event prev_ev;
+	struct ir_raw_event this_ev;
+	u32 bpf_sample;
+	struct bpf_prog_array __attribute__((btf_type_tag("rcu"))) *progs;
+};
+
+struct lirc_scancode {
+	__u64 timestamp;
+	__u16 flags;
+	__u16 rc_proto;
+	__u32 keycode;
+	__u64 scancode;
+};
+
+struct ir_raw_handler {
+	struct list_head list;
+	u64 protocols;
+	int (*decode)(struct rc_dev *, struct ir_raw_event);
+	int (*encode)(enum rc_proto, u32, struct ir_raw_event *, unsigned int);
+	u32 carrier;
+	u32 min_timeout;
+	int (*raw_register)(struct rc_dev *);
+	int (*raw_unregister)(struct rc_dev *);
+};
+
+struct ir_raw_timings_manchester {
+	unsigned int leader_pulse;
+	unsigned int leader_space;
+	unsigned int clock;
+	unsigned int invert: 1;
+	unsigned int trailer_space;
+};
+
+struct ir_raw_timings_pd {
+	unsigned int header_pulse;
+	unsigned int header_space;
+	unsigned int bit_pulse;
+	unsigned int bit_space[2];
+	unsigned int trailer_pulse;
+	unsigned int trailer_space;
+	unsigned int msb_first: 1;
+};
+
+struct ir_raw_timings_pl {
+	unsigned int header_pulse;
+	unsigned int bit_space;
+	unsigned int bit_pulse[2];
+	unsigned int trailer_space;
+	unsigned int msb_first: 1;
+};
+
+struct lirc_fh {
+	struct list_head list;
+	struct rc_dev *rc;
+	int carrier_low;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			unsigned int *type;
+			const unsigned int *const_type;
+			char (*rectype)[0];
+			unsigned int *ptr;
+			const unsigned int *ptr_const;
+		};
+		unsigned int buf[0];
+	} rawir;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct lirc_scancode *type;
+			const struct lirc_scancode *const_type;
+			char (*rectype)[0];
+			struct lirc_scancode *ptr;
+			const struct lirc_scancode *ptr_const;
+		};
+		struct lirc_scancode buf[0];
+	} scancodes;
+	wait_queue_head_t wait_poll;
+	u8 send_mode;
+	u8 rec_mode;
+};
+
+typedef u64 (*btf_bpf_rc_repeat)(u32 *);
+
+typedef u64 (*btf_bpf_rc_keydown)(u32 *, u32, u64, u32);
+
+typedef u64 (*btf_bpf_rc_pointer_rel)(u32 *, s32, s32);
+
+struct cec_devnode {
+	struct device dev;
+	struct cdev cdev;
+	int minor;
+	struct mutex lock;
+	bool registered;
+	bool unregistered;
+	struct mutex lock_fhs;
+	struct list_head fhs;
+};
+
+struct cec_log_addrs {
+	__u8 log_addr[4];
+	__u16 log_addr_mask;
+	__u8 cec_version;
+	__u8 num_log_addrs;
+	__u32 vendor_id;
+	__u32 flags;
+	char osd_name[15];
+	__u8 primary_device_type[4];
+	__u8 log_addr_type[4];
+	__u8 all_device_types[4];
+	__u8 features[48];
+};
+
+struct cec_drm_connector_info {
+	__u32 card_no;
+	__u32 connector_id;
+};
+
+struct cec_connector_info {
+	__u32 type;
+	union {
+		struct cec_drm_connector_info drm;
+		__u32 raw[16];
+	};
+};
+
+struct cec_data;
+
+struct cec_adap_ops;
+
+struct cec_fh;
+
+struct cec_notifier;
+
+struct cec_pin;
+
+struct cec_adapter {
+	struct module *owner;
+	char name[32];
+	struct cec_devnode devnode;
+	struct mutex lock;
+	struct rc_dev *rc;
+	struct list_head transmit_queue;
+	unsigned int transmit_queue_sz;
+	struct list_head wait_queue;
+	struct cec_data *transmitting;
+	bool transmit_in_progress;
+	bool transmit_in_progress_aborted;
+	unsigned int xfer_timeout_ms;
+	struct task_struct *kthread_config;
+	struct completion config_completion;
+	struct task_struct *kthread;
+	wait_queue_head_t kthread_waitq;
+	const struct cec_adap_ops *ops;
+	void *priv;
+	u32 capabilities;
+	u8 available_log_addrs;
+	u16 phys_addr;
+	bool needs_hpd;
+	bool is_enabled;
+	bool is_configuring;
+	bool must_reconfigure;
+	bool is_configured;
+	bool cec_pin_is_high;
+	bool adap_controls_phys_addr;
+	u8 last_initiator;
+	u32 monitor_all_cnt;
+	u32 monitor_pin_cnt;
+	u32 follower_cnt;
+	struct cec_fh *cec_follower;
+	struct cec_fh *cec_initiator;
+	bool passthrough;
+	struct cec_log_addrs log_addrs;
+	struct cec_connector_info conn_info;
+	u32 tx_timeouts;
+	struct cec_notifier *notifier;
+	struct cec_pin *pin;
+	struct dentry *cec_dir;
+	u32 sequence;
+	char input_phys[32];
+};
+
+struct cec_msg {
+	__u64 tx_ts;
+	__u64 rx_ts;
+	__u32 len;
+	__u32 timeout;
+	__u32 sequence;
+	__u32 flags;
+	__u8 msg[16];
+	__u8 reply;
+	__u8 rx_status;
+	__u8 tx_status;
+	__u8 tx_arb_lost_cnt;
+	__u8 tx_nack_cnt;
+	__u8 tx_low_drive_cnt;
+	__u8 tx_error_cnt;
+};
+
+struct cec_data {
+	struct list_head list;
+	struct list_head xfer_list;
+	struct cec_adapter *adap;
+	struct cec_msg msg;
+	struct cec_fh *fh;
+	struct delayed_work work;
+	struct completion c;
+	u8 attempts;
+	bool blocking;
+	bool completed;
+};
+
+struct cec_event_state_change {
+	__u16 phys_addr;
+	__u16 log_addr_mask;
+	__u16 have_conn_info;
+};
+
+struct cec_event_lost_msgs {
+	__u32 lost_msgs;
+};
+
+struct cec_event {
+	__u64 ts;
+	__u32 event;
+	__u32 flags;
+	union {
+		struct cec_event_state_change state_change;
+		struct cec_event_lost_msgs lost_msgs;
+		__u32 raw[16];
+	};
+};
+
+struct cec_event_entry {
+	struct list_head list;
+	struct cec_event ev;
+};
+
+struct cec_fh {
+	struct list_head list;
+	struct list_head xfer_list;
+	struct cec_adapter *adap;
+	u8 mode_initiator;
+	u8 mode_follower;
+	wait_queue_head_t wait;
+	struct mutex lock;
+	struct list_head events[8];
+	u16 queued_events[8];
+	unsigned int total_queued_events;
+	struct cec_event_entry core_events[2];
+	struct list_head msgs;
+	unsigned int queued_msgs;
+};
+
+struct cec_adap_ops {
+	int (*adap_enable)(struct cec_adapter *, bool);
+	int (*adap_monitor_all_enable)(struct cec_adapter *, bool);
+	int (*adap_monitor_pin_enable)(struct cec_adapter *, bool);
+	int (*adap_log_addr)(struct cec_adapter *, u8);
+	void (*adap_unconfigured)(struct cec_adapter *);
+	int (*adap_transmit)(struct cec_adapter *, u8, u32, struct cec_msg *);
+	void (*adap_nb_transmit_canceled)(struct cec_adapter *, const struct cec_msg *);
+	void (*adap_status)(struct cec_adapter *, struct seq_file *);
+	void (*adap_free)(struct cec_adapter *);
+	int (*error_inj_show)(struct cec_adapter *, struct seq_file *);
+	bool (*error_inj_parse_line)(struct cec_adapter *, char *);
+	void (*configured)(struct cec_adapter *);
+	int (*received)(struct cec_adapter *, struct cec_msg *);
+};
+
+struct cec_msg_entry {
+	struct list_head list;
+	struct cec_msg msg;
+};
+
+enum cec_pin_state {
+	CEC_ST_OFF = 0,
+	CEC_ST_IDLE = 1,
+	CEC_ST_TX_WAIT = 2,
+	CEC_ST_TX_WAIT_FOR_HIGH = 3,
+	CEC_ST_TX_START_BIT_LOW = 4,
+	CEC_ST_TX_START_BIT_HIGH = 5,
+	CEC_ST_TX_START_BIT_HIGH_SHORT = 6,
+	CEC_ST_TX_START_BIT_HIGH_LONG = 7,
+	CEC_ST_TX_START_BIT_LOW_CUSTOM = 8,
+	CEC_ST_TX_START_BIT_HIGH_CUSTOM = 9,
+	CEC_ST_TX_DATA_BIT_0_LOW = 10,
+	CEC_ST_TX_DATA_BIT_0_HIGH = 11,
+	CEC_ST_TX_DATA_BIT_0_HIGH_SHORT = 12,
+	CEC_ST_TX_DATA_BIT_0_HIGH_LONG = 13,
+	CEC_ST_TX_DATA_BIT_1_LOW = 14,
+	CEC_ST_TX_DATA_BIT_1_HIGH = 15,
+	CEC_ST_TX_DATA_BIT_1_HIGH_SHORT = 16,
+	CEC_ST_TX_DATA_BIT_1_HIGH_LONG = 17,
+	CEC_ST_TX_DATA_BIT_1_HIGH_PRE_SAMPLE = 18,
+	CEC_ST_TX_DATA_BIT_1_HIGH_POST_SAMPLE = 19,
+	CEC_ST_TX_DATA_BIT_1_HIGH_POST_SAMPLE_SHORT = 20,
+	CEC_ST_TX_DATA_BIT_1_HIGH_POST_SAMPLE_LONG = 21,
+	CEC_ST_TX_DATA_BIT_LOW_CUSTOM = 22,
+	CEC_ST_TX_DATA_BIT_HIGH_CUSTOM = 23,
+	CEC_ST_TX_PULSE_LOW_CUSTOM = 24,
+	CEC_ST_TX_PULSE_HIGH_CUSTOM = 25,
+	CEC_ST_TX_LOW_DRIVE = 26,
+	CEC_ST_RX_START_BIT_LOW = 27,
+	CEC_ST_RX_START_BIT_HIGH = 28,
+	CEC_ST_RX_DATA_SAMPLE = 29,
+	CEC_ST_RX_DATA_POST_SAMPLE = 30,
+	CEC_ST_RX_DATA_WAIT_FOR_LOW = 31,
+	CEC_ST_RX_ACK_LOW = 32,
+	CEC_ST_RX_ACK_LOW_POST = 33,
+	CEC_ST_RX_ACK_HIGH_POST = 34,
+	CEC_ST_RX_ACK_FINISH = 35,
+	CEC_ST_RX_LOW_DRIVE = 36,
+	CEC_ST_RX_IRQ = 37,
+	CEC_PIN_STATES = 38,
+};
+
+struct cec_pin_ops;
+
+struct cec_pin {
+	struct cec_adapter *adap;
+	const struct cec_pin_ops *ops;
+	struct task_struct *kthread;
+	wait_queue_head_t kthread_waitq;
+	struct hrtimer timer;
+	ktime_t ts;
+	unsigned int wait_usecs;
+	u16 la_mask;
+	bool monitor_all;
+	bool rx_eom;
+	bool enabled_irq;
+	bool enable_irq_failed;
+	enum cec_pin_state state;
+	struct cec_msg tx_msg;
+	u32 tx_bit;
+	bool tx_nacked;
+	u32 tx_signal_free_time;
+	bool tx_toggle;
+	struct cec_msg rx_msg;
+	u32 rx_bit;
+	bool rx_toggle;
+	u32 rx_start_bit_low_too_short_cnt;
+	u64 rx_start_bit_low_too_short_ts;
+	u32 rx_start_bit_low_too_short_delta;
+	u32 rx_start_bit_too_short_cnt;
+	u64 rx_start_bit_too_short_ts;
+	u32 rx_start_bit_too_short_delta;
+	u32 rx_start_bit_too_long_cnt;
+	u32 rx_data_bit_too_short_cnt;
+	u64 rx_data_bit_too_short_ts;
+	u32 rx_data_bit_too_short_delta;
+	u32 rx_data_bit_too_long_cnt;
+	u32 rx_low_drive_cnt;
+	struct cec_msg work_rx_msg;
+	u8 work_tx_status;
+	ktime_t work_tx_ts;
+	atomic_t work_irq_change;
+	atomic_t work_pin_num_events;
+	unsigned int work_pin_events_wr;
+	unsigned int work_pin_events_rd;
+	ktime_t work_pin_ts[128];
+	u8 work_pin_events[128];
+	bool work_pin_events_dropped;
+	u32 work_pin_events_dropped_cnt;
+	ktime_t timer_ts;
+	u32 timer_cnt;
+	u32 timer_100us_overruns;
+	u32 timer_300us_overruns;
+	u32 timer_max_overrun;
+	u32 timer_sum_overrun;
+	u32 tx_custom_low_usecs;
+	u32 tx_custom_high_usecs;
+	bool tx_ignore_nack_until_eom;
+	bool tx_custom_pulse;
+	bool tx_generated_poll;
+	bool tx_post_eom;
+	u8 tx_extra_bytes;
+	u32 tx_low_drive_cnt;
+};
+
+struct cec_pin_ops {
+	int (*read)(struct cec_adapter *);
+	void (*low)(struct cec_adapter *);
+	void (*high)(struct cec_adapter *);
+	bool (*enable_irq)(struct cec_adapter *);
+	void (*disable_irq)(struct cec_adapter *);
+	void (*free)(struct cec_adapter *);
+	void (*status)(struct cec_adapter *, struct seq_file *);
+	int (*read_hpd)(struct cec_adapter *);
+	int (*read_5v)(struct cec_adapter *);
+	int (*received)(struct cec_adapter *, struct cec_msg *);
+};
+
+struct cec_caps {
+	char driver[32];
+	char name[32];
+	__u32 available_log_addrs;
+	__u32 capabilities;
+	__u32 version;
+};
+
+struct cec_notifier {
+	struct mutex lock;
+	struct list_head head;
+	struct kref kref;
+	struct device *hdmi_dev;
+	struct cec_connector_info conn_info;
+	const char *port_name;
+	struct cec_adapter *cec_adap;
+	u16 phys_addr;
+};
+
+struct cec_state {
+	const char * const name;
+	unsigned int usecs;
+};
+
+enum vb2_memory {
+	VB2_MEMORY_UNKNOWN = 0,
+	VB2_MEMORY_MMAP = 1,
+	VB2_MEMORY_USERPTR = 2,
+	VB2_MEMORY_DMABUF = 4,
+};
+
+struct vb2_fileio_buf {
+	void *vaddr;
+	unsigned int size;
+	unsigned int pos;
+	unsigned int queued: 1;
+};
+
+struct vb2_fileio_data {
+	unsigned int count;
+	unsigned int type;
+	unsigned int memory;
+	struct vb2_fileio_buf bufs[64];
+	unsigned int cur_index;
+	unsigned int initial_index;
+	unsigned int q_count;
+	unsigned int dq_count;
+	unsigned int read_once: 1;
+	unsigned int write_immediately: 1;
+};
+
+typedef int (*vb2_thread_fnc)(struct vb2_buffer *, void *);
+
+struct vb2_threadio_data {
+	struct task_struct *thread;
+	vb2_thread_fnc fnc;
+	void *priv;
+	bool stop;
+};
+
+struct frame_vector {
+	unsigned int nr_allocated;
+	unsigned int nr_frames;
+	bool got_ref;
+	bool is_pfns;
+	void *ptrs[0];
+};
+
+typedef void (*btf_trace_vb2_buf_done)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_buf_queue)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_dqbuf)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+typedef void (*btf_trace_vb2_qbuf)(void *, struct vb2_queue *, struct vb2_buffer *);
+
+struct trace_event_raw_vb2_event_class {
+	struct trace_entry ent;
+	void *owner;
+	u32 queued_count;
+	int owned_by_drv_count;
+	u32 index;
+	u32 type;
+	u32 bytesused;
+	u64 timestamp;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_vb2_event_class {};
+
+struct vb2_vmarea_handler {
+	refcount_t *refcount;
+	void (*put)(void *);
+	void *arg;
+};
+
+struct vb2_dc_buf {
+	struct device *dev;
+	void *vaddr;
+	unsigned long size;
+	void *cookie;
+	dma_addr_t dma_addr;
+	unsigned long attrs;
+	enum dma_data_direction dma_dir;
+	struct sg_table *dma_sgt;
+	struct frame_vector *vec;
+	struct vb2_vmarea_handler handler;
+	refcount_t refcount;
+	struct sg_table *sgt_base;
+	struct dma_buf_attachment *db_attach;
+	struct vb2_buffer *vb;
+	bool non_coherent_mem;
+};
+
+struct vb2_dc_attachment {
+	struct sg_table sgt;
+	enum dma_data_direction dma_dir;
+};
+
+struct vb2_dma_sg_buf {
+	struct device *dev;
+	void *vaddr;
+	struct page **pages;
+	struct frame_vector *vec;
+	int offset;
+	enum dma_data_direction dma_dir;
+	struct sg_table sg_table;
+	struct sg_table *dma_sgt;
+	size_t size;
+	unsigned int num_pages;
+	refcount_t refcount;
+	struct vb2_vmarea_handler handler;
+	struct dma_buf_attachment *db_attach;
+	struct vb2_buffer *vb;
+};
+
+struct vb2_dma_sg_attachment {
+	struct sg_table sgt;
+	enum dma_data_direction dma_dir;
+};
+
+struct vb2_vmalloc_buf {
+	void *vaddr;
+	struct frame_vector *vec;
+	enum dma_data_direction dma_dir;
+	unsigned long size;
+	refcount_t refcount;
+	struct vb2_vmarea_handler handler;
+	struct dma_buf *dbuf;
+};
+
+struct vb2_vmalloc_attachment {
+	struct sg_table sgt;
+	enum dma_data_direction dma_dir;
+};
+
+enum gspca_packet_type {
+	DISCARD_PACKET = 0,
+	FIRST_PACKET = 1,
+	INTER_PACKET = 2,
+	LAST_PACKET = 3,
+};
+
+struct gspca_buffer {
+	struct vb2_v4l2_buffer vb;
+	struct list_head list;
+};
+
+struct framerates;
+
+struct cam {
+	const struct v4l2_pix_format *cam_mode;
+	const struct framerates *mode_framerates;
+	u32 bulk_size;
+	u32 input_flags;
+	u8 nmodes;
+	u8 no_urb_create;
+	u8 bulk_nurbs;
+	u8 bulk;
+	u8 npkt;
+	u8 needs_full_bandwidth;
+};
+
+struct sd_desc;
+
+struct gspca_dev {
+	struct video_device vdev;
+	struct module *module;
+	struct v4l2_device v4l2_dev;
+	struct usb_device *dev;
+	struct input_dev *input_dev;
+	char phys[64];
+	struct cam cam;
+	const struct sd_desc *sd_desc;
+	struct v4l2_ctrl_handler ctrl_handler;
+	struct {
+		struct v4l2_ctrl *autogain;
+		struct v4l2_ctrl *exposure;
+		struct v4l2_ctrl *gain;
+		int exp_too_low_cnt;
+		int exp_too_high_cnt;
+	};
+	__u8 *usb_buf;
+	struct urb *urb[4];
+	struct urb *int_urb;
+	u8 *image;
+	u32 image_len;
+	__u8 last_packet_type;
+	__s8 empty_packet;
+	bool streaming;
+	__u8 curr_mode;
+	struct v4l2_pix_format pixfmt;
+	__u32 sequence;
+	struct vb2_queue queue;
+	spinlock_t qlock;
+	struct list_head buf_list;
+	wait_queue_head_t wq;
+	struct mutex usb_lock;
+	int usb_err;
+	u16 pkt_size;
+	char frozen;
+	bool present;
+	char memory;
+	__u8 iface;
+	__u8 alt;
+	int xfer_ep;
+	u8 audio;
+};
+
+struct framerates {
+	const u8 *rates;
+	int nrates;
+};
+
+typedef int (*cam_cf_op)(struct gspca_dev *, const struct usb_device_id *);
+
+typedef int (*cam_op)(struct gspca_dev *);
+
+typedef void (*cam_v_op)(struct gspca_dev *);
+
+typedef void (*cam_pkt_op)(struct gspca_dev *, u8 *, int);
+
+typedef int (*cam_get_jpg_op)(struct gspca_dev *, struct v4l2_jpegcompression *);
+
+typedef int (*cam_set_jpg_op)(struct gspca_dev *, const struct v4l2_jpegcompression *);
+
+typedef void (*cam_streamparm_op)(struct gspca_dev *, struct v4l2_streamparm *);
+
+typedef void (*cam_format_op)(struct gspca_dev *, struct v4l2_format *);
+
+typedef int (*cam_frmsize_op)(struct gspca_dev *, struct v4l2_frmsizeenum *);
+
+typedef int (*cam_int_pkt_op)(struct gspca_dev *, u8 *, int);
+
+struct sd_desc {
+	const char *name;
+	cam_cf_op config;
+	cam_op init;
+	cam_op init_controls;
+	cam_v_op probe_error;
+	cam_op start;
+	cam_pkt_op pkt_scan;
+	cam_op isoc_init;
+	cam_op isoc_nego;
+	cam_v_op stopN;
+	cam_v_op stop0;
+	cam_v_op dq_callback;
+	cam_get_jpg_op get_jcomp;
+	cam_set_jpg_op set_jcomp;
+	cam_streamparm_op get_streamparm;
+	cam_streamparm_op set_streamparm;
+	cam_format_op try_fmt;
+	cam_frmsize_op enum_framesizes;
+	cam_int_pkt_op int_pkt_scan;
+	u8 other_input;
+};
+
+struct ep_tb_s {
+	u32 alt;
+	u32 bandwidth;
+};
+
+struct uvc_driver {
+	struct usb_driver driver;
+};
+
+struct uvc_control_mapping;
+
+struct uvc_device_info {
+	u32 quirks;
+	u32 meta_format;
+	u16 uvc_version;
+	const struct uvc_control_mapping **mappings;
+};
+
+struct uvc_control_mapping {
+	struct list_head list;
+	struct list_head ev_subs;
+	u32 id;
+	char *name;
+	u8 entity[16];
+	u8 selector;
+	u8 size;
+	u8 offset;
+	enum v4l2_ctrl_type v4l2_type;
+	u32 data_type;
+	const u32 *menu_mapping;
+	const char (*menu_names)[32];
+	unsigned long menu_mask;
+	u32 master_id;
+	s32 master_manual;
+	u32 slave_ids[2];
+	s32 (*get)(struct uvc_control_mapping *, u8, const u8 *);
+	void (*set)(struct uvc_control_mapping *, s32, u8 *);
+};
+
+enum uvc_buffer_state___2 {
+	UVC_BUF_STATE_IDLE___2 = 0,
+	UVC_BUF_STATE_QUEUED___2 = 1,
+	UVC_BUF_STATE_ACTIVE___2 = 2,
+	UVC_BUF_STATE_READY = 3,
+	UVC_BUF_STATE_DONE___2 = 4,
+	UVC_BUF_STATE_ERROR___2 = 5,
+};
+
+enum uvc_handle_state {
+	UVC_HANDLE_PASSIVE = 0,
+	UVC_HANDLE_ACTIVE = 1,
+};
+
+struct uvc_device___2;
+
+struct uvc_control;
+
+struct uvc_entity {
+	struct list_head list;
+	struct list_head chain;
+	unsigned int flags;
+	u16 id;
+	u16 type;
+	char name[64];
+	u8 guid[16];
+	struct video_device *vdev;
+	struct v4l2_subdev subdev;
+	unsigned int num_pads;
+	unsigned int num_links;
+	struct media_pad *pads;
+	union {
+		struct {
+			u16 wObjectiveFocalLengthMin;
+			u16 wObjectiveFocalLengthMax;
+			u16 wOcularFocalLength;
+			u8 bControlSize;
+			u8 *bmControls;
+		} camera;
+		struct {
+			u8 bControlSize;
+			u8 *bmControls;
+			u8 bTransportModeSize;
+			u8 *bmTransportModes;
+		} media;
+		struct {} output;
+		struct {
+			u16 wMaxMultiplier;
+			u8 bControlSize;
+			u8 *bmControls;
+			u8 bmVideoStandards;
+		} processing;
+		struct {} selector;
+		struct {
+			u8 bNumControls;
+			u8 bControlSize;
+			u8 *bmControls;
+			u8 *bmControlsType;
+		} extension;
+		struct {
+			u8 bControlSize;
+			u8 *bmControls;
+			struct gpio_desc *gpio_privacy;
+			int irq;
+		} gpio;
+	};
+	u8 bNrInPins;
+	u8 *baSourceID;
+	int (*get_info)(struct uvc_device___2 *, struct uvc_entity *, u8, u8 *);
+	int (*get_cur)(struct uvc_device___2 *, struct uvc_entity *, u8, void *, u16);
+	unsigned int ncontrols;
+	struct uvc_control *controls;
+};
+
+struct uvc_video_chain;
+
+struct uvc_ctrl_work {
+	struct work_struct work;
+	struct urb *urb;
+	struct uvc_video_chain *chain;
+	struct uvc_control *ctrl;
+	const void *data;
+};
+
+struct uvc_status;
+
+struct uvc_device___2 {
+	struct usb_device *udev;
+	struct usb_interface *intf;
+	unsigned long warnings;
+	u32 quirks;
+	int intfnum;
+	char name[32];
+	const struct uvc_device_info *info;
+	struct mutex lock;
+	unsigned int users;
+	atomic_t nmappings;
+	struct media_device mdev;
+	struct v4l2_device vdev;
+	u16 uvc_version;
+	u32 clock_frequency;
+	struct list_head entities;
+	struct list_head chains;
+	struct list_head streams;
+	struct kref ref;
+	struct usb_host_endpoint *int_ep;
+	struct urb *int_urb;
+	struct uvc_status *status;
+	bool flush_status;
+	struct input_dev *input;
+	char input_phys[64];
+	struct uvc_ctrl_work async_ctrl;
+	struct uvc_entity *gpio_unit;
+};
+
+struct uvc_status_control {
+	u8 bSelector;
+	u8 bAttribute;
+	u8 bValue[11];
+};
+
+struct uvc_status_streaming {
+	u8 button;
+};
+
+struct uvc_status {
+	u8 bStatusType;
+	u8 bOriginator;
+	u8 bEvent;
+	union {
+		struct uvc_status_control control;
+		struct uvc_status_streaming streaming;
+	};
+};
+
+struct uvc_video_chain {
+	struct uvc_device___2 *dev;
+	struct list_head list;
+	struct list_head entities;
+	struct uvc_entity *processing;
+	struct uvc_entity *selector;
+	struct mutex ctrl_mutex;
+	struct v4l2_prio_state prio;
+	u32 caps;
+	u8 ctrl_class_bitmap;
+};
+
+struct uvc_control_info {
+	struct list_head mappings;
+	u8 entity[16];
+	u8 index;
+	u8 selector;
+	u16 size;
+	u32 flags;
+};
+
+struct uvc_fh;
+
+struct uvc_control {
+	struct uvc_entity *entity;
+	struct uvc_control_info info;
+	u8 index;
+	u8 dirty: 1;
+	u8 loaded: 1;
+	u8 modified: 1;
+	u8 cached: 1;
+	u8 initialized: 1;
+	u8 *uvc_data;
+	struct uvc_fh *handle;
+};
+
+struct uvc_streaming;
+
+struct uvc_fh {
+	struct v4l2_fh vfh;
+	struct uvc_video_chain *chain;
+	struct uvc_streaming *stream;
+	enum uvc_handle_state state;
+};
+
+struct uvc_video_queue___2 {
+	struct vb2_queue queue;
+	struct mutex mutex;
+	unsigned int flags;
+	unsigned int buf_used;
+	spinlock_t irqlock;
+	struct list_head irqqueue;
+};
+
+struct uvc_stats_frame {
+	unsigned int size;
+	unsigned int first_data;
+	unsigned int nb_packets;
+	unsigned int nb_empty;
+	unsigned int nb_invalid;
+	unsigned int nb_errors;
+	unsigned int nb_pts;
+	unsigned int nb_pts_diffs;
+	unsigned int last_pts_diff;
+	bool has_initial_pts;
+	bool has_early_pts;
+	u32 pts;
+	unsigned int nb_scr;
+	unsigned int nb_scr_diffs;
+	u16 scr_sof;
+	u32 scr_stc;
+};
+
+struct uvc_stats_stream {
+	ktime_t start_ts;
+	ktime_t stop_ts;
+	unsigned int nb_frames;
+	unsigned int nb_packets;
+	unsigned int nb_empty;
+	unsigned int nb_invalid;
+	unsigned int nb_errors;
+	unsigned int nb_pts_constant;
+	unsigned int nb_pts_early;
+	unsigned int nb_pts_initial;
+	unsigned int nb_scr_count_ok;
+	unsigned int nb_scr_diffs_ok;
+	unsigned int scr_sof_count;
+	unsigned int scr_sof;
+	unsigned int min_sof;
+	unsigned int max_sof;
+};
+
+struct uvc_streaming_header {
+	u8 bNumFormats;
+	u8 bEndpointAddress;
+	u8 bTerminalLink;
+	u8 bControlSize;
+	u8 *bmaControls;
+	u8 bmInfo;
+	u8 bStillCaptureMethod;
+	u8 bTriggerSupport;
+	u8 bTriggerUsage;
+};
+
+struct uvc_streaming_control {
+	__u16 bmHint;
+	__u8 bFormatIndex;
+	__u8 bFrameIndex;
+	__u32 dwFrameInterval;
+	__u16 wKeyFrameRate;
+	__u16 wPFrameRate;
+	__u16 wCompQuality;
+	__u16 wCompWindowSize;
+	__u16 wDelay;
+	__u32 dwMaxVideoFrameSize;
+	__u32 dwMaxPayloadTransferSize;
+	__u32 dwClockFrequency;
+	__u8 bmFramingInfo;
+	__u8 bPreferedVersion;
+	__u8 bMinVersion;
+	__u8 bMaxVersion;
+} __attribute__((packed));
+
+struct uvc_buffer___2;
+
+struct uvc_copy_op {
+	struct uvc_buffer___2 *buf;
+	void *dst;
+	const __u8 *src;
+	size_t len;
+};
+
+struct uvc_urb {
+	struct urb *urb;
+	struct uvc_streaming *stream;
+	char *buffer;
+	dma_addr_t dma;
+	struct sg_table *sgt;
+	unsigned int async_operations;
+	struct uvc_copy_op copy_operations[32];
+	struct work_struct work;
+};
+
+struct uvc_clock_sample;
+
+struct uvc_clock {
+	struct uvc_clock_sample *samples;
+	unsigned int head;
+	unsigned int count;
+	unsigned int size;
+	u16 last_sof;
+	u16 sof_offset;
+	u8 last_scr[6];
+	spinlock_t lock;
+};
+
+struct uvc_format;
+
+struct uvc_frame;
+
+struct uvc_streaming {
+	struct list_head list;
+	struct uvc_device___2 *dev;
+	struct video_device vdev;
+	struct uvc_video_chain *chain;
+	atomic_t active;
+	struct usb_interface *intf;
+	int intfnum;
+	u16 maxpsize;
+	struct uvc_streaming_header header;
+	enum v4l2_buf_type type;
+	unsigned int nformats;
+	const struct uvc_format *formats;
+	struct uvc_streaming_control ctrl;
+	const struct uvc_format *def_format;
+	const struct uvc_format *cur_format;
+	const struct uvc_frame *cur_frame;
+	struct mutex mutex;
+	unsigned int frozen: 1;
+	struct uvc_video_queue___2 queue;
+	struct workqueue_struct *async_wq;
+	void (*decode)(struct uvc_urb *, struct uvc_buffer___2 *, struct uvc_buffer___2 *);
+	struct {
+		struct video_device vdev;
+		struct uvc_video_queue___2 queue;
+		u32 format;
+	} meta;
+	struct {
+		u8 header[256];
+		unsigned int header_size;
+		int skip_payload;
+		u32 payload_size;
+		u32 max_payload_size;
+	} bulk;
+	struct uvc_urb uvc_urb[5];
+	unsigned int urb_size;
+	u32 sequence;
+	u8 last_fid;
+	struct dentry *debugfs_dir;
+	struct {
+		struct uvc_stats_frame frame;
+		struct uvc_stats_stream stream;
+	} stats;
+	struct uvc_clock clock;
+};
+
+struct uvc_format {
+	u8 type;
+	u8 index;
+	u8 bpp;
+	enum v4l2_colorspace colorspace;
+	enum v4l2_xfer_func xfer_func;
+	enum v4l2_ycbcr_encoding ycbcr_enc;
+	u32 fcc;
+	u32 flags;
+	unsigned int nframes;
+	const struct uvc_frame *frames;
+};
+
+struct uvc_frame {
+	u8 bFrameIndex;
+	u8 bmCapabilities;
+	u16 wWidth;
+	u16 wHeight;
+	u32 dwMinBitRate;
+	u32 dwMaxBitRate;
+	u32 dwMaxVideoFrameBufferSize;
+	u8 bFrameIntervalType;
+	u32 dwDefaultFrameInterval;
+	const u32 *dwFrameInterval;
+};
+
+struct uvc_buffer___2 {
+	struct vb2_v4l2_buffer buf;
+	struct list_head queue;
+	enum uvc_buffer_state___2 state;
+	unsigned int error;
+	void *mem;
+	unsigned int length;
+	unsigned int bytesused;
+	u32 pts;
+	struct kref ref;
+};
+
+struct uvc_clock_sample {
+	u32 dev_stc;
+	u16 dev_sof;
+	u16 host_sof;
+	ktime_t host_time;
+};
+
+struct uvc_xu_control_query {
+	__u8 unit;
+	__u8 selector;
+	__u8 query;
+	__u16 size;
+	__u8 __attribute__((btf_type_tag("user"))) *data;
+};
+
+struct uvc_menu_info;
+
+struct uvc_xu_control_mapping {
+	__u32 id;
+	__u8 name[32];
+	__u8 entity[16];
+	__u8 selector;
+	__u8 size;
+	__u8 offset;
+	__u32 v4l2_type;
+	__u32 data_type;
+	struct uvc_menu_info __attribute__((btf_type_tag("user"))) *menu_info;
+	__u32 menu_count;
+	__u32 reserved[4];
+};
+
+struct uvc_menu_info {
+	__u32 value;
+	__u8 name[32];
+};
+
+struct uvc_xu_control_mapping32 {
+	u32 id;
+	u8 name[32];
+	u8 entity[16];
+	u8 selector;
+	u8 size;
+	u8 offset;
+	u32 v4l2_type;
+	u32 data_type;
+	compat_caddr_t menu_info;
+	u32 menu_count;
+	u32 reserved[4];
+};
+
+struct uvc_xu_control_query32 {
+	u8 unit;
+	u8 selector;
+	u8 query;
+	u16 size;
+	compat_caddr_t data;
+};
+
+struct uvc_meta_buf {
+	__u64 ns;
+	__u16 sof;
+	__u8 length;
+	__u8 flags;
+	__u8 buf[0];
+} __attribute__((packed));
+
+struct uvc_ctrl_fixup {
+	struct usb_device_id id;
+	u8 entity;
+	u8 selector;
+	u8 flags;
+};
+
+struct uvc_ctrl_blacklist {
+	struct usb_device_id id;
+	u8 index;
+};
+
+struct uvc_debugfs_buffer {
+	size_t count;
+	char data[1024];
+};
+
+enum thermal_device_mode {
+	THERMAL_DEVICE_DISABLED = 0,
+	THERMAL_DEVICE_ENABLED = 1,
+};
+
+enum thermal_trend {
+	THERMAL_TREND_STABLE = 0,
+	THERMAL_TREND_RAISING = 1,
+	THERMAL_TREND_DROPPING = 2,
+};
+
+struct thermal_trip;
+
+struct thermal_zone_device_ops {
+	int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);
+	int (*get_temp)(struct thermal_zone_device *, int *);
+	int (*set_trips)(struct thermal_zone_device *, int, int);
+	int (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode);
+	int (*set_trip_temp)(struct thermal_zone_device *, int, int);
+	int (*set_trip_hyst)(struct thermal_zone_device *, int, int);
+	int (*get_crit_temp)(struct thermal_zone_device *, int *);
+	int (*set_emul_temp)(struct thermal_zone_device *, int);
+	int (*get_trend)(struct thermal_zone_device *, const struct thermal_trip *, enum thermal_trend *);
+	void (*hot)(struct thermal_zone_device *);
+	void (*critical)(struct thermal_zone_device *);
+	u64 android_kabi_reserved1;
+};
+
+enum thermal_notify_event {
+	THERMAL_EVENT_UNSPECIFIED = 0,
+	THERMAL_EVENT_TEMP_SAMPLE = 1,
+	THERMAL_TRIP_VIOLATED = 2,
+	THERMAL_TRIP_CHANGED = 3,
+	THERMAL_DEVICE_DOWN = 4,
+	THERMAL_DEVICE_UP = 5,
+	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,
+	THERMAL_TABLE_CHANGED = 7,
+	THERMAL_EVENT_KEEP_ALIVE = 8,
+};
+
+struct thermal_attr;
+
+struct thermal_zone_params;
+
+struct thermal_governor;
+
+struct thermal_zone_device {
+	int id;
+	char type[20];
+	struct device device;
+	struct attribute_group trips_attribute_group;
+	struct thermal_attr *trip_temp_attrs;
+	struct thermal_attr *trip_type_attrs;
+	struct thermal_attr *trip_hyst_attrs;
+	enum thermal_device_mode mode;
+	void *devdata;
+	struct thermal_trip *trips;
+	int num_trips;
+	unsigned long trips_disabled;
+	unsigned long passive_delay_jiffies;
+	unsigned long polling_delay_jiffies;
+	int temperature;
+	int last_temperature;
+	int emul_temperature;
+	int passive;
+	int prev_low_trip;
+	int prev_high_trip;
+	atomic_t need_update;
+	struct thermal_zone_device_ops *ops;
+	struct thermal_zone_params *tzp;
+	struct thermal_governor *governor;
+	void *governor_data;
+	struct list_head thermal_instances;
+	struct ida ida;
+	struct mutex lock;
+	struct list_head node;
+	struct delayed_work poll_queue;
+	enum thermal_notify_event notify_event;
+	bool suspended;
+	u64 android_kabi_reserved1;
+};
+
+enum thermal_trip_type {
+	THERMAL_TRIP_ACTIVE = 0,
+	THERMAL_TRIP_PASSIVE = 1,
+	THERMAL_TRIP_HOT = 2,
+	THERMAL_TRIP_CRITICAL = 3,
+};
+
+struct thermal_trip {
+	int temperature;
+	int hysteresis;
+	enum thermal_trip_type type;
+	void *priv;
+};
+
+struct thermal_zone_params {
+	char governor_name[20];
+	bool no_hwmon;
+	u32 sustainable_power;
+	s32 k_po;
+	s32 k_pu;
+	s32 k_i;
+	s32 k_d;
+	s32 integral_cutoff;
+	int slope;
+	int offset;
+	u64 android_kabi_reserved1;
+};
+
+struct thermal_governor {
+	char name[20];
+	int (*bind_to_tz)(struct thermal_zone_device *);
+	void (*unbind_from_tz)(struct thermal_zone_device *);
+	int (*throttle)(struct thermal_zone_device *, int);
+	struct list_head governor_list;
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
+	POWER_SUPPLY_TECHNOLOGY_NiMH = 1,
+	POWER_SUPPLY_TECHNOLOGY_LION = 2,
+	POWER_SUPPLY_TECHNOLOGY_LIPO = 3,
+	POWER_SUPPLY_TECHNOLOGY_LiFe = 4,
+	POWER_SUPPLY_TECHNOLOGY_NiCd = 5,
+	POWER_SUPPLY_TECHNOLOGY_LiMn = 6,
+};
+
+enum power_supply_notifier_events {
+	PSY_EVENT_PROP_CHANGED = 0,
+};
+
+struct match_device_node_array_param {
+	struct device_node *parent_of_node;
+	struct power_supply **psy;
+	ssize_t psy_size;
+	ssize_t psy_count;
+};
+
+struct psy_am_i_supplied_data {
+	struct power_supply *psy;
+	unsigned int count;
+};
+
+struct psy_get_supplier_prop_data {
+	struct power_supply *psy;
+	enum power_supply_property psp;
+	union power_supply_propval *val;
+};
+
+struct power_supply_attr {
+	const char *prop_name;
+	char attr_name[31];
+	struct device_attribute dev_attr;
+	const char * const *text_values;
+	int text_values_len;
+};
+
+enum power_supply_charge_behaviour {
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_AUTO = 0,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_INHIBIT_CHARGE = 1,
+	POWER_SUPPLY_CHARGE_BEHAVIOUR_FORCE_DISCHARGE = 2,
+};
+
+enum {
+	POWER_SUPPLY_STATUS_UNKNOWN = 0,
+	POWER_SUPPLY_STATUS_CHARGING = 1,
+	POWER_SUPPLY_STATUS_DISCHARGING = 2,
+	POWER_SUPPLY_STATUS_NOT_CHARGING = 3,
+	POWER_SUPPLY_STATUS_FULL = 4,
+};
+
+typedef void (*btf_trace_thermal_temperature)(void *, struct thermal_zone_device *);
+
+struct thermal_attr {
+	struct device_attribute attr;
+	char name[20];
+};
+
+typedef void (*btf_trace_cdev_update)(void *, struct thermal_cooling_device *, unsigned long);
+
+typedef void (*btf_trace_thermal_zone_trip)(void *, struct thermal_zone_device *, int, enum thermal_trip_type);
+
+typedef void (*btf_trace_thermal_power_cpu_get_power_simple)(void *, int, u32);
+
+typedef void (*btf_trace_thermal_power_cpu_limit)(void *, const struct cpumask *, unsigned int, unsigned long, u32);
+
+struct devfreq_dev_status;
+
+typedef void (*btf_trace_thermal_power_devfreq_get_power)(void *, struct thermal_cooling_device *, struct devfreq_dev_status *, unsigned long, u32);
+
+struct devfreq_dev_status {
+	unsigned long total_time;
+	unsigned long busy_time;
+	unsigned long current_frequency;
+	void *private_data;
+};
+
+typedef void (*btf_trace_thermal_power_devfreq_limit)(void *, struct thermal_cooling_device *, unsigned long, unsigned long, u32);
+
+struct thermal_instance {
+	int id;
+	char name[20];
+	struct thermal_zone_device *tz;
+	struct thermal_cooling_device *cdev;
+	const struct thermal_trip *trip;
+	bool initialized;
+	unsigned long upper;
+	unsigned long lower;
+	unsigned long target;
+	char attr_name[20];
+	struct device_attribute attr;
+	char weight_attr_name[20];
+	struct device_attribute weight_attr;
+	struct list_head tz_node;
+	struct list_head cdev_node;
+	unsigned int weight;
+	bool upper_no_limit;
+};
+
+struct trace_event_raw_thermal_temperature {
+	struct trace_entry ent;
+	u32 __data_loc_thermal_zone;
+	int id;
+	int temp_prev;
+	int temp;
+	char __data[0];
+};
+
+struct trace_event_raw_cdev_update {
+	struct trace_entry ent;
+	u32 __data_loc_type;
+	unsigned long target;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_zone_trip {
+	struct trace_entry ent;
+	u32 __data_loc_thermal_zone;
+	int id;
+	int trip;
+	enum thermal_trip_type trip_type;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_cpu_get_power_simple {
+	struct trace_entry ent;
+	int cpu;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_cpu_limit {
+	struct trace_entry ent;
+	u32 __data_loc_cpumask;
+	unsigned int freq;
+	unsigned long cdev_state;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_devfreq_get_power {
+	struct trace_entry ent;
+	u32 __data_loc_type;
+	unsigned long freq;
+	u32 busy_time;
+	u32 total_time;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_raw_thermal_power_devfreq_limit {
+	struct trace_entry ent;
+	u32 __data_loc_type;
+	unsigned int freq;
+	unsigned long cdev_state;
+	u32 power;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_thermal_temperature {
+	u32 thermal_zone;
+};
+
+struct trace_event_data_offsets_cdev_update {
+	u32 type;
+};
+
+struct trace_event_data_offsets_thermal_zone_trip {
+	u32 thermal_zone;
+};
+
+struct trace_event_data_offsets_thermal_power_cpu_limit {
+	u32 cpumask;
+};
+
+struct trace_event_data_offsets_thermal_power_devfreq_get_power {
+	u32 type;
+};
+
+struct trace_event_data_offsets_thermal_power_devfreq_limit {
+	u32 type;
+};
+
+struct trace_event_data_offsets_thermal_power_cpu_get_power_simple {};
+
+struct cooling_dev_stats {
+	spinlock_t lock;
+	unsigned int total_trans;
+	unsigned long state;
+	ktime_t last_time;
+	ktime_t *time_in_state;
+	unsigned int *trans_table;
+};
+
+struct param;
+
+typedef int (*cb_t)(struct param *);
+
+struct thermal_genl_cpu_caps;
+
+struct param {
+	struct nlattr **attrs;
+	struct sk_buff *msg;
+	const char *name;
+	int tz_id;
+	int cdev_id;
+	int trip_id;
+	int trip_temp;
+	int trip_type;
+	int trip_hyst;
+	int temp;
+	int cdev_state;
+	int cdev_max_state;
+	struct thermal_genl_cpu_caps *cpu_capabilities;
+	int cpu_capabilities_count;
+};
+
+struct thermal_genl_cpu_caps {
+	int cpu;
+	int performance;
+	int efficiency;
+};
+
+enum thermal_genl_sampling {
+	THERMAL_GENL_SAMPLING_TEMP = 0,
+	__THERMAL_GENL_SAMPLING_MAX = 1,
+};
+
+enum thermal_genl_attr {
+	THERMAL_GENL_ATTR_UNSPEC = 0,
+	THERMAL_GENL_ATTR_TZ = 1,
+	THERMAL_GENL_ATTR_TZ_ID = 2,
+	THERMAL_GENL_ATTR_TZ_TEMP = 3,
+	THERMAL_GENL_ATTR_TZ_TRIP = 4,
+	THERMAL_GENL_ATTR_TZ_TRIP_ID = 5,
+	THERMAL_GENL_ATTR_TZ_TRIP_TYPE = 6,
+	THERMAL_GENL_ATTR_TZ_TRIP_TEMP = 7,
+	THERMAL_GENL_ATTR_TZ_TRIP_HYST = 8,
+	THERMAL_GENL_ATTR_TZ_MODE = 9,
+	THERMAL_GENL_ATTR_TZ_NAME = 10,
+	THERMAL_GENL_ATTR_TZ_CDEV_WEIGHT = 11,
+	THERMAL_GENL_ATTR_TZ_GOV = 12,
+	THERMAL_GENL_ATTR_TZ_GOV_NAME = 13,
+	THERMAL_GENL_ATTR_CDEV = 14,
+	THERMAL_GENL_ATTR_CDEV_ID = 15,
+	THERMAL_GENL_ATTR_CDEV_CUR_STATE = 16,
+	THERMAL_GENL_ATTR_CDEV_MAX_STATE = 17,
+	THERMAL_GENL_ATTR_CDEV_NAME = 18,
+	THERMAL_GENL_ATTR_GOV_NAME = 19,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY = 20,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_ID = 21,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_PERFORMANCE = 22,
+	THERMAL_GENL_ATTR_CPU_CAPABILITY_EFFICIENCY = 23,
+	__THERMAL_GENL_ATTR_MAX = 24,
+};
+
+enum thermal_genl_event {
+	THERMAL_GENL_EVENT_UNSPEC = 0,
+	THERMAL_GENL_EVENT_TZ_CREATE = 1,
+	THERMAL_GENL_EVENT_TZ_DELETE = 2,
+	THERMAL_GENL_EVENT_TZ_DISABLE = 3,
+	THERMAL_GENL_EVENT_TZ_ENABLE = 4,
+	THERMAL_GENL_EVENT_TZ_TRIP_UP = 5,
+	THERMAL_GENL_EVENT_TZ_TRIP_DOWN = 6,
+	THERMAL_GENL_EVENT_TZ_TRIP_CHANGE = 7,
+	THERMAL_GENL_EVENT_TZ_TRIP_ADD = 8,
+	THERMAL_GENL_EVENT_TZ_TRIP_DELETE = 9,
+	THERMAL_GENL_EVENT_CDEV_ADD = 10,
+	THERMAL_GENL_EVENT_CDEV_DELETE = 11,
+	THERMAL_GENL_EVENT_CDEV_STATE_UPDATE = 12,
+	THERMAL_GENL_EVENT_TZ_GOV_CHANGE = 13,
+	THERMAL_GENL_EVENT_CPU_CAPABILITY_CHANGE = 14,
+	__THERMAL_GENL_EVENT_MAX = 15,
+};
+
+struct cpufreq_cooling_device {
+	u32 last_load;
+	unsigned int cpufreq_state;
+	unsigned int max_level;
+	struct em_perf_domain *em;
+	struct cpufreq_policy *policy;
+	struct thermal_cooling_device_ops cooling_ops;
+	struct freq_qos_request qos_req;
+};
+
+struct idle_inject_device;
+
+struct cpuidle_cooling_device {
+	struct idle_inject_device *ii_dev;
+	unsigned long state;
+};
+
+enum devfreq_timer {
+	DEVFREQ_TIMER_DEFERRABLE = 0,
+	DEVFREQ_TIMER_DELAYED = 1,
+	DEVFREQ_TIMER_NUM = 2,
+};
+
+struct devfreq;
+
+struct devfreq_cooling_power;
+
+struct devfreq_cooling_device {
+	struct thermal_cooling_device *cdev;
+	struct thermal_cooling_device_ops cooling_ops;
+	struct devfreq *devfreq;
+	unsigned long cooling_state;
+	u32 *freq_table;
+	size_t max_state;
+	struct devfreq_cooling_power *power_ops;
+	u32 res_util;
+	int capped_state;
+	struct dev_pm_qos_request req_max_freq;
+	struct em_perf_domain *em_pd;
+};
+
+struct devfreq_stats {
+	unsigned int total_trans;
+	unsigned int *trans_table;
+	u64 *time_in_state;
+	u64 last_update;
+};
+
+struct devfreq_dev_profile;
+
+struct devfreq_governor;
+
+struct opp_table;
+
+struct devfreq {
+	struct list_head node;
+	struct mutex lock;
+	struct device dev;
+	struct devfreq_dev_profile *profile;
+	const struct devfreq_governor *governor;
+	struct opp_table *opp_table;
+	struct notifier_block nb;
+	struct delayed_work work;
+	unsigned long *freq_table;
+	unsigned int max_state;
+	unsigned long previous_freq;
+	struct devfreq_dev_status last_status;
+	void *data;
+	void *governor_data;
+	struct dev_pm_qos_request user_min_freq_req;
+	struct dev_pm_qos_request user_max_freq_req;
+	unsigned long scaling_min_freq;
+	unsigned long scaling_max_freq;
+	bool stop_polling;
+	unsigned long suspend_freq;
+	unsigned long resume_freq;
+	atomic_t suspend_count;
+	struct devfreq_stats stats;
+	struct srcu_notifier_head transition_notifier_list;
+	struct thermal_cooling_device *cdev;
+	struct notifier_block nb_min;
+	struct notifier_block nb_max;
+};
+
+struct devfreq_dev_profile {
+	unsigned long initial_freq;
+	unsigned int polling_ms;
+	enum devfreq_timer timer;
+	int (*target)(struct device *, unsigned long *, u32);
+	int (*get_dev_status)(struct device *, struct devfreq_dev_status *);
+	int (*get_cur_freq)(struct device *, unsigned long *);
+	void (*exit)(struct device *);
+	unsigned long *freq_table;
+	unsigned int max_state;
+	bool is_cooling_device;
+};
+
+struct devfreq_governor {
+	struct list_head node;
+	const char name[16];
+	const u64 attrs;
+	const u64 flags;
+	int (*get_target_freq)(struct devfreq *, unsigned long *);
+	int (*event_handler)(struct devfreq *, unsigned int, void *);
+};
+
+struct devfreq_cooling_power {
+	int (*get_real_power)(struct devfreq *, u32 *, unsigned long, unsigned long);
+};
+
+struct _thermal_state {
+	u64 next_check;
+	u64 last_interrupt_time;
+	struct delayed_work therm_work;
+	unsigned long count;
+	unsigned long last_count;
+	unsigned long max_time_ms;
+	unsigned long total_time_ms;
+	bool rate_control_active;
+	bool new_event;
+	u8 level;
+	u8 sample_index;
+	u8 sample_count;
+	u8 average;
+	u8 baseline_temp;
+	u8 temp_samples[3];
+};
+
+struct thermal_state {
+	struct _thermal_state core_throttle;
+	struct _thermal_state core_power_limit;
+	struct _thermal_state package_throttle;
+	struct _thermal_state package_power_limit;
+	struct _thermal_state core_thresh0;
+	struct _thermal_state core_thresh1;
+	struct _thermal_state pkg_thresh0;
+	struct _thermal_state pkg_thresh1;
+};
+
+struct watchdog_device;
+
+typedef void (*btf_trace_watchdog_start)(void *, struct watchdog_device *, int);
+
+struct watchdog_info;
+
+struct watchdog_ops;
+
+struct watchdog_governor;
+
+struct watchdog_core_data;
+
+struct watchdog_device {
+	int id;
+	struct device *parent;
+	const struct attribute_group **groups;
+	const struct watchdog_info *info;
+	const struct watchdog_ops *ops;
+	const struct watchdog_governor *gov;
+	unsigned int bootstatus;
+	unsigned int timeout;
+	unsigned int pretimeout;
+	unsigned int min_timeout;
+	unsigned int max_timeout;
+	unsigned int min_hw_heartbeat_ms;
+	unsigned int max_hw_heartbeat_ms;
+	struct notifier_block reboot_nb;
+	struct notifier_block restart_nb;
+	struct notifier_block pm_nb;
+	void *driver_data;
+	struct watchdog_core_data *wd_data;
+	unsigned long status;
+	struct list_head deferred;
+};
+
+struct watchdog_info {
+	__u32 options;
+	__u32 firmware_version;
+	__u8 identity[32];
+};
+
+struct watchdog_ops {
+	struct module *owner;
+	int (*start)(struct watchdog_device *);
+	int (*stop)(struct watchdog_device *);
+	int (*ping)(struct watchdog_device *);
+	unsigned int (*status)(struct watchdog_device *);
+	int (*set_timeout)(struct watchdog_device *, unsigned int);
+	int (*set_pretimeout)(struct watchdog_device *, unsigned int);
+	unsigned int (*get_timeleft)(struct watchdog_device *);
+	int (*restart)(struct watchdog_device *, unsigned long, void *);
+	long (*ioctl)(struct watchdog_device *, unsigned int, unsigned long);
+};
+
+struct watchdog_governor {
+	const char name[20];
+	void (*pretimeout)(struct watchdog_device *);
+};
+
+struct watchdog_core_data {
+	struct device dev;
+	struct cdev cdev;
+	struct watchdog_device *wdd;
+	struct mutex lock;
+	ktime_t last_keepalive;
+	ktime_t last_hw_keepalive;
+	ktime_t open_deadline;
+	struct hrtimer timer;
+	struct kthread_work work;
+	unsigned long status;
+};
+
+typedef void (*btf_trace_watchdog_ping)(void *, struct watchdog_device *, int);
+
+typedef void (*btf_trace_watchdog_stop)(void *, struct watchdog_device *, int);
+
+typedef void (*btf_trace_watchdog_set_timeout)(void *, struct watchdog_device *, unsigned int, int);
+
+struct trace_event_raw_watchdog_template {
+	struct trace_entry ent;
+	int id;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_watchdog_set_timeout {
+	struct trace_entry ent;
+	int id;
+	unsigned int timeout;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_watchdog_template {};
+
+struct trace_event_data_offsets_watchdog_set_timeout {};
+
+enum dm_uevent_type {
+	DM_UEVENT_PATH_FAILED = 0,
+	DM_UEVENT_PATH_REINSTATED = 1,
+};
+
+struct mapped_device;
+
+struct dm_uevent {
+	struct mapped_device *md;
+	enum kobject_action action;
+	struct kobj_uevent_env ku_env;
+	struct list_head elist;
+	char name[128];
+	char uuid[129];
+};
+
+struct dm_table;
+
+struct target_type;
+
+struct dm_target {
+	struct dm_table *table;
+	struct target_type *type;
+	sector_t begin;
+	sector_t len;
+	uint32_t max_io_len;
+	unsigned int num_flush_bios;
+	unsigned int num_discard_bios;
+	unsigned int num_secure_erase_bios;
+	unsigned int num_write_zeroes_bios;
+	unsigned int per_io_data_size;
+	void *private;
+	char *error;
+	bool flush_supported: 1;
+	bool discards_supported: 1;
+	bool max_discard_granularity: 1;
+	bool max_secure_erase_granularity: 1;
+	bool max_write_zeroes_granularity: 1;
+	bool limit_swap_bios: 1;
+	bool emulate_zone_append: 1;
+	bool accounts_remapped_io: 1;
+	bool needs_bio_set_dev: 1;
+	bool flush_bypasses_map: 1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef int (*dm_ctr_fn)(struct dm_target *, unsigned int, char **);
+
+typedef void (*dm_dtr_fn)(struct dm_target *);
+
+typedef int (*dm_map_fn)(struct dm_target *, struct bio *);
+
+union map_info___2;
+
+typedef int (*dm_clone_and_map_request_fn)(struct dm_target *, struct request *, union map_info___2 *, struct request **);
+
+typedef void (*dm_release_clone_request_fn)(struct request *, union map_info___2 *);
+
+typedef int (*dm_endio_fn)(struct dm_target *, struct bio *, blk_status_t *);
+
+typedef int (*dm_request_endio_fn)(struct dm_target *, struct request *, blk_status_t, union map_info___2 *);
+
+typedef void (*dm_presuspend_fn)(struct dm_target *);
+
+typedef void (*dm_presuspend_undo_fn)(struct dm_target *);
+
+typedef void (*dm_postsuspend_fn)(struct dm_target *);
+
+typedef int (*dm_preresume_fn)(struct dm_target *);
+
+typedef void (*dm_resume_fn)(struct dm_target *);
+
+typedef enum {
+	STATUSTYPE_INFO = 0,
+	STATUSTYPE_TABLE = 1,
+	STATUSTYPE_IMA = 2,
+} status_type_t;
+
+typedef void (*dm_status_fn)(struct dm_target *, status_type_t, unsigned int, char *, unsigned int);
+
+typedef int (*dm_message_fn)(struct dm_target *, unsigned int, char **, char *, unsigned int);
+
+typedef int (*dm_prepare_ioctl_fn)(struct dm_target *, struct block_device **);
+
+struct dm_report_zones_args;
+
+typedef int (*dm_report_zones_fn)(struct dm_target *, struct dm_report_zones_args *, unsigned int);
+
+typedef int (*dm_busy_fn)(struct dm_target *);
+
+struct dm_dev;
+
+typedef int (*iterate_devices_callout_fn)(struct dm_target *, struct dm_dev *, sector_t, sector_t, void *);
+
+typedef int (*dm_iterate_devices_fn)(struct dm_target *, iterate_devices_callout_fn, void *);
+
+typedef void (*dm_io_hints_fn)(struct dm_target *, struct queue_limits *);
+
+typedef long (*dm_dax_direct_access_fn)(struct dm_target *, unsigned long, long, enum dax_access_mode, void **, pfn_t *);
+
+typedef int (*dm_dax_zero_page_range_fn)(struct dm_target *, unsigned long, size_t);
+
+typedef size_t (*dm_dax_recovery_write_fn)(struct dm_target *, unsigned long, void *, size_t, struct iov_iter *);
+
+struct target_type {
+	uint64_t features;
+	const char *name;
+	struct module *module;
+	unsigned int version[3];
+	dm_ctr_fn ctr;
+	dm_dtr_fn dtr;
+	dm_map_fn map;
+	dm_clone_and_map_request_fn clone_and_map_rq;
+	dm_release_clone_request_fn release_clone_rq;
+	dm_endio_fn end_io;
+	dm_request_endio_fn rq_end_io;
+	dm_presuspend_fn presuspend;
+	dm_presuspend_undo_fn presuspend_undo;
+	dm_postsuspend_fn postsuspend;
+	dm_preresume_fn preresume;
+	dm_resume_fn resume;
+	dm_status_fn status;
+	dm_message_fn message;
+	dm_prepare_ioctl_fn prepare_ioctl;
+	dm_report_zones_fn report_zones;
+	dm_busy_fn busy;
+	dm_iterate_devices_fn iterate_devices;
+	dm_io_hints_fn io_hints;
+	dm_dax_direct_access_fn direct_access;
+	dm_dax_zero_page_range_fn dax_zero_page_range;
+	dm_dax_recovery_write_fn dax_recovery_write;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	struct list_head list;
+};
+
+union map_info___2 {
+	void *ptr;
+};
+
+struct dm_report_zones_args {
+	struct dm_target *tgt;
+	sector_t next_sector;
+	void *orig_data;
+	report_zones_cb orig_cb;
+	unsigned int zone_idx;
+	sector_t start;
+};
+
+struct dm_dev {
+	struct block_device *bdev;
+	struct dax_device *dax_dev;
+	blk_mode_t mode;
+	char name[16];
+};
+
+enum dm_queue_mode {
+	DM_TYPE_NONE = 0,
+	DM_TYPE_BIO_BASED = 1,
+	DM_TYPE_REQUEST_BASED = 2,
+	DM_TYPE_DAX_BIO_BASED = 3,
+};
+
+struct dm_stats_last_position;
+
+struct dm_stats {
+	struct mutex mutex;
+	struct list_head list;
+	struct dm_stats_last_position __attribute__((btf_type_tag("percpu"))) *last;
+	bool precise_timestamps;
+};
+
+struct dm_kobject_holder {
+	struct kobject kobj;
+	struct completion completion;
+};
+
+struct dm_io;
+
+struct dm_md_mempools;
+
+struct mapped_device {
+	struct mutex suspend_lock;
+	struct mutex table_devices_lock;
+	struct list_head table_devices;
+	void __attribute__((btf_type_tag("rcu"))) *map;
+	unsigned long flags;
+	struct mutex type_lock;
+	enum dm_queue_mode type;
+	int numa_node_id;
+	struct request_queue *queue;
+	atomic_t holders;
+	atomic_t open_count;
+	struct dm_target *immutable_target;
+	struct target_type *immutable_target_type;
+	char name[16];
+	struct gendisk *disk;
+	struct dax_device *dax_dev;
+	wait_queue_head_t wait;
+	unsigned long __attribute__((btf_type_tag("percpu"))) *pending_io;
+	struct hd_geometry geometry;
+	struct workqueue_struct *wq;
+	struct work_struct work;
+	spinlock_t deferred_lock;
+	struct bio_list deferred;
+	struct work_struct requeue_work;
+	struct dm_io *requeue_list;
+	void *interface_ptr;
+	wait_queue_head_t eventq;
+	atomic_t event_nr;
+	atomic_t uevent_seq;
+	struct list_head uevent_list;
+	spinlock_t uevent_lock;
+	bool init_tio_pdu: 1;
+	struct blk_mq_tag_set *tag_set;
+	struct dm_stats stats;
+	unsigned int internal_suspend_count;
+	int swap_bios;
+	struct semaphore swap_bios_semaphore;
+	struct mutex swap_bios_lock;
+	struct dm_md_mempools *mempools;
+	struct dm_kobject_holder kobj_holder;
+	struct srcu_struct io_barrier;
+	unsigned int nr_zones;
+	unsigned int *zwp_offset;
+};
+
+struct dm_table {
+	struct mapped_device *md;
+	enum dm_queue_mode type;
+	unsigned int depth;
+	unsigned int counts[16];
+	sector_t *index[16];
+	unsigned int num_targets;
+	unsigned int num_allocated;
+	sector_t *highs;
+	struct dm_target *targets;
+	struct target_type *immutable_target_type;
+	bool integrity_supported: 1;
+	bool singleton: 1;
+	bool integrity_added: 1;
+	bool flush_bypasses_map: 1;
+	blk_mode_t mode;
+	struct list_head devices;
+	struct rw_semaphore devices_lock;
+	void (*event_fn)(void *);
+	void *event_context;
+	struct dm_md_mempools *mempools;
+	struct blk_crypto_profile *crypto_profile;
+};
+
+struct dm_md_mempools {
+	struct bio_set bs;
+	struct bio_set io_bs;
+};
+
+typedef u16 blk_short_t;
+
+struct dm_stats_aux {
+	bool merged;
+	unsigned long long duration_ns;
+};
+
+struct dm_target_io {
+	unsigned short magic;
+	blk_short_t flags;
+	unsigned int target_bio_nr;
+	struct dm_io *io;
+	struct dm_target *ti;
+	unsigned int *len_ptr;
+	sector_t old_sector;
+	struct bio clone;
+};
+
+struct dm_io {
+	unsigned short magic;
+	blk_short_t flags;
+	spinlock_t lock;
+	unsigned long start_time;
+	void *data;
+	struct dm_io *next;
+	struct dm_stats_aux stats_aux;
+	blk_status_t status;
+	atomic_t io_count;
+	struct mapped_device *md;
+	struct bio *orig_bio;
+	unsigned int sector_offset;
+	unsigned int sectors;
+	struct dm_target_io tio;
+};
+
+struct dm_stats_last_position {
+	sector_t last_sector;
+	unsigned int last_rw;
+};
+
+struct orig_bio_details {
+	enum req_op op;
+	unsigned int nr_sectors;
+};
+
+enum {
+	DM_TIO_INSIDE_DM_IO = 0,
+	DM_TIO_IS_DUPLICATE_BIO = 1,
+};
+
+enum {
+	DM_IO_ACCOUNTED = 0,
+	DM_IO_WAS_SPLIT = 1,
+	DM_IO_BLK_STAT = 2,
+};
+
+struct table_device {
+	struct list_head list;
+	refcount_t count;
+	struct dm_dev dm_dev;
+};
+
+struct dm_dev_internal {
+	struct list_head list;
+	refcount_t count;
+	struct dm_dev *dm_dev;
+};
+
+struct clone_info {
+	struct dm_table *map;
+	struct bio *bio;
+	struct dm_io *io;
+	sector_t sector;
+	unsigned int sector_count;
+	bool is_abnormal_io: 1;
+	bool submit_as_polled: 1;
+};
+
+struct dm_pr {
+	u64 old_key;
+	u64 new_key;
+	u32 flags;
+	bool abort;
+	bool fail_early;
+	int ret;
+	enum pr_type type;
+	struct pr_keys *read_keys;
+	struct pr_held_reservation *rsv;
+};
+
+enum suspend_mode {
+	PRESUSPEND = 0,
+	PRESUSPEND_UNDO = 1,
+	POSTSUSPEND = 2,
+};
+
+struct dm_crypto_profile {
+	struct blk_crypto_profile profile;
+	struct mapped_device *md;
+};
+
+struct dm_arg_set {
+	unsigned int argc;
+	char **argv;
+};
+
+struct dm_arg {
+	unsigned int min;
+	unsigned int max;
+	char *error;
+};
+
+struct dm_derive_sw_secret_args {
+	const u8 *eph_key;
+	size_t eph_key_size;
+	u8 *sw_secret;
+	int err;
+};
+
+struct linear_c {
+	struct dm_dev *dev;
+	sector_t start;
+};
+
+struct stripe {
+	struct dm_dev *dev;
+	sector_t physical_start;
+	atomic_t error_count;
+};
+
+struct stripe_c {
+	uint32_t stripes;
+	int stripes_shift;
+	sector_t stripe_width;
+	uint32_t chunk_size;
+	int chunk_size_shift;
+	struct dm_target *ti;
+	struct work_struct trigger_event;
+	struct stripe stripe[0];
+};
+
+struct dm_ioctl;
+
+typedef int (*ioctl_fn___2)(struct file *, struct dm_ioctl *, size_t);
+
+struct dm_ioctl {
+	__u32 version[3];
+	__u32 data_size;
+	__u32 data_start;
+	__u32 target_count;
+	__s32 open_count;
+	__u32 flags;
+	__u32 event_nr;
+	__u32 padding;
+	__u64 dev;
+	char name[128];
+	char uuid[129];
+	char data[7];
+};
+
+enum {
+	DM_VERSION_CMD = 0,
+	DM_REMOVE_ALL_CMD = 1,
+	DM_LIST_DEVICES_CMD = 2,
+	DM_DEV_CREATE_CMD = 3,
+	DM_DEV_REMOVE_CMD = 4,
+	DM_DEV_RENAME_CMD = 5,
+	DM_DEV_SUSPEND_CMD = 6,
+	DM_DEV_STATUS_CMD = 7,
+	DM_DEV_WAIT_CMD = 8,
+	DM_TABLE_LOAD_CMD = 9,
+	DM_TABLE_CLEAR_CMD = 10,
+	DM_TABLE_DEPS_CMD = 11,
+	DM_TABLE_STATUS_CMD = 12,
+	DM_LIST_VERSIONS_CMD = 13,
+	DM_TARGET_MSG_CMD = 14,
+	DM_DEV_SET_GEOMETRY_CMD = 15,
+	DM_DEV_ARM_POLL_CMD = 16,
+	DM_GET_TARGET_VERSION_CMD = 17,
+};
+
+struct hash_cell {
+	struct rb_node name_node;
+	struct rb_node uuid_node;
+	bool name_set;
+	bool uuid_set;
+	char *name;
+	char *uuid;
+	struct mapped_device *md;
+	struct dm_table *new_map;
+};
+
+struct dm_target_spec {
+	__u64 sector_start;
+	__u64 length;
+	__s32 status;
+	__u32 next;
+	char target_type[16];
+};
+
+struct dm_target_msg {
+	__u64 sector;
+	char message[0];
+};
+
+struct dm_target_deps {
+	__u32 count;
+	__u32 padding;
+	__u64 dev[0];
+};
+
+struct dm_target_versions;
+
+struct vers_iter {
+	size_t param_size;
+	struct dm_target_versions *vers;
+	struct dm_target_versions *old_vers;
+	char *end;
+	uint32_t flags;
+};
+
+struct dm_target_versions {
+	__u32 next;
+	__u32 version[3];
+	char name[0];
+};
+
+struct dm_file {
+	volatile unsigned int global_event_nr;
+};
+
+struct dm_name_list {
+	__u64 dev;
+	__u32 next;
+	char name[0];
+};
+
+enum dm_io_mem_type {
+	DM_IO_PAGE_LIST = 0,
+	DM_IO_BIO = 1,
+	DM_IO_VMA = 2,
+	DM_IO_KMEM = 3,
+};
+
+struct page_list;
+
+struct dm_io_memory {
+	enum dm_io_mem_type type;
+	unsigned int offset;
+	union {
+		struct page_list *pl;
+		struct bio *bio;
+		void *vma;
+		void *addr;
+	} ptr;
+};
+
+typedef void (*io_notify_fn)(unsigned long, void *);
+
+struct dm_io_notify {
+	io_notify_fn fn;
+	void *context;
+};
+
+struct dm_io_client;
+
+struct dm_io_request {
+	blk_opf_t bi_opf;
+	struct dm_io_memory mem;
+	struct dm_io_notify notify;
+	struct dm_io_client *client;
+};
+
+struct page_list {
+	struct page_list *next;
+	struct page *page;
+};
+
+struct dm_io_client {
+	mempool_t pool;
+	struct bio_set bios;
+};
+
+struct dpages {
+	void (*get_page)(struct dpages *, struct page **, unsigned long *, unsigned int *);
+	void (*next_page)(struct dpages *);
+	union {
+		unsigned int context_u;
+		struct bvec_iter context_bi;
+	};
+	void *context_ptr;
+	void *vma_invalidate_address;
+	unsigned long vma_invalidate_size;
+};
+
+struct dm_io_region {
+	struct block_device *bdev;
+	sector_t sector;
+	sector_t count;
+};
+
+struct io {
+	unsigned long error_bits;
+	atomic_t count;
+	struct dm_io_client *client;
+	io_notify_fn callback;
+	void *context;
+	void *vma_invalidate_address;
+	unsigned long vma_invalidate_size;
+	long: 64;
+};
+
+struct sync_io {
+	unsigned long error_bits;
+	struct completion wait;
+};
+
+struct dm_kcopyd_throttle;
+
+struct dm_kcopyd_client {
+	struct page_list *pages;
+	unsigned int nr_reserved_pages;
+	unsigned int nr_free_pages;
+	unsigned int sub_job_size;
+	struct dm_io_client *io_client;
+	wait_queue_head_t destroyq;
+	mempool_t job_pool;
+	struct workqueue_struct *kcopyd_wq;
+	struct work_struct kcopyd_work;
+	struct dm_kcopyd_throttle *throttle;
+	atomic_t nr_jobs;
+	spinlock_t job_lock;
+	struct list_head callback_jobs;
+	struct list_head complete_jobs;
+	struct list_head io_jobs;
+	struct list_head pages_jobs;
+};
+
+struct dm_kcopyd_throttle {
+	unsigned int throttle;
+	unsigned int num_io_jobs;
+	unsigned int io_period;
+	unsigned int total_period;
+	unsigned int last_jiffies;
+};
+
+typedef void (*dm_kcopyd_notify_fn)(int, unsigned long, void *);
+
+struct kcopyd_job {
+	struct dm_kcopyd_client *kc;
+	struct list_head list;
+	unsigned int flags;
+	int read_err;
+	unsigned long write_err;
+	enum req_op op;
+	struct dm_io_region source;
+	unsigned int num_dests;
+	struct dm_io_region dests[8];
+	struct page_list *pages;
+	dm_kcopyd_notify_fn fn;
+	void *context;
+	struct mutex lock;
+	atomic_t sub_jobs;
+	sector_t progress;
+	sector_t write_offset;
+	struct kcopyd_job *master_job;
+};
+
+struct dm_sysfs_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct mapped_device *, char *);
+	ssize_t (*store)(struct mapped_device *, const char *, size_t);
+};
+
+struct dm_stat_percpu {
+	unsigned long long sectors[2];
+	unsigned long long ios[2];
+	unsigned long long merges[2];
+	unsigned long long ticks[2];
+	unsigned long long io_ticks[2];
+	unsigned long long io_ticks_total;
+	unsigned long long time_in_queue;
+	unsigned long long *histogram;
+};
+
+struct dm_stat_shared {
+	atomic_t in_flight[2];
+	unsigned long long stamp;
+	struct dm_stat_percpu tmp;
+};
+
+struct dm_stat {
+	struct list_head list_entry;
+	int id;
+	unsigned int stat_flags;
+	size_t n_entries;
+	sector_t start;
+	sector_t end;
+	sector_t step;
+	unsigned int n_histogram_entries;
+	unsigned long long *histogram_boundaries;
+	const char *program_id;
+	const char *aux_data;
+	struct callback_head callback_head;
+	size_t shared_alloc_size;
+	size_t percpu_alloc_size;
+	size_t histogram_alloc_size;
+	struct dm_stat_percpu *stat_percpu[32];
+	struct dm_stat_shared stat_shared[0];
+};
+
+struct dm_rq_target_io;
+
+struct dm_rq_clone_bio_info {
+	struct bio *orig;
+	struct dm_rq_target_io *tio;
+	struct bio clone;
+};
+
+struct dm_rq_target_io {
+	struct mapped_device *md;
+	struct dm_target *ti;
+	struct request *orig;
+	struct request *clone;
+	struct kthread_work work;
+	blk_status_t error;
+	union map_info___2 info;
+	struct dm_stats_aux stats_aux;
+	unsigned long duration_jiffies;
+	unsigned int n_sectors;
+	unsigned int completed;
+};
+
+enum new_flag {
+	NF_FRESH = 0,
+	NF_READ = 1,
+	NF_GET = 2,
+	NF_PREFETCH = 3,
+};
+
+enum evict_result {
+	ER_EVICT = 0,
+	ER_DONT_EVICT = 1,
+	ER_STOP = 2,
+};
+
+enum data_mode {
+	DATA_MODE_SLAB = 0,
+	DATA_MODE_GET_FREE_PAGES = 1,
+	DATA_MODE_VMALLOC = 2,
+	DATA_MODE_LIMIT = 3,
+};
+
+enum it_action {
+	IT_NEXT = 0,
+	IT_COMPLETE = 1,
+};
+
+struct lru_entry {
+	struct list_head list;
+	atomic_t referenced;
+};
+
+struct dm_bufio_client;
+
+struct dm_buffer {
+	struct rb_node node;
+	sector_t block;
+	void *data;
+	unsigned char data_mode;
+	atomic_t hold_count;
+	unsigned long last_accessed;
+	unsigned long state;
+	struct lru_entry lru;
+	unsigned char list_mode;
+	blk_status_t read_error;
+	blk_status_t write_error;
+	unsigned int dirty_start;
+	unsigned int dirty_end;
+	unsigned int write_start;
+	unsigned int write_end;
+	struct list_head write_list;
+	struct dm_bufio_client *c;
+	void (*end_io)(struct dm_buffer *, blk_status_t);
+};
+
+struct lru {
+	struct list_head *cursor;
+	unsigned long count;
+	struct list_head iterators;
+};
+
+struct buffer_tree {
+	union {
+		struct rw_semaphore lock;
+		rwlock_t spinlock;
+	} u;
+	struct rb_root root;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct dm_buffer_cache {
+	struct lru lru[2];
+	unsigned int num_locks;
+	bool no_sleep;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct buffer_tree trees[0];
+};
+
+struct dm_bufio_client {
+	struct block_device *bdev;
+	unsigned int block_size;
+	s8 sectors_per_block_bits;
+	bool no_sleep;
+	struct mutex lock;
+	spinlock_t spinlock;
+	int async_write_error;
+	void (*alloc_callback)(struct dm_buffer *);
+	void (*write_callback)(struct dm_buffer *);
+	struct kmem_cache *slab_buffer;
+	struct kmem_cache *slab_cache;
+	struct dm_io_client *dm_io;
+	struct list_head reserved_buffers;
+	unsigned int need_reserved_buffers;
+	unsigned int minimum_buffers;
+	sector_t start;
+	struct shrinker shrinker;
+	struct work_struct shrink_work;
+	atomic_long_t need_shrink;
+	wait_queue_head_t free_buffer_wait;
+	struct list_head client_list;
+	unsigned long oldest_buffer;
+	long: 64;
+	struct dm_buffer_cache cache;
+};
+
+struct lru_iter {
+	struct lru *lru;
+	struct list_head list;
+	struct lru_entry *stop;
+	struct lru_entry *e;
+};
+
+typedef enum evict_result (*b_predicate)(struct dm_buffer *, void *);
+
+struct lock_history {
+	struct dm_buffer_cache *cache;
+	bool write;
+	unsigned int previous;
+	unsigned int no_previous;
+};
+
+struct evict_wrapper {
+	struct lock_history *lh;
+	b_predicate pred;
+	void *context;
+};
+
+typedef bool (*iter_predicate)(struct lru_entry *, void *);
+
+typedef void (*b_release)(struct dm_buffer *);
+
+typedef enum it_action (*iter_fn)(struct dm_buffer *, void *);
+
+struct evict_params {
+	gfp_t gfp;
+	unsigned long age_hz;
+	unsigned long last_accessed;
+};
+
+struct write_context {
+	int no_wait;
+	struct list_head *write_list;
+};
+
+typedef enum evict_result (*le_predicate)(struct lru_entry *, void *);
+
+struct crypt_config;
+
+struct dm_crypt_request;
+
+struct crypt_iv_operations {
+	int (*ctr)(struct crypt_config *, struct dm_target *, const char *);
+	void (*dtr)(struct crypt_config *);
+	int (*init)(struct crypt_config *);
+	int (*wipe)(struct crypt_config *);
+	int (*generator)(struct crypt_config *, u8 *, struct dm_crypt_request *);
+	int (*post)(struct crypt_config *, u8 *, struct dm_crypt_request *);
+};
+
+struct iv_benbi_private {
+	int shift;
+};
+
+struct iv_lmk_private {
+	struct crypto_shash *hash_tfm;
+	u8 *seed;
+};
+
+struct iv_tcw_private {
+	struct crypto_shash *crc32_tfm;
+	u8 *iv_seed;
+	u8 *whitening;
+};
+
+struct iv_elephant_private {
+	struct crypto_skcipher *tfm;
+};
+
+struct crypt_config {
+	struct dm_dev *dev;
+	sector_t start;
+	struct percpu_counter n_allocated_pages;
+	struct workqueue_struct *io_queue;
+	struct workqueue_struct *crypt_queue;
+	spinlock_t write_thread_lock;
+	struct task_struct *write_thread;
+	struct rb_root write_tree;
+	char *cipher_string;
+	char *cipher_auth;
+	char *key_string;
+	const struct crypt_iv_operations *iv_gen_ops;
+	union {
+		struct iv_benbi_private benbi;
+		struct iv_lmk_private lmk;
+		struct iv_tcw_private tcw;
+		struct iv_elephant_private elephant;
+	} iv_gen_private;
+	u64 iv_offset;
+	unsigned int iv_size;
+	unsigned short sector_size;
+	unsigned char sector_shift;
+	union {
+		struct crypto_skcipher **tfms;
+		struct crypto_aead **tfms_aead;
+	} cipher_tfm;
+	unsigned int tfms_count;
+	unsigned long cipher_flags;
+	unsigned int dmreq_start;
+	unsigned int per_bio_data_size;
+	unsigned long flags;
+	unsigned int key_size;
+	unsigned int key_parts;
+	unsigned int key_extra_size;
+	unsigned int key_mac_size;
+	unsigned int integrity_tag_size;
+	unsigned int integrity_iv_size;
+	unsigned int on_disk_tag_size;
+	unsigned int tag_pool_max_sectors;
+	mempool_t tag_pool;
+	mempool_t req_pool;
+	mempool_t page_pool;
+	struct bio_set bs;
+	struct mutex bio_alloc_lock;
+	u8 *authenc_key;
+	u8 key[0];
+};
+
+struct convert_context;
+
+struct dm_crypt_request {
+	struct convert_context *ctx;
+	struct scatterlist sg_in[4];
+	struct scatterlist sg_out[4];
+	u64 iv_sector;
+};
+
+struct convert_context {
+	struct completion restart;
+	struct bio *bio_in;
+	struct bvec_iter iter_in;
+	struct bio *bio_out;
+	struct bvec_iter iter_out;
+	atomic_t cc_pending;
+	u64 cc_sector;
+	union {
+		struct skcipher_request *req;
+		struct aead_request *req_aead;
+	} r;
+	bool aead_recheck;
+	bool aead_failed;
+};
+
+enum flags {
+	DM_CRYPT_SUSPENDED = 0,
+	DM_CRYPT_KEY_VALID = 1,
+	DM_CRYPT_SAME_CPU = 2,
+	DM_CRYPT_NO_OFFLOAD = 3,
+	DM_CRYPT_NO_READ_WORKQUEUE = 4,
+	DM_CRYPT_NO_WRITE_WORKQUEUE = 5,
+	DM_CRYPT_WRITE_INLINE = 6,
+};
+
+enum cipher_flags {
+	CRYPT_MODE_INTEGRITY_AEAD = 0,
+	CRYPT_IV_LARGE_SECTORS = 1,
+	CRYPT_ENCRYPT_PREPROCESS = 2,
+};
+
+struct dm_crypt_io {
+	struct crypt_config *cc;
+	struct bio *base_bio;
+	u8 *integrity_metadata;
+	bool integrity_metadata_from_pool: 1;
+	struct work_struct work;
+	struct convert_context ctx;
+	atomic_t io_pending;
+	blk_status_t error;
+	sector_t sector;
+	struct bvec_iter saved_bi_iter;
+	struct rb_node rb_node;
+};
+
+struct dm_default_key_cipher {
+	const char *name;
+	enum blk_crypto_mode_num mode_num;
+	int key_size;
+};
+
+struct default_key_c {
+	struct dm_dev *dev;
+	sector_t start;
+	const char *cipher_string;
+	u64 iv_offset;
+	unsigned int sector_size;
+	unsigned int sector_bits;
+	struct blk_crypto_key key;
+	enum blk_crypto_key_type key_type;
+	u64 max_dun;
+};
+
+struct dm_exception_table {
+	uint32_t hash_mask;
+	unsigned int hash_shift;
+	struct hlist_bl_head *table;
+};
+
+typedef sector_t chunk_t;
+
+struct dm_exception_store;
+
+struct dm_snapshot {
+	struct rw_semaphore lock;
+	struct dm_dev *origin;
+	struct dm_dev *cow;
+	struct dm_target *ti;
+	struct list_head list;
+	int valid;
+	int snapshot_overflowed;
+	int active;
+	atomic_t pending_exceptions_count;
+	spinlock_t pe_allocation_lock;
+	sector_t exception_start_sequence;
+	sector_t exception_complete_sequence;
+	struct rb_root out_of_order_tree;
+	mempool_t pending_pool;
+	struct dm_exception_table pending;
+	struct dm_exception_table complete;
+	spinlock_t pe_lock;
+	spinlock_t tracked_chunk_lock;
+	struct hlist_head tracked_chunk_hash[16];
+	struct dm_exception_store *store;
+	unsigned int in_progress;
+	struct wait_queue_head in_progress_wait;
+	struct dm_kcopyd_client *kcopyd_client;
+	unsigned long state_bits;
+	chunk_t first_merging_chunk;
+	int num_merging_chunks;
+	bool merge_failed: 1;
+	bool discard_zeroes_cow: 1;
+	bool discard_passdown_origin: 1;
+	struct bio_list bios_queued_during_merge;
+};
+
+struct dm_exception_store_type;
+
+struct dm_exception_store {
+	struct dm_exception_store_type *type;
+	struct dm_snapshot *snap;
+	unsigned int chunk_size;
+	unsigned int chunk_mask;
+	unsigned int chunk_shift;
+	void *context;
+	bool userspace_supports_overflow;
+};
+
+struct dm_exception;
+
+struct dm_exception_store_type {
+	const char *name;
+	struct module *module;
+	int (*ctr)(struct dm_exception_store *, char *);
+	void (*dtr)(struct dm_exception_store *);
+	int (*read_metadata)(struct dm_exception_store *, int (*)(void *, chunk_t, chunk_t), void *);
+	int (*prepare_exception)(struct dm_exception_store *, struct dm_exception *);
+	void (*commit_exception)(struct dm_exception_store *, struct dm_exception *, int, void (*)(void *, int), void *);
+	int (*prepare_merge)(struct dm_exception_store *, chunk_t *, chunk_t *);
+	int (*commit_merge)(struct dm_exception_store *, int);
+	void (*drop_snapshot)(struct dm_exception_store *);
+	unsigned int (*status)(struct dm_exception_store *, status_type_t, char *, unsigned int);
+	void (*usage)(struct dm_exception_store *, sector_t *, sector_t *, sector_t *);
+	struct list_head list;
+};
+
+struct dm_exception {
+	struct hlist_bl_node hash_list;
+	chunk_t old_chunk;
+	chunk_t new_chunk;
+};
+
+struct origin {
+	struct block_device *bdev;
+	struct list_head hash_list;
+	struct list_head snapshots;
+};
+
+struct dm_snap_pending_exception {
+	struct dm_exception e;
+	struct bio_list origin_bios;
+	struct bio_list snapshot_bios;
+	struct dm_snapshot *snap;
+	int started;
+	int copy_error;
+	sector_t exception_sequence;
+	struct rb_node out_of_order_node;
+	struct bio *full_bio;
+	bio_end_io_t *full_bio_end_io;
+};
+
+struct dm_snap_tracked_chunk {
+	struct hlist_node node;
+	chunk_t chunk;
+};
+
+struct dm_origin {
+	struct dm_dev *dev;
+	struct dm_target *ti;
+	unsigned int split_boundary;
+	struct list_head hash_list;
+};
+
+struct dm_exception_table_lock {
+	struct hlist_bl_head *complete_slot;
+	struct hlist_bl_head *pending_slot;
+};
+
+struct transient_c {
+	sector_t next_free;
+};
+
+struct mdata_req {
+	struct dm_io_region *where;
+	struct dm_io_request *io_req;
+	struct work_struct work;
+	int result;
+};
+
+struct disk_exception {
+	__le64 old_chunk;
+	__le64 new_chunk;
+};
+
+struct commit_callback;
+
+struct pstore {
+	struct dm_exception_store *store;
+	int version;
+	int valid;
+	uint32_t exceptions_per_area;
+	void *area;
+	void *zero_area;
+	void *header_area;
+	chunk_t current_area;
+	chunk_t next_free;
+	uint32_t current_committed;
+	atomic_t pending_count;
+	uint32_t callback_count;
+	struct commit_callback *callbacks;
+	struct dm_io_client *io_client;
+	struct workqueue_struct *metadata_wq;
+};
+
+struct commit_callback {
+	void (*callback)(void *, int);
+	void *context;
+};
+
+struct disk_header {
+	__le32 magic;
+	__le32 valid;
+	__le32 version;
+	__le32 chunk_size;
+};
+
+struct core_exception {
+	uint64_t old_chunk;
+	uint64_t new_chunk;
+};
+
+enum verity_mode {
+	DM_VERITY_MODE_EIO = 0,
+	DM_VERITY_MODE_LOGGING = 1,
+	DM_VERITY_MODE_RESTART = 2,
+	DM_VERITY_MODE_PANIC = 3,
+};
+
+enum verity_block_type {
+	DM_VERITY_BLOCK_TYPE_DATA = 0,
+	DM_VERITY_BLOCK_TYPE_METADATA = 1,
+};
+
+struct dm_verity_fec_io {
+	struct rs_control *rs;
+	int erasures[253];
+	u8 *bufs[256];
+	unsigned int nbufs;
+	u8 *output;
+	unsigned int level;
+};
+
+struct dm_verity_fec;
+
+struct dm_verity {
+	struct dm_dev *data_dev;
+	struct dm_dev *hash_dev;
+	struct dm_target *ti;
+	struct dm_bufio_client *bufio;
+	char *alg_name;
+	struct crypto_ahash *ahash_tfm;
+	struct crypto_shash *shash_tfm;
+	u8 *root_digest;
+	u8 *salt;
+	u8 *initial_hashstate;
+	u8 *zero_digest;
+	unsigned int salt_size;
+	sector_t data_start;
+	sector_t hash_start;
+	sector_t data_blocks;
+	sector_t hash_blocks;
+	unsigned char data_dev_block_bits;
+	unsigned char hash_dev_block_bits;
+	unsigned char hash_per_block_bits;
+	unsigned char levels;
+	unsigned char version;
+	bool hash_failed: 1;
+	bool use_tasklet: 1;
+	unsigned char mb_max_msgs;
+	unsigned int digest_size;
+	unsigned int hash_reqsize;
+	enum verity_mode mode;
+	unsigned int corrupted_errs;
+	struct workqueue_struct *verify_wq;
+	sector_t hash_level_block[63];
+	struct dm_verity_fec *fec;
+	unsigned long *validated_blocks;
+	char *signature_key_desc;
+	struct dm_io_client *io;
+	mempool_t recheck_pool;
+};
+
+struct dm_verity_fec {
+	struct dm_dev *dev;
+	struct dm_bufio_client *data_bufio;
+	struct dm_bufio_client *bufio;
+	size_t io_size;
+	sector_t start;
+	sector_t blocks;
+	sector_t rounds;
+	sector_t hash_blocks;
+	unsigned char roots;
+	unsigned char rsn;
+	mempool_t rs_pool;
+	mempool_t prealloc_pool;
+	mempool_t extra_pool;
+	mempool_t output_pool;
+	struct kmem_cache *cache;
+};
+
+struct pending_block {
+	void *data;
+	sector_t blkno;
+	u8 want_digest[64];
+	u8 real_digest[64];
+};
+
+struct dm_verity_io {
+	struct dm_verity *v;
+	bio_end_io_t *orig_bi_end_io;
+	struct bvec_iter iter;
+	sector_t block;
+	unsigned int n_blocks;
+	bool in_tasklet;
+	struct work_struct work;
+	u8 tmp_digest[64];
+	int num_pending;
+	struct pending_block pending_blocks[2];
+};
+
+struct dm_verity_prefetch_work {
+	struct work_struct work;
+	struct dm_verity *v;
+	unsigned short ioprio;
+	sector_t block;
+	unsigned int n_blocks;
+};
+
+struct buffer_aux {
+	int hash_verified;
+};
+
+struct dm_verity_sig_opts {
+	unsigned int sig_size;
+	u8 *sig;
+};
+
+struct dm_user_message {
+	__u64 seq;
+	__u64 type;
+	__u64 flags;
+	__u64 sector;
+	__u64 len;
+	__u8 buf[0];
+};
+
+struct target;
+
+struct message {
+	struct dm_user_message msg;
+	struct bio *bio;
+	size_t posn_to_user;
+	size_t total_to_user;
+	size_t posn_from_user;
+	size_t total_from_user;
+	struct list_head from_user;
+	struct list_head to_user;
+	u64 return_type;
+	u64 return_flags;
+	struct delayed_work work;
+	bool delayed;
+	struct target *t;
+};
+
+struct target {
+	struct mutex lock;
+	struct wait_queue_head wq;
+	mempool_t message_pool;
+	u64 next_seq_to_map;
+	u64 next_seq_to_user;
+	struct list_head to_user;
+	struct miscdevice miscdev;
+	struct kref references;
+	int dm_destroyed;
+	bool daemon_terminated;
+};
+
+struct channel {
+	struct target *target;
+	struct mutex lock;
+	struct message *cur_to_user;
+	struct message *cur_from_user;
+	ssize_t to_user_error;
+	ssize_t from_user_error;
+	struct list_head from_user;
+	struct message scratch_message_from_user;
+};
+
+enum scrub_type {
+	SCRUB_UNKNOWN = 0,
+	SCRUB_NONE = 1,
+	SCRUB_SW_PROG = 2,
+	SCRUB_SW_SRC = 3,
+	SCRUB_SW_PROG_SRC = 4,
+	SCRUB_SW_TUNABLE = 5,
+	SCRUB_HW_PROG = 6,
+	SCRUB_HW_SRC = 7,
+	SCRUB_HW_PROG_SRC = 8,
+	SCRUB_HW_TUNABLE = 9,
+};
+
+enum edac_mc_layer_type {
+	EDAC_MC_LAYER_BRANCH = 0,
+	EDAC_MC_LAYER_CHANNEL = 1,
+	EDAC_MC_LAYER_SLOT = 2,
+	EDAC_MC_LAYER_CHIP_SELECT = 3,
+	EDAC_MC_LAYER_ALL_MEM = 4,
+};
+
+enum hw_event_mc_err_type {
+	HW_EVENT_ERR_CORRECTED = 0,
+	HW_EVENT_ERR_UNCORRECTED = 1,
+	HW_EVENT_ERR_DEFERRED = 2,
+	HW_EVENT_ERR_FATAL = 3,
+	HW_EVENT_ERR_INFO = 4,
+};
+
+enum dev_type {
+	DEV_UNKNOWN = 0,
+	DEV_X1 = 1,
+	DEV_X2 = 2,
+	DEV_X4 = 3,
+	DEV_X8 = 4,
+	DEV_X16 = 5,
+	DEV_X32 = 6,
+	DEV_X64 = 7,
+};
+
+enum mem_type___2 {
+	MEM_EMPTY = 0,
+	MEM_RESERVED = 1,
+	MEM_UNKNOWN = 2,
+	MEM_FPM = 3,
+	MEM_EDO = 4,
+	MEM_BEDO = 5,
+	MEM_SDR = 6,
+	MEM_RDR = 7,
+	MEM_DDR = 8,
+	MEM_RDDR = 9,
+	MEM_RMBS = 10,
+	MEM_DDR2 = 11,
+	MEM_FB_DDR2 = 12,
+	MEM_RDDR2 = 13,
+	MEM_XDR = 14,
+	MEM_DDR3 = 15,
+	MEM_RDDR3 = 16,
+	MEM_LRDDR3 = 17,
+	MEM_LPDDR3 = 18,
+	MEM_DDR4 = 19,
+	MEM_RDDR4 = 20,
+	MEM_LRDDR4 = 21,
+	MEM_LPDDR4 = 22,
+	MEM_DDR5 = 23,
+	MEM_RDDR5 = 24,
+	MEM_LRDDR5 = 25,
+	MEM_NVDIMM = 26,
+	MEM_WIO2 = 27,
+	MEM_HBM2 = 28,
+};
+
+enum edac_type {
+	EDAC_UNKNOWN = 0,
+	EDAC_NONE = 1,
+	EDAC_RESERVED = 2,
+	EDAC_PARITY = 3,
+	EDAC_EC = 4,
+	EDAC_SECDED = 5,
+	EDAC_S2ECD2ED = 6,
+	EDAC_S4ECD4ED = 7,
+	EDAC_S8ECD8ED = 8,
+	EDAC_S16ECD16ED = 9,
+};
+
+struct mcidev_sysfs_attribute;
+
+struct edac_raw_error_desc {
+	char location[256];
+	char label[296];
+	long grain;
+	u16 error_count;
+	enum hw_event_mc_err_type type;
+	int top_layer;
+	int mid_layer;
+	int low_layer;
+	unsigned long page_frame_number;
+	unsigned long offset_in_page;
+	unsigned long syndrome;
+	const char *msg;
+	const char *other_detail;
+};
+
+struct csrow_info;
+
+struct edac_mc_layer;
+
+struct dimm_info;
+
+struct mem_ctl_info {
+	struct device dev;
+	struct bus_type *bus;
+	struct list_head link;
+	struct module *owner;
+	unsigned long mtype_cap;
+	unsigned long edac_ctl_cap;
+	unsigned long edac_cap;
+	unsigned long scrub_cap;
+	enum scrub_type scrub_mode;
+	int (*set_sdram_scrub_rate)(struct mem_ctl_info *, u32);
+	int (*get_sdram_scrub_rate)(struct mem_ctl_info *);
+	void (*edac_check)(struct mem_ctl_info *);
+	unsigned long (*ctl_page_to_phys)(struct mem_ctl_info *, unsigned long);
+	int mc_idx;
+	struct csrow_info **csrows;
+	unsigned int nr_csrows;
+	unsigned int num_cschannel;
+	unsigned int n_layers;
+	struct edac_mc_layer *layers;
+	bool csbased;
+	unsigned int tot_dimms;
+	struct dimm_info **dimms;
+	struct device *pdev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	unsigned long start_time;
+	u32 ce_noinfo_count;
+	u32 ue_noinfo_count;
+	u32 ue_mc;
+	u32 ce_mc;
+	struct completion complete;
+	const struct mcidev_sysfs_attribute *mc_driver_sysfs_attributes;
+	struct delayed_work work;
+	struct edac_raw_error_desc error_desc;
+	int op_state;
+	struct dentry *debugfs;
+	u8 fake_inject_layer[3];
+	bool fake_inject_ue;
+	u16 fake_inject_count;
+};
+
+struct rank_info;
+
+struct csrow_info {
+	struct device dev;
+	unsigned long first_page;
+	unsigned long last_page;
+	unsigned long page_mask;
+	int csrow_idx;
+	u32 ue_count;
+	u32 ce_count;
+	struct mem_ctl_info *mci;
+	u32 nr_channels;
+	struct rank_info **channels;
+};
+
+struct rank_info {
+	int chan_idx;
+	struct csrow_info *csrow;
+	struct dimm_info *dimm;
+	u32 ce_count;
+};
+
+struct dimm_info {
+	struct device dev;
+	char label[32];
+	unsigned int location[3];
+	struct mem_ctl_info *mci;
+	unsigned int idx;
+	u32 grain;
+	enum dev_type dtype;
+	enum mem_type___2 mtype;
+	enum edac_type edac_mode;
+	u32 nr_pages;
+	unsigned int csrow;
+	unsigned int cschannel;
+	u16 smbios_handle;
+	u32 ce_count;
+	u32 ue_count;
+};
+
+struct edac_mc_layer {
+	enum edac_mc_layer_type type;
+	unsigned int size;
+	bool is_virt_csrow;
+};
+
+struct edac_device_counter {
+	u32 ue_count;
+	u32 ce_count;
+};
+
+struct edac_dev_sysfs_attribute;
+
+struct edac_device_instance;
+
+struct edac_device_block;
+
+struct edac_dev_sysfs_block_attribute;
+
+struct edac_device_ctl_info {
+	struct list_head link;
+	struct module *owner;
+	int dev_idx;
+	int log_ue;
+	int log_ce;
+	int panic_on_ue;
+	unsigned int poll_msec;
+	unsigned long delay;
+	struct edac_dev_sysfs_attribute *sysfs_attributes;
+	struct bus_type *edac_subsys;
+	int op_state;
+	struct delayed_work work;
+	void (*edac_check)(struct edac_device_ctl_info *);
+	struct device *dev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	unsigned long start_time;
+	struct completion removal_complete;
+	char name[32];
+	u32 nr_instances;
+	struct edac_device_instance *instances;
+	struct edac_device_block *blocks;
+	struct edac_dev_sysfs_block_attribute *attribs;
+	struct edac_device_counter counters;
+	struct kobject kobj;
+};
+
+struct edac_dev_sysfs_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_ctl_info *, char *);
+	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
+};
+
+struct edac_device_instance {
+	struct edac_device_ctl_info *ctl;
+	char name[35];
+	struct edac_device_counter counters;
+	u32 nr_blocks;
+	struct edac_device_block *blocks;
+	struct kobject kobj;
+};
+
+struct edac_device_block {
+	struct edac_device_instance *instance;
+	char name[32];
+	struct edac_device_counter counters;
+	int nr_attribs;
+	struct edac_dev_sysfs_block_attribute *block_attributes;
+	struct kobject kobj;
+};
+
+struct edac_dev_sysfs_block_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct kobject *, struct attribute *, char *);
+	ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
+	struct edac_device_block *block;
+	unsigned int value;
+};
+
+struct dev_ch_attribute {
+	struct device_attribute attr;
+	unsigned int channel;
+};
+
+struct ctl_info_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_ctl_info *, char *);
+	ssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);
+};
+
+struct instance_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_device_instance *, char *);
+	ssize_t (*store)(struct edac_device_instance *, const char *, size_t);
+};
+
+struct edac_pci_counter {
+	atomic_t pe_count;
+	atomic_t npe_count;
+};
+
+struct edac_pci_ctl_info {
+	struct list_head link;
+	int pci_idx;
+	struct bus_type *edac_subsys;
+	int op_state;
+	struct delayed_work work;
+	void (*edac_check)(struct edac_pci_ctl_info *);
+	struct device *dev;
+	const char *mod_name;
+	const char *ctl_name;
+	const char *dev_name;
+	void *pvt_info;
+	unsigned long start_time;
+	struct completion complete;
+	char name[32];
+	struct edac_pci_counter counters;
+	struct kobject kobj;
+};
+
+struct edac_pci_gen_data {
+	int edac_idx;
+};
+
+struct edac_pci_dev_attribute {
+	struct attribute attr;
+	void *value;
+	ssize_t (*show)(void *, char *);
+	ssize_t (*store)(void *, const char *, size_t);
+};
+
+struct instance_attribute___2 {
+	struct attribute attr;
+	ssize_t (*show)(struct edac_pci_ctl_info *, char *);
+	ssize_t (*store)(struct edac_pci_ctl_info *, const char *, size_t);
+};
+
+typedef void (*pci_parity_check_fn_t)(struct pci_dev *);
+
+enum opp_table_access {
+	OPP_TABLE_ACCESS_UNKNOWN = 0,
+	OPP_TABLE_ACCESS_EXCLUSIVE = 1,
+	OPP_TABLE_ACCESS_SHARED = 2,
+};
+
+enum dev_pm_opp_event {
+	OPP_EVENT_ADD = 0,
+	OPP_EVENT_REMOVE = 1,
+	OPP_EVENT_ENABLE = 2,
+	OPP_EVENT_DISABLE = 3,
+	OPP_EVENT_ADJUST_VOLTAGE = 4,
+};
+
+struct dev_pm_opp_supply;
+
+struct dev_pm_opp_icc_bw;
+
+struct dev_pm_opp {
+	struct list_head node;
+	struct kref kref;
+	bool available;
+	bool dynamic;
+	bool turbo;
+	bool suspend;
+	bool removed;
+	unsigned long *rates;
+	unsigned int level;
+	struct dev_pm_opp_supply *supplies;
+	struct dev_pm_opp_icc_bw *bandwidth;
+	unsigned long clock_latency_ns;
+	struct dev_pm_opp **required_opps;
+	struct opp_table *opp_table;
+	struct device_node *np;
+	struct dentry *dentry;
+	const char *of_name;
+};
+
+struct dev_pm_opp_supply {
+	unsigned long u_volt;
+	unsigned long u_volt_min;
+	unsigned long u_volt_max;
+	unsigned long u_amp;
+	unsigned long u_watt;
+};
+
+struct dev_pm_opp_icc_bw {
+	u32 avg;
+	u32 peak;
+};
+
+typedef int (*config_clks_t)(struct device *, struct opp_table *, struct dev_pm_opp *, void *, bool);
+
+typedef int (*config_regulators_t)(struct device *, struct dev_pm_opp *, struct dev_pm_opp *, struct regulator **, unsigned int);
+
+struct icc_path;
+
+struct opp_table {
+	struct list_head node;
+	struct list_head lazy;
+	struct blocking_notifier_head head;
+	struct list_head dev_list;
+	struct list_head opp_list;
+	struct kref kref;
+	struct mutex lock;
+	struct device_node *np;
+	unsigned long clock_latency_ns_max;
+	unsigned int voltage_tolerance_v1;
+	unsigned int parsed_static_opps;
+	enum opp_table_access shared_opp;
+	unsigned long rate_clk_single;
+	struct dev_pm_opp *current_opp;
+	struct dev_pm_opp *suspend_opp;
+	struct mutex genpd_virt_dev_lock;
+	struct device **genpd_virt_devs;
+	struct opp_table **required_opp_tables;
+	unsigned int required_opp_count;
+	unsigned int *supported_hw;
+	unsigned int supported_hw_count;
+	const char *prop_name;
+	config_clks_t config_clks;
+	struct clk **clks;
+	struct clk *clk;
+	int clk_count;
+	config_regulators_t config_regulators;
+	struct regulator **regulators;
+	int regulator_count;
+	struct icc_path **paths;
+	unsigned int path_count;
+	bool enabled;
+	bool is_genpd;
+	int (*set_required_opps)(struct device *, struct opp_table *, struct dev_pm_opp *, bool);
+	struct dentry *dentry;
+	char dentry_name[255];
+};
+
+struct opp_device {
+	struct list_head node;
+	const struct device *dev;
+	struct dentry *dentry;
+};
+
+struct opp_config_data {
+	struct opp_table *opp_table;
+	unsigned int flags;
+};
+
+struct dev_pm_opp_data {
+	unsigned int level;
+	unsigned long freq;
+	unsigned long u_volt;
+};
+
+struct dev_pm_opp_config {
+	const char * const *clk_names;
+	config_clks_t config_clks;
+	const char *prop_name;
+	config_regulators_t config_regulators;
+	const unsigned int *supported_hw;
+	unsigned int supported_hw_count;
+	const char * const *regulator_names;
+	const char * const *genpd_names;
+	struct device ***virt_devs;
+};
+
+struct em_data_callback {};
+
+struct cpufreq_policy_data;
+
+struct freq_attr;
+
+struct cpufreq_driver {
+	char name[16];
+	u16 flags;
+	void *driver_data;
+	int (*init)(struct cpufreq_policy *);
+	int (*verify)(struct cpufreq_policy_data *);
+	int (*setpolicy)(struct cpufreq_policy *);
+	int (*target)(struct cpufreq_policy *, unsigned int, unsigned int);
+	int (*target_index)(struct cpufreq_policy *, unsigned int);
+	unsigned int (*fast_switch)(struct cpufreq_policy *, unsigned int);
+	void (*adjust_perf)(unsigned int, unsigned long, unsigned long, unsigned long);
+	unsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);
+	int (*target_intermediate)(struct cpufreq_policy *, unsigned int);
+	unsigned int (*get)(unsigned int);
+	void (*update_limits)(unsigned int);
+	int (*bios_limit)(int, unsigned int *);
+	int (*online)(struct cpufreq_policy *);
+	int (*offline)(struct cpufreq_policy *);
+	int (*exit)(struct cpufreq_policy *);
+	int (*suspend)(struct cpufreq_policy *);
+	int (*resume)(struct cpufreq_policy *);
+	void (*ready)(struct cpufreq_policy *);
+	struct freq_attr **attr;
+	bool boost_enabled;
+	int (*set_boost)(struct cpufreq_policy *, int);
+	void (*register_em)(struct cpufreq_policy *);
+};
+
+struct cpufreq_policy_data {
+	struct cpufreq_cpuinfo cpuinfo;
+	struct cpufreq_frequency_table *freq_table;
+	unsigned int cpu;
+	unsigned int min;
+	unsigned int max;
+};
+
+struct freq_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpufreq_policy *, char *);
+	ssize_t (*store)(struct cpufreq_policy *, const char *, size_t);
+};
+
+struct cpufreq_stats {
+	unsigned int total_trans;
+	unsigned long long last_time;
+	unsigned int max_state;
+	unsigned int state_num;
+	unsigned int last_index;
+	u64 *time_in_state;
+	unsigned int *freq_table;
+	unsigned int *trans_table;
+	unsigned int reset_pending;
+	unsigned long long reset_time;
+};
+
+struct cpu_freqs {
+	unsigned int offset;
+	unsigned int max_state;
+	unsigned int last_index;
+	unsigned int freq_table[0];
+};
+
+struct dbs_data;
+
+struct policy_dbs_info;
+
+struct dbs_governor {
+	struct cpufreq_governor gov;
+	struct kobj_type kobj_type;
+	struct dbs_data *gdbs_data;
+	unsigned int (*gov_dbs_update)(struct cpufreq_policy *);
+	struct policy_dbs_info * (*alloc)();
+	void (*free)(struct policy_dbs_info *);
+	int (*init)(struct dbs_data *);
+	void (*exit)(struct dbs_data *);
+	void (*start)(struct cpufreq_policy *);
+};
+
+struct dbs_data {
+	struct gov_attr_set attr_set;
+	struct dbs_governor *gov;
+	void *tuners;
+	unsigned int ignore_nice_load;
+	unsigned int sampling_rate;
+	unsigned int sampling_down_factor;
+	unsigned int up_threshold;
+	unsigned int io_is_busy;
+};
+
+struct policy_dbs_info {
+	struct cpufreq_policy *policy;
+	struct mutex update_mutex;
+	u64 last_sample_time;
+	s64 sample_delay_ns;
+	atomic_t work_count;
+	struct irq_work irq_work;
+	struct work_struct work;
+	struct dbs_data *dbs_data;
+	struct list_head list;
+	unsigned int rate_mult;
+	unsigned int idle_periods;
+	bool is_shared;
+	bool work_in_progress;
+};
+
+struct cs_policy_dbs_info {
+	struct policy_dbs_info policy_dbs;
+	unsigned int down_skip;
+	unsigned int requested_freq;
+};
+
+struct cs_dbs_tuners {
+	unsigned int down_threshold;
+	unsigned int freq_step;
+};
+
+struct cpu_dbs_info {
+	u64 prev_cpu_idle;
+	u64 prev_update_time;
+	u64 prev_cpu_nice;
+	unsigned int prev_load;
+	struct update_util_data update_util;
+	struct policy_dbs_info *policy_dbs;
+};
+
+struct pstate_data {
+	int current_pstate;
+	int min_pstate;
+	int max_pstate;
+	int max_pstate_physical;
+	int perf_ctl_scaling;
+	int scaling;
+	int turbo_pstate;
+	unsigned int min_freq;
+	unsigned int max_freq;
+	unsigned int turbo_freq;
+};
+
+struct vid_data {
+	int min;
+	int max;
+	int turbo;
+	int32_t ratio;
+};
+
+struct sample {
+	int32_t core_avg_perf;
+	int32_t busy_scaled;
+	u64 aperf;
+	u64 mperf;
+	u64 tsc;
+	u64 time;
+};
+
+struct cpudata {
+	int cpu;
+	unsigned int policy;
+	struct update_util_data update_util;
+	bool update_util_set;
+	struct pstate_data pstate;
+	struct vid_data vid;
+	u64 last_update;
+	u64 last_sample_time;
+	u64 aperf_mperf_shift;
+	u64 prev_aperf;
+	u64 prev_mperf;
+	u64 prev_tsc;
+	u64 prev_cummulative_iowait;
+	struct sample sample;
+	int32_t min_perf_ratio;
+	int32_t max_perf_ratio;
+	struct acpi_processor_performance acpi_perf_data;
+	bool valid_pss_table;
+	unsigned int iowait_boost;
+	s16 epp_powersave;
+	s16 epp_policy;
+	s16 epp_default;
+	s16 epp_cached;
+	u64 hwp_req_cached;
+	u64 hwp_cap_cached;
+	u64 last_io_update;
+	unsigned int sched_flags;
+	u32 hwp_boost_min;
+	bool suspended;
+	struct delayed_work hwp_notify_work;
+};
+
+struct pstate_funcs {
+	int (*get_max)(int);
+	int (*get_max_physical)(int);
+	int (*get_min)(int);
+	int (*get_turbo)(int);
+	int (*get_scaling)();
+	int (*get_cpu_scaling)(int);
+	int (*get_aperf_mperf_shift)();
+	u64 (*get_val)(struct cpudata *, int);
+	void (*get_vid)(struct cpudata *);
+};
+
+struct global_params {
+	bool no_turbo;
+	bool turbo_disabled;
+	bool turbo_disabled_mf;
+	int max_perf_pct;
+	int min_perf_pct;
+};
+
+enum energy_perf_value_index___2 {
+	EPP_INDEX_DEFAULT = 0,
+	EPP_INDEX_PERFORMANCE = 1,
+	EPP_INDEX_BALANCE_PERFORMANCE = 2,
+	EPP_INDEX_BALANCE_POWERSAVE = 3,
+	EPP_INDEX_POWERSAVE = 4,
+};
+
+enum acpi_preferred_pm_profiles {
+	PM_UNSPECIFIED = 0,
+	PM_DESKTOP = 1,
+	PM_MOBILE = 2,
+	PM_WORKSTATION = 3,
+	PM_ENTERPRISE_SERVER = 4,
+	PM_SOHO_SERVER = 5,
+	PM_APPLIANCE_PC = 6,
+	PM_PERFORMANCE_SERVER = 7,
+	PM_TABLET = 8,
+	NR_PM_PROFILES = 9,
+};
+
+enum {
+	PSS = 0,
+	PPC = 1,
+};
+
+struct cpuidle_governor {
+	char name[16];
+	struct list_head governor_list;
+	unsigned int rating;
+	int (*enable)(struct cpuidle_driver *, struct cpuidle_device *);
+	void (*disable)(struct cpuidle_driver *, struct cpuidle_device *);
+	int (*select)(struct cpuidle_driver *, struct cpuidle_device *, bool *);
+	void (*reflect)(struct cpuidle_device *, int);
+};
+
+struct cpuidle_state_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpuidle_state *, struct cpuidle_state_usage *, char *);
+	ssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t);
+};
+
+struct cpuidle_state_kobj {
+	struct cpuidle_state *state;
+	struct cpuidle_state_usage *state_usage;
+	struct completion kobj_unregister;
+	struct kobject kobj;
+	struct cpuidle_device *device;
+};
+
+struct cpuidle_device_kobj {
+	struct cpuidle_device *dev;
+	struct completion kobj_unregister;
+	struct kobject kobj;
+};
+
+struct cpuidle_attr {
+	struct attribute attr;
+	ssize_t (*show)(struct cpuidle_device *, char *);
+	ssize_t (*store)(struct cpuidle_device *, const char *, size_t);
+};
+
+struct menu_device {
+	int needs_update;
+	int tick_wakeup;
+	u64 next_timer_ns;
+	unsigned int bucket;
+	unsigned int correction_factor[12];
+	unsigned int intervals[8];
+	int interval_ptr;
+};
+
+struct mmc_host;
+
+struct mmc_request;
+
+typedef void (*btf_trace_mmc_request_start)(void *, struct mmc_host *, struct mmc_request *);
+
+typedef unsigned int mmc_pm_flag_t;
+
+struct mmc_ios {
+	unsigned int clock;
+	unsigned short vdd;
+	unsigned int power_delay_ms;
+	unsigned char bus_mode;
+	unsigned char chip_select;
+	unsigned char power_mode;
+	unsigned char bus_width;
+	unsigned char timing;
+	unsigned char signal_voltage;
+	unsigned char drv_type;
+	bool enhanced_strobe;
+};
+
+struct mmc_ctx {
+	struct task_struct *task;
+};
+
+struct mmc_slot {
+	int cd_irq;
+	bool cd_wake_enabled;
+	void *handler_priv;
+};
+
+struct mmc_supply {
+	struct regulator *vmmc;
+	struct regulator *vqmmc;
+};
+
+struct mmc_host_ops;
+
+struct mmc_pwrseq;
+
+struct mmc_card;
+
+struct mmc_bus_ops;
+
+struct mmc_cqe_ops;
+
+struct mmc_host {
+	struct device *parent;
+	struct device class_dev;
+	int index;
+	const struct mmc_host_ops *ops;
+	struct mmc_pwrseq *pwrseq;
+	unsigned int f_min;
+	unsigned int f_max;
+	unsigned int f_init;
+	u32 ocr_avail;
+	u32 ocr_avail_sdio;
+	u32 ocr_avail_sd;
+	u32 ocr_avail_mmc;
+	struct wakeup_source *ws;
+	u32 max_current_330;
+	u32 max_current_300;
+	u32 max_current_180;
+	u32 caps;
+	u32 caps2;
+	int fixed_drv_type;
+	mmc_pm_flag_t pm_caps;
+	unsigned int max_seg_size;
+	unsigned short max_segs;
+	unsigned short unused;
+	unsigned int max_req_size;
+	unsigned int max_blk_size;
+	unsigned int max_blk_count;
+	unsigned int max_busy_timeout;
+	spinlock_t lock;
+	struct mmc_ios ios;
+	unsigned int use_spi_crc: 1;
+	unsigned int claimed: 1;
+	unsigned int doing_init_tune: 1;
+	unsigned int can_retune: 1;
+	unsigned int doing_retune: 1;
+	unsigned int retune_now: 1;
+	unsigned int retune_paused: 1;
+	unsigned int retune_crc_disable: 1;
+	unsigned int can_dma_map_merge: 1;
+	unsigned int vqmmc_enabled: 1;
+	int rescan_disable;
+	int rescan_entered;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct timer_list retune_timer;
+	bool trigger_card_event;
+	struct mmc_card *card;
+	wait_queue_head_t wq;
+	struct mmc_ctx *claimer;
+	int claim_cnt;
+	struct mmc_ctx default_ctx;
+	struct delayed_work detect;
+	int detect_change;
+	struct mmc_slot slot;
+	const struct mmc_bus_ops *bus_ops;
+	unsigned int sdio_irqs;
+	struct task_struct *sdio_irq_thread;
+	struct work_struct sdio_irq_work;
+	bool sdio_irq_pending;
+	atomic_t sdio_irq_thread_abort;
+	mmc_pm_flag_t pm_flags;
+	struct led_trigger *led;
+	bool regulator_enabled;
+	struct mmc_supply supply;
+	struct dentry *debugfs_root;
+	struct mmc_request *ongoing_mrq;
+	unsigned int actual_clock;
+	unsigned int slotno;
+	int dsr_req;
+	u32 dsr;
+	const struct mmc_cqe_ops *cqe_ops;
+	void *cqe_private;
+	int cqe_qdepth;
+	bool cqe_enabled;
+	bool cqe_on;
+	bool cqe_recovery_reset_always;
+	struct blk_crypto_profile crypto_profile;
+	bool hsq_enabled;
+	int hsq_depth;
+	u32 err_stats[15];
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	long: 64;
+	long: 64;
+	unsigned long private[0];
+};
+
+struct mmc_host_ops {
+	void (*post_req)(struct mmc_host *, struct mmc_request *, int);
+	void (*pre_req)(struct mmc_host *, struct mmc_request *);
+	void (*request)(struct mmc_host *, struct mmc_request *);
+	int (*request_atomic)(struct mmc_host *, struct mmc_request *);
+	void (*set_ios)(struct mmc_host *, struct mmc_ios *);
+	int (*get_ro)(struct mmc_host *);
+	int (*get_cd)(struct mmc_host *);
+	void (*enable_sdio_irq)(struct mmc_host *, int);
+	void (*ack_sdio_irq)(struct mmc_host *);
+	void (*init_card)(struct mmc_host *, struct mmc_card *);
+	int (*start_signal_voltage_switch)(struct mmc_host *, struct mmc_ios *);
+	int (*card_busy)(struct mmc_host *);
+	int (*execute_tuning)(struct mmc_host *, u32);
+	int (*prepare_hs400_tuning)(struct mmc_host *, struct mmc_ios *);
+	int (*execute_hs400_tuning)(struct mmc_host *, struct mmc_card *);
+	int (*prepare_sd_hs_tuning)(struct mmc_host *, struct mmc_card *);
+	int (*execute_sd_hs_tuning)(struct mmc_host *, struct mmc_card *);
+	int (*hs400_prepare_ddr)(struct mmc_host *);
+	void (*hs400_downgrade)(struct mmc_host *);
+	void (*hs400_complete)(struct mmc_host *);
+	void (*hs400_enhanced_strobe)(struct mmc_host *, struct mmc_ios *);
+	int (*select_drive_strength)(struct mmc_card *, unsigned int, int, int, int *);
+	void (*card_hw_reset)(struct mmc_host *);
+	void (*card_event)(struct mmc_host *);
+	int (*multi_io_quirk)(struct mmc_card *, unsigned int, int);
+	int (*init_sd_express)(struct mmc_host *, struct mmc_ios *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct mmc_command;
+
+struct mmc_data;
+
+struct mmc_request {
+	struct mmc_command *sbc;
+	struct mmc_command *cmd;
+	struct mmc_data *data;
+	struct mmc_command *stop;
+	struct completion completion;
+	struct completion cmd_completion;
+	void (*done)(struct mmc_request *);
+	void (*recovery_notifier)(struct mmc_request *);
+	struct mmc_host *host;
+	bool cap_cmd_during_tfr;
+	int tag;
+	const struct bio_crypt_ctx *crypto_ctx;
+	int crypto_key_slot;
+};
+
+struct mmc_command {
+	u32 opcode;
+	u32 arg;
+	u32 resp[4];
+	unsigned int flags;
+	unsigned int retries;
+	int error;
+	unsigned int busy_timeout;
+	struct mmc_data *data;
+	struct mmc_request *mrq;
+};
+
+struct mmc_data {
+	unsigned int timeout_ns;
+	unsigned int timeout_clks;
+	unsigned int blksz;
+	unsigned int blocks;
+	unsigned int blk_addr;
+	int error;
+	unsigned int flags;
+	unsigned int bytes_xfered;
+	struct mmc_command *stop;
+	struct mmc_request *mrq;
+	unsigned int sg_len;
+	int sg_count;
+	struct scatterlist *sg;
+	s32 host_cookie;
+};
+
+struct mmc_cid {
+	unsigned int manfid;
+	char prod_name[8];
+	unsigned char prv;
+	unsigned int serial;
+	unsigned short oemid;
+	unsigned short year;
+	unsigned char hwrev;
+	unsigned char fwrev;
+	unsigned char month;
+};
+
+struct mmc_csd {
+	unsigned char structure;
+	unsigned char mmca_vsn;
+	unsigned short cmdclass;
+	unsigned short taac_clks;
+	unsigned int taac_ns;
+	unsigned int c_size;
+	unsigned int r2w_factor;
+	unsigned int max_dtr;
+	unsigned int erase_size;
+	unsigned int read_blkbits;
+	unsigned int write_blkbits;
+	unsigned int capacity;
+	unsigned int read_partial: 1;
+	unsigned int read_misalign: 1;
+	unsigned int write_partial: 1;
+	unsigned int write_misalign: 1;
+	unsigned int dsr_imp: 1;
+};
+
+struct mmc_ext_csd {
+	u8 rev;
+	u8 erase_group_def;
+	u8 sec_feature_support;
+	u8 rel_sectors;
+	u8 rel_param;
+	bool enhanced_rpmb_supported;
+	u8 part_config;
+	u8 cache_ctrl;
+	u8 rst_n_function;
+	u8 max_packed_writes;
+	u8 max_packed_reads;
+	u8 packed_event_en;
+	unsigned int part_time;
+	unsigned int sa_timeout;
+	unsigned int generic_cmd6_time;
+	unsigned int power_off_longtime;
+	u8 power_off_notification;
+	unsigned int hs_max_dtr;
+	unsigned int hs200_max_dtr;
+	unsigned int sectors;
+	unsigned int hc_erase_size;
+	unsigned int hc_erase_timeout;
+	unsigned int sec_trim_mult;
+	unsigned int sec_erase_mult;
+	unsigned int trim_timeout;
+	bool partition_setting_completed;
+	unsigned long long enhanced_area_offset;
+	unsigned int enhanced_area_size;
+	unsigned int cache_size;
+	bool hpi_en;
+	bool hpi;
+	unsigned int hpi_cmd;
+	bool bkops;
+	bool man_bkops_en;
+	bool auto_bkops_en;
+	unsigned int data_sector_size;
+	unsigned int data_tag_unit_size;
+	unsigned int boot_ro_lock;
+	bool boot_ro_lockable;
+	bool ffu_capable;
+	bool cmdq_en;
+	bool cmdq_support;
+	unsigned int cmdq_depth;
+	u8 fwrev[8];
+	u8 raw_exception_status;
+	u8 raw_partition_support;
+	u8 raw_rpmb_size_mult;
+	u8 raw_erased_mem_count;
+	u8 strobe_support;
+	u8 raw_ext_csd_structure;
+	u8 raw_card_type;
+	u8 raw_driver_strength;
+	u8 out_of_int_time;
+	u8 raw_pwr_cl_52_195;
+	u8 raw_pwr_cl_26_195;
+	u8 raw_pwr_cl_52_360;
+	u8 raw_pwr_cl_26_360;
+	u8 raw_s_a_timeout;
+	u8 raw_hc_erase_gap_size;
+	u8 raw_erase_timeout_mult;
+	u8 raw_hc_erase_grp_size;
+	u8 raw_boot_mult;
+	u8 raw_sec_trim_mult;
+	u8 raw_sec_erase_mult;
+	u8 raw_sec_feature_support;
+	u8 raw_trim_mult;
+	u8 raw_pwr_cl_200_195;
+	u8 raw_pwr_cl_200_360;
+	u8 raw_pwr_cl_ddr_52_195;
+	u8 raw_pwr_cl_ddr_52_360;
+	u8 raw_pwr_cl_ddr_200_360;
+	u8 raw_bkops_status;
+	u8 raw_sectors[4];
+	u8 pre_eol_info;
+	u8 device_life_time_est_typ_a;
+	u8 device_life_time_est_typ_b;
+	unsigned int feature_support;
+};
+
+struct sd_scr {
+	unsigned char sda_vsn;
+	unsigned char sda_spec3;
+	unsigned char sda_spec4;
+	unsigned char sda_specx;
+	unsigned char bus_widths;
+	unsigned char cmds;
+};
+
+struct sd_ssr {
+	unsigned int au;
+	unsigned int erase_timeout;
+	unsigned int erase_offset;
+};
+
+struct sd_switch_caps {
+	unsigned int hs_max_dtr;
+	unsigned int uhs_max_dtr;
+	unsigned int sd3_bus_mode;
+	unsigned int sd3_drv_type;
+	unsigned int sd3_curr_limit;
+};
+
+struct sd_ext_reg {
+	u8 fno;
+	u8 page;
+	u16 offset;
+	u8 rev;
+	u8 feature_enabled;
+	u8 feature_support;
+};
+
+struct sdio_cccr {
+	unsigned int sdio_vsn;
+	unsigned int sd_vsn;
+	unsigned int multi_block: 1;
+	unsigned int low_speed: 1;
+	unsigned int wide_bus: 1;
+	unsigned int high_power: 1;
+	unsigned int high_speed: 1;
+	unsigned int disable_cd: 1;
+	unsigned int enable_async_irq: 1;
+};
+
+struct sdio_cis {
+	unsigned short vendor;
+	unsigned short device;
+	unsigned short blksize;
+	unsigned int max_dtr;
+};
+
+struct mmc_part {
+	u64 size;
+	unsigned int part_cfg;
+	char name[20];
+	bool force_ro;
+	unsigned int area_type;
+	u64 android_kabi_reserved1;
+};
+
+struct sdio_func;
+
+struct sdio_func_tuple;
+
+struct mmc_card {
+	struct mmc_host *host;
+	struct device dev;
+	u32 ocr;
+	unsigned int rca;
+	unsigned int type;
+	unsigned int state;
+	unsigned int quirks;
+	unsigned int quirk_max_rate;
+	bool written_flag;
+	bool reenable_cmdq;
+	unsigned int erase_size;
+	unsigned int erase_shift;
+	unsigned int pref_erase;
+	unsigned int eg_boundary;
+	unsigned int erase_arg;
+	u8 erased_byte;
+	u32 raw_cid[4];
+	u32 raw_csd[4];
+	u32 raw_scr[2];
+	u32 raw_ssr[16];
+	struct mmc_cid cid;
+	struct mmc_csd csd;
+	struct mmc_ext_csd ext_csd;
+	struct sd_scr scr;
+	struct sd_ssr ssr;
+	struct sd_switch_caps sw_caps;
+	struct sd_ext_reg ext_power;
+	struct sd_ext_reg ext_perf;
+	unsigned int sdio_funcs;
+	atomic_t sdio_funcs_probed;
+	struct sdio_cccr cccr;
+	struct sdio_cis cis;
+	struct sdio_func *sdio_func[7];
+	struct sdio_func *sdio_single_irq;
+	u8 major_rev;
+	u8 minor_rev;
+	unsigned int num_info;
+	const char **info;
+	struct sdio_func_tuple *tuples;
+	unsigned int sd_bus_speed;
+	unsigned int mmc_avail_type;
+	unsigned int drive_strength;
+	struct dentry *debugfs_root;
+	struct mmc_part part[7];
+	unsigned int nr_parts;
+	struct workqueue_struct *complete_wq;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct mmc_pwrseq_ops;
+
+struct mmc_pwrseq {
+	const struct mmc_pwrseq_ops *ops;
+	struct device *dev;
+	struct list_head pwrseq_node;
+	struct module *owner;
+};
+
+struct mmc_pwrseq_ops {
+	void (*pre_power_on)(struct mmc_host *);
+	void (*post_power_on)(struct mmc_host *);
+	void (*power_off)(struct mmc_host *);
+	void (*reset)(struct mmc_host *);
+};
+
+struct mmc_bus_ops {
+	void (*remove)(struct mmc_host *);
+	void (*detect)(struct mmc_host *);
+	int (*pre_suspend)(struct mmc_host *);
+	int (*suspend)(struct mmc_host *);
+	int (*resume)(struct mmc_host *);
+	int (*runtime_suspend)(struct mmc_host *);
+	int (*runtime_resume)(struct mmc_host *);
+	int (*alive)(struct mmc_host *);
+	int (*shutdown)(struct mmc_host *);
+	int (*hw_reset)(struct mmc_host *);
+	int (*sw_reset)(struct mmc_host *);
+	bool (*cache_enabled)(struct mmc_host *);
+	int (*flush_cache)(struct mmc_host *);
+};
+
+struct mmc_cqe_ops {
+	int (*cqe_enable)(struct mmc_host *, struct mmc_card *);
+	void (*cqe_disable)(struct mmc_host *);
+	int (*cqe_request)(struct mmc_host *, struct mmc_request *);
+	void (*cqe_post_req)(struct mmc_host *, struct mmc_request *);
+	void (*cqe_off)(struct mmc_host *);
+	int (*cqe_wait_for_idle)(struct mmc_host *);
+	bool (*cqe_timeout)(struct mmc_host *, struct mmc_request *, bool *);
+	void (*cqe_recovery_start)(struct mmc_host *);
+	void (*cqe_recovery_finish)(struct mmc_host *);
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+typedef void (*btf_trace_mmc_request_done)(void *, struct mmc_host *, struct mmc_request *);
+
+enum mmc_busy_cmd {
+	MMC_BUSY_CMD6 = 0,
+	MMC_BUSY_ERASE = 1,
+	MMC_BUSY_HPI = 2,
+	MMC_BUSY_EXTR_SINGLE = 3,
+	MMC_BUSY_IO = 4,
+};
+
+enum mmc_err_stat {
+	MMC_ERR_CMD_TIMEOUT = 0,
+	MMC_ERR_CMD_CRC = 1,
+	MMC_ERR_DAT_TIMEOUT = 2,
+	MMC_ERR_DAT_CRC = 3,
+	MMC_ERR_AUTO_CMD = 4,
+	MMC_ERR_ADMA = 5,
+	MMC_ERR_TUNING = 6,
+	MMC_ERR_CMDQ_RED = 7,
+	MMC_ERR_CMDQ_GCE = 8,
+	MMC_ERR_CMDQ_ICCE = 9,
+	MMC_ERR_REQ_TIMEOUT = 10,
+	MMC_ERR_CMDQ_REQ_TIMEOUT = 11,
+	MMC_ERR_ICE_CFG = 12,
+	MMC_ERR_CTRL_TIMEOUT = 13,
+	MMC_ERR_UNEXPECTED_IRQ = 14,
+	MMC_ERR_MAX = 15,
+};
+
+struct trace_event_raw_mmc_request_start {
+	struct trace_entry ent;
+	u32 cmd_opcode;
+	u32 cmd_arg;
+	unsigned int cmd_flags;
+	unsigned int cmd_retries;
+	u32 stop_opcode;
+	u32 stop_arg;
+	unsigned int stop_flags;
+	unsigned int stop_retries;
+	u32 sbc_opcode;
+	u32 sbc_arg;
+	unsigned int sbc_flags;
+	unsigned int sbc_retries;
+	unsigned int blocks;
+	unsigned int blk_addr;
+	unsigned int blksz;
+	unsigned int data_flags;
+	int tag;
+	unsigned int can_retune;
+	unsigned int doing_retune;
+	unsigned int retune_now;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct mmc_request *mrq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_mmc_request_done {
+	struct trace_entry ent;
+	u32 cmd_opcode;
+	int cmd_err;
+	u32 cmd_resp[4];
+	unsigned int cmd_retries;
+	u32 stop_opcode;
+	int stop_err;
+	u32 stop_resp[4];
+	unsigned int stop_retries;
+	u32 sbc_opcode;
+	int sbc_err;
+	u32 sbc_resp[4];
+	unsigned int sbc_retries;
+	unsigned int bytes_xfered;
+	int data_err;
+	int tag;
+	unsigned int can_retune;
+	unsigned int doing_retune;
+	unsigned int retune_now;
+	int need_retune;
+	int hold_retune;
+	unsigned int retune_period;
+	struct mmc_request *mrq;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_mmc_request_start {
+	u32 name;
+};
+
+struct trace_event_data_offsets_mmc_request_done {
+	u32 name;
+};
+
+struct mmc_driver {
+	struct device_driver drv;
+	int (*probe)(struct mmc_card *);
+	void (*remove)(struct mmc_card *);
+	void (*shutdown)(struct mmc_card *);
+};
+
+struct mmc_clk_phase {
+	bool valid;
+	u16 in_deg;
+	u16 out_deg;
+};
+
+struct mmc_clk_phase_map {
+	struct mmc_clk_phase phase[11];
+};
+
+struct mmc_fixup {
+	const char *name;
+	u64 rev_start;
+	u64 rev_end;
+	unsigned int manfid;
+	unsigned short oemid;
+	unsigned short year;
+	unsigned char month;
+	u16 cis_vendor;
+	u16 cis_device;
+	unsigned int ext_csd_rev;
+	const char *of_compatible;
+	void (*vendor_fixup)(struct mmc_card *, int);
+	int data;
+};
+
+struct mmc_op_cond_busy_data {
+	struct mmc_host *host;
+	u32 ocr;
+	struct mmc_command *cmd;
+};
+
+struct mmc_busy_data {
+	struct mmc_card *card;
+	bool retry_crc_err;
+	enum mmc_busy_cmd busy_cmd;
+};
+
+struct sd_busy_data {
+	struct mmc_card *card;
+	u8 *reg_buf;
+};
+
+typedef void sdio_irq_handler_t(struct sdio_func *);
+
+struct sdio_func {
+	struct mmc_card *card;
+	struct device dev;
+	sdio_irq_handler_t *irq_handler;
+	unsigned int num;
+	unsigned char class;
+	unsigned short vendor;
+	unsigned short device;
+	unsigned int max_blksize;
+	unsigned int cur_blksize;
+	unsigned int enable_timeout;
+	unsigned int state;
+	u8 *tmpbuf;
+	u8 major_rev;
+	u8 minor_rev;
+	unsigned int num_info;
+	const char **info;
+	struct sdio_func_tuple *tuples;
+};
+
+struct sdio_func_tuple {
+	struct sdio_func_tuple *next;
+	unsigned char code;
+	unsigned char size;
+	unsigned char data[0];
+};
+
+struct sdio_device_id;
+
+struct sdio_driver {
+	char *name;
+	const struct sdio_device_id *id_table;
+	int (*probe)(struct sdio_func *, const struct sdio_device_id *);
+	void (*remove)(struct sdio_func *);
+	struct device_driver drv;
+};
+
+struct sdio_device_id {
+	__u8 class;
+	__u16 vendor;
+	__u16 device;
+	kernel_ulong_t driver_data;
+};
+
+typedef int tpl_parse_t(struct mmc_card *, struct sdio_func *, const unsigned char *, unsigned int);
+
+struct cis_tpl {
+	unsigned char code;
+	unsigned char min_size;
+	tpl_parse_t *parse;
+};
+
+struct mmc_gpio {
+	struct gpio_desc *ro_gpio;
+	struct gpio_desc *cd_gpio;
+	irqreturn_t (*cd_gpio_isr)(int, void *);
+	char *ro_label;
+	char *cd_label;
+	u32 cd_debounce_delay_ms;
+	int cd_irq;
+};
+
+enum mmc_drv_op {
+	MMC_DRV_OP_IOCTL = 0,
+	MMC_DRV_OP_IOCTL_RPMB = 1,
+	MMC_DRV_OP_BOOT_WP = 2,
+	MMC_DRV_OP_GET_CARD_STATUS = 3,
+	MMC_DRV_OP_GET_EXT_CSD = 4,
+};
+
+struct mmc_blk_request {
+	struct mmc_request mrq;
+	struct mmc_command sbc;
+	struct mmc_command cmd;
+	struct mmc_command stop;
+	struct mmc_data data;
+};
+
+struct mmc_queue_req {
+	struct mmc_blk_request brq;
+	struct scatterlist *sg;
+	enum mmc_drv_op drv_op;
+	int drv_op_result;
+	void *drv_op_data;
+	unsigned int ioc_count;
+	int retries;
+};
+
+enum mmc_issued {
+	MMC_REQ_STARTED = 0,
+	MMC_REQ_BUSY = 1,
+	MMC_REQ_FAILED_TO_START = 2,
+	MMC_REQ_FINISHED = 3,
+};
+
+enum mmc_issue_type {
+	MMC_ISSUE_SYNC = 0,
+	MMC_ISSUE_DCMD = 1,
+	MMC_ISSUE_ASYNC = 2,
+	MMC_ISSUE_MAX = 3,
+};
+
+struct mmc_blk_data;
+
+struct mmc_queue {
+	struct mmc_card *card;
+	struct mmc_ctx ctx;
+	struct blk_mq_tag_set tag_set;
+	struct mmc_blk_data *blkdata;
+	struct request_queue *queue;
+	spinlock_t lock;
+	int in_flight[3];
+	unsigned int cqe_busy;
+	bool busy;
+	bool recovery_needed;
+	bool in_recovery;
+	bool rw_wait;
+	bool waiting;
+	struct work_struct recovery_work;
+	wait_queue_head_t wait;
+	struct request *recovery_req;
+	struct request *complete_req;
+	struct mutex complete_lock;
+	struct work_struct complete_work;
+};
+
+struct mmc_blk_data {
+	struct device *parent;
+	struct gendisk *disk;
+	struct mmc_queue queue;
+	struct list_head part;
+	struct list_head rpmbs;
+	unsigned int flags;
+	struct kref kref;
+	unsigned int read_only;
+	unsigned int part_type;
+	unsigned int reset_done;
+	unsigned int part_curr;
+	int area_type;
+	struct dentry *status_dentry;
+	struct dentry *ext_csd_dentry;
+};
+
+struct mmc_ioc_cmd {
+	int write_flag;
+	int is_acmd;
+	__u32 opcode;
+	__u32 arg;
+	__u32 response[4];
+	unsigned int flags;
+	unsigned int blksz;
+	unsigned int blocks;
+	unsigned int postsleep_min_us;
+	unsigned int postsleep_max_us;
+	unsigned int data_timeout_ns;
+	unsigned int cmd_timeout_ms;
+	__u32 __pad;
+	__u64 data_ptr;
+};
+
+struct mmc_ioc_multi_cmd {
+	__u64 num_of_cmds;
+	struct mmc_ioc_cmd cmds[0];
+};
+
+struct mmc_rpmb_data {
+	struct device dev;
+	struct cdev chrdev;
+	int id;
+	unsigned int part_index;
+	struct mmc_blk_data *md;
+	struct list_head node;
+};
+
+struct mmc_blk_busy_data {
+	struct mmc_card *card;
+	u32 status;
+};
+
+struct mmc_blk_ioc_data {
+	struct mmc_ioc_cmd ic;
+	unsigned char *buf;
+	u64 buf_bytes;
+	unsigned int flags;
+	struct mmc_rpmb_data *rpmb;
+};
+
+enum sdhci_reset_reason {
+	SDHCI_RESET_FOR_INIT = 0,
+	SDHCI_RESET_FOR_REQUEST_ERROR = 1,
+	SDHCI_RESET_FOR_REQUEST_ERROR_DATA_ONLY = 2,
+	SDHCI_RESET_FOR_TUNING_ABORT = 3,
+	SDHCI_RESET_FOR_CARD_REMOVED = 4,
+	SDHCI_RESET_FOR_CQE_RECOVERY = 5,
+};
+
+enum sdhci_cookie {
+	COOKIE_UNMAPPED = 0,
+	COOKIE_PRE_MAPPED = 1,
+	COOKIE_MAPPED = 2,
+};
+
+struct sdhci_ops;
+
+struct sdhci_host {
+	const char *hw_name;
+	unsigned int quirks;
+	unsigned int quirks2;
+	int irq;
+	void *ioaddr;
+	phys_addr_t mapbase;
+	char *bounce_buffer;
+	dma_addr_t bounce_addr;
+	unsigned int bounce_buffer_size;
+	const struct sdhci_ops *ops;
+	struct mmc_host *mmc;
+	struct mmc_host_ops mmc_host_ops;
+	u64 dma_mask;
+	struct led_classdev led;
+	char led_name[32];
+	spinlock_t lock;
+	int flags;
+	unsigned int version;
+	unsigned int max_clk;
+	unsigned int timeout_clk;
+	u8 max_timeout_count;
+	unsigned int clk_mul;
+	unsigned int clock;
+	u8 pwr;
+	u8 drv_type;
+	bool reinit_uhs;
+	bool runtime_suspended;
+	bool bus_on;
+	bool preset_enabled;
+	bool pending_reset;
+	bool irq_wake_enabled;
+	bool v4_mode;
+	bool use_external_dma;
+	bool always_defer_done;
+	struct mmc_request *mrqs_done[2];
+	struct mmc_command *cmd;
+	struct mmc_command *data_cmd;
+	struct mmc_command *deferred_cmd;
+	struct mmc_data *data;
+	unsigned int data_early: 1;
+	struct sg_mapping_iter sg_miter;
+	unsigned int blocks;
+	int sg_count;
+	int max_adma;
+	void *adma_table;
+	void *align_buffer;
+	size_t adma_table_sz;
+	size_t align_buffer_sz;
+	dma_addr_t adma_addr;
+	dma_addr_t align_addr;
+	unsigned int desc_sz;
+	unsigned int alloc_desc_sz;
+	struct workqueue_struct *complete_wq;
+	struct work_struct complete_work;
+	struct timer_list timer;
+	struct timer_list data_timer;
+	u32 caps;
+	u32 caps1;
+	bool read_caps;
+	bool sdhci_core_to_disable_vqmmc;
+	unsigned int ocr_avail_sdio;
+	unsigned int ocr_avail_sd;
+	unsigned int ocr_avail_mmc;
+	u32 ocr_mask;
+	unsigned int timing;
+	u32 thread_isr;
+	u32 ier;
+	bool cqe_on;
+	u32 cqe_ier;
+	u32 cqe_err_ier;
+	wait_queue_head_t buf_ready_int;
+	unsigned int tuning_done;
+	unsigned int tuning_count;
+	unsigned int tuning_mode;
+	unsigned int tuning_err;
+	int tuning_delay;
+	int tuning_loop_count;
+	u32 sdma_boundary;
+	u32 adma_table_cnt;
+	u64 data_timeout;
+	u64 android_kabi_reserved1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long private[0];
+};
+
+struct sdhci_ops {
+	u32 (*read_l)(struct sdhci_host *, int);
+	u16 (*read_w)(struct sdhci_host *, int);
+	u8 (*read_b)(struct sdhci_host *, int);
+	void (*write_l)(struct sdhci_host *, u32, int);
+	void (*write_w)(struct sdhci_host *, u16, int);
+	void (*write_b)(struct sdhci_host *, u8, int);
+	void (*set_clock)(struct sdhci_host *, unsigned int);
+	void (*set_power)(struct sdhci_host *, unsigned char, unsigned short);
+	u32 (*irq)(struct sdhci_host *, u32);
+	int (*set_dma_mask)(struct sdhci_host *);
+	int (*enable_dma)(struct sdhci_host *);
+	unsigned int (*get_max_clock)(struct sdhci_host *);
+	unsigned int (*get_min_clock)(struct sdhci_host *);
+	unsigned int (*get_timeout_clock)(struct sdhci_host *);
+	unsigned int (*get_max_timeout_count)(struct sdhci_host *);
+	void (*set_timeout)(struct sdhci_host *, struct mmc_command *);
+	void (*set_bus_width)(struct sdhci_host *, int);
+	void (*platform_send_init_74_clocks)(struct sdhci_host *, u8);
+	unsigned int (*get_ro)(struct sdhci_host *);
+	void (*reset)(struct sdhci_host *, u8);
+	int (*platform_execute_tuning)(struct sdhci_host *, u32);
+	void (*set_uhs_signaling)(struct sdhci_host *, unsigned int);
+	void (*hw_reset)(struct sdhci_host *);
+	void (*adma_workaround)(struct sdhci_host *, u32);
+	void (*card_event)(struct sdhci_host *);
+	void (*voltage_switch)(struct sdhci_host *);
+	void (*adma_write_desc)(struct sdhci_host *, void **, dma_addr_t, int, unsigned int);
+	void (*copy_to_bounce_buffer)(struct sdhci_host *, struct mmc_data *, unsigned int);
+	void (*request_done)(struct sdhci_host *, struct mmc_request *);
+	void (*dump_vendor_regs)(struct sdhci_host *);
+	u64 android_kabi_reserved1;
+};
+
+struct sdhci_adma2_64_desc {
+	__le16 cmd;
+	__le16 len;
+	__le32 addr_lo;
+	__le32 addr_hi;
+};
+
+struct sdhci_pltfm_host {
+	struct clk *clk;
+	unsigned int clock;
+	u16 xfer_mode_shadow;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned long private[0];
+};
+
+struct sdhci_pltfm_data {
+	const struct sdhci_ops *ops;
+	unsigned int quirks;
+	unsigned int quirks2;
+};
+
+typedef void (*btf_trace_ufshcd_clk_gating)(void *, const char *, int);
+
+typedef void (*btf_trace_ufshcd_clk_scaling)(void *, const char *, const char *, const char *, u32, u32);
+
+typedef void (*btf_trace_ufshcd_auto_bkops_state)(void *, const char *, const char *);
+
+typedef void (*btf_trace_ufshcd_profile_hibern8)(void *, const char *, const char *, s64, int);
+
+typedef void (*btf_trace_ufshcd_profile_clk_gating)(void *, const char *, const char *, s64, int);
+
+typedef void (*btf_trace_ufshcd_profile_clk_scaling)(void *, const char *, const char *, s64, int);
+
+typedef void (*btf_trace_ufshcd_system_suspend)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_system_resume)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_runtime_suspend)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_runtime_resume)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_init)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_wl_suspend)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_wl_resume)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_wl_runtime_suspend)(void *, const char *, int, s64, int, int);
+
+typedef void (*btf_trace_ufshcd_wl_runtime_resume)(void *, const char *, int, s64, int, int);
+
+enum ufs_trace_str_t {
+	UFS_CMD_SEND = 0,
+	UFS_CMD_COMP = 1,
+	UFS_DEV_COMP = 2,
+	UFS_QUERY_SEND = 3,
+	UFS_QUERY_COMP = 4,
+	UFS_QUERY_ERR = 5,
+	UFS_TM_SEND = 6,
+	UFS_TM_COMP = 7,
+	UFS_TM_ERR = 8,
+};
+
+typedef void (*btf_trace_ufshcd_command)(void *, const char *, enum ufs_trace_str_t, unsigned int, u32, u32, int, u32, u64, u8, u8);
+
+typedef void (*btf_trace_ufshcd_uic_command)(void *, const char *, enum ufs_trace_str_t, u32, u32, u32, u32);
+
+enum ufs_trace_tsf_t {
+	UFS_TSF_CDB = 0,
+	UFS_TSF_OSF = 1,
+	UFS_TSF_TM_INPUT = 2,
+	UFS_TSF_TM_OUTPUT = 3,
+};
+
+typedef void (*btf_trace_ufshcd_upiu)(void *, const char *, enum ufs_trace_str_t, void *, void *, enum ufs_trace_tsf_t);
+
+typedef void (*btf_trace_ufshcd_exception_event)(void *, const char *, u16);
+
+enum ufs_dev_pwr_mode {
+	UFS_ACTIVE_PWR_MODE = 1,
+	UFS_SLEEP_PWR_MODE = 2,
+	UFS_POWERDOWN_PWR_MODE = 3,
+	UFS_DEEPSLEEP_PWR_MODE = 4,
+};
+
+enum uic_link_state {
+	UIC_LINK_OFF_STATE = 0,
+	UIC_LINK_ACTIVE_STATE = 1,
+	UIC_LINK_HIBERN8_STATE = 2,
+	UIC_LINK_BROKEN_STATE = 3,
+};
+
+struct ufs_pm_lvl_states {
+	enum ufs_dev_pwr_mode dev_state;
+	enum uic_link_state link_state;
+};
+
+struct ufs_dev_quirk {
+	u16 wmanufacturerid;
+	const u8 *model;
+	unsigned int quirk;
+};
+
+enum ufs_ref_clk_freq {
+	REF_CLK_FREQ_19_2_MHZ = 0,
+	REF_CLK_FREQ_26_MHZ = 1,
+	REF_CLK_FREQ_38_4_MHZ = 2,
+	REF_CLK_FREQ_52_MHZ = 3,
+	REF_CLK_FREQ_INVAL = -1,
+};
+
+struct ufs_ref_clk {
+	unsigned long freq_hz;
+	enum ufs_ref_clk_freq val;
+};
+
+struct devfreq_simple_ondemand_data {
+	unsigned int upthreshold;
+	unsigned int downdifferential;
+};
+
+struct ufs_hba_variant_params {
+	struct devfreq_dev_profile devfreq_profile;
+	struct devfreq_simple_ondemand_data ondemand_data;
+	u16 hba_enable_delay_us;
+	u32 wb_flush_threshold;
+};
+
+enum ufs_pm_level {
+	UFS_PM_LVL_0 = 0,
+	UFS_PM_LVL_1 = 1,
+	UFS_PM_LVL_2 = 2,
+	UFS_PM_LVL_3 = 3,
+	UFS_PM_LVL_4 = 4,
+	UFS_PM_LVL_5 = 5,
+	UFS_PM_LVL_6 = 6,
+	UFS_PM_LVL_MAX = 7,
+};
+
+enum ufs_notify_change_status {
+	PRE_CHANGE = 0,
+	POST_CHANGE = 1,
+};
+
+enum uic_cmd_dme {
+	UIC_CMD_DME_GET = 1,
+	UIC_CMD_DME_SET = 2,
+	UIC_CMD_DME_PEER_GET = 3,
+	UIC_CMD_DME_PEER_SET = 4,
+	UIC_CMD_DME_POWERON = 16,
+	UIC_CMD_DME_POWEROFF = 17,
+	UIC_CMD_DME_ENABLE = 18,
+	UIC_CMD_DME_RESET = 20,
+	UIC_CMD_DME_END_PT_RST = 21,
+	UIC_CMD_DME_LINK_STARTUP = 22,
+	UIC_CMD_DME_HIBER_ENTER = 23,
+	UIC_CMD_DME_HIBER_EXIT = 24,
+	UIC_CMD_DME_TEST_MODE = 26,
+};
+
+enum ufs_pm_op {
+	UFS_RUNTIME_PM = 0,
+	UFS_SYSTEM_PM = 1,
+	UFS_SHUTDOWN_PM = 2,
+};
+
+enum ufs_event_type {
+	UFS_EVT_PA_ERR = 0,
+	UFS_EVT_DL_ERR = 1,
+	UFS_EVT_NL_ERR = 2,
+	UFS_EVT_TL_ERR = 3,
+	UFS_EVT_DME_ERR = 4,
+	UFS_EVT_AUTO_HIBERN8_ERR = 5,
+	UFS_EVT_FATAL_ERR = 6,
+	UFS_EVT_LINK_STARTUP_FAIL = 7,
+	UFS_EVT_RESUME_ERR = 8,
+	UFS_EVT_SUSPEND_ERR = 9,
+	UFS_EVT_WL_SUSP_ERR = 10,
+	UFS_EVT_WL_RES_ERR = 11,
+	UFS_EVT_DEV_RESET = 12,
+	UFS_EVT_HOST_RESET = 13,
+	UFS_EVT_ABORT = 14,
+	UFS_EVT_CNT = 15,
+};
+
+enum ufshcd_state {
+	UFSHCD_STATE_RESET = 0,
+	UFSHCD_STATE_OPERATIONAL = 1,
+	UFSHCD_STATE_EH_SCHEDULED_NON_FATAL = 2,
+	UFSHCD_STATE_EH_SCHEDULED_FATAL = 3,
+	UFSHCD_STATE_ERROR = 4,
+};
+
+enum dev_cmd_type {
+	DEV_CMD_TYPE_NOP = 0,
+	DEV_CMD_TYPE_QUERY = 1,
+	DEV_CMD_TYPE_RPMB = 2,
+};
+
+enum clk_gating_state {
+	CLKS_OFF = 0,
+	CLKS_ON = 1,
+	REQ_CLKS_OFF = 2,
+	REQ_CLKS_ON = 3,
+};
+
+enum bkops_status {
+	BKOPS_STATUS_NO_OP = 0,
+	BKOPS_STATUS_NON_CRITICAL = 1,
+	BKOPS_STATUS_PERF_IMPACT = 2,
+	BKOPS_STATUS_CRITICAL = 3,
+	BKOPS_STATUS_MAX = 3,
+};
+
+enum {
+	REG_CONTROLLER_CAPABILITIES = 0,
+	REG_MCQCAP = 4,
+	REG_UFS_VERSION = 8,
+	REG_CONTROLLER_DEV_ID = 16,
+	REG_CONTROLLER_PROD_ID = 20,
+	REG_AUTO_HIBERNATE_IDLE_TIMER = 24,
+	REG_INTERRUPT_STATUS = 32,
+	REG_INTERRUPT_ENABLE = 36,
+	REG_CONTROLLER_STATUS = 48,
+	REG_CONTROLLER_ENABLE = 52,
+	REG_UIC_ERROR_CODE_PHY_ADAPTER_LAYER = 56,
+	REG_UIC_ERROR_CODE_DATA_LINK_LAYER = 60,
+	REG_UIC_ERROR_CODE_NETWORK_LAYER = 64,
+	REG_UIC_ERROR_CODE_TRANSPORT_LAYER = 68,
+	REG_UIC_ERROR_CODE_DME = 72,
+	REG_UTP_TRANSFER_REQ_INT_AGG_CONTROL = 76,
+	REG_UTP_TRANSFER_REQ_LIST_BASE_L = 80,
+	REG_UTP_TRANSFER_REQ_LIST_BASE_H = 84,
+	REG_UTP_TRANSFER_REQ_DOOR_BELL = 88,
+	REG_UTP_TRANSFER_REQ_LIST_CLEAR = 92,
+	REG_UTP_TRANSFER_REQ_LIST_RUN_STOP = 96,
+	REG_UTP_TASK_REQ_LIST_BASE_L = 112,
+	REG_UTP_TASK_REQ_LIST_BASE_H = 116,
+	REG_UTP_TASK_REQ_DOOR_BELL = 120,
+	REG_UTP_TASK_REQ_LIST_CLEAR = 124,
+	REG_UTP_TASK_REQ_LIST_RUN_STOP = 128,
+	REG_UIC_COMMAND = 144,
+	REG_UIC_COMMAND_ARG_1 = 148,
+	REG_UIC_COMMAND_ARG_2 = 152,
+	REG_UIC_COMMAND_ARG_3 = 156,
+	UFSHCI_REG_SPACE_SIZE = 160,
+	REG_UFS_CCAP = 256,
+	REG_UFS_CRYPTOCAP = 260,
+	REG_UFS_MEM_CFG = 768,
+	REG_UFS_MCQ_CFG = 896,
+	REG_UFS_ESILBA = 900,
+	REG_UFS_ESIUBA = 904,
+	UFSHCI_CRYPTO_REG_SPACE_SIZE = 1024,
+};
+
+enum ufs_unipro_ver {
+	UFS_UNIPRO_VER_RESERVED = 0,
+	UFS_UNIPRO_VER_1_40 = 1,
+	UFS_UNIPRO_VER_1_41 = 2,
+	UFS_UNIPRO_VER_1_6 = 3,
+	UFS_UNIPRO_VER_1_61 = 4,
+	UFS_UNIPRO_VER_1_8 = 5,
+	UFS_UNIPRO_VER_MAX = 6,
+	UFS_UNIPRO_VER_MASK = 15,
+};
+
+enum ufshcd_quirks {
+	UFSHCD_QUIRK_BROKEN_INTR_AGGR = 1,
+	UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS = 2,
+	UFSHCD_QUIRK_BROKEN_LCC = 4,
+	UFSHCD_QUIRK_BROKEN_PA_RXHSUNTERMCAP = 8,
+	UFSHCD_QUIRK_DME_PEER_ACCESS_AUTO_MODE = 16,
+	UFSHCD_QUIRK_BROKEN_UFS_HCI_VERSION = 32,
+	UFSHCI_QUIRK_BROKEN_REQ_LIST_CLR = 64,
+	UFSHCI_QUIRK_SKIP_RESET_INTR_AGGR = 128,
+	UFSHCI_QUIRK_BROKEN_HCE = 256,
+	UFSHCD_QUIRK_PRDT_BYTE_GRAN = 512,
+	UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR = 1024,
+	UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8 = 2048,
+	UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL = 4096,
+	UFSHCD_QUIRK_SKIP_DEF_UNIPRO_TIMEOUT_SETTING = 8192,
+	UFSHCD_QUIRK_BROKEN_UIC_CMD = 32768,
+	UFSHCD_QUIRK_SKIP_PH_CONFIGURATION = 65536,
+	UFSHCD_QUIRK_BROKEN_64BIT_ADDRESS = 131072,
+	UFSHCD_QUIRK_HIBERN_FASTAUTO = 262144,
+	UFSHCD_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH = 524288,
+	UFSHCD_QUIRK_MCQ_BROKEN_INTR = 1048576,
+	UFSHCD_QUIRK_MCQ_BROKEN_RTC = 2097152,
+};
+
+enum query_opcode {
+	UPIU_QUERY_OPCODE_NOP = 0,
+	UPIU_QUERY_OPCODE_READ_DESC = 1,
+	UPIU_QUERY_OPCODE_WRITE_DESC = 2,
+	UPIU_QUERY_OPCODE_READ_ATTR = 3,
+	UPIU_QUERY_OPCODE_WRITE_ATTR = 4,
+	UPIU_QUERY_OPCODE_READ_FLAG = 5,
+	UPIU_QUERY_OPCODE_SET_FLAG = 6,
+	UPIU_QUERY_OPCODE_CLEAR_FLAG = 7,
+	UPIU_QUERY_OPCODE_TOGGLE_FLAG = 8,
+};
+
+enum flag_idn {
+	QUERY_FLAG_IDN_FDEVICEINIT = 1,
+	QUERY_FLAG_IDN_PERMANENT_WPE = 2,
+	QUERY_FLAG_IDN_PWR_ON_WPE = 3,
+	QUERY_FLAG_IDN_BKOPS_EN = 4,
+	QUERY_FLAG_IDN_LIFE_SPAN_MODE_ENABLE = 5,
+	QUERY_FLAG_IDN_PURGE_ENABLE = 6,
+	QUERY_FLAG_IDN_RESERVED2 = 7,
+	QUERY_FLAG_IDN_FPHYRESOURCEREMOVAL = 8,
+	QUERY_FLAG_IDN_BUSY_RTC = 9,
+	QUERY_FLAG_IDN_RESERVED3 = 10,
+	QUERY_FLAG_IDN_PERMANENTLY_DISABLE_FW_UPDATE = 11,
+	QUERY_FLAG_IDN_WB_EN = 14,
+	QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN = 15,
+	QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8 = 16,
+	QUERY_FLAG_IDN_HPB_RESET = 17,
+	QUERY_FLAG_IDN_HPB_EN = 18,
+};
+
+enum {
+	UPIU_QUERY_FUNC_STANDARD_READ_REQUEST = 1,
+	UPIU_QUERY_FUNC_STANDARD_WRITE_REQUEST = 129,
+};
+
+enum attr_idn {
+	QUERY_ATTR_IDN_BOOT_LU_EN = 0,
+	QUERY_ATTR_IDN_MAX_HPB_SINGLE_CMD = 1,
+	QUERY_ATTR_IDN_POWER_MODE = 2,
+	QUERY_ATTR_IDN_ACTIVE_ICC_LVL = 3,
+	QUERY_ATTR_IDN_OOO_DATA_EN = 4,
+	QUERY_ATTR_IDN_BKOPS_STATUS = 5,
+	QUERY_ATTR_IDN_PURGE_STATUS = 6,
+	QUERY_ATTR_IDN_MAX_DATA_IN = 7,
+	QUERY_ATTR_IDN_MAX_DATA_OUT = 8,
+	QUERY_ATTR_IDN_DYN_CAP_NEEDED = 9,
+	QUERY_ATTR_IDN_REF_CLK_FREQ = 10,
+	QUERY_ATTR_IDN_CONF_DESC_LOCK = 11,
+	QUERY_ATTR_IDN_MAX_NUM_OF_RTT = 12,
+	QUERY_ATTR_IDN_EE_CONTROL = 13,
+	QUERY_ATTR_IDN_EE_STATUS = 14,
+	QUERY_ATTR_IDN_SECONDS_PASSED = 15,
+	QUERY_ATTR_IDN_CNTX_CONF = 16,
+	QUERY_ATTR_IDN_CORR_PRG_BLK_NUM = 17,
+	QUERY_ATTR_IDN_RESERVED2 = 18,
+	QUERY_ATTR_IDN_RESERVED3 = 19,
+	QUERY_ATTR_IDN_FFU_STATUS = 20,
+	QUERY_ATTR_IDN_PSA_STATE = 21,
+	QUERY_ATTR_IDN_PSA_DATA_SIZE = 22,
+	QUERY_ATTR_IDN_REF_CLK_GATING_WAIT_TIME = 23,
+	QUERY_ATTR_IDN_CASE_ROUGH_TEMP = 24,
+	QUERY_ATTR_IDN_HIGH_TEMP_BOUND = 25,
+	QUERY_ATTR_IDN_LOW_TEMP_BOUND = 26,
+	QUERY_ATTR_IDN_WB_FLUSH_STATUS = 28,
+	QUERY_ATTR_IDN_AVAIL_WB_BUFF_SIZE = 29,
+	QUERY_ATTR_IDN_WB_BUFF_LIFE_TIME_EST = 30,
+	QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE = 31,
+	QUERY_ATTR_IDN_EXT_IID_EN = 42,
+	QUERY_ATTR_IDN_TIMESTAMP = 48,
+};
+
+enum desc_idn {
+	QUERY_DESC_IDN_DEVICE = 0,
+	QUERY_DESC_IDN_CONFIGURATION = 1,
+	QUERY_DESC_IDN_UNIT = 2,
+	QUERY_DESC_IDN_RFU_0 = 3,
+	QUERY_DESC_IDN_INTERCONNECT = 4,
+	QUERY_DESC_IDN_STRING = 5,
+	QUERY_DESC_IDN_RFU_1 = 6,
+	QUERY_DESC_IDN_GEOMETRY = 7,
+	QUERY_DESC_IDN_POWER = 8,
+	QUERY_DESC_IDN_HEALTH = 9,
+	QUERY_DESC_IDN_MAX = 10,
+};
+
+enum desc_header_offset {
+	QUERY_DESC_LENGTH_OFFSET = 0,
+	QUERY_DESC_DESC_TYPE_OFFSET = 1,
+};
+
+enum ufs_hs_gear_tag {
+	UFS_HS_DONT_CHANGE = 0,
+	UFS_HS_G1 = 1,
+	UFS_HS_G2 = 2,
+	UFS_HS_G3 = 3,
+	UFS_HS_G4 = 4,
+	UFS_HS_G5 = 5,
+};
+
+enum {
+	FAST_MODE = 1,
+	SLOW_MODE = 2,
+	FASTAUTO_MODE = 4,
+	SLOWAUTO_MODE = 5,
+	UNCHANGED = 7,
+};
+
+enum {
+	UFSHCD_EH_IN_PROGRESS = 1,
+};
+
+enum utp_ocs {
+	OCS_SUCCESS = 0,
+	OCS_INVALID_CMD_TABLE_ATTR = 1,
+	OCS_INVALID_PRDT_ATTR = 2,
+	OCS_MISMATCH_DATA_BUF_SIZE = 3,
+	OCS_MISMATCH_RESP_UPIU_SIZE = 4,
+	OCS_PEER_COMM_FAILURE = 5,
+	OCS_ABORTED = 6,
+	OCS_FATAL_ERROR = 7,
+	OCS_DEVICE_FATAL_ERROR = 8,
+	OCS_INVALID_CRYPTO_CONFIG = 9,
+	OCS_GENERAL_CRYPTO_ERROR = 10,
+	OCS_INVALID_COMMAND_STATUS = 15,
+};
+
+enum {
+	UTP_CMD_TYPE_SCSI = 0,
+	UTP_CMD_TYPE_UFS = 1,
+	UTP_CMD_TYPE_DEV_MANAGE = 2,
+};
+
+enum {
+	UTP_CMD_TYPE_UFS_STORAGE = 1,
+};
+
+enum {
+	MASK_OCS = 15,
+};
+
+enum upiu_request_transaction {
+	UPIU_TRANSACTION_NOP_OUT = 0,
+	UPIU_TRANSACTION_COMMAND = 1,
+	UPIU_TRANSACTION_DATA_OUT = 2,
+	UPIU_TRANSACTION_TASK_REQ = 4,
+	UPIU_TRANSACTION_QUERY_REQ = 22,
+};
+
+enum {
+	UFS_UPIU_REPORT_LUNS_WLUN = 129,
+	UFS_UPIU_UFS_DEVICE_WLUN = 208,
+	UFS_UPIU_BOOT_WLUN = 176,
+	UFS_UPIU_RPMB_WLUN = 196,
+};
+
+enum {
+	MASK_TRANSFER_REQUESTS_SLOTS = 31,
+	MASK_TASK_MANAGEMENT_REQUEST_SLOTS = 458752,
+	MASK_EHSLUTRD_SUPPORTED = 4194304,
+	MASK_AUTO_HIBERN8_SUPPORT = 8388608,
+	MASK_64_ADDRESSING_SUPPORT = 16777216,
+	MASK_OUT_OF_ORDER_DATA_DELIVERY_SUPPORT = 33554432,
+	MASK_UIC_DME_TEST_MODE_SUPPORT = 67108864,
+	MASK_CRYPTO_SUPPORT = 268435456,
+	MASK_MCQ_SUPPORT = 1073741824,
+};
+
+enum {
+	UFS_ABORT_TASK = 1,
+	UFS_ABORT_TASK_SET = 2,
+	UFS_CLEAR_TASK_SET = 4,
+	UFS_LOGICAL_RESET = 8,
+	UFS_QUERY_TASK = 128,
+	UFS_QUERY_TASK_SET = 129,
+};
+
+enum {
+	UPIU_TASK_MANAGEMENT_FUNC_COMPL = 0,
+	UPIU_TASK_MANAGEMENT_FUNC_NOT_SUPPORTED = 4,
+	UPIU_TASK_MANAGEMENT_FUNC_SUCCEEDED = 8,
+	UPIU_TASK_MANAGEMENT_FUNC_FAILED = 5,
+	UPIU_INCORRECT_LOGICAL_UNIT_NO = 9,
+};
+
+enum {
+	UFSHCD_MAX_CHANNEL = 0,
+	UFSHCD_MAX_ID = 1,
+	UFSHCD_CMD_PER_LUN = 31,
+	UFSHCD_CAN_QUEUE = 31,
+};
+
+enum ufshcd_caps {
+	UFSHCD_CAP_CLK_GATING = 1,
+	UFSHCD_CAP_HIBERN8_WITH_CLK_GATING = 2,
+	UFSHCD_CAP_CLK_SCALING = 4,
+	UFSHCD_CAP_AUTO_BKOPS_SUSPEND = 8,
+	UFSHCD_CAP_INTR_AGGR = 16,
+	UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND = 32,
+	UFSHCD_CAP_RPM_AUTOSUSPEND = 64,
+	UFSHCD_CAP_WB_EN = 128,
+	UFSHCD_CAP_CRYPTO = 256,
+	UFSHCD_CAP_AGGR_POWER_COLLAPSE = 512,
+	UFSHCD_CAP_DEEPSLEEP = 1024,
+	UFSHCD_CAP_TEMP_NOTIF = 2048,
+	UFSHCD_CAP_WB_WITH_CLK_SCALING = 4096,
+};
+
+enum {
+	UIC_CMD_TIMEOUT_DEFAULT = 500,
+	UIC_CMD_TIMEOUT_MAX = 2000,
+};
+
+enum {
+	PWR_OK = 0,
+	PWR_LOCAL = 1,
+	PWR_REMOTE = 2,
+	PWR_BUSY = 3,
+	PWR_ERROR_CAP = 4,
+	PWR_FATAL_ERROR = 5,
+};
+
+enum {
+	INTERRUPT_MASK_ALL_VER_10 = 200703,
+	INTERRUPT_MASK_RW_VER_10 = 196608,
+	INTERRUPT_MASK_ALL_VER_11 = 204799,
+	INTERRUPT_MASK_ALL_VER_21 = 466943,
+};
+
+enum ufshcd_android_quirks {
+	UFSHCD_ANDROID_QUIRK_CUSTOM_CRYPTO_PROFILE = 1,
+	UFSHCD_ANDROID_QUIRK_BROKEN_CRYPTO_ENABLE = 2,
+	UFSHCD_ANDROID_QUIRK_KEYS_IN_PRDT = 4,
+};
+
+enum {
+	UPIU_RSP_FLAG_UNDERFLOW = 32,
+	UPIU_RSP_FLAG_OVERFLOW = 64,
+};
+
+enum upiu_response_transaction {
+	UPIU_TRANSACTION_NOP_IN = 32,
+	UPIU_TRANSACTION_RESPONSE = 33,
+	UPIU_TRANSACTION_DATA_IN = 34,
+	UPIU_TRANSACTION_TASK_RSP = 36,
+	UPIU_TRANSACTION_READY_XFER = 49,
+	UPIU_TRANSACTION_QUERY_RSP = 54,
+	UPIU_TRANSACTION_REJECT_UPIU = 63,
+};
+
+enum {
+	MASK_EE_STATUS = 65535,
+	MASK_EE_DYNCAP_EVENT = 1,
+	MASK_EE_SYSPOOL_EVENT = 2,
+	MASK_EE_URGENT_BKOPS = 4,
+	MASK_EE_TOO_HIGH_TEMP = 8,
+	MASK_EE_TOO_LOW_TEMP = 16,
+	MASK_EE_WRITEBOOSTER_EVENT = 32,
+	MASK_EE_PERFORMANCE_THROTTLING = 64,
+};
+
+enum {
+	WB_BUF_MODE_LU_DEDICATED = 0,
+	WB_BUF_MODE_SHARED = 1,
+};
+
+enum {
+	UFSHCD_POLL_FROM_INTERRUPT_CONTEXT = -1,
+};
+
+enum {
+	UFSHCD_UIC_DL_PA_INIT_ERROR = 1,
+	UFSHCD_UIC_DL_NAC_RECEIVED_ERROR = 2,
+	UFSHCD_UIC_DL_TCx_REPLAY_ERROR = 4,
+	UFSHCD_UIC_NL_ERROR = 8,
+	UFSHCD_UIC_TL_ERROR = 16,
+	UFSHCD_UIC_DME_ERROR = 32,
+	UFSHCD_UIC_PA_GENERIC_ERROR = 64,
+};
+
+enum utp_data_direction {
+	UTP_NO_DATA_TRANSFER = 0,
+	UTP_HOST_TO_DEVICE = 1,
+	UTP_DEVICE_TO_HOST = 2,
+};
+
+enum {
+	UPIU_CMD_FLAGS_NONE = 0,
+	UPIU_CMD_FLAGS_WRITE = 32,
+	UPIU_CMD_FLAGS_READ = 64,
+};
+
+enum {
+	MASK_TM_SERVICE_RESP = 255,
+};
+
+enum ufs_pwm_gear_tag {
+	UFS_PWM_DONT_CHANGE = 0,
+	UFS_PWM_G1 = 1,
+	UFS_PWM_G2 = 2,
+	UFS_PWM_G3 = 3,
+	UFS_PWM_G4 = 4,
+	UFS_PWM_G5 = 5,
+	UFS_PWM_G6 = 6,
+	UFS_PWM_G7 = 7,
+};
+
+enum ufs_lanes {
+	UFS_LANE_DONT_CHANGE = 0,
+	UFS_LANE_1 = 1,
+	UFS_LANE_2 = 2,
+};
+
+enum geometry_desc_param {
+	GEOMETRY_DESC_PARAM_LEN = 0,
+	GEOMETRY_DESC_PARAM_TYPE = 1,
+	GEOMETRY_DESC_PARAM_DEV_CAP = 4,
+	GEOMETRY_DESC_PARAM_MAX_NUM_LUN = 12,
+	GEOMETRY_DESC_PARAM_SEG_SIZE = 13,
+	GEOMETRY_DESC_PARAM_ALLOC_UNIT_SIZE = 17,
+	GEOMETRY_DESC_PARAM_MIN_BLK_SIZE = 18,
+	GEOMETRY_DESC_PARAM_OPT_RD_BLK_SIZE = 19,
+	GEOMETRY_DESC_PARAM_OPT_WR_BLK_SIZE = 20,
+	GEOMETRY_DESC_PARAM_MAX_IN_BUF_SIZE = 21,
+	GEOMETRY_DESC_PARAM_MAX_OUT_BUF_SIZE = 22,
+	GEOMETRY_DESC_PARAM_RPMB_RW_SIZE = 23,
+	GEOMETRY_DESC_PARAM_DYN_CAP_RSRC_PLC = 24,
+	GEOMETRY_DESC_PARAM_DATA_ORDER = 25,
+	GEOMETRY_DESC_PARAM_MAX_NUM_CTX = 26,
+	GEOMETRY_DESC_PARAM_TAG_UNIT_SIZE = 27,
+	GEOMETRY_DESC_PARAM_TAG_RSRC_SIZE = 28,
+	GEOMETRY_DESC_PARAM_SEC_RM_TYPES = 29,
+	GEOMETRY_DESC_PARAM_MEM_TYPES = 30,
+	GEOMETRY_DESC_PARAM_SCM_MAX_NUM_UNITS = 32,
+	GEOMETRY_DESC_PARAM_SCM_CAP_ADJ_FCTR = 36,
+	GEOMETRY_DESC_PARAM_NPM_MAX_NUM_UNITS = 38,
+	GEOMETRY_DESC_PARAM_NPM_CAP_ADJ_FCTR = 42,
+	GEOMETRY_DESC_PARAM_ENM1_MAX_NUM_UNITS = 44,
+	GEOMETRY_DESC_PARAM_ENM1_CAP_ADJ_FCTR = 48,
+	GEOMETRY_DESC_PARAM_ENM2_MAX_NUM_UNITS = 50,
+	GEOMETRY_DESC_PARAM_ENM2_CAP_ADJ_FCTR = 54,
+	GEOMETRY_DESC_PARAM_ENM3_MAX_NUM_UNITS = 56,
+	GEOMETRY_DESC_PARAM_ENM3_CAP_ADJ_FCTR = 60,
+	GEOMETRY_DESC_PARAM_ENM4_MAX_NUM_UNITS = 62,
+	GEOMETRY_DESC_PARAM_ENM4_CAP_ADJ_FCTR = 66,
+	GEOMETRY_DESC_PARAM_OPT_LOG_BLK_SIZE = 68,
+	GEOMETRY_DESC_PARAM_HPB_REGION_SIZE = 72,
+	GEOMETRY_DESC_PARAM_HPB_NUMBER_LU = 73,
+	GEOMETRY_DESC_PARAM_HPB_SUBREGION_SIZE = 74,
+	GEOMETRY_DESC_PARAM_HPB_MAX_ACTIVE_REGS = 75,
+	GEOMETRY_DESC_PARAM_WB_MAX_ALLOC_UNITS = 79,
+	GEOMETRY_DESC_PARAM_WB_MAX_WB_LUNS = 83,
+	GEOMETRY_DESC_PARAM_WB_BUFF_CAP_ADJ = 84,
+	GEOMETRY_DESC_PARAM_WB_SUP_RED_TYPE = 85,
+	GEOMETRY_DESC_PARAM_WB_SUP_WB_TYPE = 86,
+};
+
+enum device_desc_param {
+	DEVICE_DESC_PARAM_LEN = 0,
+	DEVICE_DESC_PARAM_TYPE = 1,
+	DEVICE_DESC_PARAM_DEVICE_TYPE = 2,
+	DEVICE_DESC_PARAM_DEVICE_CLASS = 3,
+	DEVICE_DESC_PARAM_DEVICE_SUB_CLASS = 4,
+	DEVICE_DESC_PARAM_PRTCL = 5,
+	DEVICE_DESC_PARAM_NUM_LU = 6,
+	DEVICE_DESC_PARAM_NUM_WLU = 7,
+	DEVICE_DESC_PARAM_BOOT_ENBL = 8,
+	DEVICE_DESC_PARAM_DESC_ACCSS_ENBL = 9,
+	DEVICE_DESC_PARAM_INIT_PWR_MODE = 10,
+	DEVICE_DESC_PARAM_HIGH_PR_LUN = 11,
+	DEVICE_DESC_PARAM_SEC_RMV_TYPE = 12,
+	DEVICE_DESC_PARAM_SEC_LU = 13,
+	DEVICE_DESC_PARAM_BKOP_TERM_LT = 14,
+	DEVICE_DESC_PARAM_ACTVE_ICC_LVL = 15,
+	DEVICE_DESC_PARAM_SPEC_VER = 16,
+	DEVICE_DESC_PARAM_MANF_DATE = 18,
+	DEVICE_DESC_PARAM_MANF_NAME = 20,
+	DEVICE_DESC_PARAM_PRDCT_NAME = 21,
+	DEVICE_DESC_PARAM_SN = 22,
+	DEVICE_DESC_PARAM_OEM_ID = 23,
+	DEVICE_DESC_PARAM_MANF_ID = 24,
+	DEVICE_DESC_PARAM_UD_OFFSET = 26,
+	DEVICE_DESC_PARAM_UD_LEN = 27,
+	DEVICE_DESC_PARAM_RTT_CAP = 28,
+	DEVICE_DESC_PARAM_FRQ_RTC = 29,
+	DEVICE_DESC_PARAM_UFS_FEAT = 31,
+	DEVICE_DESC_PARAM_FFU_TMT = 32,
+	DEVICE_DESC_PARAM_Q_DPTH = 33,
+	DEVICE_DESC_PARAM_DEV_VER = 34,
+	DEVICE_DESC_PARAM_NUM_SEC_WPA = 36,
+	DEVICE_DESC_PARAM_PSA_MAX_DATA = 37,
+	DEVICE_DESC_PARAM_PSA_TMT = 41,
+	DEVICE_DESC_PARAM_PRDCT_REV = 42,
+	DEVICE_DESC_PARAM_HPB_VER = 64,
+	DEVICE_DESC_PARAM_HPB_CONTROL = 66,
+	DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP = 79,
+	DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN = 83,
+	DEVICE_DESC_PARAM_WB_TYPE = 84,
+	DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS = 85,
+};
+
+enum {
+	UFS_DEV_LOW_TEMP_NOTIF = 16,
+	UFS_DEV_HIGH_TEMP_NOTIF = 32,
+	UFS_DEV_EXT_TEMP_NOTIF = 64,
+	UFS_DEV_HPB_SUPPORT = 128,
+	UFS_DEV_WRITE_BOOSTER_SUP = 256,
+	UFS_DEV_EXT_IID_SUP = 65536,
+};
+
+enum unit_desc_param {
+	UNIT_DESC_PARAM_LEN = 0,
+	UNIT_DESC_PARAM_TYPE = 1,
+	UNIT_DESC_PARAM_UNIT_INDEX = 2,
+	UNIT_DESC_PARAM_LU_ENABLE = 3,
+	UNIT_DESC_PARAM_BOOT_LUN_ID = 4,
+	UNIT_DESC_PARAM_LU_WR_PROTECT = 5,
+	UNIT_DESC_PARAM_LU_Q_DEPTH = 6,
+	UNIT_DESC_PARAM_PSA_SENSITIVE = 7,
+	UNIT_DESC_PARAM_MEM_TYPE = 8,
+	UNIT_DESC_PARAM_DATA_RELIABILITY = 9,
+	UNIT_DESC_PARAM_LOGICAL_BLK_SIZE = 10,
+	UNIT_DESC_PARAM_LOGICAL_BLK_COUNT = 11,
+	UNIT_DESC_PARAM_ERASE_BLK_SIZE = 19,
+	UNIT_DESC_PARAM_PROVISIONING_TYPE = 23,
+	UNIT_DESC_PARAM_PHY_MEM_RSRC_CNT = 24,
+	UNIT_DESC_PARAM_CTX_CAPABILITIES = 32,
+	UNIT_DESC_PARAM_LARGE_UNIT_SIZE_M1 = 34,
+	UNIT_DESC_PARAM_HPB_LU_MAX_ACTIVE_RGNS = 35,
+	UNIT_DESC_PARAM_HPB_PIN_RGN_START_OFF = 37,
+	UNIT_DESC_PARAM_HPB_NUM_PIN_RGNS = 39,
+	UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS = 41,
+};
+
+enum {
+	PA_HS_MODE_A = 1,
+	PA_HS_MODE_B = 2,
+};
+
+enum power_desc_param_offset {
+	PWR_DESC_LEN = 0,
+	PWR_DESC_TYPE = 1,
+	PWR_DESC_ACTIVE_LVLS_VCC_0 = 2,
+	PWR_DESC_ACTIVE_LVLS_VCCQ_0 = 34,
+	PWR_DESC_ACTIVE_LVLS_VCCQ2_0 = 66,
+};
+
+enum {
+	UFSHCD_NANO_AMP = 0,
+	UFSHCD_MICRO_AMP = 1,
+	UFSHCD_MILI_AMP = 2,
+	UFSHCD_AMP = 3,
+};
+
+enum {
+	UPIU_COMMAND_SET_TYPE_SCSI = 0,
+	UPIU_COMMAND_SET_TYPE_UFS = 1,
+	UPIU_COMMAND_SET_TYPE_QUERY = 2,
+};
+
+enum ufs_lu_wp_type {
+	UFS_LU_NO_WP = 0,
+	UFS_LU_POWER_ON_WP = 1,
+	UFS_LU_PERM_WP = 2,
+};
+
+enum rpmb_unit_desc_param {
+	RPMB_UNIT_DESC_PARAM_LEN = 0,
+	RPMB_UNIT_DESC_PARAM_TYPE = 1,
+	RPMB_UNIT_DESC_PARAM_UNIT_INDEX = 2,
+	RPMB_UNIT_DESC_PARAM_LU_ENABLE = 3,
+	RPMB_UNIT_DESC_PARAM_BOOT_LUN_ID = 4,
+	RPMB_UNIT_DESC_PARAM_LU_WR_PROTECT = 5,
+	RPMB_UNIT_DESC_PARAM_LU_Q_DEPTH = 6,
+	RPMB_UNIT_DESC_PARAM_PSA_SENSITIVE = 7,
+	RPMB_UNIT_DESC_PARAM_MEM_TYPE = 8,
+	RPMB_UNIT_DESC_PARAM_REGION_EN = 9,
+	RPMB_UNIT_DESC_PARAM_LOGICAL_BLK_SIZE = 10,
+	RPMB_UNIT_DESC_PARAM_LOGICAL_BLK_COUNT = 11,
+	RPMB_UNIT_DESC_PARAM_REGION0_SIZE = 19,
+	RPMB_UNIT_DESC_PARAM_REGION1_SIZE = 20,
+	RPMB_UNIT_DESC_PARAM_REGION2_SIZE = 21,
+	RPMB_UNIT_DESC_PARAM_REGION3_SIZE = 22,
+	RPMB_UNIT_DESC_PARAM_PROVISIONING_TYPE = 23,
+	RPMB_UNIT_DESC_PARAM_PHY_MEM_RSRC_CNT = 24,
+};
+
+enum {
+	MASK_EXT_IID_SUPPORT = 1024,
+};
+
+enum {
+	TASK_REQ_UPIU_SIZE_DWORDS = 8,
+	TASK_RSP_UPIU_SIZE_DWORDS = 8,
+	ALIGNED_UPIU_SIZE = 512,
+};
+
+struct trace_event_raw_ufshcd_clk_gating {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	int state;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_clk_scaling {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_state;
+	u32 __data_loc_clk;
+	u32 prev_state;
+	u32 curr_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_auto_bkops_state {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_profiling_template {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_profile_info;
+	s64 time_us;
+	int err;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_template {
+	struct trace_entry ent;
+	s64 usecs;
+	int err;
+	u32 __data_loc_dev_name;
+	int dev_state;
+	int link_state;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_command {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	enum ufs_trace_str_t str_t;
+	unsigned int tag;
+	u32 doorbell;
+	u32 hwq_id;
+	u32 intr;
+	u64 lba;
+	int transfer_len;
+	u8 opcode;
+	u8 group_id;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_uic_command {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	enum ufs_trace_str_t str_t;
+	u32 cmd;
+	u32 arg1;
+	u32 arg2;
+	u32 arg3;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_upiu {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	enum ufs_trace_str_t str_t;
+	unsigned char hdr[12];
+	unsigned char tsf[16];
+	enum ufs_trace_tsf_t tsf_t;
+	char __data[0];
+};
+
+struct trace_event_raw_ufshcd_exception_event {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u16 status;
+	char __data[0];
+};
+
+struct utp_upiu_cmd {
+	__be32 exp_data_transfer_len;
+	__u8 cdb[16];
+};
+
+struct utp_upiu_query {
+	__u8 opcode;
+	__u8 idn;
+	__u8 index;
+	__u8 selector;
+	__be16 reserved_osf;
+	__be16 length;
+	__be32 value;
+	__be32 reserved[2];
+};
+
+struct utp_upiu_header {
+	union {
+		struct {
+			__be32 dword_0;
+			__be32 dword_1;
+			__be32 dword_2;
+		};
+		struct {
+			__u8 transaction_code;
+			__u8 flags;
+			__u8 lun;
+			__u8 task_tag;
+			__u8 command_set_type: 4;
+			__u8 iid: 4;
+			union {
+				__u8 tm_function;
+				__u8 query_function;
+			};
+			__u8 response;
+			__u8 status;
+			__u8 ehs_length;
+			__u8 device_information;
+			__be16 data_segment_length;
+		};
+	};
+};
+
+struct utp_upiu_req {
+	struct utp_upiu_header header;
+	union {
+		struct utp_upiu_cmd sc;
+		struct utp_upiu_query qr;
+		struct utp_upiu_query uc;
+	};
+};
+
+struct ufs_clk_info {
+	struct list_head list;
+	struct clk *clk;
+	const char *name;
+	u32 max_freq;
+	u32 min_freq;
+	u32 curr_freq;
+	bool keep_link_active;
+	bool enabled;
+};
+
+struct utp_upiu_query_v4_0 {
+	__u8 opcode;
+	__u8 idn;
+	__u8 index;
+	__u8 selector;
+	__u8 osf3;
+	__u8 osf4;
+	__be16 osf5;
+	__be32 osf6;
+	__be32 osf7;
+	__be32 reserved;
+};
+
+struct utp_cmd_rsp {
+	__be32 residual_transfer_count;
+	__be32 reserved[4];
+	__be16 sense_data_len;
+	u8 sense_data[18];
+};
+
+struct utp_upiu_rsp {
+	struct utp_upiu_header header;
+	union {
+		struct utp_cmd_rsp sr;
+		struct utp_upiu_query qr;
+	};
+};
+
+struct ufshcd_sg_entry {
+	__le64 addr;
+	__le32 reserved;
+	__le32 size;
+};
+
+struct ufs_event_hist {
+	int pos;
+	u32 val[8];
+	u64 tstamp[8];
+	unsigned long long cnt;
+};
+
+struct ufs_stats {
+	u32 last_intr_status;
+	u64 last_intr_ts;
+	u32 hibern8_exit_cnt;
+	u64 last_hibern8_exit_tstamp;
+	struct ufs_event_hist event[15];
+};
+
+struct ufs_query_req {
+	u8 query_func;
+	struct utp_upiu_query upiu_req;
+};
+
+struct ufs_query_res {
+	struct utp_upiu_query upiu_res;
+};
+
+struct ufs_query {
+	struct ufs_query_req request;
+	u8 *descriptor;
+	struct ufs_query_res response;
+};
+
+struct ufs_dev_cmd {
+	enum dev_cmd_type type;
+	struct mutex lock;
+	struct completion *complete;
+	struct ufs_query query;
+};
+
+struct ufs_dev_info {
+	bool f_power_on_wp_en;
+	bool is_lu_power_on_wp;
+	u8 max_lu_supported;
+	u16 wmanufacturerid;
+	u8 *model;
+	u16 wspecversion;
+	u32 clk_gating_wait_us;
+	u8 bqueuedepth;
+	bool wb_enabled;
+	bool wb_buf_flush_enabled;
+	u8 wb_dedicated_lu;
+	u8 wb_buffer_type;
+	bool b_rpm_dev_flush_capable;
+	u8 b_presrv_uspc_en;
+	bool b_advanced_rpmb_en;
+	bool b_ext_iid_en;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+struct ufs_vreg;
+
+struct ufs_vreg_info {
+	struct ufs_vreg *vcc;
+	struct ufs_vreg *vccq;
+	struct ufs_vreg *vccq2;
+	struct ufs_vreg *vdd_hba;
+};
+
+struct ufs_pa_layer_attr {
+	u32 gear_rx;
+	u32 gear_tx;
+	u32 lane_rx;
+	u32 lane_tx;
+	u32 pwr_rx;
+	u32 pwr_tx;
+	u32 hs_rate;
+};
+
+struct ufs_pwr_mode_info {
+	bool is_valid;
+	struct ufs_pa_layer_attr info;
+};
+
+struct ufs_clk_gating {
+	struct delayed_work gate_work;
+	struct work_struct ungate_work;
+	enum clk_gating_state state;
+	unsigned long delay_ms;
+	bool is_suspended;
+	struct device_attribute delay_attr;
+	struct device_attribute enable_attr;
+	bool is_enabled;
+	bool is_initialized;
+	int active_reqs;
+	struct workqueue_struct *clk_gating_workq;
+	u64 android_kabi_reserved1;
+};
+
+struct ufs_clk_scaling {
+	int active_reqs;
+	unsigned long tot_busy_t;
+	ktime_t window_start_t;
+	ktime_t busy_start_t;
+	struct device_attribute enable_attr;
+	struct ufs_pa_layer_attr saved_pwr_info;
+	struct workqueue_struct *workq;
+	struct work_struct suspend_work;
+	struct work_struct resume_work;
+	u32 min_gear;
+	bool is_enabled;
+	bool is_allowed;
+	bool is_initialized;
+	bool is_busy_started;
+	bool is_suspended;
+	bool suspend_on_no_request;
+	u64 android_kabi_reserved1;
+};
+
+struct ufs_hba_monitor {
+	unsigned long chunk_size;
+	unsigned long nr_sec_rw[2];
+	ktime_t total_busy[2];
+	unsigned long nr_req[2];
+	ktime_t lat_sum[2];
+	ktime_t lat_max[2];
+	ktime_t lat_min[2];
+	u32 nr_queued[2];
+	ktime_t busy_start_ts[2];
+	ktime_t enabled_ts;
+	bool enabled;
+};
+
+union ufs_crypto_capabilities {
+	__le32 reg_val;
+	struct {
+		u8 num_crypto_cap;
+		u8 config_count;
+		u8 reserved;
+		u8 config_array_ptr;
+	};
+};
+
+struct ufshcd_res_info {
+	const char *name;
+	struct resource *resource;
+	void *base;
+};
+
+struct ufshcd_mcq_opr_info_t {
+	unsigned long offset;
+	unsigned long stride;
+	void *base;
+};
+
+struct utp_transfer_cmd_desc;
+
+struct utp_transfer_req_desc;
+
+struct utp_task_req_desc;
+
+struct ufshcd_lrb;
+
+struct ufs_hba_variant_ops;
+
+struct uic_command;
+
+union ufs_crypto_cap_entry;
+
+struct ufs_hw_queue;
+
+struct ufs_hba {
+	void *mmio_base;
+	struct utp_transfer_cmd_desc *ucdl_base_addr;
+	struct utp_transfer_req_desc *utrdl_base_addr;
+	struct utp_task_req_desc *utmrdl_base_addr;
+	dma_addr_t ucdl_dma_addr;
+	dma_addr_t utrdl_dma_addr;
+	dma_addr_t utmrdl_dma_addr;
+	struct Scsi_Host *host;
+	struct device *dev;
+	struct scsi_device *ufs_device_wlun;
+	enum ufs_dev_pwr_mode curr_dev_pwr_mode;
+	enum uic_link_state uic_link_state;
+	enum ufs_pm_level rpm_lvl;
+	enum ufs_pm_level spm_lvl;
+	int pm_op_in_progress;
+	u32 ahit;
+	struct ufshcd_lrb *lrb;
+	unsigned long outstanding_tasks;
+	spinlock_t outstanding_lock;
+	unsigned long outstanding_reqs;
+	u32 capabilities;
+	int nutrs;
+	u32 mcq_capabilities;
+	int nutmrs;
+	u32 reserved_slot;
+	u32 ufs_version;
+	const struct ufs_hba_variant_ops *vops;
+	struct ufs_hba_variant_params *vps;
+	void *priv;
+	size_t sg_entry_size;
+	unsigned int irq;
+	bool is_irq_enabled;
+	enum ufs_ref_clk_freq dev_ref_clk_freq;
+	unsigned int quirks;
+	unsigned int android_quirks;
+	unsigned int dev_quirks;
+	struct blk_mq_tag_set tmf_tag_set;
+	struct request_queue *tmf_queue;
+	struct request **tmf_rqs;
+	struct uic_command *active_uic_cmd;
+	struct mutex uic_cmd_mutex;
+	struct completion *uic_async_done;
+	enum ufshcd_state ufshcd_state;
+	u32 eh_flags;
+	u32 intr_mask;
+	u16 ee_ctrl_mask;
+	u16 ee_drv_mask;
+	u16 ee_usr_mask;
+	struct mutex ee_ctrl_mutex;
+	bool is_powered;
+	bool shutting_down;
+	struct semaphore host_sem;
+	struct workqueue_struct *eh_wq;
+	struct work_struct eh_work;
+	struct work_struct eeh_work;
+	u32 errors;
+	u32 uic_error;
+	u32 saved_err;
+	u32 saved_uic_err;
+	struct ufs_stats ufs_stats;
+	bool force_reset;
+	bool force_pmc;
+	bool silence_err_logs;
+	struct ufs_dev_cmd dev_cmd;
+	ktime_t last_dme_cmd_tstamp;
+	int nop_out_timeout;
+	struct ufs_dev_info dev_info;
+	bool auto_bkops_enabled;
+	struct ufs_vreg_info vreg_info;
+	struct list_head clk_list_head;
+	int req_abort_count;
+	u32 lanes_per_direction;
+	struct ufs_pa_layer_attr pwr_info;
+	struct ufs_pwr_mode_info max_pwr_info;
+	struct ufs_clk_gating clk_gating;
+	u32 caps;
+	struct devfreq *devfreq;
+	struct ufs_clk_scaling clk_scaling;
+	bool system_suspending;
+	bool is_sys_suspended;
+	enum bkops_status urgent_bkops_lvl;
+	bool is_urgent_bkops_lvl_checked;
+	struct mutex wb_mutex;
+	struct rw_semaphore clk_scaling_lock;
+	atomic_t scsi_block_reqs_cnt;
+	struct device bsg_dev;
+	struct request_queue *bsg_queue;
+	struct delayed_work rpm_dev_flush_recheck_work;
+	struct ufs_hba_monitor monitor;
+	union ufs_crypto_capabilities crypto_capabilities;
+	union ufs_crypto_cap_entry *crypto_cap_array;
+	u32 crypto_cfg_register;
+	struct blk_crypto_profile crypto_profile;
+	struct dentry *debugfs_root;
+	struct delayed_work debugfs_ee_work;
+	u32 debugfs_ee_rate_limit_ms;
+	u32 luns_avail;
+	unsigned int nr_hw_queues;
+	unsigned int nr_queues[3];
+	bool complete_put;
+	bool ext_iid_sup;
+	bool scsi_host_added;
+	bool mcq_sup;
+	bool mcq_enabled;
+	struct ufshcd_res_info res[7];
+	void *mcq_base;
+	struct ufs_hw_queue *uhq;
+	struct ufs_hw_queue *dev_cmd_queue;
+	struct ufshcd_mcq_opr_info_t mcq_opr[4];
+	u64 android_oem_data1;
+};
+
+struct utp_transfer_cmd_desc {
+	u8 command_upiu[512];
+	u8 response_upiu[512];
+	u8 prd_table[0];
+};
+
+struct request_desc_header {
+	u8 cci;
+	u8 ehs_length;
+	u8 reserved2: 7;
+	u8 enable_crypto: 1;
+	u8 interrupt: 1;
+	u8 data_direction: 2;
+	u8 reserved1: 1;
+	u8 command_type: 4;
+	__le32 dunl;
+	u8 ocs;
+	u8 cds;
+	__le16 ldbc;
+	__le32 dunu;
+};
+
+struct utp_transfer_req_desc {
+	struct request_desc_header header;
+	__le64 command_desc_base_addr;
+	__le16 response_upiu_length;
+	__le16 response_upiu_offset;
+	__le16 prd_table_length;
+	__le16 prd_table_offset;
+};
+
+struct utp_task_req_desc {
+	struct request_desc_header header;
+	struct {
+		struct utp_upiu_header req_header;
+		__be32 input_param1;
+		__be32 input_param2;
+		__be32 input_param3;
+		__be32 __reserved1[2];
+	} upiu_req;
+	struct {
+		struct utp_upiu_header rsp_header;
+		__be32 output_param1;
+		__be32 output_param2;
+		__be32 __reserved2[3];
+	} upiu_rsp;
+};
+
+struct ufshcd_lrb {
+	struct utp_transfer_req_desc *utr_descriptor_ptr;
+	struct utp_upiu_req *ucd_req_ptr;
+	struct utp_upiu_rsp *ucd_rsp_ptr;
+	struct ufshcd_sg_entry *ucd_prdt_ptr;
+	dma_addr_t utrd_dma_addr;
+	dma_addr_t ucd_req_dma_addr;
+	dma_addr_t ucd_rsp_dma_addr;
+	dma_addr_t ucd_prdt_dma_addr;
+	struct scsi_cmnd *cmd;
+	int scsi_status;
+	int command_type;
+	int task_tag;
+	u8 lun;
+	bool intr_cmd;
+	ktime_t issue_time_stamp;
+	u64 issue_time_stamp_local_clock;
+	ktime_t compl_time_stamp;
+	u64 compl_time_stamp_local_clock;
+	int crypto_key_slot;
+	u64 data_unit_num;
+	bool req_abort_skip;
+	u64 android_kabi_reserved1;
+};
+
+union ufs_crypto_cfg_entry;
+
+struct ufs_hba_variant_ops {
+	const char *name;
+	int (*init)(struct ufs_hba *);
+	void (*exit)(struct ufs_hba *);
+	u32 (*get_ufs_hci_version)(struct ufs_hba *);
+	int (*clk_scale_notify)(struct ufs_hba *, bool, enum ufs_notify_change_status);
+	int (*setup_clocks)(struct ufs_hba *, bool, enum ufs_notify_change_status);
+	int (*hce_enable_notify)(struct ufs_hba *, enum ufs_notify_change_status);
+	int (*link_startup_notify)(struct ufs_hba *, enum ufs_notify_change_status);
+	int (*pwr_change_notify)(struct ufs_hba *, enum ufs_notify_change_status, struct ufs_pa_layer_attr *, struct ufs_pa_layer_attr *);
+	void (*setup_xfer_req)(struct ufs_hba *, int, bool);
+	void (*setup_task_mgmt)(struct ufs_hba *, int, u8);
+	void (*hibern8_notify)(struct ufs_hba *, enum uic_cmd_dme, enum ufs_notify_change_status);
+	int (*apply_dev_quirks)(struct ufs_hba *);
+	void (*fixup_dev_quirks)(struct ufs_hba *);
+	int (*suspend)(struct ufs_hba *, enum ufs_pm_op, enum ufs_notify_change_status);
+	int (*resume)(struct ufs_hba *, enum ufs_pm_op);
+	void (*dbg_register_dump)(struct ufs_hba *);
+	int (*phy_initialization)(struct ufs_hba *);
+	int (*device_reset)(struct ufs_hba *);
+	void (*config_scaling_param)(struct ufs_hba *, struct devfreq_dev_profile *, struct devfreq_simple_ondemand_data *);
+	int (*program_key)(struct ufs_hba *, const union ufs_crypto_cfg_entry *, int);
+	void (*event_notify)(struct ufs_hba *, enum ufs_event_type, void *);
+	void (*reinit_notify)(struct ufs_hba *);
+	int (*mcq_config_resource)(struct ufs_hba *);
+	int (*get_hba_mac)(struct ufs_hba *);
+	int (*op_runtime_config)(struct ufs_hba *);
+	int (*get_outstanding_cqs)(struct ufs_hba *, unsigned long *);
+	int (*config_esi)(struct ufs_hba *);
+	void (*config_scsi_dev)(struct scsi_device *);
+};
+
+union ufs_crypto_cfg_entry {
+	__le32 reg_val[32];
+	struct {
+		u8 crypto_key[64];
+		u8 data_unit_size;
+		u8 crypto_cap_idx;
+		u8 reserved_1;
+		u8 config_enable;
+		u8 reserved_multi_host;
+		u8 reserved_2;
+		u8 vsb[2];
+		u8 reserved_3[56];
+	};
+};
+
+struct uic_command {
+	u32 command;
+	u32 argument1;
+	u32 argument2;
+	u32 argument3;
+	int cmd_active;
+	struct completion done;
+};
+
+struct ufs_vreg {
+	struct regulator *reg;
+	const char *name;
+	bool always_on;
+	bool enabled;
+	int max_uA;
+};
+
+union ufs_crypto_cap_entry {
+	__le32 reg_val;
+	struct {
+		u8 algorithm_id;
+		u8 sdus_mask;
+		u8 key_size;
+		u8 reserved;
+	};
+};
+
+struct cq_entry;
+
+struct ufs_hw_queue {
+	void *mcq_sq_head;
+	void *mcq_sq_tail;
+	void *mcq_cq_head;
+	void *mcq_cq_tail;
+	struct utp_transfer_req_desc *sqe_base_addr;
+	dma_addr_t sqe_dma_addr;
+	struct cq_entry *cqe_base_addr;
+	dma_addr_t cqe_dma_addr;
+	u32 max_entries;
+	u32 id;
+	u32 sq_tail_slot;
+	spinlock_t sq_lock;
+	u32 cq_tail_slot;
+	u32 cq_head_slot;
+	spinlock_t cq_lock;
+	struct mutex sq_mutex;
+};
+
+struct cq_entry {
+	__le64 command_desc_base_addr;
+	__le16 response_upiu_length;
+	__le16 response_upiu_offset;
+	__le16 prd_table_length;
+	__le16 prd_table_offset;
+	__le32 status;
+	__le32 reserved[3];
+};
+
+struct trace_event_data_offsets_ufshcd_clk_gating {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_template {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_command {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_uic_command {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_upiu {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_exception_event {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_ufshcd_clk_scaling {
+	u32 dev_name;
+	u32 state;
+	u32 clk;
+};
+
+struct trace_event_data_offsets_ufshcd_auto_bkops_state {
+	u32 dev_name;
+	u32 state;
+};
+
+struct trace_event_data_offsets_ufshcd_profiling_template {
+	u32 dev_name;
+	u32 profile_info;
+};
+
+struct uc_string_id {
+	u8 len;
+	u8 type;
+	wchar_t uc[0];
+};
+
+struct ufs_arpmb_meta {
+	__be16 req_resp_type;
+	__u8 nonce[16];
+	__be32 write_counter;
+	__be16 addr_lun;
+	__be16 block_count;
+	__be16 result;
+} __attribute__((packed));
+
+struct ufs_ehs {
+	__u8 length;
+	__u8 ehs_type;
+	__be16 ehssub_type;
+	struct ufs_arpmb_meta meta;
+	__u8 mac_key[32];
+};
+
+enum interconnect_desc_param {
+	INTERCONNECT_DESC_PARAM_LEN = 0,
+	INTERCONNECT_DESC_PARAM_TYPE = 1,
+	INTERCONNECT_DESC_PARAM_UNIPRO_VER = 2,
+	INTERCONNECT_DESC_PARAM_MPHY_VER = 4,
+};
+
+enum health_desc_param {
+	HEALTH_DESC_PARAM_LEN = 0,
+	HEALTH_DESC_PARAM_TYPE = 1,
+	HEALTH_DESC_PARAM_EOL_INFO = 2,
+	HEALTH_DESC_PARAM_LIFE_TIME_EST_A = 3,
+	HEALTH_DESC_PARAM_LIFE_TIME_EST_B = 4,
+};
+
+enum ufshcd_mcq_opr {
+	OPR_SQD = 0,
+	OPR_SQIS = 1,
+	OPR_CQD = 2,
+	OPR_CQIS = 3,
+	OPR_MAX = 4,
+};
+
+enum {
+	REG_CQIS = 0,
+	REG_CQIE = 4,
+};
+
+enum {
+	REG_SQATTR = 0,
+	REG_SQLBA = 4,
+	REG_SQUBA = 8,
+	REG_SQDAO = 12,
+	REG_SQISAO = 16,
+	REG_CQATTR = 32,
+	REG_CQLBA = 36,
+	REG_CQUBA = 40,
+	REG_CQDAO = 44,
+	REG_CQISAO = 48,
+};
+
+enum {
+	REG_SQHP = 0,
+	REG_SQTP = 4,
+	REG_SQRTC = 8,
+	REG_SQCTI = 12,
+	REG_SQRTS = 16,
+};
+
+enum {
+	REG_CQHP = 0,
+	REG_CQTP = 4,
+};
+
+enum {
+	SQ_START = 0,
+	SQ_STOP = 1,
+	SQ_ICU = 2,
+};
+
+enum {
+	SQ_STS = 1,
+	SQ_CUS = 2,
+};
+
+struct ufs_debugfs_attr {
+	const char *name;
+	mode_t mode;
+	const struct file_operations *fops;
+};
+
+enum ufs_bsg_msg_code {
+	UPIU_TRANSACTION_UIC_CMD = 31,
+	UPIU_TRANSACTION_ARPMB_CMD = 32,
+};
+
+enum ufs_rpmb_op_type {
+	UFS_RPMB_WRITE_KEY = 1,
+	UFS_RPMB_READ_CNT = 2,
+	UFS_RPMB_WRITE = 3,
+	UFS_RPMB_READ = 4,
+	UFS_RPMB_READ_RESP = 5,
+	UFS_RPMB_SEC_CONF_WRITE = 6,
+	UFS_RPMB_SEC_CONF_READ = 7,
+	UFS_RPMB_PURGE_ENABLE = 8,
+	UFS_RPMB_PURGE_STATUS_READ = 9,
+};
+
+struct ufs_bsg_request {
+	__u32 msgcode;
+	struct utp_upiu_req upiu_req;
+};
+
+struct ufs_rpmb_request {
+	struct ufs_bsg_request bsg_request;
+	struct ufs_ehs ehs_req;
+};
+
+struct ufs_bsg_reply {
+	int result;
+	__u32 reply_payload_rcv_len;
+	struct utp_upiu_req upiu_rsp;
+};
+
+struct ufs_rpmb_reply {
+	struct ufs_bsg_reply bsg_reply;
+	struct ufs_ehs ehs_rsp;
+};
+
+enum ufs_crypto_alg {
+	UFS_CRYPTO_ALG_AES_XTS = 0,
+	UFS_CRYPTO_ALG_BITLOCKER_AES_CBC = 1,
+	UFS_CRYPTO_ALG_AES_ECB = 2,
+	UFS_CRYPTO_ALG_ESSIV_AES_CBC = 3,
+};
+
+enum ufs_crypto_key_size {
+	UFS_CRYPTO_KEY_SIZE_INVALID = 0,
+	UFS_CRYPTO_KEY_SIZE_128 = 1,
+	UFS_CRYPTO_KEY_SIZE_192 = 2,
+	UFS_CRYPTO_KEY_SIZE_256 = 3,
+	UFS_CRYPTO_KEY_SIZE_512 = 4,
+};
+
+struct ufs_crypto_alg_entry {
+	enum ufs_crypto_alg ufs_alg;
+	enum ufs_crypto_key_size ufs_key_size;
+};
+
+struct ufshcd_dme_attr_val {
+	u32 attr_sel;
+	u32 mib_val;
+	u8 peer;
+};
+
+enum clk_div_values {
+	DWC_UFS_REG_HCLKDIV_DIV_62_5 = 62,
+	DWC_UFS_REG_HCLKDIV_DIV_125 = 125,
+	DWC_UFS_REG_HCLKDIV_DIV_200 = 200,
+};
+
+enum dwc_specific_registers {
+	DWC_UFS_REG_HCLKDIV = 252,
+};
+
+enum link_status {
+	UFSHCD_LINK_IS_DOWN = 1,
+	UFSHCD_LINK_IS_UP = 2,
+};
+
+enum intel_ufs_dsm_func_id {
+	INTEL_DSM_FNS = 0,
+	INTEL_DSM_RESET = 1,
+};
+
+struct ufs_host {
+	void (*late_init)(struct ufs_hba *);
+};
+
+struct intel_host {
+	struct ufs_host ufs_host;
+	u32 dsm_fns;
+	u32 active_ltr;
+	u32 idle_ltr;
+	struct dentry *debugfs_root;
+	struct gpio_desc *reset_gpio;
+};
+
+struct ufs_dev_params {
+	u32 pwm_rx_gear;
+	u32 pwm_tx_gear;
+	u32 hs_rx_gear;
+	u32 hs_tx_gear;
+	u32 rx_lanes;
+	u32 tx_lanes;
+	u32 rx_pwr_pwm;
+	u32 tx_pwr_pwm;
+	u32 rx_pwr_hs;
+	u32 tx_pwr_hs;
+	u32 hs_rate;
+	u32 desired_working_mode;
+};
+
+enum led_default_state {
+	LEDS_DEFSTATE_OFF = 0,
+	LEDS_DEFSTATE_ON = 1,
+	LEDS_DEFSTATE_KEEP = 2,
+};
+
+struct led_properties {
+	u32 color;
+	bool color_present;
+	const char *function;
+	u32 func_enum;
+	bool func_enum_present;
+	const char *label;
+};
+
+struct led_lookup_data {
+	struct list_head list;
+	const char *provider;
+	const char *dev_id;
+	const char *con_id;
+};
+
+struct led_flash_setting {
+	u32 min;
+	u32 max;
+	u32 step;
+	u32 val;
+};
+
+struct led_flash_ops;
+
+struct led_classdev_flash {
+	struct led_classdev led_cdev;
+	const struct led_flash_ops *ops;
+	struct led_flash_setting brightness;
+	struct led_flash_setting timeout;
+	const struct attribute_group *sysfs_groups[5];
+};
+
+struct led_flash_ops {
+	int (*flash_brightness_set)(struct led_classdev_flash *, u32);
+	int (*flash_brightness_get)(struct led_classdev_flash *, u32 *);
+	int (*strobe_set)(struct led_classdev_flash *, bool);
+	int (*strobe_get)(struct led_classdev_flash *, bool *);
+	int (*timeout_set)(struct led_classdev_flash *, u32);
+	int (*fault_get)(struct led_classdev_flash *, u32 *);
+};
+
+struct mc_subled;
+
+struct led_classdev_mc {
+	struct led_classdev led_cdev;
+	unsigned int num_colors;
+	struct mc_subled *subled_info;
+};
+
+struct mc_subled {
+	unsigned int color_index;
+	unsigned int brightness;
+	unsigned int intensity;
+	unsigned int channel;
+};
+
+struct transient_trig_data {
+	int activate;
+	int state;
+	int restore_state;
+	unsigned long duration;
+	struct timer_list timer;
+	struct led_classdev *led_cdev;
+};
+
+struct dmi_memdev_info {
+	const char *device;
+	const char *bank;
+	u64 size;
+	u16 handle;
+	u8 type;
+};
+
+enum dmi_entry_type {
+	DMI_ENTRY_BIOS = 0,
+	DMI_ENTRY_SYSTEM = 1,
+	DMI_ENTRY_BASEBOARD = 2,
+	DMI_ENTRY_CHASSIS = 3,
+	DMI_ENTRY_PROCESSOR = 4,
+	DMI_ENTRY_MEM_CONTROLLER = 5,
+	DMI_ENTRY_MEM_MODULE = 6,
+	DMI_ENTRY_CACHE = 7,
+	DMI_ENTRY_PORT_CONNECTOR = 8,
+	DMI_ENTRY_SYSTEM_SLOT = 9,
+	DMI_ENTRY_ONBOARD_DEVICE = 10,
+	DMI_ENTRY_OEMSTRINGS = 11,
+	DMI_ENTRY_SYSCONF = 12,
+	DMI_ENTRY_BIOS_LANG = 13,
+	DMI_ENTRY_GROUP_ASSOC = 14,
+	DMI_ENTRY_SYSTEM_EVENT_LOG = 15,
+	DMI_ENTRY_PHYS_MEM_ARRAY = 16,
+	DMI_ENTRY_MEM_DEVICE = 17,
+	DMI_ENTRY_32_MEM_ERROR = 18,
+	DMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19,
+	DMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20,
+	DMI_ENTRY_BUILTIN_POINTING_DEV = 21,
+	DMI_ENTRY_PORTABLE_BATTERY = 22,
+	DMI_ENTRY_SYSTEM_RESET = 23,
+	DMI_ENTRY_HW_SECURITY = 24,
+	DMI_ENTRY_SYSTEM_POWER_CONTROLS = 25,
+	DMI_ENTRY_VOLTAGE_PROBE = 26,
+	DMI_ENTRY_COOLING_DEV = 27,
+	DMI_ENTRY_TEMP_PROBE = 28,
+	DMI_ENTRY_ELECTRICAL_CURRENT_PROBE = 29,
+	DMI_ENTRY_OOB_REMOTE_ACCESS = 30,
+	DMI_ENTRY_BIS_ENTRY = 31,
+	DMI_ENTRY_SYSTEM_BOOT = 32,
+	DMI_ENTRY_MGMT_DEV = 33,
+	DMI_ENTRY_MGMT_DEV_COMPONENT = 34,
+	DMI_ENTRY_MGMT_DEV_THRES = 35,
+	DMI_ENTRY_MEM_CHANNEL = 36,
+	DMI_ENTRY_IPMI_DEV = 37,
+	DMI_ENTRY_SYS_POWER_SUPPLY = 38,
+	DMI_ENTRY_ADDITIONAL = 39,
+	DMI_ENTRY_ONBOARD_DEV_EXT = 40,
+	DMI_ENTRY_MGMT_CONTROLLER_HOST = 41,
+	DMI_ENTRY_INACTIVE = 126,
+	DMI_ENTRY_END_OF_TABLE = 127,
+};
+
+struct dmi_header {
+	u8 type;
+	u8 length;
+	u16 handle;
+};
+
+struct dmi_device_attribute {
+	struct device_attribute dev_attr;
+	int field;
+};
+
+struct mafield {
+	const char *prefix;
+	int field;
+};
+
+struct firmware_map_entry;
+
+struct memmap_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct firmware_map_entry *, char *);
+};
+
+struct firmware_map_entry {
+	u64 start;
+	u64 end;
+	const char *type;
+	struct list_head list;
+	struct kobject kobj;
+};
+
+typedef efi_status_t efi_get_time_t(efi_time_t *, efi_time_cap_t *);
+
+typedef efi_status_t efi_set_time_t(efi_time_t *);
+
+typedef efi_status_t efi_get_wakeup_time_t(efi_bool_t *, efi_bool_t *, efi_time_t *);
+
+typedef efi_status_t efi_set_wakeup_time_t(efi_bool_t, efi_time_t *);
+
+typedef efi_status_t efi_get_variable_t(efi_char16_t *, efi_guid_t *, u32 *, unsigned long *, void *);
+
+typedef efi_status_t efi_get_next_variable_t(unsigned long *, efi_char16_t *, efi_guid_t *);
+
+typedef efi_status_t efi_set_variable_t(efi_char16_t *, efi_guid_t *, u32, unsigned long, void *);
+
+typedef efi_status_t efi_query_variable_info_t(u32, u64 *, u64 *, u64 *);
+
+typedef efi_status_t efi_update_capsule_t(efi_capsule_header_t **, unsigned long, unsigned long);
+
+typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **, unsigned long, u64 *, int *);
+
+typedef efi_status_t efi_get_next_high_mono_count_t(u32 *);
+
+typedef void efi_reset_system_t(int, efi_status_t, unsigned long, efi_char16_t *);
+
+struct efi {
+	const efi_runtime_services_t *runtime;
+	unsigned int runtime_version;
+	unsigned int runtime_supported_mask;
+	unsigned long acpi;
+	unsigned long acpi20;
+	unsigned long smbios;
+	unsigned long smbios3;
+	unsigned long esrt;
+	unsigned long tpm_log;
+	unsigned long tpm_final_log;
+	unsigned long mokvar_table;
+	unsigned long coco_secret;
+	unsigned long unaccepted;
+	efi_get_time_t *get_time;
+	efi_set_time_t *set_time;
+	efi_get_wakeup_time_t *get_wakeup_time;
+	efi_set_wakeup_time_t *set_wakeup_time;
+	efi_get_variable_t *get_variable;
+	efi_get_next_variable_t *get_next_variable;
+	efi_set_variable_t *set_variable;
+	efi_set_variable_t *set_variable_nonblocking;
+	efi_query_variable_info_t *query_variable_info;
+	efi_query_variable_info_t *query_variable_info_nonblocking;
+	efi_update_capsule_t *update_capsule;
+	efi_query_capsule_caps_t *query_capsule_caps;
+	efi_get_next_high_mono_count_t *get_next_high_mono_count;
+	efi_reset_system_t *reset_system;
+	struct efi_memory_map memmap;
+	unsigned long flags;
+};
+
+struct linux_efi_memreserve {
+	int size;
+	atomic_t count;
+	phys_addr_t next;
+	struct {
+		phys_addr_t base;
+		phys_addr_t size;
+	} entry[0];
+};
+
+typedef efi_status_t efi_query_variable_store_t(u32, unsigned long, bool);
+
+struct efivar_operations {
+	efi_get_variable_t *get_variable;
+	efi_get_next_variable_t *get_next_variable;
+	efi_set_variable_t *set_variable;
+	efi_set_variable_t *set_variable_nonblocking;
+	efi_query_variable_store_t *query_variable_store;
+	efi_query_variable_info_t *query_variable_info;
+};
+
+struct efivars {
+	struct kset *kset;
+	const struct efivar_operations *ops;
+};
+
+struct linux_efi_random_seed {
+	u32 size;
+	u8 bits[0];
+};
+
+typedef struct {
+	u16 version;
+	u16 length;
+	u32 runtime_services_supported;
+} efi_rt_properties_table_t;
+
+struct linux_efi_initrd {
+	unsigned long base;
+	unsigned long size;
+};
+
+typedef struct {
+	u32 version;
+	u32 num_entries;
+	u32 desc_size;
+	u32 flags;
+	efi_memory_desc_t entry[0];
+} efi_memory_attributes_table_t;
+
+enum tcpa_event_types {
+	PREBOOT = 0,
+	POST_CODE = 1,
+	UNUSED = 2,
+	NO_ACTION = 3,
+	SEPARATOR = 4,
+	ACTION = 5,
+	EVENT_TAG = 6,
+	SCRTM_CONTENTS = 7,
+	SCRTM_VERSION = 8,
+	CPU_MICROCODE = 9,
+	PLATFORM_CONFIG_FLAGS = 10,
+	TABLE_OF_DEVICES = 11,
+	COMPACT_HASH = 12,
+	IPL = 13,
+	IPL_PARTITION_DATA = 14,
+	NONHOST_CODE = 15,
+	NONHOST_CONFIG = 16,
+	NONHOST_INFO = 17,
+};
+
+struct tpm_digest {
+	u16 alg_id;
+	u8 digest[64];
+};
+
+struct tcg_pcr_event2_head {
+	u32 pcr_idx;
+	u32 event_type;
+	u32 count;
+	struct tpm_digest digests[0];
+};
+
+struct tcg_efi_specid_event_algs {
+	u16 alg_id;
+	u16 digest_size;
+};
+
+struct tcg_efi_specid_event_head {
+	u8 signature[16];
+	u32 platform_class;
+	u8 spec_version_minor;
+	u8 spec_version_major;
+	u8 spec_errata;
+	u8 uintnsize;
+	u32 num_algs;
+	struct tcg_efi_specid_event_algs digest_sizes[0];
+};
+
+struct tcg_event_field {
+	u32 event_size;
+	u8 event[0];
+};
+
+struct tcg_pcr_event {
+	u32 pcr_idx;
+	u32 event_type;
+	u8 digest[20];
+	u32 event_size;
+	u8 event[0];
+};
+
+struct linux_efi_tpm_eventlog {
+	u32 size;
+	u32 final_events_preboot_size;
+	u8 version;
+	u8 log[0];
+};
+
+struct efi_tcg2_final_events_table {
+	u64 version;
+	u64 nr_events;
+	u8 events[0];
+};
+
+struct efi_system_resource_table {
+	u32 fw_resource_count;
+	u32 fw_resource_count_max;
+	u64 fw_resource_version;
+	u8 entries[0];
+};
+
+struct esre_entry;
+
+struct esre_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct esre_entry *, char *);
+	ssize_t (*store)(struct esre_entry *, const char *, size_t);
+};
+
+struct efi_system_resource_entry_v1;
+
+struct esre_entry {
+	union {
+		struct efi_system_resource_entry_v1 *esre1;
+	} esre;
+	struct kobject kobj;
+	struct list_head list;
+};
+
+struct efi_system_resource_entry_v1 {
+	efi_guid_t fw_class;
+	u32 fw_type;
+	u32 fw_version;
+	u32 lowest_supported_fw_version;
+	u32 capsule_flags;
+	u32 last_attempt_version;
+	u32 last_attempt_status;
+};
+
+union efi_rts_args;
+
+struct efi_runtime_work {
+	union efi_rts_args *args;
+	efi_status_t status;
+	struct work_struct work;
+	enum efi_rts_ids efi_rts_id;
+	struct completion efi_rts_comp;
+	const void *caller;
+};
+
+union efi_rts_args {
+	struct {
+		efi_time_t *time;
+		efi_time_cap_t *capabilities;
+	} GET_TIME;
+	struct {
+		efi_time_t *time;
+	} SET_TIME;
+	struct {
+		efi_bool_t *enabled;
+		efi_bool_t *pending;
+		efi_time_t *time;
+	} GET_WAKEUP_TIME;
+	struct {
+		efi_bool_t enable;
+		efi_time_t *time;
+	} SET_WAKEUP_TIME;
+	struct {
+		efi_char16_t *name;
+		efi_guid_t *vendor;
+		u32 *attr;
+		unsigned long *data_size;
+		void *data;
+	} GET_VARIABLE;
+	struct {
+		unsigned long *name_size;
+		efi_char16_t *name;
+		efi_guid_t *vendor;
+	} GET_NEXT_VARIABLE;
+	struct {
+		efi_char16_t *name;
+		efi_guid_t *vendor;
+		u32 attr;
+		unsigned long data_size;
+		void *data;
+	} SET_VARIABLE;
+	struct {
+		u32 attr;
+		u64 *storage_space;
+		u64 *remaining_space;
+		u64 *max_variable_size;
+	} QUERY_VARIABLE_INFO;
+	struct {
+		u32 *high_count;
+	} GET_NEXT_HIGH_MONO_COUNT;
+	struct {
+		efi_capsule_header_t **capsules;
+		unsigned long count;
+		unsigned long sg_list;
+	} UPDATE_CAPSULE;
+	struct {
+		efi_capsule_header_t **capsules;
+		unsigned long count;
+		u64 *max_size;
+		int *reset_type;
+	} QUERY_CAPSULE_CAPS;
+	struct {
+		efi_status_t (*acpi_prm_handler)(u64, void *);
+		u64 param_buffer_addr;
+		void *context;
+	} ACPI_PRM_HANDLER;
+};
+
+struct hid_global {
+	unsigned int usage_page;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__s32 unit_exponent;
+	unsigned int unit;
+	unsigned int report_id;
+	unsigned int report_size;
+	unsigned int report_count;
+};
+
+struct hid_local {
+	unsigned int usage[12288];
+	u8 usage_size[12288];
+	unsigned int collection_index[12288];
+	unsigned int usage_index;
+	unsigned int usage_minimum;
+	unsigned int delimiter_depth;
+	unsigned int delimiter_branch;
+};
+
+struct hid_parser {
+	struct hid_global global;
+	struct hid_global global_stack[4];
+	unsigned int global_stack_ptr;
+	struct hid_local local;
+	unsigned int *collection_stack;
+	unsigned int collection_stack_ptr;
+	unsigned int collection_stack_size;
+	struct hid_device *device;
+	unsigned int scan_flags;
+	u64 android_kabi_reserved1;
+};
+
+struct hid_item {
+	unsigned int format;
+	__u8 size;
+	__u8 type;
+	__u8 tag;
+	union {
+		__u8 u8;
+		__s8 s8;
+		__u16 u16;
+		__s16 s16;
+		__u32 u32;
+		__s32 s32;
+		__u8 *longdata;
+	} data;
+};
+
+enum hid_class_request {
+	HID_REQ_GET_REPORT = 1,
+	HID_REQ_GET_IDLE = 2,
+	HID_REQ_GET_PROTOCOL = 3,
+	HID_REQ_SET_REPORT = 9,
+	HID_REQ_SET_IDLE = 10,
+	HID_REQ_SET_PROTOCOL = 11,
+};
+
+struct hiddev {
+	int minor;
+	int exist;
+	int open;
+	struct mutex existancelock;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct list_head list;
+	spinlock_t list_lock;
+	bool initialized;
+};
+
+struct hidraw {
+	unsigned int minor;
+	int exist;
+	int open;
+	wait_queue_head_t wait;
+	struct hid_device *hid;
+	struct device *dev;
+	spinlock_t list_lock;
+	struct list_head list;
+};
+
+struct hid_dynid {
+	struct list_head list;
+	struct hid_device_id id;
+};
+
+struct usage_priority {
+	__u32 usage;
+	bool global;
+	unsigned int slot_overwrite;
+};
+
+typedef bool (*hid_usage_cmp_t)(struct hid_usage *, unsigned int, unsigned int);
+
+struct quirks_list_struct {
+	struct hid_device_id hid_bl_item;
+	struct list_head node;
+};
+
+struct hid_usage_entry {
+	unsigned int page;
+	unsigned int usage;
+	const char *description;
+};
+
+struct hid_debug_list {
+	struct {
+		union {
+			struct __kfifo kfifo;
+			char *type;
+			const char *const_type;
+			char (*rectype)[0];
+			char *ptr;
+			const char *ptr_const;
+		};
+		char buf[0];
+	} hid_debug_fifo;
+	struct fasync_struct *fasync;
+	struct hid_device *hdev;
+	struct list_head node;
+	struct mutex read_mutex;
+};
+
+struct hidraw_report {
+	__u8 *value;
+	int len;
+};
+
+struct hidraw_list {
+	struct hidraw_report buffer[64];
+	int head;
+	int tail;
+	struct fasync_struct *fasync;
+	struct hidraw *hidraw;
+	struct list_head node;
+	struct mutex read_mutex;
+};
+
+struct hidraw_devinfo {
+	__u32 bustype;
+	__s16 vendor;
+	__s16 product;
+};
+
+enum uhid_legacy_event_type {
+	UHID_CREATE = 0,
+	UHID_OUTPUT_EV = 7,
+	UHID_INPUT = 8,
+	UHID_FEATURE = 9,
+	UHID_FEATURE_ANSWER = 10,
+};
+
+enum uhid_event_type {
+	__UHID_LEGACY_CREATE = 0,
+	UHID_DESTROY = 1,
+	UHID_START = 2,
+	UHID_STOP = 3,
+	UHID_OPEN = 4,
+	UHID_CLOSE = 5,
+	UHID_OUTPUT = 6,
+	__UHID_LEGACY_OUTPUT_EV = 7,
+	__UHID_LEGACY_INPUT = 8,
+	UHID_GET_REPORT = 9,
+	UHID_GET_REPORT_REPLY = 10,
+	UHID_CREATE2 = 11,
+	UHID_INPUT2 = 12,
+	UHID_SET_REPORT = 13,
+	UHID_SET_REPORT_REPLY = 14,
+};
+
+enum uhid_dev_flag {
+	UHID_DEV_NUMBERED_FEATURE_REPORTS = 1,
+	UHID_DEV_NUMBERED_OUTPUT_REPORTS = 2,
+	UHID_DEV_NUMBERED_INPUT_REPORTS = 4,
+};
+
+enum uhid_report_type {
+	UHID_FEATURE_REPORT = 0,
+	UHID_OUTPUT_REPORT = 1,
+	UHID_INPUT_REPORT = 2,
+};
+
+struct uhid_create_req {
+	__u8 name[128];
+	__u8 phys[64];
+	__u8 uniq[64];
+	__u8 __attribute__((btf_type_tag("user"))) *rd_data;
+	__u16 rd_size;
+	__u16 bus;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	__u32 country;
+} __attribute__((packed));
+
+struct uhid_input_req {
+	__u8 data[4096];
+	__u16 size;
+};
+
+struct uhid_output_req {
+	__u8 data[4096];
+	__u16 size;
+	__u8 rtype;
+} __attribute__((packed));
+
+struct uhid_output_ev_req {
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+struct uhid_feature_req {
+	__u32 id;
+	__u8 rnum;
+	__u8 rtype;
+} __attribute__((packed));
+
+struct uhid_get_report_req {
+	__u32 id;
+	__u8 rnum;
+	__u8 rtype;
+} __attribute__((packed));
+
+struct uhid_feature_answer_req {
+	__u32 id;
+	__u16 err;
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_get_report_reply_req {
+	__u32 id;
+	__u16 err;
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_create2_req {
+	__u8 name[128];
+	__u8 phys[64];
+	__u8 uniq[64];
+	__u16 rd_size;
+	__u16 bus;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	__u32 country;
+	__u8 rd_data[4096];
+};
+
+struct uhid_input2_req {
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_set_report_req {
+	__u32 id;
+	__u8 rnum;
+	__u8 rtype;
+	__u16 size;
+	__u8 data[4096];
+};
+
+struct uhid_set_report_reply_req {
+	__u32 id;
+	__u16 err;
+} __attribute__((packed));
+
+struct uhid_start_req {
+	__u64 dev_flags;
+};
+
+struct uhid_event {
+	__u32 type;
+	union {
+		struct uhid_create_req create;
+		struct uhid_input_req input;
+		struct uhid_output_req output;
+		struct uhid_output_ev_req output_ev;
+		struct uhid_feature_req feature;
+		struct uhid_get_report_req get_report;
+		struct uhid_feature_answer_req feature_answer;
+		struct uhid_get_report_reply_req get_report_reply;
+		struct uhid_create2_req create2;
+		struct uhid_input2_req input2;
+		struct uhid_set_report_req set_report;
+		struct uhid_set_report_reply_req set_report_reply;
+		struct uhid_start_req start;
+	} u;
+} __attribute__((packed));
+
+struct uhid_device {
+	struct mutex devlock;
+	bool running;
+	__u8 *rd_data;
+	uint rd_size;
+	struct hid_device *hid;
+	struct uhid_event input_buf;
+	wait_queue_head_t waitq;
+	spinlock_t qlock;
+	__u8 head;
+	__u8 tail;
+	struct uhid_event *outq[32];
+	struct mutex report_lock;
+	wait_queue_head_t report_wait;
+	bool report_running;
+	u32 report_id;
+	u32 report_type;
+	struct uhid_event report_buf;
+	struct work_struct worker;
+};
+
+struct uhid_create_req_compat {
+	__u8 name[128];
+	__u8 phys[64];
+	__u8 uniq[64];
+	compat_uptr_t rd_data;
+	__u16 rd_size;
+	__u16 bus;
+	__u32 vendor;
+	__u32 product;
+	__u32 version;
+	__u32 country;
+};
+
+struct apple_key_translation {
+	u16 from;
+	u16 to;
+	u8 flags;
+};
+
+struct apple_non_apple_keyboard {
+	char *name;
+};
+
+struct apple_sc_backlight;
+
+struct apple_sc {
+	struct hid_device *hdev;
+	unsigned long quirks;
+	unsigned int fn_on;
+	unsigned int fn_found;
+	unsigned long pressed_numlock[12];
+	struct timer_list battery_timer;
+	struct apple_sc_backlight *backlight;
+};
+
+struct apple_sc_backlight {
+	struct led_classdev cdev;
+	struct hid_device *hdev;
+	unsigned short backlight_off;
+	unsigned short backlight_on_min;
+	unsigned short backlight_on_max;
+};
+
+struct apple_backlight_config_report {
+	u8 report_id;
+	u8 version;
+	u16 backlight_off;
+	u16 backlight_on_min;
+	u16 backlight_on_max;
+};
+
+struct apple_backlight_set_report {
+	u8 report_id;
+	u8 version;
+	u16 backlight;
+	u16 rate;
+};
+
+struct lg_drv_data {
+	unsigned long quirks;
+	void *device_props;
+};
+
+enum lg_g15_model {
+	LG_G15 = 0,
+	LG_G15_V2 = 1,
+	LG_G510 = 2,
+	LG_G510_USB_AUDIO = 3,
+	LG_Z10 = 4,
+};
+
+enum lg_g15_led_type {
+	LG_G15_KBD_BRIGHTNESS = 0,
+	LG_G15_LCD_BRIGHTNESS = 1,
+	LG_G15_BRIGHTNESS_MAX = 2,
+	LG_G15_MACRO_PRESET1 = 2,
+	LG_G15_MACRO_PRESET2 = 3,
+	LG_G15_MACRO_PRESET3 = 4,
+	LG_G15_MACRO_RECORD = 5,
+	LG_G15_LED_MAX = 6,
+};
+
+struct lg_g15_led {
+	struct led_classdev cdev;
+	enum led_brightness brightness;
+	enum lg_g15_led_type led;
+	u8 red;
+	u8 green;
+	u8 blue;
+};
+
+struct lg_g15_data {
+	u8 transfer_buf[20];
+	struct mutex mutex;
+	struct work_struct work;
+	struct input_dev *input;
+	struct hid_device *hdev;
+	enum lg_g15_model model;
+	struct lg_g15_led leds[6];
+	bool game_mode_enabled;
+};
+
+enum recvr_type {
+	recvr_type_dj = 0,
+	recvr_type_hidpp = 1,
+	recvr_type_gaming_hidpp = 2,
+	recvr_type_mouse_only = 3,
+	recvr_type_27mhz = 4,
+	recvr_type_bluetooth = 5,
+	recvr_type_dinovo = 6,
+};
+
+struct dj_device;
+
+struct dj_receiver_dev {
+	struct hid_device *mouse;
+	struct hid_device *keyboard;
+	struct hid_device *hidpp;
+	struct dj_device *paired_dj_devices[8];
+	struct list_head list;
+	struct kref kref;
+	struct work_struct work;
+	struct kfifo notif_fifo;
+	unsigned long last_query;
+	bool ready;
+	enum recvr_type type;
+	unsigned int unnumbered_application;
+	spinlock_t lock;
+};
+
+struct dj_device {
+	struct hid_device *hdev;
+	struct dj_receiver_dev *dj_receiver_dev;
+	u64 reports_supported;
+	u8 device_index;
+};
+
+struct dj_report {
+	u8 report_id;
+	u8 device_index;
+	u8 report_type;
+	u8 report_params[12];
+};
+
+struct hidpp_event {
+	u8 report_id;
+	u8 device_index;
+	u8 sub_id;
+	u8 params[17];
+};
+
+struct dj_workitem {
+	u8 type;
+	u8 device_index;
+	u8 device_type;
+	u8 quad_id_msb;
+	u8 quad_id_lsb;
+	u64 reports_supported;
+};
+
+enum {
+	POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
+	POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,
+	POWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,
+	POWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,
+	POWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,
+	POWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,
+};
+
+enum {
+	POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
+	POWER_SUPPLY_CHARGE_TYPE_NONE = 1,
+	POWER_SUPPLY_CHARGE_TYPE_TRICKLE = 2,
+	POWER_SUPPLY_CHARGE_TYPE_FAST = 3,
+	POWER_SUPPLY_CHARGE_TYPE_STANDARD = 4,
+	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE = 5,
+	POWER_SUPPLY_CHARGE_TYPE_CUSTOM = 6,
+	POWER_SUPPLY_CHARGE_TYPE_LONGLIFE = 7,
+	POWER_SUPPLY_CHARGE_TYPE_BYPASS = 8,
+	POWER_SUPPLY_CHARGE_TYPE_TAPER_EXT = 50,
+};
+
+struct hidpp_battery {
+	u8 feature_index;
+	u8 solar_feature_index;
+	u8 voltage_feature_index;
+	u8 adc_measurement_feature_index;
+	struct power_supply_desc desc;
+	struct power_supply *ps;
+	char name[64];
+	int status;
+	int capacity;
+	int level;
+	int voltage;
+	int charge_type;
+	bool online;
+	u8 supported_levels_1004;
+};
+
+struct hidpp_scroll_counter {
+	int wheel_multiplier;
+	int remainder;
+	int direction;
+	unsigned long long last_time;
+};
+
+struct hidpp_device {
+	struct hid_device *hid_dev;
+	struct input_dev *input;
+	struct mutex send_mutex;
+	void *send_receive_buf;
+	char *name;
+	wait_queue_head_t wait;
+	int very_long_report_length;
+	bool answer_available;
+	u8 protocol_major;
+	u8 protocol_minor;
+	void *private_data;
+	struct work_struct work;
+	struct kfifo delayed_work_fifo;
+	atomic_t connected;
+	struct input_dev *delayed_input;
+	unsigned long quirks;
+	unsigned long capabilities;
+	u8 supported_reports;
+	struct hidpp_battery battery;
+	struct hidpp_scroll_counter vertical_wheel_counter;
+	u8 wireless_feature_index;
+};
+
+struct hidpp_ff_private_data;
+
+struct hidpp_ff_work_data {
+	struct work_struct work;
+	struct hidpp_ff_private_data *data;
+	int effect_id;
+	u8 command;
+	u8 params[20];
+	u8 size;
+};
+
+struct hidpp_ff_private_data {
+	struct hidpp_device *hidpp;
+	u8 feature_index;
+	u8 version;
+	u16 gain;
+	s16 range;
+	u8 slot_autocenter;
+	u8 num_effects;
+	int *effect_ids;
+	struct workqueue_struct *wq;
+	atomic_t workqueue_size;
+};
+
+struct fap {
+	u8 feature_index;
+	u8 funcindex_clientid;
+	u8 params[60];
+};
+
+struct rap {
+	u8 sub_id;
+	u8 reg_address;
+	u8 params[60];
+};
+
+struct hidpp_report {
+	u8 report_id;
+	u8 device_index;
+	union {
+		struct fap fap;
+		struct rap rap;
+		u8 rawbytes[62];
+	};
+};
+
+struct k400_private_data {
+	u8 feature_index;
+};
+
+struct wtp_data {
+	u16 x_size;
+	u16 y_size;
+	u8 finger_count;
+	u8 mt_feature_index;
+	u8 button_feature_index;
+	u8 maxcontacts;
+	bool flip_y;
+	unsigned int resolution;
+};
+
+struct hidpp_touchpad_raw_xy_finger {
+	u8 contact_type;
+	u8 contact_status;
+	u16 x;
+	u16 y;
+	u8 z;
+	u8 area;
+	u8 finger_id;
+};
+
+struct hidpp_touchpad_raw_xy {
+	u16 timestamp;
+	struct hidpp_touchpad_raw_xy_finger fingers[2];
+	u8 spurious_flag;
+	u8 end_of_frame;
+	u8 finger_count;
+	u8 button;
+};
+
+struct hidpp_touchpad_fw_items {
+	uint8_t presence;
+	uint8_t desired_state;
+	uint8_t state;
+	uint8_t persistent;
+};
+
+struct hidpp_touchpad_raw_info {
+	u16 x_size;
+	u16 y_size;
+	u8 z_range;
+	u8 area_range;
+	u8 timestamp_unit;
+	u8 maxcontacts;
+	u8 origin;
+	u16 res;
+};
+
+struct magicmouse_sc {
+	struct input_dev *input;
+	unsigned long quirks;
+	int ntouches;
+	int scroll_accel;
+	unsigned long scroll_jiffies;
+	struct {
+		short x;
+		short y;
+		short scroll_x;
+		short scroll_y;
+		short scroll_x_hr;
+		short scroll_y_hr;
+		u8 size;
+		bool scroll_x_active;
+		bool scroll_y_active;
+	} touches[16];
+	int tracking_ids[16];
+	struct hid_device *hdev;
+	struct delayed_work work;
+	struct timer_list battery_timer;
+};
+
+enum {
+	MAGNITUDE_STRONG = 2,
+	MAGNITUDE_WEAK = 3,
+	MAGNITUDE_NUM = 4,
+};
+
+struct ms_data {
+	unsigned long quirks;
+	struct hid_device *hdev;
+	struct work_struct ff_worker;
+	__u8 strong;
+	__u8 weak;
+	void *output_report_dmabuf;
+};
+
+struct xb1s_ff_report {
+	__u8 report_id;
+	__u8 enable;
+	__u8 magnitude[4];
+	__u8 duration_10ms;
+	__u8 start_delay_10ms;
+	__u8 loop_count;
+};
+
+struct mt_class {
+	__s32 name;
+	__s32 quirks;
+	__s32 sn_move;
+	__s32 sn_width;
+	__s32 sn_height;
+	__s32 sn_pressure;
+	__u8 maxcontacts;
+	bool is_indirect;
+	bool export_all_inputs;
+};
+
+enum latency_mode {
+	HID_LATENCY_NORMAL = 0,
+	HID_LATENCY_HIGH = 1,
+};
+
+struct mt_device {
+	struct mt_class mtclass;
+	struct timer_list release_timer;
+	struct hid_device *hdev;
+	unsigned long mt_io_flags;
+	__u8 inputmode_value;
+	__u8 maxcontacts;
+	bool is_buttonpad;
+	bool serial_maybe;
+	struct list_head applications;
+	struct list_head reports;
+};
+
+struct mt_application {
+	struct list_head list;
+	unsigned int application;
+	unsigned int report_id;
+	struct list_head mt_usages;
+	__s32 quirks;
+	__s32 *scantime;
+	__s32 scantime_logical_max;
+	__s32 *raw_cc;
+	int left_button_state;
+	unsigned int mt_flags;
+	unsigned long *pending_palm_slots;
+	__u8 num_received;
+	__u8 num_expected;
+	__u8 buttons_count;
+	__u8 touches_by_report;
+	__s32 dev_time;
+	unsigned long jiffies;
+	int timestamp;
+	int prev_scantime;
+	bool have_contact_count;
+};
+
+struct mt_report_data {
+	struct list_head list;
+	struct hid_report *report;
+	struct mt_application *application;
+	bool is_mt_collection;
+};
+
+struct mt_usages {
+	struct list_head list;
+	__s32 *x;
+	__s32 *y;
+	__s32 *cx;
+	__s32 *cy;
+	__s32 *p;
+	__s32 *w;
+	__s32 *h;
+	__s32 *a;
+	__s32 *contactid;
+	bool *tip_state;
+	bool *inrange_state;
+	bool *confidence_state;
+};
+
+enum joycon_ctlr_state {
+	JOYCON_CTLR_STATE_INIT = 0,
+	JOYCON_CTLR_STATE_READ = 1,
+	JOYCON_CTLR_STATE_REMOVED = 2,
+};
+
+enum joycon_ctlr_type {
+	JOYCON_CTLR_TYPE_JCL = 1,
+	JOYCON_CTLR_TYPE_JCR = 2,
+	JOYCON_CTLR_TYPE_PRO = 3,
+};
+
+enum joycon_msg_type {
+	JOYCON_MSG_TYPE_NONE = 0,
+	JOYCON_MSG_TYPE_USB = 1,
+	JOYCON_MSG_TYPE_SUBCMD = 2,
+};
+
+struct joycon_stick_cal {
+	s32 max;
+	s32 min;
+	s32 center;
+};
+
+struct joycon_imu_cal {
+	s16 offset[3];
+	s16 scale[3];
+};
+
+struct joycon_ctlr {
+	struct hid_device *hdev;
+	struct input_dev *input;
+	struct led_classdev leds[4];
+	struct led_classdev home_led;
+	enum joycon_ctlr_state ctlr_state;
+	spinlock_t lock;
+	u8 mac_addr[6];
+	char *mac_addr_str;
+	enum joycon_ctlr_type ctlr_type;
+	enum joycon_msg_type msg_type;
+	u8 subcmd_num;
+	struct mutex output_mutex;
+	u8 input_buf[84];
+	wait_queue_head_t wait;
+	bool received_resp;
+	u8 usb_ack_match;
+	u8 subcmd_ack_match;
+	bool received_input_report;
+	unsigned int last_input_report_msecs;
+	unsigned int last_subcmd_sent_msecs;
+	unsigned int consecutive_valid_report_deltas;
+	struct joycon_stick_cal left_stick_cal_x;
+	struct joycon_stick_cal left_stick_cal_y;
+	struct joycon_stick_cal right_stick_cal_x;
+	struct joycon_stick_cal right_stick_cal_y;
+	struct joycon_imu_cal accel_cal;
+	struct joycon_imu_cal gyro_cal;
+	s32 imu_cal_accel_divisor[3];
+	s32 imu_cal_gyro_divisor[3];
+	struct power_supply *battery;
+	struct power_supply_desc battery_desc;
+	u8 battery_capacity;
+	bool battery_charging;
+	bool host_powered;
+	u8 rumble_data[64];
+	int rumble_queue_head;
+	int rumble_queue_tail;
+	struct workqueue_struct *rumble_queue;
+	struct work_struct rumble_worker;
+	unsigned int rumble_msecs;
+	u16 rumble_ll_freq;
+	u16 rumble_lh_freq;
+	u16 rumble_rl_freq;
+	u16 rumble_rh_freq;
+	unsigned short rumble_zero_countdown;
+	struct input_dev *imu_input;
+	bool imu_first_packet_received;
+	unsigned int imu_timestamp_us;
+	unsigned int imu_last_pkt_ms;
+	unsigned int imu_delta_samples_count;
+	unsigned int imu_delta_samples_sum;
+	unsigned int imu_avg_delta_ms;
+};
+
+struct joycon_subcmd_request {
+	u8 output_id;
+	u8 packet_num;
+	u8 rumble_data[8];
+	u8 subcmd_id;
+	u8 data[0];
+};
+
+struct joycon_subcmd_reply {
+	u8 ack;
+	u8 id;
+	u8 data[0];
+};
+
+struct joycon_input_report {
+	u8 id;
+	u8 timer;
+	u8 bat_con;
+	u8 button_status[3];
+	u8 left_stick[3];
+	u8 right_stick[3];
+	u8 vibrator_report;
+	union {
+		struct joycon_subcmd_reply subcmd_reply;
+		u8 imu_raw_bytes[36];
+	};
+};
+
+struct joycon_imu_data {
+	s16 accel_x;
+	s16 accel_y;
+	s16 accel_z;
+	s16 gyro_x;
+	s16 gyro_y;
+	s16 gyro_z;
+};
+
+struct joycon_rumble_output {
+	u8 output_id;
+	u8 packet_num;
+	u8 rumble_data[8];
+};
+
+struct pcmidi_snd;
+
+struct pcmidi_sustain {
+	unsigned long in_use;
+	struct pcmidi_snd *pm;
+	struct timer_list timer;
+	unsigned char status;
+	unsigned char note;
+	unsigned char velocity;
+};
+
+struct pk_device;
+
+struct pcmidi_snd {
+	struct pk_device *pk;
+	unsigned short ifnum;
+	struct hid_report *pcmidi_report6;
+	struct input_dev *input_ep82;
+	unsigned short midi_mode;
+	unsigned short midi_sustain_mode;
+	unsigned short midi_sustain;
+	unsigned short midi_channel;
+	short midi_octave;
+	struct pcmidi_sustain sustained_notes[32];
+	unsigned short fn_state;
+	unsigned short last_key[24];
+	spinlock_t rawmidi_in_lock;
+	struct snd_card *card;
+	struct snd_rawmidi *rwmidi;
+	struct snd_rawmidi_substream *in_substream;
+	struct snd_rawmidi_substream *out_substream;
+	unsigned long in_triggered;
+	unsigned long out_active;
+};
+
+struct pk_device {
+	unsigned long quirks;
+	struct hid_device *hdev;
+	struct pcmidi_snd *pm;
+};
+
+struct picolcd_pending;
+
+struct picolcd_data {
+	struct hid_device *hdev;
+	struct dentry *debug_reset;
+	struct dentry *debug_eeprom;
+	struct dentry *debug_flash;
+	struct mutex mutex_flash;
+	int addr_sz;
+	u8 version[2];
+	unsigned short opmode_delay;
+	u8 pressed_keys[2];
+	struct input_dev *input_keys;
+	unsigned short keycode[17];
+	spinlock_t lock;
+	struct mutex mutex;
+	struct picolcd_pending *pending;
+	int status;
+};
+
+struct picolcd_pending {
+	struct hid_report *out_report;
+	struct hid_report *in_report;
+	struct completion ready;
+	int raw_size;
+	u8 raw_data[64];
+};
+
+struct plt_drv_data {
+	unsigned long device_type;
+	unsigned long last_volume_key_ts;
+	u32 quirks;
+};
+
+struct ps_led_info {
+	const char *name;
+	const char *color;
+	int max_brightness;
+	enum led_brightness (*brightness_get)(struct led_classdev *);
+	int (*brightness_set)(struct led_classdev *, enum led_brightness);
+	int (*blink_set)(struct led_classdev *, unsigned long *, unsigned long *);
+};
+
+enum dualshock4_dongle_state {
+	DONGLE_DISCONNECTED = 0,
+	DONGLE_CALIBRATING = 1,
+	DONGLE_CONNECTED = 2,
+	DONGLE_DISABLED = 3,
+};
+
+struct ps_device {
+	struct list_head list;
+	struct hid_device *hdev;
+	spinlock_t lock;
+	uint32_t player_id;
+	struct power_supply_desc battery_desc;
+	struct power_supply *battery;
+	uint8_t battery_capacity;
+	int battery_status;
+	const char *input_dev_name;
+	uint8_t mac_address[6];
+	uint32_t hw_version;
+	uint32_t fw_version;
+	int (*parse_report)(struct ps_device *, struct hid_report *, u8 *, int);
+	void (*remove)(struct ps_device *);
+};
+
+struct ps_calibration_data {
+	int abs_code;
+	short bias;
+	int sens_numer;
+	int sens_denom;
+};
+
+struct dualshock4 {
+	struct ps_device base;
+	struct input_dev *gamepad;
+	struct input_dev *sensors;
+	struct input_dev *touchpad;
+	struct ps_calibration_data accel_calib_data[3];
+	struct ps_calibration_data gyro_calib_data[3];
+	enum dualshock4_dongle_state dongle_state;
+	struct work_struct dongle_hotplug_worker;
+	bool sensor_timestamp_initialized;
+	uint32_t prev_sensor_timestamp;
+	uint32_t sensor_timestamp_us;
+	bool update_bt_poll_interval;
+	uint8_t bt_poll_interval;
+	bool update_rumble;
+	uint8_t motor_left;
+	uint8_t motor_right;
+	bool update_lightbar;
+	bool update_lightbar_blink;
+	bool lightbar_enabled;
+	uint8_t lightbar_red;
+	uint8_t lightbar_green;
+	uint8_t lightbar_blue;
+	uint8_t lightbar_blink_on;
+	uint8_t lightbar_blink_off;
+	struct led_classdev lightbar_leds[4];
+	struct work_struct output_worker;
+	bool output_worker_initialized;
+	void *output_report_dmabuf;
+};
+
+struct dualshock4_input_report_common {
+	uint8_t x;
+	uint8_t y;
+	uint8_t rx;
+	uint8_t ry;
+	uint8_t buttons[3];
+	uint8_t z;
+	uint8_t rz;
+	__le16 sensor_timestamp;
+	uint8_t sensor_temperature;
+	__le16 gyro[3];
+	__le16 accel[3];
+	uint8_t reserved2[5];
+	uint8_t status[2];
+	uint8_t reserved3;
+} __attribute__((packed));
+
+struct dualshock4_touch_point {
+	uint8_t contact;
+	uint8_t x_lo;
+	uint8_t x_hi: 4;
+	uint8_t y_lo: 4;
+	uint8_t y_hi;
+};
+
+struct dualshock4_touch_report {
+	uint8_t timestamp;
+	struct dualshock4_touch_point points[2];
+};
+
+struct dualshock4_input_report_usb {
+	uint8_t report_id;
+	struct dualshock4_input_report_common common;
+	uint8_t num_touch_reports;
+	struct dualshock4_touch_report touch_reports[3];
+	uint8_t reserved[3];
+};
+
+struct dualshock4_input_report_bt {
+	uint8_t report_id;
+	uint8_t reserved[2];
+	struct dualshock4_input_report_common common;
+	uint8_t num_touch_reports;
+	struct dualshock4_touch_report touch_reports[4];
+	uint8_t reserved2[2];
+	__le32 crc32;
+} __attribute__((packed));
+
+struct dualsense {
+	struct ps_device base;
+	struct input_dev *gamepad;
+	struct input_dev *sensors;
+	struct input_dev *touchpad;
+	uint16_t update_version;
+	struct ps_calibration_data accel_calib_data[3];
+	struct ps_calibration_data gyro_calib_data[3];
+	bool sensor_timestamp_initialized;
+	uint32_t prev_sensor_timestamp;
+	uint32_t sensor_timestamp_us;
+	bool use_vibration_v2;
+	bool update_rumble;
+	uint8_t motor_left;
+	uint8_t motor_right;
+	struct led_classdev_mc lightbar;
+	bool update_lightbar;
+	uint8_t lightbar_red;
+	uint8_t lightbar_green;
+	uint8_t lightbar_blue;
+	bool update_mic_mute;
+	bool mic_muted;
+	bool last_btn_mic_state;
+	bool update_player_leds;
+	uint8_t player_leds_state;
+	struct led_classdev player_leds[5];
+	struct work_struct output_worker;
+	bool output_worker_initialized;
+	void *output_report_dmabuf;
+	uint8_t output_seq;
+};
+
+struct dualsense_touch_point {
+	uint8_t contact;
+	uint8_t x_lo;
+	uint8_t x_hi: 4;
+	uint8_t y_lo: 4;
+	uint8_t y_hi;
+};
+
+struct dualsense_input_report {
+	uint8_t x;
+	uint8_t y;
+	uint8_t rx;
+	uint8_t ry;
+	uint8_t z;
+	uint8_t rz;
+	uint8_t seq_number;
+	uint8_t buttons[4];
+	uint8_t reserved[4];
+	__le16 gyro[3];
+	__le16 accel[3];
+	__le32 sensor_timestamp;
+	uint8_t reserved2;
+	struct dualsense_touch_point points[2];
+	uint8_t reserved3[12];
+	uint8_t status;
+	uint8_t reserved4[10];
+} __attribute__((packed));
+
+struct dualshock4_output_report_bt;
+
+struct dualshock4_output_report_usb;
+
+struct dualshock4_output_report_common;
+
+struct dualshock4_output_report {
+	uint8_t *data;
+	uint8_t len;
+	struct dualshock4_output_report_bt *bt;
+	struct dualshock4_output_report_usb *usb;
+	struct dualshock4_output_report_common *common;
+};
+
+struct dualshock4_output_report_common {
+	uint8_t valid_flag0;
+	uint8_t valid_flag1;
+	uint8_t reserved;
+	uint8_t motor_right;
+	uint8_t motor_left;
+	uint8_t lightbar_red;
+	uint8_t lightbar_green;
+	uint8_t lightbar_blue;
+	uint8_t lightbar_blink_on;
+	uint8_t lightbar_blink_off;
+};
+
+struct dualshock4_output_report_bt {
+	uint8_t report_id;
+	uint8_t hw_control;
+	uint8_t audio_control;
+	struct dualshock4_output_report_common common;
+	uint8_t reserved[61];
+	__le32 crc32;
+} __attribute__((packed));
+
+struct dualshock4_output_report_usb {
+	uint8_t report_id;
+	struct dualshock4_output_report_common common;
+	uint8_t reserved[21];
+};
+
+struct dualsense_output_report_bt;
+
+struct dualsense_output_report_usb;
+
+struct dualsense_output_report_common;
+
+struct dualsense_output_report {
+	uint8_t *data;
+	uint8_t len;
+	struct dualsense_output_report_bt *bt;
+	struct dualsense_output_report_usb *usb;
+	struct dualsense_output_report_common *common;
+};
+
+struct dualsense_output_report_common {
+	uint8_t valid_flag0;
+	uint8_t valid_flag1;
+	uint8_t motor_right;
+	uint8_t motor_left;
+	uint8_t reserved[4];
+	uint8_t mute_button_led;
+	uint8_t power_save_control;
+	uint8_t reserved2[28];
+	uint8_t valid_flag2;
+	uint8_t reserved3[2];
+	uint8_t lightbar_setup;
+	uint8_t led_brightness;
+	uint8_t player_leds;
+	uint8_t lightbar_red;
+	uint8_t lightbar_green;
+	uint8_t lightbar_blue;
+};
+
+struct dualsense_output_report_bt {
+	uint8_t report_id;
+	uint8_t seq_tag;
+	uint8_t tag;
+	struct dualsense_output_report_common common;
+	uint8_t reserved[24];
+	__le32 crc32;
+} __attribute__((packed));
+
+struct dualsense_output_report_usb {
+	uint8_t report_id;
+	struct dualsense_output_report_common common;
+	uint8_t reserved[15];
+};
+
+struct roccat_report {
+	uint8_t *value;
+};
+
+struct roccat_device {
+	unsigned int minor;
+	int report_size;
+	int open;
+	int exist;
+	wait_queue_head_t wait;
+	struct device *dev;
+	struct hid_device *hid;
+	struct list_head readers;
+	struct mutex readers_lock;
+	struct roccat_report cbuf[16];
+	int cbuf_end;
+	struct mutex cbuf_lock;
+};
+
+struct roccat_reader {
+	struct list_head node;
+	struct roccat_device *device;
+	int cbuf_start;
+};
+
+enum roccat_common2_commands {
+	ROCCAT_COMMON_COMMAND_CONTROL = 4,
+};
+
+enum roccat_common2_control_states {
+	ROCCAT_COMMON_CONTROL_STATUS_CRITICAL = 0,
+	ROCCAT_COMMON_CONTROL_STATUS_OK = 1,
+	ROCCAT_COMMON_CONTROL_STATUS_INVALID = 2,
+	ROCCAT_COMMON_CONTROL_STATUS_BUSY = 3,
+	ROCCAT_COMMON_CONTROL_STATUS_CRITICAL_NEW = 4,
+};
+
+struct roccat_common2_control {
+	uint8_t command;
+	uint8_t value;
+	uint8_t request;
+};
+
+struct roccat_common2_device {
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex lock;
+};
+
+enum arvo_commands {
+	ARVO_COMMAND_MODE_KEY = 3,
+	ARVO_COMMAND_BUTTON = 4,
+	ARVO_COMMAND_INFO = 5,
+	ARVO_COMMAND_KEY_MASK = 6,
+	ARVO_COMMAND_ACTUAL_PROFILE = 7,
+};
+
+enum arvo_special_report_event_masks {
+	ARVO_SPECIAL_REPORT_EVENT_MASK_ACTION = 240,
+	ARVO_SPECIAL_REPORT_EVENT_MASK_BUTTON = 15,
+};
+
+enum arvo_special_report_events {
+	ARVO_SPECIAL_REPORT_EVENT_ACTION_PRESS = 16,
+	ARVO_SPECIAL_REPORT_EVENT_ACTION_RELEASE = 0,
+};
+
+enum arvo_roccat_report_action {
+	ARVO_ROCCAT_REPORT_ACTION_RELEASE = 0,
+	ARVO_ROCCAT_REPORT_ACTION_PRESS = 1,
+};
+
+struct arvo_special_report {
+	uint8_t unknown1;
+	uint8_t event;
+	uint8_t unknown2;
+};
+
+struct arvo_device {
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex arvo_lock;
+	int actual_profile;
+};
+
+struct arvo_actual_profile {
+	uint8_t command;
+	uint8_t actual_profile;
+};
+
+struct arvo_roccat_report {
+	uint8_t profile;
+	uint8_t button;
+	uint8_t action;
+};
+
+struct arvo_mode_key {
+	uint8_t command;
+	uint8_t state;
+};
+
+struct arvo_key_mask {
+	uint8_t command;
+	uint8_t key_mask;
+};
+
+enum {
+	ISKU_PROFILE_NUM = 5,
+	ISKU_USB_INTERFACE_PROTOCOL = 0,
+};
+
+enum isku_commands {
+	ISKU_COMMAND_CONTROL = 4,
+	ISKU_COMMAND_ACTUAL_PROFILE = 5,
+	ISKU_COMMAND_KEY_MASK = 7,
+	ISKU_COMMAND_KEYS_FUNCTION = 8,
+	ISKU_COMMAND_KEYS_EASYZONE = 9,
+	ISKU_COMMAND_KEYS_MEDIA = 10,
+	ISKU_COMMAND_KEYS_THUMBSTER = 11,
+	ISKU_COMMAND_KEYS_MACRO = 13,
+	ISKU_COMMAND_MACRO = 14,
+	ISKU_COMMAND_INFO = 15,
+	ISKU_COMMAND_LIGHT = 16,
+	ISKU_COMMAND_RESET = 17,
+	ISKU_COMMAND_KEYS_CAPSLOCK = 19,
+	ISKU_COMMAND_LAST_SET = 20,
+	ISKU_COMMAND_15 = 21,
+	ISKU_COMMAND_TALK = 22,
+	ISKU_COMMAND_TALKFX = 23,
+	ISKU_COMMAND_FIRMWARE_WRITE = 27,
+	ISKU_COMMAND_FIRMWARE_WRITE_CONTROL = 28,
+};
+
+enum isku_report_numbers {
+	ISKU_REPORT_NUMBER_BUTTON = 3,
+};
+
+enum isku_report_button_events {
+	ISKU_REPORT_BUTTON_EVENT_PROFILE = 2,
+};
+
+enum {
+	ISKU_SIZE_CONTROL = 3,
+	ISKU_SIZE_INFO = 6,
+	ISKU_SIZE_KEY_MASK = 6,
+	ISKU_SIZE_KEYS_FUNCTION = 41,
+	ISKU_SIZE_KEYS_EASYZONE = 65,
+	ISKU_SIZE_KEYS_MEDIA = 29,
+	ISKU_SIZE_KEYS_THUMBSTER = 23,
+	ISKU_SIZE_KEYS_MACRO = 35,
+	ISKU_SIZE_KEYS_CAPSLOCK = 6,
+	ISKU_SIZE_LAST_SET = 20,
+	ISKU_SIZE_LIGHT = 16,
+	ISKU_SIZE_MACRO = 2083,
+	ISKU_SIZE_RESET = 3,
+	ISKU_SIZE_TALK = 16,
+	ISKU_SIZE_TALKFX = 16,
+};
+
+struct isku_report_button {
+	uint8_t number;
+	uint8_t zero;
+	uint8_t event;
+	uint8_t data1;
+	uint8_t data2;
+};
+
+struct isku_device {
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex isku_lock;
+	int actual_profile;
+};
+
+struct isku_actual_profile {
+	uint8_t command;
+	uint8_t size;
+	uint8_t actual_profile;
+};
+
+struct isku_roccat_report {
+	uint8_t event;
+	uint8_t data1;
+	uint8_t data2;
+	uint8_t profile;
+};
+
+enum kone_commands {
+	kone_command_profile = 90,
+	kone_command_settings = 346,
+	kone_command_firmware_version = 602,
+	kone_command_weight = 1114,
+	kone_command_calibrate = 1370,
+	kone_command_confirm_write = 1626,
+	kone_command_firmware = 3674,
+};
+
+enum kone_mouse_events {
+	kone_mouse_event_osd_dpi = 160,
+	kone_mouse_event_osd_profile = 176,
+	kone_mouse_event_calibration = 192,
+	kone_mouse_event_call_overlong_macro = 224,
+	kone_mouse_event_multimedia = 225,
+	kone_mouse_event_switch_dpi = 240,
+	kone_mouse_event_switch_profile = 241,
+};
+
+enum kone_keystroke_actions {
+	kone_keystroke_action_press = 0,
+	kone_keystroke_action_release = 1,
+};
+
+struct kone_mouse_event {
+	uint8_t report_number;
+	uint8_t button;
+	uint16_t x;
+	uint16_t y;
+	uint8_t wheel;
+	union {
+		struct {
+			uint8_t tilt;
+			uint8_t unknown;
+			uint8_t event;
+			uint8_t value;
+			uint8_t macro_key;
+		};
+		struct {
+			uint8_t tilt;
+			uint8_t unknown;
+			uint8_t event;
+			uint8_t value;
+			uint8_t macro_key;
+		} wipe;
+	};
+};
+
+struct kone_settings {
+	uint16_t size;
+	uint8_t startup_profile;
+	uint8_t unknown1;
+	uint8_t tcu;
+	uint8_t unknown2[23];
+	uint8_t calibration_data[4];
+	uint8_t unknown3[2];
+	uint16_t checksum;
+};
+
+struct kone_light_info {
+	uint8_t number;
+	uint8_t mod;
+	uint8_t red;
+	uint8_t green;
+	uint8_t blue;
+};
+
+struct kone_keystroke {
+	uint8_t key;
+	uint8_t action;
+	uint16_t period;
+};
+
+struct kone_button_info {
+	uint8_t number;
+	uint8_t type;
+	uint8_t macro_type;
+	uint8_t macro_set_name[16];
+	uint8_t macro_name[16];
+	uint8_t count;
+	struct kone_keystroke keystrokes[20];
+};
+
+struct kone_profile {
+	uint16_t size;
+	uint16_t unused;
+	uint8_t profile;
+	uint16_t main_sensitivity;
+	uint8_t xy_sensitivity_enabled;
+	uint16_t x_sensitivity;
+	uint16_t y_sensitivity;
+	uint8_t dpi_rate;
+	uint8_t startup_dpi;
+	uint8_t polling_rate;
+	uint8_t dcu_flag;
+	uint8_t light_effect_1;
+	uint8_t light_effect_2;
+	uint8_t light_effect_3;
+	uint8_t light_effect_speed;
+	struct kone_light_info light_infos[5];
+	struct kone_button_info button_infos[8];
+	uint16_t checksum;
+} __attribute__((packed));
+
+struct kone_device {
+	int actual_profile;
+	int actual_dpi;
+	struct kone_mouse_event last_mouse_event;
+	long: 0;
+	struct mutex kone_lock;
+	struct kone_profile profiles[5];
+	struct kone_settings settings;
+	long: 0;
+	int firmware_version;
+	int roccat_claimed;
+	int chrdev_minor;
+	long: 0;
+} __attribute__((packed));
+
+struct kone_roccat_report {
+	uint8_t event;
+	uint8_t value;
+	uint8_t key;
+};
+
+enum koneplus_commands {
+	KONEPLUS_COMMAND_ACTUAL_PROFILE = 5,
+	KONEPLUS_COMMAND_CONTROL = 4,
+	KONEPLUS_COMMAND_PROFILE_SETTINGS = 6,
+	KONEPLUS_COMMAND_PROFILE_BUTTONS = 7,
+	KONEPLUS_COMMAND_MACRO = 8,
+	KONEPLUS_COMMAND_INFO = 9,
+	KONEPLUS_COMMAND_TCU = 12,
+	KONEPLUS_COMMAND_TCU_IMAGE = 12,
+	KONEPLUS_COMMAND_E = 14,
+	KONEPLUS_COMMAND_SENSOR = 15,
+	KONEPLUS_COMMAND_TALK = 16,
+	KONEPLUS_COMMAND_FIRMWARE_WRITE = 27,
+	KONEPLUS_COMMAND_FIRMWARE_WRITE_CONTROL = 28,
+};
+
+enum {
+	KONEPLUS_SIZE_ACTUAL_PROFILE = 3,
+	KONEPLUS_SIZE_CONTROL = 3,
+	KONEPLUS_SIZE_FIRMWARE_WRITE = 1026,
+	KONEPLUS_SIZE_INFO = 6,
+	KONEPLUS_SIZE_MACRO = 2082,
+	KONEPLUS_SIZE_PROFILE_SETTINGS = 43,
+	KONEPLUS_SIZE_PROFILE_BUTTONS = 77,
+	KONEPLUS_SIZE_SENSOR = 6,
+	KONEPLUS_SIZE_TALK = 16,
+	KONEPLUS_SIZE_TCU = 4,
+	KONEPLUS_SIZE_TCU_IMAGE = 1028,
+};
+
+enum koneplus_mouse_report_numbers {
+	KONEPLUS_MOUSE_REPORT_NUMBER_HID = 1,
+	KONEPLUS_MOUSE_REPORT_NUMBER_AUDIO = 2,
+	KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON = 3,
+};
+
+enum koneplus_mouse_report_button_types {
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE = 32,
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_QUICKLAUNCH = 96,
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_TIMER = 128,
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI = 176,
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY = 192,
+	KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_MULTIMEDIA = 240,
+	KONEPLUS_MOUSE_REPORT_TALK = 255,
+};
+
+enum koneplus_mouse_report_button_action {
+	KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_PRESS = 0,
+	KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_RELEASE = 1,
+};
+
+enum koneplus_control_requests {
+	KONEPLUS_CONTROL_REQUEST_PROFILE_SETTINGS = 128,
+	KONEPLUS_CONTROL_REQUEST_PROFILE_BUTTONS = 144,
+};
+
+struct koneplus_mouse_report_button {
+	uint8_t report_number;
+	uint8_t zero1;
+	uint8_t type;
+	uint8_t data1;
+	uint8_t data2;
+	uint8_t zero2;
+	uint8_t unknown[2];
+};
+
+struct koneplus_device {
+	int actual_profile;
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex koneplus_lock;
+};
+
+struct koneplus_actual_profile {
+	uint8_t command;
+	uint8_t size;
+	uint8_t actual_profile;
+};
+
+struct koneplus_roccat_report {
+	uint8_t type;
+	uint8_t data1;
+	uint8_t data2;
+	uint8_t profile;
+};
+
+struct koneplus_info {
+	uint8_t command;
+	uint8_t size;
+	uint8_t firmware_version;
+	uint8_t unknown[3];
+};
+
+enum {
+	KONEPURE_MOUSE_REPORT_NUMBER_BUTTON = 3,
+};
+
+enum kovaplus_control_requests {
+	KOVAPLUS_CONTROL_REQUEST_PROFILE_SETTINGS = 16,
+	KOVAPLUS_CONTROL_REQUEST_PROFILE_BUTTONS = 32,
+};
+
+enum kovaplus_commands {
+	KOVAPLUS_COMMAND_ACTUAL_PROFILE = 5,
+	KOVAPLUS_COMMAND_CONTROL = 4,
+	KOVAPLUS_COMMAND_PROFILE_SETTINGS = 6,
+	KOVAPLUS_COMMAND_PROFILE_BUTTONS = 7,
+	KOVAPLUS_COMMAND_INFO = 9,
+	KOVAPLUS_COMMAND_A = 10,
+};
+
+enum {
+	KOVAPLUS_SIZE_CONTROL = 3,
+	KOVAPLUS_SIZE_INFO = 6,
+	KOVAPLUS_SIZE_PROFILE_SETTINGS = 16,
+	KOVAPLUS_SIZE_PROFILE_BUTTONS = 23,
+};
+
+enum kovaplus_mouse_report_numbers {
+	KOVAPLUS_MOUSE_REPORT_NUMBER_MOUSE = 1,
+	KOVAPLUS_MOUSE_REPORT_NUMBER_AUDIO = 2,
+	KOVAPLUS_MOUSE_REPORT_NUMBER_BUTTON = 3,
+	KOVAPLUS_MOUSE_REPORT_NUMBER_KBD = 4,
+};
+
+enum kovaplus_mouse_report_button_types {
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE_1 = 32,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE_2 = 48,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_MACRO = 64,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_SHORTCUT = 80,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_QUICKLAUNCH = 96,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_TIMER = 128,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI = 176,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY = 192,
+	KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_MULTIMEDIA = 240,
+};
+
+struct kovaplus_mouse_report_button {
+	uint8_t report_number;
+	uint8_t unknown1;
+	uint8_t type;
+	uint8_t data1;
+	uint8_t data2;
+};
+
+struct kovaplus_profile_settings {
+	uint8_t command;
+	uint8_t size;
+	uint8_t profile_index;
+	uint8_t unknown1;
+	uint8_t sensitivity_x;
+	uint8_t sensitivity_y;
+	uint8_t cpi_levels_enabled;
+	uint8_t cpi_startup_level;
+	uint8_t data[8];
+};
+
+struct kovaplus_profile_buttons {
+	uint8_t command;
+	uint8_t size;
+	uint8_t profile_index;
+	uint8_t data[20];
+};
+
+struct kovaplus_device {
+	int actual_profile;
+	int actual_cpi;
+	int actual_x_sensitivity;
+	int actual_y_sensitivity;
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex kovaplus_lock;
+	struct kovaplus_profile_settings profile_settings[5];
+	struct kovaplus_profile_buttons profile_buttons[5];
+};
+
+struct kovaplus_actual_profile {
+	uint8_t command;
+	uint8_t size;
+	uint8_t actual_profile;
+};
+
+struct kovaplus_roccat_report {
+	uint8_t type;
+	uint8_t profile;
+	uint8_t button;
+	uint8_t data1;
+	uint8_t data2;
+};
+
+struct kovaplus_info {
+	uint8_t command;
+	uint8_t size;
+	uint8_t firmware_version;
+	uint8_t unknown[3];
+};
+
+enum {
+	LUA_SIZE_CONTROL = 8,
+};
+
+enum lua_commands {
+	LUA_COMMAND_CONTROL = 3,
+};
+
+struct lua_device {
+	struct mutex lua_lock;
+};
+
+enum pyra_commands {
+	PYRA_COMMAND_CONTROL = 4,
+	PYRA_COMMAND_SETTINGS = 5,
+	PYRA_COMMAND_PROFILE_SETTINGS = 6,
+	PYRA_COMMAND_PROFILE_BUTTONS = 7,
+	PYRA_COMMAND_INFO = 9,
+	PYRA_COMMAND_B = 11,
+};
+
+enum {
+	PYRA_SIZE_CONTROL = 3,
+	PYRA_SIZE_INFO = 6,
+	PYRA_SIZE_PROFILE_SETTINGS = 13,
+	PYRA_SIZE_PROFILE_BUTTONS = 19,
+	PYRA_SIZE_SETTINGS = 3,
+};
+
+enum pyra_control_requests {
+	PYRA_CONTROL_REQUEST_PROFILE_SETTINGS = 16,
+	PYRA_CONTROL_REQUEST_PROFILE_BUTTONS = 32,
+};
+
+enum pyra_mouse_report_numbers {
+	PYRA_MOUSE_REPORT_NUMBER_HID = 1,
+	PYRA_MOUSE_REPORT_NUMBER_AUDIO = 2,
+	PYRA_MOUSE_REPORT_NUMBER_BUTTON = 3,
+};
+
+enum pyra_mouse_event_button_types {
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_TILT = 16,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_PROFILE_1 = 32,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_PROFILE_2 = 48,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_MACRO = 64,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_SHORTCUT = 80,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_QUICKLAUNCH = 96,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_CPI = 176,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_SENSITIVITY = 192,
+	PYRA_MOUSE_EVENT_BUTTON_TYPE_MULTIMEDIA = 240,
+};
+
+enum {
+	PYRA_MOUSE_EVENT_BUTTON_PRESS = 0,
+	PYRA_MOUSE_EVENT_BUTTON_RELEASE = 1,
+};
+
+struct pyra_mouse_event_button {
+	uint8_t report_number;
+	uint8_t unknown;
+	uint8_t type;
+	uint8_t data1;
+	uint8_t data2;
+};
+
+struct pyra_settings {
+	uint8_t command;
+	uint8_t size;
+	uint8_t startup_profile;
+};
+
+struct pyra_profile_settings {
+	uint8_t command;
+	uint8_t size;
+	uint8_t number;
+	uint8_t xysync;
+	uint8_t x_sensitivity;
+	uint8_t y_sensitivity;
+	uint8_t x_cpi;
+	uint8_t y_cpi;
+	uint8_t lightswitch;
+	uint8_t light_effect;
+	uint8_t handedness;
+	uint16_t checksum;
+} __attribute__((packed));
+
+struct pyra_device {
+	int actual_profile;
+	int actual_cpi;
+	int roccat_claimed;
+	int chrdev_minor;
+	struct mutex pyra_lock;
+	struct pyra_profile_settings profile_settings[5];
+};
+
+struct pyra_roccat_report {
+	uint8_t type;
+	uint8_t value;
+	uint8_t key;
+};
+
+struct pyra_info {
+	uint8_t command;
+	uint8_t size;
+	uint8_t firmware_version;
+	uint8_t unknown1;
+	uint8_t unknown2;
+	uint8_t unknown3;
+};
+
+enum {
+	RYOS_REPORT_NUMBER_SPECIAL = 3,
+	RYOS_USB_INTERFACE_PROTOCOL = 0,
+};
+
+enum {
+	SAVU_MOUSE_REPORT_NUMBER_SPECIAL = 3,
+};
+
+struct savu_mouse_report_special {
+	uint8_t report_number;
+	uint8_t zero;
+	uint8_t type;
+	uint8_t data[2];
+};
+
+struct savu_roccat_report {
+	uint8_t type;
+	uint8_t data[2];
+};
+
+struct sixaxis_rumble {
+	u8 padding;
+	u8 right_duration;
+	u8 right_motor_on;
+	u8 left_duration;
+	u8 left_motor_force;
+};
+
+struct sixaxis_led {
+	u8 time_enabled;
+	u8 duty_length;
+	u8 enabled;
+	u8 duty_off;
+	u8 duty_on;
+};
+
+struct sixaxis_output_report {
+	u8 report_id;
+	struct sixaxis_rumble rumble;
+	u8 padding[4];
+	u8 leds_bitmap;
+	struct sixaxis_led led[4];
+	struct sixaxis_led _reserved;
+};
+
+union sixaxis_output_report_01 {
+	struct sixaxis_output_report data;
+	u8 buf[36];
+};
+
+enum sony_worker {
+	SONY_WORKER_STATE = 0,
+};
+
+struct sony_sc {
+	spinlock_t lock;
+	struct list_head list_node;
+	struct hid_device *hdev;
+	struct input_dev *touchpad;
+	struct input_dev *sensor_dev;
+	struct led_classdev *leds[4];
+	unsigned long quirks;
+	struct work_struct state_worker;
+	void (*send_output_report)(struct sony_sc *);
+	struct power_supply *battery;
+	struct power_supply_desc battery_desc;
+	int device_id;
+	u8 *output_report_dmabuf;
+	u8 left;
+	u8 right;
+	u8 mac_address[6];
+	u8 state_worker_initialized;
+	u8 defer_initialization;
+	u8 battery_capacity;
+	int battery_status;
+	u8 led_state[4];
+	u8 led_delay_on[4];
+	u8 led_delay_off[4];
+	u8 led_count;
+	struct urb *ghl_urb;
+	struct timer_list ghl_poke_timer;
+};
+
+struct motion_output_report_02 {
+	u8 type;
+	u8 zero;
+	u8 r;
+	u8 g;
+	u8 b;
+	u8 zero2;
+	u8 rumble;
+};
+
+struct steam_device {
+	struct list_head list;
+	spinlock_t lock;
+	struct hid_device *hdev;
+	struct hid_device *client_hdev;
+	struct mutex mutex;
+	bool client_opened;
+	struct input_dev __attribute__((btf_type_tag("rcu"))) *input;
+	unsigned long quirks;
+	struct work_struct work_connect;
+	bool connected;
+	char serial_no[11];
+	struct power_supply_desc battery_desc;
+	struct power_supply __attribute__((btf_type_tag("rcu"))) *battery;
+	u8 battery_charge;
+	u16 voltage;
+	struct delayed_work heartbeat;
+	struct work_struct rumble_work;
+	u16 rumble_left;
+	u16 rumble_right;
+};
+
+enum uclogic_params_pen_inrange {
+	UCLOGIC_PARAMS_PEN_INRANGE_NORMAL = 0,
+	UCLOGIC_PARAMS_PEN_INRANGE_INVERTED = 1,
+	UCLOGIC_PARAMS_PEN_INRANGE_NONE = 2,
+};
+
+struct uclogic_params_pen_subreport {
+	__u8 value;
+	__u8 id;
+};
+
+struct uclogic_params_pen {
+	bool usage_invalid;
+	__u8 *desc_ptr;
+	unsigned int desc_size;
+	unsigned int id;
+	struct uclogic_params_pen_subreport subreport_list[3];
+	enum uclogic_params_pen_inrange inrange;
+	bool fragmented_hires;
+	bool tilt_y_flipped;
+};
+
+struct uclogic_params_frame {
+	__u8 *desc_ptr;
+	unsigned int desc_size;
+	unsigned int id;
+	const char *suffix;
+	unsigned int re_lsb;
+	unsigned int dev_id_byte;
+	unsigned int touch_byte;
+	__s8 touch_flip_at;
+	__s8 touch_max;
+	unsigned int bitmap_dial_byte;
+};
+
+struct uclogic_raw_event_hook;
+
+struct uclogic_params {
+	bool invalid;
+	__u8 *desc_ptr;
+	unsigned int desc_size;
+	struct uclogic_params_pen pen;
+	struct uclogic_params_frame frame_list[3];
+	struct uclogic_raw_event_hook *event_hooks;
+};
+
+struct uclogic_drvdata {
+	struct uclogic_params params;
+	__u8 *desc_ptr;
+	unsigned int desc_size;
+	struct input_dev *pen_input;
+	struct timer_list inrange_timer;
+	u8 re_state;
+	unsigned long quirks;
+};
+
+struct uclogic_raw_event_hook {
+	struct hid_device *hdev;
+	__u8 *event;
+	size_t size;
+	struct work_struct work;
+	struct list_head list;
+};
+
+enum uclogic_rdesc_ph_id {
+	UCLOGIC_RDESC_PEN_PH_ID_X_LM = 0,
+	UCLOGIC_RDESC_PEN_PH_ID_X_PM = 1,
+	UCLOGIC_RDESC_PEN_PH_ID_Y_LM = 2,
+	UCLOGIC_RDESC_PEN_PH_ID_Y_PM = 3,
+	UCLOGIC_RDESC_PEN_PH_ID_PRESSURE_LM = 4,
+	UCLOGIC_RDESC_FRAME_PH_ID_UM = 5,
+	UCLOGIC_RDESC_PH_ID_NUM = 6,
+};
+
+enum uclogic_params_frame_type {
+	UCLOGIC_PARAMS_FRAME_BUTTONS = 0,
+	UCLOGIC_PARAMS_FRAME_DIAL = 1,
+	UCLOGIC_PARAMS_FRAME_MOUSE = 2,
+};
+
+struct wacom_features {
+	const char *name;
+	int x_max;
+	int y_max;
+	int pressure_max;
+	int distance_max;
+	int type;
+	int x_resolution;
+	int y_resolution;
+	int numbered_buttons;
+	int offset_left;
+	int offset_right;
+	int offset_top;
+	int offset_bottom;
+	int device_type;
+	int x_phy;
+	int y_phy;
+	unsigned int unit;
+	int unitExpo;
+	int x_fuzz;
+	int y_fuzz;
+	int pressure_fuzz;
+	int distance_fuzz;
+	int tilt_fuzz;
+	unsigned int quirks;
+	unsigned int touch_max;
+	int oVid;
+	int oPid;
+	int pktlen;
+	bool check_for_hid_type;
+	int hid_type;
+};
+
+enum {
+	PENPARTNER = 0,
+	GRAPHIRE = 1,
+	GRAPHIRE_BT = 2,
+	WACOM_G4 = 3,
+	PTU = 4,
+	PL = 5,
+	DTU = 6,
+	DTUS = 7,
+	DTUSX = 8,
+	INTUOS = 9,
+	INTUOS3S = 10,
+	INTUOS3 = 11,
+	INTUOS3L = 12,
+	INTUOS4S = 13,
+	INTUOS4 = 14,
+	INTUOS4WL = 15,
+	INTUOS4L = 16,
+	INTUOS5S = 17,
+	INTUOS5 = 18,
+	INTUOS5L = 19,
+	INTUOSPS = 20,
+	INTUOSPM = 21,
+	INTUOSPL = 22,
+	INTUOSP2_BT = 23,
+	INTUOSP2S_BT = 24,
+	INTUOSHT3_BT = 25,
+	WACOM_21UX2 = 26,
+	WACOM_22HD = 27,
+	DTK = 28,
+	WACOM_24HD = 29,
+	WACOM_27QHD = 30,
+	CINTIQ_HYBRID = 31,
+	CINTIQ_COMPANION_2 = 32,
+	CINTIQ = 33,
+	WACOM_BEE = 34,
+	WACOM_13HD = 35,
+	WACOM_MO = 36,
+	BAMBOO_PEN = 37,
+	INTUOSHT = 38,
+	INTUOSHT2 = 39,
+	BAMBOO_TOUCH = 40,
+	BAMBOO_PT = 41,
+	WACOM_24HDT = 42,
+	WACOM_27QHDT = 43,
+	BAMBOO_PAD = 44,
+	WIRELESS = 45,
+	REMOTE = 46,
+	TABLETPC = 47,
+	TABLETPCE = 48,
+	TABLETPC2FG = 49,
+	MTSCREEN = 50,
+	MTTPC = 51,
+	MTTPC_B = 52,
+	HID_GENERIC = 53,
+	BOOTLOADER = 54,
+	MAX_TYPE = 55,
+};
+
+enum wacom_worker {
+	WACOM_WORKER_WIRELESS = 0,
+	WACOM_WORKER_BATTERY = 1,
+	WACOM_WORKER_REMOTE = 2,
+	WACOM_WORKER_MODE_CHANGE = 3,
+};
+
+struct hid_data {
+	__s16 inputmode;
+	__s16 inputmode_index;
+	bool sense_state;
+	bool inrange_state;
+	bool invert_state;
+	bool tipswitch;
+	bool barrelswitch;
+	bool barrelswitch2;
+	bool barrelswitch3;
+	bool serialhi;
+	bool confidence;
+	int x;
+	int y;
+	int pressure;
+	int width;
+	int height;
+	int id;
+	int cc_report;
+	int cc_index;
+	int cc_value_index;
+	int last_slot_field;
+	int num_expected;
+	int num_received;
+	int bat_status;
+	int battery_capacity;
+	int bat_charging;
+	int bat_connected;
+	int ps_connected;
+	bool pad_input_event_flag;
+	unsigned short sequence_number;
+	ktime_t time_delayed;
+};
+
+struct wacom_shared;
+
+struct kfifo_rec_ptr_2;
+
+struct wacom_wac {
+	char name[64];
+	char pen_name[64];
+	char touch_name[64];
+	char pad_name[64];
+	unsigned char data[361];
+	int tool[2];
+	int id[2];
+	__u64 serial[2];
+	bool probe_complete;
+	bool reporting_data;
+	struct wacom_features features;
+	struct wacom_shared *shared;
+	struct input_dev *pen_input;
+	struct input_dev *touch_input;
+	struct input_dev *pad_input;
+	struct kfifo_rec_ptr_2 *pen_fifo;
+	int pid;
+	int num_contacts_left;
+	u8 bt_features;
+	u8 bt_high_speed;
+	int mode_report;
+	int mode_value;
+	struct hid_data hid_data;
+	bool has_mute_touch_switch;
+	bool is_soft_touch_switch;
+	bool has_mode_change;
+	bool is_direct_mode;
+	bool is_invalid_bt_frame;
+};
+
+struct wacom_group_leds;
+
+struct wacom_leds {
+	struct wacom_group_leds *groups;
+	unsigned int count;
+	u8 llv;
+	u8 hlv;
+	u8 img_lum;
+	u8 max_llv;
+	u8 max_hlv;
+};
+
+struct wacom;
+
+struct wacom_battery {
+	struct wacom *wacom;
+	struct power_supply_desc bat_desc;
+	struct power_supply *battery;
+	char bat_name[64];
+	int bat_status;
+	int battery_capacity;
+	int bat_charging;
+	int bat_connected;
+	int ps_connected;
+};
+
+struct wacom_remote;
+
+struct wacom {
+	struct usb_device *usbdev;
+	struct usb_interface *intf;
+	struct wacom_wac wacom_wac;
+	struct hid_device *hdev;
+	struct mutex lock;
+	struct work_struct wireless_work;
+	struct work_struct battery_work;
+	struct work_struct remote_work;
+	struct delayed_work init_work;
+	struct wacom_remote *remote;
+	struct work_struct mode_change_work;
+	struct timer_list idleprox_timer;
+	bool generic_has_leds;
+	struct wacom_leds led;
+	struct wacom_battery battery;
+	bool resources;
+};
+
+struct wacom_shared {
+	bool stylus_in_proximity;
+	bool touch_down;
+	unsigned int touch_max;
+	int type;
+	struct input_dev *touch_input;
+	struct hid_device *pen;
+	struct hid_device *touch;
+	bool has_mute_touch_switch;
+	bool is_touch_on;
+};
+
+struct kfifo_rec_ptr_2 {
+	union {
+		struct __kfifo kfifo;
+		unsigned char *type;
+		const unsigned char *const_type;
+		char (*rectype)[2];
+		void *ptr;
+		const void *ptr_const;
+	};
+	unsigned char buf[0];
+};
+
+struct wacom_remote {
+	spinlock_t remote_lock;
+	struct kfifo remote_fifo;
+	struct kobject *remote_dir;
+	struct {
+		struct attribute_group group;
+		u32 serial;
+		struct input_dev *input;
+		bool registered;
+		struct wacom_battery battery;
+		ktime_t active_time;
+	} remotes[5];
+};
+
+struct wacom_led;
+
+struct wacom_group_leds {
+	u8 select;
+	struct wacom_led *leds;
+	unsigned int count;
+	struct device *dev;
+};
+
+struct wacom_led {
+	struct led_classdev cdev;
+	struct led_trigger trigger;
+	struct wacom *wacom;
+	unsigned int group;
+	unsigned int id;
+	u8 llv;
+	u8 hlv;
+	bool held;
+};
+
+struct wacom_remote_work_data {
+	struct {
+		u32 serial;
+	} remote[5];
+};
+
+struct wacom_hdev_data {
+	struct list_head list;
+	struct kref kref;
+	struct hid_device *dev;
+	struct wacom_shared shared;
+};
+
+struct wacom_sysfs_group_devres {
+	const struct attribute_group *group;
+	struct kobject *root;
+};
+
+struct wiimote_data;
+
+struct wiiproto_handler {
+	__u8 id;
+	size_t size;
+	void (*func)(struct wiimote_data *, const __u8 *);
+};
+
+struct wiimote_buf {
+	__u8 data[16384];
+	size_t size;
+};
+
+struct wiimote_queue {
+	spinlock_t lock;
+	struct work_struct worker;
+	__u8 head;
+	__u8 tail;
+	struct wiimote_buf outq[32];
+};
+
+struct wiimote_state {
+	spinlock_t lock;
+	__u32 flags;
+	__u8 accel_split[2];
+	__u8 drm;
+	__u8 devtype;
+	__u8 exttype;
+	__u8 mp;
+	struct mutex sync;
+	struct completion ready;
+	int cmd;
+	__u32 opt;
+	__u8 cmd_battery;
+	__u8 cmd_err;
+	__u8 *cmd_read_buf;
+	__u8 cmd_read_size;
+	__u16 calib_bboard[12];
+	__s16 calib_pro_sticks[4];
+	__u8 pressure_drums[7];
+	__u8 cache_rumble;
+};
+
+struct wiimote_debug;
+
+struct wiimote_data {
+	struct hid_device *hdev;
+	struct input_dev *input;
+	struct work_struct rumble_worker;
+	struct led_classdev *leds[4];
+	struct input_dev *accel;
+	struct input_dev *ir;
+	struct power_supply *battery;
+	struct power_supply_desc battery_desc;
+	struct input_dev *mp;
+	struct timer_list timer;
+	struct wiimote_debug *debug;
+	union {
+		struct input_dev *input;
+	} extension;
+	struct wiimote_queue queue;
+	struct wiimote_state state;
+	struct work_struct init_worker;
+};
+
+enum wiiproto_reqs {
+	WIIPROTO_REQ_NULL = 0,
+	WIIPROTO_REQ_RUMBLE = 16,
+	WIIPROTO_REQ_LED = 17,
+	WIIPROTO_REQ_DRM = 18,
+	WIIPROTO_REQ_IR1 = 19,
+	WIIPROTO_REQ_SREQ = 21,
+	WIIPROTO_REQ_WMEM = 22,
+	WIIPROTO_REQ_RMEM = 23,
+	WIIPROTO_REQ_IR2 = 26,
+	WIIPROTO_REQ_STATUS = 32,
+	WIIPROTO_REQ_DATA = 33,
+	WIIPROTO_REQ_RETURN = 34,
+	WIIPROTO_REQ_DRM_K = 48,
+	WIIPROTO_REQ_DRM_KA = 49,
+	WIIPROTO_REQ_DRM_KE = 50,
+	WIIPROTO_REQ_DRM_KAI = 51,
+	WIIPROTO_REQ_DRM_KEE = 52,
+	WIIPROTO_REQ_DRM_KAE = 53,
+	WIIPROTO_REQ_DRM_KIE = 54,
+	WIIPROTO_REQ_DRM_KAIE = 55,
+	WIIPROTO_REQ_DRM_E = 61,
+	WIIPROTO_REQ_DRM_SKAI1 = 62,
+	WIIPROTO_REQ_DRM_SKAI2 = 63,
+	WIIPROTO_REQ_MAX = 64,
+};
+
+enum wiimote_devtype {
+	WIIMOTE_DEV_PENDING = 0,
+	WIIMOTE_DEV_UNKNOWN = 1,
+	WIIMOTE_DEV_GENERIC = 2,
+	WIIMOTE_DEV_GEN10 = 3,
+	WIIMOTE_DEV_GEN20 = 4,
+	WIIMOTE_DEV_BALANCE_BOARD = 5,
+	WIIMOTE_DEV_PRO_CONTROLLER = 6,
+	WIIMOTE_DEV_NUM = 7,
+};
+
+enum wiimote_exttype {
+	WIIMOTE_EXT_NONE = 0,
+	WIIMOTE_EXT_UNKNOWN = 1,
+	WIIMOTE_EXT_NUNCHUK = 2,
+	WIIMOTE_EXT_CLASSIC_CONTROLLER = 3,
+	WIIMOTE_EXT_BALANCE_BOARD = 4,
+	WIIMOTE_EXT_PRO_CONTROLLER = 5,
+	WIIMOTE_EXT_DRUMS = 6,
+	WIIMOTE_EXT_GUITAR = 7,
+	WIIMOTE_EXT_TURNTABLE = 8,
+	WIIMOTE_EXT_NUM = 9,
+};
+
+enum wiimod_module {
+	WIIMOD_KEYS = 0,
+	WIIMOD_RUMBLE = 1,
+	WIIMOD_BATTERY = 2,
+	WIIMOD_LED1 = 3,
+	WIIMOD_LED2 = 4,
+	WIIMOD_LED3 = 5,
+	WIIMOD_LED4 = 6,
+	WIIMOD_ACCEL = 7,
+	WIIMOD_IR = 8,
+	WIIMOD_BUILTIN_MP = 9,
+	WIIMOD_NO_MP = 10,
+	WIIMOD_NUM = 11,
+	WIIMOD_NULL = 11,
+};
+
+enum wiimote_mptype {
+	WIIMOTE_MP_NONE = 0,
+	WIIMOTE_MP_UNKNOWN = 1,
+	WIIMOTE_MP_SINGLE = 2,
+	WIIMOTE_MP_PASSTHROUGH_NUNCHUK = 3,
+	WIIMOTE_MP_PASSTHROUGH_CLASSIC = 4,
+};
+
+struct wiimod_ops {
+	__u16 flags;
+	unsigned long arg;
+	int (*probe)(const struct wiimod_ops *, struct wiimote_data *);
+	void (*remove)(const struct wiimod_ops *, struct wiimote_data *);
+	void (*in_keys)(struct wiimote_data *, const __u8 *);
+	void (*in_accel)(struct wiimote_data *, const __u8 *);
+	void (*in_ir)(struct wiimote_data *, const __u8 *, bool, unsigned int);
+	void (*in_mp)(struct wiimote_data *, const __u8 *);
+	void (*in_ext)(struct wiimote_data *, const __u8 *);
+};
+
+enum wiiproto_keys {
+	WIIPROTO_KEY_LEFT = 0,
+	WIIPROTO_KEY_RIGHT = 1,
+	WIIPROTO_KEY_UP = 2,
+	WIIPROTO_KEY_DOWN = 3,
+	WIIPROTO_KEY_PLUS = 4,
+	WIIPROTO_KEY_MINUS = 5,
+	WIIPROTO_KEY_ONE = 6,
+	WIIPROTO_KEY_TWO = 7,
+	WIIPROTO_KEY_A = 8,
+	WIIPROTO_KEY_B = 9,
+	WIIPROTO_KEY_HOME = 10,
+	WIIPROTO_KEY_COUNT = 11,
+};
+
+enum wiimod_nunchuk_keys {
+	WIIMOD_NUNCHUK_KEY_C = 0,
+	WIIMOD_NUNCHUK_KEY_Z = 1,
+	WIIMOD_NUNCHUK_KEY_NUM = 2,
+};
+
+enum wiimod_classic_keys {
+	WIIMOD_CLASSIC_KEY_A = 0,
+	WIIMOD_CLASSIC_KEY_B = 1,
+	WIIMOD_CLASSIC_KEY_X = 2,
+	WIIMOD_CLASSIC_KEY_Y = 3,
+	WIIMOD_CLASSIC_KEY_ZL = 4,
+	WIIMOD_CLASSIC_KEY_ZR = 5,
+	WIIMOD_CLASSIC_KEY_PLUS = 6,
+	WIIMOD_CLASSIC_KEY_MINUS = 7,
+	WIIMOD_CLASSIC_KEY_HOME = 8,
+	WIIMOD_CLASSIC_KEY_LEFT = 9,
+	WIIMOD_CLASSIC_KEY_RIGHT = 10,
+	WIIMOD_CLASSIC_KEY_UP = 11,
+	WIIMOD_CLASSIC_KEY_DOWN = 12,
+	WIIMOD_CLASSIC_KEY_LT = 13,
+	WIIMOD_CLASSIC_KEY_RT = 14,
+	WIIMOD_CLASSIC_KEY_NUM = 15,
+};
+
+enum wiimod_pro_keys {
+	WIIMOD_PRO_KEY_A = 0,
+	WIIMOD_PRO_KEY_B = 1,
+	WIIMOD_PRO_KEY_X = 2,
+	WIIMOD_PRO_KEY_Y = 3,
+	WIIMOD_PRO_KEY_PLUS = 4,
+	WIIMOD_PRO_KEY_MINUS = 5,
+	WIIMOD_PRO_KEY_HOME = 6,
+	WIIMOD_PRO_KEY_LEFT = 7,
+	WIIMOD_PRO_KEY_RIGHT = 8,
+	WIIMOD_PRO_KEY_UP = 9,
+	WIIMOD_PRO_KEY_DOWN = 10,
+	WIIMOD_PRO_KEY_TL = 11,
+	WIIMOD_PRO_KEY_TR = 12,
+	WIIMOD_PRO_KEY_ZL = 13,
+	WIIMOD_PRO_KEY_ZR = 14,
+	WIIMOD_PRO_KEY_THUMBL = 15,
+	WIIMOD_PRO_KEY_THUMBR = 16,
+	WIIMOD_PRO_KEY_NUM = 17,
+};
+
+enum wiimod_guitar_keys {
+	WIIMOD_GUITAR_KEY_G = 0,
+	WIIMOD_GUITAR_KEY_R = 1,
+	WIIMOD_GUITAR_KEY_Y = 2,
+	WIIMOD_GUITAR_KEY_B = 3,
+	WIIMOD_GUITAR_KEY_O = 4,
+	WIIMOD_GUITAR_KEY_UP = 5,
+	WIIMOD_GUITAR_KEY_DOWN = 6,
+	WIIMOD_GUITAR_KEY_PLUS = 7,
+	WIIMOD_GUITAR_KEY_MINUS = 8,
+	WIIMOD_GUITAR_KEY_NUM = 9,
+};
+
+enum wiimod_turntable_keys {
+	WIIMOD_TURNTABLE_KEY_G_RIGHT = 0,
+	WIIMOD_TURNTABLE_KEY_R_RIGHT = 1,
+	WIIMOD_TURNTABLE_KEY_B_RIGHT = 2,
+	WIIMOD_TURNTABLE_KEY_G_LEFT = 3,
+	WIIMOD_TURNTABLE_KEY_R_LEFT = 4,
+	WIIMOD_TURNTABLE_KEY_B_LEFT = 5,
+	WIIMOD_TURNTABLE_KEY_EUPHORIA = 6,
+	WIIMOD_TURNTABLE_KEY_PLUS = 7,
+	WIIMOD_TURNTABLE_KEY_MINUS = 8,
+	WIIMOD_TURNTABLE_KEY_NUM = 9,
+};
+
+struct wiimote_debug {
+	struct wiimote_data *wdata;
+	struct dentry *eeprom;
+	struct dentry *drm;
+};
+
+struct hid_control_fifo {
+	unsigned char dir;
+	struct hid_report *report;
+	char *raw_report;
+};
+
+struct hid_output_fifo {
+	struct hid_report *report;
+	char *raw_report;
+};
+
+struct usbhid_device {
+	struct hid_device *hid;
+	struct usb_interface *intf;
+	int ifnum;
+	unsigned int bufsize;
+	struct urb *urbin;
+	char *inbuf;
+	dma_addr_t inbuf_dma;
+	struct urb *urbctrl;
+	struct usb_ctrlrequest *cr;
+	struct hid_control_fifo ctrl[256];
+	unsigned char ctrlhead;
+	unsigned char ctrltail;
+	char *ctrlbuf;
+	dma_addr_t ctrlbuf_dma;
+	unsigned long last_ctrl;
+	struct urb *urbout;
+	struct hid_output_fifo out[256];
+	unsigned char outhead;
+	unsigned char outtail;
+	char *outbuf;
+	dma_addr_t outbuf_dma;
+	unsigned long last_out;
+	struct mutex mutex;
+	spinlock_t lock;
+	unsigned long iofl;
+	struct timer_list io_retry;
+	unsigned long stop_retry;
+	unsigned int retry_delay;
+	struct work_struct reset_work;
+	wait_queue_head_t wait;
+};
+
+struct hiddev_usage_ref {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 field_index;
+	__u32 usage_index;
+	__u32 usage_code;
+	__s32 value;
+};
+
+struct hiddev_list {
+	struct hiddev_usage_ref buffer[2048];
+	int head;
+	int tail;
+	unsigned int flags;
+	struct fasync_struct *fasync;
+	struct hiddev *hiddev;
+	struct list_head node;
+	struct mutex thread_lock;
+};
+
+struct hiddev_report_info {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 num_fields;
+};
+
+struct hiddev_event {
+	unsigned int hid;
+	int value;
+};
+
+struct hiddev_collection_info {
+	__u32 index;
+	__u32 type;
+	__u32 usage;
+	__u32 level;
+};
+
+struct hiddev_field_info {
+	__u32 report_type;
+	__u32 report_id;
+	__u32 field_index;
+	__u32 maxusage;
+	__u32 flags;
+	__u32 physical;
+	__u32 logical;
+	__u32 application;
+	__s32 logical_minimum;
+	__s32 logical_maximum;
+	__s32 physical_minimum;
+	__s32 physical_maximum;
+	__u32 unit_exponent;
+	__u32 unit;
+};
+
+struct hiddev_devinfo {
+	__u32 bustype;
+	__u32 busnum;
+	__u32 devnum;
+	__u32 ifnum;
+	__s16 vendor;
+	__s16 product;
+	__s16 version;
+	__u32 num_applications;
+};
+
+struct hiddev_usage_ref_multi {
+	struct hiddev_usage_ref uref;
+	__u32 num_values;
+	__s32 values[1024];
+};
+
+struct alias_prop {
+	struct list_head link;
+	const char *alias;
+	struct device_node *np;
+	int id;
+	char stem[0];
+};
+
+struct of_bus {
+	const char *name;
+	const char *addresses;
+	int (*match)(struct device_node *);
+	void (*count_cells)(struct device_node *, int *, int *);
+	u64 (*map)(__be32 *, const __be32 *, int, int, int);
+	int (*translate)(__be32 *, u64, int);
+	bool has_flags;
+	unsigned int (*get_flags)(const __be32 *);
+};
+
+enum {
+	LOGIC_PIO_INDIRECT = 0,
+	LOGIC_PIO_CPU_MMIO = 1,
+};
+
+struct logic_pio_host_ops;
+
+struct logic_pio_hwaddr {
+	struct list_head list;
+	struct fwnode_handle *fwnode;
+	resource_size_t hw_start;
+	resource_size_t io_start;
+	resource_size_t size;
+	unsigned long flags;
+	void *hostdata;
+	const struct logic_pio_host_ops *ops;
+};
+
+struct logic_pio_host_ops {
+	u32 (*in)(void *, unsigned long, size_t);
+	void (*out)(void *, unsigned long, u32, size_t);
+	u32 (*ins)(void *, unsigned long, void *, size_t, unsigned int);
+	void (*outs)(void *, unsigned long, const void *, size_t, unsigned int);
+};
+
+struct of_intc_desc {
+	struct list_head list;
+	of_irq_init_cb_t irq_init_cb;
+	struct device_node *dev;
+	struct device_node *interrupt_parent;
+};
+
+struct vsock_sock;
+
+struct sockaddr_vm;
+
+struct vsock_transport_recv_notify_data;
+
+struct vsock_transport_send_notify_data;
+
+struct vsock_transport {
+	struct module *module;
+	int (*init)(struct vsock_sock *, struct vsock_sock *);
+	void (*destruct)(struct vsock_sock *);
+	void (*release)(struct vsock_sock *);
+	int (*cancel_pkt)(struct vsock_sock *);
+	int (*connect)(struct vsock_sock *);
+	int (*dgram_bind)(struct vsock_sock *, struct sockaddr_vm *);
+	int (*dgram_dequeue)(struct vsock_sock *, struct msghdr *, size_t, int);
+	int (*dgram_enqueue)(struct vsock_sock *, struct sockaddr_vm *, struct msghdr *, size_t);
+	bool (*dgram_allow)(u32, u32);
+	ssize_t (*stream_dequeue)(struct vsock_sock *, struct msghdr *, size_t, int);
+	ssize_t (*stream_enqueue)(struct vsock_sock *, struct msghdr *, size_t);
+	s64 (*stream_has_data)(struct vsock_sock *);
+	s64 (*stream_has_space)(struct vsock_sock *);
+	u64 (*stream_rcvhiwat)(struct vsock_sock *);
+	bool (*stream_is_active)(struct vsock_sock *);
+	bool (*stream_allow)(u32, u32);
+	ssize_t (*seqpacket_dequeue)(struct vsock_sock *, struct msghdr *, int);
+	int (*seqpacket_enqueue)(struct vsock_sock *, struct msghdr *, size_t);
+	bool (*seqpacket_allow)(u32);
+	u32 (*seqpacket_has_data)(struct vsock_sock *);
+	int (*notify_poll_in)(struct vsock_sock *, size_t, bool *);
+	int (*notify_poll_out)(struct vsock_sock *, size_t, bool *);
+	int (*notify_recv_init)(struct vsock_sock *, size_t, struct vsock_transport_recv_notify_data *);
+	int (*notify_recv_pre_block)(struct vsock_sock *, size_t, struct vsock_transport_recv_notify_data *);
+	int (*notify_recv_pre_dequeue)(struct vsock_sock *, size_t, struct vsock_transport_recv_notify_data *);
+	int (*notify_recv_post_dequeue)(struct vsock_sock *, size_t, ssize_t, bool, struct vsock_transport_recv_notify_data *);
+	int (*notify_send_init)(struct vsock_sock *, struct vsock_transport_send_notify_data *);
+	int (*notify_send_pre_block)(struct vsock_sock *, struct vsock_transport_send_notify_data *);
+	int (*notify_send_pre_enqueue)(struct vsock_sock *, struct vsock_transport_send_notify_data *);
+	int (*notify_send_post_enqueue)(struct vsock_sock *, ssize_t, struct vsock_transport_send_notify_data *);
+	void (*notify_buffer_size)(struct vsock_sock *, u64 *);
+	int (*notify_set_rcvlowat)(struct vsock_sock *, int);
+	int (*shutdown)(struct vsock_sock *, int);
+	u32 (*get_local_cid)();
+	int (*read_skb)(struct vsock_sock *, skb_read_actor_t);
+};
+
+struct virtio_transport {
+	struct vsock_transport transport;
+	int (*send_pkt)(struct sk_buff *);
+};
+
+struct sockaddr_vm {
+	__kernel_sa_family_t svm_family;
+	unsigned short svm_reserved1;
+	unsigned int svm_port;
+	unsigned int svm_cid;
+	__u8 svm_flags;
+	unsigned char svm_zero[3];
+};
+
+struct vsock_sock {
+	struct sock sk;
+	const struct vsock_transport *transport;
+	struct sockaddr_vm local_addr;
+	struct sockaddr_vm remote_addr;
+	struct list_head bound_table;
+	struct list_head connected_table;
+	bool trusted;
+	bool cached_peer_allow_dgram;
+	u32 cached_peer;
+	const struct cred *owner;
+	long connect_timeout;
+	struct sock *listener;
+	struct list_head pending_links;
+	struct list_head accept_queue;
+	bool rejected;
+	struct delayed_work connect_work;
+	struct delayed_work pending_work;
+	struct delayed_work close_work;
+	bool close_work_scheduled;
+	u32 peer_shutdown;
+	bool sent_request;
+	bool ignore_connecting_rst;
+	u64 buffer_size;
+	u64 buffer_min_size;
+	u64 buffer_max_size;
+	void *trans;
+};
+
+struct vsock_transport_recv_notify_data {
+	u64 data1;
+	u64 data2;
+	bool notify_on_block;
+};
+
+struct vsock_transport_send_notify_data {
+	u64 data1;
+	u64 data2;
+};
+
+enum {
+	VHOST_VSOCK_FEATURES = 13908312066ULL,
+};
+
+enum {
+	VHOST_VSOCK_BACKEND_FEATURES = 2,
+};
+
+enum {
+	VSOCK_VQ_RX = 0,
+	VSOCK_VQ_TX = 1,
+	VSOCK_VQ_EVENT = 2,
+	VSOCK_VQ_MAX = 3,
+};
+
+enum virtio_vsock_rw {
+	VIRTIO_VSOCK_SEQ_EOM = 1,
+	VIRTIO_VSOCK_SEQ_EOR = 2,
+};
+
+struct vhost_virtqueue;
+
+struct vhost_iotlb;
+
+struct vhost_iotlb_msg;
+
+struct vhost_dev {
+	struct mm_struct *mm;
+	struct mutex mutex;
+	struct vhost_virtqueue **vqs;
+	int nvqs;
+	struct eventfd_ctx *log_ctx;
+	struct vhost_iotlb *umem;
+	struct vhost_iotlb *iotlb;
+	spinlock_t iotlb_lock;
+	struct list_head read_list;
+	struct list_head pending_list;
+	wait_queue_head_t wait;
+	int iov_limit;
+	int weight;
+	int byte_weight;
+	struct xarray worker_xa;
+	bool use_worker;
+	int (*msg_handler)(struct vhost_dev *, u32, struct vhost_iotlb_msg *);
+};
+
+struct vhost_vring_call {
+	struct eventfd_ctx *ctx;
+	struct irq_bypass_producer producer;
+};
+
+struct vhost_work;
+
+typedef void (*vhost_work_fn_t)(struct vhost_work *);
+
+struct vhost_work {
+	struct llist_node node;
+	vhost_work_fn_t fn;
+	unsigned long flags;
+};
+
+struct vhost_poll {
+	poll_table table;
+	wait_queue_head_t *wqh;
+	wait_queue_entry_t wait;
+	struct vhost_work work;
+	__poll_t mask;
+	struct vhost_dev *dev;
+	struct vhost_virtqueue *vq;
+};
+
+struct vhost_worker;
+
+struct vhost_iotlb_map;
+
+struct vhost_log;
+
+struct vhost_virtqueue {
+	struct vhost_dev *dev;
+	struct vhost_worker __attribute__((btf_type_tag("rcu"))) *worker;
+	struct mutex mutex;
+	unsigned int num;
+	vring_desc_t __attribute__((btf_type_tag("user"))) *desc;
+	vring_avail_t __attribute__((btf_type_tag("user"))) *avail;
+	vring_used_t __attribute__((btf_type_tag("user"))) *used;
+	const struct vhost_iotlb_map *meta_iotlb[3];
+	struct file *kick;
+	struct vhost_vring_call call_ctx;
+	struct eventfd_ctx *error_ctx;
+	struct eventfd_ctx *log_ctx;
+	struct vhost_poll poll;
+	vhost_work_fn_t handle_kick;
+	u16 last_avail_idx;
+	u16 avail_idx;
+	u16 last_used_idx;
+	u16 used_flags;
+	u16 signalled_used;
+	bool signalled_used_valid;
+	bool log_used;
+	u64 log_addr;
+	struct iovec iov[1024];
+	struct iovec iotlb_iov[64];
+	struct iovec *indirect;
+	struct vring_used_elem *heads;
+	struct vhost_iotlb *umem;
+	struct vhost_iotlb *iotlb;
+	void *private_data;
+	u64 acked_features;
+	u64 acked_backend_features;
+	void __attribute__((btf_type_tag("user"))) *log_base;
+	struct vhost_log *log;
+	struct iovec log_iov[64];
+	bool is_le;
+	u32 busyloop_timeout;
+};
+
+struct vhost_vsock {
+	struct vhost_dev dev;
+	struct vhost_virtqueue vqs[2];
+	struct hlist_node hash;
+	struct vhost_work send_pkt_work;
+	struct sk_buff_head send_pkt_queue;
+	atomic_t queued_replies;
+	u32 guest_cid;
+	bool seqpacket_allow;
+};
+
+struct vhost_worker {
+	struct vhost_task *vtsk;
+	struct mutex mutex;
+	struct llist_head work_list;
+	u64 kcov_handle;
+	u32 id;
+	int attachment_cnt;
+};
+
+struct vhost_iotlb_map {
+	struct rb_node rb;
+	struct list_head link;
+	u64 start;
+	u64 last;
+	u64 size;
+	u64 addr;
+	u32 perm;
+	u32 flags_padding;
+	u64 __subtree_last;
+	void *opaque;
+};
+
+struct vhost_iotlb {
+	struct rb_root_cached root;
+	struct list_head list;
+	unsigned int limit;
+	unsigned int nmaps;
+	unsigned int flags;
+};
+
+struct vhost_log {
+	u64 addr;
+	u64 len;
+};
+
+struct vhost_iotlb_msg {
+	__u64 iova;
+	__u64 size;
+	__u64 uaddr;
+	__u8 perm;
+	__u8 type;
+};
+
+struct virtio_vsock_hdr {
+	__le64 src_cid;
+	__le64 dst_cid;
+	__le32 src_port;
+	__le32 dst_port;
+	__le32 len;
+	__le16 type;
+	__le16 op;
+	__le32 flags;
+	__le32 buf_alloc;
+	__le32 fwd_cnt;
+} __attribute__((packed));
+
+struct virtio_vsock_skb_cb {
+	bool reply;
+	bool tap_delivered;
+};
+
+enum vhost_uaddr_type {
+	VHOST_ADDR_DESC = 0,
+	VHOST_ADDR_AVAIL = 1,
+	VHOST_ADDR_USED = 2,
+	VHOST_NUM_ADDRS = 3,
+};
+
+struct vhost_msg {
+	int type;
+	union {
+		struct vhost_iotlb_msg iotlb;
+		__u8 padding[64];
+	};
+};
+
+struct vhost_msg_v2 {
+	__u32 type;
+	__u32 asid;
+	union {
+		struct vhost_iotlb_msg iotlb;
+		__u8 padding[64];
+	};
+};
+
+struct vhost_msg_node {
+	union {
+		struct vhost_msg msg;
+		struct vhost_msg_v2 msg_v2;
+	};
+	struct vhost_virtqueue *vq;
+	struct list_head node;
+};
+
+struct vhost_flush_struct {
+	struct vhost_work work;
+	struct completion wait_event;
+};
+
+struct vhost_worker_state {
+	unsigned int worker_id;
+};
+
+struct vhost_vring_addr {
+	unsigned int index;
+	unsigned int flags;
+	__u64 desc_user_addr;
+	__u64 used_user_addr;
+	__u64 avail_user_addr;
+	__u64 log_guest_addr;
+};
+
+struct vhost_vring_state {
+	unsigned int index;
+	unsigned int num;
+};
+
+struct vhost_memory_region {
+	__u64 guest_phys_addr;
+	__u64 memory_size;
+	__u64 userspace_addr;
+	__u64 flags_padding;
+};
+
+struct vhost_memory {
+	__u32 nregions;
+	__u32 padding;
+	struct vhost_memory_region regions[0];
+};
+
+struct vhost_vring_worker {
+	unsigned int index;
+	unsigned int worker_id;
+};
+
+struct vhost_vring_file {
+	unsigned int index;
+	int fd;
+};
+
+struct ashmem_area;
+
+struct ashmem_range {
+	struct list_head lru;
+	struct list_head unpinned;
+	struct ashmem_area *asma;
+	size_t pgstart;
+	size_t pgend;
+	unsigned int purged;
+};
+
+struct ashmem_area {
+	char name[267];
+	struct list_head unpinned_list;
+	struct file *file;
+	size_t size;
+	unsigned long prot_mask;
+};
+
+struct ashmem_pin {
+	__u32 offset;
+	__u32 len;
+};
+
+struct pcc_chan_reg {
+	void *vaddr;
+	struct acpi_generic_address *gas;
+	u64 preserve_mask;
+	u64 set_mask;
+	u64 status_mask;
+};
+
+struct pcc_chan_info {
+	struct pcc_mbox_chan chan;
+	struct pcc_chan_reg db;
+	struct pcc_chan_reg plat_irq_ack;
+	struct pcc_chan_reg cmd_complete;
+	struct pcc_chan_reg cmd_update;
+	struct pcc_chan_reg error;
+	int plat_irq;
+};
+
+enum acpi_pcct_type {
+	ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
+	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
+	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,
+	ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,
+	ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,
+	ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5,
+	ACPI_PCCT_TYPE_RESERVED = 6,
+};
+
+struct acpi_pcct_subspace {
+	struct acpi_subtable_header header;
+	u8 reserved[6];
+	u64 base_address;
+	u64 length;
+	struct acpi_generic_address doorbell_register;
+	u64 preserve_mask;
+	u64 write_mask;
+	u32 latency;
+	u32 max_access_rate;
+	u16 min_turnaround_time;
+} __attribute__((packed));
+
+struct acpi_table_pcct {
+	struct acpi_table_header header;
+	u32 flags;
+	u64 reserved;
+};
+
+struct acpi_pcct_hw_reduced {
+	struct acpi_subtable_header header;
+	u32 platform_interrupt;
+	u8 flags;
+	u8 reserved;
+	u64 base_address;
+	u64 length;
+	struct acpi_generic_address doorbell_register;
+	u64 preserve_mask;
+	u64 write_mask;
+	u32 latency;
+	u32 max_access_rate;
+	u16 min_turnaround_time;
+} __attribute__((packed));
+
+struct acpi_pcct_ext_pcc_master {
+	struct acpi_subtable_header header;
+	u32 platform_interrupt;
+	u8 flags;
+	u8 reserved1;
+	u64 base_address;
+	u32 length;
+	struct acpi_generic_address doorbell_register;
+	u64 preserve_mask;
+	u64 write_mask;
+	u32 latency;
+	u32 max_access_rate;
+	u32 min_turnaround_time;
+	struct acpi_generic_address platform_ack_register;
+	u64 ack_preserve_mask;
+	u64 ack_set_mask;
+	u64 reserved2;
+	struct acpi_generic_address cmd_complete_register;
+	u64 cmd_complete_mask;
+	struct acpi_generic_address cmd_update_register;
+	u64 cmd_update_preserve_mask;
+	u64 cmd_update_set_mask;
+	struct acpi_generic_address error_status_register;
+	u64 error_status_mask;
+} __attribute__((packed));
+
+struct acpi_pcct_hw_reduced_type2 {
+	struct acpi_subtable_header header;
+	u32 platform_interrupt;
+	u8 flags;
+	u8 reserved;
+	u64 base_address;
+	u64 length;
+	struct acpi_generic_address doorbell_register;
+	u64 preserve_mask;
+	u64 write_mask;
+	u32 latency;
+	u32 max_access_rate;
+	u16 min_turnaround_time;
+	struct acpi_generic_address platform_ack_register;
+	u64 ack_preserve_mask;
+	u64 ack_write_mask;
+} __attribute__((packed));
+
+struct rproc;
+
+typedef int (*rproc_handle_resource_t)(struct rproc *, void *, int, int);
+
+enum rproc_dump_mechanism {
+	RPROC_COREDUMP_DISABLED = 0,
+	RPROC_COREDUMP_ENABLED = 1,
+	RPROC_COREDUMP_INLINE = 2,
+};
+
+struct rproc_ops;
+
+struct resource_table;
+
+struct rproc {
+	struct list_head node;
+	struct iommu_domain *domain;
+	const char *name;
+	const char *firmware;
+	void *priv;
+	struct rproc_ops *ops;
+	struct device dev;
+	atomic_t power;
+	unsigned int state;
+	enum rproc_dump_mechanism dump_conf;
+	struct mutex lock;
+	struct dentry *dbg_dir;
+	struct list_head traces;
+	int num_traces;
+	struct list_head carveouts;
+	struct list_head mappings;
+	u64 bootaddr;
+	struct list_head rvdevs;
+	struct list_head subdevs;
+	struct idr notifyids;
+	int index;
+	struct work_struct crash_handler;
+	unsigned int crash_cnt;
+	bool recovery_disabled;
+	int max_notifyid;
+	struct resource_table *table_ptr;
+	struct resource_table *clean_table;
+	struct resource_table *cached_table;
+	size_t table_sz;
+	bool has_iommu;
+	bool auto_boot;
+	bool sysfs_read_only;
+	struct list_head dump_segments;
+	int nb_vdev;
+	u8 elf_class;
+	u16 elf_machine;
+	struct cdev cdev;
+	bool cdev_put_on_release;
+	unsigned long features[1];
+};
+
+struct rproc_ops {
+	int (*prepare)(struct rproc *);
+	int (*unprepare)(struct rproc *);
+	int (*start)(struct rproc *);
+	int (*stop)(struct rproc *);
+	int (*attach)(struct rproc *);
+	int (*detach)(struct rproc *);
+	void (*kick)(struct rproc *, int);
+	void * (*da_to_va)(struct rproc *, u64, size_t, bool *);
+	int (*parse_fw)(struct rproc *, const struct firmware *);
+	int (*handle_rsc)(struct rproc *, u32, void *, int, int);
+	struct resource_table * (*find_loaded_rsc_table)(struct rproc *, const struct firmware *);
+	struct resource_table * (*get_loaded_rsc_table)(struct rproc *, size_t *);
+	int (*load)(struct rproc *, const struct firmware *);
+	int (*sanity_check)(struct rproc *, const struct firmware *);
+	u64 (*get_boot_addr)(struct rproc *, const struct firmware *);
+	unsigned long (*panic)(struct rproc *);
+	void (*coredump)(struct rproc *);
+};
+
+struct resource_table {
+	u32 ver;
+	u32 num;
+	u32 reserved[2];
+	u32 offset[0];
+};
+
+enum rproc_state {
+	RPROC_OFFLINE = 0,
+	RPROC_SUSPENDED = 1,
+	RPROC_RUNNING = 2,
+	RPROC_CRASHED = 3,
+	RPROC_DELETED = 4,
+	RPROC_ATTACHED = 5,
+	RPROC_DETACHED = 6,
+	RPROC_LAST = 7,
+};
+
+enum rproc_features {
+	RPROC_FEAT_ATTACH_ON_RECOVERY = 0,
+	RPROC_MAX_FEATURES = 1,
+};
+
+enum rproc_crash_type {
+	RPROC_MMUFAULT = 0,
+	RPROC_WATCHDOG = 1,
+	RPROC_FATAL_ERROR = 2,
+};
+
+enum fw_resource_type {
+	RSC_CARVEOUT = 0,
+	RSC_DEVMEM = 1,
+	RSC_TRACE = 2,
+	RSC_VDEV = 3,
+	RSC_LAST = 4,
+	RSC_VENDOR_START = 128,
+	RSC_VENDOR_END = 512,
+};
+
+enum rsc_handling_status {
+	RSC_HANDLED = 0,
+	RSC_IGNORED = 1,
+};
+
+struct rproc_mem_entry {
+	void *va;
+	bool is_iomem;
+	dma_addr_t dma;
+	size_t len;
+	u32 da;
+	void *priv;
+	char name[32];
+	struct list_head node;
+	u32 rsc_offset;
+	u32 flags;
+	u32 of_resm_idx;
+	int (*alloc)(struct rproc *, struct rproc_mem_entry *);
+	int (*release)(struct rproc *, struct rproc_mem_entry *);
+};
+
+struct rproc_debug_trace {
+	struct rproc *rproc;
+	struct dentry *tfile;
+	struct list_head node;
+	struct rproc_mem_entry trace_mem;
+};
+
+struct rproc_subdev {
+	struct list_head node;
+	int (*prepare)(struct rproc_subdev *);
+	int (*start)(struct rproc_subdev *);
+	void (*stop)(struct rproc_subdev *, bool);
+	void (*unprepare)(struct rproc_subdev *);
+};
+
+struct rproc_vdev;
+
+struct rproc_vring {
+	void *va;
+	int num;
+	u32 da;
+	u32 align;
+	int notifyid;
+	struct rproc_vdev *rvdev;
+	struct virtqueue *vq;
+};
+
+struct rproc_vdev {
+	struct rproc_subdev subdev;
+	struct platform_device *pdev;
+	unsigned int id;
+	struct list_head node;
+	struct rproc *rproc;
+	struct rproc_vring vring[2];
+	u32 rsc_offset;
+	u32 index;
+};
+
+struct fw_rsc_vdev_vring {
+	u32 da;
+	u32 align;
+	u32 num;
+	u32 notifyid;
+	u32 pa;
+};
+
+struct fw_rsc_vdev {
+	u32 id;
+	u32 notifyid;
+	u32 dfeatures;
+	u32 gfeatures;
+	u32 config_len;
+	u8 status;
+	u8 num_of_vrings;
+	u8 reserved[2];
+	struct fw_rsc_vdev_vring vring[0];
+};
+
+struct fw_rsc_hdr {
+	u32 type;
+	u8 data[0];
+};
+
+struct fw_rsc_carveout {
+	u32 da;
+	u32 pa;
+	u32 len;
+	u32 flags;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct fw_rsc_devmem {
+	u32 da;
+	u32 pa;
+	u32 len;
+	u32 flags;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct fw_rsc_trace {
+	u32 da;
+	u32 len;
+	u32 reserved;
+	u8 name[32];
+};
+
+struct rproc_vdev_data {
+	u32 rsc_offset;
+	unsigned int id;
+	u32 index;
+	struct fw_rsc_vdev *rsc;
+};
+
+struct rproc_dump_segment {
+	struct list_head node;
+	dma_addr_t da;
+	size_t size;
+	void *priv;
+	void (*dump)(struct rproc *, struct rproc_dump_segment *, void *, size_t, size_t);
+	loff_t offset;
+};
+
+struct rproc_coredump_state {
+	struct rproc *rproc;
+	void *header;
+	struct completion dump_done;
+};
+
+struct rpmsg_device_id {
+	char name[32];
+	kernel_ulong_t driver_data;
+};
+
+struct rpmsg_endpoint;
+
+struct rpmsg_device_ops;
+
+struct rpmsg_device {
+	struct device dev;
+	struct rpmsg_device_id id;
+	const char *driver_override;
+	u32 src;
+	u32 dst;
+	struct rpmsg_endpoint *ept;
+	bool announce;
+	bool little_endian;
+	const struct rpmsg_device_ops *ops;
+};
+
+typedef int (*rpmsg_rx_cb_t)(struct rpmsg_device *, void *, int, void *, u32);
+
+typedef int (*rpmsg_flowcontrol_cb_t)(struct rpmsg_device *, void *, bool);
+
+struct rpmsg_endpoint_ops;
+
+struct rpmsg_endpoint {
+	struct rpmsg_device *rpdev;
+	struct kref refcount;
+	rpmsg_rx_cb_t cb;
+	rpmsg_flowcontrol_cb_t flow_cb;
+	struct mutex cb_lock;
+	u32 addr;
+	void *priv;
+	const struct rpmsg_endpoint_ops *ops;
+};
+
+struct rpmsg_endpoint_ops {
+	void (*destroy_ept)(struct rpmsg_endpoint *);
+	int (*send)(struct rpmsg_endpoint *, void *, int);
+	int (*sendto)(struct rpmsg_endpoint *, void *, int, u32);
+	int (*send_offchannel)(struct rpmsg_endpoint *, u32, u32, void *, int);
+	int (*trysend)(struct rpmsg_endpoint *, void *, int);
+	int (*trysendto)(struct rpmsg_endpoint *, void *, int, u32);
+	int (*trysend_offchannel)(struct rpmsg_endpoint *, u32, u32, void *, int);
+	__poll_t (*poll)(struct rpmsg_endpoint *, struct file *, poll_table *);
+	int (*set_flow_control)(struct rpmsg_endpoint *, bool, u32);
+	ssize_t (*get_mtu)(struct rpmsg_endpoint *);
+};
+
+struct rpmsg_channel_info;
+
+struct rpmsg_device_ops {
+	struct rpmsg_device * (*create_channel)(struct rpmsg_device *, struct rpmsg_channel_info *);
+	int (*release_channel)(struct rpmsg_device *, struct rpmsg_channel_info *);
+	struct rpmsg_endpoint * (*create_ept)(struct rpmsg_device *, rpmsg_rx_cb_t, void *, struct rpmsg_channel_info);
+	int (*announce_create)(struct rpmsg_device *);
+	int (*announce_destroy)(struct rpmsg_device *);
+};
+
+struct rpmsg_channel_info {
+	char name[32];
+	u32 src;
+	u32 dst;
+};
+
+struct rpmsg_driver {
+	struct device_driver drv;
+	const struct rpmsg_device_id *id_table;
+	int (*probe)(struct rpmsg_device *);
+	void (*remove)(struct rpmsg_device *);
+	int (*callback)(struct rpmsg_device *, void *, int, void *, u32);
+	int (*flowcontrol)(struct rpmsg_device *, void *, bool);
+};
+
+struct rpmsg_eptdev {
+	struct device dev;
+	struct cdev cdev;
+	struct rpmsg_device *rpdev;
+	struct rpmsg_channel_info chinfo;
+	struct mutex ept_lock;
+	struct rpmsg_endpoint *ept;
+	struct rpmsg_endpoint *default_ept;
+	spinlock_t queue_lock;
+	struct sk_buff_head queue;
+	wait_queue_head_t readq;
+	bool remote_flow_restricted;
+	bool remote_flow_updated;
+};
+
+typedef void (*btf_trace_devfreq_frequency)(void *, struct devfreq *, unsigned long, unsigned long);
+
+typedef void (*btf_trace_devfreq_monitor)(void *, struct devfreq *);
+
+struct trace_event_raw_devfreq_frequency {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	unsigned long freq;
+	unsigned long prev_freq;
+	unsigned long busy_time;
+	unsigned long total_time;
+	char __data[0];
+};
+
+struct trace_event_raw_devfreq_monitor {
+	struct trace_entry ent;
+	unsigned long freq;
+	unsigned long busy_time;
+	unsigned long total_time;
+	unsigned int polling_ms;
+	u32 __data_loc_dev_name;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devfreq_frequency {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_devfreq_monitor {
+	u32 dev_name;
+};
+
+struct devfreq_freqs {
+	unsigned long old;
+	unsigned long new;
+};
+
+struct devfreq_notifier_devres {
+	struct devfreq *devfreq;
+	struct notifier_block *nb;
+	unsigned int list;
+};
+
+struct devfreq_event_desc;
+
+struct devfreq_event_dev {
+	struct list_head node;
+	struct device dev;
+	struct mutex lock;
+	u32 enable_count;
+	const struct devfreq_event_desc *desc;
+};
+
+struct devfreq_event_ops;
+
+struct devfreq_event_desc {
+	const char *name;
+	u32 event_type;
+	void *driver_data;
+	const struct devfreq_event_ops *ops;
+};
+
+struct devfreq_event_data;
+
+struct devfreq_event_ops {
+	int (*enable)(struct devfreq_event_dev *);
+	int (*disable)(struct devfreq_event_dev *);
+	int (*reset)(struct devfreq_event_dev *);
+	int (*set_event)(struct devfreq_event_dev *);
+	int (*get_event)(struct devfreq_event_dev *, struct devfreq_event_data *);
+};
+
+struct devfreq_event_data {
+	unsigned long load_count;
+	unsigned long total_count;
+};
+
+struct __extcon_info {
+	unsigned int type;
+	unsigned int id;
+	const char *name;
+};
+
+struct extcon_cable;
+
+struct extcon_dev {
+	const char *name;
+	const unsigned int *supported_cable;
+	const u32 *mutually_exclusive;
+	struct device dev;
+	unsigned int id;
+	struct raw_notifier_head nh_all;
+	struct raw_notifier_head *nh;
+	struct list_head entry;
+	int max_supported;
+	spinlock_t lock;
+	u32 state;
+	struct device_type extcon_dev_type;
+	struct extcon_cable *cables;
+	struct attribute_group attr_g_muex;
+	struct attribute **attrs_muex;
+	struct device_attribute *d_attrs_muex;
+};
+
+union extcon_property_value {
+	int intval;
+};
+
+struct extcon_cable {
+	struct extcon_dev *edev;
+	int cable_index;
+	struct attribute_group attr_g;
+	struct device_attribute attr_name;
+	struct device_attribute attr_state;
+	struct attribute *attrs[3];
+	union extcon_property_value usb_propval[3];
+	union extcon_property_value chg_propval[1];
+	union extcon_property_value jack_propval[1];
+	union extcon_property_value disp_propval[2];
+	unsigned long usb_bits[1];
+	unsigned long chg_bits[1];
+	unsigned long jack_bits[1];
+	unsigned long disp_bits[1];
+};
+
+struct extcon_dev_notifier_devres {
+	struct extcon_dev *edev;
+	unsigned int id;
+	struct notifier_block *nb;
+};
+
+struct iio_dev;
+
+struct iio_buffer_setup_ops {
+	int (*preenable)(struct iio_dev *);
+	int (*postenable)(struct iio_dev *);
+	int (*predisable)(struct iio_dev *);
+	int (*postdisable)(struct iio_dev *);
+	bool (*validate_scan_mask)(struct iio_dev *, const unsigned long *);
+};
+
+struct iio_buffer;
+
+struct iio_trigger;
+
+struct iio_poll_func;
+
+struct iio_chan_spec;
+
+struct iio_info;
+
+struct iio_dev {
+	int modes;
+	struct device dev;
+	struct iio_buffer *buffer;
+	int scan_bytes;
+	const unsigned long *available_scan_masks;
+	unsigned int masklength;
+	const unsigned long *active_scan_mask;
+	bool scan_timestamp;
+	struct iio_trigger *trig;
+	struct iio_poll_func *pollfunc;
+	struct iio_poll_func *pollfunc_event;
+	const struct iio_chan_spec *channels;
+	int num_channels;
+	const char *name;
+	const char *label;
+	const struct iio_info *info;
+	const struct iio_buffer_setup_ops *setup_ops;
+	void *priv;
+};
+
+enum iio_buffer_direction {
+	IIO_BUFFER_DIRECTION_IN = 0,
+	IIO_BUFFER_DIRECTION_OUT = 1,
+};
+
+struct iio_buffer_access_funcs;
+
+struct iio_dev_attr;
+
+struct iio_buffer {
+	unsigned int length;
+	unsigned long flags;
+	size_t bytes_per_datum;
+	enum iio_buffer_direction direction;
+	const struct iio_buffer_access_funcs *access;
+	long *scan_mask;
+	struct list_head demux_list;
+	wait_queue_head_t pollq;
+	unsigned int watermark;
+	bool scan_timestamp;
+	struct list_head buffer_attr_list;
+	struct attribute_group buffer_group;
+	const struct iio_dev_attr **attrs;
+	void *demux_bounce;
+	struct list_head attached_entry;
+	struct list_head buffer_list;
+	struct kref ref;
+};
+
+struct iio_buffer_access_funcs {
+	int (*store_to)(struct iio_buffer *, const void *);
+	int (*read)(struct iio_buffer *, size_t, char __attribute__((btf_type_tag("user"))) *);
+	size_t (*data_available)(struct iio_buffer *);
+	int (*remove_from)(struct iio_buffer *, void *);
+	int (*write)(struct iio_buffer *, size_t, const char __attribute__((btf_type_tag("user"))) *);
+	size_t (*space_available)(struct iio_buffer *);
+	int (*request_update)(struct iio_buffer *);
+	int (*set_bytes_per_datum)(struct iio_buffer *, size_t);
+	int (*set_length)(struct iio_buffer *, unsigned int);
+	int (*enable)(struct iio_buffer *, struct iio_dev *);
+	int (*disable)(struct iio_buffer *, struct iio_dev *);
+	void (*release)(struct iio_buffer *);
+	unsigned int modes;
+	unsigned int flags;
+};
+
+struct iio_dev_attr {
+	struct device_attribute dev_attr;
+	u64 address;
+	struct list_head l;
+	const struct iio_chan_spec *c;
+	struct iio_buffer *buffer;
+};
+
+enum iio_chan_type {
+	IIO_VOLTAGE = 0,
+	IIO_CURRENT = 1,
+	IIO_POWER = 2,
+	IIO_ACCEL = 3,
+	IIO_ANGL_VEL = 4,
+	IIO_MAGN = 5,
+	IIO_LIGHT = 6,
+	IIO_INTENSITY = 7,
+	IIO_PROXIMITY = 8,
+	IIO_TEMP = 9,
+	IIO_INCLI = 10,
+	IIO_ROT = 11,
+	IIO_ANGL = 12,
+	IIO_TIMESTAMP = 13,
+	IIO_CAPACITANCE = 14,
+	IIO_ALTVOLTAGE = 15,
+	IIO_CCT = 16,
+	IIO_PRESSURE = 17,
+	IIO_HUMIDITYRELATIVE = 18,
+	IIO_ACTIVITY = 19,
+	IIO_STEPS = 20,
+	IIO_ENERGY = 21,
+	IIO_DISTANCE = 22,
+	IIO_VELOCITY = 23,
+	IIO_CONCENTRATION = 24,
+	IIO_RESISTANCE = 25,
+	IIO_PH = 26,
+	IIO_UVINDEX = 27,
+	IIO_ELECTRICALCONDUCTIVITY = 28,
+	IIO_COUNT = 29,
+	IIO_INDEX = 30,
+	IIO_GRAVITY = 31,
+	IIO_POSITIONRELATIVE = 32,
+	IIO_PHASE = 33,
+	IIO_MASSCONCENTRATION = 34,
+};
+
+enum iio_endian {
+	IIO_CPU = 0,
+	IIO_BE = 1,
+	IIO_LE = 2,
+};
+
+struct iio_event_spec;
+
+struct iio_chan_spec_ext_info;
+
+struct iio_chan_spec {
+	enum iio_chan_type type;
+	int channel;
+	int channel2;
+	unsigned long address;
+	int scan_index;
+	struct {
+		char sign;
+		u8 realbits;
+		u8 storagebits;
+		u8 shift;
+		u8 repeat;
+		enum iio_endian endianness;
+	} scan_type;
+	long info_mask_separate;
+	long info_mask_separate_available;
+	long info_mask_shared_by_type;
+	long info_mask_shared_by_type_available;
+	long info_mask_shared_by_dir;
+	long info_mask_shared_by_dir_available;
+	long info_mask_shared_by_all;
+	long info_mask_shared_by_all_available;
+	const struct iio_event_spec *event_spec;
+	unsigned int num_event_specs;
+	const struct iio_chan_spec_ext_info *ext_info;
+	const char *extend_name;
+	const char *datasheet_name;
+	unsigned int modified: 1;
+	unsigned int indexed: 1;
+	unsigned int output: 1;
+	unsigned int differential: 1;
+};
+
+enum iio_event_type {
+	IIO_EV_TYPE_THRESH = 0,
+	IIO_EV_TYPE_MAG = 1,
+	IIO_EV_TYPE_ROC = 2,
+	IIO_EV_TYPE_THRESH_ADAPTIVE = 3,
+	IIO_EV_TYPE_MAG_ADAPTIVE = 4,
+	IIO_EV_TYPE_CHANGE = 5,
+	IIO_EV_TYPE_MAG_REFERENCED = 6,
+	IIO_EV_TYPE_GESTURE = 7,
+};
+
+enum iio_event_direction {
+	IIO_EV_DIR_EITHER = 0,
+	IIO_EV_DIR_RISING = 1,
+	IIO_EV_DIR_FALLING = 2,
+	IIO_EV_DIR_NONE = 3,
+	IIO_EV_DIR_SINGLETAP = 4,
+	IIO_EV_DIR_DOUBLETAP = 5,
+};
+
+struct iio_event_spec {
+	enum iio_event_type type;
+	enum iio_event_direction dir;
+	unsigned long mask_separate;
+	unsigned long mask_shared_by_type;
+	unsigned long mask_shared_by_dir;
+	unsigned long mask_shared_by_all;
+};
+
+enum iio_shared_by {
+	IIO_SEPARATE = 0,
+	IIO_SHARED_BY_TYPE = 1,
+	IIO_SHARED_BY_DIR = 2,
+	IIO_SHARED_BY_ALL = 3,
+};
+
+struct iio_chan_spec_ext_info {
+	const char *name;
+	enum iio_shared_by shared;
+	ssize_t (*read)(struct iio_dev *, uintptr_t, const struct iio_chan_spec *, char *);
+	ssize_t (*write)(struct iio_dev *, uintptr_t, const struct iio_chan_spec *, const char *, size_t);
+	uintptr_t private;
+};
+
+enum iio_event_info {
+	IIO_EV_INFO_ENABLE = 0,
+	IIO_EV_INFO_VALUE = 1,
+	IIO_EV_INFO_HYSTERESIS = 2,
+	IIO_EV_INFO_PERIOD = 3,
+	IIO_EV_INFO_HIGH_PASS_FILTER_3DB = 4,
+	IIO_EV_INFO_LOW_PASS_FILTER_3DB = 5,
+	IIO_EV_INFO_TIMEOUT = 6,
+	IIO_EV_INFO_RESET_TIMEOUT = 7,
+	IIO_EV_INFO_TAP2_MIN_DELAY = 8,
+	IIO_EV_INFO_RUNNING_PERIOD = 9,
+	IIO_EV_INFO_RUNNING_COUNT = 10,
+};
+
+struct iio_info {
+	const struct attribute_group *event_attrs;
+	const struct attribute_group *attrs;
+	int (*read_raw)(struct iio_dev *, const struct iio_chan_spec *, int *, int *, long);
+	int (*read_raw_multi)(struct iio_dev *, const struct iio_chan_spec *, int, int *, int *, long);
+	int (*read_avail)(struct iio_dev *, const struct iio_chan_spec *, const int **, int *, int *, long);
+	int (*write_raw)(struct iio_dev *, const struct iio_chan_spec *, int, int, long);
+	int (*read_label)(struct iio_dev *, const struct iio_chan_spec *, char *);
+	int (*write_raw_get_fmt)(struct iio_dev *, const struct iio_chan_spec *, long);
+	int (*read_event_config)(struct iio_dev *, const struct iio_chan_spec *, enum iio_event_type, enum iio_event_direction);
+	int (*write_event_config)(struct iio_dev *, const struct iio_chan_spec *, enum iio_event_type, enum iio_event_direction, int);
+	int (*read_event_value)(struct iio_dev *, const struct iio_chan_spec *, enum iio_event_type, enum iio_event_direction, enum iio_event_info, int *, int *);
+	int (*write_event_value)(struct iio_dev *, const struct iio_chan_spec *, enum iio_event_type, enum iio_event_direction, enum iio_event_info, int, int);
+	int (*validate_trigger)(struct iio_dev *, struct iio_trigger *);
+	int (*update_scan_mode)(struct iio_dev *, const unsigned long *);
+	int (*debugfs_reg_access)(struct iio_dev *, unsigned int, unsigned int, unsigned int *);
+	int (*fwnode_xlate)(struct iio_dev *, const struct fwnode_reference_args *);
+	int (*hwfifo_set_watermark)(struct iio_dev *, unsigned int);
+	int (*hwfifo_flush_to_buffer)(struct iio_dev *, unsigned int);
+};
+
+struct iio_mount_matrix {
+	const char *rotation[9];
+};
+
+enum iio_available_type {
+	IIO_AVAIL_LIST = 0,
+	IIO_AVAIL_RANGE = 1,
+};
+
+struct iio_event_interface;
+
+struct iio_ioctl_handler;
+
+struct iio_dev_opaque {
+	struct iio_dev indio_dev;
+	int currentmode;
+	int id;
+	struct module *driver_module;
+	struct mutex mlock;
+	struct lock_class_key mlock_key;
+	struct mutex info_exist_lock;
+	bool trig_readonly;
+	struct iio_event_interface *event_interface;
+	struct iio_buffer **attached_buffers;
+	unsigned int attached_buffers_cnt;
+	struct iio_ioctl_handler *buffer_ioctl_handler;
+	struct list_head buffer_list;
+	struct list_head channel_attr_list;
+	struct attribute_group chan_attr_group;
+	struct list_head ioctl_handlers;
+	const struct attribute_group **groups;
+	int groupcounter;
+	struct attribute_group legacy_scan_el_group;
+	struct attribute_group legacy_buffer_group;
+	void *bounce_buffer;
+	size_t bounce_buffer_size;
+	unsigned int scan_index_timestamp;
+	clockid_t clock_id;
+	struct cdev chrdev;
+	unsigned long flags;
+	struct dentry *debugfs_dentry;
+	unsigned int cached_reg_addr;
+	char read_buf[20];
+	unsigned int read_buf_len;
+};
+
+struct iio_ioctl_handler {
+	struct list_head entry;
+	long (*ioctl)(struct iio_dev *, struct file *, unsigned int, unsigned long);
+};
+
+struct iio_const_attr {
+	const char *string;
+	struct device_attribute dev_attr;
+};
+
+struct iio_enum {
+	const char * const *items;
+	unsigned int num_items;
+	int (*set)(struct iio_dev *, const struct iio_chan_spec *, unsigned int);
+	int (*get)(struct iio_dev *, const struct iio_chan_spec *);
+};
+
+typedef const struct iio_mount_matrix *iio_get_mount_matrix_t(const struct iio_dev *, const struct iio_chan_spec *);
+
+struct iio_event_data {
+	__u64 id;
+	__s64 timestamp;
+};
+
+struct iio_event_interface {
+	wait_queue_head_t wait;
+	struct {
+		union {
+			struct __kfifo kfifo;
+			struct iio_event_data *type;
+			const struct iio_event_data *const_type;
+			char (*rectype)[0];
+			struct iio_event_data *ptr;
+			const struct iio_event_data *ptr_const;
+		};
+		struct iio_event_data buf[16];
+	} det_events;
+	struct list_head dev_attr_list;
+	unsigned long flags;
+	struct attribute_group group;
+	struct mutex read_lock;
+	struct iio_ioctl_handler ioctl_handler;
+};
+
+struct iio_dev_buffer_pair {
+	struct iio_dev *indio_dev;
+	struct iio_buffer *buffer;
+};
+
+enum iio_chan_info_enum {
+	IIO_CHAN_INFO_RAW = 0,
+	IIO_CHAN_INFO_PROCESSED = 1,
+	IIO_CHAN_INFO_SCALE = 2,
+	IIO_CHAN_INFO_OFFSET = 3,
+	IIO_CHAN_INFO_CALIBSCALE = 4,
+	IIO_CHAN_INFO_CALIBBIAS = 5,
+	IIO_CHAN_INFO_PEAK = 6,
+	IIO_CHAN_INFO_PEAK_SCALE = 7,
+	IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW = 8,
+	IIO_CHAN_INFO_AVERAGE_RAW = 9,
+	IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY = 10,
+	IIO_CHAN_INFO_HIGH_PASS_FILTER_3DB_FREQUENCY = 11,
+	IIO_CHAN_INFO_SAMP_FREQ = 12,
+	IIO_CHAN_INFO_FREQUENCY = 13,
+	IIO_CHAN_INFO_PHASE = 14,
+	IIO_CHAN_INFO_HARDWAREGAIN = 15,
+	IIO_CHAN_INFO_HYSTERESIS = 16,
+	IIO_CHAN_INFO_HYSTERESIS_RELATIVE = 17,
+	IIO_CHAN_INFO_INT_TIME = 18,
+	IIO_CHAN_INFO_ENABLE = 19,
+	IIO_CHAN_INFO_CALIBHEIGHT = 20,
+	IIO_CHAN_INFO_CALIBWEIGHT = 21,
+	IIO_CHAN_INFO_DEBOUNCE_COUNT = 22,
+	IIO_CHAN_INFO_DEBOUNCE_TIME = 23,
+	IIO_CHAN_INFO_CALIBEMISSIVITY = 24,
+	IIO_CHAN_INFO_OVERSAMPLING_RATIO = 25,
+	IIO_CHAN_INFO_THERMOCOUPLE_TYPE = 26,
+	IIO_CHAN_INFO_CALIBAMBIENT = 27,
+	IIO_CHAN_INFO_ZEROPOINT = 28,
+};
+
+struct iio_map;
+
+struct iio_map_internal {
+	struct iio_dev *indio_dev;
+	struct iio_map *map;
+	struct list_head l;
+};
+
+struct iio_map {
+	const char *adc_channel_label;
+	const char *consumer_dev_name;
+	const char *consumer_channel;
+	void *consumer_data;
+};
+
+struct iio_channel {
+	struct iio_dev *indio_dev;
+	const struct iio_chan_spec *channel;
+	void *data;
+};
+
+struct iio_demux_table {
+	unsigned int from;
+	unsigned int to;
+	unsigned int length;
+	struct list_head l;
+};
+
+struct iio_device_config {
+	unsigned int mode;
+	unsigned int watermark;
+	const unsigned long *scan_mask;
+	unsigned int scan_bytes;
+	bool scan_timestamp;
+};
+
+struct iio_subirq {
+	bool enabled;
+};
+
+struct iio_trigger_ops;
+
+struct iio_trigger {
+	const struct iio_trigger_ops *ops;
+	struct module *owner;
+	int id;
+	const char *name;
+	struct device dev;
+	struct list_head list;
+	struct list_head alloc_list;
+	atomic_t use_count;
+	struct irq_chip subirq_chip;
+	int subirq_base;
+	struct iio_subirq subirqs[2];
+	unsigned long pool[1];
+	struct mutex pool_lock;
+	bool attached_own_device;
+	struct work_struct reenable_work;
+};
+
+struct iio_trigger_ops {
+	int (*set_trigger_state)(struct iio_trigger *, bool);
+	void (*reenable)(struct iio_trigger *);
+	int (*validate_device)(struct iio_trigger *, struct iio_dev *);
+};
+
+struct iio_poll_func {
+	struct iio_dev *indio_dev;
+	irqreturn_t (*h)(int, void *);
+	irqreturn_t (*thread)(int, void *);
+	int type;
+	char *name;
+	int irq;
+	s64 timestamp;
+};
+
+struct dtpm;
+
+struct dtpm_subsys_ops {
+	const char *name;
+	int (*init)();
+	void (*exit)();
+	int (*setup)(struct dtpm *, struct device_node *);
+};
+
+struct powercap_zone_ops;
+
+struct powercap_zone_constraint;
+
+struct powercap_zone {
+	int id;
+	char *name;
+	void *control_type_inst;
+	const struct powercap_zone_ops *ops;
+	struct device dev;
+	int const_id_cnt;
+	struct idr idr;
+	struct idr *parent_idr;
+	void *private_data;
+	struct attribute **zone_dev_attrs;
+	int zone_attr_count;
+	struct attribute_group dev_zone_attr_group;
+	const struct attribute_group *dev_attr_groups[2];
+	bool allocated;
+	struct powercap_zone_constraint *constraints;
+};
+
+struct dtpm_ops;
+
+struct dtpm {
+	struct powercap_zone zone;
+	struct dtpm *parent;
+	struct list_head sibling;
+	struct list_head children;
+	struct dtpm_ops *ops;
+	unsigned long flags;
+	u64 power_limit;
+	u64 power_max;
+	u64 power_min;
+	int weight;
+};
+
+struct powercap_zone_ops {
+	int (*get_max_energy_range_uj)(struct powercap_zone *, u64 *);
+	int (*get_energy_uj)(struct powercap_zone *, u64 *);
+	int (*reset_energy_uj)(struct powercap_zone *);
+	int (*get_max_power_range_uw)(struct powercap_zone *, u64 *);
+	int (*get_power_uw)(struct powercap_zone *, u64 *);
+	int (*set_enable)(struct powercap_zone *, bool);
+	int (*get_enable)(struct powercap_zone *, bool *);
+	int (*release)(struct powercap_zone *);
+};
+
+struct powercap_zone_constraint_ops;
+
+struct powercap_zone_constraint {
+	int id;
+	struct powercap_zone *power_zone;
+	const struct powercap_zone_constraint_ops *ops;
+};
+
+struct powercap_zone_constraint_ops {
+	int (*set_power_limit_uw)(struct powercap_zone *, int, u64);
+	int (*get_power_limit_uw)(struct powercap_zone *, int, u64 *);
+	int (*set_time_window_us)(struct powercap_zone *, int, u64);
+	int (*get_time_window_us)(struct powercap_zone *, int, u64 *);
+	int (*get_max_power_uw)(struct powercap_zone *, int, u64 *);
+	int (*get_min_power_uw)(struct powercap_zone *, int, u64 *);
+	int (*get_max_time_window_us)(struct powercap_zone *, int, u64 *);
+	int (*get_min_time_window_us)(struct powercap_zone *, int, u64 *);
+	const char * (*get_name)(struct powercap_zone *, int);
+};
+
+struct dtpm_ops {
+	u64 (*set_power_uw)(struct dtpm *, u64);
+	u64 (*get_power_uw)(struct dtpm *);
+	int (*update_power_uw)(struct dtpm *);
+	void (*release)(struct dtpm *);
+};
+
+struct powercap_control_type_ops;
+
+struct powercap_control_type {
+	struct device dev;
+	struct idr idr;
+	int nr_zones;
+	const struct powercap_control_type_ops *ops;
+	struct mutex lock;
+	bool allocated;
+	struct list_head node;
+};
+
+struct powercap_control_type_ops {
+	int (*set_enable)(struct powercap_control_type *, bool);
+	int (*get_enable)(struct powercap_control_type *, bool *);
+	int (*release)(struct powercap_control_type *);
+};
+
+struct dtpm_node;
+
+typedef struct dtpm * (*dtpm_node_callback_t)(const struct dtpm_node *, struct dtpm *);
+
+enum DTPM_NODE_TYPE {
+	DTPM_NODE_VIRTUAL = 0,
+	DTPM_NODE_DT = 1,
+};
+
+struct dtpm_node {
+	enum DTPM_NODE_TYPE type;
+	const char *name;
+	struct dtpm_node *parent;
+};
+
+struct powercap_constraint_attr {
+	struct device_attribute power_limit_attr;
+	struct device_attribute time_window_attr;
+	struct device_attribute max_power_attr;
+	struct device_attribute min_power_attr;
+	struct device_attribute max_time_window_attr;
+	struct device_attribute min_time_window_attr;
+	struct device_attribute name_attr;
+};
+
+struct idle_inject_thread {
+	struct task_struct *tsk;
+	int should_run;
+};
+
+struct idle_inject_device {
+	struct hrtimer timer;
+	unsigned int idle_duration_us;
+	unsigned int run_duration_us;
+	unsigned int latency_us;
+	bool (*update)();
+	unsigned long cpumask[0];
+};
+
+typedef void (*btf_trace_mc_event)(void *, const unsigned int, const char *, const char *, const int, const u8, const s8, const s8, const s8, unsigned long, const u8, unsigned long, const char *);
+
+struct cper_sec_proc_arm;
+
+typedef void (*btf_trace_arm_event)(void *, const struct cper_sec_proc_arm *);
+
+struct cper_sec_proc_arm {
+	u32 validation_bits;
+	u16 err_info_num;
+	u16 context_info_num;
+	u32 section_length;
+	u8 affinity_level;
+	u8 reserved[3];
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+};
+
+typedef void (*btf_trace_non_standard_event)(void *, const guid_t *, const guid_t *, const char *, const u8, const u8 *, const u32);
+
+typedef void (*btf_trace_aer_event)(void *, const char *, const u32, const u8, const u8, struct aer_header_log_regs *);
+
+struct trace_event_raw_mc_event {
+	struct trace_entry ent;
+	unsigned int error_type;
+	u32 __data_loc_msg;
+	u32 __data_loc_label;
+	u16 error_count;
+	u8 mc_index;
+	s8 top_layer;
+	s8 middle_layer;
+	s8 lower_layer;
+	long address;
+	u8 grain_bits;
+	long syndrome;
+	u32 __data_loc_driver_detail;
+	char __data[0];
+};
+
+struct trace_event_raw_arm_event {
+	struct trace_entry ent;
+	u64 mpidr;
+	u64 midr;
+	u32 running_state;
+	u32 psci_state;
+	u8 affinity;
+	char __data[0];
+};
+
+struct trace_event_raw_non_standard_event {
+	struct trace_entry ent;
+	char sec_type[16];
+	char fru_id[16];
+	u32 __data_loc_fru_text;
+	u8 sev;
+	u32 len;
+	u32 __data_loc_buf;
+	char __data[0];
+};
+
+struct trace_event_raw_aer_event {
+	struct trace_entry ent;
+	u32 __data_loc_dev_name;
+	u32 status;
+	u8 severity;
+	u8 tlp_header_valid;
+	u32 tlp_header[4];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_non_standard_event {
+	u32 fru_text;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_aer_event {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_mc_event {
+	u32 msg;
+	u32 label;
+	u32 driver_detail;
+};
+
+struct trace_event_data_offsets_arm_event {};
+
+struct binder_features {
+	bool oneway_spam_detection;
+	bool extended_error;
+};
+
+enum binderfs_stats_mode {
+	binderfs_stats_mode_unset = 0,
+	binderfs_stats_mode_global = 1,
+};
+
+enum binderfs_param {
+	Opt_max___2 = 0,
+	Opt_stats_mode = 1,
+};
+
+enum binder_work_type {
+	BINDER_WORK_TRANSACTION = 1,
+	BINDER_WORK_TRANSACTION_COMPLETE = 2,
+	BINDER_WORK_TRANSACTION_PENDING = 3,
+	BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT = 4,
+	BINDER_WORK_RETURN_ERROR = 5,
+	BINDER_WORK_NODE = 6,
+	BINDER_WORK_DEAD_BINDER = 7,
+	BINDER_WORK_DEAD_BINDER_AND_CLEAR = 8,
+	BINDER_WORK_CLEAR_DEATH_NOTIFICATION = 9,
+};
+
+struct binderfs_device {
+	char name[256];
+	__u32 major;
+	__u32 minor;
+};
+
+struct binderfs_mount_opts {
+	int max;
+	int stats_mode;
+};
+
+struct binderfs_info {
+	struct ipc_namespace *ipc_ns;
+	struct dentry *control_dentry;
+	kuid_t root_uid;
+	kgid_t root_gid;
+	struct binderfs_mount_opts mount_opts;
+	int device_count;
+	struct dentry *proc_log_dir;
+};
+
+struct binder_node;
+
+struct binder_context {
+	struct binder_node *binder_context_mgr_node;
+	struct mutex context_mgr_node_lock;
+	kuid_t binder_context_mgr_uid;
+	const char *name;
+};
+
+struct binder_device {
+	struct hlist_node hlist;
+	struct miscdevice miscdev;
+	struct binder_context context;
+	struct inode *binderfs_inode;
+	refcount_t ref;
+};
+
+struct binder_work {
+	struct list_head entry;
+	enum binder_work_type type;
+	u64 android_oem_data1;
+};
+
+typedef __u64 binder_uintptr_t;
+
+struct binder_proc;
+
+struct binder_node {
+	int debug_id;
+	spinlock_t lock;
+	struct binder_work work;
+	union {
+		struct rb_node rb_node;
+		struct hlist_node dead_node;
+	};
+	struct binder_proc *proc;
+	struct hlist_head refs;
+	int internal_strong_refs;
+	int local_weak_refs;
+	int local_strong_refs;
+	int tmp_refs;
+	binder_uintptr_t ptr;
+	binder_uintptr_t cookie;
+	struct {
+		u8 has_strong_ref: 1;
+		u8 pending_strong_ref: 1;
+		u8 has_weak_ref: 1;
+		u8 pending_weak_ref: 1;
+	};
+	struct {
+		u8 sched_policy: 2;
+		u8 inherit_rt: 1;
+		u8 accept_fds: 1;
+		u8 txn_security_ctx: 1;
+		u8 min_priority;
+	};
+	bool has_async_transaction;
+	struct list_head async_todo;
+};
+
+struct binder_stats {
+	atomic_t br[21];
+	atomic_t bc[19];
+	atomic_t obj_created[7];
+	atomic_t obj_deleted[7];
+};
+
+struct binder_priority {
+	unsigned int sched_policy;
+	int prio;
+};
+
+struct binder_lru_page;
+
+struct binder_alloc {
+	spinlock_t lock;
+	struct vm_area_struct *vma;
+	struct mm_struct *mm;
+	unsigned long buffer;
+	struct list_head buffers;
+	struct rb_root free_buffers;
+	struct rb_root allocated_buffers;
+	size_t free_async_space;
+	struct binder_lru_page *pages;
+	size_t buffer_size;
+	int pid;
+	size_t pages_high;
+	bool oneway_spam_detected;
+	u64 android_oem_data1;
+};
+
+struct binder_proc {
+	struct hlist_node proc_node;
+	struct rb_root threads;
+	struct rb_root nodes;
+	struct rb_root refs_by_desc;
+	struct rb_root refs_by_node;
+	struct list_head waiting_threads;
+	int pid;
+	struct task_struct *tsk;
+	const struct cred *cred;
+	struct hlist_node deferred_work_node;
+	int deferred_work;
+	int outstanding_txns;
+	bool is_dead;
+	bool is_frozen;
+	bool sync_recv;
+	bool async_recv;
+	wait_queue_head_t freeze_wait;
+	struct list_head todo;
+	struct binder_stats stats;
+	struct list_head delivered_death;
+	u32 max_threads;
+	int requested_threads;
+	int requested_threads_started;
+	int tmp_ref;
+	struct binder_priority default_priority;
+	struct dentry *debugfs_entry;
+	struct binder_alloc alloc;
+	struct binder_context *context;
+	spinlock_t inner_lock;
+	spinlock_t outer_lock;
+	struct dentry *binderfs_entry;
+	bool oneway_spam_detection_enabled;
+	u64 android_oem_data1;
+};
+
+struct binder_lru_page {
+	struct list_head lru;
+	struct page *page_ptr;
+	struct binder_alloc *alloc;
+};
+
+struct binder_debugfs_entry {
+	const char *name;
+	umode_t mode;
+	const struct file_operations *fops;
+	void *data;
+};
+
+typedef void (*btf_trace_binder_ioctl)(void *, unsigned int, unsigned long);
+
+typedef void (*btf_trace_binder_lock)(void *, const char *);
+
+typedef void (*btf_trace_binder_locked)(void *, const char *);
+
+typedef void (*btf_trace_binder_unlock)(void *, const char *);
+
+typedef void (*btf_trace_binder_ioctl_done)(void *, int);
+
+typedef void (*btf_trace_binder_write_done)(void *, int);
+
+typedef void (*btf_trace_binder_read_done)(void *, int);
+
+typedef void (*btf_trace_binder_set_priority)(void *, int, int, unsigned int, unsigned int, unsigned int);
+
+typedef void (*btf_trace_binder_wait_for_work)(void *, bool, bool, bool);
+
+struct binder_transaction;
+
+typedef void (*btf_trace_binder_txn_latency_free)(void *, struct binder_transaction *, int, int, int, int);
+
+struct binder_thread;
+
+struct binder_buffer;
+
+struct binder_transaction {
+	int debug_id;
+	struct binder_work work;
+	struct binder_thread *from;
+	pid_t from_pid;
+	pid_t from_tid;
+	struct binder_transaction *from_parent;
+	struct binder_proc *to_proc;
+	struct binder_thread *to_thread;
+	struct binder_transaction *to_parent;
+	unsigned int need_reply: 1;
+	struct binder_buffer *buffer;
+	unsigned int code;
+	unsigned int flags;
+	struct binder_priority priority;
+	struct binder_priority saved_priority;
+	bool set_priority_called;
+	bool is_nested;
+	kuid_t sender_euid;
+	ktime_t start_time;
+	struct list_head fd_fixups;
+	binder_uintptr_t security_ctx;
+	spinlock_t lock;
+	u64 android_vendor_data1;
+	u64 android_oem_data1;
+};
+
+struct binder_error {
+	struct binder_work work;
+	uint32_t cmd;
+};
+
+struct binder_extended_error {
+	__u32 id;
+	__u32 command;
+	__s32 param;
+};
+
+enum binder_prio_state {
+	BINDER_PRIO_SET = 0,
+	BINDER_PRIO_PENDING = 1,
+	BINDER_PRIO_ABORT = 2,
+};
+
+struct binder_thread {
+	struct binder_proc *proc;
+	struct rb_node rb_node;
+	struct list_head waiting_thread_node;
+	int pid;
+	int looper;
+	bool looper_need_return;
+	struct binder_transaction *transaction_stack;
+	struct list_head todo;
+	bool process_todo;
+	struct binder_error return_error;
+	struct binder_error reply_error;
+	struct binder_extended_error ee;
+	wait_queue_head_t wait;
+	struct binder_stats stats;
+	atomic_t tmp_ref;
+	bool is_dead;
+	struct task_struct *task;
+	spinlock_t prio_lock;
+	struct binder_priority prio_next;
+	enum binder_prio_state prio_state;
+};
+
+struct binder_buffer {
+	struct list_head entry;
+	struct rb_node rb_node;
+	unsigned int free: 1;
+	unsigned int clear_on_free: 1;
+	unsigned int allow_user_free: 1;
+	unsigned int async_transaction: 1;
+	unsigned int oneway_spam_suspect: 1;
+	unsigned int debug_id: 27;
+	struct binder_transaction *transaction;
+	struct binder_node *target_node;
+	size_t data_size;
+	size_t offsets_size;
+	size_t extra_buffers_size;
+	unsigned long user_data;
+	int pid;
+};
+
+typedef void (*btf_trace_binder_transaction)(void *, bool, struct binder_transaction *, struct binder_node *);
+
+typedef void (*btf_trace_binder_transaction_received)(void *, struct binder_transaction *);
+
+struct binder_ref_data;
+
+typedef void (*btf_trace_binder_transaction_node_to_ref)(void *, struct binder_transaction *, struct binder_node *, struct binder_ref_data *);
+
+struct binder_ref_data {
+	int debug_id;
+	uint32_t desc;
+	int strong;
+	int weak;
+};
+
+typedef void (*btf_trace_binder_transaction_ref_to_node)(void *, struct binder_transaction *, struct binder_node *, struct binder_ref_data *);
+
+typedef void (*btf_trace_binder_transaction_ref_to_ref)(void *, struct binder_transaction *, struct binder_node *, struct binder_ref_data *, struct binder_ref_data *);
+
+typedef void (*btf_trace_binder_transaction_fd_send)(void *, struct binder_transaction *, int, size_t);
+
+typedef void (*btf_trace_binder_transaction_fd_recv)(void *, struct binder_transaction *, int, size_t);
+
+typedef void (*btf_trace_binder_transaction_alloc_buf)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_transaction_buffer_release)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_transaction_failed_buffer_release)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_transaction_update_buffer_release)(void *, struct binder_buffer *);
+
+typedef void (*btf_trace_binder_update_page_range)(void *, struct binder_alloc *, bool, unsigned long, unsigned long);
+
+typedef void (*btf_trace_binder_alloc_lru_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_alloc_lru_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_free_lru_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_free_lru_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_alloc_page_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_alloc_page_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_user_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_user_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_kernel_start)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_unmap_kernel_end)(void *, const struct binder_alloc *, size_t);
+
+typedef void (*btf_trace_binder_command)(void *, uint32_t);
+
+typedef void (*btf_trace_binder_return)(void *, uint32_t);
+
+struct binder_transaction_log_entry {
+	int debug_id;
+	int debug_id_done;
+	int call_type;
+	int from_proc;
+	int from_thread;
+	int target_handle;
+	int to_proc;
+	int to_thread;
+	int to_node;
+	int data_size;
+	int offsets_size;
+	int return_error_line;
+	uint32_t return_error;
+	uint32_t return_error_param;
+	char context_name[256];
+};
+
+struct binder_transaction_log {
+	atomic_t cur;
+	bool full;
+	struct binder_transaction_log_entry entry[32];
+};
+
+enum {
+	BINDER_LOOPER_STATE_REGISTERED = 1,
+	BINDER_LOOPER_STATE_ENTERED = 2,
+	BINDER_LOOPER_STATE_EXITED = 4,
+	BINDER_LOOPER_STATE_INVALID = 8,
+	BINDER_LOOPER_STATE_WAITING = 16,
+	BINDER_LOOPER_STATE_POLL = 32,
+};
+
+enum binder_stat_types {
+	BINDER_STAT_PROC = 0,
+	BINDER_STAT_THREAD = 1,
+	BINDER_STAT_NODE = 2,
+	BINDER_STAT_REF = 3,
+	BINDER_STAT_DEATH = 4,
+	BINDER_STAT_TRANSACTION = 5,
+	BINDER_STAT_TRANSACTION_COMPLETE = 6,
+	BINDER_STAT_COUNT = 7,
+};
+
+enum binder_driver_return_protocol {
+	BR_ERROR = 2147774976,
+	BR_OK = 29185,
+	BR_TRANSACTION_SEC_CTX = 2152231426,
+	BR_TRANSACTION = 2151707138,
+	BR_REPLY = 2151707139,
+	BR_ACQUIRE_RESULT = 2147774980,
+	BR_DEAD_REPLY = 29189,
+	BR_TRANSACTION_COMPLETE = 29190,
+	BR_INCREFS = 2148561415,
+	BR_ACQUIRE = 2148561416,
+	BR_RELEASE = 2148561417,
+	BR_DECREFS = 2148561418,
+	BR_ATTEMPT_ACQUIRE = 2149085707,
+	BR_NOOP = 29196,
+	BR_SPAWN_LOOPER = 29197,
+	BR_FINISHED = 29198,
+	BR_DEAD_BINDER = 2148037135,
+	BR_CLEAR_DEATH_NOTIFICATION_DONE = 2148037136,
+	BR_FAILED_REPLY = 29201,
+	BR_FROZEN_REPLY = 29202,
+	BR_ONEWAY_SPAM_SUSPECT = 29203,
+	BR_TRANSACTION_PENDING_FROZEN = 29204,
+};
+
+enum {
+	BINDER_DEBUG_USER_ERROR = 1,
+	BINDER_DEBUG_FAILED_TRANSACTION = 2,
+	BINDER_DEBUG_DEAD_TRANSACTION = 4,
+	BINDER_DEBUG_OPEN_CLOSE = 8,
+	BINDER_DEBUG_DEAD_BINDER = 16,
+	BINDER_DEBUG_DEATH_NOTIFICATION = 32,
+	BINDER_DEBUG_READ_WRITE = 64,
+	BINDER_DEBUG_USER_REFS = 128,
+	BINDER_DEBUG_THREADS = 256,
+	BINDER_DEBUG_TRANSACTION = 512,
+	BINDER_DEBUG_TRANSACTION_COMPLETE = 1024,
+	BINDER_DEBUG_FREE_BUFFER = 2048,
+	BINDER_DEBUG_INTERNAL_REFS = 4096,
+	BINDER_DEBUG_PRIORITY_CAP = 8192,
+	BINDER_DEBUG_SPINLOCKS = 16384,
+};
+
+enum {
+	BINDER_WRITE_READ = 3224396289,
+	BINDER_SET_IDLE_TIMEOUT = 1074291203,
+	BINDER_SET_MAX_THREADS = 1074029061,
+	BINDER_SET_IDLE_PRIORITY = 1074029062,
+	BINDER_SET_CONTEXT_MGR = 1074029063,
+	BINDER_THREAD_EXIT = 1074029064,
+	BINDER_VERSION = 3221512713,
+	BINDER_GET_NODE_DEBUG_INFO = 3222823435,
+	BINDER_GET_NODE_INFO_FOR_REF = 3222823436,
+	BINDER_SET_CONTEXT_MGR_EXT = 1075339789,
+	BINDER_FREEZE = 1074553358,
+	BINDER_GET_FROZEN_INFO = 3222037007,
+	BINDER_ENABLE_ONEWAY_SPAM_DETECTION = 1074029072,
+	BINDER_GET_EXTENDED_ERROR = 3222037009,
+};
+
+enum binder_driver_command_protocol {
+	BC_TRANSACTION = 1077961472,
+	BC_REPLY = 1077961473,
+	BC_ACQUIRE_RESULT = 1074029314,
+	BC_FREE_BUFFER = 1074291459,
+	BC_INCREFS = 1074029316,
+	BC_ACQUIRE = 1074029317,
+	BC_RELEASE = 1074029318,
+	BC_DECREFS = 1074029319,
+	BC_INCREFS_DONE = 1074815752,
+	BC_ACQUIRE_DONE = 1074815753,
+	BC_ATTEMPT_ACQUIRE = 1074291466,
+	BC_REGISTER_LOOPER = 25355,
+	BC_ENTER_LOOPER = 25356,
+	BC_EXIT_LOOPER = 25357,
+	BC_REQUEST_DEATH_NOTIFICATION = 1074553614,
+	BC_CLEAR_DEATH_NOTIFICATION = 1074553615,
+	BC_DEAD_BINDER_DONE = 1074291472,
+	BC_TRANSACTION_SG = 1078485777,
+	BC_REPLY_SG = 1078485778,
+};
+
+enum {
+	BINDER_TYPE_BINDER = 1935813253,
+	BINDER_TYPE_WEAK_BINDER = 2002922117,
+	BINDER_TYPE_HANDLE = 1936206469,
+	BINDER_TYPE_WEAK_HANDLE = 2003315333,
+	BINDER_TYPE_FD = 1717840517,
+	BINDER_TYPE_FDA = 1717854597,
+	BINDER_TYPE_PTR = 1886661253,
+};
+
+enum transaction_flags {
+	TF_ONE_WAY = 1,
+	TF_ROOT_OBJECT = 4,
+	TF_STATUS_CODE = 8,
+	TF_ACCEPT_FDS = 16,
+	TF_CLEAR_BUF = 32,
+	TF_UPDATE_TXN = 64,
+};
+
+enum flat_binder_object_flags {
+	FLAT_BINDER_FLAG_PRIORITY_MASK = 255,
+	FLAT_BINDER_FLAG_ACCEPTS_FDS = 256,
+	FLAT_BINDER_FLAG_SCHED_POLICY_MASK = 1536,
+	FLAT_BINDER_FLAG_INHERIT_RT = 2048,
+	FLAT_BINDER_FLAG_TXN_SECURITY_CTX = 4096,
+};
+
+enum flat_binder_object_shifts {
+	FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT = 9,
+};
+
+enum {
+	BINDER_BUFFER_FLAG_HAS_PARENT = 1,
+};
+
+enum binder_deferred_state {
+	BINDER_DEFERRED_FLUSH = 1,
+	BINDER_DEFERRED_RELEASE = 2,
+};
+
+struct binder_ref_death {
+	struct binder_work work;
+	binder_uintptr_t cookie;
+};
+
+struct binder_ref {
+	struct binder_ref_data data;
+	struct rb_node rb_node_desc;
+	struct rb_node rb_node_node;
+	struct hlist_node node_entry;
+	struct binder_proc *proc;
+	struct binder_node *node;
+	struct binder_ref_death *death;
+};
+
+struct dbitmap {
+	unsigned int nbits;
+	unsigned long *map;
+};
+
+struct binder_proc_wrap {
+	struct binder_proc proc;
+	struct dbitmap dmap;
+};
+
+struct binder_object_header {
+	__u32 type;
+};
+
+struct flat_binder_object {
+	struct binder_object_header hdr;
+	__u32 flags;
+	union {
+		binder_uintptr_t binder;
+		__u32 handle;
+	};
+	binder_uintptr_t cookie;
+};
+
+typedef __u64 binder_size_t;
+
+struct binder_fd_array_object {
+	struct binder_object_header hdr;
+	__u32 pad;
+	binder_size_t num_fds;
+	binder_size_t parent;
+	binder_size_t parent_offset;
+};
+
+struct binder_task_work_cb {
+	struct callback_head twork;
+	struct file *file;
+};
+
+struct binder_fd_object {
+	struct binder_object_header hdr;
+	__u32 pad_flags;
+	union {
+		binder_uintptr_t pad_binder;
+		__u32 fd;
+	};
+	binder_uintptr_t cookie;
+};
+
+struct binder_buffer_object {
+	struct binder_object_header hdr;
+	__u32 flags;
+	binder_uintptr_t buffer;
+	binder_size_t length;
+	binder_size_t parent;
+	binder_size_t parent_offset;
+};
+
+struct binder_ptr_fixup {
+	binder_size_t offset;
+	size_t skip_size;
+	binder_uintptr_t fixup_data;
+	struct list_head node;
+};
+
+struct binder_sg_copy {
+	binder_size_t offset;
+	const void __attribute__((btf_type_tag("user"))) *sender_uaddr;
+	size_t length;
+	struct list_head node;
+};
+
+struct binder_txn_fd_fixup {
+	struct list_head fixup_entry;
+	struct file *file;
+	size_t offset;
+	int target_fd;
+};
+
+struct trace_event_raw_binder_ioctl {
+	struct trace_entry ent;
+	unsigned int cmd;
+	unsigned long arg;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_lock_class {
+	struct trace_entry ent;
+	const char *tag;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_function_return_class {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_set_priority {
+	struct trace_entry ent;
+	int proc;
+	int thread;
+	unsigned int old_prio;
+	unsigned int new_prio;
+	unsigned int desired_prio;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_wait_for_work {
+	struct trace_entry ent;
+	bool proc_work;
+	bool transaction_stack;
+	bool thread_todo;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_txn_latency_free {
+	struct trace_entry ent;
+	int debug_id;
+	int from_proc;
+	int from_thread;
+	int to_proc;
+	int to_thread;
+	unsigned int code;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction {
+	struct trace_entry ent;
+	int debug_id;
+	int target_node;
+	int to_proc;
+	int to_thread;
+	int reply;
+	unsigned int code;
+	unsigned int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_received {
+	struct trace_entry ent;
+	int debug_id;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_node_to_ref {
+	struct trace_entry ent;
+	int debug_id;
+	int node_debug_id;
+	binder_uintptr_t node_ptr;
+	int ref_debug_id;
+	uint32_t ref_desc;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_ref_to_node {
+	struct trace_entry ent;
+	int debug_id;
+	int ref_debug_id;
+	uint32_t ref_desc;
+	int node_debug_id;
+	binder_uintptr_t node_ptr;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_ref_to_ref {
+	struct trace_entry ent;
+	int debug_id;
+	int node_debug_id;
+	int src_ref_debug_id;
+	uint32_t src_ref_desc;
+	int dest_ref_debug_id;
+	uint32_t dest_ref_desc;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_fd_send {
+	struct trace_entry ent;
+	int debug_id;
+	int fd;
+	size_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_transaction_fd_recv {
+	struct trace_entry ent;
+	int debug_id;
+	int fd;
+	size_t offset;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_buffer_class {
+	struct trace_entry ent;
+	int debug_id;
+	size_t data_size;
+	size_t offsets_size;
+	size_t extra_buffers_size;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_update_page_range {
+	struct trace_entry ent;
+	int proc;
+	bool allocate;
+	size_t offset;
+	size_t size;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_lru_page_class {
+	struct trace_entry ent;
+	int proc;
+	size_t page_index;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_command {
+	struct trace_entry ent;
+	uint32_t cmd;
+	char __data[0];
+};
+
+struct trace_event_raw_binder_return {
+	struct trace_entry ent;
+	uint32_t cmd;
+	char __data[0];
+};
+
+struct binder_freeze_info {
+	__u32 pid;
+	__u32 enable;
+	__u32 timeout_ms;
+};
+
+struct binder_transaction_data {
+	union {
+		__u32 handle;
+		binder_uintptr_t ptr;
+	} target;
+	binder_uintptr_t cookie;
+	__u32 code;
+	__u32 flags;
+	__kernel_pid_t sender_pid;
+	__kernel_uid32_t sender_euid;
+	binder_size_t data_size;
+	binder_size_t offsets_size;
+	union {
+		struct {
+			binder_uintptr_t buffer;
+			binder_uintptr_t offsets;
+		} ptr;
+		__u8 buf[8];
+	} data;
+};
+
+struct binder_transaction_data_sg {
+	struct binder_transaction_data transaction_data;
+	binder_size_t buffers_size;
+};
+
+struct binder_transaction_data_secctx {
+	struct binder_transaction_data transaction_data;
+	binder_uintptr_t secctx;
+};
+
+struct binder_object {
+	union {
+		struct binder_object_header hdr;
+		struct flat_binder_object fbo;
+		struct binder_fd_object fdo;
+		struct binder_buffer_object bbo;
+		struct binder_fd_array_object fdao;
+	};
+};
+
+struct binder_node_info_for_ref {
+	__u32 handle;
+	__u32 strong_count;
+	__u32 weak_count;
+	__u32 reserved1;
+	__u32 reserved2;
+	__u32 reserved3;
+};
+
+struct binder_node_debug_info {
+	binder_uintptr_t ptr;
+	binder_uintptr_t cookie;
+	__u32 has_strong_ref;
+	__u32 has_weak_ref;
+};
+
+struct binder_frozen_status_info {
+	__u32 pid;
+	__u32 sync_recv;
+	__u32 async_recv;
+};
+
+struct binder_version {
+	__s32 protocol_version;
+};
+
+struct trace_event_data_offsets_binder_ioctl {};
+
+struct trace_event_data_offsets_binder_lock_class {};
+
+struct trace_event_data_offsets_binder_function_return_class {};
+
+struct trace_event_data_offsets_binder_set_priority {};
+
+struct trace_event_data_offsets_binder_wait_for_work {};
+
+struct trace_event_data_offsets_binder_txn_latency_free {};
+
+struct trace_event_data_offsets_binder_transaction {};
+
+struct trace_event_data_offsets_binder_transaction_received {};
+
+struct trace_event_data_offsets_binder_transaction_node_to_ref {};
+
+struct trace_event_data_offsets_binder_transaction_ref_to_node {};
+
+struct trace_event_data_offsets_binder_transaction_ref_to_ref {};
+
+struct trace_event_data_offsets_binder_transaction_fd_send {};
+
+struct trace_event_data_offsets_binder_transaction_fd_recv {};
+
+struct trace_event_data_offsets_binder_buffer_class {};
+
+struct trace_event_data_offsets_binder_update_page_range {};
+
+struct trace_event_data_offsets_binder_lru_page_class {};
+
+struct trace_event_data_offsets_binder_command {};
+
+struct trace_event_data_offsets_binder_return {};
+
+struct binder_write_read {
+	binder_size_t write_size;
+	binder_size_t write_consumed;
+	binder_uintptr_t write_buffer;
+	binder_size_t read_size;
+	binder_size_t read_consumed;
+	binder_uintptr_t read_buffer;
+};
+
+enum {
+	BINDER_DEBUG_USER_ERROR___2 = 1,
+	BINDER_DEBUG_OPEN_CLOSE___2 = 2,
+	BINDER_DEBUG_BUFFER_ALLOC = 4,
+	BINDER_DEBUG_BUFFER_ALLOC_ASYNC = 8,
+};
+
+struct ads_entry {
+	char *name;
+	void *addr;
+};
+
+enum android_debug_symbol {
+	ADS_PER_CPU_START = 0,
+	ADS_PER_CPU_END = 1,
+	ADS_TEXT = 2,
+	ADS_SEND = 3,
+	ADS_MEM_BLOCK = 4,
+	ADS_INIT_MM = 5,
+	ADS_ITERATE_SUPERS = 6,
+	ADS_DROP_SLAB = 7,
+	ADS_FREE_PAGES = 8,
+	ADS_COMPACT_PAGES = 9,
+	ADS_SHOW_MEM = 10,
+	ADS_TOTAL_CMA = 11,
+	ADS_SLAB_CACHES = 12,
+	ADS_SLAB_MUTEX = 13,
+	ADS_END = 14,
+};
+
+enum android_debug_per_cpu_symbol {
+	ADS_IRQ_STACK_PTR = 0,
+	ADS_DEBUG_PER_CPU_END = 1,
+};
+
+struct packet_type {
+	__be16 type;
+	bool ignore_outgoing;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	void (*list_func)(struct list_head *, struct packet_type *, struct net_device *);
+	bool (*id_match)(struct packet_type *, struct sock *);
+	struct net *af_packet_net;
+	void *af_packet_priv;
+	struct list_head list;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct gzvm_vcpu;
+
+struct kernel_info {
+	__u8 enabled_all;
+	__u8 enabled_base_relative;
+	__u8 enabled_absolute_percpu;
+	__u8 enabled_cfi_clang;
+	__u32 num_syms;
+	__u16 name_len;
+	__u16 bit_per_long;
+	__u16 module_name_len;
+	__u16 symbol_len;
+	__u64 _addresses_pa;
+	__u64 _relative_pa;
+	__u64 _stext_pa;
+	__u64 _etext_pa;
+	__u64 _sinittext_pa;
+	__u64 _einittext_pa;
+	__u64 _end_pa;
+	__u64 _offsets_pa;
+	__u64 _names_pa;
+	__u64 _token_table_pa;
+	__u64 _token_index_pa;
+	__u64 _markers_pa;
+	__u32 thread_size;
+	__u64 swapper_pg_dir_pa;
+	__u8 last_uts_release[64];
+	__u8 build_info[256];
+	__u32 enabled_modules_tree_lookup;
+	__u32 mod_mem_offset;
+	__u32 mod_kallsyms_offset;
+} __attribute__((packed));
+
+struct kernel_all_info {
+	__u32 magic_number;
+	__u32 combined_checksum;
+	struct kernel_info info;
+};
+
+struct reserved_mem_ops;
+
+struct reserved_mem {
+	const char *name;
+	unsigned long fdt_node;
+	unsigned long phandle;
+	const struct reserved_mem_ops *ops;
+	phys_addr_t base;
+	phys_addr_t size;
+	void *priv;
+};
+
+struct reserved_mem_ops {
+	int (*device_init)(struct reserved_mem *, struct device *);
+	void (*device_release)(struct reserved_mem *, struct device *);
+};
+
+enum {
+	NVMEM_ADD = 1,
+	NVMEM_REMOVE = 2,
+	NVMEM_CELL_ADD = 3,
+	NVMEM_CELL_REMOVE = 4,
+	NVMEM_LAYOUT_ADD = 5,
+	NVMEM_LAYOUT_REMOVE = 6,
+};
+
+struct nvmem_device {
+	struct module *owner;
+	struct device dev;
+	int stride;
+	int word_size;
+	int id;
+	struct kref refcnt;
+	size_t size;
+	bool read_only;
+	bool root_only;
+	int flags;
+	enum nvmem_type type;
+	struct bin_attribute eeprom;
+	struct device *base_dev;
+	struct list_head cells;
+	const struct nvmem_keepout *keepout;
+	unsigned int nkeepout;
+	nvmem_reg_read_t reg_read;
+	nvmem_reg_write_t reg_write;
+	struct gpio_desc *wp_gpio;
+	struct nvmem_layout *layout;
+	void *priv;
+};
+
+struct nvmem_cell_table {
+	const char *nvmem_name;
+	const struct nvmem_cell_info *cells;
+	size_t ncells;
+	struct list_head node;
+};
+
+struct nvmem_cell_entry {
+	const char *name;
+	int offset;
+	size_t raw_len;
+	int bytes;
+	int bit_offset;
+	int nbits;
+	nvmem_cell_post_process_t read_post_process;
+	void *priv;
+	struct device_node *np;
+	struct nvmem_device *nvmem;
+	struct list_head node;
+};
+
+struct nvmem_cell_lookup {
+	const char *nvmem_name;
+	const char *cell_name;
+	const char *dev_id;
+	const char *con_id;
+	struct list_head node;
+};
+
+struct nvmem_cell {
+	struct nvmem_cell_entry *entry;
+	const char *id;
+	int index;
+};
+
+enum gnss_type {
+	GNSS_TYPE_NMEA = 0,
+	GNSS_TYPE_SIRF = 1,
+	GNSS_TYPE_UBX = 2,
+	GNSS_TYPE_MTK = 3,
+	GNSS_TYPE_COUNT = 4,
+};
+
+struct gnss_operations;
+
+struct gnss_device {
+	struct device dev;
+	struct cdev cdev;
+	int id;
+	enum gnss_type type;
+	unsigned long flags;
+	struct rw_semaphore rwsem;
+	const struct gnss_operations *ops;
+	unsigned int count;
+	unsigned int disconnected: 1;
+	struct mutex read_mutex;
+	struct kfifo read_fifo;
+	wait_queue_head_t read_queue;
+	struct mutex write_mutex;
+	char *write_buf;
+};
+
+struct gnss_operations {
+	int (*open)(struct gnss_device *);
+	void (*close)(struct gnss_device *);
+	int (*write_raw)(struct gnss_device *, const unsigned char *, size_t);
+};
+
+struct icc_node;
+
+typedef void (*btf_trace_icc_set_bw)(void *, struct icc_path *, struct icc_node *, int, u32, u32);
+
+struct icc_req {
+	struct hlist_node req_node;
+	struct icc_node *node;
+	struct device *dev;
+	bool enabled;
+	u32 tag;
+	u32 avg_bw;
+	u32 peak_bw;
+};
+
+struct icc_path {
+	const char *name;
+	size_t num_nodes;
+	struct icc_req reqs[0];
+};
+
+struct icc_provider;
+
+struct icc_node {
+	int id;
+	const char *name;
+	struct icc_node **links;
+	size_t num_links;
+	struct icc_provider *provider;
+	struct list_head node_list;
+	struct list_head search_list;
+	struct icc_node *reverse;
+	u8 is_traversed: 1;
+	struct hlist_head req_list;
+	u32 avg_bw;
+	u32 peak_bw;
+	u32 init_avg;
+	u32 init_peak;
+	void *data;
+};
+
+struct icc_node_data;
+
+struct icc_provider {
+	struct list_head provider_list;
+	struct list_head nodes;
+	int (*set)(struct icc_node *, struct icc_node *);
+	int (*aggregate)(struct icc_node *, u32, u32, u32, u32 *, u32 *);
+	void (*pre_aggregate)(struct icc_node *);
+	int (*get_bw)(struct icc_node *, u32 *, u32 *);
+	struct icc_node * (*xlate)(struct of_phandle_args *, void *);
+	struct icc_node_data * (*xlate_extended)(struct of_phandle_args *, void *);
+	struct device *dev;
+	int users;
+	bool inter_set;
+	void *data;
+};
+
+struct icc_node_data {
+	struct icc_node *node;
+	u32 tag;
+};
+
+typedef void (*btf_trace_icc_set_bw_end)(void *, struct icc_path *, int);
+
+struct trace_event_raw_icc_set_bw {
+	struct trace_entry ent;
+	u32 __data_loc_path_name;
+	u32 __data_loc_dev;
+	u32 __data_loc_node_name;
+	u32 avg_bw;
+	u32 peak_bw;
+	u32 node_avg_bw;
+	u32 node_peak_bw;
+	char __data[0];
+};
+
+struct trace_event_raw_icc_set_bw_end {
+	struct trace_entry ent;
+	u32 __data_loc_path_name;
+	u32 __data_loc_dev;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_icc_set_bw {
+	u32 path_name;
+	u32 dev;
+	u32 node_name;
+};
+
+struct trace_event_data_offsets_icc_set_bw_end {
+	u32 path_name;
+	u32 dev;
+};
+
+struct icc_onecell_data {
+	unsigned int num_nodes;
+	struct icc_node *nodes[0];
+};
+
+struct icc_bulk_data {
+	struct icc_path *path;
+	const char *name;
+	u32 avg_bw;
+	u32 peak_bw;
+};
+
+struct icc_bulk_devres {
+	struct icc_bulk_data *paths;
+	int num_paths;
+};
+
+struct debugfs_path {
+	const char *src;
+	const char *dst;
+	struct icc_path *path;
+	struct list_head list;
+};
+
+struct snd_minor {
+	int type;
+	int card;
+	int device;
+	const struct file_operations *f_ops;
+	void *private_data;
+	struct device *dev;
+	struct snd_card *card_ptr;
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	SNDRV_DEVICE_TYPE_CONTROL = 0,
+	SNDRV_DEVICE_TYPE_SEQUENCER = 1,
+	SNDRV_DEVICE_TYPE_TIMER = 2,
+	SNDRV_DEVICE_TYPE_HWDEP = 3,
+	SNDRV_DEVICE_TYPE_RAWMIDI = 4,
+	SNDRV_DEVICE_TYPE_PCM_PLAYBACK = 5,
+	SNDRV_DEVICE_TYPE_PCM_CAPTURE = 6,
+	SNDRV_DEVICE_TYPE_COMPRESS = 7,
+};
+
+struct snd_monitor_file {
+	struct file *file;
+	const struct file_operations *disconnected_f_op;
+	struct list_head shutdown_list;
+	struct list_head list;
+};
+
+struct snd_ctl_layer_ops {
+	struct snd_ctl_layer_ops *next;
+	const char *module_name;
+	void (*lregister)(struct snd_card *);
+	void (*ldisconnect)(struct snd_card *);
+	void (*lnotify)(struct snd_card *, unsigned int, struct snd_kcontrol *, unsigned int);
+};
+
+enum snd_ctl_add_mode {
+	CTL_ADD_EXCLUSIVE = 0,
+	CTL_REPLACE = 1,
+	CTL_ADD_ON_REPLACE = 2,
+};
+
+enum sndrv_ctl_event_type {
+	SNDRV_CTL_EVENT_ELEM = 0,
+	SNDRV_CTL_EVENT_LAST = 0,
+};
+
+enum {
+	SNDRV_CTL_TLV_OP_READ = 0,
+	SNDRV_CTL_TLV_OP_WRITE = 1,
+	SNDRV_CTL_TLV_OP_CMD = -1,
+};
+
+enum {
+	SNDRV_CTL_IOCTL_ELEM_LIST32 = 3225965840,
+	SNDRV_CTL_IOCTL_ELEM_INFO32 = 3239073041,
+	SNDRV_CTL_IOCTL_ELEM_READ32 = 3267646738,
+	SNDRV_CTL_IOCTL_ELEM_WRITE32 = 3267646739,
+	SNDRV_CTL_IOCTL_ELEM_ADD32 = 3239073047,
+	SNDRV_CTL_IOCTL_ELEM_REPLACE32 = 3239073048,
+};
+
+enum {
+	SND_CTL_SUBDEV_PCM = 0,
+	SND_CTL_SUBDEV_RAWMIDI = 1,
+	SND_CTL_SUBDEV_ITEMS = 2,
+};
+
+struct snd_kctl_event {
+	struct list_head list;
+	struct snd_ctl_elem_id id;
+	unsigned int mask;
+};
+
+typedef int (*snd_kctl_ioctl_func_t)(struct snd_card *, struct snd_ctl_file *, unsigned int, unsigned long);
+
+struct snd_kctl_ioctl {
+	struct list_head list;
+	snd_kctl_ioctl_func_t fioctl;
+};
+
+struct snd_ctl_elem_list {
+	unsigned int offset;
+	unsigned int space;
+	unsigned int used;
+	unsigned int count;
+	struct snd_ctl_elem_id __attribute__((btf_type_tag("user"))) *pids;
+	unsigned char reserved[50];
+};
+
+struct snd_ctl_card_info {
+	int card;
+	int pad;
+	unsigned char id[16];
+	unsigned char driver[16];
+	unsigned char name[32];
+	unsigned char longname[80];
+	unsigned char reserved_[16];
+	unsigned char mixername[80];
+	unsigned char components[128];
+};
+
+struct snd_ctl_elem_info32 {
+	struct snd_ctl_elem_id id;
+	s32 type;
+	u32 access;
+	u32 count;
+	s32 owner;
+	union {
+		struct {
+			s32 min;
+			s32 max;
+			s32 step;
+		} integer;
+		struct {
+			u64 min;
+			u64 max;
+			u64 step;
+		} integer64;
+		struct {
+			u32 items;
+			u32 item;
+			char name[64];
+			u64 names_ptr;
+			u32 names_length;
+		} enumerated;
+		unsigned char reserved[128];
+	} value;
+	unsigned char reserved[64];
+};
+
+struct snd_ctl_elem_value32 {
+	struct snd_ctl_elem_id id;
+	unsigned int indirect;
+	union {
+		s32 integer[128];
+		unsigned char data[512];
+	} value;
+	unsigned char reserved[128];
+};
+
+struct snd_ctl_elem_list32 {
+	u32 offset;
+	u32 space;
+	u32 used;
+	u32 count;
+	u32 pids;
+	unsigned char reserved[50];
+};
+
+struct user_element {
+	struct snd_ctl_elem_info info;
+	struct snd_card *card;
+	char *elem_data;
+	unsigned long elem_data_size;
+	void *tlv_data;
+	unsigned long tlv_data_size;
+	void *priv_data;
+};
+
+struct snd_ctl_event {
+	int type;
+	union {
+		struct {
+			unsigned int mask;
+			struct snd_ctl_elem_id id;
+		} elem;
+		unsigned char data8[60];
+	} data;
+};
+
+struct snd_ctl_tlv {
+	unsigned int numid;
+	unsigned int length;
+	unsigned int tlv[0];
+};
+
+struct snd_fasync {
+	struct fasync_struct *fasync;
+	int signal;
+	int poll;
+	int on;
+	struct list_head list;
+};
+
+struct snd_pci_quirk {
+	unsigned short subvendor;
+	unsigned short subdevice;
+	unsigned short subdevice_mask;
+	int value;
+};
+
+struct snd_info_private_data {
+	struct snd_info_buffer *rbuffer;
+	struct snd_info_buffer *wbuffer;
+	struct snd_info_entry *entry;
+	void *file_private_data;
+};
+
+struct snd_dma_data {
+	int dma;
+};
+
+struct link_ctl_info {
+	snd_ctl_elem_type_t type;
+	int count;
+	int min_val;
+	int max_val;
+};
+
+struct link_master;
+
+struct link_follower {
+	struct list_head list;
+	struct link_master *master;
+	struct link_ctl_info info;
+	int vals[2];
+	unsigned int flags;
+	struct snd_kcontrol *kctl;
+	struct snd_kcontrol follower;
+};
+
+struct link_master {
+	struct list_head followers;
+	struct link_ctl_info info;
+	int val;
+	unsigned int tlv[4];
+	void (*hook)(void *, int);
+	void *hook_private_data;
+};
+
+enum snd_jack_types {
+	SND_JACK_HEADPHONE = 1,
+	SND_JACK_MICROPHONE = 2,
+	SND_JACK_HEADSET = 3,
+	SND_JACK_LINEOUT = 4,
+	SND_JACK_MECHANICAL = 8,
+	SND_JACK_VIDEOOUT = 16,
+	SND_JACK_AVOUT = 20,
+	SND_JACK_LINEIN = 32,
+	SND_JACK_BTN_0 = 16384,
+	SND_JACK_BTN_1 = 8192,
+	SND_JACK_BTN_2 = 4096,
+	SND_JACK_BTN_3 = 2048,
+	SND_JACK_BTN_4 = 1024,
+	SND_JACK_BTN_5 = 512,
+};
+
+struct snd_jack;
+
+struct snd_jack_kctl {
+	struct snd_kcontrol *kctl;
+	struct list_head list;
+	unsigned int mask_bits;
+	struct snd_jack *jack;
+	bool sw_inject_enable;
+};
+
+struct snd_jack {
+	struct list_head kctl_list;
+	struct snd_card *card;
+	const char *id;
+	struct input_dev *input_dev;
+	struct mutex input_dev_lock;
+	int registered;
+	int type;
+	char name[100];
+	unsigned int key[6];
+	int hw_status_cache;
+	void *private_data;
+	void (*private_free)(struct snd_jack *);
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	SNDRV_HWDEP_IOCTL_DSP_LOAD32 = 1079003139,
+};
+
+struct snd_hwdep;
+
+struct snd_hwdep_dsp_status;
+
+struct snd_hwdep_dsp_image;
+
+struct snd_hwdep_ops {
+	long long (*llseek)(struct snd_hwdep *, struct file *, long long, int);
+	long (*read)(struct snd_hwdep *, char __attribute__((btf_type_tag("user"))) *, long, loff_t *);
+	long (*write)(struct snd_hwdep *, const char __attribute__((btf_type_tag("user"))) *, long, loff_t *);
+	int (*open)(struct snd_hwdep *, struct file *);
+	int (*release)(struct snd_hwdep *, struct file *);
+	__poll_t (*poll)(struct snd_hwdep *, struct file *, poll_table *);
+	int (*ioctl)(struct snd_hwdep *, struct file *, unsigned int, unsigned long);
+	int (*ioctl_compat)(struct snd_hwdep *, struct file *, unsigned int, unsigned long);
+	int (*mmap)(struct snd_hwdep *, struct file *, struct vm_area_struct *);
+	int (*dsp_status)(struct snd_hwdep *, struct snd_hwdep_dsp_status *);
+	int (*dsp_load)(struct snd_hwdep *, struct snd_hwdep_dsp_image *);
+	u64 android_kabi_reserved1;
+};
+
+struct snd_hwdep {
+	struct snd_card *card;
+	struct list_head list;
+	int device;
+	char id[32];
+	char name[80];
+	int iface;
+	struct snd_hwdep_ops ops;
+	wait_queue_head_t open_wait;
+	void *private_data;
+	void (*private_free)(struct snd_hwdep *);
+	struct device *dev;
+	struct mutex open_mutex;
+	int used;
+	unsigned int dsp_loaded;
+	unsigned int exclusive: 1;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_hwdep_dsp_status {
+	unsigned int version;
+	unsigned char id[32];
+	unsigned int num_dsps;
+	unsigned int dsp_loaded;
+	unsigned int chip_ready;
+	unsigned char reserved[16];
+};
+
+struct snd_hwdep_dsp_image {
+	unsigned int index;
+	unsigned char name[64];
+	unsigned char __attribute__((btf_type_tag("user"))) *image;
+	size_t length;
+	unsigned long driver_data;
+};
+
+struct snd_hwdep_info {
+	unsigned int device;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	int iface;
+	unsigned char reserved[64];
+};
+
+struct snd_hwdep_dsp_image32 {
+	u32 index;
+	unsigned char name[64];
+	u32 image;
+	u32 length;
+	u32 driver_data;
+};
+
+struct snd_timer_hardware {
+	unsigned int flags;
+	unsigned long resolution;
+	unsigned long resolution_min;
+	unsigned long resolution_max;
+	unsigned long ticks;
+	int (*open)(struct snd_timer *);
+	int (*close)(struct snd_timer *);
+	unsigned long (*c_resolution)(struct snd_timer *);
+	int (*start)(struct snd_timer *);
+	int (*stop)(struct snd_timer *);
+	int (*set_period)(struct snd_timer *, unsigned long, unsigned long);
+	int (*precise_resolution)(struct snd_timer *, unsigned long *, unsigned long *);
+	u64 android_kabi_reserved1;
+};
+
+struct snd_timer {
+	int tmr_class;
+	struct snd_card *card;
+	struct module *module;
+	int tmr_device;
+	int tmr_subdevice;
+	char id[64];
+	char name[80];
+	unsigned int flags;
+	int running;
+	unsigned long sticks;
+	void *private_data;
+	void (*private_free)(struct snd_timer *);
+	struct snd_timer_hardware hw;
+	spinlock_t lock;
+	struct list_head device_list;
+	struct list_head open_list_head;
+	struct list_head active_list_head;
+	struct list_head ack_list_head;
+	struct list_head sack_list_head;
+	struct work_struct task_work;
+	int max_instances;
+	int num_instances;
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	SNDRV_TIMER_CLASS_NONE = -1,
+	SNDRV_TIMER_CLASS_SLAVE = 0,
+	SNDRV_TIMER_CLASS_GLOBAL = 1,
+	SNDRV_TIMER_CLASS_CARD = 2,
+	SNDRV_TIMER_CLASS_PCM = 3,
+	SNDRV_TIMER_CLASS_LAST = 3,
+};
+
+enum {
+	SNDRV_TIMER_SCLASS_NONE = 0,
+	SNDRV_TIMER_SCLASS_APPLICATION = 1,
+	SNDRV_TIMER_SCLASS_SEQUENCER = 2,
+	SNDRV_TIMER_SCLASS_OSS_SEQUENCER = 3,
+	SNDRV_TIMER_SCLASS_LAST = 3,
+};
+
+enum {
+	SNDRV_TIMER_EVENT_RESOLUTION = 0,
+	SNDRV_TIMER_EVENT_TICK = 1,
+	SNDRV_TIMER_EVENT_START = 2,
+	SNDRV_TIMER_EVENT_STOP = 3,
+	SNDRV_TIMER_EVENT_CONTINUE = 4,
+	SNDRV_TIMER_EVENT_PAUSE = 5,
+	SNDRV_TIMER_EVENT_EARLY = 6,
+	SNDRV_TIMER_EVENT_SUSPEND = 7,
+	SNDRV_TIMER_EVENT_RESUME = 8,
+	SNDRV_TIMER_EVENT_MSTART = 12,
+	SNDRV_TIMER_EVENT_MSTOP = 13,
+	SNDRV_TIMER_EVENT_MCONTINUE = 14,
+	SNDRV_TIMER_EVENT_MPAUSE = 15,
+	SNDRV_TIMER_EVENT_MSUSPEND = 17,
+	SNDRV_TIMER_EVENT_MRESUME = 18,
+};
+
+enum timer_tread_format {
+	TREAD_FORMAT_NONE = 0,
+	TREAD_FORMAT_TIME64 = 1,
+	TREAD_FORMAT_TIME32 = 2,
+};
+
+enum {
+	SNDRV_TIMER_IOCTL_GPARAMS32 = 1077695492,
+	SNDRV_TIMER_IOCTL_INFO32 = 2162185233,
+	SNDRV_TIMER_IOCTL_STATUS_COMPAT32 = 1079530516,
+	SNDRV_TIMER_IOCTL_STATUS_COMPAT64 = 1080054804,
+};
+
+struct snd_timer_instance {
+	struct snd_timer *timer;
+	char *owner;
+	unsigned int flags;
+	void *private_data;
+	void (*private_free)(struct snd_timer_instance *);
+	void (*callback)(struct snd_timer_instance *, unsigned long, unsigned long);
+	void (*ccallback)(struct snd_timer_instance *, int, struct timespec64 *, unsigned long);
+	void (*disconnect)(struct snd_timer_instance *);
+	void *callback_data;
+	unsigned long ticks;
+	unsigned long cticks;
+	unsigned long pticks;
+	unsigned long resolution;
+	unsigned long lost;
+	int slave_class;
+	unsigned int slave_id;
+	struct list_head open_list;
+	struct list_head active_list;
+	struct list_head ack_list;
+	struct list_head slave_list_head;
+	struct list_head slave_active_head;
+	struct snd_timer_instance *master;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_timer_system_private {
+	struct timer_list tlist;
+	struct snd_timer *snd_timer;
+	unsigned long last_expires;
+	unsigned long last_jiffies;
+	unsigned long correction;
+};
+
+struct snd_timer_id {
+	int dev_class;
+	int dev_sclass;
+	int card;
+	int device;
+	int subdevice;
+};
+
+struct snd_timer_gparams32 {
+	struct snd_timer_id tid;
+	u32 period_num;
+	u32 period_den;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_gparams {
+	struct snd_timer_id tid;
+	unsigned long period_num;
+	unsigned long period_den;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_info32 {
+	u32 flags;
+	s32 card;
+	unsigned char id[64];
+	unsigned char name[80];
+	u32 reserved0;
+	u32 resolution;
+	unsigned char reserved[64];
+};
+
+struct snd_timer_read;
+
+struct snd_timer_tread64;
+
+struct snd_timer_user {
+	struct snd_timer_instance *timeri;
+	int tread;
+	unsigned long ticks;
+	unsigned long overrun;
+	int qhead;
+	int qtail;
+	int qused;
+	int queue_size;
+	bool disconnected;
+	struct snd_timer_read *queue;
+	struct snd_timer_tread64 *tqueue;
+	spinlock_t qlock;
+	unsigned long last_resolution;
+	unsigned int filter;
+	struct timespec64 tstamp;
+	wait_queue_head_t qchange_sleep;
+	struct snd_fasync *fasync;
+	struct mutex ioctl_lock;
+};
+
+struct snd_timer_read {
+	unsigned int resolution;
+	unsigned int ticks;
+};
+
+struct snd_timer_tread64 {
+	int event;
+	u8 pad1[4];
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	unsigned int val;
+	u8 pad2[4];
+};
+
+struct snd_timer_params {
+	unsigned int flags;
+	unsigned int ticks;
+	unsigned int queue_size;
+	unsigned int reserved0;
+	unsigned int filter;
+	unsigned char reserved[60];
+};
+
+struct snd_timer_ginfo {
+	struct snd_timer_id tid;
+	unsigned int flags;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	unsigned long reserved0;
+	unsigned long resolution;
+	unsigned long resolution_min;
+	unsigned long resolution_max;
+	unsigned int clients;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_info {
+	unsigned int flags;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	unsigned long reserved0;
+	unsigned long resolution;
+	unsigned char reserved[64];
+};
+
+struct snd_timer_select {
+	struct snd_timer_id id;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_gstatus {
+	struct snd_timer_id tid;
+	unsigned long resolution;
+	unsigned long resolution_num;
+	unsigned long resolution_den;
+	unsigned char reserved[32];
+};
+
+struct snd_timer_tread32 {
+	int event;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	unsigned int val;
+};
+
+struct snd_timer_status32 {
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	unsigned int resolution;
+	unsigned int lost;
+	unsigned int overrun;
+	unsigned int queue;
+	unsigned char reserved[64];
+};
+
+struct snd_timer_status64 {
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	unsigned int resolution;
+	unsigned int lost;
+	unsigned int overrun;
+	unsigned int queue;
+	unsigned char reserved[64];
+};
+
+struct snd_hrtimer {
+	struct snd_timer *timer;
+	struct hrtimer hrt;
+	bool in_callback;
+};
+
+enum {
+	SNDRV_PCM_CLASS_GENERIC = 0,
+	SNDRV_PCM_CLASS_MULTI = 1,
+	SNDRV_PCM_CLASS_MODEM = 2,
+	SNDRV_PCM_CLASS_DIGITIZER = 3,
+	SNDRV_PCM_CLASS_LAST = 3,
+};
+
+struct snd_pcm_info {
+	unsigned int device;
+	unsigned int subdevice;
+	int stream;
+	int card;
+	unsigned char id[64];
+	unsigned char name[80];
+	unsigned char subname[32];
+	int dev_class;
+	int dev_subclass;
+	unsigned int subdevices_count;
+	unsigned int subdevices_avail;
+	union snd_pcm_sync_id sync;
+	unsigned char reserved[64];
+};
+
+struct snd_pcm_hw_constraint_list {
+	const unsigned int *list;
+	unsigned int count;
+	unsigned int mask;
+};
+
+struct action_ops {
+	int (*pre_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+	int (*do_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+	void (*undo_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+	void (*post_action)(struct snd_pcm_substream *, snd_pcm_state_t);
+};
+
+enum {
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5,
+	SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = 5,
+};
+
+enum {
+	SNDRV_PCM_TSTAMP_NONE = 0,
+	SNDRV_PCM_TSTAMP_ENABLE = 1,
+	SNDRV_PCM_TSTAMP_LAST = 1,
+};
+
+enum {
+	SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0,
+	SNDRV_PCM_TSTAMP_TYPE_MONOTONIC = 1,
+	SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW = 2,
+	SNDRV_PCM_TSTAMP_TYPE_LAST = 2,
+};
+
+enum snd_dma_sync_mode {
+	SNDRV_DMA_SYNC_CPU = 0,
+	SNDRV_DMA_SYNC_DEVICE = 1,
+};
+
+enum {
+	SNDRV_PCM_IOCTL_HW_REFINE32 = 3260825872,
+	SNDRV_PCM_IOCTL_HW_PARAMS32 = 3260825873,
+	SNDRV_PCM_IOCTL_SW_PARAMS32 = 3228057875,
+	SNDRV_PCM_IOCTL_STATUS_COMPAT32 = 2154578208,
+	SNDRV_PCM_IOCTL_STATUS_EXT_COMPAT32 = 3228320036,
+	SNDRV_PCM_IOCTL_DELAY32 = 2147762465,
+	SNDRV_PCM_IOCTL_CHANNEL_INFO32 = 2148548914,
+	SNDRV_PCM_IOCTL_REWIND32 = 1074020678,
+	SNDRV_PCM_IOCTL_FORWARD32 = 1074020681,
+	SNDRV_PCM_IOCTL_WRITEI_FRAMES32 = 1074544976,
+	SNDRV_PCM_IOCTL_READI_FRAMES32 = 2148286801,
+	SNDRV_PCM_IOCTL_WRITEN_FRAMES32 = 1074544978,
+	SNDRV_PCM_IOCTL_READN_FRAMES32 = 2148286803,
+	SNDRV_PCM_IOCTL_STATUS_COMPAT64 = 2155888928,
+	SNDRV_PCM_IOCTL_STATUS_EXT_COMPAT64 = 3229630756,
+};
+
+enum {
+	SNDRV_PCM_MMAP_OFFSET_DATA = 0,
+	SNDRV_PCM_MMAP_OFFSET_STATUS_OLD = 2147483648,
+	SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD = 2164260864,
+	SNDRV_PCM_MMAP_OFFSET_STATUS_NEW = 2181038080,
+	SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW = 2197815296,
+	SNDRV_PCM_MMAP_OFFSET_STATUS = 2181038080,
+	SNDRV_PCM_MMAP_OFFSET_CONTROL = 2197815296,
+};
+
+typedef char __pad_before_u32[0];
+
+struct __snd_pcm_mmap_control64_buggy {
+	__pad_before_u32 __pad1;
+	__u32 appl_ptr;
+	__pad_before_u32 __pad2;
+	__pad_before_u32 __pad3;
+	__u32 avail_min;
+	__pad_after_uframe __pad4;
+};
+
+typedef u64 u_int64_t;
+
+struct snd_pcm_file {
+	struct snd_pcm_substream *substream;
+	int no_compat_mmap;
+	unsigned int user_pversion;
+};
+
+struct snd_pcm_status64 {
+	snd_pcm_state_t state;
+	u8 rsvd[4];
+	s64 trigger_tstamp_sec;
+	s64 trigger_tstamp_nsec;
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	snd_pcm_uframes_t appl_ptr;
+	snd_pcm_uframes_t hw_ptr;
+	snd_pcm_sframes_t delay;
+	snd_pcm_uframes_t avail;
+	snd_pcm_uframes_t avail_max;
+	snd_pcm_uframes_t overrange;
+	snd_pcm_state_t suspended_state;
+	__u32 audio_tstamp_data;
+	s64 audio_tstamp_sec;
+	s64 audio_tstamp_nsec;
+	s64 driver_tstamp_sec;
+	s64 driver_tstamp_nsec;
+	__u32 audio_tstamp_accuracy;
+	unsigned char reserved[20];
+};
+
+struct snd_pcm_sw_params {
+	int tstamp_mode;
+	unsigned int period_step;
+	unsigned int sleep_min;
+	snd_pcm_uframes_t avail_min;
+	snd_pcm_uframes_t xfer_align;
+	snd_pcm_uframes_t start_threshold;
+	snd_pcm_uframes_t stop_threshold;
+	snd_pcm_uframes_t silence_threshold;
+	snd_pcm_uframes_t silence_size;
+	snd_pcm_uframes_t boundary;
+	unsigned int proto;
+	unsigned int tstamp_type;
+	unsigned char reserved[56];
+};
+
+struct snd_pcm_status32 {
+	snd_pcm_state_t state;
+	s32 trigger_tstamp_sec;
+	s32 trigger_tstamp_nsec;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	u32 appl_ptr;
+	u32 hw_ptr;
+	s32 delay;
+	u32 avail;
+	u32 avail_max;
+	u32 overrange;
+	snd_pcm_state_t suspended_state;
+	u32 audio_tstamp_data;
+	s32 audio_tstamp_sec;
+	s32 audio_tstamp_nsec;
+	s32 driver_tstamp_sec;
+	s32 driver_tstamp_nsec;
+	u32 audio_tstamp_accuracy;
+	unsigned char reserved[36];
+};
+
+struct snd_pcm_channel_info {
+	unsigned int channel;
+	__kernel_off_t offset;
+	unsigned int first;
+	unsigned int step;
+};
+
+struct snd_pcm_mmap_status32 {
+	snd_pcm_state_t state;
+	s32 pad1;
+	u32 hw_ptr;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	snd_pcm_state_t suspended_state;
+	s32 audio_tstamp_sec;
+	s32 audio_tstamp_nsec;
+};
+
+struct snd_pcm_mmap_control32 {
+	u32 appl_ptr;
+	u32 avail_min;
+};
+
+struct snd_pcm_sync_ptr32 {
+	u32 flags;
+	union {
+		struct snd_pcm_mmap_status32 status;
+		unsigned char reserved[64];
+	} s;
+	union {
+		struct snd_pcm_mmap_control32 control;
+		unsigned char reserved[64];
+	} c;
+};
+
+struct snd_pcm_sync_ptr {
+	__u32 flags;
+	__u32 pad1;
+	union {
+		struct snd_pcm_mmap_status status;
+		unsigned char reserved[64];
+	} s;
+	union {
+		struct snd_pcm_mmap_control control;
+		unsigned char reserved[64];
+	} c;
+};
+
+struct snd_xferi {
+	snd_pcm_sframes_t result;
+	void __attribute__((btf_type_tag("user"))) *buf;
+	snd_pcm_uframes_t frames;
+};
+
+struct snd_xfern {
+	snd_pcm_sframes_t result;
+	void __attribute__((btf_type_tag("user"))) * __attribute__((btf_type_tag("user"))) *bufs;
+	snd_pcm_uframes_t frames;
+};
+
+struct snd_pcm_hw_params32 {
+	u32 flags;
+	struct snd_mask masks[3];
+	struct snd_mask mres[5];
+	struct snd_interval intervals[12];
+	struct snd_interval ires[9];
+	u32 rmask;
+	u32 cmask;
+	u32 info;
+	u32 msbits;
+	u32 rate_num;
+	u32 rate_den;
+	u32 fifo_size;
+	unsigned char reserved[64];
+};
+
+struct snd_pcm_sw_params32 {
+	s32 tstamp_mode;
+	u32 period_step;
+	u32 sleep_min;
+	u32 avail_min;
+	u32 xfer_align;
+	u32 start_threshold;
+	u32 stop_threshold;
+	u32 silence_threshold;
+	u32 silence_size;
+	u32 boundary;
+	u32 proto;
+	u32 tstamp_type;
+	unsigned char reserved[56];
+};
+
+struct snd_pcm_channel_info32 {
+	u32 channel;
+	u32 offset;
+	u32 first;
+	u32 step;
+};
+
+struct snd_xferi32 {
+	s32 result;
+	u32 buf;
+	u32 frames;
+};
+
+struct snd_xfern32 {
+	s32 result;
+	u32 bufs;
+	u32 frames;
+};
+
+struct compat_snd_pcm_status64 {
+	snd_pcm_state_t state;
+	u8 rsvd[4];
+	s64 trigger_tstamp_sec;
+	s64 trigger_tstamp_nsec;
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	u32 appl_ptr;
+	u32 hw_ptr;
+	s32 delay;
+	u32 avail;
+	u32 avail_max;
+	u32 overrange;
+	snd_pcm_state_t suspended_state;
+	u32 audio_tstamp_data;
+	s64 audio_tstamp_sec;
+	s64 audio_tstamp_nsec;
+	s64 driver_tstamp_sec;
+	s64 driver_tstamp_nsec;
+	u32 audio_tstamp_accuracy;
+	unsigned char reserved[20];
+};
+
+struct snd_pcm_chmap_elem {
+	unsigned char channels;
+	unsigned char map[15];
+};
+
+enum {
+	SNDRV_CHMAP_UNKNOWN = 0,
+	SNDRV_CHMAP_NA = 1,
+	SNDRV_CHMAP_MONO = 2,
+	SNDRV_CHMAP_FL = 3,
+	SNDRV_CHMAP_FR = 4,
+	SNDRV_CHMAP_RL = 5,
+	SNDRV_CHMAP_RR = 6,
+	SNDRV_CHMAP_FC = 7,
+	SNDRV_CHMAP_LFE = 8,
+	SNDRV_CHMAP_SL = 9,
+	SNDRV_CHMAP_SR = 10,
+	SNDRV_CHMAP_RC = 11,
+	SNDRV_CHMAP_FLC = 12,
+	SNDRV_CHMAP_FRC = 13,
+	SNDRV_CHMAP_RLC = 14,
+	SNDRV_CHMAP_RRC = 15,
+	SNDRV_CHMAP_FLW = 16,
+	SNDRV_CHMAP_FRW = 17,
+	SNDRV_CHMAP_FLH = 18,
+	SNDRV_CHMAP_FCH = 19,
+	SNDRV_CHMAP_FRH = 20,
+	SNDRV_CHMAP_TC = 21,
+	SNDRV_CHMAP_TFL = 22,
+	SNDRV_CHMAP_TFR = 23,
+	SNDRV_CHMAP_TFC = 24,
+	SNDRV_CHMAP_TRL = 25,
+	SNDRV_CHMAP_TRR = 26,
+	SNDRV_CHMAP_TRC = 27,
+	SNDRV_CHMAP_TFLC = 28,
+	SNDRV_CHMAP_TFRC = 29,
+	SNDRV_CHMAP_TSL = 30,
+	SNDRV_CHMAP_TSR = 31,
+	SNDRV_CHMAP_LLFE = 32,
+	SNDRV_CHMAP_RLFE = 33,
+	SNDRV_CHMAP_BC = 34,
+	SNDRV_CHMAP_BLC = 35,
+	SNDRV_CHMAP_BRC = 36,
+	SNDRV_CHMAP_LAST = 36,
+};
+
+typedef int (*pcm_transfer_f)(struct snd_pcm_substream *, int, unsigned long, struct iov_iter *, unsigned long);
+
+struct snd_ratden {
+	unsigned int num_min;
+	unsigned int num_max;
+	unsigned int num_step;
+	unsigned int den;
+};
+
+struct snd_pcm_chmap {
+	struct snd_pcm *pcm;
+	int stream;
+	struct snd_kcontrol *kctl;
+	const struct snd_pcm_chmap_elem *chmap;
+	unsigned int max_channels;
+	unsigned int channel_mask;
+	void *private_data;
+};
+
+struct snd_ratnum {
+	unsigned int num;
+	unsigned int den_min;
+	unsigned int den_max;
+	unsigned int den_step;
+};
+
+struct snd_pcm_hw_constraint_ranges {
+	unsigned int count;
+	const struct snd_interval *ranges;
+	unsigned int mask;
+};
+
+struct snd_pcm_hw_constraint_ratnums {
+	int nrats;
+	const struct snd_ratnum *rats;
+};
+
+struct snd_pcm_hw_constraint_ratdens {
+	int nrats;
+	const struct snd_ratden *rats;
+};
+
+typedef int (*pcm_copy_f)(struct snd_pcm_substream *, snd_pcm_uframes_t, void *, snd_pcm_uframes_t, snd_pcm_uframes_t, pcm_transfer_f, bool);
+
+struct pcm_format_data {
+	unsigned char width;
+	unsigned char phys;
+	signed char le;
+	signed char signd;
+	unsigned char silence[8];
+};
+
+struct snd_malloc_ops {
+	void * (*alloc)(struct snd_dma_buffer *, size_t);
+	void (*free)(struct snd_dma_buffer *);
+	dma_addr_t (*get_addr)(struct snd_dma_buffer *, size_t);
+	struct page * (*get_page)(struct snd_dma_buffer *, size_t);
+	unsigned int (*get_chunk_size)(struct snd_dma_buffer *, unsigned int, unsigned int);
+	int (*mmap)(struct snd_dma_buffer *, struct vm_area_struct *);
+	void (*sync)(struct snd_dma_buffer *, enum snd_dma_sync_mode);
+};
+
+struct snd_dma_sg_fallback {
+	bool use_dma_alloc_coherent;
+	size_t count;
+	struct page **pages;
+	dma_addr_t *addrs;
+};
+
+struct dmaengine_pcm_runtime_data {
+	struct dma_chan___2 *dma_chan;
+	dma_cookie_t cookie;
+	unsigned int pos;
+};
+
+struct snd_dmaengine_dai_dma_data {
+	dma_addr_t addr;
+	enum dma_slave_buswidth addr_width;
+	u32 maxburst;
+	void *filter_data;
+	const char *chan_name;
+	unsigned int fifo_size;
+	unsigned int flags;
+	void *peripheral_config;
+	size_t peripheral_size;
+};
+
+enum {
+	SNDRV_RAWMIDI_IOCTL_PARAMS32 = 3223344912,
+	SNDRV_RAWMIDI_IOCTL_STATUS_COMPAT32 = 3223607072,
+	SNDRV_RAWMIDI_IOCTL_STATUS_COMPAT64 = 3224393504,
+};
+
+struct snd_rawmidi_framing_tstamp {
+	__u8 frame_type;
+	__u8 length;
+	__u8 reserved[2];
+	__u32 tv_nsec;
+	__u64 tv_sec;
+	__u8 data[16];
+};
+
+struct snd_rawmidi_info {
+	unsigned int device;
+	unsigned int subdevice;
+	int stream;
+	int card;
+	unsigned int flags;
+	unsigned char id[64];
+	unsigned char name[80];
+	unsigned char subname[32];
+	unsigned int subdevices_count;
+	unsigned int subdevices_avail;
+	unsigned char reserved[64];
+};
+
+struct snd_rawmidi_file {
+	struct snd_rawmidi *rmidi;
+	struct snd_rawmidi_substream *input;
+	struct snd_rawmidi_substream *output;
+	unsigned int user_pversion;
+};
+
+struct snd_rawmidi_status64 {
+	int stream;
+	u8 rsvd[4];
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	size_t avail;
+	size_t xruns;
+	unsigned char reserved[16];
+};
+
+struct snd_rawmidi_params32 {
+	s32 stream;
+	u32 buffer_size;
+	u32 avail_min;
+	unsigned int no_active_sensing;
+	unsigned int mode;
+	unsigned char reserved[12];
+};
+
+struct snd_rawmidi_params {
+	int stream;
+	size_t buffer_size;
+	size_t avail_min;
+	unsigned int no_active_sensing: 1;
+	unsigned int mode;
+	unsigned char reserved[12];
+};
+
+struct compat_snd_rawmidi_status64 {
+	s32 stream;
+	u8 rsvd[4];
+	s64 tstamp_sec;
+	s64 tstamp_nsec;
+	u32 avail;
+	u32 xruns;
+	unsigned char reserved[16];
+};
+
+struct snd_rawmidi_status32 {
+	s32 stream;
+	s32 tstamp_sec;
+	s32 tstamp_nsec;
+	u32 avail;
+	u32 xruns;
+	unsigned char reserved[16];
+};
+
+enum snd_compr_direction {
+	SND_COMPRESS_PLAYBACK = 0,
+	SND_COMPRESS_CAPTURE = 1,
+};
+
+struct snd_compr_tstamp {
+	__u32 byte_offset;
+	__u32 copied_total;
+	__u32 pcm_frames;
+	__u32 pcm_io_frames;
+	__u32 sampling_rate;
+};
+
+struct snd_compr_ops;
+
+struct snd_compr_runtime;
+
+struct snd_compr;
+
+struct snd_compr_stream {
+	const char *name;
+	struct snd_compr_ops *ops;
+	struct snd_compr_runtime *runtime;
+	struct snd_compr *device;
+	struct delayed_work error_work;
+	enum snd_compr_direction direction;
+	bool metadata_set;
+	bool next_track;
+	bool partial_drain;
+	bool pause_in_draining;
+	void *private_data;
+	struct snd_dma_buffer dma_buffer;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_compr_params;
+
+struct snd_codec;
+
+struct snd_compr_metadata;
+
+struct snd_compr_caps;
+
+struct snd_compr_codec_caps;
+
+struct snd_compr_ops {
+	int (*open)(struct snd_compr_stream *);
+	int (*free)(struct snd_compr_stream *);
+	int (*set_params)(struct snd_compr_stream *, struct snd_compr_params *);
+	int (*get_params)(struct snd_compr_stream *, struct snd_codec *);
+	int (*set_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *);
+	int (*get_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *);
+	int (*trigger)(struct snd_compr_stream *, int);
+	int (*pointer)(struct snd_compr_stream *, struct snd_compr_tstamp *);
+	int (*copy)(struct snd_compr_stream *, char __attribute__((btf_type_tag("user"))) *, size_t);
+	int (*mmap)(struct snd_compr_stream *, struct vm_area_struct *);
+	int (*ack)(struct snd_compr_stream *, size_t);
+	int (*get_caps)(struct snd_compr_stream *, struct snd_compr_caps *);
+	int (*get_codec_caps)(struct snd_compr_stream *, struct snd_compr_codec_caps *);
+	u64 android_kabi_reserved1;
+};
+
+struct snd_compressed_buffer {
+	__u32 fragment_size;
+	__u32 fragments;
+};
+
+struct snd_enc_wma {
+	__u32 super_block_align;
+};
+
+struct snd_enc_vorbis {
+	__s32 quality;
+	__u32 managed;
+	__u32 max_bit_rate;
+	__u32 min_bit_rate;
+	__u32 downmix;
+};
+
+struct snd_enc_real {
+	__u32 quant_bits;
+	__u32 start_region;
+	__u32 num_regions;
+};
+
+struct snd_enc_flac {
+	__u32 num;
+	__u32 gain;
+};
+
+struct snd_enc_generic {
+	__u32 bw;
+	__s32 reserved[15];
+};
+
+struct snd_dec_flac {
+	__u16 sample_size;
+	__u16 min_blk_size;
+	__u16 max_blk_size;
+	__u16 min_frame_size;
+	__u16 max_frame_size;
+	__u16 reserved;
+};
+
+struct snd_dec_wma {
+	__u32 encoder_option;
+	__u32 adv_encoder_option;
+	__u32 adv_encoder_option2;
+	__u32 reserved;
+};
+
+struct snd_dec_alac {
+	__u32 frame_length;
+	__u8 compatible_version;
+	__u8 pb;
+	__u8 mb;
+	__u8 kb;
+	__u32 max_run;
+	__u32 max_frame_bytes;
+};
+
+struct snd_dec_ape {
+	__u16 compatible_version;
+	__u16 compression_level;
+	__u32 format_flags;
+	__u32 blocks_per_frame;
+	__u32 final_frame_blocks;
+	__u32 total_frames;
+	__u32 seek_table_present;
+};
+
+union snd_codec_options {
+	struct snd_enc_wma wma;
+	struct snd_enc_vorbis vorbis;
+	struct snd_enc_real real;
+	struct snd_enc_flac flac;
+	struct snd_enc_generic generic;
+	struct snd_dec_flac flac_d;
+	struct snd_dec_wma wma_d;
+	struct snd_dec_alac alac_d;
+	struct snd_dec_ape ape_d;
+};
+
+struct snd_codec {
+	__u32 id;
+	__u32 ch_in;
+	__u32 ch_out;
+	__u32 sample_rate;
+	__u32 bit_rate;
+	__u32 rate_control;
+	__u32 profile;
+	__u32 level;
+	__u32 ch_mode;
+	__u32 format;
+	__u32 align;
+	union snd_codec_options options;
+	__u32 reserved[3];
+};
+
+struct snd_compr_params {
+	struct snd_compressed_buffer buffer;
+	struct snd_codec codec;
+	__u8 no_wake_mode;
+};
+
+struct snd_compr_metadata {
+	__u32 key;
+	__u32 value[8];
+};
+
+struct snd_compr_caps {
+	__u32 num_codecs;
+	__u32 direction;
+	__u32 min_fragment_size;
+	__u32 max_fragment_size;
+	__u32 min_fragments;
+	__u32 max_fragments;
+	__u32 codecs[32];
+	__u32 reserved[11];
+};
+
+struct snd_codec_desc {
+	__u32 max_ch;
+	__u32 sample_rates[32];
+	__u32 num_sample_rates;
+	__u32 bit_rate[32];
+	__u32 num_bitrates;
+	__u32 rate_control;
+	__u32 profiles;
+	__u32 modes;
+	__u32 formats;
+	__u32 min_buffer;
+	__u32 reserved[15];
+};
+
+struct snd_compr_codec_caps {
+	__u32 codec;
+	__u32 num_descriptors;
+	struct snd_codec_desc descriptor[32];
+};
+
+struct snd_compr_runtime {
+	snd_pcm_state_t state;
+	struct snd_compr_ops *ops;
+	void *buffer;
+	u64 buffer_size;
+	u32 fragment_size;
+	u32 fragments;
+	u64 total_bytes_available;
+	u64 total_bytes_transferred;
+	wait_queue_head_t sleep;
+	void *private_data;
+	unsigned char *dma_area;
+	dma_addr_t dma_addr;
+	size_t dma_bytes;
+	struct snd_dma_buffer *dma_buffer_p;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_compr {
+	const char *name;
+	struct device *dev;
+	struct snd_compr_ops *ops;
+	void *private_data;
+	struct snd_card *card;
+	unsigned int direction;
+	struct mutex lock;
+	int device;
+	bool use_pause_in_draining;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_compr_avail {
+	__u64 avail;
+	struct snd_compr_tstamp tstamp;
+} __attribute__((packed));
+
+struct snd_compr_file {
+	unsigned long caps;
+	struct snd_compr_stream stream;
+};
+
+struct snd_usb_audio;
+
+struct snd_usb_platform_ops {
+	void (*connect_cb)(struct snd_usb_audio *);
+	void (*disconnect_cb)(struct snd_usb_audio *);
+	void (*suspend_cb)(struct usb_interface *, pm_message_t);
+	void (*resume_cb)(struct usb_interface *);
+};
+
+struct snd_usb_audio {
+	int index;
+	struct usb_device *dev;
+	struct snd_card *card;
+	struct usb_interface *intf[16];
+	u32 usb_id;
+	uint16_t quirk_type;
+	struct mutex mutex;
+	unsigned int system_suspend;
+	atomic_t active;
+	atomic_t shutdown;
+	atomic_t usage_count;
+	wait_queue_head_t shutdown_wait;
+	unsigned int quirk_flags;
+	unsigned int need_delayed_register: 1;
+	int num_interfaces;
+	int last_iface;
+	int num_suspended_intf;
+	int sample_rate_read_error;
+	int badd_profile;
+	struct list_head pcm_list;
+	struct list_head ep_list;
+	struct list_head iface_ref_list;
+	struct list_head clock_ref_list;
+	int pcm_devs;
+	unsigned int num_rawmidis;
+	struct list_head midi_list;
+	struct list_head midi_v2_list;
+	struct list_head mixer_list;
+	int setup;
+	bool generic_implicit_fb;
+	bool autoclock;
+	bool lowlatency;
+	struct usb_host_interface *ctrl_intf;
+	struct media_device *media_dev;
+	struct media_intf_devnode *ctl_intf_media_devnode;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct usb_audio_device_name {
+	u32 id;
+	const char *vendor_name;
+	const char *product_name;
+	const char *profile_name;
+};
+
+struct snd_usb_audio_quirk {
+	const char *vendor_name;
+	const char *product_name;
+	int16_t ifnum;
+	uint16_t type;
+	const void *data;
+};
+
+struct snd_usb_stream;
+
+struct audioformat;
+
+struct snd_usb_power_domain;
+
+struct snd_usb_endpoint;
+
+struct media_ctl;
+
+struct snd_usb_substream {
+	struct snd_usb_stream *stream;
+	struct usb_device *dev;
+	struct snd_pcm_substream *pcm_substream;
+	int direction;
+	int endpoint;
+	const struct audioformat *cur_audiofmt;
+	struct snd_usb_power_domain *str_pd;
+	unsigned int channels_max;
+	unsigned int txfr_quirk: 1;
+	unsigned int tx_length_quirk: 1;
+	unsigned int fmt_type;
+	unsigned int pkt_offset_adj;
+	unsigned int stream_offset_adj;
+	unsigned int running: 1;
+	unsigned int period_elapsed_pending;
+	unsigned int buffer_bytes;
+	unsigned int inflight_bytes;
+	unsigned int hwptr_done;
+	unsigned int transfer_done;
+	unsigned int frame_limit;
+	unsigned int ep_num;
+	struct snd_usb_endpoint *data_endpoint;
+	struct snd_usb_endpoint *sync_endpoint;
+	unsigned long flags;
+	unsigned int speed;
+	u64 formats;
+	unsigned int num_formats;
+	struct list_head fmt_list;
+	spinlock_t lock;
+	unsigned int last_frame_number;
+	struct {
+		int marker;
+		int channel;
+		int byte_idx;
+	} dsd_dop;
+	bool trigger_tstamp_pending_update;
+	bool lowlatency_playback;
+	struct media_ctl *media_ctl;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_usb_stream {
+	struct snd_usb_audio *chip;
+	struct snd_pcm *pcm;
+	int pcm_index;
+	unsigned int fmt_type;
+	struct snd_usb_substream substream[2];
+	struct list_head list;
+};
+
+struct audioformat {
+	struct list_head list;
+	u64 formats;
+	unsigned int channels;
+	unsigned int fmt_type;
+	unsigned int fmt_bits;
+	unsigned int frame_size;
+	unsigned char iface;
+	unsigned char altsetting;
+	unsigned char ep_idx;
+	unsigned char altset_idx;
+	unsigned char attributes;
+	unsigned char endpoint;
+	unsigned char ep_attr;
+	bool implicit_fb;
+	unsigned char sync_ep;
+	unsigned char sync_iface;
+	unsigned char sync_altsetting;
+	unsigned char sync_ep_idx;
+	unsigned char datainterval;
+	unsigned char protocol;
+	unsigned int maxpacksize;
+	unsigned int rates;
+	unsigned int rate_min;
+	unsigned int rate_max;
+	unsigned int nr_rates;
+	unsigned int *rate_table;
+	unsigned char clock;
+	struct snd_pcm_chmap_elem *chmap;
+	bool dsd_dop;
+	bool dsd_bitrev;
+	bool dsd_raw;
+};
+
+struct snd_usb_power_domain {
+	int pd_id;
+	int pd_d1d0_rec;
+	int pd_d2d0_rec;
+};
+
+struct snd_urb_ctx {
+	struct urb *urb;
+	unsigned int buffer_size;
+	struct snd_usb_substream *subs;
+	struct snd_usb_endpoint *ep;
+	int index;
+	int packets;
+	int queued;
+	int packet_size[48];
+	struct list_head ready_list;
+};
+
+struct snd_usb_packet_info {
+	uint32_t packet_size[48];
+	int packets;
+};
+
+struct snd_usb_iface_ref;
+
+struct snd_usb_clock_ref;
+
+struct snd_usb_endpoint {
+	struct snd_usb_audio *chip;
+	struct snd_usb_iface_ref *iface_ref;
+	struct snd_usb_clock_ref *clock_ref;
+	int opened;
+	atomic_t running;
+	int ep_num;
+	int type;
+	unsigned char iface;
+	unsigned char altsetting;
+	unsigned char ep_idx;
+	atomic_t state;
+	int (*prepare_data_urb)(struct snd_usb_substream *, struct urb *, bool);
+	void (*retire_data_urb)(struct snd_usb_substream *, struct urb *);
+	struct snd_usb_substream *data_subs;
+	struct snd_usb_endpoint *sync_source;
+	struct snd_usb_endpoint *sync_sink;
+	struct snd_urb_ctx urb[12];
+	struct snd_usb_packet_info next_packet[12];
+	unsigned int next_packet_head;
+	unsigned int next_packet_queued;
+	struct list_head ready_playback_urbs;
+	unsigned int nurbs;
+	unsigned long active_mask;
+	unsigned long unlink_mask;
+	atomic_t submitted_urbs;
+	char *syncbuf;
+	dma_addr_t sync_dma;
+	unsigned int pipe;
+	unsigned int packsize[2];
+	unsigned int sample_rem;
+	unsigned int sample_accum;
+	unsigned int pps;
+	unsigned int freqn;
+	unsigned int freqm;
+	int freqshift;
+	unsigned int freqmax;
+	unsigned int phase;
+	unsigned int maxpacksize;
+	unsigned int maxframesize;
+	unsigned int max_urb_frames;
+	unsigned int curpacksize;
+	unsigned int curframesize;
+	unsigned int syncmaxsize;
+	unsigned int fill_max: 1;
+	unsigned int tenor_fb_quirk: 1;
+	unsigned int datainterval;
+	unsigned int syncinterval;
+	unsigned char silence_value;
+	unsigned int stride;
+	int skip_packets;
+	bool implicit_fb_sync;
+	bool lowlatency_playback;
+	bool need_setup;
+	bool need_prepare;
+	bool fixed_rate;
+	const struct audioformat *cur_audiofmt;
+	unsigned int cur_rate;
+	snd_pcm_format_t cur_format;
+	unsigned int cur_channels;
+	unsigned int cur_frame_bytes;
+	unsigned int cur_period_frames;
+	unsigned int cur_period_bytes;
+	unsigned int cur_buffer_periods;
+	spinlock_t lock;
+	struct list_head list;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct media_ctl {
+	struct media_device *media_dev;
+	struct media_entity media_entity;
+	struct media_intf_devnode *intf_devnode;
+	struct media_link *intf_link;
+	struct media_pad media_pad;
+	struct media_pipeline media_pipe;
+};
+
+struct usb_mixer_elem_list;
+
+struct usbmix_connector_map;
+
+struct rc_config;
+
+struct media_mixer_ctl;
+
+struct usb_mixer_interface {
+	struct snd_usb_audio *chip;
+	struct usb_host_interface *hostif;
+	struct list_head list;
+	unsigned int ignore_ctl_error;
+	struct urb *urb;
+	struct usb_mixer_elem_list **id_elems;
+	int protocol;
+	const struct usbmix_connector_map *connector_map;
+	const struct rc_config *rc_cfg;
+	u32 rc_code;
+	wait_queue_head_t rc_waitq;
+	struct urb *rc_urb;
+	struct usb_ctrlrequest *rc_setup_packet;
+	u8 rc_buffer[6];
+	struct media_mixer_ctl *media_mixer_ctl;
+	bool disconnected;
+	void *private_data;
+	void (*private_free)(struct usb_mixer_interface *);
+	void (*private_suspend)(struct usb_mixer_interface *);
+};
+
+typedef void (*usb_mixer_elem_dump_func_t)(struct snd_info_buffer *, struct usb_mixer_elem_list *);
+
+typedef int (*usb_mixer_elem_resume_func_t)(struct usb_mixer_elem_list *);
+
+struct usb_mixer_elem_list {
+	struct usb_mixer_interface *mixer;
+	struct usb_mixer_elem_list *next_id_elem;
+	struct snd_kcontrol *kctl;
+	unsigned int id;
+	bool is_std_info;
+	usb_mixer_elem_dump_func_t dump;
+	usb_mixer_elem_resume_func_t resume;
+};
+
+struct usbmix_connector_map {
+	u8 id;
+	u8 delegated_id;
+	u8 control;
+	u8 channel;
+};
+
+struct rc_config {
+	u32 usb_id;
+	u8 offset;
+	u8 length;
+	u8 packet_length;
+	u8 min_packet_length;
+	u8 mute_mixer_id;
+	u32 mute_code;
+};
+
+struct media_mixer_ctl {
+	struct media_device *media_dev;
+	struct media_entity media_entity;
+	struct media_intf_devnode *intf_devnode;
+	struct media_link *intf_link;
+	struct media_pad media_pad[3];
+	struct media_pipeline media_pipe;
+};
+
+struct uac1_ac_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 bcdADC;
+	__le16 wTotalLength;
+	__u8 bInCollection;
+	__u8 baInterfaceNr[0];
+} __attribute__((packed));
+
+struct uac3_clock_source_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bmAttributes;
+	__le32 bmControls;
+	__u8 bReferenceTerminal;
+	__le16 wClockSourceStr;
+} __attribute__((packed));
+
+union uac23_clock_source_desc {
+	struct uac_clock_source_descriptor v2;
+	struct uac3_clock_source_descriptor v3;
+};
+
+struct uac_clock_selector_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bNrInPins;
+	__u8 baCSourceID[0];
+};
+
+struct uac3_clock_selector_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bNrInPins;
+	__u8 baCSourceID[0];
+};
+
+union uac23_clock_selector_desc {
+	struct uac_clock_selector_descriptor v2;
+	struct uac3_clock_selector_descriptor v3;
+};
+
+struct uac_clock_multiplier_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bClockID;
+	__u8 bCSourceID;
+	__u8 bmControls;
+	__u8 iClockMultiplier;
+};
+
+union uac23_clock_multiplier_desc {
+	struct uac_clock_multiplier_descriptor v2;
+	struct uac_clock_multiplier_descriptor v3;
+};
+
+enum {
+	EP_STATE_STOPPED = 0,
+	EP_STATE_RUNNING = 1,
+	EP_STATE_STOPPING = 2,
+};
+
+struct snd_usb_iface_ref {
+	unsigned char iface;
+	bool need_setup;
+	int opened;
+	int altset;
+	struct list_head list;
+};
+
+struct snd_usb_clock_ref {
+	unsigned char clock;
+	atomic_t locked;
+	int opened;
+	int rate;
+	bool need_setup;
+	struct list_head list;
+};
+
+struct uac_format_type_ii_ext_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__le16 wMaxBitRate;
+	__le16 wSamplesPerFrame;
+	__u8 bHeaderLength;
+	__u8 bSideBandProtocol;
+};
+
+struct uac_format_type_ii_discrete_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__le16 wMaxBitRate;
+	__le16 wSamplesPerFrame;
+	__u8 bSamFreqType;
+	__u8 tSamFreq[0];
+} __attribute__((packed));
+
+struct uac3_as_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalLink;
+	__le32 bmControls;
+	__le16 wClusterDescrID;
+	__le64 bmFormats;
+	__u8 bSubslotSize;
+	__u8 bBitResolution;
+	__le16 bmAuxProtocols;
+	__u8 bControlSize;
+} __attribute__((packed));
+
+struct uac_format_type_i_ext_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bSubslotSize;
+	__u8 bBitResolution;
+	__u8 bHeaderLength;
+	__u8 bControlSize;
+	__u8 bSideBandProtocol;
+};
+
+struct uac_format_type_i_discrete_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bNrChannels;
+	__u8 bSubframeSize;
+	__u8 bBitResolution;
+	__u8 bSamFreqType;
+	__u8 tSamFreq[0];
+};
+
+struct uac_format_type_i_continuous_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bFormatType;
+	__u8 bNrChannels;
+	__u8 bSubframeSize;
+	__u8 bBitResolution;
+	__u8 bSamFreqType;
+	__u8 tLowerSamFreq[3];
+	__u8 tUpperSamFreq[3];
+};
+
+struct snd_usb_implicit_fb_match {
+	unsigned int id;
+	unsigned int iface_class;
+	unsigned int ep_num;
+	unsigned int iface;
+	int type;
+};
+
+enum {
+	IMPLICIT_FB_NONE = 0,
+	IMPLICIT_FB_GENERIC = 1,
+	IMPLICIT_FB_FIXED = 2,
+	IMPLICIT_FB_BOTH = 3,
+};
+
+struct usbmix_name_map;
+
+struct usbmix_selector_map;
+
+struct usbmix_ctl_map {
+	u32 id;
+	const struct usbmix_name_map *map;
+	const struct usbmix_selector_map *selector_map;
+	const struct usbmix_connector_map *connector_map;
+};
+
+struct usbmix_dB_map;
+
+struct usbmix_name_map {
+	int id;
+	const char *name;
+	int control;
+	const struct usbmix_dB_map *dB;
+};
+
+struct usbmix_dB_map {
+	int min;
+	int max;
+	bool min_mute;
+};
+
+struct usbmix_selector_map {
+	int id;
+	int count;
+	const char **names;
+};
+
+struct uac3_badd_profile {
+	int subclass;
+	const char *name;
+	int c_chmask;
+	int p_chmask;
+	int st_chmask;
+};
+
+struct iterm_name_combo {
+	int type;
+	char *name;
+};
+
+struct usb_feature_control_info {
+	int control;
+	const char *name;
+	int type;
+	int type_uac2;
+};
+
+struct procunit_value_info {
+	int control;
+	const char *suffix;
+	int val_type;
+	int min_value;
+};
+
+struct procunit_info {
+	int type;
+	char *name;
+	const struct procunit_value_info *values;
+};
+
+enum {
+	USB_MIXER_BOOLEAN = 0,
+	USB_MIXER_INV_BOOLEAN = 1,
+	USB_MIXER_S8 = 2,
+	USB_MIXER_U8 = 3,
+	USB_MIXER_S16 = 4,
+	USB_MIXER_U16 = 5,
+	USB_MIXER_S32 = 6,
+	USB_MIXER_U32 = 7,
+	USB_MIXER_BESPOKEN = 8,
+};
+
+enum {
+	USB_XU_CLOCK_RATE = 58113,
+	USB_XU_CLOCK_SOURCE = 58114,
+	USB_XU_DIGITAL_IO_STATUS = 58115,
+	USB_XU_DEVICE_OPTIONS = 58116,
+	USB_XU_DIRECT_MONITORING = 58117,
+	USB_XU_METERING = 58118,
+};
+
+struct usb_mixer_elem_info {
+	struct usb_mixer_elem_list head;
+	unsigned int control;
+	unsigned int cmask;
+	unsigned int idx_off;
+	unsigned int ch_readonly;
+	unsigned int master_readonly;
+	int channels;
+	int val_type;
+	int min;
+	int max;
+	int res;
+	int dBmin;
+	int dBmax;
+	int cached;
+	int cache_val[16];
+	u8 initialized;
+	u8 min_mute;
+	void *private_data;
+};
+
+struct usb_audio_term {
+	int id;
+	int type;
+	int channels;
+	unsigned int chconfig;
+	int name;
+};
+
+struct mixer_build {
+	struct snd_usb_audio *chip;
+	struct usb_mixer_interface *mixer;
+	unsigned char *buffer;
+	unsigned int buflen;
+	unsigned long unitbitmap[4];
+	unsigned long termbitmap[4];
+	struct usb_audio_term oterm;
+	const struct usbmix_name_map *map;
+	const struct usbmix_selector_map *selector_map;
+};
+
+struct uac3_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 bCSourceID;
+	__le32 bmControls;
+	__le16 wExTerminalDescrID;
+	__le16 wConnectorsDescrID;
+	__le16 wTerminalDescrStr;
+} __attribute__((packed));
+
+struct uac1_output_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bSourceID;
+	__u8 iTerminal;
+} __attribute__((packed));
+
+struct uac_feature_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__u8 bControlSize;
+	__u8 bmaControls[0];
+};
+
+struct uac_selector_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUintID;
+	__u8 bNrInPins;
+	__u8 baSourceID[0];
+};
+
+struct uac3_input_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bCSourceID;
+	__le32 bmControls;
+	__le16 wClusterDescrID;
+	__le16 wExTerminalDescrID;
+	__le16 wConnectorsDescrID;
+	__le16 wTerminalDescrStr;
+};
+
+struct uac_mixer_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bNrInPins;
+	__u8 baSourceID[0];
+};
+
+struct uac3_feature_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__u8 bSourceID;
+	__u8 bmaControls[0];
+};
+
+struct uac_processing_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__le16 wProcessType;
+	__u8 bNrInPins;
+	__u8 baSourceID[0];
+} __attribute__((packed));
+
+struct uac2_effect_unit_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bUnitID;
+	__le16 wEffectType;
+	__u8 bSourceID;
+	__u8 bmaControls[0];
+} __attribute__((packed));
+
+struct uac_input_terminal_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalID;
+	__le16 wTerminalType;
+	__u8 bAssocTerminal;
+	__u8 bNrChannels;
+	__le16 wChannelConfig;
+	__u8 iChannelNames;
+	__u8 iTerminal;
+};
+
+struct uac3_cluster_header_descriptor {
+	__le16 wLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 wDescriptorID;
+	__u8 bNrChannels;
+} __attribute__((packed));
+
+struct uac2_connectors_ctl_blk {
+	__u8 bNrChannels;
+	__le32 bmChannelConfig;
+	__u8 iChannelNames;
+} __attribute__((packed));
+
+struct uac3_insertion_ctl_blk {
+	__u8 bSize;
+	__u8 bmConInserted;
+};
+
+struct uac1_status_word {
+	__u8 bStatusType;
+	__u8 bOriginator;
+};
+
+struct sb_jack {
+	int unitid;
+	const char *name;
+};
+
+struct std_mono_table {
+	unsigned int unitid;
+	unsigned int control;
+	unsigned int cmask;
+	int val_type;
+	const char *name;
+	snd_kcontrol_tlv_rw_t *tlv_callback;
+};
+
+struct snd_djm_ctl;
+
+struct snd_djm_device {
+	const char *name;
+	const struct snd_djm_ctl *controls;
+	size_t ncontrols;
+};
+
+struct snd_djm_ctl {
+	const char *name;
+	const u16 *options;
+	size_t noptions;
+	u16 default_value;
+	u16 wIndex;
+};
+
+enum {
+	SNDRV_HWDEP_IFACE_OPL2 = 0,
+	SNDRV_HWDEP_IFACE_OPL3 = 1,
+	SNDRV_HWDEP_IFACE_OPL4 = 2,
+	SNDRV_HWDEP_IFACE_SB16CSP = 3,
+	SNDRV_HWDEP_IFACE_EMU10K1 = 4,
+	SNDRV_HWDEP_IFACE_YSS225 = 5,
+	SNDRV_HWDEP_IFACE_ICS2115 = 6,
+	SNDRV_HWDEP_IFACE_SSCAPE = 7,
+	SNDRV_HWDEP_IFACE_VX = 8,
+	SNDRV_HWDEP_IFACE_MIXART = 9,
+	SNDRV_HWDEP_IFACE_USX2Y = 10,
+	SNDRV_HWDEP_IFACE_EMUX_WAVETABLE = 11,
+	SNDRV_HWDEP_IFACE_BLUETOOTH = 12,
+	SNDRV_HWDEP_IFACE_USX2Y_PCM = 13,
+	SNDRV_HWDEP_IFACE_PCXHR = 14,
+	SNDRV_HWDEP_IFACE_SB_RC = 15,
+	SNDRV_HWDEP_IFACE_HDA = 16,
+	SNDRV_HWDEP_IFACE_USB_STREAM = 17,
+	SNDRV_HWDEP_IFACE_FW_DICE = 18,
+	SNDRV_HWDEP_IFACE_FW_FIREWORKS = 19,
+	SNDRV_HWDEP_IFACE_FW_BEBOB = 20,
+	SNDRV_HWDEP_IFACE_FW_OXFW = 21,
+	SNDRV_HWDEP_IFACE_FW_DIGI00X = 22,
+	SNDRV_HWDEP_IFACE_FW_TASCAM = 23,
+	SNDRV_HWDEP_IFACE_LINE6 = 24,
+	SNDRV_HWDEP_IFACE_FW_MOTU = 25,
+	SNDRV_HWDEP_IFACE_FW_FIREFACE = 26,
+	SNDRV_HWDEP_IFACE_LAST = 26,
+};
+
+enum snd_rme_domain {
+	SND_RME_DOMAIN_SYSTEM = 0,
+	SND_RME_DOMAIN_AES = 1,
+	SND_RME_DOMAIN_SPDIF = 2,
+};
+
+enum snd_rme_clock_status {
+	SND_RME_CLOCK_NOLOCK = 0,
+	SND_RME_CLOCK_LOCK = 1,
+	SND_RME_CLOCK_SYNC = 2,
+};
+
+enum {
+	SND_BBFPRO_CTL_REG1 = 0,
+	SND_BBFPRO_CTL_REG2 = 1,
+};
+
+struct scarlett_mixer_elem_enum_info {
+	int start;
+	int len;
+	int offsets[5];
+	const char * const *names;
+};
+
+struct scarlett_mixer_control {
+	unsigned char num;
+	unsigned char type;
+	const char *name;
+};
+
+struct scarlett_device_info {
+	int matrix_in;
+	int matrix_out;
+	int input_len;
+	int output_len;
+	struct scarlett_mixer_elem_enum_info opt_master;
+	struct scarlett_mixer_elem_enum_info opt_matrix;
+	int matrix_mux_init[18];
+	int num_controls;
+	const struct scarlett_mixer_control controls[10];
+};
+
+enum {
+	SCARLETT_OUTPUTS = 0,
+	SCARLETT_SWITCH_IMPEDANCE = 1,
+	SCARLETT_SWITCH_PAD = 2,
+	SCARLETT_SWITCH_GAIN = 3,
+};
+
+enum {
+	SCARLETT_OFFSET_PCM = 0,
+	SCARLETT_OFFSET_ANALOG = 1,
+	SCARLETT_OFFSET_SPDIF = 2,
+	SCARLETT_OFFSET_ADAT = 3,
+	SCARLETT_OFFSET_MIX = 4,
+};
+
+struct scarlett2_device_info;
+
+struct scarlett2_device_entry {
+	const u32 usb_id;
+	const struct scarlett2_device_info *info;
+	const char *series_name;
+};
+
+struct scarlett2_mux_entry {
+	u8 port_type;
+	u8 start;
+	u8 count;
+};
+
+struct scarlett2_device_info {
+	u8 has_msd_mode;
+	u8 config_set;
+	u8 line_out_hw_vol;
+	u8 has_speaker_switching;
+	u8 has_talkback;
+	u8 level_input_count;
+	u8 level_input_first;
+	u8 pad_input_count;
+	u8 air_input_count;
+	u8 phantom_count;
+	u8 inputs_per_phantom;
+	u8 direct_monitor;
+	u8 line_out_remap_enable;
+	u8 line_out_remap[10];
+	const char * const line_out_descrs[10];
+	const int port_count[12];
+	struct scarlett2_mux_entry mux_assignment[30];
+};
+
+struct scarlett2_config {
+	u8 offset;
+	u8 size;
+	u8 activate;
+};
+
+struct scarlett2_port {
+	u16 id;
+	const char * const src_descr;
+	int src_num_offset;
+	const char * const dst_descr;
+};
+
+enum {
+	SCARLETT2_PORT_TYPE_NONE = 0,
+	SCARLETT2_PORT_TYPE_ANALOGUE = 1,
+	SCARLETT2_PORT_TYPE_SPDIF = 2,
+	SCARLETT2_PORT_TYPE_ADAT = 3,
+	SCARLETT2_PORT_TYPE_MIX = 4,
+	SCARLETT2_PORT_TYPE_PCM = 5,
+	SCARLETT2_PORT_TYPE_COUNT = 6,
+};
+
+enum {
+	SCARLETT2_PORT_IN = 0,
+	SCARLETT2_PORT_OUT = 1,
+	SCARLETT2_PORT_DIRNS = 2,
+};
+
+enum {
+	SCARLETT2_CONFIG_DIM_MUTE = 0,
+	SCARLETT2_CONFIG_LINE_OUT_VOLUME = 1,
+	SCARLETT2_CONFIG_MUTE_SWITCH = 2,
+	SCARLETT2_CONFIG_SW_HW_SWITCH = 3,
+	SCARLETT2_CONFIG_LEVEL_SWITCH = 4,
+	SCARLETT2_CONFIG_PAD_SWITCH = 5,
+	SCARLETT2_CONFIG_MSD_SWITCH = 6,
+	SCARLETT2_CONFIG_AIR_SWITCH = 7,
+	SCARLETT2_CONFIG_STANDALONE_SWITCH = 8,
+	SCARLETT2_CONFIG_PHANTOM_SWITCH = 9,
+	SCARLETT2_CONFIG_PHANTOM_PERSISTENCE = 10,
+	SCARLETT2_CONFIG_DIRECT_MONITOR = 11,
+	SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH = 12,
+	SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE = 13,
+	SCARLETT2_CONFIG_TALKBACK_MAP = 14,
+	SCARLETT2_CONFIG_COUNT = 15,
+};
+
+enum {
+	SCARLETT2_CONFIG_SET_NO_MIXER = 0,
+	SCARLETT2_CONFIG_SET_GEN_2 = 1,
+	SCARLETT2_CONFIG_SET_GEN_3 = 2,
+	SCARLETT2_CONFIG_SET_CLARETT = 3,
+	SCARLETT2_CONFIG_SET_COUNT = 4,
+};
+
+enum {
+	SCARLETT2_BUTTON_MUTE = 0,
+	SCARLETT2_BUTTON_DIM = 1,
+	SCARLETT2_DIM_MUTE_COUNT = 2,
+};
+
+struct scarlett2_data {
+	struct usb_mixer_interface *mixer;
+	struct mutex usb_mutex;
+	struct mutex data_mutex;
+	struct delayed_work work;
+	const struct scarlett2_device_info *info;
+	const char *series_name;
+	__u8 bInterfaceNumber;
+	__u8 bEndpointAddress;
+	__u16 wMaxPacketSize;
+	__u8 bInterval;
+	int num_mux_srcs;
+	int num_mux_dsts;
+	u16 scarlett2_seq;
+	u8 sync_updated;
+	u8 vol_updated;
+	u8 input_other_updated;
+	u8 monitor_other_updated;
+	u8 mux_updated;
+	u8 speaker_switching_switched;
+	u8 sync;
+	u8 master_vol;
+	u8 vol[10];
+	u8 vol_sw_hw_switch[10];
+	u8 mute_switch[10];
+	u8 level_switch[2];
+	u8 pad_switch[8];
+	u8 dim_mute[2];
+	u8 air_switch[8];
+	u8 phantom_switch[2];
+	u8 phantom_persistence;
+	u8 direct_monitor_switch;
+	u8 speaker_switching_switch;
+	u8 talkback_switch;
+	u8 talkback_map[12];
+	u8 msd_switch;
+	u8 standalone_switch;
+	struct snd_kcontrol *sync_ctl;
+	struct snd_kcontrol *master_vol_ctl;
+	struct snd_kcontrol *vol_ctls[10];
+	struct snd_kcontrol *sw_hw_ctls[10];
+	struct snd_kcontrol *mute_ctls[10];
+	struct snd_kcontrol *dim_mute_ctls[2];
+	struct snd_kcontrol *level_ctls[2];
+	struct snd_kcontrol *pad_ctls[8];
+	struct snd_kcontrol *air_ctls[8];
+	struct snd_kcontrol *phantom_ctls[2];
+	struct snd_kcontrol *mux_ctls[77];
+	struct snd_kcontrol *direct_monitor_ctl;
+	struct snd_kcontrol *speaker_switching_ctl;
+	struct snd_kcontrol *talkback_ctl;
+	u8 mux[77];
+	u8 mix[300];
+};
+
+struct scarlett2_usb_volume_status {
+	u8 dim_mute[2];
+	u8 pad1;
+	s16 sw_vol[10];
+	s16 hw_vol[10];
+	u8 mute_switch[10];
+	u8 sw_hw_switch[10];
+	u8 pad3[6];
+	s16 master_vol;
+} __attribute__((packed));
+
+struct scarlett2_usb_packet {
+	__le32 cmd;
+	__le16 size;
+	__le16 seq;
+	__le32 error;
+	__le32 pad;
+	u8 data[0];
+};
+
+struct snd_us16x08_control_params {
+	const struct snd_kcontrol_new *kcontrol_new;
+	int control_id;
+	int type;
+	int num_channels;
+	const char *name;
+	int default_val;
+};
+
+struct snd_us16x08_comp_store {
+	u8 val[96];
+};
+
+struct snd_us16x08_eq_store {
+	u8 val[256];
+};
+
+struct snd_us16x08_meter_store {
+	int meter_level[16];
+	int master_level[2];
+	int comp_index;
+	int comp_active_index;
+	int comp_level[16];
+	struct snd_us16x08_comp_store *comp_store;
+};
+
+struct s1810c_ctl_packet {
+	u32 a;
+	u32 b;
+	u32 fixed1;
+	u32 fixed2;
+	u32 c;
+	u32 d;
+	u32 e;
+};
+
+struct s1810_mixer_state {
+	uint16_t seqnum;
+	struct mutex usb_mutex;
+	struct mutex data_mutex;
+};
+
+struct s1810c_state_packet {
+	u32 fields[63];
+};
+
+enum {
+	UAC3_PD_STATE_D0 = 0,
+	UAC3_PD_STATE_D1 = 1,
+	UAC3_PD_STATE_D2 = 2,
+};
+
+struct uac3_power_domain_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bPowerDomainID;
+	__le16 waRecoveryTime1;
+	__le16 waRecoveryTime2;
+	__u8 bNrEntities;
+	__u8 baEntityID[0];
+} __attribute__((packed));
+
+typedef int (*quirk_func_t)(struct snd_usb_audio *, struct usb_interface *, struct usb_driver *, const struct snd_usb_audio_quirk *);
+
+typedef s8 int8_t;
+
+struct snd_usb_midi_endpoint_info {
+	int8_t out_ep;
+	uint8_t out_interval;
+	int8_t in_ep;
+	uint8_t in_interval;
+	uint16_t out_cables;
+	uint16_t in_cables;
+	int16_t assoc_in_jacks[16];
+	int16_t assoc_out_jacks[16];
+};
+
+struct usb_audio_quirk_flags_table {
+	u32 id;
+	u32 flags;
+};
+
+enum quirk_type {
+	QUIRK_IGNORE_INTERFACE = 0,
+	QUIRK_COMPOSITE = 1,
+	QUIRK_AUTODETECT = 2,
+	QUIRK_MIDI_STANDARD_INTERFACE = 3,
+	QUIRK_MIDI_FIXED_ENDPOINT = 4,
+	QUIRK_MIDI_YAMAHA = 5,
+	QUIRK_MIDI_ROLAND = 6,
+	QUIRK_MIDI_MIDIMAN = 7,
+	QUIRK_MIDI_NOVATION = 8,
+	QUIRK_MIDI_RAW_BYTES = 9,
+	QUIRK_MIDI_EMAGIC = 10,
+	QUIRK_MIDI_CME = 11,
+	QUIRK_MIDI_AKAI = 12,
+	QUIRK_MIDI_US122L = 13,
+	QUIRK_MIDI_FTDI = 14,
+	QUIRK_MIDI_CH345 = 15,
+	QUIRK_AUDIO_STANDARD_INTERFACE = 16,
+	QUIRK_AUDIO_FIXED_ENDPOINT = 17,
+	QUIRK_AUDIO_EDIROL_UAXX = 18,
+	QUIRK_AUDIO_STANDARD_MIXER = 19,
+	QUIRK_TYPE_COUNT = 20,
+};
+
+enum {
+	EMU_QUIRK_SR_44100HZ = 0,
+	EMU_QUIRK_SR_48000HZ = 1,
+	EMU_QUIRK_SR_88200HZ = 2,
+	EMU_QUIRK_SR_96000HZ = 3,
+	EMU_QUIRK_SR_176400HZ = 4,
+	EMU_QUIRK_SR_192000HZ = 5,
+};
+
+struct usb_ms_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bNumEmbMIDIJack;
+	__u8 baAssocJackID[0];
+};
+
+struct uac1_as_header_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bTerminalLink;
+	__u8 bDelay;
+	__le16 wFormatTag;
+} __attribute__((packed));
+
+struct usb_midi_out_jack_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bJackType;
+	__u8 bJackID;
+	__u8 bNrInputPins;
+	struct usb_midi_source_pin pins[0];
+};
+
+struct uac3_iso_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le32 bmControls;
+	__u8 bLockDelayUnits;
+	__le16 wLockDelay;
+} __attribute__((packed));
+
+struct uac3_hc_descriptor_header {
+	__le16 wLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__le16 wDescriptorID;
+};
+
+struct uac3_cluster_segment_descriptor {
+	__le16 wLength;
+	__u8 bSegmentType;
+} __attribute__((packed));
+
+struct uac3_cluster_information_segment_descriptor {
+	__le16 wLength;
+	__u8 bSegmentType;
+	__u8 bChPurpose;
+	__u8 bChRelationship;
+	__u8 bChGroupID;
+};
+
+struct uac_iso_endpoint_descriptor {
+	__u8 bLength;
+	__u8 bDescriptorType;
+	__u8 bDescriptorSubtype;
+	__u8 bmAttributes;
+	__u8 bLockDelayUnits;
+	__le16 wLockDelay;
+} __attribute__((packed));
+
+struct usb_desc_validator {
+	unsigned char protocol;
+	unsigned char type;
+	bool (*func)(const void *, const struct usb_desc_validator *);
+	size_t size;
+};
+
+struct snd_usb_midi_in_endpoint;
+
+struct snd_usb_midi_out_endpoint;
+
+struct usb_protocol_ops {
+	void (*input)(struct snd_usb_midi_in_endpoint *, uint8_t *, int);
+	void (*output)(struct snd_usb_midi_out_endpoint *, struct urb *);
+	void (*output_packet)(struct urb *, uint8_t, uint8_t, uint8_t, uint8_t);
+	void (*init_out_endpoint)(struct snd_usb_midi_out_endpoint *);
+	void (*finish_out_endpoint)(struct snd_usb_midi_out_endpoint *);
+};
+
+struct usbmidi_in_port {
+	struct snd_rawmidi_substream *substream;
+	u8 running_status_length;
+};
+
+struct snd_usb_midi;
+
+struct snd_usb_midi_in_endpoint {
+	struct snd_usb_midi *umidi;
+	struct urb *urbs[7];
+	struct usbmidi_in_port ports[16];
+	u8 seen_f5;
+	bool in_sysex;
+	u8 last_cin;
+	u8 error_resubmit;
+	int current_port;
+};
+
+struct snd_usb_midi_endpoint {
+	struct snd_usb_midi_out_endpoint *out;
+	struct snd_usb_midi_in_endpoint *in;
+};
+
+struct snd_usb_midi {
+	struct usb_device *dev;
+	struct snd_card *card;
+	struct usb_interface *iface;
+	const struct snd_usb_audio_quirk *quirk;
+	struct snd_rawmidi *rmidi;
+	const struct usb_protocol_ops *usb_protocol_ops;
+	struct list_head list;
+	struct timer_list error_timer;
+	spinlock_t disc_lock;
+	struct rw_semaphore disc_rwsem;
+	struct mutex mutex;
+	u32 usb_id;
+	int next_midi_device;
+	struct snd_usb_midi_endpoint endpoints[2];
+	unsigned long input_triggered;
+	unsigned int opened[2];
+	unsigned char disconnected;
+	unsigned char input_running;
+	struct snd_kcontrol *roland_load_ctl;
+};
+
+struct snd_seq_addr {
+	unsigned char client;
+	unsigned char port;
+};
+
+struct snd_seq_port_info {
+	struct snd_seq_addr addr;
+	char name[64];
+	unsigned int capability;
+	unsigned int type;
+	int midi_channels;
+	int midi_voices;
+	int synth_voices;
+	int read_use;
+	int write_use;
+	void *kernel;
+	unsigned int flags;
+	unsigned char time_queue;
+	unsigned char direction;
+	unsigned char ump_group;
+	char reserved[57];
+};
+
+struct out_urb_context {
+	struct urb *urb;
+	struct snd_usb_midi_out_endpoint *ep;
+};
+
+struct usbmidi_out_port {
+	struct snd_usb_midi_out_endpoint *ep;
+	struct snd_rawmidi_substream *substream;
+	int active;
+	uint8_t cable;
+	uint8_t state;
+	uint8_t data[2];
+};
+
+struct snd_usb_midi_out_endpoint {
+	struct snd_usb_midi *umidi;
+	struct out_urb_context urbs[7];
+	unsigned int active_urbs;
+	unsigned int drain_urbs;
+	int max_transfer;
+	struct work_struct work;
+	unsigned int next_urb;
+	spinlock_t buffer_lock;
+	struct usbmidi_out_port ports[16];
+	int current_port;
+	wait_queue_head_t drain_wait;
+};
+
+struct port_info {
+	u32 id;
+	short port;
+	short voices;
+	const char *name;
+	unsigned int seq_flags;
+};
+
+struct snd_soc_acpi_codecs {
+	int num_codecs;
+	u8 codecs[48];
+};
+
+struct snd_soc_acpi_link_adr;
+
+struct snd_soc_dai_driver;
+
+struct snd_soc_acpi_mach_params {
+	u32 acpi_ipc_irq_index;
+	const char *platform;
+	u32 codec_mask;
+	u32 dmic_num;
+	bool common_hdmi_codec_drv;
+	u32 link_mask;
+	const struct snd_soc_acpi_link_adr *links;
+	u32 i2s_link_mask;
+	u32 num_dai_drivers;
+	struct snd_soc_dai_driver *dai_drivers;
+	unsigned short subsystem_vendor;
+	unsigned short subsystem_device;
+	bool subsystem_id_set;
+};
+
+struct snd_soc_acpi_mach {
+	u8 id[16];
+	const char *uid;
+	const struct snd_soc_acpi_codecs *comp_ids;
+	const u32 link_mask;
+	const struct snd_soc_acpi_link_adr *links;
+	const char *drv_name;
+	const char *fw_filename;
+	const char *tplg_filename;
+	const char *board;
+	struct snd_soc_acpi_mach * (*machine_quirk)(void *);
+	const void *quirk_data;
+	void *pdata;
+	struct snd_soc_acpi_mach_params mach_params;
+	const char *sof_tplg_filename;
+	const u32 tplg_quirk_mask;
+};
+
+struct snd_soc_acpi_adr_device;
+
+struct snd_soc_acpi_link_adr {
+	const u32 mask;
+	const u32 num_adr;
+	const struct snd_soc_acpi_adr_device *adr_d;
+};
+
+struct snd_soc_acpi_endpoint;
+
+struct snd_soc_acpi_adr_device {
+	const u64 adr;
+	const u8 num_endpoints;
+	const struct snd_soc_acpi_endpoint *endpoints;
+	const char *name_prefix;
+};
+
+struct snd_soc_acpi_endpoint {
+	u8 num;
+	u8 aggregated;
+	u8 group_position;
+	u8 group_id;
+};
+
+struct snd_soc_acpi_package_context {
+	char *name;
+	int length;
+	struct acpi_buffer *format;
+	struct acpi_buffer *state;
+	bool data_valid;
+};
+
+struct sdw_slave_id {
+	__u16 mfg_id;
+	__u16 part_id;
+	__u8 class_id;
+	__u8 unique_id;
+	__u8 sdw_version: 4;
+};
+
+struct sdw_extended_slave_id {
+	int link_id;
+	struct sdw_slave_id id;
+};
+
+struct snd_soc_card;
+
+typedef void (*btf_trace_snd_soc_bias_level_start)(void *, struct snd_soc_card *, int);
+
+enum snd_soc_pcm_subclass {
+	SND_SOC_PCM_CLASS_PCM = 0,
+	SND_SOC_PCM_CLASS_BE = 1,
+};
+
+enum snd_soc_bias_level {
+	SND_SOC_BIAS_OFF = 0,
+	SND_SOC_BIAS_STANDBY = 1,
+	SND_SOC_BIAS_PREPARE = 2,
+	SND_SOC_BIAS_ON = 3,
+};
+
+struct snd_soc_component;
+
+struct snd_soc_dapm_widget;
+
+struct snd_soc_dapm_context {
+	enum snd_soc_bias_level bias_level;
+	unsigned int idle_bias_off: 1;
+	unsigned int suspend_bias_off: 1;
+	struct device *dev;
+	struct snd_soc_component *component;
+	struct snd_soc_card *card;
+	enum snd_soc_bias_level target_bias_level;
+	struct list_head list;
+	struct snd_soc_dapm_widget *wcache_sink;
+	struct snd_soc_dapm_widget *wcache_source;
+	struct dentry *debugfs_dapm;
+};
+
+struct snd_soc_dapm_stats {
+	int power_checks;
+	int path_checks;
+	int neighbour_checks;
+};
+
+struct snd_soc_dai_link;
+
+struct snd_soc_codec_conf;
+
+struct snd_soc_aux_dev;
+
+struct snd_soc_dapm_route;
+
+struct snd_soc_dapm_update;
+
+struct snd_soc_card {
+	const char *name;
+	const char *long_name;
+	const char *driver_name;
+	const char *components;
+	char dmi_longname[80];
+	unsigned short pci_subsystem_vendor;
+	unsigned short pci_subsystem_device;
+	bool pci_subsystem_set;
+	char topology_shortname[32];
+	struct device *dev;
+	struct snd_card *snd_card;
+	struct module *owner;
+	struct mutex mutex;
+	struct mutex dapm_mutex;
+	struct mutex pcm_mutex;
+	enum snd_soc_pcm_subclass pcm_subclass;
+	int (*probe)(struct snd_soc_card *);
+	int (*late_probe)(struct snd_soc_card *);
+	void (*fixup_controls)(struct snd_soc_card *);
+	int (*remove)(struct snd_soc_card *);
+	int (*suspend_pre)(struct snd_soc_card *);
+	int (*suspend_post)(struct snd_soc_card *);
+	int (*resume_pre)(struct snd_soc_card *);
+	int (*resume_post)(struct snd_soc_card *);
+	int (*set_bias_level)(struct snd_soc_card *, struct snd_soc_dapm_context *, enum snd_soc_bias_level);
+	int (*set_bias_level_post)(struct snd_soc_card *, struct snd_soc_dapm_context *, enum snd_soc_bias_level);
+	int (*add_dai_link)(struct snd_soc_card *, struct snd_soc_dai_link *);
+	void (*remove_dai_link)(struct snd_soc_card *, struct snd_soc_dai_link *);
+	long pmdown_time;
+	struct snd_soc_dai_link *dai_link;
+	int num_links;
+	struct list_head rtd_list;
+	int num_rtd;
+	struct snd_soc_codec_conf *codec_conf;
+	int num_configs;
+	struct snd_soc_aux_dev *aux_dev;
+	int num_aux_devs;
+	struct list_head aux_comp_list;
+	const struct snd_kcontrol_new *controls;
+	int num_controls;
+	const struct snd_soc_dapm_widget *dapm_widgets;
+	int num_dapm_widgets;
+	const struct snd_soc_dapm_route *dapm_routes;
+	int num_dapm_routes;
+	const struct snd_soc_dapm_widget *of_dapm_widgets;
+	int num_of_dapm_widgets;
+	const struct snd_soc_dapm_route *of_dapm_routes;
+	int num_of_dapm_routes;
+	struct list_head component_dev_list;
+	struct list_head list;
+	struct list_head widgets;
+	struct list_head paths;
+	struct list_head dapm_list;
+	struct list_head dapm_dirty;
+	struct list_head dobj_list;
+	struct snd_soc_dapm_context dapm;
+	struct snd_soc_dapm_stats dapm_stats;
+	struct snd_soc_dapm_update *update;
+	struct dentry *debugfs_card_root;
+	struct work_struct deferred_resume_work;
+	u32 pop_time;
+	unsigned int instantiated: 1;
+	unsigned int topology_shortname_created: 1;
+	unsigned int fully_routed: 1;
+	unsigned int disable_route_checks: 1;
+	unsigned int probed: 1;
+	unsigned int component_chaining: 1;
+	void *drvdata;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+};
+
+struct snd_soc_component_driver;
+
+struct snd_soc_component {
+	const char *name;
+	int id;
+	const char *name_prefix;
+	struct device *dev;
+	struct snd_soc_card *card;
+	unsigned int active;
+	unsigned int suspended: 1;
+	struct list_head list;
+	struct list_head card_aux_list;
+	struct list_head card_list;
+	const struct snd_soc_component_driver *driver;
+	struct list_head dai_list;
+	int num_dai;
+	struct regmap *regmap;
+	int val_bytes;
+	struct mutex io_mutex;
+	struct list_head dobj_list;
+	struct snd_soc_dapm_context dapm;
+	int (*init)(struct snd_soc_component *);
+	void *mark_module;
+	struct snd_pcm_substream *mark_open;
+	struct snd_pcm_substream *mark_hw_params;
+	struct snd_pcm_substream *mark_trigger;
+	struct snd_compr_stream *mark_compr_open;
+	void *mark_pm;
+	struct dentry *debugfs_root;
+	const char *debugfs_prefix;
+};
+
+enum snd_soc_dapm_type {
+	snd_soc_dapm_input = 0,
+	snd_soc_dapm_output = 1,
+	snd_soc_dapm_mux = 2,
+	snd_soc_dapm_demux = 3,
+	snd_soc_dapm_mixer = 4,
+	snd_soc_dapm_mixer_named_ctl = 5,
+	snd_soc_dapm_pga = 6,
+	snd_soc_dapm_out_drv = 7,
+	snd_soc_dapm_adc = 8,
+	snd_soc_dapm_dac = 9,
+	snd_soc_dapm_micbias = 10,
+	snd_soc_dapm_mic = 11,
+	snd_soc_dapm_hp = 12,
+	snd_soc_dapm_spk = 13,
+	snd_soc_dapm_line = 14,
+	snd_soc_dapm_switch = 15,
+	snd_soc_dapm_vmid = 16,
+	snd_soc_dapm_pre = 17,
+	snd_soc_dapm_post = 18,
+	snd_soc_dapm_supply = 19,
+	snd_soc_dapm_pinctrl = 20,
+	snd_soc_dapm_regulator_supply = 21,
+	snd_soc_dapm_clock_supply = 22,
+	snd_soc_dapm_aif_in = 23,
+	snd_soc_dapm_aif_out = 24,
+	snd_soc_dapm_siggen = 25,
+	snd_soc_dapm_sink = 26,
+	snd_soc_dapm_dai_in = 27,
+	snd_soc_dapm_dai_out = 28,
+	snd_soc_dapm_dai_link = 29,
+	snd_soc_dapm_kcontrol = 30,
+	snd_soc_dapm_buffer = 31,
+	snd_soc_dapm_scheduler = 32,
+	snd_soc_dapm_effect = 33,
+	snd_soc_dapm_src = 34,
+	snd_soc_dapm_asrc = 35,
+	snd_soc_dapm_encoder = 36,
+	snd_soc_dapm_decoder = 37,
+	SND_SOC_DAPM_TYPE_COUNT = 38,
+};
+
+enum snd_soc_trigger_order {
+	SND_SOC_TRIGGER_ORDER_DEFAULT = 0,
+	SND_SOC_TRIGGER_ORDER_LDC = 1,
+	SND_SOC_TRIGGER_ORDER_MAX = 2,
+};
+
+struct snd_soc_pcm_runtime;
+
+struct snd_soc_jack;
+
+struct snd_compress_ops;
+
+struct snd_soc_component_driver {
+	const char *name;
+	const struct snd_kcontrol_new *controls;
+	unsigned int num_controls;
+	const struct snd_soc_dapm_widget *dapm_widgets;
+	unsigned int num_dapm_widgets;
+	const struct snd_soc_dapm_route *dapm_routes;
+	unsigned int num_dapm_routes;
+	int (*probe)(struct snd_soc_component *);
+	void (*remove)(struct snd_soc_component *);
+	int (*suspend)(struct snd_soc_component *);
+	int (*resume)(struct snd_soc_component *);
+	unsigned int (*read)(struct snd_soc_component *, unsigned int);
+	int (*write)(struct snd_soc_component *, unsigned int, unsigned int);
+	int (*pcm_construct)(struct snd_soc_component *, struct snd_soc_pcm_runtime *);
+	void (*pcm_destruct)(struct snd_soc_component *, struct snd_pcm *);
+	int (*set_sysclk)(struct snd_soc_component *, int, int, unsigned int, int);
+	int (*set_pll)(struct snd_soc_component *, int, int, unsigned int, unsigned int);
+	int (*set_jack)(struct snd_soc_component *, struct snd_soc_jack *, void *);
+	int (*get_jack_type)(struct snd_soc_component *);
+	int (*of_xlate_dai_name)(struct snd_soc_component *, const struct of_phandle_args *, const char **);
+	int (*of_xlate_dai_id)(struct snd_soc_component *, struct device_node *);
+	void (*seq_notifier)(struct snd_soc_component *, enum snd_soc_dapm_type, int);
+	int (*stream_event)(struct snd_soc_component *, int);
+	int (*set_bias_level)(struct snd_soc_component *, enum snd_soc_bias_level);
+	int (*open)(struct snd_soc_component *, struct snd_pcm_substream *);
+	int (*close)(struct snd_soc_component *, struct snd_pcm_substream *);
+	int (*ioctl)(struct snd_soc_component *, struct snd_pcm_substream *, unsigned int, void *);
+	int (*hw_params)(struct snd_soc_component *, struct snd_pcm_substream *, struct snd_pcm_hw_params *);
+	int (*hw_free)(struct snd_soc_component *, struct snd_pcm_substream *);
+	int (*prepare)(struct snd_soc_component *, struct snd_pcm_substream *);
+	int (*trigger)(struct snd_soc_component *, struct snd_pcm_substream *, int);
+	int (*sync_stop)(struct snd_soc_component *, struct snd_pcm_substream *);
+	snd_pcm_uframes_t (*pointer)(struct snd_soc_component *, struct snd_pcm_substream *);
+	int (*get_time_info)(struct snd_soc_component *, struct snd_pcm_substream *, struct timespec64 *, struct timespec64 *, struct snd_pcm_audio_tstamp_config *, struct snd_pcm_audio_tstamp_report *);
+	int (*copy)(struct snd_soc_component *, struct snd_pcm_substream *, int, unsigned long, struct iov_iter *, unsigned long);
+	struct page * (*page)(struct snd_soc_component *, struct snd_pcm_substream *, unsigned long);
+	int (*mmap)(struct snd_soc_component *, struct snd_pcm_substream *, struct vm_area_struct *);
+	int (*ack)(struct snd_soc_component *, struct snd_pcm_substream *);
+	snd_pcm_sframes_t (*delay)(struct snd_soc_component *, struct snd_pcm_substream *);
+	const struct snd_compress_ops *compress_ops;
+	int probe_order;
+	int remove_order;
+	enum snd_soc_trigger_order trigger_start;
+	enum snd_soc_trigger_order trigger_stop;
+	unsigned int module_get_upon_open: 1;
+	unsigned int idle_bias_on: 1;
+	unsigned int suspend_bias_off: 1;
+	unsigned int use_pmdown_time: 1;
+	unsigned int endianness: 1;
+	unsigned int legacy_dai_naming: 1;
+	const char *ignore_machine;
+	const char *topology_name_prefix;
+	int (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *, struct snd_pcm_hw_params *);
+	bool use_dai_pcm_id;
+	int be_pcm_base;
+	const char *debugfs_prefix;
+};
+
+enum snd_soc_dobj_type {
+	SND_SOC_DOBJ_NONE = 0,
+	SND_SOC_DOBJ_MIXER = 1,
+	SND_SOC_DOBJ_BYTES = 2,
+	SND_SOC_DOBJ_ENUM = 3,
+	SND_SOC_DOBJ_GRAPH = 4,
+	SND_SOC_DOBJ_WIDGET = 5,
+	SND_SOC_DOBJ_DAI_LINK = 6,
+	SND_SOC_DOBJ_PCM = 7,
+	SND_SOC_DOBJ_CODEC_LINK = 8,
+	SND_SOC_DOBJ_BACKEND_LINK = 9,
+};
+
+struct snd_soc_dobj_control {
+	struct snd_kcontrol *kcontrol;
+	char **dtexts;
+	unsigned long *dvalues;
+};
+
+struct snd_soc_dobj_widget {
+	unsigned int *kcontrol_type;
+};
+
+struct snd_soc_dobj {
+	enum snd_soc_dobj_type type;
+	unsigned int index;
+	struct list_head list;
+	int (*unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	union {
+		struct snd_soc_dobj_control control;
+		struct snd_soc_dobj_widget widget;
+	};
+	void *private;
+};
+
+struct snd_soc_dapm_widget {
+	enum snd_soc_dapm_type id;
+	const char *name;
+	const char *sname;
+	struct list_head list;
+	struct snd_soc_dapm_context *dapm;
+	void *priv;
+	struct regulator *regulator;
+	struct pinctrl *pinctrl;
+	int reg;
+	unsigned char shift;
+	unsigned int mask;
+	unsigned int on_val;
+	unsigned int off_val;
+	unsigned char power: 1;
+	unsigned char active: 1;
+	unsigned char connected: 1;
+	unsigned char new: 1;
+	unsigned char force: 1;
+	unsigned char ignore_suspend: 1;
+	unsigned char new_power: 1;
+	unsigned char power_checked: 1;
+	unsigned char is_supply: 1;
+	unsigned char is_ep: 2;
+	unsigned char no_wname_in_kcontrol_name: 1;
+	int subseq;
+	int (*power_check)(struct snd_soc_dapm_widget *);
+	unsigned short event_flags;
+	int (*event)(struct snd_soc_dapm_widget *, struct snd_kcontrol *, int);
+	int num_kcontrols;
+	const struct snd_kcontrol_new *kcontrol_news;
+	struct snd_kcontrol **kcontrols;
+	struct snd_soc_dobj dobj;
+	struct list_head edges[2];
+	struct list_head work_list;
+	struct list_head power_list;
+	struct list_head dirty;
+	int endpoints[2];
+	struct clk *clk;
+	int channel;
+};
+
+struct snd_soc_dapm_route {
+	const char *sink;
+	const char *control;
+	const char *source;
+	int (*connected)(struct snd_soc_dapm_widget *, struct snd_soc_dapm_widget *);
+	struct snd_soc_dobj dobj;
+};
+
+enum snd_soc_dpcm_update {
+	SND_SOC_DPCM_UPDATE_NO = 0,
+	SND_SOC_DPCM_UPDATE_BE = 1,
+	SND_SOC_DPCM_UPDATE_FE = 2,
+};
+
+enum snd_soc_dpcm_state {
+	SND_SOC_DPCM_STATE_NEW = 0,
+	SND_SOC_DPCM_STATE_OPEN = 1,
+	SND_SOC_DPCM_STATE_HW_PARAMS = 2,
+	SND_SOC_DPCM_STATE_PREPARE = 3,
+	SND_SOC_DPCM_STATE_START = 4,
+	SND_SOC_DPCM_STATE_STOP = 5,
+	SND_SOC_DPCM_STATE_PAUSED = 6,
+	SND_SOC_DPCM_STATE_SUSPEND = 7,
+	SND_SOC_DPCM_STATE_HW_FREE = 8,
+	SND_SOC_DPCM_STATE_CLOSE = 9,
+};
+
+struct snd_soc_dpcm_runtime {
+	struct list_head be_clients;
+	struct list_head fe_clients;
+	int users;
+	struct snd_pcm_hw_params hw_params;
+	enum snd_soc_dpcm_update runtime_update;
+	enum snd_soc_dpcm_state state;
+	int trigger_pending;
+	int be_start;
+	int be_pause;
+	bool fe_pause;
+};
+
+struct snd_soc_dai;
+
+struct snd_soc_pcm_runtime {
+	struct device *dev;
+	struct snd_soc_card *card;
+	struct snd_soc_dai_link *dai_link;
+	struct snd_pcm_ops ops;
+	unsigned int c2c_params_select;
+	struct snd_soc_dpcm_runtime dpcm[2];
+	struct snd_soc_dapm_widget *c2c_widget[2];
+	long pmdown_time;
+	struct snd_pcm *pcm;
+	struct snd_compr *compr;
+	struct snd_soc_dai **dais;
+	struct delayed_work delayed_work;
+	void (*close_delayed_work_func)(struct snd_soc_pcm_runtime *);
+	struct dentry *debugfs_dpcm_root;
+	unsigned int num;
+	struct list_head list;
+	struct snd_pcm_substream *mark_startup;
+	struct snd_pcm_substream *mark_hw_params;
+	struct snd_pcm_substream *mark_trigger;
+	struct snd_compr_stream *mark_compr_startup;
+	unsigned int pop_wait: 1;
+	unsigned int fe_compr: 1;
+	bool initialized;
+	int num_components;
+	u64 android_kabi_reserved1;
+	struct snd_soc_component *components[0];
+};
+
+enum snd_soc_dpcm_trigger {
+	SND_SOC_DPCM_TRIGGER_PRE = 0,
+	SND_SOC_DPCM_TRIGGER_POST = 1,
+	SND_SOC_DPCM_TRIGGER_BESPOKE = 2,
+};
+
+struct snd_soc_dai_link_component;
+
+struct snd_soc_dai_link_codec_ch_map;
+
+struct snd_soc_pcm_stream;
+
+struct snd_soc_ops;
+
+struct snd_soc_compr_ops;
+
+struct snd_soc_dai_link {
+	const char *name;
+	const char *stream_name;
+	struct snd_soc_dai_link_component *cpus;
+	unsigned int num_cpus;
+	struct snd_soc_dai_link_component *codecs;
+	unsigned int num_codecs;
+	struct snd_soc_dai_link_codec_ch_map *codec_ch_maps;
+	struct snd_soc_dai_link_component *platforms;
+	unsigned int num_platforms;
+	int id;
+	const struct snd_soc_pcm_stream *c2c_params;
+	unsigned int num_c2c_params;
+	unsigned int dai_fmt;
+	enum snd_soc_dpcm_trigger trigger[2];
+	int (*init)(struct snd_soc_pcm_runtime *);
+	void (*exit)(struct snd_soc_pcm_runtime *);
+	int (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *, struct snd_pcm_hw_params *);
+	const struct snd_soc_ops *ops;
+	const struct snd_soc_compr_ops *compr_ops;
+	enum snd_soc_trigger_order trigger_start;
+	enum snd_soc_trigger_order trigger_stop;
+	unsigned int nonatomic: 1;
+	unsigned int playback_only: 1;
+	unsigned int capture_only: 1;
+	unsigned int ignore_suspend: 1;
+	unsigned int symmetric_rate: 1;
+	unsigned int symmetric_channels: 1;
+	unsigned int symmetric_sample_bits: 1;
+	unsigned int no_pcm: 1;
+	unsigned int dynamic: 1;
+	unsigned int dpcm_capture: 1;
+	unsigned int dpcm_playback: 1;
+	unsigned int dpcm_merged_format: 1;
+	unsigned int dpcm_merged_chan: 1;
+	unsigned int dpcm_merged_rate: 1;
+	unsigned int ignore_pmdown_time: 1;
+	unsigned int ignore: 1;
+	struct snd_soc_dobj dobj;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_soc_dai_link_component {
+	const char *name;
+	struct device_node *of_node;
+	const char *dai_name;
+	struct of_phandle_args *dai_args;
+};
+
+struct snd_soc_dai_link_codec_ch_map {
+	unsigned int connected_cpu_id;
+	unsigned int ch_mask;
+};
+
+struct snd_soc_pcm_stream {
+	const char *stream_name;
+	u64 formats;
+	unsigned int rates;
+	unsigned int rate_min;
+	unsigned int rate_max;
+	unsigned int channels_min;
+	unsigned int channels_max;
+	unsigned int sig_bits;
+};
+
+struct snd_soc_ops {
+	int (*startup)(struct snd_pcm_substream *);
+	void (*shutdown)(struct snd_pcm_substream *);
+	int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
+	int (*hw_free)(struct snd_pcm_substream *);
+	int (*prepare)(struct snd_pcm_substream *);
+	int (*trigger)(struct snd_pcm_substream *, int);
+};
+
+struct snd_soc_compr_ops {
+	int (*startup)(struct snd_compr_stream *);
+	void (*shutdown)(struct snd_compr_stream *);
+	int (*set_params)(struct snd_compr_stream *);
+};
+
+struct snd_soc_dai_stream {
+	struct snd_soc_dapm_widget *widget;
+	unsigned int active;
+	unsigned int tdm_mask;
+	void *dma_data;
+};
+
+struct snd_soc_dai {
+	const char *name;
+	int id;
+	struct device *dev;
+	struct snd_soc_dai_driver *driver;
+	struct snd_soc_dai_stream stream[2];
+	unsigned int rate;
+	unsigned int channels;
+	unsigned int sample_bits;
+	struct snd_soc_component *component;
+	struct list_head list;
+	struct snd_pcm_substream *mark_startup;
+	struct snd_pcm_substream *mark_hw_params;
+	struct snd_pcm_substream *mark_trigger;
+	struct snd_compr_stream *mark_compr_startup;
+	unsigned int probed: 1;
+};
+
+struct snd_soc_dai_ops;
+
+struct snd_soc_cdai_ops;
+
+struct snd_soc_dai_driver {
+	const char *name;
+	unsigned int id;
+	unsigned int base;
+	struct snd_soc_dobj dobj;
+	struct of_phandle_args *dai_args;
+	const struct snd_soc_dai_ops *ops;
+	const struct snd_soc_cdai_ops *cops;
+	struct snd_soc_pcm_stream capture;
+	struct snd_soc_pcm_stream playback;
+	unsigned int symmetric_rate: 1;
+	unsigned int symmetric_channels: 1;
+	unsigned int symmetric_sample_bits: 1;
+};
+
+struct snd_soc_dai_ops {
+	int (*probe)(struct snd_soc_dai *);
+	int (*remove)(struct snd_soc_dai *);
+	int (*compress_new)(struct snd_soc_pcm_runtime *, int);
+	int (*pcm_new)(struct snd_soc_pcm_runtime *, struct snd_soc_dai *);
+	int (*set_sysclk)(struct snd_soc_dai *, int, unsigned int, int);
+	int (*set_pll)(struct snd_soc_dai *, int, int, unsigned int, unsigned int);
+	int (*set_clkdiv)(struct snd_soc_dai *, int, int);
+	int (*set_bclk_ratio)(struct snd_soc_dai *, unsigned int);
+	int (*set_fmt)(struct snd_soc_dai *, unsigned int);
+	int (*xlate_tdm_slot_mask)(unsigned int, unsigned int *, unsigned int *);
+	int (*set_tdm_slot)(struct snd_soc_dai *, unsigned int, unsigned int, int, int);
+	int (*set_channel_map)(struct snd_soc_dai *, unsigned int, unsigned int *, unsigned int, unsigned int *);
+	int (*get_channel_map)(struct snd_soc_dai *, unsigned int *, unsigned int *, unsigned int *, unsigned int *);
+	int (*set_tristate)(struct snd_soc_dai *, int);
+	int (*set_stream)(struct snd_soc_dai *, void *, int);
+	void * (*get_stream)(struct snd_soc_dai *, int);
+	int (*mute_stream)(struct snd_soc_dai *, int, int);
+	int (*startup)(struct snd_pcm_substream *, struct snd_soc_dai *);
+	void (*shutdown)(struct snd_pcm_substream *, struct snd_soc_dai *);
+	int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *, struct snd_soc_dai *);
+	int (*hw_free)(struct snd_pcm_substream *, struct snd_soc_dai *);
+	int (*prepare)(struct snd_pcm_substream *, struct snd_soc_dai *);
+	int (*trigger)(struct snd_pcm_substream *, int, struct snd_soc_dai *);
+	int (*bespoke_trigger)(struct snd_pcm_substream *, int, struct snd_soc_dai *);
+	snd_pcm_sframes_t (*delay)(struct snd_pcm_substream *, struct snd_soc_dai *);
+	u64 *auto_selectable_formats;
+	int num_auto_selectable_formats;
+	int probe_order;
+	int remove_order;
+	unsigned int no_capture_mute: 1;
+	unsigned int mute_unmute_on_trigger: 1;
+};
+
+struct snd_soc_cdai_ops {
+	int (*startup)(struct snd_compr_stream *, struct snd_soc_dai *);
+	int (*shutdown)(struct snd_compr_stream *, struct snd_soc_dai *);
+	int (*set_params)(struct snd_compr_stream *, struct snd_compr_params *, struct snd_soc_dai *);
+	int (*get_params)(struct snd_compr_stream *, struct snd_codec *, struct snd_soc_dai *);
+	int (*set_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *, struct snd_soc_dai *);
+	int (*get_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *, struct snd_soc_dai *);
+	int (*trigger)(struct snd_compr_stream *, int, struct snd_soc_dai *);
+	int (*pointer)(struct snd_compr_stream *, struct snd_compr_tstamp *, struct snd_soc_dai *);
+	int (*ack)(struct snd_compr_stream *, size_t, struct snd_soc_dai *);
+};
+
+struct snd_soc_jack {
+	struct mutex mutex;
+	struct snd_jack *jack;
+	struct snd_soc_card *card;
+	struct list_head pins;
+	int status;
+	struct blocking_notifier_head notifier;
+	struct list_head jack_zones;
+};
+
+struct snd_compress_ops {
+	int (*open)(struct snd_soc_component *, struct snd_compr_stream *);
+	int (*free)(struct snd_soc_component *, struct snd_compr_stream *);
+	int (*set_params)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_params *);
+	int (*get_params)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_codec *);
+	int (*set_metadata)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_metadata *);
+	int (*get_metadata)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_metadata *);
+	int (*trigger)(struct snd_soc_component *, struct snd_compr_stream *, int);
+	int (*pointer)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_tstamp *);
+	int (*copy)(struct snd_soc_component *, struct snd_compr_stream *, char __attribute__((btf_type_tag("user"))) *, size_t);
+	int (*mmap)(struct snd_soc_component *, struct snd_compr_stream *, struct vm_area_struct *);
+	int (*ack)(struct snd_soc_component *, struct snd_compr_stream *, size_t);
+	int (*get_caps)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_caps *);
+	int (*get_codec_caps)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_codec_caps *);
+};
+
+struct snd_soc_codec_conf {
+	struct snd_soc_dai_link_component dlc;
+	const char *name_prefix;
+};
+
+struct snd_soc_aux_dev {
+	struct snd_soc_dai_link_component dlc;
+	int (*init)(struct snd_soc_component *);
+};
+
+struct snd_soc_dapm_update {
+	struct snd_kcontrol *kcontrol;
+	int reg;
+	int mask;
+	int val;
+	int reg2;
+	int mask2;
+	int val2;
+	bool has_second_set;
+};
+
+typedef void (*btf_trace_snd_soc_bias_level_done)(void *, struct snd_soc_card *, int);
+
+typedef void (*btf_trace_snd_soc_dapm_start)(void *, struct snd_soc_card *);
+
+typedef void (*btf_trace_snd_soc_dapm_done)(void *, struct snd_soc_card *);
+
+typedef void (*btf_trace_snd_soc_dapm_widget_power)(void *, struct snd_soc_dapm_widget *, int);
+
+typedef void (*btf_trace_snd_soc_dapm_widget_event_start)(void *, struct snd_soc_dapm_widget *, int);
+
+typedef void (*btf_trace_snd_soc_dapm_widget_event_done)(void *, struct snd_soc_dapm_widget *, int);
+
+typedef void (*btf_trace_snd_soc_dapm_walk_done)(void *, struct snd_soc_card *);
+
+enum snd_soc_dapm_direction {
+	SND_SOC_DAPM_DIR_IN = 0,
+	SND_SOC_DAPM_DIR_OUT = 1,
+};
+
+struct snd_soc_dapm_path;
+
+typedef void (*btf_trace_snd_soc_dapm_path)(void *, struct snd_soc_dapm_widget *, enum snd_soc_dapm_direction, struct snd_soc_dapm_path *);
+
+struct snd_soc_dapm_path {
+	const char *name;
+	union {
+		struct {
+			struct snd_soc_dapm_widget *source;
+			struct snd_soc_dapm_widget *sink;
+		};
+		struct snd_soc_dapm_widget *node[2];
+	};
+	u32 connect: 1;
+	u32 walking: 1;
+	u32 weak: 1;
+	u32 is_supply: 1;
+	int (*connected)(struct snd_soc_dapm_widget *, struct snd_soc_dapm_widget *);
+	struct list_head list_node[2];
+	struct list_head list_kcontrol;
+	struct list_head list;
+};
+
+typedef void (*btf_trace_snd_soc_dapm_connected)(void *, int, int);
+
+typedef void (*btf_trace_snd_soc_jack_irq)(void *, const char *);
+
+typedef void (*btf_trace_snd_soc_jack_report)(void *, struct snd_soc_jack *, int, int);
+
+typedef void (*btf_trace_snd_soc_jack_notify)(void *, struct snd_soc_jack *, int);
+
+struct trace_event_raw_snd_soc_card {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_dapm_basic {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_dapm_widget {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_dapm_walk_done {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int power_checks;
+	int path_checks;
+	int neighbour_checks;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_dapm_path {
+	struct trace_entry ent;
+	u32 __data_loc_wname;
+	u32 __data_loc_pname;
+	u32 __data_loc_pnname;
+	int path_node;
+	int path_connect;
+	int path_dir;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_dapm_connected {
+	struct trace_entry ent;
+	int paths;
+	int stream;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_jack_irq {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_jack_report {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int mask;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_raw_snd_soc_jack_notify {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	int val;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_snd_soc_card {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_dapm_basic {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_dapm_widget {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_dapm_walk_done {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_jack_irq {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_jack_report {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_jack_notify {
+	u32 name;
+};
+
+struct trace_event_data_offsets_snd_soc_dapm_path {
+	u32 wname;
+	u32 pname;
+	u32 pnname;
+};
+
+struct trace_event_data_offsets_snd_soc_dapm_connected {};
+
+struct soc_mixer_control {
+	int min;
+	int max;
+	int platform_max;
+	int reg;
+	int rreg;
+	unsigned int shift;
+	unsigned int rshift;
+	unsigned int sign_bit;
+	unsigned int invert: 1;
+	unsigned int autodisable: 1;
+	struct snd_soc_dobj dobj;
+	u64 android_kabi_reserved1;
+};
+
+struct soc_enum {
+	int reg;
+	unsigned char shift_l;
+	unsigned char shift_r;
+	unsigned int items;
+	unsigned int mask;
+	const char * const *texts;
+	const unsigned int *values;
+	unsigned int autodisable: 1;
+	struct snd_soc_dobj dobj;
+	u64 android_kabi_reserved1;
+};
+
+struct snd_soc_dapm_widget_list {
+	int num_widgets;
+	struct snd_soc_dapm_widget *widgets[0];
+};
+
+struct dapm_kcontrol_data {
+	unsigned int value;
+	struct snd_soc_dapm_widget *widget;
+	struct list_head paths;
+	struct snd_soc_dapm_widget_list *wlist;
+};
+
+struct snd_soc_dapm_pinctrl_priv {
+	const char *active_state;
+	const char *sleep_state;
+};
+
+struct snd_soc_jack_pin {
+	struct list_head list;
+	const char *pin;
+	int mask;
+	bool invert;
+};
+
+struct snd_soc_jack_zone {
+	unsigned int min_mv;
+	unsigned int max_mv;
+	unsigned int jack_type;
+	unsigned int debounce_time;
+	struct list_head list;
+};
+
+struct snd_soc_jack_gpio {
+	unsigned int gpio;
+	unsigned int idx;
+	struct device *gpiod_dev;
+	const char *name;
+	int report;
+	int invert;
+	int debounce_time;
+	bool wake;
+	struct snd_soc_jack *jack;
+	struct delayed_work work;
+	struct notifier_block pm_notifier;
+	struct gpio_desc *desc;
+	void *data;
+	int (*jack_status_check)(void *);
+};
+
+struct jack_gpio_tbl {
+	int count;
+	struct snd_soc_jack *jack;
+	struct snd_soc_jack_gpio *gpios;
+};
+
+enum snd_soc_dpcm_link_state {
+	SND_SOC_DPCM_LINK_STATE_NEW = 0,
+	SND_SOC_DPCM_LINK_STATE_FREE = 1,
+};
+
+struct snd_soc_dpcm {
+	struct snd_soc_pcm_runtime *be;
+	struct snd_soc_pcm_runtime *fe;
+	enum snd_soc_dpcm_link_state state;
+	struct list_head list_be;
+	struct list_head list_fe;
+	struct dentry *debugfs_state;
+};
+
+struct snd_dmaengine_pcm_config {
+	int (*prepare_slave_config)(struct snd_pcm_substream *, struct snd_pcm_hw_params *, struct dma_slave_config *);
+	struct dma_chan___2 * (*compat_request_channel)(struct snd_soc_pcm_runtime *, struct snd_pcm_substream *);
+	int (*process)(struct snd_pcm_substream *, int, unsigned long, unsigned long);
+	dma_filter_fn compat_filter_fn;
+	struct device *dma_dev;
+	const char *chan_names[2];
+	const struct snd_pcm_hardware *pcm_hardware;
+	unsigned int prealloc_buffer_size;
+};
+
+struct soc_mreg_control {
+	long min;
+	long max;
+	unsigned int regbase;
+	unsigned int regcount;
+	unsigned int nbits;
+	unsigned int invert;
+};
+
+struct soc_bytes {
+	int base;
+	int num_regs;
+	u32 mask;
+};
+
+struct soc_bytes_ext {
+	int max;
+	struct snd_soc_dobj dobj;
+	int (*get)(struct snd_kcontrol *, unsigned int __attribute__((btf_type_tag("user"))) *, unsigned int);
+	int (*put)(struct snd_kcontrol *, const unsigned int __attribute__((btf_type_tag("user"))) *, unsigned int);
+};
+
+struct snd_soc_tplg_kcontrol_ops {
+	u32 id;
+	int (*get)(struct snd_kcontrol *, struct snd_ctl_elem_value *);
+	int (*put)(struct snd_kcontrol *, struct snd_ctl_elem_value *);
+	int (*info)(struct snd_kcontrol *, struct snd_ctl_elem_info *);
+};
+
+struct soc_tplg_map {
+	int uid;
+	int kid;
+};
+
+struct snd_soc_tplg_hdr {
+	__le32 magic;
+	__le32 abi;
+	__le32 version;
+	__le32 type;
+	__le32 size;
+	__le32 vendor_type;
+	__le32 payload_size;
+	__le32 index;
+	__le32 count;
+};
+
+struct snd_soc_tplg_io_ops {
+	__le32 get;
+	__le32 put;
+	__le32 info;
+};
+
+struct snd_soc_tplg_tlv_dbscale {
+	__le32 min;
+	__le32 step;
+	__le32 mute;
+};
+
+struct snd_soc_tplg_ctl_tlv {
+	__le32 size;
+	__le32 type;
+	union {
+		__le32 data[32];
+		struct snd_soc_tplg_tlv_dbscale scale;
+	};
+};
+
+struct snd_soc_tplg_ctl_hdr {
+	__le32 size;
+	__le32 type;
+	char name[44];
+	__le32 access;
+	struct snd_soc_tplg_io_ops ops;
+	struct snd_soc_tplg_ctl_tlv tlv;
+};
+
+struct snd_soc_tplg_channel {
+	__le32 size;
+	__le32 reg;
+	__le32 shift;
+	__le32 id;
+};
+
+struct snd_soc_tplg_vendor_uuid_elem {
+	__le32 token;
+	char uuid[16];
+};
+
+struct snd_soc_tplg_vendor_value_elem {
+	__le32 token;
+	__le32 value;
+};
+
+struct snd_soc_tplg_vendor_string_elem {
+	__le32 token;
+	char string[44];
+};
+
+struct snd_soc_tplg_vendor_array {
+	__le32 size;
+	__le32 type;
+	__le32 num_elems;
+	union {
+		struct {
+			struct {} __empty_uuid;
+			struct snd_soc_tplg_vendor_uuid_elem uuid[0];
+		};
+		struct {
+			struct {} __empty_value;
+			struct snd_soc_tplg_vendor_value_elem value[0];
+		};
+		struct {
+			struct {} __empty_string;
+			struct snd_soc_tplg_vendor_string_elem string[0];
+		};
+	};
+};
+
+struct snd_soc_tplg_private {
+	__le32 size;
+	union {
+		struct {
+			struct {} __empty_data;
+			char data[0];
+		};
+		struct {
+			struct {} __empty_array;
+			struct snd_soc_tplg_vendor_array array[0];
+		};
+	};
+};
+
+struct snd_soc_tplg_mixer_control {
+	struct snd_soc_tplg_ctl_hdr hdr;
+	__le32 size;
+	__le32 min;
+	__le32 max;
+	__le32 platform_max;
+	__le32 invert;
+	__le32 num_channels;
+	struct snd_soc_tplg_channel channel[8];
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_bytes_control {
+	struct snd_soc_tplg_ctl_hdr hdr;
+	__le32 size;
+	__le32 max;
+	__le32 mask;
+	__le32 base;
+	__le32 num_regs;
+	struct snd_soc_tplg_io_ops ext_ops;
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_enum_control {
+	struct snd_soc_tplg_ctl_hdr hdr;
+	__le32 size;
+	__le32 num_channels;
+	struct snd_soc_tplg_channel channel[8];
+	__le32 items;
+	__le32 mask;
+	__le32 count;
+	char texts[704];
+	__le32 values[176];
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_dapm_graph_elem {
+	char sink[44];
+	char control[44];
+	char source[44];
+};
+
+struct snd_soc_tplg_dapm_widget {
+	__le32 size;
+	__le32 id;
+	char name[44];
+	char sname[44];
+	__le32 reg;
+	__le32 shift;
+	__le32 mask;
+	__le32 subseq;
+	__le32 invert;
+	__le32 ignore_suspend;
+	__le16 event_flags;
+	__le16 event_type;
+	__le32 num_kcontrols;
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_stream {
+	__le32 size;
+	char name[44];
+	__le64 format;
+	__le32 rate;
+	__le32 period_bytes;
+	__le32 buffer_bytes;
+	__le32 channels;
+};
+
+struct snd_soc_tplg_stream_caps {
+	__le32 size;
+	char name[44];
+	__le64 formats;
+	__le32 rates;
+	__le32 rate_min;
+	__le32 rate_max;
+	__le32 channels_min;
+	__le32 channels_max;
+	__le32 periods_min;
+	__le32 periods_max;
+	__le32 period_size_min;
+	__le32 period_size_max;
+	__le32 buffer_size_min;
+	__le32 buffer_size_max;
+	__le32 sig_bits;
+};
+
+struct snd_soc_tplg_pcm {
+	__le32 size;
+	char pcm_name[44];
+	char dai_name[44];
+	__le32 pcm_id;
+	__le32 dai_id;
+	__le32 playback;
+	__le32 capture;
+	__le32 compress;
+	struct snd_soc_tplg_stream stream[8];
+	__le32 num_streams;
+	struct snd_soc_tplg_stream_caps caps[2];
+	__le32 flag_mask;
+	__le32 flags;
+	struct snd_soc_tplg_private priv;
+} __attribute__((packed));
+
+struct snd_soc_tplg_stream_caps_v4 {
+	__le32 size;
+	char name[44];
+	__le64 formats;
+	__le32 rates;
+	__le32 rate_min;
+	__le32 rate_max;
+	__le32 channels_min;
+	__le32 channels_max;
+	__le32 periods_min;
+	__le32 periods_max;
+	__le32 period_size_min;
+	__le32 period_size_max;
+	__le32 buffer_size_min;
+	__le32 buffer_size_max;
+} __attribute__((packed));
+
+struct snd_soc_tplg_pcm_v4 {
+	__le32 size;
+	char pcm_name[44];
+	char dai_name[44];
+	__le32 pcm_id;
+	__le32 dai_id;
+	__le32 playback;
+	__le32 capture;
+	__le32 compress;
+	struct snd_soc_tplg_stream stream[8];
+	__le32 num_streams;
+	struct snd_soc_tplg_stream_caps_v4 caps[2];
+} __attribute__((packed));
+
+struct snd_soc_tplg_dai {
+	__le32 size;
+	char dai_name[44];
+	__le32 dai_id;
+	__le32 playback;
+	__le32 capture;
+	struct snd_soc_tplg_stream_caps caps[2];
+	__le32 flag_mask;
+	__le32 flags;
+	struct snd_soc_tplg_private priv;
+} __attribute__((packed));
+
+struct snd_soc_tplg_hw_config {
+	__le32 size;
+	__le32 id;
+	__le32 fmt;
+	__u8 clock_gated;
+	__u8 invert_bclk;
+	__u8 invert_fsync;
+	__u8 bclk_provider;
+	__u8 fsync_provider;
+	__u8 mclk_direction;
+	__le16 reserved;
+	__le32 mclk_rate;
+	__le32 bclk_rate;
+	__le32 fsync_rate;
+	__le32 tdm_slots;
+	__le32 tdm_slot_width;
+	__le32 tx_slots;
+	__le32 rx_slots;
+	__le32 tx_channels;
+	__le32 tx_chanmap[8];
+	__le32 rx_channels;
+	__le32 rx_chanmap[8];
+};
+
+struct snd_soc_tplg_link_config {
+	__le32 size;
+	__le32 id;
+	char name[44];
+	char stream_name[44];
+	struct snd_soc_tplg_stream stream[8];
+	__le32 num_streams;
+	struct snd_soc_tplg_hw_config hw_config[8];
+	__le32 num_hw_configs;
+	__le32 default_hw_config_id;
+	__le32 flag_mask;
+	__le32 flags;
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_link_config_v4 {
+	__le32 size;
+	__le32 id;
+	struct snd_soc_tplg_stream stream[8];
+	__le32 num_streams;
+} __attribute__((packed));
+
+struct snd_soc_tplg_manifest {
+	__le32 size;
+	__le32 control_elems;
+	__le32 widget_elems;
+	__le32 graph_elems;
+	__le32 pcm_elems;
+	__le32 dai_link_elems;
+	__le32 dai_elems;
+	__le32 reserved[20];
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_manifest_v4 {
+	__le32 size;
+	__le32 control_elems;
+	__le32 widget_elems;
+	__le32 graph_elems;
+	__le32 pcm_elems;
+	__le32 dai_link_elems;
+	struct snd_soc_tplg_private priv;
+};
+
+struct snd_soc_tplg_bytes_ext_ops;
+
+struct snd_soc_tplg_ops;
+
+struct soc_tplg {
+	const struct firmware *fw;
+	const u8 *pos;
+	const u8 *hdr_pos;
+	unsigned int pass;
+	struct device *dev;
+	struct snd_soc_component *comp;
+	u32 index;
+	const struct snd_soc_tplg_kcontrol_ops *io_ops;
+	int io_ops_count;
+	const struct snd_soc_tplg_bytes_ext_ops *bytes_ext_ops;
+	int bytes_ext_ops_count;
+	struct snd_soc_tplg_ops *ops;
+};
+
+struct snd_soc_tplg_bytes_ext_ops {
+	u32 id;
+	int (*get)(struct snd_kcontrol *, unsigned int __attribute__((btf_type_tag("user"))) *, unsigned int);
+	int (*put)(struct snd_kcontrol *, const unsigned int __attribute__((btf_type_tag("user"))) *, unsigned int);
+};
+
+struct snd_soc_tplg_ops {
+	int (*control_load)(struct snd_soc_component *, int, struct snd_kcontrol_new *, struct snd_soc_tplg_ctl_hdr *);
+	int (*control_unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	int (*dapm_route_load)(struct snd_soc_component *, int, struct snd_soc_dapm_route *);
+	int (*dapm_route_unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	int (*widget_load)(struct snd_soc_component *, int, struct snd_soc_dapm_widget *, struct snd_soc_tplg_dapm_widget *);
+	int (*widget_ready)(struct snd_soc_component *, int, struct snd_soc_dapm_widget *, struct snd_soc_tplg_dapm_widget *);
+	int (*widget_unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	int (*dai_load)(struct snd_soc_component *, int, struct snd_soc_dai_driver *, struct snd_soc_tplg_pcm *, struct snd_soc_dai *);
+	int (*dai_unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	int (*link_load)(struct snd_soc_component *, int, struct snd_soc_dai_link *, struct snd_soc_tplg_link_config *);
+	int (*link_unload)(struct snd_soc_component *, struct snd_soc_dobj *);
+	int (*vendor_load)(struct snd_soc_component *, int, struct snd_soc_tplg_hdr *);
+	int (*vendor_unload)(struct snd_soc_component *, struct snd_soc_tplg_hdr *);
+	int (*complete)(struct snd_soc_component *);
+	int (*manifest)(struct snd_soc_component *, int, struct snd_soc_tplg_manifest *);
+	const struct snd_soc_tplg_kcontrol_ops *io_ops;
+	int io_ops_count;
+	const struct snd_soc_tplg_bytes_ext_ops *bytes_ext_ops;
+	int bytes_ext_ops_count;
+};
+
+struct snd_soc_tplg_widget_events {
+	u16 type;
+	int (*event_handler)(struct snd_soc_dapm_widget *, struct snd_kcontrol *, int);
+};
+
+struct dmaengine_pcm {
+	struct dma_chan___2 *chan[2];
+	const struct snd_dmaengine_pcm_config *config;
+	struct snd_soc_component component;
+	unsigned int flags;
+};
+
+struct skl_machine_pdata {
+	bool use_tplg_pcm;
+};
+
+enum {
+	APL_RVP = 0,
+};
+
+struct sst_ops;
+
+struct compress_sst_ops;
+
+struct sst_device {
+	char *name;
+	struct device *dev;
+	struct sst_ops *ops;
+	struct platform_device *pdev;
+	struct compress_sst_ops *compr_ops;
+};
+
+struct snd_sst_params;
+
+struct pcm_stream_info;
+
+struct snd_sst_bytes_v2;
+
+struct sst_ops {
+	int (*open)(struct device *, struct snd_sst_params *);
+	int (*stream_init)(struct device *, struct pcm_stream_info *);
+	int (*stream_start)(struct device *, int);
+	int (*stream_drop)(struct device *, int);
+	int (*stream_pause)(struct device *, int);
+	int (*stream_pause_release)(struct device *, int);
+	int (*stream_read_tstamp)(struct device *, struct pcm_stream_info *);
+	int (*send_byte_stream)(struct device *, struct snd_sst_bytes_v2 *);
+	int (*close)(struct device *, unsigned int);
+	int (*power)(struct device *, bool);
+};
+
+struct snd_pcm_params {
+	u8 num_chan;
+	u8 pcm_wd_sz;
+	u8 use_offload_path;
+	u8 reserved2;
+	u32 sfreq;
+	u8 channel_map[8];
+};
+
+struct snd_mp3_params {
+	u8 num_chan;
+	u8 pcm_wd_sz;
+	u8 crc_check;
+	u8 reserved1;
+	u16 reserved2;
+};
+
+struct snd_aac_params {
+	u8 num_chan;
+	u8 pcm_wd_sz;
+	u8 bdownsample;
+	u8 bs_format;
+	u16 reser2;
+	u32 externalsr;
+	u8 sbr_signalling;
+	u8 reser1;
+	u16 reser3;
+} __attribute__((packed));
+
+struct snd_wma_params {
+	u8 num_chan;
+	u8 pcm_wd_sz;
+	u16 reserved1;
+	u32 brate;
+	u32 sfreq;
+	u32 channel_mask;
+	u16 format_tag;
+	u16 block_align;
+	u16 wma_encode_opt;
+	u8 op_align;
+	u8 reserved;
+};
+
+union snd_sst_codec_params {
+	struct snd_pcm_params pcm_params;
+	struct snd_mp3_params mp3_params;
+	struct snd_aac_params aac_params;
+	struct snd_wma_params wma_params;
+};
+
+struct snd_sst_stream_params {
+	union snd_sst_codec_params uc;
+};
+
+struct sst_address_info {
+	u32 addr;
+	u32 size;
+};
+
+struct snd_sst_alloc_params_ext {
+	__u16 sg_count;
+	__u16 reserved;
+	__u32 frag_size;
+	struct sst_address_info ring_buf_info[8];
+};
+
+struct snd_sst_params {
+	u32 result;
+	u32 stream_id;
+	u8 codec;
+	u8 ops;
+	u8 stream_type;
+	u8 device_type;
+	u8 task;
+	struct snd_sst_stream_params sparams;
+	long: 0;
+	struct snd_sst_alloc_params_ext aparams;
+} __attribute__((packed));
+
+struct pcm_stream_info {
+	int str_id;
+	void *arg;
+	void (*period_elapsed)(void *);
+	unsigned long long buffer_ptr;
+	unsigned long long pcm_delay;
+	int sfreq;
+};
+
+struct snd_sst_bytes_v2 {
+	u8 type;
+	u8 ipc_msg;
+	u8 block;
+	u8 task_id;
+	u8 pipe_id;
+	u8 rsvd;
+	u16 len;
+	char bytes[0];
+};
+
+struct sst_compress_cb;
+
+struct compress_sst_ops {
+	const char *name;
+	int (*open)(struct device *, struct snd_sst_params *, struct sst_compress_cb *);
+	int (*stream_start)(struct device *, unsigned int);
+	int (*stream_drop)(struct device *, unsigned int);
+	int (*stream_drain)(struct device *, unsigned int);
+	int (*stream_partial_drain)(struct device *, unsigned int);
+	int (*stream_pause)(struct device *, unsigned int);
+	int (*stream_pause_release)(struct device *, unsigned int);
+	int (*tstamp)(struct device *, unsigned int, struct snd_compr_tstamp *);
+	int (*ack)(struct device *, unsigned int, unsigned long);
+	int (*close)(struct device *, unsigned int);
+	int (*get_caps)(struct snd_compr_caps *);
+	int (*get_codec_caps)(struct snd_compr_codec_caps *);
+	int (*set_metadata)(struct device *, unsigned int, struct snd_compr_metadata *);
+	int (*power)(struct device *, bool);
+};
+
+struct sst_compress_cb {
+	void *param;
+	void (*compr_cb)(void *);
+	void *drain_cb_param;
+	void (*drain_notify)(void *);
+};
+
+struct sst_dev_stream_map {
+	u8 dev_num;
+	u8 subdev_num;
+	u8 direction;
+	u8 device_id;
+	u8 task_id;
+	u8 status;
+};
+
+enum stream_type {
+	SST_STREAM_TYPE_NONE = 0,
+	SST_STREAM_TYPE_MUSIC = 1,
+};
+
+enum sst_drv_status {
+	SST_PLATFORM_INIT = 1,
+	SST_PLATFORM_STARTED = 2,
+	SST_PLATFORM_RUNNING = 3,
+	SST_PLATFORM_PAUSED = 4,
+	SST_PLATFORM_DROPPED = 5,
+};
+
+enum sst_codec_types {
+	SST_CODEC_TYPE_UNKNOWN = 0,
+	SST_CODEC_TYPE_PCM = 1,
+	SST_CODEC_TYPE_MP3 = 2,
+	SST_CODEC_TYPE_MP24 = 3,
+	SST_CODEC_TYPE_AAC = 4,
+	SST_CODEC_TYPE_AACP = 5,
+	SST_CODEC_TYPE_eAACP = 6,
+};
+
+struct sst_runtime_stream {
+	int stream_status;
+	unsigned int id;
+	size_t bytes_written;
+	struct pcm_stream_info stream_info;
+	struct sst_ops *ops;
+	struct compress_sst_ops *compr_ops;
+	spinlock_t status_lock;
+};
+
+union sst_location_id {
+	struct {
+		u8 cell_nbr_idx;
+		u8 path_id;
+	} p;
+	u16 f;
+};
+
+struct sst_destination_id {
+	union sst_location_id location_id;
+	u16 module_id;
+};
+
+struct sst_dsp_header {
+	struct sst_destination_id dst;
+	u16 command_id;
+	u16 length;
+};
+
+struct sst_cmd_sba_hw_set_ssp {
+	struct sst_dsp_header header;
+	u16 selection;
+	u16 switch_state;
+	u16 nb_bits_per_slots: 6;
+	u16 nb_slots: 4;
+	u16 mode: 3;
+	u16 duplex: 3;
+	u16 active_tx_slot_map: 8;
+	u16 reserved1: 8;
+	u16 active_rx_slot_map: 8;
+	u16 reserved2: 8;
+	u16 frame_sync_frequency;
+	u16 frame_sync_polarity: 8;
+	u16 data_polarity: 8;
+	u16 frame_sync_width;
+	u16 ssp_protocol: 8;
+	u16 start_delay: 8;
+};
+
+struct sst_platform_data;
+
+struct sst_data {
+	struct platform_device *pdev;
+	struct sst_platform_data *pdata;
+	struct snd_sst_bytes_v2 *byte_stream;
+	struct mutex lock;
+	struct snd_soc_card *soc_card;
+	struct sst_cmd_sba_hw_set_ssp ssp_cmd;
+};
+
+struct sst_platform_data {
+	struct sst_dev_stream_map *pdev_strm_map;
+	unsigned int strm_map_size;
+};
+
+struct sst_gain_value {
+	u16 ramp_duration;
+	s16 l_gain;
+	s16 r_gain;
+	bool mute;
+};
+
+struct sst_ssp_config {
+	u8 ssp_id;
+	u8 bits_per_slot;
+	u8 slots;
+	u8 ssp_mode;
+	u8 pcm_mode;
+	u8 duplex;
+	u8 ssp_protocol;
+	u8 fs_frequency;
+	u8 active_slot_map;
+	u8 start_delay;
+	u16 fs_width;
+	u8 frame_sync_polarity;
+	u8 data_polarity;
+};
+
+enum sst_cmd {
+	SBA_IDLE = 14,
+	SBA_VB_SET_SPEECH_PATH = 26,
+	MMX_SET_GAIN = 33,
+	SBA_VB_SET_GAIN = 33,
+	FBA_VB_RX_CNI = 35,
+	MMX_SET_GAIN_TIMECONST = 36,
+	SBA_VB_SET_TIMECONST = 36,
+	SBA_VB_START = 85,
+	SBA_SET_SWM = 114,
+	SBA_SET_MDRP = 116,
+	SBA_HW_SET_SSP = 117,
+	SBA_SET_MEDIA_LOOP_MAP = 118,
+	SBA_SET_MEDIA_PATH = 119,
+	MMX_SET_MEDIA_PATH = 119,
+	SBA_VB_LPRO = 126,
+	SBA_VB_SET_FIR = 128,
+	SBA_VB_SET_IIR = 129,
+	SBA_SET_SSP_SLOT_MAP = 130,
+};
+
+enum sst_ipc_msg {
+	SST_IPC_IA_CMD = 1,
+	SST_IPC_IA_SET_PARAMS = 2,
+	SST_IPC_IA_GET_PARAMS = 3,
+};
+
+enum sst_flag {
+	SST_FLAG_BLOCKED = 1,
+	SST_FLAG_NONBLOCK = 2,
+};
+
+enum sst_task {
+	SST_TASK_SBA = 1,
+	SST_TASK_MMX = 3,
+};
+
+enum sst_ssp_protocol {
+	SSP_MODE_PCM = 0,
+	SSP_MODE_I2S = 1,
+};
+
+enum sst_ssp_pcm_mode {
+	SSP_PCM_MODE_NORMAL = 0,
+	SSP_PCM_MODE_NETWORK = 1,
+};
+
+enum sst_ssp_port_id {
+	SSP_MODEM = 0,
+	SSP_BT = 1,
+	SSP_FM = 2,
+	SSP_CODEC = 3,
+};
+
+enum sst_dsp_switch {
+	SST_SWITCH_OFF = 0,
+	SST_SWITCH_ON = 3,
+};
+
+enum sst_cmd_type {
+	SST_CMD_BYTES_SET = 1,
+	SST_CMD_BYTES_GET = 2,
+};
+
+enum sst_ssp_mode {
+	SSP_MODE_PROVIDER = 0,
+	SSP_MODE_CONSUMER = 1,
+};
+
+enum sst_ssp_fs_polarity {
+	SSP_FS_ACTIVE_LOW = 0,
+	SSP_FS_ACTIVE_HIGH = 1,
+};
+
+enum sst_gain_kcontrol_type {
+	SST_GAIN_TLV = 0,
+	SST_GAIN_MUTE = 1,
+	SST_GAIN_RAMP_DURATION = 2,
+};
+
+enum sst_algo_kcontrol_type {
+	SST_ALGO_PARAMS = 0,
+	SST_ALGO_BYPASS = 1,
+};
+
+enum sst_path_switch {
+	SST_PATH_OFF = 0,
+	SST_PATH_ON = 1,
+};
+
+enum sst_swm_state {
+	SST_SWM_OFF = 0,
+	SST_SWM_ON = 3,
+};
+
+struct sst_module {
+	struct snd_kcontrol *kctl;
+	struct list_head node;
+};
+
+struct sst_algo_control {
+	enum sst_algo_kcontrol_type type;
+	int max;
+	u16 module_id;
+	u16 pipe_id;
+	u16 task_id;
+	u16 cmd_id;
+	bool bypass;
+	unsigned char *params;
+	struct snd_soc_dapm_widget *w;
+};
+
+struct sst_enum {
+	bool tx;
+	unsigned short reg;
+	unsigned int max;
+	const char * const *texts;
+	struct snd_soc_dapm_widget *w;
+};
+
+struct sst_pcm_format;
+
+struct sst_ids {
+	u16 location_id;
+	u16 module_id;
+	u8 task_id;
+	u8 format;
+	u8 reg;
+	const char *parent_wname;
+	struct snd_soc_dapm_widget *parent_w;
+	struct list_head algo_list;
+	struct list_head gain_list;
+	const struct sst_pcm_format *pcm_fmt;
+};
+
+struct sst_gain_mixer_control {
+	bool stereo;
+	enum sst_gain_kcontrol_type type;
+	struct sst_gain_value *gain_val;
+	int max;
+	int min;
+	u16 instance_id;
+	u16 module_id;
+	u16 pipe_id;
+	u16 task_id;
+	char pname[44];
+	struct snd_soc_dapm_widget *w;
+};
+
+struct swm_input_ids {
+	struct sst_destination_id input_id;
+};
+
+struct gain_cell {
+	struct sst_destination_id dest;
+	s16 cell_gain_left;
+	s16 cell_gain_right;
+	u16 gain_time_constant;
+};
+
+struct sst_cmd_set_gain_dual {
+	struct sst_dsp_header header;
+	u16 gain_cell_num;
+	struct gain_cell cell_gains[1];
+};
+
+struct sst_cmd_generic {
+	struct sst_dsp_header header;
+};
+
+struct sst_cmd_set_media_path {
+	struct sst_dsp_header header;
+	u16 switch_state;
+};
+
+struct pcm_cfg {
+	u8 s_length: 2;
+	u8 rate: 3;
+	u8 format: 3;
+};
+
+union sba_media_loop_params {
+	struct {
+		u16 rsvd: 8;
+		struct pcm_cfg cfg;
+	} part;
+	u16 full;
+};
+
+struct sst_cmd_sba_set_media_loop_map {
+	struct sst_dsp_header header;
+	u16 switch_state;
+	union sba_media_loop_params param;
+	u16 map;
+};
+
+struct sst_cmd_set_swm {
+	struct sst_dsp_header header;
+	struct sst_destination_id output_id;
+	u16 switch_state;
+	u16 nb_inputs;
+	struct swm_input_ids input[6];
+};
+
+struct sst_param_sba_ssp_slot_map {
+	struct sst_dsp_header header;
+	u16 param_id;
+	u16 param_len;
+	u16 ssp_index;
+	u8 rx_slot_map[8];
+	u8 tx_slot_map[8];
+};
+
+struct sst_cmd_set_params {
+	struct sst_destination_id dst;
+	u16 command_id;
+	char params[0];
+};
+
+struct intel_sst_drv;
+
+struct ipc_post;
+
+struct intel_sst_ops {
+	irqreturn_t (*interrupt)(int, void *);
+	irqreturn_t (*irq_thread)(int, void *);
+	void (*clear_interrupt)(struct intel_sst_drv *);
+	int (*start)(struct intel_sst_drv *);
+	int (*reset)(struct intel_sst_drv *);
+	void (*process_reply)(struct intel_sst_drv *, struct ipc_post *);
+	int (*post_message)(struct intel_sst_drv *, struct ipc_post *, bool);
+	void (*process_message)(struct ipc_post *);
+	void (*set_bypass)(bool);
+	int (*save_dsp_context)(struct intel_sst_drv *);
+	void (*restore_dsp_context)();
+	int (*alloc_stream)(struct intel_sst_drv *, void *);
+	void (*post_download)(struct intel_sst_drv *);
+};
+
+struct snd_sst_alloc_mrfld {
+	u16 codec_type;
+	u8 operation;
+	u8 sg_count;
+	struct sst_address_info ring_buf_info[8];
+	u32 frag_size;
+	u32 ts;
+	struct snd_sst_stream_params codec_params;
+};
+
+struct stream_info {
+	unsigned int status;
+	unsigned int prev;
+	unsigned int resume_status;
+	unsigned int resume_prev;
+	struct mutex lock;
+	struct snd_sst_alloc_mrfld alloc_param;
+	void *pcm_substream;
+	void (*period_elapsed)(void *);
+	unsigned int sfreq;
+	u32 cumm_bytes;
+	void *compr_cb_param;
+	void (*compr_cb)(void *);
+	void *drain_cb_param;
+	void (*drain_notify)(void *);
+	unsigned int num_ch;
+	unsigned int pipe_id;
+	unsigned int task_id;
+};
+
+struct sst_sg_list {
+	struct scatterlist *src;
+	struct scatterlist *dst;
+	int list_len;
+	unsigned int sg_idx;
+};
+
+struct sst_info {
+	u32 iram_start;
+	u32 iram_end;
+	bool iram_use;
+	u32 dram_start;
+	u32 dram_end;
+	bool dram_use;
+	u32 imr_start;
+	u32 imr_end;
+	bool imr_use;
+	u32 mailbox_start;
+	bool use_elf;
+	bool lpe_viewpt_rqd;
+	unsigned int max_streams;
+	u32 dma_max_len;
+	u8 num_probes;
+};
+
+struct sst_ipc_reg {
+	int ipcx;
+	int ipcd;
+};
+
+struct sst_mem_mgr {
+	phys_addr_t current_base;
+	int avail;
+	unsigned int count;
+};
+
+struct snd_sst_fw_version {
+	u8 build;
+	u8 minor;
+	u8 major;
+	u8 type;
+};
+
+struct sst_platform_info;
+
+struct sst_fw_save;
+
+struct intel_sst_drv {
+	int sst_state;
+	int irq_num;
+	unsigned short dev_id;
+	void *ddr;
+	void *shim;
+	void *mailbox;
+	void *iram;
+	void *dram;
+	unsigned int mailbox_add;
+	unsigned int iram_base;
+	unsigned int dram_base;
+	unsigned int shim_phy_add;
+	unsigned int iram_end;
+	unsigned int dram_end;
+	unsigned int ddr_end;
+	unsigned int ddr_base;
+	unsigned int mailbox_recv_offset;
+	struct list_head block_list;
+	struct list_head ipc_dispatch_list;
+	struct sst_platform_info *pdata;
+	struct list_head rx_list;
+	struct work_struct ipc_post_msg_wq;
+	wait_queue_head_t wait_queue;
+	struct workqueue_struct *post_msg_wq;
+	unsigned int tstamp;
+	struct stream_info streams[26];
+	spinlock_t ipc_spin_lock;
+	spinlock_t block_lock;
+	spinlock_t rx_msg_lock;
+	struct pci_dev *pci;
+	struct device *dev;
+	volatile unsigned long pvt_id;
+	struct mutex sst_lock;
+	unsigned int stream_cnt;
+	unsigned int csr_value;
+	void *fw_in_mem;
+	struct sst_sg_list fw_sg_list;
+	struct sst_sg_list library_list;
+	struct intel_sst_ops *ops;
+	struct sst_info info;
+	struct pm_qos_request *qos;
+	unsigned int use_dma;
+	unsigned int use_lli;
+	atomic_t fw_clear_context;
+	bool lib_dwnld_reqd;
+	struct list_head memcpy_list;
+	struct sst_ipc_reg ipc_reg;
+	struct sst_mem_mgr lib_mem_mgr;
+	char firmware_name[32];
+	struct snd_sst_fw_version fw_version;
+	struct sst_fw_save *fw_save;
+};
+
+struct sst_ipc_info;
+
+struct sst_res_info;
+
+struct sst_lib_dnld_info;
+
+struct sst_platform_info {
+	const struct sst_info *probe_data;
+	const struct sst_ipc_info *ipc_info;
+	const struct sst_res_info *res_info;
+	const struct sst_lib_dnld_info *lib_info;
+	const char *platform;
+	bool streams_lost_on_suspend;
+};
+
+struct sst_ipc_info {
+	int ipc_offset;
+	unsigned int mbox_recv_off;
+};
+
+struct sst_res_info {
+	unsigned int shim_offset;
+	unsigned int shim_size;
+	unsigned int shim_phy_addr;
+	unsigned int ssp0_offset;
+	unsigned int ssp0_size;
+	unsigned int dma0_offset;
+	unsigned int dma0_size;
+	unsigned int dma1_offset;
+	unsigned int dma1_size;
+	unsigned int iram_offset;
+	unsigned int iram_size;
+	unsigned int dram_offset;
+	unsigned int dram_size;
+	unsigned int mbox_offset;
+	unsigned int mbox_size;
+	unsigned int acpi_lpe_res_index;
+	unsigned int acpi_ddr_index;
+	unsigned int acpi_ipc_irq_index;
+};
+
+struct sst_lib_dnld_info {
+	unsigned int mod_base;
+	unsigned int mod_end;
+	unsigned int mod_table_offset;
+	unsigned int mod_table_size;
+	bool mod_ddr_dnld;
+};
+
+struct sst_fw_save {
+	void *iram;
+	void *dram;
+	void *sram;
+	void *ddr;
+};
+
+union ipc_header {
+	struct {
+		u32 msg_id: 8;
+		u32 str_id: 5;
+		u32 large: 1;
+		u32 reserved: 2;
+		u32 data: 14;
+		u32 done: 1;
+		u32 busy: 1;
+	} part;
+	u32 full;
+};
+
+union ipc_header_high {
+	struct {
+		u32 msg_id: 8;
+		u32 task_id: 4;
+		u32 drv_id: 4;
+		u32 rsvd1: 8;
+		u32 result: 4;
+		u32 res_rqd: 1;
+		u32 large: 1;
+		u32 done: 1;
+		u32 busy: 1;
+	} part;
+	u32 full;
+};
+
+union ipc_header_mrfld {
+	struct {
+		u32 header_low_payload;
+		union ipc_header_high header_high;
+	} p;
+	u64 full;
+};
+
+struct ipc_post {
+	struct list_head node;
+	union ipc_header header;
+	bool is_large;
+	bool is_process_reply;
+	union ipc_header_mrfld mrfld_header;
+	long: 0;
+	char *mailbox_data;
+} __attribute__((packed));
+
+enum sst_states {
+	SST_FW_LOADING = 1,
+	SST_FW_RUNNING = 2,
+	SST_RESET = 3,
+	SST_SHUTDOWN = 4,
+};
+
+enum sst_audio_device_id_mrfld {
+	PIPE_ID_OUT_START = 0,
+	PIPE_CODEC_OUT0 = 2,
+	PIPE_CODEC_OUT1 = 3,
+	PIPE_SPROT_LOOP_OUT = 4,
+	PIPE_MEDIA_LOOP1_OUT = 5,
+	PIPE_MEDIA_LOOP2_OUT = 6,
+	PIPE_VOIP_OUT = 12,
+	PIPE_PCM0_OUT = 13,
+	PIPE_PCM1_OUT = 14,
+	PIPE_PCM2_OUT = 15,
+	PIPE_MEDIA0_OUT = 18,
+	PIPE_MEDIA1_OUT = 19,
+	PIPE_ID_IN_START = 128,
+	PIPE_CODEC_IN0 = 130,
+	PIPE_CODEC_IN1 = 131,
+	PIPE_SPROT_LOOP_IN = 132,
+	PIPE_MEDIA_LOOP1_IN = 133,
+	PIPE_MEDIA_LOOP2_IN = 134,
+	PIPE_VOIP_IN = 140,
+	PIPE_PCM0_IN = 141,
+	PIPE_PCM1_IN = 142,
+	PIPE_MEDIA0_IN = 143,
+	PIPE_MEDIA1_IN = 144,
+	PIPE_MEDIA2_IN = 145,
+	PIPE_MEDIA3_IN = 156,
+	PIPE_RSVD = 255,
+};
+
+enum sst_audio_task_id_mrfld {
+	SST_TASK_ID_NONE = 0,
+	SST_TASK_ID_SBA = 1,
+	SST_TASK_ID_MEDIA = 3,
+	SST_TASK_ID_MAX = 3,
+};
+
+enum ipc_ia_msg_id {
+	IPC_CMD = 1,
+	IPC_SET_PARAMS = 2,
+	IPC_GET_PARAMS = 3,
+	IPC_INVALID = 255,
+};
+
+enum sst_stream_states {
+	STREAM_UN_INIT = 0,
+	STREAM_RUNNING = 1,
+	STREAM_PAUSED = 2,
+	STREAM_INIT = 3,
+};
+
+struct sst_block {
+	bool condition;
+	int ret_code;
+	void *data;
+	u32 size;
+	bool on;
+	u32 msg_id;
+	u32 drv_id;
+	struct list_head node;
+};
+
+union interrupt_reg_mrfld {
+	struct {
+		u64 done_interrupt: 1;
+		u64 busy_interrupt: 1;
+		u64 rsvd: 62;
+	} part;
+	u64 full;
+};
+
+union sst_imr_reg_mrfld {
+	struct {
+		u64 done_interrupt: 1;
+		u64 busy_interrupt: 1;
+		u64 rsvd: 62;
+	} part;
+	u64 full;
+};
+
+enum ackData {
+	IPC_ACK_SUCCESS = 0,
+	IPC_ACK_FAILURE = 1,
+};
+
+struct ipc_dsp_hdr {
+	u16 mod_index_id: 8;
+	u16 pipe_id: 8;
+	u16 mod_id;
+	u16 cmd_id;
+	u16 length;
+};
+
+struct sst_fw_build_info {
+	unsigned char date[16];
+	unsigned char time[16];
+};
+
+struct ipc_header_fw_init {
+	struct snd_sst_fw_version fw_version;
+	struct sst_fw_build_info build_info;
+	u16 result;
+	u8 module_id;
+	u8 debug_info;
+};
+
+enum sst_error_codes {
+	SST_SUCCESS = 0,
+	SST_ERR_INVALID_STREAM_ID = 1,
+	SST_ERR_INVALID_MSG_ID = 2,
+	SST_ERR_INVALID_STREAM_OP = 3,
+	SST_ERR_INVALID_PARAMS = 4,
+	SST_ERR_INVALID_CODEC = 5,
+	SST_ERR_INVALID_MEDIA_TYPE = 6,
+	SST_ERR_STREAM_ERR = 7,
+	SST_ERR_STREAM_IN_USE = 15,
+};
+
+enum snd_sst_bytes_type {
+	SND_SST_BYTES_SET = 1,
+	SND_SST_BYTES_GET = 2,
+};
+
+struct snd_sst_str_type {
+	u8 codec_type;
+	u8 str_type;
+	u8 operation;
+	u8 protected_str;
+	u8 time_slots;
+	u8 reserved;
+	u16 result;
+};
+
+struct module_info {
+	u32 lib_version;
+	u32 lib_type;
+	u32 media_type;
+	u8 lib_name[12];
+	u32 lib_caps;
+	unsigned char b_date[16];
+	unsigned char b_time[16];
+};
+
+struct lib_slot_info {
+	u8 slot_num;
+	u8 reserved1;
+	u16 reserved2;
+	u32 iram_size;
+	u32 dram_size;
+	u32 iram_offset;
+	u32 dram_offset;
+};
+
+struct snd_sst_lib_download {
+	struct module_info lib_info;
+	struct lib_slot_info slot_info;
+	u32 mod_entry_pt;
+};
+
+struct snd_sst_alloc_response {
+	struct snd_sst_str_type str_type;
+	struct snd_sst_lib_download lib_dnld;
+};
+
+struct snd_sst_tstamp {
+	u64 ring_buffer_counter;
+	u64 hardware_counter;
+	u64 frames_decoded;
+	u64 bytes_decoded;
+	u64 bytes_copied;
+	u32 sampling_frequency;
+	u32 channel_peak[8];
+} __attribute__((packed));
+
+enum sst_ram_type {
+	SST_IRAM = 1,
+	SST_DRAM = 2,
+	SST_DDR = 5,
+	SST_CUSTOM_INFO = 7,
+};
+
+struct sst_memcpy_list {
+	struct list_head memcpylist;
+	void *dstn;
+	const void *src;
+	u32 size;
+	bool is_io;
+};
+
+struct sst_fw_header {
+	unsigned char signature[4];
+	u32 file_size;
+	u32 modules;
+	u32 file_format;
+	u32 reserved[4];
+};
+
+struct fw_module_header {
+	unsigned char signature[4];
+	u32 mod_size;
+	u32 blocks;
+	u32 type;
+	u32 entry_point;
+};
+
+struct fw_block_info {
+	enum sst_ram_type type;
+	u32 size;
+	u32 ram_offset;
+	u32 rsvd;
+};
+
+union config_status_reg_mrfld {
+	struct {
+		u64 lpe_reset: 1;
+		u64 lpe_reset_vector: 1;
+		u64 runstall: 1;
+		u64 pwaitmode: 1;
+		u64 clk_sel: 3;
+		u64 rsvd2: 1;
+		u64 sst_clk: 3;
+		u64 xt_snoop: 1;
+		u64 rsvd3: 4;
+		u64 clk_sel1: 6;
+		u64 clk_enable: 3;
+		u64 rsvd4: 6;
+		u64 slim0baseclk: 1;
+		u64 rsvd: 32;
+	} part;
+	u64 full;
+};
+
+enum {
+	SND_INTEL_DSP_DRIVER_ANY = 0,
+	SND_INTEL_DSP_DRIVER_LEGACY = 1,
+	SND_INTEL_DSP_DRIVER_SST = 2,
+	SND_INTEL_DSP_DRIVER_SOF = 3,
+	SND_INTEL_DSP_DRIVER_AVS = 4,
+	SND_INTEL_DSP_DRIVER_LAST = 4,
+};
+
+struct config_entry {
+	u32 flags;
+	u16 device;
+	u8 acpi_hid[16];
+	const struct dmi_system_id *dmi_table;
+	const struct snd_soc_acpi_codecs *codec_hid;
+};
+
+enum nhlt_link_type {
+	NHLT_LINK_HDA = 0,
+	NHLT_LINK_DSP = 1,
+	NHLT_LINK_DMIC = 2,
+	NHLT_LINK_SSP = 3,
+	NHLT_LINK_INVALID = 4,
+};
+
+enum {
+	NHLT_CONFIG_TYPE_GENERIC = 0,
+	NHLT_CONFIG_TYPE_MIC_ARRAY = 1,
+};
+
+enum {
+	NHLT_MIC_ARRAY_2CH_SMALL = 10,
+	NHLT_MIC_ARRAY_2CH_BIG = 11,
+	NHLT_MIC_ARRAY_4CH_1ST_GEOM = 12,
+	NHLT_MIC_ARRAY_4CH_L_SHAPED = 13,
+	NHLT_MIC_ARRAY_4CH_2ND_GEOM = 14,
+	NHLT_MIC_ARRAY_VENDOR_DEFINED = 15,
+};
+
+enum nhlt_device_type {
+	NHLT_DEVICE_BT = 0,
+	NHLT_DEVICE_DMIC = 1,
+	NHLT_DEVICE_I2S = 4,
+	NHLT_DEVICE_INVALID = 5,
+};
+
+struct nhlt_device_specific_config {
+	u8 virtual_slot;
+	u8 config_type;
+};
+
+struct nhlt_dmic_array_config {
+	struct nhlt_device_specific_config device_config;
+	u8 array_type;
+};
+
+struct wav_fmt {
+	u16 fmt_tag;
+	u16 channels;
+	u32 samples_per_sec;
+	u32 avg_bytes_per_sec;
+	u16 block_align;
+	u16 bits_per_sample;
+	u16 cb_size;
+} __attribute__((packed));
+
+union samples {
+	u16 valid_bits_per_sample;
+	u16 samples_per_block;
+	u16 reserved;
+};
+
+struct wav_fmt_ext {
+	struct wav_fmt fmt;
+	union samples sample;
+	u32 channel_mask;
+	u8 sub_fmt[16];
+};
+
+struct nhlt_specific_cfg {
+	u32 size;
+	u8 caps[0];
+};
+
+struct nhlt_fmt_cfg {
+	struct wav_fmt_ext fmt_ext;
+	struct nhlt_specific_cfg config;
+};
+
+struct nhlt_fmt {
+	u8 fmt_count;
+	struct nhlt_fmt_cfg fmt_config[0];
+} __attribute__((packed));
+
+struct nhlt_vendor_dmic_array_config {
+	struct nhlt_dmic_array_config dmic_config;
+	u8 nb_mics;
+};
+
+struct nhlt_endpoint {
+	u32 length;
+	u8 linktype;
+	u8 instance_id;
+	u16 vendor_id;
+	u16 device_id;
+	u16 revision_id;
+	u32 subsystem_id;
+	u8 device_type;
+	u8 direction;
+	u8 virtual_bus_id;
+	struct nhlt_specific_cfg config;
+} __attribute__((packed));
+
+struct nhlt_acpi_table {
+	struct acpi_table_header header;
+	u8 endpoint_count;
+	struct nhlt_endpoint desc[0];
+} __attribute__((packed));
+
+struct sdw_intel_acpi_info {
+	acpi_handle handle;
+	int count;
+	u32 link_mask;
+};
+
+struct net_device_devres {
+	struct net_device *ndev;
+};
+
+struct net_proto_family {
+	int family;
+	int (*create)(struct net *, struct socket *, int, int);
+	struct module *owner;
+};
+
+struct iw_request_info {
+	__u16 cmd;
+	__u16 flags;
+};
+
+struct iw_point {
+	void __attribute__((btf_type_tag("user"))) *pointer;
+	__u16 length;
+	__u16 flags;
+};
+
+struct iw_param {
+	__s32 value;
+	__u8 fixed;
+	__u8 disabled;
+	__u16 flags;
+};
+
+struct iw_freq {
+	__s32 m;
+	__s16 e;
+	__u8 i;
+	__u8 flags;
+};
+
+struct iw_quality {
+	__u8 qual;
+	__u8 level;
+	__u8 noise;
+	__u8 updated;
+};
+
+union iwreq_data {
+	char name[16];
+	struct iw_point essid;
+	struct iw_param nwid;
+	struct iw_freq freq;
+	struct iw_param sens;
+	struct iw_param bitrate;
+	struct iw_param txpower;
+	struct iw_param rts;
+	struct iw_param frag;
+	__u32 mode;
+	struct iw_param retry;
+	struct iw_point encoding;
+	struct iw_param power;
+	struct iw_quality qual;
+	struct sockaddr ap_addr;
+	struct sockaddr addr;
+	struct iw_param param;
+	struct iw_point data;
+};
+
+struct iw_priv_args {
+	__u32 cmd;
+	__u16 set_args;
+	__u16 get_args;
+	char name[16];
+};
+
+struct iw_discarded {
+	__u32 nwid;
+	__u32 code;
+	__u32 fragment;
+	__u32 retries;
+	__u32 misc;
+};
+
+struct iw_missed {
+	__u32 beacon;
+};
+
+struct iw_statistics {
+	__u16 status;
+	struct iw_quality qual;
+	struct iw_discarded discard;
+	struct iw_missed miss;
+};
+
+struct libipw_device;
+
+struct iw_spy_data;
+
+struct iw_public_data {
+	struct iw_spy_data *spy_data;
+	struct libipw_device *libipw;
+};
+
+typedef unsigned char u_char;
+
+struct iw_spy_data {
+	int spy_number;
+	u_char spy_address[48];
+	struct iw_quality spy_stat[8];
+	struct iw_quality spy_thr_low;
+	struct iw_quality spy_thr_high;
+	u_char spy_thr_under[8];
+};
+
+enum {
+	SOF_TIMESTAMPING_TX_HARDWARE = 1,
+	SOF_TIMESTAMPING_TX_SOFTWARE = 2,
+	SOF_TIMESTAMPING_RX_HARDWARE = 4,
+	SOF_TIMESTAMPING_RX_SOFTWARE = 8,
+	SOF_TIMESTAMPING_SOFTWARE = 16,
+	SOF_TIMESTAMPING_SYS_HARDWARE = 32,
+	SOF_TIMESTAMPING_RAW_HARDWARE = 64,
+	SOF_TIMESTAMPING_OPT_ID = 128,
+	SOF_TIMESTAMPING_TX_SCHED = 256,
+	SOF_TIMESTAMPING_TX_ACK = 512,
+	SOF_TIMESTAMPING_OPT_CMSG = 1024,
+	SOF_TIMESTAMPING_OPT_TSONLY = 2048,
+	SOF_TIMESTAMPING_OPT_STATS = 4096,
+	SOF_TIMESTAMPING_OPT_PKTINFO = 8192,
+	SOF_TIMESTAMPING_OPT_TX_SWHW = 16384,
+	SOF_TIMESTAMPING_BIND_PHC = 32768,
+	SOF_TIMESTAMPING_OPT_ID_TCP = 65536,
+	SOF_TIMESTAMPING_LAST = 65536,
+	SOF_TIMESTAMPING_MASK = 131071,
+};
+
+enum {
+	SOCK_WAKE_IO = 0,
+	SOCK_WAKE_WAITD = 1,
+	SOCK_WAKE_SPACE = 2,
+	SOCK_WAKE_URG = 3,
+};
+
+enum sock_shutdown_cmd {
+	SHUT_RD = 0,
+	SHUT_WR = 1,
+	SHUT_RDWR = 2,
+};
+
+struct sock_ee_data_rfc4884 {
+	__u16 len;
+	__u8 flags;
+	__u8 reserved;
+};
+
+struct sock_extended_err {
+	__u32 ee_errno;
+	__u8 ee_origin;
+	__u8 ee_type;
+	__u8 ee_code;
+	__u8 ee_pad;
+	__u32 ee_info;
+	union {
+		__u32 ee_data;
+		struct sock_ee_data_rfc4884 ee_rfc4884;
+	};
+};
+
+struct sock_exterr_skb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	struct sock_extended_err ee;
+	u16 addr_offset;
+	__be16 port;
+	u8 opt_stats: 1;
+	u8 unused: 7;
+};
+
+struct compat_mmsghdr {
+	struct compat_msghdr msg_hdr;
+	compat_uint_t msg_len;
+};
+
+struct compat_ifmap {
+	compat_ulong_t mem_start;
+	compat_ulong_t mem_end;
+	unsigned short base_addr;
+	unsigned char irq;
+	unsigned char dma;
+	unsigned char port;
+};
+
+struct compat_if_settings {
+	unsigned int type;
+	unsigned int size;
+	compat_uptr_t ifs_ifsu;
+};
+
+struct compat_ifreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union {
+		struct sockaddr ifru_addr;
+		struct sockaddr ifru_dstaddr;
+		struct sockaddr ifru_broadaddr;
+		struct sockaddr ifru_netmask;
+		struct sockaddr ifru_hwaddr;
+		short ifru_flags;
+		compat_int_t ifru_ivalue;
+		compat_int_t ifru_mtu;
+		struct compat_ifmap ifru_map;
+		char ifru_slave[16];
+		char ifru_newname[16];
+		compat_caddr_t ifru_data;
+		struct compat_if_settings ifru_settings;
+	} ifr_ifru;
+};
+
+struct sock_skb_cb {
+	u32 dropcount;
+};
+
+struct mmsghdr {
+	struct user_msghdr msg_hdr;
+	unsigned int msg_len;
+};
+
+struct __kernel_old_timespec {
+	__kernel_old_time_t tv_sec;
+	long tv_nsec;
+};
+
+struct __kernel_sock_timeval {
+	__s64 tv_sec;
+	__s64 tv_usec;
+};
+
+struct scm_ts_pktinfo {
+	__u32 if_index;
+	__u32 pkt_length;
+	__u32 reserved[2];
+};
+
+struct scm_timestamping_internal {
+	struct timespec64 ts[3];
+};
+
+struct ifconf {
+	int ifc_len;
+	union {
+		char __attribute__((btf_type_tag("user"))) *ifcu_buf;
+		struct ifreq __attribute__((btf_type_tag("user"))) *ifcu_req;
+	} ifc_ifcu;
+};
+
+struct used_address {
+	struct __kernel_sockaddr_storage name;
+	unsigned int name_len;
+};
+
+struct netdev_name_node {
+	struct hlist_node hlist;
+	struct list_head list;
+	struct net_device *dev;
+	const char *name;
+};
+
+enum {
+	INET_FLAGS_PKTINFO = 0,
+	INET_FLAGS_TTL = 1,
+	INET_FLAGS_TOS = 2,
+	INET_FLAGS_RECVOPTS = 3,
+	INET_FLAGS_RETOPTS = 4,
+	INET_FLAGS_PASSSEC = 5,
+	INET_FLAGS_ORIGDSTADDR = 6,
+	INET_FLAGS_CHECKSUM = 7,
+	INET_FLAGS_RECVFRAGSIZE = 8,
+	INET_FLAGS_RECVERR = 9,
+	INET_FLAGS_RECVERR_RFC4884 = 10,
+	INET_FLAGS_FREEBIND = 11,
+	INET_FLAGS_HDRINCL = 12,
+	INET_FLAGS_MC_LOOP = 13,
+	INET_FLAGS_MC_ALL = 14,
+	INET_FLAGS_TRANSPARENT = 15,
+	INET_FLAGS_IS_ICSK = 16,
+	INET_FLAGS_NODEFRAG = 17,
+	INET_FLAGS_BIND_ADDRESS_NO_PORT = 18,
+	INET_FLAGS_DEFER_CONNECT = 19,
+};
+
+enum sk_pacing {
+	SK_PACING_NONE = 0,
+	SK_PACING_NEEDED = 1,
+	SK_PACING_FQ = 2,
+};
+
+enum txtime_flags {
+	SOF_TXTIME_DEADLINE_MODE = 1,
+	SOF_TXTIME_REPORT_ERRORS = 2,
+	SOF_TXTIME_FLAGS_LAST = 2,
+	SOF_TXTIME_FLAGS_MASK = 3,
+};
+
+enum {
+	SK_MEMINFO_RMEM_ALLOC = 0,
+	SK_MEMINFO_RCVBUF = 1,
+	SK_MEMINFO_WMEM_ALLOC = 2,
+	SK_MEMINFO_SNDBUF = 3,
+	SK_MEMINFO_FWD_ALLOC = 4,
+	SK_MEMINFO_WMEM_QUEUED = 5,
+	SK_MEMINFO_OPTMEM = 6,
+	SK_MEMINFO_BACKLOG = 7,
+	SK_MEMINFO_DROPS = 8,
+	SK_MEMINFO_VARS = 9,
+};
+
+enum sknetlink_groups {
+	SKNLGRP_NONE = 0,
+	SKNLGRP_INET_TCP_DESTROY = 1,
+	SKNLGRP_INET_UDP_DESTROY = 2,
+	SKNLGRP_INET6_TCP_DESTROY = 3,
+	SKNLGRP_INET6_UDP_DESTROY = 4,
+	__SKNLGRP_MAX = 5,
+};
+
+enum {
+	XFRM_POLICY_IN = 0,
+	XFRM_POLICY_OUT = 1,
+	XFRM_POLICY_FWD = 2,
+	XFRM_POLICY_MASK = 3,
+	XFRM_POLICY_MAX = 3,
+};
+
+struct fastopen_queue {
+	struct request_sock *rskq_rst_head;
+	struct request_sock *rskq_rst_tail;
+	spinlock_t lock;
+	int qlen;
+	int max_qlen;
+	struct tcp_fastopen_context __attribute__((btf_type_tag("rcu"))) *ctx;
+};
+
+struct request_sock_queue {
+	spinlock_t rskq_lock;
+	u8 rskq_defer_accept;
+	u32 synflood_warned;
+	atomic_t qlen;
+	atomic_t young;
+	struct request_sock *rskq_accept_head;
+	struct request_sock *rskq_accept_tail;
+	struct fastopen_queue fastopenq;
+};
+
+struct inet_bind_bucket;
+
+struct inet_bind2_bucket;
+
+struct inet_connection_sock_af_ops;
+
+struct tcp_ulp_ops;
+
+struct inet_connection_sock {
+	struct inet_sock icsk_inet;
+	struct request_sock_queue icsk_accept_queue;
+	struct inet_bind_bucket *icsk_bind_hash;
+	struct inet_bind2_bucket *icsk_bind2_hash;
+	unsigned long icsk_timeout;
+	struct timer_list icsk_retransmit_timer;
+	struct timer_list icsk_delack_timer;
+	__u32 icsk_rto;
+	__u32 icsk_rto_min;
+	__u32 icsk_delack_max;
+	__u32 icsk_pmtu_cookie;
+	const struct tcp_congestion_ops *icsk_ca_ops;
+	const struct inet_connection_sock_af_ops *icsk_af_ops;
+	const struct tcp_ulp_ops *icsk_ulp_ops;
+	void __attribute__((btf_type_tag("rcu"))) *icsk_ulp_data;
+	void (*icsk_clean_acked)(struct sock *, u32);
+	unsigned int (*icsk_sync_mss)(struct sock *, u32);
+	__u8 icsk_ca_state: 5;
+	__u8 icsk_ca_initialized: 1;
+	__u8 icsk_ca_setsockopt: 1;
+	__u8 icsk_ca_dst_locked: 1;
+	__u8 icsk_retransmits;
+	__u8 icsk_pending;
+	__u8 icsk_backoff;
+	__u8 icsk_syn_retries;
+	__u8 icsk_probes_out;
+	__u16 icsk_ext_hdr_len;
+	struct {
+		__u8 pending;
+		__u8 quick;
+		__u8 pingpong;
+		__u8 retry;
+		__u32 ato;
+		unsigned long timeout;
+		__u32 lrcvtime;
+		__u16 last_seg_size;
+		__u16 rcv_mss;
+	} icsk_ack;
+	struct {
+		int search_high;
+		int search_low;
+		u32 probe_size: 31;
+		u32 enabled: 1;
+		u32 probe_timestamp;
+	} icsk_mtup;
+	u32 icsk_probes_tstamp;
+	u32 icsk_user_timeout;
+	u64 android_kabi_reserved1;
+	u64 icsk_ca_priv[13];
+};
+
+struct tcp_rack {
+	u64 mstamp;
+	u32 rtt_us;
+	u32 end_seq;
+	u32 last_delivered;
+	u8 reo_wnd_steps;
+	u8 reo_wnd_persist: 5;
+	u8 dsack_seen: 1;
+	u8 advanced: 1;
+};
+
+struct minmax_sample {
+	u32 t;
+	u32 v;
+};
+
+struct minmax {
+	struct minmax_sample s[3];
+};
+
+struct tcp_options_received {
+	int ts_recent_stamp;
+	u32 ts_recent;
+	u32 rcv_tsval;
+	u32 rcv_tsecr;
+	u16 saw_tstamp: 1;
+	u16 tstamp_ok: 1;
+	u16 dsack: 1;
+	u16 wscale_ok: 1;
+	u16 sack_ok: 3;
+	u16 smc_ok: 1;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u8 saw_unknown: 1;
+	u8 unused: 7;
+	u8 num_sacks;
+	u16 user_mss;
+	u16 mss_clamp;
+};
+
+struct tcp_sack_block {
+	u32 start_seq;
+	u32 end_seq;
+};
+
+struct tcp_fastopen_request;
+
+struct tcp_sock {
+	struct inet_connection_sock inet_conn;
+	u16 tcp_header_len;
+	u16 gso_segs;
+	__be32 pred_flags;
+	u64 bytes_received;
+	u32 segs_in;
+	u32 data_segs_in;
+	u32 rcv_nxt;
+	u32 copied_seq;
+	u32 rcv_wup;
+	u32 snd_nxt;
+	u32 segs_out;
+	u32 data_segs_out;
+	u64 bytes_sent;
+	u64 bytes_acked;
+	u32 dsack_dups;
+	u32 snd_una;
+	u32 snd_sml;
+	u32 rcv_tstamp;
+	u32 lsndtime;
+	u32 last_oow_ack_time;
+	u32 compressed_ack_rcv_nxt;
+	u32 tsoffset;
+	struct list_head tsq_node;
+	struct list_head tsorted_sent_queue;
+	u32 snd_wl1;
+	u32 snd_wnd;
+	u32 max_window;
+	u32 mss_cache;
+	u32 window_clamp;
+	u32 rcv_ssthresh;
+	u8 scaling_ratio;
+	struct tcp_rack rack;
+	u16 advmss;
+	u8 compressed_ack;
+	u8 dup_ack_counter: 2;
+	u8 tlp_retrans: 1;
+	u8 unused: 5;
+	u32 chrono_start;
+	u32 chrono_stat[3];
+	u8 chrono_type: 2;
+	u8 rate_app_limited: 1;
+	u8 fastopen_connect: 1;
+	u8 fastopen_no_cookie: 1;
+	u8 is_sack_reneg: 1;
+	u8 fastopen_client_fail: 2;
+	u8 nonagle: 4;
+	u8 thin_lto: 1;
+	u8 recvmsg_inq: 1;
+	u8 repair: 1;
+	u8 frto: 1;
+	u8 repair_queue;
+	u8 save_syn: 2;
+	u8 syn_data: 1;
+	u8 syn_fastopen: 1;
+	u8 syn_fastopen_exp: 1;
+	u8 syn_fastopen_ch: 1;
+	u8 syn_data_acked: 1;
+	u8 is_cwnd_limited: 1;
+	u32 tlp_high_seq;
+	u32 tcp_tx_delay;
+	u64 tcp_wstamp_ns;
+	u64 tcp_clock_cache;
+	u64 tcp_mstamp;
+	u32 srtt_us;
+	u32 mdev_us;
+	u32 mdev_max_us;
+	u32 rttvar_us;
+	u32 rtt_seq;
+	struct minmax rtt_min;
+	u32 packets_out;
+	u32 retrans_out;
+	u32 max_packets_out;
+	u32 cwnd_usage_seq;
+	u16 urg_data;
+	u8 ecn_flags;
+	u8 keepalive_probes;
+	u32 reordering;
+	u32 reord_seen;
+	u32 snd_up;
+	struct tcp_options_received rx_opt;
+	u32 snd_ssthresh;
+	u32 snd_cwnd;
+	u32 snd_cwnd_cnt;
+	u32 snd_cwnd_clamp;
+	u32 snd_cwnd_used;
+	u32 snd_cwnd_stamp;
+	u32 prior_cwnd;
+	u32 prr_delivered;
+	u32 prr_out;
+	u32 delivered;
+	u32 delivered_ce;
+	u32 lost;
+	u32 app_limited;
+	u64 first_tx_mstamp;
+	u64 delivered_mstamp;
+	u32 rate_delivered;
+	u32 rate_interval_us;
+	u32 rcv_wnd;
+	u32 write_seq;
+	u32 notsent_lowat;
+	u32 pushed_seq;
+	u32 lost_out;
+	u32 sacked_out;
+	struct hrtimer pacing_timer;
+	struct hrtimer compressed_ack_timer;
+	struct sk_buff *lost_skb_hint;
+	struct sk_buff *retransmit_skb_hint;
+	struct rb_root out_of_order_queue;
+	struct sk_buff *ooo_last_skb;
+	struct tcp_sack_block duplicate_sack[1];
+	struct tcp_sack_block selective_acks[4];
+	struct tcp_sack_block recv_sack_cache[4];
+	struct sk_buff *highest_sack;
+	int lost_cnt_hint;
+	u32 prior_ssthresh;
+	u32 high_seq;
+	u32 retrans_stamp;
+	u32 undo_marker;
+	int undo_retrans;
+	u64 bytes_retrans;
+	u32 total_retrans;
+	u32 urg_seq;
+	unsigned int keepalive_time;
+	unsigned int keepalive_intvl;
+	int linger2;
+	u8 bpf_sock_ops_cb_flags;
+	u8 bpf_chg_cc_inprogress: 1;
+	u16 timeout_rehash;
+	u32 rcv_ooopack;
+	u32 rcv_rtt_last_tsecr;
+	struct {
+		u32 rtt_us;
+		u32 seq;
+		u64 time;
+	} rcv_rtt_est;
+	struct {
+		u32 space;
+		u32 seq;
+		u64 time;
+	} rcvq_space;
+	struct {
+		u32 probe_seq_start;
+		u32 probe_seq_end;
+	} mtu_probe;
+	u32 plb_rehash;
+	u32 mtu_info;
+	struct tcp_fastopen_request *fastopen_req;
+	struct request_sock __attribute__((btf_type_tag("rcu"))) *fastopen_rsk;
+	struct saved_syn *saved_syn;
+	u64 android_oem_data1;
+	u64 android_kabi_reserved1;
+};
+
+struct inet_bind_bucket {
+	possible_net_t ib_net;
+	int l3mdev;
+	unsigned short port;
+	signed char fastreuse;
+	signed char fastreuseport;
+	kuid_t fastuid;
+	struct in6_addr fast_v6_rcv_saddr;
+	__be32 fast_rcv_saddr;
+	unsigned short fast_sk_family;
+	bool fast_ipv6_only;
+	struct hlist_node node;
+	struct hlist_head owners;
+};
+
+struct inet_bind2_bucket {
+	possible_net_t ib_net;
+	int l3mdev;
+	unsigned short port;
+	unsigned short family;
+	union {
+		struct in6_addr v6_rcv_saddr;
+		__be32 rcv_saddr;
+	};
+	struct hlist_node node;
+	struct hlist_head owners;
+	struct hlist_head deathrow;
+};
+
+struct inet_connection_sock_af_ops {
+	int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);
+	void (*send_check)(struct sock *, struct sk_buff *);
+	int (*rebuild_header)(struct sock *);
+	void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);
+	int (*conn_request)(struct sock *, struct sk_buff *);
+	struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);
+	u16 net_header_len;
+	u16 net_frag_header_len;
+	u16 sockaddr_len;
+	int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*getsockopt)(struct sock *, int, int, char __attribute__((btf_type_tag("user"))) *, int __attribute__((btf_type_tag("user"))) *);
+	void (*addr2sockaddr)(struct sock *, struct sockaddr *);
+	void (*mtu_reduced)(struct sock *);
+	u64 android_kabi_reserved1;
+};
+
+struct tcp_ulp_ops {
+	struct list_head list;
+	int (*init)(struct sock *);
+	void (*update)(struct sock *, struct proto *, void (*)(struct sock *));
+	void (*release)(struct sock *);
+	int (*get_info)(struct sock *, struct sk_buff *);
+	size_t (*get_info_size)(const struct sock *);
+	void (*clone)(const struct request_sock *, struct sock *, const gfp_t);
+	char name[16];
+	struct module *owner;
+};
+
+struct tcp_fastopen_cookie {
+	__le64 val[2];
+	s8 len;
+	bool exp;
+};
+
+struct tcp_fastopen_request {
+	struct tcp_fastopen_cookie cookie;
+	struct msghdr *data;
+	size_t size;
+	int copied;
+	struct ubuf_info *uarg;
+};
+
+struct cmsghdr {
+	__kernel_size_t cmsg_len;
+	int cmsg_level;
+	int cmsg_type;
+};
+
+struct net_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, u32);
+	unsigned int no_policy: 1;
+	unsigned int icmp_strict_tag_validation: 1;
+};
+
+struct udp_sock {
+	struct inet_sock inet;
+	unsigned long udp_flags;
+	int pending;
+	__u8 encap_type;
+	__u16 len;
+	__u16 gso_size;
+	__u16 pcslen;
+	__u16 pcrlen;
+	int (*encap_rcv)(struct sock *, struct sk_buff *);
+	void (*encap_err_rcv)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+	int (*encap_err_lookup)(struct sock *, struct sk_buff *);
+	void (*encap_destroy)(struct sock *);
+	struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sock *, struct sk_buff *, int);
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct sk_buff_head reader_queue;
+	int forward_deficit;
+	int forward_threshold;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef void (*android_dst_ops_negative_advice_new_t)(struct sock *, struct dst_entry *);
+
+struct ucred {
+	__u32 pid;
+	__u32 uid;
+	__u32 gid;
+};
+
+struct linger {
+	int l_onoff;
+	int l_linger;
+};
+
+struct sock_txtime {
+	__kernel_clockid_t clockid;
+	__u32 flags;
+};
+
+struct so_timestamping {
+	int flags;
+	int bind_phc;
+};
+
+typedef unsigned short mifi_t;
+
+struct sioc_mif_req6 {
+	mifi_t mifi;
+	unsigned long icount;
+	unsigned long ocount;
+	unsigned long ibytes;
+	unsigned long obytes;
+};
+
+struct sioc_sg_req6 {
+	struct sockaddr_in6 src;
+	struct sockaddr_in6 grp;
+	unsigned long pktcnt;
+	unsigned long bytecnt;
+	unsigned long wrong_if;
+};
+
+struct sockcm_cookie {
+	u64 transmit_time;
+	u32 mark;
+	u32 tsflags;
+};
+
+struct inet_request_sock {
+	struct request_sock req;
+	u16 snd_wscale: 4;
+	u16 rcv_wscale: 4;
+	u16 tstamp_ok: 1;
+	u16 sack_ok: 1;
+	u16 wscale_ok: 1;
+	u16 ecn_ok: 1;
+	u16 acked: 1;
+	u16 no_srccheck: 1;
+	u16 smc_ok: 1;
+	u32 ir_mark;
+	union {
+		struct ip_options_rcu __attribute__((btf_type_tag("rcu"))) *ireq_opt;
+		struct {
+			struct ipv6_txoptions *ipv6_opt;
+			struct sk_buff *pktopts;
+		};
+	};
+};
+
+struct tcp_request_sock_ops;
+
+struct tcp_request_sock {
+	struct inet_request_sock req;
+	const struct tcp_request_sock_ops *af_specific;
+	u64 snt_synack;
+	bool tfo_listener;
+	bool is_mptcp;
+	u32 txhash;
+	u32 rcv_isn;
+	u32 snt_isn;
+	u32 ts_off;
+	u32 last_oow_ack_time;
+	u32 rcv_nxt;
+	u8 syn_tos;
+};
+
+enum tcp_synack_type {
+	TCP_SYNACK_NORMAL = 0,
+	TCP_SYNACK_FASTOPEN = 1,
+	TCP_SYNACK_COOKIE = 2,
+};
+
+struct tcp_request_sock_ops {
+	u16 mss_clamp;
+	struct dst_entry * (*route_req)(const struct sock *, struct sk_buff *, struct flowi *, struct request_sock *);
+	u32 (*init_seq)(const struct sk_buff *);
+	u32 (*init_ts_off)(const struct net *, const struct sk_buff *);
+	int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);
+};
+
+struct drop_reason_list {
+	const char * const *reasons;
+	size_t n_reasons;
+};
+
+struct skb_checksum_ops {
+	__wsum (*update)(const void *, int, __wsum);
+	__wsum (*combine)(__wsum, __wsum, int, int);
+};
+
+struct page_frag_1k {
+	void *va;
+	u16 offset;
+	bool pfmemalloc;
+};
+
+struct napi_alloc_cache {
+	struct page_frag_cache page;
+	struct page_frag_1k page_small;
+	unsigned int skb_count;
+	void *skb_cache[64];
+};
+
+enum skb_drop_reason_subsys {
+	SKB_DROP_REASON_SUBSYS_CORE = 0,
+	SKB_DROP_REASON_SUBSYS_MAC80211_UNUSABLE = 1,
+	SKB_DROP_REASON_SUBSYS_MAC80211_MONITOR = 2,
+	SKB_DROP_REASON_SUBSYS_OPENVSWITCH = 3,
+	SKB_DROP_REASON_SUBSYS_NUM = 4,
+};
+
+enum {
+	SKB_FCLONE_UNAVAILABLE = 0,
+	SKB_FCLONE_ORIG = 1,
+	SKB_FCLONE_CLONE = 2,
+};
+
+enum {
+	SCM_TSTAMP_SND = 0,
+	SCM_TSTAMP_SCHED = 1,
+	SCM_TSTAMP_ACK = 2,
+};
+
+enum skb_ext_id {
+	SKB_EXT_SEC_PATH = 0,
+	SKB_EXT_NUM = 1,
+};
+
+struct sk_buff_fclones {
+	struct sk_buff skb1;
+	struct sk_buff skb2;
+	refcount_t fclone_ref;
+};
+
+struct mmpin {
+	struct user_struct *user;
+	unsigned int num_pg;
+};
+
+struct ubuf_info_msgzc {
+	struct ubuf_info ubuf;
+	union {
+		struct {
+			unsigned long desc;
+			void *ctx;
+		};
+		struct {
+			u32 id;
+			u16 len;
+			u16 zerocopy: 1;
+			u32 bytelen;
+		};
+	};
+	struct mmpin mmp;
+};
+
+struct skb_seq_state {
+	__u32 lower_offset;
+	__u32 upper_offset;
+	__u32 frag_idx;
+	__u32 stepped_offset;
+	struct sk_buff *root_skb;
+	struct sk_buff *cur_skb;
+	__u8 *frag_data;
+	__u32 frag_off;
+};
+
+struct skb_gso_cb {
+	union {
+		int mac_offset;
+		int data_offset;
+	};
+	int encap_level;
+	__wsum csum;
+	__u16 csum_start;
+};
+
+struct sd_flow_limit;
+
+struct softnet_data {
+	struct list_head poll_list;
+	struct sk_buff_head process_queue;
+	unsigned int processed;
+	unsigned int time_squeeze;
+	struct softnet_data *rps_ipi_list;
+	bool in_net_rx_action;
+	bool in_napi_threaded_poll;
+	struct sd_flow_limit __attribute__((btf_type_tag("rcu"))) *flow_limit;
+	struct Qdisc *output_queue;
+	struct Qdisc **output_queue_tailp;
+	struct sk_buff *completion_queue;
+	struct {
+		u16 recursion;
+		u8 more;
+		u8 skip_txqueue;
+	} xmit;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int input_queue_head;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	call_single_data_t csd;
+	struct softnet_data *rps_ipi_next;
+	unsigned int cpu;
+	unsigned int input_queue_tail;
+	unsigned int received_rps;
+	unsigned int dropped;
+	struct sk_buff_head input_pkt_queue;
+	struct napi_struct backlog;
+	spinlock_t defer_lock;
+	int defer_count;
+	int defer_ipi_scheduled;
+	struct sk_buff *defer_list;
+	long: 64;
+	call_single_data_t defer_csd;
+};
+
+struct sd_flow_limit {
+	u64 count;
+	unsigned int num_buckets;
+	unsigned int history_head;
+	u16 history[128];
+	u8 buckets[0];
+};
+
+struct ip_auth_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__be16 reserved;
+	__be32 spi;
+	__be32 seq_no;
+	__u8 auth_data[0];
+};
+
+struct frag_hdr {
+	__u8 nexthdr;
+	__u8 reserved;
+	__be16 frag_off;
+	__be32 identification;
+};
+
+struct vlan_ethhdr {
+	union {
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		};
+		struct {
+			unsigned char h_dest[6];
+			unsigned char h_source[6];
+		} addrs;
+	};
+	__be16 h_vlan_proto;
+	__be16 h_vlan_TCI;
+	__be16 h_vlan_encapsulated_proto;
+};
+
+struct mpls_shim_hdr {
+	__be32 label_stack_entry;
+};
+
+struct skb_free_array {
+	unsigned int skb_count;
+	void *skb_array[16];
+};
+
+struct xfrm_offload {
+	struct {
+		__u32 low;
+		__u32 hi;
+	} seq;
+	__u32 flags;
+	__u32 status;
+	__u8 proto;
+	__u8 inner_ipproto;
+};
+
+struct sec_path {
+	int len;
+	int olen;
+	int verified_cnt;
+	struct xfrm_state *xvec[6];
+	struct xfrm_offload ovec[1];
+};
+
+typedef int (*sendmsg_func)(struct sock *, struct msghdr *);
+
+struct scm_fp_list {
+	short count;
+	short max;
+	struct user_struct *user;
+	struct file *fp[253];
+};
+
+struct scm_cookie {
+	struct pid *pid;
+	struct scm_fp_list *fp;
+	struct scm_creds creds;
+	u32 secid;
+};
+
+struct scm_timestamping64 {
+	struct __kernel_timespec ts[3];
+};
+
+struct scm_timestamping {
+	struct __kernel_old_timespec ts[3];
+};
+
+enum {
+	TCA_STATS_UNSPEC = 0,
+	TCA_STATS_BASIC = 1,
+	TCA_STATS_RATE_EST = 2,
+	TCA_STATS_QUEUE = 3,
+	TCA_STATS_APP = 4,
+	TCA_STATS_RATE_EST64 = 5,
+	TCA_STATS_PAD = 6,
+	TCA_STATS_BASIC_HW = 7,
+	TCA_STATS_PKT64 = 8,
+	__TCA_STATS_MAX = 9,
+};
+
+struct gnet_stats_rate_est64 {
+	__u64 bps;
+	__u64 pps;
+};
+
+struct gnet_stats_basic {
+	__u64 bytes;
+	__u32 packets;
+};
+
+struct gnet_stats_rate_est {
+	__u32 bps;
+	__u32 pps;
+};
+
+struct gnet_estimator {
+	signed char interval;
+	unsigned char ewma_log;
+};
+
+struct pcpu_gen_cookie;
+
+struct gen_cookie {
+	struct pcpu_gen_cookie __attribute__((btf_type_tag("percpu"))) *local;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic64_t forward_last;
+	atomic64_t reverse_last;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct pcpu_gen_cookie {
+	local_t nesting;
+	u64 last;
+};
+
+enum rtnl_link_flags {
+	RTNL_FLAG_DOIT_UNLOCKED = 1,
+	RTNL_FLAG_BULK_DEL_SUPPORTED = 2,
+};
+
+enum rtnetlink_groups {
+	RTNLGRP_NONE = 0,
+	RTNLGRP_LINK = 1,
+	RTNLGRP_NOTIFY = 2,
+	RTNLGRP_NEIGH = 3,
+	RTNLGRP_TC = 4,
+	RTNLGRP_IPV4_IFADDR = 5,
+	RTNLGRP_IPV4_MROUTE = 6,
+	RTNLGRP_IPV4_ROUTE = 7,
+	RTNLGRP_IPV4_RULE = 8,
+	RTNLGRP_IPV6_IFADDR = 9,
+	RTNLGRP_IPV6_MROUTE = 10,
+	RTNLGRP_IPV6_ROUTE = 11,
+	RTNLGRP_IPV6_IFINFO = 12,
+	RTNLGRP_DECnet_IFADDR = 13,
+	RTNLGRP_NOP2 = 14,
+	RTNLGRP_DECnet_ROUTE = 15,
+	RTNLGRP_DECnet_RULE = 16,
+	RTNLGRP_NOP4 = 17,
+	RTNLGRP_IPV6_PREFIX = 18,
+	RTNLGRP_IPV6_RULE = 19,
+	RTNLGRP_ND_USEROPT = 20,
+	RTNLGRP_PHONET_IFADDR = 21,
+	RTNLGRP_PHONET_ROUTE = 22,
+	RTNLGRP_DCB = 23,
+	RTNLGRP_IPV4_NETCONF = 24,
+	RTNLGRP_IPV6_NETCONF = 25,
+	RTNLGRP_MDB = 26,
+	RTNLGRP_MPLS_ROUTE = 27,
+	RTNLGRP_NSID = 28,
+	RTNLGRP_MPLS_NETCONF = 29,
+	RTNLGRP_IPV4_MROUTE_R = 30,
+	RTNLGRP_IPV6_MROUTE_R = 31,
+	RTNLGRP_NEXTHOP = 32,
+	RTNLGRP_BRVLAN = 33,
+	RTNLGRP_MCTP_IFADDR = 34,
+	RTNLGRP_TUNNEL = 35,
+	RTNLGRP_STATS = 36,
+	__RTNLGRP_MAX = 37,
+};
+
+enum {
+	NETNSA_NONE = 0,
+	NETNSA_NSID = 1,
+	NETNSA_PID = 2,
+	NETNSA_FD = 3,
+	NETNSA_TARGET_NSID = 4,
+	NETNSA_CURRENT_NSID = 5,
+	__NETNSA_MAX = 6,
+};
+
+struct net_fill_args {
+	u32 portid;
+	u32 seq;
+	int flags;
+	int cmd;
+	int nsid;
+	bool add_ref;
+	int ref_nsid;
+};
+
+struct rtnl_net_dump_cb {
+	struct net *tgt_net;
+	struct net *ref_net;
+	struct sk_buff *skb;
+	struct net_fill_args fillargs;
+	int idx;
+	int s_idx;
+};
+
+typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);
+
+typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
+
+struct rtgenmsg {
+	unsigned char rtgen_family;
+};
+
+struct pppoe_tag {
+	__be16 tag_type;
+	__be16 tag_len;
+	char tag_data[0];
+};
+
+struct pppoe_hdr {
+	__u8 type: 4;
+	__u8 ver: 4;
+	__u8 code;
+	__be16 sid;
+	__be16 length;
+	struct pppoe_tag tag[0];
+};
+
+enum flow_dissector_key_id {
+	FLOW_DISSECTOR_KEY_CONTROL = 0,
+	FLOW_DISSECTOR_KEY_BASIC = 1,
+	FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,
+	FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,
+	FLOW_DISSECTOR_KEY_PORTS = 4,
+	FLOW_DISSECTOR_KEY_PORTS_RANGE = 5,
+	FLOW_DISSECTOR_KEY_ICMP = 6,
+	FLOW_DISSECTOR_KEY_ETH_ADDRS = 7,
+	FLOW_DISSECTOR_KEY_TIPC = 8,
+	FLOW_DISSECTOR_KEY_ARP = 9,
+	FLOW_DISSECTOR_KEY_VLAN = 10,
+	FLOW_DISSECTOR_KEY_FLOW_LABEL = 11,
+	FLOW_DISSECTOR_KEY_GRE_KEYID = 12,
+	FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,
+	FLOW_DISSECTOR_KEY_ENC_KEYID = 14,
+	FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,
+	FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,
+	FLOW_DISSECTOR_KEY_ENC_CONTROL = 17,
+	FLOW_DISSECTOR_KEY_ENC_PORTS = 18,
+	FLOW_DISSECTOR_KEY_MPLS = 19,
+	FLOW_DISSECTOR_KEY_TCP = 20,
+	FLOW_DISSECTOR_KEY_IP = 21,
+	FLOW_DISSECTOR_KEY_CVLAN = 22,
+	FLOW_DISSECTOR_KEY_ENC_IP = 23,
+	FLOW_DISSECTOR_KEY_ENC_OPTS = 24,
+	FLOW_DISSECTOR_KEY_META = 25,
+	FLOW_DISSECTOR_KEY_CT = 26,
+	FLOW_DISSECTOR_KEY_HASH = 27,
+	FLOW_DISSECTOR_KEY_NUM_OF_VLANS = 28,
+	FLOW_DISSECTOR_KEY_PPPOE = 29,
+	FLOW_DISSECTOR_KEY_L2TPV3 = 30,
+	FLOW_DISSECTOR_KEY_CFM = 31,
+	FLOW_DISSECTOR_KEY_IPSEC = 32,
+	FLOW_DISSECTOR_KEY_MAX = 33,
+};
+
+struct flow_dissector_key {
+	enum flow_dissector_key_id key_id;
+	size_t offset;
+};
+
+struct nf_conn;
+
+struct nf_ct_event {
+	struct nf_conn *ct;
+	u32 portid;
+	int report;
+};
+
+union nf_inet_addr {
+	__u32 all[4];
+	__be32 ip;
+	__be32 ip6[4];
+	struct in_addr in;
+	struct in6_addr in6;
+};
+
+union nf_conntrack_man_proto {
+	__be16 all;
+	struct {
+		__be16 port;
+	} tcp;
+	struct {
+		__be16 port;
+	} udp;
+	struct {
+		__be16 id;
+	} icmp;
+	struct {
+		__be16 port;
+	} dccp;
+	struct {
+		__be16 port;
+	} sctp;
+	struct {
+		__be16 key;
+	} gre;
+};
+
+typedef u16 u_int16_t;
+
+struct nf_conntrack_man {
+	union nf_inet_addr u3;
+	union nf_conntrack_man_proto u;
+	u_int16_t l3num;
+};
+
+struct nf_conntrack_tuple {
+	struct nf_conntrack_man src;
+	struct {
+		union nf_inet_addr u3;
+		union {
+			__be16 all;
+			struct {
+				__be16 port;
+			} tcp;
+			struct {
+				__be16 port;
+			} udp;
+			struct {
+				u_int8_t type;
+				u_int8_t code;
+			} icmp;
+			struct {
+				__be16 port;
+			} dccp;
+			struct {
+				__be16 port;
+			} sctp;
+			struct {
+				__be16 key;
+			} gre;
+		} u;
+		u_int8_t protonum;
+		struct {} __nfct_hash_offsetend;
+		u_int8_t dir;
+	} dst;
+};
+
+struct nf_conntrack_tuple_hash {
+	struct hlist_nulls_node hnnode;
+	struct nf_conntrack_tuple tuple;
+};
+
+struct nf_ct_dccp {
+	u_int8_t role[2];
+	u_int8_t state;
+	u_int8_t last_pkt;
+	u_int8_t last_dir;
+	u_int64_t handshake_seq;
+};
+
+enum sctp_conntrack {
+	SCTP_CONNTRACK_NONE = 0,
+	SCTP_CONNTRACK_CLOSED = 1,
+	SCTP_CONNTRACK_COOKIE_WAIT = 2,
+	SCTP_CONNTRACK_COOKIE_ECHOED = 3,
+	SCTP_CONNTRACK_ESTABLISHED = 4,
+	SCTP_CONNTRACK_SHUTDOWN_SENT = 5,
+	SCTP_CONNTRACK_SHUTDOWN_RECD = 6,
+	SCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,
+	SCTP_CONNTRACK_HEARTBEAT_SENT = 8,
+	SCTP_CONNTRACK_HEARTBEAT_ACKED = 9,
+	SCTP_CONNTRACK_MAX = 10,
+};
+
+struct ip_ct_sctp {
+	enum sctp_conntrack state;
+	__be32 vtag[2];
+	u8 init[2];
+	u8 last_dir;
+	u8 flags;
+};
+
+struct ip_ct_tcp_state {
+	u_int32_t td_end;
+	u_int32_t td_maxend;
+	u_int32_t td_maxwin;
+	u_int32_t td_maxack;
+	u_int8_t td_scale;
+	u_int8_t flags;
+};
+
+struct ip_ct_tcp {
+	struct ip_ct_tcp_state seen[2];
+	u_int8_t state;
+	u_int8_t last_dir;
+	u_int8_t retrans;
+	u_int8_t last_index;
+	u_int32_t last_seq;
+	u_int32_t last_ack;
+	u_int32_t last_end;
+	u_int16_t last_win;
+	u_int8_t last_wscale;
+	u_int8_t last_flags;
+};
+
+struct nf_ct_udp {
+	unsigned long stream_ts;
+};
+
+struct nf_ct_gre {
+	unsigned int stream_timeout;
+	unsigned int timeout;
+};
+
+union nf_conntrack_proto {
+	struct nf_ct_dccp dccp;
+	struct ip_ct_sctp sctp;
+	struct ip_ct_tcp tcp;
+	struct nf_ct_udp udp;
+	struct nf_ct_gre gre;
+	unsigned int tmpl_padto;
+};
+
+struct nf_ct_ext;
+
+struct nf_conn {
+	struct nf_conntrack ct_general;
+	spinlock_t lock;
+	u32 timeout;
+	struct nf_conntrack_tuple_hash tuplehash[2];
+	unsigned long status;
+	possible_net_t ct_net;
+	struct hlist_node nat_bysource;
+	struct {} __nfct_init_offset;
+	struct nf_conn *master;
+	u_int32_t mark;
+	u_int32_t secmark;
+	struct nf_ct_ext *ext;
+	union nf_conntrack_proto proto;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_oem_data1;
+};
+
+struct nf_ct_ext {
+	u8 offset[5];
+	u8 len;
+	unsigned int gen_id;
+	long: 0;
+	char data[0];
+};
+
+struct nf_conntrack_expect;
+
+struct nf_exp_event {
+	struct nf_conntrack_expect *exp;
+	u32 portid;
+	int report;
+};
+
+struct nf_conntrack_tuple_mask {
+	struct {
+		union nf_inet_addr u3;
+		union nf_conntrack_man_proto u;
+	} src;
+};
+
+enum ip_conntrack_dir {
+	IP_CT_DIR_ORIGINAL = 0,
+	IP_CT_DIR_REPLY = 1,
+	IP_CT_DIR_MAX = 2,
+};
+
+struct nf_conntrack_helper;
+
+struct nf_conntrack_expect {
+	struct hlist_node lnode;
+	struct hlist_node hnode;
+	struct nf_conntrack_tuple tuple;
+	struct nf_conntrack_tuple_mask mask;
+	refcount_t use;
+	unsigned int flags;
+	unsigned int class;
+	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
+	struct nf_conntrack_helper *helper;
+	struct nf_conn *master;
+	struct timer_list timeout;
+	union nf_inet_addr saved_addr;
+	union nf_conntrack_man_proto saved_proto;
+	enum ip_conntrack_dir dir;
+	struct callback_head rcu;
+};
+
+struct tcf_walker {
+	int stop;
+	int skip;
+	int count;
+	bool nonempty;
+	unsigned long cookie;
+	int (*fn)(struct tcf_proto *, void *, struct tcf_walker *);
+};
+
+struct tc_action;
+
+struct tcf_exts_miss_cookie_node;
+
+struct tcf_exts {
+	__u32 type;
+	int nr_actions;
+	struct tc_action **actions;
+	struct net *net;
+	netns_tracker ns_tracker;
+	struct tcf_exts_miss_cookie_node *miss_cookie_node;
+	int action;
+	int police;
+};
+
+struct tcf_t {
+	__u64 install;
+	__u64 lastuse;
+	__u64 expires;
+	__u64 firstuse;
+};
+
+struct tc_action_ops;
+
+struct tcf_idrinfo;
+
+struct tc_cookie;
+
+struct tc_action {
+	const struct tc_action_ops *ops;
+	__u32 type;
+	struct tcf_idrinfo *idrinfo;
+	u32 tcfa_index;
+	refcount_t tcfa_refcnt;
+	atomic_t tcfa_bindcnt;
+	int tcfa_action;
+	struct tcf_t tcfa_tm;
+	long: 64;
+	struct gnet_stats_basic_sync tcfa_bstats;
+	struct gnet_stats_basic_sync tcfa_bstats_hw;
+	struct gnet_stats_queue tcfa_qstats;
+	struct net_rate_estimator __attribute__((btf_type_tag("rcu"))) *tcfa_rate_est;
+	spinlock_t tcfa_lock;
+	struct gnet_stats_basic_sync __attribute__((btf_type_tag("percpu"))) *cpu_bstats;
+	struct gnet_stats_basic_sync __attribute__((btf_type_tag("percpu"))) *cpu_bstats_hw;
+	struct gnet_stats_queue __attribute__((btf_type_tag("percpu"))) *cpu_qstats;
+	struct tc_cookie __attribute__((btf_type_tag("rcu"))) *user_cookie;
+	struct tcf_chain __attribute__((btf_type_tag("rcu"))) *goto_chain;
+	u32 tcfa_flags;
+	u8 hw_stats;
+	u8 used_hw_stats;
+	bool used_hw_stats_valid;
+	u32 in_hw_count;
+};
+
+enum tca_id {
+	TCA_ID_UNSPEC = 0,
+	TCA_ID_POLICE = 1,
+	TCA_ID_GACT = 5,
+	TCA_ID_IPT = 6,
+	TCA_ID_PEDIT = 7,
+	TCA_ID_MIRRED = 8,
+	TCA_ID_NAT = 9,
+	TCA_ID_XT = 10,
+	TCA_ID_SKBEDIT = 11,
+	TCA_ID_VLAN = 12,
+	TCA_ID_BPF = 13,
+	TCA_ID_CONNMARK = 14,
+	TCA_ID_SKBMOD = 15,
+	TCA_ID_CSUM = 16,
+	TCA_ID_TUNNEL_KEY = 17,
+	TCA_ID_SIMP = 22,
+	TCA_ID_IFE = 25,
+	TCA_ID_SAMPLE = 26,
+	TCA_ID_CTINFO = 27,
+	TCA_ID_MPLS = 28,
+	TCA_ID_CT = 29,
+	TCA_ID_GATE = 30,
+	__TCA_ID_MAX = 255,
+};
+
+typedef void (*tc_action_priv_destructor)(void *);
+
+struct psample_group;
+
+struct tc_action_ops {
+	struct list_head head;
+	char kind[16];
+	enum tca_id id;
+	unsigned int net_id;
+	size_t size;
+	struct module *owner;
+	int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);
+	int (*dump)(struct sk_buff *, struct tc_action *, int, int);
+	void (*cleanup)(struct tc_action *);
+	int (*lookup)(struct net *, struct tc_action **, u32);
+	int (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, struct tcf_proto *, u32, struct netlink_ext_ack *);
+	int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);
+	void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);
+	size_t (*get_fill_size)(const struct tc_action *);
+	struct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);
+	struct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);
+	int (*offload_act_setup)(struct tc_action *, void *, u32 *, bool, struct netlink_ext_ack *);
+};
+
+struct tcf_idrinfo {
+	struct mutex lock;
+	struct idr action_idr;
+	struct net *net;
+};
+
+struct tc_cookie {
+	u8 *data;
+	u32 len;
+	struct callback_head rcu;
+};
+
+enum devlink_port_type {
+	DEVLINK_PORT_TYPE_NOTSET = 0,
+	DEVLINK_PORT_TYPE_AUTO = 1,
+	DEVLINK_PORT_TYPE_ETH = 2,
+	DEVLINK_PORT_TYPE_IB = 3,
+};
+
+enum devlink_port_flavour {
+	DEVLINK_PORT_FLAVOUR_PHYSICAL = 0,
+	DEVLINK_PORT_FLAVOUR_CPU = 1,
+	DEVLINK_PORT_FLAVOUR_DSA = 2,
+	DEVLINK_PORT_FLAVOUR_PCI_PF = 3,
+	DEVLINK_PORT_FLAVOUR_PCI_VF = 4,
+	DEVLINK_PORT_FLAVOUR_VIRTUAL = 5,
+	DEVLINK_PORT_FLAVOUR_UNUSED = 6,
+	DEVLINK_PORT_FLAVOUR_PCI_SF = 7,
+};
+
+struct devlink_port_phys_attrs {
+	u32 port_number;
+	u32 split_subport_number;
+};
+
+struct devlink_port_pci_pf_attrs {
+	u32 controller;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_vf_attrs {
+	u32 controller;
+	u16 pf;
+	u16 vf;
+	u8 external: 1;
+};
+
+struct devlink_port_pci_sf_attrs {
+	u32 controller;
+	u32 sf;
+	u16 pf;
+	u8 external: 1;
+};
+
+struct devlink_port_attrs {
+	u8 split: 1;
+	u8 splittable: 1;
+	u32 lanes;
+	enum devlink_port_flavour flavour;
+	struct netdev_phys_item_id switch_id;
+	union {
+		struct devlink_port_phys_attrs phys;
+		struct devlink_port_pci_pf_attrs pci_pf;
+		struct devlink_port_pci_vf_attrs pci_vf;
+		struct devlink_port_pci_sf_attrs pci_sf;
+	};
+};
+
+struct devlink;
+
+struct devlink_port_ops;
+
+struct ib_device;
+
+struct devlink_rate;
+
+struct devlink_linecard;
+
+struct devlink_port {
+	struct list_head list;
+	struct list_head region_list;
+	struct devlink *devlink;
+	const struct devlink_port_ops *ops;
+	unsigned int index;
+	spinlock_t type_lock;
+	enum devlink_port_type type;
+	enum devlink_port_type desired_type;
+	union {
+		struct {
+			struct net_device *netdev;
+			int ifindex;
+			char ifname[16];
+		} type_eth;
+		struct {
+			struct ib_device *ibdev;
+		} type_ib;
+	};
+	struct devlink_port_attrs attrs;
+	u8 attrs_set: 1;
+	u8 switch_port: 1;
+	u8 registered: 1;
+	u8 initialized: 1;
+	struct delayed_work type_warn_dw;
+	struct list_head reporter_list;
+	struct devlink_rate *devlink_rate;
+	struct devlink_linecard *linecard;
+};
+
+enum devlink_port_fn_state {
+	DEVLINK_PORT_FN_STATE_INACTIVE = 0,
+	DEVLINK_PORT_FN_STATE_ACTIVE = 1,
+};
+
+enum devlink_port_fn_opstate {
+	DEVLINK_PORT_FN_OPSTATE_DETACHED = 0,
+	DEVLINK_PORT_FN_OPSTATE_ATTACHED = 1,
+};
+
+struct devlink_port_ops {
+	int (*port_split)(struct devlink *, struct devlink_port *, unsigned int, struct netlink_ext_ack *);
+	int (*port_unsplit)(struct devlink *, struct devlink_port *, struct netlink_ext_ack *);
+	int (*port_type_set)(struct devlink_port *, enum devlink_port_type);
+	int (*port_del)(struct devlink *, struct devlink_port *, struct netlink_ext_ack *);
+	int (*port_fn_hw_addr_get)(struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);
+	int (*port_fn_hw_addr_set)(struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);
+	int (*port_fn_roce_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_roce_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+	int (*port_fn_migratable_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_migratable_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+	int (*port_fn_state_get)(struct devlink_port *, enum devlink_port_fn_state *, enum devlink_port_fn_opstate *, struct netlink_ext_ack *);
+	int (*port_fn_state_set)(struct devlink_port *, enum devlink_port_fn_state, struct netlink_ext_ack *);
+	int (*port_fn_ipsec_crypto_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_ipsec_crypto_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+	int (*port_fn_ipsec_packet_get)(struct devlink_port *, bool *, struct netlink_ext_ack *);
+	int (*port_fn_ipsec_packet_set)(struct devlink_port *, bool, struct netlink_ext_ack *);
+};
+
+enum devlink_rate_type {
+	DEVLINK_RATE_TYPE_LEAF = 0,
+	DEVLINK_RATE_TYPE_NODE = 1,
+};
+
+struct devlink_rate {
+	struct list_head list;
+	enum devlink_rate_type type;
+	struct devlink *devlink;
+	void *priv;
+	u64 tx_share;
+	u64 tx_max;
+	struct devlink_rate *parent;
+	union {
+		struct devlink_port *devlink_port;
+		struct {
+			char *name;
+			refcount_t refcnt;
+		};
+	};
+	u32 tx_priority;
+	u32 tx_weight;
+};
+
+enum ip_conntrack_info {
+	IP_CT_ESTABLISHED = 0,
+	IP_CT_RELATED = 1,
+	IP_CT_NEW = 2,
+	IP_CT_IS_REPLY = 3,
+	IP_CT_ESTABLISHED_REPLY = 3,
+	IP_CT_RELATED_REPLY = 4,
+	IP_CT_NUMBER = 5,
+	IP_CT_UNTRACKED = 7,
+};
+
+enum {
+	TCA_FLOWER_KEY_CT_FLAGS_NEW = 1,
+	TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 2,
+	TCA_FLOWER_KEY_CT_FLAGS_RELATED = 4,
+	TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 8,
+	TCA_FLOWER_KEY_CT_FLAGS_INVALID = 16,
+	TCA_FLOWER_KEY_CT_FLAGS_REPLY = 32,
+	__TCA_FLOWER_KEY_CT_FLAGS_MAX = 33,
+};
+
+enum flow_dissect_ret {
+	FLOW_DISSECT_RET_OUT_GOOD = 0,
+	FLOW_DISSECT_RET_OUT_BAD = 1,
+	FLOW_DISSECT_RET_PROTO_AGAIN = 2,
+	FLOW_DISSECT_RET_IPPROTO_AGAIN = 3,
+	FLOW_DISSECT_RET_CONTINUE = 4,
+};
+
+enum bpf_ret_code {
+	BPF_OK = 0,
+	BPF_DROP = 2,
+	BPF_REDIRECT = 7,
+	BPF_LWT_REROUTE = 128,
+	BPF_FLOW_DISSECTOR_CONTINUE = 129,
+};
+
+enum lwtunnel_encap_types {
+	LWTUNNEL_ENCAP_NONE = 0,
+	LWTUNNEL_ENCAP_MPLS = 1,
+	LWTUNNEL_ENCAP_IP = 2,
+	LWTUNNEL_ENCAP_ILA = 3,
+	LWTUNNEL_ENCAP_IP6 = 4,
+	LWTUNNEL_ENCAP_SEG6 = 5,
+	LWTUNNEL_ENCAP_BPF = 6,
+	LWTUNNEL_ENCAP_SEG6_LOCAL = 7,
+	LWTUNNEL_ENCAP_RPL = 8,
+	LWTUNNEL_ENCAP_IOAM6 = 9,
+	LWTUNNEL_ENCAP_XFRM = 10,
+	__LWTUNNEL_ENCAP_MAX = 11,
+};
+
+enum batadv_packettype {
+	BATADV_IV_OGM = 0,
+	BATADV_BCAST = 1,
+	BATADV_CODED = 2,
+	BATADV_ELP = 3,
+	BATADV_OGM2 = 4,
+	BATADV_MCAST = 5,
+	BATADV_UNICAST = 64,
+	BATADV_UNICAST_FRAG = 65,
+	BATADV_UNICAST_4ADDR = 66,
+	BATADV_ICMP = 67,
+	BATADV_UNICAST_TVLV = 68,
+};
+
+struct _flow_keys_digest_data {
+	__be16 n_proto;
+	u8 ip_proto;
+	u8 padding;
+	__be32 ports;
+	__be32 src;
+	__be32 dst;
+};
+
+union tcp_word_hdr {
+	struct tcphdr hdr;
+	__be32 words[5];
+};
+
+struct mpls_label {
+	__be32 entry;
+};
+
+struct flow_dissector_mpls_lse {
+	u32 mpls_ttl: 8;
+	u32 mpls_bos: 1;
+	u32 mpls_tc: 3;
+	u32 mpls_label: 20;
+};
+
+struct flow_dissector_key_mpls {
+	struct flow_dissector_mpls_lse ls[7];
+	u8 used_lses;
+};
+
+struct flow_dissector_key_keyid {
+	__be32 keyid;
+};
+
+struct flow_dissector_key_ip {
+	__u8 tos;
+	__u8 ttl;
+};
+
+struct batadv_unicast_packet {
+	__u8 packet_type;
+	__u8 version;
+	__u8 ttl;
+	__u8 ttvn;
+	__u8 dest[6];
+};
+
+struct arphdr {
+	__be16 ar_hrd;
+	__be16 ar_pro;
+	unsigned char ar_hln;
+	unsigned char ar_pln;
+	__be16 ar_op;
+};
+
+struct flow_dissector_key_arp {
+	__u32 sip;
+	__u32 tip;
+	__u8 op;
+	unsigned char sha[6];
+	unsigned char tha[6];
+};
+
+struct tipc_basic_hdr {
+	__be32 w[4];
+};
+
+struct flow_dissector_key_cfm {
+	u8 mdl_ver;
+	u8 opcode;
+};
+
+struct flow_dissector_key_ipsec {
+	__be32 spi;
+};
+
+struct flow_dissector_key_icmp {
+	struct {
+		u8 type;
+		u8 code;
+	};
+	u16 id;
+};
+
+struct icmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 checksum;
+	union {
+		struct {
+			__be16 id;
+			__be16 sequence;
+		} echo;
+		__be32 gateway;
+		struct {
+			__be16 __unused;
+			__be16 mtu;
+		} frag;
+		__u8 reserved[4];
+	} un;
+};
+
+struct flow_dissector_key_tcp {
+	__be16 flags;
+};
+
+struct gre_base_hdr {
+	__be16 flags;
+	__be16 protocol;
+};
+
+struct ip_esp_hdr {
+	__be32 spi;
+	__be32 seq_no;
+	__u8 enc_data[0];
+};
+
+struct flow_dissector_key_l2tpv3 {
+	__be32 session_id;
+};
+
+struct flow_dissector_key_ports {
+	union {
+		__be32 ports;
+		struct {
+			__be16 src;
+			__be16 dst;
+		};
+	};
+};
+
+struct flow_dissector_key_ipv4_addrs {
+	__be32 src;
+	__be32 dst;
+};
+
+struct flow_dissector_key_ipv6_addrs {
+	struct in6_addr src;
+	struct in6_addr dst;
+};
+
+struct flow_dissector_key_tipc {
+	__be32 key;
+};
+
+struct flow_dissector_key_addrs {
+	union {
+		struct flow_dissector_key_ipv4_addrs v4addrs;
+		struct flow_dissector_key_ipv6_addrs v6addrs;
+		struct flow_dissector_key_tipc tipckey;
+	};
+};
+
+struct flow_dissector_key_tags {
+	u32 flow_label;
+};
+
+struct flow_dissector_key_vlan {
+	union {
+		struct {
+			u16 vlan_id: 12;
+			u16 vlan_dei: 1;
+			u16 vlan_priority: 3;
+		};
+		__be16 vlan_tci;
+	};
+	__be16 vlan_tpid;
+	__be16 vlan_eth_type;
+	u16 padding;
+};
+
+struct flow_keys {
+	struct flow_dissector_key_control control;
+	struct flow_dissector_key_basic basic;
+	struct flow_dissector_key_tags tags;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_vlan cvlan;
+	struct flow_dissector_key_keyid keyid;
+	struct flow_dissector_key_ports ports;
+	struct flow_dissector_key_icmp icmp;
+	struct flow_dissector_key_addrs addrs;
+	long: 0;
+};
+
+struct flow_dissector_key_meta {
+	int ingress_ifindex;
+	u16 ingress_iftype;
+	u8 l2_miss;
+};
+
+struct flow_dissector_key_ct {
+	u16 ct_state;
+	u16 ct_zone;
+	u32 ct_mark;
+	u32 ct_labels[4];
+};
+
+struct nf_conn_labels {
+	unsigned long bits[2];
+};
+
+struct flow_dissector_key_enc_opts {
+	u8 data[255];
+	u8 len;
+	__be16 dst_opt_type;
+};
+
+struct flow_dissector_key_hash {
+	u32 hash;
+};
+
+struct clock_identity {
+	u8 id[8];
+};
+
+struct port_identity {
+	struct clock_identity clock_identity;
+	__be16 port_number;
+};
+
+struct ptp_header {
+	u8 tsmt;
+	u8 ver;
+	__be16 message_length;
+	u8 domain_number;
+	u8 reserved1;
+	u8 flag_field[2];
+	__be64 correction;
+	__be32 reserved2;
+	struct port_identity source_port_identity;
+	__be16 sequence_id;
+	u8 control;
+	u8 log_message_interval;
+} __attribute__((packed));
+
+struct hsr_tag {
+	__be16 path_and_LSDU_size;
+	__be16 sequence_nr;
+	__be16 encap_proto;
+};
+
+struct flow_dissector_key_eth_addrs {
+	unsigned char dst[6];
+	unsigned char src[6];
+};
+
+struct flow_dissector_key_num_of_vlans {
+	u8 num_of_vlans;
+};
+
+struct flow_dissector_key_pppoe {
+	__be16 session_id;
+	__be16 ppp_proto;
+	__be16 type;
+};
+
+struct flow_keys_digest {
+	u8 data[16];
+};
+
+struct rps_map;
+
+struct rps_dev_flow_table;
+
+struct netdev_rx_queue {
+	struct xdp_rxq_info xdp_rxq;
+	struct rps_map __attribute__((btf_type_tag("rcu"))) *rps_map;
+	struct rps_dev_flow_table __attribute__((btf_type_tag("rcu"))) *rps_flow_table;
+	struct kobject kobj;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct xsk_buff_pool *pool;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+	u64 android_kabi_reserved3;
+	u64 android_kabi_reserved4;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct rps_map {
+	unsigned int len;
+	struct callback_head rcu;
+	u16 cpus[0];
+};
+
+struct rps_dev_flow {
+	u16 cpu;
+	u16 filter;
+	unsigned int last_qtail;
+};
+
+struct rps_dev_flow_table {
+	unsigned int mask;
+	struct callback_head rcu;
+	struct rps_dev_flow flows[0];
+};
+
+struct bpf_xdp_link {
+	struct bpf_link link;
+	struct net_device *dev;
+	int flags;
+};
+
+enum xps_map_type {
+	XPS_CPUS = 0,
+	XPS_RXQS = 1,
+	XPS_MAPS_MAX = 2,
+};
+
+enum qdisc_state_t {
+	__QDISC_STATE_SCHED = 0,
+	__QDISC_STATE_DEACTIVATED = 1,
+	__QDISC_STATE_MISSED = 2,
+	__QDISC_STATE_DRAINING = 3,
+};
+
+enum {
+	NAPIF_STATE_SCHED = 1,
+	NAPIF_STATE_MISSED = 2,
+	NAPIF_STATE_DISABLE = 4,
+	NAPIF_STATE_NPSVC = 8,
+	NAPIF_STATE_LISTED = 16,
+	NAPIF_STATE_NO_BUSY_POLL = 32,
+	NAPIF_STATE_IN_BUSY_POLL = 64,
+	NAPIF_STATE_PREFER_BUSY_POLL = 128,
+	NAPIF_STATE_THREADED = 256,
+	NAPIF_STATE_SCHED_THREADED = 512,
+};
+
+enum {
+	LINUX_MIB_NUM = 0,
+	LINUX_MIB_SYNCOOKIESSENT = 1,
+	LINUX_MIB_SYNCOOKIESRECV = 2,
+	LINUX_MIB_SYNCOOKIESFAILED = 3,
+	LINUX_MIB_EMBRYONICRSTS = 4,
+	LINUX_MIB_PRUNECALLED = 5,
+	LINUX_MIB_RCVPRUNED = 6,
+	LINUX_MIB_OFOPRUNED = 7,
+	LINUX_MIB_OUTOFWINDOWICMPS = 8,
+	LINUX_MIB_LOCKDROPPEDICMPS = 9,
+	LINUX_MIB_ARPFILTER = 10,
+	LINUX_MIB_TIMEWAITED = 11,
+	LINUX_MIB_TIMEWAITRECYCLED = 12,
+	LINUX_MIB_TIMEWAITKILLED = 13,
+	LINUX_MIB_PAWSACTIVEREJECTED = 14,
+	LINUX_MIB_PAWSESTABREJECTED = 15,
+	LINUX_MIB_DELAYEDACKS = 16,
+	LINUX_MIB_DELAYEDACKLOCKED = 17,
+	LINUX_MIB_DELAYEDACKLOST = 18,
+	LINUX_MIB_LISTENOVERFLOWS = 19,
+	LINUX_MIB_LISTENDROPS = 20,
+	LINUX_MIB_TCPHPHITS = 21,
+	LINUX_MIB_TCPPUREACKS = 22,
+	LINUX_MIB_TCPHPACKS = 23,
+	LINUX_MIB_TCPRENORECOVERY = 24,
+	LINUX_MIB_TCPSACKRECOVERY = 25,
+	LINUX_MIB_TCPSACKRENEGING = 26,
+	LINUX_MIB_TCPSACKREORDER = 27,
+	LINUX_MIB_TCPRENOREORDER = 28,
+	LINUX_MIB_TCPTSREORDER = 29,
+	LINUX_MIB_TCPFULLUNDO = 30,
+	LINUX_MIB_TCPPARTIALUNDO = 31,
+	LINUX_MIB_TCPDSACKUNDO = 32,
+	LINUX_MIB_TCPLOSSUNDO = 33,
+	LINUX_MIB_TCPLOSTRETRANSMIT = 34,
+	LINUX_MIB_TCPRENOFAILURES = 35,
+	LINUX_MIB_TCPSACKFAILURES = 36,
+	LINUX_MIB_TCPLOSSFAILURES = 37,
+	LINUX_MIB_TCPFASTRETRANS = 38,
+	LINUX_MIB_TCPSLOWSTARTRETRANS = 39,
+	LINUX_MIB_TCPTIMEOUTS = 40,
+	LINUX_MIB_TCPLOSSPROBES = 41,
+	LINUX_MIB_TCPLOSSPROBERECOVERY = 42,
+	LINUX_MIB_TCPRENORECOVERYFAIL = 43,
+	LINUX_MIB_TCPSACKRECOVERYFAIL = 44,
+	LINUX_MIB_TCPRCVCOLLAPSED = 45,
+	LINUX_MIB_TCPDSACKOLDSENT = 46,
+	LINUX_MIB_TCPDSACKOFOSENT = 47,
+	LINUX_MIB_TCPDSACKRECV = 48,
+	LINUX_MIB_TCPDSACKOFORECV = 49,
+	LINUX_MIB_TCPABORTONDATA = 50,
+	LINUX_MIB_TCPABORTONCLOSE = 51,
+	LINUX_MIB_TCPABORTONMEMORY = 52,
+	LINUX_MIB_TCPABORTONTIMEOUT = 53,
+	LINUX_MIB_TCPABORTONLINGER = 54,
+	LINUX_MIB_TCPABORTFAILED = 55,
+	LINUX_MIB_TCPMEMORYPRESSURES = 56,
+	LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,
+	LINUX_MIB_TCPSACKDISCARD = 58,
+	LINUX_MIB_TCPDSACKIGNOREDOLD = 59,
+	LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,
+	LINUX_MIB_TCPSPURIOUSRTOS = 61,
+	LINUX_MIB_TCPMD5NOTFOUND = 62,
+	LINUX_MIB_TCPMD5UNEXPECTED = 63,
+	LINUX_MIB_TCPMD5FAILURE = 64,
+	LINUX_MIB_SACKSHIFTED = 65,
+	LINUX_MIB_SACKMERGED = 66,
+	LINUX_MIB_SACKSHIFTFALLBACK = 67,
+	LINUX_MIB_TCPBACKLOGDROP = 68,
+	LINUX_MIB_PFMEMALLOCDROP = 69,
+	LINUX_MIB_TCPMINTTLDROP = 70,
+	LINUX_MIB_TCPDEFERACCEPTDROP = 71,
+	LINUX_MIB_IPRPFILTER = 72,
+	LINUX_MIB_TCPTIMEWAITOVERFLOW = 73,
+	LINUX_MIB_TCPREQQFULLDOCOOKIES = 74,
+	LINUX_MIB_TCPREQQFULLDROP = 75,
+	LINUX_MIB_TCPRETRANSFAIL = 76,
+	LINUX_MIB_TCPRCVCOALESCE = 77,
+	LINUX_MIB_TCPBACKLOGCOALESCE = 78,
+	LINUX_MIB_TCPOFOQUEUE = 79,
+	LINUX_MIB_TCPOFODROP = 80,
+	LINUX_MIB_TCPOFOMERGE = 81,
+	LINUX_MIB_TCPCHALLENGEACK = 82,
+	LINUX_MIB_TCPSYNCHALLENGE = 83,
+	LINUX_MIB_TCPFASTOPENACTIVE = 84,
+	LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,
+	LINUX_MIB_TCPFASTOPENPASSIVE = 86,
+	LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,
+	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,
+	LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,
+	LINUX_MIB_TCPFASTOPENBLACKHOLE = 90,
+	LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,
+	LINUX_MIB_BUSYPOLLRXPACKETS = 92,
+	LINUX_MIB_TCPAUTOCORKING = 93,
+	LINUX_MIB_TCPFROMZEROWINDOWADV = 94,
+	LINUX_MIB_TCPTOZEROWINDOWADV = 95,
+	LINUX_MIB_TCPWANTZEROWINDOWADV = 96,
+	LINUX_MIB_TCPSYNRETRANS = 97,
+	LINUX_MIB_TCPORIGDATASENT = 98,
+	LINUX_MIB_TCPHYSTARTTRAINDETECT = 99,
+	LINUX_MIB_TCPHYSTARTTRAINCWND = 100,
+	LINUX_MIB_TCPHYSTARTDELAYDETECT = 101,
+	LINUX_MIB_TCPHYSTARTDELAYCWND = 102,
+	LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,
+	LINUX_MIB_TCPACKSKIPPEDPAWS = 104,
+	LINUX_MIB_TCPACKSKIPPEDSEQ = 105,
+	LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,
+	LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,
+	LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,
+	LINUX_MIB_TCPWINPROBE = 109,
+	LINUX_MIB_TCPKEEPALIVE = 110,
+	LINUX_MIB_TCPMTUPFAIL = 111,
+	LINUX_MIB_TCPMTUPSUCCESS = 112,
+	LINUX_MIB_TCPDELIVERED = 113,
+	LINUX_MIB_TCPDELIVEREDCE = 114,
+	LINUX_MIB_TCPACKCOMPRESSED = 115,
+	LINUX_MIB_TCPZEROWINDOWDROP = 116,
+	LINUX_MIB_TCPRCVQDROP = 117,
+	LINUX_MIB_TCPWQUEUETOOBIG = 118,
+	LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,
+	LINUX_MIB_TCPTIMEOUTREHASH = 120,
+	LINUX_MIB_TCPDUPLICATEDATAREHASH = 121,
+	LINUX_MIB_TCPDSACKRECVSEGS = 122,
+	LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,
+	LINUX_MIB_TCPMIGRATEREQSUCCESS = 124,
+	LINUX_MIB_TCPMIGRATEREQFAILURE = 125,
+	LINUX_MIB_TCPPLBREHASH = 126,
+	__LINUX_MIB_MAX = 127,
+};
+
+enum netdev_offload_xstats_type {
+	NETDEV_OFFLOAD_XSTATS_TYPE_L3 = 1,
+};
+
+enum bpf_xdp_mode {
+	XDP_MODE_SKB = 0,
+	XDP_MODE_DRV = 1,
+	XDP_MODE_HW = 2,
+	__MAX_XDP_MODE = 3,
+};
+
+enum {
+	IF_OPER_UNKNOWN = 0,
+	IF_OPER_NOTPRESENT = 1,
+	IF_OPER_DOWN = 2,
+	IF_OPER_LOWERLAYERDOWN = 3,
+	IF_OPER_TESTING = 4,
+	IF_OPER_DORMANT = 5,
+	IF_OPER_UP = 6,
+};
+
+enum {
+	NFPROTO_UNSPEC = 0,
+	NFPROTO_INET = 1,
+	NFPROTO_IPV4 = 2,
+	NFPROTO_ARP = 3,
+	NFPROTO_NETDEV = 5,
+	NFPROTO_BRIDGE = 7,
+	NFPROTO_IPV6 = 10,
+	NFPROTO_NUMPROTO = 11,
+};
+
+enum nf_dev_hooks {
+	NF_NETDEV_INGRESS = 0,
+	NF_NETDEV_EGRESS = 1,
+	NF_NETDEV_NUMHOOKS = 2,
+};
+
+enum tcx_action_base {
+	TCX_NEXT = -1,
+	TCX_PASS = 0,
+	TCX_DROP = 2,
+	TCX_REDIRECT = 7,
+};
+
+enum qdisc_state2_t {
+	__QDISC_STATE2_RUNNING = 0,
+};
+
+struct netdev_adjacent {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	bool master;
+	bool ignore;
+	u16 ref_nr;
+	void *private;
+	struct list_head list;
+	struct callback_head rcu;
+};
+
+struct dev_kfree_skb_cb {
+	enum skb_drop_reason reason;
+};
+
+struct tc_skb_cb {
+	struct qdisc_skb_cb qdisc_cb;
+	u16 mru;
+	u8 post_ct: 1;
+	u8 post_ct_snat: 1;
+	u8 post_ct_dnat: 1;
+	u16 zone;
+};
+
+struct netdev_net_notifier {
+	struct list_head list;
+	struct notifier_block *nb;
+};
+
+struct net_device_path_stack {
+	int num_paths;
+	struct net_device_path path[5];
+};
+
+struct netdev_nested_priv {
+	unsigned char flags;
+	void *data;
+};
+
+struct netdev_notifier_offload_xstats_rd;
+
+struct netdev_notifier_offload_xstats_ru;
+
+struct netdev_notifier_offload_xstats_info {
+	struct netdev_notifier_info info;
+	enum netdev_offload_xstats_type type;
+	union {
+		struct netdev_notifier_offload_xstats_rd *report_delta;
+		struct netdev_notifier_offload_xstats_ru *report_used;
+	};
+};
+
+struct netdev_notifier_offload_xstats_rd {
+	struct rtnl_hw_stats64 stats;
+	bool used;
+};
+
+struct netdev_notifier_offload_xstats_ru {
+	bool used;
+};
+
+typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);
+
+struct netdev_notifier_change_info {
+	struct netdev_notifier_info info;
+	unsigned int flags_changed;
+};
+
+struct netdev_notifier_changeupper_info {
+	struct netdev_notifier_info info;
+	struct net_device *upper_dev;
+	bool master;
+	bool linking;
+	void *upper_info;
+};
+
+struct ifslave {
+	__s32 slave_id;
+	char slave_name[16];
+	__s8 link;
+	__s8 state;
+	__u32 link_failure_count;
+};
+
+typedef struct ifslave ifslave;
+
+struct ifbond {
+	__s32 bond_mode;
+	__s32 num_slaves;
+	__s32 miimon;
+};
+
+typedef struct ifbond ifbond;
+
+struct netdev_bonding_info {
+	ifslave slave;
+	ifbond master;
+};
+
+struct netdev_notifier_bonding_info {
+	struct netdev_notifier_info info;
+	struct netdev_bonding_info bonding_info;
+};
+
+struct netdev_notifier_changelowerstate_info {
+	struct netdev_notifier_info info;
+	void *lower_state_info;
+};
+
+struct netdev_notifier_info_ext {
+	struct netdev_notifier_info info;
+	union {
+		u32 mtu;
+	} ext;
+};
+
+struct netdev_notifier_pre_changeaddr_info {
+	struct netdev_notifier_info info;
+	const unsigned char *dev_addr;
+};
+
+struct netdev_hw_addr {
+	struct list_head list;
+	struct rb_node node;
+	unsigned char addr[32];
+	unsigned char type;
+	bool global_use;
+	int sync_cnt;
+	int refcount;
+	int synced;
+	struct callback_head callback_head;
+};
+
+struct xfrm_dst {
+	union {
+		struct dst_entry dst;
+		struct rtable rt;
+		struct rt6_info rt6;
+	} u;
+	struct dst_entry *route;
+	struct dst_entry *child;
+	struct dst_entry *path;
+	struct xfrm_policy *pols[2];
+	int num_pols;
+	int num_xfrms;
+	u32 xfrm_genid;
+	u32 policy_genid;
+	u32 route_mtu_cached;
+	u32 child_mtu_cached;
+	u32 route_cookie;
+	u32 path_cookie;
+};
+
+struct neigh_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table neigh_vars[22];
+};
+
+enum {
+	NEIGH_VAR_MCAST_PROBES = 0,
+	NEIGH_VAR_UCAST_PROBES = 1,
+	NEIGH_VAR_APP_PROBES = 2,
+	NEIGH_VAR_MCAST_REPROBES = 3,
+	NEIGH_VAR_RETRANS_TIME = 4,
+	NEIGH_VAR_BASE_REACHABLE_TIME = 5,
+	NEIGH_VAR_DELAY_PROBE_TIME = 6,
+	NEIGH_VAR_INTERVAL_PROBE_TIME_MS = 7,
+	NEIGH_VAR_GC_STALETIME = 8,
+	NEIGH_VAR_QUEUE_LEN_BYTES = 9,
+	NEIGH_VAR_PROXY_QLEN = 10,
+	NEIGH_VAR_ANYCAST_DELAY = 11,
+	NEIGH_VAR_PROXY_DELAY = 12,
+	NEIGH_VAR_LOCKTIME = 13,
+	NEIGH_VAR_QUEUE_LEN = 14,
+	NEIGH_VAR_RETRANS_TIME_MS = 15,
+	NEIGH_VAR_BASE_REACHABLE_TIME_MS = 16,
+	NEIGH_VAR_GC_INTERVAL = 17,
+	NEIGH_VAR_GC_THRESH1 = 18,
+	NEIGH_VAR_GC_THRESH2 = 19,
+	NEIGH_VAR_GC_THRESH3 = 20,
+	NEIGH_VAR_MAX = 21,
+};
+
+enum {
+	NEIGH_ARP_TABLE = 0,
+	NEIGH_ND_TABLE = 1,
+	NEIGH_DN_TABLE = 2,
+	NEIGH_NR_TABLES = 3,
+	NEIGH_LINK_TABLE = 3,
+};
+
+enum netevent_notif_type {
+	NETEVENT_NEIGH_UPDATE = 1,
+	NETEVENT_REDIRECT = 2,
+	NETEVENT_DELAY_PROBE_TIME_UPDATE = 3,
+	NETEVENT_IPV4_MPATH_HASH_UPDATE = 4,
+	NETEVENT_IPV6_MPATH_HASH_UPDATE = 5,
+	NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,
+};
+
+enum {
+	NDA_UNSPEC = 0,
+	NDA_DST = 1,
+	NDA_LLADDR = 2,
+	NDA_CACHEINFO = 3,
+	NDA_PROBES = 4,
+	NDA_VLAN = 5,
+	NDA_PORT = 6,
+	NDA_VNI = 7,
+	NDA_IFINDEX = 8,
+	NDA_MASTER = 9,
+	NDA_LINK_NETNSID = 10,
+	NDA_SRC_VNI = 11,
+	NDA_PROTOCOL = 12,
+	NDA_NH_ID = 13,
+	NDA_FDB_EXT_ATTRS = 14,
+	NDA_FLAGS_EXT = 15,
+	NDA_NDM_STATE_MASK = 16,
+	NDA_NDM_FLAGS_MASK = 17,
+	__NDA_MAX = 18,
+};
+
+enum {
+	RTN_UNSPEC = 0,
+	RTN_UNICAST = 1,
+	RTN_LOCAL = 2,
+	RTN_BROADCAST = 3,
+	RTN_ANYCAST = 4,
+	RTN_MULTICAST = 5,
+	RTN_BLACKHOLE = 6,
+	RTN_UNREACHABLE = 7,
+	RTN_PROHIBIT = 8,
+	RTN_THROW = 9,
+	RTN_NAT = 10,
+	RTN_XRESOLVE = 11,
+	__RTN_MAX = 12,
+};
+
+enum {
+	NDTA_UNSPEC = 0,
+	NDTA_NAME = 1,
+	NDTA_THRESH1 = 2,
+	NDTA_THRESH2 = 3,
+	NDTA_THRESH3 = 4,
+	NDTA_CONFIG = 5,
+	NDTA_PARMS = 6,
+	NDTA_STATS = 7,
+	NDTA_GC_INTERVAL = 8,
+	NDTA_PAD = 9,
+	__NDTA_MAX = 10,
+};
+
+enum {
+	NDTPA_UNSPEC = 0,
+	NDTPA_IFINDEX = 1,
+	NDTPA_REFCNT = 2,
+	NDTPA_REACHABLE_TIME = 3,
+	NDTPA_BASE_REACHABLE_TIME = 4,
+	NDTPA_RETRANS_TIME = 5,
+	NDTPA_GC_STALETIME = 6,
+	NDTPA_DELAY_PROBE_TIME = 7,
+	NDTPA_QUEUE_LEN = 8,
+	NDTPA_APP_PROBES = 9,
+	NDTPA_UCAST_PROBES = 10,
+	NDTPA_MCAST_PROBES = 11,
+	NDTPA_ANYCAST_DELAY = 12,
+	NDTPA_PROXY_DELAY = 13,
+	NDTPA_PROXY_QLEN = 14,
+	NDTPA_LOCKTIME = 15,
+	NDTPA_QUEUE_LENBYTES = 16,
+	NDTPA_MCAST_REPROBES = 17,
+	NDTPA_PAD = 18,
+	NDTPA_INTERVAL_PROBE_TIME_MS = 19,
+	__NDTPA_MAX = 20,
+};
+
+struct neighbour_cb {
+	unsigned long sched_next;
+	unsigned int flags;
+};
+
+struct neigh_seq_state {
+	struct seq_net_private p;
+	struct neigh_table *tbl;
+	struct neigh_hash_table *nht;
+	void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);
+	unsigned int bucket;
+	unsigned int flags;
+};
+
+struct neigh_dump_filter {
+	int master_idx;
+	int dev_idx;
+};
+
+struct ndtmsg {
+	__u8 ndtm_family;
+	__u8 ndtm_pad1;
+	__u16 ndtm_pad2;
+};
+
+struct ndt_config {
+	__u16 ndtc_key_len;
+	__u16 ndtc_entry_size;
+	__u32 ndtc_entries;
+	__u32 ndtc_last_flush;
+	__u32 ndtc_last_rand;
+	__u32 ndtc_hash_rnd;
+	__u32 ndtc_hash_mask;
+	__u32 ndtc_hash_chain_gc;
+	__u32 ndtc_proxy_qlen;
+};
+
+struct ndt_stats {
+	__u64 ndts_allocs;
+	__u64 ndts_destroys;
+	__u64 ndts_hash_grows;
+	__u64 ndts_res_failed;
+	__u64 ndts_lookups;
+	__u64 ndts_hits;
+	__u64 ndts_rcv_probes_mcast;
+	__u64 ndts_rcv_probes_ucast;
+	__u64 ndts_periodic_gc_runs;
+	__u64 ndts_forced_gc_runs;
+	__u64 ndts_table_fulls;
+};
+
+struct nda_cacheinfo {
+	__u32 ndm_confirmed;
+	__u32 ndm_used;
+	__u32 ndm_updated;
+	__u32 ndm_refcnt;
+};
+
+struct rtnl_link {
+	rtnl_doit_func doit;
+	rtnl_dumpit_func dumpit;
+	struct module *owner;
+	unsigned int flags;
+	struct callback_head rcu;
+};
+
+enum rtattr_type_t {
+	RTA_UNSPEC = 0,
+	RTA_DST = 1,
+	RTA_SRC = 2,
+	RTA_IIF = 3,
+	RTA_OIF = 4,
+	RTA_GATEWAY = 5,
+	RTA_PRIORITY = 6,
+	RTA_PREFSRC = 7,
+	RTA_METRICS = 8,
+	RTA_MULTIPATH = 9,
+	RTA_PROTOINFO = 10,
+	RTA_FLOW = 11,
+	RTA_CACHEINFO = 12,
+	RTA_SESSION = 13,
+	RTA_MP_ALGO = 14,
+	RTA_TABLE = 15,
+	RTA_MARK = 16,
+	RTA_MFC_STATS = 17,
+	RTA_VIA = 18,
+	RTA_NEWDST = 19,
+	RTA_PREF = 20,
+	RTA_ENCAP_TYPE = 21,
+	RTA_ENCAP = 22,
+	RTA_EXPIRES = 23,
+	RTA_PAD = 24,
+	RTA_UID = 25,
+	RTA_TTL_PROPAGATE = 26,
+	RTA_IP_PROTO = 27,
+	RTA_SPORT = 28,
+	RTA_DPORT = 29,
+	RTA_NH_ID = 30,
+	__RTA_MAX = 31,
+};
+
+enum {
+	IFLA_BRIDGE_FLAGS = 0,
+	IFLA_BRIDGE_MODE = 1,
+	IFLA_BRIDGE_VLAN_INFO = 2,
+	IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,
+	IFLA_BRIDGE_MRP = 4,
+	IFLA_BRIDGE_CFM = 5,
+	IFLA_BRIDGE_MST = 6,
+	__IFLA_BRIDGE_MAX = 7,
+};
+
+enum {
+	IFLA_BRPORT_UNSPEC = 0,
+	IFLA_BRPORT_STATE = 1,
+	IFLA_BRPORT_PRIORITY = 2,
+	IFLA_BRPORT_COST = 3,
+	IFLA_BRPORT_MODE = 4,
+	IFLA_BRPORT_GUARD = 5,
+	IFLA_BRPORT_PROTECT = 6,
+	IFLA_BRPORT_FAST_LEAVE = 7,
+	IFLA_BRPORT_LEARNING = 8,
+	IFLA_BRPORT_UNICAST_FLOOD = 9,
+	IFLA_BRPORT_PROXYARP = 10,
+	IFLA_BRPORT_LEARNING_SYNC = 11,
+	IFLA_BRPORT_PROXYARP_WIFI = 12,
+	IFLA_BRPORT_ROOT_ID = 13,
+	IFLA_BRPORT_BRIDGE_ID = 14,
+	IFLA_BRPORT_DESIGNATED_PORT = 15,
+	IFLA_BRPORT_DESIGNATED_COST = 16,
+	IFLA_BRPORT_ID = 17,
+	IFLA_BRPORT_NO = 18,
+	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,
+	IFLA_BRPORT_CONFIG_PENDING = 20,
+	IFLA_BRPORT_MESSAGE_AGE_TIMER = 21,
+	IFLA_BRPORT_FORWARD_DELAY_TIMER = 22,
+	IFLA_BRPORT_HOLD_TIMER = 23,
+	IFLA_BRPORT_FLUSH = 24,
+	IFLA_BRPORT_MULTICAST_ROUTER = 25,
+	IFLA_BRPORT_PAD = 26,
+	IFLA_BRPORT_MCAST_FLOOD = 27,
+	IFLA_BRPORT_MCAST_TO_UCAST = 28,
+	IFLA_BRPORT_VLAN_TUNNEL = 29,
+	IFLA_BRPORT_BCAST_FLOOD = 30,
+	IFLA_BRPORT_GROUP_FWD_MASK = 31,
+	IFLA_BRPORT_NEIGH_SUPPRESS = 32,
+	IFLA_BRPORT_ISOLATED = 33,
+	IFLA_BRPORT_BACKUP_PORT = 34,
+	IFLA_BRPORT_MRP_RING_OPEN = 35,
+	IFLA_BRPORT_MRP_IN_OPEN = 36,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT = 37,
+	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT = 38,
+	IFLA_BRPORT_LOCKED = 39,
+	IFLA_BRPORT_MAB = 40,
+	IFLA_BRPORT_MCAST_N_GROUPS = 41,
+	IFLA_BRPORT_MCAST_MAX_GROUPS = 42,
+	IFLA_BRPORT_NEIGH_VLAN_SUPPRESS = 43,
+	IFLA_BRPORT_BACKUP_NHID = 44,
+	__IFLA_BRPORT_MAX = 45,
+};
+
+enum {
+	IFLA_STATS_UNSPEC = 0,
+	IFLA_STATS_LINK_64 = 1,
+	IFLA_STATS_LINK_XSTATS = 2,
+	IFLA_STATS_LINK_XSTATS_SLAVE = 3,
+	IFLA_STATS_LINK_OFFLOAD_XSTATS = 4,
+	IFLA_STATS_AF_SPEC = 5,
+	__IFLA_STATS_MAX = 6,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_CPU_HIT = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO = 2,
+	IFLA_OFFLOAD_XSTATS_L3_STATS = 3,
+	__IFLA_OFFLOAD_XSTATS_MAX = 4,
+};
+
+enum rtnl_kinds {
+	RTNL_KIND_NEW = 0,
+	RTNL_KIND_DEL = 1,
+	RTNL_KIND_GET = 2,
+	RTNL_KIND_SET = 3,
+};
+
+enum {
+	IFLA_EVENT_NONE = 0,
+	IFLA_EVENT_REBOOT = 1,
+	IFLA_EVENT_FEATURES = 2,
+	IFLA_EVENT_BONDING_FAILOVER = 3,
+	IFLA_EVENT_NOTIFY_PEERS = 4,
+	IFLA_EVENT_IGMP_RESEND = 5,
+	IFLA_EVENT_BONDING_OPTIONS = 6,
+};
+
+enum {
+	IFLA_PROTO_DOWN_REASON_UNSPEC = 0,
+	IFLA_PROTO_DOWN_REASON_MASK = 1,
+	IFLA_PROTO_DOWN_REASON_VALUE = 2,
+	__IFLA_PROTO_DOWN_REASON_CNT = 3,
+	IFLA_PROTO_DOWN_REASON_MAX = 2,
+};
+
+enum {
+	IFLA_VF_INFO_UNSPEC = 0,
+	IFLA_VF_INFO = 1,
+	__IFLA_VF_INFO_MAX = 2,
+};
+
+enum {
+	IFLA_VF_UNSPEC = 0,
+	IFLA_VF_MAC = 1,
+	IFLA_VF_VLAN = 2,
+	IFLA_VF_TX_RATE = 3,
+	IFLA_VF_SPOOFCHK = 4,
+	IFLA_VF_LINK_STATE = 5,
+	IFLA_VF_RATE = 6,
+	IFLA_VF_RSS_QUERY_EN = 7,
+	IFLA_VF_STATS = 8,
+	IFLA_VF_TRUST = 9,
+	IFLA_VF_IB_NODE_GUID = 10,
+	IFLA_VF_IB_PORT_GUID = 11,
+	IFLA_VF_VLAN_LIST = 12,
+	IFLA_VF_BROADCAST = 13,
+	__IFLA_VF_MAX = 14,
+};
+
+enum {
+	IFLA_VF_VLAN_INFO_UNSPEC = 0,
+	IFLA_VF_VLAN_INFO = 1,
+	__IFLA_VF_VLAN_INFO_MAX = 2,
+};
+
+enum {
+	IFLA_VF_STATS_RX_PACKETS = 0,
+	IFLA_VF_STATS_TX_PACKETS = 1,
+	IFLA_VF_STATS_RX_BYTES = 2,
+	IFLA_VF_STATS_TX_BYTES = 3,
+	IFLA_VF_STATS_BROADCAST = 4,
+	IFLA_VF_STATS_MULTICAST = 5,
+	IFLA_VF_STATS_PAD = 6,
+	IFLA_VF_STATS_RX_DROPPED = 7,
+	IFLA_VF_STATS_TX_DROPPED = 8,
+	__IFLA_VF_STATS_MAX = 9,
+};
+
+enum {
+	IFLA_VF_PORT_UNSPEC = 0,
+	IFLA_VF_PORT = 1,
+	__IFLA_VF_PORT_MAX = 2,
+};
+
+enum {
+	IFLA_PORT_UNSPEC = 0,
+	IFLA_PORT_VF = 1,
+	IFLA_PORT_PROFILE = 2,
+	IFLA_PORT_VSI_TYPE = 3,
+	IFLA_PORT_INSTANCE_UUID = 4,
+	IFLA_PORT_HOST_UUID = 5,
+	IFLA_PORT_REQUEST = 6,
+	IFLA_PORT_RESPONSE = 7,
+	__IFLA_PORT_MAX = 8,
+};
+
+enum {
+	XDP_ATTACHED_NONE = 0,
+	XDP_ATTACHED_DRV = 1,
+	XDP_ATTACHED_SKB = 2,
+	XDP_ATTACHED_HW = 3,
+	XDP_ATTACHED_MULTI = 4,
+};
+
+enum {
+	IFLA_XDP_UNSPEC = 0,
+	IFLA_XDP_FD = 1,
+	IFLA_XDP_ATTACHED = 2,
+	IFLA_XDP_FLAGS = 3,
+	IFLA_XDP_PROG_ID = 4,
+	IFLA_XDP_DRV_PROG_ID = 5,
+	IFLA_XDP_SKB_PROG_ID = 6,
+	IFLA_XDP_HW_PROG_ID = 7,
+	IFLA_XDP_EXPECTED_FD = 8,
+	__IFLA_XDP_MAX = 9,
+};
+
+enum {
+	IFLA_INFO_UNSPEC = 0,
+	IFLA_INFO_KIND = 1,
+	IFLA_INFO_DATA = 2,
+	IFLA_INFO_XSTATS = 3,
+	IFLA_INFO_SLAVE_KIND = 4,
+	IFLA_INFO_SLAVE_DATA = 5,
+	__IFLA_INFO_MAX = 6,
+};
+
+enum {
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC = 0,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST = 1,
+	IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED = 2,
+	__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX = 3,
+};
+
+enum {
+	IFLA_STATS_GETSET_UNSPEC = 0,
+	IFLA_STATS_GET_FILTERS = 1,
+	IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS = 2,
+	__IFLA_STATS_GETSET_MAX = 3,
+};
+
+enum {
+	MDBA_SET_ENTRY_UNSPEC = 0,
+	MDBA_SET_ENTRY = 1,
+	MDBA_SET_ENTRY_ATTRS = 2,
+	__MDBA_SET_ENTRY_MAX = 3,
+};
+
+struct rtnl_af_ops {
+	struct list_head list;
+	int family;
+	int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);
+	size_t (*get_link_af_size)(const struct net_device *, u32);
+	int (*validate_link_af)(const struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*set_link_af)(struct net_device *, const struct nlattr *, struct netlink_ext_ack *);
+	int (*fill_stats_af)(struct sk_buff *, const struct net_device *);
+	size_t (*get_stats_af_size)(const struct net_device *);
+};
+
+struct rtnl_offload_xstats_request_used {
+	bool request;
+	bool used;
+};
+
+struct rtnl_newlink_tbs {
+	struct nlattr *tb[65];
+	struct nlattr *attr[51];
+	struct nlattr *slave_attr[45];
+};
+
+struct if_stats_msg {
+	__u8 family;
+	__u8 pad1;
+	__u16 pad2;
+	__u32 ifindex;
+	__u32 filter_mask;
+};
+
+struct br_port_msg {
+	__u8 family;
+	__u32 ifindex;
+};
+
+struct rtnl_link_stats {
+	__u32 rx_packets;
+	__u32 tx_packets;
+	__u32 rx_bytes;
+	__u32 tx_bytes;
+	__u32 rx_errors;
+	__u32 tx_errors;
+	__u32 rx_dropped;
+	__u32 tx_dropped;
+	__u32 multicast;
+	__u32 collisions;
+	__u32 rx_length_errors;
+	__u32 rx_over_errors;
+	__u32 rx_crc_errors;
+	__u32 rx_frame_errors;
+	__u32 rx_fifo_errors;
+	__u32 rx_missed_errors;
+	__u32 tx_aborted_errors;
+	__u32 tx_carrier_errors;
+	__u32 tx_fifo_errors;
+	__u32 tx_heartbeat_errors;
+	__u32 tx_window_errors;
+	__u32 rx_compressed;
+	__u32 tx_compressed;
+	__u32 rx_nohandler;
+};
+
+struct netlink_dump_control {
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	struct netlink_ext_ack *extack;
+	void *data;
+	struct module *module;
+	u32 min_dump_alloc;
+};
+
+struct ifla_vf_mac {
+	__u32 vf;
+	__u8 mac[32];
+};
+
+struct ifla_vf_vlan {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+};
+
+struct ifla_vf_vlan_info {
+	__u32 vf;
+	__u32 vlan;
+	__u32 qos;
+	__be16 vlan_proto;
+};
+
+struct ifla_vf_tx_rate {
+	__u32 vf;
+	__u32 rate;
+};
+
+struct ifla_vf_rate {
+	__u32 vf;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
+};
+
+struct ifla_vf_spoofchk {
+	__u32 vf;
+	__u32 setting;
+};
+
+struct ifla_vf_link_state {
+	__u32 vf;
+	__u32 link_state;
+};
+
+struct ifla_vf_rss_query_en {
+	__u32 vf;
+	__u32 setting;
+};
+
+struct ifla_vf_trust {
+	__u32 vf;
+	__u32 setting;
+};
+
+struct rtnl_stats_dump_filters {
+	u32 mask[6];
+};
+
+struct rta_cacheinfo {
+	__u32 rta_clntref;
+	__u32 rta_lastuse;
+	__s32 rta_expires;
+	__u32 rta_error;
+	__u32 rta_used;
+	__u32 rta_id;
+	__u32 rta_ts;
+	__u32 rta_tsage;
+};
+
+struct rtnl_mdb_dump_ctx {
+	long idx;
+};
+
+struct rtnl_link_ifmap {
+	__u64 mem_start;
+	__u64 mem_end;
+	__u64 base_addr;
+	__u16 irq;
+	__u8 dma;
+	__u8 port;
+};
+
+struct ifla_vf_broadcast {
+	__u8 broadcast[32];
+};
+
+struct br_mdb_entry {
+	__u32 ifindex;
+	__u8 state;
+	__u8 flags;
+	__u16 vid;
+	struct {
+		union {
+			__be32 ip4;
+			struct in6_addr ip6;
+			unsigned char mac_addr[6];
+		} u;
+		__be16 proto;
+	} addr;
+};
+
+enum {
+	IF_LINK_MODE_DEFAULT = 0,
+	IF_LINK_MODE_DORMANT = 1,
+	IF_LINK_MODE_TESTING = 2,
+};
+
+enum lw_bits {
+	LW_URGENT = 0,
+};
+
+struct xdp_umem;
+
+struct xsk_queue;
+
+struct xdp_buff_xsk;
+
+struct xdp_desc;
+
+struct xsk_buff_pool {
+	struct device *dev;
+	struct net_device *netdev;
+	struct list_head xsk_tx_list;
+	spinlock_t xsk_tx_list_lock;
+	refcount_t users;
+	struct xdp_umem *umem;
+	struct work_struct work;
+	struct list_head free_list;
+	struct list_head xskb_list;
+	u32 heads_cnt;
+	u16 queue_id;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *fq;
+	struct xsk_queue *cq;
+	dma_addr_t *dma_pages;
+	struct xdp_buff_xsk *heads;
+	struct xdp_desc *tx_descs;
+	u64 chunk_mask;
+	u64 addrs_cnt;
+	u32 free_list_cnt;
+	u32 dma_pages_cnt;
+	u32 free_heads_cnt;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunk_shift;
+	u32 frame_len;
+	u8 cached_need_wakeup;
+	bool uses_need_wakeup;
+	bool dma_need_sync;
+	bool unaligned;
+	void *addrs;
+	spinlock_t cq_lock;
+	struct xdp_buff_xsk *free_heads[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_umem {
+	void *addrs;
+	u64 size;
+	u32 headroom;
+	u32 chunk_size;
+	u32 chunks;
+	u32 npgs;
+	struct user_struct *user;
+	refcount_t users;
+	u8 flags;
+	bool zc;
+	struct page **pgs;
+	int id;
+	struct list_head xsk_dma_list;
+	struct work_struct work;
+};
+
+struct xdp_buff_xsk {
+	struct xdp_buff xdp;
+	u8 cb[24];
+	dma_addr_t dma;
+	dma_addr_t frame_dma;
+	struct xsk_buff_pool *pool;
+	u64 orig_addr;
+	struct list_head free_list_node;
+	struct list_head xskb_list_node;
+};
+
+struct xdp_desc {
+	__u64 addr;
+	__u32 len;
+	__u32 options;
+};
+
+struct seg6_pernet_data {
+	struct mutex lock;
+	struct in6_addr __attribute__((btf_type_tag("rcu"))) *tun_src;
+};
+
+struct ipv6_bpf_stub {
+	int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);
+	struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);
+	int (*ipv6_setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);
+	int (*ipv6_getsockopt)(struct sock *, int, int, sockptr_t, sockptr_t);
+	int (*ipv6_dev_get_saddr)(struct net *, const struct net_device *, const struct in6_addr *, unsigned int, struct in6_addr *);
+};
+
+struct bpf_scratchpad {
+	union {
+		__be32 diff[128];
+		u8 buff[512];
+	};
+};
+
+enum {
+	BPF_F_NEIGH = 2,
+	BPF_F_PEER = 4,
+	BPF_F_NEXTHOP = 8,
+};
+
+enum {
+	BPF_F_RECOMPUTE_CSUM = 1,
+	BPF_F_INVALIDATE_HASH = 2,
+};
+
+enum bpf_hdr_start_off {
+	BPF_HDR_START_MAC = 0,
+	BPF_HDR_START_NET = 1,
+};
+
+enum {
+	BPF_F_HDR_FIELD_MASK = 15,
+};
+
+enum {
+	BPF_F_PSEUDO_HDR = 16,
+	BPF_F_MARK_MANGLED_0 = 32,
+	BPF_F_MARK_ENFORCE = 64,
+};
+
+enum {
+	BPF_CSUM_LEVEL_QUERY = 0,
+	BPF_CSUM_LEVEL_INC = 1,
+	BPF_CSUM_LEVEL_DEC = 2,
+	BPF_CSUM_LEVEL_RESET = 3,
+};
+
+enum {
+	BPF_F_INGRESS = 1,
+};
+
+enum {
+	IPSTATS_MIB_NUM = 0,
+	IPSTATS_MIB_INPKTS = 1,
+	IPSTATS_MIB_INOCTETS = 2,
+	IPSTATS_MIB_INDELIVERS = 3,
+	IPSTATS_MIB_OUTFORWDATAGRAMS = 4,
+	IPSTATS_MIB_OUTREQUESTS = 5,
+	IPSTATS_MIB_OUTOCTETS = 6,
+	IPSTATS_MIB_INHDRERRORS = 7,
+	IPSTATS_MIB_INTOOBIGERRORS = 8,
+	IPSTATS_MIB_INNOROUTES = 9,
+	IPSTATS_MIB_INADDRERRORS = 10,
+	IPSTATS_MIB_INUNKNOWNPROTOS = 11,
+	IPSTATS_MIB_INTRUNCATEDPKTS = 12,
+	IPSTATS_MIB_INDISCARDS = 13,
+	IPSTATS_MIB_OUTDISCARDS = 14,
+	IPSTATS_MIB_OUTNOROUTES = 15,
+	IPSTATS_MIB_REASMTIMEOUT = 16,
+	IPSTATS_MIB_REASMREQDS = 17,
+	IPSTATS_MIB_REASMOKS = 18,
+	IPSTATS_MIB_REASMFAILS = 19,
+	IPSTATS_MIB_FRAGOKS = 20,
+	IPSTATS_MIB_FRAGFAILS = 21,
+	IPSTATS_MIB_FRAGCREATES = 22,
+	IPSTATS_MIB_INMCASTPKTS = 23,
+	IPSTATS_MIB_OUTMCASTPKTS = 24,
+	IPSTATS_MIB_INBCASTPKTS = 25,
+	IPSTATS_MIB_OUTBCASTPKTS = 26,
+	IPSTATS_MIB_INMCASTOCTETS = 27,
+	IPSTATS_MIB_OUTMCASTOCTETS = 28,
+	IPSTATS_MIB_INBCASTOCTETS = 29,
+	IPSTATS_MIB_OUTBCASTOCTETS = 30,
+	IPSTATS_MIB_CSUMERRORS = 31,
+	IPSTATS_MIB_NOECTPKTS = 32,
+	IPSTATS_MIB_ECT1PKTS = 33,
+	IPSTATS_MIB_ECT0PKTS = 34,
+	IPSTATS_MIB_CEPKTS = 35,
+	IPSTATS_MIB_REASM_OVERLAPS = 36,
+	IPSTATS_MIB_OUTPKTS = 37,
+	__IPSTATS_MIB_MAX = 38,
+};
+
+enum {
+	BPF_F_ADJ_ROOM_FIXED_GSO = 1,
+	BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 2,
+	BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 4,
+	BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,
+	BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,
+	BPF_F_ADJ_ROOM_NO_CSUM_RESET = 32,
+	BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 64,
+	BPF_F_ADJ_ROOM_DECAP_L3_IPV4 = 128,
+	BPF_F_ADJ_ROOM_DECAP_L3_IPV6 = 256,
+};
+
+enum {
+	BPF_ADJ_ROOM_ENCAP_L2_MASK = 255,
+	BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56,
+};
+
+enum bpf_adj_room_mode {
+	BPF_ADJ_ROOM_NET = 0,
+	BPF_ADJ_ROOM_MAC = 1,
+};
+
+struct xdp_sock {
+	struct sock sk;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xsk_queue *rx;
+	struct net_device *dev;
+	struct xdp_umem *umem;
+	struct list_head flush_node;
+	struct xsk_buff_pool *pool;
+	u16 queue_id;
+	bool zc;
+	bool sg;
+	enum {
+		XSK_READY = 0,
+		XSK_BOUND = 1,
+		XSK_UNBOUND = 2,
+	} state;
+	long: 64;
+	struct xsk_queue *tx;
+	struct list_head tx_list;
+	spinlock_t rx_lock;
+	u64 rx_dropped;
+	u64 rx_queue_full;
+	struct sk_buff *skb;
+	struct list_head map_list;
+	spinlock_t map_list_lock;
+	struct mutex mutex;
+	struct xsk_queue *fq_tmp;
+	struct xsk_queue *cq_tmp;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	BPF_F_TUNINFO_IPV6 = 1,
+};
+
+enum {
+	BPF_F_TUNINFO_FLAGS = 16,
+};
+
+enum {
+	BPF_F_ZERO_CSUM_TX = 2,
+	BPF_F_DONT_FRAGMENT = 4,
+	BPF_F_SEQ_NUMBER = 8,
+	BPF_F_NO_TUNNEL_KEY = 16,
+};
+
+enum {
+	TCP_BPF_IW = 1001,
+	TCP_BPF_SNDCWND_CLAMP = 1002,
+	TCP_BPF_DELACK_MAX = 1003,
+	TCP_BPF_RTO_MIN = 1004,
+	TCP_BPF_SYN = 1005,
+	TCP_BPF_SYN_IP = 1006,
+	TCP_BPF_SYN_MAC = 1007,
+};
+
+enum {
+	BPF_SOCK_OPS_RTO_CB_FLAG = 1,
+	BPF_SOCK_OPS_RETRANS_CB_FLAG = 2,
+	BPF_SOCK_OPS_STATE_CB_FLAG = 4,
+	BPF_SOCK_OPS_RTT_CB_FLAG = 8,
+	BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16,
+	BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64,
+	BPF_SOCK_OPS_ALL_CB_FLAGS = 127,
+};
+
+enum {
+	BPF_FIB_LOOKUP_DIRECT = 1,
+	BPF_FIB_LOOKUP_OUTPUT = 2,
+	BPF_FIB_LOOKUP_SKIP_NEIGH = 4,
+	BPF_FIB_LOOKUP_TBID = 8,
+	BPF_FIB_LOOKUP_SRC = 16,
+};
+
+enum {
+	BPF_FIB_LKUP_RET_SUCCESS = 0,
+	BPF_FIB_LKUP_RET_BLACKHOLE = 1,
+	BPF_FIB_LKUP_RET_UNREACHABLE = 2,
+	BPF_FIB_LKUP_RET_PROHIBIT = 3,
+	BPF_FIB_LKUP_RET_NOT_FWDED = 4,
+	BPF_FIB_LKUP_RET_FWD_DISABLED = 5,
+	BPF_FIB_LKUP_RET_UNSUPP_LWT = 6,
+	BPF_FIB_LKUP_RET_NO_NEIGH = 7,
+	BPF_FIB_LKUP_RET_FRAG_NEEDED = 8,
+	BPF_FIB_LKUP_RET_NO_SRC_ADDR = 9,
+};
+
+enum rt_class_t {
+	RT_TABLE_UNSPEC = 0,
+	RT_TABLE_COMPAT = 252,
+	RT_TABLE_DEFAULT = 253,
+	RT_TABLE_MAIN = 254,
+	RT_TABLE_LOCAL = 255,
+	RT_TABLE_MAX = 4294967295,
+};
+
+enum bpf_check_mtu_ret {
+	BPF_MTU_CHK_RET_SUCCESS = 0,
+	BPF_MTU_CHK_RET_FRAG_NEEDED = 1,
+	BPF_MTU_CHK_RET_SEGS_TOOBIG = 2,
+};
+
+enum bpf_check_mtu_flags {
+	BPF_MTU_CHK_SEGS = 1,
+};
+
+enum {
+	BPF_LOAD_HDR_OPT_TCP_SYN = 1,
+};
+
+enum {
+	BPF_SOCK_OPS_VOID = 0,
+	BPF_SOCK_OPS_TIMEOUT_INIT = 1,
+	BPF_SOCK_OPS_RWND_INIT = 2,
+	BPF_SOCK_OPS_TCP_CONNECT_CB = 3,
+	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,
+	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,
+	BPF_SOCK_OPS_NEEDS_ECN = 6,
+	BPF_SOCK_OPS_BASE_RTT = 7,
+	BPF_SOCK_OPS_RTO_CB = 8,
+	BPF_SOCK_OPS_RETRANS_CB = 9,
+	BPF_SOCK_OPS_STATE_CB = 10,
+	BPF_SOCK_OPS_TCP_LISTEN_CB = 11,
+	BPF_SOCK_OPS_RTT_CB = 12,
+	BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13,
+	BPF_SOCK_OPS_HDR_OPT_LEN_CB = 14,
+	BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15,
+};
+
+enum {
+	BPF_SKB_TSTAMP_UNSPEC = 0,
+	BPF_SKB_TSTAMP_DELIVERY_MONO = 1,
+};
+
+enum {
+	BPF_SK_LOOKUP_F_REPLACE = 1,
+	BPF_SK_LOOKUP_F_NO_REUSEPORT = 2,
+};
+
+typedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_get_nlattr_nest)(struct sk_buff *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_load_helper_8)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_8_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_16)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_16_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_32)(const struct sk_buff *, const void *, int, int);
+
+typedef u64 (*btf_bpf_skb_load_helper_32_no_cache)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_skb_store_bytes)(struct sk_buff *, u32, const void *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_load_bytes)(const struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_flow_dissector_load_bytes)(const struct bpf_flow_dissector *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_skb_load_bytes_relative)(const struct sk_buff *, u32, void *, u32, u32);
+
+typedef u64 (*btf_bpf_skb_pull_data)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_sk_fullsock)(struct sock *);
+
+typedef u64 (*btf_sk_skb_pull_data)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_l3_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_l4_csum_replace)(struct sk_buff *, u32, u64, u64, u64);
+
+typedef u64 (*btf_bpf_csum_diff)(__be32 *, u32, __be32 *, u32, __wsum);
+
+typedef u64 (*btf_bpf_csum_update)(struct sk_buff *, __wsum);
+
+typedef u64 (*btf_bpf_csum_level)(struct sk_buff *, u64);
+
+typedef u64 (*btf_bpf_clone_redirect)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_redirect)(u32, u64);
+
+typedef u64 (*btf_bpf_redirect_peer)(u32, u64);
+
+struct bpf_redir_neigh;
+
+typedef u64 (*btf_bpf_redirect_neigh)(u32, struct bpf_redir_neigh *, int, u64);
+
+struct bpf_redir_neigh {
+	__u32 nh_family;
+	union {
+		__be32 ipv4_nh;
+		__u32 ipv6_nh[4];
+	};
+};
+
+typedef u64 (*btf_bpf_msg_apply_bytes)(struct sk_msg *, u32);
+
+typedef u64 (*btf_bpf_msg_cork_bytes)(struct sk_msg *, u32);
+
+typedef u64 (*btf_bpf_msg_pull_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_msg_push_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_msg_pop_data)(struct sk_msg *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_get_cgroup_classid)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_route_realm)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_hash_recalc)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_set_hash_invalid)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_set_hash)(struct sk_buff *, u32);
+
+typedef u64 (*btf_bpf_skb_vlan_push)(struct sk_buff *, __be16, u16);
+
+typedef u64 (*btf_bpf_skb_vlan_pop)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_change_proto)(struct sk_buff *, __be16, u64);
+
+typedef u64 (*btf_bpf_skb_change_type)(struct sk_buff *, u32);
+
+typedef u64 (*btf_sk_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
+
+typedef u64 (*btf_bpf_skb_adjust_room)(struct sk_buff *, s32, u32, u64);
+
+typedef u64 (*btf_bpf_skb_change_tail)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_sk_skb_change_tail)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_change_head)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_get_buff_len)(struct xdp_buff *);
+
+typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_load_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_store_bytes)(struct xdp_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);
+
+typedef u64 (*btf_bpf_xdp_redirect)(u32, u64);
+
+typedef u64 (*btf_bpf_xdp_redirect_map)(struct bpf_map *, u64, u64);
+
+typedef u64 (*btf_bpf_skb_event_output)(struct sk_buff *, struct bpf_map *, u64, void *, u64);
+
+struct bpf_tunnel_key;
+
+typedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64);
+
+struct bpf_tunnel_key {
+	__u32 tunnel_id;
+	union {
+		__u32 remote_ipv4;
+		__u32 remote_ipv6[4];
+	};
+	__u8 tunnel_tos;
+	__u8 tunnel_ttl;
+	union {
+		__u16 tunnel_ext;
+		__be16 tunnel_flags;
+	};
+	__u32 tunnel_label;
+	union {
+		__u32 local_ipv4;
+		__u32 local_ipv6[4];
+	};
+};
+
+typedef u64 (*btf_bpf_skb_get_tunnel_opt)(struct sk_buff *, u8 *, u32);
+
+typedef u64 (*btf_bpf_skb_set_tunnel_key)(struct sk_buff *, const struct bpf_tunnel_key *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_set_tunnel_opt)(struct sk_buff *, const u8 *, u32);
+
+typedef u64 (*btf_bpf_skb_under_cgroup)(struct sk_buff *, struct bpf_map *, u32);
+
+typedef u64 (*btf_bpf_skb_cgroup_id)(const struct sk_buff *);
+
+typedef u64 (*btf_bpf_skb_ancestor_cgroup_id)(const struct sk_buff *, int);
+
+typedef u64 (*btf_bpf_sk_cgroup_id)(struct sock *);
+
+typedef u64 (*btf_bpf_sk_ancestor_cgroup_id)(struct sock *, int);
+
+typedef u64 (*btf_bpf_xdp_event_output)(struct xdp_buff *, struct bpf_map *, u64, void *, u64);
+
+typedef u64 (*btf_bpf_get_socket_cookie)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock_addr)(struct bpf_sock_addr_kern *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_socket_ptr_cookie)(struct sock *);
+
+typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sock_ops)(struct bpf_sock_ops_kern *);
+
+typedef u64 (*btf_bpf_get_netns_cookie_sk_msg)(struct sk_msg *);
+
+typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_setsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_unlocked_sk_getsockopt)(struct sock *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_setsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_getsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);
+
+typedef u64 (*btf_bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops_kern *, int);
+
+typedef u64 (*btf_bpf_bind)(struct bpf_sock_addr_kern *, struct sockaddr *, int);
+
+struct bpf_xfrm_state;
+
+typedef u64 (*btf_bpf_skb_get_xfrm_state)(struct sk_buff *, u32, struct bpf_xfrm_state *, u32, u64);
+
+struct bpf_xfrm_state {
+	__u32 reqid;
+	__u32 spi;
+	__u16 family;
+	__u16 ext;
+	union {
+		__u32 remote_ipv4;
+		__u32 remote_ipv6[4];
+	};
+};
+
+struct bpf_fib_lookup;
+
+typedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32);
+
+struct bpf_fib_lookup {
+	__u8 family;
+	__u8 l4_protocol;
+	__be16 sport;
+	__be16 dport;
+	union {
+		__u16 tot_len;
+		__u16 mtu_result;
+	};
+	__u32 ifindex;
+	union {
+		__u8 tos;
+		__be32 flowinfo;
+		__u32 rt_metric;
+	};
+	union {
+		__be32 ipv4_src;
+		__u32 ipv6_src[4];
+	};
+	union {
+		__be32 ipv4_dst;
+		__u32 ipv6_dst[4];
+	};
+	union {
+		struct {
+			__be16 h_vlan_proto;
+			__be16 h_vlan_TCI;
+		};
+		__u32 tbid;
+	};
+	__u8 smac[6];
+	__u8 dmac[6];
+};
+
+typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);
+
+typedef u64 (*btf_bpf_skb_check_mtu)(struct sk_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_xdp_check_mtu)(struct xdp_buff *, u32, u32 *, s32, u64);
+
+typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);
+
+typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);
+
+struct bpf_sock_tuple;
+
+typedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+struct bpf_sock_tuple {
+	union {
+		struct {
+			__be32 saddr;
+			__be32 daddr;
+			__be16 sport;
+			__be16 dport;
+		} ipv4;
+		struct {
+			__be32 saddr[4];
+			__be32 daddr[4];
+			__be16 sport;
+			__be16 dport;
+		} ipv6;
+	};
+};
+
+typedef u64 (*btf_bpf_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_tc_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_tc_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_tc_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sk_release)(struct sock *);
+
+typedef u64 (*btf_bpf_xdp_sk_lookup_udp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_skc_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_xdp_sk_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);
+
+typedef u64 (*btf_bpf_sock_addr_skc_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sock_addr_sk_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+typedef u64 (*btf_bpf_sock_addr_sk_lookup_udp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);
+
+struct bpf_tcp_sock {
+	__u32 snd_cwnd;
+	__u32 srtt_us;
+	__u32 rtt_min;
+	__u32 snd_ssthresh;
+	__u32 rcv_nxt;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 mss_cache;
+	__u32 ecn_flags;
+	__u32 rate_delivered;
+	__u32 rate_interval_us;
+	__u32 packets_out;
+	__u32 retrans_out;
+	__u32 total_retrans;
+	__u32 segs_in;
+	__u32 data_segs_in;
+	__u32 segs_out;
+	__u32 data_segs_out;
+	__u32 lost_out;
+	__u32 sacked_out;
+	__u64 bytes_received;
+	__u64 bytes_acked;
+	__u32 dsack_dups;
+	__u32 delivered;
+	__u32 delivered_ce;
+	__u32 icsk_retransmits;
+};
+
+typedef u64 (*btf_bpf_tcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_get_listener_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skb_ecn_set_ce)(struct sk_buff *);
+
+typedef u64 (*btf_bpf_tcp_check_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_tcp_gen_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);
+
+typedef u64 (*btf_bpf_sk_assign)(struct sk_buff *, struct sock *, u64);
+
+typedef u64 (*btf_bpf_sock_ops_load_hdr_opt)(struct bpf_sock_ops_kern *, void *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_ops_store_hdr_opt)(struct bpf_sock_ops_kern *, const void *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64);
+
+typedef u64 (*btf_bpf_skb_set_tstamp)(struct sk_buff *, u64, u32);
+
+typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);
+
+typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);
+
+typedef u64 (*btf_sk_reuseport_load_bytes_relative)(const struct sk_reuseport_kern *, u32, void *, u32, u32);
+
+typedef u64 (*btf_bpf_sk_lookup_assign)(struct bpf_sk_lookup_kern *, struct sock *, u64);
+
+typedef u64 (*btf_bpf_skc_to_tcp6_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_timewait_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_tcp_request_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_unix_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_skc_to_mptcp_sock)(struct sock *);
+
+typedef u64 (*btf_bpf_sock_from_file)(struct file *);
+
+struct strp_msg {
+	int full_len;
+	int offset;
+};
+
+struct tls_strparser {
+	struct sock *sk;
+	u32 mark: 8;
+	u32 stopped: 1;
+	u32 copy_mode: 1;
+	u32 mixed_decrypted: 1;
+	bool msg_ready;
+	struct strp_msg stm;
+	struct sk_buff *anchor;
+	struct work_struct work;
+};
+
+struct tls_sw_context_rx {
+	struct crypto_aead *aead_recv;
+	struct crypto_wait async_wait;
+	struct sk_buff_head rx_list;
+	void (*saved_data_ready)(struct sock *);
+	u8 reader_present;
+	u8 async_capable: 1;
+	u8 zc_capable: 1;
+	u8 reader_contended: 1;
+	struct tls_strparser strp;
+	atomic_t decrypt_pending;
+	struct sk_buff_head async_hold;
+	struct wait_queue_head wq;
+	u64 android_kabi_reserved1;
+};
+
+struct tcp6_sock {
+	struct tcp_sock tcp;
+	struct ipv6_pinfo inet6;
+};
+
+struct inet_timewait_sock {
+	struct sock_common __tw_common;
+	__u32 tw_mark;
+	volatile unsigned char tw_substate;
+	unsigned char tw_rcv_wscale;
+	__be16 tw_sport;
+	unsigned int tw_transparent: 1;
+	unsigned int tw_flowlabel: 20;
+	unsigned int tw_pad: 3;
+	unsigned int tw_tos: 8;
+	u32 tw_txhash;
+	u32 tw_priority;
+	struct timer_list tw_timer;
+	struct inet_bind_bucket *tw_tb;
+	struct inet_bind2_bucket *tw_tb2;
+	struct hlist_node tw_bind2_node;
+};
+
+struct tcp_timewait_sock {
+	struct inet_timewait_sock tw_sk;
+	u32 tw_rcv_wnd;
+	u32 tw_ts_offset;
+	u32 tw_ts_recent;
+	u32 tw_last_oow_ack_time;
+	int tw_ts_recent_stamp;
+	u32 tw_tx_delay;
+};
+
+struct udp6_sock {
+	struct udp_sock udp;
+	struct ipv6_pinfo inet6;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct mptcp_sock {};
+
+struct tls_prot_info {
+	u16 version;
+	u16 cipher_type;
+	u16 prepend_size;
+	u16 tag_size;
+	u16 overhead_size;
+	u16 iv_size;
+	u16 salt_size;
+	u16 rec_seq_size;
+	u16 aad_size;
+	u16 tail_size;
+};
+
+struct cipher_context {
+	char *iv;
+	char *rec_seq;
+};
+
+struct tls_crypto_info {
+	__u16 version;
+	__u16 cipher_type;
+};
+
+struct tls12_crypto_info_aes_gcm_128 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_aes_gcm_256 {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[32];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_chacha20_poly1305 {
+	struct tls_crypto_info info;
+	unsigned char iv[12];
+	unsigned char key[32];
+	unsigned char salt[0];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_gcm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+struct tls12_crypto_info_sm4_ccm {
+	struct tls_crypto_info info;
+	unsigned char iv[8];
+	unsigned char key[16];
+	unsigned char salt[4];
+	unsigned char rec_seq[8];
+};
+
+union tls_crypto_context {
+	struct tls_crypto_info info;
+	union {
+		struct tls12_crypto_info_aes_gcm_128 aes_gcm_128;
+		struct tls12_crypto_info_aes_gcm_256 aes_gcm_256;
+		struct tls12_crypto_info_chacha20_poly1305 chacha20_poly1305;
+		struct tls12_crypto_info_sm4_gcm sm4_gcm;
+		struct tls12_crypto_info_sm4_ccm sm4_ccm;
+	};
+};
+
+struct tls_context {
+	struct tls_prot_info prot_info;
+	u8 tx_conf: 3;
+	u8 rx_conf: 3;
+	u8 zerocopy_sendfile: 1;
+	u8 rx_no_pad: 1;
+	int (*push_pending_record)(struct sock *, int);
+	void (*sk_write_space)(struct sock *);
+	void *priv_ctx_tx;
+	void *priv_ctx_rx;
+	struct net_device __attribute__((btf_type_tag("rcu"))) *netdev;
+	struct cipher_context tx;
+	struct cipher_context rx;
+	struct scatterlist *partially_sent_record;
+	u16 partially_sent_offset;
+	bool splicing_pages;
+	bool pending_open_record_frags;
+	struct mutex tx_lock;
+	unsigned long flags;
+	struct proto *sk_proto;
+	struct sock *sk;
+	void (*sk_destruct)(struct sock *);
+	union tls_crypto_context crypto_send;
+	union tls_crypto_context crypto_recv;
+	struct list_head list;
+	refcount_t refcount;
+	struct callback_head rcu;
+};
+
+struct fib_result {
+	__be32 prefix;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	u32 tclassid;
+	struct fib_nh_common *nhc;
+	struct fib_info *fi;
+	struct fib_table *table;
+	struct hlist_head *fa_head;
+};
+
+struct fib6_result {
+	struct fib6_nh *nh;
+	struct fib6_info *f6i;
+	u32 fib6_flags;
+	u8 fib6_type;
+	struct rt6_info *rt6;
+};
+
+struct sock_diag_handler {
+	__u8 family;
+	int (*dump)(struct sk_buff *, struct nlmsghdr *);
+	int (*get_info)(struct sk_buff *, struct sock *);
+	int (*destroy)(struct sk_buff *, struct nlmsghdr *);
+};
+
+struct broadcast_sk {
+	struct sock *sk;
+	struct work_struct work;
+};
+
+struct sock_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+};
+
+enum hwtstamp_tx_types {
+	HWTSTAMP_TX_OFF = 0,
+	HWTSTAMP_TX_ON = 1,
+	HWTSTAMP_TX_ONESTEP_SYNC = 2,
+	HWTSTAMP_TX_ONESTEP_P2P = 3,
+	__HWTSTAMP_TX_CNT = 4,
+};
+
+enum hwtstamp_rx_filters {
+	HWTSTAMP_FILTER_NONE = 0,
+	HWTSTAMP_FILTER_ALL = 1,
+	HWTSTAMP_FILTER_SOME = 2,
+	HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,
+	HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,
+	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,
+	HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,
+	HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,
+	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,
+	HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,
+	HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,
+	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,
+	HWTSTAMP_FILTER_PTP_V2_EVENT = 12,
+	HWTSTAMP_FILTER_PTP_V2_SYNC = 13,
+	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,
+	HWTSTAMP_FILTER_NTP_ALL = 15,
+	__HWTSTAMP_FILTER_CNT = 16,
+};
+
+enum hwtstamp_flags {
+	HWTSTAMP_FLAG_BONDED_PHC_INDEX = 1,
+	HWTSTAMP_FLAG_LAST = 1,
+	HWTSTAMP_FLAG_MASK = 1,
+};
+
+struct hwtstamp_config {
+	int flags;
+	int tx_type;
+	int rx_filter;
+};
+
+struct compat_ifconf {
+	compat_int_t ifc_len;
+	compat_caddr_t ifcbuf;
+};
+
+struct tso_t {
+	int next_frag_idx;
+	int size;
+	void *data;
+	u16 ip_id;
+	u8 tlen;
+	bool ipv6;
+	u32 tcp_seq;
+};
+
+enum fib_event_type {
+	FIB_EVENT_ENTRY_REPLACE = 0,
+	FIB_EVENT_ENTRY_APPEND = 1,
+	FIB_EVENT_ENTRY_ADD = 2,
+	FIB_EVENT_ENTRY_DEL = 3,
+	FIB_EVENT_RULE_ADD = 4,
+	FIB_EVENT_RULE_DEL = 5,
+	FIB_EVENT_NH_ADD = 6,
+	FIB_EVENT_NH_DEL = 7,
+	FIB_EVENT_VIF_ADD = 8,
+	FIB_EVENT_VIF_DEL = 9,
+};
+
+struct fib_notifier_net {
+	struct list_head fib_notifier_ops;
+	struct atomic_notifier_head fib_chain;
+};
+
+struct fib_notifier_info {
+	int family;
+	struct netlink_ext_ack *extack;
+};
+
+struct xdp_frame_bulk {
+	int count;
+	void *xa;
+	void *q[16];
+};
+
+struct xdp_attachment_info {
+	struct bpf_prog *prog;
+	u32 flags;
+};
+
+enum flow_action_id {
+	FLOW_ACTION_ACCEPT = 0,
+	FLOW_ACTION_DROP = 1,
+	FLOW_ACTION_TRAP = 2,
+	FLOW_ACTION_GOTO = 3,
+	FLOW_ACTION_REDIRECT = 4,
+	FLOW_ACTION_MIRRED = 5,
+	FLOW_ACTION_REDIRECT_INGRESS = 6,
+	FLOW_ACTION_MIRRED_INGRESS = 7,
+	FLOW_ACTION_VLAN_PUSH = 8,
+	FLOW_ACTION_VLAN_POP = 9,
+	FLOW_ACTION_VLAN_MANGLE = 10,
+	FLOW_ACTION_TUNNEL_ENCAP = 11,
+	FLOW_ACTION_TUNNEL_DECAP = 12,
+	FLOW_ACTION_MANGLE = 13,
+	FLOW_ACTION_ADD = 14,
+	FLOW_ACTION_CSUM = 15,
+	FLOW_ACTION_MARK = 16,
+	FLOW_ACTION_PTYPE = 17,
+	FLOW_ACTION_PRIORITY = 18,
+	FLOW_ACTION_RX_QUEUE_MAPPING = 19,
+	FLOW_ACTION_WAKE = 20,
+	FLOW_ACTION_QUEUE = 21,
+	FLOW_ACTION_SAMPLE = 22,
+	FLOW_ACTION_POLICE = 23,
+	FLOW_ACTION_CT = 24,
+	FLOW_ACTION_CT_METADATA = 25,
+	FLOW_ACTION_MPLS_PUSH = 26,
+	FLOW_ACTION_MPLS_POP = 27,
+	FLOW_ACTION_MPLS_MANGLE = 28,
+	FLOW_ACTION_GATE = 29,
+	FLOW_ACTION_PPPOE_PUSH = 30,
+	FLOW_ACTION_JUMP = 31,
+	FLOW_ACTION_PIPE = 32,
+	FLOW_ACTION_VLAN_PUSH_ETH = 33,
+	FLOW_ACTION_VLAN_POP_ETH = 34,
+	FLOW_ACTION_CONTINUE = 35,
+	NUM_FLOW_ACTIONS = 36,
+};
+
+enum flow_action_hw_stats {
+	FLOW_ACTION_HW_STATS_IMMEDIATE = 1,
+	FLOW_ACTION_HW_STATS_DELAYED = 2,
+	FLOW_ACTION_HW_STATS_ANY = 3,
+	FLOW_ACTION_HW_STATS_DISABLED = 4,
+	FLOW_ACTION_HW_STATS_DONT_CARE = 7,
+};
+
+enum flow_action_mangle_base {
+	FLOW_ACT_MANGLE_UNSPEC = 0,
+	FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,
+	FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,
+	FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,
+	FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,
+};
+
+enum offload_act_command {
+	FLOW_ACT_REPLACE = 0,
+	FLOW_ACT_DESTROY = 1,
+	FLOW_ACT_STATS = 2,
+};
+
+enum flow_block_binder_type {
+	FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,
+	FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,
+	FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3,
+	FLOW_BLOCK_BINDER_TYPE_RED_MARK = 4,
+};
+
+enum flow_block_command {
+	FLOW_BLOCK_BIND = 0,
+	FLOW_BLOCK_UNBIND = 1,
+};
+
+struct flow_block_cb;
+
+struct flow_block_indr {
+	struct list_head list;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum flow_block_binder_type binder_type;
+	void *data;
+	void *cb_priv;
+	void (*cleanup)(struct flow_block_cb *);
+};
+
+struct flow_block_cb {
+	struct list_head driver_list;
+	struct list_head list;
+	flow_setup_cb_t *cb;
+	void *cb_ident;
+	void *cb_priv;
+	void (*release)(void *);
+	struct flow_block_indr indr;
+	unsigned int refcnt;
+};
+
+typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));
+
+struct flow_indr_dev {
+	struct list_head list;
+	flow_indr_block_bind_cb_t *cb;
+	void *cb_priv;
+	refcount_t refcnt;
+};
+
+struct flow_indir_dev_info {
+	void *data;
+	struct net_device *dev;
+	struct Qdisc *sch;
+	enum tc_setup_type type;
+	void (*cleanup)(struct flow_block_cb *);
+	struct list_head list;
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	struct list_head *cb_list;
+};
+
+struct flow_block_offload {
+	enum flow_block_command command;
+	enum flow_block_binder_type binder_type;
+	bool block_shared;
+	bool unlocked_driver_cb;
+	struct net *net;
+	struct flow_block *block;
+	struct list_head cb_list;
+	struct list_head *driver_block_list;
+	struct netlink_ext_ack *extack;
+	struct Qdisc *sch;
+	struct list_head *cb_list_head;
+};
+
+struct flow_match {
+	struct flow_dissector *dissector;
+	void *mask;
+	void *key;
+};
+
+typedef void (*action_destr)(void *);
+
+struct nf_flowtable;
+
+struct action_gate_entry;
+
+struct flow_action_cookie;
+
+struct flow_action_entry {
+	enum flow_action_id id;
+	u32 hw_index;
+	unsigned long cookie;
+	u64 miss_cookie;
+	enum flow_action_hw_stats hw_stats;
+	action_destr destructor;
+	void *destructor_priv;
+	union {
+		u32 chain_index;
+		struct net_device *dev;
+		struct {
+			u16 vid;
+			__be16 proto;
+			u8 prio;
+		} vlan;
+		struct {
+			unsigned char dst[6];
+			unsigned char src[6];
+		} vlan_push_eth;
+		struct {
+			enum flow_action_mangle_base htype;
+			u32 offset;
+			u32 mask;
+			u32 val;
+		} mangle;
+		struct ip_tunnel_info *tunnel;
+		u32 csum_flags;
+		u32 mark;
+		u16 ptype;
+		u16 rx_queue;
+		u32 priority;
+		struct {
+			u32 ctx;
+			u32 index;
+			u8 vf;
+		} queue;
+		struct {
+			struct psample_group *psample_group;
+			u32 rate;
+			u32 trunc_size;
+			bool truncate;
+		} sample;
+		struct {
+			u32 burst;
+			u64 rate_bytes_ps;
+			u64 peakrate_bytes_ps;
+			u32 avrate;
+			u16 overhead;
+			u64 burst_pkt;
+			u64 rate_pkt_ps;
+			u32 mtu;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} exceed;
+			struct {
+				enum flow_action_id act_id;
+				u32 extval;
+			} notexceed;
+		} police;
+		struct {
+			int action;
+			u16 zone;
+			struct nf_flowtable *flow_table;
+		} ct;
+		struct {
+			unsigned long cookie;
+			u32 mark;
+			u32 labels[4];
+			bool orig_dir;
+		} ct_metadata;
+		struct {
+			u32 label;
+			__be16 proto;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_push;
+		struct {
+			__be16 proto;
+		} mpls_pop;
+		struct {
+			u32 label;
+			u8 tc;
+			u8 bos;
+			u8 ttl;
+		} mpls_mangle;
+		struct {
+			s32 prio;
+			u64 basetime;
+			u64 cycletime;
+			u64 cycletimeext;
+			u32 num_entries;
+			struct action_gate_entry *entries;
+		} gate;
+		struct {
+			u16 sid;
+		} pppoe;
+	};
+	struct flow_action_cookie *user_cookie;
+};
+
+struct flow_action {
+	unsigned int num_entries;
+	struct flow_action_entry entries[0];
+};
+
+struct flow_rule {
+	struct flow_match match;
+	struct flow_action action;
+};
+
+struct flow_action_cookie {
+	u32 cookie_len;
+	u8 cookie[0];
+};
+
+struct flow_stats {
+	u64 pkts;
+	u64 bytes;
+	u64 drops;
+	u64 lastused;
+	enum flow_action_hw_stats used_hw_stats;
+	bool used_hw_stats_valid;
+};
+
+struct flow_offload_action {
+	struct netlink_ext_ack *extack;
+	enum offload_act_command command;
+	enum flow_action_id id;
+	u32 index;
+	unsigned long cookie;
+	struct flow_stats stats;
+	struct flow_action action;
+};
+
+struct flow_match_meta {
+	struct flow_dissector_key_meta *key;
+	struct flow_dissector_key_meta *mask;
+};
+
+struct flow_match_basic {
+	struct flow_dissector_key_basic *key;
+	struct flow_dissector_key_basic *mask;
+};
+
+struct flow_match_control {
+	struct flow_dissector_key_control *key;
+	struct flow_dissector_key_control *mask;
+};
+
+struct flow_match_eth_addrs {
+	struct flow_dissector_key_eth_addrs *key;
+	struct flow_dissector_key_eth_addrs *mask;
+};
+
+struct flow_match_vlan {
+	struct flow_dissector_key_vlan *key;
+	struct flow_dissector_key_vlan *mask;
+};
+
+struct flow_match_arp {
+	struct flow_dissector_key_arp *key;
+	struct flow_dissector_key_arp *mask;
+};
+
+struct flow_match_ipv4_addrs {
+	struct flow_dissector_key_ipv4_addrs *key;
+	struct flow_dissector_key_ipv4_addrs *mask;
+};
+
+struct flow_match_ipv6_addrs {
+	struct flow_dissector_key_ipv6_addrs *key;
+	struct flow_dissector_key_ipv6_addrs *mask;
+};
+
+struct flow_match_ip {
+	struct flow_dissector_key_ip *key;
+	struct flow_dissector_key_ip *mask;
+};
+
+struct flow_match_ports {
+	struct flow_dissector_key_ports *key;
+	struct flow_dissector_key_ports *mask;
+};
+
+struct flow_dissector_key_ports_range;
+
+struct flow_match_ports_range {
+	struct flow_dissector_key_ports_range *key;
+	struct flow_dissector_key_ports_range *mask;
+};
+
+struct flow_dissector_key_ports_range {
+	union {
+		struct flow_dissector_key_ports tp;
+		struct {
+			struct flow_dissector_key_ports tp_min;
+			struct flow_dissector_key_ports tp_max;
+		};
+	};
+};
+
+struct flow_match_tcp {
+	struct flow_dissector_key_tcp *key;
+	struct flow_dissector_key_tcp *mask;
+};
+
+struct flow_match_ipsec {
+	struct flow_dissector_key_ipsec *key;
+	struct flow_dissector_key_ipsec *mask;
+};
+
+struct flow_match_icmp {
+	struct flow_dissector_key_icmp *key;
+	struct flow_dissector_key_icmp *mask;
+};
+
+struct flow_match_mpls {
+	struct flow_dissector_key_mpls *key;
+	struct flow_dissector_key_mpls *mask;
+};
+
+struct flow_match_enc_keyid {
+	struct flow_dissector_key_keyid *key;
+	struct flow_dissector_key_keyid *mask;
+};
+
+struct flow_match_enc_opts {
+	struct flow_dissector_key_enc_opts *key;
+	struct flow_dissector_key_enc_opts *mask;
+};
+
+struct flow_match_ct {
+	struct flow_dissector_key_ct *key;
+	struct flow_dissector_key_ct *mask;
+};
+
+struct flow_match_pppoe {
+	struct flow_dissector_key_pppoe *key;
+	struct flow_dissector_key_pppoe *mask;
+};
+
+struct flow_match_l2tpv3 {
+	struct flow_dissector_key_l2tpv3 *key;
+	struct flow_dissector_key_l2tpv3 *mask;
+};
+
+struct offload_callbacks {
+	struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);
+	struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);
+	int (*gro_complete)(struct sk_buff *, int);
+};
+
+struct packet_offload {
+	__be16 type;
+	u16 priority;
+	struct offload_callbacks callbacks;
+	struct list_head list;
+};
+
+struct napi_gro_cb {
+	union {
+		struct {
+			void *frag0;
+			unsigned int frag0_len;
+		};
+		struct {
+			struct sk_buff *last;
+			unsigned long age;
+		};
+	};
+	int data_offset;
+	u16 flush;
+	u16 flush_id;
+	u16 count;
+	u16 proto;
+	union {
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		};
+		struct {
+			u16 gro_remcsum_start;
+			u8 same_flow: 1;
+			u8 encap_mark: 1;
+			u8 csum_valid: 1;
+			u8 csum_cnt: 3;
+			u8 free: 2;
+			u8 is_ipv6: 1;
+			u8 is_fou: 1;
+			u8 is_atomic: 1;
+			u8 recursion_counter: 4;
+			u8 is_flist: 1;
+		} zeroed;
+	};
+	__wsum csum;
+};
+
+enum {
+	NETDEV_A_DEV_IFINDEX = 1,
+	NETDEV_A_DEV_PAD = 2,
+	NETDEV_A_DEV_XDP_FEATURES = 3,
+	NETDEV_A_DEV_XDP_ZC_MAX_SEGS = 4,
+	__NETDEV_A_DEV_MAX = 5,
+	NETDEV_A_DEV_MAX = 4,
+};
+
+enum {
+	NETDEV_CMD_DEV_GET = 1,
+	NETDEV_CMD_DEV_ADD_NTF = 2,
+	NETDEV_CMD_DEV_DEL_NTF = 3,
+	NETDEV_CMD_DEV_CHANGE_NTF = 4,
+	__NETDEV_CMD_MAX = 5,
+	NETDEV_CMD_MAX = 4,
+};
+
+enum {
+	NETDEV_NLGRP_MGMT = 0,
+};
+
+struct rx_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_rx_queue *, char *);
+	ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);
+};
+
+struct netdev_queue_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct netdev_queue *, char *);
+	ssize_t (*store)(struct netdev_queue *, const char *, size_t);
+};
+
+enum {
+	FR_ACT_UNSPEC = 0,
+	FR_ACT_TO_TBL = 1,
+	FR_ACT_GOTO = 2,
+	FR_ACT_NOP = 3,
+	FR_ACT_RES3 = 4,
+	FR_ACT_RES4 = 5,
+	FR_ACT_BLACKHOLE = 6,
+	FR_ACT_UNREACHABLE = 7,
+	FR_ACT_PROHIBIT = 8,
+	__FR_ACT_MAX = 9,
+};
+
+enum {
+	FRA_UNSPEC = 0,
+	FRA_DST = 1,
+	FRA_SRC = 2,
+	FRA_IIFNAME = 3,
+	FRA_GOTO = 4,
+	FRA_UNUSED2 = 5,
+	FRA_PRIORITY = 6,
+	FRA_UNUSED3 = 7,
+	FRA_UNUSED4 = 8,
+	FRA_UNUSED5 = 9,
+	FRA_FWMARK = 10,
+	FRA_FLOW = 11,
+	FRA_TUN_ID = 12,
+	FRA_SUPPRESS_IFGROUP = 13,
+	FRA_SUPPRESS_PREFIXLEN = 14,
+	FRA_TABLE = 15,
+	FRA_FWMASK = 16,
+	FRA_OIFNAME = 17,
+	FRA_PAD = 18,
+	FRA_L3MDEV = 19,
+	FRA_UID_RANGE = 20,
+	FRA_PROTOCOL = 21,
+	FRA_IP_PROTO = 22,
+	FRA_SPORT_RANGE = 23,
+	FRA_DPORT_RANGE = 24,
+	__FRA_MAX = 25,
+};
+
+struct fib_rule_uid_range {
+	__u32 start;
+	__u32 end;
+};
+
+struct fib_rule_notifier_info {
+	struct fib_notifier_info info;
+	struct fib_rule *rule;
+};
+
+typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *, enum skb_drop_reason);
+
+typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *, void *);
+
+typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);
+
+typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);
+
+typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);
+
+typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);
+
+typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_napi_gro_frags_exit)(void *, int);
+
+typedef void (*btf_trace_napi_gro_receive_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_exit)(void *, int);
+
+typedef void (*btf_trace_netif_rx_exit)(void *, int);
+
+typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);
+
+typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);
+
+typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long, int);
+
+typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);
+
+typedef void (*btf_trace_inet_sk_error_report)(void *, const struct sock *);
+
+typedef void (*btf_trace_sk_data_ready)(void *, const struct sock *);
+
+typedef void (*btf_trace_sock_send_length)(void *, struct sock *, int, int);
+
+typedef void (*btf_trace_sock_recv_length)(void *, struct sock *, int, int);
+
+typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);
+
+typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);
+
+typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);
+
+typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);
+
+typedef void (*btf_trace_tcp_bad_csum)(void *, const struct sk_buff *);
+
+typedef void (*btf_trace_tcp_cong_state_set)(void *, struct sock *, const u8);
+
+typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);
+
+typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_enqueue)(void *, struct Qdisc *, const struct netdev_queue *, struct sk_buff *);
+
+typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);
+
+typedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32);
+
+typedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);
+
+struct net_bridge;
+
+struct net_bridge_port;
+
+typedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);
+
+struct bridge_id {
+	unsigned char prio[2];
+	unsigned char addr[6];
+};
+
+typedef struct bridge_id bridge_id;
+
+struct bridge_mcast_other_query {
+	struct timer_list timer;
+	struct timer_list delay_timer;
+};
+
+struct bridge_mcast_own_query {
+	struct timer_list timer;
+	u32 startup_sent;
+};
+
+struct br_ip {
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+	} src;
+	union {
+		__be32 ip4;
+		struct in6_addr ip6;
+		unsigned char mac_addr[6];
+	} dst;
+	__be16 proto;
+	__u16 vid;
+};
+
+struct bridge_mcast_querier {
+	struct br_ip addr;
+	int port_ifidx;
+	seqcount_spinlock_t seq;
+};
+
+struct net_bridge_vlan;
+
+struct net_bridge_mcast {
+	struct net_bridge *br;
+	struct net_bridge_vlan *vlan;
+	u32 multicast_last_member_count;
+	u32 multicast_startup_query_count;
+	u8 multicast_querier;
+	u8 multicast_igmp_version;
+	u8 multicast_router;
+	u8 multicast_mld_version;
+	unsigned long multicast_last_member_interval;
+	unsigned long multicast_membership_interval;
+	unsigned long multicast_querier_interval;
+	unsigned long multicast_query_interval;
+	unsigned long multicast_query_response_interval;
+	unsigned long multicast_startup_query_interval;
+	struct hlist_head ip4_mc_router_list;
+	struct timer_list ip4_mc_router_timer;
+	struct bridge_mcast_other_query ip4_other_query;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct bridge_mcast_querier ip4_querier;
+	struct hlist_head ip6_mc_router_list;
+	struct timer_list ip6_mc_router_timer;
+	struct bridge_mcast_other_query ip6_other_query;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct bridge_mcast_querier ip6_querier;
+};
+
+struct bridge_mcast_stats;
+
+struct net_bridge {
+	spinlock_t lock;
+	spinlock_t hash_lock;
+	struct hlist_head frame_type_list;
+	struct net_device *dev;
+	unsigned long options;
+	struct rhashtable fdb_hash_tbl;
+	struct list_head port_list;
+	u16 group_fwd_mask;
+	u16 group_fwd_mask_required;
+	bridge_id designated_root;
+	bridge_id bridge_id;
+	unsigned char topology_change;
+	unsigned char topology_change_detected;
+	u16 root_port;
+	unsigned long max_age;
+	unsigned long hello_time;
+	unsigned long forward_delay;
+	unsigned long ageing_time;
+	unsigned long bridge_max_age;
+	unsigned long bridge_hello_time;
+	unsigned long bridge_forward_delay;
+	unsigned long bridge_ageing_time;
+	u32 root_path_cost;
+	u8 group_addr[6];
+	enum {
+		BR_NO_STP = 0,
+		BR_KERNEL_STP = 1,
+		BR_USER_STP = 2,
+	} stp_enabled;
+	struct net_bridge_mcast multicast_ctx;
+	struct bridge_mcast_stats __attribute__((btf_type_tag("percpu"))) *mcast_stats;
+	u32 hash_max;
+	spinlock_t multicast_lock;
+	struct rhashtable mdb_hash_tbl;
+	struct rhashtable sg_port_tbl;
+	struct hlist_head mcast_gc_list;
+	struct hlist_head mdb_list;
+	struct work_struct mcast_gc_work;
+	struct timer_list hello_timer;
+	struct timer_list tcn_timer;
+	struct timer_list topology_change_timer;
+	struct delayed_work gc_work;
+	struct kobject *ifobj;
+	u32 auto_cnt;
+	struct hlist_head fdb_list;
+};
+
+struct net_bridge_mcast_port {
+	struct net_bridge_port *port;
+	struct net_bridge_vlan *vlan;
+	struct bridge_mcast_own_query ip4_own_query;
+	struct timer_list ip4_mc_router_timer;
+	struct hlist_node ip4_rlist;
+	struct bridge_mcast_own_query ip6_own_query;
+	struct timer_list ip6_mc_router_timer;
+	struct hlist_node ip6_rlist;
+	unsigned char multicast_router;
+	u32 mdb_n_entries;
+	u32 mdb_max_entries;
+};
+
+struct br_tunnel_info {
+	__be64 tunnel_id;
+	struct metadata_dst __attribute__((btf_type_tag("rcu"))) *tunnel_dst;
+};
+
+struct net_bridge_vlan {
+	struct rhash_head vnode;
+	struct rhash_head tnode;
+	u16 vid;
+	u16 flags;
+	u16 priv_flags;
+	u8 state;
+	struct pcpu_sw_netstats __attribute__((btf_type_tag("percpu"))) *stats;
+	union {
+		struct net_bridge *br;
+		struct net_bridge_port *port;
+	};
+	union {
+		refcount_t refcnt;
+		struct net_bridge_vlan *brvlan;
+	};
+	struct br_tunnel_info tinfo;
+	union {
+		struct net_bridge_mcast br_mcast_ctx;
+		struct net_bridge_mcast_port port_mcast_ctx;
+	};
+	u16 msti;
+	struct list_head vlist;
+	struct callback_head rcu;
+};
+
+typedef __u16 port_id;
+
+struct bridge_stp_xstats {
+	__u64 transition_blk;
+	__u64 transition_fwd;
+	__u64 rx_bpdu;
+	__u64 tx_bpdu;
+	__u64 rx_tcn;
+	__u64 tx_tcn;
+};
+
+struct net_bridge_port {
+	struct net_bridge *br;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct list_head list;
+	unsigned long flags;
+	struct net_bridge_port __attribute__((btf_type_tag("rcu"))) *backup_port;
+	u32 backup_nhid;
+	u8 priority;
+	u8 state;
+	u16 port_no;
+	unsigned char topology_change_ack;
+	unsigned char config_pending;
+	port_id port_id;
+	port_id designated_port;
+	bridge_id designated_root;
+	bridge_id designated_bridge;
+	u32 path_cost;
+	u32 designated_cost;
+	unsigned long designated_age;
+	struct timer_list forward_delay_timer;
+	struct timer_list hold_timer;
+	struct timer_list message_age_timer;
+	struct kobject kobj;
+	struct callback_head rcu;
+	struct net_bridge_mcast_port multicast_ctx;
+	struct bridge_mcast_stats __attribute__((btf_type_tag("percpu"))) *mcast_stats;
+	u32 multicast_eht_hosts_limit;
+	u32 multicast_eht_hosts_cnt;
+	struct hlist_head mglist;
+	char sysfs_name[16];
+	u16 group_fwd_mask;
+	u16 backup_redirected_cnt;
+	struct bridge_stp_xstats stp_xstats;
+};
+
+struct br_mcast_stats {
+	__u64 igmp_v1queries[2];
+	__u64 igmp_v2queries[2];
+	__u64 igmp_v3queries[2];
+	__u64 igmp_leaves[2];
+	__u64 igmp_v1reports[2];
+	__u64 igmp_v2reports[2];
+	__u64 igmp_v3reports[2];
+	__u64 igmp_parse_errors;
+	__u64 mld_v1queries[2];
+	__u64 mld_v2queries[2];
+	__u64 mld_leaves[2];
+	__u64 mld_v1reports[2];
+	__u64 mld_v2reports[2];
+	__u64 mld_parse_errors;
+	__u64 mcast_bytes[2];
+	__u64 mcast_packets[2];
+};
+
+struct bridge_mcast_stats {
+	struct br_mcast_stats mstats;
+	struct u64_stats_sync syncp;
+};
+
+struct net_bridge_fdb_entry;
+
+typedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);
+
+struct mac_addr {
+	unsigned char addr[6];
+};
+
+typedef struct mac_addr mac_addr;
+
+struct net_bridge_fdb_key {
+	mac_addr addr;
+	u16 vlan_id;
+};
+
+struct net_bridge_fdb_entry {
+	struct rhash_head rhnode;
+	struct net_bridge_port *dst;
+	struct net_bridge_fdb_key key;
+	struct hlist_node fdb_node;
+	unsigned long flags;
+	long: 64;
+	long: 64;
+	unsigned long updated;
+	unsigned long used;
+	struct callback_head rcu;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+typedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, unsigned long);
+
+typedef void (*btf_trace_br_mdb_full)(void *, const struct net_device *, const struct br_ip *);
+
+typedef void (*btf_trace_page_pool_release)(void *, const struct page_pool *, s32, u32, u32);
+
+typedef void (*btf_trace_page_pool_state_release)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_state_hold)(void *, const struct page_pool *, const struct page *, u32);
+
+typedef void (*btf_trace_page_pool_update_nid)(void *, const struct page_pool *, int);
+
+typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);
+
+typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);
+
+typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);
+
+typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);
+
+enum tcp_ca_state {
+	TCP_CA_Open = 0,
+	TCP_CA_Disorder = 1,
+	TCP_CA_CWR = 2,
+	TCP_CA_Recovery = 3,
+	TCP_CA_Loss = 4,
+};
+
+struct trace_event_raw_kfree_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	void *location;
+	unsigned short protocol;
+	enum skb_drop_reason reason;
+	char __data[0];
+};
+
+struct trace_event_raw_consume_skb {
+	struct trace_entry ent;
+	void *skbaddr;
+	void *location;
+	char __data[0];
+};
+
+struct trace_event_raw_skb_copy_datagram_iovec {
+	struct trace_entry ent;
+	const void *skbaddr;
+	int len;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_start_xmit {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	unsigned int len;
+	unsigned int data_len;
+	int network_offset;
+	bool transport_offset_valid;
+	int transport_offset;
+	u8 tx_flags;
+	u16 gso_size;
+	u16 gso_segs;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	int rc;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_xmit_timeout {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	u32 __data_loc_driver;
+	int queue_index;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_template {
+	struct trace_entry ent;
+	void *skbaddr;
+	unsigned int len;
+	u32 __data_loc_name;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_verbose_template {
+	struct trace_entry ent;
+	u32 __data_loc_name;
+	unsigned int napi_id;
+	u16 queue_mapping;
+	const void *skbaddr;
+	bool vlan_tagged;
+	u16 vlan_proto;
+	u16 vlan_tci;
+	u16 protocol;
+	u8 ip_summed;
+	u32 hash;
+	bool l4_hash;
+	unsigned int len;
+	unsigned int data_len;
+	unsigned int truesize;
+	bool mac_header_valid;
+	int mac_header;
+	unsigned char nr_frags;
+	u16 gso_size;
+	u16 gso_type;
+	char __data[0];
+};
+
+struct trace_event_raw_net_dev_rx_exit_template {
+	struct trace_entry ent;
+	int ret;
+	char __data[0];
+};
+
+struct trace_event_raw_napi_poll {
+	struct trace_entry ent;
+	struct napi_struct *napi;
+	u32 __data_loc_dev_name;
+	int work;
+	int budget;
+	char __data[0];
+};
+
+struct trace_event_raw_sock_rcvqueue_full {
+	struct trace_entry ent;
+	int rmem_alloc;
+	unsigned int truesize;
+	int sk_rcvbuf;
+	char __data[0];
+};
+
+struct trace_event_raw_sock_exceed_buf_limit {
+	struct trace_entry ent;
+	char name[32];
+	long sysctl_mem[3];
+	long allocated;
+	int sysctl_rmem;
+	int rmem_alloc;
+	int sysctl_wmem;
+	int wmem_alloc;
+	int wmem_queued;
+	int kind;
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sock_set_state {
+	struct trace_entry ent;
+	const void *skaddr;
+	int oldstate;
+	int newstate;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_inet_sk_error_report {
+	struct trace_entry ent;
+	int error;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u16 protocol;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_sk_data_ready {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 family;
+	__u16 protocol;
+	unsigned long ip;
+	char __data[0];
+};
+
+struct trace_event_raw_sock_msg_length {
+	struct trace_entry ent;
+	void *sk;
+	__u16 family;
+	__u16 protocol;
+	int ret;
+	int flags;
+	char __data[0];
+};
+
+struct trace_event_raw_udp_fail_queue_rcv_skb {
+	struct trace_entry ent;
+	int rc;
+	__u16 lport;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_sk_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	const void *skaddr;
+	int state;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_sk {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_retransmit_synack {
+	struct trace_entry ent;
+	const void *skaddr;
+	const void *req;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_probe {
+	struct trace_entry ent;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u32 mark;
+	__u16 data_len;
+	__u32 snd_nxt;
+	__u32 snd_una;
+	__u32 snd_cwnd;
+	__u32 ssthresh;
+	__u32 snd_wnd;
+	__u32 srtt;
+	__u32 rcv_wnd;
+	__u64 sock_cookie;
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_event_skb {
+	struct trace_entry ent;
+	const void *skbaddr;
+	__u8 saddr[28];
+	__u8 daddr[28];
+	char __data[0];
+};
+
+struct trace_event_raw_tcp_cong_state_set {
+	struct trace_entry ent;
+	const void *skaddr;
+	__u16 sport;
+	__u16 dport;
+	__u16 family;
+	__u8 saddr[4];
+	__u8 daddr[4];
+	__u8 saddr_v6[16];
+	__u8 daddr_v6[16];
+	__u8 cong_state;
+	char __data[0];
+};
+
+struct trace_event_raw_fib_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	u8 proto;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[4];
+	__u8 dst[4];
+	__u8 gw4[4];
+	__u8 gw6[16];
+	u16 sport;
+	u16 dport;
+	char name[16];
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_dequeue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	int packets;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	unsigned long txq_state;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_enqueue {
+	struct trace_entry ent;
+	struct Qdisc *qdisc;
+	const struct netdev_queue *txq;
+	void *skbaddr;
+	int ifindex;
+	u32 handle;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_reset {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_destroy {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	u32 handle;
+	char __data[0];
+};
+
+struct trace_event_raw_qdisc_create {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	u32 __data_loc_kind;
+	u32 parent;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_add {
+	struct trace_entry ent;
+	u8 ndm_flags;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	u16 nlh_flags;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_external_learn_add {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_fdb_delete {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	char __data[0];
+};
+
+struct trace_event_raw_br_fdb_update {
+	struct trace_entry ent;
+	u32 __data_loc_br_dev;
+	u32 __data_loc_dev;
+	unsigned char addr[6];
+	u16 vid;
+	unsigned long flags;
+	char __data[0];
+};
+
+struct trace_event_raw_br_mdb_full {
+	struct trace_entry ent;
+	u32 __data_loc_dev;
+	int af;
+	u16 vid;
+	__u8 src[16];
+	__u8 grp[16];
+	__u8 grpmac[6];
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	s32 inflight;
+	u32 hold;
+	u32 release;
+	u64 cnt;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_release {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 release;
+	unsigned long pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_state_hold {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	const struct page *page;
+	u32 hold;
+	unsigned long pfn;
+	char __data[0];
+};
+
+struct trace_event_raw_page_pool_update_nid {
+	struct trace_entry ent;
+	const struct page_pool *pool;
+	int pool_nid;
+	int new_nid;
+	char __data[0];
+};
+
+struct trace_event_raw_neigh_create {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	int entries;
+	u8 created;
+	u8 gc_exempt;
+	u8 primary_key4[4];
+	u8 primary_key6[16];
+	char __data[0];
+};
+
+struct trace_event_raw_neigh_update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	unsigned long confirmed;
+	unsigned long updated;
+	unsigned long used;
+	u8 new_lladdr[32];
+	u8 new_state;
+	u32 update_flags;
+	u32 pid;
+	char __data[0];
+};
+
+struct trace_event_raw_neigh__update {
+	struct trace_entry ent;
+	u32 family;
+	u32 __data_loc_dev;
+	u8 lladdr[32];
+	u8 lladdr_len;
+	u8 flags;
+	u8 nud_state;
+	u8 type;
+	u8 dead;
+	int refcnt;
+	__u8 primary_key4[4];
+	__u8 primary_key6[16];
+	unsigned long confirmed;
+	unsigned long updated;
+	unsigned long used;
+	u32 err;
+	char __data[0];
+};
+
+struct trace_event_data_offsets_net_dev_start_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_xmit {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_net_dev_rx_verbose_template {
+	u32 name;
+};
+
+struct trace_event_data_offsets_napi_poll {
+	u32 dev_name;
+};
+
+struct trace_event_data_offsets_br_fdb_add {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_mdb_full {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh_create {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh_update {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_neigh__update {
+	u32 dev;
+};
+
+struct trace_event_data_offsets_kfree_skb {};
+
+struct trace_event_data_offsets_consume_skb {};
+
+struct trace_event_data_offsets_skb_copy_datagram_iovec {};
+
+struct trace_event_data_offsets_net_dev_xmit_timeout {
+	u32 name;
+	u32 driver;
+};
+
+struct trace_event_data_offsets_net_dev_rx_exit_template {};
+
+struct trace_event_data_offsets_sock_rcvqueue_full {};
+
+struct trace_event_data_offsets_sock_exceed_buf_limit {};
+
+struct trace_event_data_offsets_inet_sock_set_state {};
+
+struct trace_event_data_offsets_inet_sk_error_report {};
+
+struct trace_event_data_offsets_sk_data_ready {};
+
+struct trace_event_data_offsets_sock_msg_length {};
+
+struct trace_event_data_offsets_udp_fail_queue_rcv_skb {};
+
+struct trace_event_data_offsets_tcp_event_sk_skb {};
+
+struct trace_event_data_offsets_tcp_event_sk {};
+
+struct trace_event_data_offsets_tcp_retransmit_synack {};
+
+struct trace_event_data_offsets_tcp_probe {};
+
+struct trace_event_data_offsets_tcp_event_skb {};
+
+struct trace_event_data_offsets_tcp_cong_state_set {};
+
+struct trace_event_data_offsets_fib_table_lookup {};
+
+struct trace_event_data_offsets_qdisc_dequeue {};
+
+struct trace_event_data_offsets_qdisc_enqueue {};
+
+struct trace_event_data_offsets_qdisc_reset {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_destroy {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_qdisc_create {
+	u32 dev;
+	u32 kind;
+};
+
+struct trace_event_data_offsets_br_fdb_external_learn_add {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_fdb_delete {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_br_fdb_update {
+	u32 br_dev;
+	u32 dev;
+};
+
+struct trace_event_data_offsets_page_pool_release {};
+
+struct trace_event_data_offsets_page_pool_state_release {};
+
+struct trace_event_data_offsets_page_pool_state_hold {};
+
+struct trace_event_data_offsets_page_pool_update_nid {};
+
+struct net_test {
+	char name[32];
+	int (*fn)(struct net_device *);
+};
+
+enum ethtool_test_flags {
+	ETH_TEST_FL_OFFLINE = 1,
+	ETH_TEST_FL_FAILED = 2,
+	ETH_TEST_FL_EXTERNAL_LB = 4,
+	ETH_TEST_FL_EXTERNAL_LB_DONE = 8,
+};
+
+struct netsfhdr {
+	__be32 version;
+	__be64 magic;
+	u8 id;
+} __attribute__((packed));
+
+struct net_packet_attrs {
+	const unsigned char *src;
+	const unsigned char *dst;
+	u32 ip_src;
+	u32 ip_dst;
+	bool tcp;
+	u16 sport;
+	u16 dport;
+	int timeout;
+	int size;
+	int max_size;
+	u8 id;
+	u16 queue_mapping;
+};
+
+struct net_test_priv {
+	struct net_packet_attrs *packet;
+	struct packet_type pt;
+	struct completion comp;
+	int double_vlan;
+	int vlan_id;
+	int ok;
+};
+
+struct gro_cell {
+	struct sk_buff_head napi_skbs;
+	struct napi_struct napi;
+};
+
+struct percpu_free_defer {
+	struct callback_head rcu;
+	void __attribute__((btf_type_tag("percpu"))) *ptr;
+};
+
+struct gro_cells {
+	struct gro_cell __attribute__((btf_type_tag("percpu"))) *cells;
+};
+
+enum __sk_action {
+	__SK_DROP = 0,
+	__SK_PASS = 1,
+	__SK_REDIRECT = 2,
+	__SK_NONE = 3,
+};
+
+enum sk_psock_state_bits {
+	SK_PSOCK_TX_ENABLED = 0,
+	SK_PSOCK_RX_STRP_ENABLED = 1,
+};
+
+struct sk_psock_link {
+	struct list_head list;
+	struct bpf_map *map;
+	void *link_raw;
+};
+
+typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);
+
+typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);
+
+typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);
+
+struct bpf_stab {
+	struct bpf_map map;
+	struct sock **sks;
+	struct sk_psock_progs progs;
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+};
+
+struct bpf_shtab_bucket;
+
+struct bpf_shtab {
+	struct bpf_map map;
+	struct bpf_shtab_bucket *buckets;
+	u32 buckets_num;
+	u32 elem_size;
+	struct sk_psock_progs progs;
+	atomic_t count;
+	long: 64;
+};
+
+struct bpf_shtab_bucket {
+	struct hlist_head head;
+	spinlock_t lock;
+};
+
+struct bpf_shtab_elem {
+	struct callback_head rcu;
+	u32 hash;
+	struct sock *sk;
+	struct hlist_node node;
+	u8 key[0];
+};
+
+struct sock_map_seq_info {
+	struct bpf_map *map;
+	struct sock *sk;
+	u32 index;
+};
+
+struct bpf_iter__sockmap {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		void *key;
+	};
+	union {
+		struct sock *sk;
+	};
+};
+
+struct sock_hash_seq_info {
+	struct bpf_map *map;
+	struct bpf_shtab *htab;
+	u32 bucket_id;
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_REQ_NONE = 0,
+	SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1,
+	__SK_DIAG_BPF_STORAGE_REQ_MAX = 2,
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_REP_NONE = 0,
+	SK_DIAG_BPF_STORAGE = 1,
+	__SK_DIAG_BPF_STORAGE_REP_MAX = 2,
+};
+
+enum {
+	SK_DIAG_BPF_STORAGE_NONE = 0,
+	SK_DIAG_BPF_STORAGE_PAD = 1,
+	SK_DIAG_BPF_STORAGE_MAP_ID = 2,
+	SK_DIAG_BPF_STORAGE_MAP_VALUE = 3,
+	__SK_DIAG_BPF_STORAGE_MAX = 4,
+};
+
+typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);
+
+typedef u64 (*btf_bpf_sk_storage_get_tracing)(struct bpf_map *, struct sock *, void *, u64, gfp_t);
+
+typedef u64 (*btf_bpf_sk_storage_delete_tracing)(struct bpf_map *, struct sock *);
+
+struct bpf_sk_storage_diag {
+	u32 nr_maps;
+	struct bpf_map *maps[0];
+};
+
+struct bpf_iter_seq_sk_storage_map_info {
+	struct bpf_map *map;
+	unsigned int bucket_id;
+	unsigned int skip_elems;
+};
+
+struct bpf_iter__bpf_sk_storage_map {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct bpf_map *map;
+	};
+	union {
+		struct sock *sk;
+	};
+	union {
+		void *value;
+	};
+};
+
+struct compat_cmsghdr {
+	compat_size_t cmsg_len;
+	compat_int_t cmsg_level;
+	compat_int_t cmsg_type;
+};
+
+struct llc_addr {
+	unsigned char lsap;
+	unsigned char mac[6];
+};
+
+struct llc_sap {
+	unsigned char state;
+	unsigned char p_bit;
+	unsigned char f_bit;
+	refcount_t refcnt;
+	int (*rcv_func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	struct llc_addr laddr;
+	struct list_head node;
+	spinlock_t sk_lock;
+	int sk_count;
+	struct hlist_nulls_head sk_laddr_hash[64];
+	struct hlist_head sk_dev_hash[64];
+	struct callback_head rcu;
+};
+
+struct llc_pdu_un {
+	u8 dsap;
+	u8 ssap;
+	u8 ctrl_1;
+};
+
+struct llc_pdu_sn {
+	u8 dsap;
+	u8 ssap;
+	u8 ctrl_1;
+	u8 ctrl_2;
+};
+
+struct datalink_proto {
+	unsigned char type[8];
+	struct llc_sap *sap;
+	unsigned short header_length;
+	int (*rcvfunc)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
+	int (*request)(struct datalink_proto *, struct sk_buff *, const unsigned char *);
+	struct list_head node;
+};
+
+struct stp_proto {
+	unsigned char group_address[6];
+	void (*rcv)(const struct stp_proto *, struct sk_buff *, struct net_device *);
+	void *data;
+};
+
+enum {
+	TCA_UNSPEC = 0,
+	TCA_KIND = 1,
+	TCA_OPTIONS = 2,
+	TCA_STATS = 3,
+	TCA_XSTATS = 4,
+	TCA_RATE = 5,
+	TCA_FCNT = 6,
+	TCA_STATS2 = 7,
+	TCA_STAB = 8,
+	TCA_PAD = 9,
+	TCA_DUMP_INVISIBLE = 10,
+	TCA_CHAIN = 11,
+	TCA_HW_OFFLOAD = 12,
+	TCA_INGRESS_BLOCK = 13,
+	TCA_EGRESS_BLOCK = 14,
+	TCA_DUMP_FLAGS = 15,
+	TCA_EXT_WARN_MSG = 16,
+	__TCA_MAX = 17,
+};
+
+struct skb_array {
+	struct ptr_ring ring;
+};
+
+struct pfifo_fast_priv {
+	struct skb_array q[3];
+};
+
+struct tc_prio_qopt {
+	int bands;
+	__u8 priomap[16];
+};
+
+struct psched_ratecfg {
+	u64 rate_bytes_ps;
+	u32 mult;
+	u16 overhead;
+	u16 mpu;
+	u8 linklayer;
+	u8 shift;
+};
+
+struct tc_ratespec {
+	unsigned char cell_log;
+	__u8 linklayer;
+	unsigned short overhead;
+	short cell_align;
+	unsigned short mpu;
+	__u32 rate;
+};
+
+struct psched_pktrate {
+	u64 rate_pkts_ps;
+	u32 mult;
+	u8 shift;
+};
+
+struct mini_Qdisc_pair {
+	struct mini_Qdisc miniq1;
+	struct mini_Qdisc miniq2;
+	struct mini_Qdisc __attribute__((btf_type_tag("rcu"))) **p_miniq;
+};
+
+enum tc_mq_command {
+	TC_MQ_CREATE = 0,
+	TC_MQ_DESTROY = 1,
+	TC_MQ_STATS = 2,
+	TC_MQ_GRAFT = 3,
+};
+
+struct tc_qopt_offload_stats {
+	struct gnet_stats_basic_sync *bstats;
+	struct gnet_stats_queue *qstats;
+};
+
+struct tc_mq_opt_offload_graft_params {
+	unsigned long queue;
+	u32 child_handle;
+};
+
+struct tc_mq_qopt_offload {
+	enum tc_mq_command command;
+	u32 handle;
+	union {
+		struct tc_qopt_offload_stats stats;
+		struct tc_mq_opt_offload_graft_params graft_params;
+	};
+};
+
+struct mq_sched {
+	struct Qdisc **qdiscs;
+};
+
+struct sch_frag_data {
+	unsigned long dst;
+	struct qdisc_skb_cb cb;
+	__be16 inner_protocol;
+	u16 vlan_tci;
+	__be16 vlan_proto;
+	unsigned int l2_len;
+	u8 l2_data[18];
+	int (*xmit)(struct sk_buff *);
+};
+
+struct qdisc_rate_table {
+	struct tc_ratespec rate;
+	u32 data[256];
+	struct qdisc_rate_table *next;
+	int refcnt;
+};
+
+enum tc_link_layer {
+	TC_LINKLAYER_UNAWARE = 0,
+	TC_LINKLAYER_ETHERNET = 1,
+	TC_LINKLAYER_ATM = 2,
+};
+
+enum {
+	TCA_STAB_UNSPEC = 0,
+	TCA_STAB_BASE = 1,
+	TCA_STAB_DATA = 2,
+	__TCA_STAB_MAX = 3,
+};
+
+enum tc_root_command {
+	TC_ROOT_GRAFT = 0,
+};
+
+struct Qdisc_class_common {
+	u32 classid;
+	unsigned int filter_cnt;
+	struct hlist_node hnode;
+};
+
+struct qdisc_watchdog {
+	struct hrtimer timer;
+	struct Qdisc *qdisc;
+};
+
+struct check_loop_arg {
+	struct qdisc_walker w;
+	struct Qdisc *p;
+	int depth;
+};
+
+struct tc_bind_class_args {
+	struct qdisc_walker w;
+	unsigned long new_cl;
+	u32 portid;
+	u32 clid;
+};
+
+struct qdisc_dump_args {
+	struct qdisc_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+};
+
+struct tc_root_qopt_offload {
+	enum tc_root_command command;
+	u32 handle;
+	bool ingress;
+};
+
+struct Qdisc_class_hash {
+	struct hlist_head *hash;
+	unsigned int hashsize;
+	unsigned int hashmask;
+	unsigned int hashelems;
+};
+
+struct tc_query_caps_base {
+	enum tc_setup_type type;
+	void *caps;
+};
+
+struct tcf_bind_args {
+	struct tcf_walker w;
+	unsigned long base;
+	unsigned long cl;
+	u32 classid;
+};
+
+enum net_xmit_qdisc_t {
+	__NET_XMIT_STOLEN = 65536,
+	__NET_XMIT_BYPASS = 131072,
+};
+
+struct psample_group {
+	struct list_head list;
+	struct net *net;
+	u32 group_num;
+	u32 refcount;
+	u32 seq;
+	struct callback_head rcu;
+};
+
+struct tcf_exts_miss_cookie_node {
+	const struct tcf_chain *chain;
+	const struct tcf_proto *tp;
+	const struct tcf_exts *exts;
+	u32 chain_index;
+	u32 tp_prio;
+	u32 handle;
+	u32 miss_cookie_base;
+	struct callback_head rcu;
+};
+
+enum {
+	TCA_ACT_UNSPEC = 0,
+	TCA_ACT_KIND = 1,
+	TCA_ACT_OPTIONS = 2,
+	TCA_ACT_INDEX = 3,
+	TCA_ACT_STATS = 4,
+	TCA_ACT_PAD = 5,
+	TCA_ACT_COOKIE = 6,
+	TCA_ACT_FLAGS = 7,
+	TCA_ACT_HW_STATS = 8,
+	TCA_ACT_USED_HW_STATS = 9,
+	TCA_ACT_IN_HW_COUNT = 10,
+	__TCA_ACT_MAX = 11,
+};
+
+enum pedit_header_type {
+	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
+	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
+	__PEDIT_HDR_TYPE_MAX = 6,
+};
+
+enum pedit_cmd {
+	TCA_PEDIT_KEY_EX_CMD_SET = 0,
+	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
+	__PEDIT_CMD_MAX = 2,
+};
+
+enum qdisc_class_ops_flags {
+	QDISC_CLASS_OPS_DOIT_UNLOCKED = 1,
+};
+
+enum tcf_proto_ops_flags {
+	TCF_PROTO_OPS_DOIT_UNLOCKED = 1,
+};
+
+struct tcf_block_owner_item {
+	struct list_head list;
+	struct Qdisc *q;
+	enum flow_block_binder_type binder_type;
+};
+
+typedef void tcf_chain_head_change_t(struct tcf_proto *, void *);
+
+struct tcf_filter_chain_list_item {
+	struct list_head list;
+	tcf_chain_head_change_t *chain_head_change;
+	void *chain_head_change_priv;
+};
+
+struct tc_pedit_key;
+
+struct tcf_pedit_key_ex;
+
+struct tcf_pedit_parms {
+	struct tc_pedit_key *tcfp_keys;
+	struct tcf_pedit_key_ex *tcfp_keys_ex;
+	u32 tcfp_off_max_hint;
+	unsigned char tcfp_nkeys;
+	unsigned char tcfp_flags;
+	struct callback_head rcu;
+};
+
+struct tc_pedit_key {
+	__u32 mask;
+	__u32 val;
+	__u32 off;
+	__u32 at;
+	__u32 offmask;
+	__u32 shift;
+};
+
+struct tcf_pedit_key_ex {
+	enum pedit_header_type htype;
+	enum pedit_cmd cmd;
+};
+
+struct tcf_pedit {
+	struct tc_action common;
+	struct tcf_pedit_parms __attribute__((btf_type_tag("rcu"))) *parms;
+	long: 64;
+};
+
+struct tcf_block_ext_info {
+	enum flow_block_binder_type binder_type;
+	tcf_chain_head_change_t *chain_head_change;
+	void *chain_head_change_priv;
+	u32 block_index;
+};
+
+struct tcf_net {
+	spinlock_t idr_lock;
+	struct idr idr;
+};
+
+struct action_gate_entry {
+	u8 gate_state;
+	u32 interval;
+	s32 ipv;
+	s32 maxoctets;
+};
+
+struct tcf_chain_info {
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) **pprev;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *next;
+};
+
+struct tcf_dump_args {
+	struct tcf_walker w;
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct tcf_block *block;
+	struct Qdisc *q;
+	u32 parent;
+	bool terse_dump;
+};
+
+struct tcf_qevent {
+	struct tcf_block *block;
+	struct tcf_block_ext_info info;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_chain;
+};
+
+enum {
+	TCA_ROOT_UNSPEC = 0,
+	TCA_ROOT_TAB = 1,
+	TCA_ROOT_FLAGS = 2,
+	TCA_ROOT_COUNT = 3,
+	TCA_ROOT_TIME_DELTA = 4,
+	TCA_ROOT_EXT_WARN_MSG = 5,
+	__TCA_ROOT_MAX = 6,
+};
+
+struct tc_act_pernet_id {
+	struct list_head list;
+	unsigned int id;
+};
+
+struct tcamsg {
+	unsigned char tca_family;
+	unsigned char tca__pad1;
+	unsigned short tca__pad2;
+};
+
+struct tc_action_net {
+	struct tcf_idrinfo *idrinfo;
+	const struct tc_action_ops *ops;
+};
+
+enum {
+	TCA_POLICE_UNSPEC = 0,
+	TCA_POLICE_TBF = 1,
+	TCA_POLICE_RATE = 2,
+	TCA_POLICE_PEAKRATE = 3,
+	TCA_POLICE_AVRATE = 4,
+	TCA_POLICE_RESULT = 5,
+	TCA_POLICE_TM = 6,
+	TCA_POLICE_PAD = 7,
+	TCA_POLICE_RATE64 = 8,
+	TCA_POLICE_PEAKRATE64 = 9,
+	TCA_POLICE_PKTRATE64 = 10,
+	TCA_POLICE_PKTBURST64 = 11,
+	__TCA_POLICE_MAX = 12,
+};
+
+struct tcf_police_params;
+
+struct tcf_police {
+	struct tc_action common;
+	struct tcf_police_params __attribute__((btf_type_tag("rcu"))) *params;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	spinlock_t tcfp_lock;
+	s64 tcfp_toks;
+	s64 tcfp_ptoks;
+	s64 tcfp_pkttoks;
+	s64 tcfp_t_c;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tcf_police_params {
+	int tcfp_result;
+	u32 tcfp_ewma_rate;
+	s64 tcfp_burst;
+	u32 tcfp_mtu;
+	s64 tcfp_mtu_ptoks;
+	s64 tcfp_pkt_burst;
+	struct psched_ratecfg rate;
+	bool rate_present;
+	struct psched_ratecfg peak;
+	bool peak_present;
+	struct psched_pktrate ppsrate;
+	bool pps_present;
+	struct callback_head rcu;
+};
+
+struct tc_police {
+	__u32 index;
+	int action;
+	__u32 limit;
+	__u32 burst;
+	__u32 mtu;
+	struct tc_ratespec rate;
+	struct tc_ratespec peakrate;
+	int refcnt;
+	int bindcnt;
+	__u32 capab;
+};
+
+enum {
+	TCA_GACT_UNSPEC = 0,
+	TCA_GACT_TM = 1,
+	TCA_GACT_PARMS = 2,
+	TCA_GACT_PROB = 3,
+	TCA_GACT_PAD = 4,
+	__TCA_GACT_MAX = 5,
+};
+
+struct tcf_gact {
+	struct tc_action common;
+};
+
+struct tc_gact {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+};
+
+enum {
+	TCA_MIRRED_UNSPEC = 0,
+	TCA_MIRRED_TM = 1,
+	TCA_MIRRED_PARMS = 2,
+	TCA_MIRRED_PAD = 3,
+	__TCA_MIRRED_MAX = 4,
+};
+
+struct tcf_mirred {
+	struct tc_action common;
+	int tcfm_eaction;
+	bool tcfm_mac_header_xmit;
+	struct net_device __attribute__((btf_type_tag("rcu"))) *tcfm_dev;
+	netdevice_tracker tcfm_dev_tracker;
+	struct list_head tcfm_list;
+};
+
+struct tc_mirred {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+	int eaction;
+	__u32 ifindex;
+};
+
+enum {
+	TCA_SKBEDIT_UNSPEC = 0,
+	TCA_SKBEDIT_TM = 1,
+	TCA_SKBEDIT_PARMS = 2,
+	TCA_SKBEDIT_PRIORITY = 3,
+	TCA_SKBEDIT_QUEUE_MAPPING = 4,
+	TCA_SKBEDIT_MARK = 5,
+	TCA_SKBEDIT_PAD = 6,
+	TCA_SKBEDIT_PTYPE = 7,
+	TCA_SKBEDIT_MASK = 8,
+	TCA_SKBEDIT_FLAGS = 9,
+	TCA_SKBEDIT_QUEUE_MAPPING_MAX = 10,
+	__TCA_SKBEDIT_MAX = 11,
+};
+
+struct tcf_skbedit_params;
+
+struct tcf_skbedit {
+	struct tc_action common;
+	struct tcf_skbedit_params __attribute__((btf_type_tag("rcu"))) *params;
+	long: 64;
+};
+
+struct tcf_skbedit_params {
+	u32 flags;
+	u32 priority;
+	u32 mark;
+	u32 mask;
+	u16 queue_mapping;
+	u16 mapping_mod;
+	u16 ptype;
+	struct callback_head rcu;
+};
+
+struct tc_skbedit {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+};
+
+enum {
+	TCA_ACT_BPF_UNSPEC = 0,
+	TCA_ACT_BPF_TM = 1,
+	TCA_ACT_BPF_PARMS = 2,
+	TCA_ACT_BPF_OPS_LEN = 3,
+	TCA_ACT_BPF_OPS = 4,
+	TCA_ACT_BPF_FD = 5,
+	TCA_ACT_BPF_NAME = 6,
+	TCA_ACT_BPF_PAD = 7,
+	TCA_ACT_BPF_TAG = 8,
+	TCA_ACT_BPF_ID = 9,
+	__TCA_ACT_BPF_MAX = 10,
+};
+
+struct tcf_bpf {
+	struct tc_action common;
+	struct bpf_prog __attribute__((btf_type_tag("rcu"))) *filter;
+	union {
+		u32 bpf_fd;
+		u16 bpf_num_ops;
+	};
+	struct sock_filter *bpf_ops;
+	const char *bpf_name;
+};
+
+struct tcf_bpf_cfg {
+	struct bpf_prog *filter;
+	struct sock_filter *bpf_ops;
+	const char *bpf_name;
+	u16 bpf_num_ops;
+	bool is_ebpf;
+};
+
+struct tc_act_bpf {
+	__u32 index;
+	__u32 capab;
+	int action;
+	int refcnt;
+	int bindcnt;
+};
+
+enum tc_fifo_command {
+	TC_FIFO_REPLACE = 0,
+	TC_FIFO_DESTROY = 1,
+	TC_FIFO_STATS = 2,
+};
+
+struct tc_fifo_qopt {
+	__u32 limit;
+};
+
+struct tc_fifo_qopt_offload {
+	enum tc_fifo_command command;
+	u32 handle;
+	u32 parent;
+	union {
+		struct tc_qopt_offload_stats stats;
+	};
+};
+
+enum tc_htb_command {
+	TC_HTB_CREATE = 0,
+	TC_HTB_DESTROY = 1,
+	TC_HTB_LEAF_ALLOC_QUEUE = 2,
+	TC_HTB_LEAF_TO_INNER = 3,
+	TC_HTB_LEAF_DEL = 4,
+	TC_HTB_LEAF_DEL_LAST = 5,
+	TC_HTB_LEAF_DEL_LAST_FORCE = 6,
+	TC_HTB_NODE_MODIFY = 7,
+	TC_HTB_LEAF_QUERY_QUEUE = 8,
+};
+
+enum htb_cmode {
+	HTB_CANT_SEND = 0,
+	HTB_MAY_BORROW = 1,
+	HTB_CAN_SEND = 2,
+};
+
+enum {
+	TCA_HTB_UNSPEC = 0,
+	TCA_HTB_PARMS = 1,
+	TCA_HTB_INIT = 2,
+	TCA_HTB_CTAB = 3,
+	TCA_HTB_RTAB = 4,
+	TCA_HTB_DIRECT_QLEN = 5,
+	TCA_HTB_RATE64 = 6,
+	TCA_HTB_CEIL64 = 7,
+	TCA_HTB_PAD = 8,
+	TCA_HTB_OFFLOAD = 9,
+	__TCA_HTB_MAX = 10,
+};
+
+struct htb_class_leaf {
+	int deficit[8];
+	struct Qdisc *q;
+	struct netdev_queue *offload_queue;
+};
+
+struct htb_prio {
+	union {
+		struct rb_root row;
+		struct rb_root feed;
+	};
+	struct rb_node *ptr;
+	u32 last_ptr_id;
+};
+
+struct htb_class_inner {
+	struct htb_prio clprio[8];
+};
+
+struct tc_htb_xstats {
+	__u32 lends;
+	__u32 borrows;
+	__u32 giants;
+	__s32 tokens;
+	__s32 ctokens;
+};
+
+struct htb_class {
+	struct Qdisc_class_common common;
+	struct psched_ratecfg rate;
+	struct psched_ratecfg ceil;
+	s64 buffer;
+	s64 cbuffer;
+	s64 mbuffer;
+	u32 prio;
+	int quantum;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	int level;
+	unsigned int children;
+	struct htb_class *parent;
+	struct net_rate_estimator __attribute__((btf_type_tag("rcu"))) *rate_est;
+	struct gnet_stats_basic_sync bstats;
+	struct gnet_stats_basic_sync bstats_bias;
+	struct tc_htb_xstats xstats;
+	s64 tokens;
+	s64 ctokens;
+	s64 t_c;
+	union {
+		struct htb_class_leaf leaf;
+		struct htb_class_inner inner;
+	};
+	s64 pq_key;
+	int prio_activity;
+	enum htb_cmode cmode;
+	struct rb_node pq_node;
+	struct rb_node node[8];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	unsigned int drops;
+	unsigned int overlimits;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct htb_level {
+	struct rb_root wait_pq;
+	struct htb_prio hprio[8];
+};
+
+struct htb_sched {
+	struct Qdisc_class_hash clhash;
+	int defcls;
+	int rate2quantum;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	unsigned int warned;
+	int direct_qlen;
+	struct work_struct work;
+	struct qdisc_skb_head direct_queue;
+	u32 direct_pkts;
+	u32 overlimits;
+	struct qdisc_watchdog watchdog;
+	s64 now;
+	s64 near_ev_cache[8];
+	int row_mask[8];
+	struct htb_level hlevel[8];
+	struct Qdisc **direct_qdiscs;
+	unsigned int num_direct_qdiscs;
+	bool offload;
+};
+
+struct tc_htb_qopt_offload {
+	struct netlink_ext_ack *extack;
+	enum tc_htb_command command;
+	u32 parent_classid;
+	u16 classid;
+	u16 qid;
+	u32 quantum;
+	u64 rate;
+	u64 ceil;
+	u8 prio;
+};
+
+struct tc_htb_glob {
+	__u32 version;
+	__u32 rate2quantum;
+	__u32 defcls;
+	__u32 debug;
+	__u32 direct_pkts;
+};
+
+struct tc_htb_opt {
+	struct tc_ratespec rate;
+	struct tc_ratespec ceil;
+	__u32 buffer;
+	__u32 cbuffer;
+	__u32 quantum;
+	__u32 level;
+	__u32 prio;
+};
+
+struct ingress_sched_data {
+	struct tcf_block *block;
+	struct tcf_block_ext_info block_info;
+	struct mini_Qdisc_pair miniqp;
+};
+
+struct clsact_sched_data {
+	struct tcf_block *ingress_block;
+	struct tcf_block *egress_block;
+	struct tcf_block_ext_info ingress_block_info;
+	struct tcf_block_ext_info egress_block_info;
+	struct mini_Qdisc_pair miniqp_ingress;
+	struct mini_Qdisc_pair miniqp_egress;
+};
+
+enum {
+	RED_DONT_MARK = 0,
+	RED_PROB_MARK = 1,
+	RED_HARD_MARK = 2,
+};
+
+enum {
+	RED_BELOW_MIN_THRESH = 0,
+	RED_BETWEEN_TRESH = 1,
+	RED_ABOVE_MAX_TRESH = 2,
+};
+
+typedef u16 sfq_index;
+
+struct tc_sfqred_stats {
+	__u32 prob_drop;
+	__u32 forced_drop;
+	__u32 prob_mark;
+	__u32 forced_mark;
+	__u32 prob_mark_head;
+	__u32 forced_mark_head;
+};
+
+struct sfq_head {
+	sfq_index next;
+	sfq_index prev;
+};
+
+struct sfq_slot;
+
+struct red_parms;
+
+struct sfq_sched_data {
+	int limit;
+	unsigned int divisor;
+	u8 headdrop;
+	u8 maxdepth;
+	siphash_key_t perturbation;
+	u8 cur_depth;
+	u8 flags;
+	unsigned short scaled_quantum;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	sfq_index *ht;
+	struct sfq_slot *slots;
+	struct red_parms *red_parms;
+	struct tc_sfqred_stats stats;
+	struct sfq_slot *tail;
+	struct sfq_head dep[128];
+	unsigned int maxflows;
+	int perturb_period;
+	unsigned int quantum;
+	struct timer_list perturb_timer;
+	struct Qdisc *sch;
+};
+
+struct red_vars {
+	int qcount;
+	u32 qR;
+	unsigned long qavg;
+	ktime_t qidlestart;
+};
+
+struct sfq_slot {
+	struct sk_buff *skblist_next;
+	struct sk_buff *skblist_prev;
+	sfq_index qlen;
+	sfq_index next;
+	struct sfq_head dep;
+	unsigned short hash;
+	short allot;
+	unsigned int backlog;
+	struct red_vars vars;
+};
+
+struct red_parms {
+	u32 qth_min;
+	u32 qth_max;
+	u32 Scell_max;
+	u32 max_P;
+	struct reciprocal_value max_P_reciprocal;
+	u32 qth_delta;
+	u32 target_min;
+	u32 target_max;
+	u8 Scell_log;
+	u8 Wlog;
+	u8 Plog;
+	u8 Stab[256];
+};
+
+struct tc_sfq_qopt {
+	unsigned int quantum;
+	int perturb_period;
+	__u32 limit;
+	unsigned int divisor;
+	unsigned int flows;
+};
+
+struct tc_sfq_qopt_v1 {
+	struct tc_sfq_qopt v0;
+	unsigned int depth;
+	unsigned int headdrop;
+	__u32 limit;
+	__u32 qth_min;
+	__u32 qth_max;
+	unsigned char Wlog;
+	unsigned char Plog;
+	unsigned char Scell_log;
+	unsigned char flags;
+	__u32 max_P;
+	struct tc_sfqred_stats stats;
+};
+
+struct tc_sfq_xstats {
+	__s32 allot;
+};
+
+enum tc_tbf_command {
+	TC_TBF_REPLACE = 0,
+	TC_TBF_DESTROY = 1,
+	TC_TBF_STATS = 2,
+	TC_TBF_GRAFT = 3,
+};
+
+enum {
+	TCA_TBF_UNSPEC = 0,
+	TCA_TBF_PARMS = 1,
+	TCA_TBF_RTAB = 2,
+	TCA_TBF_PTAB = 3,
+	TCA_TBF_RATE64 = 4,
+	TCA_TBF_PRATE64 = 5,
+	TCA_TBF_BURST = 6,
+	TCA_TBF_PBURST = 7,
+	TCA_TBF_PAD = 8,
+	__TCA_TBF_MAX = 9,
+};
+
+struct tbf_sched_data {
+	u32 limit;
+	u32 max_size;
+	s64 buffer;
+	s64 mtu;
+	struct psched_ratecfg rate;
+	struct psched_ratecfg peak;
+	s64 tokens;
+	s64 ptokens;
+	s64 t_c;
+	struct Qdisc *qdisc;
+	struct qdisc_watchdog watchdog;
+};
+
+struct tc_tbf_qopt_offload_replace_params {
+	struct psched_ratecfg rate;
+	u32 max_size;
+	struct gnet_stats_queue *qstats;
+};
+
+struct tc_tbf_qopt_offload {
+	enum tc_tbf_command command;
+	u32 handle;
+	u32 parent;
+	union {
+		struct tc_tbf_qopt_offload_replace_params replace_params;
+		struct tc_qopt_offload_stats stats;
+		u32 child_handle;
+	};
+};
+
+struct tc_tbf_qopt {
+	struct tc_ratespec rate;
+	struct tc_ratespec peakrate;
+	__u32 limit;
+	__u32 buffer;
+	__u32 mtu;
+};
+
+enum tc_prio_command {
+	TC_PRIO_REPLACE = 0,
+	TC_PRIO_DESTROY = 1,
+	TC_PRIO_STATS = 2,
+	TC_PRIO_GRAFT = 3,
+};
+
+struct prio_sched_data {
+	int bands;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	u8 prio2band[16];
+	struct Qdisc *queues[16];
+};
+
+struct tc_prio_qopt_offload_params {
+	int bands;
+	u8 priomap[16];
+	struct gnet_stats_queue *qstats;
+};
+
+struct tc_prio_qopt_offload_graft_params {
+	u8 band;
+	u32 child_handle;
+};
+
+struct tc_prio_qopt_offload {
+	enum tc_prio_command command;
+	u32 handle;
+	u32 parent;
+	union {
+		struct tc_prio_qopt_offload_params replace_params;
+		struct tc_qopt_offload_stats stats;
+		struct tc_prio_qopt_offload_graft_params graft_params;
+	};
+};
+
+struct multiq_sched_data {
+	u16 bands;
+	u16 max_bands;
+	u16 curband;
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	struct Qdisc **queues;
+};
+
+struct tc_multiq_qopt {
+	__u16 bands;
+	__u16 max_bands;
+};
+
+struct crndstate {
+	u32 last;
+	u32 rho;
+};
+
+struct prng {
+	u64 seed;
+	struct rnd_state prng_state;
+};
+
+struct clgstate {
+	u8 state;
+	u32 a1;
+	u32 a2;
+	u32 a3;
+	u32 a4;
+	u32 a5;
+};
+
+struct tc_netem_slot {
+	__s64 min_delay;
+	__s64 max_delay;
+	__s32 max_packets;
+	__s32 max_bytes;
+	__s64 dist_delay;
+	__s64 dist_jitter;
+};
+
+struct slotstate {
+	u64 slot_next;
+	s32 packets_left;
+	s32 bytes_left;
+};
+
+struct disttable;
+
+struct netem_sched_data {
+	struct rb_root t_root;
+	struct sk_buff *t_head;
+	struct sk_buff *t_tail;
+	struct Qdisc *qdisc;
+	struct qdisc_watchdog watchdog;
+	s64 latency;
+	s64 jitter;
+	u32 loss;
+	u32 ecn;
+	u32 limit;
+	u32 counter;
+	u32 gap;
+	u32 duplicate;
+	u32 reorder;
+	u32 corrupt;
+	u64 rate;
+	s32 packet_overhead;
+	u32 cell_size;
+	struct reciprocal_value cell_size_reciprocal;
+	s32 cell_overhead;
+	struct crndstate delay_cor;
+	struct crndstate loss_cor;
+	struct crndstate dup_cor;
+	struct crndstate reorder_cor;
+	struct crndstate corrupt_cor;
+	struct prng prng;
+	struct disttable *delay_dist;
+	enum {
+		CLG_RANDOM = 0,
+		CLG_4_STATES = 1,
+		CLG_GILB_ELL = 2,
+	} loss_model;
+	enum {
+		TX_IN_GAP_PERIOD = 1,
+		TX_IN_BURST_PERIOD = 2,
+		LOST_IN_GAP_PERIOD = 3,
+		LOST_IN_BURST_PERIOD = 4,
+	} _4_state_model;
+	enum {
+		GOOD_STATE = 1,
+		BAD_STATE = 2,
+	} GE_state_model;
+	struct clgstate clg;
+	struct tc_netem_slot slot_config;
+	struct slotstate slot;
+	struct disttable *slot_dist;
+};
+
+struct disttable {
+	u32 size;
+	s16 table[0];
+};
+
+enum {
+	TCA_NETEM_UNSPEC = 0,
+	TCA_NETEM_CORR = 1,
+	TCA_NETEM_DELAY_DIST = 2,
+	TCA_NETEM_REORDER = 3,
+	TCA_NETEM_CORRUPT = 4,
+	TCA_NETEM_LOSS = 5,
+	TCA_NETEM_RATE = 6,
+	TCA_NETEM_ECN = 7,
+	TCA_NETEM_RATE64 = 8,
+	TCA_NETEM_PAD = 9,
+	TCA_NETEM_LATENCY64 = 10,
+	TCA_NETEM_JITTER64 = 11,
+	TCA_NETEM_SLOT = 12,
+	TCA_NETEM_SLOT_DIST = 13,
+	TCA_NETEM_PRNG_SEED = 14,
+	__TCA_NETEM_MAX = 15,
+};
+
+enum {
+	NETEM_LOSS_UNSPEC = 0,
+	NETEM_LOSS_GI = 1,
+	NETEM_LOSS_GE = 2,
+	__NETEM_LOSS_MAX = 3,
+};
+
+struct netem_skb_cb {
+	u64 time_to_send;
+};
+
+typedef u64 psched_time_t;
+
+struct tc_netem_gemodel {
+	__u32 p;
+	__u32 r;
+	__u32 h;
+	__u32 k1;
+};
+
+struct tc_netem_gimodel {
+	__u32 p13;
+	__u32 p31;
+	__u32 p32;
+	__u32 p14;
+	__u32 p23;
+};
+
+struct tc_netem_corr {
+	__u32 delay_corr;
+	__u32 loss_corr;
+	__u32 dup_corr;
+};
+
+struct tc_netem_reorder {
+	__u32 probability;
+	__u32 correlation;
+};
+
+struct tc_netem_corrupt {
+	__u32 probability;
+	__u32 correlation;
+};
+
+struct tc_netem_rate {
+	__u32 rate;
+	__s32 packet_overhead;
+	__u32 cell_size;
+	__s32 cell_overhead;
+};
+
+struct tc_netem_qopt {
+	__u32 latency;
+	__u32 limit;
+	__u32 loss;
+	__u32 gap;
+	__u32 duplicate;
+	__u32 jitter;
+};
+
+enum {
+	TCA_CODEL_UNSPEC = 0,
+	TCA_CODEL_TARGET = 1,
+	TCA_CODEL_LIMIT = 2,
+	TCA_CODEL_INTERVAL = 3,
+	TCA_CODEL_ECN = 4,
+	TCA_CODEL_CE_THRESHOLD = 5,
+	__TCA_CODEL_MAX = 6,
+};
+
+typedef u32 codel_time_t;
+
+struct codel_skb_cb {
+	codel_time_t enqueue_time;
+	unsigned int mem_usage;
+};
+
+struct codel_vars {
+	u32 count;
+	u32 lastcount;
+	bool dropping;
+	u16 rec_inv_sqrt;
+	codel_time_t first_above_time;
+	codel_time_t drop_next;
+	codel_time_t ldelay;
+};
+
+struct codel_params {
+	codel_time_t target;
+	codel_time_t ce_threshold;
+	codel_time_t interval;
+	u32 mtu;
+	bool ecn;
+	u8 ce_threshold_selector;
+	u8 ce_threshold_mask;
+};
+
+struct codel_stats {
+	u32 maxpacket;
+	u32 drop_count;
+	u32 drop_len;
+	u32 ecn_mark;
+	u32 ce_mark;
+};
+
+typedef u32 (*codel_skb_len_t)(const struct sk_buff *);
+
+typedef codel_time_t (*codel_skb_time_t)(const struct sk_buff *);
+
+typedef void (*codel_skb_drop_t)(struct sk_buff *, void *);
+
+typedef struct sk_buff * (*codel_skb_dequeue_t)(struct codel_vars *, void *);
+
+struct codel_sched_data {
+	struct codel_params params;
+	struct codel_vars vars;
+	struct codel_stats stats;
+	u32 drop_overlimit;
+};
+
+struct tc_codel_xstats {
+	__u32 maxpacket;
+	__u32 count;
+	__u32 lastcount;
+	__u32 ldelay;
+	__s32 drop_next;
+	__u32 drop_overlimit;
+	__u32 ecn_mark;
+	__u32 dropping;
+	__u32 ce_mark;
+};
+
+typedef s32 codel_tdiff_t;
+
+enum {
+	TCA_FQ_CODEL_XSTATS_QDISC = 0,
+	TCA_FQ_CODEL_XSTATS_CLASS = 1,
+};
+
+enum {
+	TCA_FQ_CODEL_UNSPEC = 0,
+	TCA_FQ_CODEL_TARGET = 1,
+	TCA_FQ_CODEL_LIMIT = 2,
+	TCA_FQ_CODEL_INTERVAL = 3,
+	TCA_FQ_CODEL_ECN = 4,
+	TCA_FQ_CODEL_FLOWS = 5,
+	TCA_FQ_CODEL_QUANTUM = 6,
+	TCA_FQ_CODEL_CE_THRESHOLD = 7,
+	TCA_FQ_CODEL_DROP_BATCH_SIZE = 8,
+	TCA_FQ_CODEL_MEMORY_LIMIT = 9,
+	TCA_FQ_CODEL_CE_THRESHOLD_SELECTOR = 10,
+	TCA_FQ_CODEL_CE_THRESHOLD_MASK = 11,
+	__TCA_FQ_CODEL_MAX = 12,
+};
+
+struct fq_codel_flow {
+	struct sk_buff *head;
+	struct sk_buff *tail;
+	struct list_head flowchain;
+	int deficit;
+	struct codel_vars cvars;
+};
+
+struct fq_codel_sched_data {
+	struct tcf_proto __attribute__((btf_type_tag("rcu"))) *filter_list;
+	struct tcf_block *block;
+	struct fq_codel_flow *flows;
+	u32 *backlogs;
+	u32 flows_cnt;
+	u32 quantum;
+	u32 drop_batch_size;
+	u32 memory_limit;
+	struct codel_params cparams;
+	struct codel_stats cstats;
+	u32 memory_usage;
+	u32 drop_overmemory;
+	u32 drop_overlimit;
+	u32 new_flow_count;
+	struct list_head new_flows;
+	struct list_head old_flows;
+};
+
+struct tc_fq_codel_qd_stats {
+	__u32 maxpacket;
+	__u32 drop_overlimit;
+	__u32 ecn_mark;
+	__u32 new_flow_count;
+	__u32 new_flows_len;
+	__u32 old_flows_len;
+	__u32 ce_mark;
+	__u32 memory_usage;
+	__u32 drop_overmemory;
+};
+
+struct tc_fq_codel_cl_stats {
+	__s32 deficit;
+	__u32 ldelay;
+	__u32 count;
+	__u32 lastcount;
+	__u32 dropping;
+	__s32 drop_next;
+};
+
+struct tc_fq_codel_xstats {
+	__u32 type;
+	union {
+		struct tc_fq_codel_qd_stats qdisc_stats;
+		struct tc_fq_codel_cl_stats class_stats;
+	};
+};
+
+struct fq_flow {
+	struct rb_root t_root;
+	struct sk_buff *head;
+	union {
+		struct sk_buff *tail;
+		unsigned long age;
+	};
+	struct rb_node fq_node;
+	struct sock *sk;
+	u32 socket_hash;
+	int qlen;
+	int credit;
+	struct fq_flow *next;
+	struct rb_node rate_node;
+	u64 time_next_packet;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	TCA_FQ_UNSPEC = 0,
+	TCA_FQ_PLIMIT = 1,
+	TCA_FQ_FLOW_PLIMIT = 2,
+	TCA_FQ_QUANTUM = 3,
+	TCA_FQ_INITIAL_QUANTUM = 4,
+	TCA_FQ_RATE_ENABLE = 5,
+	TCA_FQ_FLOW_DEFAULT_RATE = 6,
+	TCA_FQ_FLOW_MAX_RATE = 7,
+	TCA_FQ_BUCKETS_LOG = 8,
+	TCA_FQ_FLOW_REFILL_DELAY = 9,
+	TCA_FQ_ORPHAN_MASK = 10,
+	TCA_FQ_LOW_RATE_THRESHOLD = 11,
+	TCA_FQ_CE_THRESHOLD = 12,
+	TCA_FQ_TIMER_SLACK = 13,
+	TCA_FQ_HORIZON = 14,
+	TCA_FQ_HORIZON_DROP = 15,
+	__TCA_FQ_MAX = 16,
+};
+
+struct fq_skb_cb {
+	u64 time_to_send;
+};
+
+struct fq_flow_head {
+	struct fq_flow *first;
+	struct fq_flow *last;
+};
+
+struct fq_sched_data {
+	struct fq_flow_head new_flows;
+	struct fq_flow_head old_flows;
+	struct rb_root delayed;
+	u64 time_next_delayed_flow;
+	u64 ktime_cache;
+	unsigned long unthrottle_latency_ns;
+	struct fq_flow internal;
+	u32 quantum;
+	u32 initial_quantum;
+	u32 flow_refill_delay;
+	u32 flow_plimit;
+	unsigned long flow_max_rate;
+	u64 ce_threshold;
+	u64 horizon;
+	u32 orphan_mask;
+	u32 low_rate_threshold;
+	struct rb_root *fq_root;
+	u8 rate_enable;
+	u8 fq_trees_log;
+	u8 horizon_drop;
+	u32 flows;
+	u32 inactive_flows;
+	u32 throttled_flows;
+	u64 stat_gc_flows;
+	u64 stat_internal_packets;
+	u64 stat_throttled;
+	u64 stat_ce_mark;
+	u64 stat_horizon_drops;
+	u64 stat_horizon_caps;
+	u64 stat_flows_plimit;
+	u64 stat_pkts_too_long;
+	u64 stat_allocation_errors;
+	u32 timer_slack;
+	struct qdisc_watchdog watchdog;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct tc_fq_qd_stats {
+	__u64 gc_flows;
+	__u64 highprio_packets;
+	__u64 tcp_retrans;
+	__u64 throttled;
+	__u64 flows_plimit;
+	__u64 pkts_too_long;
+	__u64 allocation_errors;
+	__s64 time_next_delayed_flow;
+	__u32 flows;
+	__u32 inactive_flows;
+	__u32 throttled_flows;
+	__u32 unthrottle_latency_ns;
+	__u64 ce_mark;
+	__u64 horizon_drops;
+	__u64 horizon_caps;
+};
+
+enum tc_clsu32_command {
+	TC_CLSU32_NEW_KNODE = 0,
+	TC_CLSU32_REPLACE_KNODE = 1,
+	TC_CLSU32_DELETE_KNODE = 2,
+	TC_CLSU32_NEW_HNODE = 3,
+	TC_CLSU32_REPLACE_HNODE = 4,
+	TC_CLSU32_DELETE_HNODE = 5,
+};
+
+enum {
+	TCA_U32_UNSPEC = 0,
+	TCA_U32_CLASSID = 1,
+	TCA_U32_HASH = 2,
+	TCA_U32_LINK = 3,
+	TCA_U32_DIVISOR = 4,
+	TCA_U32_SEL = 5,
+	TCA_U32_POLICE = 6,
+	TCA_U32_ACT = 7,
+	TCA_U32_INDEV = 8,
+	TCA_U32_PCNT = 9,
+	TCA_U32_MARK = 10,
+	TCA_U32_FLAGS = 11,
+	TCA_U32_PAD = 12,
+	__TCA_U32_MAX = 13,
+};
+
+struct tc_u32_key {
+	__be32 mask;
+	__be32 val;
+	int off;
+	int offmask;
+};
+
+struct tc_u32_sel {
+	unsigned char flags;
+	unsigned char offshift;
+	unsigned char nkeys;
+	__be16 offmask;
+	__u16 off;
+	short offoff;
+	short hoff;
+	__be32 hmask;
+	struct tc_u32_key keys[0];
+};
+
+struct tc_u_hnode;
+
+struct tc_u_knode {
+	struct tc_u_knode __attribute__((btf_type_tag("rcu"))) *next;
+	u32 handle;
+	struct tc_u_hnode __attribute__((btf_type_tag("rcu"))) *ht_up;
+	struct tcf_exts exts;
+	int ifindex;
+	u8 fshift;
+	struct tcf_result res;
+	struct tc_u_hnode __attribute__((btf_type_tag("rcu"))) *ht_down;
+	u32 flags;
+	unsigned int in_hw_count;
+	u32 val;
+	u32 mask;
+	u32 __attribute__((btf_type_tag("percpu"))) *pcpu_success;
+	struct rcu_work rwork;
+	struct tc_u32_sel sel;
+};
+
+struct tc_u_hnode {
+	struct tc_u_hnode __attribute__((btf_type_tag("rcu"))) *next;
+	u32 handle;
+	u32 prio;
+	int refcnt;
+	unsigned int divisor;
+	struct idr handle_idr;
+	bool is_root;
+	struct callback_head rcu;
+	u32 flags;
+	struct tc_u_knode __attribute__((btf_type_tag("rcu"))) *ht[0];
+};
+
+struct tc_u_common {
+	struct tc_u_hnode __attribute__((btf_type_tag("rcu"))) *hlist;
+	void *ptr;
+	int refcnt;
+	struct idr handle_idr;
+	struct hlist_node hnode;
+	long knodes;
+};
+
+struct tc_cls_u32_knode {
+	struct tcf_exts *exts;
+	struct tcf_result *res;
+	struct tc_u32_sel *sel;
+	u32 handle;
+	u32 val;
+	u32 mask;
+	u32 link_handle;
+	u8 fshift;
+};
+
+struct tc_cls_u32_hnode {
+	u32 handle;
+	u32 prio;
+	unsigned int divisor;
+};
+
+struct flow_cls_common_offload {
+	u32 chain_index;
+	__be16 protocol;
+	u32 prio;
+	struct netlink_ext_ack *extack;
+};
+
+struct tc_cls_u32_offload {
+	struct flow_cls_common_offload common;
+	enum tc_clsu32_command command;
+	union {
+		struct tc_cls_u32_knode knode;
+		struct tc_cls_u32_hnode hnode;
+	};
+};
+
+struct tc_u32_mark {
+	__u32 val;
+	__u32 mask;
+	__u32 success;
+};
+
+enum {
+	TCA_FW_UNSPEC = 0,
+	TCA_FW_CLASSID = 1,
+	TCA_FW_POLICE = 2,
+	TCA_FW_INDEV = 3,
+	TCA_FW_ACT = 4,
+	TCA_FW_MASK = 5,
+	__TCA_FW_MAX = 6,
+};
+
+struct fw_filter {
+	struct fw_filter __attribute__((btf_type_tag("rcu"))) *next;
+	u32 id;
+	struct tcf_result res;
+	int ifindex;
+	struct tcf_exts exts;
+	struct tcf_proto *tp;
+	struct rcu_work rwork;
+};
+
+struct fw_head {
+	u32 mask;
+	struct fw_filter __attribute__((btf_type_tag("rcu"))) *ht[256];
+	struct callback_head rcu;
+};
+
+enum {
+	TCA_BASIC_UNSPEC = 0,
+	TCA_BASIC_CLASSID = 1,
+	TCA_BASIC_EMATCHES = 2,
+	TCA_BASIC_ACT = 3,
+	TCA_BASIC_POLICE = 4,
+	TCA_BASIC_PCNT = 5,
+	TCA_BASIC_PAD = 6,
+	__TCA_BASIC_MAX = 7,
+};
+
+struct tcf_ematch_tree_hdr {
+	__u16 nmatches;
+	__u16 progid;
+};
+
+struct tcf_ematch;
+
+struct tcf_ematch_tree {
+	struct tcf_ematch_tree_hdr hdr;
+	struct tcf_ematch *matches;
+};
+
+struct tc_basic_pcnt;
+
+struct basic_filter {
+	u32 handle;
+	struct tcf_exts exts;
+	struct tcf_ematch_tree ematches;
+	struct tcf_result res;
+	struct tcf_proto *tp;
+	struct list_head link;
+	struct tc_basic_pcnt __attribute__((btf_type_tag("percpu"))) *pf;
+	struct rcu_work rwork;
+};
+
+struct tcf_ematch_ops;
+
+struct tcf_ematch {
+	struct tcf_ematch_ops *ops;
+	unsigned long data;
+	unsigned int datalen;
+	u16 matchid;
+	u16 flags;
+	struct net *net;
+};
+
+struct tcf_pkt_info;
+
+struct tcf_ematch_ops {
+	int kind;
+	int datalen;
+	int (*change)(struct net *, void *, int, struct tcf_ematch *);
+	int (*match)(struct sk_buff *, struct tcf_ematch *, struct tcf_pkt_info *);
+	void (*destroy)(struct tcf_ematch *);
+	int (*dump)(struct sk_buff *, struct tcf_ematch *);
+	struct module *owner;
+	struct list_head link;
+};
+
+struct tcf_pkt_info {
+	unsigned char *ptr;
+	int nexthdr;
+};
+
+struct tc_basic_pcnt {
+	__u64 rcnt;
+	__u64 rhit;
+};
+
+struct basic_head {
+	struct list_head flist;
+	struct idr handle_idr;
+	struct callback_head rcu;
+};
+
+enum {
+	FLOW_KEY_SRC = 0,
+	FLOW_KEY_DST = 1,
+	FLOW_KEY_PROTO = 2,
+	FLOW_KEY_PROTO_SRC = 3,
+	FLOW_KEY_PROTO_DST = 4,
+	FLOW_KEY_IIF = 5,
+	FLOW_KEY_PRIORITY = 6,
+	FLOW_KEY_MARK = 7,
+	FLOW_KEY_NFCT = 8,
+	FLOW_KEY_NFCT_SRC = 9,
+	FLOW_KEY_NFCT_DST = 10,
+	FLOW_KEY_NFCT_PROTO_SRC = 11,
+	FLOW_KEY_NFCT_PROTO_DST = 12,
+	FLOW_KEY_RTCLASSID = 13,
+	FLOW_KEY_SKUID = 14,
+	FLOW_KEY_SKGID = 15,
+	FLOW_KEY_VLAN_TAG = 16,
+	FLOW_KEY_RXHASH = 17,
+	__FLOW_KEY_MAX = 18,
+};
+
+enum {
+	FLOW_MODE_MAP = 0,
+	FLOW_MODE_HASH = 1,
+};
+
+enum {
+	TCA_FLOW_UNSPEC = 0,
+	TCA_FLOW_KEYS = 1,
+	TCA_FLOW_MODE = 2,
+	TCA_FLOW_BASECLASS = 3,
+	TCA_FLOW_RSHIFT = 4,
+	TCA_FLOW_ADDEND = 5,
+	TCA_FLOW_MASK = 6,
+	TCA_FLOW_XOR = 7,
+	TCA_FLOW_DIVISOR = 8,
+	TCA_FLOW_ACT = 9,
+	TCA_FLOW_POLICE = 10,
+	TCA_FLOW_EMATCHES = 11,
+	TCA_FLOW_PERTURB = 12,
+	__TCA_FLOW_MAX = 13,
+};
+
+struct flow_filter {
+	struct list_head list;
+	struct tcf_exts exts;
+	struct tcf_ematch_tree ematches;
+	struct tcf_proto *tp;
+	struct timer_list perturb_timer;
+	u32 perturb_period;
+	u32 handle;
+	u32 nkeys;
+	u32 keymask;
+	u32 mode;
+	u32 mask;
+	u32 xor;
+	u32 rshift;
+	u32 addend;
+	u32 divisor;
+	u32 baseclass;
+	u32 hashrnd;
+	struct rcu_work rwork;
+};
+
+struct flow_head {
+	struct list_head filters;
+	struct callback_head rcu;
+};
+
+enum tc_clsbpf_command {
+	TC_CLSBPF_OFFLOAD = 0,
+	TC_CLSBPF_STATS = 1,
+};
+
+enum {
+	TCA_BPF_UNSPEC = 0,
+	TCA_BPF_ACT = 1,
+	TCA_BPF_POLICE = 2,
+	TCA_BPF_CLASSID = 3,
+	TCA_BPF_OPS_LEN = 4,
+	TCA_BPF_OPS = 5,
+	TCA_BPF_FD = 6,
+	TCA_BPF_NAME = 7,
+	TCA_BPF_FLAGS = 8,
+	TCA_BPF_FLAGS_GEN = 9,
+	TCA_BPF_TAG = 10,
+	TCA_BPF_ID = 11,
+	__TCA_BPF_MAX = 12,
+};
+
+struct cls_bpf_prog {
+	struct bpf_prog *filter;
+	struct list_head link;
+	struct tcf_result res;
+	bool exts_integrated;
+	u32 gen_flags;
+	unsigned int in_hw_count;
+	struct tcf_exts exts;
+	u32 handle;
+	u16 bpf_num_ops;
+	struct sock_filter *bpf_ops;
+	const char *bpf_name;
+	struct tcf_proto *tp;
+	struct rcu_work rwork;
+};
+
+struct tc_cls_bpf_offload {
+	struct flow_cls_common_offload common;
+	enum tc_clsbpf_command command;
+	struct tcf_exts *exts;
+	struct bpf_prog *prog;
+	struct bpf_prog *oldprog;
+	const char *name;
+	bool exts_integrated;
+};
+
+struct cls_bpf_head {
+	struct list_head plist;
+	struct idr handle_idr;
+	struct callback_head rcu;
+};
+
+enum tc_matchall_command {
+	TC_CLSMATCHALL_REPLACE = 0,
+	TC_CLSMATCHALL_DESTROY = 1,
+	TC_CLSMATCHALL_STATS = 2,
+};
+
+enum {
+	TCA_MATCHALL_UNSPEC = 0,
+	TCA_MATCHALL_CLASSID = 1,
+	TCA_MATCHALL_ACT = 2,
+	TCA_MATCHALL_FLAGS = 3,
+	TCA_MATCHALL_PCNT = 4,
+	TCA_MATCHALL_PAD = 5,
+	__TCA_MATCHALL_MAX = 6,
+};
+
+struct tc_matchall_pcnt;
+
+struct cls_mall_head {
+	struct tcf_exts exts;
+	struct tcf_result res;
+	u32 handle;
+	u32 flags;
+	unsigned int in_hw_count;
+	struct tc_matchall_pcnt __attribute__((btf_type_tag("percpu"))) *pf;
+	struct rcu_work rwork;
+	bool deleting;
+};
+
+struct tc_matchall_pcnt {
+	__u64 rhit;
+};
+
+struct tc_cls_matchall_offload {
+	struct flow_cls_common_offload common;
+	enum tc_matchall_command command;
+	struct flow_rule *rule;
+	struct flow_stats stats;
+	bool use_act_stats;
+	unsigned long cookie;
+};
+
+enum {
+	TCA_EMATCH_TREE_UNSPEC = 0,
+	TCA_EMATCH_TREE_HDR = 1,
+	TCA_EMATCH_TREE_LIST = 2,
+	__TCA_EMATCH_TREE_MAX = 3,
+};
+
+struct tcf_ematch_hdr {
+	__u16 matchid;
+	__u16 kind;
+	__u16 flags;
+	__u16 pad;
+};
+
+enum {
+	TCF_EM_ALIGN_U8 = 1,
+	TCF_EM_ALIGN_U16 = 2,
+	TCF_EM_ALIGN_U32 = 4,
+};
+
+enum {
+	TCF_EM_OPND_EQ = 0,
+	TCF_EM_OPND_GT = 1,
+	TCF_EM_OPND_LT = 2,
+};
+
+enum {
+	TCF_LAYER_LINK = 0,
+	TCF_LAYER_NETWORK = 1,
+	TCF_LAYER_TRANSPORT = 2,
+	__TCF_LAYER_MAX = 3,
+};
+
+struct tcf_em_cmp {
+	__u32 val;
+	__u32 mask;
+	__u16 off;
+	__u8 align: 4;
+	__u8 flags: 4;
+	__u8 layer: 4;
+	__u8 opnd: 4;
+};
+
+struct tcf_em_nbyte {
+	__u16 off;
+	__u16 len: 12;
+	__u8 layer: 4;
+};
+
+struct nbyte_data {
+	struct tcf_em_nbyte hdr;
+	char pattern[0];
+};
+
+struct meta_value;
+
+struct meta_obj;
+
+struct meta_ops {
+	void (*get)(struct sk_buff *, struct tcf_pkt_info *, struct meta_value *, struct meta_obj *, int *);
+};
+
+struct tcf_meta_val {
+	__u16 kind;
+	__u8 shift;
+	__u8 op;
+};
+
+struct meta_value {
+	struct tcf_meta_val hdr;
+	unsigned long val;
+	unsigned int len;
+};
+
+struct meta_obj {
+	unsigned long value;
+	unsigned int len;
+};
+
+struct meta_type_ops {
+	void (*destroy)(struct meta_value *);
+	int (*compare)(struct meta_obj *, struct meta_obj *);
+	int (*change)(struct meta_value *, struct nlattr *);
+	void (*apply_extras)(struct meta_value *, struct meta_obj *);
+	int (*dump)(struct sk_buff *, struct meta_value *, int);
+};
+
+enum {
+	TCA_EM_META_UNSPEC = 0,
+	TCA_EM_META_HDR = 1,
+	TCA_EM_META_LVALUE = 2,
+	TCA_EM_META_RVALUE = 3,
+	__TCA_EM_META_MAX = 4,
+};
+
+enum {
+	TCF_META_TYPE_VAR = 0,
+	TCF_META_TYPE_INT = 1,
+	__TCF_META_TYPE_MAX = 2,
+};
+
+enum {
+	TCF_META_ID_VALUE = 0,
+	TCF_META_ID_RANDOM = 1,
+	TCF_META_ID_LOADAVG_0 = 2,
+	TCF_META_ID_LOADAVG_1 = 3,
+	TCF_META_ID_LOADAVG_2 = 4,
+	TCF_META_ID_DEV = 5,
+	TCF_META_ID_PRIORITY = 6,
+	TCF_META_ID_PROTOCOL = 7,
+	TCF_META_ID_PKTTYPE = 8,
+	TCF_META_ID_PKTLEN = 9,
+	TCF_META_ID_DATALEN = 10,
+	TCF_META_ID_MACLEN = 11,
+	TCF_META_ID_NFMARK = 12,
+	TCF_META_ID_TCINDEX = 13,
+	TCF_META_ID_RTCLASSID = 14,
+	TCF_META_ID_RTIIF = 15,
+	TCF_META_ID_SK_FAMILY = 16,
+	TCF_META_ID_SK_STATE = 17,
+	TCF_META_ID_SK_REUSE = 18,
+	TCF_META_ID_SK_BOUND_IF = 19,
+	TCF_META_ID_SK_REFCNT = 20,
+	TCF_META_ID_SK_SHUTDOWN = 21,
+	TCF_META_ID_SK_PROTO = 22,
+	TCF_META_ID_SK_TYPE = 23,
+	TCF_META_ID_SK_RCVBUF = 24,
+	TCF_META_ID_SK_RMEM_ALLOC = 25,
+	TCF_META_ID_SK_WMEM_ALLOC = 26,
+	TCF_META_ID_SK_OMEM_ALLOC = 27,
+	TCF_META_ID_SK_WMEM_QUEUED = 28,
+	TCF_META_ID_SK_RCV_QLEN = 29,
+	TCF_META_ID_SK_SND_QLEN = 30,
+	TCF_META_ID_SK_ERR_QLEN = 31,
+	TCF_META_ID_SK_FORWARD_ALLOCS = 32,
+	TCF_META_ID_SK_SNDBUF = 33,
+	TCF_META_ID_SK_ALLOCS = 34,
+	__TCF_META_ID_SK_ROUTE_CAPS = 35,
+	TCF_META_ID_SK_HASH = 36,
+	TCF_META_ID_SK_LINGERTIME = 37,
+	TCF_META_ID_SK_ACK_BACKLOG = 38,
+	TCF_META_ID_SK_MAX_ACK_BACKLOG = 39,
+	TCF_META_ID_SK_PRIO = 40,
+	TCF_META_ID_SK_RCVLOWAT = 41,
+	TCF_META_ID_SK_RCVTIMEO = 42,
+	TCF_META_ID_SK_SNDTIMEO = 43,
+	TCF_META_ID_SK_SENDMSG_OFF = 44,
+	TCF_META_ID_SK_WRITE_PENDING = 45,
+	TCF_META_ID_VLAN_TAG = 46,
+	TCF_META_ID_RXHASH = 47,
+	__TCF_META_ID_MAX = 48,
+};
+
+struct meta_match {
+	struct meta_value lvalue;
+	struct meta_value rvalue;
+};
+
+struct tcf_meta_hdr {
+	struct tcf_meta_val left;
+	struct tcf_meta_val right;
+};
+
+struct text_match {
+	u16 from_offset;
+	u16 to_offset;
+	u8 from_layer;
+	u8 to_layer;
+	struct ts_config *config;
+};
+
+struct tcf_em_text {
+	char algo[16];
+	__u16 from_offset;
+	__u16 to_offset;
+	__u16 pattern_len;
+	__u8 from_layer: 4;
+	__u8 to_layer: 4;
+	__u8 pad;
+};
+
+typedef void (*btf_trace_netlink_extack)(void *, const char *);
+
+struct listeners;
+
+struct netlink_table {
+	struct rhashtable hash;
+	struct hlist_head mc_list;
+	struct listeners __attribute__((btf_type_tag("rcu"))) *listeners;
+	unsigned int flags;
+	unsigned int groups;
+	struct mutex *cb_mutex;
+	struct module *module;
+	int (*bind)(struct net *, int);
+	void (*unbind)(struct net *, int);
+	void (*release)(struct sock *, unsigned long *);
+	int registered;
+};
+
+struct listeners {
+	struct callback_head rcu;
+	unsigned long masks[0];
+};
+
+enum netlink_skb_flags {
+	NETLINK_SKB_DST = 8,
+};
+
+enum {
+	NETLINK_F_KERNEL_SOCKET = 0,
+	NETLINK_F_RECV_PKTINFO = 1,
+	NETLINK_F_BROADCAST_SEND_ERROR = 2,
+	NETLINK_F_RECV_NO_ENOBUFS = 3,
+	NETLINK_F_LISTEN_ALL_NSID = 4,
+	NETLINK_F_CAP_ACK = 5,
+	NETLINK_F_EXT_ACK = 6,
+	NETLINK_F_STRICT_CHK = 7,
+};
+
+enum {
+	NETLINK_UNCONNECTED = 0,
+	NETLINK_CONNECTED = 1,
+};
+
+enum nlmsgerr_attrs {
+	NLMSGERR_ATTR_UNUSED = 0,
+	NLMSGERR_ATTR_MSG = 1,
+	NLMSGERR_ATTR_OFFS = 2,
+	NLMSGERR_ATTR_COOKIE = 3,
+	NLMSGERR_ATTR_POLICY = 4,
+	NLMSGERR_ATTR_MISS_TYPE = 5,
+	NLMSGERR_ATTR_MISS_NEST = 6,
+	__NLMSGERR_ATTR_MAX = 7,
+	NLMSGERR_ATTR_MAX = 6,
+};
+
+struct trace_event_raw_netlink_extack {
+	struct trace_entry ent;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct netlink_tap {
+	struct net_device *dev;
+	struct module *module;
+	struct list_head list;
+};
+
+struct netlink_sock {
+	struct sock sk;
+	unsigned long flags;
+	u32 portid;
+	u32 dst_portid;
+	u32 dst_group;
+	u32 subscriptions;
+	u32 ngroups;
+	unsigned long *groups;
+	unsigned long state;
+	size_t max_recvmsg_len;
+	wait_queue_head_t wait;
+	bool bound;
+	bool cb_running;
+	int dump_done_errno;
+	struct netlink_callback cb;
+	struct mutex *cb_mutex;
+	struct mutex cb_def_mutex;
+	void (*netlink_rcv)(struct sk_buff *);
+	int (*netlink_bind)(struct net *, int);
+	void (*netlink_unbind)(struct net *, int);
+	void (*netlink_release)(struct sock *, unsigned long *);
+	struct module *module;
+	struct rhash_head node;
+	struct callback_head rcu;
+	struct work_struct work;
+};
+
+struct sockaddr_nl {
+	__kernel_sa_family_t nl_family;
+	unsigned short nl_pad;
+	__u32 nl_pid;
+	__u32 nl_groups;
+};
+
+struct trace_event_data_offsets_netlink_extack {
+	u32 msg;
+};
+
+struct netlink_tap_net {
+	struct list_head netlink_tap_all;
+	struct mutex netlink_tap_lock;
+};
+
+struct netlink_broadcast_data {
+	struct sock *exclude_sk;
+	struct net *net;
+	u32 portid;
+	u32 group;
+	int failure;
+	int delivery_failure;
+	int congested;
+	int delivered;
+	gfp_t allocation;
+	struct sk_buff *skb;
+	struct sk_buff *skb2;
+	int (*tx_filter)(struct sock *, struct sk_buff *, void *);
+	void *tx_data;
+};
+
+struct netlink_set_err_data {
+	struct sock *exclude_sk;
+	u32 portid;
+	u32 group;
+	int code;
+};
+
+struct netlink_compare_arg {
+	possible_net_t pnet;
+	u32 portid;
+};
+
+struct nl_pktinfo {
+	__u32 group;
+};
+
+struct nl_seq_iter {
+	struct seq_net_private p;
+	struct rhashtable_iter hti;
+	int link;
+};
+
+struct bpf_iter__netlink {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct netlink_sock *sk;
+	};
+};
+
+struct nlmsgerr {
+	int error;
+	struct nlmsghdr msg;
+};
+
+struct netlink_notify {
+	struct net *net;
+	u32 portid;
+	int protocol;
+};
+
+enum {
+	CTRL_CMD_UNSPEC = 0,
+	CTRL_CMD_NEWFAMILY = 1,
+	CTRL_CMD_DELFAMILY = 2,
+	CTRL_CMD_GETFAMILY = 3,
+	CTRL_CMD_NEWOPS = 4,
+	CTRL_CMD_DELOPS = 5,
+	CTRL_CMD_GETOPS = 6,
+	CTRL_CMD_NEWMCAST_GRP = 7,
+	CTRL_CMD_DELMCAST_GRP = 8,
+	CTRL_CMD_GETMCAST_GRP = 9,
+	CTRL_CMD_GETPOLICY = 10,
+	__CTRL_CMD_MAX = 11,
+};
+
+enum genl_validate_flags {
+	GENL_DONT_VALIDATE_STRICT = 1,
+	GENL_DONT_VALIDATE_DUMP = 2,
+	GENL_DONT_VALIDATE_DUMP_STRICT = 4,
+};
+
+enum {
+	CTRL_ATTR_UNSPEC = 0,
+	CTRL_ATTR_FAMILY_ID = 1,
+	CTRL_ATTR_FAMILY_NAME = 2,
+	CTRL_ATTR_VERSION = 3,
+	CTRL_ATTR_HDRSIZE = 4,
+	CTRL_ATTR_MAXATTR = 5,
+	CTRL_ATTR_OPS = 6,
+	CTRL_ATTR_MCAST_GROUPS = 7,
+	CTRL_ATTR_POLICY = 8,
+	CTRL_ATTR_OP_POLICY = 9,
+	CTRL_ATTR_OP = 10,
+	__CTRL_ATTR_MAX = 11,
+};
+
+enum {
+	CTRL_ATTR_OP_UNSPEC = 0,
+	CTRL_ATTR_OP_ID = 1,
+	CTRL_ATTR_OP_FLAGS = 2,
+	__CTRL_ATTR_OP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_MCAST_GRP_UNSPEC = 0,
+	CTRL_ATTR_MCAST_GRP_NAME = 1,
+	CTRL_ATTR_MCAST_GRP_ID = 2,
+	__CTRL_ATTR_MCAST_GRP_MAX = 3,
+};
+
+enum {
+	CTRL_ATTR_POLICY_UNSPEC = 0,
+	CTRL_ATTR_POLICY_DO = 1,
+	CTRL_ATTR_POLICY_DUMP = 2,
+	__CTRL_ATTR_POLICY_DUMP_MAX = 3,
+	CTRL_ATTR_POLICY_DUMP_MAX = 2,
+};
+
+struct genl_op_iter {
+	const struct genl_family *family;
+	struct genl_split_ops doit;
+	struct genl_split_ops dumpit;
+	int cmd_idx;
+	int entry_idx;
+	u32 cmd;
+	u8 flags;
+};
+
+struct netlink_policy_dump_state;
+
+struct ctrl_dump_policy_ctx {
+	struct netlink_policy_dump_state *state;
+	const struct genl_family *rt;
+	struct genl_op_iter *op_iter;
+	u32 op;
+	u16 fam_id;
+	u8 dump_map: 1;
+	u8 single_op: 1;
+};
+
+struct genl_start_context {
+	const struct genl_family *family;
+	struct nlmsghdr *nlh;
+	struct netlink_ext_ack *extack;
+	const struct genl_split_ops *ops;
+	int hdrlen;
+};
+
+enum netlink_attribute_type {
+	NL_ATTR_TYPE_INVALID = 0,
+	NL_ATTR_TYPE_FLAG = 1,
+	NL_ATTR_TYPE_U8 = 2,
+	NL_ATTR_TYPE_U16 = 3,
+	NL_ATTR_TYPE_U32 = 4,
+	NL_ATTR_TYPE_U64 = 5,
+	NL_ATTR_TYPE_S8 = 6,
+	NL_ATTR_TYPE_S16 = 7,
+	NL_ATTR_TYPE_S32 = 8,
+	NL_ATTR_TYPE_S64 = 9,
+	NL_ATTR_TYPE_BINARY = 10,
+	NL_ATTR_TYPE_STRING = 11,
+	NL_ATTR_TYPE_NUL_STRING = 12,
+	NL_ATTR_TYPE_NESTED = 13,
+	NL_ATTR_TYPE_NESTED_ARRAY = 14,
+	NL_ATTR_TYPE_BITFIELD32 = 15,
+};
+
+enum netlink_policy_type_attr {
+	NL_POLICY_TYPE_ATTR_UNSPEC = 0,
+	NL_POLICY_TYPE_ATTR_TYPE = 1,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3,
+	NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4,
+	NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5,
+	NL_POLICY_TYPE_ATTR_MIN_LENGTH = 6,
+	NL_POLICY_TYPE_ATTR_MAX_LENGTH = 7,
+	NL_POLICY_TYPE_ATTR_POLICY_IDX = 8,
+	NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9,
+	NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10,
+	NL_POLICY_TYPE_ATTR_PAD = 11,
+	NL_POLICY_TYPE_ATTR_MASK = 12,
+	__NL_POLICY_TYPE_ATTR_MAX = 13,
+	NL_POLICY_TYPE_ATTR_MAX = 12,
+};
+
+struct netlink_policy_dump_state {
+	unsigned int policy_idx;
+	unsigned int attr_idx;
+	unsigned int n_alloc;
+	struct {
+		const struct nla_policy *policy;
+		unsigned int maxtype;
+	} policies[0];
+};
+
+typedef void (*btf_trace_bpf_test_finish)(void *, int *);
+
+struct bpf_test_timer {
+	enum {
+		NO_PREEMPT = 0,
+		NO_MIGRATE = 1,
+	} mode;
+	u32 i;
+	u64 time_start;
+	u64 time_spent;
+};
+
+enum nf_inet_hooks {
+	NF_INET_PRE_ROUTING = 0,
+	NF_INET_LOCAL_IN = 1,
+	NF_INET_FORWARD = 2,
+	NF_INET_LOCAL_OUT = 3,
+	NF_INET_POST_ROUTING = 4,
+	NF_INET_NUMHOOKS = 5,
+	NF_INET_INGRESS = 5,
+};
+
+struct bpf_fentry_test_t {
+	struct bpf_fentry_test_t *a;
+};
+
+struct trace_event_raw_bpf_test_finish {
+	struct trace_entry ent;
+	int err;
+	char __data[0];
+};
+
+struct xdp_test_data {
+	struct xdp_buff *orig_ctx;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct xdp_rxq_info rxq;
+	struct net_device *dev;
+	struct page_pool *pp;
+	struct xdp_frame **frames;
+	struct sk_buff **skbs;
+	struct xdp_mem_info mem;
+	u32 batch_size;
+	u32 frame_cnt;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_page_head {
+	struct xdp_buff orig_ctx;
+	struct xdp_buff ctx;
+	union {
+		struct {
+			struct {} __empty_frame;
+			struct xdp_frame frame[0];
+		};
+		struct {
+			struct {} __empty_data;
+			u8 data[0];
+		};
+	};
+};
+
+struct trace_event_data_offsets_bpf_test_finish {};
+
+struct prog_test_member1 {
+	int a;
+};
+
+struct prog_test_member {
+	struct prog_test_member1 m;
+	int c;
+};
+
+struct prog_test_ref_kfunc {
+	int a;
+	int b;
+	struct prog_test_member memb;
+	struct prog_test_ref_kfunc *next;
+	refcount_t cnt;
+};
+
+struct bpf_raw_tp_test_run_info {
+	struct bpf_prog *prog;
+	void *ctx;
+	u32 retval;
+};
+
+struct bpf_dummy_ops_test_args {
+	u64 args[12];
+	struct bpf_dummy_ops_state state;
+};
+
+typedef int (*dummy_ops_test_ret_fn)(struct bpf_dummy_ops_state *, ...);
+
+enum ethtool_flags {
+	ETH_FLAG_TXVLAN = 128,
+	ETH_FLAG_RXVLAN = 256,
+	ETH_FLAG_LRO = 32768,
+	ETH_FLAG_NTUPLE = 134217728,
+	ETH_FLAG_RXHASH = 268435456,
+};
+
+enum ethtool_sfeatures_retval_bits {
+	ETHTOOL_F_UNSUPPORTED__BIT = 0,
+	ETHTOOL_F_WISH__BIT = 1,
+	ETHTOOL_F_COMPAT__BIT = 2,
+};
+
+enum tunable_id {
+	ETHTOOL_ID_UNSPEC = 0,
+	ETHTOOL_RX_COPYBREAK = 1,
+	ETHTOOL_TX_COPYBREAK = 2,
+	ETHTOOL_PFC_PREVENTION_TOUT = 3,
+	ETHTOOL_TX_COPYBREAK_BUF_SIZE = 4,
+	__ETHTOOL_TUNABLE_COUNT = 5,
+};
+
+enum tunable_type_id {
+	ETHTOOL_TUNABLE_UNSPEC = 0,
+	ETHTOOL_TUNABLE_U8 = 1,
+	ETHTOOL_TUNABLE_U16 = 2,
+	ETHTOOL_TUNABLE_U32 = 3,
+	ETHTOOL_TUNABLE_U64 = 4,
+	ETHTOOL_TUNABLE_STRING = 5,
+	ETHTOOL_TUNABLE_S8 = 6,
+	ETHTOOL_TUNABLE_S16 = 7,
+	ETHTOOL_TUNABLE_S32 = 8,
+	ETHTOOL_TUNABLE_S64 = 9,
+};
+
+enum phy_tunable_id {
+	ETHTOOL_PHY_ID_UNSPEC = 0,
+	ETHTOOL_PHY_DOWNSHIFT = 1,
+	ETHTOOL_PHY_FAST_LINK_DOWN = 2,
+	ETHTOOL_PHY_EDPD = 3,
+	__ETHTOOL_PHY_TUNABLE_COUNT = 4,
+};
+
+enum ethtool_fec_config_bits {
+	ETHTOOL_FEC_NONE_BIT = 0,
+	ETHTOOL_FEC_AUTO_BIT = 1,
+	ETHTOOL_FEC_OFF_BIT = 2,
+	ETHTOOL_FEC_RS_BIT = 3,
+	ETHTOOL_FEC_BASER_BIT = 4,
+	ETHTOOL_FEC_LLRS_BIT = 5,
+};
+
+struct ethtool_rx_flow_key {
+	struct flow_dissector_key_basic basic;
+	union {
+		struct flow_dissector_key_ipv4_addrs ipv4;
+		struct flow_dissector_key_ipv6_addrs ipv6;
+	};
+	struct flow_dissector_key_ports tp;
+	struct flow_dissector_key_ip ip;
+	struct flow_dissector_key_vlan vlan;
+	struct flow_dissector_key_eth_addrs eth_addrs;
+};
+
+struct ethtool_rx_flow_match {
+	struct flow_dissector dissector;
+	struct ethtool_rx_flow_key key;
+	struct ethtool_rx_flow_key mask;
+};
+
+struct ethtool_devlink_compat {
+	struct devlink *devlink;
+	union {
+		struct ethtool_flash efl;
+		struct ethtool_drvinfo info;
+	};
+};
+
+struct ethtool_value {
+	__u32 cmd;
+	__u32 data;
+};
+
+struct ethtool_rx_flow_rule {
+	struct flow_rule *rule;
+	unsigned long priv[0];
+};
+
+struct ethtool_cmd {
+	__u32 cmd;
+	__u32 supported;
+	__u32 advertising;
+	__u16 speed;
+	__u8 duplex;
+	__u8 port;
+	__u8 phy_address;
+	__u8 transceiver;
+	__u8 autoneg;
+	__u8 mdio_support;
+	__u32 maxtxpkt;
+	__u32 maxrxpkt;
+	__u16 speed_hi;
+	__u8 eth_tp_mdix;
+	__u8 eth_tp_mdix_ctrl;
+	__u32 lp_advertising;
+	__u32 reserved[2];
+};
+
+struct ethtool_link_usettings {
+	struct ethtool_link_settings base;
+	struct {
+		__u32 supported[4];
+		__u32 advertising[4];
+		__u32 lp_advertising[4];
+	} link_modes;
+};
+
+struct compat_ethtool_rx_flow_spec {
+	u32 flow_type;
+	union ethtool_flow_union h_u;
+	struct ethtool_flow_ext h_ext;
+	union ethtool_flow_union m_u;
+	struct ethtool_flow_ext m_ext;
+	compat_u64 ring_cookie;
+	u32 location;
+} __attribute__((packed));
+
+struct compat_ethtool_rxnfc {
+	u32 cmd;
+	u32 flow_type;
+	compat_u64 data;
+	struct compat_ethtool_rx_flow_spec fs;
+	u32 rule_cnt;
+	u32 rule_locs[0];
+} __attribute__((packed));
+
+struct ethtool_rx_flow_spec_input {
+	const struct ethtool_rx_flow_spec *fs;
+	u32 rss_ctx;
+};
+
+struct ethtool_gstrings {
+	__u32 cmd;
+	__u32 string_set;
+	__u32 len;
+	__u8 data[0];
+};
+
+struct ethtool_perm_addr {
+	__u32 cmd;
+	__u32 size;
+	__u8 data[0];
+};
+
+struct ethtool_sset_info {
+	__u32 cmd;
+	__u32 reserved;
+	__u64 sset_mask;
+	__u32 data[0];
+};
+
+struct ethtool_rxfh {
+	__u32 cmd;
+	__u32 rss_context;
+	__u32 indir_size;
+	__u32 key_size;
+	__u8 hfunc;
+	__u8 rsvd8[3];
+	__u32 rsvd32;
+	__u32 rss_config[0];
+};
+
+struct ethtool_get_features_block {
+	__u32 available;
+	__u32 requested;
+	__u32 active;
+	__u32 never_changed;
+};
+
+struct ethtool_gfeatures {
+	__u32 cmd;
+	__u32 size;
+	struct ethtool_get_features_block features[0];
+};
+
+struct ethtool_set_features_block {
+	__u32 valid;
+	__u32 requested;
+};
+
+struct ethtool_sfeatures {
+	__u32 cmd;
+	__u32 size;
+	struct ethtool_set_features_block features[0];
+};
+
+struct ethtool_per_queue_op {
+	__u32 cmd;
+	__u32 sub_command;
+	__u32 queue_mask[128];
+	char data[0];
+};
+
+struct link_mode_info {
+	int speed;
+	u8 lanes;
+	u8 duplex;
+};
+
+typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);
+
+struct ethnl_req_info;
+
+struct ethnl_reply_data;
+
+struct ethnl_request_ops {
+	u8 request_cmd;
+	u8 reply_cmd;
+	u16 hdr_attr;
+	unsigned int req_info_size;
+	unsigned int reply_data_size;
+	bool allow_nodev_do;
+	u8 set_ntf_cmd;
+	int (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *);
+	int (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, const struct genl_info *);
+	int (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	int (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *);
+	void (*cleanup_data)(struct ethnl_reply_data *);
+	int (*set_validate)(struct ethnl_req_info *, struct genl_info *);
+	int (*set)(struct ethnl_req_info *, struct genl_info *);
+};
+
+struct ethnl_req_info {
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	u32 flags;
+};
+
+struct ethnl_reply_data {
+	struct net_device *dev;
+};
+
+enum {
+	ETHTOOL_A_HEADER_UNSPEC = 0,
+	ETHTOOL_A_HEADER_DEV_INDEX = 1,
+	ETHTOOL_A_HEADER_DEV_NAME = 2,
+	ETHTOOL_A_HEADER_FLAGS = 3,
+	__ETHTOOL_A_HEADER_CNT = 4,
+	ETHTOOL_A_HEADER_MAX = 3,
+};
+
+enum ethtool_multicast_groups {
+	ETHNL_MCGRP_MONITOR = 0,
+};
+
+struct ethnl_dump_ctx {
+	const struct ethnl_request_ops *ops;
+	struct ethnl_req_info *req_info;
+	struct ethnl_reply_data *reply_data;
+	unsigned long pos_ifindex;
+};
+
+enum {
+	ETHTOOL_A_BITSET_UNSPEC = 0,
+	ETHTOOL_A_BITSET_NOMASK = 1,
+	ETHTOOL_A_BITSET_SIZE = 2,
+	ETHTOOL_A_BITSET_BITS = 3,
+	ETHTOOL_A_BITSET_VALUE = 4,
+	ETHTOOL_A_BITSET_MASK = 5,
+	__ETHTOOL_A_BITSET_CNT = 6,
+	ETHTOOL_A_BITSET_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_BITSET_BITS_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BITS_BIT = 1,
+	__ETHTOOL_A_BITSET_BITS_CNT = 2,
+	ETHTOOL_A_BITSET_BITS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_BITSET_BIT_UNSPEC = 0,
+	ETHTOOL_A_BITSET_BIT_INDEX = 1,
+	ETHTOOL_A_BITSET_BIT_NAME = 2,
+	ETHTOOL_A_BITSET_BIT_VALUE = 3,
+	__ETHTOOL_A_BITSET_BIT_CNT = 4,
+	ETHTOOL_A_BITSET_BIT_MAX = 3,
+};
+
+typedef const char (* const ethnl_string_array_t)[32];
+
+struct strset_info {
+	bool per_dev;
+	bool free_strings;
+	unsigned int count;
+	const char (*strings)[32];
+};
+
+enum {
+	ETHTOOL_A_STRSET_UNSPEC = 0,
+	ETHTOOL_A_STRSET_HEADER = 1,
+	ETHTOOL_A_STRSET_STRINGSETS = 2,
+	ETHTOOL_A_STRSET_COUNTS_ONLY = 3,
+	__ETHTOOL_A_STRSET_CNT = 4,
+	ETHTOOL_A_STRSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STRINGSETS_UNSPEC = 0,
+	ETHTOOL_A_STRINGSETS_STRINGSET = 1,
+	__ETHTOOL_A_STRINGSETS_CNT = 2,
+	ETHTOOL_A_STRINGSETS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_STRINGSET_UNSPEC = 0,
+	ETHTOOL_A_STRINGSET_ID = 1,
+	ETHTOOL_A_STRINGSET_COUNT = 2,
+	ETHTOOL_A_STRINGSET_STRINGS = 3,
+	__ETHTOOL_A_STRINGSET_CNT = 4,
+	ETHTOOL_A_STRINGSET_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_STRINGS_UNSPEC = 0,
+	ETHTOOL_A_STRINGS_STRING = 1,
+	__ETHTOOL_A_STRINGS_CNT = 2,
+	ETHTOOL_A_STRINGS_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_STRING_UNSPEC = 0,
+	ETHTOOL_A_STRING_INDEX = 1,
+	ETHTOOL_A_STRING_VALUE = 2,
+	__ETHTOOL_A_STRING_CNT = 3,
+	ETHTOOL_A_STRING_MAX = 2,
+};
+
+struct strset_req_info {
+	struct ethnl_req_info base;
+	u32 req_ids;
+	bool counts_only;
+};
+
+struct strset_reply_data {
+	struct ethnl_reply_data base;
+	struct strset_info sets[21];
+};
+
+enum {
+	ETHTOOL_A_LINKINFO_UNSPEC = 0,
+	ETHTOOL_A_LINKINFO_HEADER = 1,
+	ETHTOOL_A_LINKINFO_PORT = 2,
+	ETHTOOL_A_LINKINFO_PHYADDR = 3,
+	ETHTOOL_A_LINKINFO_TP_MDIX = 4,
+	ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5,
+	ETHTOOL_A_LINKINFO_TRANSCEIVER = 6,
+	__ETHTOOL_A_LINKINFO_CNT = 7,
+	ETHTOOL_A_LINKINFO_MAX = 6,
+};
+
+struct linkinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_link_ksettings ksettings;
+	struct ethtool_link_settings *lsettings;
+};
+
+enum {
+	ETHTOOL_A_LINKMODES_UNSPEC = 0,
+	ETHTOOL_A_LINKMODES_HEADER = 1,
+	ETHTOOL_A_LINKMODES_AUTONEG = 2,
+	ETHTOOL_A_LINKMODES_OURS = 3,
+	ETHTOOL_A_LINKMODES_PEER = 4,
+	ETHTOOL_A_LINKMODES_SPEED = 5,
+	ETHTOOL_A_LINKMODES_DUPLEX = 6,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,
+	ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,
+	ETHTOOL_A_LINKMODES_LANES = 9,
+	ETHTOOL_A_LINKMODES_RATE_MATCHING = 10,
+	__ETHTOOL_A_LINKMODES_CNT = 11,
+	ETHTOOL_A_LINKMODES_MAX = 10,
+};
+
+struct linkmodes_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_link_ksettings ksettings;
+	struct ethtool_link_settings *lsettings;
+	bool peer_empty;
+};
+
+enum {
+	ETHTOOL_A_RSS_UNSPEC = 0,
+	ETHTOOL_A_RSS_HEADER = 1,
+	ETHTOOL_A_RSS_CONTEXT = 2,
+	ETHTOOL_A_RSS_HFUNC = 3,
+	ETHTOOL_A_RSS_INDIR = 4,
+	ETHTOOL_A_RSS_HKEY = 5,
+	__ETHTOOL_A_RSS_CNT = 6,
+	ETHTOOL_A_RSS_MAX = 5,
+};
+
+struct rss_req_info {
+	struct ethnl_req_info base;
+	u32 rss_context;
+};
+
+struct rss_reply_data {
+	struct ethnl_reply_data base;
+	u32 indir_size;
+	u32 hkey_size;
+	u32 hfunc;
+	u32 *indir_table;
+	u8 *hkey;
+};
+
+enum {
+	ETHTOOL_A_LINKSTATE_UNSPEC = 0,
+	ETHTOOL_A_LINKSTATE_HEADER = 1,
+	ETHTOOL_A_LINKSTATE_LINK = 2,
+	ETHTOOL_A_LINKSTATE_SQI = 3,
+	ETHTOOL_A_LINKSTATE_SQI_MAX = 4,
+	ETHTOOL_A_LINKSTATE_EXT_STATE = 5,
+	ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6,
+	ETHTOOL_A_LINKSTATE_EXT_DOWN_CNT = 7,
+	__ETHTOOL_A_LINKSTATE_CNT = 8,
+	ETHTOOL_A_LINKSTATE_MAX = 7,
+};
+
+struct linkstate_reply_data {
+	struct ethnl_reply_data base;
+	int link;
+	int sqi;
+	int sqi_max;
+	struct ethtool_link_ext_stats link_stats;
+	bool link_ext_state_provided;
+	struct ethtool_link_ext_state_info ethtool_link_ext_state_info;
+};
+
+enum {
+	ETHTOOL_A_DEBUG_UNSPEC = 0,
+	ETHTOOL_A_DEBUG_HEADER = 1,
+	ETHTOOL_A_DEBUG_MSGMASK = 2,
+	__ETHTOOL_A_DEBUG_CNT = 3,
+	ETHTOOL_A_DEBUG_MAX = 2,
+};
+
+struct debug_reply_data {
+	struct ethnl_reply_data base;
+	u32 msg_mask;
+};
+
+enum {
+	ETHTOOL_A_WOL_UNSPEC = 0,
+	ETHTOOL_A_WOL_HEADER = 1,
+	ETHTOOL_A_WOL_MODES = 2,
+	ETHTOOL_A_WOL_SOPASS = 3,
+	__ETHTOOL_A_WOL_CNT = 4,
+	ETHTOOL_A_WOL_MAX = 3,
+};
+
+struct wol_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_wolinfo wol;
+	bool show_sopass;
+};
+
+enum {
+	ETHTOOL_A_FEATURES_UNSPEC = 0,
+	ETHTOOL_A_FEATURES_HEADER = 1,
+	ETHTOOL_A_FEATURES_HW = 2,
+	ETHTOOL_A_FEATURES_WANTED = 3,
+	ETHTOOL_A_FEATURES_ACTIVE = 4,
+	ETHTOOL_A_FEATURES_NOCHANGE = 5,
+	__ETHTOOL_A_FEATURES_CNT = 6,
+	ETHTOOL_A_FEATURES_MAX = 5,
+};
+
+struct features_reply_data {
+	struct ethnl_reply_data base;
+	u32 hw[2];
+	u32 wanted[2];
+	u32 active[2];
+	u32 nochange[2];
+	u32 all[2];
+};
+
+enum {
+	ETHTOOL_A_PRIVFLAGS_UNSPEC = 0,
+	ETHTOOL_A_PRIVFLAGS_HEADER = 1,
+	ETHTOOL_A_PRIVFLAGS_FLAGS = 2,
+	__ETHTOOL_A_PRIVFLAGS_CNT = 3,
+	ETHTOOL_A_PRIVFLAGS_MAX = 2,
+};
+
+struct privflags_reply_data {
+	struct ethnl_reply_data base;
+	const char (*priv_flag_names)[32];
+	unsigned int n_priv_flags;
+	u32 priv_flags;
+};
+
+enum {
+	ETHTOOL_TCP_DATA_SPLIT_UNKNOWN = 0,
+	ETHTOOL_TCP_DATA_SPLIT_DISABLED = 1,
+	ETHTOOL_TCP_DATA_SPLIT_ENABLED = 2,
+};
+
+enum {
+	ETHTOOL_A_RINGS_UNSPEC = 0,
+	ETHTOOL_A_RINGS_HEADER = 1,
+	ETHTOOL_A_RINGS_RX_MAX = 2,
+	ETHTOOL_A_RINGS_RX_MINI_MAX = 3,
+	ETHTOOL_A_RINGS_RX_JUMBO_MAX = 4,
+	ETHTOOL_A_RINGS_TX_MAX = 5,
+	ETHTOOL_A_RINGS_RX = 6,
+	ETHTOOL_A_RINGS_RX_MINI = 7,
+	ETHTOOL_A_RINGS_RX_JUMBO = 8,
+	ETHTOOL_A_RINGS_TX = 9,
+	ETHTOOL_A_RINGS_RX_BUF_LEN = 10,
+	ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 11,
+	ETHTOOL_A_RINGS_CQE_SIZE = 12,
+	ETHTOOL_A_RINGS_TX_PUSH = 13,
+	ETHTOOL_A_RINGS_RX_PUSH = 14,
+	ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN = 15,
+	ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX = 16,
+	__ETHTOOL_A_RINGS_CNT = 17,
+	ETHTOOL_A_RINGS_MAX = 16,
+};
+
+enum ethtool_supported_ring_param {
+	ETHTOOL_RING_USE_RX_BUF_LEN = 1,
+	ETHTOOL_RING_USE_CQE_SIZE = 2,
+	ETHTOOL_RING_USE_TX_PUSH = 4,
+	ETHTOOL_RING_USE_RX_PUSH = 8,
+	ETHTOOL_RING_USE_TX_PUSH_BUF_LEN = 16,
+};
+
+struct rings_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_ringparam ringparam;
+	struct kernel_ethtool_ringparam kernel_ringparam;
+	u32 supported_ring_params;
+};
+
+enum {
+	ETHTOOL_A_CHANNELS_UNSPEC = 0,
+	ETHTOOL_A_CHANNELS_HEADER = 1,
+	ETHTOOL_A_CHANNELS_RX_MAX = 2,
+	ETHTOOL_A_CHANNELS_TX_MAX = 3,
+	ETHTOOL_A_CHANNELS_OTHER_MAX = 4,
+	ETHTOOL_A_CHANNELS_COMBINED_MAX = 5,
+	ETHTOOL_A_CHANNELS_RX_COUNT = 6,
+	ETHTOOL_A_CHANNELS_TX_COUNT = 7,
+	ETHTOOL_A_CHANNELS_OTHER_COUNT = 8,
+	ETHTOOL_A_CHANNELS_COMBINED_COUNT = 9,
+	__ETHTOOL_A_CHANNELS_CNT = 10,
+	ETHTOOL_A_CHANNELS_MAX = 9,
+};
+
+struct channels_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_channels channels;
+};
+
+enum {
+	ETHTOOL_A_COALESCE_UNSPEC = 0,
+	ETHTOOL_A_COALESCE_HEADER = 1,
+	ETHTOOL_A_COALESCE_RX_USECS = 2,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3,
+	ETHTOOL_A_COALESCE_RX_USECS_IRQ = 4,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5,
+	ETHTOOL_A_COALESCE_TX_USECS = 6,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7,
+	ETHTOOL_A_COALESCE_TX_USECS_IRQ = 8,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9,
+	ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11,
+	ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12,
+	ETHTOOL_A_COALESCE_PKT_RATE_LOW = 13,
+	ETHTOOL_A_COALESCE_RX_USECS_LOW = 14,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15,
+	ETHTOOL_A_COALESCE_TX_USECS_LOW = 16,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17,
+	ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18,
+	ETHTOOL_A_COALESCE_RX_USECS_HIGH = 19,
+	ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20,
+	ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,
+	ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,
+	ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 24,
+	ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 25,
+	ETHTOOL_A_COALESCE_TX_AGGR_MAX_BYTES = 26,
+	ETHTOOL_A_COALESCE_TX_AGGR_MAX_FRAMES = 27,
+	ETHTOOL_A_COALESCE_TX_AGGR_TIME_USECS = 28,
+	__ETHTOOL_A_COALESCE_CNT = 29,
+	ETHTOOL_A_COALESCE_MAX = 28,
+};
+
+struct coalesce_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_coalesce coalesce;
+	struct kernel_ethtool_coalesce kernel_coalesce;
+	u32 supported_params;
+};
+
+enum {
+	ETHTOOL_A_PAUSE_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_HEADER = 1,
+	ETHTOOL_A_PAUSE_AUTONEG = 2,
+	ETHTOOL_A_PAUSE_RX = 3,
+	ETHTOOL_A_PAUSE_TX = 4,
+	ETHTOOL_A_PAUSE_STATS = 5,
+	ETHTOOL_A_PAUSE_STATS_SRC = 6,
+	__ETHTOOL_A_PAUSE_CNT = 7,
+	ETHTOOL_A_PAUSE_MAX = 6,
+};
+
+enum {
+	ETHTOOL_A_PAUSE_STAT_UNSPEC = 0,
+	ETHTOOL_A_PAUSE_STAT_PAD = 1,
+	ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2,
+	ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3,
+	__ETHTOOL_A_PAUSE_STAT_CNT = 4,
+	ETHTOOL_A_PAUSE_STAT_MAX = 3,
+};
+
+struct pause_req_info {
+	struct ethnl_req_info base;
+	enum ethtool_mac_stats_src src;
+};
+
+struct pause_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_pauseparam pauseparam;
+	struct ethtool_pause_stats pausestat;
+};
+
+enum {
+	ETHTOOL_A_EEE_UNSPEC = 0,
+	ETHTOOL_A_EEE_HEADER = 1,
+	ETHTOOL_A_EEE_MODES_OURS = 2,
+	ETHTOOL_A_EEE_MODES_PEER = 3,
+	ETHTOOL_A_EEE_ACTIVE = 4,
+	ETHTOOL_A_EEE_ENABLED = 5,
+	ETHTOOL_A_EEE_TX_LPI_ENABLED = 6,
+	ETHTOOL_A_EEE_TX_LPI_TIMER = 7,
+	__ETHTOOL_A_EEE_CNT = 8,
+	ETHTOOL_A_EEE_MAX = 7,
+};
+
+struct eee_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_eee eee;
+};
+
+enum {
+	ETHTOOL_A_TSINFO_UNSPEC = 0,
+	ETHTOOL_A_TSINFO_HEADER = 1,
+	ETHTOOL_A_TSINFO_TIMESTAMPING = 2,
+	ETHTOOL_A_TSINFO_TX_TYPES = 3,
+	ETHTOOL_A_TSINFO_RX_FILTERS = 4,
+	ETHTOOL_A_TSINFO_PHC_INDEX = 5,
+	__ETHTOOL_A_TSINFO_CNT = 6,
+	ETHTOOL_A_TSINFO_MAX = 5,
+};
+
+struct tsinfo_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_ts_info ts_info;
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_HEADER = 1,
+	__ETHTOOL_A_CABLE_TEST_CNT = 2,
+	ETHTOOL_A_CABLE_TEST_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_NTF_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS = 2,
+	ETHTOOL_A_CABLE_TEST_NTF_NEST = 3,
+	__ETHTOOL_A_CABLE_TEST_NTF_CNT = 4,
+	ETHTOOL_A_CABLE_TEST_NTF_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 1,
+	ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_NEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_NEST_RESULT = 1,
+	ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 2,
+	__ETHTOOL_A_CABLE_NEST_CNT = 3,
+	ETHTOOL_A_CABLE_NEST_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_RESULT_UNSPEC = 0,
+	ETHTOOL_A_CABLE_RESULT_PAIR = 1,
+	ETHTOOL_A_CABLE_RESULT_CODE = 2,
+	__ETHTOOL_A_CABLE_RESULT_CNT = 3,
+	ETHTOOL_A_CABLE_RESULT_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 1,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 2,
+	__ETHTOOL_A_CABLE_FAULT_LENGTH_CNT = 3,
+	ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_HEADER = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG = 2,
+	__ETHTOOL_A_CABLE_TEST_TDR_CNT = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TDR_NEST_STEP = 1,
+	ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 2,
+	ETHTOOL_A_CABLE_TDR_NEST_PULSE = 3,
+	__ETHTOOL_A_CABLE_TDR_NEST_CNT = 4,
+	ETHTOOL_A_CABLE_TDR_NEST_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 1,
+	ETHTOOL_A_CABLE_AMPLITUDE_mV = 2,
+	__ETHTOOL_A_CABLE_AMPLITUDE_CNT = 3,
+	ETHTOOL_A_CABLE_AMPLITUDE_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_CABLE_PULSE_UNSPEC = 0,
+	ETHTOOL_A_CABLE_PULSE_mV = 1,
+	__ETHTOOL_A_CABLE_PULSE_CNT = 2,
+	ETHTOOL_A_CABLE_PULSE_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_CABLE_STEP_UNSPEC = 0,
+	ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 1,
+	ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 2,
+	ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 3,
+	__ETHTOOL_A_CABLE_STEP_CNT = 4,
+	ETHTOOL_A_CABLE_STEP_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 1,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 2,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 3,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 4,
+	__ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT = 5,
+	ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 4,
+};
+
+enum {
+	ETHTOOL_A_CABLE_PAIR_A = 0,
+	ETHTOOL_A_CABLE_PAIR_B = 1,
+	ETHTOOL_A_CABLE_PAIR_C = 2,
+	ETHTOOL_A_CABLE_PAIR_D = 3,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_INFO_HEADER = 1,
+	ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2,
+	__ETHTOOL_A_TUNNEL_INFO_CNT = 3,
+	ETHTOOL_A_TUNNEL_INFO_MAX = 2,
+};
+
+enum udp_tunnel_nic_info_flags {
+	UDP_TUNNEL_NIC_INFO_MAY_SLEEP = 1,
+	UDP_TUNNEL_NIC_INFO_OPEN_ONLY = 2,
+	UDP_TUNNEL_NIC_INFO_IPV4_ONLY = 4,
+	UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN = 8,
+};
+
+enum {
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0,
+	ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1,
+	ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2,
+	__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_TABLE = 1,
+	__ETHTOOL_A_TUNNEL_UDP_CNT = 2,
+	ETHTOOL_A_TUNNEL_UDP_MAX = 1,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 1,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 2,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 3,
+	__ETHTOOL_A_TUNNEL_UDP_TABLE_CNT = 4,
+	ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 3,
+};
+
+enum {
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 1,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 2,
+	__ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT = 3,
+	ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 2,
+};
+
+struct ethnl_tunnel_info_dump_ctx {
+	struct ethnl_req_info req_info;
+	unsigned long ifindex;
+};
+
+enum {
+	ETHTOOL_A_FEC_UNSPEC = 0,
+	ETHTOOL_A_FEC_HEADER = 1,
+	ETHTOOL_A_FEC_MODES = 2,
+	ETHTOOL_A_FEC_AUTO = 3,
+	ETHTOOL_A_FEC_ACTIVE = 4,
+	ETHTOOL_A_FEC_STATS = 5,
+	__ETHTOOL_A_FEC_CNT = 6,
+	ETHTOOL_A_FEC_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_FEC_STAT_UNSPEC = 0,
+	ETHTOOL_A_FEC_STAT_PAD = 1,
+	ETHTOOL_A_FEC_STAT_CORRECTED = 2,
+	ETHTOOL_A_FEC_STAT_UNCORR = 3,
+	ETHTOOL_A_FEC_STAT_CORR_BITS = 4,
+	__ETHTOOL_A_FEC_STAT_CNT = 5,
+	ETHTOOL_A_FEC_STAT_MAX = 4,
+};
+
+struct fec_stat_grp {
+	u64 stats[9];
+	u8 cnt;
+};
+
+struct fec_reply_data {
+	struct ethnl_reply_data base;
+	unsigned long fec_link_modes[2];
+	u32 active_fec;
+	u8 fec_auto;
+	struct fec_stat_grp corr;
+	struct fec_stat_grp uncorr;
+	struct fec_stat_grp corr_bits;
+};
+
+enum {
+	ETHTOOL_A_MODULE_EEPROM_UNSPEC = 0,
+	ETHTOOL_A_MODULE_EEPROM_HEADER = 1,
+	ETHTOOL_A_MODULE_EEPROM_OFFSET = 2,
+	ETHTOOL_A_MODULE_EEPROM_LENGTH = 3,
+	ETHTOOL_A_MODULE_EEPROM_PAGE = 4,
+	ETHTOOL_A_MODULE_EEPROM_BANK = 5,
+	ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS = 6,
+	ETHTOOL_A_MODULE_EEPROM_DATA = 7,
+	__ETHTOOL_A_MODULE_EEPROM_CNT = 8,
+	ETHTOOL_A_MODULE_EEPROM_MAX = 7,
+};
+
+struct eeprom_req_info {
+	struct ethnl_req_info base;
+	u32 offset;
+	u32 length;
+	u8 page;
+	u8 bank;
+	u8 i2c_address;
+};
+
+struct eeprom_reply_data {
+	struct ethnl_reply_data base;
+	u32 length;
+	u8 *data;
+};
+
+enum {
+	ETHTOOL_STATS_ETH_PHY = 0,
+	ETHTOOL_STATS_ETH_MAC = 1,
+	ETHTOOL_STATS_ETH_CTRL = 2,
+	ETHTOOL_STATS_RMON = 3,
+	__ETHTOOL_STATS_CNT = 4,
+};
+
+enum {
+	ETHTOOL_A_STATS_UNSPEC = 0,
+	ETHTOOL_A_STATS_PAD = 1,
+	ETHTOOL_A_STATS_HEADER = 2,
+	ETHTOOL_A_STATS_GROUPS = 3,
+	ETHTOOL_A_STATS_GRP = 4,
+	ETHTOOL_A_STATS_SRC = 5,
+	__ETHTOOL_A_STATS_CNT = 6,
+	ETHTOOL_A_STATS_MAX = 5,
+};
+
+enum {
+	ETHTOOL_A_STATS_GRP_UNSPEC = 0,
+	ETHTOOL_A_STATS_GRP_PAD = 1,
+	ETHTOOL_A_STATS_GRP_ID = 2,
+	ETHTOOL_A_STATS_GRP_SS_ID = 3,
+	ETHTOOL_A_STATS_GRP_STAT = 4,
+	ETHTOOL_A_STATS_GRP_HIST_RX = 5,
+	ETHTOOL_A_STATS_GRP_HIST_TX = 6,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_LOW = 7,
+	ETHTOOL_A_STATS_GRP_HIST_BKT_HI = 8,
+	ETHTOOL_A_STATS_GRP_HIST_VAL = 9,
+	__ETHTOOL_A_STATS_GRP_CNT = 10,
+	ETHTOOL_A_STATS_GRP_MAX = 9,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_PHY_5_SYM_ERR = 0,
+	__ETHTOOL_A_STATS_ETH_PHY_CNT = 1,
+	ETHTOOL_A_STATS_ETH_PHY_MAX = 0,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_MAC_2_TX_PKT = 0,
+	ETHTOOL_A_STATS_ETH_MAC_3_SINGLE_COL = 1,
+	ETHTOOL_A_STATS_ETH_MAC_4_MULTI_COL = 2,
+	ETHTOOL_A_STATS_ETH_MAC_5_RX_PKT = 3,
+	ETHTOOL_A_STATS_ETH_MAC_6_FCS_ERR = 4,
+	ETHTOOL_A_STATS_ETH_MAC_7_ALIGN_ERR = 5,
+	ETHTOOL_A_STATS_ETH_MAC_8_TX_BYTES = 6,
+	ETHTOOL_A_STATS_ETH_MAC_9_TX_DEFER = 7,
+	ETHTOOL_A_STATS_ETH_MAC_10_LATE_COL = 8,
+	ETHTOOL_A_STATS_ETH_MAC_11_XS_COL = 9,
+	ETHTOOL_A_STATS_ETH_MAC_12_TX_INT_ERR = 10,
+	ETHTOOL_A_STATS_ETH_MAC_13_CS_ERR = 11,
+	ETHTOOL_A_STATS_ETH_MAC_14_RX_BYTES = 12,
+	ETHTOOL_A_STATS_ETH_MAC_15_RX_INT_ERR = 13,
+	ETHTOOL_A_STATS_ETH_MAC_18_TX_MCAST = 14,
+	ETHTOOL_A_STATS_ETH_MAC_19_TX_BCAST = 15,
+	ETHTOOL_A_STATS_ETH_MAC_20_XS_DEFER = 16,
+	ETHTOOL_A_STATS_ETH_MAC_21_RX_MCAST = 17,
+	ETHTOOL_A_STATS_ETH_MAC_22_RX_BCAST = 18,
+	ETHTOOL_A_STATS_ETH_MAC_23_IR_LEN_ERR = 19,
+	ETHTOOL_A_STATS_ETH_MAC_24_OOR_LEN = 20,
+	ETHTOOL_A_STATS_ETH_MAC_25_TOO_LONG_ERR = 21,
+	__ETHTOOL_A_STATS_ETH_MAC_CNT = 22,
+	ETHTOOL_A_STATS_ETH_MAC_MAX = 21,
+};
+
+enum {
+	ETHTOOL_A_STATS_ETH_CTRL_3_TX = 0,
+	ETHTOOL_A_STATS_ETH_CTRL_4_RX = 1,
+	ETHTOOL_A_STATS_ETH_CTRL_5_RX_UNSUP = 2,
+	__ETHTOOL_A_STATS_ETH_CTRL_CNT = 3,
+	ETHTOOL_A_STATS_ETH_CTRL_MAX = 2,
+};
+
+enum {
+	ETHTOOL_A_STATS_RMON_UNDERSIZE = 0,
+	ETHTOOL_A_STATS_RMON_OVERSIZE = 1,
+	ETHTOOL_A_STATS_RMON_FRAG = 2,
+	ETHTOOL_A_STATS_RMON_JABBER = 3,
+	__ETHTOOL_A_STATS_RMON_CNT = 4,
+	ETHTOOL_A_STATS_RMON_MAX = 3,
+};
+
+struct stats_req_info {
+	struct ethnl_req_info base;
+	unsigned long stat_mask[1];
+	enum ethtool_mac_stats_src src;
+};
+
+struct stats_reply_data {
+	struct ethnl_reply_data base;
+	union {
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		};
+		struct {
+			struct ethtool_eth_phy_stats phy_stats;
+			struct ethtool_eth_mac_stats mac_stats;
+			struct ethtool_eth_ctrl_stats ctrl_stats;
+			struct ethtool_rmon_stats rmon_stats;
+		} stats;
+	};
+	const struct ethtool_rmon_hist_range *rmon_ranges;
+};
+
+enum {
+	ETHTOOL_A_PHC_VCLOCKS_UNSPEC = 0,
+	ETHTOOL_A_PHC_VCLOCKS_HEADER = 1,
+	ETHTOOL_A_PHC_VCLOCKS_NUM = 2,
+	ETHTOOL_A_PHC_VCLOCKS_INDEX = 3,
+	__ETHTOOL_A_PHC_VCLOCKS_CNT = 4,
+	ETHTOOL_A_PHC_VCLOCKS_MAX = 3,
+};
+
+struct phc_vclocks_reply_data {
+	struct ethnl_reply_data base;
+	int num;
+	int *index;
+};
+
+enum {
+	ETHTOOL_A_MM_STAT_UNSPEC = 0,
+	ETHTOOL_A_MM_STAT_PAD = 1,
+	ETHTOOL_A_MM_STAT_REASSEMBLY_ERRORS = 2,
+	ETHTOOL_A_MM_STAT_SMD_ERRORS = 3,
+	ETHTOOL_A_MM_STAT_REASSEMBLY_OK = 4,
+	ETHTOOL_A_MM_STAT_RX_FRAG_COUNT = 5,
+	ETHTOOL_A_MM_STAT_TX_FRAG_COUNT = 6,
+	ETHTOOL_A_MM_STAT_HOLD_COUNT = 7,
+	__ETHTOOL_A_MM_STAT_CNT = 8,
+	ETHTOOL_A_MM_STAT_MAX = 7,
+};
+
+enum {
+	ETHTOOL_A_MM_UNSPEC = 0,
+	ETHTOOL_A_MM_HEADER = 1,
+	ETHTOOL_A_MM_PMAC_ENABLED = 2,
+	ETHTOOL_A_MM_TX_ENABLED = 3,
+	ETHTOOL_A_MM_TX_ACTIVE = 4,
+	ETHTOOL_A_MM_TX_MIN_FRAG_SIZE = 5,
+	ETHTOOL_A_MM_RX_MIN_FRAG_SIZE = 6,
+	ETHTOOL_A_MM_VERIFY_ENABLED = 7,
+	ETHTOOL_A_MM_VERIFY_STATUS = 8,
+	ETHTOOL_A_MM_VERIFY_TIME = 9,
+	ETHTOOL_A_MM_MAX_VERIFY_TIME = 10,
+	ETHTOOL_A_MM_STATS = 11,
+	__ETHTOOL_A_MM_CNT = 12,
+	ETHTOOL_A_MM_MAX = 11,
+};
+
+struct mm_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_mm_state state;
+	struct ethtool_mm_stats stats;
+};
+
+enum {
+	ETHTOOL_A_MODULE_UNSPEC = 0,
+	ETHTOOL_A_MODULE_HEADER = 1,
+	ETHTOOL_A_MODULE_POWER_MODE_POLICY = 2,
+	ETHTOOL_A_MODULE_POWER_MODE = 3,
+	__ETHTOOL_A_MODULE_CNT = 4,
+	ETHTOOL_A_MODULE_MAX = 3,
+};
+
+struct module_reply_data {
+	struct ethnl_reply_data base;
+	struct ethtool_module_power_mode_params power;
+};
+
+enum ethtool_podl_pse_admin_state {
+	ETHTOOL_PODL_PSE_ADMIN_STATE_UNKNOWN = 1,
+	ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED = 2,
+	ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED = 3,
+};
+
+enum ethtool_podl_pse_pw_d_status {
+	ETHTOOL_PODL_PSE_PW_D_STATUS_UNKNOWN = 1,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_DISABLED = 2,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_SEARCHING = 3,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_DELIVERING = 4,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_SLEEP = 5,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_IDLE = 6,
+	ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR = 7,
+};
+
+enum {
+	ETHTOOL_A_PSE_UNSPEC = 0,
+	ETHTOOL_A_PSE_HEADER = 1,
+	ETHTOOL_A_PODL_PSE_ADMIN_STATE = 2,
+	ETHTOOL_A_PODL_PSE_ADMIN_CONTROL = 3,
+	ETHTOOL_A_PODL_PSE_PW_D_STATUS = 4,
+	__ETHTOOL_A_PSE_CNT = 5,
+	ETHTOOL_A_PSE_MAX = 4,
+};
+
+struct pse_control_status {
+	enum ethtool_podl_pse_admin_state podl_admin_state;
+	enum ethtool_podl_pse_pw_d_status podl_pw_status;
+};
+
+struct pse_reply_data {
+	struct ethnl_reply_data base;
+	struct pse_control_status status;
+};
+
+struct pse_control_config {
+	enum ethtool_podl_pse_admin_state admin_cotrol;
+};
+
+enum {
+	ETHTOOL_A_PLCA_UNSPEC = 0,
+	ETHTOOL_A_PLCA_HEADER = 1,
+	ETHTOOL_A_PLCA_VERSION = 2,
+	ETHTOOL_A_PLCA_ENABLED = 3,
+	ETHTOOL_A_PLCA_STATUS = 4,
+	ETHTOOL_A_PLCA_NODE_CNT = 5,
+	ETHTOOL_A_PLCA_NODE_ID = 6,
+	ETHTOOL_A_PLCA_TO_TMR = 7,
+	ETHTOOL_A_PLCA_BURST_CNT = 8,
+	ETHTOOL_A_PLCA_BURST_TMR = 9,
+	__ETHTOOL_A_PLCA_CNT = 10,
+	ETHTOOL_A_PLCA_MAX = 9,
+};
+
+struct plca_reply_data {
+	struct ethnl_reply_data base;
+	struct phy_plca_cfg plca_cfg;
+	struct phy_plca_status plca_st;
+};
+
+struct nf_conntrack_zone {
+	u16 id;
+	u8 flags;
+	u8 dir;
+};
+
+struct nf_queue_entry;
+
+struct nf_ipv6_ops {
+	void (*route_input)(struct sk_buff *);
+	int (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	int (*reroute)(struct sk_buff *, const struct nf_queue_entry *);
+	u64 android_kabi_reserved1;
+};
+
+struct nf_queue_entry {
+	struct list_head list;
+	struct sk_buff *skb;
+	unsigned int id;
+	unsigned int hook_index;
+	struct nf_hook_state state;
+	u16 size;
+};
+
+struct nfnl_ct_hook {
+	size_t (*build_size)(const struct nf_conn *);
+	int (*build)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, u_int16_t, u_int16_t);
+	int (*parse)(const struct nlattr *, struct nf_conn *);
+	int (*attach_expect)(const struct nlattr *, struct nf_conn *, u32, u32);
+	void (*seq_adjust)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, s32);
+	u64 android_kabi_reserved1;
+};
+
+struct nf_ct_hook {
+	int (*update)(struct net *, struct sk_buff *);
+	void (*destroy)(struct nf_conntrack *);
+	bool (*get_tuple_skb)(struct nf_conntrack_tuple *, const struct sk_buff *);
+	void (*attach)(struct sk_buff *, const struct sk_buff *);
+	void (*set_closing)(struct nf_conntrack *);
+	int (*confirm)(struct sk_buff *);
+};
+
+struct nf_defrag_hook {
+	struct module *owner;
+	int (*enable)(struct net *);
+	void (*disable)(struct net *);
+};
+
+enum nf_nat_manip_type {
+	NF_NAT_MANIP_SRC = 0,
+	NF_NAT_MANIP_DST = 1,
+};
+
+struct nf_nat_hook {
+	int (*parse_nat_setup)(struct nf_conn *, enum nf_nat_manip_type, const struct nlattr *);
+	void (*decode_session)(struct sk_buff *, struct flowi *);
+	unsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn *, enum nf_nat_manip_type, enum ip_conntrack_dir);
+	void (*remove_nat_bysrc)(struct nf_conn *);
+	u64 android_kabi_reserved1;
+};
+
+struct nf_hook_entries_rcu_head {
+	struct callback_head head;
+	void *allocation;
+};
+
+struct nf_loginfo {
+	u_int8_t type;
+	union {
+		struct {
+			u_int32_t copy_len;
+			u_int16_t group;
+			u_int16_t qthreshold;
+			u_int16_t flags;
+		} ulog;
+		struct {
+			u_int8_t level;
+			u_int8_t logflags;
+		} log;
+	} u;
+};
+
+struct nf_log_buf {
+	unsigned int count;
+	char buf[1020];
+};
+
+struct nf_queue_handler {
+	int (*outfn)(struct nf_queue_entry *, unsigned int);
+	void (*nf_hook_drop)(struct net *);
+};
+
+struct ip_rt_info {
+	__be32 daddr;
+	__be32 saddr;
+	u_int8_t tos;
+	u_int32_t mark;
+};
+
+struct ip6_rt_info {
+	struct in6_addr daddr;
+	struct in6_addr saddr;
+	u_int32_t mark;
+};
+
+struct nf_sockopt_ops {
+	struct list_head list;
+	u_int8_t pf;
+	int set_optmin;
+	int set_optmax;
+	int (*set)(struct sock *, int, sockptr_t, unsigned int);
+	int get_optmin;
+	int get_optmax;
+	int (*get)(struct sock *, int, void __attribute__((btf_type_tag("user"))) *, int *);
+	struct module *owner;
+	u64 android_kabi_reserved1;
+};
+
+enum nf_ip_hook_priorities {
+	NF_IP_PRI_FIRST = -2147483648,
+	NF_IP_PRI_RAW_BEFORE_DEFRAG = -450,
+	NF_IP_PRI_CONNTRACK_DEFRAG = -400,
+	NF_IP_PRI_RAW = -300,
+	NF_IP_PRI_SELINUX_FIRST = -225,
+	NF_IP_PRI_CONNTRACK = -200,
+	NF_IP_PRI_MANGLE = -150,
+	NF_IP_PRI_NAT_DST = -100,
+	NF_IP_PRI_FILTER = 0,
+	NF_IP_PRI_SECURITY = 50,
+	NF_IP_PRI_NAT_SRC = 100,
+	NF_IP_PRI_SELINUX_LAST = 225,
+	NF_IP_PRI_CONNTRACK_HELPER = 300,
+	NF_IP_PRI_CONNTRACK_CONFIRM = 2147483647,
+	NF_IP_PRI_LAST = 2147483647,
+};
+
+struct bpf_nf_link {
+	struct bpf_link link;
+	struct nf_hook_ops hook_ops;
+	struct net *net;
+	u32 dead;
+	const struct nf_defrag_hook *defrag_hook;
+};
+
+enum nfnl_abort_action {
+	NFNL_ABORT_NONE = 0,
+	NFNL_ABORT_AUTOLOAD = 1,
+	NFNL_ABORT_VALIDATE = 2,
+};
+
+struct nfnl_callback;
+
+struct nfnetlink_subsystem {
+	const char *name;
+	__u8 subsys_id;
+	__u8 cb_count;
+	const struct nfnl_callback *cb;
+	struct module *owner;
+	int (*commit)(struct net *, struct sk_buff *);
+	int (*abort)(struct net *, struct sk_buff *, enum nfnl_abort_action);
+	bool (*valid_genid)(struct net *, u32);
+	u64 android_kabi_reserved1;
+};
+
+enum nfnl_callback_type {
+	NFNL_CB_UNSPEC = 0,
+	NFNL_CB_MUTEX = 1,
+	NFNL_CB_RCU = 2,
+	NFNL_CB_BATCH = 3,
+};
+
+struct nfnl_info;
+
+struct nfnl_callback {
+	int (*call)(struct sk_buff *, const struct nfnl_info *, const struct nlattr * const *);
+	const struct nla_policy *policy;
+	enum nfnl_callback_type type;
+	__u16 attr_count;
+	u64 android_kabi_reserved1;
+};
+
+struct nfgenmsg;
+
+struct nfnl_info {
+	struct net *net;
+	struct sock *sk;
+	const struct nlmsghdr *nlh;
+	const struct nfgenmsg *nfmsg;
+	struct netlink_ext_ack *extack;
+};
+
+struct nfgenmsg {
+	__u8 nfgen_family;
+	__u8 version;
+	__be16 res_id;
+};
+
+enum nfnl_batch_attributes {
+	NFNL_BATCH_UNSPEC = 0,
+	NFNL_BATCH_GENID = 1,
+	__NFNL_BATCH_MAX = 2,
+};
+
+enum {
+	NFNL_BATCH_FAILURE = 1,
+	NFNL_BATCH_DONE = 2,
+	NFNL_BATCH_REPLAY = 4,
+};
+
+enum nfnetlink_groups {
+	NFNLGRP_NONE = 0,
+	NFNLGRP_CONNTRACK_NEW = 1,
+	NFNLGRP_CONNTRACK_UPDATE = 2,
+	NFNLGRP_CONNTRACK_DESTROY = 3,
+	NFNLGRP_CONNTRACK_EXP_NEW = 4,
+	NFNLGRP_CONNTRACK_EXP_UPDATE = 5,
+	NFNLGRP_CONNTRACK_EXP_DESTROY = 6,
+	NFNLGRP_NFTABLES = 7,
+	NFNLGRP_ACCT_QUOTA = 8,
+	NFNLGRP_NFTRACE = 9,
+	__NFNLGRP_MAX = 10,
+};
+
+struct nfnl_err {
+	struct list_head head;
+	struct nlmsghdr *nlh;
+	int err;
+	struct netlink_ext_ack extack;
+};
+
+struct nfnl_net {
+	struct sock *nfnl;
+};
+
+enum nfqnl_attr_type {
+	NFQA_UNSPEC = 0,
+	NFQA_PACKET_HDR = 1,
+	NFQA_VERDICT_HDR = 2,
+	NFQA_MARK = 3,
+	NFQA_TIMESTAMP = 4,
+	NFQA_IFINDEX_INDEV = 5,
+	NFQA_IFINDEX_OUTDEV = 6,
+	NFQA_IFINDEX_PHYSINDEV = 7,
+	NFQA_IFINDEX_PHYSOUTDEV = 8,
+	NFQA_HWADDR = 9,
+	NFQA_PAYLOAD = 10,
+	NFQA_CT = 11,
+	NFQA_CT_INFO = 12,
+	NFQA_CAP_LEN = 13,
+	NFQA_SKB_INFO = 14,
+	NFQA_EXP = 15,
+	NFQA_UID = 16,
+	NFQA_GID = 17,
+	NFQA_SECCTX = 18,
+	NFQA_VLAN = 19,
+	NFQA_L2HDR = 20,
+	NFQA_PRIORITY = 21,
+	NFQA_CGROUP_CLASSID = 22,
+	__NFQA_MAX = 23,
+};
+
+enum nfqnl_vlan_attr {
+	NFQA_VLAN_UNSPEC = 0,
+	NFQA_VLAN_PROTO = 1,
+	NFQA_VLAN_TCI = 2,
+	__NFQA_VLAN_MAX = 3,
+};
+
+enum nfqnl_attr_config {
+	NFQA_CFG_UNSPEC = 0,
+	NFQA_CFG_CMD = 1,
+	NFQA_CFG_PARAMS = 2,
+	NFQA_CFG_QUEUE_MAXLEN = 3,
+	NFQA_CFG_MASK = 4,
+	NFQA_CFG_FLAGS = 5,
+	__NFQA_CFG_MAX = 6,
+};
+
+enum nfqnl_msg_config_cmds {
+	NFQNL_CFG_CMD_NONE = 0,
+	NFQNL_CFG_CMD_BIND = 1,
+	NFQNL_CFG_CMD_UNBIND = 2,
+	NFQNL_CFG_CMD_PF_BIND = 3,
+	NFQNL_CFG_CMD_PF_UNBIND = 4,
+};
+
+enum nfqnl_config_mode {
+	NFQNL_COPY_NONE = 0,
+	NFQNL_COPY_META = 1,
+	NFQNL_COPY_PACKET = 2,
+};
+
+enum nfqnl_msg_types {
+	NFQNL_MSG_PACKET = 0,
+	NFQNL_MSG_VERDICT = 1,
+	NFQNL_MSG_CONFIG = 2,
+	NFQNL_MSG_VERDICT_BATCH = 3,
+	NFQNL_MSG_MAX = 4,
+};
+
+enum ip_conntrack_status {
+	IPS_EXPECTED_BIT = 0,
+	IPS_EXPECTED = 1,
+	IPS_SEEN_REPLY_BIT = 1,
+	IPS_SEEN_REPLY = 2,
+	IPS_ASSURED_BIT = 2,
+	IPS_ASSURED = 4,
+	IPS_CONFIRMED_BIT = 3,
+	IPS_CONFIRMED = 8,
+	IPS_SRC_NAT_BIT = 4,
+	IPS_SRC_NAT = 16,
+	IPS_DST_NAT_BIT = 5,
+	IPS_DST_NAT = 32,
+	IPS_NAT_MASK = 48,
+	IPS_SEQ_ADJUST_BIT = 6,
+	IPS_SEQ_ADJUST = 64,
+	IPS_SRC_NAT_DONE_BIT = 7,
+	IPS_SRC_NAT_DONE = 128,
+	IPS_DST_NAT_DONE_BIT = 8,
+	IPS_DST_NAT_DONE = 256,
+	IPS_NAT_DONE_MASK = 384,
+	IPS_DYING_BIT = 9,
+	IPS_DYING = 512,
+	IPS_FIXED_TIMEOUT_BIT = 10,
+	IPS_FIXED_TIMEOUT = 1024,
+	IPS_TEMPLATE_BIT = 11,
+	IPS_TEMPLATE = 2048,
+	IPS_UNTRACKED_BIT = 12,
+	IPS_UNTRACKED = 4096,
+	IPS_NAT_CLASH_BIT = 12,
+	IPS_NAT_CLASH = 4096,
+	IPS_HELPER_BIT = 13,
+	IPS_HELPER = 8192,
+	IPS_OFFLOAD_BIT = 14,
+	IPS_OFFLOAD = 16384,
+	IPS_HW_OFFLOAD_BIT = 15,
+	IPS_HW_OFFLOAD = 32768,
+	IPS_UNCHANGEABLE_MASK = 56313,
+	__IPS_MAX_BIT = 16,
+};
+
+struct nfqnl_instance {
+	struct hlist_node hlist;
+	struct callback_head rcu;
+	u32 peer_portid;
+	unsigned int queue_maxlen;
+	unsigned int copy_range;
+	unsigned int queue_dropped;
+	unsigned int queue_user_dropped;
+	u_int16_t queue_num;
+	u_int8_t copy_mode;
+	u_int32_t flags;
+	long: 0;
+	spinlock_t lock;
+	unsigned int queue_total;
+	unsigned int id_sequence;
+	struct list_head queue_list;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct nfnl_queue_net {
+	spinlock_t instances_lock;
+	struct hlist_head instance_table[16];
+};
+
+typedef int (*nfqnl_cmpfn)(struct nf_queue_entry *, unsigned long);
+
+struct nfqnl_msg_verdict_hdr {
+	__be32 verdict;
+	__be32 id;
+};
+
+struct iter_state {
+	struct seq_net_private p;
+	unsigned int bucket;
+};
+
+struct nfqnl_msg_packet_hdr {
+	__be32 packet_id;
+	__be16 hw_protocol;
+	__u8 hook;
+} __attribute__((packed));
+
+struct nfqnl_msg_packet_hw {
+	__be16 hw_addrlen;
+	__u16 _pad;
+	__u8 hw_addr[8];
+};
+
+struct nfqnl_msg_packet_timestamp {
+	__be64 sec;
+	__be64 usec;
+};
+
+struct nfqnl_msg_config_cmd {
+	__u8 command;
+	__u8 _pad;
+	__be16 pf;
+};
+
+struct nfqnl_msg_config_params {
+	__be32 copy_range;
+	__u8 copy_mode;
+} __attribute__((packed));
+
+enum nfulnl_attr_config {
+	NFULA_CFG_UNSPEC = 0,
+	NFULA_CFG_CMD = 1,
+	NFULA_CFG_MODE = 2,
+	NFULA_CFG_NLBUFSIZ = 3,
+	NFULA_CFG_TIMEOUT = 4,
+	NFULA_CFG_QTHRESH = 5,
+	NFULA_CFG_FLAGS = 6,
+	__NFULA_CFG_MAX = 7,
+};
+
+enum nfulnl_msg_config_cmds {
+	NFULNL_CFG_CMD_NONE = 0,
+	NFULNL_CFG_CMD_BIND = 1,
+	NFULNL_CFG_CMD_UNBIND = 2,
+	NFULNL_CFG_CMD_PF_BIND = 3,
+	NFULNL_CFG_CMD_PF_UNBIND = 4,
+};
+
+enum nfulnl_msg_types {
+	NFULNL_MSG_PACKET = 0,
+	NFULNL_MSG_CONFIG = 1,
+	NFULNL_MSG_MAX = 2,
+};
+
+enum nfulnl_attr_type {
+	NFULA_UNSPEC = 0,
+	NFULA_PACKET_HDR = 1,
+	NFULA_MARK = 2,
+	NFULA_TIMESTAMP = 3,
+	NFULA_IFINDEX_INDEV = 4,
+	NFULA_IFINDEX_OUTDEV = 5,
+	NFULA_IFINDEX_PHYSINDEV = 6,
+	NFULA_IFINDEX_PHYSOUTDEV = 7,
+	NFULA_HWADDR = 8,
+	NFULA_PAYLOAD = 9,
+	NFULA_PREFIX = 10,
+	NFULA_UID = 11,
+	NFULA_SEQ = 12,
+	NFULA_SEQ_GLOBAL = 13,
+	NFULA_GID = 14,
+	NFULA_HWTYPE = 15,
+	NFULA_HWHEADER = 16,
+	NFULA_HWLEN = 17,
+	NFULA_CT = 18,
+	NFULA_CT_INFO = 19,
+	NFULA_VLAN = 20,
+	NFULA_L2HDR = 21,
+	__NFULA_MAX = 22,
+};
+
+enum nfulnl_vlan_attr {
+	NFULA_VLAN_UNSPEC = 0,
+	NFULA_VLAN_PROTO = 1,
+	NFULA_VLAN_TCI = 2,
+	__NFULA_VLAN_MAX = 3,
+};
+
+struct nfulnl_instance {
+	struct hlist_node hlist;
+	spinlock_t lock;
+	refcount_t use;
+	unsigned int qlen;
+	struct sk_buff *skb;
+	struct timer_list timer;
+	struct net *net;
+	netns_tracker ns_tracker;
+	struct user_namespace *peer_user_ns;
+	u32 peer_portid;
+	unsigned int flushtimeout;
+	unsigned int nlbufsiz;
+	unsigned int qthreshold;
+	u_int32_t copy_range;
+	u_int32_t seq;
+	u_int16_t group_num;
+	u_int16_t flags;
+	u_int8_t copy_mode;
+	struct callback_head rcu;
+};
+
+struct nfnl_log_net {
+	spinlock_t instances_lock;
+	struct hlist_head instance_table[16];
+	atomic_t global_seq;
+};
+
+struct nfulnl_msg_packet_hdr {
+	__be16 hw_protocol;
+	__u8 hook;
+	__u8 _pad;
+};
+
+struct nfulnl_msg_packet_hw {
+	__be16 hw_addrlen;
+	__u16 _pad;
+	__u8 hw_addr[8];
+};
+
+struct nfulnl_msg_packet_timestamp {
+	__be64 sec;
+	__be64 usec;
+};
+
+struct nfulnl_msg_config_cmd {
+	__u8 command;
+};
+
+struct nfulnl_msg_config_mode {
+	__be32 copy_range;
+	__u8 copy_mode;
+	__u8 _pad;
+} __attribute__((packed));
+
+struct conntrack_gc_work {
+	struct delayed_work dwork;
+	u32 next_bucket;
+	u32 avg_timeout;
+	u32 count;
+	u32 start_time;
+	bool exiting;
+	bool early_drop;
+};
+
+struct nf_conntrack_expect_policy;
+
+struct nf_conntrack_helper {
+	struct hlist_node hnode;
+	char name[16];
+	refcount_t refcnt;
+	struct module *me;
+	const struct nf_conntrack_expect_policy *expect_policy;
+	struct nf_conntrack_tuple tuple;
+	int (*help)(struct sk_buff *, unsigned int, struct nf_conn *, enum ip_conntrack_info);
+	void (*destroy)(struct nf_conn *);
+	int (*from_nlattr)(struct nlattr *, struct nf_conn *);
+	int (*to_nlattr)(struct sk_buff *, const struct nf_conn *);
+	unsigned int expect_class_max;
+	unsigned int flags;
+	unsigned int queue_num;
+	u16 data_len;
+	char nat_mod_name[16];
+};
+
+struct nf_conntrack_expect_policy {
+	unsigned int max_expected;
+	unsigned int timeout;
+	char name[16];
+};
+
+enum ip_conntrack_events {
+	IPCT_NEW = 0,
+	IPCT_RELATED = 1,
+	IPCT_DESTROY = 2,
+	IPCT_REPLY = 3,
+	IPCT_ASSURED = 4,
+	IPCT_PROTOINFO = 5,
+	IPCT_HELPER = 6,
+	IPCT_MARK = 7,
+	IPCT_SEQADJ = 8,
+	IPCT_NATSEQADJ = 8,
+	IPCT_SECMARK = 9,
+	IPCT_LABEL = 10,
+	IPCT_SYNPROXY = 11,
+	__IPCT_MAX = 12,
+};
+
+enum nf_ct_ecache_state {
+	NFCT_ECACHE_DESTROY_FAIL = 0,
+	NFCT_ECACHE_DESTROY_SENT = 1,
+};
+
+enum ctattr_l4proto {
+	CTA_PROTO_UNSPEC = 0,
+	CTA_PROTO_NUM = 1,
+	CTA_PROTO_SRC_PORT = 2,
+	CTA_PROTO_DST_PORT = 3,
+	CTA_PROTO_ICMP_ID = 4,
+	CTA_PROTO_ICMP_TYPE = 5,
+	CTA_PROTO_ICMP_CODE = 6,
+	CTA_PROTO_ICMPV6_ID = 7,
+	CTA_PROTO_ICMPV6_TYPE = 8,
+	CTA_PROTO_ICMPV6_CODE = 9,
+	__CTA_PROTO_MAX = 10,
+};
+
+enum nf_ct_ext_id {
+	NF_CT_EXT_HELPER = 0,
+	NF_CT_EXT_NAT = 1,
+	NF_CT_EXT_SEQADJ = 2,
+	NF_CT_EXT_ACCT = 3,
+	NF_CT_EXT_ECACHE = 4,
+	NF_CT_EXT_NUM = 5,
+};
+
+enum nf_ct_helper_flags {
+	NF_CT_HELPER_F_USERSPACE = 1,
+	NF_CT_HELPER_F_CONFIGURED = 2,
+};
+
+struct nf_conntrack_l4proto;
+
+struct nf_ct_timeout {
+	__u16 l3num;
+	const struct nf_conntrack_l4proto *l4proto;
+	char data[0];
+};
+
+struct nf_conntrack_l4proto {
+	u_int8_t l4proto;
+	bool allow_clash;
+	u16 nlattr_size;
+	bool (*can_early_drop)(const struct nf_conn *);
+	int (*to_nlattr)(struct sk_buff *, struct nlattr *, struct nf_conn *, bool);
+	int (*from_nlattr)(struct nlattr **, struct nf_conn *);
+	int (*tuple_to_nlattr)(struct sk_buff *, const struct nf_conntrack_tuple *);
+	unsigned int (*nlattr_tuple_size)();
+	int (*nlattr_to_tuple)(struct nlattr **, struct nf_conntrack_tuple *, u_int32_t);
+	const struct nla_policy *nla_policy;
+	struct {
+		int (*nlattr_to_obj)(struct nlattr **, struct net *, void *);
+		int (*obj_to_nlattr)(struct sk_buff *, const void *);
+		u16 obj_size;
+		u16 nlattr_max;
+		const struct nla_policy *nla_policy;
+	} ctnl_timeout;
+	void (*print_conntrack)(struct seq_file *, struct nf_conn *);
+};
+
+struct nf_conntrack_net_ecache {
+	struct delayed_work dwork;
+	spinlock_t dying_lock;
+	struct hlist_nulls_head dying_list;
+};
+
+struct nf_conntrack_net {
+	atomic_t count;
+	unsigned int expect_count;
+	unsigned int users4;
+	unsigned int users6;
+	unsigned int users_bridge;
+	struct ctl_table_header *sysctl_header;
+	struct nf_conntrack_net_ecache ecache;
+};
+
+struct nf_conn_counter {
+	atomic64_t packets;
+	atomic64_t bytes;
+};
+
+struct nf_conn_acct {
+	struct nf_conn_counter counter[2];
+};
+
+struct nf_conn_tstamp {
+	u_int64_t start;
+	u_int64_t stop;
+};
+
+struct nf_conn_help {
+	struct nf_conntrack_helper __attribute__((btf_type_tag("rcu"))) *helper;
+	struct hlist_head expectations;
+	u8 expecting[4];
+	long: 0;
+	char data[32];
+};
+
+struct nf_conntrack_ecache {
+	unsigned long cache;
+	u16 ctmask;
+	u16 expmask;
+	u32 missed;
+	u32 portid;
+};
+
+struct nf_ct_iter_data {
+	struct net *net;
+	void *data;
+	u32 portid;
+	int report;
+};
+
+struct nf_conn_timeout {
+	struct nf_ct_timeout __attribute__((btf_type_tag("rcu"))) *timeout;
+};
+
+enum nf_ct_sysctl_index {
+	NF_SYSCTL_CT_MAX = 0,
+	NF_SYSCTL_CT_COUNT = 1,
+	NF_SYSCTL_CT_BUCKETS = 2,
+	NF_SYSCTL_CT_CHECKSUM = 3,
+	NF_SYSCTL_CT_LOG_INVALID = 4,
+	NF_SYSCTL_CT_EXPECT_MAX = 5,
+	NF_SYSCTL_CT_ACCT = 6,
+	NF_SYSCTL_CT_EVENTS = 7,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_GENERIC = 8,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_SYN_SENT = 9,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_SYN_RECV = 10,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_ESTABLISHED = 11,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_FIN_WAIT = 12,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_CLOSE_WAIT = 13,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_LAST_ACK = 14,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_TIME_WAIT = 15,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_CLOSE = 16,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_RETRANS = 17,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_UNACK = 18,
+	NF_SYSCTL_CT_PROTO_TCP_LOOSE = 19,
+	NF_SYSCTL_CT_PROTO_TCP_LIBERAL = 20,
+	NF_SYSCTL_CT_PROTO_TCP_IGNORE_INVALID_RST = 21,
+	NF_SYSCTL_CT_PROTO_TCP_MAX_RETRANS = 22,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_UDP = 23,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_UDP_STREAM = 24,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_ICMP = 25,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_ICMPV6 = 26,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_CLOSED = 27,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_COOKIE_WAIT = 28,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_COOKIE_ECHOED = 29,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_ESTABLISHED = 30,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_SENT = 31,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_RECD = 32,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_SHUTDOWN_ACK_SENT = 33,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_SCTP_HEARTBEAT_SENT = 34,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_REQUEST = 35,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_RESPOND = 36,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_PARTOPEN = 37,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_OPEN = 38,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_CLOSEREQ = 39,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_CLOSING = 40,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_DCCP_TIMEWAIT = 41,
+	NF_SYSCTL_CT_PROTO_DCCP_LOOSE = 42,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_GRE = 43,
+	NF_SYSCTL_CT_PROTO_TIMEOUT_GRE_STREAM = 44,
+	__NF_SYSCTL_CT_LAST_SYSCTL = 45,
+};
+
+enum udp_conntrack {
+	UDP_CT_UNREPLIED = 0,
+	UDP_CT_REPLIED = 1,
+	UDP_CT_MAX = 2,
+};
+
+enum tcp_conntrack {
+	TCP_CONNTRACK_NONE = 0,
+	TCP_CONNTRACK_SYN_SENT = 1,
+	TCP_CONNTRACK_SYN_RECV = 2,
+	TCP_CONNTRACK_ESTABLISHED = 3,
+	TCP_CONNTRACK_FIN_WAIT = 4,
+	TCP_CONNTRACK_CLOSE_WAIT = 5,
+	TCP_CONNTRACK_LAST_ACK = 6,
+	TCP_CONNTRACK_TIME_WAIT = 7,
+	TCP_CONNTRACK_CLOSE = 8,
+	TCP_CONNTRACK_LISTEN = 9,
+	TCP_CONNTRACK_MAX = 10,
+	TCP_CONNTRACK_IGNORE = 11,
+	TCP_CONNTRACK_RETRANS = 12,
+	TCP_CONNTRACK_UNACK = 13,
+	TCP_CONNTRACK_TIMEOUT_MAX = 14,
+};
+
+enum ct_dccp_states {
+	CT_DCCP_NONE = 0,
+	CT_DCCP_REQUEST = 1,
+	CT_DCCP_RESPOND = 2,
+	CT_DCCP_PARTOPEN = 3,
+	CT_DCCP_OPEN = 4,
+	CT_DCCP_CLOSEREQ = 5,
+	CT_DCCP_CLOSING = 6,
+	CT_DCCP_TIMEWAIT = 7,
+	CT_DCCP_IGNORE = 8,
+	CT_DCCP_INVALID = 9,
+	__CT_DCCP_MAX = 10,
+};
+
+enum gre_conntrack {
+	GRE_CT_UNREPLIED = 0,
+	GRE_CT_REPLIED = 1,
+	GRE_CT_MAX = 2,
+};
+
+struct ct_iter_state {
+	struct seq_net_private p;
+	struct hlist_nulls_head *hash;
+	unsigned int htable_size;
+	unsigned int bucket;
+	u_int64_t time_now;
+};
+
+enum ip_conntrack_expect_events {
+	IPEXP_NEW = 0,
+	IPEXP_DESTROY = 1,
+};
+
+struct ct_expect_iter_state {
+	struct seq_net_private p;
+	unsigned int bucket;
+};
+
+struct nf_ct_helper_expectfn {
+	struct list_head head;
+	const char *name;
+	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
+};
+
+struct nf_conntrack_nat_helper {
+	struct list_head list;
+	char mod_name[16];
+	struct module *module;
+};
+
+struct nf_ct_bridge_info {
+	struct nf_hook_ops *ops;
+	unsigned int ops_size;
+	struct module *me;
+};
+
+enum nf_ct_tcp_action {
+	NFCT_TCP_IGNORE = 0,
+	NFCT_TCP_INVALID = 1,
+	NFCT_TCP_ACCEPT = 2,
+};
+
+enum tcp_bit_set {
+	TCP_SYN_SET = 0,
+	TCP_SYNACK_SET = 1,
+	TCP_FIN_SET = 2,
+	TCP_ACK_SET = 3,
+	TCP_RST_SET = 4,
+	TCP_NONE_SET = 5,
+};
+
+enum {
+	TCP_FLAG_CWR = 32768,
+	TCP_FLAG_ECE = 16384,
+	TCP_FLAG_URG = 8192,
+	TCP_FLAG_ACK = 4096,
+	TCP_FLAG_PSH = 2048,
+	TCP_FLAG_RST = 1024,
+	TCP_FLAG_SYN = 512,
+	TCP_FLAG_FIN = 256,
+	TCP_RESERVED_BITS = 15,
+	TCP_DATA_OFFSET = 240,
+};
+
+enum ctattr_protoinfo {
+	CTA_PROTOINFO_UNSPEC = 0,
+	CTA_PROTOINFO_TCP = 1,
+	CTA_PROTOINFO_DCCP = 2,
+	CTA_PROTOINFO_SCTP = 3,
+	__CTA_PROTOINFO_MAX = 4,
+};
+
+enum ctattr_protoinfo_tcp {
+	CTA_PROTOINFO_TCP_UNSPEC = 0,
+	CTA_PROTOINFO_TCP_STATE = 1,
+	CTA_PROTOINFO_TCP_WSCALE_ORIGINAL = 2,
+	CTA_PROTOINFO_TCP_WSCALE_REPLY = 3,
+	CTA_PROTOINFO_TCP_FLAGS_ORIGINAL = 4,
+	CTA_PROTOINFO_TCP_FLAGS_REPLY = 5,
+	__CTA_PROTOINFO_TCP_MAX = 6,
+};
+
+struct nf_ct_tcp_flags {
+	__u8 flags;
+	__u8 mask;
+};
+
+struct nf_ct_seqadj {
+	u32 correction_pos;
+	s32 offset_before;
+	s32 offset_after;
+};
+
+struct nf_conn_seqadj {
+	struct nf_ct_seqadj seq[2];
+};
+
+struct tcp_sack_block_wire {
+	__be32 start_seq;
+	__be32 end_seq;
+};
+
+struct icmpv6_echo {
+	__be16 identifier;
+	__be16 sequence;
+};
+
+struct icmpv6_nd_advt {
+	__u32 reserved: 5;
+	__u32 override: 1;
+	__u32 solicited: 1;
+	__u32 router: 1;
+	__u32 reserved2: 24;
+};
+
+struct icmpv6_nd_ra {
+	__u8 hop_limit;
+	__u8 reserved: 3;
+	__u8 router_pref: 2;
+	__u8 home_agent: 1;
+	__u8 other: 1;
+	__u8 managed: 1;
+	__be16 rt_lifetime;
+};
+
+struct icmp6hdr {
+	__u8 icmp6_type;
+	__u8 icmp6_code;
+	__sum16 icmp6_cksum;
+	union {
+		__be32 un_data32[1];
+		__be16 un_data16[2];
+		__u8 un_data8[4];
+		struct icmpv6_echo u_echo;
+		struct icmpv6_nd_advt u_nd_advt;
+		struct icmpv6_nd_ra u_nd_ra;
+	} icmp6_dataun;
+};
+
+struct rd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	struct in6_addr dest;
+	__u8 opt[0];
+};
+
+enum {
+	__ND_OPT_PREFIX_INFO_END = 0,
+	ND_OPT_SOURCE_LL_ADDR = 1,
+	ND_OPT_TARGET_LL_ADDR = 2,
+	ND_OPT_PREFIX_INFO = 3,
+	ND_OPT_REDIRECT_HDR = 4,
+	ND_OPT_MTU = 5,
+	ND_OPT_NONCE = 14,
+	__ND_OPT_ARRAY_MAX = 15,
+	ND_OPT_ROUTE_INFO = 24,
+	ND_OPT_RDNSS = 25,
+	ND_OPT_DNSSL = 31,
+	ND_OPT_6CO = 34,
+	ND_OPT_CAPTIVE_PORTAL = 37,
+	ND_OPT_PREF64 = 38,
+	__ND_OPT_MAX = 39,
+};
+
+enum retry_state {
+	STATE_CONGESTED = 0,
+	STATE_RESTART = 1,
+	STATE_DONE = 2,
+};
+
+enum ct_dccp_roles {
+	CT_DCCP_ROLE_CLIENT = 0,
+	CT_DCCP_ROLE_SERVER = 1,
+	__CT_DCCP_ROLE_MAX = 2,
+};
+
+enum dccp_pkt_type {
+	DCCP_PKT_REQUEST = 0,
+	DCCP_PKT_RESPONSE = 1,
+	DCCP_PKT_DATA = 2,
+	DCCP_PKT_ACK = 3,
+	DCCP_PKT_DATAACK = 4,
+	DCCP_PKT_CLOSEREQ = 5,
+	DCCP_PKT_CLOSE = 6,
+	DCCP_PKT_RESET = 7,
+	DCCP_PKT_SYNC = 8,
+	DCCP_PKT_SYNCACK = 9,
+	DCCP_PKT_INVALID = 10,
+};
+
+enum ctattr_protoinfo_dccp {
+	CTA_PROTOINFO_DCCP_UNSPEC = 0,
+	CTA_PROTOINFO_DCCP_STATE = 1,
+	CTA_PROTOINFO_DCCP_ROLE = 2,
+	CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ = 3,
+	CTA_PROTOINFO_DCCP_PAD = 4,
+	__CTA_PROTOINFO_DCCP_MAX = 5,
+};
+
+struct dccp_hdr_ext {
+	__be32 dccph_seq_low;
+};
+
+struct dccp_hdr_ack_bits {
+	__be16 dccph_reserved1;
+	__be16 dccph_ack_nr_high;
+	__be32 dccph_ack_nr_low;
+};
+
+struct dccp_hdr_request {
+	__be32 dccph_req_service;
+};
+
+struct dccp_hdr_response {
+	struct dccp_hdr_ack_bits dccph_resp_ack;
+	__be32 dccph_resp_service;
+};
+
+struct dccp_hdr_reset {
+	struct dccp_hdr_ack_bits dccph_reset_ack;
+	__u8 dccph_reset_code;
+	__u8 dccph_reset_data[3];
+};
+
+struct nf_conntrack_dccp_buf {
+	struct dccp_hdr dh;
+	struct dccp_hdr_ext ext;
+	union {
+		struct dccp_hdr_ack_bits ack;
+		struct dccp_hdr_request req;
+		struct dccp_hdr_response response;
+		struct dccp_hdr_reset rst;
+	} u;
+};
+
+enum sctp_cid {
+	SCTP_CID_DATA = 0,
+	SCTP_CID_INIT = 1,
+	SCTP_CID_INIT_ACK = 2,
+	SCTP_CID_SACK = 3,
+	SCTP_CID_HEARTBEAT = 4,
+	SCTP_CID_HEARTBEAT_ACK = 5,
+	SCTP_CID_ABORT = 6,
+	SCTP_CID_SHUTDOWN = 7,
+	SCTP_CID_SHUTDOWN_ACK = 8,
+	SCTP_CID_ERROR = 9,
+	SCTP_CID_COOKIE_ECHO = 10,
+	SCTP_CID_COOKIE_ACK = 11,
+	SCTP_CID_ECN_ECNE = 12,
+	SCTP_CID_ECN_CWR = 13,
+	SCTP_CID_SHUTDOWN_COMPLETE = 14,
+	SCTP_CID_AUTH = 15,
+	SCTP_CID_I_DATA = 64,
+	SCTP_CID_FWD_TSN = 192,
+	SCTP_CID_ASCONF = 193,
+	SCTP_CID_I_FWD_TSN = 194,
+	SCTP_CID_ASCONF_ACK = 128,
+	SCTP_CID_RECONF = 130,
+	SCTP_CID_PAD = 132,
+};
+
+enum {
+	SCTP_CHUNK_FLAG_T = 1,
+};
+
+enum ctattr_protoinfo_sctp {
+	CTA_PROTOINFO_SCTP_UNSPEC = 0,
+	CTA_PROTOINFO_SCTP_STATE = 1,
+	CTA_PROTOINFO_SCTP_VTAG_ORIGINAL = 2,
+	CTA_PROTOINFO_SCTP_VTAG_REPLY = 3,
+	__CTA_PROTOINFO_SCTP_MAX = 4,
+};
+
+enum pptp_ctrlsess_state {
+	PPTP_SESSION_NONE = 0,
+	PPTP_SESSION_ERROR = 1,
+	PPTP_SESSION_STOPREQ = 2,
+	PPTP_SESSION_REQUESTED = 3,
+	PPTP_SESSION_CONFIRMED = 4,
+};
+
+enum pptp_ctrlcall_state {
+	PPTP_CALL_NONE = 0,
+	PPTP_CALL_ERROR = 1,
+	PPTP_CALL_OUT_REQ = 2,
+	PPTP_CALL_OUT_CONF = 3,
+	PPTP_CALL_IN_REQ = 4,
+	PPTP_CALL_IN_REP = 5,
+	PPTP_CALL_IN_CONF = 6,
+	PPTP_CALL_CLEAR_REQ = 7,
+};
+
+struct nf_ct_gre_keymap {
+	struct list_head list;
+	struct nf_conntrack_tuple tuple;
+	struct callback_head rcu;
+};
+
+struct nf_ct_pptp_master {
+	enum pptp_ctrlsess_state sstate;
+	enum pptp_ctrlcall_state cstate;
+	__be16 pac_call_id;
+	__be16 pns_call_id;
+	struct nf_ct_gre_keymap *keymap[2];
+};
+
+struct pptp_gre_header {
+	struct gre_base_hdr gre_hd;
+	__be16 payload_len;
+	__be16 call_id;
+	__be32 seq;
+	__be32 ack;
+};
+
+enum {
+	NF_BPF_CT_OPTS_SZ = 12,
+};
+
+enum {
+	BPF_F_CURRENT_NETNS = -1,
+};
+
+struct nf_conn___init {
+	struct nf_conn ct;
+};
+
+struct bpf_ct_opts {
+	s32 netns_id;
+	s32 error;
+	u8 l4proto;
+	u8 dir;
+	u8 reserved[2];
+};
+
+enum cntl_msg_types {
+	IPCTNL_MSG_CT_NEW = 0,
+	IPCTNL_MSG_CT_GET = 1,
+	IPCTNL_MSG_CT_DELETE = 2,
+	IPCTNL_MSG_CT_GET_CTRZERO = 3,
+	IPCTNL_MSG_CT_GET_STATS_CPU = 4,
+	IPCTNL_MSG_CT_GET_STATS = 5,
+	IPCTNL_MSG_CT_GET_DYING = 6,
+	IPCTNL_MSG_CT_GET_UNCONFIRMED = 7,
+	IPCTNL_MSG_MAX = 8,
+};
+
+enum ctattr_type {
+	CTA_UNSPEC = 0,
+	CTA_TUPLE_ORIG = 1,
+	CTA_TUPLE_REPLY = 2,
+	CTA_STATUS = 3,
+	CTA_PROTOINFO = 4,
+	CTA_HELP = 5,
+	CTA_NAT_SRC = 6,
+	CTA_TIMEOUT = 7,
+	CTA_MARK = 8,
+	CTA_COUNTERS_ORIG = 9,
+	CTA_COUNTERS_REPLY = 10,
+	CTA_USE = 11,
+	CTA_ID = 12,
+	CTA_NAT_DST = 13,
+	CTA_TUPLE_MASTER = 14,
+	CTA_SEQ_ADJ_ORIG = 15,
+	CTA_NAT_SEQ_ADJ_ORIG = 15,
+	CTA_SEQ_ADJ_REPLY = 16,
+	CTA_NAT_SEQ_ADJ_REPLY = 16,
+	CTA_SECMARK = 17,
+	CTA_ZONE = 18,
+	CTA_SECCTX = 19,
+	CTA_TIMESTAMP = 20,
+	CTA_MARK_MASK = 21,
+	CTA_LABELS = 22,
+	CTA_LABELS_MASK = 23,
+	CTA_SYNPROXY = 24,
+	CTA_FILTER = 25,
+	CTA_STATUS_MASK = 26,
+	__CTA_MAX = 27,
+};
+
+enum ctattr_tuple {
+	CTA_TUPLE_UNSPEC = 0,
+	CTA_TUPLE_IP = 1,
+	CTA_TUPLE_PROTO = 2,
+	CTA_TUPLE_ZONE = 3,
+	__CTA_TUPLE_MAX = 4,
+};
+
+enum ctattr_ip {
+	CTA_IP_UNSPEC = 0,
+	CTA_IP_V4_SRC = 1,
+	CTA_IP_V4_DST = 2,
+	CTA_IP_V6_SRC = 3,
+	CTA_IP_V6_DST = 4,
+	__CTA_IP_MAX = 5,
+};
+
+enum ctattr_counters {
+	CTA_COUNTERS_UNSPEC = 0,
+	CTA_COUNTERS_PACKETS = 1,
+	CTA_COUNTERS_BYTES = 2,
+	CTA_COUNTERS32_PACKETS = 3,
+	CTA_COUNTERS32_BYTES = 4,
+	CTA_COUNTERS_PAD = 5,
+	__CTA_COUNTERS_MAX = 6,
+};
+
+enum ctattr_tstamp {
+	CTA_TIMESTAMP_UNSPEC = 0,
+	CTA_TIMESTAMP_START = 1,
+	CTA_TIMESTAMP_STOP = 2,
+	CTA_TIMESTAMP_PAD = 3,
+	__CTA_TIMESTAMP_MAX = 4,
+};
+
+enum ctattr_help {
+	CTA_HELP_UNSPEC = 0,
+	CTA_HELP_NAME = 1,
+	CTA_HELP_INFO = 2,
+	__CTA_HELP_MAX = 3,
+};
+
+enum ctattr_secctx {
+	CTA_SECCTX_UNSPEC = 0,
+	CTA_SECCTX_NAME = 1,
+	__CTA_SECCTX_MAX = 2,
+};
+
+enum ctattr_seqadj {
+	CTA_SEQADJ_UNSPEC = 0,
+	CTA_SEQADJ_CORRECTION_POS = 1,
+	CTA_SEQADJ_OFFSET_BEFORE = 2,
+	CTA_SEQADJ_OFFSET_AFTER = 3,
+	__CTA_SEQADJ_MAX = 4,
+};
+
+enum ctattr_synproxy {
+	CTA_SYNPROXY_UNSPEC = 0,
+	CTA_SYNPROXY_ISN = 1,
+	CTA_SYNPROXY_ITS = 2,
+	CTA_SYNPROXY_TSOFF = 3,
+	__CTA_SYNPROXY_MAX = 4,
+};
+
+enum ctnl_exp_msg_types {
+	IPCTNL_MSG_EXP_NEW = 0,
+	IPCTNL_MSG_EXP_GET = 1,
+	IPCTNL_MSG_EXP_DELETE = 2,
+	IPCTNL_MSG_EXP_GET_STATS_CPU = 3,
+	IPCTNL_MSG_EXP_MAX = 4,
+};
+
+enum ctattr_expect {
+	CTA_EXPECT_UNSPEC = 0,
+	CTA_EXPECT_MASTER = 1,
+	CTA_EXPECT_TUPLE = 2,
+	CTA_EXPECT_MASK = 3,
+	CTA_EXPECT_TIMEOUT = 4,
+	CTA_EXPECT_ID = 5,
+	CTA_EXPECT_HELP_NAME = 6,
+	CTA_EXPECT_ZONE = 7,
+	CTA_EXPECT_FLAGS = 8,
+	CTA_EXPECT_CLASS = 9,
+	CTA_EXPECT_NAT = 10,
+	CTA_EXPECT_FN = 11,
+	__CTA_EXPECT_MAX = 12,
+};
+
+enum ctattr_expect_nat {
+	CTA_EXPECT_NAT_UNSPEC = 0,
+	CTA_EXPECT_NAT_DIR = 1,
+	CTA_EXPECT_NAT_TUPLE = 2,
+	__CTA_EXPECT_NAT_MAX = 3,
+};
+
+enum ctattr_expect_stats {
+	CTA_STATS_EXP_UNSPEC = 0,
+	CTA_STATS_EXP_NEW = 1,
+	CTA_STATS_EXP_CREATE = 2,
+	CTA_STATS_EXP_DELETE = 3,
+	__CTA_STATS_EXP_MAX = 4,
+};
+
+enum ctattr_filter {
+	CTA_FILTER_UNSPEC = 0,
+	CTA_FILTER_ORIG_FLAGS = 1,
+	CTA_FILTER_REPLY_FLAGS = 2,
+	__CTA_FILTER_MAX = 3,
+};
+
+enum ctattr_stats_cpu {
+	CTA_STATS_UNSPEC = 0,
+	CTA_STATS_SEARCHED = 1,
+	CTA_STATS_FOUND = 2,
+	CTA_STATS_NEW = 3,
+	CTA_STATS_INVALID = 4,
+	CTA_STATS_IGNORE = 5,
+	CTA_STATS_DELETE = 6,
+	CTA_STATS_DELETE_LIST = 7,
+	CTA_STATS_INSERT = 8,
+	CTA_STATS_INSERT_FAILED = 9,
+	CTA_STATS_DROP = 10,
+	CTA_STATS_EARLY_DROP = 11,
+	CTA_STATS_ERROR = 12,
+	CTA_STATS_SEARCH_RESTART = 13,
+	CTA_STATS_CLASH_RESOLVE = 14,
+	CTA_STATS_CHAIN_TOOLONG = 15,
+	__CTA_STATS_MAX = 16,
+};
+
+enum ctattr_stats_global {
+	CTA_STATS_GLOBAL_UNSPEC = 0,
+	CTA_STATS_GLOBAL_ENTRIES = 1,
+	CTA_STATS_GLOBAL_MAX_ENTRIES = 2,
+	__CTA_STATS_GLOBAL_MAX = 3,
+};
+
+struct ctnetlink_filter_u32 {
+	u32 val;
+	u32 mask;
+};
+
+struct ctnetlink_filter {
+	u8 family;
+	u_int32_t orig_flags;
+	u_int32_t reply_flags;
+	struct nf_conntrack_tuple orig;
+	struct nf_conntrack_tuple reply;
+	struct nf_conntrack_zone zone;
+	struct ctnetlink_filter_u32 mark;
+	struct ctnetlink_filter_u32 status;
+};
+
+struct ctnetlink_list_dump_ctx {
+	struct nf_conn *last;
+	unsigned int cpu;
+	bool done;
+};
+
+enum amanda_strings {
+	SEARCH_CONNECT = 0,
+	SEARCH_NEWLINE = 1,
+	SEARCH_DATA = 2,
+	SEARCH_MESG = 3,
+	SEARCH_INDEX = 4,
+	SEARCH_STATE = 5,
+};
+
+enum nf_ct_ftp_type {
+	NF_CT_FTP_PORT = 0,
+	NF_CT_FTP_PASV = 1,
+	NF_CT_FTP_EPRT = 2,
+	NF_CT_FTP_EPSV = 3,
+};
+
+struct ftp_search {
+	const char *pattern;
+	size_t plen;
+	char skip;
+	char term;
+	enum nf_ct_ftp_type ftptype;
+	int (*getnum)(const char *, size_t, struct nf_conntrack_man *, char, unsigned int *);
+};
+
+struct nf_ct_ftp_master {
+	u_int32_t seq_aft_nl[4];
+	u_int16_t seq_aft_nl_num[2];
+	u_int16_t flags[2];
+};
+
+struct H245_TransportAddress;
+
+typedef struct H245_TransportAddress H245_TransportAddress;
+
+struct TransportAddress;
+
+typedef struct TransportAddress TransportAddress;
+
+struct nfct_h323_nat_hooks {
+	int (*set_h245_addr)(struct sk_buff *, unsigned int, unsigned char **, int, H245_TransportAddress *, union nf_inet_addr *, __be16);
+	int (*set_h225_addr)(struct sk_buff *, unsigned int, unsigned char **, int, TransportAddress *, union nf_inet_addr *, __be16);
+	int (*set_sig_addr)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, TransportAddress *, int);
+	int (*set_ras_addr)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, TransportAddress *, int);
+	int (*nat_rtp_rtcp)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, int, H245_TransportAddress *, __be16, __be16, struct nf_conntrack_expect *, struct nf_conntrack_expect *);
+	int (*nat_t120)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, int, H245_TransportAddress *, __be16, struct nf_conntrack_expect *);
+	int (*nat_h245)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, int, TransportAddress *, __be16, struct nf_conntrack_expect *);
+	int (*nat_callforwarding)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, int, TransportAddress *, __be16, struct nf_conntrack_expect *);
+	int (*nat_q931)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, unsigned char **, TransportAddress *, int, __be16, struct nf_conntrack_expect *);
+};
+
+struct UnicastAddress_iPAddress {
+	int options;
+	unsigned int network;
+};
+
+typedef struct UnicastAddress_iPAddress UnicastAddress_iPAddress;
+
+struct UnicastAddress_iP6Address {
+	int options;
+	unsigned int network;
+};
+
+typedef struct UnicastAddress_iP6Address UnicastAddress_iP6Address;
+
+struct UnicastAddress {
+	enum {
+		eUnicastAddress_iPAddress = 0,
+		eUnicastAddress_iPXAddress = 1,
+		eUnicastAddress_iP6Address = 2,
+		eUnicastAddress_netBios = 3,
+		eUnicastAddress_iPSourceRouteAddress = 4,
+		eUnicastAddress_nsap = 5,
+		eUnicastAddress_nonStandardAddress = 6,
+	} choice;
+	union {
+		UnicastAddress_iPAddress iPAddress;
+		UnicastAddress_iP6Address iP6Address;
+	};
+};
+
+typedef struct UnicastAddress UnicastAddress;
+
+struct H245_TransportAddress {
+	enum {
+		eH245_TransportAddress_unicastAddress = 0,
+		eH245_TransportAddress_multicastAddress = 1,
+	} choice;
+	union {
+		UnicastAddress unicastAddress;
+	};
+};
+
+struct TransportAddress_ipAddress {
+	int options;
+	unsigned int ip;
+};
+
+typedef struct TransportAddress_ipAddress TransportAddress_ipAddress;
+
+struct TransportAddress_ip6Address {
+	int options;
+	unsigned int ip;
+};
+
+typedef struct TransportAddress_ip6Address TransportAddress_ip6Address;
+
+struct TransportAddress {
+	enum {
+		eTransportAddress_ipAddress = 0,
+		eTransportAddress_ipSourceRoute = 1,
+		eTransportAddress_ipxAddress = 2,
+		eTransportAddress_ip6Address = 3,
+		eTransportAddress_netBios = 4,
+		eTransportAddress_nsap = 5,
+		eTransportAddress_nonStandardAddress = 6,
+	} choice;
+	union {
+		TransportAddress_ipAddress ipAddress;
+		TransportAddress_ip6Address ip6Address;
+	};
+};
+
+struct GatekeeperRequest {
+	enum {
+		eGatekeeperRequest_nonStandardData = -2147483648,
+		eGatekeeperRequest_gatekeeperIdentifier = 1073741824,
+		eGatekeeperRequest_callServices = 536870912,
+		eGatekeeperRequest_endpointAlias = 268435456,
+		eGatekeeperRequest_alternateEndpoints = 134217728,
+		eGatekeeperRequest_tokens = 67108864,
+		eGatekeeperRequest_cryptoTokens = 33554432,
+		eGatekeeperRequest_authenticationCapability = 16777216,
+		eGatekeeperRequest_algorithmOIDs = 8388608,
+		eGatekeeperRequest_integrity = 4194304,
+		eGatekeeperRequest_integrityCheckValue = 2097152,
+		eGatekeeperRequest_supportsAltGK = 1048576,
+		eGatekeeperRequest_featureSet = 524288,
+		eGatekeeperRequest_genericData = 262144,
+	} options;
+	TransportAddress rasAddress;
+};
+
+typedef struct GatekeeperRequest GatekeeperRequest;
+
+struct GatekeeperConfirm {
+	enum {
+		eGatekeeperConfirm_nonStandardData = -2147483648,
+		eGatekeeperConfirm_gatekeeperIdentifier = 1073741824,
+		eGatekeeperConfirm_alternateGatekeeper = 536870912,
+		eGatekeeperConfirm_authenticationMode = 268435456,
+		eGatekeeperConfirm_tokens = 134217728,
+		eGatekeeperConfirm_cryptoTokens = 67108864,
+		eGatekeeperConfirm_algorithmOID = 33554432,
+		eGatekeeperConfirm_integrity = 16777216,
+		eGatekeeperConfirm_integrityCheckValue = 8388608,
+		eGatekeeperConfirm_featureSet = 4194304,
+		eGatekeeperConfirm_genericData = 2097152,
+	} options;
+	TransportAddress rasAddress;
+};
+
+typedef struct GatekeeperConfirm GatekeeperConfirm;
+
+struct RegistrationRequest_callSignalAddress {
+	int count;
+	TransportAddress item[10];
+};
+
+typedef struct RegistrationRequest_callSignalAddress RegistrationRequest_callSignalAddress;
+
+struct RegistrationRequest_rasAddress {
+	int count;
+	TransportAddress item[10];
+};
+
+typedef struct RegistrationRequest_rasAddress RegistrationRequest_rasAddress;
+
+struct RegistrationRequest {
+	enum {
+		eRegistrationRequest_nonStandardData = -2147483648,
+		eRegistrationRequest_terminalAlias = 1073741824,
+		eRegistrationRequest_gatekeeperIdentifier = 536870912,
+		eRegistrationRequest_alternateEndpoints = 268435456,
+		eRegistrationRequest_timeToLive = 134217728,
+		eRegistrationRequest_tokens = 67108864,
+		eRegistrationRequest_cryptoTokens = 33554432,
+		eRegistrationRequest_integrityCheckValue = 16777216,
+		eRegistrationRequest_keepAlive = 8388608,
+		eRegistrationRequest_endpointIdentifier = 4194304,
+		eRegistrationRequest_willSupplyUUIEs = 2097152,
+		eRegistrationRequest_maintainConnection = 1048576,
+		eRegistrationRequest_alternateTransportAddresses = 524288,
+		eRegistrationRequest_additiveRegistration = 262144,
+		eRegistrationRequest_terminalAliasPattern = 131072,
+		eRegistrationRequest_supportsAltGK = 65536,
+		eRegistrationRequest_usageReportingCapability = 32768,
+		eRegistrationRequest_multipleCalls = 16384,
+		eRegistrationRequest_supportedH248Packages = 8192,
+		eRegistrationRequest_callCreditCapability = 4096,
+		eRegistrationRequest_capacityReportingCapability = 2048,
+		eRegistrationRequest_capacity = 1024,
+		eRegistrationRequest_featureSet = 512,
+		eRegistrationRequest_genericData = 256,
+	} options;
+	RegistrationRequest_callSignalAddress callSignalAddress;
+	RegistrationRequest_rasAddress rasAddress;
+	unsigned int timeToLive;
+};
+
+typedef struct RegistrationRequest RegistrationRequest;
+
+struct RegistrationConfirm_callSignalAddress {
+	int count;
+	TransportAddress item[10];
+};
+
+typedef struct RegistrationConfirm_callSignalAddress RegistrationConfirm_callSignalAddress;
+
+struct RegistrationConfirm {
+	enum {
+		eRegistrationConfirm_nonStandardData = -2147483648,
+		eRegistrationConfirm_terminalAlias = 1073741824,
+		eRegistrationConfirm_gatekeeperIdentifier = 536870912,
+		eRegistrationConfirm_alternateGatekeeper = 268435456,
+		eRegistrationConfirm_timeToLive = 134217728,
+		eRegistrationConfirm_tokens = 67108864,
+		eRegistrationConfirm_cryptoTokens = 33554432,
+		eRegistrationConfirm_integrityCheckValue = 16777216,
+		eRegistrationConfirm_willRespondToIRR = 8388608,
+		eRegistrationConfirm_preGrantedARQ = 4194304,
+		eRegistrationConfirm_maintainConnection = 2097152,
+		eRegistrationConfirm_serviceControl = 1048576,
+		eRegistrationConfirm_supportsAdditiveRegistration = 524288,
+		eRegistrationConfirm_terminalAliasPattern = 262144,
+		eRegistrationConfirm_supportedPrefixes = 131072,
+		eRegistrationConfirm_usageSpec = 65536,
+		eRegistrationConfirm_featureServerAlias = 32768,
+		eRegistrationConfirm_capacityReportingSpec = 16384,
+		eRegistrationConfirm_featureSet = 8192,
+		eRegistrationConfirm_genericData = 4096,
+	} options;
+	RegistrationConfirm_callSignalAddress callSignalAddress;
+	unsigned int timeToLive;
+};
+
+typedef struct RegistrationConfirm RegistrationConfirm;
+
+struct UnregistrationRequest_callSignalAddress {
+	int count;
+	TransportAddress item[10];
+};
+
+typedef struct UnregistrationRequest_callSignalAddress UnregistrationRequest_callSignalAddress;
+
+struct UnregistrationRequest {
+	enum {
+		eUnregistrationRequest_endpointAlias = -2147483648,
+		eUnregistrationRequest_nonStandardData = 1073741824,
+		eUnregistrationRequest_endpointIdentifier = 536870912,
+		eUnregistrationRequest_alternateEndpoints = 268435456,
+		eUnregistrationRequest_gatekeeperIdentifier = 134217728,
+		eUnregistrationRequest_tokens = 67108864,
+		eUnregistrationRequest_cryptoTokens = 33554432,
+		eUnregistrationRequest_integrityCheckValue = 16777216,
+		eUnregistrationRequest_reason = 8388608,
+		eUnregistrationRequest_endpointAliasPattern = 4194304,
+		eUnregistrationRequest_supportedPrefixes = 2097152,
+		eUnregistrationRequest_alternateGatekeeper = 1048576,
+		eUnregistrationRequest_genericData = 524288,
+	} options;
+	UnregistrationRequest_callSignalAddress callSignalAddress;
+};
+
+typedef struct UnregistrationRequest UnregistrationRequest;
+
+struct AdmissionRequest {
+	enum {
+		eAdmissionRequest_callModel = -2147483648,
+		eAdmissionRequest_destinationInfo = 1073741824,
+		eAdmissionRequest_destCallSignalAddress = 536870912,
+		eAdmissionRequest_destExtraCallInfo = 268435456,
+		eAdmissionRequest_srcCallSignalAddress = 134217728,
+		eAdmissionRequest_nonStandardData = 67108864,
+		eAdmissionRequest_callServices = 33554432,
+		eAdmissionRequest_canMapAlias = 16777216,
+		eAdmissionRequest_callIdentifier = 8388608,
+		eAdmissionRequest_srcAlternatives = 4194304,
+		eAdmissionRequest_destAlternatives = 2097152,
+		eAdmissionRequest_gatekeeperIdentifier = 1048576,
+		eAdmissionRequest_tokens = 524288,
+		eAdmissionRequest_cryptoTokens = 262144,
+		eAdmissionRequest_integrityCheckValue = 131072,
+		eAdmissionRequest_transportQOS = 65536,
+		eAdmissionRequest_willSupplyUUIEs = 32768,
+		eAdmissionRequest_callLinkage = 16384,
+		eAdmissionRequest_gatewayDataRate = 8192,
+		eAdmissionRequest_capacity = 4096,
+		eAdmissionRequest_circuitInfo = 2048,
+		eAdmissionRequest_desiredProtocols = 1024,
+		eAdmissionRequest_desiredTunnelledProtocol = 512,
+		eAdmissionRequest_featureSet = 256,
+		eAdmissionRequest_genericData = 128,
+	} options;
+	TransportAddress destCallSignalAddress;
+	TransportAddress srcCallSignalAddress;
+};
+
+typedef struct AdmissionRequest AdmissionRequest;
+
+struct AdmissionConfirm {
+	enum {
+		eAdmissionConfirm_irrFrequency = -2147483648,
+		eAdmissionConfirm_nonStandardData = 1073741824,
+		eAdmissionConfirm_destinationInfo = 536870912,
+		eAdmissionConfirm_destExtraCallInfo = 268435456,
+		eAdmissionConfirm_destinationType = 134217728,
+		eAdmissionConfirm_remoteExtensionAddress = 67108864,
+		eAdmissionConfirm_alternateEndpoints = 33554432,
+		eAdmissionConfirm_tokens = 16777216,
+		eAdmissionConfirm_cryptoTokens = 8388608,
+		eAdmissionConfirm_integrityCheckValue = 4194304,
+		eAdmissionConfirm_transportQOS = 2097152,
+		eAdmissionConfirm_willRespondToIRR = 1048576,
+		eAdmissionConfirm_uuiesRequested = 524288,
+		eAdmissionConfirm_language = 262144,
+		eAdmissionConfirm_alternateTransportAddresses = 131072,
+		eAdmissionConfirm_useSpecifiedTransport = 65536,
+		eAdmissionConfirm_circuitInfo = 32768,
+		eAdmissionConfirm_usageSpec = 16384,
+		eAdmissionConfirm_supportedProtocols = 8192,
+		eAdmissionConfirm_serviceControl = 4096,
+		eAdmissionConfirm_multipleCalls = 2048,
+		eAdmissionConfirm_featureSet = 1024,
+		eAdmissionConfirm_genericData = 512,
+	} options;
+	TransportAddress destCallSignalAddress;
+};
+
+typedef struct AdmissionConfirm AdmissionConfirm;
+
+struct LocationRequest {
+	enum {
+		eLocationRequest_endpointIdentifier = -2147483648,
+		eLocationRequest_nonStandardData = 1073741824,
+		eLocationRequest_sourceInfo = 536870912,
+		eLocationRequest_canMapAlias = 268435456,
+		eLocationRequest_gatekeeperIdentifier = 134217728,
+		eLocationRequest_tokens = 67108864,
+		eLocationRequest_cryptoTokens = 33554432,
+		eLocationRequest_integrityCheckValue = 16777216,
+		eLocationRequest_desiredProtocols = 8388608,
+		eLocationRequest_desiredTunnelledProtocol = 4194304,
+		eLocationRequest_featureSet = 2097152,
+		eLocationRequest_genericData = 1048576,
+		eLocationRequest_hopCount = 524288,
+		eLocationRequest_circuitInfo = 262144,
+	} options;
+	TransportAddress replyAddress;
+};
+
+typedef struct LocationRequest LocationRequest;
+
+struct LocationConfirm {
+	enum {
+		eLocationConfirm_nonStandardData = -2147483648,
+		eLocationConfirm_destinationInfo = 1073741824,
+		eLocationConfirm_destExtraCallInfo = 536870912,
+		eLocationConfirm_destinationType = 268435456,
+		eLocationConfirm_remoteExtensionAddress = 134217728,
+		eLocationConfirm_alternateEndpoints = 67108864,
+		eLocationConfirm_tokens = 33554432,
+		eLocationConfirm_cryptoTokens = 16777216,
+		eLocationConfirm_integrityCheckValue = 8388608,
+		eLocationConfirm_alternateTransportAddresses = 4194304,
+		eLocationConfirm_supportedProtocols = 2097152,
+		eLocationConfirm_multipleCalls = 1048576,
+		eLocationConfirm_featureSet = 524288,
+		eLocationConfirm_genericData = 262144,
+		eLocationConfirm_circuitInfo = 131072,
+		eLocationConfirm_serviceControl = 65536,
+	} options;
+	TransportAddress callSignalAddress;
+	TransportAddress rasAddress;
+};
+
+typedef struct LocationConfirm LocationConfirm;
+
+struct InfoRequestResponse_callSignalAddress {
+	int count;
+	TransportAddress item[10];
+};
+
+typedef struct InfoRequestResponse_callSignalAddress InfoRequestResponse_callSignalAddress;
+
+struct InfoRequestResponse {
+	enum {
+		eInfoRequestResponse_nonStandardData = -2147483648,
+		eInfoRequestResponse_endpointAlias = 1073741824,
+		eInfoRequestResponse_perCallInfo = 536870912,
+		eInfoRequestResponse_tokens = 268435456,
+		eInfoRequestResponse_cryptoTokens = 134217728,
+		eInfoRequestResponse_integrityCheckValue = 67108864,
+		eInfoRequestResponse_needResponse = 33554432,
+		eInfoRequestResponse_capacity = 16777216,
+		eInfoRequestResponse_irrStatus = 8388608,
+		eInfoRequestResponse_unsolicited = 4194304,
+		eInfoRequestResponse_genericData = 2097152,
+	} options;
+	TransportAddress rasAddress;
+	InfoRequestResponse_callSignalAddress callSignalAddress;
+};
+
+typedef struct InfoRequestResponse InfoRequestResponse;
+
+struct RasMessage {
+	enum {
+		eRasMessage_gatekeeperRequest = 0,
+		eRasMessage_gatekeeperConfirm = 1,
+		eRasMessage_gatekeeperReject = 2,
+		eRasMessage_registrationRequest = 3,
+		eRasMessage_registrationConfirm = 4,
+		eRasMessage_registrationReject = 5,
+		eRasMessage_unregistrationRequest = 6,
+		eRasMessage_unregistrationConfirm = 7,
+		eRasMessage_unregistrationReject = 8,
+		eRasMessage_admissionRequest = 9,
+		eRasMessage_admissionConfirm = 10,
+		eRasMessage_admissionReject = 11,
+		eRasMessage_bandwidthRequest = 12,
+		eRasMessage_bandwidthConfirm = 13,
+		eRasMessage_bandwidthReject = 14,
+		eRasMessage_disengageRequest = 15,
+		eRasMessage_disengageConfirm = 16,
+		eRasMessage_disengageReject = 17,
+		eRasMessage_locationRequest = 18,
+		eRasMessage_locationConfirm = 19,
+		eRasMessage_locationReject = 20,
+		eRasMessage_infoRequest = 21,
+		eRasMessage_infoRequestResponse = 22,
+		eRasMessage_nonStandardMessage = 23,
+		eRasMessage_unknownMessageResponse = 24,
+		eRasMessage_requestInProgress = 25,
+		eRasMessage_resourcesAvailableIndicate = 26,
+		eRasMessage_resourcesAvailableConfirm = 27,
+		eRasMessage_infoRequestAck = 28,
+		eRasMessage_infoRequestNak = 29,
+		eRasMessage_serviceControlIndication = 30,
+		eRasMessage_serviceControlResponse = 31,
+	} choice;
+	union {
+		GatekeeperRequest gatekeeperRequest;
+		GatekeeperConfirm gatekeeperConfirm;
+		RegistrationRequest registrationRequest;
+		RegistrationConfirm registrationConfirm;
+		UnregistrationRequest unregistrationRequest;
+		AdmissionRequest admissionRequest;
+		AdmissionConfirm admissionConfirm;
+		LocationRequest locationRequest;
+		LocationConfirm locationConfirm;
+		InfoRequestResponse infoRequestResponse;
+	};
+};
+
+typedef struct RasMessage RasMessage;
+
+struct DataProtocolCapability {
+	enum {
+		eDataProtocolCapability_nonStandard = 0,
+		eDataProtocolCapability_v14buffered = 1,
+		eDataProtocolCapability_v42lapm = 2,
+		eDataProtocolCapability_hdlcFrameTunnelling = 3,
+		eDataProtocolCapability_h310SeparateVCStack = 4,
+		eDataProtocolCapability_h310SingleVCStack = 5,
+		eDataProtocolCapability_transparent = 6,
+		eDataProtocolCapability_segmentationAndReassembly = 7,
+		eDataProtocolCapability_hdlcFrameTunnelingwSAR = 8,
+		eDataProtocolCapability_v120 = 9,
+		eDataProtocolCapability_separateLANStack = 10,
+		eDataProtocolCapability_v76wCompression = 11,
+		eDataProtocolCapability_tcp = 12,
+		eDataProtocolCapability_udp = 13,
+	} choice;
+};
+
+typedef struct DataProtocolCapability DataProtocolCapability;
+
+struct DataApplicationCapability_application {
+	enum {
+		eDataApplicationCapability_application_nonStandard = 0,
+		eDataApplicationCapability_application_t120 = 1,
+		eDataApplicationCapability_application_dsm_cc = 2,
+		eDataApplicationCapability_application_userData = 3,
+		eDataApplicationCapability_application_t84 = 4,
+		eDataApplicationCapability_application_t434 = 5,
+		eDataApplicationCapability_application_h224 = 6,
+		eDataApplicationCapability_application_nlpid = 7,
+		eDataApplicationCapability_application_dsvdControl = 8,
+		eDataApplicationCapability_application_h222DataPartitioning = 9,
+		eDataApplicationCapability_application_t30fax = 10,
+		eDataApplicationCapability_application_t140 = 11,
+		eDataApplicationCapability_application_t38fax = 12,
+		eDataApplicationCapability_application_genericDataCapability = 13,
+	} choice;
+	union {
+		DataProtocolCapability t120;
+	};
+};
+
+typedef struct DataApplicationCapability_application DataApplicationCapability_application;
+
+struct DataApplicationCapability {
+	int options;
+	DataApplicationCapability_application application;
+};
+
+typedef struct DataApplicationCapability DataApplicationCapability;
+
+struct DataType {
+	enum {
+		eDataType_nonStandard = 0,
+		eDataType_nullData = 1,
+		eDataType_videoData = 2,
+		eDataType_audioData = 3,
+		eDataType_data = 4,
+		eDataType_encryptionData = 5,
+		eDataType_h235Control = 6,
+		eDataType_h235Media = 7,
+		eDataType_multiplexedStream = 8,
+	} choice;
+	union {
+		DataApplicationCapability data;
+	};
+};
+
+typedef struct DataType DataType;
+
+struct H2250LogicalChannelParameters {
+	enum {
+		eH2250LogicalChannelParameters_nonStandard = -2147483648,
+		eH2250LogicalChannelParameters_associatedSessionID = 1073741824,
+		eH2250LogicalChannelParameters_mediaChannel = 536870912,
+		eH2250LogicalChannelParameters_mediaGuaranteedDelivery = 268435456,
+		eH2250LogicalChannelParameters_mediaControlChannel = 134217728,
+		eH2250LogicalChannelParameters_mediaControlGuaranteedDelivery = 67108864,
+		eH2250LogicalChannelParameters_silenceSuppression = 33554432,
+		eH2250LogicalChannelParameters_destination = 16777216,
+		eH2250LogicalChannelParameters_dynamicRTPPayloadType = 8388608,
+		eH2250LogicalChannelParameters_mediaPacketization = 4194304,
+		eH2250LogicalChannelParameters_transportCapability = 2097152,
+		eH2250LogicalChannelParameters_redundancyEncoding = 1048576,
+		eH2250LogicalChannelParameters_source = 524288,
+	} options;
+	H245_TransportAddress mediaChannel;
+	H245_TransportAddress mediaControlChannel;
+};
+
+typedef struct H2250LogicalChannelParameters H2250LogicalChannelParameters;
+
+struct OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters {
+	enum {
+		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h222LogicalChannelParameters = 0,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h223LogicalChannelParameters = 1,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_v76LogicalChannelParameters = 2,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters = 3,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_none = 4,
+	} choice;
+	union {
+		H2250LogicalChannelParameters h2250LogicalChannelParameters;
+	};
+};
+
+typedef struct OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters;
+
+struct OpenLogicalChannel_forwardLogicalChannelParameters {
+	enum {
+		eOpenLogicalChannel_forwardLogicalChannelParameters_portNumber = -2147483648,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_forwardLogicalChannelDependency = 1073741824,
+		eOpenLogicalChannel_forwardLogicalChannelParameters_replacementFor = 536870912,
+	} options;
+	DataType dataType;
+	OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters multiplexParameters;
+};
+
+typedef struct OpenLogicalChannel_forwardLogicalChannelParameters OpenLogicalChannel_forwardLogicalChannelParameters;
+
+struct OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters {
+	enum {
+		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h223LogicalChannelParameters = 0,
+		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_v76LogicalChannelParameters = 1,
+		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters = 2,
+	} choice;
+	union {
+		H2250LogicalChannelParameters h2250LogicalChannelParameters;
+	};
+};
+
+typedef struct OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters;
+
+struct OpenLogicalChannel_reverseLogicalChannelParameters {
+	enum {
+		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters = -2147483648,
+		eOpenLogicalChannel_reverseLogicalChannelParameters_reverseLogicalChannelDependency = 1073741824,
+		eOpenLogicalChannel_reverseLogicalChannelParameters_replacementFor = 536870912,
+	} options;
+	OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters multiplexParameters;
+};
+
+typedef struct OpenLogicalChannel_reverseLogicalChannelParameters OpenLogicalChannel_reverseLogicalChannelParameters;
+
+struct NetworkAccessParameters_networkAddress {
+	enum {
+		eNetworkAccessParameters_networkAddress_q2931Address = 0,
+		eNetworkAccessParameters_networkAddress_e164Address = 1,
+		eNetworkAccessParameters_networkAddress_localAreaAddress = 2,
+	} choice;
+	union {
+		H245_TransportAddress localAreaAddress;
+	};
+};
+
+typedef struct NetworkAccessParameters_networkAddress NetworkAccessParameters_networkAddress;
+
+struct NetworkAccessParameters {
+	enum {
+		eNetworkAccessParameters_distribution = -2147483648,
+		eNetworkAccessParameters_externalReference = 1073741824,
+		eNetworkAccessParameters_t120SetupProcedure = 536870912,
+	} options;
+	NetworkAccessParameters_networkAddress networkAddress;
+};
+
+typedef struct NetworkAccessParameters NetworkAccessParameters;
+
+struct OpenLogicalChannel {
+	enum {
+		eOpenLogicalChannel_reverseLogicalChannelParameters = -2147483648,
+		eOpenLogicalChannel_separateStack = 1073741824,
+		eOpenLogicalChannel_encryptionSync = 536870912,
+	} options;
+	OpenLogicalChannel_forwardLogicalChannelParameters forwardLogicalChannelParameters;
+	OpenLogicalChannel_reverseLogicalChannelParameters reverseLogicalChannelParameters;
+	NetworkAccessParameters separateStack;
+};
+
+typedef struct OpenLogicalChannel OpenLogicalChannel;
+
+struct Setup_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct Setup_UUIE_fastStart Setup_UUIE_fastStart;
+
+struct Setup_UUIE {
+	enum {
+		eSetup_UUIE_h245Address = -2147483648,
+		eSetup_UUIE_sourceAddress = 1073741824,
+		eSetup_UUIE_destinationAddress = 536870912,
+		eSetup_UUIE_destCallSignalAddress = 268435456,
+		eSetup_UUIE_destExtraCallInfo = 134217728,
+		eSetup_UUIE_destExtraCRV = 67108864,
+		eSetup_UUIE_callServices = 33554432,
+		eSetup_UUIE_sourceCallSignalAddress = 16777216,
+		eSetup_UUIE_remoteExtensionAddress = 8388608,
+		eSetup_UUIE_callIdentifier = 4194304,
+		eSetup_UUIE_h245SecurityCapability = 2097152,
+		eSetup_UUIE_tokens = 1048576,
+		eSetup_UUIE_cryptoTokens = 524288,
+		eSetup_UUIE_fastStart = 262144,
+		eSetup_UUIE_mediaWaitForConnect = 131072,
+		eSetup_UUIE_canOverlapSend = 65536,
+		eSetup_UUIE_endpointIdentifier = 32768,
+		eSetup_UUIE_multipleCalls = 16384,
+		eSetup_UUIE_maintainConnection = 8192,
+		eSetup_UUIE_connectionParameters = 4096,
+		eSetup_UUIE_language = 2048,
+		eSetup_UUIE_presentationIndicator = 1024,
+		eSetup_UUIE_screeningIndicator = 512,
+		eSetup_UUIE_serviceControl = 256,
+		eSetup_UUIE_symmetricOperationRequired = 128,
+		eSetup_UUIE_capacity = 64,
+		eSetup_UUIE_circuitInfo = 32,
+		eSetup_UUIE_desiredProtocols = 16,
+		eSetup_UUIE_neededFeatures = 8,
+		eSetup_UUIE_desiredFeatures = 4,
+		eSetup_UUIE_supportedFeatures = 2,
+		eSetup_UUIE_parallelH245Control = 1,
+	} options;
+	TransportAddress h245Address;
+	TransportAddress destCallSignalAddress;
+	TransportAddress sourceCallSignalAddress;
+	Setup_UUIE_fastStart fastStart;
+};
+
+typedef struct Setup_UUIE Setup_UUIE;
+
+struct CallProceeding_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct CallProceeding_UUIE_fastStart CallProceeding_UUIE_fastStart;
+
+struct CallProceeding_UUIE {
+	enum {
+		eCallProceeding_UUIE_h245Address = -2147483648,
+		eCallProceeding_UUIE_callIdentifier = 1073741824,
+		eCallProceeding_UUIE_h245SecurityMode = 536870912,
+		eCallProceeding_UUIE_tokens = 268435456,
+		eCallProceeding_UUIE_cryptoTokens = 134217728,
+		eCallProceeding_UUIE_fastStart = 67108864,
+		eCallProceeding_UUIE_multipleCalls = 33554432,
+		eCallProceeding_UUIE_maintainConnection = 16777216,
+		eCallProceeding_UUIE_fastConnectRefused = 8388608,
+		eCallProceeding_UUIE_featureSet = 4194304,
+	} options;
+	TransportAddress h245Address;
+	CallProceeding_UUIE_fastStart fastStart;
+};
+
+typedef struct CallProceeding_UUIE CallProceeding_UUIE;
+
+struct Connect_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct Connect_UUIE_fastStart Connect_UUIE_fastStart;
+
+struct Connect_UUIE {
+	enum {
+		eConnect_UUIE_h245Address = -2147483648,
+		eConnect_UUIE_callIdentifier = 1073741824,
+		eConnect_UUIE_h245SecurityMode = 536870912,
+		eConnect_UUIE_tokens = 268435456,
+		eConnect_UUIE_cryptoTokens = 134217728,
+		eConnect_UUIE_fastStart = 67108864,
+		eConnect_UUIE_multipleCalls = 33554432,
+		eConnect_UUIE_maintainConnection = 16777216,
+		eConnect_UUIE_language = 8388608,
+		eConnect_UUIE_connectedAddress = 4194304,
+		eConnect_UUIE_presentationIndicator = 2097152,
+		eConnect_UUIE_screeningIndicator = 1048576,
+		eConnect_UUIE_fastConnectRefused = 524288,
+		eConnect_UUIE_serviceControl = 262144,
+		eConnect_UUIE_capacity = 131072,
+		eConnect_UUIE_featureSet = 65536,
+	} options;
+	TransportAddress h245Address;
+	Connect_UUIE_fastStart fastStart;
+};
+
+typedef struct Connect_UUIE Connect_UUIE;
+
+struct Alerting_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct Alerting_UUIE_fastStart Alerting_UUIE_fastStart;
+
+struct Alerting_UUIE {
+	enum {
+		eAlerting_UUIE_h245Address = -2147483648,
+		eAlerting_UUIE_callIdentifier = 1073741824,
+		eAlerting_UUIE_h245SecurityMode = 536870912,
+		eAlerting_UUIE_tokens = 268435456,
+		eAlerting_UUIE_cryptoTokens = 134217728,
+		eAlerting_UUIE_fastStart = 67108864,
+		eAlerting_UUIE_multipleCalls = 33554432,
+		eAlerting_UUIE_maintainConnection = 16777216,
+		eAlerting_UUIE_alertingAddress = 8388608,
+		eAlerting_UUIE_presentationIndicator = 4194304,
+		eAlerting_UUIE_screeningIndicator = 2097152,
+		eAlerting_UUIE_fastConnectRefused = 1048576,
+		eAlerting_UUIE_serviceControl = 524288,
+		eAlerting_UUIE_capacity = 262144,
+		eAlerting_UUIE_featureSet = 131072,
+	} options;
+	TransportAddress h245Address;
+	Alerting_UUIE_fastStart fastStart;
+};
+
+typedef struct Alerting_UUIE Alerting_UUIE;
+
+struct FacilityReason {
+	enum {
+		eFacilityReason_routeCallToGatekeeper = 0,
+		eFacilityReason_callForwarded = 1,
+		eFacilityReason_routeCallToMC = 2,
+		eFacilityReason_undefinedReason = 3,
+		eFacilityReason_conferenceListChoice = 4,
+		eFacilityReason_startH245 = 5,
+		eFacilityReason_noH245 = 6,
+		eFacilityReason_newTokens = 7,
+		eFacilityReason_featureSetUpdate = 8,
+		eFacilityReason_forwardedElements = 9,
+		eFacilityReason_transportedInformation = 10,
+	} choice;
+};
+
+typedef struct FacilityReason FacilityReason;
+
+struct Facility_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct Facility_UUIE_fastStart Facility_UUIE_fastStart;
+
+struct Facility_UUIE {
+	enum {
+		eFacility_UUIE_alternativeAddress = -2147483648,
+		eFacility_UUIE_alternativeAliasAddress = 1073741824,
+		eFacility_UUIE_conferenceID = 536870912,
+		eFacility_UUIE_callIdentifier = 268435456,
+		eFacility_UUIE_destExtraCallInfo = 134217728,
+		eFacility_UUIE_remoteExtensionAddress = 67108864,
+		eFacility_UUIE_tokens = 33554432,
+		eFacility_UUIE_cryptoTokens = 16777216,
+		eFacility_UUIE_conferences = 8388608,
+		eFacility_UUIE_h245Address = 4194304,
+		eFacility_UUIE_fastStart = 2097152,
+		eFacility_UUIE_multipleCalls = 1048576,
+		eFacility_UUIE_maintainConnection = 524288,
+		eFacility_UUIE_fastConnectRefused = 262144,
+		eFacility_UUIE_serviceControl = 131072,
+		eFacility_UUIE_circuitInfo = 65536,
+		eFacility_UUIE_featureSet = 32768,
+		eFacility_UUIE_destinationInfo = 16384,
+		eFacility_UUIE_h245SecurityMode = 8192,
+	} options;
+	TransportAddress alternativeAddress;
+	FacilityReason reason;
+	TransportAddress h245Address;
+	Facility_UUIE_fastStart fastStart;
+};
+
+typedef struct Facility_UUIE Facility_UUIE;
+
+struct Progress_UUIE_fastStart {
+	int count;
+	OpenLogicalChannel item[30];
+};
+
+typedef struct Progress_UUIE_fastStart Progress_UUIE_fastStart;
+
+struct Progress_UUIE {
+	enum {
+		eProgress_UUIE_h245Address = -2147483648,
+		eProgress_UUIE_h245SecurityMode = 1073741824,
+		eProgress_UUIE_tokens = 536870912,
+		eProgress_UUIE_cryptoTokens = 268435456,
+		eProgress_UUIE_fastStart = 134217728,
+		eProgress_UUIE_multipleCalls = 67108864,
+		eProgress_UUIE_maintainConnection = 33554432,
+		eProgress_UUIE_fastConnectRefused = 16777216,
+	} options;
+	TransportAddress h245Address;
+	Progress_UUIE_fastStart fastStart;
+};
+
+typedef struct Progress_UUIE Progress_UUIE;
+
+struct H323_UU_PDU_h323_message_body {
+	enum {
+		eH323_UU_PDU_h323_message_body_setup = 0,
+		eH323_UU_PDU_h323_message_body_callProceeding = 1,
+		eH323_UU_PDU_h323_message_body_connect = 2,
+		eH323_UU_PDU_h323_message_body_alerting = 3,
+		eH323_UU_PDU_h323_message_body_information = 4,
+		eH323_UU_PDU_h323_message_body_releaseComplete = 5,
+		eH323_UU_PDU_h323_message_body_facility = 6,
+		eH323_UU_PDU_h323_message_body_progress = 7,
+		eH323_UU_PDU_h323_message_body_empty = 8,
+		eH323_UU_PDU_h323_message_body_status = 9,
+		eH323_UU_PDU_h323_message_body_statusInquiry = 10,
+		eH323_UU_PDU_h323_message_body_setupAcknowledge = 11,
+		eH323_UU_PDU_h323_message_body_notify = 12,
+	} choice;
+	union {
+		Setup_UUIE setup;
+		CallProceeding_UUIE callProceeding;
+		Connect_UUIE connect;
+		Alerting_UUIE alerting;
+		Facility_UUIE facility;
+		Progress_UUIE progress;
+	};
+};
+
+typedef struct H323_UU_PDU_h323_message_body H323_UU_PDU_h323_message_body;
+
+struct RequestMessage {
+	enum {
+		eRequestMessage_nonStandard = 0,
+		eRequestMessage_masterSlaveDetermination = 1,
+		eRequestMessage_terminalCapabilitySet = 2,
+		eRequestMessage_openLogicalChannel = 3,
+		eRequestMessage_closeLogicalChannel = 4,
+		eRequestMessage_requestChannelClose = 5,
+		eRequestMessage_multiplexEntrySend = 6,
+		eRequestMessage_requestMultiplexEntry = 7,
+		eRequestMessage_requestMode = 8,
+		eRequestMessage_roundTripDelayRequest = 9,
+		eRequestMessage_maintenanceLoopRequest = 10,
+		eRequestMessage_communicationModeRequest = 11,
+		eRequestMessage_conferenceRequest = 12,
+		eRequestMessage_multilinkRequest = 13,
+		eRequestMessage_logicalChannelRateRequest = 14,
+	} choice;
+	union {
+		OpenLogicalChannel openLogicalChannel;
+	};
+};
+
+typedef struct RequestMessage RequestMessage;
+
+struct OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters {
+	enum {
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_h222LogicalChannelParameters = 0,
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters = 1,
+	} choice;
+	union {
+		H2250LogicalChannelParameters h2250LogicalChannelParameters;
+	};
+};
+
+typedef struct OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters;
+
+struct OpenLogicalChannelAck_reverseLogicalChannelParameters {
+	enum {
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters_portNumber = -2147483648,
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters = 1073741824,
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters_replacementFor = 536870912,
+	} options;
+	OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters multiplexParameters;
+};
+
+typedef struct OpenLogicalChannelAck_reverseLogicalChannelParameters OpenLogicalChannelAck_reverseLogicalChannelParameters;
+
+struct H2250LogicalChannelAckParameters {
+	enum {
+		eH2250LogicalChannelAckParameters_nonStandard = -2147483648,
+		eH2250LogicalChannelAckParameters_sessionID = 1073741824,
+		eH2250LogicalChannelAckParameters_mediaChannel = 536870912,
+		eH2250LogicalChannelAckParameters_mediaControlChannel = 268435456,
+		eH2250LogicalChannelAckParameters_dynamicRTPPayloadType = 134217728,
+		eH2250LogicalChannelAckParameters_flowControlToZero = 67108864,
+		eH2250LogicalChannelAckParameters_portNumber = 33554432,
+	} options;
+	H245_TransportAddress mediaChannel;
+	H245_TransportAddress mediaControlChannel;
+};
+
+typedef struct H2250LogicalChannelAckParameters H2250LogicalChannelAckParameters;
+
+struct OpenLogicalChannelAck_forwardMultiplexAckParameters {
+	enum {
+		eOpenLogicalChannelAck_forwardMultiplexAckParameters_h2250LogicalChannelAckParameters = 0,
+	} choice;
+	union {
+		H2250LogicalChannelAckParameters h2250LogicalChannelAckParameters;
+	};
+};
+
+typedef struct OpenLogicalChannelAck_forwardMultiplexAckParameters OpenLogicalChannelAck_forwardMultiplexAckParameters;
+
+struct OpenLogicalChannelAck {
+	enum {
+		eOpenLogicalChannelAck_reverseLogicalChannelParameters = -2147483648,
+		eOpenLogicalChannelAck_separateStack = 1073741824,
+		eOpenLogicalChannelAck_forwardMultiplexAckParameters = 536870912,
+		eOpenLogicalChannelAck_encryptionSync = 268435456,
+	} options;
+	OpenLogicalChannelAck_reverseLogicalChannelParameters reverseLogicalChannelParameters;
+	NetworkAccessParameters separateStack;
+	OpenLogicalChannelAck_forwardMultiplexAckParameters forwardMultiplexAckParameters;
+};
+
+typedef struct OpenLogicalChannelAck OpenLogicalChannelAck;
+
+struct ResponseMessage {
+	enum {
+		eResponseMessage_nonStandard = 0,
+		eResponseMessage_masterSlaveDeterminationAck = 1,
+		eResponseMessage_masterSlaveDeterminationReject = 2,
+		eResponseMessage_terminalCapabilitySetAck = 3,
+		eResponseMessage_terminalCapabilitySetReject = 4,
+		eResponseMessage_openLogicalChannelAck = 5,
+		eResponseMessage_openLogicalChannelReject = 6,
+		eResponseMessage_closeLogicalChannelAck = 7,
+		eResponseMessage_requestChannelCloseAck = 8,
+		eResponseMessage_requestChannelCloseReject = 9,
+		eResponseMessage_multiplexEntrySendAck = 10,
+		eResponseMessage_multiplexEntrySendReject = 11,
+		eResponseMessage_requestMultiplexEntryAck = 12,
+		eResponseMessage_requestMultiplexEntryReject = 13,
+		eResponseMessage_requestModeAck = 14,
+		eResponseMessage_requestModeReject = 15,
+		eResponseMessage_roundTripDelayResponse = 16,
+		eResponseMessage_maintenanceLoopAck = 17,
+		eResponseMessage_maintenanceLoopReject = 18,
+		eResponseMessage_communicationModeResponse = 19,
+		eResponseMessage_conferenceResponse = 20,
+		eResponseMessage_multilinkResponse = 21,
+		eResponseMessage_logicalChannelRateAcknowledge = 22,
+		eResponseMessage_logicalChannelRateReject = 23,
+	} choice;
+	union {
+		OpenLogicalChannelAck openLogicalChannelAck;
+	};
+};
+
+typedef struct ResponseMessage ResponseMessage;
+
+struct MultimediaSystemControlMessage {
+	enum {
+		eMultimediaSystemControlMessage_request = 0,
+		eMultimediaSystemControlMessage_response = 1,
+		eMultimediaSystemControlMessage_command = 2,
+		eMultimediaSystemControlMessage_indication = 3,
+	} choice;
+	union {
+		RequestMessage request;
+		ResponseMessage response;
+	};
+};
+
+typedef struct MultimediaSystemControlMessage MultimediaSystemControlMessage;
+
+struct H323_UU_PDU_h245Control {
+	int count;
+	MultimediaSystemControlMessage item[4];
+};
+
+typedef struct H323_UU_PDU_h245Control H323_UU_PDU_h245Control;
+
+struct H323_UU_PDU {
+	enum {
+		eH323_UU_PDU_nonStandardData = -2147483648,
+		eH323_UU_PDU_h4501SupplementaryService = 1073741824,
+		eH323_UU_PDU_h245Tunneling = 536870912,
+		eH323_UU_PDU_h245Control = 268435456,
+		eH323_UU_PDU_nonStandardControl = 134217728,
+		eH323_UU_PDU_callLinkage = 67108864,
+		eH323_UU_PDU_tunnelledSignallingMessage = 33554432,
+		eH323_UU_PDU_provisionalRespToH245Tunneling = 16777216,
+		eH323_UU_PDU_stimulusControl = 8388608,
+		eH323_UU_PDU_genericData = 4194304,
+	} options;
+	H323_UU_PDU_h323_message_body h323_message_body;
+	H323_UU_PDU_h245Control h245Control;
+};
+
+typedef struct H323_UU_PDU H323_UU_PDU;
+
+struct H323_UserInformation {
+	enum {
+		eH323_UserInformation_user_data = -2147483648,
+	} options;
+	H323_UU_PDU h323_uu_pdu;
+};
+
+typedef struct H323_UserInformation H323_UserInformation;
+
+typedef struct {
+	enum {
+		Q931_NationalEscape = 0,
+		Q931_Alerting = 1,
+		Q931_CallProceeding = 2,
+		Q931_Connect = 7,
+		Q931_ConnectAck = 15,
+		Q931_Progress = 3,
+		Q931_Setup = 5,
+		Q931_SetupAck = 13,
+		Q931_Resume = 38,
+		Q931_ResumeAck = 46,
+		Q931_ResumeReject = 34,
+		Q931_Suspend = 37,
+		Q931_SuspendAck = 45,
+		Q931_SuspendReject = 33,
+		Q931_UserInformation = 32,
+		Q931_Disconnect = 69,
+		Q931_Release = 77,
+		Q931_ReleaseComplete = 90,
+		Q931_Restart = 70,
+		Q931_RestartAck = 78,
+		Q931_Segment = 96,
+		Q931_CongestionCtrl = 121,
+		Q931_Information = 123,
+		Q931_Notify = 110,
+		Q931_Status = 125,
+		Q931_StatusEnquiry = 117,
+		Q931_Facility = 98,
+	} MessageType;
+	H323_UserInformation UUIE;
+} Q931;
+
+struct nf_ct_h323_master {
+	__be16 sig_port[2];
+	__be16 rtp_port[8];
+	union {
+		u_int32_t timeout;
+		u_int16_t tpkt_len[2];
+	};
+};
+
+struct field_t {
+	unsigned char type;
+	unsigned char sz;
+	unsigned char lb;
+	unsigned char ub;
+	unsigned short attr;
+	unsigned short offset;
+	const struct field_t *fields;
+};
+
+struct bitstr;
+
+typedef int (*decoder_t)(struct bitstr *, const struct field_t *, char *, int);
+
+struct bitstr {
+	unsigned char *buf;
+	unsigned char *beg;
+	unsigned char *end;
+	unsigned char *cur;
+	unsigned int bit;
+};
+
+struct PptpControlHeader;
+
+union pptp_ctrl_union;
+
+struct nf_nat_pptp_hook {
+	int (*outbound)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, struct PptpControlHeader *, union pptp_ctrl_union *);
+	int (*inbound)(struct sk_buff *, struct nf_conn *, enum ip_conntrack_info, unsigned int, struct PptpControlHeader *, union pptp_ctrl_union *);
+	void (*exp_gre)(struct nf_conntrack_expect *, struct nf_conntrack_expect *);
+	void (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);
+};
+
+struct PptpControlHeader {
+	__be16 messageType;
+	__u16 reserved;
+};
+
+struct PptpStartSessionRequest {
+	__be16 protocolVersion;
+	__u16 reserved1;
+	__be32 framingCapability;
+	__be32 bearerCapability;
+	__be16 maxChannels;
+	__be16 firmwareRevision;
+	__u8 hostName[64];
+	__u8 vendorString[64];
+};
+
+struct PptpStartSessionReply {
+	__be16 protocolVersion;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be32 framingCapability;
+	__be32 bearerCapability;
+	__be16 maxChannels;
+	__be16 firmwareRevision;
+	__u8 hostName[64];
+	__u8 vendorString[64];
+};
+
+struct PptpStopSessionRequest {
+	__u8 reason;
+	__u8 reserved1;
+	__u16 reserved2;
+};
+
+struct PptpStopSessionReply {
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__u16 reserved1;
+};
+
+struct PptpOutCallRequest {
+	__be16 callID;
+	__be16 callSerialNumber;
+	__be32 minBPS;
+	__be32 maxBPS;
+	__be32 bearerType;
+	__be32 framingType;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__be16 phoneNumberLength;
+	__u16 reserved1;
+	__u8 phoneNumber[64];
+	__u8 subAddress[64];
+};
+
+struct PptpOutCallReply {
+	__be16 callID;
+	__be16 peersCallID;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be16 causeCode;
+	__be32 connectSpeed;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__be32 physChannelID;
+};
+
+struct PptpInCallRequest {
+	__be16 callID;
+	__be16 callSerialNumber;
+	__be32 callBearerType;
+	__be32 physChannelID;
+	__be16 dialedNumberLength;
+	__be16 dialingNumberLength;
+	__u8 dialedNumber[64];
+	__u8 dialingNumber[64];
+	__u8 subAddress[64];
+};
+
+struct PptpInCallReply {
+	__be16 callID;
+	__be16 peersCallID;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__u16 reserved;
+};
+
+struct PptpInCallConnected {
+	__be16 peersCallID;
+	__u16 reserved;
+	__be32 connectSpeed;
+	__be16 packetWindow;
+	__be16 packetProcDelay;
+	__be32 callFramingType;
+};
+
+struct PptpClearCallRequest {
+	__be16 callID;
+	__u16 reserved;
+};
+
+struct PptpCallDisconnectNotify {
+	__be16 callID;
+	__u8 resultCode;
+	__u8 generalErrorCode;
+	__be16 causeCode;
+	__u16 reserved;
+	__u8 callStatistics[128];
+};
+
+struct PptpWanErrorNotify {
+	__be16 peersCallID;
+	__u16 reserved;
+	__be32 crcErrors;
+	__be32 framingErrors;
+	__be32 hardwareOverRuns;
+	__be32 bufferOverRuns;
+	__be32 timeoutErrors;
+	__be32 alignmentErrors;
+};
+
+struct PptpSetLinkInfo {
+	__be16 peersCallID;
+	__u16 reserved;
+	__be32 sendAccm;
+	__be32 recvAccm;
+};
+
+union pptp_ctrl_union {
+	struct PptpStartSessionRequest sreq;
+	struct PptpStartSessionReply srep;
+	struct PptpStopSessionRequest streq;
+	struct PptpStopSessionReply strep;
+	struct PptpOutCallRequest ocreq;
+	struct PptpOutCallReply ocack;
+	struct PptpInCallRequest icreq;
+	struct PptpInCallReply icack;
+	struct PptpInCallConnected iccon;
+	struct PptpClearCallRequest clrreq;
+	struct PptpCallDisconnectNotify disc;
+	struct PptpWanErrorNotify wanerr;
+	struct PptpSetLinkInfo setlink;
+};
+
+struct pptp_pkt_hdr {
+	__u16 packetLength;
+	__be16 packetType;
+	__be32 magicCookie;
+};
+
+enum sane_state {
+	SANE_STATE_NORMAL = 0,
+	SANE_STATE_START_REQUESTED = 1,
+};
+
+struct sane_request {
+	__be32 RPC_code;
+	__be32 handle;
+};
+
+struct sane_reply_net_start {
+	__be32 status;
+	__be16 zero;
+	__be16 port;
+};
+
+struct nf_ct_sane_master {
+	enum sane_state state;
+};
+
+struct tftphdr {
+	__be16 opcode;
+};
+
+enum ctattr_nat {
+	CTA_NAT_UNSPEC = 0,
+	CTA_NAT_V4_MINIP = 1,
+	CTA_NAT_V4_MAXIP = 2,
+	CTA_NAT_PROTO = 3,
+	CTA_NAT_V6_MINIP = 4,
+	CTA_NAT_V6_MAXIP = 5,
+	__CTA_NAT_MAX = 6,
+};
+
+enum ctattr_protonat {
+	CTA_PROTONAT_UNSPEC = 0,
+	CTA_PROTONAT_PORT_MIN = 1,
+	CTA_PROTONAT_PORT_MAX = 2,
+	__CTA_PROTONAT_MAX = 3,
+};
+
+struct nf_nat_pptp {
+	__be16 pns_call_id;
+	__be16 pac_call_id;
+};
+
+union nf_conntrack_nat_help {
+	struct nf_nat_pptp nat_pptp_info;
+};
+
+struct nf_conn_nat {
+	union nf_conntrack_nat_help help;
+	int masq_index;
+};
+
+struct nf_nat_range2 {
+	unsigned int flags;
+	union nf_inet_addr min_addr;
+	union nf_inet_addr max_addr;
+	union nf_conntrack_man_proto min_proto;
+	union nf_conntrack_man_proto max_proto;
+	union nf_conntrack_man_proto base_proto;
+};
+
+struct nf_nat_proto_clean {
+	u8 l3proto;
+	u8 l4proto;
+};
+
+struct nf_nat_lookup_hook_priv {
+	struct nf_hook_entries __attribute__((btf_type_tag("rcu"))) *entries;
+	struct callback_head callback_head;
+};
+
+struct nf_nat_hooks_net {
+	struct nf_hook_ops *nat_hook_ops;
+	unsigned int users;
+};
+
+struct nat_net {
+	struct nf_nat_hooks_net nat_proto_net[11];
+};
+
+struct inet6_ifaddr {
+	struct in6_addr addr;
+	__u32 prefix_len;
+	__u32 rt_priority;
+	__u32 valid_lft;
+	__u32 prefered_lft;
+	refcount_t refcnt;
+	spinlock_t lock;
+	int state;
+	__u32 flags;
+	__u8 dad_probes;
+	__u8 stable_privacy_retry;
+	__u16 scope;
+	__u64 dad_nonce;
+	unsigned long cstamp;
+	unsigned long tstamp;
+	struct delayed_work dad_work;
+	struct inet6_dev *idev;
+	struct fib6_info *rt;
+	struct hlist_node addr_lst;
+	struct list_head if_list;
+	struct list_head if_list_aux;
+	struct list_head tmp_list;
+	struct inet6_ifaddr *ifpub;
+	int regen_count;
+	bool tokenized;
+	u8 ifa_proto;
+	struct callback_head rcu;
+	struct in6_addr peer_addr;
+};
+
+struct masq_dev_work {
+	struct work_struct work;
+	struct net *net;
+	netns_tracker ns_tracker;
+	union nf_inet_addr addr;
+	int ifindex;
+	int (*iter)(struct nf_conn *, void *);
+};
+
+struct nf_conncount_tuple {
+	struct list_head node;
+	struct nf_conntrack_tuple tuple;
+	struct nf_conntrack_zone zone;
+	int cpu;
+	u32 jiffies32;
+};
+
+struct nf_conncount_list {
+	spinlock_t list_lock;
+	u32 last_gc;
+	struct list_head head;
+	unsigned int count;
+};
+
+struct nf_conncount_rb {
+	struct rb_node node;
+	struct nf_conncount_list list;
+	u32 key[5];
+	struct callback_head callback_head;
+};
+
+struct nf_conncount_data {
+	unsigned int keylen;
+	struct rb_root root[256];
+	struct net *net;
+	struct work_struct gc_work;
+	unsigned long pending_trees[4];
+	unsigned int gc_tree;
+};
+
+struct xt_af {
+	struct mutex mutex;
+	struct list_head match;
+	struct list_head target;
+};
+
+enum {
+	MTTG_TRAV_INIT = 0,
+	MTTG_TRAV_NFP_UNSPEC = 1,
+	MTTG_TRAV_NFP_SPEC = 2,
+	MTTG_TRAV_DONE = 3,
+};
+
+struct xt_action_param;
+
+struct xt_mtchk_param;
+
+struct xt_mtdtor_param;
+
+struct xt_match {
+	struct list_head list;
+	const char name[29];
+	u_int8_t revision;
+	bool (*match)(const struct sk_buff *, struct xt_action_param *);
+	int (*checkentry)(const struct xt_mtchk_param *);
+	void (*destroy)(const struct xt_mtdtor_param *);
+	struct module *me;
+	const char *table;
+	unsigned int matchsize;
+	unsigned int usersize;
+	unsigned int hooks;
+	unsigned short proto;
+	unsigned short family;
+};
+
+struct xt_target;
+
+struct xt_action_param {
+	union {
+		const struct xt_match *match;
+		const struct xt_target *target;
+	};
+	union {
+		const void *matchinfo;
+		const void *targinfo;
+	};
+	const struct nf_hook_state *state;
+	unsigned int thoff;
+	u16 fragoff;
+	bool hotdrop;
+};
+
+struct xt_tgchk_param;
+
+struct xt_tgdtor_param;
+
+struct xt_target {
+	struct list_head list;
+	const char name[29];
+	u_int8_t revision;
+	unsigned int (*target)(struct sk_buff *, const struct xt_action_param *);
+	int (*checkentry)(const struct xt_tgchk_param *);
+	void (*destroy)(const struct xt_tgdtor_param *);
+	struct module *me;
+	const char *table;
+	unsigned int targetsize;
+	unsigned int usersize;
+	unsigned int hooks;
+	unsigned short proto;
+	unsigned short family;
+};
+
+struct xt_tgchk_param {
+	struct net *net;
+	const char *table;
+	const void *entryinfo;
+	const struct xt_target *target;
+	void *targinfo;
+	unsigned int hook_mask;
+	u_int8_t family;
+	bool nft_compat;
+};
+
+struct xt_tgdtor_param {
+	struct net *net;
+	const struct xt_target *target;
+	void *targinfo;
+	u_int8_t family;
+};
+
+struct xt_mtchk_param {
+	struct net *net;
+	const char *table;
+	const void *entryinfo;
+	const struct xt_match *match;
+	void *matchinfo;
+	unsigned int hook_mask;
+	u_int8_t family;
+	bool nft_compat;
+};
+
+struct xt_mtdtor_param {
+	struct net *net;
+	const struct xt_match *match;
+	void *matchinfo;
+	u_int8_t family;
+};
+
+struct xt_table_info;
+
+struct xt_table {
+	struct list_head list;
+	unsigned int valid_hooks;
+	struct xt_table_info *private;
+	struct nf_hook_ops *ops;
+	struct module *me;
+	u_int8_t af;
+	int priority;
+	const char name[32];
+};
+
+struct xt_table_info {
+	unsigned int size;
+	unsigned int number;
+	unsigned int initial_entries;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int stacksize;
+	void ***jumpstack;
+	unsigned char entries[0];
+};
+
+struct xt_template {
+	struct list_head list;
+	int (*table_init)(struct net *);
+	struct module *me;
+	char name[32];
+};
+
+struct xt_entry_match {
+	union {
+		struct {
+			__u16 match_size;
+			char name[29];
+			__u8 revision;
+		} user;
+		struct {
+			__u16 match_size;
+			struct xt_match *match;
+		} kernel;
+		__u16 match_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct nf_mttg_trav {
+	struct list_head *head;
+	struct list_head *curr;
+	uint8_t class;
+};
+
+struct xt_counters {
+	__u64 pcnt;
+	__u64 bcnt;
+};
+
+struct xt_entry_target {
+	union {
+		struct {
+			__u16 target_size;
+			char name[29];
+			__u8 revision;
+		} user;
+		struct {
+			__u16 target_size;
+			struct xt_target *target;
+		} kernel;
+		__u16 target_size;
+	} u;
+	unsigned char data[0];
+};
+
+struct xt_error_target {
+	struct xt_entry_target target;
+	char errorname[30];
+};
+
+struct xt_standard_target {
+	struct xt_entry_target target;
+	int verdict;
+};
+
+struct xt_counters_info {
+	char name[32];
+	unsigned int num_counters;
+	struct xt_counters counters[0];
+};
+
+struct xt_pernet {
+	struct list_head tables[11];
+};
+
+struct xt_percpu_counter_alloc_state {
+	unsigned int off;
+	const char __attribute__((btf_type_tag("percpu"))) *mem;
+};
+
+struct xt_tcp {
+	__u16 spts[2];
+	__u16 dpts[2];
+	__u8 option;
+	__u8 flg_mask;
+	__u8 flg_cmp;
+	__u8 invflags;
+};
+
+struct xt_udp {
+	__u16 spts[2];
+	__u16 dpts[2];
+	__u8 invflags;
+};
+
+struct ipt_icmp {
+	__u8 type;
+	__u8 code[2];
+	__u8 invflags;
+};
+
+struct ip6t_icmp {
+	__u8 type;
+	__u8 code[2];
+	__u8 invflags;
+};
+
+struct xt_mark_mtinfo1 {
+	__u32 mark;
+	__u32 mask;
+	__u8 invert;
+};
+
+struct xt_mark_tginfo2 {
+	__u32 mark;
+	__u32 mask;
+};
+
+enum {
+	XT_CONNMARK_SET = 0,
+	XT_CONNMARK_SAVE = 1,
+	XT_CONNMARK_RESTORE = 2,
+};
+
+enum {
+	D_SHIFT_LEFT = 0,
+	D_SHIFT_RIGHT = 1,
+};
+
+struct xt_connmark_mtinfo1 {
+	__u32 mark;
+	__u32 mask;
+	__u8 invert;
+};
+
+struct xt_connmark_tginfo2 {
+	__u32 ctmark;
+	__u32 ctmask;
+	__u32 nfmask;
+	__u8 shift_dir;
+	__u8 shift_bits;
+	__u8 mode;
+};
+
+struct xt_connmark_tginfo1 {
+	__u32 ctmark;
+	__u32 ctmask;
+	__u32 nfmask;
+	__u8 mode;
+};
+
+struct nf_nat_ipv4_range {
+	unsigned int flags;
+	__be32 min_ip;
+	__be32 max_ip;
+	union nf_conntrack_man_proto min;
+	union nf_conntrack_man_proto max;
+};
+
+struct nf_nat_ipv4_multi_range_compat {
+	unsigned int rangesize;
+	struct nf_nat_ipv4_range range[1];
+};
+
+struct nf_nat_range {
+	unsigned int flags;
+	union nf_inet_addr min_addr;
+	union nf_inet_addr max_addr;
+	union nf_conntrack_man_proto min_proto;
+	union nf_conntrack_man_proto max_proto;
+};
+
+struct xt_classify_target_info {
+	__u32 priority;
+};
+
+enum {
+	CONNSECMARK_SAVE = 1,
+	CONNSECMARK_RESTORE = 2,
+};
+
+struct xt_connsecmark_target_info {
+	__u8 mode;
+};
+
+enum {
+	XT_CT_NOTRACK = 1,
+	XT_CT_NOTRACK_ALIAS = 2,
+	XT_CT_ZONE_DIR_ORIG = 4,
+	XT_CT_ZONE_DIR_REPL = 8,
+	XT_CT_ZONE_MARK = 16,
+	XT_CT_MASK = 31,
+};
+
+struct xt_ct_target_info_v1 {
+	__u16 flags;
+	__u16 zone;
+	__u32 ct_events;
+	__u32 exp_events;
+	char helper[16];
+	char timeout[32];
+	struct nf_conn *ct;
+};
+
+struct ipt_ip {
+	struct in_addr src;
+	struct in_addr dst;
+	struct in_addr smsk;
+	struct in_addr dmsk;
+	char iniface[16];
+	char outiface[16];
+	unsigned char iniface_mask[16];
+	unsigned char outiface_mask[16];
+	__u16 proto;
+	__u8 flags;
+	__u8 invflags;
+};
+
+struct ipt_entry {
+	struct ipt_ip ip;
+	unsigned int nfcache;
+	__u16 target_offset;
+	__u16 next_offset;
+	unsigned int comefrom;
+	struct xt_counters counters;
+	unsigned char elems[0];
+};
+
+struct ip6t_ip6 {
+	struct in6_addr src;
+	struct in6_addr dst;
+	struct in6_addr smsk;
+	struct in6_addr dmsk;
+	char iniface[16];
+	char outiface[16];
+	unsigned char iniface_mask[16];
+	unsigned char outiface_mask[16];
+	__u16 proto;
+	__u8 tos;
+	__u8 flags;
+	__u8 invflags;
+};
+
+struct ip6t_entry {
+	struct ip6t_ip6 ipv6;
+	unsigned int nfcache;
+	__u16 target_offset;
+	__u16 next_offset;
+	unsigned int comefrom;
+	struct xt_counters counters;
+	unsigned char elems[0];
+};
+
+struct xt_ct_target_info {
+	__u16 flags;
+	__u16 zone;
+	__u32 ct_events;
+	__u32 exp_events;
+	char helper[16];
+	struct nf_conn *ct;
+};
+
+struct xt_DSCP_info {
+	__u8 dscp;
+};
+
+struct xt_tos_target_info {
+	__u8 tos_value;
+	__u8 tos_mask;
+};
+
+struct xt_nflog_info {
+	__u32 len;
+	__u16 group;
+	__u16 threshold;
+	__u16 flags;
+	__u16 pad;
+	char prefix[64];
+};
+
+struct xt_NFQ_info_v1 {
+	__u16 queuenum;
+	__u16 queues_total;
+};
+
+struct xt_NFQ_info {
+	__u16 queuenum;
+};
+
+struct xt_NFQ_info_v3 {
+	__u16 queuenum;
+	__u16 queues_total;
+	__u16 flags;
+};
+
+struct xt_NFQ_info_v2 {
+	__u16 queuenum;
+	__u16 queues_total;
+	__u16 bypass;
+};
+
+struct xt_secmark_target_info_v1 {
+	__u8 mode;
+	char secctx[256];
+	__u32 secid;
+};
+
+struct xt_secmark_target_info {
+	__u8 mode;
+	__u32 secid;
+	char secctx[256];
+};
+
+enum nf_tproxy_lookup_t {
+	NF_TPROXY_LOOKUP_LISTENER = 0,
+	NF_TPROXY_LOOKUP_ESTABLISHED = 1,
+};
+
+struct xt_tproxy_target_info {
+	__u32 mark_mask;
+	__u32 mark_value;
+	__be32 laddr;
+	__be16 lport;
+};
+
+struct xt_tproxy_target_info_v1 {
+	__u32 mark_mask;
+	__u32 mark_value;
+	union nf_inet_addr laddr;
+	__be16 lport;
+};
+
+struct xt_tcpmss_info {
+	__u16 mss;
+};
+
+struct xt_tee_tginfo;
+
+struct xt_tee_priv {
+	struct list_head list;
+	struct xt_tee_tginfo *tginfo;
+	int oif;
+};
+
+struct xt_tee_tginfo {
+	union nf_inet_addr gw;
+	char oif[16];
+	struct xt_tee_priv *priv;
+};
+
+struct tee_net {
+	struct list_head priv_list;
+	struct mutex lock;
+};
+
+struct idletimer_tg {
+	struct list_head entry;
+	struct alarm alarm;
+	struct timer_list timer;
+	struct work_struct work;
+	struct kobject *kobj;
+	struct device_attribute attr;
+	struct timespec64 delayed_timer_trigger;
+	struct timespec64 last_modified_timer;
+	struct timespec64 last_suspend_time;
+	struct notifier_block pm_nb;
+	int timeout;
+	unsigned int refcnt;
+	u8 timer_type;
+	bool work_pending;
+	bool send_nl_msg;
+	bool active;
+	uid_t uid;
+	bool suspend_time_valid;
+};
+
+struct idletimer_tg_info {
+	__u32 timeout;
+	char label[28];
+	struct idletimer_tg *timer;
+};
+
+struct idletimer_tg_info_v1 {
+	__u32 timeout;
+	char label[28];
+	__u8 send_nl_msg;
+	__u8 timer_type;
+	struct idletimer_tg *timer;
+};
+
+enum xt_bpf_modes {
+	XT_BPF_MODE_BYTECODE = 0,
+	XT_BPF_MODE_FD_PINNED = 1,
+	XT_BPF_MODE_FD_ELF = 2,
+};
+
+struct xt_bpf_info {
+	__u16 bpf_program_num_elem;
+	struct sock_filter bpf_program[64];
+	struct bpf_prog *filter;
+};
+
+struct xt_bpf_info_v1 {
+	__u16 mode;
+	__u16 bpf_program_num_elem;
+	__s32 fd;
+	union {
+		struct sock_filter bpf_program[64];
+		char path[512];
+	};
+	struct bpf_prog *filter;
+};
+
+enum xt_connbytes_what {
+	XT_CONNBYTES_PKTS = 0,
+	XT_CONNBYTES_BYTES = 1,
+	XT_CONNBYTES_AVGPKT = 2,
+};
+
+enum xt_connbytes_direction {
+	XT_CONNBYTES_DIR_ORIGINAL = 0,
+	XT_CONNBYTES_DIR_REPLY = 1,
+	XT_CONNBYTES_DIR_BOTH = 2,
+};
+
+struct xt_connbytes_info {
+	struct {
+		__u64 from;
+		__u64 to;
+	} count;
+	__u8 what;
+	__u8 direction;
+};
+
+enum {
+	XT_CONNLIMIT_INVERT = 1,
+	XT_CONNLIMIT_DADDR = 2,
+};
+
+struct xt_connlimit_info {
+	union {
+		union nf_inet_addr mask;
+	};
+	unsigned int limit;
+	__u32 flags;
+	struct nf_conncount_data *data;
+};
+
+enum {
+	XT_CONNTRACK_STATE = 1,
+	XT_CONNTRACK_PROTO = 2,
+	XT_CONNTRACK_ORIGSRC = 4,
+	XT_CONNTRACK_ORIGDST = 8,
+	XT_CONNTRACK_REPLSRC = 16,
+	XT_CONNTRACK_REPLDST = 32,
+	XT_CONNTRACK_STATUS = 64,
+	XT_CONNTRACK_EXPIRES = 128,
+	XT_CONNTRACK_ORIGSRC_PORT = 256,
+	XT_CONNTRACK_ORIGDST_PORT = 512,
+	XT_CONNTRACK_REPLSRC_PORT = 1024,
+	XT_CONNTRACK_REPLDST_PORT = 2048,
+	XT_CONNTRACK_DIRECTION = 4096,
+	XT_CONNTRACK_STATE_ALIAS = 8192,
+};
+
+struct xt_conntrack_mtinfo2 {
+	union nf_inet_addr origsrc_addr;
+	union nf_inet_addr origsrc_mask;
+	union nf_inet_addr origdst_addr;
+	union nf_inet_addr origdst_mask;
+	union nf_inet_addr replsrc_addr;
+	union nf_inet_addr replsrc_mask;
+	union nf_inet_addr repldst_addr;
+	union nf_inet_addr repldst_mask;
+	__u32 expires_min;
+	__u32 expires_max;
+	__u16 l4proto;
+	__be16 origsrc_port;
+	__be16 origdst_port;
+	__be16 replsrc_port;
+	__be16 repldst_port;
+	__u16 match_flags;
+	__u16 invert_flags;
+	__u16 state_mask;
+	__u16 status_mask;
+};
+
+struct xt_conntrack_mtinfo3 {
+	union nf_inet_addr origsrc_addr;
+	union nf_inet_addr origsrc_mask;
+	union nf_inet_addr origdst_addr;
+	union nf_inet_addr origdst_mask;
+	union nf_inet_addr replsrc_addr;
+	union nf_inet_addr replsrc_mask;
+	union nf_inet_addr repldst_addr;
+	union nf_inet_addr repldst_mask;
+	__u32 expires_min;
+	__u32 expires_max;
+	__u16 l4proto;
+	__u16 origsrc_port;
+	__u16 origdst_port;
+	__u16 replsrc_port;
+	__u16 repldst_port;
+	__u16 match_flags;
+	__u16 invert_flags;
+	__u16 state_mask;
+	__u16 status_mask;
+	__u16 origsrc_port_high;
+	__u16 origdst_port_high;
+	__u16 replsrc_port_high;
+	__u16 repldst_port_high;
+};
+
+struct xt_conntrack_mtinfo1 {
+	union nf_inet_addr origsrc_addr;
+	union nf_inet_addr origsrc_mask;
+	union nf_inet_addr origdst_addr;
+	union nf_inet_addr origdst_mask;
+	union nf_inet_addr replsrc_addr;
+	union nf_inet_addr replsrc_mask;
+	union nf_inet_addr repldst_addr;
+	union nf_inet_addr repldst_mask;
+	__u32 expires_min;
+	__u32 expires_max;
+	__u16 l4proto;
+	__be16 origsrc_port;
+	__be16 origdst_port;
+	__be16 replsrc_port;
+	__be16 repldst_port;
+	__u16 match_flags;
+	__u16 invert_flags;
+	__u8 state_mask;
+	__u8 status_mask;
+};
+
+struct xt_dscp_info {
+	__u8 dscp;
+	__u8 invert;
+};
+
+struct xt_tos_match_info {
+	__u8 tos_mask;
+	__u8 tos_value;
+	__u8 invert;
+};
+
+struct xt_ecn_info {
+	__u8 operation;
+	__u8 invert;
+	__u8 ip_ect;
+	union {
+		struct {
+			__u8 ect;
+		} tcp;
+	} proto;
+};
+
+struct xt_esp {
+	__u32 spis[2];
+	__u8 invflags;
+};
+
+enum {
+	XT_HASHLIMIT_HASH_DIP = 1,
+	XT_HASHLIMIT_HASH_DPT = 2,
+	XT_HASHLIMIT_HASH_SIP = 4,
+	XT_HASHLIMIT_HASH_SPT = 8,
+	XT_HASHLIMIT_INVERT = 16,
+	XT_HASHLIMIT_BYTES = 32,
+	XT_HASHLIMIT_RATE_MATCH = 64,
+};
+
+struct hashlimit_cfg1 {
+	__u32 mode;
+	__u32 avg;
+	__u32 burst;
+	__u32 size;
+	__u32 max;
+	__u32 gc_interval;
+	__u32 expire;
+	__u8 srcmask;
+	__u8 dstmask;
+};
+
+struct hashlimit_cfg2 {
+	__u64 avg;
+	__u64 burst;
+	__u32 mode;
+	__u32 size;
+	__u32 max;
+	__u32 gc_interval;
+	__u32 expire;
+	__u8 srcmask;
+	__u8 dstmask;
+};
+
+struct dsthash_dst {
+	union {
+		struct {
+			__be32 src;
+			__be32 dst;
+		} ip;
+		struct {
+			__be32 src[4];
+			__be32 dst[4];
+		} ip6;
+	};
+	__be16 src_port;
+	__be16 dst_port;
+};
+
+struct dsthash_ent {
+	struct hlist_node node;
+	struct dsthash_dst dst;
+	spinlock_t lock;
+	unsigned long expires;
+	struct {
+		unsigned long prev;
+		union {
+			struct {
+				u_int64_t credit;
+				u_int64_t credit_cap;
+				u_int64_t cost;
+			};
+			struct {
+				u_int32_t interval;
+				u_int32_t prev_window;
+				u_int64_t current_rate;
+				u_int64_t rate;
+				int64_t burst;
+			};
+		};
+	} rateinfo;
+	struct callback_head rcu;
+};
+
+struct hashlimit_cfg3 {
+	__u64 avg;
+	__u64 burst;
+	__u32 mode;
+	__u32 size;
+	__u32 max;
+	__u32 gc_interval;
+	__u32 expire;
+	__u32 interval;
+	__u8 srcmask;
+	__u8 dstmask;
+};
+
+struct xt_hashlimit_htable {
+	struct hlist_node node;
+	refcount_t use;
+	u_int8_t family;
+	bool rnd_initialized;
+	struct hashlimit_cfg3 cfg;
+	spinlock_t lock;
+	u_int32_t rnd;
+	unsigned int count;
+	struct delayed_work gc_work;
+	struct proc_dir_entry *pde;
+	const char *name;
+	struct net *net;
+	struct hlist_head hash[0];
+};
+
+struct hashlimit_net {
+	struct hlist_head htables;
+	struct proc_dir_entry *ipt_hashlimit;
+	struct proc_dir_entry *ip6t_hashlimit;
+};
+
+struct xt_hashlimit_mtinfo1 {
+	char name[16];
+	struct hashlimit_cfg1 cfg;
+	struct xt_hashlimit_htable *hinfo;
+};
+
+struct xt_hashlimit_mtinfo2 {
+	char name[255];
+	struct hashlimit_cfg2 cfg;
+	struct xt_hashlimit_htable *hinfo;
+};
+
+struct xt_hashlimit_mtinfo3 {
+	char name[255];
+	struct hashlimit_cfg3 cfg;
+	struct xt_hashlimit_htable *hinfo;
+};
+
+struct xt_helper_info {
+	int invert;
+	char name[30];
+};
+
+enum {
+	IPT_TTL_EQ = 0,
+	IPT_TTL_NE = 1,
+	IPT_TTL_LT = 2,
+	IPT_TTL_GT = 3,
+};
+
+enum {
+	IP6T_HL_EQ = 0,
+	IP6T_HL_NE = 1,
+	IP6T_HL_LT = 2,
+	IP6T_HL_GT = 3,
+};
+
+struct ipt_ttl_info {
+	__u8 mode;
+	__u8 ttl;
+};
+
+struct ip6t_hl_info {
+	__u8 mode;
+	__u8 hop_limit;
+};
+
+enum {
+	IPRANGE_SRC = 1,
+	IPRANGE_DST = 2,
+	IPRANGE_SRC_INV = 16,
+	IPRANGE_DST_INV = 32,
+};
+
+struct xt_iprange_mtinfo {
+	union nf_inet_addr src_min;
+	union nf_inet_addr src_max;
+	union nf_inet_addr dst_min;
+	union nf_inet_addr dst_max;
+	__u8 flags;
+};
+
+enum xt_l2tp_type {
+	XT_L2TP_TYPE_CONTROL = 0,
+	XT_L2TP_TYPE_DATA = 1,
+};
+
+enum {
+	XT_L2TP_TID = 1,
+	XT_L2TP_SID = 2,
+	XT_L2TP_VERSION = 4,
+	XT_L2TP_TYPE = 8,
+};
+
+struct xt_l2tp_info {
+	__u32 tid;
+	__u32 sid;
+	__u8 version;
+	__u8 type;
+	__u8 flags;
+};
+
+struct l2tp_data {
+	u32 tid;
+	u32 sid;
+	u8 type;
+	u8 version;
+};
+
+union l2tp_val {
+	__be16 val16[2];
+	__be32 val32;
+};
+
+struct xt_length_info {
+	__u16 min;
+	__u16 max;
+	__u8 invert;
+};
+
+struct xt_limit_priv;
+
+struct xt_rateinfo {
+	__u32 avg;
+	__u32 burst;
+	unsigned long prev;
+	__u32 credit;
+	__u32 credit_cap;
+	__u32 cost;
+	struct xt_limit_priv *master;
+};
+
+struct xt_limit_priv {
+	unsigned long prev;
+	u32 credit;
+};
+
+struct xt_mac_info {
+	unsigned char srcaddr[6];
+	int invert;
+};
+
+enum xt_multiport_flags {
+	XT_MULTIPORT_SOURCE = 0,
+	XT_MULTIPORT_DESTINATION = 1,
+	XT_MULTIPORT_EITHER = 2,
+};
+
+struct xt_multiport_v1 {
+	__u8 flags;
+	__u8 count;
+	__u16 ports[15];
+	__u8 pflags[15];
+	__u8 invert;
+};
+
+enum {
+	XT_OWNER_UID = 1,
+	XT_OWNER_GID = 2,
+	XT_OWNER_SOCKET = 4,
+	XT_OWNER_SUPPL_GROUPS = 8,
+};
+
+struct xt_owner_match_info {
+	__u32 uid_min;
+	__u32 uid_max;
+	__u32 gid_min;
+	__u32 gid_max;
+	__u8 match;
+	__u8 invert;
+};
+
+struct xt_pkttype_info {
+	int pkttype;
+	int invert;
+};
+
+enum xt_policy_flags {
+	XT_POLICY_MATCH_IN = 1,
+	XT_POLICY_MATCH_OUT = 2,
+	XT_POLICY_MATCH_NONE = 4,
+	XT_POLICY_MATCH_STRICT = 8,
+};
+
+struct xt_policy_spec {
+	__u8 saddr: 1;
+	__u8 daddr: 1;
+	__u8 proto: 1;
+	__u8 mode: 1;
+	__u8 spi: 1;
+	__u8 reqid: 1;
+};
+
+struct xt_policy_elem {
+	union {
+		struct {
+			union nf_inet_addr saddr;
+			union nf_inet_addr smask;
+			union nf_inet_addr daddr;
+			union nf_inet_addr dmask;
+		};
+	};
+	__be32 spi;
+	__u32 reqid;
+	__u8 proto;
+	__u8 mode;
+	struct xt_policy_spec match;
+	struct xt_policy_spec invert;
+};
+
+struct xt_policy_info {
+	struct xt_policy_elem pol[4];
+	__u16 flags;
+	__u16 len;
+};
+
+enum xt_quota_flags {
+	XT_QUOTA_INVERT = 1,
+};
+
+struct xt_quota_priv;
+
+struct xt_quota_info {
+	__u32 flags;
+	__u32 pad;
+	__u64 quota;
+	struct xt_quota_priv *master;
+};
+
+struct xt_quota_priv {
+	spinlock_t lock;
+	uint64_t quota;
+};
+
+enum xt_quota_flags___2 {
+	XT_QUOTA_INVERT___2 = 1,
+	XT_QUOTA_GROW = 2,
+	XT_QUOTA_PACKET = 4,
+	XT_QUOTA_NO_CHANGE = 8,
+	XT_QUOTA_MASK = 15,
+};
+
+struct xt_quota_counter {
+	u_int64_t quota;
+	spinlock_t lock;
+	struct list_head list;
+	atomic_t ref;
+	char name[15];
+	struct proc_dir_entry *procfs_entry;
+};
+
+struct ulog_packet_msg {
+	unsigned long mark;
+	long timestamp_sec;
+	long timestamp_usec;
+	unsigned int hook;
+	char indev_name[16];
+	char outdev_name[16];
+	size_t data_len;
+	char prefix[32];
+	unsigned char mac_len;
+	unsigned char mac[80];
+	unsigned char payload[0];
+};
+
+typedef struct ulog_packet_msg ulog_packet_msg_t;
+
+struct xt_quota_mtinfo2 {
+	char name[15];
+	u_int8_t flags;
+	__u64 quota;
+	struct xt_quota_counter *master;
+};
+
+struct xt_socket_mtinfo1 {
+	__u8 flags;
+};
+
+enum {
+	XT_SOCKET_TRANSPARENT = 1,
+	XT_SOCKET_NOWILDCARD = 2,
+	XT_SOCKET_RESTORESKMARK = 4,
+};
+
+struct xt_socket_mtinfo2 {
+	__u8 flags;
+};
+
+struct xt_socket_mtinfo3 {
+	__u8 flags;
+};
+
+struct xt_state_info {
+	unsigned int statemask;
+};
+
+enum xt_statistic_flags {
+	XT_STATISTIC_INVERT = 1,
+};
+
+enum xt_statistic_mode {
+	XT_STATISTIC_MODE_RANDOM = 0,
+	XT_STATISTIC_MODE_NTH = 1,
+	__XT_STATISTIC_MODE_MAX = 2,
+};
+
+struct xt_statistic_priv;
+
+struct xt_statistic_info {
+	__u16 mode;
+	__u16 flags;
+	union {
+		struct {
+			__u32 probability;
+		} random;
+		struct {
+			__u32 every;
+			__u32 packet;
+			__u32 count;
+		} nth;
+	} u;
+	struct xt_statistic_priv *master;
+};
+
+struct xt_statistic_priv {
+	atomic_t count;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+enum {
+	XT_STRING_FLAG_INVERT = 1,
+	XT_STRING_FLAG_IGNORECASE = 2,
+};
+
+struct xt_string_info {
+	__u16 from_offset;
+	__u16 to_offset;
+	char algo[16];
+	char pattern[128];
+	__u8 patlen;
+	union {
+		struct {
+			__u8 invert;
+		} v0;
+		struct {
+			__u8 flags;
+		} v1;
+	} u;
+	struct ts_config *config;
+};
+
+enum {
+	XT_TIME_LOCAL_TZ = 1,
+	XT_TIME_CONTIGUOUS = 2,
+	XT_TIME_ALL_MONTHDAYS = 4294967294,
+	XT_TIME_ALL_WEEKDAYS = 254,
+	XT_TIME_MIN_DAYTIME = 0,
+	XT_TIME_MAX_DAYTIME = 86399,
+};
+
+enum {
+	DSE_FIRST = 2039,
+	SECONDS_PER_DAY = 86400,
+};
+
+struct xtm {
+	u_int8_t month;
+	u_int8_t monthday;
+	u_int8_t weekday;
+	u_int8_t hour;
+	u_int8_t minute;
+	u_int8_t second;
+	unsigned int dse;
+};
+
+struct xt_time_info {
+	__u32 date_start;
+	__u32 date_stop;
+	__u32 daytime_start;
+	__u32 daytime_stop;
+	__u32 monthdays_match;
+	__u8 weekdays_match;
+	__u8 flags;
+};
+
+enum xt_u32_ops {
+	XT_U32_AND = 0,
+	XT_U32_LEFTSH = 1,
+	XT_U32_RIGHTSH = 2,
+	XT_U32_AT = 3,
+};
+
+struct xt_u32_location_element {
+	__u32 number;
+	__u8 nextop;
+};
+
+struct xt_u32_value_element {
+	__u32 min;
+	__u32 max;
+};
+
+struct xt_u32_test {
+	struct xt_u32_location_element location[11];
+	struct xt_u32_value_element value[11];
+	__u8 nnums;
+	__u8 nvalues;
+};
+
+struct xt_u32 {
+	struct xt_u32_test tests[11];
+	__u8 ntests;
+	__u8 invert;
+};
+
+struct uncached_list {
+	spinlock_t lock;
+	struct list_head head;
+	struct list_head quarantine;
+};
+
+struct ip_sf_list {
+	struct ip_sf_list *sf_next;
+	unsigned long sf_count[2];
+	__be32 sf_inaddr;
+	unsigned char sf_gsresp;
+	unsigned char sf_oldin;
+	unsigned char sf_crcount;
+};
+
+struct rt_cache_stat {
+	unsigned int in_slow_tot;
+	unsigned int in_slow_mc;
+	unsigned int in_no_route;
+	unsigned int in_brd;
+	unsigned int in_martian_dst;
+	unsigned int in_martian_src;
+	unsigned int out_slow_tot;
+	unsigned int out_slow_mc;
+};
+
+struct ip_sf_socklist {
+	unsigned int sl_max;
+	unsigned int sl_count;
+	struct callback_head rcu;
+	__be32 sl_addr[0];
+};
+
+typedef u8 dscp_t;
+
+struct fib_alias {
+	struct hlist_node fa_list;
+	struct fib_info *fa_info;
+	dscp_t fa_dscp;
+	u8 fa_type;
+	u8 fa_state;
+	u8 fa_slen;
+	u32 tb_id;
+	s16 fa_default;
+	u8 offload;
+	u8 trap;
+	u8 offload_failed;
+	struct callback_head rcu;
+};
+
+struct ipv4_addr_key {
+	__be32 addr;
+	int vif;
+};
+
+struct inetpeer_addr {
+	union {
+		struct ipv4_addr_key a4;
+		struct in6_addr a6;
+		u32 key[4];
+	};
+	__u16 family;
+};
+
+struct inet_peer {
+	struct rb_node rb_node;
+	struct inetpeer_addr daddr;
+	u32 metrics[17];
+	u32 rate_tokens;
+	u32 n_redirects;
+	unsigned long rate_last;
+	union {
+		struct {
+			atomic_t rid;
+		};
+		struct callback_head rcu;
+	};
+	__u32 dtime;
+	refcount_t refcnt;
+};
+
+struct rtmsg {
+	unsigned char rtm_family;
+	unsigned char rtm_dst_len;
+	unsigned char rtm_src_len;
+	unsigned char rtm_tos;
+	unsigned char rtm_table;
+	unsigned char rtm_protocol;
+	unsigned char rtm_scope;
+	unsigned char rtm_type;
+	unsigned int rtm_flags;
+};
+
+struct fib_rt_info {
+	struct fib_info *fi;
+	u32 tb_id;
+	__be32 dst;
+	int dst_len;
+	dscp_t dscp;
+	u8 type;
+	u8 offload: 1;
+	u8 trap: 1;
+	u8 offload_failed: 1;
+	u8 unused: 5;
+};
+
+struct rtvia {
+	__kernel_sa_family_t rtvia_family;
+	__u8 rtvia_addr[0];
+};
+
+struct net_offload {
+	struct offload_callbacks callbacks;
+	unsigned int flags;
+};
+
+struct raw_hashinfo {
+	spinlock_t lock;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	struct hlist_head ht[256];
+};
+
+enum ip_defrag_users {
+	IP_DEFRAG_LOCAL_DELIVER = 0,
+	IP_DEFRAG_CALL_RA_CHAIN = 1,
+	IP_DEFRAG_CONNTRACK_IN = 2,
+	__IP_DEFRAG_CONNTRACK_IN_END = 65537,
+	IP_DEFRAG_CONNTRACK_OUT = 65538,
+	__IP_DEFRAG_CONNTRACK_OUT_END = 131073,
+	IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,
+	__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,
+	IP_DEFRAG_VS_IN = 196610,
+	IP_DEFRAG_VS_OUT = 196611,
+	IP_DEFRAG_VS_FWD = 196612,
+	IP_DEFRAG_AF_PACKET = 196613,
+	IP_DEFRAG_MACVLAN = 196614,
+};
+
+enum {
+	XFRM_DEV_OFFLOAD_UNSPECIFIED = 0,
+	XFRM_DEV_OFFLOAD_CRYPTO = 1,
+	XFRM_DEV_OFFLOAD_PACKET = 2,
+};
+
+enum {
+	INET_FRAG_FIRST_IN = 1,
+	INET_FRAG_LAST_IN = 2,
+	INET_FRAG_COMPLETE = 4,
+	INET_FRAG_HASH_DEAD = 8,
+	INET_FRAG_DROP = 16,
+};
+
+struct ipq {
+	struct inet_frag_queue q;
+	u8 ecn;
+	u16 max_df_size;
+	int iif;
+	unsigned int rid;
+	struct inet_peer *peer;
+};
+
+enum pkt_hash_types {
+	PKT_HASH_TYPE_NONE = 0,
+	PKT_HASH_TYPE_L2 = 1,
+	PKT_HASH_TYPE_L3 = 2,
+	PKT_HASH_TYPE_L4 = 3,
+};
+
+enum {
+	LWTUNNEL_XMIT_DONE = 0,
+	LWTUNNEL_XMIT_CONTINUE = 256,
+};
+
+struct ip_frag_state {
+	bool DF;
+	unsigned int hlen;
+	unsigned int ll_rs;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	__be16 not_last_frag;
+};
+
+struct ip_fraglist_iter {
+	struct sk_buff *frag;
+	struct iphdr *iph;
+	int offset;
+	unsigned int hlen;
+};
+
+struct ipcm_cookie {
+	struct sockcm_cookie sockc;
+	__be32 addr;
+	int oif;
+	struct ip_options_rcu *opt;
+	__u8 protocol;
+	__u8 ttl;
+	__s16 tos;
+	char priority;
+	__u16 gso_size;
+	u64 android_kabi_reserved1;
+};
+
+struct ip_reply_arg {
+	struct kvec iov[1];
+	int flags;
+	__wsum csum;
+	int csumoffset;
+	int bound_dev_if;
+	u8 tos;
+	kuid_t uid;
+};
+
+struct ip_options_data {
+	struct ip_options_rcu opt;
+	char data[40];
+};
+
+struct in_pktinfo {
+	int ipi_ifindex;
+	struct in_addr ipi_spec_dst;
+	struct in_addr ipi_addr;
+};
+
+struct ip_mreq_source {
+	__be32 imr_multiaddr;
+	__be32 imr_interface;
+	__be32 imr_sourceaddr;
+};
+
+struct ip_msfilter {
+	__be32 imsf_multiaddr;
+	__be32 imsf_interface;
+	__u32 imsf_fmode;
+	__u32 imsf_numsrc;
+	union {
+		__be32 imsf_slist[1];
+		struct {
+			struct {} __empty_imsf_slist_flex;
+			__be32 imsf_slist_flex[0];
+		};
+	};
+};
+
+struct group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+};
+
+struct compat_group_source_req {
+	__u32 gsr_interface;
+	struct __kernel_sockaddr_storage gsr_group;
+	struct __kernel_sockaddr_storage gsr_source;
+} __attribute__((packed));
+
+struct group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		};
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		};
+	};
+};
+
+struct compat_group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+} __attribute__((packed));
+
+struct group_req {
+	__u32 gr_interface;
+	struct __kernel_sockaddr_storage gr_group;
+};
+
+struct compat_group_filter {
+	union {
+		struct {
+			__u32 gf_interface_aux;
+			struct __kernel_sockaddr_storage gf_group_aux;
+			__u32 gf_fmode_aux;
+			__u32 gf_numsrc_aux;
+			struct __kernel_sockaddr_storage gf_slist[1];
+		} __attribute__((packed));
+		struct {
+			__u32 gf_interface;
+			struct __kernel_sockaddr_storage gf_group;
+			__u32 gf_fmode;
+			__u32 gf_numsrc;
+			struct __kernel_sockaddr_storage gf_slist_flex[0];
+		} __attribute__((packed));
+	};
+};
+
+typedef u32 inet_ehashfn_t(const struct net *, const __be32, const __u16, const __be32, const __be16);
+
+struct tcpvegas_info {
+	__u32 tcpv_enabled;
+	__u32 tcpv_rttcnt;
+	__u32 tcpv_rtt;
+	__u32 tcpv_minrtt;
+};
+
+struct tcp_dctcp_info {
+	__u16 dctcp_enabled;
+	__u16 dctcp_ce_state;
+	__u32 dctcp_alpha;
+	__u32 dctcp_ab_ecn;
+	__u32 dctcp_ab_tot;
+};
+
+struct tcp_bbr_info {
+	__u32 bbr_bw_lo;
+	__u32 bbr_bw_hi;
+	__u32 bbr_min_rtt;
+	__u32 bbr_pacing_gain;
+	__u32 bbr_cwnd_gain;
+};
+
+union tcp_cc_info {
+	struct tcpvegas_info vegas;
+	struct tcp_dctcp_info dctcp;
+	struct tcp_bbr_info bbr;
+};
+
+enum tsq_enum {
+	TSQ_THROTTLED = 0,
+	TSQ_QUEUED = 1,
+	TCP_TSQ_DEFERRED = 2,
+	TCP_WRITE_TIMER_DEFERRED = 3,
+	TCP_DELACK_TIMER_DEFERRED = 4,
+	TCP_MTU_REDUCED_DEFERRED = 5,
+};
+
+enum tcp_chrono {
+	TCP_CHRONO_UNSPEC = 0,
+	TCP_CHRONO_BUSY = 1,
+	TCP_CHRONO_RWND_LIMITED = 2,
+	TCP_CHRONO_SNDBUF_LIMITED = 3,
+	__TCP_CHRONO_MAX = 4,
+};
+
+enum {
+	TCP_NO_QUEUE = 0,
+	TCP_RECV_QUEUE = 1,
+	TCP_SEND_QUEUE = 2,
+	TCP_QUEUES_NR = 3,
+};
+
+enum inet_csk_ack_state_t {
+	ICSK_ACK_SCHED = 1,
+	ICSK_ACK_TIMER = 2,
+	ICSK_ACK_PUSHED = 4,
+	ICSK_ACK_PUSHED2 = 8,
+	ICSK_ACK_NOW = 16,
+	ICSK_ACK_NOMEM = 32,
+};
+
+enum {
+	TCP_CMSG_INQ = 1,
+	TCP_CMSG_TS = 2,
+};
+
+enum {
+	BPF_TCP_ESTABLISHED = 1,
+	BPF_TCP_SYN_SENT = 2,
+	BPF_TCP_SYN_RECV = 3,
+	BPF_TCP_FIN_WAIT1 = 4,
+	BPF_TCP_FIN_WAIT2 = 5,
+	BPF_TCP_TIME_WAIT = 6,
+	BPF_TCP_CLOSE = 7,
+	BPF_TCP_CLOSE_WAIT = 8,
+	BPF_TCP_LAST_ACK = 9,
+	BPF_TCP_LISTEN = 10,
+	BPF_TCP_CLOSING = 11,
+	BPF_TCP_NEW_SYN_RECV = 12,
+	BPF_TCP_MAX_STATES = 13,
+};
+
+enum {
+	TCP_MIB_NUM = 0,
+	TCP_MIB_RTOALGORITHM = 1,
+	TCP_MIB_RTOMIN = 2,
+	TCP_MIB_RTOMAX = 3,
+	TCP_MIB_MAXCONN = 4,
+	TCP_MIB_ACTIVEOPENS = 5,
+	TCP_MIB_PASSIVEOPENS = 6,
+	TCP_MIB_ATTEMPTFAILS = 7,
+	TCP_MIB_ESTABRESETS = 8,
+	TCP_MIB_CURRESTAB = 9,
+	TCP_MIB_INSEGS = 10,
+	TCP_MIB_OUTSEGS = 11,
+	TCP_MIB_RETRANSSEGS = 12,
+	TCP_MIB_INERRS = 13,
+	TCP_MIB_OUTRSTS = 14,
+	TCP_MIB_CSUMERRORS = 15,
+	__TCP_MIB_MAX = 16,
+};
+
+enum {
+	TCP_NLA_PAD = 0,
+	TCP_NLA_BUSY = 1,
+	TCP_NLA_RWND_LIMITED = 2,
+	TCP_NLA_SNDBUF_LIMITED = 3,
+	TCP_NLA_DATA_SEGS_OUT = 4,
+	TCP_NLA_TOTAL_RETRANS = 5,
+	TCP_NLA_PACING_RATE = 6,
+	TCP_NLA_DELIVERY_RATE = 7,
+	TCP_NLA_SND_CWND = 8,
+	TCP_NLA_REORDERING = 9,
+	TCP_NLA_MIN_RTT = 10,
+	TCP_NLA_RECUR_RETRANS = 11,
+	TCP_NLA_DELIVERY_RATE_APP_LMT = 12,
+	TCP_NLA_SNDQ_SIZE = 13,
+	TCP_NLA_CA_STATE = 14,
+	TCP_NLA_SND_SSTHRESH = 15,
+	TCP_NLA_DELIVERED = 16,
+	TCP_NLA_DELIVERED_CE = 17,
+	TCP_NLA_BYTES_SENT = 18,
+	TCP_NLA_BYTES_RETRANS = 19,
+	TCP_NLA_DSACK_DUPS = 20,
+	TCP_NLA_REORD_SEEN = 21,
+	TCP_NLA_SRTT = 22,
+	TCP_NLA_TIMEOUT_REHASH = 23,
+	TCP_NLA_BYTES_NOTSENT = 24,
+	TCP_NLA_EDT = 25,
+	TCP_NLA_TTL = 26,
+	TCP_NLA_REHASH = 27,
+};
+
+struct tcp_skb_cb {
+	__u32 seq;
+	__u32 end_seq;
+	union {
+		__u32 tcp_tw_isn;
+		struct {
+			u16 tcp_gso_segs;
+			u16 tcp_gso_size;
+		};
+	};
+	__u8 tcp_flags;
+	__u8 sacked;
+	__u8 ip_dsfield;
+	__u8 txstamp_ack: 1;
+	__u8 eor: 1;
+	__u8 has_rxtstamp: 1;
+	__u8 unused: 5;
+	__u32 ack_seq;
+	union {
+		struct {
+			__u32 is_app_limited: 1;
+			__u32 delivered_ce: 20;
+			__u32 unused: 11;
+			__u32 delivered;
+			u64 first_tx_mstamp;
+			u64 delivered_mstamp;
+		} tx;
+		union {
+			struct inet_skb_parm h4;
+			struct inet6_skb_parm h6;
+		} header;
+	};
+};
+
+struct tcp_splice_state {
+	struct pipe_inode_info *pipe;
+	size_t len;
+	unsigned int flags;
+};
+
+struct tcp_info {
+	__u8 tcpi_state;
+	__u8 tcpi_ca_state;
+	__u8 tcpi_retransmits;
+	__u8 tcpi_probes;
+	__u8 tcpi_backoff;
+	__u8 tcpi_options;
+	__u8 tcpi_snd_wscale: 4;
+	__u8 tcpi_rcv_wscale: 4;
+	__u8 tcpi_delivery_rate_app_limited: 1;
+	__u8 tcpi_fastopen_client_fail: 2;
+	__u32 tcpi_rto;
+	__u32 tcpi_ato;
+	__u32 tcpi_snd_mss;
+	__u32 tcpi_rcv_mss;
+	__u32 tcpi_unacked;
+	__u32 tcpi_sacked;
+	__u32 tcpi_lost;
+	__u32 tcpi_retrans;
+	__u32 tcpi_fackets;
+	__u32 tcpi_last_data_sent;
+	__u32 tcpi_last_ack_sent;
+	__u32 tcpi_last_data_recv;
+	__u32 tcpi_last_ack_recv;
+	__u32 tcpi_pmtu;
+	__u32 tcpi_rcv_ssthresh;
+	__u32 tcpi_rtt;
+	__u32 tcpi_rttvar;
+	__u32 tcpi_snd_ssthresh;
+	__u32 tcpi_snd_cwnd;
+	__u32 tcpi_advmss;
+	__u32 tcpi_reordering;
+	__u32 tcpi_rcv_rtt;
+	__u32 tcpi_rcv_space;
+	__u32 tcpi_total_retrans;
+	__u64 tcpi_pacing_rate;
+	__u64 tcpi_max_pacing_rate;
+	__u64 tcpi_bytes_acked;
+	__u64 tcpi_bytes_received;
+	__u32 tcpi_segs_out;
+	__u32 tcpi_segs_in;
+	__u32 tcpi_notsent_bytes;
+	__u32 tcpi_min_rtt;
+	__u32 tcpi_data_segs_in;
+	__u32 tcpi_data_segs_out;
+	__u64 tcpi_delivery_rate;
+	__u64 tcpi_busy_time;
+	__u64 tcpi_rwnd_limited;
+	__u64 tcpi_sndbuf_limited;
+	__u32 tcpi_delivered;
+	__u32 tcpi_delivered_ce;
+	__u64 tcpi_bytes_sent;
+	__u64 tcpi_bytes_retrans;
+	__u32 tcpi_dsack_dups;
+	__u32 tcpi_reord_seen;
+	__u32 tcpi_rcv_ooopack;
+	__u32 tcpi_snd_wnd;
+	__u32 tcpi_rcv_wnd;
+	__u32 tcpi_rehash;
+};
+
+struct tcp_zerocopy_receive {
+	__u64 address;
+	__u32 length;
+	__u32 recv_skip_hint;
+	__u32 inq;
+	__s32 err;
+	__u64 copybuf_address;
+	__s32 copybuf_len;
+	__u32 flags;
+	__u64 msg_control;
+	__u64 msg_controllen;
+	__u32 msg_flags;
+	__u32 reserved;
+};
+
+struct tcp_repair_opt {
+	__u32 opt_code;
+	__u32 opt_val;
+};
+
+struct tcp_repair_window {
+	__u32 snd_wl1;
+	__u32 snd_wnd;
+	__u32 max_window;
+	__u32 rcv_wnd;
+	__u32 rcv_wup;
+};
+
+enum tcp_ca_ack_event_flags {
+	CA_ACK_SLOWPATH = 1,
+	CA_ACK_WIN_UPDATE = 2,
+	CA_ACK_ECE = 4,
+};
+
+enum tcp_queue {
+	TCP_FRAG_IN_WRITE_QUEUE = 0,
+	TCP_FRAG_IN_RTX_QUEUE = 1,
+};
+
+enum tcp_fastopen_client_fail {
+	TFO_STATUS_UNSPEC = 0,
+	TFO_COOKIE_UNAVAILABLE = 1,
+	TFO_DATA_NOT_ACKED = 2,
+	TFO_SYN_RETRANSMITTED = 3,
+};
+
+struct tcp_sacktag_state {
+	u64 first_sackt;
+	u64 last_sackt;
+	u32 reord;
+	u32 sack_delivered;
+	int flag;
+	unsigned int mss_now;
+	struct rate_sample *rate;
+};
+
+struct tsq_tasklet {
+	struct tasklet_struct tasklet;
+	struct list_head head;
+};
+
+enum tsq_flags {
+	TSQF_THROTTLED = 1,
+	TSQF_QUEUED = 2,
+	TCPF_TSQ_DEFERRED = 4,
+	TCPF_WRITE_TIMER_DEFERRED = 8,
+	TCPF_DELACK_TIMER_DEFERRED = 16,
+	TCPF_MTU_REDUCED_DEFERRED = 32,
+};
+
+enum {
+	BPF_WRITE_HDR_TCP_CURRENT_MSS = 1,
+	BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,
+};
+
+struct mptcp_out_options {};
+
+struct tcp_out_options {
+	u16 options;
+	u16 mss;
+	u8 ws;
+	u8 num_sack_blocks;
+	u8 hash_size;
+	u8 bpf_opt_len;
+	__u8 *hash_location;
+	__u32 tsval;
+	__u32 tsecr;
+	struct tcp_fastopen_cookie *fastopen_cookie;
+	struct mptcp_out_options mptcp;
+};
+
+union tcp_md5_addr {
+	struct in_addr a4;
+	struct in6_addr a6;
+};
+
+struct tcp_md5sig_key {
+	struct hlist_node node;
+	u8 keylen;
+	u8 family;
+	u8 prefixlen;
+	u8 flags;
+	union tcp_md5_addr addr;
+	int l3index;
+	u8 key[80];
+	struct callback_head rcu;
+};
+
+struct tcp_seq_afinfo {
+	sa_family_t family;
+};
+
+enum {
+	ICMP_MIB_NUM = 0,
+	ICMP_MIB_INMSGS = 1,
+	ICMP_MIB_INERRORS = 2,
+	ICMP_MIB_INDESTUNREACHS = 3,
+	ICMP_MIB_INTIMEEXCDS = 4,
+	ICMP_MIB_INPARMPROBS = 5,
+	ICMP_MIB_INSRCQUENCHS = 6,
+	ICMP_MIB_INREDIRECTS = 7,
+	ICMP_MIB_INECHOS = 8,
+	ICMP_MIB_INECHOREPS = 9,
+	ICMP_MIB_INTIMESTAMPS = 10,
+	ICMP_MIB_INTIMESTAMPREPS = 11,
+	ICMP_MIB_INADDRMASKS = 12,
+	ICMP_MIB_INADDRMASKREPS = 13,
+	ICMP_MIB_OUTMSGS = 14,
+	ICMP_MIB_OUTERRORS = 15,
+	ICMP_MIB_OUTDESTUNREACHS = 16,
+	ICMP_MIB_OUTTIMEEXCDS = 17,
+	ICMP_MIB_OUTPARMPROBS = 18,
+	ICMP_MIB_OUTSRCQUENCHS = 19,
+	ICMP_MIB_OUTREDIRECTS = 20,
+	ICMP_MIB_OUTECHOS = 21,
+	ICMP_MIB_OUTECHOREPS = 22,
+	ICMP_MIB_OUTTIMESTAMPS = 23,
+	ICMP_MIB_OUTTIMESTAMPREPS = 24,
+	ICMP_MIB_OUTADDRMASKS = 25,
+	ICMP_MIB_OUTADDRMASKREPS = 26,
+	ICMP_MIB_CSUMERRORS = 27,
+	ICMP_MIB_RATELIMITGLOBAL = 28,
+	ICMP_MIB_RATELIMITHOST = 29,
+	__ICMP_MIB_MAX = 30,
+};
+
+enum tcp_tw_status {
+	TCP_TW_SUCCESS = 0,
+	TCP_TW_RST = 1,
+	TCP_TW_ACK = 2,
+	TCP_TW_SYN = 3,
+};
+
+enum tcp_seq_states {
+	TCP_SEQ_STATE_LISTENING = 0,
+	TCP_SEQ_STATE_ESTABLISHED = 1,
+};
+
+struct tcp_iter_state {
+	struct seq_net_private p;
+	enum tcp_seq_states state;
+	struct sock *syn_wait_sk;
+	int bucket;
+	int offset;
+	int sbucket;
+	int num;
+	loff_t last_pos;
+};
+
+struct bpf_iter__tcp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct sock_common *sk_common;
+	};
+	uid_t uid;
+};
+
+struct bpf_tcp_iter_state {
+	struct tcp_iter_state state;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct tcp_metrics_block;
+
+struct tcpm_hash_bucket {
+	struct tcp_metrics_block __attribute__((btf_type_tag("rcu"))) *chain;
+};
+
+struct tcp_fastopen_metrics {
+	u16 mss;
+	u16 syn_loss: 10;
+	u16 try_exp: 2;
+	unsigned long last_syn_loss;
+	struct tcp_fastopen_cookie cookie;
+};
+
+struct tcp_metrics_block {
+	struct tcp_metrics_block __attribute__((btf_type_tag("rcu"))) *tcpm_next;
+	struct net *tcpm_net;
+	struct inetpeer_addr tcpm_saddr;
+	struct inetpeer_addr tcpm_daddr;
+	unsigned long tcpm_stamp;
+	u32 tcpm_lock;
+	u32 tcpm_vals[5];
+	struct tcp_fastopen_metrics tcpm_fastopen;
+	struct callback_head callback_head;
+};
+
+enum tcp_metric_index {
+	TCP_METRIC_RTT = 0,
+	TCP_METRIC_RTTVAR = 1,
+	TCP_METRIC_SSTHRESH = 2,
+	TCP_METRIC_CWND = 3,
+	TCP_METRIC_REORDERING = 4,
+	TCP_METRIC_RTT_US = 5,
+	TCP_METRIC_RTTVAR_US = 6,
+	__TCP_METRIC_MAX = 7,
+};
+
+enum {
+	TCP_METRICS_ATTR_UNSPEC = 0,
+	TCP_METRICS_ATTR_ADDR_IPV4 = 1,
+	TCP_METRICS_ATTR_ADDR_IPV6 = 2,
+	TCP_METRICS_ATTR_AGE = 3,
+	TCP_METRICS_ATTR_TW_TSVAL = 4,
+	TCP_METRICS_ATTR_TW_TS_STAMP = 5,
+	TCP_METRICS_ATTR_VALS = 6,
+	TCP_METRICS_ATTR_FOPEN_MSS = 7,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,
+	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,
+	TCP_METRICS_ATTR_FOPEN_COOKIE = 10,
+	TCP_METRICS_ATTR_SADDR_IPV4 = 11,
+	TCP_METRICS_ATTR_SADDR_IPV6 = 12,
+	TCP_METRICS_ATTR_PAD = 13,
+	__TCP_METRICS_ATTR_MAX = 14,
+};
+
+enum {
+	TCP_METRICS_CMD_UNSPEC = 0,
+	TCP_METRICS_CMD_GET = 1,
+	TCP_METRICS_CMD_DEL = 2,
+	__TCP_METRICS_CMD_MAX = 3,
+};
+
+struct tcp_plb_state {
+	u8 consec_cong_rounds: 5;
+	u8 unused: 3;
+	u32 pause_until;
+};
+
+struct icmp_filter {
+	__u32 data;
+};
+
+struct raw_sock {
+	struct inet_sock inet;
+	struct icmp_filter filter;
+	u32 ipmr_table;
+};
+
+struct raw_frag_vec {
+	struct msghdr *msg;
+	union {
+		struct icmphdr icmph;
+		char c[1];
+	} hdr;
+	int hlen;
+};
+
+struct raw_iter_state {
+	struct seq_net_private p;
+	int bucket;
+};
+
+struct udp_seq_afinfo {
+	sa_family_t family;
+	struct udp_table *udp_table;
+};
+
+enum {
+	UDP_FLAGS_CORK = 0,
+	UDP_FLAGS_NO_CHECK6_TX = 1,
+	UDP_FLAGS_NO_CHECK6_RX = 2,
+	UDP_FLAGS_GRO_ENABLED = 3,
+	UDP_FLAGS_ACCEPT_FRAGLIST = 4,
+	UDP_FLAGS_ACCEPT_L4 = 5,
+	UDP_FLAGS_ENCAP_ENABLED = 6,
+	UDP_FLAGS_UDPLITE_SEND_CC = 7,
+	UDP_FLAGS_UDPLITE_RECV_CC = 8,
+};
+
+enum {
+	UDP_MIB_NUM = 0,
+	UDP_MIB_INDATAGRAMS = 1,
+	UDP_MIB_NOPORTS = 2,
+	UDP_MIB_INERRORS = 3,
+	UDP_MIB_OUTDATAGRAMS = 4,
+	UDP_MIB_RCVBUFERRORS = 5,
+	UDP_MIB_SNDBUFERRORS = 6,
+	UDP_MIB_CSUMERRORS = 7,
+	UDP_MIB_IGNOREDMULTI = 8,
+	UDP_MIB_MEMERRORS = 9,
+	__UDP_MIB_MAX = 10,
+};
+
+struct udp_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	__u16 cscov;
+	__u8 partial_cov;
+};
+
+struct ip_tunnel_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);
+	int (*err_handler)(struct sk_buff *, u32);
+};
+
+struct udp_dev_scratch {
+	u32 _tsize_state;
+	u16 len;
+	bool is_linear;
+	bool csum_unnecessary;
+};
+
+struct bpf_iter__udp {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct udp_sock *udp_sk;
+	};
+	uid_t uid;
+	long: 0;
+	int bucket;
+};
+
+struct udp_iter_state {
+	struct seq_net_private p;
+	int bucket;
+};
+
+struct bpf_udp_iter_state {
+	struct udp_iter_state state;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	int offset;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct inet_protosw {
+	struct list_head list;
+	unsigned short type;
+	unsigned short protocol;
+	struct proto *prot;
+	const struct proto_ops *ops;
+	unsigned char flags;
+};
+
+typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);
+
+typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);
+
+typedef struct sock * (*udp_lookup_t)(const struct sk_buff *, __be16, __be16);
+
+struct arpreq {
+	struct sockaddr arp_pa;
+	struct sockaddr arp_ha;
+	int arp_flags;
+	struct sockaddr arp_netmask;
+	char arp_dev[16];
+};
+
+struct icmp_err {
+	int errno;
+	unsigned int fatal: 1;
+};
+
+struct icmp_control {
+	enum skb_drop_reason (*handler)(struct sk_buff *);
+	short error;
+};
+
+enum {
+	XFRM_LOOKUP_ICMP = 1,
+	XFRM_LOOKUP_QUEUE = 2,
+	XFRM_LOOKUP_KEEP_DST_REF = 4,
+};
+
+struct icmp_bxm {
+	struct sk_buff *skb;
+	int offset;
+	int data_len;
+	struct {
+		struct icmphdr icmph;
+		__be32 times[3];
+	} data;
+	int head_len;
+	struct ip_options_data replyopts;
+};
+
+struct icmp_extobj_hdr {
+	__be16 length;
+	__u8 class_num;
+	__u8 class_type;
+};
+
+struct icmp_ext_hdr {
+	__u8 reserved1: 4;
+	__u8 version: 4;
+	__u8 reserved2;
+	__sum16 checksum;
+};
+
+struct icmp_ext_echo_ctype3_hdr {
+	__be16 afi;
+	__u8 addrlen;
+	__u8 reserved;
+};
+
+struct icmp_ext_echo_iio {
+	struct icmp_extobj_hdr extobj_hdr;
+	union {
+		char name[16];
+		__be32 ifindex;
+		struct {
+			struct icmp_ext_echo_ctype3_hdr ctype3_hdr;
+			union {
+				__be32 ipv4_addr;
+				struct in6_addr ipv6_addr;
+			} ip_addr;
+		} addr;
+	} ident;
+};
+
+struct devinet_sysctl_table {
+	struct ctl_table_header *sysctl_header;
+	struct ctl_table devinet_vars[34];
+};
+
+enum {
+	IFA_UNSPEC = 0,
+	IFA_ADDRESS = 1,
+	IFA_LOCAL = 2,
+	IFA_LABEL = 3,
+	IFA_BROADCAST = 4,
+	IFA_ANYCAST = 5,
+	IFA_CACHEINFO = 6,
+	IFA_MULTICAST = 7,
+	IFA_FLAGS = 8,
+	IFA_RT_PRIORITY = 9,
+	IFA_TARGET_NETNSID = 10,
+	IFA_PROTO = 11,
+	__IFA_MAX = 12,
+};
+
+enum {
+	NETCONFA_UNSPEC = 0,
+	NETCONFA_IFINDEX = 1,
+	NETCONFA_FORWARDING = 2,
+	NETCONFA_RP_FILTER = 3,
+	NETCONFA_MC_FORWARDING = 4,
+	NETCONFA_PROXY_NEIGH = 5,
+	NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,
+	NETCONFA_INPUT = 7,
+	NETCONFA_BC_FORWARDING = 8,
+	__NETCONFA_MAX = 9,
+};
+
+enum {
+	IFLA_INET_UNSPEC = 0,
+	IFLA_INET_CONF = 1,
+	__IFLA_INET_MAX = 2,
+};
+
+struct ifaddrmsg {
+	__u8 ifa_family;
+	__u8 ifa_prefixlen;
+	__u8 ifa_flags;
+	__u8 ifa_scope;
+	__u32 ifa_index;
+};
+
+struct ifa_cacheinfo {
+	__u32 ifa_prefered;
+	__u32 ifa_valid;
+	__u32 cstamp;
+	__u32 tstamp;
+};
+
+struct inet_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+};
+
+struct netconfmsg {
+	__u8 ncm_family;
+};
+
+struct in_validator_info {
+	__be32 ivi_addr;
+	struct in_device *ivi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct rtentry {
+	unsigned long rt_pad1;
+	struct sockaddr rt_dst;
+	struct sockaddr rt_gateway;
+	struct sockaddr rt_genmask;
+	unsigned short rt_flags;
+	short rt_pad2;
+	unsigned long rt_pad3;
+	void *rt_pad4;
+	short rt_metric;
+	char __attribute__((btf_type_tag("user"))) *rt_dev;
+	unsigned long rt_mtu;
+	unsigned long rt_window;
+	unsigned short rt_irtt;
+};
+
+struct compat_rtentry {
+	u32 rt_pad1;
+	struct sockaddr rt_dst;
+	struct sockaddr rt_gateway;
+	struct sockaddr rt_genmask;
+	unsigned short rt_flags;
+	short rt_pad2;
+	u32 rt_pad3;
+	unsigned char rt_tos;
+	unsigned char rt_class;
+	short rt_pad4;
+	short rt_metric;
+	compat_uptr_t rt_dev;
+	u32 rt_mtu;
+	u32 rt_window;
+	unsigned short rt_irtt;
+};
+
+struct igmphdr {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+};
+
+struct igmpv3_query {
+	__u8 type;
+	__u8 code;
+	__sum16 csum;
+	__be32 group;
+	__u8 qrv: 3;
+	__u8 suppress: 1;
+	__u8 resv: 4;
+	__u8 qqic;
+	__be16 nsrcs;
+	__be32 srcs[0];
+};
+
+struct igmpv3_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	__be32 grec_mca;
+	__be32 grec_src[0];
+};
+
+struct igmpv3_report {
+	__u8 type;
+	__u8 resv1;
+	__sum16 csum;
+	__be16 resv2;
+	__be16 ngrec;
+	struct igmpv3_grec grec[0];
+};
+
+struct igmp_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *in_dev;
+};
+
+struct igmp_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct in_device *idev;
+	struct ip_mc_list *im;
+};
+
+struct nl_info {
+	struct nlmsghdr *nlh;
+	struct net *nl_net;
+	u32 portid;
+	u8 skip_notify: 1;
+	u8 skip_notify_kernel: 1;
+};
+
+struct rtnexthop;
+
+struct fib_config {
+	u8 fc_dst_len;
+	dscp_t fc_dscp;
+	u8 fc_protocol;
+	u8 fc_scope;
+	u8 fc_type;
+	u8 fc_gw_family;
+	u32 fc_table;
+	__be32 fc_dst;
+	union {
+		__be32 fc_gw4;
+		struct in6_addr fc_gw6;
+	};
+	int fc_oif;
+	u32 fc_flags;
+	u32 fc_priority;
+	__be32 fc_prefsrc;
+	u32 fc_nh_id;
+	struct nlattr *fc_mx;
+	struct rtnexthop *fc_mp;
+	int fc_mx_len;
+	int fc_mp_len;
+	u32 fc_flow;
+	u32 fc_nlflags;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+};
+
+struct rtnexthop {
+	unsigned short rtnh_len;
+	unsigned char rtnh_flags;
+	unsigned char rtnh_hops;
+	int rtnh_ifindex;
+};
+
+struct fib_dump_filter {
+	u32 table_id;
+	bool filter_set;
+	bool dump_routes;
+	bool dump_exceptions;
+	unsigned char protocol;
+	unsigned char rt_type;
+	unsigned int flags;
+	struct net_device *dev;
+};
+
+struct fib_result_nl {
+	__be32 fl_addr;
+	u32 fl_mark;
+	unsigned char fl_tos;
+	unsigned char fl_scope;
+	unsigned char tb_id_in;
+	unsigned char tb_id;
+	unsigned char prefixlen;
+	unsigned char nh_sel;
+	unsigned char type;
+	unsigned char scope;
+	int err;
+};
+
+struct fib_prop {
+	int error;
+	u8 scope;
+};
+
+struct fib6_config {
+	u32 fc_table;
+	u32 fc_metric;
+	int fc_dst_len;
+	int fc_src_len;
+	int fc_ifindex;
+	u32 fc_flags;
+	u32 fc_protocol;
+	u16 fc_type;
+	u16 fc_delete_all_nh: 1;
+	u16 fc_ignore_dev_down: 1;
+	u16 __unused: 14;
+	u32 fc_nh_id;
+	struct in6_addr fc_dst;
+	struct in6_addr fc_src;
+	struct in6_addr fc_prefsrc;
+	struct in6_addr fc_gateway;
+	unsigned long fc_expires;
+	struct nlattr *fc_mx;
+	int fc_mx_len;
+	int fc_mp_len;
+	struct nlattr *fc_mp;
+	struct nl_info fc_nlinfo;
+	struct nlattr *fc_encap;
+	u16 fc_encap_type;
+	bool fc_is_fdb;
+	u64 android_kabi_reserved1;
+};
+
+struct fib_nh_notifier_info {
+	struct fib_notifier_info info;
+	struct fib_nh *fib_nh;
+};
+
+typedef unsigned int t_key;
+
+struct key_vector {
+	t_key key;
+	unsigned char pos;
+	unsigned char bits;
+	unsigned char slen;
+	union {
+		struct hlist_head leaf;
+		struct {
+			struct {} __empty_tnode;
+			struct key_vector __attribute__((btf_type_tag("rcu"))) *tnode[0];
+		};
+	};
+};
+
+struct trie {
+	struct key_vector kv[1];
+};
+
+struct tnode {
+	struct callback_head rcu;
+	t_key empty_children;
+	t_key full_children;
+	struct key_vector __attribute__((btf_type_tag("rcu"))) *parent;
+	struct key_vector kv[1];
+};
+
+struct fib_entry_notifier_info {
+	struct fib_notifier_info info;
+	u32 dst;
+	int dst_len;
+	struct fib_info *fi;
+	dscp_t dscp;
+	u8 type;
+	u32 tb_id;
+};
+
+struct trie_stat {
+	unsigned int totdepth;
+	unsigned int maxdepth;
+	unsigned int tnodes;
+	unsigned int leaves;
+	unsigned int nullpointers;
+	unsigned int prefixes;
+	unsigned int nodesizes[32];
+};
+
+struct fib_trie_iter {
+	struct seq_net_private p;
+	struct fib_table *tb;
+	struct key_vector *tnode;
+	unsigned int index;
+	unsigned int depth;
+};
+
+struct fib_route_iter {
+	struct seq_net_private p;
+	struct fib_table *main_tb;
+	struct key_vector *tnode;
+	loff_t pos;
+	t_key key;
+};
+
+struct ipfrag_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	};
+	struct sk_buff *next_frag;
+	int frag_run_len;
+	int ip_defrag_offset;
+};
+
+struct ping_table {
+	struct hlist_head hash[64];
+	spinlock_t lock;
+};
+
+struct pingv6_ops {
+	int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);
+	void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);
+	int (*icmpv6_err_convert)(u8, u8, int *);
+	void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);
+	int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);
+};
+
+struct ping_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	sa_family_t family;
+};
+
+struct pingfakehdr {
+	struct icmphdr icmph;
+	struct msghdr *msg;
+	sa_family_t family;
+	__wsum wcheck;
+};
+
+struct ip6_tnl_encap_ops {
+	size_t (*encap_hlen)(struct ip_tunnel_encap *);
+	int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+};
+
+struct lwtunnel_encap_ops {
+	int (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);
+	void (*destroy_state)(struct lwtunnel_state *);
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*input)(struct sk_buff *);
+	int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);
+	int (*get_encap_size)(struct lwtunnel_state *);
+	int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);
+	int (*xmit)(struct sk_buff *);
+	struct module *owner;
+};
+
+enum {
+	IFLA_IPTUN_UNSPEC = 0,
+	IFLA_IPTUN_LINK = 1,
+	IFLA_IPTUN_LOCAL = 2,
+	IFLA_IPTUN_REMOTE = 3,
+	IFLA_IPTUN_TTL = 4,
+	IFLA_IPTUN_TOS = 5,
+	IFLA_IPTUN_ENCAP_LIMIT = 6,
+	IFLA_IPTUN_FLOWINFO = 7,
+	IFLA_IPTUN_FLAGS = 8,
+	IFLA_IPTUN_PROTO = 9,
+	IFLA_IPTUN_PMTUDISC = 10,
+	IFLA_IPTUN_6RD_PREFIX = 11,
+	IFLA_IPTUN_6RD_RELAY_PREFIX = 12,
+	IFLA_IPTUN_6RD_PREFIXLEN = 13,
+	IFLA_IPTUN_6RD_RELAY_PREFIXLEN = 14,
+	IFLA_IPTUN_ENCAP_TYPE = 15,
+	IFLA_IPTUN_ENCAP_FLAGS = 16,
+	IFLA_IPTUN_ENCAP_SPORT = 17,
+	IFLA_IPTUN_ENCAP_DPORT = 18,
+	IFLA_IPTUN_COLLECT_METADATA = 19,
+	IFLA_IPTUN_FWMARK = 20,
+	__IFLA_IPTUN_MAX = 21,
+};
+
+enum lwtunnel_ip_t {
+	LWTUNNEL_IP_UNSPEC = 0,
+	LWTUNNEL_IP_ID = 1,
+	LWTUNNEL_IP_DST = 2,
+	LWTUNNEL_IP_SRC = 3,
+	LWTUNNEL_IP_TTL = 4,
+	LWTUNNEL_IP_TOS = 5,
+	LWTUNNEL_IP_FLAGS = 6,
+	LWTUNNEL_IP_PAD = 7,
+	LWTUNNEL_IP_OPTS = 8,
+	__LWTUNNEL_IP_MAX = 9,
+};
+
+enum {
+	LWTUNNEL_IP_OPTS_UNSPEC = 0,
+	LWTUNNEL_IP_OPTS_GENEVE = 1,
+	LWTUNNEL_IP_OPTS_VXLAN = 2,
+	LWTUNNEL_IP_OPTS_ERSPAN = 3,
+	__LWTUNNEL_IP_OPTS_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_GENEVE_CLASS = 1,
+	LWTUNNEL_IP_OPT_GENEVE_TYPE = 2,
+	LWTUNNEL_IP_OPT_GENEVE_DATA = 3,
+	__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_VXLAN_GBP = 1,
+	__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,
+};
+
+enum {
+	LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,
+	LWTUNNEL_IP_OPT_ERSPAN_VER = 1,
+	LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,
+	LWTUNNEL_IP_OPT_ERSPAN_DIR = 3,
+	LWTUNNEL_IP_OPT_ERSPAN_HWID = 4,
+	__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,
+};
+
+enum lwtunnel_ip6_t {
+	LWTUNNEL_IP6_UNSPEC = 0,
+	LWTUNNEL_IP6_ID = 1,
+	LWTUNNEL_IP6_DST = 2,
+	LWTUNNEL_IP6_SRC = 3,
+	LWTUNNEL_IP6_HOPLIMIT = 4,
+	LWTUNNEL_IP6_TC = 5,
+	LWTUNNEL_IP6_FLAGS = 6,
+	LWTUNNEL_IP6_PAD = 7,
+	LWTUNNEL_IP6_OPTS = 8,
+	__LWTUNNEL_IP6_MAX = 9,
+};
+
+enum nexthop_event_type {
+	NEXTHOP_EVENT_DEL = 0,
+	NEXTHOP_EVENT_REPLACE = 1,
+	NEXTHOP_EVENT_RES_TABLE_PRE_REPLACE = 2,
+	NEXTHOP_EVENT_BUCKET_REPLACE = 3,
+};
+
+enum nh_notifier_info_type {
+	NH_NOTIFIER_INFO_TYPE_SINGLE = 0,
+	NH_NOTIFIER_INFO_TYPE_GRP = 1,
+	NH_NOTIFIER_INFO_TYPE_RES_TABLE = 2,
+	NH_NOTIFIER_INFO_TYPE_RES_BUCKET = 3,
+};
+
+enum {
+	NHA_UNSPEC = 0,
+	NHA_ID = 1,
+	NHA_GROUP = 2,
+	NHA_GROUP_TYPE = 3,
+	NHA_BLACKHOLE = 4,
+	NHA_OIF = 5,
+	NHA_GATEWAY = 6,
+	NHA_ENCAP_TYPE = 7,
+	NHA_ENCAP = 8,
+	NHA_GROUPS = 9,
+	NHA_MASTER = 10,
+	NHA_FDB = 11,
+	NHA_RES_GROUP = 12,
+	NHA_RES_BUCKET = 13,
+	__NHA_MAX = 14,
+};
+
+enum {
+	NEXTHOP_GRP_TYPE_MPATH = 0,
+	NEXTHOP_GRP_TYPE_RES = 1,
+	__NEXTHOP_GRP_TYPE_MAX = 2,
+};
+
+enum {
+	NHA_RES_GROUP_UNSPEC = 0,
+	NHA_RES_GROUP_PAD = 0,
+	NHA_RES_GROUP_BUCKETS = 1,
+	NHA_RES_GROUP_IDLE_TIMER = 2,
+	NHA_RES_GROUP_UNBALANCED_TIMER = 3,
+	NHA_RES_GROUP_UNBALANCED_TIME = 4,
+	__NHA_RES_GROUP_MAX = 5,
+};
+
+enum {
+	NHA_RES_BUCKET_UNSPEC = 0,
+	NHA_RES_BUCKET_PAD = 0,
+	NHA_RES_BUCKET_INDEX = 1,
+	NHA_RES_BUCKET_IDLE_TIME = 2,
+	NHA_RES_BUCKET_NH_ID = 3,
+	__NHA_RES_BUCKET_MAX = 4,
+};
+
+struct nh_notifier_single_info;
+
+struct nh_notifier_grp_info;
+
+struct nh_notifier_res_table_info;
+
+struct nh_notifier_res_bucket_info;
+
+struct nh_notifier_info {
+	struct net *net;
+	struct netlink_ext_ack *extack;
+	u32 id;
+	enum nh_notifier_info_type type;
+	union {
+		struct nh_notifier_single_info *nh;
+		struct nh_notifier_grp_info *nh_grp;
+		struct nh_notifier_res_table_info *nh_res_table;
+		struct nh_notifier_res_bucket_info *nh_res_bucket;
+	};
+};
+
+struct nh_notifier_single_info {
+	struct net_device *dev;
+	u8 gw_family;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	};
+	u8 is_reject: 1;
+	u8 is_fdb: 1;
+	u8 has_encap: 1;
+};
+
+struct nh_notifier_grp_entry_info {
+	u8 weight;
+	u32 id;
+	struct nh_notifier_single_info nh;
+};
+
+struct nh_notifier_grp_info {
+	u16 num_nh;
+	bool is_fdb;
+	struct nh_notifier_grp_entry_info nh_entries[0];
+};
+
+struct nh_notifier_res_table_info {
+	u16 num_nh_buckets;
+	struct nh_notifier_single_info nhs[0];
+};
+
+struct nh_notifier_res_bucket_info {
+	u16 bucket_index;
+	unsigned int idle_timer_ms;
+	bool force;
+	struct nh_notifier_single_info old_nh;
+	struct nh_notifier_single_info new_nh;
+};
+
+struct nh_config {
+	u32 nh_id;
+	u8 nh_family;
+	u8 nh_protocol;
+	u8 nh_blackhole;
+	u8 nh_fdb;
+	u32 nh_flags;
+	int nh_ifindex;
+	struct net_device *dev;
+	union {
+		__be32 ipv4;
+		struct in6_addr ipv6;
+	} gw;
+	struct nlattr *nh_grp;
+	u16 nh_grp_type;
+	u16 nh_grp_res_num_buckets;
+	unsigned long nh_grp_res_idle_timer;
+	unsigned long nh_grp_res_unbalanced_timer;
+	bool nh_grp_res_has_num_buckets;
+	bool nh_grp_res_has_idle_timer;
+	bool nh_grp_res_has_unbalanced_timer;
+	struct nlattr *nh_encap;
+	u16 nh_encap_type;
+	u32 nlflags;
+	struct nl_info nlinfo;
+};
+
+struct nhmsg {
+	unsigned char nh_family;
+	unsigned char nh_scope;
+	unsigned char nh_protocol;
+	unsigned char resvd;
+	unsigned int nh_flags;
+};
+
+struct nexthop_grp {
+	__u32 id;
+	__u8 weight;
+	__u8 resvd1;
+	__u16 resvd2;
+};
+
+struct nh_dump_filter {
+	u32 nh_id;
+	int dev_idx;
+	int master_idx;
+	bool group_filter;
+	bool fdb_filter;
+	u32 res_bucket_nh_id;
+};
+
+struct rtm_dump_nh_ctx {
+	u32 idx;
+};
+
+struct rtm_dump_res_bucket_ctx {
+	struct rtm_dump_nh_ctx nh;
+	u16 bucket_index;
+};
+
+struct rtm_dump_nexthop_bucket_data {
+	struct rtm_dump_res_bucket_ctx *ctx;
+	struct nh_dump_filter filter;
+};
+
+struct udp_tunnel_nic_ops {
+	void (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);
+	void (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8);
+	void (*add_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*del_port)(struct net_device *, struct udp_tunnel_info *);
+	void (*reset_ntf)(struct net_device *);
+	size_t (*dump_size)(struct net_device *, unsigned int);
+	int (*dump_write)(struct net_device *, unsigned int, struct sk_buff *);
+};
+
+enum tunnel_encap_types {
+	TUNNEL_ENCAP_NONE = 0,
+	TUNNEL_ENCAP_FOU = 1,
+	TUNNEL_ENCAP_GUE = 2,
+	TUNNEL_ENCAP_MPLS = 3,
+};
+
+struct ip_tunnel_prl_entry;
+
+struct ip_tunnel {
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *next;
+	struct hlist_node hash_node;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	unsigned long err_time;
+	int err_count;
+	u32 i_seqno;
+	atomic_t o_seqno;
+	int tun_hlen;
+	u32 index;
+	u8 erspan_ver;
+	u8 dir;
+	u16 hwid;
+	struct dst_cache dst_cache;
+	struct ip_tunnel_parm parms;
+	int mlink;
+	int encap_hlen;
+	int hlen;
+	struct ip_tunnel_encap encap;
+	struct ip_tunnel_prl_entry __attribute__((btf_type_tag("rcu"))) *prl;
+	unsigned int prl_count;
+	unsigned int ip_tnl_net_id;
+	struct gro_cells gro_cells;
+	__u32 fwmark;
+	bool collect_md;
+	bool ignore_df;
+};
+
+struct ip_tunnel_prl_entry {
+	struct ip_tunnel_prl_entry __attribute__((btf_type_tag("rcu"))) *next;
+	__be32 addr;
+	u16 flags;
+	struct callback_head callback_head;
+};
+
+struct ip_tunnel_net {
+	struct net_device *fb_tunnel_dev;
+	struct rtnl_link_ops *rtnl_link_ops;
+	struct hlist_head tunnels[128];
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *collect_md_tun;
+	int type;
+};
+
+struct tnl_ptk_info {
+	__be16 flags;
+	__be16 proto;
+	__be32 key;
+	__be32 seq;
+	int hdr_len;
+};
+
+struct snmp_mib {
+	const char *name;
+	int entry;
+};
+
+struct fib4_rule {
+	struct fib_rule common;
+	u8 dst_len;
+	u8 src_len;
+	dscp_t dscp;
+	__be32 src;
+	__be32 srcmask;
+	__be32 dst;
+	__be32 dstmask;
+};
+
+enum {
+	MFC_STATIC = 1,
+	MFC_OFFLOAD = 2,
+};
+
+struct mr_mfc {
+	struct rhlist_head mnode;
+	unsigned short mfc_parent;
+	int mfc_flags;
+	union {
+		struct {
+			unsigned long expires;
+			struct sk_buff_head unresolved;
+		} unres;
+		struct {
+			unsigned long last_assert;
+			int minvif;
+			int maxvif;
+			unsigned long bytes;
+			unsigned long pkt;
+			unsigned long wrong_if;
+			unsigned long lastuse;
+			unsigned char ttls[32];
+			refcount_t refcount;
+		} res;
+	} mfc_un;
+	struct list_head list;
+	struct callback_head rcu;
+	void (*free)(struct callback_head *);
+};
+
+struct mr_table_ops {
+	const struct rhashtable_params *rht_params;
+	void *cmparg_any;
+};
+
+struct vif_device {
+	struct net_device __attribute__((btf_type_tag("rcu"))) *dev;
+	netdevice_tracker dev_tracker;
+	unsigned long bytes_in;
+	unsigned long bytes_out;
+	unsigned long pkt_in;
+	unsigned long pkt_out;
+	unsigned long rate_limit;
+	unsigned char threshold;
+	unsigned short flags;
+	int link;
+	struct netdev_phys_item_id dev_parent_id;
+	__be32 local;
+	__be32 remote;
+};
+
+struct mr_table {
+	struct list_head list;
+	possible_net_t net;
+	struct mr_table_ops ops;
+	u32 id;
+	struct sock __attribute__((btf_type_tag("rcu"))) *mroute_sk;
+	struct timer_list ipmr_expire_timer;
+	struct list_head mfc_unres_queue;
+	struct vif_device vif_table[32];
+	struct rhltable mfc_hash;
+	struct list_head mfc_cache_list;
+	int maxvif;
+	atomic_t cache_resolve_queue_len;
+	bool mroute_do_assert;
+	bool mroute_do_pim;
+	bool mroute_do_wrvifwhole;
+	int mroute_reg_vif_num;
+};
+
+struct mr_vif_iter {
+	struct seq_net_private p;
+	struct mr_table *mrt;
+	int ct;
+};
+
+struct mr_mfc_iter {
+	struct seq_net_private p;
+	struct mr_table *mrt;
+	struct list_head *cache;
+	spinlock_t *lock;
+};
+
+struct vif_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct net_device *dev;
+	unsigned short vif_index;
+	unsigned short vif_flags;
+	u32 tb_id;
+};
+
+struct mfc_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct mr_mfc *mfc;
+	u32 tb_id;
+};
+
+struct rta_mfc_stats {
+	__u64 mfcs_packets;
+	__u64 mfcs_bytes;
+	__u64 mfcs_wrong_if;
+};
+
+struct xfrm_tunnel {
+	int (*handler)(struct sk_buff *);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm_tunnel __attribute__((btf_type_tag("rcu"))) *next;
+	int priority;
+};
+
+struct gre_protocol {
+	int (*handler)(struct sk_buff *);
+	void (*err_handler)(struct sk_buff *, u32);
+};
+
+struct erspan_base_hdr {
+	__u8 vlan_upper: 4;
+	__u8 ver: 4;
+	__u8 vlan: 8;
+	__u8 session_id_upper: 2;
+	__u8 t: 1;
+	__u8 en: 2;
+	__u8 cos: 3;
+	__u8 session_id: 8;
+};
+
+enum {
+	IFLA_GRE_UNSPEC = 0,
+	IFLA_GRE_LINK = 1,
+	IFLA_GRE_IFLAGS = 2,
+	IFLA_GRE_OFLAGS = 3,
+	IFLA_GRE_IKEY = 4,
+	IFLA_GRE_OKEY = 5,
+	IFLA_GRE_LOCAL = 6,
+	IFLA_GRE_REMOTE = 7,
+	IFLA_GRE_TTL = 8,
+	IFLA_GRE_TOS = 9,
+	IFLA_GRE_PMTUDISC = 10,
+	IFLA_GRE_ENCAP_LIMIT = 11,
+	IFLA_GRE_FLOWINFO = 12,
+	IFLA_GRE_FLAGS = 13,
+	IFLA_GRE_ENCAP_TYPE = 14,
+	IFLA_GRE_ENCAP_FLAGS = 15,
+	IFLA_GRE_ENCAP_SPORT = 16,
+	IFLA_GRE_ENCAP_DPORT = 17,
+	IFLA_GRE_COLLECT_METADATA = 18,
+	IFLA_GRE_IGNORE_DF = 19,
+	IFLA_GRE_FWMARK = 20,
+	IFLA_GRE_ERSPAN_INDEX = 21,
+	IFLA_GRE_ERSPAN_VER = 22,
+	IFLA_GRE_ERSPAN_DIR = 23,
+	IFLA_GRE_ERSPAN_HWID = 24,
+	__IFLA_GRE_MAX = 25,
+};
+
+enum erspan_encap_type {
+	ERSPAN_ENCAP_NOVLAN = 0,
+	ERSPAN_ENCAP_ISL = 1,
+	ERSPAN_ENCAP_8021Q = 2,
+	ERSPAN_ENCAP_INFRAME = 3,
+};
+
+enum erspan_bso {
+	BSO_NOERROR = 0,
+	BSO_SHORT = 1,
+	BSO_OVERSIZED = 2,
+	BSO_BAD = 3,
+};
+
+struct qtag_prefix {
+	__be16 eth_type;
+	__be16 tci;
+};
+
+struct erspan_md2 {
+	__be32 timestamp;
+	__be16 sgt;
+	__u8 hwid_upper: 2;
+	__u8 ft: 5;
+	__u8 p: 1;
+	__u8 o: 1;
+	__u8 gra: 2;
+	__u8 dir: 1;
+	__u8 hwid: 4;
+};
+
+struct erspan_metadata {
+	int version;
+	union {
+		__be32 index;
+		struct erspan_md2 md2;
+	} u;
+};
+
+struct udp_tunnel_nic_table_entry;
+
+struct udp_tunnel_nic {
+	struct work_struct work;
+	struct net_device *dev;
+	u8 need_sync: 1;
+	u8 need_replay: 1;
+	u8 work_pending: 1;
+	unsigned int n_tables;
+	unsigned long missed;
+	struct udp_tunnel_nic_table_entry **entries;
+};
+
+struct udp_tunnel_nic_table_entry {
+	__be16 port;
+	u8 type;
+	u8 flags;
+	u16 use_cnt;
+	u8 hw_priv;
+};
+
+enum udp_parsable_tunnel_type {
+	UDP_TUNNEL_TYPE_VXLAN = 1,
+	UDP_TUNNEL_TYPE_GENEVE = 2,
+	UDP_TUNNEL_TYPE_VXLAN_GPE = 4,
+};
+
+enum udp_tunnel_nic_table_entry_flags {
+	UDP_TUNNEL_NIC_ENTRY_ADD = 1,
+	UDP_TUNNEL_NIC_ENTRY_DEL = 2,
+	UDP_TUNNEL_NIC_ENTRY_OP_FAIL = 4,
+	UDP_TUNNEL_NIC_ENTRY_FROZEN = 8,
+};
+
+struct udp_tunnel_nic_shared_node {
+	struct net_device *dev;
+	struct list_head list;
+};
+
+struct xfrm4_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, u32);
+	struct xfrm4_protocol __attribute__((btf_type_tag("rcu"))) *next;
+	int priority;
+};
+
+enum {
+	IFLA_VTI_UNSPEC = 0,
+	IFLA_VTI_LINK = 1,
+	IFLA_VTI_IKEY = 2,
+	IFLA_VTI_OKEY = 3,
+	IFLA_VTI_LOCAL = 4,
+	IFLA_VTI_REMOTE = 5,
+	IFLA_VTI_FWMARK = 6,
+	__IFLA_VTI_MAX = 7,
+};
+
+enum {
+	LINUX_MIB_XFRMNUM = 0,
+	LINUX_MIB_XFRMINERROR = 1,
+	LINUX_MIB_XFRMINBUFFERERROR = 2,
+	LINUX_MIB_XFRMINHDRERROR = 3,
+	LINUX_MIB_XFRMINNOSTATES = 4,
+	LINUX_MIB_XFRMINSTATEPROTOERROR = 5,
+	LINUX_MIB_XFRMINSTATEMODEERROR = 6,
+	LINUX_MIB_XFRMINSTATESEQERROR = 7,
+	LINUX_MIB_XFRMINSTATEEXPIRED = 8,
+	LINUX_MIB_XFRMINSTATEMISMATCH = 9,
+	LINUX_MIB_XFRMINSTATEINVALID = 10,
+	LINUX_MIB_XFRMINTMPLMISMATCH = 11,
+	LINUX_MIB_XFRMINNOPOLS = 12,
+	LINUX_MIB_XFRMINPOLBLOCK = 13,
+	LINUX_MIB_XFRMINPOLERROR = 14,
+	LINUX_MIB_XFRMOUTERROR = 15,
+	LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,
+	LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,
+	LINUX_MIB_XFRMOUTNOSTATES = 18,
+	LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,
+	LINUX_MIB_XFRMOUTSTATEMODEERROR = 20,
+	LINUX_MIB_XFRMOUTSTATESEQERROR = 21,
+	LINUX_MIB_XFRMOUTSTATEEXPIRED = 22,
+	LINUX_MIB_XFRMOUTPOLBLOCK = 23,
+	LINUX_MIB_XFRMOUTPOLDEAD = 24,
+	LINUX_MIB_XFRMOUTPOLERROR = 25,
+	LINUX_MIB_XFRMFWDHDRERROR = 26,
+	LINUX_MIB_XFRMOUTSTATEINVALID = 27,
+	LINUX_MIB_XFRMACQUIREERROR = 28,
+	__LINUX_MIB_XFRMMAX = 29,
+};
+
+struct ip6_tnl;
+
+struct xfrm_tunnel_skb_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	union {
+		struct ip_tunnel *ip4;
+		struct ip6_tnl *ip6;
+	} tunnel;
+};
+
+struct xfrm_spi_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	unsigned int daddroff;
+	unsigned int family;
+	__be32 seq;
+};
+
+struct xfrm_mode_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	__be16 id;
+	__be16 frag_off;
+	u8 ihl;
+	u8 tos;
+	u8 ttl;
+	u8 protocol;
+	u8 optlen;
+	u8 flow_lbl[3];
+};
+
+struct ip_comp_hdr {
+	__u8 nexthdr;
+	__u8 flags;
+	__be16 cpi;
+};
+
+struct xfrm_skb_cb {
+	struct xfrm_tunnel_skb_cb header;
+	union {
+		struct {
+			__u32 low;
+			__u32 hi;
+		} output;
+		struct {
+			__be32 low;
+			__be32 hi;
+		} input;
+	} seq;
+};
+
+struct esp_skb_cb {
+	struct xfrm_skb_cb xfrm;
+	void *tmp;
+};
+
+struct esp_info {
+	struct ip_esp_hdr *esph;
+	__be64 seqno;
+	int tfclen;
+	int tailen;
+	int plen;
+	int clen;
+	int len;
+	int nfrags;
+	__u8 proto;
+	bool inplace;
+};
+
+struct esp_output_extra {
+	__be32 seqhi;
+	u32 esphoff;
+};
+
+struct xfrm_algo_aead_info {
+	char *geniv;
+	u16 icv_truncbits;
+};
+
+struct xfrm_algo_auth_info {
+	u16 icv_truncbits;
+	u16 icv_fullbits;
+};
+
+struct xfrm_algo_encr_info {
+	char *geniv;
+	u16 blockbits;
+	u16 defkeybits;
+};
+
+struct xfrm_algo_comp_info {
+	u16 threshold;
+};
+
+struct sadb_alg {
+	__u8 sadb_alg_id;
+	__u8 sadb_alg_ivlen;
+	__u16 sadb_alg_minbits;
+	__u16 sadb_alg_maxbits;
+	__u16 sadb_alg_reserved;
+};
+
+struct xfrm_algo_desc {
+	char *name;
+	char *compat;
+	u8 available: 1;
+	u8 pfkey_supported: 1;
+	union {
+		struct xfrm_algo_aead_info aead;
+		struct xfrm_algo_auth_info auth;
+		struct xfrm_algo_encr_info encr;
+		struct xfrm_algo_comp_info comp;
+	} uinfo;
+	struct sadb_alg desc;
+};
+
+enum nf_ip_trace_comments {
+	NF_IP_TRACE_COMMENT_RULE = 0,
+	NF_IP_TRACE_COMMENT_RETURN = 1,
+	NF_IP_TRACE_COMMENT_POLICY = 2,
+};
+
+struct ipt_error {
+	struct ipt_entry entry;
+	struct xt_error_target target;
+};
+
+struct ipt_replace {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int num_entries;
+	unsigned int size;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_counters;
+	struct xt_counters __attribute__((btf_type_tag("user"))) *counters;
+	struct ipt_entry entries[0];
+};
+
+struct ipt_standard {
+	struct ipt_entry entry;
+	struct xt_standard_target target;
+};
+
+struct ipt_getinfo {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_entries;
+	unsigned int size;
+};
+
+struct ipt_get_entries {
+	char name[32];
+	unsigned int size;
+	struct ipt_entry entrytable[0];
+};
+
+struct xt_get_revision {
+	char name[29];
+	__u8 revision;
+};
+
+struct iptable_nat_pernet {
+	struct nf_hook_ops *nf_nat_ops;
+};
+
+enum ipt_reject_with {
+	IPT_ICMP_NET_UNREACHABLE = 0,
+	IPT_ICMP_HOST_UNREACHABLE = 1,
+	IPT_ICMP_PROT_UNREACHABLE = 2,
+	IPT_ICMP_PORT_UNREACHABLE = 3,
+	IPT_ICMP_ECHOREPLY = 4,
+	IPT_ICMP_NET_PROHIBITED = 5,
+	IPT_ICMP_HOST_PROHIBITED = 6,
+	IPT_TCP_RESET = 7,
+	IPT_ICMP_ADMIN_PROHIBITED = 8,
+};
+
+struct ipt_reject_info {
+	enum ipt_reject_with with;
+};
+
+struct arpt_devaddr_info {
+	char addr[16];
+	char mask[16];
+};
+
+struct arpt_arp {
+	struct in_addr src;
+	struct in_addr tgt;
+	struct in_addr smsk;
+	struct in_addr tmsk;
+	__u8 arhln;
+	__u8 arhln_mask;
+	struct arpt_devaddr_info src_devaddr;
+	struct arpt_devaddr_info tgt_devaddr;
+	__be16 arpop;
+	__be16 arpop_mask;
+	__be16 arhrd;
+	__be16 arhrd_mask;
+	__be16 arpro;
+	__be16 arpro_mask;
+	char iniface[16];
+	char outiface[16];
+	unsigned char iniface_mask[16];
+	unsigned char outiface_mask[16];
+	__u8 flags;
+	__u16 invflags;
+};
+
+struct arpt_entry {
+	struct arpt_arp arp;
+	__u16 target_offset;
+	__u16 next_offset;
+	unsigned int comefrom;
+	struct xt_counters counters;
+	unsigned char elems[0];
+};
+
+struct arpt_error {
+	struct arpt_entry entry;
+	struct xt_error_target target;
+};
+
+struct arpt_replace {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int num_entries;
+	unsigned int size;
+	unsigned int hook_entry[3];
+	unsigned int underflow[3];
+	unsigned int num_counters;
+	struct xt_counters __attribute__((btf_type_tag("user"))) *counters;
+	struct arpt_entry entries[0];
+};
+
+struct arpt_standard {
+	struct arpt_entry entry;
+	struct xt_standard_target target;
+};
+
+struct arpt_getinfo {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int hook_entry[3];
+	unsigned int underflow[3];
+	unsigned int num_entries;
+	unsigned int size;
+};
+
+struct arpt_get_entries {
+	char name[32];
+	unsigned int size;
+	struct arpt_entry entrytable[0];
+};
+
+struct arpt_mangle {
+	char src_devaddr[16];
+	char tgt_devaddr[16];
+	union {
+		struct in_addr src_ip;
+	} u_s;
+	union {
+		struct in_addr tgt_ip;
+	} u_t;
+	__u8 flags;
+	int target;
+};
+
+struct inet_diag_req_v2;
+
+struct inet_diag_msg;
+
+struct inet_diag_handler {
+	void (*dump)(struct sk_buff *, struct netlink_callback *, const struct inet_diag_req_v2 *);
+	int (*dump_one)(struct netlink_callback *, const struct inet_diag_req_v2 *);
+	void (*idiag_get_info)(struct sock *, struct inet_diag_msg *, void *);
+	int (*idiag_get_aux)(struct sock *, bool, struct sk_buff *);
+	size_t (*idiag_get_aux_size)(struct sock *, bool);
+	int (*destroy)(struct sk_buff *, const struct inet_diag_req_v2 *);
+	__u16 idiag_type;
+	__u16 idiag_info_size;
+};
+
+struct inet_diag_sockid {
+	__be16 idiag_sport;
+	__be16 idiag_dport;
+	__be32 idiag_src[4];
+	__be32 idiag_dst[4];
+	__u32 idiag_if;
+	__u32 idiag_cookie[2];
+};
+
+struct inet_diag_req_v2 {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u8 idiag_ext;
+	__u8 pad;
+	__u32 idiag_states;
+	struct inet_diag_sockid id;
+};
+
+struct inet_diag_msg {
+	__u8 idiag_family;
+	__u8 idiag_state;
+	__u8 idiag_timer;
+	__u8 idiag_retrans;
+	struct inet_diag_sockid id;
+	__u32 idiag_expires;
+	__u32 idiag_rqueue;
+	__u32 idiag_wqueue;
+	__u32 idiag_uid;
+	__u32 idiag_inode;
+};
+
+enum {
+	INET_DIAG_NONE = 0,
+	INET_DIAG_MEMINFO = 1,
+	INET_DIAG_INFO = 2,
+	INET_DIAG_VEGASINFO = 3,
+	INET_DIAG_CONG = 4,
+	INET_DIAG_TOS = 5,
+	INET_DIAG_TCLASS = 6,
+	INET_DIAG_SKMEMINFO = 7,
+	INET_DIAG_SHUTDOWN = 8,
+	INET_DIAG_DCTCPINFO = 9,
+	INET_DIAG_PROTOCOL = 10,
+	INET_DIAG_SKV6ONLY = 11,
+	INET_DIAG_LOCALS = 12,
+	INET_DIAG_PEERS = 13,
+	INET_DIAG_PAD = 14,
+	INET_DIAG_MARK = 15,
+	INET_DIAG_BBRINFO = 16,
+	INET_DIAG_CLASS_ID = 17,
+	INET_DIAG_MD5SIG = 18,
+	INET_DIAG_ULP_INFO = 19,
+	INET_DIAG_SK_BPF_STORAGES = 20,
+	INET_DIAG_CGROUP_ID = 21,
+	INET_DIAG_SOCKOPT = 22,
+	__INET_DIAG_MAX = 23,
+};
+
+enum {
+	INET_DIAG_REQ_NONE = 0,
+	INET_DIAG_REQ_BYTECODE = 1,
+	INET_DIAG_REQ_SK_BPF_STORAGES = 2,
+	INET_DIAG_REQ_PROTOCOL = 3,
+	__INET_DIAG_REQ_MAX = 4,
+};
+
+enum {
+	INET_DIAG_BC_NOP = 0,
+	INET_DIAG_BC_JMP = 1,
+	INET_DIAG_BC_S_GE = 2,
+	INET_DIAG_BC_S_LE = 3,
+	INET_DIAG_BC_D_GE = 4,
+	INET_DIAG_BC_D_LE = 5,
+	INET_DIAG_BC_AUTO = 6,
+	INET_DIAG_BC_S_COND = 7,
+	INET_DIAG_BC_D_COND = 8,
+	INET_DIAG_BC_DEV_COND = 9,
+	INET_DIAG_BC_MARK_COND = 10,
+	INET_DIAG_BC_S_EQ = 11,
+	INET_DIAG_BC_D_EQ = 12,
+	INET_DIAG_BC_CGROUP_COND = 13,
+};
+
+struct inet_diag_hostcond {
+	__u8 family;
+	__u8 prefix_len;
+	int port;
+	__be32 addr[0];
+};
+
+struct inet_diag_markcond {
+	__u32 mark;
+	__u32 mask;
+};
+
+struct inet_diag_dump_data {
+	struct nlattr *req_nlas[4];
+	struct bpf_sk_storage_diag *bpf_stg_diag;
+};
+
+struct inet_diag_entry {
+	const __be32 *saddr;
+	const __be32 *daddr;
+	u16 sport;
+	u16 dport;
+	u16 family;
+	u16 userlocks;
+	u32 ifindex;
+	u32 mark;
+	u64 cgroup_id;
+};
+
+struct inet_diag_bc_op {
+	unsigned char code;
+	unsigned char yes;
+	unsigned short no;
+};
+
+struct inet_diag_req {
+	__u8 idiag_family;
+	__u8 idiag_src_len;
+	__u8 idiag_dst_len;
+	__u8 idiag_ext;
+	struct inet_diag_sockid id;
+	__u32 idiag_states;
+	__u32 idiag_dbs;
+};
+
+struct inet_diag_sockopt {
+	__u8 recverr: 1;
+	__u8 is_icsk: 1;
+	__u8 freebind: 1;
+	__u8 hdrincl: 1;
+	__u8 mc_loop: 1;
+	__u8 transparent: 1;
+	__u8 mc_all: 1;
+	__u8 nodefrag: 1;
+	__u8 bind_address_no_port: 1;
+	__u8 recverr_rfc4884: 1;
+	__u8 defer_connect: 1;
+	__u8 unused: 5;
+};
+
+struct inet_diag_meminfo {
+	__u32 idiag_rmem;
+	__u32 idiag_wmem;
+	__u32 idiag_fmem;
+	__u32 idiag_tmem;
+};
+
+enum {
+	INET_ULP_INFO_UNSPEC = 0,
+	INET_ULP_INFO_NAME = 1,
+	INET_ULP_INFO_TLS = 2,
+	INET_ULP_INFO_MPTCP = 3,
+	__INET_ULP_INFO_MAX = 4,
+};
+
+struct bictcp {
+	u32 cnt;
+	u32 last_max_cwnd;
+	u32 last_cwnd;
+	u32 last_time;
+	u32 bic_origin_point;
+	u32 bic_K;
+	u32 delay_min;
+	u32 epoch_start;
+	u32 ack_cnt;
+	u32 tcp_cwnd;
+	u16 unused;
+	u8 sample_cnt;
+	u8 found;
+	u32 round_start;
+	u32 end_seq;
+	u32 last_ack;
+	u32 curr_rtt;
+};
+
+enum {
+	TCP_BPF_IPV4 = 0,
+	TCP_BPF_IPV6 = 1,
+	TCP_BPF_NUM_PROTS = 2,
+};
+
+enum {
+	TCP_BPF_BASE = 0,
+	TCP_BPF_TX = 1,
+	TCP_BPF_RX = 2,
+	TCP_BPF_TXRX = 3,
+	TCP_BPF_NUM_CFGS = 4,
+};
+
+struct tx_work {
+	struct delayed_work work;
+	struct sock *sk;
+};
+
+struct tls_rec;
+
+struct tls_sw_context_tx {
+	struct crypto_aead *aead_send;
+	struct crypto_wait async_wait;
+	struct tx_work tx_work;
+	struct tls_rec *open_rec;
+	struct list_head tx_list;
+	atomic_t encrypt_pending;
+	u8 async_capable: 1;
+	unsigned long tx_bitmask;
+	u64 android_kabi_reserved1;
+};
+
+enum {
+	UDP_BPF_IPV4 = 0,
+	UDP_BPF_IPV6 = 1,
+	UDP_BPF_NUM_PROTS = 2,
+};
+
+struct xfrm_policy_afinfo {
+	struct dst_ops *dst_ops;
+	struct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);
+	int (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);
+	int (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);
+	struct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);
+};
+
+struct xfrm_state_afinfo {
+	u8 family;
+	u8 proto;
+	const struct xfrm_type_offload *type_offload_esp;
+	const struct xfrm_type *type_esp;
+	const struct xfrm_type *type_ipip;
+	const struct xfrm_type *type_ipip6;
+	const struct xfrm_type *type_comp;
+	const struct xfrm_type *type_ah;
+	const struct xfrm_type *type_routing;
+	const struct xfrm_type *type_dstopts;
+	int (*output)(struct net *, struct sock *, struct sk_buff *);
+	int (*transport_finish)(struct sk_buff *, int);
+	void (*local_error)(struct sk_buff *, u32);
+};
+
+struct xfrm_input_afinfo {
+	u8 family;
+	bool is_ipip;
+	int (*callback)(struct sk_buff *, u8, int);
+};
+
+typedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32);
+
+struct xfrm_if_decode_session_result;
+
+struct xfrm_if_cb {
+	bool (*decode_session)(struct sk_buff *, unsigned short, struct xfrm_if_decode_session_result *);
+};
+
+struct xfrm_if_decode_session_result {
+	struct net *net;
+	u32 if_id;
+};
+
+enum {
+	XFRM_POLICY_TYPE_MAIN = 0,
+	XFRM_POLICY_TYPE_SUB = 1,
+	XFRM_POLICY_TYPE_MAX = 2,
+	XFRM_POLICY_TYPE_ANY = 255,
+};
+
+enum xfrm_pol_inexact_candidate_type {
+	XFRM_POL_CAND_BOTH = 0,
+	XFRM_POL_CAND_SADDR = 1,
+	XFRM_POL_CAND_DADDR = 2,
+	XFRM_POL_CAND_ANY = 3,
+	XFRM_POL_CAND_MAX = 4,
+};
+
+enum {
+	XFRM_STATE_VOID = 0,
+	XFRM_STATE_ACQ = 1,
+	XFRM_STATE_VALID = 2,
+	XFRM_STATE_ERROR = 3,
+	XFRM_STATE_EXPIRED = 4,
+	XFRM_STATE_DEAD = 5,
+};
+
+struct xfrm_pol_inexact_node {
+	struct rb_node node;
+	union {
+		xfrm_address_t addr;
+		struct callback_head rcu;
+	};
+	u8 prefixlen;
+	struct rb_root root;
+	struct hlist_head hhead;
+};
+
+struct xfrm_pol_inexact_key {
+	possible_net_t net;
+	u32 if_id;
+	u16 family;
+	u8 dir;
+	u8 type;
+};
+
+struct xfrm_pol_inexact_bin {
+	struct xfrm_pol_inexact_key k;
+	struct rhash_head head;
+	struct hlist_head hhead;
+	seqcount_spinlock_t count;
+	struct rb_root root_d;
+	struct rb_root root_s;
+	struct list_head inexact_bins;
+	struct callback_head rcu;
+};
+
+struct ip6_mh {
+	__u8 ip6mh_proto;
+	__u8 ip6mh_hdrlen;
+	__u8 ip6mh_type;
+	__u8 ip6mh_reserved;
+	__u16 ip6mh_cksum;
+	__u8 data[0];
+};
+
+struct xfrm_flo {
+	struct dst_entry *dst_orig;
+	u8 flags;
+};
+
+struct xfrm_pol_inexact_candidates {
+	struct hlist_head *res[4];
+};
+
+struct xfrm_migrate {
+	xfrm_address_t old_daddr;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_daddr;
+	xfrm_address_t new_saddr;
+	u8 proto;
+	u8 mode;
+	u16 reserved;
+	u32 reqid;
+	u16 old_family;
+	u16 new_family;
+};
+
+struct xfrm_kmaddress {
+	xfrm_address_t local;
+	xfrm_address_t remote;
+	u32 reserved;
+	u16 family;
+};
+
+struct xfrmk_spdinfo {
+	u32 incnt;
+	u32 outcnt;
+	u32 fwdcnt;
+	u32 inscnt;
+	u32 outscnt;
+	u32 fwdscnt;
+	u32 spdhcnt;
+	u32 spdhmcnt;
+};
+
+struct xfrm_policy_walk {
+	struct xfrm_policy_walk_entry walk;
+	u8 type;
+	u32 seq;
+};
+
+enum {
+	XFRM_MSG_BASE = 16,
+	XFRM_MSG_NEWSA = 16,
+	XFRM_MSG_DELSA = 17,
+	XFRM_MSG_GETSA = 18,
+	XFRM_MSG_NEWPOLICY = 19,
+	XFRM_MSG_DELPOLICY = 20,
+	XFRM_MSG_GETPOLICY = 21,
+	XFRM_MSG_ALLOCSPI = 22,
+	XFRM_MSG_ACQUIRE = 23,
+	XFRM_MSG_EXPIRE = 24,
+	XFRM_MSG_UPDPOLICY = 25,
+	XFRM_MSG_UPDSA = 26,
+	XFRM_MSG_POLEXPIRE = 27,
+	XFRM_MSG_FLUSHSA = 28,
+	XFRM_MSG_FLUSHPOLICY = 29,
+	XFRM_MSG_NEWAE = 30,
+	XFRM_MSG_GETAE = 31,
+	XFRM_MSG_REPORT = 32,
+	XFRM_MSG_MIGRATE = 33,
+	XFRM_MSG_NEWSADINFO = 34,
+	XFRM_MSG_GETSADINFO = 35,
+	XFRM_MSG_NEWSPDINFO = 36,
+	XFRM_MSG_GETSPDINFO = 37,
+	XFRM_MSG_MAPPING = 38,
+	XFRM_MSG_SETDEFAULT = 39,
+	XFRM_MSG_GETDEFAULT = 40,
+	__XFRM_MSG_MAX = 41,
+};
+
+enum {
+	XFRM_MODE_FLAG_TUNNEL = 1,
+};
+
+enum xfrm_attr_type_t {
+	XFRMA_UNSPEC = 0,
+	XFRMA_ALG_AUTH = 1,
+	XFRMA_ALG_CRYPT = 2,
+	XFRMA_ALG_COMP = 3,
+	XFRMA_ENCAP = 4,
+	XFRMA_TMPL = 5,
+	XFRMA_SA = 6,
+	XFRMA_POLICY = 7,
+	XFRMA_SEC_CTX = 8,
+	XFRMA_LTIME_VAL = 9,
+	XFRMA_REPLAY_VAL = 10,
+	XFRMA_REPLAY_THRESH = 11,
+	XFRMA_ETIMER_THRESH = 12,
+	XFRMA_SRCADDR = 13,
+	XFRMA_COADDR = 14,
+	XFRMA_LASTUSED = 15,
+	XFRMA_POLICY_TYPE = 16,
+	XFRMA_MIGRATE = 17,
+	XFRMA_ALG_AEAD = 18,
+	XFRMA_KMADDRESS = 19,
+	XFRMA_ALG_AUTH_TRUNC = 20,
+	XFRMA_MARK = 21,
+	XFRMA_TFCPAD = 22,
+	XFRMA_REPLAY_ESN_VAL = 23,
+	XFRMA_SA_EXTRA_FLAGS = 24,
+	XFRMA_PROTO = 25,
+	XFRMA_ADDRESS_FILTER = 26,
+	XFRMA_PAD = 27,
+	XFRMA_OFFLOAD_DEV = 28,
+	XFRMA_SET_MARK = 29,
+	XFRMA_SET_MARK_MASK = 30,
+	XFRMA_IF_ID = 31,
+	XFRMA_MTIMER_THRESH = 32,
+	__XFRMA_MAX = 33,
+};
+
+enum xfrm_ae_ftype_t {
+	XFRM_AE_UNSPEC = 0,
+	XFRM_AE_RTHR = 1,
+	XFRM_AE_RVAL = 2,
+	XFRM_AE_LVAL = 4,
+	XFRM_AE_ETHR = 8,
+	XFRM_AE_CR = 16,
+	XFRM_AE_CE = 32,
+	XFRM_AE_CU = 64,
+	__XFRM_AE_MAX = 65,
+};
+
+enum xfrm_nlgroups {
+	XFRMNLGRP_NONE = 0,
+	XFRMNLGRP_ACQUIRE = 1,
+	XFRMNLGRP_EXPIRE = 2,
+	XFRMNLGRP_SA = 3,
+	XFRMNLGRP_POLICY = 4,
+	XFRMNLGRP_AEVENTS = 5,
+	XFRMNLGRP_REPORT = 6,
+	XFRMNLGRP_MIGRATE = 7,
+	XFRMNLGRP_MAPPING = 8,
+	__XFRMNLGRP_MAX = 9,
+};
+
+struct km_event;
+
+struct xfrm_mgr {
+	struct list_head list;
+	int (*notify)(struct xfrm_state *, const struct km_event *);
+	int (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);
+	struct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);
+	int (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);
+	int (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);
+	int (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);
+	int (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);
+	bool (*is_alive)(const struct km_event *);
+};
+
+struct km_event {
+	union {
+		u32 hard;
+		u32 proto;
+		u32 byid;
+		u32 aevent;
+		u32 type;
+	} data;
+	u32 seq;
+	u32 portid;
+	u32 event;
+	struct net *net;
+};
+
+struct xfrm_user_sec_ctx {
+	__u16 len;
+	__u16 exttype;
+	__u8 ctx_alg;
+	__u8 ctx_doi;
+	__u16 ctx_len;
+};
+
+struct xfrmk_sadinfo {
+	u32 sadhcnt;
+	u32 sadhmcnt;
+	u32 sadcnt;
+};
+
+struct xfrm_trans_tasklet {
+	struct work_struct work;
+	spinlock_t queue_lock;
+	struct sk_buff_head queue;
+};
+
+struct __ip6_tnl_parm {
+	char name[16];
+	int link;
+	__u8 proto;
+	__u8 encap_limit;
+	__u8 hop_limit;
+	bool collect_md;
+	__be32 flowinfo;
+	__u32 flags;
+	struct in6_addr laddr;
+	struct in6_addr raddr;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+	__u32 fwmark;
+	__u32 index;
+	__u8 erspan_ver;
+	__u8 dir;
+	__u16 hwid;
+};
+
+struct ip6_tnl {
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *next;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+	struct net *net;
+	struct __ip6_tnl_parm parms;
+	struct flowi fl;
+	struct dst_cache dst_cache;
+	struct gro_cells gro_cells;
+	int err_count;
+	unsigned long err_time;
+	__u32 i_seqno;
+	atomic_t o_seqno;
+	int hlen;
+	int tun_hlen;
+	int encap_hlen;
+	struct ip_tunnel_encap encap;
+	int mlink;
+};
+
+struct xfrm_trans_cb {
+	union {
+		struct inet_skb_parm h4;
+		struct inet6_skb_parm h6;
+	} header;
+	int (*finish)(struct net *, struct sock *, struct sk_buff *);
+	struct net *net;
+};
+
+struct ip_beet_phdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 padlen;
+	__u8 reserved;
+};
+
+struct xfrm_algo_list {
+	struct xfrm_algo_desc *algs;
+	int entries;
+	u32 type;
+	u32 mask;
+};
+
+struct xfrm_aead_name {
+	const char *name;
+	int icvbits;
+};
+
+struct xfrm_link {
+	int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **, struct netlink_ext_ack *);
+	int (*start)(struct netlink_callback *);
+	int (*dump)(struct sk_buff *, struct netlink_callback *);
+	int (*done)(struct netlink_callback *);
+	const struct nla_policy *nla_pol;
+	int nla_max;
+};
+
+enum {
+	XFRM_DEV_OFFLOAD_IN = 1,
+	XFRM_DEV_OFFLOAD_OUT = 2,
+	XFRM_DEV_OFFLOAD_FWD = 3,
+};
+
+enum {
+	XFRM_SHARE_ANY = 0,
+	XFRM_SHARE_SESSION = 1,
+	XFRM_SHARE_USER = 2,
+	XFRM_SHARE_UNIQUE = 3,
+};
+
+enum xfrm_sadattr_type_t {
+	XFRMA_SAD_UNSPEC = 0,
+	XFRMA_SAD_CNT = 1,
+	XFRMA_SAD_HINFO = 2,
+	__XFRMA_SAD_MAX = 3,
+};
+
+enum xfrm_spdattr_type_t {
+	XFRMA_SPD_UNSPEC = 0,
+	XFRMA_SPD_INFO = 1,
+	XFRMA_SPD_HINFO = 2,
+	XFRMA_SPD_IPV4_HTHRESH = 3,
+	XFRMA_SPD_IPV6_HTHRESH = 4,
+	__XFRMA_SPD_MAX = 5,
+};
+
+struct xfrm_userpolicy_info {
+	struct xfrm_selector sel;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	__u32 priority;
+	__u32 index;
+	__u8 dir;
+	__u8 action;
+	__u8 flags;
+	__u8 share;
+};
+
+struct xfrm_user_tmpl {
+	struct xfrm_id id;
+	__u16 family;
+	xfrm_address_t saddr;
+	__u32 reqid;
+	__u8 mode;
+	__u8 share;
+	__u8 optional;
+	__u32 aalgos;
+	__u32 ealgos;
+	__u32 calgos;
+};
+
+struct xfrm_usersa_info {
+	struct xfrm_selector sel;
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_lifetime_cfg lft;
+	struct xfrm_lifetime_cur curlft;
+	struct xfrm_stats stats;
+	__u32 seq;
+	__u32 reqid;
+	__u16 family;
+	__u8 mode;
+	__u8 replay_window;
+	__u8 flags;
+};
+
+struct xfrm_user_expire {
+	struct xfrm_usersa_info state;
+	__u8 hard;
+};
+
+struct xfrm_usersa_id {
+	xfrm_address_t daddr;
+	__be32 spi;
+	__u16 family;
+	__u8 proto;
+};
+
+struct xfrm_usersa_flush {
+	__u8 proto;
+};
+
+struct xfrm_translator {
+	int (*alloc_compat)(struct sk_buff *, const struct nlmsghdr *);
+	struct nlmsghdr * (*rcv_msg_compat)(const struct nlmsghdr *, int, const struct nla_policy *, struct netlink_ext_ack *);
+	int (*xlate_user_policy_sockptr)(u8 **, int);
+	struct module *owner;
+};
+
+struct xfrm_user_acquire {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_selector sel;
+	struct xfrm_userpolicy_info policy;
+	__u32 aalgos;
+	__u32 ealgos;
+	__u32 calgos;
+	__u32 seq;
+};
+
+struct xfrm_user_offload {
+	int ifindex;
+	__u8 flags;
+};
+
+struct xfrm_user_mapping {
+	struct xfrm_usersa_id id;
+	__u32 reqid;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_saddr;
+	__be16 old_sport;
+	__be16 new_sport;
+};
+
+struct xfrm_userpolicy_id {
+	struct xfrm_selector sel;
+	__u32 index;
+	__u8 dir;
+};
+
+struct xfrm_user_polexpire {
+	struct xfrm_userpolicy_info pol;
+	__u8 hard;
+};
+
+struct xfrm_user_report {
+	__u8 proto;
+	struct xfrm_selector sel;
+};
+
+struct xfrm_user_kmaddress {
+	xfrm_address_t local;
+	xfrm_address_t remote;
+	__u32 reserved;
+	__u16 family;
+};
+
+struct xfrm_user_migrate {
+	xfrm_address_t old_daddr;
+	xfrm_address_t old_saddr;
+	xfrm_address_t new_daddr;
+	xfrm_address_t new_saddr;
+	__u8 proto;
+	__u8 mode;
+	__u16 reserved;
+	__u32 reqid;
+	__u16 old_family;
+	__u16 new_family;
+};
+
+struct xfrm_dump_info {
+	struct sk_buff *in_skb;
+	struct sk_buff *out_skb;
+	u32 nlmsg_seq;
+	u16 nlmsg_flags;
+};
+
+struct xfrm_userpolicy_type {
+	__u8 type;
+	__u16 reserved1;
+	__u8 reserved2;
+};
+
+struct xfrmu_sadhinfo {
+	__u32 sadhcnt;
+	__u32 sadhmcnt;
+};
+
+struct xfrmu_spdinfo {
+	__u32 incnt;
+	__u32 outcnt;
+	__u32 fwdcnt;
+	__u32 inscnt;
+	__u32 outscnt;
+	__u32 fwdscnt;
+};
+
+struct xfrmu_spdhinfo {
+	__u32 spdhcnt;
+	__u32 spdhmcnt;
+};
+
+struct xfrmu_spdhthresh {
+	__u8 lbits;
+	__u8 rbits;
+};
+
+struct xfrm_userpolicy_default {
+	__u8 in;
+	__u8 fwd;
+	__u8 out;
+};
+
+struct xfrm_aevent_id {
+	struct xfrm_usersa_id sa_id;
+	xfrm_address_t saddr;
+	__u32 flags;
+	__u32 reqid;
+};
+
+struct xfrm_userspi_info {
+	struct xfrm_usersa_info info;
+	__u32 min;
+	__u32 max;
+};
+
+struct ipcomp_tfms {
+	struct list_head list;
+	struct crypto_comp * __attribute__((btf_type_tag("percpu"))) *tfms;
+	int users;
+};
+
+struct ipcomp_data {
+	u16 threshold;
+	struct crypto_comp * __attribute__((btf_type_tag("percpu"))) *tfms;
+};
+
+struct xfrm6_tunnel {
+	int (*handler)(struct sk_buff *);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	struct xfrm6_tunnel __attribute__((btf_type_tag("rcu"))) *next;
+	int priority;
+};
+
+struct xfrm6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*input_handler)(struct sk_buff *, int, __be32, int);
+	int (*cb_handler)(struct sk_buff *, int);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	struct xfrm6_protocol __attribute__((btf_type_tag("rcu"))) *next;
+	int priority;
+};
+
+enum {
+	LWT_XFRM_UNSPEC = 0,
+	LWT_XFRM_IF_ID = 1,
+	LWT_XFRM_LINK = 2,
+	__LWT_XFRM_MAX = 3,
+};
+
+enum {
+	IFLA_XFRM_UNSPEC = 0,
+	IFLA_XFRM_LINK = 1,
+	IFLA_XFRM_IF_ID = 2,
+	IFLA_XFRM_COLLECT_METADATA = 3,
+	__IFLA_XFRM_MAX = 4,
+};
+
+struct xfrm_if_parms {
+	int link;
+	u32 if_id;
+	bool collect_md;
+};
+
+struct xfrm_if {
+	struct xfrm_if __attribute__((btf_type_tag("rcu"))) *next;
+	struct net_device *dev;
+	struct net *net;
+	struct xfrm_if_parms p;
+	struct gro_cells gro_cells;
+};
+
+struct xfrmi_net {
+	struct xfrm_if __attribute__((btf_type_tag("rcu"))) *xfrmi[256];
+	struct xfrm_if __attribute__((btf_type_tag("rcu"))) *collect_md_xfrmi;
+};
+
+struct bpf_xfrm_info {
+	u32 if_id;
+	int link;
+};
+
+enum unix_socket_lock_class {
+	U_LOCK_NORMAL = 0,
+	U_LOCK_SECOND = 1,
+	U_LOCK_DIAG = 2,
+	U_LOCK_GC_LISTENER = 3,
+};
+
+struct unix_skb_parms {
+	struct pid *pid;
+	kuid_t uid;
+	kgid_t gid;
+	struct scm_fp_list *fp;
+	u32 secid;
+	u32 consumed;
+};
+
+struct bpf_iter__unix {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct unix_sock *unix_sk;
+	};
+	uid_t uid;
+};
+
+struct bpf_unix_iter_state {
+	struct seq_net_private p;
+	unsigned int cur_sk;
+	unsigned int end_sk;
+	unsigned int max_sk;
+	struct sock **batch;
+	bool st_bucket_done;
+};
+
+struct unix_stream_read_state {
+	int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);
+	struct socket *socket;
+	struct msghdr *msg;
+	struct pipe_inode_info *pipe;
+	size_t size;
+	int flags;
+	unsigned int splice_flags;
+};
+
+struct ipv6_params {
+	__s32 disable_ipv6;
+	__s32 autoconf;
+};
+
+struct ioam6_pernet_data {
+	struct mutex lock;
+	struct rhashtable namespaces;
+	struct rhashtable schemas;
+};
+
+struct ipv6_stub {
+	int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);
+	int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);
+	struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);
+	int (*ipv6_route_input)(struct sk_buff *);
+	struct fib6_table * (*fib6_get_table)(struct net *, u32);
+	int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);
+	int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);
+	void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);
+	u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);
+	int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);
+	void (*fib6_nh_release)(struct fib6_nh *);
+	void (*fib6_nh_release_dsts)(struct fib6_nh *);
+	void (*fib6_update_sernum)(struct net *, struct fib6_info *);
+	int (*ip6_del_rt)(struct net *, struct fib6_info *, bool);
+	void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);
+	void (*udpv6_encap_enable)();
+	void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);
+	void (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);
+	int (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);
+	int (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);
+	struct neigh_table *nd_tbl;
+	int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));
+	struct net_device * (*ipv6_dev_find)(struct net *, const struct in6_addr *, struct net_device *);
+};
+
+enum flowlabel_reflect {
+	FLOWLABEL_REFLECT_ESTABLISHED = 1,
+	FLOWLABEL_REFLECT_TCP_RESET = 2,
+	FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,
+};
+
+struct in6_rtmsg {
+	struct in6_addr rtmsg_dst;
+	struct in6_addr rtmsg_src;
+	struct in6_addr rtmsg_gateway;
+	__u32 rtmsg_type;
+	__u16 rtmsg_dst_len;
+	__u16 rtmsg_src_len;
+	__u32 rtmsg_metric;
+	unsigned long rtmsg_info;
+	__u32 rtmsg_flags;
+	int rtmsg_ifindex;
+};
+
+struct compat_in6_rtmsg {
+	struct in6_addr rtmsg_dst;
+	struct in6_addr rtmsg_src;
+	struct in6_addr rtmsg_gateway;
+	u32 rtmsg_type;
+	u16 rtmsg_dst_len;
+	u16 rtmsg_src_len;
+	u32 rtmsg_metric;
+	u32 rtmsg_info;
+	u32 rtmsg_flags;
+	s32 rtmsg_ifindex;
+};
+
+struct ac6_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+enum {
+	ICMP6_MIB_NUM = 0,
+	ICMP6_MIB_INMSGS = 1,
+	ICMP6_MIB_INERRORS = 2,
+	ICMP6_MIB_OUTMSGS = 3,
+	ICMP6_MIB_OUTERRORS = 4,
+	ICMP6_MIB_CSUMERRORS = 5,
+	ICMP6_MIB_RATELIMITHOST = 6,
+	__ICMP6_MIB_MAX = 7,
+};
+
+struct ip6_frag_state {
+	u8 *prevhdr;
+	unsigned int hlen;
+	unsigned int mtu;
+	unsigned int left;
+	int offset;
+	int ptr;
+	int hroom;
+	int troom;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct ip6_fraglist_iter {
+	struct ipv6hdr *tmp_hdr;
+	struct sk_buff *frag;
+	int offset;
+	unsigned int hlen;
+	__be32 frag_id;
+	u8 nexthdr;
+};
+
+struct hop_jumbo_hdr {
+	u8 nexthdr;
+	u8 hdrlen;
+	u8 tlv_type;
+	u8 tlv_len;
+	__be32 jumbo_payload_len;
+};
+
+struct ip6_ra_chain {
+	struct ip6_ra_chain *next;
+	struct sock *sk;
+	int sel;
+	void (*destructor)(struct sock *);
+};
+
+struct ipcm6_cookie {
+	struct sockcm_cookie sockc;
+	__s16 hlimit;
+	__s16 tclass;
+	__u16 gso_size;
+	__s8 dontfrag;
+	struct ipv6_txoptions *opt;
+};
+
+struct inet6_protocol {
+	int (*handler)(struct sk_buff *);
+	int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);
+	unsigned int flags;
+};
+
+enum {
+	INET6_IFADDR_STATE_PREDAD = 0,
+	INET6_IFADDR_STATE_DAD = 1,
+	INET6_IFADDR_STATE_POSTDAD = 2,
+	INET6_IFADDR_STATE_ERRDAD = 3,
+	INET6_IFADDR_STATE_DEAD = 4,
+};
+
+enum {
+	IPV6_SADDR_RULE_INIT = 0,
+	IPV6_SADDR_RULE_LOCAL = 1,
+	IPV6_SADDR_RULE_SCOPE = 2,
+	IPV6_SADDR_RULE_PREFERRED = 3,
+	IPV6_SADDR_RULE_HOA = 4,
+	IPV6_SADDR_RULE_OIF = 5,
+	IPV6_SADDR_RULE_LABEL = 6,
+	IPV6_SADDR_RULE_PRIVACY = 7,
+	IPV6_SADDR_RULE_ORCHID = 8,
+	IPV6_SADDR_RULE_PREFIX = 9,
+	IPV6_SADDR_RULE_NOT_OPTIMISTIC = 10,
+	IPV6_SADDR_RULE_MAX = 11,
+};
+
+enum {
+	DAD_PROCESS = 0,
+	DAD_BEGIN = 1,
+	DAD_ABORT = 2,
+};
+
+enum cleanup_prefix_rt_t {
+	CLEANUP_PREFIX_RT_NOP = 0,
+	CLEANUP_PREFIX_RT_DEL = 1,
+	CLEANUP_PREFIX_RT_EXPIRE = 2,
+};
+
+enum {
+	DEVCONF_FORWARDING = 0,
+	DEVCONF_HOPLIMIT = 1,
+	DEVCONF_MTU6 = 2,
+	DEVCONF_ACCEPT_RA = 3,
+	DEVCONF_ACCEPT_REDIRECTS = 4,
+	DEVCONF_AUTOCONF = 5,
+	DEVCONF_DAD_TRANSMITS = 6,
+	DEVCONF_RTR_SOLICITS = 7,
+	DEVCONF_RTR_SOLICIT_INTERVAL = 8,
+	DEVCONF_RTR_SOLICIT_DELAY = 9,
+	DEVCONF_USE_TEMPADDR = 10,
+	DEVCONF_TEMP_VALID_LFT = 11,
+	DEVCONF_TEMP_PREFERED_LFT = 12,
+	DEVCONF_REGEN_MAX_RETRY = 13,
+	DEVCONF_MAX_DESYNC_FACTOR = 14,
+	DEVCONF_MAX_ADDRESSES = 15,
+	DEVCONF_FORCE_MLD_VERSION = 16,
+	DEVCONF_ACCEPT_RA_DEFRTR = 17,
+	DEVCONF_ACCEPT_RA_PINFO = 18,
+	DEVCONF_ACCEPT_RA_RTR_PREF = 19,
+	DEVCONF_RTR_PROBE_INTERVAL = 20,
+	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,
+	DEVCONF_PROXY_NDP = 22,
+	DEVCONF_OPTIMISTIC_DAD = 23,
+	DEVCONF_ACCEPT_SOURCE_ROUTE = 24,
+	DEVCONF_MC_FORWARDING = 25,
+	DEVCONF_DISABLE_IPV6 = 26,
+	DEVCONF_ACCEPT_DAD = 27,
+	DEVCONF_FORCE_TLLAO = 28,
+	DEVCONF_NDISC_NOTIFY = 29,
+	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,
+	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,
+	DEVCONF_SUPPRESS_FRAG_NDISC = 32,
+	DEVCONF_ACCEPT_RA_FROM_LOCAL = 33,
+	DEVCONF_USE_OPTIMISTIC = 34,
+	DEVCONF_ACCEPT_RA_MTU = 35,
+	DEVCONF_STABLE_SECRET = 36,
+	DEVCONF_USE_OIF_ADDRS_ONLY = 37,
+	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,
+	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,
+	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,
+	DEVCONF_DROP_UNSOLICITED_NA = 41,
+	DEVCONF_KEEP_ADDR_ON_DOWN = 42,
+	DEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,
+	DEVCONF_SEG6_ENABLED = 44,
+	DEVCONF_SEG6_REQUIRE_HMAC = 45,
+	DEVCONF_ENHANCED_DAD = 46,
+	DEVCONF_ADDR_GEN_MODE = 47,
+	DEVCONF_DISABLE_POLICY = 48,
+	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,
+	DEVCONF_NDISC_TCLASS = 50,
+	DEVCONF_RPL_SEG_ENABLED = 51,
+	DEVCONF_RA_DEFRTR_METRIC = 52,
+	DEVCONF_IOAM6_ENABLED = 53,
+	DEVCONF_IOAM6_ID = 54,
+	DEVCONF_IOAM6_ID_WIDE = 55,
+	DEVCONF_NDISC_EVICT_NOCARRIER = 56,
+	DEVCONF_ACCEPT_UNTRACKED_NA = 57,
+	DEVCONF_ACCEPT_RA_MIN_LFT = 58,
+	DEVCONF_MAX = 59,
+};
+
+enum {
+	IFLA_INET6_UNSPEC = 0,
+	IFLA_INET6_FLAGS = 1,
+	IFLA_INET6_CONF = 2,
+	IFLA_INET6_STATS = 3,
+	IFLA_INET6_MCAST = 4,
+	IFLA_INET6_CACHEINFO = 5,
+	IFLA_INET6_ICMP6STATS = 6,
+	IFLA_INET6_TOKEN = 7,
+	IFLA_INET6_ADDR_GEN_MODE = 8,
+	IFLA_INET6_RA_MTU = 9,
+	__IFLA_INET6_MAX = 10,
+};
+
+enum {
+	PREFIX_UNSPEC = 0,
+	PREFIX_ADDRESS = 1,
+	PREFIX_CACHEINFO = 2,
+	__PREFIX_MAX = 3,
+};
+
+enum addr_type_t {
+	UNICAST_ADDR = 0,
+	MULTICAST_ADDR = 1,
+	ANYCAST_ADDR = 2,
+};
+
+union fwnet_hwaddr {
+	u8 u[16];
+	struct {
+		__be64 uniq_id;
+		u8 max_rec;
+		u8 sspd;
+		u8 fifo[6];
+	} uc;
+};
+
+struct prefix_cacheinfo {
+	__u32 preferred_time;
+	__u32 valid_time;
+};
+
+struct prefixmsg {
+	unsigned char prefix_family;
+	unsigned char prefix_pad1;
+	unsigned short prefix_pad2;
+	int prefix_ifindex;
+	unsigned char prefix_type;
+	unsigned char prefix_len;
+	unsigned char prefix_flags;
+	unsigned char prefix_pad3;
+};
+
+struct in6_ifreq {
+	struct in6_addr ifr6_addr;
+	__u32 ifr6_prefixlen;
+	int ifr6_ifindex;
+};
+
+struct if6_iter_state {
+	struct seq_net_private p;
+	int bucket;
+	int offset;
+};
+
+struct inet6_fill_args {
+	u32 portid;
+	u32 seq;
+	int event;
+	unsigned int flags;
+	int netnsid;
+	int ifindex;
+	enum addr_type_t type;
+};
+
+struct ipv6_saddr_score {
+	int rule;
+	int addr_type;
+	struct inet6_ifaddr *ifa;
+	unsigned long scorebits[1];
+	int scopedist;
+	int matchlen;
+};
+
+struct ipv6_saddr_dst {
+	const struct in6_addr *addr;
+	int ifindex;
+	int scope;
+	int label;
+	unsigned int prefs;
+};
+
+struct ifa6_config {
+	const struct in6_addr *pfx;
+	unsigned int plen;
+	u8 ifa_proto;
+	const struct in6_addr *peer_pfx;
+	u32 rt_priority;
+	u32 ifa_flags;
+	u32 preferred_lft;
+	u32 valid_lft;
+	u16 scope;
+};
+
+struct in6_validator_info {
+	struct in6_addr i6vi_addr;
+	struct inet6_dev *i6vi_dev;
+	struct netlink_ext_ack *extack;
+};
+
+struct ifla_cacheinfo {
+	__u32 max_reasm_len;
+	__u32 tstamp;
+	__u32 reachable_time;
+	__u32 retrans_time;
+};
+
+struct ip6addrlbl_init_table {
+	const struct in6_addr *prefix;
+	int prefixlen;
+	u32 label;
+};
+
+enum {
+	IFAL_ADDRESS = 1,
+	IFAL_LABEL = 2,
+	__IFAL_MAX = 3,
+};
+
+struct ip6addrlbl_entry {
+	struct in6_addr prefix;
+	int prefixlen;
+	int ifindex;
+	int addrtype;
+	u32 label;
+	struct hlist_node list;
+	struct callback_head rcu;
+};
+
+struct ifaddrlblmsg {
+	__u8 ifal_family;
+	__u8 __ifal_reserved;
+	__u8 ifal_prefixlen;
+	__u8 ifal_flags;
+	__u32 ifal_index;
+	__u32 ifal_seq;
+};
+
+typedef void (*btf_trace_fib6_table_lookup)(void *, const struct net *, const struct fib6_result *, struct fib6_table *, const struct flowi6 *);
+
+enum rt6_nud_state {
+	RT6_NUD_FAIL_HARD = -3,
+	RT6_NUD_FAIL_PROBE = -2,
+	RT6_NUD_FAIL_DO_RR = -1,
+	RT6_NUD_SUCCEED = 1,
+};
+
+struct route_info {
+	__u8 type;
+	__u8 length;
+	__u8 prefix_len;
+	__u8 reserved_l: 3;
+	__u8 route_pref: 2;
+	__u8 reserved_h: 3;
+	__be32 lifetime;
+	__u8 prefix[0];
+};
+
+struct ip6rd_flowi {
+	struct flowi6 fl6;
+	struct in6_addr gateway;
+};
+
+struct rt6_rtnl_dump_arg {
+	struct sk_buff *skb;
+	struct netlink_callback *cb;
+	struct net *net;
+	struct fib_dump_filter filter;
+};
+
+struct trace_event_raw_fib6_table_lookup {
+	struct trace_entry ent;
+	u32 tb_id;
+	int err;
+	int oif;
+	int iif;
+	__u8 tos;
+	__u8 scope;
+	__u8 flags;
+	__u8 src[16];
+	__u8 dst[16];
+	u16 sport;
+	u16 dport;
+	u8 proto;
+	u8 rt_type;
+	char name[16];
+	__u8 gw[16];
+	char __data[0];
+};
+
+struct rt6_exception {
+	struct hlist_node hlist;
+	struct rt6_info *rt6i;
+	unsigned long stamp;
+	struct callback_head rcu;
+};
+
+struct __rt6_probe_work {
+	struct work_struct work;
+	struct in6_addr target;
+	struct net_device *dev;
+	netdevice_tracker dev_tracker;
+};
+
+struct arg_dev_net_ip {
+	struct net *net;
+	struct in6_addr *addr;
+};
+
+struct rt6_mtu_change_arg {
+	struct net_device *dev;
+	unsigned int mtu;
+	struct fib6_info *f6i;
+};
+
+struct rt6_nh {
+	struct fib6_info *fib6_info;
+	struct fib6_config r_cfg;
+	struct list_head next;
+};
+
+struct fib6_nh_dm_arg {
+	struct net *net;
+	const struct in6_addr *saddr;
+	int oif;
+	int flags;
+	struct fib6_nh *nh;
+};
+
+typedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);
+
+struct fib6_gc_args {
+	int timeout;
+	int more;
+};
+
+struct fib6_nh_match_arg {
+	const struct net_device *dev;
+	const struct in6_addr *gw;
+	struct fib6_nh *match;
+};
+
+struct fib6_nh_del_cached_rt_arg {
+	struct fib6_config *cfg;
+	struct fib6_info *f6i;
+};
+
+struct arg_netdev_event {
+	const struct net_device *dev;
+	union {
+		unsigned char nh_flags;
+		unsigned long event;
+	};
+};
+
+struct trace_event_data_offsets_fib6_table_lookup {};
+
+struct fib6_nh_age_excptn_arg {
+	struct fib6_gc_args *gc_args;
+	unsigned long now;
+};
+
+struct fib6_nh_rd_arg {
+	struct fib6_result *res;
+	struct flowi6 *fl6;
+	const struct in6_addr *gw;
+	struct rt6_info **ret;
+};
+
+struct netevent_redirect {
+	struct dst_entry *old;
+	struct dst_entry *new;
+	struct neighbour *neigh;
+	const void *daddr;
+};
+
+struct fib6_nh_exception_dump_walker {
+	struct rt6_rtnl_dump_arg *dump;
+	struct fib6_info *rt;
+	unsigned int flags;
+	unsigned int skip;
+	unsigned int count;
+};
+
+struct fib6_nh_frl_arg {
+	u32 flags;
+	int oif;
+	int strict;
+	int *mpri;
+	bool *do_rr;
+	struct fib6_nh *nh;
+};
+
+struct fib6_nh_excptn_arg {
+	struct rt6_info *rt;
+	int plen;
+};
+
+enum fib6_walk_state {
+	FWS_L = 0,
+	FWS_R = 1,
+	FWS_C = 2,
+	FWS_U = 3,
+};
+
+enum {
+	FIB6_NO_SERNUM_CHANGE = 0,
+};
+
+struct fib6_walker {
+	struct list_head lh;
+	struct fib6_node *root;
+	struct fib6_node *node;
+	struct fib6_info *leaf;
+	enum fib6_walk_state state;
+	unsigned int skip;
+	unsigned int count;
+	unsigned int skip_in_node;
+	int (*func)(struct fib6_walker *);
+	void *args;
+};
+
+struct fib6_cleaner {
+	struct fib6_walker w;
+	struct net *net;
+	int (*func)(struct fib6_info *, void *);
+	int sernum;
+	void *arg;
+	bool skip_notify;
+};
+
+struct fib6_dump_arg {
+	struct net *net;
+	struct notifier_block *nb;
+	struct netlink_ext_ack *extack;
+};
+
+struct fib6_entry_notifier_info {
+	struct fib_notifier_info info;
+	struct fib6_info *rt;
+	unsigned int nsiblings;
+};
+
+struct lookup_args {
+	int offset;
+	const struct in6_addr *addr;
+};
+
+struct bpf_iter__ipv6_route {
+	union {
+		struct bpf_iter_meta *meta;
+	};
+	union {
+		struct fib6_info *rt;
+	};
+};
+
+struct ipv6_route_iter {
+	struct seq_net_private p;
+	struct fib6_walker w;
+	loff_t skip;
+	struct fib6_table *tbl;
+	int sernum;
+};
+
+struct fib6_nh_pcpu_arg {
+	struct fib6_info *from;
+	const struct fib6_table *table;
+};
+
+struct ipv6_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u8 first_segment;
+	__u8 flags;
+	__u16 tag;
+	struct in6_addr segments[0];
+};
+
+struct in6_flowlabel_req {
+	struct in6_addr flr_dst;
+	__be32 flr_label;
+	__u8 flr_action;
+	__u8 flr_share;
+	__u16 flr_flags;
+	__u16 flr_expires;
+	__u16 flr_linger;
+	__u32 __flr_pad;
+};
+
+struct ipv6_mreq {
+	struct in6_addr ipv6mr_multiaddr;
+	int ipv6mr_ifindex;
+};
+
+struct ip6_mtuinfo {
+	struct sockaddr_in6 ip6m_addr;
+	__u32 ip6m_mtu;
+};
+
+enum {
+	NDUSEROPT_UNSPEC = 0,
+	NDUSEROPT_SRCADDR = 1,
+	__NDUSEROPT_MAX = 2,
+};
+
+struct nd_msg {
+	struct icmp6hdr icmph;
+	struct in6_addr target;
+	__u8 opt[0];
+};
+
+struct rs_msg {
+	struct icmp6hdr icmph;
+	__u8 opt[0];
+};
+
+struct ra_msg {
+	struct icmp6hdr icmph;
+	__be32 reachable_time;
+	__be32 retrans_timer;
+};
+
+struct nduseroptmsg {
+	unsigned char nduseropt_family;
+	unsigned char nduseropt_pad1;
+	unsigned short nduseropt_opts_len;
+	int nduseropt_ifindex;
+	__u8 nduseropt_icmp_type;
+	__u8 nduseropt_icmp_code;
+	unsigned short nduseropt_pad2;
+	unsigned int nduseropt_pad3;
+};
+
+typedef u32 inet6_ehashfn_t(const struct net *, const struct in6_addr *, const u16, const struct in6_addr *, const __be16);
+
+typedef int mh_filter_t(struct sock *, struct sk_buff *);
+
+struct icmp6_filter {
+	__u32 data[8];
+};
+
+struct raw6_sock {
+	struct inet_sock inet;
+	__u32 checksum;
+	__u32 offset;
+	struct icmp6_filter filter;
+	__u32 ip6mr_table;
+	struct ipv6_pinfo inet6;
+};
+
+struct raw6_frag_vec {
+	struct msghdr *msg;
+	int hlen;
+	char c[4];
+};
+
+struct icmp6_err {
+	int err;
+	int fatal;
+};
+
+struct ipv6_destopt_hao {
+	__u8 type;
+	__u8 length;
+	struct in6_addr addr;
+} __attribute__((packed));
+
+struct icmpv6_msg {
+	struct sk_buff *skb;
+	int offset;
+	uint8_t type;
+};
+
+struct mld2_grec {
+	__u8 grec_type;
+	__u8 grec_auxwords;
+	__be16 grec_nsrcs;
+	struct in6_addr grec_mca;
+	struct in6_addr grec_src[0];
+};
+
+struct mld2_report {
+	struct icmp6hdr mld2r_hdr;
+	struct mld2_grec mld2r_grec[0];
+};
+
+struct mld_msg {
+	struct icmp6hdr mld_hdr;
+	struct in6_addr mld_mca;
+};
+
+struct mld2_query {
+	struct icmp6hdr mld2q_hdr;
+	struct in6_addr mld2q_mca;
+	__u8 mld2q_qrv: 3;
+	__u8 mld2q_suppress: 1;
+	__u8 mld2q_resv2: 4;
+	__u8 mld2q_qqic;
+	__be16 mld2q_nsrcs;
+	struct in6_addr mld2q_srcs[0];
+};
+
+struct igmp6_mc_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+};
+
+struct igmp6_mcf_iter_state {
+	struct seq_net_private p;
+	struct net_device *dev;
+	struct inet6_dev *idev;
+	struct ifmcaddr6 *im;
+};
+
+enum ip6_defrag_users {
+	IP6_DEFRAG_LOCAL_DELIVER = 0,
+	IP6_DEFRAG_CONNTRACK_IN = 1,
+	__IP6_DEFRAG_CONNTRACK_IN = 65536,
+	IP6_DEFRAG_CONNTRACK_OUT = 65537,
+	__IP6_DEFRAG_CONNTRACK_OUT = 131072,
+	IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 131073,
+	__IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 196608,
+};
+
+struct frag_queue {
+	struct inet_frag_queue q;
+	int iif;
+	__u16 nhoffset;
+	u8 ecn;
+};
+
+struct rt0_hdr {
+	struct ipv6_rt_hdr rt_hdr;
+	__u32 reserved;
+	struct in6_addr addr[0];
+};
+
+struct ipv6_rpl_sr_hdr {
+	__u8 nexthdr;
+	__u8 hdrlen;
+	__u8 type;
+	__u8 segments_left;
+	__u32 cmpre: 4;
+	__u32 cmpri: 4;
+	__u32 reserved: 4;
+	__u32 pad: 4;
+	__u32 reserved1: 16;
+	union {
+		struct {
+			struct {} __empty_addr;
+			struct in6_addr addr[0];
+		};
+		struct {
+			struct {} __empty_data;
+			__u8 data[0];
+		};
+	} segments;
+};
+
+struct ioam6_hdr {
+	__u8 opt_type;
+	__u8 opt_len;
+	char: 8;
+	__u8 type;
+};
+
+struct ioam6_trace_hdr {
+	__be16 namespace_id;
+	char: 2;
+	__u8 overflow: 1;
+	__u8 nodelen: 5;
+	__u8 remlen: 7;
+	union {
+		__be32 type_be32;
+		struct {
+			__u32 bit7: 1;
+			__u32 bit6: 1;
+			__u32 bit5: 1;
+			__u32 bit4: 1;
+			__u32 bit3: 1;
+			__u32 bit2: 1;
+			__u32 bit1: 1;
+			__u32 bit0: 1;
+			__u32 bit15: 1;
+			__u32 bit14: 1;
+			__u32 bit13: 1;
+			__u32 bit12: 1;
+			__u32 bit11: 1;
+			__u32 bit10: 1;
+			__u32 bit9: 1;
+			__u32 bit8: 1;
+			__u32 bit23: 1;
+			__u32 bit22: 1;
+			__u32 bit21: 1;
+			__u32 bit20: 1;
+			__u32 bit19: 1;
+			__u32 bit18: 1;
+			__u32 bit17: 1;
+			__u32 bit16: 1;
+		} type;
+	};
+	__u8 data[0];
+};
+
+struct ioam6_schema;
+
+struct ioam6_namespace {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_schema __attribute__((btf_type_tag("rcu"))) *schema;
+	__be16 id;
+	__be32 data;
+	__be64 data_wide;
+};
+
+struct ioam6_schema {
+	struct rhash_head head;
+	struct callback_head rcu;
+	struct ioam6_namespace __attribute__((btf_type_tag("rcu"))) *ns;
+	u32 id;
+	int len;
+	__be32 hdr;
+	u8 data[0];
+};
+
+struct ip6fl_iter_state {
+	struct seq_net_private p;
+	struct pid_namespace *pid_ns;
+	int bucket;
+};
+
+enum {
+	SEG6_ATTR_UNSPEC = 0,
+	SEG6_ATTR_DST = 1,
+	SEG6_ATTR_DSTLEN = 2,
+	SEG6_ATTR_HMACKEYID = 3,
+	SEG6_ATTR_SECRET = 4,
+	SEG6_ATTR_SECRETLEN = 5,
+	SEG6_ATTR_ALGID = 6,
+	SEG6_ATTR_HMACINFO = 7,
+	__SEG6_ATTR_MAX = 8,
+};
+
+enum {
+	SEG6_CMD_UNSPEC = 0,
+	SEG6_CMD_SETHMAC = 1,
+	SEG6_CMD_DUMPHMAC = 2,
+	SEG6_CMD_SET_TUNSRC = 3,
+	SEG6_CMD_GET_TUNSRC = 4,
+	__SEG6_CMD_MAX = 5,
+};
+
+struct sr6_tlv {
+	__u8 type;
+	__u8 len;
+	__u8 data[0];
+};
+
+enum {
+	IOAM6_ATTR_UNSPEC = 0,
+	IOAM6_ATTR_NS_ID = 1,
+	IOAM6_ATTR_NS_DATA = 2,
+	IOAM6_ATTR_NS_DATA_WIDE = 3,
+	IOAM6_ATTR_SC_ID = 4,
+	IOAM6_ATTR_SC_DATA = 5,
+	IOAM6_ATTR_SC_NONE = 6,
+	IOAM6_ATTR_PAD = 7,
+	__IOAM6_ATTR_MAX = 8,
+};
+
+enum {
+	IOAM6_CMD_UNSPEC = 0,
+	IOAM6_CMD_ADD_NAMESPACE = 1,
+	IOAM6_CMD_DEL_NAMESPACE = 2,
+	IOAM6_CMD_DUMP_NAMESPACES = 3,
+	IOAM6_CMD_ADD_SCHEMA = 4,
+	IOAM6_CMD_DEL_SCHEMA = 5,
+	IOAM6_CMD_DUMP_SCHEMAS = 6,
+	IOAM6_CMD_NS_SET_SCHEMA = 7,
+	__IOAM6_CMD_MAX = 8,
+};
+
+struct mfc6_cache_cmp_arg {
+	struct in6_addr mf6c_mcastgrp;
+	struct in6_addr mf6c_origin;
+};
+
+enum {
+	IP6MRA_CREPORT_UNSPEC = 0,
+	IP6MRA_CREPORT_MSGTYPE = 1,
+	IP6MRA_CREPORT_MIF_ID = 2,
+	IP6MRA_CREPORT_SRC_ADDR = 3,
+	IP6MRA_CREPORT_DST_ADDR = 4,
+	IP6MRA_CREPORT_PKT = 5,
+	__IP6MRA_CREPORT_MAX = 6,
+};
+
+struct mfc6_cache {
+	struct mr_mfc _c;
+	union {
+		struct {
+			struct in6_addr mf6c_mcastgrp;
+			struct in6_addr mf6c_origin;
+		};
+		struct mfc6_cache_cmp_arg cmparg;
+	};
+};
+
+struct mrt6msg {
+	__u8 im6_mbz;
+	__u8 im6_msgtype;
+	__u16 im6_mif;
+	__u32 im6_pad;
+	struct in6_addr im6_src;
+	struct in6_addr im6_dst;
+};
+
+struct ip6mr_result {
+	struct mr_table *mrt;
+};
+
+typedef __u32 if_mask;
+
+struct if_set {
+	if_mask ifs_bits[8];
+};
+
+struct mf6cctl {
+	struct sockaddr_in6 mf6cc_origin;
+	struct sockaddr_in6 mf6cc_mcastgrp;
+	mifi_t mf6cc_parent;
+	struct if_set mf6cc_ifset;
+};
+
+struct mif6ctl {
+	mifi_t mif6c_mifi;
+	unsigned char mif6c_flags;
+	unsigned char vifc_threshold;
+	__u16 mif6c_pifi;
+	unsigned int vifc_rate_limit;
+};
+
+struct compat_sioc_sg_req6 {
+	struct sockaddr_in6 src;
+	struct sockaddr_in6 grp;
+	compat_ulong_t pktcnt;
+	compat_ulong_t bytecnt;
+	compat_ulong_t wrong_if;
+};
+
+struct compat_sioc_mif_req6 {
+	mifi_t mifi;
+	compat_ulong_t icount;
+	compat_ulong_t ocount;
+	compat_ulong_t ibytes;
+	compat_ulong_t obytes;
+};
+
+struct br_input_skb_cb {
+	struct net_device *brdev;
+	u16 frag_max_size;
+	u8 igmp;
+	u8 mrouters_only: 1;
+	u8 proxyarp_replied: 1;
+	u8 src_port_isolated: 1;
+	u8 promisc: 1;
+	u32 backup_nhid;
+};
+
+struct nf_bridge_frag_data;
+
+struct fib6_rule {
+	struct fib_rule common;
+	struct rt6key src;
+	struct rt6key dst;
+	dscp_t dscp;
+};
+
+struct xfrm6_tunnel_spi {
+	struct hlist_node list_byaddr;
+	struct hlist_node list_byspi;
+	xfrm_address_t addr;
+	u32 spi;
+	refcount_t refcnt;
+	struct callback_head callback_head;
+};
+
+struct xfrm6_tunnel_net {
+	struct hlist_head spi_byaddr[256];
+	struct hlist_head spi_byspi[256];
+	u32 spi;
+};
+
+struct mip6_report_rate_limiter {
+	spinlock_t lock;
+	ktime_t stamp;
+	int iif;
+	struct in6_addr src;
+	struct in6_addr dst;
+};
+
+struct rt2_hdr {
+	struct ipv6_rt_hdr rt_hdr;
+	__u32 reserved;
+	struct in6_addr addr;
+};
+
+enum nf_ip_trace_comments___2 {
+	NF_IP6_TRACE_COMMENT_RULE = 0,
+	NF_IP6_TRACE_COMMENT_RETURN = 1,
+	NF_IP6_TRACE_COMMENT_POLICY = 2,
+};
+
+struct ip6t_error {
+	struct ip6t_entry entry;
+	struct xt_error_target target;
+};
+
+struct ip6t_replace {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int num_entries;
+	unsigned int size;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_counters;
+	struct xt_counters __attribute__((btf_type_tag("user"))) *counters;
+	struct ip6t_entry entries[0];
+};
+
+struct ip6t_standard {
+	struct ip6t_entry entry;
+	struct xt_standard_target target;
+};
+
+struct ip6t_getinfo {
+	char name[32];
+	unsigned int valid_hooks;
+	unsigned int hook_entry[5];
+	unsigned int underflow[5];
+	unsigned int num_entries;
+	unsigned int size;
+};
+
+struct ip6t_get_entries {
+	char name[32];
+	unsigned int size;
+	struct ip6t_entry entrytable[0];
+};
+
+struct nft_ct_frag6_pernet {
+	struct ctl_table_header *nf_frag_frags_hdr;
+	struct fqdir *fqdir;
+};
+
+enum {
+	XT_RPFILTER_LOOSE = 1,
+	XT_RPFILTER_VALID_MARK = 2,
+	XT_RPFILTER_ACCEPT_LOCAL = 4,
+	XT_RPFILTER_INVERT = 8,
+	XT_RPFILTER_OPTION_MASK = 15,
+};
+
+struct xt_rpfilter_info {
+	__u8 flags;
+};
+
+enum ip6t_reject_with {
+	IP6T_ICMP6_NO_ROUTE = 0,
+	IP6T_ICMP6_ADM_PROHIBITED = 1,
+	IP6T_ICMP6_NOT_NEIGHBOUR = 2,
+	IP6T_ICMP6_ADDR_UNREACH = 3,
+	IP6T_ICMP6_PORT_UNREACH = 4,
+	IP6T_ICMP6_ECHOREPLY = 5,
+	IP6T_TCP_RESET = 6,
+	IP6T_ICMP6_POLICY_FAIL = 7,
+	IP6T_ICMP6_REJECT_ROUTE = 8,
+};
+
+struct ip6t_reject_info {
+	__u32 with;
+};
+
+struct vti6_net {
+	struct net_device *fb_tnl_dev;
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *tnls_r_l[32];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *tnls_wc[1];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) **tnls[2];
+};
+
+struct ip6_tnl_parm2 {
+	char name[16];
+	int link;
+	__u8 proto;
+	__u8 encap_limit;
+	__u8 hop_limit;
+	__be32 flowinfo;
+	__u32 flags;
+	struct in6_addr laddr;
+	struct in6_addr raddr;
+	__be16 i_flags;
+	__be16 o_flags;
+	__be32 i_key;
+	__be32 o_key;
+};
+
+struct sit_net {
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *tunnels_r_l[16];
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *tunnels_r[16];
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *tunnels_l[16];
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) *tunnels_wc[1];
+	struct ip_tunnel __attribute__((btf_type_tag("rcu"))) **tunnels[4];
+	struct net_device *fb_tunnel_dev;
+};
+
+struct ip_tunnel_prl {
+	__be32 addr;
+	__u16 flags;
+	__u16 __reserved;
+	__u32 datalen;
+	__u32 __reserved2;
+};
+
+struct ipv6_tlv_tnl_enc_lim {
+	__u8 type;
+	__u8 length;
+	__u8 encap_limit;
+};
+
+struct ipv6_tel_txoption {
+	struct ipv6_txoptions ops;
+	__u8 dst_opt[8];
+};
+
+struct ip6_tnl_net {
+	struct net_device *fb_tnl_dev;
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *tnls_r_l[32];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *tnls_wc[1];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) **tnls[2];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *collect_md_tun;
+};
+
+struct ip6_tnl_parm {
+	char name[16];
+	int link;
+	__u8 proto;
+	__u8 encap_limit;
+	__u8 hop_limit;
+	__be32 flowinfo;
+	__u32 flags;
+	struct in6_addr laddr;
+	struct in6_addr raddr;
+};
+
+struct ip6gre_net {
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *tunnels[128];
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *collect_md_tun;
+	struct ip6_tnl __attribute__((btf_type_tag("rcu"))) *collect_md_tun_erspan;
+	struct net_device *fb_tunnel_dev;
+};
+
+enum {
+	IP6_FH_F_FRAG = 1,
+	IP6_FH_F_AUTH = 2,
+	IP6_FH_F_SKIP_RH = 4,
+};
+
+enum tpacket_versions {
+	TPACKET_V1 = 0,
+	TPACKET_V2 = 1,
+	TPACKET_V3 = 2,
+};
+
+enum packet_sock_flags {
+	PACKET_SOCK_ORIGDEV = 0,
+	PACKET_SOCK_AUXDATA = 1,
+	PACKET_SOCK_TX_HAS_OFF = 2,
+	PACKET_SOCK_TP_LOSS = 3,
+	PACKET_SOCK_RUNNING = 4,
+	PACKET_SOCK_PRESSURE = 5,
+	PACKET_SOCK_QDISC_BYPASS = 6,
+};
+
+struct tpacket_stats {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+};
+
+struct tpacket_stats_v3 {
+	unsigned int tp_packets;
+	unsigned int tp_drops;
+	unsigned int tp_freeze_q_cnt;
+};
+
+union tpacket_stats_u {
+	struct tpacket_stats stats1;
+	struct tpacket_stats_v3 stats3;
+};
+
+struct pgv;
+
+struct tpacket_kbdq_core {
+	struct pgv *pkbdq;
+	unsigned int feature_req_word;
+	unsigned int hdrlen;
+	unsigned char reset_pending_on_curr_blk;
+	unsigned char delete_blk_timer;
+	unsigned short kactive_blk_num;
+	unsigned short blk_sizeof_priv;
+	unsigned short last_kactive_blk_num;
+	char *pkblk_start;
+	char *pkblk_end;
+	int kblk_size;
+	unsigned int max_frame_len;
+	unsigned int knum_blocks;
+	uint64_t knxt_seq_num;
+	char *prev;
+	char *nxt_offset;
+	struct sk_buff *skb;
+	rwlock_t blk_fill_in_prog_lock;
+	unsigned short retire_blk_tov;
+	unsigned short version;
+	unsigned long tov_in_jiffies;
+	struct timer_list retire_blk_timer;
+};
+
+struct packet_ring_buffer {
+	struct pgv *pg_vec;
+	unsigned int head;
+	unsigned int frames_per_block;
+	unsigned int frame_size;
+	unsigned int frame_max;
+	unsigned int pg_vec_order;
+	unsigned int pg_vec_pages;
+	unsigned int pg_vec_len;
+	unsigned int __attribute__((btf_type_tag("percpu"))) *pending_refcnt;
+	union {
+		unsigned long *rx_owner_map;
+		struct tpacket_kbdq_core prb_bdqc;
+	};
+};
+
+struct packet_fanout;
+
+struct packet_rollover;
+
+struct packet_mclist;
+
+struct packet_sock {
+	struct sock sk;
+	struct packet_fanout *fanout;
+	union tpacket_stats_u stats;
+	struct packet_ring_buffer rx_ring;
+	struct packet_ring_buffer tx_ring;
+	int copy_thresh;
+	spinlock_t bind_lock;
+	struct mutex pg_vec_lock;
+	unsigned long flags;
+	int ifindex;
+	u8 vnet_hdr_sz;
+	__be16 num;
+	struct packet_rollover *rollover;
+	struct packet_mclist *mclist;
+	atomic_long_t mapped;
+	enum tpacket_versions tp_version;
+	unsigned int tp_hdrlen;
+	unsigned int tp_reserve;
+	unsigned int tp_tstamp;
+	struct completion skb_completion;
+	struct net_device __attribute__((btf_type_tag("rcu"))) *cached_dev;
+	long: 64;
+	struct packet_type prot_hook;
+	long: 64;
+	long: 64;
+	long: 64;
+	atomic_t tp_drops;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct packet_fanout {
+	possible_net_t net;
+	unsigned int num_members;
+	u32 max_num_members;
+	u16 id;
+	u8 type;
+	u8 flags;
+	union {
+		atomic_t rr_cur;
+		struct bpf_prog __attribute__((btf_type_tag("rcu"))) *bpf_prog;
+	};
+	struct list_head list;
+	spinlock_t lock;
+	refcount_t sk_ref;
+	long: 64;
+	struct packet_type prot_hook;
+	struct sock __attribute__((btf_type_tag("rcu"))) *arr[0];
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct pgv {
+	char *buffer;
+};
+
+struct packet_rollover {
+	int sock;
+	atomic_long_t num;
+	atomic_long_t num_huge;
+	atomic_long_t num_failed;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 history[16];
+};
+
+struct packet_mclist {
+	struct packet_mclist *next;
+	int ifindex;
+	int count;
+	unsigned short type;
+	unsigned short alen;
+	unsigned char addr[32];
+};
+
+struct tpacket_bd_ts {
+	unsigned int ts_sec;
+	union {
+		unsigned int ts_usec;
+		unsigned int ts_nsec;
+	};
+};
+
+struct tpacket_hdr_v1 {
+	__u32 block_status;
+	__u32 num_pkts;
+	__u32 offset_to_first_pkt;
+	__u32 blk_len;
+	__u64 seq_num;
+	struct tpacket_bd_ts ts_first_pkt;
+	struct tpacket_bd_ts ts_last_pkt;
+};
+
+union tpacket_bd_header_u {
+	struct tpacket_hdr_v1 bh1;
+};
+
+struct tpacket_block_desc {
+	__u32 version;
+	__u32 offset_to_priv;
+	union tpacket_bd_header_u hdr;
+};
+
+struct tpacket_hdr_variant1 {
+	__u32 tp_rxhash;
+	__u32 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u16 tp_padding;
+};
+
+struct tpacket3_hdr {
+	__u32 tp_next_offset;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u32 tp_snaplen;
+	__u32 tp_len;
+	__u32 tp_status;
+	__u16 tp_mac;
+	__u16 tp_net;
+	union {
+		struct tpacket_hdr_variant1 hv1;
+	};
+	__u8 tp_padding[8];
+};
+
+struct sockaddr_ll {
+	unsigned short sll_family;
+	__be16 sll_protocol;
+	int sll_ifindex;
+	unsigned short sll_hatype;
+	unsigned char sll_pkttype;
+	unsigned char sll_halen;
+	unsigned char sll_addr[8];
+};
+
+struct sockaddr_pkt {
+	unsigned short spkt_family;
+	unsigned char spkt_device[14];
+	__be16 spkt_protocol;
+};
+
+struct packet_skb_cb {
+	union {
+		struct sockaddr_pkt pkt;
+		union {
+			unsigned int origlen;
+			struct sockaddr_ll ll;
+		};
+	} sa;
+};
+
+struct tpacket_hdr;
+
+struct tpacket2_hdr;
+
+union tpacket_uhdr {
+	struct tpacket_hdr *h1;
+	struct tpacket2_hdr *h2;
+	struct tpacket3_hdr *h3;
+	void *raw;
+};
+
+struct tpacket_hdr {
+	unsigned long tp_status;
+	unsigned int tp_len;
+	unsigned int tp_snaplen;
+	unsigned short tp_mac;
+	unsigned short tp_net;
+	unsigned int tp_sec;
+	unsigned int tp_usec;
+};
+
+struct tpacket2_hdr {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u32 tp_sec;
+	__u32 tp_nsec;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+	__u8 tp_padding[4];
+};
+
+struct virtio_net_hdr_mrg_rxbuf {
+	struct virtio_net_hdr hdr;
+	__virtio16 num_buffers;
+};
+
+struct tpacket_req {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+};
+
+struct tpacket_req3 {
+	unsigned int tp_block_size;
+	unsigned int tp_block_nr;
+	unsigned int tp_frame_size;
+	unsigned int tp_frame_nr;
+	unsigned int tp_retire_blk_tov;
+	unsigned int tp_sizeof_priv;
+	unsigned int tp_feature_req_word;
+};
+
+union tpacket_req_u {
+	struct tpacket_req req;
+	struct tpacket_req3 req3;
+};
+
+struct fanout_args {
+	__u16 id;
+	__u16 type_flags;
+	__u32 max_num_members;
+};
+
+struct packet_mreq_max {
+	int mr_ifindex;
+	unsigned short mr_type;
+	unsigned short mr_alen;
+	unsigned char mr_address[32];
+};
+
+struct tpacket_rollover_stats {
+	__u64 tp_all;
+	__u64 tp_huge;
+	__u64 tp_failed;
+};
+
+struct tpacket_auxdata {
+	__u32 tp_status;
+	__u32 tp_len;
+	__u32 tp_snaplen;
+	__u16 tp_mac;
+	__u16 tp_net;
+	__u16 tp_vlan_tci;
+	__u16 tp_vlan_tpid;
+};
+
+struct sadb_msg;
+
+typedef int (*pfkey_handler)(struct sock *, struct sk_buff *, const struct sadb_msg *, void * const *);
+
+struct sadb_msg {
+	__u8 sadb_msg_version;
+	__u8 sadb_msg_type;
+	__u8 sadb_msg_errno;
+	__u8 sadb_msg_satype;
+	__u16 sadb_msg_len;
+	__u16 sadb_msg_reserved;
+	__u32 sadb_msg_seq;
+	__u32 sadb_msg_pid;
+};
+
+enum {
+	IPSEC_MODE_ANY = 0,
+	IPSEC_MODE_TRANSPORT = 1,
+	IPSEC_MODE_TUNNEL = 2,
+	IPSEC_MODE_BEET = 3,
+};
+
+enum {
+	IPSEC_POLICY_DISCARD = 0,
+	IPSEC_POLICY_NONE = 1,
+	IPSEC_POLICY_IPSEC = 2,
+	IPSEC_POLICY_ENTRUST = 3,
+	IPSEC_POLICY_BYPASS = 4,
+};
+
+enum {
+	IPSEC_DIR_ANY = 0,
+	IPSEC_DIR_INBOUND = 1,
+	IPSEC_DIR_OUTBOUND = 2,
+	IPSEC_DIR_FWD = 3,
+	IPSEC_DIR_MAX = 4,
+	IPSEC_DIR_INVALID = 5,
+};
+
+enum {
+	IPSEC_LEVEL_DEFAULT = 0,
+	IPSEC_LEVEL_USE = 1,
+	IPSEC_LEVEL_REQUIRE = 2,
+	IPSEC_LEVEL_UNIQUE = 3,
+};
+
+struct pfkey_sock {
+	struct sock sk;
+	int registered;
+	int promisc;
+	struct {
+		uint8_t msg_version;
+		uint32_t msg_portid;
+		int (*dump)(struct pfkey_sock *);
+		void (*done)(struct pfkey_sock *);
+		union {
+			struct xfrm_policy_walk policy;
+			struct xfrm_state_walk state;
+		} u;
+		struct sk_buff *skb;
+	} dump;
+	struct mutex dump_lock;
+};
+
+struct sadb_x_policy {
+	__u16 sadb_x_policy_len;
+	__u16 sadb_x_policy_exttype;
+	__u16 sadb_x_policy_type;
+	__u8 sadb_x_policy_dir;
+	__u8 sadb_x_policy_reserved;
+	__u32 sadb_x_policy_id;
+	__u32 sadb_x_policy_priority;
+};
+
+struct sadb_x_sec_ctx {
+	__u16 sadb_x_sec_len;
+	__u16 sadb_x_sec_exttype;
+	__u8 sadb_x_ctx_alg;
+	__u8 sadb_x_ctx_doi;
+	__u16 sadb_x_ctx_len;
+};
+
+struct sadb_ext {
+	__u16 sadb_ext_len;
+	__u16 sadb_ext_type;
+};
+
+struct sadb_key {
+	__u16 sadb_key_len;
+	__u16 sadb_key_exttype;
+	__u16 sadb_key_bits;
+	__u16 sadb_key_reserved;
+};
+
+struct sadb_address {
+	__u16 sadb_address_len;
+	__u16 sadb_address_exttype;
+	__u8 sadb_address_proto;
+	__u8 sadb_address_prefixlen;
+	__u16 sadb_address_reserved;
+};
+
+struct sadb_prop {
+	__u16 sadb_prop_len;
+	__u16 sadb_prop_exttype;
+	__u8 sadb_prop_replay;
+	__u8 sadb_prop_reserved[3];
+};
+
+struct sadb_comb {
+	__u8 sadb_comb_auth;
+	__u8 sadb_comb_encrypt;
+	__u16 sadb_comb_flags;
+	__u16 sadb_comb_auth_minbits;
+	__u16 sadb_comb_auth_maxbits;
+	__u16 sadb_comb_encrypt_minbits;
+	__u16 sadb_comb_encrypt_maxbits;
+	__u32 sadb_comb_reserved;
+	__u32 sadb_comb_soft_allocations;
+	__u32 sadb_comb_hard_allocations;
+	__u64 sadb_comb_soft_bytes;
+	__u64 sadb_comb_hard_bytes;
+	__u64 sadb_comb_soft_addtime;
+	__u64 sadb_comb_hard_addtime;
+	__u64 sadb_comb_soft_usetime;
+	__u64 sadb_comb_hard_usetime;
+};
+
+struct sadb_x_ipsecrequest {
+	__u16 sadb_x_ipsecrequest_len;
+	__u16 sadb_x_ipsecrequest_proto;
+	__u8 sadb_x_ipsecrequest_mode;
+	__u8 sadb_x_ipsecrequest_level;
+	__u16 sadb_x_ipsecrequest_reserved1;
+	__u32 sadb_x_ipsecrequest_reqid;
+	__u32 sadb_x_ipsecrequest_reserved2;
+};
+
+struct netns_pfkey {
+	struct hlist_head table;
+	atomic_t socks_nr;
+};
+
+struct sadb_lifetime {
+	__u16 sadb_lifetime_len;
+	__u16 sadb_lifetime_exttype;
+	__u32 sadb_lifetime_allocations;
+	__u64 sadb_lifetime_bytes;
+	__u64 sadb_lifetime_addtime;
+	__u64 sadb_lifetime_usetime;
+};
+
+struct sadb_sa {
+	__u16 sadb_sa_len;
+	__u16 sadb_sa_exttype;
+	__be32 sadb_sa_spi;
+	__u8 sadb_sa_replay;
+	__u8 sadb_sa_state;
+	__u8 sadb_sa_auth;
+	__u8 sadb_sa_encrypt;
+	__u32 sadb_sa_flags;
+};
+
+struct sadb_x_sa2 {
+	__u16 sadb_x_sa2_len;
+	__u16 sadb_x_sa2_exttype;
+	__u8 sadb_x_sa2_mode;
+	__u8 sadb_x_sa2_reserved1;
+	__u16 sadb_x_sa2_reserved2;
+	__u32 sadb_x_sa2_sequence;
+	__u32 sadb_x_sa2_reqid;
+};
+
+struct sadb_x_nat_t_type {
+	__u16 sadb_x_nat_t_type_len;
+	__u16 sadb_x_nat_t_type_exttype;
+	__u8 sadb_x_nat_t_type_type;
+	__u8 sadb_x_nat_t_type_reserved[3];
+};
+
+struct sadb_x_nat_t_port {
+	__u16 sadb_x_nat_t_port_len;
+	__u16 sadb_x_nat_t_port_exttype;
+	__be16 sadb_x_nat_t_port_port;
+	__u16 sadb_x_nat_t_port_reserved;
+};
+
+struct sadb_supported {
+	__u16 sadb_supported_len;
+	__u16 sadb_supported_exttype;
+	__u32 sadb_supported_reserved;
+};
+
+struct sadb_spirange {
+	__u16 sadb_spirange_len;
+	__u16 sadb_spirange_exttype;
+	__u32 sadb_spirange_min;
+	__u32 sadb_spirange_max;
+	__u32 sadb_spirange_reserved;
+};
+
+struct sadb_x_filter {
+	__u16 sadb_x_filter_len;
+	__u16 sadb_x_filter_exttype;
+	__u32 sadb_x_filter_saddr[4];
+	__u32 sadb_x_filter_daddr[4];
+	__u16 sadb_x_filter_family;
+	__u8 sadb_x_filter_splen;
+	__u8 sadb_x_filter_dplen;
+};
+
+enum br_boolopt_id {
+	BR_BOOLOPT_NO_LL_LEARN = 0,
+	BR_BOOLOPT_MCAST_VLAN_SNOOPING = 1,
+	BR_BOOLOPT_MST_ENABLE = 2,
+	BR_BOOLOPT_MAX = 3,
+};
+
+enum net_bridge_opts {
+	BROPT_VLAN_ENABLED = 0,
+	BROPT_VLAN_STATS_ENABLED = 1,
+	BROPT_NF_CALL_IPTABLES = 2,
+	BROPT_NF_CALL_IP6TABLES = 3,
+	BROPT_NF_CALL_ARPTABLES = 4,
+	BROPT_GROUP_ADDR_SET = 5,
+	BROPT_MULTICAST_ENABLED = 6,
+	BROPT_MULTICAST_QUERY_USE_IFADDR = 7,
+	BROPT_MULTICAST_STATS_ENABLED = 8,
+	BROPT_HAS_IPV6_ADDR = 9,
+	BROPT_NEIGH_SUPPRESS_ENABLED = 10,
+	BROPT_MTU_SET_BY_USER = 11,
+	BROPT_VLAN_STATS_PER_PORT = 12,
+	BROPT_NO_LL_LEARN = 13,
+	BROPT_VLAN_BRIDGE_BINDING = 14,
+	BROPT_MCAST_VLAN_SNOOPING_ENABLED = 15,
+	BROPT_MST_ENABLED = 16,
+};
+
+enum switchdev_notifier_type {
+	SWITCHDEV_FDB_ADD_TO_BRIDGE = 1,
+	SWITCHDEV_FDB_DEL_TO_BRIDGE = 2,
+	SWITCHDEV_FDB_ADD_TO_DEVICE = 3,
+	SWITCHDEV_FDB_DEL_TO_DEVICE = 4,
+	SWITCHDEV_FDB_OFFLOADED = 5,
+	SWITCHDEV_FDB_FLUSH_TO_BRIDGE = 6,
+	SWITCHDEV_PORT_OBJ_ADD = 7,
+	SWITCHDEV_PORT_OBJ_DEL = 8,
+	SWITCHDEV_PORT_ATTR_SET = 9,
+	SWITCHDEV_VXLAN_FDB_ADD_TO_BRIDGE = 10,
+	SWITCHDEV_VXLAN_FDB_DEL_TO_BRIDGE = 11,
+	SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE = 12,
+	SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE = 13,
+	SWITCHDEV_VXLAN_FDB_OFFLOADED = 14,
+	SWITCHDEV_BRPORT_OFFLOADED = 15,
+	SWITCHDEV_BRPORT_UNOFFLOADED = 16,
+	SWITCHDEV_BRPORT_REPLAY = 17,
+};
+
+struct br_boolopt_multi {
+	__u32 optval;
+	__u32 optmask;
+};
+
+struct nf_br_ops {
+	int (*br_dev_xmit_hook)(struct sk_buff *);
+};
+
+enum br_pkt_type {
+	BR_PKT_UNICAST = 0,
+	BR_PKT_MULTICAST = 1,
+	BR_PKT_BROADCAST = 2,
+};
+
+struct net_bridge_mcast_gc {
+	struct hlist_node gc_node;
+	void (*destroy)(struct net_bridge_mcast_gc *);
+};
+
+struct net_bridge_port_group;
+
+struct net_bridge_mdb_entry {
+	struct rhash_head rhnode;
+	struct net_bridge *br;
+	struct net_bridge_port_group __attribute__((btf_type_tag("rcu"))) *ports;
+	struct br_ip addr;
+	bool host_joined;
+	struct timer_list timer;
+	struct hlist_node mdb_node;
+	struct net_bridge_mcast_gc mcast_gc;
+	struct callback_head rcu;
+};
+
+struct net_bridge_port_group_sg_key {
+	struct net_bridge_port *port;
+	struct br_ip addr;
+};
+
+struct net_bridge_port_group {
+	struct net_bridge_port_group __attribute__((btf_type_tag("rcu"))) *next;
+	struct net_bridge_port_group_sg_key key;
+	unsigned char eth_addr[6];
+	unsigned char flags;
+	unsigned char filter_mode;
+	unsigned char grp_query_rexmit_cnt;
+	unsigned char rt_protocol;
+	struct hlist_head src_list;
+	unsigned int src_ents;
+	struct timer_list timer;
+	struct timer_list rexmit_timer;
+	struct hlist_node mglist;
+	struct rb_root eht_set_tree;
+	struct rb_root eht_host_tree;
+	struct rhash_head rhnode;
+	struct net_bridge_mcast_gc mcast_gc;
+	struct callback_head rcu;
+};
+
+enum {
+	BR_FDB_LOCAL = 0,
+	BR_FDB_STATIC = 1,
+	BR_FDB_STICKY = 2,
+	BR_FDB_ADDED_BY_USER = 3,
+	BR_FDB_ADDED_BY_EXT_LEARN = 4,
+	BR_FDB_OFFLOADED = 5,
+	BR_FDB_NOTIFY = 6,
+	BR_FDB_NOTIFY_INACTIVE = 7,
+	BR_FDB_LOCKED = 8,
+};
+
+enum {
+	NFEA_UNSPEC = 0,
+	NFEA_ACTIVITY_NOTIFY = 1,
+	NFEA_DONT_REFRESH = 2,
+	__NFEA_MAX = 3,
+};
+
+enum {
+	FDB_NOTIFY_BIT = 1,
+	FDB_NOTIFY_INACTIVE_BIT = 2,
+};
+
+struct net_bridge_vlan_group {
+	struct rhashtable vlan_hash;
+	struct rhashtable tunnel_hash;
+	struct list_head vlan_list;
+	u16 num_vlans;
+	u16 pvid;
+	u8 pvid_state;
+};
+
+struct net_bridge_fdb_flush_desc {
+	unsigned long flags;
+	unsigned long flags_mask;
+	int port_ifindex;
+	u16 vlan_id;
+};
+
+struct __fdb_entry {
+	__u8 mac_addr[6];
+	__u8 port_no;
+	__u8 is_local;
+	__u32 ageing_timer_value;
+	__u8 port_hi;
+	__u8 pad0;
+	__u16 unused;
+};
+
+enum {
+	BR_MCAST_DIR_RX = 0,
+	BR_MCAST_DIR_TX = 1,
+	BR_MCAST_DIR_SIZE = 2,
+};
+
+enum {
+	MDB_RTR_TYPE_DISABLED = 0,
+	MDB_RTR_TYPE_TEMP_QUERY = 1,
+	MDB_RTR_TYPE_PERM = 2,
+	MDB_RTR_TYPE_TEMP = 3,
+};
+
+struct br_frame_type {
+	__be16 type;
+	int (*frame_handler)(struct net_bridge_port *, struct sk_buff *);
+	struct hlist_node list;
+};
+
+struct __bridge_info {
+	__u64 designated_root;
+	__u64 bridge_id;
+	__u32 root_path_cost;
+	__u32 max_age;
+	__u32 hello_time;
+	__u32 forward_delay;
+	__u32 bridge_max_age;
+	__u32 bridge_hello_time;
+	__u32 bridge_forward_delay;
+	__u8 topology_change;
+	__u8 topology_change_detected;
+	__u8 root_port;
+	__u8 stp_enabled;
+	__u32 ageing_time;
+	__u32 gc_interval;
+	__u32 hello_timer_value;
+	__u32 tcn_timer_value;
+	__u32 topology_change_timer_value;
+	__u32 gc_timer_value;
+};
+
+struct __port_info {
+	__u64 designated_root;
+	__u64 designated_bridge;
+	__u16 port_id;
+	__u16 designated_port;
+	__u32 path_cost;
+	__u32 designated_cost;
+	__u8 state;
+	__u8 top_change_ack;
+	__u8 config_pending;
+	__u8 unused0;
+	__u32 message_age_timer_value;
+	__u32 forward_delay_timer_value;
+	__u32 hold_timer_value;
+};
+
+enum switchdev_attr_id {
+	SWITCHDEV_ATTR_ID_UNDEFINED = 0,
+	SWITCHDEV_ATTR_ID_PORT_STP_STATE = 1,
+	SWITCHDEV_ATTR_ID_PORT_MST_STATE = 2,
+	SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS = 3,
+	SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS = 4,
+	SWITCHDEV_ATTR_ID_PORT_MROUTER = 5,
+	SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME = 6,
+	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING = 7,
+	SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL = 8,
+	SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED = 9,
+	SWITCHDEV_ATTR_ID_BRIDGE_MROUTER = 10,
+	SWITCHDEV_ATTR_ID_BRIDGE_MST = 11,
+	SWITCHDEV_ATTR_ID_MRP_PORT_ROLE = 12,
+	SWITCHDEV_ATTR_ID_VLAN_MSTI = 13,
+};
+
+struct switchdev_mst_state {
+	u16 msti;
+	u8 state;
+};
+
+struct switchdev_brport_flags {
+	unsigned long val;
+	unsigned long mask;
+};
+
+struct switchdev_vlan_msti {
+	u16 vid;
+	u16 msti;
+};
+
+struct switchdev_attr {
+	struct net_device *orig_dev;
+	enum switchdev_attr_id id;
+	u32 flags;
+	void *complete_priv;
+	void (*complete)(struct net_device *, int, void *);
+	union {
+		u8 stp_state;
+		struct switchdev_mst_state mst_state;
+		struct switchdev_brport_flags brport_flags;
+		bool mrouter;
+		clock_t ageing_time;
+		bool vlan_filtering;
+		u16 vlan_protocol;
+		bool mst;
+		bool mc_disabled;
+		u8 mrp_port_role;
+		struct switchdev_vlan_msti vlan_msti;
+	} u;
+};
+
+struct br_config_bpdu {
+	unsigned int topology_change: 1;
+	unsigned int topology_change_ack: 1;
+	bridge_id root;
+	int root_path_cost;
+	bridge_id bridge_id;
+	port_id port_id;
+	int message_age;
+	int max_age;
+	int hello_time;
+	int forward_delay;
+};
+
+enum {
+	BR_GROUPFWD_STP = 1,
+	BR_GROUPFWD_MACPAUSE = 2,
+	BR_GROUPFWD_LACP = 4,
+};
+
+enum {
+	IFLA_BR_UNSPEC = 0,
+	IFLA_BR_FORWARD_DELAY = 1,
+	IFLA_BR_HELLO_TIME = 2,
+	IFLA_BR_MAX_AGE = 3,
+	IFLA_BR_AGEING_TIME = 4,
+	IFLA_BR_STP_STATE = 5,
+	IFLA_BR_PRIORITY = 6,
+	IFLA_BR_VLAN_FILTERING = 7,
+	IFLA_BR_VLAN_PROTOCOL = 8,
+	IFLA_BR_GROUP_FWD_MASK = 9,
+	IFLA_BR_ROOT_ID = 10,
+	IFLA_BR_BRIDGE_ID = 11,
+	IFLA_BR_ROOT_PORT = 12,
+	IFLA_BR_ROOT_PATH_COST = 13,
+	IFLA_BR_TOPOLOGY_CHANGE = 14,
+	IFLA_BR_TOPOLOGY_CHANGE_DETECTED = 15,
+	IFLA_BR_HELLO_TIMER = 16,
+	IFLA_BR_TCN_TIMER = 17,
+	IFLA_BR_TOPOLOGY_CHANGE_TIMER = 18,
+	IFLA_BR_GC_TIMER = 19,
+	IFLA_BR_GROUP_ADDR = 20,
+	IFLA_BR_FDB_FLUSH = 21,
+	IFLA_BR_MCAST_ROUTER = 22,
+	IFLA_BR_MCAST_SNOOPING = 23,
+	IFLA_BR_MCAST_QUERY_USE_IFADDR = 24,
+	IFLA_BR_MCAST_QUERIER = 25,
+	IFLA_BR_MCAST_HASH_ELASTICITY = 26,
+	IFLA_BR_MCAST_HASH_MAX = 27,
+	IFLA_BR_MCAST_LAST_MEMBER_CNT = 28,
+	IFLA_BR_MCAST_STARTUP_QUERY_CNT = 29,
+	IFLA_BR_MCAST_LAST_MEMBER_INTVL = 30,
+	IFLA_BR_MCAST_MEMBERSHIP_INTVL = 31,
+	IFLA_BR_MCAST_QUERIER_INTVL = 32,
+	IFLA_BR_MCAST_QUERY_INTVL = 33,
+	IFLA_BR_MCAST_QUERY_RESPONSE_INTVL = 34,
+	IFLA_BR_MCAST_STARTUP_QUERY_INTVL = 35,
+	IFLA_BR_NF_CALL_IPTABLES = 36,
+	IFLA_BR_NF_CALL_IP6TABLES = 37,
+	IFLA_BR_NF_CALL_ARPTABLES = 38,
+	IFLA_BR_VLAN_DEFAULT_PVID = 39,
+	IFLA_BR_PAD = 40,
+	IFLA_BR_VLAN_STATS_ENABLED = 41,
+	IFLA_BR_MCAST_STATS_ENABLED = 42,
+	IFLA_BR_MCAST_IGMP_VERSION = 43,
+	IFLA_BR_MCAST_MLD_VERSION = 44,
+	IFLA_BR_VLAN_STATS_PER_PORT = 45,
+	IFLA_BR_MULTI_BOOLOPT = 46,
+	IFLA_BR_MCAST_QUERIER_STATE = 47,
+	__IFLA_BR_MAX = 48,
+};
+
+enum {
+	LINK_XSTATS_TYPE_UNSPEC = 0,
+	LINK_XSTATS_TYPE_BRIDGE = 1,
+	LINK_XSTATS_TYPE_BOND = 2,
+	__LINK_XSTATS_TYPE_MAX = 3,
+};
+
+enum {
+	BRIDGE_XSTATS_UNSPEC = 0,
+	BRIDGE_XSTATS_VLAN = 1,
+	BRIDGE_XSTATS_MCAST = 2,
+	BRIDGE_XSTATS_PAD = 3,
+	BRIDGE_XSTATS_STP = 4,
+	__BRIDGE_XSTATS_MAX = 5,
+};
+
+struct bridge_vlan_info {
+	__u16 flags;
+	__u16 vid;
+};
+
+struct vtunnel_info {
+	u32 tunid;
+	u16 vid;
+	u16 flags;
+};
+
+enum {
+	IFLA_BRIDGE_VLAN_TUNNEL_UNSPEC = 0,
+	IFLA_BRIDGE_VLAN_TUNNEL_ID = 1,
+	IFLA_BRIDGE_VLAN_TUNNEL_VID = 2,
+	IFLA_BRIDGE_VLAN_TUNNEL_FLAGS = 3,
+	__IFLA_BRIDGE_VLAN_TUNNEL_MAX = 4,
+};
+
+enum {
+	BR_VLFLAG_PER_PORT_STATS = 1,
+	BR_VLFLAG_ADDED_BY_SWITCHDEV = 2,
+	BR_VLFLAG_MCAST_ENABLED = 4,
+	BR_VLFLAG_GLOBAL_MCAST_ENABLED = 8,
+	BR_VLFLAG_NEIGH_SUPPRESS_ENABLED = 16,
+};
+
+struct brport_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct net_bridge_port *, char *);
+	int (*store)(struct net_bridge_port *, unsigned long);
+	int (*store_raw)(struct net_bridge_port *, char *);
+};
+
+enum {
+	BRIDGE_QUERIER_UNSPEC = 0,
+	BRIDGE_QUERIER_IP_ADDRESS = 1,
+	BRIDGE_QUERIER_IP_PORT = 2,
+	BRIDGE_QUERIER_IP_OTHER_TIMER = 3,
+	BRIDGE_QUERIER_PAD = 4,
+	BRIDGE_QUERIER_IPV6_ADDRESS = 5,
+	BRIDGE_QUERIER_IPV6_PORT = 6,
+	BRIDGE_QUERIER_IPV6_OTHER_TIMER = 7,
+	__BRIDGE_QUERIER_MAX = 8,
+};
+
+enum {
+	PIM_TYPE_HELLO = 0,
+	PIM_TYPE_REGISTER = 1,
+	PIM_TYPE_REGISTER_STOP = 2,
+	PIM_TYPE_JOIN_PRUNE = 3,
+	PIM_TYPE_BOOTSTRAP = 4,
+	PIM_TYPE_ASSERT = 5,
+	PIM_TYPE_GRAFT = 6,
+	PIM_TYPE_GRAFT_ACK = 7,
+	PIM_TYPE_CANDIDATE_RP_ADV = 8,
+};
+
+struct net_bridge_group_src {
+	struct hlist_node node;
+	struct br_ip addr;
+	struct net_bridge_port_group *pg;
+	u8 flags;
+	u8 src_query_rexmit_cnt;
+	struct timer_list timer;
+	struct net_bridge *br;
+	struct net_bridge_mcast_gc mcast_gc;
+	struct callback_head rcu;
+};
+
+struct pimhdr {
+	__u8 type;
+	__u8 reserved;
+	__be16 csum;
+};
+
+struct br_ip_list {
+	struct list_head list;
+	struct br_ip addr;
+};
+
+enum {
+	MDBA_UNSPEC = 0,
+	MDBA_MDB = 1,
+	MDBA_ROUTER = 2,
+	__MDBA_MAX = 3,
+};
+
+enum {
+	MDBA_ROUTER_UNSPEC = 0,
+	MDBA_ROUTER_PORT = 1,
+	__MDBA_ROUTER_MAX = 2,
+};
+
+enum {
+	MDBA_ROUTER_PATTR_UNSPEC = 0,
+	MDBA_ROUTER_PATTR_TIMER = 1,
+	MDBA_ROUTER_PATTR_TYPE = 2,
+	MDBA_ROUTER_PATTR_INET_TIMER = 3,
+	MDBA_ROUTER_PATTR_INET6_TIMER = 4,
+	MDBA_ROUTER_PATTR_VID = 5,
+	__MDBA_ROUTER_PATTR_MAX = 6,
+};
+
+enum {
+	MDBA_MDB_UNSPEC = 0,
+	MDBA_MDB_ENTRY = 1,
+	__MDBA_MDB_MAX = 2,
+};
+
+enum {
+	MDBA_MDB_ENTRY_UNSPEC = 0,
+	MDBA_MDB_ENTRY_INFO = 1,
+	__MDBA_MDB_ENTRY_MAX = 2,
+};
+
+enum {
+	MDBA_MDB_EATTR_UNSPEC = 0,
+	MDBA_MDB_EATTR_TIMER = 1,
+	MDBA_MDB_EATTR_SRC_LIST = 2,
+	MDBA_MDB_EATTR_GROUP_MODE = 3,
+	MDBA_MDB_EATTR_SOURCE = 4,
+	MDBA_MDB_EATTR_RTPROT = 5,
+	MDBA_MDB_EATTR_DST = 6,
+	MDBA_MDB_EATTR_DST_PORT = 7,
+	MDBA_MDB_EATTR_VNI = 8,
+	MDBA_MDB_EATTR_IFINDEX = 9,
+	MDBA_MDB_EATTR_SRC_VNI = 10,
+	__MDBA_MDB_EATTR_MAX = 11,
+};
+
+enum {
+	MDBA_MDB_SRCLIST_UNSPEC = 0,
+	MDBA_MDB_SRCLIST_ENTRY = 1,
+	__MDBA_MDB_SRCLIST_MAX = 2,
+};
+
+enum {
+	MDBA_MDB_SRCATTR_UNSPEC = 0,
+	MDBA_MDB_SRCATTR_ADDRESS = 1,
+	MDBA_MDB_SRCATTR_TIMER = 2,
+	__MDBA_MDB_SRCATTR_MAX = 3,
+};
+
+enum {
+	MDBE_ATTR_UNSPEC = 0,
+	MDBE_ATTR_SOURCE = 1,
+	MDBE_ATTR_SRC_LIST = 2,
+	MDBE_ATTR_GROUP_MODE = 3,
+	MDBE_ATTR_RTPROT = 4,
+	MDBE_ATTR_DST = 5,
+	MDBE_ATTR_DST_PORT = 6,
+	MDBE_ATTR_VNI = 7,
+	MDBE_ATTR_IFINDEX = 8,
+	MDBE_ATTR_SRC_VNI = 9,
+	__MDBE_ATTR_MAX = 10,
+};
+
+enum {
+	MDBE_SRCATTR_UNSPEC = 0,
+	MDBE_SRCATTR_ADDRESS = 1,
+	__MDBE_SRCATTR_MAX = 2,
+};
+
+struct br_mdb_src_entry;
+
+struct br_mdb_config {
+	struct net_bridge *br;
+	struct net_bridge_port *p;
+	struct br_mdb_entry *entry;
+	struct br_ip group;
+	bool src_entry;
+	u8 filter_mode;
+	u16 nlflags;
+	struct br_mdb_src_entry *src_entries;
+	int num_src_entries;
+	u8 rt_protocol;
+};
+
+struct br_mdb_src_entry {
+	struct br_ip addr;
+};
+
+union net_bridge_eht_addr {
+	__be32 ip4;
+	struct in6_addr ip6;
+};
+
+struct net_bridge_group_eht_set {
+	struct rb_node rb_node;
+	union net_bridge_eht_addr src_addr;
+	struct rb_root entry_tree;
+	struct timer_list timer;
+	struct net_bridge_port_group *pg;
+	struct net_bridge *br;
+	struct net_bridge_mcast_gc mcast_gc;
+};
+
+struct net_bridge_group_eht_host;
+
+struct net_bridge_group_eht_set_entry {
+	struct rb_node rb_node;
+	struct hlist_node host_list;
+	union net_bridge_eht_addr h_addr;
+	struct timer_list timer;
+	struct net_bridge *br;
+	struct net_bridge_group_eht_set *eht_set;
+	struct net_bridge_group_eht_host *h_parent;
+	struct net_bridge_mcast_gc mcast_gc;
+};
+
+struct net_bridge_group_eht_host {
+	struct rb_node rb_node;
+	union net_bridge_eht_addr h_addr;
+	struct hlist_head set_entries;
+	unsigned int num_entries;
+	unsigned char filter_mode;
+	struct net_bridge_port_group *pg;
+};
+
+struct devlink_dev_stats {
+	u32 reload_stats[6];
+	u32 remote_reload_stats[6];
+};
+
+struct devlink_dpipe_headers;
+
+struct devlink_ops;
+
+struct devlink {
+	u32 index;
+	struct xarray ports;
+	struct list_head rate_list;
+	struct list_head sb_list;
+	struct list_head dpipe_table_list;
+	struct list_head resource_list;
+	struct xarray params;
+	struct list_head region_list;
+	struct list_head reporter_list;
+	struct devlink_dpipe_headers *dpipe_headers;
+	struct list_head trap_list;
+	struct list_head trap_group_list;
+	struct list_head trap_policer_list;
+	struct list_head linecard_list;
+	const struct devlink_ops *ops;
+	struct xarray snapshot_ids;
+	struct devlink_dev_stats stats;
+	struct device *dev;
+	possible_net_t _net;
+	struct mutex lock;
+	struct lock_class_key lock_key;
+	u8 reload_failed: 1;
+	refcount_t refcount;
+	struct rcu_work rwork;
+	long: 64;
+	long: 64;
+	long: 64;
+	char priv[0];
+};
+
+struct devlink_dpipe_header;
+
+struct devlink_dpipe_headers {
+	struct devlink_dpipe_header **headers;
+	unsigned int headers_count;
+};
+
+struct devlink_dpipe_field;
+
+struct devlink_dpipe_header {
+	const char *name;
+	unsigned int id;
+	struct devlink_dpipe_field *fields;
+	unsigned int fields_count;
+	bool global;
+};
+
+enum devlink_dpipe_field_mapping_type {
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,
+	DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,
+};
+
+struct devlink_dpipe_field {
+	const char *name;
+	unsigned int id;
+	unsigned int bitwidth;
+	enum devlink_dpipe_field_mapping_type mapping_type;
+};
+
+enum devlink_reload_action {
+	DEVLINK_RELOAD_ACTION_UNSPEC = 0,
+	DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,
+	DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,
+	__DEVLINK_RELOAD_ACTION_MAX = 3,
+	DEVLINK_RELOAD_ACTION_MAX = 2,
+};
+
+enum devlink_reload_limit {
+	DEVLINK_RELOAD_LIMIT_UNSPEC = 0,
+	DEVLINK_RELOAD_LIMIT_NO_RESET = 1,
+	__DEVLINK_RELOAD_LIMIT_MAX = 2,
+	DEVLINK_RELOAD_LIMIT_MAX = 1,
+};
+
+enum devlink_sb_threshold_type {
+	DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,
+	DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,
+};
+
+enum devlink_sb_pool_type {
+	DEVLINK_SB_POOL_TYPE_INGRESS = 0,
+	DEVLINK_SB_POOL_TYPE_EGRESS = 1,
+};
+
+enum devlink_eswitch_encap_mode {
+	DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,
+	DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,
+};
+
+enum devlink_trap_action {
+	DEVLINK_TRAP_ACTION_DROP = 0,
+	DEVLINK_TRAP_ACTION_TRAP = 1,
+	DEVLINK_TRAP_ACTION_MIRROR = 2,
+};
+
+enum devlink_selftest_status {
+	DEVLINK_SELFTEST_STATUS_SKIP = 0,
+	DEVLINK_SELFTEST_STATUS_PASS = 1,
+	DEVLINK_SELFTEST_STATUS_FAIL = 2,
+};
+
+struct devlink_sb_pool_info;
+
+struct devlink_info_req;
+
+struct devlink_flash_update_params;
+
+struct devlink_trap;
+
+struct devlink_trap_group;
+
+struct devlink_trap_policer;
+
+struct devlink_port_new_attrs;
+
+struct devlink_ops {
+	u32 supported_flash_update_params;
+	unsigned long reload_actions;
+	unsigned long reload_limits;
+	int (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);
+	int (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);
+	int (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);
+	int (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
+	int (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);
+	int (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);
+	int (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
+	int (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
+	int (*sb_occ_snapshot)(struct devlink *, unsigned int);
+	int (*sb_occ_max_clear)(struct devlink *, unsigned int);
+	int (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);
+	int (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
+	int (*eswitch_mode_get)(struct devlink *, u16 *);
+	int (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);
+	int (*eswitch_inline_mode_get)(struct devlink *, u8 *);
+	int (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);
+	int (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);
+	int (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);
+	int (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);
+	int (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);
+	int (*trap_init)(struct devlink *, const struct devlink_trap *, void *);
+	void (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);
+	int (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);
+	int (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);
+	int (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);
+	int (*trap_drop_counter_get)(struct devlink *, const struct devlink_trap *, u64 *);
+	int (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);
+	void (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);
+	int (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);
+	int (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);
+	int (*port_new)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, struct devlink_port **);
+	int (*rate_leaf_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_priority_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_leaf_tx_weight_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_tx_share_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_max_set)(struct devlink_rate *, void *, u64, struct netlink_ext_ack *);
+	int (*rate_node_tx_priority_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_tx_weight_set)(struct devlink_rate *, void *, u32, struct netlink_ext_ack *);
+	int (*rate_node_new)(struct devlink_rate *, void **, struct netlink_ext_ack *);
+	int (*rate_node_del)(struct devlink_rate *, void *, struct netlink_ext_ack *);
+	int (*rate_leaf_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	int (*rate_node_parent_set)(struct devlink_rate *, struct devlink_rate *, void *, void *, struct netlink_ext_ack *);
+	bool (*selftest_check)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+	enum devlink_selftest_status (*selftest_run)(struct devlink *, unsigned int, struct netlink_ext_ack *);
+};
+
+struct devlink_sb_pool_info {
+	enum devlink_sb_pool_type pool_type;
+	u32 size;
+	enum devlink_sb_threshold_type threshold_type;
+	u32 cell_size;
+};
+
+struct devlink_flash_update_params {
+	const struct firmware *fw;
+	const char *component;
+	u32 overwrite_mask;
+};
+
+enum devlink_trap_type {
+	DEVLINK_TRAP_TYPE_DROP = 0,
+	DEVLINK_TRAP_TYPE_EXCEPTION = 1,
+	DEVLINK_TRAP_TYPE_CONTROL = 2,
+};
+
+struct devlink_trap {
+	enum devlink_trap_type type;
+	enum devlink_trap_action init_action;
+	bool generic;
+	u16 id;
+	const char *name;
+	u16 init_group_id;
+	u32 metadata_cap;
+};
+
+struct devlink_trap_group {
+	const char *name;
+	u16 id;
+	bool generic;
+	u32 init_policer_id;
+};
+
+struct devlink_trap_policer {
+	u32 id;
+	u64 init_rate;
+	u64 init_burst;
+	u64 max_rate;
+	u64 min_rate;
+	u64 max_burst;
+	u64 min_burst;
+};
+
+struct devlink_port_new_attrs {
+	enum devlink_port_flavour flavour;
+	unsigned int port_index;
+	u32 controller;
+	u32 sfnum;
+	u16 pfnum;
+	u8 port_index_valid: 1;
+	u8 controller_valid: 1;
+	u8 sfnum_valid: 1;
+};
+
+struct ib_core_device {
+	struct device dev;
+	possible_net_t rdma_net;
+	struct kobject *ports_kobj;
+	struct list_head port_list;
+	struct ib_device *owner;
+};
+
+enum rdma_driver_id {
+	RDMA_DRIVER_UNKNOWN = 0,
+	RDMA_DRIVER_MLX5 = 1,
+	RDMA_DRIVER_MLX4 = 2,
+	RDMA_DRIVER_CXGB3 = 3,
+	RDMA_DRIVER_CXGB4 = 4,
+	RDMA_DRIVER_MTHCA = 5,
+	RDMA_DRIVER_BNXT_RE = 6,
+	RDMA_DRIVER_OCRDMA = 7,
+	RDMA_DRIVER_NES = 8,
+	RDMA_DRIVER_I40IW = 9,
+	RDMA_DRIVER_IRDMA = 9,
+	RDMA_DRIVER_VMW_PVRDMA = 10,
+	RDMA_DRIVER_QEDR = 11,
+	RDMA_DRIVER_HNS = 12,
+	RDMA_DRIVER_USNIC = 13,
+	RDMA_DRIVER_RXE = 14,
+	RDMA_DRIVER_HFI1 = 15,
+	RDMA_DRIVER_QIB = 16,
+	RDMA_DRIVER_EFA = 17,
+	RDMA_DRIVER_SIW = 18,
+	RDMA_DRIVER_ERDMA = 19,
+	RDMA_DRIVER_MANA = 20,
+};
+
+enum ib_cq_notify_flags {
+	IB_CQ_SOLICITED = 1,
+	IB_CQ_NEXT_COMP = 2,
+	IB_CQ_SOLICITED_MASK = 3,
+	IB_CQ_REPORT_MISSED_EVENTS = 4,
+};
+
+struct ib_mad;
+
+enum rdma_link_layer {
+	IB_LINK_LAYER_UNSPECIFIED = 0,
+	IB_LINK_LAYER_INFINIBAND = 1,
+	IB_LINK_LAYER_ETHERNET = 2,
+};
+
+enum rdma_netdev_t {
+	RDMA_NETDEV_OPA_VNIC = 0,
+	RDMA_NETDEV_IPOIB = 1,
+};
+
+enum ib_srq_attr_mask {
+	IB_SRQ_MAX_WR = 1,
+	IB_SRQ_LIMIT = 2,
+};
+
+enum ib_mr_type {
+	IB_MR_TYPE_MEM_REG = 0,
+	IB_MR_TYPE_SG_GAPS = 1,
+	IB_MR_TYPE_DM = 2,
+	IB_MR_TYPE_USER = 3,
+	IB_MR_TYPE_DMA = 4,
+	IB_MR_TYPE_INTEGRITY = 5,
+};
+
+enum ib_uverbs_advise_mr_advice {
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH = 0,
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE = 1,
+	IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_NO_FAULT = 2,
+};
+
+struct uverbs_attr_bundle;
+
+struct rdma_cm_id;
+
+struct iw_cm_id;
+
+struct iw_cm_conn_param;
+
+struct ib_qp;
+
+struct ib_send_wr;
+
+struct ib_recv_wr;
+
+struct ib_cq;
+
+struct ib_wc;
+
+struct ib_srq;
+
+struct ib_grh;
+
+struct ib_device_attr;
+
+struct ib_udata;
+
+struct ib_device_modify;
+
+struct ib_port_attr;
+
+struct ib_port_modify;
+
+struct ib_port_immutable;
+
+struct rdma_netdev_alloc_params;
+
+union ib_gid;
+
+struct ib_gid_attr;
+
+struct ib_ucontext;
+
+struct rdma_user_mmap_entry;
+
+struct ib_pd;
+
+struct ib_ah;
+
+struct rdma_ah_init_attr;
+
+struct rdma_ah_attr;
+
+struct ib_srq_init_attr;
+
+struct ib_srq_attr;
+
+struct ib_qp_init_attr;
+
+struct ib_qp_attr;
+
+struct ib_cq_init_attr;
+
+struct ib_mr;
+
+struct ib_sge;
+
+struct ib_mr_status;
+
+struct ib_mw;
+
+struct ib_xrcd;
+
+struct ib_flow;
+
+struct ib_flow_attr;
+
+struct ib_flow_action;
+
+struct ib_wq;
+
+struct ib_wq_init_attr;
+
+struct ib_wq_attr;
+
+struct ib_rwq_ind_table;
+
+struct ib_rwq_ind_table_init_attr;
+
+struct ib_dm;
+
+struct ib_dm_alloc_attr;
+
+struct ib_dm_mr_attr;
+
+struct ib_counters;
+
+struct ib_counters_read_attr;
+
+struct rdma_hw_stats;
+
+struct rdma_counter;
+
+struct ib_device_ops {
+	struct module *owner;
+	enum rdma_driver_id driver_id;
+	u32 uverbs_abi_ver;
+	unsigned int uverbs_no_driver_id_binding: 1;
+	const struct attribute_group *device_group;
+	const struct attribute_group **port_groups;
+	int (*post_send)(struct ib_qp *, const struct ib_send_wr *, const struct ib_send_wr **);
+	int (*post_recv)(struct ib_qp *, const struct ib_recv_wr *, const struct ib_recv_wr **);
+	void (*drain_rq)(struct ib_qp *);
+	void (*drain_sq)(struct ib_qp *);
+	int (*poll_cq)(struct ib_cq *, int, struct ib_wc *);
+	int (*peek_cq)(struct ib_cq *, int);
+	int (*req_notify_cq)(struct ib_cq *, enum ib_cq_notify_flags);
+	int (*post_srq_recv)(struct ib_srq *, const struct ib_recv_wr *, const struct ib_recv_wr **);
+	int (*process_mad)(struct ib_device *, int, u32, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);
+	int (*query_device)(struct ib_device *, struct ib_device_attr *, struct ib_udata *);
+	int (*modify_device)(struct ib_device *, int, struct ib_device_modify *);
+	void (*get_dev_fw_str)(struct ib_device *, char *);
+	const struct cpumask * (*get_vector_affinity)(struct ib_device *, int);
+	int (*query_port)(struct ib_device *, u32, struct ib_port_attr *);
+	int (*modify_port)(struct ib_device *, u32, int, struct ib_port_modify *);
+	int (*get_port_immutable)(struct ib_device *, u32, struct ib_port_immutable *);
+	enum rdma_link_layer (*get_link_layer)(struct ib_device *, u32);
+	struct net_device * (*get_netdev)(struct ib_device *, u32);
+	struct net_device * (*alloc_rdma_netdev)(struct ib_device *, u32, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));
+	int (*rdma_netdev_get_params)(struct ib_device *, u32, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);
+	int (*query_gid)(struct ib_device *, u32, int, union ib_gid *);
+	int (*add_gid)(const struct ib_gid_attr *, void **);
+	int (*del_gid)(const struct ib_gid_attr *, void **);
+	int (*query_pkey)(struct ib_device *, u32, u16, u16 *);
+	int (*alloc_ucontext)(struct ib_ucontext *, struct ib_udata *);
+	void (*dealloc_ucontext)(struct ib_ucontext *);
+	int (*mmap)(struct ib_ucontext *, struct vm_area_struct *);
+	void (*mmap_free)(struct rdma_user_mmap_entry *);
+	void (*disassociate_ucontext)(struct ib_ucontext *);
+	int (*alloc_pd)(struct ib_pd *, struct ib_udata *);
+	int (*dealloc_pd)(struct ib_pd *, struct ib_udata *);
+	int (*create_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*create_user_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);
+	int (*modify_ah)(struct ib_ah *, struct rdma_ah_attr *);
+	int (*query_ah)(struct ib_ah *, struct rdma_ah_attr *);
+	int (*destroy_ah)(struct ib_ah *, u32);
+	int (*create_srq)(struct ib_srq *, struct ib_srq_init_attr *, struct ib_udata *);
+	int (*modify_srq)(struct ib_srq *, struct ib_srq_attr *, enum ib_srq_attr_mask, struct ib_udata *);
+	int (*query_srq)(struct ib_srq *, struct ib_srq_attr *);
+	int (*destroy_srq)(struct ib_srq *, struct ib_udata *);
+	int (*create_qp)(struct ib_qp *, struct ib_qp_init_attr *, struct ib_udata *);
+	int (*modify_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);
+	int (*query_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_qp_init_attr *);
+	int (*destroy_qp)(struct ib_qp *, struct ib_udata *);
+	int (*create_cq)(struct ib_cq *, const struct ib_cq_init_attr *, struct ib_udata *);
+	int (*modify_cq)(struct ib_cq *, u16, u16);
+	int (*destroy_cq)(struct ib_cq *, struct ib_udata *);
+	int (*resize_cq)(struct ib_cq *, int, struct ib_udata *);
+	struct ib_mr * (*get_dma_mr)(struct ib_pd *, int);
+	struct ib_mr * (*reg_user_mr)(struct ib_pd *, u64, u64, u64, int, struct ib_udata *);
+	struct ib_mr * (*reg_user_mr_dmabuf)(struct ib_pd *, u64, u64, u64, int, int, struct ib_udata *);
+	struct ib_mr * (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);
+	int (*dereg_mr)(struct ib_mr *, struct ib_udata *);
+	struct ib_mr * (*alloc_mr)(struct ib_pd *, enum ib_mr_type, u32);
+	struct ib_mr * (*alloc_mr_integrity)(struct ib_pd *, u32, u32);
+	int (*advise_mr)(struct ib_pd *, enum ib_uverbs_advise_mr_advice, u32, struct ib_sge *, u32, struct uverbs_attr_bundle *);
+	int (*map_mr_sg)(struct ib_mr *, struct scatterlist *, int, unsigned int *);
+	int (*check_mr_status)(struct ib_mr *, u32, struct ib_mr_status *);
+	int (*alloc_mw)(struct ib_mw *, struct ib_udata *);
+	int (*dealloc_mw)(struct ib_mw *);
+	int (*attach_mcast)(struct ib_qp *, union ib_gid *, u16);
+	int (*detach_mcast)(struct ib_qp *, union ib_gid *, u16);
+	int (*alloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
+	int (*dealloc_xrcd)(struct ib_xrcd *, struct ib_udata *);
+	struct ib_flow * (*create_flow)(struct ib_qp *, struct ib_flow_attr *, struct ib_udata *);
+	int (*destroy_flow)(struct ib_flow *);
+	int (*destroy_flow_action)(struct ib_flow_action *);
+	int (*set_vf_link_state)(struct ib_device *, int, u32, int);
+	int (*get_vf_config)(struct ib_device *, int, u32, struct ifla_vf_info *);
+	int (*get_vf_stats)(struct ib_device *, int, u32, struct ifla_vf_stats *);
+	int (*get_vf_guid)(struct ib_device *, int, u32, struct ifla_vf_guid *, struct ifla_vf_guid *);
+	int (*set_vf_guid)(struct ib_device *, int, u32, u64, int);
+	struct ib_wq * (*create_wq)(struct ib_pd *, struct ib_wq_init_attr *, struct ib_udata *);
+	int (*destroy_wq)(struct ib_wq *, struct ib_udata *);
+	int (*modify_wq)(struct ib_wq *, struct ib_wq_attr *, u32, struct ib_udata *);
+	int (*create_rwq_ind_table)(struct ib_rwq_ind_table *, struct ib_rwq_ind_table_init_attr *, struct ib_udata *);
+	int (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *);
+	struct ib_dm * (*alloc_dm)(struct ib_device *, struct ib_ucontext *, struct ib_dm_alloc_attr *, struct uverbs_attr_bundle *);
+	int (*dealloc_dm)(struct ib_dm *, struct uverbs_attr_bundle *);
+	struct ib_mr * (*reg_dm_mr)(struct ib_pd *, struct ib_dm *, struct ib_dm_mr_attr *, struct uverbs_attr_bundle *);
+	int (*create_counters)(struct ib_counters *, struct uverbs_attr_bundle *);
+	int (*destroy_counters)(struct ib_counters *);
+	int (*read_counters)(struct ib_counters *, struct ib_counters_read_attr *, struct uverbs_attr_bundle *);
+	int (*map_mr_sg_pi)(struct ib_mr *, struct scatterlist *, int, unsigned int *, struct scatterlist *, int, unsigned int *);
+	struct rdma_hw_stats * (*alloc_hw_device_stats)(struct ib_device *);
+	struct rdma_hw_stats * (*alloc_hw_port_stats)(struct ib_device *, u32);
+	int (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u32, int);
+	int (*modify_hw_stat)(struct ib_device *, u32, unsigned int, bool);
+	int (*fill_res_mr_entry)(struct sk_buff *, struct ib_mr *);
+	int (*fill_res_mr_entry_raw)(struct sk_buff *, struct ib_mr *);
+	int (*fill_res_cq_entry)(struct sk_buff *, struct ib_cq *);
+	int (*fill_res_cq_entry_raw)(struct sk_buff *, struct ib_cq *);
+	int (*fill_res_qp_entry)(struct sk_buff *, struct ib_qp *);
+	int (*fill_res_qp_entry_raw)(struct sk_buff *, struct ib_qp *);
+	int (*fill_res_cm_id_entry)(struct sk_buff *, struct rdma_cm_id *);
+	int (*enable_driver)(struct ib_device *);
+	void (*dealloc_driver)(struct ib_device *);
+	void (*iw_add_ref)(struct ib_qp *);
+	void (*iw_rem_ref)(struct ib_qp *);
+	struct ib_qp * (*iw_get_qp)(struct ib_device *, int);
+	int (*iw_connect)(struct iw_cm_id *, struct iw_cm_conn_param *);
+	int (*iw_accept)(struct iw_cm_id *, struct iw_cm_conn_param *);
+	int (*iw_reject)(struct iw_cm_id *, const void *, u8);
+	int (*iw_create_listen)(struct iw_cm_id *, int);
+	int (*iw_destroy_listen)(struct iw_cm_id *);
+	int (*counter_bind_qp)(struct rdma_counter *, struct ib_qp *);
+	int (*counter_unbind_qp)(struct ib_qp *);
+	int (*counter_dealloc)(struct rdma_counter *);
+	struct rdma_hw_stats * (*counter_alloc_stats)(struct rdma_counter *);
+	int (*counter_update_stats)(struct rdma_counter *);
+	int (*fill_stat_mr_entry)(struct sk_buff *, struct ib_mr *);
+	int (*query_ucontext)(struct ib_ucontext *, struct uverbs_attr_bundle *);
+	int (*get_numa_node)(struct ib_device *);
+	size_t size_ib_ah;
+	size_t size_ib_counters;
+	size_t size_ib_cq;
+	size_t size_ib_mw;
+	size_t size_ib_pd;
+	size_t size_ib_qp;
+	size_t size_ib_rwq_ind_table;
+	size_t size_ib_srq;
+	size_t size_ib_ucontext;
+	size_t size_ib_xrcd;
+};
+
+enum ib_atomic_cap {
+	IB_ATOMIC_NONE = 0,
+	IB_ATOMIC_HCA = 1,
+	IB_ATOMIC_GLOB = 2,
+};
+
+struct ib_odp_caps {
+	uint64_t general_caps;
+	struct {
+		uint32_t rc_odp_caps;
+		uint32_t uc_odp_caps;
+		uint32_t ud_odp_caps;
+		uint32_t xrc_odp_caps;
+	} per_transport_caps;
+};
+
+struct ib_rss_caps {
+	u32 supported_qpts;
+	u32 max_rwq_indirection_tables;
+	u32 max_rwq_indirection_table_size;
+};
+
+struct ib_tm_caps {
+	u32 max_rndv_hdr_size;
+	u32 max_num_tags;
+	u32 flags;
+	u32 max_ops;
+	u32 max_sge;
+};
+
+struct ib_cq_caps {
+	u16 max_cq_moderation_count;
+	u16 max_cq_moderation_period;
+};
+
+struct ib_device_attr {
+	u64 fw_ver;
+	__be64 sys_image_guid;
+	u64 max_mr_size;
+	u64 page_size_cap;
+	u32 vendor_id;
+	u32 vendor_part_id;
+	u32 hw_ver;
+	int max_qp;
+	int max_qp_wr;
+	u64 device_cap_flags;
+	u64 kernel_cap_flags;
+	int max_send_sge;
+	int max_recv_sge;
+	int max_sge_rd;
+	int max_cq;
+	int max_cqe;
+	int max_mr;
+	int max_pd;
+	int max_qp_rd_atom;
+	int max_ee_rd_atom;
+	int max_res_rd_atom;
+	int max_qp_init_rd_atom;
+	int max_ee_init_rd_atom;
+	enum ib_atomic_cap atomic_cap;
+	enum ib_atomic_cap masked_atomic_cap;
+	int max_ee;
+	int max_rdd;
+	int max_mw;
+	int max_raw_ipv6_qp;
+	int max_raw_ethy_qp;
+	int max_mcast_grp;
+	int max_mcast_qp_attach;
+	int max_total_mcast_qp_attach;
+	int max_ah;
+	int max_srq;
+	int max_srq_wr;
+	int max_srq_sge;
+	unsigned int max_fast_reg_page_list_len;
+	unsigned int max_pi_fast_reg_page_list_len;
+	u16 max_pkeys;
+	u8 local_ca_ack_delay;
+	int sig_prot_cap;
+	int sig_guard_cap;
+	struct ib_odp_caps odp_caps;
+	uint64_t timestamp_mask;
+	uint64_t hca_core_clock;
+	struct ib_rss_caps rss_caps;
+	u32 max_wq_type_rq;
+	u32 raw_packet_caps;
+	struct ib_tm_caps tm_caps;
+	struct ib_cq_caps cq_caps;
+	u64 max_dm_size;
+	u32 max_sgl_rd;
+};
+
+struct hw_stats_device_data;
+
+struct rdma_restrack_root;
+
+struct uapi_definition;
+
+struct ib_port_data;
+
+struct rdma_link_ops;
+
+struct ib_device {
+	struct device *dma_device;
+	struct ib_device_ops ops;
+	char name[64];
+	struct callback_head callback_head;
+	struct list_head event_handler_list;
+	struct rw_semaphore event_handler_rwsem;
+	spinlock_t qp_open_list_lock;
+	struct rw_semaphore client_data_rwsem;
+	struct xarray client_data;
+	struct mutex unregistration_lock;
+	rwlock_t cache_lock;
+	struct ib_port_data *port_data;
+	int num_comp_vectors;
+	union {
+		struct device dev;
+		struct ib_core_device coredev;
+	};
+	const struct attribute_group *groups[4];
+	u64 uverbs_cmd_mask;
+	char node_desc[64];
+	__be64 node_guid;
+	u32 local_dma_lkey;
+	u16 is_switch: 1;
+	u16 kverbs_provider: 1;
+	u16 use_cq_dim: 1;
+	u8 node_type;
+	u32 phys_port_cnt;
+	struct ib_device_attr attrs;
+	struct hw_stats_device_data *hw_stats_data;
+	u32 index;
+	spinlock_t cq_pools_lock;
+	struct list_head cq_pools[3];
+	struct rdma_restrack_root *res;
+	const struct uapi_definition *driver_def;
+	refcount_t refcount;
+	struct completion unreg_completion;
+	struct work_struct unregistration_work;
+	const struct rdma_link_ops *link_ops;
+	struct mutex compat_devs_mutex;
+	struct xarray compat_devs;
+	char iw_ifname[16];
+	u32 iw_driver_flags;
+	u32 lag_flags;
+};
+
+struct ib_uqp_object;
+
+enum ib_qp_type {
+	IB_QPT_SMI = 0,
+	IB_QPT_GSI = 1,
+	IB_QPT_RC = 2,
+	IB_QPT_UC = 3,
+	IB_QPT_UD = 4,
+	IB_QPT_RAW_IPV6 = 5,
+	IB_QPT_RAW_ETHERTYPE = 6,
+	IB_QPT_RAW_PACKET = 8,
+	IB_QPT_XRC_INI = 9,
+	IB_QPT_XRC_TGT = 10,
+	IB_QPT_MAX = 11,
+	IB_QPT_DRIVER = 255,
+	IB_QPT_RESERVED1 = 4096,
+	IB_QPT_RESERVED2 = 4097,
+	IB_QPT_RESERVED3 = 4098,
+	IB_QPT_RESERVED4 = 4099,
+	IB_QPT_RESERVED5 = 4100,
+	IB_QPT_RESERVED6 = 4101,
+	IB_QPT_RESERVED7 = 4102,
+	IB_QPT_RESERVED8 = 4103,
+	IB_QPT_RESERVED9 = 4104,
+	IB_QPT_RESERVED10 = 4105,
+};
+
+enum rdma_restrack_type {
+	RDMA_RESTRACK_PD = 0,
+	RDMA_RESTRACK_CQ = 1,
+	RDMA_RESTRACK_QP = 2,
+	RDMA_RESTRACK_CM_ID = 3,
+	RDMA_RESTRACK_MR = 4,
+	RDMA_RESTRACK_CTX = 5,
+	RDMA_RESTRACK_COUNTER = 6,
+	RDMA_RESTRACK_SRQ = 7,
+	RDMA_RESTRACK_MAX = 8,
+};
+
+struct rdma_restrack_entry {
+	bool valid;
+	u8 no_track: 1;
+	struct kref kref;
+	struct completion comp;
+	struct task_struct *task;
+	const char *kern_name;
+	enum rdma_restrack_type type;
+	bool user;
+	u32 id;
+};
+
+struct ib_event;
+
+struct ib_qp_security;
+
+struct ib_qp {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_cq *send_cq;
+	struct ib_cq *recv_cq;
+	spinlock_t mr_lock;
+	int mrs_used;
+	struct list_head rdma_mrs;
+	struct list_head sig_mrs;
+	struct ib_srq *srq;
+	struct ib_xrcd *xrcd;
+	struct list_head xrcd_list;
+	atomic_t usecnt;
+	struct list_head open_list;
+	struct ib_qp *real_qp;
+	struct ib_uqp_object *uobject;
+	void (*event_handler)(struct ib_event *, void *);
+	void *qp_context;
+	const struct ib_gid_attr *av_sgid_attr;
+	const struct ib_gid_attr *alt_path_sgid_attr;
+	u32 qp_num;
+	u32 max_write_sge;
+	u32 max_read_sge;
+	enum ib_qp_type qp_type;
+	struct ib_rwq_ind_table *rwq_ind_tbl;
+	struct ib_qp_security *qp_sec;
+	u32 port;
+	bool integrity_en;
+	struct rdma_restrack_entry res;
+	struct rdma_counter *counter;
+};
+
+struct ib_uobject;
+
+struct ib_pd {
+	u32 local_dma_lkey;
+	u32 flags;
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+	u32 unsafe_global_rkey;
+	struct ib_mr *__internal_mr;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_uverbs_file;
+
+struct ib_rdmacg_object {};
+
+struct uverbs_api_object;
+
+struct ib_uobject {
+	u64 user_handle;
+	struct ib_uverbs_file *ufile;
+	struct ib_ucontext *context;
+	void *object;
+	struct list_head list;
+	struct ib_rdmacg_object cg_obj;
+	int id;
+	struct kref ref;
+	atomic_t usecnt;
+	struct callback_head rcu;
+	const struct uverbs_api_object *uapi_object;
+};
+
+struct ib_ucontext {
+	struct ib_device *device;
+	struct ib_uverbs_file *ufile;
+	struct ib_rdmacg_object cg_obj;
+	struct rdma_restrack_entry res;
+	struct xarray mmap_xa;
+};
+
+struct ib_sig_attrs;
+
+struct ib_mr {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	u32 lkey;
+	u32 rkey;
+	u64 iova;
+	u64 length;
+	unsigned int page_size;
+	enum ib_mr_type type;
+	bool need_inval;
+	union {
+		struct ib_uobject *uobject;
+		struct list_head qp_entry;
+	};
+	struct ib_dm *dm;
+	struct ib_sig_attrs *sig_attrs;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_dm {
+	struct ib_device *device;
+	u32 length;
+	u32 flags;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+};
+
+enum ib_signature_type {
+	IB_SIG_TYPE_NONE = 0,
+	IB_SIG_TYPE_T10_DIF = 1,
+};
+
+enum ib_t10_dif_bg_type {
+	IB_T10DIF_CRC = 0,
+	IB_T10DIF_CSUM = 1,
+};
+
+struct ib_t10_dif_domain {
+	enum ib_t10_dif_bg_type bg_type;
+	u16 pi_interval;
+	u16 bg;
+	u16 app_tag;
+	u32 ref_tag;
+	bool ref_remap;
+	bool app_escape;
+	bool ref_escape;
+	u16 apptag_check_mask;
+};
+
+struct ib_sig_domain {
+	enum ib_signature_type sig_type;
+	union {
+		struct ib_t10_dif_domain dif;
+	} sig;
+};
+
+struct ib_sig_attrs {
+	u8 check_mask;
+	struct ib_sig_domain mem;
+	struct ib_sig_domain wire;
+	int meta_length;
+};
+
+struct irq_poll;
+
+typedef int irq_poll_fn(struct irq_poll *, int);
+
+struct irq_poll {
+	struct list_head list;
+	unsigned long state;
+	int weight;
+	irq_poll_fn *poll;
+};
+
+struct ib_ucq_object;
+
+typedef void (*ib_comp_handler)(struct ib_cq *, void *);
+
+enum ib_poll_context {
+	IB_POLL_SOFTIRQ = 0,
+	IB_POLL_WORKQUEUE = 1,
+	IB_POLL_UNBOUND_WORKQUEUE = 2,
+	IB_POLL_LAST_POOL_TYPE = 2,
+	IB_POLL_DIRECT = 3,
+};
+
+struct dim;
+
+struct ib_cq {
+	struct ib_device *device;
+	struct ib_ucq_object *uobject;
+	ib_comp_handler comp_handler;
+	void (*event_handler)(struct ib_event *, void *);
+	void *cq_context;
+	int cqe;
+	unsigned int cqe_used;
+	atomic_t usecnt;
+	enum ib_poll_context poll_ctx;
+	struct ib_wc *wc;
+	struct list_head pool_entry;
+	union {
+		struct irq_poll iop;
+		struct work_struct work;
+	};
+	struct workqueue_struct *comp_wq;
+	struct dim *dim;
+	ktime_t timestamp;
+	u8 interrupt: 1;
+	u8 shared: 1;
+	unsigned int comp_vector;
+	struct rdma_restrack_entry res;
+};
+
+enum ib_event_type {
+	IB_EVENT_CQ_ERR = 0,
+	IB_EVENT_QP_FATAL = 1,
+	IB_EVENT_QP_REQ_ERR = 2,
+	IB_EVENT_QP_ACCESS_ERR = 3,
+	IB_EVENT_COMM_EST = 4,
+	IB_EVENT_SQ_DRAINED = 5,
+	IB_EVENT_PATH_MIG = 6,
+	IB_EVENT_PATH_MIG_ERR = 7,
+	IB_EVENT_DEVICE_FATAL = 8,
+	IB_EVENT_PORT_ACTIVE = 9,
+	IB_EVENT_PORT_ERR = 10,
+	IB_EVENT_LID_CHANGE = 11,
+	IB_EVENT_PKEY_CHANGE = 12,
+	IB_EVENT_SM_CHANGE = 13,
+	IB_EVENT_SRQ_ERR = 14,
+	IB_EVENT_SRQ_LIMIT_REACHED = 15,
+	IB_EVENT_QP_LAST_WQE_REACHED = 16,
+	IB_EVENT_CLIENT_REREGISTER = 17,
+	IB_EVENT_GID_CHANGE = 18,
+	IB_EVENT_WQ_FATAL = 19,
+};
+
+struct ib_event {
+	struct ib_device *device;
+	union {
+		struct ib_cq *cq;
+		struct ib_qp *qp;
+		struct ib_srq *srq;
+		struct ib_wq *wq;
+		u32 port_num;
+	} element;
+	enum ib_event_type event;
+};
+
+struct ib_usrq_object;
+
+enum ib_srq_type {
+	IB_SRQT_BASIC = 0,
+	IB_SRQT_XRC = 1,
+	IB_SRQT_TM = 2,
+};
+
+struct ib_srq {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_usrq_object *uobject;
+	void (*event_handler)(struct ib_event *, void *);
+	void *srq_context;
+	enum ib_srq_type srq_type;
+	atomic_t usecnt;
+	struct {
+		struct ib_cq *cq;
+		union {
+			struct {
+				struct ib_xrcd *xrcd;
+				u32 srq_num;
+			} xrc;
+		};
+	} ext;
+	struct rdma_restrack_entry res;
+};
+
+struct ib_xrcd {
+	struct ib_device *device;
+	atomic_t usecnt;
+	struct inode *inode;
+	struct rw_semaphore tgt_qps_rwsem;
+	struct xarray tgt_qps;
+};
+
+struct ib_uwq_object;
+
+enum ib_wq_state {
+	IB_WQS_RESET = 0,
+	IB_WQS_RDY = 1,
+	IB_WQS_ERR = 2,
+};
+
+enum ib_wq_type {
+	IB_WQT_RQ = 0,
+};
+
+struct ib_wq {
+	struct ib_device *device;
+	struct ib_uwq_object *uobject;
+	void *wq_context;
+	void (*event_handler)(struct ib_event *, void *);
+	struct ib_pd *pd;
+	struct ib_cq *cq;
+	u32 wq_num;
+	enum ib_wq_state state;
+	enum ib_wq_type wq_type;
+	atomic_t usecnt;
+};
+
+enum ib_wc_status {
+	IB_WC_SUCCESS = 0,
+	IB_WC_LOC_LEN_ERR = 1,
+	IB_WC_LOC_QP_OP_ERR = 2,
+	IB_WC_LOC_EEC_OP_ERR = 3,
+	IB_WC_LOC_PROT_ERR = 4,
+	IB_WC_WR_FLUSH_ERR = 5,
+	IB_WC_MW_BIND_ERR = 6,
+	IB_WC_BAD_RESP_ERR = 7,
+	IB_WC_LOC_ACCESS_ERR = 8,
+	IB_WC_REM_INV_REQ_ERR = 9,
+	IB_WC_REM_ACCESS_ERR = 10,
+	IB_WC_REM_OP_ERR = 11,
+	IB_WC_RETRY_EXC_ERR = 12,
+	IB_WC_RNR_RETRY_EXC_ERR = 13,
+	IB_WC_LOC_RDD_VIOL_ERR = 14,
+	IB_WC_REM_INV_RD_REQ_ERR = 15,
+	IB_WC_REM_ABORT_ERR = 16,
+	IB_WC_INV_EECN_ERR = 17,
+	IB_WC_INV_EEC_STATE_ERR = 18,
+	IB_WC_FATAL_ERR = 19,
+	IB_WC_RESP_TIMEOUT_ERR = 20,
+	IB_WC_GENERAL_ERR = 21,
+};
+
+enum ib_wc_opcode {
+	IB_WC_SEND = 0,
+	IB_WC_RDMA_WRITE = 1,
+	IB_WC_RDMA_READ = 2,
+	IB_WC_COMP_SWAP = 3,
+	IB_WC_FETCH_ADD = 4,
+	IB_WC_BIND_MW = 5,
+	IB_WC_LOCAL_INV = 6,
+	IB_WC_LSO = 7,
+	IB_WC_ATOMIC_WRITE = 9,
+	IB_WC_REG_MR = 10,
+	IB_WC_MASKED_COMP_SWAP = 11,
+	IB_WC_MASKED_FETCH_ADD = 12,
+	IB_WC_FLUSH = 8,
+	IB_WC_RECV = 128,
+	IB_WC_RECV_RDMA_WITH_IMM = 129,
+};
+
+struct ib_cqe;
+
+struct ib_wc {
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	enum ib_wc_status status;
+	enum ib_wc_opcode opcode;
+	u32 vendor_err;
+	u32 byte_len;
+	struct ib_qp *qp;
+	union {
+		__be32 imm_data;
+		u32 invalidate_rkey;
+	} ex;
+	u32 src_qp;
+	u32 slid;
+	int wc_flags;
+	u16 pkey_index;
+	u8 sl;
+	u8 dlid_path_bits;
+	u32 port_num;
+	u8 smac[6];
+	u16 vlan_id;
+	u8 network_hdr_type;
+};
+
+struct ib_cqe {
+	void (*done)(struct ib_cq *, struct ib_wc *);
+};
+
+struct dim_stats {
+	int ppms;
+	int bpms;
+	int epms;
+	int cpms;
+	int cpe_ratio;
+};
+
+struct dim_sample {
+	ktime_t time;
+	u32 pkt_ctr;
+	u32 byte_ctr;
+	u16 event_ctr;
+	u32 comp_ctr;
+};
+
+struct dim {
+	u8 state;
+	struct dim_stats prev_stats;
+	struct dim_sample start_sample;
+	struct dim_sample measuring_sample;
+	struct work_struct work;
+	void *priv;
+	u8 profile_ix;
+	u8 mode;
+	u8 tune_state;
+	u8 steps_right;
+	u8 steps_left;
+	u8 tired;
+};
+
+union ib_gid {
+	u8 raw[16];
+	struct {
+		__be64 subnet_prefix;
+		__be64 interface_id;
+	} global;
+};
+
+enum ib_gid_type {
+	IB_GID_TYPE_IB = 0,
+	IB_GID_TYPE_ROCE = 1,
+	IB_GID_TYPE_ROCE_UDP_ENCAP = 2,
+	IB_GID_TYPE_SIZE = 3,
+};
+
+struct ib_gid_attr {
+	struct net_device __attribute__((btf_type_tag("rcu"))) *ndev;
+	struct ib_device *device;
+	union ib_gid gid;
+	enum ib_gid_type gid_type;
+	u16 index;
+	u32 port_num;
+};
+
+struct ib_rwq_ind_table {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+	u32 ind_tbl_num;
+	u32 log_ind_tbl_size;
+	struct ib_wq **ind_tbl;
+};
+
+struct ib_ports_pkeys;
+
+struct ib_qp_security {
+	struct ib_qp *qp;
+	struct ib_device *dev;
+	struct mutex mutex;
+	struct ib_ports_pkeys *ports_pkeys;
+	struct list_head shared_qp_list;
+	void *security;
+	bool destroying;
+	atomic_t error_list_count;
+	struct completion error_complete;
+	int error_comps_pending;
+};
+
+enum port_pkey_state {
+	IB_PORT_PKEY_NOT_VALID = 0,
+	IB_PORT_PKEY_VALID = 1,
+	IB_PORT_PKEY_LISTED = 2,
+};
+
+struct ib_port_pkey {
+	enum port_pkey_state state;
+	u16 pkey_index;
+	u32 port_num;
+	struct list_head qp_list;
+	struct list_head to_error_list;
+	struct ib_qp_security *sec;
+};
+
+struct ib_ports_pkeys {
+	struct ib_port_pkey main;
+	struct ib_port_pkey alt;
+};
+
+enum rdma_nl_counter_mode {
+	RDMA_COUNTER_MODE_NONE = 0,
+	RDMA_COUNTER_MODE_AUTO = 1,
+	RDMA_COUNTER_MODE_MANUAL = 2,
+	RDMA_COUNTER_MODE_MAX = 3,
+};
+
+enum rdma_nl_counter_mask {
+	RDMA_COUNTER_MASK_QP_TYPE = 1,
+	RDMA_COUNTER_MASK_PID = 2,
+};
+
+struct auto_mode_param {
+	int qp_type;
+};
+
+struct rdma_counter_mode {
+	enum rdma_nl_counter_mode mode;
+	enum rdma_nl_counter_mask mask;
+	struct auto_mode_param param;
+};
+
+struct rdma_counter {
+	struct rdma_restrack_entry res;
+	struct ib_device *device;
+	uint32_t id;
+	struct kref kref;
+	struct rdma_counter_mode mode;
+	struct mutex lock;
+	struct rdma_hw_stats *stats;
+	u32 port;
+};
+
+struct rdma_stat_desc;
+
+struct rdma_hw_stats {
+	struct mutex lock;
+	unsigned long timestamp;
+	unsigned long lifespan;
+	const struct rdma_stat_desc *descs;
+	unsigned long *is_disabled;
+	int num_counters;
+	u64 value[0];
+};
+
+struct rdma_stat_desc {
+	const char *name;
+	unsigned int flags;
+	const void *priv;
+};
+
+enum ib_wr_opcode {
+	IB_WR_RDMA_WRITE = 0,
+	IB_WR_RDMA_WRITE_WITH_IMM = 1,
+	IB_WR_SEND = 2,
+	IB_WR_SEND_WITH_IMM = 3,
+	IB_WR_RDMA_READ = 4,
+	IB_WR_ATOMIC_CMP_AND_SWP = 5,
+	IB_WR_ATOMIC_FETCH_AND_ADD = 6,
+	IB_WR_BIND_MW = 8,
+	IB_WR_LSO = 10,
+	IB_WR_SEND_WITH_INV = 9,
+	IB_WR_RDMA_READ_WITH_INV = 11,
+	IB_WR_LOCAL_INV = 7,
+	IB_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
+	IB_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
+	IB_WR_FLUSH = 14,
+	IB_WR_ATOMIC_WRITE = 15,
+	IB_WR_REG_MR = 32,
+	IB_WR_REG_MR_INTEGRITY = 33,
+	IB_WR_RESERVED1 = 240,
+	IB_WR_RESERVED2 = 241,
+	IB_WR_RESERVED3 = 242,
+	IB_WR_RESERVED4 = 243,
+	IB_WR_RESERVED5 = 244,
+	IB_WR_RESERVED6 = 245,
+	IB_WR_RESERVED7 = 246,
+	IB_WR_RESERVED8 = 247,
+	IB_WR_RESERVED9 = 248,
+	IB_WR_RESERVED10 = 249,
+};
+
+struct ib_send_wr {
+	struct ib_send_wr *next;
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	struct ib_sge *sg_list;
+	int num_sge;
+	enum ib_wr_opcode opcode;
+	int send_flags;
+	union {
+		__be32 imm_data;
+		u32 invalidate_rkey;
+	} ex;
+};
+
+struct ib_sge {
+	u64 addr;
+	u32 length;
+	u32 lkey;
+};
+
+struct ib_recv_wr {
+	struct ib_recv_wr *next;
+	union {
+		u64 wr_id;
+		struct ib_cqe *wr_cqe;
+	};
+	struct ib_sge *sg_list;
+	int num_sge;
+};
+
+struct ib_grh {
+	__be32 version_tclass_flow;
+	__be16 paylen;
+	u8 next_hdr;
+	u8 hop_limit;
+	union ib_gid sgid;
+	union ib_gid dgid;
+};
+
+struct ib_udata {
+	const void __attribute__((btf_type_tag("user"))) *inbuf;
+	void __attribute__((btf_type_tag("user"))) *outbuf;
+	size_t inlen;
+	size_t outlen;
+};
+
+struct ib_device_modify {
+	u64 sys_image_guid;
+	char node_desc[64];
+};
+
+enum ib_port_state {
+	IB_PORT_NOP = 0,
+	IB_PORT_DOWN = 1,
+	IB_PORT_INIT = 2,
+	IB_PORT_ARMED = 3,
+	IB_PORT_ACTIVE = 4,
+	IB_PORT_ACTIVE_DEFER = 5,
+};
+
+enum ib_mtu {
+	IB_MTU_256 = 1,
+	IB_MTU_512 = 2,
+	IB_MTU_1024 = 3,
+	IB_MTU_2048 = 4,
+	IB_MTU_4096 = 5,
+};
+
+struct ib_port_attr {
+	u64 subnet_prefix;
+	enum ib_port_state state;
+	enum ib_mtu max_mtu;
+	enum ib_mtu active_mtu;
+	u32 phys_mtu;
+	int gid_tbl_len;
+	unsigned int ip_gids: 1;
+	u32 port_cap_flags;
+	u32 max_msg_sz;
+	u32 bad_pkey_cntr;
+	u32 qkey_viol_cntr;
+	u16 pkey_tbl_len;
+	u32 sm_lid;
+	u32 lid;
+	u8 lmc;
+	u8 max_vl_num;
+	u8 sm_sl;
+	u8 subnet_timeout;
+	u8 init_type_reply;
+	u8 active_width;
+	u16 active_speed;
+	u8 phys_state;
+	u16 port_cap_flags2;
+};
+
+struct ib_port_modify {
+	u32 set_port_cap_mask;
+	u32 clr_port_cap_mask;
+	u8 init_type;
+};
+
+struct ib_port_immutable {
+	int pkey_tbl_len;
+	int gid_tbl_len;
+	u32 core_cap_flags;
+	u32 max_mad_size;
+};
+
+struct rdma_netdev_alloc_params {
+	size_t sizeof_priv;
+	unsigned int txqs;
+	unsigned int rxqs;
+	void *param;
+	int (*initialize_rdma_netdev)(struct ib_device *, u32, struct net_device *, void *);
+};
+
+struct rdma_user_mmap_entry {
+	struct kref ref;
+	struct ib_ucontext *ucontext;
+	unsigned long start_pgoff;
+	size_t npages;
+	bool driver_removed;
+};
+
+enum rdma_ah_attr_type {
+	RDMA_AH_ATTR_TYPE_UNDEFINED = 0,
+	RDMA_AH_ATTR_TYPE_IB = 1,
+	RDMA_AH_ATTR_TYPE_ROCE = 2,
+	RDMA_AH_ATTR_TYPE_OPA = 3,
+};
+
+struct ib_ah {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_uobject *uobject;
+	const struct ib_gid_attr *sgid_attr;
+	enum rdma_ah_attr_type type;
+};
+
+struct rdma_ah_init_attr {
+	struct rdma_ah_attr *ah_attr;
+	u32 flags;
+	struct net_device *xmit_slave;
+};
+
+struct ib_ah_attr {
+	u16 dlid;
+	u8 src_path_bits;
+};
+
+struct roce_ah_attr {
+	u8 dmac[6];
+};
+
+struct opa_ah_attr {
+	u32 dlid;
+	u8 src_path_bits;
+	bool make_grd;
+};
+
+struct ib_global_route {
+	const struct ib_gid_attr *sgid_attr;
+	union ib_gid dgid;
+	u32 flow_label;
+	u8 sgid_index;
+	u8 hop_limit;
+	u8 traffic_class;
+};
+
+struct rdma_ah_attr {
+	struct ib_global_route grh;
+	u8 sl;
+	u8 static_rate;
+	u32 port_num;
+	u8 ah_flags;
+	enum rdma_ah_attr_type type;
+	union {
+		struct ib_ah_attr ib;
+		struct roce_ah_attr roce;
+		struct opa_ah_attr opa;
+	};
+};
+
+struct ib_srq_attr {
+	u32 max_wr;
+	u32 max_sge;
+	u32 srq_limit;
+};
+
+struct ib_srq_init_attr {
+	void (*event_handler)(struct ib_event *, void *);
+	void *srq_context;
+	struct ib_srq_attr attr;
+	enum ib_srq_type srq_type;
+	struct {
+		struct ib_cq *cq;
+		union {
+			struct {
+				struct ib_xrcd *xrcd;
+			} xrc;
+			struct {
+				u32 max_num_tags;
+			} tag_matching;
+		};
+	} ext;
+};
+
+struct ib_qp_cap {
+	u32 max_send_wr;
+	u32 max_recv_wr;
+	u32 max_send_sge;
+	u32 max_recv_sge;
+	u32 max_inline_data;
+	u32 max_rdma_ctxs;
+};
+
+enum ib_sig_type {
+	IB_SIGNAL_ALL_WR = 0,
+	IB_SIGNAL_REQ_WR = 1,
+};
+
+struct ib_qp_init_attr {
+	void (*event_handler)(struct ib_event *, void *);
+	void *qp_context;
+	struct ib_cq *send_cq;
+	struct ib_cq *recv_cq;
+	struct ib_srq *srq;
+	struct ib_xrcd *xrcd;
+	struct ib_qp_cap cap;
+	enum ib_sig_type sq_sig_type;
+	enum ib_qp_type qp_type;
+	u32 create_flags;
+	u32 port_num;
+	struct ib_rwq_ind_table *rwq_ind_tbl;
+	u32 source_qpn;
+};
+
+enum ib_qp_state {
+	IB_QPS_RESET = 0,
+	IB_QPS_INIT = 1,
+	IB_QPS_RTR = 2,
+	IB_QPS_RTS = 3,
+	IB_QPS_SQD = 4,
+	IB_QPS_SQE = 5,
+	IB_QPS_ERR = 6,
+};
+
+enum ib_mig_state {
+	IB_MIG_MIGRATED = 0,
+	IB_MIG_REARM = 1,
+	IB_MIG_ARMED = 2,
+};
+
+struct ib_qp_attr {
+	enum ib_qp_state qp_state;
+	enum ib_qp_state cur_qp_state;
+	enum ib_mtu path_mtu;
+	enum ib_mig_state path_mig_state;
+	u32 qkey;
+	u32 rq_psn;
+	u32 sq_psn;
+	u32 dest_qp_num;
+	int qp_access_flags;
+	struct ib_qp_cap cap;
+	struct rdma_ah_attr ah_attr;
+	struct rdma_ah_attr alt_ah_attr;
+	u16 pkey_index;
+	u16 alt_pkey_index;
+	u8 en_sqd_async_notify;
+	u8 sq_draining;
+	u8 max_rd_atomic;
+	u8 max_dest_rd_atomic;
+	u8 min_rnr_timer;
+	u32 port_num;
+	u8 timeout;
+	u8 retry_cnt;
+	u8 rnr_retry;
+	u32 alt_port_num;
+	u8 alt_timeout;
+	u32 rate_limit;
+	struct net_device *xmit_slave;
+};
+
+struct ib_cq_init_attr {
+	unsigned int cqe;
+	u32 comp_vector;
+	u32 flags;
+};
+
+enum ib_sig_err_type {
+	IB_SIG_BAD_GUARD = 0,
+	IB_SIG_BAD_REFTAG = 1,
+	IB_SIG_BAD_APPTAG = 2,
+};
+
+struct ib_sig_err {
+	enum ib_sig_err_type err_type;
+	u32 expected;
+	u32 actual;
+	u64 sig_err_offset;
+	u32 key;
+};
+
+struct ib_mr_status {
+	u32 fail_status;
+	struct ib_sig_err sig_err;
+};
+
+enum ib_mw_type {
+	IB_MW_TYPE_1 = 1,
+	IB_MW_TYPE_2 = 2,
+};
+
+struct ib_mw {
+	struct ib_device *device;
+	struct ib_pd *pd;
+	struct ib_uobject *uobject;
+	u32 rkey;
+	enum ib_mw_type type;
+};
+
+struct ib_flow {
+	struct ib_qp *qp;
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+};
+
+enum ib_flow_attr_type {
+	IB_FLOW_ATTR_NORMAL = 0,
+	IB_FLOW_ATTR_ALL_DEFAULT = 1,
+	IB_FLOW_ATTR_MC_DEFAULT = 2,
+	IB_FLOW_ATTR_SNIFFER = 3,
+};
+
+struct ib_flow_eth_filter {
+	u8 dst_mac[6];
+	u8 src_mac[6];
+	__be16 ether_type;
+	__be16 vlan_tag;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_eth {
+	u32 type;
+	u16 size;
+	struct ib_flow_eth_filter val;
+	struct ib_flow_eth_filter mask;
+};
+
+struct ib_flow_ib_filter {
+	__be16 dlid;
+	__u8 sl;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ib {
+	u32 type;
+	u16 size;
+	struct ib_flow_ib_filter val;
+	struct ib_flow_ib_filter mask;
+};
+
+struct ib_flow_ipv4_filter {
+	__be32 src_ip;
+	__be32 dst_ip;
+	u8 proto;
+	u8 tos;
+	u8 ttl;
+	u8 flags;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ipv4 {
+	u32 type;
+	u16 size;
+	struct ib_flow_ipv4_filter val;
+	struct ib_flow_ipv4_filter mask;
+};
+
+struct ib_flow_tcp_udp_filter {
+	__be16 dst_port;
+	__be16 src_port;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_tcp_udp {
+	u32 type;
+	u16 size;
+	struct ib_flow_tcp_udp_filter val;
+	struct ib_flow_tcp_udp_filter mask;
+};
+
+struct ib_flow_ipv6_filter {
+	u8 src_ip[16];
+	u8 dst_ip[16];
+	__be32 flow_label;
+	u8 next_hdr;
+	u8 traffic_class;
+	u8 hop_limit;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_ipv6 {
+	u32 type;
+	u16 size;
+	struct ib_flow_ipv6_filter val;
+	struct ib_flow_ipv6_filter mask;
+};
+
+struct ib_flow_tunnel_filter {
+	__be32 tunnel_id;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_tunnel {
+	u32 type;
+	u16 size;
+	struct ib_flow_tunnel_filter val;
+	struct ib_flow_tunnel_filter mask;
+};
+
+struct ib_flow_esp_filter {
+	__be32 spi;
+	__be32 seq;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_esp {
+	u32 type;
+	u16 size;
+	struct ib_flow_esp_filter val;
+	struct ib_flow_esp_filter mask;
+};
+
+struct ib_flow_gre_filter {
+	__be16 c_ks_res0_ver;
+	__be16 protocol;
+	__be32 key;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_gre {
+	u32 type;
+	u16 size;
+	struct ib_flow_gre_filter val;
+	struct ib_flow_gre_filter mask;
+};
+
+struct ib_flow_mpls_filter {
+	__be32 tag;
+	u8 real_sz[0];
+};
+
+struct ib_flow_spec_mpls {
+	u32 type;
+	u16 size;
+	struct ib_flow_mpls_filter val;
+	struct ib_flow_mpls_filter mask;
+};
+
+enum ib_flow_spec_type {
+	IB_FLOW_SPEC_ETH = 32,
+	IB_FLOW_SPEC_IB = 34,
+	IB_FLOW_SPEC_IPV4 = 48,
+	IB_FLOW_SPEC_IPV6 = 49,
+	IB_FLOW_SPEC_ESP = 52,
+	IB_FLOW_SPEC_TCP = 64,
+	IB_FLOW_SPEC_UDP = 65,
+	IB_FLOW_SPEC_VXLAN_TUNNEL = 80,
+	IB_FLOW_SPEC_GRE = 81,
+	IB_FLOW_SPEC_MPLS = 96,
+	IB_FLOW_SPEC_INNER = 256,
+	IB_FLOW_SPEC_ACTION_TAG = 4096,
+	IB_FLOW_SPEC_ACTION_DROP = 4097,
+	IB_FLOW_SPEC_ACTION_HANDLE = 4098,
+	IB_FLOW_SPEC_ACTION_COUNT = 4099,
+};
+
+struct ib_flow_spec_action_tag {
+	enum ib_flow_spec_type type;
+	u16 size;
+	u32 tag_id;
+};
+
+struct ib_flow_spec_action_drop {
+	enum ib_flow_spec_type type;
+	u16 size;
+};
+
+struct ib_flow_spec_action_handle {
+	enum ib_flow_spec_type type;
+	u16 size;
+	struct ib_flow_action *act;
+};
+
+struct ib_flow_spec_action_count {
+	enum ib_flow_spec_type type;
+	u16 size;
+	struct ib_counters *counters;
+};
+
+union ib_flow_spec {
+	struct {
+		u32 type;
+		u16 size;
+	};
+	struct ib_flow_spec_eth eth;
+	struct ib_flow_spec_ib ib;
+	struct ib_flow_spec_ipv4 ipv4;
+	struct ib_flow_spec_tcp_udp tcp_udp;
+	struct ib_flow_spec_ipv6 ipv6;
+	struct ib_flow_spec_tunnel tunnel;
+	struct ib_flow_spec_esp esp;
+	struct ib_flow_spec_gre gre;
+	struct ib_flow_spec_mpls mpls;
+	struct ib_flow_spec_action_tag flow_tag;
+	struct ib_flow_spec_action_drop drop;
+	struct ib_flow_spec_action_handle action;
+	struct ib_flow_spec_action_count flow_count;
+};
+
+struct ib_flow_attr {
+	enum ib_flow_attr_type type;
+	u16 size;
+	u16 priority;
+	u32 flags;
+	u8 num_of_specs;
+	u32 port;
+	union ib_flow_spec flows[0];
+};
+
+enum ib_flow_action_type {
+	IB_FLOW_ACTION_UNSPECIFIED = 0,
+	IB_FLOW_ACTION_ESP = 1,
+};
+
+struct ib_flow_action {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	enum ib_flow_action_type type;
+	atomic_t usecnt;
+};
+
+struct ib_counters {
+	struct ib_device *device;
+	struct ib_uobject *uobject;
+	atomic_t usecnt;
+};
+
+struct ib_wq_init_attr {
+	void *wq_context;
+	enum ib_wq_type wq_type;
+	u32 max_wr;
+	u32 max_sge;
+	struct ib_cq *cq;
+	void (*event_handler)(struct ib_event *, void *);
+	u32 create_flags;
+};
+
+struct ib_wq_attr {
+	enum ib_wq_state wq_state;
+	enum ib_wq_state curr_wq_state;
+	u32 flags;
+	u32 flags_mask;
+};
+
+struct ib_rwq_ind_table_init_attr {
+	u32 log_ind_tbl_size;
+	struct ib_wq **ind_tbl;
+};
+
+struct ib_dm_alloc_attr {
+	u64 length;
+	u32 alignment;
+	u32 flags;
+};
+
+struct ib_dm_mr_attr {
+	u64 length;
+	u64 offset;
+	u32 access_flags;
+};
+
+struct ib_counters_read_attr {
+	u64 *counters_buff;
+	u32 ncounters;
+	u32 flags;
+};
+
+struct ib_pkey_cache;
+
+struct ib_gid_table;
+
+struct ib_port_cache {
+	u64 subnet_prefix;
+	struct ib_pkey_cache *pkey;
+	struct ib_gid_table *gid;
+	u8 lmc;
+	enum ib_port_state port_state;
+};
+
+struct rdma_port_counter {
+	struct rdma_counter_mode mode;
+	struct rdma_hw_stats *hstats;
+	unsigned int num_counters;
+	struct mutex lock;
+};
+
+struct ib_port;
+
+struct ib_port_data {
+	struct ib_device *ib_dev;
+	struct ib_port_immutable immutable;
+	spinlock_t pkey_list_lock;
+	spinlock_t netdev_lock;
+	struct list_head pkey_list;
+	struct ib_port_cache cache;
+	struct net_device __attribute__((btf_type_tag("rcu"))) *netdev;
+	netdevice_tracker netdev_tracker;
+	struct hlist_node ndev_hash_link;
+	struct rdma_port_counter port_counter;
+	struct ib_port *sysfs;
+};
+
+struct rdma_link_ops {
+	struct list_head list;
+	const char *type;
+	int (*newlink)(const char *, struct net_device *);
+};
+
+enum devlink_linecard_state {
+	DEVLINK_LINECARD_STATE_UNSPEC = 0,
+	DEVLINK_LINECARD_STATE_UNPROVISIONED = 1,
+	DEVLINK_LINECARD_STATE_UNPROVISIONING = 2,
+	DEVLINK_LINECARD_STATE_PROVISIONING = 3,
+	DEVLINK_LINECARD_STATE_PROVISIONING_FAILED = 4,
+	DEVLINK_LINECARD_STATE_PROVISIONED = 5,
+	DEVLINK_LINECARD_STATE_ACTIVE = 6,
+	__DEVLINK_LINECARD_STATE_MAX = 7,
+	DEVLINK_LINECARD_STATE_MAX = 6,
+};
+
+struct devlink_linecard_ops;
+
+struct devlink_linecard_type;
+
+struct devlink_linecard {
+	struct list_head list;
+	struct devlink *devlink;
+	unsigned int index;
+	const struct devlink_linecard_ops *ops;
+	void *priv;
+	enum devlink_linecard_state state;
+	struct mutex state_lock;
+	const char *type;
+	struct devlink_linecard_type *types;
+	unsigned int types_count;
+	struct devlink *nested_devlink;
+};
+
+struct devlink_linecard_ops {
+	int (*provision)(struct devlink_linecard *, void *, const char *, const void *, struct netlink_ext_ack *);
+	int (*unprovision)(struct devlink_linecard *, void *, struct netlink_ext_ack *);
+	bool (*same_provision)(struct devlink_linecard *, void *, const char *, const void *);
+	unsigned int (*types_count)(struct devlink_linecard *, void *);
+	void (*types_get)(struct devlink_linecard *, void *, unsigned int, const char **, const void **);
+};
+
+typedef void (*btf_trace_devlink_hwmsg)(void *, const struct devlink *, bool, unsigned long, const u8 *, size_t);
+
+typedef void (*btf_trace_devlink_hwerr)(void *, const struct devlink *, int, const char *);
+
+typedef void (*btf_trace_devlink_health_report)(void *, const struct devlink *, const char *, const char *);
+
+typedef void (*btf_trace_devlink_health_recover_aborted)(void *, const struct devlink *, const char *, bool, u64);
+
+typedef void (*btf_trace_devlink_health_reporter_state_update)(void *, const struct devlink *, const char *, bool);
+
+struct devlink_trap_metadata;
+
+typedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);
+
+struct devlink_trap_metadata {
+	const char *trap_name;
+	const char *trap_group_name;
+	struct net_device *input_dev;
+	netdevice_tracker dev_tracker;
+	const struct flow_action_cookie *fa_cookie;
+	enum devlink_trap_type trap_type;
+};
+
+struct trace_event_raw_devlink_hwmsg {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	bool incoming;
+	unsigned long type;
+	u32 __data_loc_buf;
+	size_t len;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_hwerr {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	int err;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u32 __data_loc_msg;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_recover_aborted {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	bool health_state;
+	u64 time_since_last_recover;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_health_reporter_state_update {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_reporter_name;
+	u8 new_state;
+	char __data[0];
+};
+
+struct trace_event_raw_devlink_trap_report {
+	struct trace_entry ent;
+	u32 __data_loc_bus_name;
+	u32 __data_loc_dev_name;
+	u32 __data_loc_driver_name;
+	u32 __data_loc_trap_name;
+	u32 __data_loc_trap_group_name;
+	char input_dev_name[16];
+	char __data[0];
+};
+
+struct trace_event_data_offsets_devlink_hwmsg {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 buf;
+};
+
+struct trace_event_data_offsets_devlink_hwerr {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+	u32 msg;
+};
+
+struct trace_event_data_offsets_devlink_health_recover_aborted {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_health_reporter_state_update {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 reporter_name;
+};
+
+struct trace_event_data_offsets_devlink_trap_report {
+	u32 bus_name;
+	u32 dev_name;
+	u32 driver_name;
+	u32 trap_name;
+	u32 trap_group_name;
+};
+
+enum devlink_attr {
+	DEVLINK_ATTR_UNSPEC = 0,
+	DEVLINK_ATTR_BUS_NAME = 1,
+	DEVLINK_ATTR_DEV_NAME = 2,
+	DEVLINK_ATTR_PORT_INDEX = 3,
+	DEVLINK_ATTR_PORT_TYPE = 4,
+	DEVLINK_ATTR_PORT_DESIRED_TYPE = 5,
+	DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 6,
+	DEVLINK_ATTR_PORT_NETDEV_NAME = 7,
+	DEVLINK_ATTR_PORT_IBDEV_NAME = 8,
+	DEVLINK_ATTR_PORT_SPLIT_COUNT = 9,
+	DEVLINK_ATTR_PORT_SPLIT_GROUP = 10,
+	DEVLINK_ATTR_SB_INDEX = 11,
+	DEVLINK_ATTR_SB_SIZE = 12,
+	DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 13,
+	DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 14,
+	DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 15,
+	DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 16,
+	DEVLINK_ATTR_SB_POOL_INDEX = 17,
+	DEVLINK_ATTR_SB_POOL_TYPE = 18,
+	DEVLINK_ATTR_SB_POOL_SIZE = 19,
+	DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 20,
+	DEVLINK_ATTR_SB_THRESHOLD = 21,
+	DEVLINK_ATTR_SB_TC_INDEX = 22,
+	DEVLINK_ATTR_SB_OCC_CUR = 23,
+	DEVLINK_ATTR_SB_OCC_MAX = 24,
+	DEVLINK_ATTR_ESWITCH_MODE = 25,
+	DEVLINK_ATTR_ESWITCH_INLINE_MODE = 26,
+	DEVLINK_ATTR_DPIPE_TABLES = 27,
+	DEVLINK_ATTR_DPIPE_TABLE = 28,
+	DEVLINK_ATTR_DPIPE_TABLE_NAME = 29,
+	DEVLINK_ATTR_DPIPE_TABLE_SIZE = 30,
+	DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 31,
+	DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 32,
+	DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 33,
+	DEVLINK_ATTR_DPIPE_ENTRIES = 34,
+	DEVLINK_ATTR_DPIPE_ENTRY = 35,
+	DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 36,
+	DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 37,
+	DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 38,
+	DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 39,
+	DEVLINK_ATTR_DPIPE_MATCH = 40,
+	DEVLINK_ATTR_DPIPE_MATCH_VALUE = 41,
+	DEVLINK_ATTR_DPIPE_MATCH_TYPE = 42,
+	DEVLINK_ATTR_DPIPE_ACTION = 43,
+	DEVLINK_ATTR_DPIPE_ACTION_VALUE = 44,
+	DEVLINK_ATTR_DPIPE_ACTION_TYPE = 45,
+	DEVLINK_ATTR_DPIPE_VALUE = 46,
+	DEVLINK_ATTR_DPIPE_VALUE_MASK = 47,
+	DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 48,
+	DEVLINK_ATTR_DPIPE_HEADERS = 49,
+	DEVLINK_ATTR_DPIPE_HEADER = 50,
+	DEVLINK_ATTR_DPIPE_HEADER_NAME = 51,
+	DEVLINK_ATTR_DPIPE_HEADER_ID = 52,
+	DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 53,
+	DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 54,
+	DEVLINK_ATTR_DPIPE_HEADER_INDEX = 55,
+	DEVLINK_ATTR_DPIPE_FIELD = 56,
+	DEVLINK_ATTR_DPIPE_FIELD_NAME = 57,
+	DEVLINK_ATTR_DPIPE_FIELD_ID = 58,
+	DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 59,
+	DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 60,
+	DEVLINK_ATTR_PAD = 61,
+	DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 62,
+	DEVLINK_ATTR_RESOURCE_LIST = 63,
+	DEVLINK_ATTR_RESOURCE = 64,
+	DEVLINK_ATTR_RESOURCE_NAME = 65,
+	DEVLINK_ATTR_RESOURCE_ID = 66,
+	DEVLINK_ATTR_RESOURCE_SIZE = 67,
+	DEVLINK_ATTR_RESOURCE_SIZE_NEW = 68,
+	DEVLINK_ATTR_RESOURCE_SIZE_VALID = 69,
+	DEVLINK_ATTR_RESOURCE_SIZE_MIN = 70,
+	DEVLINK_ATTR_RESOURCE_SIZE_MAX = 71,
+	DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 72,
+	DEVLINK_ATTR_RESOURCE_UNIT = 73,
+	DEVLINK_ATTR_RESOURCE_OCC = 74,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 75,
+	DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76,
+	DEVLINK_ATTR_PORT_FLAVOUR = 77,
+	DEVLINK_ATTR_PORT_NUMBER = 78,
+	DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 79,
+	DEVLINK_ATTR_PARAM = 80,
+	DEVLINK_ATTR_PARAM_NAME = 81,
+	DEVLINK_ATTR_PARAM_GENERIC = 82,
+	DEVLINK_ATTR_PARAM_TYPE = 83,
+	DEVLINK_ATTR_PARAM_VALUES_LIST = 84,
+	DEVLINK_ATTR_PARAM_VALUE = 85,
+	DEVLINK_ATTR_PARAM_VALUE_DATA = 86,
+	DEVLINK_ATTR_PARAM_VALUE_CMODE = 87,
+	DEVLINK_ATTR_REGION_NAME = 88,
+	DEVLINK_ATTR_REGION_SIZE = 89,
+	DEVLINK_ATTR_REGION_SNAPSHOTS = 90,
+	DEVLINK_ATTR_REGION_SNAPSHOT = 91,
+	DEVLINK_ATTR_REGION_SNAPSHOT_ID = 92,
+	DEVLINK_ATTR_REGION_CHUNKS = 93,
+	DEVLINK_ATTR_REGION_CHUNK = 94,
+	DEVLINK_ATTR_REGION_CHUNK_DATA = 95,
+	DEVLINK_ATTR_REGION_CHUNK_ADDR = 96,
+	DEVLINK_ATTR_REGION_CHUNK_LEN = 97,
+	DEVLINK_ATTR_INFO_DRIVER_NAME = 98,
+	DEVLINK_ATTR_INFO_SERIAL_NUMBER = 99,
+	DEVLINK_ATTR_INFO_VERSION_FIXED = 100,
+	DEVLINK_ATTR_INFO_VERSION_RUNNING = 101,
+	DEVLINK_ATTR_INFO_VERSION_STORED = 102,
+	DEVLINK_ATTR_INFO_VERSION_NAME = 103,
+	DEVLINK_ATTR_INFO_VERSION_VALUE = 104,
+	DEVLINK_ATTR_SB_POOL_CELL_SIZE = 105,
+	DEVLINK_ATTR_FMSG = 106,
+	DEVLINK_ATTR_FMSG_OBJ_NEST_START = 107,
+	DEVLINK_ATTR_FMSG_PAIR_NEST_START = 108,
+	DEVLINK_ATTR_FMSG_ARR_NEST_START = 109,
+	DEVLINK_ATTR_FMSG_NEST_END = 110,
+	DEVLINK_ATTR_FMSG_OBJ_NAME = 111,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 112,
+	DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 113,
+	DEVLINK_ATTR_HEALTH_REPORTER = 114,
+	DEVLINK_ATTR_HEALTH_REPORTER_NAME = 115,
+	DEVLINK_ATTR_HEALTH_REPORTER_STATE = 116,
+	DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 117,
+	DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 118,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 119,
+	DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 120,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 121,
+	DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 122,
+	DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 123,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 124,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 125,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 126,
+	DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 127,
+	DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 128,
+	DEVLINK_ATTR_STATS = 129,
+	DEVLINK_ATTR_TRAP_NAME = 130,
+	DEVLINK_ATTR_TRAP_ACTION = 131,
+	DEVLINK_ATTR_TRAP_TYPE = 132,
+	DEVLINK_ATTR_TRAP_GENERIC = 133,
+	DEVLINK_ATTR_TRAP_METADATA = 134,
+	DEVLINK_ATTR_TRAP_GROUP_NAME = 135,
+	DEVLINK_ATTR_RELOAD_FAILED = 136,
+	DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 137,
+	DEVLINK_ATTR_NETNS_FD = 138,
+	DEVLINK_ATTR_NETNS_PID = 139,
+	DEVLINK_ATTR_NETNS_ID = 140,
+	DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 141,
+	DEVLINK_ATTR_TRAP_POLICER_ID = 142,
+	DEVLINK_ATTR_TRAP_POLICER_RATE = 143,
+	DEVLINK_ATTR_TRAP_POLICER_BURST = 144,
+	DEVLINK_ATTR_PORT_FUNCTION = 145,
+	DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 146,
+	DEVLINK_ATTR_PORT_LANES = 147,
+	DEVLINK_ATTR_PORT_SPLITTABLE = 148,
+	DEVLINK_ATTR_PORT_EXTERNAL = 149,
+	DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150,
+	DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 151,
+	DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 152,
+	DEVLINK_ATTR_RELOAD_ACTION = 153,
+	DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 154,
+	DEVLINK_ATTR_RELOAD_LIMITS = 155,
+	DEVLINK_ATTR_DEV_STATS = 156,
+	DEVLINK_ATTR_RELOAD_STATS = 157,
+	DEVLINK_ATTR_RELOAD_STATS_ENTRY = 158,
+	DEVLINK_ATTR_RELOAD_STATS_LIMIT = 159,
+	DEVLINK_ATTR_RELOAD_STATS_VALUE = 160,
+	DEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,
+	DEVLINK_ATTR_RELOAD_ACTION_INFO = 162,
+	DEVLINK_ATTR_RELOAD_ACTION_STATS = 163,
+	DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 164,
+	DEVLINK_ATTR_RATE_TYPE = 165,
+	DEVLINK_ATTR_RATE_TX_SHARE = 166,
+	DEVLINK_ATTR_RATE_TX_MAX = 167,
+	DEVLINK_ATTR_RATE_NODE_NAME = 168,
+	DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 169,
+	DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 170,
+	DEVLINK_ATTR_LINECARD_INDEX = 171,
+	DEVLINK_ATTR_LINECARD_STATE = 172,
+	DEVLINK_ATTR_LINECARD_TYPE = 173,
+	DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 174,
+	DEVLINK_ATTR_NESTED_DEVLINK = 175,
+	DEVLINK_ATTR_SELFTESTS = 176,
+	DEVLINK_ATTR_RATE_TX_PRIORITY = 177,
+	DEVLINK_ATTR_RATE_TX_WEIGHT = 178,
+	DEVLINK_ATTR_REGION_DIRECT = 179,
+	__DEVLINK_ATTR_MAX = 180,
+	DEVLINK_ATTR_MAX = 179,
+};
+
+struct devlink_nl_dump_state {
+	unsigned long instance;
+	int idx;
+	union {
+		struct {
+			u64 start_offset;
+		};
+		struct {
+			u64 dump_ts;
+		};
+	};
+};
+
+typedef int devlink_nl_dump_one_func_t(struct sk_buff *, struct devlink *, struct netlink_callback *, int);
+
+struct devlink_reload_combination {
+	enum devlink_reload_action action;
+	enum devlink_reload_limit limit;
+};
+
+enum devlink_info_version_type {
+	DEVLINK_INFO_VERSION_TYPE_NONE = 0,
+	DEVLINK_INFO_VERSION_TYPE_COMPONENT = 1,
+};
+
+struct devlink_info_req {
+	struct sk_buff *msg;
+	void (*version_cb)(const char *, enum devlink_info_version_type, void *);
+	void *version_cb_priv;
+};
+
+enum devlink_command {
+	DEVLINK_CMD_UNSPEC = 0,
+	DEVLINK_CMD_GET = 1,
+	DEVLINK_CMD_SET = 2,
+	DEVLINK_CMD_NEW = 3,
+	DEVLINK_CMD_DEL = 4,
+	DEVLINK_CMD_PORT_GET = 5,
+	DEVLINK_CMD_PORT_SET = 6,
+	DEVLINK_CMD_PORT_NEW = 7,
+	DEVLINK_CMD_PORT_DEL = 8,
+	DEVLINK_CMD_PORT_SPLIT = 9,
+	DEVLINK_CMD_PORT_UNSPLIT = 10,
+	DEVLINK_CMD_SB_GET = 11,
+	DEVLINK_CMD_SB_SET = 12,
+	DEVLINK_CMD_SB_NEW = 13,
+	DEVLINK_CMD_SB_DEL = 14,
+	DEVLINK_CMD_SB_POOL_GET = 15,
+	DEVLINK_CMD_SB_POOL_SET = 16,
+	DEVLINK_CMD_SB_POOL_NEW = 17,
+	DEVLINK_CMD_SB_POOL_DEL = 18,
+	DEVLINK_CMD_SB_PORT_POOL_GET = 19,
+	DEVLINK_CMD_SB_PORT_POOL_SET = 20,
+	DEVLINK_CMD_SB_PORT_POOL_NEW = 21,
+	DEVLINK_CMD_SB_PORT_POOL_DEL = 22,
+	DEVLINK_CMD_SB_TC_POOL_BIND_GET = 23,
+	DEVLINK_CMD_SB_TC_POOL_BIND_SET = 24,
+	DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25,
+	DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26,
+	DEVLINK_CMD_SB_OCC_SNAPSHOT = 27,
+	DEVLINK_CMD_SB_OCC_MAX_CLEAR = 28,
+	DEVLINK_CMD_ESWITCH_GET = 29,
+	DEVLINK_CMD_ESWITCH_SET = 30,
+	DEVLINK_CMD_DPIPE_TABLE_GET = 31,
+	DEVLINK_CMD_DPIPE_ENTRIES_GET = 32,
+	DEVLINK_CMD_DPIPE_HEADERS_GET = 33,
+	DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34,
+	DEVLINK_CMD_RESOURCE_SET = 35,
+	DEVLINK_CMD_RESOURCE_DUMP = 36,
+	DEVLINK_CMD_RELOAD = 37,
+	DEVLINK_CMD_PARAM_GET = 38,
+	DEVLINK_CMD_PARAM_SET = 39,
+	DEVLINK_CMD_PARAM_NEW = 40,
+	DEVLINK_CMD_PARAM_DEL = 41,
+	DEVLINK_CMD_REGION_GET = 42,
+	DEVLINK_CMD_REGION_SET = 43,
+	DEVLINK_CMD_REGION_NEW = 44,
+	DEVLINK_CMD_REGION_DEL = 45,
+	DEVLINK_CMD_REGION_READ = 46,
+	DEVLINK_CMD_PORT_PARAM_GET = 47,
+	DEVLINK_CMD_PORT_PARAM_SET = 48,
+	DEVLINK_CMD_PORT_PARAM_NEW = 49,
+	DEVLINK_CMD_PORT_PARAM_DEL = 50,
+	DEVLINK_CMD_INFO_GET = 51,
+	DEVLINK_CMD_HEALTH_REPORTER_GET = 52,
+	DEVLINK_CMD_HEALTH_REPORTER_SET = 53,
+	DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54,
+	DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56,
+	DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57,
+	DEVLINK_CMD_FLASH_UPDATE = 58,
+	DEVLINK_CMD_FLASH_UPDATE_END = 59,
+	DEVLINK_CMD_FLASH_UPDATE_STATUS = 60,
+	DEVLINK_CMD_TRAP_GET = 61,
+	DEVLINK_CMD_TRAP_SET = 62,
+	DEVLINK_CMD_TRAP_NEW = 63,
+	DEVLINK_CMD_TRAP_DEL = 64,
+	DEVLINK_CMD_TRAP_GROUP_GET = 65,
+	DEVLINK_CMD_TRAP_GROUP_SET = 66,
+	DEVLINK_CMD_TRAP_GROUP_NEW = 67,
+	DEVLINK_CMD_TRAP_GROUP_DEL = 68,
+	DEVLINK_CMD_TRAP_POLICER_GET = 69,
+	DEVLINK_CMD_TRAP_POLICER_SET = 70,
+	DEVLINK_CMD_TRAP_POLICER_NEW = 71,
+	DEVLINK_CMD_TRAP_POLICER_DEL = 72,
+	DEVLINK_CMD_HEALTH_REPORTER_TEST = 73,
+	DEVLINK_CMD_RATE_GET = 74,
+	DEVLINK_CMD_RATE_SET = 75,
+	DEVLINK_CMD_RATE_NEW = 76,
+	DEVLINK_CMD_RATE_DEL = 77,
+	DEVLINK_CMD_LINECARD_GET = 78,
+	DEVLINK_CMD_LINECARD_SET = 79,
+	DEVLINK_CMD_LINECARD_NEW = 80,
+	DEVLINK_CMD_LINECARD_DEL = 81,
+	DEVLINK_CMD_SELFTESTS_GET = 82,
+	DEVLINK_CMD_SELFTESTS_RUN = 83,
+	__DEVLINK_CMD_MAX = 84,
+	DEVLINK_CMD_MAX = 83,
+};
+
+enum devlink_attr_selftest_id {
+	DEVLINK_ATTR_SELFTEST_ID_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_ID_FLASH = 1,
+	__DEVLINK_ATTR_SELFTEST_ID_MAX = 2,
+	DEVLINK_ATTR_SELFTEST_ID_MAX = 1,
+};
+
+enum devlink_multicast_groups {
+	DEVLINK_MCGRP_CONFIG = 0,
+};
+
+enum devlink_attr_selftest_result {
+	DEVLINK_ATTR_SELFTEST_RESULT_UNSPEC = 0,
+	DEVLINK_ATTR_SELFTEST_RESULT = 1,
+	DEVLINK_ATTR_SELFTEST_RESULT_ID = 2,
+	DEVLINK_ATTR_SELFTEST_RESULT_STATUS = 3,
+	__DEVLINK_ATTR_SELFTEST_RESULT_MAX = 4,
+	DEVLINK_ATTR_SELFTEST_RESULT_MAX = 3,
+};
+
+struct devlink_flash_notify {
+	const char *status_msg;
+	const char *component;
+	unsigned long done;
+	unsigned long total;
+	unsigned long timeout;
+};
+
+struct devlink_flash_component_lookup_ctx {
+	const char *lookup_name;
+	bool lookup_name_found;
+};
+
+enum devlink_port_function_attr {
+	DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,
+	DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,
+	DEVLINK_PORT_FN_ATTR_STATE = 2,
+	DEVLINK_PORT_FN_ATTR_OPSTATE = 3,
+	DEVLINK_PORT_FN_ATTR_CAPS = 4,
+	__DEVLINK_PORT_FUNCTION_ATTR_MAX = 5,
+	DEVLINK_PORT_FUNCTION_ATTR_MAX = 4,
+};
+
+enum devlink_port_fn_attr_cap {
+	DEVLINK_PORT_FN_ATTR_CAP_ROCE_BIT = 0,
+	DEVLINK_PORT_FN_ATTR_CAP_MIGRATABLE_BIT = 1,
+	DEVLINK_PORT_FN_ATTR_CAP_IPSEC_CRYPTO_BIT = 2,
+	DEVLINK_PORT_FN_ATTR_CAP_IPSEC_PACKET_BIT = 3,
+	__DEVLINK_PORT_FN_ATTR_CAPS_MAX = 4,
+};
+
+struct devlink_sb {
+	struct list_head list;
+	unsigned int index;
+	u32 size;
+	u16 ingress_pools_count;
+	u16 egress_pools_count;
+	u16 ingress_tc_count;
+	u16 egress_tc_count;
+};
+
+enum devlink_dpipe_match_type {
+	DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0,
+};
+
+enum devlink_dpipe_action_type {
+	DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0,
+};
+
+struct devlink_dpipe_table_ops;
+
+struct devlink_dpipe_table {
+	void *priv;
+	struct list_head list;
+	const char *name;
+	bool counters_enabled;
+	bool counter_control_extern;
+	bool resource_valid;
+	u64 resource_id;
+	u64 resource_units;
+	struct devlink_dpipe_table_ops *table_ops;
+	struct callback_head rcu;
+};
+
+struct devlink_dpipe_dump_ctx;
+
+struct devlink_dpipe_table_ops {
+	int (*actions_dump)(void *, struct sk_buff *);
+	int (*matches_dump)(void *, struct sk_buff *);
+	int (*entries_dump)(void *, bool, struct devlink_dpipe_dump_ctx *);
+	int (*counters_set_update)(void *, bool);
+	u64 (*size_get)(void *);
+};
+
+struct devlink_dpipe_dump_ctx {
+	struct genl_info *info;
+	enum devlink_command cmd;
+	struct sk_buff *skb;
+	struct nlattr *nest;
+	void *hdr;
+};
+
+struct devlink_dpipe_value;
+
+struct devlink_dpipe_entry {
+	u64 index;
+	struct devlink_dpipe_value *match_values;
+	unsigned int match_values_count;
+	struct devlink_dpipe_value *action_values;
+	unsigned int action_values_count;
+	u64 counter;
+	bool counter_valid;
+};
+
+struct devlink_dpipe_action;
+
+struct devlink_dpipe_match;
+
+struct devlink_dpipe_value {
+	union {
+		struct devlink_dpipe_action *action;
+		struct devlink_dpipe_match *match;
+	};
+	unsigned int mapping_value;
+	bool mapping_valid;
+	unsigned int value_size;
+	void *value;
+	void *mask;
+};
+
+struct devlink_dpipe_action {
+	enum devlink_dpipe_action_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+struct devlink_dpipe_match {
+	enum devlink_dpipe_match_type type;
+	unsigned int header_index;
+	struct devlink_dpipe_header *header;
+	unsigned int field_id;
+};
+
+enum devlink_resource_unit {
+	DEVLINK_RESOURCE_UNIT_ENTRY = 0,
+};
+
+struct devlink_resource_size_params {
+	u64 size_min;
+	u64 size_max;
+	u64 size_granularity;
+	enum devlink_resource_unit unit;
+};
+
+typedef u64 devlink_resource_occ_get_t(void *);
+
+struct devlink_resource {
+	const char *name;
+	u64 id;
+	u64 size;
+	u64 size_new;
+	bool size_valid;
+	struct devlink_resource *parent;
+	struct devlink_resource_size_params size_params;
+	struct list_head list;
+	struct list_head resource_list;
+	devlink_resource_occ_get_t *occ_get;
+	void *occ_get_priv;
+};
+
+enum devlink_param_type {
+	DEVLINK_PARAM_TYPE_U8 = 0,
+	DEVLINK_PARAM_TYPE_U16 = 1,
+	DEVLINK_PARAM_TYPE_U32 = 2,
+	DEVLINK_PARAM_TYPE_STRING = 3,
+	DEVLINK_PARAM_TYPE_BOOL = 4,
+};
+
+struct devlink_param_gset_ctx;
+
+union devlink_param_value;
+
+struct devlink_param {
+	u32 id;
+	const char *name;
+	bool generic;
+	enum devlink_param_type type;
+	unsigned long supported_cmodes;
+	int (*get)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*set)(struct devlink *, u32, struct devlink_param_gset_ctx *);
+	int (*validate)(struct devlink *, u32, union devlink_param_value, struct netlink_ext_ack *);
+};
+
+union devlink_param_value {
+	u8 vu8;
+	u16 vu16;
+	u32 vu32;
+	char vstr[32];
+	bool vbool;
+};
+
+enum devlink_param_cmode {
+	DEVLINK_PARAM_CMODE_RUNTIME = 0,
+	DEVLINK_PARAM_CMODE_DRIVERINIT = 1,
+	DEVLINK_PARAM_CMODE_PERMANENT = 2,
+	__DEVLINK_PARAM_CMODE_MAX = 3,
+	DEVLINK_PARAM_CMODE_MAX = 2,
+};
+
+struct devlink_param_gset_ctx {
+	union devlink_param_value val;
+	enum devlink_param_cmode cmode;
+};
+
+enum devlink_param_generic_id {
+	DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET = 0,
+	DEVLINK_PARAM_GENERIC_ID_MAX_MACS = 1,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV = 2,
+	DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT = 3,
+	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI = 4,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX = 5,
+	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN = 6,
+	DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY = 7,
+	DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH = 11,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA = 12,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET = 13,
+	DEVLINK_PARAM_GENERIC_ID_ENABLE_IWARP = 14,
+	DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE = 15,
+	DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE = 16,
+	__DEVLINK_PARAM_GENERIC_ID_MAX = 17,
+	DEVLINK_PARAM_GENERIC_ID_MAX = 16,
+};
+
+struct devlink_param_item {
+	struct list_head list;
+	const struct devlink_param *param;
+	union devlink_param_value driverinit_value;
+	bool driverinit_value_valid;
+	union devlink_param_value driverinit_value_new;
+	bool driverinit_value_new_valid;
+};
+
+struct devlink_region_ops;
+
+struct devlink_port_region_ops;
+
+struct devlink_region {
+	struct devlink *devlink;
+	struct devlink_port *port;
+	struct list_head list;
+	union {
+		const struct devlink_region_ops *ops;
+		const struct devlink_port_region_ops *port_ops;
+	};
+	struct mutex snapshot_lock;
+	struct list_head snapshot_list;
+	u32 max_snapshots;
+	u32 cur_snapshots;
+	u64 size;
+};
+
+struct devlink_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u8 **);
+	int (*read)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u64, u32, u8 *);
+	void *priv;
+};
+
+struct devlink_port_region_ops {
+	const char *name;
+	void (*destructor)(const void *);
+	int (*snapshot)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u8 **);
+	int (*read)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u64, u32, u8 *);
+	void *priv;
+};
+
+struct devlink_snapshot {
+	struct list_head list;
+	struct devlink_region *region;
+	u8 *data;
+	u32 id;
+};
+
+typedef int devlink_chunk_fill_t(void *, u8 *, u32, u64, struct netlink_ext_ack *);
+
+enum devlink_health_reporter_state {
+	DEVLINK_HEALTH_REPORTER_STATE_HEALTHY = 0,
+	DEVLINK_HEALTH_REPORTER_STATE_ERROR = 1,
+};
+
+struct devlink_health_reporter_ops;
+
+struct devlink_fmsg;
+
+struct devlink_health_reporter {
+	struct list_head list;
+	void *priv;
+	const struct devlink_health_reporter_ops *ops;
+	struct devlink *devlink;
+	struct devlink_port *devlink_port;
+	struct devlink_fmsg *dump_fmsg;
+	u64 graceful_period;
+	bool auto_recover;
+	bool auto_dump;
+	u8 health_state;
+	u64 dump_ts;
+	u64 dump_real_ts;
+	u64 error_count;
+	u64 recovery_count;
+	u64 last_recovery_ts;
+};
+
+struct devlink_health_reporter_ops {
+	char *name;
+	int (*recover)(struct devlink_health_reporter *, void *, struct netlink_ext_ack *);
+	int (*dump)(struct devlink_health_reporter *, struct devlink_fmsg *, void *, struct netlink_ext_ack *);
+	int (*diagnose)(struct devlink_health_reporter *, struct devlink_fmsg *, struct netlink_ext_ack *);
+	int (*test)(struct devlink_health_reporter *, struct netlink_ext_ack *);
+};
+
+struct devlink_fmsg {
+	struct list_head item_list;
+	bool putting_binary;
+};
+
+struct devlink_fmsg_item {
+	struct list_head list;
+	int attrtype;
+	u8 nla_type;
+	u16 len;
+	int value[0];
+};
+
+enum {
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,
+	DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,
+};
+
+enum {
+	DEVLINK_ATTR_STATS_RX_PACKETS = 0,
+	DEVLINK_ATTR_STATS_RX_BYTES = 1,
+	DEVLINK_ATTR_STATS_RX_DROPPED = 2,
+	__DEVLINK_ATTR_STATS_MAX = 3,
+	DEVLINK_ATTR_STATS_MAX = 2,
+};
+
+enum devlink_trap_generic_id {
+	DEVLINK_TRAP_GENERIC_ID_SMAC_MC = 0,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_TAG_MISMATCH = 1,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER = 2,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_STP_FILTER = 3,
+	DEVLINK_TRAP_GENERIC_ID_EMPTY_TX_LIST = 4,
+	DEVLINK_TRAP_GENERIC_ID_PORT_LOOPBACK_FILTER = 5,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_ROUTE = 6,
+	DEVLINK_TRAP_GENERIC_ID_TTL_ERROR = 7,
+	DEVLINK_TRAP_GENERIC_ID_TAIL_DROP = 8,
+	DEVLINK_TRAP_GENERIC_ID_NON_IP_PACKET = 9,
+	DEVLINK_TRAP_GENERIC_ID_UC_DIP_MC_DMAC = 10,
+	DEVLINK_TRAP_GENERIC_ID_DIP_LB = 11,
+	DEVLINK_TRAP_GENERIC_ID_SIP_MC = 12,
+	DEVLINK_TRAP_GENERIC_ID_SIP_LB = 13,
+	DEVLINK_TRAP_GENERIC_ID_CORRUPTED_IP_HDR = 14,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_SIP_BC = 15,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_RESERVED_SCOPE = 16,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_INTERFACE_LOCAL_SCOPE = 17,
+	DEVLINK_TRAP_GENERIC_ID_MTU_ERROR = 18,
+	DEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH = 19,
+	DEVLINK_TRAP_GENERIC_ID_RPF = 20,
+	DEVLINK_TRAP_GENERIC_ID_REJECT_ROUTE = 21,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS = 22,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS = 23,
+	DEVLINK_TRAP_GENERIC_ID_NON_ROUTABLE = 24,
+	DEVLINK_TRAP_GENERIC_ID_DECAP_ERROR = 25,
+	DEVLINK_TRAP_GENERIC_ID_OVERLAY_SMAC_MC = 26,
+	DEVLINK_TRAP_GENERIC_ID_INGRESS_FLOW_ACTION_DROP = 27,
+	DEVLINK_TRAP_GENERIC_ID_EGRESS_FLOW_ACTION_DROP = 28,
+	DEVLINK_TRAP_GENERIC_ID_STP = 29,
+	DEVLINK_TRAP_GENERIC_ID_LACP = 30,
+	DEVLINK_TRAP_GENERIC_ID_LLDP = 31,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_QUERY = 32,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V1_REPORT = 33,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_REPORT = 34,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V3_REPORT = 35,
+	DEVLINK_TRAP_GENERIC_ID_IGMP_V2_LEAVE = 36,
+	DEVLINK_TRAP_GENERIC_ID_MLD_QUERY = 37,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_REPORT = 38,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V2_REPORT = 39,
+	DEVLINK_TRAP_GENERIC_ID_MLD_V1_DONE = 40,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_DHCP = 41,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DHCP = 42,
+	DEVLINK_TRAP_GENERIC_ID_ARP_REQUEST = 43,
+	DEVLINK_TRAP_GENERIC_ID_ARP_RESPONSE = 44,
+	DEVLINK_TRAP_GENERIC_ID_ARP_OVERLAY = 45,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_SOLICIT = 46,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_ADVERT = 47,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BFD = 48,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BFD = 49,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_OSPF = 50,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_OSPF = 51,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_BGP = 52,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_BGP = 53,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_VRRP = 54,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_VRRP = 55,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_PIM = 56,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_PIM = 57,
+	DEVLINK_TRAP_GENERIC_ID_UC_LB = 58,
+	DEVLINK_TRAP_GENERIC_ID_LOCAL_ROUTE = 59,
+	DEVLINK_TRAP_GENERIC_ID_EXTERNAL_ROUTE = 60,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_UC_DIP_LINK_LOCAL_SCOPE = 61,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_NODES = 62,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_ROUTERS = 63,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_SOLICIT = 64,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ADVERT = 65,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_REDIRECT = 66,
+	DEVLINK_TRAP_GENERIC_ID_IPV4_ROUTER_ALERT = 67,
+	DEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ALERT = 68,
+	DEVLINK_TRAP_GENERIC_ID_PTP_EVENT = 69,
+	DEVLINK_TRAP_GENERIC_ID_PTP_GENERAL = 70,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_SAMPLE = 71,
+	DEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_TRAP = 72,
+	DEVLINK_TRAP_GENERIC_ID_EARLY_DROP = 73,
+	DEVLINK_TRAP_GENERIC_ID_VXLAN_PARSING = 74,
+	DEVLINK_TRAP_GENERIC_ID_LLC_SNAP_PARSING = 75,
+	DEVLINK_TRAP_GENERIC_ID_VLAN_PARSING = 76,
+	DEVLINK_TRAP_GENERIC_ID_PPPOE_PPP_PARSING = 77,
+	DEVLINK_TRAP_GENERIC_ID_MPLS_PARSING = 78,
+	DEVLINK_TRAP_GENERIC_ID_ARP_PARSING = 79,
+	DEVLINK_TRAP_GENERIC_ID_IP_1_PARSING = 80,
+	DEVLINK_TRAP_GENERIC_ID_IP_N_PARSING = 81,
+	DEVLINK_TRAP_GENERIC_ID_GRE_PARSING = 82,
+	DEVLINK_TRAP_GENERIC_ID_UDP_PARSING = 83,
+	DEVLINK_TRAP_GENERIC_ID_TCP_PARSING = 84,
+	DEVLINK_TRAP_GENERIC_ID_IPSEC_PARSING = 85,
+	DEVLINK_TRAP_GENERIC_ID_SCTP_PARSING = 86,
+	DEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,
+	DEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,
+	DEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,
+	DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_NEXTHOP = 90,
+	DEVLINK_TRAP_GENERIC_ID_DMAC_FILTER = 91,
+	DEVLINK_TRAP_GENERIC_ID_EAPOL = 92,
+	DEVLINK_TRAP_GENERIC_ID_LOCKED_PORT = 93,
+	__DEVLINK_TRAP_GENERIC_ID_MAX = 94,
+	DEVLINK_TRAP_GENERIC_ID_MAX = 93,
+};
+
+enum devlink_trap_group_generic_id {
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L2_DROPS = 0,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_DROPS = 1,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_L3_EXCEPTIONS = 2,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BUFFER_DROPS = 3,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_TUNNEL_DROPS = 4,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_DROPS = 5,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_STP = 6,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LACP = 7,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LLDP = 8,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MC_SNOOPING = 9,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_DHCP = 10,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_NEIGH_DISCOVERY = 11,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BFD = 12,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_OSPF = 13,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_BGP = 14,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_VRRP = 15,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PIM = 16,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_UC_LB = 17,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_LOCAL_DELIVERY = 18,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_EXTERNAL_DELIVERY = 19,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_IPV6 = 20,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_EVENT = 21,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PTP_GENERAL = 22,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE = 23,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP = 24,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS = 25,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_EAPOL = 26,
+	__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 27,
+	DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 26,
+};
+
+struct devlink_trap_policer_item;
+
+struct devlink_stats;
+
+struct devlink_trap_group_item {
+	const struct devlink_trap_group *group;
+	struct devlink_trap_policer_item *policer_item;
+	struct list_head list;
+	struct devlink_stats __attribute__((btf_type_tag("percpu"))) *stats;
+};
+
+struct devlink_trap_policer_item {
+	const struct devlink_trap_policer *policer;
+	u64 rate;
+	u64 burst;
+	struct list_head list;
+};
+
+struct devlink_stats {
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_packets;
+	struct u64_stats_sync syncp;
+};
+
+struct devlink_trap_item {
+	const struct devlink_trap *trap;
+	struct devlink_trap_group_item *group_item;
+	struct list_head list;
+	enum devlink_trap_action action;
+	struct devlink_stats __attribute__((btf_type_tag("percpu"))) *stats;
+	void *priv;
+};
+
+struct devlink_linecard_type {
+	const char *type;
+	const void *priv;
+};
+
+enum vlan_flags {
+	VLAN_FLAG_REORDER_HDR = 1,
+	VLAN_FLAG_GVRP = 2,
+	VLAN_FLAG_LOOSE_BINDING = 4,
+	VLAN_FLAG_MVRP = 8,
+	VLAN_FLAG_BRIDGE_BINDING = 16,
+};
+
+enum vlan_protos {
+	VLAN_PROTO_8021Q = 0,
+	VLAN_PROTO_8021AD = 1,
+	VLAN_PROTO_NUM = 2,
+};
+
+struct vlan_pcpu_stats {
+	u64_stats_t rx_packets;
+	u64_stats_t rx_bytes;
+	u64_stats_t rx_multicast;
+	u64_stats_t tx_packets;
+	u64_stats_t tx_bytes;
+	struct u64_stats_sync syncp;
+	u32 rx_errors;
+	u32 tx_dropped;
+};
+
+struct vlan_vid_info {
+	struct list_head list;
+	__be16 proto;
+	u16 vid;
+	int refcount;
+};
+
+struct vlan_priority_tci_mapping;
+
+struct vlan_dev_priv {
+	unsigned int nr_ingress_mappings;
+	u32 ingress_priority_map[8];
+	unsigned int nr_egress_mappings;
+	struct vlan_priority_tci_mapping *egress_priority_map[16];
+	__be16 vlan_proto;
+	u16 vlan_id;
+	u16 flags;
+	struct net_device *real_dev;
+	netdevice_tracker dev_tracker;
+	unsigned char real_dev_addr[6];
+	struct proc_dir_entry *dent;
+	struct vlan_pcpu_stats __attribute__((btf_type_tag("percpu"))) *vlan_pcpu_stats;
+};
+
+struct vlan_priority_tci_mapping {
+	u32 priority;
+	u16 vlan_qos;
+	struct vlan_priority_tci_mapping *next;
+};
+
+enum nl80211_chan_width {
+	NL80211_CHAN_WIDTH_20_NOHT = 0,
+	NL80211_CHAN_WIDTH_20 = 1,
+	NL80211_CHAN_WIDTH_40 = 2,
+	NL80211_CHAN_WIDTH_80 = 3,
+	NL80211_CHAN_WIDTH_80P80 = 4,
+	NL80211_CHAN_WIDTH_160 = 5,
+	NL80211_CHAN_WIDTH_5 = 6,
+	NL80211_CHAN_WIDTH_10 = 7,
+	NL80211_CHAN_WIDTH_1 = 8,
+	NL80211_CHAN_WIDTH_2 = 9,
+	NL80211_CHAN_WIDTH_4 = 10,
+	NL80211_CHAN_WIDTH_8 = 11,
+	NL80211_CHAN_WIDTH_16 = 12,
+	NL80211_CHAN_WIDTH_320 = 13,
+};
+
+enum ieee80211_edmg_bw_config {
+	IEEE80211_EDMG_BW_CONFIG_4 = 4,
+	IEEE80211_EDMG_BW_CONFIG_5 = 5,
+	IEEE80211_EDMG_BW_CONFIG_6 = 6,
+	IEEE80211_EDMG_BW_CONFIG_7 = 7,
+	IEEE80211_EDMG_BW_CONFIG_8 = 8,
+	IEEE80211_EDMG_BW_CONFIG_9 = 9,
+	IEEE80211_EDMG_BW_CONFIG_10 = 10,
+	IEEE80211_EDMG_BW_CONFIG_11 = 11,
+	IEEE80211_EDMG_BW_CONFIG_12 = 12,
+	IEEE80211_EDMG_BW_CONFIG_13 = 13,
+	IEEE80211_EDMG_BW_CONFIG_14 = 14,
+	IEEE80211_EDMG_BW_CONFIG_15 = 15,
+};
+
+struct ieee80211_edmg {
+	u8 channels;
+	enum ieee80211_edmg_bw_config bw_config;
+};
+
+struct ieee80211_channel;
+
+struct cfg80211_chan_def {
+	struct ieee80211_channel *chan;
+	enum nl80211_chan_width width;
+	u32 center_freq1;
+	u32 center_freq2;
+	struct ieee80211_edmg edmg;
+	u16 freq1_offset;
+};
+
+struct cfg80211_internal_bss;
+
+enum nl80211_iftype {
+	NL80211_IFTYPE_UNSPECIFIED = 0,
+	NL80211_IFTYPE_ADHOC = 1,
+	NL80211_IFTYPE_STATION = 2,
+	NL80211_IFTYPE_AP = 3,
+	NL80211_IFTYPE_AP_VLAN = 4,
+	NL80211_IFTYPE_WDS = 5,
+	NL80211_IFTYPE_MONITOR = 6,
+	NL80211_IFTYPE_MESH_POINT = 7,
+	NL80211_IFTYPE_P2P_CLIENT = 8,
+	NL80211_IFTYPE_P2P_GO = 9,
+	NL80211_IFTYPE_P2P_DEVICE = 10,
+	NL80211_IFTYPE_OCB = 11,
+	NL80211_IFTYPE_NAN = 12,
+	NUM_NL80211_IFTYPES = 13,
+	NL80211_IFTYPE_MAX = 12,
+};
+
+struct cfg80211_conn;
+
+struct cfg80211_cached_keys;
+
+enum ieee80211_bss_type {
+	IEEE80211_BSS_TYPE_ESS = 0,
+	IEEE80211_BSS_TYPE_PBSS = 1,
+	IEEE80211_BSS_TYPE_IBSS = 2,
+	IEEE80211_BSS_TYPE_MBSS = 3,
+	IEEE80211_BSS_TYPE_ANY = 4,
+};
+
+struct wiphy;
+
+struct wiphy_work;
+
+typedef void (*wiphy_work_func_t)(struct wiphy *, struct wiphy_work *);
+
+struct wiphy_work {
+	struct list_head entry;
+	wiphy_work_func_t func;
+};
+
+struct cfg80211_cqm_config;
+
+struct wireless_dev {
+	struct wiphy *wiphy;
+	enum nl80211_iftype iftype;
+	struct list_head list;
+	struct net_device *netdev;
+	u32 identifier;
+	struct list_head mgmt_registrations;
+	u8 mgmt_registrations_need_update: 1;
+	struct mutex mtx;
+	bool use_4addr;
+	bool is_running;
+	bool registered;
+	bool registering;
+	u8 address[6];
+	struct cfg80211_conn *conn;
+	struct cfg80211_cached_keys *connect_keys;
+	enum ieee80211_bss_type conn_bss_type;
+	u32 conn_owner_nlportid;
+	struct work_struct disconnect_wk;
+	u8 disconnect_bssid[6];
+	struct list_head event_list;
+	spinlock_t event_lock;
+	u8 connected: 1;
+	bool ps;
+	int ps_timeout;
+	u32 ap_unexpected_nlportid;
+	u32 owner_nlportid;
+	bool nl_owner_dead;
+	bool cac_started;
+	unsigned long cac_start_time;
+	unsigned int cac_time_ms;
+	struct wiphy_work cqm_rssi_work;
+	struct cfg80211_cqm_config __attribute__((btf_type_tag("rcu"))) *cqm_config;
+	struct list_head pmsr_list;
+	spinlock_t pmsr_lock;
+	struct work_struct pmsr_free_wk;
+	unsigned long unprot_beacon_reported;
+	union {
+		struct {
+			u8 connected_addr[6];
+			u8 ssid[32];
+			u8 ssid_len;
+			long: 0;
+		} client;
+		struct {
+			int beacon_interval;
+			struct cfg80211_chan_def preset_chandef;
+			struct cfg80211_chan_def chandef;
+			u8 id[32];
+			u8 id_len;
+			u8 id_up_len;
+		} mesh;
+		struct {
+			struct cfg80211_chan_def preset_chandef;
+			u8 ssid[32];
+			u8 ssid_len;
+		} ap;
+		struct {
+			struct cfg80211_internal_bss *current_bss;
+			struct cfg80211_chan_def chandef;
+			int beacon_interval;
+			u8 ssid[32];
+			u8 ssid_len;
+		} ibss;
+		struct {
+			struct cfg80211_chan_def chandef;
+		} ocb;
+	} u;
+	struct {
+		u8 addr[6];
+		union {
+			struct {
+				unsigned int beacon_interval;
+				struct cfg80211_chan_def chandef;
+			} ap;
+			struct {
+				struct cfg80211_internal_bss *current_bss;
+			} client;
+		};
+	} links[15];
+	u16 valid_links;
+	u64 android_kabi_reserved1;
+	u64 android_kabi_reserved2;
+};
+
+enum cfg80211_signal_type {
+	CFG80211_SIGNAL_TYPE_NONE = 0,
+	CFG80211_SIGNAL_TYPE_MBM = 1,
+	CFG80211_SIGNAL_TYPE_UNSPEC = 2,
+};
+
+struct rfkill;
+
+struct mac_address;
+
+struct ieee80211_txrx_stypes;
+
+struct ieee80211_iface_combination;
+
+struct wiphy_iftype_akm_suites;
+
+struct wiphy_wowlan_support;
+
+struct cfg80211_wowlan;
+
+struct wiphy_iftype_ext_capab;
+
+struct ieee80211_supported_band;
+
+struct regulatory_request;
+
+struct ieee80211_regdomain;
+
+struct ieee80211_ht_cap;
+
+struct ieee80211_vht_cap;
+
+struct wiphy_coalesce_support;
+
+struct wiphy_vendor_command;
+
+struct nl80211_vendor_cmd_info;
+
+struct cfg80211_pmsr_capabilities;
+
+struct cfg80211_sar_capa;
+
+struct wiphy {
+	struct mutex mtx;
+	u8 perm_addr[6];
+	u8 addr_mask[6];
+	struct mac_address *addresses;
+	const struct ieee80211_txrx_stypes *mgmt_stypes;
+	const struct ieee80211_iface_combination *iface_combinations;
+	int n_iface_combinations;
+	u16 software_iftypes;
+	u16 n_addresses;
+	u16 interface_modes;
+	u16 max_acl_mac_addrs;
+	u32 flags;
+	u32 regulatory_flags;
+	u32 features;
+	u8 ext_features[9];
+	u32 ap_sme_capa;
+	enum cfg80211_signal_type signal_type;
+	int bss_priv_size;
+	u8 max_scan_ssids;
+	u8 max_sched_scan_reqs;
+	u8 max_sched_scan_ssids;
+	u8 max_match_sets;
+	u16 max_scan_ie_len;
+	u16 max_sched_scan_ie_len;
+	u32 max_sched_scan_plans;
+	u32 max_sched_scan_plan_interval;
+	u32 max_sched_scan_plan_iterations;
+	int n_cipher_suites;
+	const u32 *cipher_suites;
+	int n_akm_suites;
+	const u32 *akm_suites;
+	const struct wiphy_iftype_akm_suites *iftype_akm_suites;
+	unsigned int num_iftype_akm_suites;
+	u8 retry_short;
+	u8 retry_long;
+	u32 frag_threshold;
+	u32 rts_threshold;
+	u8 coverage_class;
+	char fw_version[32];
+	u32 hw_version;
+	const struct wiphy_wowlan_support *wowlan;
+	struct cfg80211_wowlan *wowlan_config;
+	u16 max_remain_on_channel_duration;
+	u8 max_num_pmkids;
+	u32 available_antennas_tx;
+	u32 available_antennas_rx;
+	u32 probe_resp_offload;
+	const u8 *extended_capabilities;
+	const u8 *extended_capabilities_mask;
+	u8 extended_capabilities_len;
+	const struct wiphy_iftype_ext_capab *iftype_ext_capab;
+	unsigned int num_iftype_ext_capab;
+	const void *privid;
+	struct ieee80211_supported_band *bands[6];
+	void (*reg_notifier)(struct wiphy *, struct regulatory_request *);
+	const struct ieee80211_regdomain __attribute__((btf_type_tag("rcu"))) *regd;
+	struct device dev;
+	bool registered;
+	struct dentry *debugfsdir;
+	const struct ieee80211_ht_cap *ht_capa_mod_mask;
+	const struct ieee80211_vht_cap *vht_capa_mod_mask;
+	struct list_head wdev_list;
+	possible_net_t _net;
+	const struct wiphy_coalesce_support *coalesce;
+	const struct wiphy_vendor_command *vendor_commands;
+	const struct nl80211_vendor_cmd_info *vendor_events;
+	int n_vendor_commands;
+	int n_vendor_events;
+	u16 max_ap_assoc_sta;
+	u8 max_num_csa_counters;
+	u32 bss_select_support;
+	u8 nan_supported_bands;
+	u32 txq_limit;
+	u32 txq_memory_limit;
+	u32 txq_quantum;
+	unsigned long tx_queue_len;
+	u8 support_mbssid: 1;
+	u8 support_only_he_mbssid: 1;
+	const struct cfg80211_pmsr_capabilities *pmsr_capa;
+	struct {
+		u64 peer;
+		u64 vif;
+		u8 max_retry;
+	} tid_config_support;
+	u8 max_data_retry_count;
+	const struct cfg80211_sar_capa *sar_capa;
+	struct rfkill *rfkill;
+	u8 mbssid_max_interfaces;
+	u8 ema_max_profile_periodicity;
+	u16 max_num_akm_suites;
+	u16 hw_timestamp_max_peers;
+	u64 android_kabi_reserved1;
+	char priv[0];
+};
+
+struct mac_address {
+	u8 addr[6];
+};
+
+struct ieee80211_txrx_stypes {
+	u16 tx;
+	u16 rx;
+};
+
+struct ieee80211_iface_limit;
+
+struct ieee80211_iface_combination {
+	const struct ieee80211_iface_limit *limits;
+	u32 num_different_channels;
+	u16 max_interfaces;
+	u8 n_limits;
+	bool beacon_int_infra_match;
+	u8 radar_detect_widths;
+	u8 radar_detect_regions;
+	u32 beacon_int_min_gcd;
+};
+
+struct ieee80211_iface_limit {
+	u16 max;
+	u16 types;
+};
+
+struct wiphy_iftype_akm_suites {
+	u16 iftypes_mask;
+	const u32 *akm_suites;
+	int n_akm_suites;
+};
+
+struct wiphy_wowlan_tcp_support;
+
+struct wiphy_wowlan_support {
+	u32 flags;
+	int n_patterns;
+	int pattern_max_len;
+	int pattern_min_len;
+	int max_pkt_offset;
+	int max_nd_match_sets;
+	const struct wiphy_wowlan_tcp_support *tcp;
+};
+
+struct nl80211_wowlan_tcp_data_token_feature;
+
+struct wiphy_wowlan_tcp_support {
+	const struct nl80211_wowlan_tcp_data_token_feature *tok;
+	u32 data_payload_max;
+	u32 data_interval_max;
+	u32 wake_payload_max;
+	bool seq;
+};
+
+struct nl80211_wowlan_tcp_data_token_feature {
+	__u32 min_len;
+	__u32 max_len;
+	__u32 bufsize;
+};
+
+struct cfg80211_pkt_pattern;
+
+struct cfg80211_wowlan_tcp;
+
+struct cfg80211_sched_scan_request;
+
+struct cfg80211_wowlan {
+	bool any;
+	bool disconnect;
+	bool magic_pkt;
+	bool gtk_rekey_failure;
+	bool eap_identity_req;
+	bool four_way_handshake;
+	bool rfkill_release;
+	struct cfg80211_pkt_pattern *patterns;
+	struct cfg80211_wowlan_tcp *tcp;
+	int n_patterns;
+	struct cfg80211_sched_scan_request *nd_config;
+};
+
+struct cfg80211_pkt_pattern {
+	const u8 *mask;
+	const u8 *pattern;
+	int pattern_len;
+	int pkt_offset;
+};
+
+struct nl80211_wowlan_tcp_data_seq {
+	__u32 start;
+	__u32 offset;
+	__u32 len;
+};
+
+struct nl80211_wowlan_tcp_data_token {
+	__u32 offset;
+	__u32 len;
+	__u8 token_stream[0];
+};
+
+struct cfg80211_wowlan_tcp {
+	struct socket *sock;
+	__be32 src;
+	__be32 dst;
+	u16 src_port;
+	u16 dst_port;
+	u8 dst_mac[6];
+	int payload_len;
+	const u8 *payload;
+	struct nl80211_wowlan_tcp_data_seq payload_seq;
+	u32 data_interval;
+	u32 wake_len;
+	const u8 *wake_data;
+	const u8 *wake_mask;
+	u32 tokens_size;
+	struct nl80211_wowlan_tcp_data_token payload_tok;
+};
+
+enum nl80211_band {
+	NL80211_BAND_2GHZ = 0,
+	NL80211_BAND_5GHZ = 1,
+	NL80211_BAND_60GHZ = 2,
+	NL80211_BAND_6GHZ = 3,
+	NL80211_BAND_S1GHZ = 4,
+	NL80211_BAND_LC = 5,
+	NUM_NL80211_BANDS = 6,
+};
+
+struct cfg80211_bss_select_adjust {
+	enum nl80211_band band;
+	s8 delta;
+};
+
+struct cfg80211_ssid;
+
+struct cfg80211_match_set;
+
+struct cfg80211_sched_scan_plan;
+
+struct cfg80211_sched_scan_request {
+	u64 reqid;
+	struct cfg80211_ssid *ssids;
+	int n_ssids;
+	u32 n_channels;
+	const u8 *ie;
+	size_t ie_len;
+	u32 flags;
+	struct cfg80211_match_set *match_sets;
+	int n_match_sets;
+	s32 min_rssi_thold;
+	u32 delay;
+	struct cfg80211_sched_scan_plan *scan_plans;
+	int n_scan_plans;
+	u8 mac_addr[6];
+	u8 mac_addr_mask[6];
+	bool relative_rssi_set;
+	s8 relative_rssi;
+	struct cfg80211_bss_select_adjust rssi_adjust;
+	struct wiphy *wiphy;
+	struct net_device *dev;
+	unsigned long scan_start;
+	bool report_results;
+	struct callback_head callback_head;
+	u32 owner_nlportid;
+	bool nl_owner_dead;
+	struct list_head list;
+	u64 android_kabi_reserved1;
+	struct ieee80211_channel *channels[0];
+};
+
+struct cfg80211_ssid {
+	u8 ssid[32];
+	u8 ssid_len;
+};
+
+struct cfg80211_match_set {
+	struct cfg80211_ssid ssid;
+	u8 bssid[6];
+	s32 rssi_thold;
+	s32 per_band_rssi_thold[6];
+};
+
+struct cfg80211_sched_scan_plan {
+	u32 interval;
+	u32 iterations;
+};
+
+enum nl80211_dfs_state {
+	NL80211_DFS_USABLE = 0,
+	NL80211_DFS_UNAVAILABLE = 1,
+	NL80211_DFS_AVAILABLE = 2,
+};
+
+struct ieee80211_channel {
+	enum nl80211_band band;
+	u32 center_freq;
+	u16 freq_offset;
+	u16 hw_value;
+	u32 flags;
+	int max_antenna_gain;
+	int max_power;
+	int max_reg_power;
+	bool beacon_found;
+	u32 orig_flags;
+	int orig_mag;
+	int orig_mpwr;
+	enum nl80211_dfs_state dfs_state;
+	unsigned long dfs_state_entered;
+	unsigned int dfs_cac_ms;
+	s8 psd;
+};
+
+struct wiphy_iftype_ext_capab {
+	enum nl80211_iftype iftype;
+	const u8 *extended_capabilities;
+	const u8 *extended_capabilities_mask;
+	u8 extended_capabilities_len;
+	u16 eml_capabilities;
+	u16 mld_capa_and_ops;
+};
+
+struct ieee80211_mcs_info {
+	u8 rx_mask[10];
+	__le16 rx_highest;
+	u8 tx_params;
+	u8 reserved[3];
+};
+
+struct ieee80211_sta_ht_cap {
+	u16 cap;
+	bool ht_supported;
+	u8 ampdu_factor;
+	u8 ampdu_density;
+	struct ieee80211_mcs_info mcs;
+	short: 0;
+} __attribute__((packed));
+
+struct ieee80211_vht_mcs_info {
+	__le16 rx_mcs_map;
+	__le16 rx_highest;
+	__le16 tx_mcs_map;
+	__le16 tx_highest;
+};
+
+struct ieee80211_sta_vht_cap {
+	bool vht_supported;
+	u32 cap;
+	struct ieee80211_vht_mcs_info vht_mcs;
+};
+
+struct ieee80211_sta_s1g_cap {
+	bool s1g;
+	u8 cap[10];
+	u8 nss_mcs[5];
+};
+
+struct ieee80211_rate;
+
+struct ieee80211_sband_iftype_data;
+
+struct ieee80211_supported_band {
+	struct ieee80211_channel *channels;
+	struct ieee80211_rate *bitrates;
+	enum nl80211_band band;
+	int n_channels;
+	int n_bitrates;
+	struct ieee80211_sta_ht_cap ht_cap;
+	struct ieee80211_sta_vht_cap vht_cap;
+	struct ieee80211_sta_s1g_cap s1g_cap;
+	struct ieee80211_edmg edmg_cap;
+	u16 n_iftype_data;
+	const struct ieee80211_sband_iftype_data *iftype_data;
+};
+
+struct ieee80211_rate {
+	u32 flags;
+	u16 bitrate;
+	u16 hw_value;
+	u16 hw_value_short;
+};
+
+struct ieee80211_he_cap_elem {
+	u8 mac_cap_info[6];
+	u8 phy_cap_info[11];
+};
+
+struct ieee80211_he_mcs_nss_supp {
+	__le16 rx_mcs_80;
+	__le16 tx_mcs_80;
+	__le16 rx_mcs_160;
+	__le16 tx_mcs_160;
+	__le16 rx_mcs_80p80;
+	__le16 tx_mcs_80p80;
+};
+
+struct ieee80211_sta_he_cap {
+	bool has_he;
+	struct ieee80211_he_cap_elem he_cap_elem;
+	struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;
+	u8 ppe_thres[25];
+} __attribute__((packed));
+
+struct ieee80211_he_6ghz_capa {
+	__le16 capa;
+};
+
+struct ieee80211_eht_cap_elem_fixed {
+	u8 mac_cap_info[2];
+	u8 phy_cap_info[9];
+};
+
+struct ieee80211_eht_mcs_nss_supp_20mhz_only {
+	union {
+		struct {
+			u8 rx_tx_mcs7_max_nss;
+			u8 rx_tx_mcs9_max_nss;
+			u8 rx_tx_mcs11_max_nss;
+			u8 rx_tx_mcs13_max_nss;
+		};
+		u8 rx_tx_max_nss[4];
+	};
+};
+
+struct ieee80211_eht_mcs_nss_supp_bw {
+	union {
+		struct {
+			u8 rx_tx_mcs9_max_nss;
+			u8 rx_tx_mcs11_max_nss;
+			u8 rx_tx_mcs13_max_nss;
+		};
+		u8 rx_tx_max_nss[3];
+	};
+};
+
+struct ieee80211_eht_mcs_nss_supp {
+	union {
+		struct ieee80211_eht_mcs_nss_supp_20mhz_only only_20mhz;
+		struct {
+			struct ieee80211_eht_mcs_nss_supp_bw _80;
+			struct ieee80211_eht_mcs_nss_supp_bw _160;
+			struct ieee80211_eht_mcs_nss_supp_bw _320;
+		} bw;
+	};
+};
+
+struct ieee80211_sta_eht_cap {
+	bool has_eht;
+	struct ieee80211_eht_cap_elem_fixed eht_cap_elem;
+	struct ieee80211_eht_mcs_nss_supp eht_mcs_nss_supp;
+	u8 eht_ppe_thres[32];
+};
+
+struct ieee80211_sband_iftype_data {
+	u16 types_mask;
+	struct ieee80211_sta_he_cap he_cap;
+	struct ieee80211_he_6ghz_capa he_6ghz_capa;
+	struct ieee80211_sta_eht_cap eht_cap;
+	struct {
+		const u8 *data;
+		unsigned int len;
+	} vendor_elems;
+} __attribute__((packed));
+
+enum nl80211_reg_initiator {
+	NL80211_REGDOM_SET_BY_CORE = 0,
+	NL80211_REGDOM_SET_BY_USER = 1,
+	NL80211_REGDOM_SET_BY_DRIVER = 2,
+	NL80211_REGDOM_SET_BY_COUNTRY_IE = 3,
+};
+
+enum nl80211_user_reg_hint_type {
+	NL80211_USER_REG_HINT_USER = 0,
+	NL80211_USER_REG_HINT_CELL_BASE = 1,
+	NL80211_USER_REG_HINT_INDOOR = 2,
+};
+
+enum nl80211_dfs_regions {
+	NL80211_DFS_UNSET = 0,
+	NL80211_DFS_FCC = 1,
+	NL80211_DFS_ETSI = 2,
+	NL80211_DFS_JP = 3,
+};
+
+enum environment_cap {
+	ENVIRON_ANY = 0,
+	ENVIRON_INDOOR = 1,
+	ENVIRON_OUTDOOR = 2,
+};
+
+struct regulatory_request {
+	struct callback_head callback_head;
+	int wiphy_idx;
+	enum nl80211_reg_initiator initiator;
+	enum nl80211_user_reg_hint_type user_reg_hint_type;
+	char alpha2[3];
+	enum nl80211_dfs_regions dfs_region;
+	bool intersect;
+	bool processed;
+	enum environment_cap country_ie_env;
+	struct list_head list;
+};
+
+struct ieee80211_freq_range {
+	u32 start_freq_khz;
+	u32 end_freq_khz;
+	u32 max_bandwidth_khz;
+};
+
+struct ieee80211_power_rule {
+	u32 max_antenna_gain;
+	u32 max_eirp;
+};
+
+struct ieee80211_wmm_ac {
+	u16 cw_min;
+	u16 cw_max;
+	u16 cot;
+	u8 aifsn;
+};
+
+struct ieee80211_wmm_rule {
+	struct ieee80211_wmm_ac client[4];
+	struct ieee80211_wmm_ac ap[4];
+};
+
+struct ieee80211_reg_rule {
+	struct ieee80211_freq_range freq_range;
+	struct ieee80211_power_rule power_rule;
+	struct ieee80211_wmm_rule wmm_rule;
+	u32 flags;
+	u32 dfs_cac_ms;
+	bool has_wmm;
+	s8 psd;
+};
+
+struct ieee80211_regdomain {
+	struct callback_head callback_head;
+	u32 n_reg_rules;
+	char alpha2[3];
+	enum nl80211_dfs_regions dfs_region;
+	struct ieee80211_reg_rule reg_rules[0];
+};
+
+struct ieee80211_ht_cap {
+	__le16 cap_info;
+	u8 ampdu_params_info;
+	struct ieee80211_mcs_info mcs;
+	__le16 extended_ht_cap_info;
+	__le32 tx_BF_cap_info;
+	u8 antenna_selection_info;
+} __attribute__((packed));
+
+struct ieee80211_vht_cap {
+	__le32 vht_cap_info;
+	struct ieee80211_vht_mcs_info supp_mcs;
+};
+
+struct wiphy_coalesce_support {
+	int n_rules;
+	int max_delay;
+	int n_patterns;
+	int pattern_max_len;
+	int pattern_min_len;
+	int max_pkt_offset;
+};
+
+struct nl80211_vendor_cmd_info {
+	__u32 vendor_id;
+	__u32 subcmd;
+};
+
+struct wiphy_vendor_command {
+	struct nl80211_vendor_cmd_info info;
+	u32 flags;
+	int (*doit)(struct wiphy *, struct wireless_dev *, const void *, int);
+	int (*dumpit)(struct wiphy *, struct wireless_dev *, struct sk_buff *, const void *, int, unsigned long *);
+	const struct nla_policy *policy;
+	unsigned int maxattr;
+	u64 android_kabi_reserved1;
+};
+
+struct cfg80211_pmsr_capabilities {
+	unsigned int max_peers;
+	u8 report_ap_tsf: 1;
+	u8 randomize_mac_addr: 1;
+	struct {
+		u32 preambles;
+		u32 bandwidths;
+		s8 max_bursts_exponent;
+		u8 max_ftms_per_burst;
+		u8 supported: 1;
+		u8 asap: 1;
+		u8 non_asap: 1;
+		u8 request_lci: 1;
+		u8 request_civicloc: 1;
+		u8 trigger_based: 1;
+		u8 non_trigger_based: 1;
+	} ftm;
+};
+
+enum nl80211_sar_type {
+	NL80211_SAR_TYPE_POWER = 0,
+	NUM_NL80211_SAR_TYPE = 1,
+};
+
+struct cfg80211_sar_freq_ranges;
+
+struct cfg80211_sar_capa {
+	enum nl80211_sar_type type;
+	u32 num_freq_ranges;
+	const struct cfg80211_sar_freq_ranges *freq_ranges;
+};
+
+struct cfg80211_sar_freq_ranges {
+	u32 start_freq;
+	u32 end_freq;
+};
+
+struct iw_ioctl_description {
+	__u8 header_type;
+	__u8 token_type;
+	__u16 token_size;
+	__u16 min_tokens;
+	__u16 max_tokens;
+	__u32 flags;
+};
+
+struct compat_iw_point {
+	compat_caddr_t pointer;
+	__u16 length;
+	__u16 flags;
+};
+
+struct iwreq {
+	union {
+		char ifrn_name[16];
+	} ifr_ifrn;
+	union iwreq_data u;
+};
+
+typedef int (*wext_ioctl_func)(struct net_device *, struct iwreq *, unsigned int, struct iw_request_info *, iw_handler);
+
+struct iw_event {
+	__u16 len;
+	__u16 cmd;
+	union iwreq_data u;
+};
+
+struct __compat_iw_event {
+	__u16 len;
+	__u16 cmd;
+	union {
+		compat_caddr_t pointer;
+		struct {
+			struct {} __empty_ptr_bytes;
+			__u8 ptr_bytes[0];
+		};
+	};
+};
+
+struct iw_encode_ext {
+	__u32 ext_flags;
+	__u8 tx_seq[8];
+	__u8 rx_seq[8];
+	struct sockaddr addr;
+	__u16 alg;
+	__u16 key_len;
+	__u8 key[0];
+};
+
+struct iw_thrspy {
+	struct sockaddr addr;
+	struct iw_quality qual;
+	struct iw_quality low;
+	struct iw_quality high;
+};
+
+struct vsock_tap {
+	struct net_device *dev;
+	struct module *module;
+	struct list_head list;
+};
+
+struct vsock_diag_msg {
+	__u8 vdiag_family;
+	__u8 vdiag_type;
+	__u8 vdiag_state;
+	__u8 vdiag_shutdown;
+	__u32 vdiag_src_cid;
+	__u32 vdiag_src_port;
+	__u32 vdiag_dst_cid;
+	__u32 vdiag_dst_port;
+	__u32 vdiag_ino;
+	__u32 vdiag_cookie[2];
+};
+
+struct vsock_diag_req {
+	__u8 sdiag_family;
+	__u8 sdiag_protocol;
+	__u16 pad;
+	__u32 vdiag_states;
+	__u32 vdiag_ino;
+	__u32 vdiag_show;
+	__u32 vdiag_cookie[2];
+};
+
+typedef void (*btf_trace_virtio_transport_alloc_pkt)(void *, __u32, __u32, __u32, __u32, __u32, __u16, __u16, __u32);
+
+typedef void (*btf_trace_virtio_transport_recv_pkt)(void *, __u32, __u32, __u32, __u32, __u32, __u16, __u16, __u32, __u32, __u32);
+
+enum virtio_vsock_op {
+	VIRTIO_VSOCK_OP_INVALID = 0,
+	VIRTIO_VSOCK_OP_REQUEST = 1,
+	VIRTIO_VSOCK_OP_RESPONSE = 2,
+	VIRTIO_VSOCK_OP_RST = 3,
+	VIRTIO_VSOCK_OP_SHUTDOWN = 4,
+	VIRTIO_VSOCK_OP_RW = 5,
+	VIRTIO_VSOCK_OP_CREDIT_UPDATE = 6,
+	VIRTIO_VSOCK_OP_CREDIT_REQUEST = 7,
+};
+
+enum virtio_vsock_shutdown {
+	VIRTIO_VSOCK_SHUTDOWN_RCV = 1,
+	VIRTIO_VSOCK_SHUTDOWN_SEND = 2,
+};
+
+enum af_vsockmon_transport {
+	AF_VSOCK_TRANSPORT_UNKNOWN = 0,
+	AF_VSOCK_TRANSPORT_NO_INFO = 1,
+	AF_VSOCK_TRANSPORT_VIRTIO = 2,
+};
+
+enum af_vsockmon_op {
+	AF_VSOCK_OP_UNKNOWN = 0,
+	AF_VSOCK_OP_CONNECT = 1,
+	AF_VSOCK_OP_DISCONNECT = 2,
+	AF_VSOCK_OP_CONTROL = 3,
+	AF_VSOCK_OP_PAYLOAD = 4,
+};
+
+enum virtio_vsock_type {
+	VIRTIO_VSOCK_TYPE_STREAM = 1,
+	VIRTIO_VSOCK_TYPE_SEQPACKET = 2,
+};
+
+struct trace_event_raw_virtio_transport_alloc_pkt {
+	struct trace_entry ent;
+	__u32 src_cid;
+	__u32 src_port;
+	__u32 dst_cid;
+	__u32 dst_port;
+	__u32 len;
+	__u16 type;
+	__u16 op;
+	__u32 flags;
+	char __data[0];
+};
+
+struct trace_event_raw_virtio_transport_recv_pkt {
+	struct trace_entry ent;
+	__u32 src_cid;
+	__u32 src_port;
+	__u32 dst_cid;
+	__u32 dst_port;
+	__u32 len;
+	__u16 type;
+	__u16 op;
+	__u32 flags;
+	__u32 buf_alloc;
+	__u32 fwd_cnt;
+	char __data[0];
+};
+
+struct virtio_vsock_sock {
+	struct vsock_sock *vsk;
+	spinlock_t tx_lock;
+	spinlock_t rx_lock;
+	u32 tx_cnt;
+	u32 peer_fwd_cnt;
+	u32 peer_buf_alloc;
+	u32 fwd_cnt;
+	u32 last_fwd_cnt;
+	u32 rx_bytes;
+	u32 buf_alloc;
+	struct sk_buff_head rx_queue;
+	u32 msg_count;
+};
+
+struct virtio_vsock_pkt_info {
+	u32 remote_cid;
+	u32 remote_port;
+	struct vsock_sock *vsk;
+	struct msghdr *msg;
+	u32 pkt_len;
+	u16 type;
+	u16 op;
+	u32 flags;
+	bool reply;
+};
+
+struct trace_event_data_offsets_virtio_transport_alloc_pkt {};
+
+struct trace_event_data_offsets_virtio_transport_recv_pkt {};
+
+struct af_vsockmon_hdr {
+	__le64 src_cid;
+	__le64 dst_cid;
+	__le32 src_port;
+	__le32 dst_port;
+	__le16 op;
+	__le16 transport;
+	__le16 len;
+	__u8 reserved[2];
+};
+
+struct vsock_loopback {
+	struct workqueue_struct *workqueue;
+	struct sk_buff_head pkt_queue;
+	struct work_struct pkt_work;
+};
+
+struct xdp_ring;
+
+struct xsk_queue {
+	u32 ring_mask;
+	u32 nentries;
+	u32 cached_prod;
+	u32 cached_cons;
+	struct xdp_ring *ring;
+	u64 invalid_descs;
+	u64 queue_empty_descs;
+	size_t ring_vmalloc_size;
+};
+
+struct xdp_ring {
+	u32 producer;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad1;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 consumer;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad2;
+	u32 flags;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	u32 pad3;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct xdp_rxtx_ring {
+	struct xdp_ring ptrs;
+	struct xdp_desc desc[0];
+};
+
+struct xdp_umem_ring {
+	struct xdp_ring ptrs;
+	u64 desc[0];
+};
+
+struct xsk_map;
+
+struct xsk_map_node {
+	struct list_head node;
+	struct xsk_map *map;
+	struct xdp_sock __attribute__((btf_type_tag("rcu"))) **map_entry;
+};
+
+struct xsk_map {
+	struct bpf_map map;
+	spinlock_t lock;
+	atomic_t count;
+	struct xdp_sock __attribute__((btf_type_tag("rcu"))) *xsk_map[0];
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+	long: 64;
+};
+
+struct sockaddr_xdp {
+	__u16 sxdp_family;
+	__u16 sxdp_flags;
+	__u32 sxdp_ifindex;
+	__u32 sxdp_queue_id;
+	__u32 sxdp_shared_umem_fd;
+};
+
+struct xdp_ring_offset_v1 {
+	__u64 producer;
+	__u64 consumer;
+	__u64 desc;
+};
+
+struct parsed_desc {
+	u32 mb;
+	u32 valid;
+};
+
+struct xdp_umem_reg {
+	__u64 addr;
+	__u64 len;
+	__u32 chunk_size;
+	__u32 headroom;
+	__u32 flags;
+};
+
+struct xdp_ring_offset {
+	__u64 producer;
+	__u64 consumer;
+	__u64 desc;
+	__u64 flags;
+};
+
+struct xdp_mmap_offsets {
+	struct xdp_ring_offset rx;
+	struct xdp_ring_offset tx;
+	struct xdp_ring_offset fr;
+	struct xdp_ring_offset cr;
+};
+
+struct xdp_options {
+	__u32 flags;
+};
+
+struct xdp_statistics {
+	__u64 rx_dropped;
+	__u64 rx_invalid_descs;
+	__u64 tx_invalid_descs;
+	__u64 rx_ring_full;
+	__u64 rx_fill_ring_empty_descs;
+	__u64 tx_ring_empty_descs;
+};
+
+struct xdp_mmap_offsets_v1 {
+	struct xdp_ring_offset_v1 rx;
+	struct xdp_ring_offset_v1 tx;
+	struct xdp_ring_offset_v1 fr;
+	struct xdp_ring_offset_v1 cr;
+};
+
+struct xsk_dma_map {
+	dma_addr_t *dma_pages;
+	struct device *dev;
+	struct net_device *netdev;
+	refcount_t users;
+	struct list_head list;
+	u32 dma_pages_cnt;
+	bool dma_need_sync;
+};
+
+struct pcibios_fwaddrmap {
+	struct list_head list;
+	struct pci_dev *dev;
+	resource_size_t fw_addr[17];
+};
+
+struct pci_check_idx_range {
+	int start;
+	int end;
+};
+
+struct pci_raw_ops {
+	int (*read)(unsigned int, unsigned int, unsigned int, int, int, u32 *);
+	int (*write)(unsigned int, unsigned int, unsigned int, int, int, u32);
+};
+
+struct pci_mmcfg_region {
+	struct list_head list;
+	struct resource res;
+	u64 address;
+	char *virt;
+	u16 segment;
+	u8 start_bus;
+	u8 end_bus;
+	char name[30];
+};
+
+struct pci_mmcfg_hostbridge_probe {
+	u32 bus;
+	u32 devfn;
+	u32 vendor;
+	u32 device;
+	const char * (*probe)();
+};
+
+struct acpi_table_mcfg {
+	struct acpi_table_header header;
+	u8 reserved[8];
+};
+
+struct acpi_mcfg_allocation {
+	u64 address;
+	u16 pci_segment;
+	u8 start_bus_number;
+	u8 end_bus_number;
+	u32 reserved;
+};
+
+typedef bool (*check_reserved_t)(u64, u64, enum e820_type);
+
+struct pci_root_info {
+	struct acpi_pci_root_info common;
+	struct pci_sysdata sd;
+	bool mcfg_added;
+	u8 start_bus;
+	u8 end_bus;
+};
+
+struct irq_info___2 {
+	u8 bus;
+	u8 devfn;
+	struct {
+		u8 link;
+		u16 bitmap;
+	} __attribute__((packed)) irq[4];
+	u8 slot;
+	u8 rfu;
+};
+
+struct irq_routing_table {
+	u32 signature;
+	u16 version;
+	u16 size;
+	u8 rtr_bus;
+	u8 rtr_devfn;
+	u16 exclusive_irqs;
+	u16 rtr_vendor;
+	u16 rtr_device;
+	u32 miniport_data;
+	u8 rfu[11];
+	u8 checksum;
+	struct irq_info___2 slots[0];
+};
+
+struct irq_router {
+	char *name;
+	u16 vendor;
+	u16 device;
+	int (*get)(struct pci_dev *, struct pci_dev *, int);
+	int (*set)(struct pci_dev *, struct pci_dev *, int, int);
+	int (*lvl)(struct pci_dev *, struct pci_dev *, int, int);
+};
+
+struct irq_router_handler {
+	u16 vendor;
+	int (*probe)(struct irq_router *, struct pci_dev *, u16);
+};
+
+struct irt_routing_table {
+	u32 signature;
+	u8 size;
+	u8 used;
+	u16 exclusive_irqs;
+	struct irq_info___2 slots[0];
+};
+
+enum pci_bf_sort_state {
+	pci_bf_sort_default = 0,
+	pci_force_nobf = 1,
+	pci_force_bf = 2,
+	pci_dmi_bf = 3,
+};
+
+struct pci_setup_rom {
+	struct setup_data data;
+	uint16_t vendor;
+	uint16_t devid;
+	uint64_t pcilen;
+	unsigned long segment;
+	unsigned long bus;
+	unsigned long device;
+	unsigned long function;
+	uint8_t romdata[0];
+};
+
+struct pci_root_res {
+	struct list_head list;
+	struct resource res;
+};
+
+struct pci_root_info___2 {
+	struct list_head list;
+	char name[12];
+	struct list_head resources;
+	struct resource busn;
+	int node;
+	int link;
+};
+
+struct amd_hostbridge {
+	u32 bus;
+	u32 slot;
+	u32 device;
+};
+
+struct saved_msr;
+
+struct saved_msrs {
+	unsigned int num;
+	struct saved_msr *array;
+};
+
+struct saved_context {
+	struct pt_regs regs;
+	u16 ds;
+	u16 es;
+	u16 fs;
+	u16 gs;
+	unsigned long kernelmode_gs_base;
+	unsigned long usermode_gs_base;
+	unsigned long fs_base;
+	unsigned long cr0;
+	unsigned long cr2;
+	unsigned long cr3;
+	unsigned long cr4;
+	u64 misc_enable;
+	struct saved_msrs saved_msrs;
+	unsigned long efer;
+	u16 gdt_pad;
+	struct desc_ptr gdt_desc;
+	u16 idt_pad;
+	struct desc_ptr idt;
+	u16 ldt;
+	u16 tss;
+	unsigned long tr;
+	unsigned long safety;
+	unsigned long return_address;
+	bool misc_enable_saved;
+} __attribute__((packed));
+
+struct saved_msr {
+	bool valid;
+	struct msr_info info;
+};
+
+typedef int (*pm_cpu_match_t)(const struct x86_cpu_id *);
+
+struct msr_enumeration {
+	u32 msr_no;
+	u32 feature;
+};
+
+typedef struct elf32_hdr Elf32_Ehdr;
+
+typedef struct elf32_phdr Elf32_Phdr;
+
+typedef struct elf64_phdr Elf64_Phdr;
+
+typedef struct elf32_note Elf32_Nhdr;
+
+struct compress_format {
+	unsigned char magic[2];
+	const char *name;
+	decompress_fn decompressor;
+};
+
+enum cpio_fields {
+	C_MAGIC = 0,
+	C_INO = 1,
+	C_MODE = 2,
+	C_UID = 3,
+	C_GID = 4,
+	C_NLINK = 5,
+	C_MTIME = 6,
+	C_FILESIZE = 7,
+	C_MAJ = 8,
+	C_MIN = 9,
+	C_RMAJ = 10,
+	C_RMIN = 11,
+	C_NAMESIZE = 12,
+	C_CHKSUM = 13,
+	C_NFIELDS = 14,
+};
+
+struct fprop_local_single {
+	unsigned long events;
+	unsigned int period;
+	raw_spinlock_t lock;
+};
+
+struct ida_bitmap {
+	unsigned long bitmap[16];
+};
+
+struct klist_waiter {
+	struct list_head list;
+	struct klist_node *node;
+	struct task_struct *process;
+	int woken;
+};
+
+struct uevent_sock {
+	struct list_head list;
+	struct sock *sk;
+};
+
+typedef void (*btf_trace_ma_op)(void *, const char *, struct ma_state *);
+
+typedef void (*btf_trace_ma_read)(void *, const char *, struct ma_state *);
+
+typedef void (*btf_trace_ma_write)(void *, const char *, struct ma_state *, unsigned long, void *);
+
+enum maple_type {
+	maple_dense = 0,
+	maple_leaf_64 = 1,
+	maple_range_64 = 2,
+	maple_arange_64 = 3,
+};
+
+struct maple_pnode;
+
+struct maple_metadata {
+	unsigned char end;
+	unsigned char gap;
+};
+
+struct maple_range_64 {
+	struct maple_pnode *parent;
+	unsigned long pivot[15];
+	union {
+		void __attribute__((btf_type_tag("rcu"))) *slot[16];
+		struct {
+			void __attribute__((btf_type_tag("rcu"))) *pad[15];
+			struct maple_metadata meta;
+		};
+	};
+};
+
+struct maple_arange_64 {
+	struct maple_pnode *parent;
+	unsigned long pivot[9];
+	void __attribute__((btf_type_tag("rcu"))) *slot[10];
+	unsigned long gap[10];
+	struct maple_metadata meta;
+};
+
+struct maple_node {
+	union {
+		struct {
+			struct maple_pnode *parent;
+			void __attribute__((btf_type_tag("rcu"))) *slot[31];
+		};
+		struct {
+			void *pad;
+			struct callback_head rcu;
+			struct maple_enode *piv_parent;
+			unsigned char parent_slot;
+			enum maple_type type;
+			unsigned char slot_len;
+			unsigned int ma_flags;
+		};
+		struct maple_range_64 mr64;
+		struct maple_arange_64 ma64;
+		struct maple_alloc alloc;
+	};
+};
+
+struct trace_event_raw_ma_op {
+	struct trace_entry ent;
+	const char *fn;
+	unsigned long min;
+	unsigned long max;
+	unsigned long index;
+	unsigned long last;
+	void *node;
+	char __data[0];
+};
+
+struct trace_event_raw_ma_read {
+	struct trace_entry ent;
+	const char *fn;
+	unsigned long min;
+	unsigned long max;
+	unsigned long index;
+	unsigned long last;
+	void *node;
+	char __data[0];
+};
+
+struct trace_event_raw_ma_write {
+	struct trace_entry ent;
+	const char *fn;
+	unsigned long min;
+	unsigned long max;
+	unsigned long index;
+	unsigned long last;
+	unsigned long piv;
+	void *val;
+	void *node;
+	char __data[0];
+};
+
+struct maple_topiary {
+	struct maple_pnode *parent;
+	struct maple_enode *next;
+};
+
+struct ma_wr_state {
+	struct ma_state *mas;
+	struct maple_node *node;
+	unsigned long r_min;
+	unsigned long r_max;
+	enum maple_type type;
+	unsigned char offset_end;
+	unsigned char node_end;
+	unsigned long *pivots;
+	unsigned long end_piv;
+	void __attribute__((btf_type_tag("rcu"))) **slots;
+	void *entry;
+	void *content;
+};
+
+struct maple_big_node {
+	struct maple_pnode *parent;
+	unsigned long pivot[33];
+	union {
+		struct maple_enode *slot[34];
+		struct {
+			unsigned long padding[21];
+			unsigned long gap[21];
+		};
+	};
+	unsigned char b_end;
+	enum maple_type type;
+};
+
+struct ma_topiary;
+
+struct maple_subtree_state {
+	struct ma_state *orig_l;
+	struct ma_state *orig_r;
+	struct ma_state *l;
+	struct ma_state *m;
+	struct ma_state *r;
+	struct ma_topiary *free;
+	struct ma_topiary *destroy;
+	struct maple_big_node *bn;
+};
+
+struct ma_topiary {
+	struct maple_enode *head;
+	struct maple_enode *tail;
+	struct maple_tree *mtree;
+};
+
+struct trace_event_data_offsets_ma_op {};
+
+struct trace_event_data_offsets_ma_read {};
+
+struct trace_event_data_offsets_ma_write {};
+
+struct radix_tree_preload {
+	local_lock_t lock;
+	unsigned int nr;
+	struct xa_node *nodes;
+};
+
+struct printf_spec {
+	unsigned int type: 8;
+	int field_width: 24;
+	unsigned int flags: 8;
+	unsigned int base: 8;
+	int precision: 16;
+};
+
+struct page_flags_fields {
+	int width;
+	int shift;
+	int mask;
+	const struct printf_spec *spec;
+	const char *name;
+};
+
+enum format_type {
+	FORMAT_TYPE_NONE = 0,
+	FORMAT_TYPE_WIDTH = 1,
+	FORMAT_TYPE_PRECISION = 2,
+	FORMAT_TYPE_CHAR = 3,
+	FORMAT_TYPE_STR = 4,
+	FORMAT_TYPE_PTR = 5,
+	FORMAT_TYPE_PERCENT_CHAR = 6,
+	FORMAT_TYPE_INVALID = 7,
+	FORMAT_TYPE_LONG_LONG = 8,
+	FORMAT_TYPE_ULONG = 9,
+	FORMAT_TYPE_LONG = 10,
+	FORMAT_TYPE_UBYTE = 11,
+	FORMAT_TYPE_BYTE = 12,
+	FORMAT_TYPE_USHORT = 13,
+	FORMAT_TYPE_SHORT = 14,
+	FORMAT_TYPE_UINT = 15,
+	FORMAT_TYPE_INT = 16,
+	FORMAT_TYPE_SIZE_T = 17,
+	FORMAT_TYPE_PTRDIFF = 18,
+};
+
+enum {
+	st_wordstart = 0,
+	st_wordcmp = 1,
+	st_wordskip = 2,
+};
+
+enum {
+	st_wordstart___2 = 0,
+	st_wordcmp___2 = 1,
+	st_wordskip___2 = 2,
+	st_bufcpy = 3,
+};
+
+enum reg_type {
+	REG_TYPE_RM = 0,
+	REG_TYPE_REG = 1,
+	REG_TYPE_INDEX = 2,
+	REG_TYPE_BASE = 3,
+};
+
+enum insn_mmio_type {
+	INSN_MMIO_DECODE_FAILED = 0,
+	INSN_MMIO_WRITE = 1,
+	INSN_MMIO_WRITE_IMM = 2,
+	INSN_MMIO_READ = 3,
+	INSN_MMIO_READ_ZERO_EXTEND = 4,
+	INSN_MMIO_READ_SIGN_EXTEND = 5,
+	INSN_MMIO_MOVS = 6,
+};
+
+#ifndef BPF_NO_PRESERVE_ACCESS_INDEX
+#pragma clang attribute pop
+#endif
+
+#endif /* __VMLINUX_H__ */
diff --git a/loader/Android.bp b/loader/Android.bp
index 1e7ece8..1e68f92 100644
--- a/loader/Android.bp
+++ b/loader/Android.bp
@@ -37,7 +37,6 @@
             },
         },
     },
-
     shared_libs: [
         "libbase",
         "libutils",
@@ -50,12 +49,28 @@
         "bpf_headers",
     ],
     export_include_dirs: ["include"],
+    defaults: ["bpf_cc_defaults"],
+}
 
-    defaults: ["bpf_defaults"],
+rust_bindgen {
+    name: "libbpf_android_bindgen",
+    crate_name: "bpf_android_bindgen",
+    wrapper_src: "include/libbpf_android.h",
+    source_stem: "bindings",
+    bindgen_flags: [
+        "--verbose",
+    ],
     cflags: [
         "-Werror",
         "-Wall",
         "-Wextra",
+        "-Wno-pragma-once-outside-header",
+    ],
+    shared_libs: [
+        "libbase",
+        "libutils",
+        "liblog",
+        "libbpf_android",
     ],
 }
 
@@ -66,10 +81,8 @@
     srcs: [
         "BpfLoadTest.cpp",
     ],
-    defaults: ["bpf_defaults"],
+    defaults: ["bpf_cc_defaults"],
     cflags: [
-        "-Wall",
-        "-Werror",
         "-Wno-error=unused-variable",
     ],
     static_libs: [
@@ -89,29 +102,18 @@
     require_root: true,
 }
 
-cc_binary {
+rust_binary {
     name: "bpfloader",
-
-    defaults: ["bpf_defaults"],
-    cflags: [
-        "-Wall",
-        "-Werror",
-        "-Wthread-safety",
-    ],
-    sanitize: {
-        integer_overflow: true,
-    },
-
-    header_libs: ["bpf_headers"],
-    shared_libs: [
-        "libbase",
-        "liblog",
-    ],
-    static_libs: ["libbpf_android"],
+    cfgs: select(release_flag("RELEASE_BPF_ENABLE_LIBBPF"), {
+        true: ["enable_libbpf"],
+        default: [],
+    }),
     srcs: [
-        "BpfLoader.cpp",
+        "bpfloader.rs",
     ],
-
+    rustlibs: [
+        "libbpf_android_bindgen",
+    ],
     required: [
         "timeInState.o",
     ],
diff --git a/loader/BpfLoadTest.cpp b/loader/BpfLoadTest.cpp
index e14aa7b..4ec89be 100644
--- a/loader/BpfLoadTest.cpp
+++ b/loader/BpfLoadTest.cpp
@@ -25,12 +25,10 @@
 #include "bpf/BpfUtils.h"
 #include "include/libbpf_android.h"
 
-using ::testing::TestWithParam;
-
 namespace android {
 namespace bpf {
 
-class BpfLoadTest : public TestWithParam<std::string> {
+class BpfLoadTest : public ::testing::Test {
   protected:
     BpfLoadTest() {}
     int mProgFd;
@@ -51,16 +49,16 @@
          */
         if (!isAtLeastKernelVersion(5, 11, 0)) EXPECT_EQ(setrlimitForTest(), 0);
 
-        mTpProgPath = "/sys/fs/bpf/prog_" + GetParam() + "_tracepoint_sched_sched_switch";
+        mTpProgPath = "/sys/fs/bpf/prog_bpfLoadTpProg_tracepoint_sched_sched_switch";
         unlink(mTpProgPath.c_str());
 
-        mTpNeverLoadProgPath = "/sys/fs/bpf/prog_" + GetParam() + "_tracepoint_sched_sched_wakeup";
+        mTpNeverLoadProgPath = "/sys/fs/bpf/prog_bpfLoadTpProg_tracepoint_sched_sched_wakeup";
         unlink(mTpNeverLoadProgPath.c_str());
 
-        mTpMapPath = "/sys/fs/bpf/map_" + GetParam() + "_cpu_pid_map";
+        mTpMapPath = "/sys/fs/bpf/map_bpfLoadTpProg_cpu_pid_map";
         unlink(mTpMapPath.c_str());
 
-        auto progPath = android::base::GetExecutableDirectory() + "/" + GetParam() + ".o";
+        auto progPath = android::base::GetExecutableDirectory() + "/bpfLoadTpProg.o";
         bool critical = true;
 
         bpf_prog_type kAllowed[] = {
@@ -75,11 +73,11 @@
         };
         EXPECT_EQ(android::bpf::loadProg(progPath.c_str(), &critical, loc), -1);
 
-        EXPECT_EQ(android::bpf::loadProg(progPath.c_str(), &critical), 0);
+        ASSERT_EQ(android::bpf::loadProg(progPath.c_str(), &critical), 0);
         EXPECT_EQ(false, critical);
 
         mProgFd = retrieveProgram(mTpProgPath.c_str());
-        EXPECT_GT(mProgFd, 0);
+        ASSERT_GT(mProgFd, 0);
 
         int ret = bpf_attach_tracepoint(mProgFd, "sched", "sched_switch");
         EXPECT_NE(ret, 0);
@@ -116,18 +114,16 @@
     }
 
     void checkKernelVersionEnforced() {
-        EXPECT_EQ(retrieveProgram(mTpNeverLoadProgPath.c_str()), -1);
-        EXPECT_EQ(errno, ENOENT);
+        ASSERT_EQ(retrieveProgram(mTpNeverLoadProgPath.c_str()), -1);
+        ASSERT_EQ(errno, ENOENT);
     }
 };
 
-INSTANTIATE_TEST_SUITE_P(BpfLoadTests, BpfLoadTest, ::testing::Values("bpfLoadTpProg"));
-
-TEST_P(BpfLoadTest, bpfCheckMap) {
+TEST_F(BpfLoadTest, bpfCheckMap) {
     checkMapNonZero();
 }
 
-TEST_P(BpfLoadTest, bpfCheckMinKernelVersionEnforced) {
+TEST_F(BpfLoadTest, bpfCheckMinKernelVersionEnforced) {
     checkKernelVersionEnforced();
 }
 
diff --git a/loader/BpfLoader.cpp b/loader/BpfLoader.cpp
deleted file mode 100644
index 3f13291..0000000
--- a/loader/BpfLoader.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "BpfLoader"
-
-#include <arpa/inet.h>
-#include <dirent.h>
-#include <elf.h>
-#include <error.h>
-#include <fcntl.h>
-#include <inttypes.h>
-#include <linux/bpf.h>
-#include <linux/unistd.h>
-#include <net/if.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sys/mman.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <android-base/logging.h>
-#include <android-base/macros.h>
-#include <android-base/stringprintf.h>
-#include <android-base/strings.h>
-#include <android-base/unique_fd.h>
-#include <libbpf_android.h>
-#include <log/log.h>
-#include "BpfSyscallWrappers.h"
-#include "bpf/BpfUtils.h"
-
-using android::base::EndsWith;
-using std::string;
-
-// Networking-related program types are limited to the Tethering Apex
-// to prevent things from breaking due to conflicts on mainline updates
-// (exception made for socket filters, ie. xt_bpf for potential use in iptables,
-// or for attaching to sockets directly)
-constexpr bpf_prog_type kPlatformAllowedProgTypes[] = {
-        BPF_PROG_TYPE_KPROBE,
-        BPF_PROG_TYPE_PERF_EVENT,
-        BPF_PROG_TYPE_SOCKET_FILTER,
-        BPF_PROG_TYPE_TRACEPOINT,
-        BPF_PROG_TYPE_UNSPEC,  // Will be replaced with fuse bpf program type
-};
-
-constexpr bpf_prog_type kUprobestatsAllowedProgTypes[] = {
-        BPF_PROG_TYPE_KPROBE,
-};
-
-// see b/162057235. For arbitrary program types, the concern is that due to the lack of
-// SELinux access controls over BPF program attachpoints, we have no way to control the
-// attachment of programs to shared resources (or to detect when a shared resource
-// has one BPF program replace another that is attached there)
-constexpr bpf_prog_type kVendorAllowedProgTypes[] = {
-        BPF_PROG_TYPE_SOCKET_FILTER,
-};
-
-const android::bpf::Location locations[] = {
-        // Core operating system
-        {
-                .dir = "/system/etc/bpf/",
-                .prefix = "",
-                .allowedProgTypes = kPlatformAllowedProgTypes,
-                .allowedProgTypesLength = arraysize(kPlatformAllowedProgTypes),
-        },
-        // uprobestats
-        {
-                .dir = "/system/etc/bpf/uprobestats/",
-                .prefix = "uprobestats/",
-                .allowedProgTypes = kUprobestatsAllowedProgTypes,
-                .allowedProgTypesLength = arraysize(kUprobestatsAllowedProgTypes),
-        },
-        // Vendor operating system
-        {
-                .dir = "/vendor/etc/bpf/",
-                .prefix = "vendor/",
-                .allowedProgTypes = kVendorAllowedProgTypes,
-                .allowedProgTypesLength = arraysize(kVendorAllowedProgTypes),
-        },
-};
-
-int loadAllElfObjects(const android::bpf::Location& location) {
-    int retVal = 0;
-    DIR* dir;
-    struct dirent* ent;
-
-    if ((dir = opendir(location.dir)) != NULL) {
-        while ((ent = readdir(dir)) != NULL) {
-            string s = ent->d_name;
-            if (!EndsWith(s, ".o")) continue;
-
-            string progPath(location.dir);
-            progPath += s;
-
-            bool critical;
-            int ret = android::bpf::loadProg(progPath.c_str(), &critical, location);
-            if (ret) {
-                if (critical) retVal = ret;
-                ALOGE("Failed to load object: %s, ret: %s", progPath.c_str(), std::strerror(-ret));
-            } else {
-                ALOGV("Loaded object: %s", progPath.c_str());
-            }
-        }
-        closedir(dir);
-    }
-    return retVal;
-}
-
-int createSysFsBpfSubDir(const char* const prefix) {
-    if (*prefix) {
-        mode_t prevUmask = umask(0);
-
-        string s = "/sys/fs/bpf/";
-        s += prefix;
-
-        errno = 0;
-        int ret = mkdir(s.c_str(), S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO);
-        if (ret && errno != EEXIST) {
-            const int err = errno;
-            ALOGE("Failed to create directory: %s, ret: %s", s.c_str(), std::strerror(err));
-            return -err;
-        }
-
-        umask(prevUmask);
-    }
-    return 0;
-}
-
-int main(int __unused argc, char** argv, char * const envp[]) {
-    android::base::InitLogging(argv, &android::base::KernelLogger);
-
-    // Load all ELF objects, create programs and maps, and pin them
-    for (const auto& location : locations) {
-        if (createSysFsBpfSubDir(location.prefix) || loadAllElfObjects(location)) {
-            ALOGE("=== CRITICAL FAILURE LOADING BPF PROGRAMS FROM %s ===", location.dir);
-            ALOGE("If this triggers reliably, you're probably missing kernel options or patches.");
-            ALOGE("If this triggers randomly, you might be hitting some memory allocation "
-                  "problems or startup script race.");
-            ALOGE("--- DO NOT EXPECT SYSTEM TO BOOT SUCCESSFULLY ---");
-            sleep(20);
-            return 120;
-        }
-    }
-
-    const char * args[] = { "/apex/com.android.tethering/bin/netbpfload", "done", NULL, };
-    execve(args[0], (char**)args, envp);
-    ALOGE("FATAL: execve(): %d[%s]", errno, strerror(errno));
-    return 121;
-}
diff --git a/loader/Loader.cpp b/loader/Loader.cpp
index 6ec7458..cf6bf36 100644
--- a/loader/Loader.cpp
+++ b/loader/Loader.cpp
@@ -33,7 +33,7 @@
 
 #include "BpfSyscallWrappers.h"
 #include "bpf/BpfUtils.h"
-#include "bpf/bpf_map_def.h"
+#include "bpf_map_def.h"
 #include "include/libbpf_android.h"
 
 #include <cstdlib>
@@ -46,6 +46,7 @@
 
 #include <android-base/cmsg.h>
 #include <android-base/file.h>
+#include <android-base/logging.h>
 #include <android-base/strings.h>
 #include <android-base/unique_fd.h>
 
@@ -54,14 +55,13 @@
 // Size of the BPF log buffer for verifier logging
 #define BPF_LOAD_LOG_SZ 0xfffff
 
-// Unspecified attach type is 0 which is BPF_CGROUP_INET_INGRESS.
-#define BPF_ATTACH_TYPE_UNSPEC BPF_CGROUP_INET_INGRESS
-
+using android::base::EndsWith;
 using android::base::StartsWith;
 using android::base::unique_fd;
 using std::ifstream;
 using std::ios;
 using std::optional;
+using std::strerror;
 using std::string;
 using std::vector;
 
@@ -83,7 +83,6 @@
 typedef struct {
     const char* name;
     enum bpf_prog_type type;
-    enum bpf_attach_type expected_attach_type;
 } sectionType;
 
 /*
@@ -97,18 +96,17 @@
  * Instead use the DEFINE_(BPF|XDP)_(PROG|MAP)... & LICENSE/CRITICAL macros.
  */
 sectionType sectionNameTypes[] = {
-        {"kprobe/",        BPF_PROG_TYPE_KPROBE,           BPF_ATTACH_TYPE_UNSPEC},
-        {"kretprobe/",     BPF_PROG_TYPE_KPROBE,           BPF_ATTACH_TYPE_UNSPEC},
-        {"perf_event/",    BPF_PROG_TYPE_PERF_EVENT,       BPF_ATTACH_TYPE_UNSPEC},
-        {"skfilter/",      BPF_PROG_TYPE_SOCKET_FILTER,    BPF_ATTACH_TYPE_UNSPEC},
-        {"tracepoint/",    BPF_PROG_TYPE_TRACEPOINT,       BPF_ATTACH_TYPE_UNSPEC},
-        {"uprobe/",        BPF_PROG_TYPE_KPROBE,           BPF_ATTACH_TYPE_UNSPEC},
-        {"uretprobe/",     BPF_PROG_TYPE_KPROBE,           BPF_ATTACH_TYPE_UNSPEC},
+        {"kprobe/",        BPF_PROG_TYPE_KPROBE},
+        {"kretprobe/",     BPF_PROG_TYPE_KPROBE},
+        {"perf_event/",    BPF_PROG_TYPE_PERF_EVENT},
+        {"skfilter/",      BPF_PROG_TYPE_SOCKET_FILTER},
+        {"tracepoint/",    BPF_PROG_TYPE_TRACEPOINT},
+        {"uprobe/",        BPF_PROG_TYPE_KPROBE},
+        {"uretprobe/",     BPF_PROG_TYPE_KPROBE},
 };
 
 typedef struct {
     enum bpf_prog_type type;
-    enum bpf_attach_type expected_attach_type;
     string name;
     vector<char> data;
     vector<char> rel_data;
@@ -301,12 +299,6 @@
     return BPF_PROG_TYPE_UNSPEC;
 }
 
-static enum bpf_attach_type getExpectedAttachType(string& name) {
-    for (auto& snt : sectionNameTypes)
-        if (StartsWith(name, snt.name)) return snt.expected_attach_type;
-    return BPF_ATTACH_TYPE_UNSPEC;
-}
-
 static string getSectionName(enum bpf_prog_type type)
 {
     for (auto& snt : sectionNameTypes)
@@ -424,9 +416,6 @@
             return -1;
         }
 
-        // This must be done before '/' is replaced with '_'.
-        cs_temp.expected_attach_type = getExpectedAttachType(name);
-
         string oldName = name;
 
         // convert all slashes to underscores
@@ -771,7 +760,6 @@
               .log_level = 1,
               .log_buf = ptr_to_u64(log_buf.data()),
               .log_size = static_cast<__u32>(log_buf.size()),
-              .expected_attach_type = cs[i].expected_attach_type,
             };
             strlcpy(req.prog_name, cs[i].name.c_str(), sizeof(req.prog_name));
             fd.reset(bpf(BPF_PROG_LOAD, req));
@@ -877,5 +865,172 @@
     return ret;
 }
 
+// Networking-related program types are limited to the Tethering Apex
+// to prevent things from breaking due to conflicts on mainline updates
+// (exception made for socket filters, ie. xt_bpf for potential use in iptables,
+// or for attaching to sockets directly)
+constexpr bpf_prog_type kPlatformAllowedProgTypes[] = {
+        BPF_PROG_TYPE_KPROBE,
+        BPF_PROG_TYPE_PERF_EVENT,
+        BPF_PROG_TYPE_SOCKET_FILTER,
+        BPF_PROG_TYPE_TRACEPOINT,
+        BPF_PROG_TYPE_UNSPEC,  // Will be replaced with fuse bpf program type
+};
+
+constexpr bpf_prog_type kMemEventsAllowedProgTypes[] = {
+        BPF_PROG_TYPE_TRACEPOINT,
+        BPF_PROG_TYPE_SOCKET_FILTER,
+};
+
+constexpr bpf_prog_type kUprobestatsAllowedProgTypes[] = {
+        BPF_PROG_TYPE_KPROBE,
+};
+
+// see b/162057235. For arbitrary program types, the concern is that due to the lack of
+// SELinux access controls over BPF program attachpoints, we have no way to control the
+// attachment of programs to shared resources (or to detect when a shared resource
+// has one BPF program replace another that is attached there)
+constexpr bpf_prog_type kVendorAllowedProgTypes[] = {
+        BPF_PROG_TYPE_SOCKET_FILTER,
+};
+
+const Location locations[] = {
+        // Core operating system
+        {
+                .dir = "/system/etc/bpf/",
+                .prefix = "",
+                .allowedProgTypes = kPlatformAllowedProgTypes,
+                .allowedProgTypesLength = arraysize(kPlatformAllowedProgTypes),
+        },
+        // memevents
+        {
+                .dir = "/system/etc/bpf/memevents/",
+                .prefix = "memevents/",
+                .allowedProgTypes = kMemEventsAllowedProgTypes,
+                .allowedProgTypesLength = arraysize(kMemEventsAllowedProgTypes),
+        },
+        // uprobestats
+        {
+                .dir = "/system/etc/bpf/uprobestats/",
+                .prefix = "uprobestats/",
+                .allowedProgTypes = kUprobestatsAllowedProgTypes,
+                .allowedProgTypesLength = arraysize(kUprobestatsAllowedProgTypes),
+        },
+        // Vendor operating system
+        {
+                .dir = "/vendor/etc/bpf/",
+                .prefix = "vendor/",
+                .allowedProgTypes = kVendorAllowedProgTypes,
+                .allowedProgTypesLength = arraysize(kVendorAllowedProgTypes),
+        },
+};
+
+int loadAllElfObjects(const Location& location) {
+    int retVal = 0;
+    DIR* dir;
+    struct dirent* ent;
+
+    if ((dir = opendir(location.dir)) != NULL) {
+        while ((ent = readdir(dir)) != NULL) {
+            string s = ent->d_name;
+            if (!EndsWith(s, ".o")) continue;
+
+            string progPath(location.dir);
+            progPath += s;
+
+            bool critical;
+            int ret = loadProg(progPath.c_str(), &critical, location);
+            if (ret) {
+                if (critical) retVal = ret;
+                ALOGE("Failed to load object: %s, ret: %s", progPath.c_str(), strerror(-ret));
+            } else {
+                ALOGV("Loaded object: %s", progPath.c_str());
+            }
+        }
+        closedir(dir);
+    }
+    return retVal;
+}
+
+int createSysFsBpfSubDir(const char* const prefix) {
+    if (*prefix) {
+        mode_t prevUmask = umask(0);
+
+        string s = "/sys/fs/bpf/";
+        s += prefix;
+
+        errno = 0;
+        int ret = mkdir(s.c_str(), S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO);
+        if (ret && errno != EEXIST) {
+            const int err = errno;
+            ALOGE("Failed to create directory: %s, ret: %s", s.c_str(), strerror(err));
+            return -err;
+        }
+
+        umask(prevUmask);
+    }
+    return 0;
+}
+
 }  // namespace bpf
 }  // namespace android
+
+// ----- extern C stuff for rust below here -----
+
+void initLogging() {
+    // since we only ever get called from mainline NetBpfLoad
+    // (see packages/modules/Connectivity/netbpfload/NetBpfLoad.cpp around line 516)
+    // and there no arguments, so we can just pretend/assume this is the case.
+    const char* argv[] = {"/system/bin/bpfloader", NULL};
+    android::base::InitLogging(const_cast<char**>(argv), &android::base::KernelLogger);
+}
+
+void createBpfFsSubDirectories() {
+    for (const auto& location : android::bpf::locations) {
+        if (android::bpf::createSysFsBpfSubDir(location.prefix)) {
+            exit(120);
+        }
+    }
+}
+
+void legacyBpfLoader() {
+    // Load all ELF objects, create programs and maps, and pin them
+    for (const auto& location : android::bpf::locations) {
+        if (android::bpf::loadAllElfObjects(location)) {
+            ALOGE("=== CRITICAL FAILURE LOADING BPF PROGRAMS FROM %s ===", location.dir);
+            ALOGE("If this triggers reliably, you're probably missing kernel options or patches.");
+            ALOGE("If this triggers randomly, you might be hitting some memory allocation "
+                  "problems or startup script race.");
+            ALOGE("--- DO NOT EXPECT SYSTEM TO BOOT SUCCESSFULLY ---");
+            sleep(20);
+            exit(121);
+        }
+    }
+}
+
+void execNetBpfLoadDone() {
+    const char* args[] = {"/apex/com.android.tethering/bin/netbpfload", "done", NULL};
+    execve(args[0], (char**)args, environ);
+    ALOGE("FATAL: execve(): %d[%s]", errno, strerror(errno));
+    exit(122);
+}
+
+void logVerbose(const char* msg) {
+    ALOGV("%s", msg);
+}
+
+void logDebug(const char* msg) {
+    ALOGD("%s", msg);
+}
+
+void logInfo(const char* msg) {
+    ALOGI("%s", msg);
+}
+
+void logWarn(const char* msg) {
+    ALOGW("%s", msg);
+}
+
+void logError(const char* msg) {
+    ALOGE("%s", msg);
+}
diff --git a/loader/bpfloader.rs b/loader/bpfloader.rs
new file mode 100644
index 0000000..ede1a29
--- /dev/null
+++ b/loader/bpfloader.rs
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//! BPF loader for system and vendor applications
+
+#[cfg(enable_libbpf)]
+fn load_libbpf_progs() {
+    // Libbpf loader functionality here.
+}
+
+#[cfg(not(enable_libbpf))]
+fn load_libbpf_progs() {
+    // Empty stub for feature flag disabled case
+}
+
+fn main() {
+    load_libbpf_progs();
+
+    // SAFETY: Linking in the existing legacy bpfloader functionality.
+    // Any of the four following bindgen functions can abort() or exit()
+    // on failure and execNetBpfLoadDone() execve()'s.
+    unsafe {
+        bpf_android_bindgen::initLogging();
+        bpf_android_bindgen::createBpfFsSubDirectories();
+        bpf_android_bindgen::legacyBpfLoader();
+        bpf_android_bindgen::execNetBpfLoadDone();
+    }
+}
diff --git a/loader/include/libbpf_android.h b/loader/include/libbpf_android.h
index 0a98a1d..8e5a887 100644
--- a/loader/include/libbpf_android.h
+++ b/loader/include/libbpf_android.h
@@ -17,6 +17,8 @@
 
 #pragma once
 
+#ifdef __cplusplus
+
 #include <linux/bpf.h>
 
 #include <fstream>
@@ -39,3 +41,25 @@
 
 }  // namespace bpf
 }  // namespace android
+
+extern "C" {
+#else // __cplusplus
+#define __noreturn
+#endif // __cplusplus
+
+// The C++ portion of the BpfLoader is exposed as 3 functions to be called in order.
+void initLogging();
+void createBpfFsSubDirectories();
+void legacyBpfLoader();
+__noreturn void execNetBpfLoadDone();
+
+// For logging from rust
+void logVerbose(const char* msg);
+void logDebug(const char* msg);
+void logInfo(const char* msg);
+void logWarn(const char* msg);
+void logError(const char* msg);
+
+#ifdef __cplusplus
+}  // extern C
+#endif
diff --git a/progs/Android.bp b/progs/Android.bp
index b044eb0..3d9c5a6 100644
--- a/progs/Android.bp
+++ b/progs/Android.bp
@@ -30,8 +30,4 @@
 bpf {
     name: "bpfRingbufProg.o",
     srcs: ["bpfRingbufProg.c"],
-    cflags: [
-        "-Wall",
-        "-Werror",
-    ],
 }
diff --git a/progs/bpfRingbufProg.c b/progs/bpfRingbufProg.c
index dec1615..4f268bf 100644
--- a/progs/bpfRingbufProg.c
+++ b/progs/bpfRingbufProg.c
@@ -21,14 +21,12 @@
 #define TEST_RINGBUF_MAGIC_NUM 12345
 
 // This ring buffer is for testing purposes only.
-DEFINE_BPF_RINGBUF_EXT(test_ringbuf, __u64, 4096, AID_ROOT, AID_ROOT, 0660, "", "", PRIVATE,
-                       BPFLOADER_MIN_VER, BPFLOADER_MAX_VER,
-                       LOAD_ON_ENG, LOAD_ON_USER, LOAD_ON_USERDEBUG);
+DEFINE_BPF_RINGBUF(test_ringbuf, __u64, 4096, AID_ROOT, AID_ROOT, 0660);
 
 // This program is for test purposes only - it should never be attached to a
 // socket, only executed manually with BPF_PROG_RUN.
 DEFINE_BPF_PROG_KVER("skfilter/ringbuf_test", AID_ROOT, AID_ROOT, test_ringbuf_prog, KVER(5, 8, 0))
-(void* unused_ctx) {
+(void* __unused ctx) {
     __u64* output = bpf_test_ringbuf_reserve();
     if (output == NULL) return 1;
 
